9.4. PCI 测试功能¶
- 作者:
- Kishon Vijay Abraham I <kishon@ti.com> 
传统上,PCI RC 总是通过使用标准 PCI 卡(如以太网 PCI 卡、USB PCI 卡或 SATA PCI 卡)进行验证。然而,随着 Linux 内核中 EP-core 的加入,现在可以将一个可在 EP 模式下工作的 PCI 控制器配置为测试设备。
PCI 端点测试设备是一个虚拟设备(在软件中定义),用于测试端点功能,并作为其他 PCI 端点设备(使用 EP 框架)的示例驱动程序。
PCI 端点测试设备具有以下寄存器
PCI_ENDPOINT_TEST_MAGIC
PCI_ENDPOINT_TEST_COMMAND
PCI_ENDPOINT_TEST_STATUS
PCI_ENDPOINT_TEST_SRC_ADDR
PCI_ENDPOINT_TEST_DST_ADDR
PCI_ENDPOINT_TEST_SIZE
PCI_ENDPOINT_TEST_CHECKSUM
PCI_ENDPOINT_TEST_IRQ_TYPE
PCI_ENDPOINT_TEST_IRQ_NUMBER
- PCI_ENDPOINT_TEST_MAGIC 
该寄存器将用于测试 BAR0。一个已知模式将被写入 MAGIC 寄存器并从中读回,以验证 BAR0。
- PCI_ENDPOINT_TEST_COMMAND 
该寄存器将由主机驱动程序使用,以指示端点设备必须执行的功能。
| 位域 | 描述 | 
|---|---|
| 位 0 | 触发传统 IRQ | 
| 位 1 | 触发 MSI IRQ | 
| 位 2 | 触发 MSI-X IRQ | 
| 位 3 | 读取命令(从 RC 缓冲区读取数据) | 
| 位 4 | 写入命令(将数据写入 RC 缓冲区) | 
| 位 5 | 复制命令(将数据从一个 RC 缓冲区复制到另一个 RC 缓冲区) | 
- PCI_ENDPOINT_TEST_STATUS 
该寄存器反映了 PCI 端点设备的状态。
| 位域 | 描述 | 
|---|---|
| 位 0 | 读取成功 | 
| 位 1 | 读取失败 | 
| 位 2 | 写入成功 | 
| 位 3 | 写入失败 | 
| 位 4 | 复制成功 | 
| 位 5 | 复制失败 | 
| 位 6 | IRQ 已触发 | 
| 位 7 | 源地址无效 | 
| 位 8 | 目标地址无效 | 
- PCI_ENDPOINT_TEST_SRC_ADDR 
该寄存器包含 COPY/READ 命令的源地址(RC 缓冲区地址)。
- PCI_ENDPOINT_TEST_DST_ADDR 
该寄存器包含 COPY/WRITE 命令的目标地址(RC 缓冲区地址)。
- PCI_ENDPOINT_TEST_IRQ_TYPE 
该寄存器包含 READ/WRITE/COPY 命令和触发 IRQ(传统/MSI)命令所触发的中断类型(传统/MSI)。
可能类型
| 传统 | 0 | 
| MSI | 1 | 
| MSI-X | 2 | 
- PCI_ENDPOINT_TEST_IRQ_NUMBER 
该寄存器包含被触发的 ID 中断。
允许值
| 传统 | 0 | 
| MSI | [1 .. 32] | 
| MSI-X | [1 .. 2048] |