描述符提取 - 4.0 简体中文

QDMA Subsystem for PCI Express v4.0 产品指南 (PG302)

Document ID
PG302
Release Date
2022-05-20
Version
4.0 简体中文
图 1. 描述符提取流程
  1. 通过更新队列的描述符 PIDX,即可将描述符的可用性告知描述符引擎。这部分上下文将直接映射到 QDMA_DMAP_SEL_H2C_DSC_PIDX 和 QDMA_DMAP_SEL_C2H_DSC_PIDX 地址空间。
  2. 更新 PIDX 时,描述符引擎会根据上次提取的使用者索引 (CIDX) 来评估可用描述符的数量。通过流量管理器状态接口即可将新描述符的可用性传达给用户逻辑。
  3. 如果提取信用值已启用,那么需要用户逻辑来为应提取的每个描述符提供信用值。
  4. 如果描述符可用并且提取信用值已禁用或为非零值,则描述符引擎将向 PCIe 生成描述符提取。提取的描述符的数量由 PCIe 最大读取请求大小 (MRRS) 和描述符提取信用值(如果启用)加以进一步限定。由于完成空间不足,也可能会导致描述符提取停滞。在每个方向上,均为 C2H 和 H2C 各分配了 256 个条目用于描述符提取完成。每个条目宽度都与数据路径相同。如有足够空间可用,则允许继续进行提取。无论何时,任一给定队列仅限在 PCIe 上有一个待处理的描述符提取。
  5. 主机会接收读取请求并将描述符读取完成提供给描述符引擎。
  6. 描述符存储在缓冲器中,直到可将其卸载为止。如果在旁路模式下配置队列,则描述符将发送到描述符旁路输出端口。否则,将直接交付至 DMA 引擎。交付后,描述符提取完成缓冲器空间就将取消分配。
注释: 可用的描述符大小始终是 <ring size> - 2。无论何时,软件都不应将 PIDX 更新至超过 <ring size> - 2。

例如,如果队列大小为 8,其中包含条目索引 0 到 7,那么最后一个条目(索引 7)保留用于表示状态。该索引不应用于 PIDX 更新,并且 PIDX 更新应与 CIDX 永不相等。在此情况下,如果 CIDX 为 0,最大 PIDX 更新将为 6。