1. pci_enable_device():把PCI配置空间的command域的bit0和bit1设置成1,从而达到开启设备的目的,即把config控制寄存器映射成IO/MEM空间。 2. pci_set_master():设置主总线为DMA模式。 3. pci_set_dma_mask():辅助函数用于检查总线是否可以接收给定大小的总线地址(mask),如果可以,则通知总线层给定外围设备将使...
对于使用INT#类型的中断,通常通过pci_enable_device/pci_enable_device_mem/pci_enable_device_io中对函数pcibios_enable_device的调用来完成(只有在没有开启MSI/MSIX的时候才会为INT#做配置),而要配置MSI/MSIX中断要使用的是pci_enable_msix。 步骤二:request_irq为该设备的irq指定对应的中断处理例程,把irq号和驱...
这个数据结构在文件include/linux/pci.h里,这是Linux内核版本2.4之后为新型的PCI设备驱动程序所添加的,其中最主要的是用于识别设备的id_table结构,以及用于检测设备的函数probe( )和卸载设备的函数remove( ): struct pci_driver { struct list_head node; char *name; const struct pci_device_id *id_table; in...
pci_enable_device() 可能会失败,所以需要检查其返回值! pci_enable_device(drivers/net/ne2k-pci.c)示例: staticint__devinitne2k_pci_init_one(structpci_dev *pdev,conststructpci_device_id *ent){ ... i = pci_enable_device (pdev);if(i)returni; ... } 调用pci_set_master() 使能 DMA,这...
pci_enable_device也是一个内核开发出来的接口,代码在drivers/pci/pci.c中,笔者跟踪发现这个函数主要就是把PCI配置空间的Command域的0位和1位置成了1,从而达到了开启设备的目的,因为rtl8139的官方datasheet中,说明了这两位的作用就是开启内存映射和I/O映射,如果不开的话,那我们以上讨论的把控制寄存器空间映射到内存...
1.pci_enable_device 激活PCI设备,在驱动程序可以访问PCI设备的任何设备资源之前(I/O区域或者中断),驱动程序必须调用该函数: intpci_enable_device(structpci_dev *dev);/*driver/pci/pci.c*/ 该函数实际的激活设备。它把设备唤醒,在某些情况下还指派它的中断线和I/O区域。
pcibios_enable_device 该接口用于使能PCI设备INT#模式的中断。其主要功能由pcibios_enable_irq(dev)完成,pcibios_enable_irq是一个函数指针,对于ACPI模式,其在上电过程中被设置为acpi_pci_irq_enable,其它情况被设置为pirq_enable_irq。 对ACPI模式,其执行过程为:1、 acpi_pci_irq_enable:其先根据设备的管脚信...
pci_driver:描述PCI驱动程序的结构体,包括设备识别信息、探测函数、移除函数等。 pci_dev:描述PCI设备的硬件信息,如厂商ID、设备ID、资源信息等。 关键函数: pci_register_driver:用于注册PCI驱动程序。 pci_unregister_driver:用于注销PCI驱动程序。 pci_enable_device:使能PCI设备。 pci_disable_device:禁用PCI设备...
struct pci_driver *driver; void *driver_data; u64 dma_mask; u32 current_state; unsigned short vendor_compatible[DEVICE_COUNT_COMPATIBLE]; unsigned short device_compatible[DEVICE_COUNT_COMPATIBLE]; unsigned int irq; struct resource resource[DEVICE_COUNT_RESOURCE]; ...