From: Anthony Liguori <aligu...@us.ibm.com> makes pci_host a proper QOM type.
Changelog: * against Andreas pci_host branch * make host bridge TypeInfos const * use PCI_HOST_BRIDGE() where appropriate Signed-off-by: Anthony Liguori <aligu...@us.ibm.com> Signed-off-by: Wanpeng Li <liw...@linux.vnet.ibm.com> --- hw/i440fx.c | 6 +++--- hw/pc.c | 2 +- hw/pci_host.c | 14 ++++++++++++++ hw/pci_host.h | 2 ++ hw/piix3.c | 4 ++-- 5 files changed, 22 insertions(+), 6 deletions(-) diff --git a/hw/i440fx.c b/hw/i440fx.c index 720a25a..fdf040b 100644 --- a/hw/i440fx.c +++ b/hw/i440fx.c @@ -191,7 +191,7 @@ static const VMStateDescription vmstate_i440fx_pmc = { static int i440fx_realize(SysBusDevice *dev) { I440FXState *s = I440FX(dev); - PCIHostState *h = PCI_HOST(s); + PCIHostState *h = PCI_HOST_BRIDGE(s); int bios_size, isa_bios_size; char *filename; int ret; @@ -401,7 +401,7 @@ static void i440fx_pmc_class_init(ObjectClass *klass, void *data) dc->vmsd = &vmstate_i440fx_pmc; } -static TypeInfo i440fx_pmc_info = { +static const TypeInfo i440fx_pmc_info = { .name = TYPE_I440FX_PMC, .parent = TYPE_PCI_DEVICE, .instance_size = sizeof(I440FXPMCState), @@ -418,7 +418,7 @@ static void i440fx_class_init(ObjectClass *klass, void *data) dc->no_user = 1; } -static TypeInfo i440fx_info = { +static const TypeInfo i440fx_info = { .name = TYPE_I440FX, .parent = TYPE_PCI_HOST_BRIDGE, .instance_size = sizeof(I440FXState), diff --git a/hw/pc.c b/hw/pc.c index d9a0443..f095109 100644 --- a/hw/pc.c +++ b/hw/pc.c @@ -1217,7 +1217,7 @@ static PCIBus *i440fx_init(I440FXPMCState **pi440fx_state, int *piix3_devfn, PCIHostState *h; s = I440FX(object_new(TYPE_I440FX)); - h = PCI_HOST(s); + h = PCI_HOST_BRIDGE(s); /* FIXME make a properties */ h->address_space = address_space_mem; diff --git a/hw/pci_host.c b/hw/pci_host.c index 3950e94..4e10042 100644 --- a/hw/pci_host.c +++ b/hw/pci_host.c @@ -165,11 +165,25 @@ const MemoryRegionOps pci_host_data_be_ops = { .endianness = DEVICE_BIG_ENDIAN, }; +void pci_host_set_mmio(PCIHostState *s, MemoryRegion *value) +{ + object_property_set_link(OBJECT(s), OBJECT(value), "mmio", NULL); +} + +static void pci_host_initfn(Object *obj) +{ + PCIHostState *s = PCI_HOST_BRIDGE(obj); + + object_property_add_link(obj, "mmio", "memory-region", + (Object **)&s->address_space, NULL); +} + static const TypeInfo pci_host_type_info = { .name = TYPE_PCI_HOST_BRIDGE, .parent = TYPE_SYS_BUS_DEVICE, .abstract = true, .instance_size = sizeof(PCIHostState), + .instance_init = pci_host_initfn, }; static void pci_host_register_types(void) diff --git a/hw/pci_host.h b/hw/pci_host.h index 4b9c300..9f28728 100644 --- a/hw/pci_host.h +++ b/hw/pci_host.h @@ -54,6 +54,8 @@ uint32_t pci_host_config_read_common(PCIDevice *pci_dev, uint32_t addr, void pci_data_write(PCIBus *s, uint32_t addr, uint32_t val, int len); uint32_t pci_data_read(PCIBus *s, uint32_t addr, int len); +void pci_host_set_mmio(PCIHostState *s, MemoryRegion *value); + extern const MemoryRegionOps pci_host_conf_le_ops; extern const MemoryRegionOps pci_host_conf_be_ops; extern const MemoryRegionOps pci_host_data_le_ops; diff --git a/hw/piix3.c b/hw/piix3.c index eca6ec8..3b69b15 100644 --- a/hw/piix3.c +++ b/hw/piix3.c @@ -204,7 +204,7 @@ static void piix3_class_init(ObjectClass *klass, void *data) k->class_id = PCI_CLASS_BRIDGE_ISA; } -static TypeInfo piix3_info = { +static const TypeInfo piix3_info = { .name = TYPE_PIIX3, .parent = TYPE_PCI_DEVICE, .instance_size = sizeof(PIIX3State), @@ -219,7 +219,7 @@ static void piix3_xen_class_init(ObjectClass *klass, void *data) k->config_write = piix3_write_config_xen; }; -static TypeInfo piix3_xen_info = { +static const TypeInfo piix3_xen_info = { .name = "PIIX3-xen", .parent = TYPE_PIIX3, .instance_size = sizeof(PIIX3State), -- 1.7.5.4