pci_enable_device()與pci_enable_device_mem()區別
文章目錄
1. pci_enable_device()源碼
/**
* pci_enable_device - Initialize device before it's used by a driver.
* @dev: PCI device to be initialized
*
* Initialize device before it's used by a driver. Ask low-level code
* to enable I/O and memory. Wake up the device if it was suspended.
* Beware, this function can fail.
*
* Note we don't actually enable the device many times if we call
* this function repeatedly (we just increment the count).
*/
int pci_enable_device(struct pci_dev *dev)
{
return pci_enable_device_flags(dev, IORESOURCE_MEM | IORESOURCE_IO);
}
2. pci_enable_device_mem()源碼
/**
* pci_enable_device_mem - Initialize a device for use with Memory space
* @dev: PCI device to be initialized
*
* Initialize device before it's used by a driver. Ask low-level code
* to enable Memory resources. Wake up the device if it was suspended.
* Beware, this function can fail.
*/
int pci_enable_device_mem(struct pci_dev *dev)
{
return pci_enable_device_flags(dev, IORESOURCE_MEM);
}
3. 區別
PCI/PCIE的BAR有兩種類型,memory和IO。pci_enable_device_mem()
只初始化memory類型的BAR,pci_enable_device()
同時初始化memory和IO類型的BAR。如果要驅動的PCI/PCIE設備包含IO空間,那麼必須使用pci_enable_device()
。