PCI总线
pci总线描述
struct pci_driver { struct list_head node; char*name; conststruct pci_device_id *id_table; int(*probe)(struct pci_dev *dev,conststruct pci_device_id *id);/* New device inserted */ void(*remove)(struct pci_dev *dev);/* Device removed (NULL if not a hot-plug capable driver) */ int(*suspend)(struct pci_dev *dev,pm_message_t state);/* Device suspended */ int(*suspend_late)(struct pci_dev *dev,pm_message_t state); int(*resume_early)(struct pci_dev *dev); int(*resume)(struct pci_dev *dev);/* Device woken up */ void(*shutdown)(struct pci_dev *dev); struct pci_error_handlers *err_handler; struct device_driver driver; struct pci_dynids dynids; };
注册PCI驱动
pci_register_driver(struct pci_driver *drv)
当一个驱动注册,通过遍历id_table中所有的厂商id、设备id和系统中存在的PCI设备比对,然后进行probe()函数
(1)使能设备
int pci_enable_device(struct pci_dev *dev)
(2)获取基地址(物理地址)
ioaddr=pci_resource_start(pdev, 0)
(3)申请要使用的地址空间
i = pic_request_regions(pdev, DRV_NAME); irq = pdev->irq; ioaddr = (long)ioremap(ioaddr, 0x400); //物理地址转换虚拟地址
接下来

浙公网安备 33010602011771号