pci_enable_device 和 pcim_enable_device 有什么区别?
What's the difference between pci_enable_device and pcim_enable_device?
This book's PCI chapter 解释一下:
int pci_enable_device(struct pci_dev *dev);
然而还有:
int pcim_enable_device (struct pci_dev * pdev);
但是除了说是“Managed pci_enable_device”之外,没有任何解释。
- 那么这两者有什么区别呢?
- "managed"是什么意思?
- 我应该使用哪一个?
pcim_enable_device()
是 pci_enable_device()
的托管版本。意思是如果调用了pci_enable_device()
,最后还需要调用pci_disable_device()
。在 pcim_enable_device()
的情况下,托管框架将为您处理禁用操作。
在新内核版本中,建议使用此类托管函数,以消除驱动程序代码中的错误处理。参见 this article to get a clue about device resource management (or devres) API. This particular function (pcim_enable_device
) was introduced in this patch. If you want to read more about devres framework, see Documentation/driver-model/devres.txt
你提到的那本书("Linux Device Drivers, 3rd edition")对托管函数没有任何解释,因为它是在实现这些函数之前写的。
This book's PCI chapter 解释一下:
int pci_enable_device(struct pci_dev *dev);
然而还有:
int pcim_enable_device (struct pci_dev * pdev);
但是除了说是“Managed pci_enable_device”之外,没有任何解释。
- 那么这两者有什么区别呢?
- "managed"是什么意思?
- 我应该使用哪一个?
pcim_enable_device()
是 pci_enable_device()
的托管版本。意思是如果调用了pci_enable_device()
,最后还需要调用pci_disable_device()
。在 pcim_enable_device()
的情况下,托管框架将为您处理禁用操作。
在新内核版本中,建议使用此类托管函数,以消除驱动程序代码中的错误处理。参见 this article to get a clue about device resource management (or devres) API. This particular function (pcim_enable_device
) was introduced in this patch. If you want to read more about devres framework, see Documentation/driver-model/devres.txt
你提到的那本书("Linux Device Drivers, 3rd edition")对托管函数没有任何解释,因为它是在实现这些函数之前写的。