PCIe配置与VPD管理 - 页码151
深入分析:PCIe I/O Read 和 PCIe I/O Write
PCIe I/O Read(图155 和图156)
PCIe I/O Read 命令允许管理控制器读取与 NVMe 控制器相关联的 PCIe I/O 空间的内容。命令使用 PCIe Request Dwords 0 和 1 字段,PCIe Request Dword 2 是保留字段,不使用。
PCIe Request Dword 0 的详细格式如下:
字段名 | 描述 |
---|---|
Reserved | 保留字段,不使用。 |
Base Address Register (BAR) | 此字段指定要读取的 PCI 基地址寄存器(BAR)。该字段值表示与该 BAR 关联的 PCI I/O 空间的起始偏移量。 |
Length (LENGTH) | 此字段指定要读取的字节数,控制读取的数据范围。 |
如何工作:
- Base Address Register (BAR):
- 功能:该字段指定了要读取的 PCI I/O 空间 的起始位置。它指向与指定的 NVMe 控制器 相关联的 I/O 地址空间中的位置。
-
实现:每个 PCIe 控制器 都有一个 BAR 地址,指定了 I/O 空间的起始位置。对于 64 位的 BAR,该字段会对应于该 BAR 的最低有效 32 位。
-
Length (LENGTH):
- 功能:指定读取数据的字节数,决定了读取的总量。
-
实现:如果长度不是 dword(双字)对齐的,读取的数据将会被填充至下一个 dword 边界,填充的字节值将被设置为 0。
-
Offset (OFFSET):
- 功能:该字段指定在 PCI I/O 地址空间中的偏移量,即从哪里开始读取数据。
-
实现:读取的起始位置由 BAR 和 Offset 字段共同决定。
-
错误处理:
- 条件:如果 BAR 字段对应的不是 NVMe 控制器实现的 I/O BAR,或者 Offset + Length 超出了 BAR 的地址范围,管理端点将返回“无效参数错误”响应,并指明是 BAR 或 Offset 字段有问题。
PCIe I/O Write(图153 和图154)
PCIe I/O Write 命令允许管理控制器写入与 NVMe 控制器相关联的 PCIe I/O 空间。此命令与 PCIe I/O Read 命令相似,使用 PCIe Request Dwords 0 和 1 字段,并且 PCIe Request Dword 2 仍为保留字段。
PCIe Request Dword 0 和 PCIe Request Dword 1 的格式与读取命令类似,区别在于,写入操作需要 Request Data 字段来提供写入的数据。
如何工作:
- Base Address Register (BAR) 和 Offset (OFFSET):
-
功能与写入:这两个字段指定写入操作的起始位置,确保数据被写入正确的 PCIe I/O 空间和偏移位置。
-
数据写入:
- 功能:将 Request Data 字段中的数据写入指定的 PCI I/O 空间。
-
实现:写入的数据根据 Length 字段指定的字节数进行写入,确保数据按照正确的对齐进行处理。
-
错误处理:
- 条件:如果 BAR 字段指定的不是 NVMe 控制器的 I/O BAR,或者 Offset + Length 超出了配置空间的范围,将导致无效参数错误。
总结
- PCIe I/O Read 和 PCIe I/O Write 命令提供了对 PCIe I/O 空间的读取和写入功能。
- 通过 Base Address Register (BAR) 和 Offset (OFFSET) 字段,管理控制器可以精确地指定读取或写入操作的起始位置。
- Length 字段控制数据的传输大小,确保数据按照 dword 边界对齐。
相关问题:
- 你是否有对 PCIe I/O 空间 的访问控制,或者是否需要进一步探讨 PCIe 命令集 如何与其他管理操作集成?