intpci_read_config_byte(structpci_dev*pdev,intwhere, u8*val); intpci_read_config_word(structpci_dev*pdev,intwhere, u8*val); intpci_read_config_dword(structpci_dev*pdev,intwhere, u8*val); 通过8位、16位或32位的数据传输访问配置空间。 从由pdev标识的设备空间读入一个、两个或四个字节的数...
pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq); dev->irq = irq; } 在PCI_INTERRUPT_PIN中存放的是将INTA~INTD的哪一个引脚连接到了中断控制器,如果该值为零.说明并末将引脚连接至中断控制器.自然也就不能产生中断信号. 其实,在PCI_INTERRUPT_LINE存放的是该设备的中断线连接在中断控制器的哪一...
pci_read_config_byte(dev, PCI_REVISION_ID, &revision); return revision; } 写配置空间 int pci_write_config_byte(struct pci_dev *dev, int where, u8 val); int pci_write_config_word(struct pci_dev *dev, int where, u16 val); int pci_write_config_dword(struct pci_dev *dev, int where...
while ((dev2 = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev2)) != NULL) { pci_read_config_byte(dev2, PCI_INTERRUPT_PIN, &pin); if (!pin) continue; pin--; info = pirq_get_info(dev2); if (!info) continue; if (info->irq[pin].link == pirq) { /* We refuse to overrid...
pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq); dev->irq = irq; 1. 2. 3. 4. 5. **(2)BAR空间信息 ** 包括BAR空间大小,空间基地址,空间类型(IO/内存),空间位数(32位,64位)等。 pci_read_bases函数调用__pci_read_base函数来获取这些信息。
static inline int pci_read_config_dword(const struct pci_dev *dev, int where, u32 *val) static inline int pci_write_config_byte(const struct pci_dev *dev, int where, u8 val) static inline int pci_write_config_word(const struct pci_dev *dev, int where, u16 val) ...
intpci_write_config_dword(struct pci_dev *dev,intwhere, u32 val); 上面这组读写接口实际上会调用下面这组接口,当驱动不能访问pci_dev的时候也可以直接调用下面这组接口 1 2 3 4 5 6 intpci_bus_read_config_byte(struct pci_bus *bus,unsignedintdevfn,intwhere, u8 *val); ...
intpci_read_config_byte(struct pci_dev*dev,int where,u8*val)intpci_read_config_word(struct pci_dev*dev,int where,u16*val)intpci_read_config_dword(struct pci_dev*dev,int where,u32*val)intpci_write_config_byte(struct pci_dev*dev,int where,u8 val)intpci_write_config_word(struct pci_...
流媒体数据缓存PCI卡设备驱动的探测函数pic_card_probe()的主要实现代码如下: pci_card = kmalloc(sizeof(struct pci_card),GFP_KERNEL); //为设备实例分配存储空间 pci_enable_device(dev); //激活PCI设备 spin_lock_init(pci_card ->lock); //初始化特定设备实例的私有化数据 pci_read_config_byte(dev,...
__init:模块初始化函数。这些代码会在驱动初始化完之后被丢弃。 __exit:模块退出函数。如果是静态编译(编到内核中)的驱动,会忽略之。 __devinit:probe 函数以及所有初始化函数。如果使能了 CONFIG_HOTPLUG 内核配置,则此类函数就是个正常的函数,否则等同 __init。