pci_enable_device_mem 和 pci_enable_device 有什么区别?

Nir*_*moy 3 pci pci-e

pci_enable_device_mem 和 pci_enable_device 有什么区别?

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

Ale*_*sky 5

好吧,这两个函数内部都会调用 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);
}
Run Code Online (Sandbox Code Playgroud)