完成上下文结构 - 5.0 简体中文

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

Document ID
PG302
Release Date
2023-05-16
Version
5.0 简体中文

完成上下文供“Completion Engine”(完成引擎)使用。

表 1. 完成上下文结构定义
位宽 字段名称 描述
[256:183] 17   保留。初始化为 0。
[182:180] 3 port_id

端口 ID。完成引擎会根据此处配置的 port_id 检查其输入处接收到的事件的 port_id。如果检查失败,则丢弃输入,并在 C2H_ERR_STAT 寄存器中记录一个错误。以下是对 port_id 执行的检查:

1.s_axis_c2h_cmpt 接口上的所有事件。这包括 CMPT、即时数据、标记和 VirtIO 控制报文。

2.CMPT CIDX 指针更新(仅当更新来自 AXI 侧时才进行检查)。

[179] 1   保留。初始化为 0
[178:175] 4 baddr4_low

由于在此情况下支持的最小对齐是 64B,所以该字段必须为 0

[174:147] 28   保留。初始化为 0
[146] 1 dir_c2h

DMA 方向是 C2H。CMPT 引擎可用于管理 C2H 的完成/已用环以及 H2C 队列。

0x0:DMA 方向是 H2C

0x1:DMA 方向是 C2H

[145] 1   保留。初始化为 0
[144] 1 dis_int_on_vf 随 VF 禁用中断
[143] 1 int_aggr 中断聚合

设置此项即可在中断聚合模式下配置 QID

[142:132] 11 vec 中断矢量编号
131 1 at

地址转换

该位用于判定队列地址是否已转换。此信息将在 CMPT 和状态写入时发送到 PCIe。

0:地址未转换

1:地址已转换

130 1 ovf_chk_dis

完成环上溢检查禁用

如果此项置位,那么 CMPT 引擎不检查在完成环中写入完成条目是否会造成环溢出。由此导致 QDMA 始终传出完成,而不会首先检查是否会造成完成环上溢,并且也不会采取通常在遇到完成环上溢场景时所采取的任何操作。转而交由软件和用户逻辑通过协商来确保不会导致完成环上溢

[129] 1 full_upd 全面更新

如果此项复位,则忽略所有字段(Completion-CIDX-update 的 CIDX 除外)。仅将 CIDX 字段从更新复制到上下文中。

如果此项置位,那么 Completion CIDX update 即可在此上下文中更新下列字段:

  • timer_ix
  • counter_ix
  • trig_mode
  • en_int
  • en_stat_desc
[128] 1 timer_running 如果此项置位,表明该队列上有一个定时器正在运行。这个定时器用于对 CMPT 中断进行调节。理想情况下,软件必须确保在此 QID 上没有任何定时器正在运行,然后才能关闭队列。该字段供硬件在内部使用。软件必须将其初始化为 0,然后将其作为只读来处理。
[127] 1 user_trig_pend 如果此项置位,它表示用户逻辑发起的中断正在等待生成。用户逻辑可以通过 s_axis_c2h_cmpt_ctrl_user_trig 信号来请求中断。当用户逻辑请求中断,而在此 QID 上已有另一个中断等待处理时,该位即置位。当 QDMA 收到下一个 Completion CIDX update 时,此待处理的位是否生成中断取决于完成环中是否有任何条目等待读取。该字段供硬件在内部使用。软件必须将其初始化为 0,然后将其作为只读来处理。
[126:125] 2 err 表示完成上下文存在错误。这是由硬件写入的字段。软件必须将其初始化为 0,然后将其作为只读来处理。此处指出了下列错误:

0:无错误。

1:检测到一个来自软件的错误 CIDX 更新。

2:检测到描述符错误。

3:用户逻辑在完成环已满时发送了一个完成包。

[124] 1 valid 上下文有效。
[123:108] 16 cidx “Completion Ring Consumer Index”(完成环使用者索引)的硬件拷贝的当前值。
[107:92] 16 pidx 完成环生产者索引。这是由硬件写入的字段。软件必须将其初始化为 0,然后将其作为只读来处理。
[91:90] 2 desc_size 完成条目大小:

0:8B

1:16B

2:32B

3:64B

[89:32] 58 baddr 完成环的 64B 对齐基址:位 [63:6]。
[31:28] 4 qsize_idx 完成环大小索引。该索引会从 16 个寄存器(偏移 0x204 :0x240)中选出大小与其他环不同的那一个环。
[27] 1 color 完成时使用的颜色位。
[26:25] 2 int_st 中断状态:

0:ISR

1:TRIG

该字段供硬件在内部使用。软件必须将其初始化为 0,然后将其作为只读来处理。

解复位时,硬件初始化为 ISR 状态,对触发事件不敏感。如果软件需要中断或状态写入,它必须发送一个初始完成 CIDX 更新。这导致硬件进入 TRIG 状态,因此它变为对任何触发条件都敏感。

[24:21] 4 timer_idx 定时器寄存器索引,适用于基于 TIMER 的触发模式。
[20:17] 4 counter_idx 计数器寄存器索引,适用于基于 COUNT 的触发模式。
[16:13] 4   保留。初始化为 0
[12:5] 8 fnc_id 功能 ID
[4:2] 3 trig_mode

中断和完成状态写入触发模式:

0x0:Disabled

0x1:Every

0x2:reserved

0x3:User

0x4:User_Timer

0x5:reserved

[1] 1 en_int 启用完成中断。
[0] 1 en_stat_desc 启用完成状态写入。