Lines Matching refs:bus
151 PCIBus *bus = container_of(notifier, PCIBus, machine_done); in pcibus_machine_done() local
154 for (i = 0; i < ARRAY_SIZE(bus->devices); ++i) { in pcibus_machine_done()
155 if (bus->devices[i]) { in pcibus_machine_done()
156 pci_init_bus_master(bus->devices[i]); in pcibus_machine_done()
163 PCIBus *bus = PCI_BUS(qbus); in pci_bus_realize() local
165 bus->machine_done.notify = pcibus_machine_done; in pci_bus_realize()
166 qemu_add_machine_init_done_notifier(&bus->machine_done); in pci_bus_realize()
168 vmstate_register_any(NULL, &vmstate_pcibus, bus); in pci_bus_realize()
173 PCIBus *bus = PCI_BUS(qbus); in pcie_bus_realize() local
186 if (pci_bus_is_root(bus)) { in pcie_bus_realize()
187 bus->flags |= PCI_BUS_EXTENDED_CONFIG_SPACE; in pcie_bus_realize()
189 PCIBus *parent_bus = pci_get_bus(bus->parent_dev); in pcie_bus_realize()
192 bus->flags |= PCI_BUS_EXTENDED_CONFIG_SPACE; in pcie_bus_realize()
199 PCIBus *bus = PCI_BUS(qbus); in pci_bus_unrealize() local
201 qemu_remove_machine_init_done_notifier(&bus->machine_done); in pci_bus_unrealize()
203 vmstate_unregister(NULL, &vmstate_pcibus, bus); in pci_bus_unrealize()
206 static int pcibus_num(PCIBus *bus) in pcibus_num() argument
208 if (pci_bus_is_root(bus)) { in pcibus_num()
211 return bus->parent_dev->config[PCI_SECONDARY_BUS]; in pcibus_num()
214 static uint16_t pcibus_numa_node(PCIBus *bus) in pcibus_numa_node() argument
220 PCIBus *bus, in pci_bus_add_fw_cfg_extra_pci_roots() argument
225 if (!bus) { in pci_bus_add_fw_cfg_extra_pci_roots()
228 obj = OBJECT(bus); in pci_bus_add_fw_cfg_extra_pci_roots()
237 PCIBus *bus = PCI_BUS(obj); in pci_bus_fw_cfg_gen_data() local
241 if (!bus) { in pci_bus_fw_cfg_gen_data()
245 QLIST_FOREACH(bus, &bus->child, sibling) { in pci_bus_fw_cfg_gen_data()
247 if (pci_bus_is_root(bus)) { in pci_bus_fw_cfg_gen_data()
366 static void pci_bus_change_irq_level(PCIBus *bus, int irq_num, int change) in pci_bus_change_irq_level() argument
369 assert(irq_num < bus->nirq); in pci_bus_change_irq_level()
370 bus->irq_count[irq_num] += change; in pci_bus_change_irq_level()
371 bus->set_irq(bus->irq_opaque, irq_num, bus->irq_count[irq_num] != 0); in pci_bus_change_irq_level()
376 PCIBus *bus; in pci_change_irq_level() local
379 bus = pci_get_bus(pci_dev); in pci_change_irq_level()
380 assert(bus->map_irq); in pci_change_irq_level()
381 irq_num = bus->map_irq(pci_dev, irq_num); in pci_change_irq_level()
383 pci_bus_is_root(bus) ? "root-complex" in pci_change_irq_level()
384 : DEVICE(bus->parent_dev)->canonical_path); in pci_change_irq_level()
385 if (bus->set_irq) in pci_change_irq_level()
387 pci_dev = bus->parent_dev; in pci_change_irq_level()
389 pci_bus_change_irq_level(bus, irq_num, change); in pci_change_irq_level()
392 int pci_bus_get_irq_level(PCIBus *bus, int irq_num) in pci_bus_get_irq_level() argument
395 assert(irq_num < bus->nirq); in pci_bus_get_irq_level()
396 return !!bus->irq_count[irq_num]; in pci_bus_get_irq_level()
585 PCIBus *bus = PCI_BUS(obj); in pcibus_reset_hold() local
588 for (i = 0; i < ARRAY_SIZE(bus->devices); ++i) { in pcibus_reset_hold()
589 if (bus->devices[i]) { in pcibus_reset_hold()
590 pci_do_device_reset(bus->devices[i]); in pcibus_reset_hold()
594 for (i = 0; i < bus->nirq; i++) { in pcibus_reset_hold()
595 assert(bus->irq_count[i] == 0); in pcibus_reset_hold()
615 PCIBus *bus = pci_get_bus(d); in pci_device_root_bus() local
617 while (!pci_bus_is_root(bus)) { in pci_device_root_bus()
618 d = bus->parent_dev; in pci_device_root_bus()
621 bus = pci_get_bus(d); in pci_device_root_bus()
624 return bus; in pci_device_root_bus()
633 assert(host_bridge->bus == rootbus); in pci_root_bus_path()
642 bool pci_bus_bypass_iommu(PCIBus *bus) in pci_bus_bypass_iommu() argument
644 PCIBus *rootbus = bus; in pci_bus_bypass_iommu()
647 if (!pci_bus_is_root(bus)) { in pci_bus_bypass_iommu()
648 rootbus = pci_device_root_bus(bus->parent_dev); in pci_bus_bypass_iommu()
653 assert(host_bridge->bus == rootbus); in pci_bus_bypass_iommu()
658 static void pci_root_bus_internal_init(PCIBus *bus, DeviceState *parent, in pci_root_bus_internal_init() argument
663 bus->devfn_min = devfn_min; in pci_root_bus_internal_init()
664 bus->slot_reserved_mask = 0x0; in pci_root_bus_internal_init()
665 bus->address_space_mem = mem; in pci_root_bus_internal_init()
666 bus->address_space_io = io; in pci_root_bus_internal_init()
667 bus->flags |= PCI_BUS_IS_ROOT; in pci_root_bus_internal_init()
670 QLIST_INIT(&bus->child); in pci_root_bus_internal_init()
675 static void pci_bus_uninit(PCIBus *bus) in pci_bus_uninit() argument
677 pci_host_bus_unregister(BUS(bus)->parent); in pci_bus_uninit()
680 bool pci_bus_is_express(const PCIBus *bus) in pci_bus_is_express() argument
682 return object_dynamic_cast(OBJECT(bus), TYPE_PCIE_BUS); in pci_bus_is_express()
685 void pci_root_bus_init(PCIBus *bus, size_t bus_size, DeviceState *parent, in pci_root_bus_init() argument
690 qbus_init(bus, bus_size, typename, parent, name); in pci_root_bus_init()
691 pci_root_bus_internal_init(bus, parent, mem, io, devfn_min); in pci_root_bus_init()
698 PCIBus *bus; in pci_root_bus_new() local
700 bus = PCI_BUS(qbus_new(typename, parent, name)); in pci_root_bus_new()
701 pci_root_bus_internal_init(bus, parent, mem, io, devfn_min); in pci_root_bus_new()
702 return bus; in pci_root_bus_new()
705 void pci_root_bus_cleanup(PCIBus *bus) in pci_root_bus_cleanup() argument
707 pci_bus_uninit(bus); in pci_root_bus_cleanup()
709 qbus_unrealize(BUS(bus)); in pci_root_bus_cleanup()
712 void pci_bus_irqs(PCIBus *bus, pci_set_irq_fn set_irq, in pci_bus_irqs() argument
715 bus->set_irq = set_irq; in pci_bus_irqs()
716 bus->irq_opaque = irq_opaque; in pci_bus_irqs()
717 bus->nirq = nirq; in pci_bus_irqs()
718 g_free(bus->irq_count); in pci_bus_irqs()
719 bus->irq_count = g_malloc0(nirq * sizeof(bus->irq_count[0])); in pci_bus_irqs()
722 void pci_bus_map_irqs(PCIBus *bus, pci_map_irq_fn map_irq) in pci_bus_map_irqs() argument
724 bus->map_irq = map_irq; in pci_bus_map_irqs()
727 void pci_bus_irqs_cleanup(PCIBus *bus) in pci_bus_irqs_cleanup() argument
729 bus->set_irq = NULL; in pci_bus_irqs_cleanup()
730 bus->map_irq = NULL; in pci_bus_irqs_cleanup()
731 bus->irq_opaque = NULL; in pci_bus_irqs_cleanup()
732 bus->nirq = 0; in pci_bus_irqs_cleanup()
733 g_free(bus->irq_count); in pci_bus_irqs_cleanup()
734 bus->irq_count = NULL; in pci_bus_irqs_cleanup()
744 PCIBus *bus; in pci_register_root_bus() local
746 bus = pci_root_bus_new(parent, name, mem, io, devfn_min, typename); in pci_register_root_bus()
747 pci_bus_irqs(bus, set_irq, irq_opaque, nirq); in pci_register_root_bus()
748 pci_bus_map_irqs(bus, map_irq); in pci_register_root_bus()
749 return bus; in pci_register_root_bus()
752 void pci_unregister_root_bus(PCIBus *bus) in pci_unregister_root_bus() argument
754 pci_bus_irqs_cleanup(bus); in pci_unregister_root_bus()
755 pci_root_bus_cleanup(bus); in pci_unregister_root_bus()
764 void pci_bus_range(PCIBus *bus, int *min_bus, int *max_bus) in pci_bus_range() argument
767 *min_bus = *max_bus = pci_bus_num(bus); in pci_bus_range()
769 for (i = 0; i < ARRAY_SIZE(bus->devices); ++i) { in pci_bus_range()
770 PCIDevice *dev = bus->devices[i]; in pci_bus_range()
779 int pci_bus_numa_node(PCIBus *bus) in pci_bus_numa_node() argument
781 return PCI_BUS_GET_CLASS(bus)->numa_node(bus); in pci_bus_numa_node()
956 unsigned long dom = 0, bus = 0; in pci_parse_devaddr() local
965 bus = val; in pci_parse_devaddr()
971 dom = bus; in pci_parse_devaddr()
972 bus = val; in pci_parse_devaddr()
995 if (dom > 0xffff || bus > 0xff || slot > 0x1f || func > 7) in pci_parse_devaddr()
1002 *busp = bus; in pci_parse_devaddr()
1105 static void pci_init_multifunction(PCIBus *bus, PCIDevice *dev, Error **errp) in pci_init_multifunction() argument
1133 PCIDevice *f0 = bus->devices[PCI_DEVFN(slot, 0)]; in pci_init_multifunction()
1148 PCIDevice *device = bus->devices[PCI_DEVFN(slot, func)]; in pci_init_multifunction()
1268 static bool pci_bus_devfn_available(PCIBus *bus, int devfn) in pci_bus_devfn_available() argument
1270 return !(bus->devices[devfn]); in pci_bus_devfn_available()
1273 static bool pci_bus_devfn_reserved(PCIBus *bus, int devfn) in pci_bus_devfn_reserved() argument
1275 return bus->slot_reserved_mask & (1UL << PCI_SLOT(devfn)); in pci_bus_devfn_reserved()
1278 uint32_t pci_bus_get_slot_reserved_mask(PCIBus *bus) in pci_bus_get_slot_reserved_mask() argument
1280 return bus->slot_reserved_mask; in pci_bus_get_slot_reserved_mask()
1283 void pci_bus_set_slot_reserved_mask(PCIBus *bus, uint32_t mask) in pci_bus_set_slot_reserved_mask() argument
1285 bus->slot_reserved_mask |= mask; in pci_bus_set_slot_reserved_mask()
1288 void pci_bus_clear_slot_reserved_mask(PCIBus *bus, uint32_t mask) in pci_bus_clear_slot_reserved_mask() argument
1290 bus->slot_reserved_mask &= ~mask; in pci_bus_clear_slot_reserved_mask()
1303 PCIBus *bus = pci_get_bus(pci_dev); in do_pci_register_device() local
1307 if (pci_bus_is_root(bus) && bus->parent_dev && !is_bridge) { in do_pci_register_device()
1310 bus->parent_dev->name); in do_pci_register_device()
1315 for(devfn = bus->devfn_min ; devfn < ARRAY_SIZE(bus->devices); in do_pci_register_device()
1317 if (pci_bus_devfn_available(bus, devfn) && in do_pci_register_device()
1318 !pci_bus_devfn_reserved(bus, devfn)) { in do_pci_register_device()
1326 } else if (pci_bus_devfn_reserved(bus, devfn)) { in do_pci_register_device()
1331 } else if (!pci_bus_devfn_available(bus, devfn)) { in do_pci_register_device()
1335 bus->devices[devfn]->name, bus->devices[devfn]->qdev.id); in do_pci_register_device()
1397 pci_init_multifunction(bus, pci_dev, &local_err); in do_pci_register_device()
1410 bus->devices[devfn] = pci_dev; in do_pci_register_device()
1540 PCIBus *bus = pci_get_bus(pci_dev); in pci_register_vga() local
1546 memory_region_add_subregion_overlap(bus->address_space_mem, in pci_register_vga()
1551 memory_region_add_subregion_overlap(bus->address_space_io, in pci_register_vga()
1556 memory_region_add_subregion_overlap(bus->address_space_io, in pci_register_vga()
1565 PCIBus *bus = pci_get_bus(pci_dev); in pci_unregister_vga() local
1571 memory_region_del_subregion(bus->address_space_mem, in pci_unregister_vga()
1573 memory_region_del_subregion(bus->address_space_io, in pci_unregister_vga()
1575 memory_region_del_subregion(bus->address_space_io, in pci_unregister_vga()
1841 void pci_bus_set_route_irq_fn(PCIBus *bus, pci_route_irq_fn route_intx_to_irq) in pci_bus_set_route_irq_fn() argument
1843 assert(pci_bus_is_root(bus)); in pci_bus_set_route_irq_fn()
1844 bus->route_intx_to_irq = route_intx_to_irq; in pci_bus_set_route_irq_fn()
1849 PCIBus *bus; in pci_device_route_intx_to_irq() local
1853 bus = pci_get_bus(dev); in pci_device_route_intx_to_irq()
1854 pin = bus->map_irq(dev, pin); in pci_device_route_intx_to_irq()
1856 pci_bus_is_root(bus) ? "root-complex" in pci_device_route_intx_to_irq()
1857 : DEVICE(bus->parent_dev)->canonical_path); in pci_device_route_intx_to_irq()
1858 dev = bus->parent_dev; in pci_device_route_intx_to_irq()
1861 if (!bus->route_intx_to_irq) { in pci_device_route_intx_to_irq()
1863 object_get_typename(OBJECT(bus->qbus.parent))); in pci_device_route_intx_to_irq()
1867 return bus->route_intx_to_irq(bus->irq_opaque, pin); in pci_device_route_intx_to_irq()
1875 void pci_bus_fire_intx_routing_notifier(PCIBus *bus) in pci_bus_fire_intx_routing_notifier() argument
1881 for (i = 0; i < ARRAY_SIZE(bus->devices); ++i) { in pci_bus_fire_intx_routing_notifier()
1882 dev = bus->devices[i]; in pci_bus_fire_intx_routing_notifier()
1888 QLIST_FOREACH(sec, &bus->child, sibling) { in pci_bus_fire_intx_routing_notifier()
1978 void pci_for_each_device_under_bus_reverse(PCIBus *bus, in pci_for_each_device_under_bus_reverse() argument
1985 for (devfn = 0; devfn < ARRAY_SIZE(bus->devices); devfn++) { in pci_for_each_device_under_bus_reverse()
1986 d = bus->devices[ARRAY_SIZE(bus->devices) - 1 - devfn]; in pci_for_each_device_under_bus_reverse()
1988 fn(bus, d, opaque); in pci_for_each_device_under_bus_reverse()
1993 void pci_for_each_device_reverse(PCIBus *bus, int bus_num, in pci_for_each_device_reverse() argument
1996 bus = pci_find_bus_nr(bus, bus_num); in pci_for_each_device_reverse()
1998 if (bus) { in pci_for_each_device_reverse()
1999 pci_for_each_device_under_bus_reverse(bus, fn, opaque); in pci_for_each_device_reverse()
2003 void pci_for_each_device_under_bus(PCIBus *bus, in pci_for_each_device_under_bus() argument
2009 for(devfn = 0; devfn < ARRAY_SIZE(bus->devices); devfn++) { in pci_for_each_device_under_bus()
2010 d = bus->devices[devfn]; in pci_for_each_device_under_bus()
2012 fn(bus, d, opaque); in pci_for_each_device_under_bus()
2017 void pci_for_each_device(PCIBus *bus, int bus_num, in pci_for_each_device() argument
2020 bus = pci_find_bus_nr(bus, bus_num); in pci_for_each_device()
2022 if (bus) { in pci_for_each_device()
2023 pci_for_each_device_under_bus(bus, fn, opaque); in pci_for_each_device()
2039 void pci_init_nic_devices(PCIBus *bus, const char *default_model) in pci_init_nic_devices() argument
2041 qemu_create_nic_bus_devices(&bus->qbus, TYPE_PCI_DEVICE, default_model, in pci_init_nic_devices()
2052 PCIBus *bus; in pci_init_nic_in_slot() local
2071 bus = pci_find_bus_nr(rootbus, busnr); in pci_init_nic_in_slot()
2072 if (!bus) { in pci_init_nic_in_slot()
2080 pci_realize_and_unref(pci_dev, bus, &error_fatal); in pci_init_nic_in_slot()
2084 PCIDevice *pci_vga_init(PCIBus *bus) in pci_vga_init() argument
2089 return pci_create_simple(bus, -1, "cirrus-vga"); in pci_vga_init()
2091 return pci_create_simple(bus, -1, "qxl-vga"); in pci_vga_init()
2093 return pci_create_simple(bus, -1, "VGA"); in pci_vga_init()
2095 return pci_create_simple(bus, -1, "vmware-svga"); in pci_vga_init()
2097 return pci_create_simple(bus, -1, "virtio-vga"); in pci_vga_init()
2116 static bool pci_root_bus_in_range(PCIBus *bus, int bus_num) in pci_root_bus_in_range() argument
2120 for (i = 0; i < ARRAY_SIZE(bus->devices); ++i) { in pci_root_bus_in_range()
2121 PCIDevice *dev = bus->devices[i]; in pci_root_bus_in_range()
2133 PCIBus *pci_find_bus_nr(PCIBus *bus, int bus_num) in pci_find_bus_nr() argument
2137 if (!bus) { in pci_find_bus_nr()
2141 if (pci_bus_num(bus) == bus_num) { in pci_find_bus_nr()
2142 return bus; in pci_find_bus_nr()
2146 if (!pci_bus_is_root(bus) && in pci_find_bus_nr()
2147 !pci_secondary_bus_in_range(bus->parent_dev, bus_num)) { in pci_find_bus_nr()
2152 for (; bus; bus = sec) { in pci_find_bus_nr()
2153 QLIST_FOREACH(sec, &bus->child, sibling) { in pci_find_bus_nr()
2173 void pci_for_each_bus_depth_first(PCIBus *bus, pci_bus_ret_fn begin, in pci_for_each_bus_depth_first() argument
2179 if (!bus) { in pci_for_each_bus_depth_first()
2184 state = begin(bus, parent_state); in pci_for_each_bus_depth_first()
2189 QLIST_FOREACH(sec, &bus->child, sibling) { in pci_for_each_bus_depth_first()
2194 end(bus, state); in pci_for_each_bus_depth_first()
2199 PCIDevice *pci_find_device(PCIBus *bus, int bus_num, uint8_t devfn) in pci_find_device() argument
2201 bus = pci_find_bus_nr(bus, bus_num); in pci_find_device()
2203 if (!bus) in pci_find_device()
2206 return bus->devices[devfn]; in pci_find_device()
2369 bool pci_realize_and_unref(PCIDevice *dev, PCIBus *bus, Error **errp) in pci_realize_and_unref() argument
2371 return qdev_realize_and_unref(&dev->qdev, &bus->qbus, errp); in pci_realize_and_unref()
2374 PCIDevice *pci_create_simple_multifunction(PCIBus *bus, int devfn, in pci_create_simple_multifunction() argument
2378 pci_realize_and_unref(dev, bus, &error_fatal); in pci_create_simple_multifunction()
2382 PCIDevice *pci_create_simple(PCIBus *bus, int devfn, const char *name) in pci_create_simple() argument
2385 pci_realize_and_unref(dev, bus, &error_fatal); in pci_create_simple()
2776 static int pci_qdev_find_recursive(PCIBus *bus, in pci_qdev_find_recursive() argument
2779 DeviceState *qdev = qdev_find_recursive(&bus->qbus, id); in pci_qdev_find_recursive()
2798 int tmp = pci_qdev_find_recursive(host_bridge->bus, id, pdev); in pci_qdev_find_device()
2866 PCIBus *bus = pci_get_bus(dev); in pci_device_get_iommu_bus_devfn() local
2867 PCIBus *iommu_bus = bus; in pci_device_get_iommu_bus_devfn()
2900 bus = iommu_bus; in pci_device_get_iommu_bus_devfn()
2903 bus = parent_bus; in pci_device_get_iommu_bus_devfn()
2913 if (pci_bus_bypass_iommu(bus) || !iommu_bus->iommu_ops) { in pci_device_get_iommu_bus_devfn()
2920 *aliased_bus = bus; in pci_device_get_iommu_bus_devfn()
2930 PCIBus *bus; in pci_device_iommu_address_space() local
2934 pci_device_get_iommu_bus_devfn(dev, &iommu_bus, &bus, &devfn); in pci_device_iommu_address_space()
2936 return iommu_bus->iommu_ops->get_address_space(bus, in pci_device_iommu_address_space()
2945 PCIBus *bus; in pci_iommu_init_iotlb_notifier() local
2949 pci_device_get_iommu_bus_devfn(dev, &bus, &iommu_bus, &devfn); in pci_iommu_init_iotlb_notifier()
2951 iommu_bus->iommu_ops->init_iotlb_notifier(bus, iommu_bus->iommu_opaque, in pci_iommu_init_iotlb_notifier()
2994 PCIBus *bus; in pci_pri_request_page() local
3007 pci_device_get_iommu_bus_devfn(dev, &bus, &iommu_bus, &devfn); in pci_pri_request_page()
3009 return iommu_bus->iommu_ops->pri_request_page(bus, in pci_pri_request_page()
3022 PCIBus *bus; in pci_pri_register_notifier() local
3031 pci_device_get_iommu_bus_devfn(dev, &bus, &iommu_bus, &devfn); in pci_pri_register_notifier()
3033 iommu_bus->iommu_ops->pri_register_notifier(bus, in pci_pri_register_notifier()
3044 PCIBus *bus; in pci_pri_unregister_notifier() local
3048 pci_device_get_iommu_bus_devfn(dev, &bus, &iommu_bus, &devfn); in pci_pri_unregister_notifier()
3050 iommu_bus->iommu_ops->pri_unregister_notifier(bus, in pci_pri_unregister_notifier()
3063 PCIBus *bus; in pci_ats_request_translation() local
3080 pci_device_get_iommu_bus_devfn(dev, &bus, &iommu_bus, &devfn); in pci_ats_request_translation()
3082 return iommu_bus->iommu_ops->ats_request_translation(bus, in pci_ats_request_translation()
3096 PCIBus *bus; in pci_iommu_register_iotlb_notifier() local
3104 pci_device_get_iommu_bus_devfn(dev, &bus, &iommu_bus, &devfn); in pci_iommu_register_iotlb_notifier()
3106 iommu_bus->iommu_ops->register_iotlb_notifier(bus, in pci_iommu_register_iotlb_notifier()
3118 PCIBus *bus; in pci_iommu_unregister_iotlb_notifier() local
3126 pci_device_get_iommu_bus_devfn(dev, &bus, &iommu_bus, &devfn); in pci_iommu_unregister_iotlb_notifier()
3128 iommu_bus->iommu_ops->unregister_iotlb_notifier(bus, in pci_iommu_unregister_iotlb_notifier()
3140 PCIBus *bus; in pci_iommu_get_iotlb_info() local
3144 pci_device_get_iommu_bus_devfn(dev, &bus, &iommu_bus, &devfn); in pci_iommu_get_iotlb_info()
3154 void pci_setup_iommu(PCIBus *bus, const PCIIOMMUOps *ops, void *opaque) in pci_setup_iommu() argument
3163 bus->iommu_ops = ops; in pci_setup_iommu()
3164 bus->iommu_opaque = opaque; in pci_setup_iommu()
3215 void pci_bus_get_w64_range(PCIBus *bus, Range *range) in pci_bus_get_w64_range() argument
3218 pci_for_each_device_under_bus(bus, pci_dev_get_w64, range); in pci_bus_get_w64_range()
3239 PCIBus *bus = pci_get_bus(pci_dev); in pci_get_function_0() local
3243 return bus->devices[0]; in pci_get_function_0()
3246 return bus->devices[PCI_DEVFN(PCI_SLOT(pci_dev->devfn), 0)]; in pci_get_function_0()