static int __init l4vpci_x86_init(void) { struct pci_dev *dev = NULL; struct pci_bus *bus; struct pci_sysdata *sd = kzalloc(sizeof(*sd), GFP_KERNEL); if (!sd) return -ENOMEM; bus = pci_scan_bus(0, &l4vpci_ops, sd); if (!bus) { pr_err("Failed to scan PCI bus\n"); return -ENODEV; } pci_bus_add_devices(bus); pr_info("l4vPCI: Using L4-IO for IRQ routing\n"); for_each_pci_dev(dev) l4vpci_irq_enable(dev); pcibios_resource_survey(); return 0; }
int pcibios_enable_device(struct pci_dev *dev, int bars) { int err; if ((err = pci_enable_resources(dev, bars)) < 0) return err; return l4vpci_irq_enable(dev); }
struct pci_bus * __init l4vpci_scan_bus(int nr, struct pci_sys_data *sys) { struct pci_bus *b; struct pci_dev *dev = NULL; b = pci_scan_root_bus(NULL, sys->busnr, &l4vpci_ops, sys, &sys->resources); for_each_pci_dev(dev) l4vpci_irq_enable(dev); pci_bus_add_devices(b); return b; }
static int __init l4vpci_init(void) { struct pci_dev *dev = NULL; #ifdef CONFIG_ARM struct pci_sys_data *sd; #else struct pci_sysdata *sd; #endif int err; L4XV_V(f); vbus = l4re_get_env_cap("vbus"); if (l4_is_invalid_cap(vbus)) return -ENOENT; L4XV_L(f); err = l4vbus_get_device_by_hid(vbus, 0, &root_bridge, "PNP0A03", 0, 0); if (err < 0) { printk(KERN_INFO "PCI: no root bridge found, no PCI\n"); L4XV_U(f); return err; } L4XV_U(f); printk(KERN_INFO "PCI: L4 root bridge is device %lx\n", root_bridge); sd = kzalloc(sizeof(*sd), GFP_KERNEL); if (!sd) return -ENOMEM; pci_scan_bus(0, &l4vpci_ops, sd); printk(KERN_INFO "PCI: Using L4-IO for IRQ routing\n"); for_each_pci_dev(dev) l4vpci_irq_enable(dev); #ifdef CONFIG_X86 pcibios_resource_survey(); #endif return 0; }