Message ID | 20221129101341.185621-3-imammedo@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | pci: drop redundant PCIDeviceClass::is_bridge field | expand |
On Tue, 29 Nov 2022 11:13:41 +0100 Igor Mammedov <imammedo@redhat.com> wrote: > and use cast to TYPE_PCI_BRIDGE instead. > > Signed-off-by: Igor Mammedov <imammedo@redhat.com> > Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- > v2: > (Philippe Mathieu-Daudé <philmd@linaro.org>) > - replace leftover IS_PCI_BRIDGE cast with is_bridge variable > --- > include/hw/pci/pci.h | 11 +---------- > include/hw/pci/pci_bridge.h | 1 + > hw/acpi/pcihp.c | 3 +-- > hw/i386/acpi-build.c | 5 ++--- > hw/pci-bridge/cxl_downstream.c | 1 - > hw/pci-bridge/cxl_upstream.c | 1 - > hw/pci-bridge/i82801b11.c | 1 - > hw/pci-bridge/pci_bridge_dev.c | 1 - > hw/pci-bridge/pcie_pci_bridge.c | 1 - > hw/pci-bridge/pcie_root_port.c | 1 - > hw/pci-bridge/simba.c | 1 - > hw/pci-bridge/xio3130_downstream.c | 1 - > hw/pci-bridge/xio3130_upstream.c | 1 - > hw/pci-host/designware.c | 1 - > hw/pci-host/xilinx-pcie.c | 1 - > hw/pci/pci.c | 20 +++++++++----------- > hw/ppc/spapr_pci.c | 15 +++++---------- For ppc changes : Reviewed-by: Greg Kurz <groug@kaod.org> > 17 files changed, 19 insertions(+), 47 deletions(-) > > diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h > index 6ccaaf5154..8b3a8571bf 100644 > --- a/include/hw/pci/pci.h > +++ b/include/hw/pci/pci.h > @@ -250,16 +250,7 @@ struct PCIDeviceClass { > uint16_t class_id; > uint16_t subsystem_vendor_id; /* only for header type = 0 */ > uint16_t subsystem_id; /* only for header type = 0 */ > - > - /* > - * pci-to-pci bridge or normal device. > - * This doesn't mean pci host switch. > - * When card bus bridge is supported, this would be enhanced. > - */ > - bool is_bridge; > - > - /* rom bar */ > - const char *romfile; > + const char *romfile; /* rom bar */ > }; > > typedef void (*PCIINTxRoutingNotifier)(PCIDevice *dev); > diff --git a/include/hw/pci/pci_bridge.h b/include/hw/pci/pci_bridge.h > index ba4bafac7c..ca6caf487e 100644 > --- a/include/hw/pci/pci_bridge.h > +++ b/include/hw/pci/pci_bridge.h > @@ -53,6 +53,7 @@ struct PCIBridgeWindows { > > #define TYPE_PCI_BRIDGE "base-pci-bridge" > OBJECT_DECLARE_SIMPLE_TYPE(PCIBridge, PCI_BRIDGE) > +#define IS_PCI_BRIDGE(dev) object_dynamic_cast(OBJECT(dev), TYPE_PCI_BRIDGE) > > struct PCIBridge { > /*< private >*/ > diff --git a/hw/acpi/pcihp.c b/hw/acpi/pcihp.c > index 84d75e6b84..99a898d9ae 100644 > --- a/hw/acpi/pcihp.c > +++ b/hw/acpi/pcihp.c > @@ -186,7 +186,6 @@ static PCIBus *acpi_pcihp_find_hotplug_bus(AcpiPciHpState *s, int bsel) > > static bool acpi_pcihp_pc_no_hotplug(AcpiPciHpState *s, PCIDevice *dev) > { > - PCIDeviceClass *pc = PCI_DEVICE_GET_CLASS(dev); > DeviceClass *dc = DEVICE_GET_CLASS(dev); > /* > * ACPI doesn't allow hotplug of bridge devices. Don't allow > @@ -196,7 +195,7 @@ static bool acpi_pcihp_pc_no_hotplug(AcpiPciHpState *s, PCIDevice *dev) > * Don't allow hot-unplug of SR-IOV Virtual Functions, as they > * will be removed implicitly, when Physical Function is unplugged. > */ > - return (pc->is_bridge && !dev->qdev.hotplugged) || !dc->hotpluggable || > + return (IS_PCI_BRIDGE(dev) && !dev->qdev.hotplugged) || !dc->hotpluggable || > pci_is_vf(dev); > } > > diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c > index d9eaa5fc4d..aa15b11cde 100644 > --- a/hw/i386/acpi-build.c > +++ b/hw/i386/acpi-build.c > @@ -403,7 +403,6 @@ static void build_append_pci_bus_devices(Aml *parent_scope, PCIBus *bus, > > for (devfn = 0; devfn < ARRAY_SIZE(bus->devices); devfn++) { > DeviceClass *dc; > - PCIDeviceClass *pc; > PCIDevice *pdev = bus->devices[devfn]; > int slot = PCI_SLOT(devfn); > int func = PCI_FUNC(devfn); > @@ -414,14 +413,14 @@ static void build_append_pci_bus_devices(Aml *parent_scope, PCIBus *bus, > bool cold_plugged_bridge = false; > > if (pdev) { > - pc = PCI_DEVICE_GET_CLASS(pdev); > dc = DEVICE_GET_CLASS(pdev); > > /* > * Cold plugged bridges aren't themselves hot-pluggable. > * Hotplugged bridges *are* hot-pluggable. > */ > - cold_plugged_bridge = pc->is_bridge && !DEVICE(pdev)->hotplugged; > + cold_plugged_bridge = IS_PCI_BRIDGE(pdev) && > + !DEVICE(pdev)->hotplugged; > bridge_in_acpi = cold_plugged_bridge && pcihp_bridge_en; > > hotpluggbale_slot = bsel && dc->hotpluggable && > diff --git a/hw/pci-bridge/cxl_downstream.c b/hw/pci-bridge/cxl_downstream.c > index a361e519d0..3d4e6b59cd 100644 > --- a/hw/pci-bridge/cxl_downstream.c > +++ b/hw/pci-bridge/cxl_downstream.c > @@ -217,7 +217,6 @@ static void cxl_dsp_class_init(ObjectClass *oc, void *data) > DeviceClass *dc = DEVICE_CLASS(oc); > PCIDeviceClass *k = PCI_DEVICE_CLASS(oc); > > - k->is_bridge = true; > k->config_write = cxl_dsp_config_write; > k->realize = cxl_dsp_realize; > k->exit = cxl_dsp_exitfn; > diff --git a/hw/pci-bridge/cxl_upstream.c b/hw/pci-bridge/cxl_upstream.c > index 9b8b57df9d..9df436cb73 100644 > --- a/hw/pci-bridge/cxl_upstream.c > +++ b/hw/pci-bridge/cxl_upstream.c > @@ -375,7 +375,6 @@ static void cxl_upstream_class_init(ObjectClass *oc, void *data) > DeviceClass *dc = DEVICE_CLASS(oc); > PCIDeviceClass *k = PCI_DEVICE_CLASS(oc); > > - k->is_bridge = true; > k->config_write = cxl_usp_write_config; > k->config_read = cxl_usp_read_config; > k->realize = cxl_usp_realize; > diff --git a/hw/pci-bridge/i82801b11.c b/hw/pci-bridge/i82801b11.c > index f28181e210..d9f224818b 100644 > --- a/hw/pci-bridge/i82801b11.c > +++ b/hw/pci-bridge/i82801b11.c > @@ -92,7 +92,6 @@ static void i82801b11_bridge_class_init(ObjectClass *klass, void *data) > PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); > DeviceClass *dc = DEVICE_CLASS(klass); > > - k->is_bridge = true; > k->vendor_id = PCI_VENDOR_ID_INTEL; > k->device_id = PCI_DEVICE_ID_INTEL_82801BA_11; > k->revision = ICH9_D2P_A2_REVISION; > diff --git a/hw/pci-bridge/pci_bridge_dev.c b/hw/pci-bridge/pci_bridge_dev.c > index 657a06ddbe..3435df8d73 100644 > --- a/hw/pci-bridge/pci_bridge_dev.c > +++ b/hw/pci-bridge/pci_bridge_dev.c > @@ -254,7 +254,6 @@ static void pci_bridge_dev_class_init(ObjectClass *klass, void *data) > k->vendor_id = PCI_VENDOR_ID_REDHAT; > k->device_id = PCI_DEVICE_ID_REDHAT_BRIDGE; > k->class_id = PCI_CLASS_BRIDGE_PCI; > - k->is_bridge = true; > dc->desc = "Standard PCI Bridge"; > dc->reset = qdev_pci_bridge_dev_reset; > device_class_set_props(dc, pci_bridge_dev_properties); > diff --git a/hw/pci-bridge/pcie_pci_bridge.c b/hw/pci-bridge/pcie_pci_bridge.c > index 1cd917a459..2301b2ca0b 100644 > --- a/hw/pci-bridge/pcie_pci_bridge.c > +++ b/hw/pci-bridge/pcie_pci_bridge.c > @@ -145,7 +145,6 @@ static void pcie_pci_bridge_class_init(ObjectClass *klass, void *data) > DeviceClass *dc = DEVICE_CLASS(klass); > HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(klass); > > - k->is_bridge = true; > k->vendor_id = PCI_VENDOR_ID_REDHAT; > k->device_id = PCI_DEVICE_ID_REDHAT_PCIE_BRIDGE; > k->realize = pcie_pci_bridge_realize; > diff --git a/hw/pci-bridge/pcie_root_port.c b/hw/pci-bridge/pcie_root_port.c > index 460e48269d..e0a7a036f5 100644 > --- a/hw/pci-bridge/pcie_root_port.c > +++ b/hw/pci-bridge/pcie_root_port.c > @@ -172,7 +172,6 @@ static void rp_class_init(ObjectClass *klass, void *data) > DeviceClass *dc = DEVICE_CLASS(klass); > PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); > > - k->is_bridge = true; > k->config_write = rp_write_config; > k->realize = rp_realize; > k->exit = rp_exit; > diff --git a/hw/pci-bridge/simba.c b/hw/pci-bridge/simba.c > index ba55ab1939..17aa0d7b21 100644 > --- a/hw/pci-bridge/simba.c > +++ b/hw/pci-bridge/simba.c > @@ -77,7 +77,6 @@ static void simba_pci_bridge_class_init(ObjectClass *klass, void *data) > k->device_id = PCI_DEVICE_ID_SUN_SIMBA; > k->revision = 0x11; > k->config_write = pci_bridge_write_config; > - k->is_bridge = true; > set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); > dc->reset = pci_bridge_reset; > dc->vmsd = &vmstate_pci_device; > diff --git a/hw/pci-bridge/xio3130_downstream.c b/hw/pci-bridge/xio3130_downstream.c > index 05e2b06c0c..38a2361fa2 100644 > --- a/hw/pci-bridge/xio3130_downstream.c > +++ b/hw/pci-bridge/xio3130_downstream.c > @@ -159,7 +159,6 @@ static void xio3130_downstream_class_init(ObjectClass *klass, void *data) > DeviceClass *dc = DEVICE_CLASS(klass); > PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); > > - k->is_bridge = true; > k->config_write = xio3130_downstream_write_config; > k->realize = xio3130_downstream_realize; > k->exit = xio3130_downstream_exitfn; > diff --git a/hw/pci-bridge/xio3130_upstream.c b/hw/pci-bridge/xio3130_upstream.c > index 5ff46ef050..a48bfe3bc5 100644 > --- a/hw/pci-bridge/xio3130_upstream.c > +++ b/hw/pci-bridge/xio3130_upstream.c > @@ -128,7 +128,6 @@ static void xio3130_upstream_class_init(ObjectClass *klass, void *data) > DeviceClass *dc = DEVICE_CLASS(klass); > PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); > > - k->is_bridge = true; > k->config_write = xio3130_upstream_write_config; > k->realize = xio3130_upstream_realize; > k->exit = xio3130_upstream_exitfn; > diff --git a/hw/pci-host/designware.c b/hw/pci-host/designware.c > index bde3a343a2..9e183caa48 100644 > --- a/hw/pci-host/designware.c > +++ b/hw/pci-host/designware.c > @@ -600,7 +600,6 @@ static void designware_pcie_root_class_init(ObjectClass *klass, void *data) > k->device_id = 0xABCD; > k->revision = 0; > k->class_id = PCI_CLASS_BRIDGE_PCI; > - k->is_bridge = true; > k->exit = pci_bridge_exitfn; > k->realize = designware_pcie_root_realize; > k->config_read = designware_pcie_root_config_read; > diff --git a/hw/pci-host/xilinx-pcie.c b/hw/pci-host/xilinx-pcie.c > index 38d5901a45..c9ab7052f4 100644 > --- a/hw/pci-host/xilinx-pcie.c > +++ b/hw/pci-host/xilinx-pcie.c > @@ -298,7 +298,6 @@ static void xilinx_pcie_root_class_init(ObjectClass *klass, void *data) > k->device_id = 0x7021; > k->revision = 0; > k->class_id = PCI_CLASS_BRIDGE_HOST; > - k->is_bridge = true; > k->realize = xilinx_pcie_root_realize; > k->exit = pci_bridge_exitfn; > dc->reset = pci_bridge_reset; > diff --git a/hw/pci/pci.c b/hw/pci/pci.c > index 2f450f6a72..fe05b868e1 100644 > --- a/hw/pci/pci.c > +++ b/hw/pci/pci.c > @@ -576,7 +576,7 @@ void pci_bus_range(PCIBus *bus, int *min_bus, int *max_bus) > for (i = 0; i < ARRAY_SIZE(bus->devices); ++i) { > PCIDevice *dev = bus->devices[i]; > > - if (dev && PCI_DEVICE_GET_CLASS(dev)->is_bridge) { > + if (dev && IS_PCI_BRIDGE(dev)) { > *min_bus = MIN(*min_bus, dev->config[PCI_SECONDARY_BUS]); > *max_bus = MAX(*max_bus, dev->config[PCI_SUBORDINATE_BUS]); > } > @@ -592,7 +592,6 @@ static int get_pci_config_device(QEMUFile *f, void *pv, size_t size, > const VMStateField *field) > { > PCIDevice *s = container_of(pv, PCIDevice, config); > - PCIDeviceClass *pc = PCI_DEVICE_GET_CLASS(s); > uint8_t *config; > int i; > > @@ -614,9 +613,8 @@ static int get_pci_config_device(QEMUFile *f, void *pv, size_t size, > memcpy(s->config, config, size); > > pci_update_mappings(s); > - if (pc->is_bridge) { > - PCIBridge *b = PCI_BRIDGE(s); > - pci_bridge_update_mappings(b); > + if (IS_PCI_BRIDGE(s)) { > + pci_bridge_update_mappings(PCI_BRIDGE(s)); > } > > memory_region_set_enabled(&s->bus_master_enable_region, > @@ -1090,9 +1088,10 @@ static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, > Error *local_err = NULL; > DeviceState *dev = DEVICE(pci_dev); > PCIBus *bus = pci_get_bus(pci_dev); > + bool is_bridge = IS_PCI_BRIDGE(pci_dev); > > /* Only pci bridges can be attached to extra PCI root buses */ > - if (pci_bus_is_root(bus) && bus->parent_dev && !pc->is_bridge) { > + if (pci_bus_is_root(bus) && bus->parent_dev && !is_bridge) { > error_setg(errp, > "PCI: Only PCI/PCIe bridges can be plugged into %s", > bus->parent_dev->name); > @@ -1154,7 +1153,7 @@ static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, > pci_config_set_revision(pci_dev->config, pc->revision); > pci_config_set_class(pci_dev->config, pc->class_id); > > - if (!pc->is_bridge) { > + if (!is_bridge) { > if (pc->subsystem_vendor_id || pc->subsystem_id) { > pci_set_word(pci_dev->config + PCI_SUBSYSTEM_VENDOR_ID, > pc->subsystem_vendor_id); > @@ -1171,7 +1170,7 @@ static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, > pci_init_cmask(pci_dev); > pci_init_wmask(pci_dev); > pci_init_w1cmask(pci_dev); > - if (pc->is_bridge) { > + if (is_bridge) { > pci_init_mask_bridge(pci_dev); > } > pci_init_multifunction(bus, pci_dev, &local_err); > @@ -2096,7 +2095,7 @@ static bool pci_root_bus_in_range(PCIBus *bus, int bus_num) > for (i = 0; i < ARRAY_SIZE(bus->devices); ++i) { > PCIDevice *dev = bus->devices[i]; > > - if (dev && PCI_DEVICE_GET_CLASS(dev)->is_bridge) { > + if (dev && IS_PCI_BRIDGE(dev)) { > if (pci_secondary_bus_in_range(dev, bus_num)) { > return true; > } > @@ -2841,7 +2840,6 @@ void pci_setup_iommu(PCIBus *bus, PCIIOMMUFunc fn, void *opaque) > static void pci_dev_get_w64(PCIBus *b, PCIDevice *dev, void *opaque) > { > Range *range = opaque; > - PCIDeviceClass *pc = PCI_DEVICE_GET_CLASS(dev); > uint16_t cmd = pci_get_word(dev->config + PCI_COMMAND); > int i; > > @@ -2849,7 +2847,7 @@ static void pci_dev_get_w64(PCIBus *b, PCIDevice *dev, void *opaque) > return; > } > > - if (pc->is_bridge) { > + if (IS_PCI_BRIDGE(dev)) { > pcibus_t base = pci_bridge_get_base(dev, PCI_BASE_ADDRESS_MEM_PREFETCH); > pcibus_t limit = pci_bridge_get_limit(dev, PCI_BASE_ADDRESS_MEM_PREFETCH); > > diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c > index 7b7618d5da..75aacda65a 100644 > --- a/hw/ppc/spapr_pci.c > +++ b/hw/ppc/spapr_pci.c > @@ -1361,7 +1361,6 @@ static int spapr_dt_pci_device(SpaprPhbState *sphb, PCIDevice *dev, > { > int offset; > g_autofree gchar *nodename = spapr_pci_fw_dev_name(dev); > - PCIDeviceClass *pc = PCI_DEVICE_GET_CLASS(dev); > ResourceProps rp; > SpaprDrc *drc = drc_from_dev(sphb, dev); > uint32_t vendor_id = pci_default_read_config(dev, PCI_VENDOR_ID, 2); > @@ -1446,7 +1445,7 @@ static int spapr_dt_pci_device(SpaprPhbState *sphb, PCIDevice *dev, > > spapr_phb_nvgpu_populate_pcidev_dt(dev, fdt, offset, sphb); > > - if (!pc->is_bridge) { > + if (!IS_PCI_BRIDGE(dev)) { > /* Properties only for non-bridges */ > uint32_t min_grant = pci_default_read_config(dev, PCI_MIN_GNT, 1); > uint32_t max_latency = pci_default_read_config(dev, PCI_MAX_LAT, 1); > @@ -1544,7 +1543,6 @@ static void spapr_pci_pre_plug(HotplugHandler *plug_handler, > { > SpaprPhbState *phb = SPAPR_PCI_HOST_BRIDGE(DEVICE(plug_handler)); > PCIDevice *pdev = PCI_DEVICE(plugged_dev); > - PCIDeviceClass *pc = PCI_DEVICE_GET_CLASS(plugged_dev); > SpaprDrc *drc = drc_from_dev(phb, pdev); > PCIBus *bus = PCI_BUS(qdev_get_parent_bus(DEVICE(pdev))); > uint32_t slotnr = PCI_SLOT(pdev->devfn); > @@ -1560,7 +1558,7 @@ static void spapr_pci_pre_plug(HotplugHandler *plug_handler, > } > } > > - if (pc->is_bridge) { > + if (IS_PCI_BRIDGE(plugged_dev)) { > if (!bridge_has_valid_chassis_nr(OBJECT(plugged_dev), errp)) { > return; > } > @@ -1589,7 +1587,6 @@ static void spapr_pci_plug(HotplugHandler *plug_handler, > { > SpaprPhbState *phb = SPAPR_PCI_HOST_BRIDGE(DEVICE(plug_handler)); > PCIDevice *pdev = PCI_DEVICE(plugged_dev); > - PCIDeviceClass *pc = PCI_DEVICE_GET_CLASS(plugged_dev); > SpaprDrc *drc = drc_from_dev(phb, pdev); > uint32_t slotnr = PCI_SLOT(pdev->devfn); > > @@ -1603,7 +1600,7 @@ static void spapr_pci_plug(HotplugHandler *plug_handler, > > g_assert(drc); > > - if (pc->is_bridge) { > + if (IS_PCI_BRIDGE(plugged_dev)) { > spapr_pci_bridge_plug(phb, PCI_BRIDGE(plugged_dev)); > } > > @@ -1646,7 +1643,6 @@ static void spapr_pci_bridge_unplug(SpaprPhbState *phb, > static void spapr_pci_unplug(HotplugHandler *plug_handler, > DeviceState *plugged_dev, Error **errp) > { > - PCIDeviceClass *pc = PCI_DEVICE_GET_CLASS(plugged_dev); > SpaprPhbState *phb = SPAPR_PCI_HOST_BRIDGE(DEVICE(plug_handler)); > > /* some version guests do not wait for completion of a device > @@ -1661,7 +1657,7 @@ static void spapr_pci_unplug(HotplugHandler *plug_handler, > */ > pci_device_reset(PCI_DEVICE(plugged_dev)); > > - if (pc->is_bridge) { > + if (IS_PCI_BRIDGE(plugged_dev)) { > spapr_pci_bridge_unplug(phb, PCI_BRIDGE(plugged_dev)); > return; > } > @@ -1686,7 +1682,6 @@ static void spapr_pci_unplug_request(HotplugHandler *plug_handler, > g_assert(drc->dev == plugged_dev); > > if (!spapr_drc_unplug_requested(drc)) { > - PCIDeviceClass *pc = PCI_DEVICE_GET_CLASS(plugged_dev); > uint32_t slotnr = PCI_SLOT(pdev->devfn); > SpaprDrc *func_drc; > SpaprDrcClass *func_drck; > @@ -1694,7 +1689,7 @@ static void spapr_pci_unplug_request(HotplugHandler *plug_handler, > int i; > uint8_t chassis = chassis_from_bus(pci_get_bus(pdev)); > > - if (pc->is_bridge) { > + if (IS_PCI_BRIDGE(plugged_dev)) { > error_setg(errp, "PCI: Hot unplug of PCI bridges not supported"); > return; > }
diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h index 6ccaaf5154..8b3a8571bf 100644 --- a/include/hw/pci/pci.h +++ b/include/hw/pci/pci.h @@ -250,16 +250,7 @@ struct PCIDeviceClass { uint16_t class_id; uint16_t subsystem_vendor_id; /* only for header type = 0 */ uint16_t subsystem_id; /* only for header type = 0 */ - - /* - * pci-to-pci bridge or normal device. - * This doesn't mean pci host switch. - * When card bus bridge is supported, this would be enhanced. - */ - bool is_bridge; - - /* rom bar */ - const char *romfile; + const char *romfile; /* rom bar */ }; typedef void (*PCIINTxRoutingNotifier)(PCIDevice *dev); diff --git a/include/hw/pci/pci_bridge.h b/include/hw/pci/pci_bridge.h index ba4bafac7c..ca6caf487e 100644 --- a/include/hw/pci/pci_bridge.h +++ b/include/hw/pci/pci_bridge.h @@ -53,6 +53,7 @@ struct PCIBridgeWindows { #define TYPE_PCI_BRIDGE "base-pci-bridge" OBJECT_DECLARE_SIMPLE_TYPE(PCIBridge, PCI_BRIDGE) +#define IS_PCI_BRIDGE(dev) object_dynamic_cast(OBJECT(dev), TYPE_PCI_BRIDGE) struct PCIBridge { /*< private >*/ diff --git a/hw/acpi/pcihp.c b/hw/acpi/pcihp.c index 84d75e6b84..99a898d9ae 100644 --- a/hw/acpi/pcihp.c +++ b/hw/acpi/pcihp.c @@ -186,7 +186,6 @@ static PCIBus *acpi_pcihp_find_hotplug_bus(AcpiPciHpState *s, int bsel) static bool acpi_pcihp_pc_no_hotplug(AcpiPciHpState *s, PCIDevice *dev) { - PCIDeviceClass *pc = PCI_DEVICE_GET_CLASS(dev); DeviceClass *dc = DEVICE_GET_CLASS(dev); /* * ACPI doesn't allow hotplug of bridge devices. Don't allow @@ -196,7 +195,7 @@ static bool acpi_pcihp_pc_no_hotplug(AcpiPciHpState *s, PCIDevice *dev) * Don't allow hot-unplug of SR-IOV Virtual Functions, as they * will be removed implicitly, when Physical Function is unplugged. */ - return (pc->is_bridge && !dev->qdev.hotplugged) || !dc->hotpluggable || + return (IS_PCI_BRIDGE(dev) && !dev->qdev.hotplugged) || !dc->hotpluggable || pci_is_vf(dev); } diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index d9eaa5fc4d..aa15b11cde 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -403,7 +403,6 @@ static void build_append_pci_bus_devices(Aml *parent_scope, PCIBus *bus, for (devfn = 0; devfn < ARRAY_SIZE(bus->devices); devfn++) { DeviceClass *dc; - PCIDeviceClass *pc; PCIDevice *pdev = bus->devices[devfn]; int slot = PCI_SLOT(devfn); int func = PCI_FUNC(devfn); @@ -414,14 +413,14 @@ static void build_append_pci_bus_devices(Aml *parent_scope, PCIBus *bus, bool cold_plugged_bridge = false; if (pdev) { - pc = PCI_DEVICE_GET_CLASS(pdev); dc = DEVICE_GET_CLASS(pdev); /* * Cold plugged bridges aren't themselves hot-pluggable. * Hotplugged bridges *are* hot-pluggable. */ - cold_plugged_bridge = pc->is_bridge && !DEVICE(pdev)->hotplugged; + cold_plugged_bridge = IS_PCI_BRIDGE(pdev) && + !DEVICE(pdev)->hotplugged; bridge_in_acpi = cold_plugged_bridge && pcihp_bridge_en; hotpluggbale_slot = bsel && dc->hotpluggable && diff --git a/hw/pci-bridge/cxl_downstream.c b/hw/pci-bridge/cxl_downstream.c index a361e519d0..3d4e6b59cd 100644 --- a/hw/pci-bridge/cxl_downstream.c +++ b/hw/pci-bridge/cxl_downstream.c @@ -217,7 +217,6 @@ static void cxl_dsp_class_init(ObjectClass *oc, void *data) DeviceClass *dc = DEVICE_CLASS(oc); PCIDeviceClass *k = PCI_DEVICE_CLASS(oc); - k->is_bridge = true; k->config_write = cxl_dsp_config_write; k->realize = cxl_dsp_realize; k->exit = cxl_dsp_exitfn; diff --git a/hw/pci-bridge/cxl_upstream.c b/hw/pci-bridge/cxl_upstream.c index 9b8b57df9d..9df436cb73 100644 --- a/hw/pci-bridge/cxl_upstream.c +++ b/hw/pci-bridge/cxl_upstream.c @@ -375,7 +375,6 @@ static void cxl_upstream_class_init(ObjectClass *oc, void *data) DeviceClass *dc = DEVICE_CLASS(oc); PCIDeviceClass *k = PCI_DEVICE_CLASS(oc); - k->is_bridge = true; k->config_write = cxl_usp_write_config; k->config_read = cxl_usp_read_config; k->realize = cxl_usp_realize; diff --git a/hw/pci-bridge/i82801b11.c b/hw/pci-bridge/i82801b11.c index f28181e210..d9f224818b 100644 --- a/hw/pci-bridge/i82801b11.c +++ b/hw/pci-bridge/i82801b11.c @@ -92,7 +92,6 @@ static void i82801b11_bridge_class_init(ObjectClass *klass, void *data) PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); DeviceClass *dc = DEVICE_CLASS(klass); - k->is_bridge = true; k->vendor_id = PCI_VENDOR_ID_INTEL; k->device_id = PCI_DEVICE_ID_INTEL_82801BA_11; k->revision = ICH9_D2P_A2_REVISION; diff --git a/hw/pci-bridge/pci_bridge_dev.c b/hw/pci-bridge/pci_bridge_dev.c index 657a06ddbe..3435df8d73 100644 --- a/hw/pci-bridge/pci_bridge_dev.c +++ b/hw/pci-bridge/pci_bridge_dev.c @@ -254,7 +254,6 @@ static void pci_bridge_dev_class_init(ObjectClass *klass, void *data) k->vendor_id = PCI_VENDOR_ID_REDHAT; k->device_id = PCI_DEVICE_ID_REDHAT_BRIDGE; k->class_id = PCI_CLASS_BRIDGE_PCI; - k->is_bridge = true; dc->desc = "Standard PCI Bridge"; dc->reset = qdev_pci_bridge_dev_reset; device_class_set_props(dc, pci_bridge_dev_properties); diff --git a/hw/pci-bridge/pcie_pci_bridge.c b/hw/pci-bridge/pcie_pci_bridge.c index 1cd917a459..2301b2ca0b 100644 --- a/hw/pci-bridge/pcie_pci_bridge.c +++ b/hw/pci-bridge/pcie_pci_bridge.c @@ -145,7 +145,6 @@ static void pcie_pci_bridge_class_init(ObjectClass *klass, void *data) DeviceClass *dc = DEVICE_CLASS(klass); HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(klass); - k->is_bridge = true; k->vendor_id = PCI_VENDOR_ID_REDHAT; k->device_id = PCI_DEVICE_ID_REDHAT_PCIE_BRIDGE; k->realize = pcie_pci_bridge_realize; diff --git a/hw/pci-bridge/pcie_root_port.c b/hw/pci-bridge/pcie_root_port.c index 460e48269d..e0a7a036f5 100644 --- a/hw/pci-bridge/pcie_root_port.c +++ b/hw/pci-bridge/pcie_root_port.c @@ -172,7 +172,6 @@ static void rp_class_init(ObjectClass *klass, void *data) DeviceClass *dc = DEVICE_CLASS(klass); PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); - k->is_bridge = true; k->config_write = rp_write_config; k->realize = rp_realize; k->exit = rp_exit; diff --git a/hw/pci-bridge/simba.c b/hw/pci-bridge/simba.c index ba55ab1939..17aa0d7b21 100644 --- a/hw/pci-bridge/simba.c +++ b/hw/pci-bridge/simba.c @@ -77,7 +77,6 @@ static void simba_pci_bridge_class_init(ObjectClass *klass, void *data) k->device_id = PCI_DEVICE_ID_SUN_SIMBA; k->revision = 0x11; k->config_write = pci_bridge_write_config; - k->is_bridge = true; set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); dc->reset = pci_bridge_reset; dc->vmsd = &vmstate_pci_device; diff --git a/hw/pci-bridge/xio3130_downstream.c b/hw/pci-bridge/xio3130_downstream.c index 05e2b06c0c..38a2361fa2 100644 --- a/hw/pci-bridge/xio3130_downstream.c +++ b/hw/pci-bridge/xio3130_downstream.c @@ -159,7 +159,6 @@ static void xio3130_downstream_class_init(ObjectClass *klass, void *data) DeviceClass *dc = DEVICE_CLASS(klass); PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); - k->is_bridge = true; k->config_write = xio3130_downstream_write_config; k->realize = xio3130_downstream_realize; k->exit = xio3130_downstream_exitfn; diff --git a/hw/pci-bridge/xio3130_upstream.c b/hw/pci-bridge/xio3130_upstream.c index 5ff46ef050..a48bfe3bc5 100644 --- a/hw/pci-bridge/xio3130_upstream.c +++ b/hw/pci-bridge/xio3130_upstream.c @@ -128,7 +128,6 @@ static void xio3130_upstream_class_init(ObjectClass *klass, void *data) DeviceClass *dc = DEVICE_CLASS(klass); PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); - k->is_bridge = true; k->config_write = xio3130_upstream_write_config; k->realize = xio3130_upstream_realize; k->exit = xio3130_upstream_exitfn; diff --git a/hw/pci-host/designware.c b/hw/pci-host/designware.c index bde3a343a2..9e183caa48 100644 --- a/hw/pci-host/designware.c +++ b/hw/pci-host/designware.c @@ -600,7 +600,6 @@ static void designware_pcie_root_class_init(ObjectClass *klass, void *data) k->device_id = 0xABCD; k->revision = 0; k->class_id = PCI_CLASS_BRIDGE_PCI; - k->is_bridge = true; k->exit = pci_bridge_exitfn; k->realize = designware_pcie_root_realize; k->config_read = designware_pcie_root_config_read; diff --git a/hw/pci-host/xilinx-pcie.c b/hw/pci-host/xilinx-pcie.c index 38d5901a45..c9ab7052f4 100644 --- a/hw/pci-host/xilinx-pcie.c +++ b/hw/pci-host/xilinx-pcie.c @@ -298,7 +298,6 @@ static void xilinx_pcie_root_class_init(ObjectClass *klass, void *data) k->device_id = 0x7021; k->revision = 0; k->class_id = PCI_CLASS_BRIDGE_HOST; - k->is_bridge = true; k->realize = xilinx_pcie_root_realize; k->exit = pci_bridge_exitfn; dc->reset = pci_bridge_reset; diff --git a/hw/pci/pci.c b/hw/pci/pci.c index 2f450f6a72..fe05b868e1 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -576,7 +576,7 @@ void pci_bus_range(PCIBus *bus, int *min_bus, int *max_bus) for (i = 0; i < ARRAY_SIZE(bus->devices); ++i) { PCIDevice *dev = bus->devices[i]; - if (dev && PCI_DEVICE_GET_CLASS(dev)->is_bridge) { + if (dev && IS_PCI_BRIDGE(dev)) { *min_bus = MIN(*min_bus, dev->config[PCI_SECONDARY_BUS]); *max_bus = MAX(*max_bus, dev->config[PCI_SUBORDINATE_BUS]); } @@ -592,7 +592,6 @@ static int get_pci_config_device(QEMUFile *f, void *pv, size_t size, const VMStateField *field) { PCIDevice *s = container_of(pv, PCIDevice, config); - PCIDeviceClass *pc = PCI_DEVICE_GET_CLASS(s); uint8_t *config; int i; @@ -614,9 +613,8 @@ static int get_pci_config_device(QEMUFile *f, void *pv, size_t size, memcpy(s->config, config, size); pci_update_mappings(s); - if (pc->is_bridge) { - PCIBridge *b = PCI_BRIDGE(s); - pci_bridge_update_mappings(b); + if (IS_PCI_BRIDGE(s)) { + pci_bridge_update_mappings(PCI_BRIDGE(s)); } memory_region_set_enabled(&s->bus_master_enable_region, @@ -1090,9 +1088,10 @@ static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, Error *local_err = NULL; DeviceState *dev = DEVICE(pci_dev); PCIBus *bus = pci_get_bus(pci_dev); + bool is_bridge = IS_PCI_BRIDGE(pci_dev); /* Only pci bridges can be attached to extra PCI root buses */ - if (pci_bus_is_root(bus) && bus->parent_dev && !pc->is_bridge) { + if (pci_bus_is_root(bus) && bus->parent_dev && !is_bridge) { error_setg(errp, "PCI: Only PCI/PCIe bridges can be plugged into %s", bus->parent_dev->name); @@ -1154,7 +1153,7 @@ static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, pci_config_set_revision(pci_dev->config, pc->revision); pci_config_set_class(pci_dev->config, pc->class_id); - if (!pc->is_bridge) { + if (!is_bridge) { if (pc->subsystem_vendor_id || pc->subsystem_id) { pci_set_word(pci_dev->config + PCI_SUBSYSTEM_VENDOR_ID, pc->subsystem_vendor_id); @@ -1171,7 +1170,7 @@ static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, pci_init_cmask(pci_dev); pci_init_wmask(pci_dev); pci_init_w1cmask(pci_dev); - if (pc->is_bridge) { + if (is_bridge) { pci_init_mask_bridge(pci_dev); } pci_init_multifunction(bus, pci_dev, &local_err); @@ -2096,7 +2095,7 @@ static bool pci_root_bus_in_range(PCIBus *bus, int bus_num) for (i = 0; i < ARRAY_SIZE(bus->devices); ++i) { PCIDevice *dev = bus->devices[i]; - if (dev && PCI_DEVICE_GET_CLASS(dev)->is_bridge) { + if (dev && IS_PCI_BRIDGE(dev)) { if (pci_secondary_bus_in_range(dev, bus_num)) { return true; } @@ -2841,7 +2840,6 @@ void pci_setup_iommu(PCIBus *bus, PCIIOMMUFunc fn, void *opaque) static void pci_dev_get_w64(PCIBus *b, PCIDevice *dev, void *opaque) { Range *range = opaque; - PCIDeviceClass *pc = PCI_DEVICE_GET_CLASS(dev); uint16_t cmd = pci_get_word(dev->config + PCI_COMMAND); int i; @@ -2849,7 +2847,7 @@ static void pci_dev_get_w64(PCIBus *b, PCIDevice *dev, void *opaque) return; } - if (pc->is_bridge) { + if (IS_PCI_BRIDGE(dev)) { pcibus_t base = pci_bridge_get_base(dev, PCI_BASE_ADDRESS_MEM_PREFETCH); pcibus_t limit = pci_bridge_get_limit(dev, PCI_BASE_ADDRESS_MEM_PREFETCH); diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c index 7b7618d5da..75aacda65a 100644 --- a/hw/ppc/spapr_pci.c +++ b/hw/ppc/spapr_pci.c @@ -1361,7 +1361,6 @@ static int spapr_dt_pci_device(SpaprPhbState *sphb, PCIDevice *dev, { int offset; g_autofree gchar *nodename = spapr_pci_fw_dev_name(dev); - PCIDeviceClass *pc = PCI_DEVICE_GET_CLASS(dev); ResourceProps rp; SpaprDrc *drc = drc_from_dev(sphb, dev); uint32_t vendor_id = pci_default_read_config(dev, PCI_VENDOR_ID, 2); @@ -1446,7 +1445,7 @@ static int spapr_dt_pci_device(SpaprPhbState *sphb, PCIDevice *dev, spapr_phb_nvgpu_populate_pcidev_dt(dev, fdt, offset, sphb); - if (!pc->is_bridge) { + if (!IS_PCI_BRIDGE(dev)) { /* Properties only for non-bridges */ uint32_t min_grant = pci_default_read_config(dev, PCI_MIN_GNT, 1); uint32_t max_latency = pci_default_read_config(dev, PCI_MAX_LAT, 1); @@ -1544,7 +1543,6 @@ static void spapr_pci_pre_plug(HotplugHandler *plug_handler, { SpaprPhbState *phb = SPAPR_PCI_HOST_BRIDGE(DEVICE(plug_handler)); PCIDevice *pdev = PCI_DEVICE(plugged_dev); - PCIDeviceClass *pc = PCI_DEVICE_GET_CLASS(plugged_dev); SpaprDrc *drc = drc_from_dev(phb, pdev); PCIBus *bus = PCI_BUS(qdev_get_parent_bus(DEVICE(pdev))); uint32_t slotnr = PCI_SLOT(pdev->devfn); @@ -1560,7 +1558,7 @@ static void spapr_pci_pre_plug(HotplugHandler *plug_handler, } } - if (pc->is_bridge) { + if (IS_PCI_BRIDGE(plugged_dev)) { if (!bridge_has_valid_chassis_nr(OBJECT(plugged_dev), errp)) { return; } @@ -1589,7 +1587,6 @@ static void spapr_pci_plug(HotplugHandler *plug_handler, { SpaprPhbState *phb = SPAPR_PCI_HOST_BRIDGE(DEVICE(plug_handler)); PCIDevice *pdev = PCI_DEVICE(plugged_dev); - PCIDeviceClass *pc = PCI_DEVICE_GET_CLASS(plugged_dev); SpaprDrc *drc = drc_from_dev(phb, pdev); uint32_t slotnr = PCI_SLOT(pdev->devfn); @@ -1603,7 +1600,7 @@ static void spapr_pci_plug(HotplugHandler *plug_handler, g_assert(drc); - if (pc->is_bridge) { + if (IS_PCI_BRIDGE(plugged_dev)) { spapr_pci_bridge_plug(phb, PCI_BRIDGE(plugged_dev)); } @@ -1646,7 +1643,6 @@ static void spapr_pci_bridge_unplug(SpaprPhbState *phb, static void spapr_pci_unplug(HotplugHandler *plug_handler, DeviceState *plugged_dev, Error **errp) { - PCIDeviceClass *pc = PCI_DEVICE_GET_CLASS(plugged_dev); SpaprPhbState *phb = SPAPR_PCI_HOST_BRIDGE(DEVICE(plug_handler)); /* some version guests do not wait for completion of a device @@ -1661,7 +1657,7 @@ static void spapr_pci_unplug(HotplugHandler *plug_handler, */ pci_device_reset(PCI_DEVICE(plugged_dev)); - if (pc->is_bridge) { + if (IS_PCI_BRIDGE(plugged_dev)) { spapr_pci_bridge_unplug(phb, PCI_BRIDGE(plugged_dev)); return; } @@ -1686,7 +1682,6 @@ static void spapr_pci_unplug_request(HotplugHandler *plug_handler, g_assert(drc->dev == plugged_dev); if (!spapr_drc_unplug_requested(drc)) { - PCIDeviceClass *pc = PCI_DEVICE_GET_CLASS(plugged_dev); uint32_t slotnr = PCI_SLOT(pdev->devfn); SpaprDrc *func_drc; SpaprDrcClass *func_drck; @@ -1694,7 +1689,7 @@ static void spapr_pci_unplug_request(HotplugHandler *plug_handler, int i; uint8_t chassis = chassis_from_bus(pci_get_bus(pdev)); - if (pc->is_bridge) { + if (IS_PCI_BRIDGE(plugged_dev)) { error_setg(errp, "PCI: Hot unplug of PCI bridges not supported"); return; }