如上图所示:所有的根总线都链接在pci_root_buses链表中. Pci_bus ->device链表链接着该总线下的所有设备.而pci_bus->children链表链接着它的下层总线. 对于pci_dev来说,pci_dev->bus指向它所属的pci_bus. Pci_dev->bus_list链接在它所属bus的device链表上.此外,所有pci设备都链接在pci_device链表中. 三:...
包括总线range(因为是Root Port,所以从0~255),获取device tree中定义的range,生成相应的resource。然后通过devm_request_pci_bus_resources(dev, &res)向内核申请。 五、生成pci bus,枚举生成PCI设备树 bus = pci_create_root_bus(dev, 0, &xilinx_pcie_ops, port, &res); if (!bus) { err = -ENOMEM;...
如上图所示:所有的根总线都链接在pci_root_buses链表中. Pci_bus ->device链表链接着该总线下的所有设备.而pci_bus->children链表链接着它的下层总线. 对于pci_dev来说,pci_dev->bus指向它所属的pci_bus. Pci_dev->bus_list链接在它所属bus的device链表上.此外,所有pci设备都链接在pci_device链表中. 三:...
1intpci_scan_slot(structpci_bus *bus,intdevfn)2{3unsigned fn, nr =0;4structpci_dev *dev;56if(only_one_child(bus) && (devfn >0))7return0;/*Already scanned the entire slot*/8/*遍历了第一个功能号,即fn=0*/9dev =pci_scan_single_device(bus, devfn);10if(!dev)11return0;12if...
pci_scan_bridge()-->pci_add_new_bus()àpci_alloc_child_bus(): …… child->self = bridge; child->parent = parent; child->ops = parent->ops; child->sysdata = parent->sysdata; child->bus_flags = parent->bus_flags; child->bridge = get_device(&bridge->dev); ...
drv->driver.bus = &pci_bus_type; drv->driver.probe = pci_device_probe; 最后会调用driver_register(&drv->driver)将这个PCI驱动挂载到总线描述符的驱动链上。同时在注册的过程 中,会根据pci_driver中的id_table中的ID值去查看该驱动支持哪些设备,将这些设备挂载到pci_driver中的devices链中 ...
struct bus_type pci_bus_type = { .name = "pci", .match = pci_bus_match, .uevent = pci_uevent, .probe = pci_device_probe, .remove = pci_device_remove, .shutdown = pci_device_shutdown, .dev_groups = pci_dev_groups, .bus_groups = pci_bus_groups, ...
drivers/pci/pci.c pci_init device_initcall .initcall6.init drivers/pci/probe.c pcibus_class_init postcore_initcall .initcall2.init drivers/pci/proc.c pci_proc_init __initcall .initcall6.init arch/i386/pci/init.c pci_access_init arch_initcall .initcall3.init ...
pci_bus_add_device device_attach __device_attach __device_attach_driver driver_probe_device really_probe dev->bus->probe//将调用pci_bus_type.pci_device_probe//4、枚举pci设备调用设备驱动pci_device_probe __pci_device_probe pci_call_probe ...
(1)PCI总线接口模块(PCI Bus Interface Unit,PBIN):该模块对主/从模式下的总线交易都不会插入等待周期,可以实现最大的总线传输带宽。 (2)E2PROM控制器模块:控制器与外部的4线串行E2PROM相连。PCI接口复位时,控制器读取E2PROM中的数据,配置PCI接口。DSP可以通过映射寄存器访问E2PROM。