无效队列上的 C2H 完成
当 QDMA 在队列上接收到完成,并且此队列中具有无效上下文(以 C2H CMPT 上下文中的 Valid 位表示),那么此完成将被静默丢弃。
完整环上的 C2H 完成
完成环中的完成条目的最大数量比完成环中条目总数少 2。C2H 完成上下文中含有 PIDX 和 CIDX。这样即可支持 QDMA 计算完成环中的完成数。当 QDMA 在已满的队列上接收到完成时,QDMA 可采取以下操作:
- 使该队列的 C2H 完成上下文失效。
- 标记含错误的 C2H 完成上下文。
- 丢弃此完成。
- 发送标记为错误的“Status Descriptor”(状态描述符),前提是启用此操作。
- 如果启用且并非未完成,则发送中断。
- 发送含错误的标记响应。
- 将错误记录到 C2H 错误状态寄存器中。
含描述符错误的 C2H 完成
当 QDMA C2H 引擎遇到描述符错误时,在 C2H 完成引擎的上下文中会采取以下操作:
- 使该队列的 C2H 完成上下文失效。
- 标记含错误的 C2H 完成上下文。
- 将完成传出至完成环。它会被标记为错误。
- 如果启用且未完成,则发送含错误标记的状态描述符。
- 如果启用且并非未完成,则发送中断。请注意,完成引擎只能发送未完成的中断和/或状态描述符。这样做的意义是,如果遇到描述符错误时,中断恰好未完成,那么就不会向软件发送队列中断。尽管如此,如果软件未对错误加以掩码,那么仍会记录错误,且仍会发送错误中断
- 发送含错误的标记响应。
含无效 CIDX 的 C2H 完成
C2H 完成引擎具有相应逻辑用于检测 CIDX 更新中的 CIDX 值是否指向完成环中的空位置。检测到此类错误时,C2H 完成引擎会执行以下操作:
- 使完成上下文失效。
- 标记含错误的完成上下文。
- 将错误记录到 C2H 错误状态寄存器中。
端口 ID 不匹配
CMPT 上下文指定相应端口,基于此端口的 CMPT 应适用于该 CMPT 队列。如果传入 CMPT 中的 port_id
与 CMPT 上下文中的 port_id
不同,那么 CMPT 引擎会将传入 CMPT 作为错误定向的 CMPT 来处理并将其丢弃。它还会记录错误。请注意,发生 port_id
错误匹配时,CMPT 队列不会失效。