在QEMU设备中处理对配置空间的PCI读/写

时间:2019-05-04 11:28:26

标签: c linux-kernel qemu pci

我正在努力在QEMU中实现一个简单的PCI设备及其内核驱动程序,并且在从设备端处理pci_read / write_config_ *函数调用时遇到了一些麻烦。

与在内存映射条上执行简单的rw操作不同,在其中MemoryRegionOps回调函数接收驱动程序使用的确切偏移量,在PCIDevice结构中作为成员实现的config_read / write回调函数接收的地址经过了我的一些操作/映射很难理解。

在QEMU源代码中直到pci_config_host_read / write的代码路径,以及在内核端对pci_read / write_config_ *函数的相同,都没有提供明确的答案。

有人可以帮助我理解如何在调用pci config rw函数时提取驱动程序使用的配置偏移吗?

1 个答案:

答案 0 :(得分:0)

如果您设置PCI设备模型以实现QEMU PCIDevice config_read和config_write方法,则传递给它们的地址应为PCI配置空间的偏移量(即,以标准0 == PCI_VENDOR_ID,2 == PCI_DEVICE_ID开头,4 == PCI_COMMAND等,以及在64个字节的标准配置空间之后的所有特定于设备的内容。