PCIe配置与VPD管理 - 页码151
NVMe-MI 1 min read

PCIe配置与VPD管理 - 页码151

Blog Author

深入分析: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) 此字段指定要读取的字节数,控制读取的数据范围。

如何工作:

  1. Base Address Register (BAR)
  2. 功能:该字段指定了要读取的 PCI I/O 空间 的起始位置。它指向与指定的 NVMe 控制器 相关联的 I/O 地址空间中的位置。
  3. 实现:每个 PCIe 控制器 都有一个 BAR 地址,指定了 I/O 空间的起始位置。对于 64 位的 BAR,该字段会对应于该 BAR 的最低有效 32 位。

  4. Length (LENGTH)

  5. 功能:指定读取数据的字节数,决定了读取的总量。
  6. 实现:如果长度不是 dword(双字)对齐的,读取的数据将会被填充至下一个 dword 边界,填充的字节值将被设置为 0。

  7. Offset (OFFSET)

  8. 功能:该字段指定在 PCI I/O 地址空间中的偏移量,即从哪里开始读取数据。
  9. 实现:读取的起始位置由 BAROffset 字段共同决定。

  10. 错误处理:

  11. 条件:如果 BAR 字段对应的不是 NVMe 控制器实现的 I/O BAR,或者 Offset + Length 超出了 BAR 的地址范围,管理端点将返回“无效参数错误”响应,并指明是 BAROffset 字段有问题。

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 0PCIe Request Dword 1 的格式与读取命令类似,区别在于,写入操作需要 Request Data 字段来提供写入的数据。

如何工作:

  1. Base Address Register (BAR)Offset (OFFSET)
  2. 功能与写入:这两个字段指定写入操作的起始位置,确保数据被写入正确的 PCIe I/O 空间和偏移位置。

  3. 数据写入

  4. 功能:将 Request Data 字段中的数据写入指定的 PCI I/O 空间
  5. 实现:写入的数据根据 Length 字段指定的字节数进行写入,确保数据按照正确的对齐进行处理。

  6. 错误处理

  7. 条件:如果 BAR 字段指定的不是 NVMe 控制器的 I/O BAR,或者 Offset + Length 超出了配置空间的范围,将导致无效参数错误。

总结

  • PCIe I/O ReadPCIe I/O Write 命令提供了对 PCIe I/O 空间的读取和写入功能。
  • 通过 Base Address Register (BAR)Offset (OFFSET) 字段,管理控制器可以精确地指定读取或写入操作的起始位置。
  • Length 字段控制数据的传输大小,确保数据按照 dword 边界对齐。

相关问题:

  • 你是否有对 PCIe I/O 空间 的访问控制,或者是否需要进一步探讨 PCIe 命令集 如何与其他管理操作集成?