pci_enable_device
是 PCI 子系统中的一个重要函数,主要用于激活 PCI 设备。以下是关于此函数的一些关键信息:
- 功能:该函数的主要作用是修改 PCI 设备的 PCI 配置空间的 Command 寄存器的 I/O Space 位和 Memory Space 位。此外,它还负责分配 I/O 端口空间或内存空间(如果是分配 I/O 内存,则需要把外设备寄存器地址映射到内存中才能访问设备),供驱动程序对设备进行访问。
- 流程:在调用
pci_enable_device
函数之前,通常需要使用pci_get_device
函数获取设备描述符,以确保成功激活设备。此函数最终会调用pci_enable_resources
函数,该函数会扫描 PCI 设备的 BAR0 到 BAR5 空间。如果这些空间使用了 I/O 或 Memory 空间,那么 I/O Space 位和 Memory Space 位会被置 1。最后,pci_enable_device
函数会调用pcibios_enable_irq
函数来分配 PCI 设备使用的中断向量号。 - 休眠与唤醒:PCIe 设备的休眠唤醒功能也使用了
pci_enable_device
函数。在 PCIe 设备进入休眠模式之前,需要先使用pci_set_power_state
函数将设备的当前功耗状态设置为 POWER_STATE_D3(即系统睡眠状态)。当系统需要唤醒设备时,可以使用pci_set_power_state
函数将设备的功耗状态恢复到原来的状态,从而使设备重新开始工作。
请注意,pci_enable_device
函数可能会失败,因此在调用此函数时,应确保正确处理可能出现的错误情况。
总的来说,pci_enable_device
是一个关键的函数,用于激活和管理 PCI 设备,并确保它们可以在系统中正常工作。