pci_enable_device_mem和pci_enable_device有什么区别?

时间:2013-08-24 07:09:38

标签: pci pci-e

pci_enable_device_mem和pci_enable_device有什么区别?

在ixgbe中,pf驱动程序使用pci_enable_device_mem,而vf驱动程序使用pci_enable_device。

2 个答案:

答案 0 :(得分:1)

好吧,两个函数都在内部调用pci_enable_device_flags()。区别在于pci_enable_device_mem()变量仅初始化内存映射的BAR,而pci_enable_device()将初始化内存映射和IO BAR。

如果您的PCI设备没有IO空间(很可能确实如此),您可以轻松使用pci_enable_device_mem()。

这是来自drivers / pci / pci.c的代码:

int pci_enable_device_mem(struct pci_dev *dev)
{
    return pci_enable_device_flags(dev, IORESOURCE_MEM);
}

int pci_enable_device(struct pci_dev *dev)
{
    return pci_enable_device_flags(dev, IORESOURCE_MEM | IORESOURCE_IO);
}

答案 1 :(得分:0)

  

pci_enable_device_mem - 初始化用于存储空间的设备   https://www.kernel.org/doc/htmldocs/kernel-api/API-pci-enable-device-mem.html

     

pci_enable_device - 在驱动程序使用之前初始化设备。   https://www.kernel.org/doc/htmldocs/kernel-api/API-pci-enable-device.html

第一个是初始化设备,因此可以与内存空间一起使用。第二个将在驱动程序使用之前初始化设备。