ioread32和pci_bus_read_config_word包装函数有什么区别?哪一个更安全的使用在PCI设备驱动程序?

问题描述:

在pci设备驱动程序中,我试图在MIPS平台中使用ioread32读取PCI_COMMAND寄存器,但引发了数据总线错误。在传入ioread32之前,我已验证了有效参数。对此有何帮助?在这种情况下使用pci_bus_read_config_word是否会阻止数据总线错误?ioread32和pci_bus_read_config_word包装函数有什么区别?哪一个更安全的使用在PCI设备驱动程序?

这取决于您的平台对配置空间访问具有何种支持。有两种类型的访问 -

1 - 传统PCI配置机制 - 这使用IO端口地址访问端点配置空间。你可以使用ioread32()来做到这一点。
2 - 增强型PCI配置机制 - 使用内存映射IO。你可以使用简单的指针操作来读取它。

由于很难找到访问机制支持,所以使用pci API(在本例中为pci_bus_read_config_word)比使用ioread32()更好。

pci _ *()API将处理对该平台有效的访问方法。