7. pci_enable_msi():它允许PCI设备使用MSI中断机制,当函数被调用时,它将被指定的PCI设备启用MSI中断,并返回中断号。 8. request_irq():注册中断服务函数,当中断发生时,系统调用这个函数。 9. pcie_capability_write_dword(..., ..., PCI_EXP_DEVCTL_EXT_TAG):PCI_EXP_DEVCTL_EXT_TAG,标识设备的DevCtl...
如果驱动程序认为它可能能够通过敲击 IO 来恢复硬件,或者如果它希望有机会提取一些诊断信息(参见下面的 mmio_enable),则驱动程序返回此信息。 PCI_ERS_RESULT_NEED_RESET 如果驱动程序在没有插槽重置的情况下无法恢复,则返回此信息。 PCI_ERS_RESULT_DISCONNECT 如果驱动程序根本不想恢复,它会返回它。 如果段/插槽上...
许多架构、芯片集或BIOS不支持 MSI 或 MSI-X,只使用PCI_IRQ_MSI和PCI_IRQ_MSIX标志调用pci_alloc_irq_vectors将会失败,因此尝试始终指定PCI_IRQ_LEGACY。 对于MSI/MSI-X和遗留INTx有不同中断处理程序的驱动程序,在调用pci_alloc_irq_vectors之后,应该根据pci_dev结构中的 msi_enabled 和 msix_enabled 标志选择...
(1)PCI_ERS_RESULT_CAN_RECOVER:驱动程序可以通过I/O操作恢复硬件或者提取诊断信息,则返回这个结果(见下面mmio_enable)。 (2)PCI_ERS_RESULT_NEED_RESET:驱动程序不执行slot reset不能恢复,则返回这个。 (3)PCI_ERS_RESULT_DISCONNECT:驱动程序如果不想恢复,则返回这个。 下一步的操作将取决于驱动程序返回的结果。
671voidpci_no_msi(void) 672{ 673pci_msi_enable= 0; 674} 这个世界上像pci_no_msi()这么单纯的角色已经不多了,它只是将msi.c文件里的一个static变量设置为0,表示禁用MSI中断,如果你在menconfig的时候选上了“Message Signaled Interrupts (MSI and MSI-X)”,只要在内核启动的时候指定了nomsi同样也可以强...
MSI、MSI-X 3.5.2 扩展配置空间(Extended Configuration Space) 在阅读下面的讨论内容时,请同时参阅图 3‑3。当引入PCIe之后,最初始的256byte配置空间已经不足以放下所有新需要的Capability Structure了。因此配置空间的大小从原先的每个Function 256Byte扩展至了每个Function 4KByte。新增加出来的960DW扩展配置空间只...
.cfg_interrupt_msienable ( cfg_interrupt_msienable ), .cfg_interrupt_msixenable ( cfg_interrupt_msixenable ), .cfg_interrupt_msixfm ( cfg_interrupt_msixfm ), .cfg_interrupt_stat ( cfg_interrupt_stat ), .cfg_pciecap_interrupt_msgnum ( cfg_pciecap_interrupt_msgnum ), ...
由于实在找不到MSI-X在x86上实现的教程或文档,只能分析Linux的PCI驱动程序了。希望能得到一些启发。...本文基于linux 5.17.5进行分析 __pci_enable_msix_range static int __pci_enable_msix_range(struct pci_dev *dev,...该函数原型如下: int pci_msi_setup_msi_irqs(struct pci_dev *dev, int nvec, ...
(11) Command 寄存器 该寄存器为PCI 设备的命令寄存器,该寄存器在初始化时,其值为0,此时这个PCI 设 备除了能够接收配置请求总线事务之外,不能接收任何存储器或者I/O 请求。系统软件需要 合理设置该寄存器之后,才能访问该设备的存储器或者I/O 空间。在Linux 系统中,设备驱 动程序调用pci_enable_device 函数,使能...