在 type 0 header 中,command 寄存器的位置如下图所示:
在 type 1 header 中,command 寄存器的位置如下图所示:
Command 寄存器的结构如下图:
对于 PCIe,只有 Bit 0/1/2/6/8/10 是有效的,其他必须配置为 0 。
- IO Space Enable
- 该位用于控制设别如何响应 I/O 空间的访问请求。
- 该位为 0 时,设备不会响应 I/O 空间访问请求。
- 该位为 1 时,设备正常响应 I/O 空间访问请求。
- 复位后,默认为 0 。
- Memory Space Enable
- 该位用于控制设别如何响应 Memory 空间的访问请求。
- 该位为 0 时,设备不会响应 Memory 空间访问请求。
- 该位为 1 时,设备正常响应 Memory 空间访问请求。
- 复位后,默认为 0 。
- Bus Master Enable
- Endpoint
- 该位决定了设备能否发出 Memory 读写请求、I/O 读写请求。
- 该位为 1 时,允许设备发出 Memory 读写请求、I/O 读写请求。
- 该位为 0 时,不允许设备发出 Memory 读写请求、I/O 读写请求。
- MSI/MSI-X 中断消息属于 Memory 写请求,因此该位为 0 时,设备无法产生 MSI 或 MSI-X 中断消息。
- 除了 Memory 读写请求和 I/O 读写请求,其他类型的请求不受该位控制。
- 默认值为 0。
- Root Port & Switch
- 该位决定了设备能否将 Memory 读写请求和 I/O 读写请求转发至上游方向(Upstream Direction)。
- 该位为 0 时,Root Port 或者 Switch 的 Downsteam 端口收到 Memory 请求和 I/O 请求后,应该按照 Unsupported Requests(UR)处理。对于收到的 Non-Posted 请求,应该向 Requester 发送一个 UR Completion 状态位置位的 Completion。
- 该位并不会影响 Completion 的转发。
- 除了 Memory 读写请求和 I/O 读写请求,其他类型的请求不受该位控制。
- 默认值为 0。
- Endpoint
- Parity Error Response
- 该位决定了是否使用 status 寄存器的 Master Data Parity Error 位对 Poisoned TLP 进行记录。
- 该位为 1时,如果有 Poisoned TLP,则将 status 寄存器的 Master Data Parity Error 位设置为 1。
- SERR# Enable
- 对于 Endpoint,该位为 1 时,设备可以向 Root Complex 发送 ERR_FATAL 和 ERR_NONFATAL 错误消息。
- 对于 Switch,该位为 1 时,设备可以将 ERR_FATAL 和 ERR_NONFATAL 错误消息转发到上游总线。
- ERR_COR 消息不受该位控制。
- Interrupt Disable
- 该位用于控制设备能否产生 INTx 中断。
- 该位为 1 时,不允许设备产生 INTx 中断。
- 默认值为 0。