2

pci_enable_device_mem 和 pci_enable_device 有什么区别?

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

4

2 回答 2

4

好吧,这两个函数都在内部调用 pci_enable_device_flags()。不同之处在于 pci_enable_device_mem() 变体仅初始化内存映射 BAR,而 pci_enable_device() 将初始化内存映射和 IO BAR。

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

这是驱动程序/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);
}
于 2014-03-25T16:31:37.727 回答
-1

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

第一个是初始化设备,以便它可以与内存空间一起使用。第二个将在驱动程序使用设备之前对其进行初始化。

于 2013-08-24T07:18:36.933 回答