unin_pci: QOM'ify UniNorth PCI host bridges
Introduce type constants and cast macros. Avoid accessing parent fields directly. Signed-off-by: Andreas Färber <afaerber@suse.de> Acked-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
8c9f64df3d
commit
57fd7b7fce
133
hw/unin_pci.c
133
hw/unin_pci.c
@ -38,8 +38,23 @@
|
|||||||
|
|
||||||
static const int unin_irq_line[] = { 0x1b, 0x1c, 0x1d, 0x1e };
|
static const int unin_irq_line[] = { 0x1b, 0x1c, 0x1d, 0x1e };
|
||||||
|
|
||||||
|
#define TYPE_UNI_NORTH_PCI_HOST_BRIDGE "uni-north-pci-pcihost"
|
||||||
|
#define TYPE_UNI_NORTH_AGP_HOST_BRIDGE "uni-north-agp-pcihost"
|
||||||
|
#define TYPE_UNI_NORTH_INTERNAL_PCI_HOST_BRIDGE "uni-north-internal-pci-pcihost"
|
||||||
|
#define TYPE_U3_AGP_HOST_BRIDGE "u3-agp-pcihost"
|
||||||
|
|
||||||
|
#define UNI_NORTH_PCI_HOST_BRIDGE(obj) \
|
||||||
|
OBJECT_CHECK(UNINState, (obj), TYPE_UNI_NORTH_PCI_HOST_BRIDGE)
|
||||||
|
#define UNI_NORTH_AGP_HOST_BRIDGE(obj) \
|
||||||
|
OBJECT_CHECK(UNINState, (obj), TYPE_UNI_NORTH_AGP_HOST_BRIDGE)
|
||||||
|
#define UNI_NORTH_INTERNAL_PCI_HOST_BRIDGE(obj) \
|
||||||
|
OBJECT_CHECK(UNINState, (obj), TYPE_UNI_NORTH_INTERNAL_PCI_HOST_BRIDGE)
|
||||||
|
#define U3_AGP_HOST_BRIDGE(obj) \
|
||||||
|
OBJECT_CHECK(UNINState, (obj), TYPE_U3_AGP_HOST_BRIDGE)
|
||||||
|
|
||||||
typedef struct UNINState {
|
typedef struct UNINState {
|
||||||
PCIHostState host_state;
|
PCIHostState host_state;
|
||||||
|
|
||||||
MemoryRegion pci_mmio;
|
MemoryRegion pci_mmio;
|
||||||
MemoryRegion pci_hole;
|
MemoryRegion pci_hole;
|
||||||
} UNINState;
|
} UNINState;
|
||||||
@ -130,19 +145,17 @@ static const MemoryRegionOps unin_data_ops = {
|
|||||||
static int pci_unin_main_init_device(SysBusDevice *dev)
|
static int pci_unin_main_init_device(SysBusDevice *dev)
|
||||||
{
|
{
|
||||||
PCIHostState *h;
|
PCIHostState *h;
|
||||||
UNINState *s;
|
|
||||||
|
|
||||||
/* Use values found on a real PowerMac */
|
/* Use values found on a real PowerMac */
|
||||||
/* Uninorth main bus */
|
/* Uninorth main bus */
|
||||||
h = FROM_SYSBUS(PCIHostState, dev);
|
h = FROM_SYSBUS(PCIHostState, dev);
|
||||||
s = DO_UPCAST(UNINState, host_state, h);
|
|
||||||
|
|
||||||
memory_region_init_io(&s->host_state.conf_mem, &pci_host_conf_le_ops,
|
memory_region_init_io(&h->conf_mem, &pci_host_conf_le_ops,
|
||||||
&s->host_state, "pci-conf-idx", 0x1000);
|
dev, "pci-conf-idx", 0x1000);
|
||||||
memory_region_init_io(&s->host_state.data_mem, &unin_data_ops, s,
|
memory_region_init_io(&h->data_mem, &unin_data_ops, dev,
|
||||||
"pci-conf-data", 0x1000);
|
"pci-conf-data", 0x1000);
|
||||||
sysbus_init_mmio(dev, &s->host_state.conf_mem);
|
sysbus_init_mmio(dev, &h->conf_mem);
|
||||||
sysbus_init_mmio(dev, &s->host_state.data_mem);
|
sysbus_init_mmio(dev, &h->data_mem);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -151,18 +164,16 @@ static int pci_unin_main_init_device(SysBusDevice *dev)
|
|||||||
static int pci_u3_agp_init_device(SysBusDevice *dev)
|
static int pci_u3_agp_init_device(SysBusDevice *dev)
|
||||||
{
|
{
|
||||||
PCIHostState *h;
|
PCIHostState *h;
|
||||||
UNINState *s;
|
|
||||||
|
|
||||||
/* Uninorth U3 AGP bus */
|
/* Uninorth U3 AGP bus */
|
||||||
h = FROM_SYSBUS(PCIHostState, dev);
|
h = FROM_SYSBUS(PCIHostState, dev);
|
||||||
s = DO_UPCAST(UNINState, host_state, h);
|
|
||||||
|
|
||||||
memory_region_init_io(&s->host_state.conf_mem, &pci_host_conf_le_ops,
|
memory_region_init_io(&h->conf_mem, &pci_host_conf_le_ops,
|
||||||
&s->host_state, "pci-conf-idx", 0x1000);
|
dev, "pci-conf-idx", 0x1000);
|
||||||
memory_region_init_io(&s->host_state.data_mem, &unin_data_ops, s,
|
memory_region_init_io(&h->data_mem, &unin_data_ops, dev,
|
||||||
"pci-conf-data", 0x1000);
|
"pci-conf-data", 0x1000);
|
||||||
sysbus_init_mmio(dev, &s->host_state.conf_mem);
|
sysbus_init_mmio(dev, &h->conf_mem);
|
||||||
sysbus_init_mmio(dev, &s->host_state.data_mem);
|
sysbus_init_mmio(dev, &h->data_mem);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -170,36 +181,32 @@ static int pci_u3_agp_init_device(SysBusDevice *dev)
|
|||||||
static int pci_unin_agp_init_device(SysBusDevice *dev)
|
static int pci_unin_agp_init_device(SysBusDevice *dev)
|
||||||
{
|
{
|
||||||
PCIHostState *h;
|
PCIHostState *h;
|
||||||
UNINState *s;
|
|
||||||
|
|
||||||
/* Uninorth AGP bus */
|
/* Uninorth AGP bus */
|
||||||
h = FROM_SYSBUS(PCIHostState, dev);
|
h = FROM_SYSBUS(PCIHostState, dev);
|
||||||
s = DO_UPCAST(UNINState, host_state, h);
|
|
||||||
|
|
||||||
memory_region_init_io(&s->host_state.conf_mem, &pci_host_conf_le_ops,
|
memory_region_init_io(&h->conf_mem, &pci_host_conf_le_ops,
|
||||||
&s->host_state, "pci-conf-idx", 0x1000);
|
dev, "pci-conf-idx", 0x1000);
|
||||||
memory_region_init_io(&s->host_state.data_mem, &pci_host_data_le_ops,
|
memory_region_init_io(&h->data_mem, &pci_host_data_le_ops,
|
||||||
&s->host_state, "pci-conf-data", 0x1000);
|
dev, "pci-conf-data", 0x1000);
|
||||||
sysbus_init_mmio(dev, &s->host_state.conf_mem);
|
sysbus_init_mmio(dev, &h->conf_mem);
|
||||||
sysbus_init_mmio(dev, &s->host_state.data_mem);
|
sysbus_init_mmio(dev, &h->data_mem);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int pci_unin_internal_init_device(SysBusDevice *dev)
|
static int pci_unin_internal_init_device(SysBusDevice *dev)
|
||||||
{
|
{
|
||||||
PCIHostState *h;
|
PCIHostState *h;
|
||||||
UNINState *s;
|
|
||||||
|
|
||||||
/* Uninorth internal bus */
|
/* Uninorth internal bus */
|
||||||
h = FROM_SYSBUS(PCIHostState, dev);
|
h = FROM_SYSBUS(PCIHostState, dev);
|
||||||
s = DO_UPCAST(UNINState, host_state, h);
|
|
||||||
|
|
||||||
memory_region_init_io(&s->host_state.conf_mem, &pci_host_conf_le_ops,
|
memory_region_init_io(&h->conf_mem, &pci_host_conf_le_ops,
|
||||||
&s->host_state, "pci-conf-idx", 0x1000);
|
dev, "pci-conf-idx", 0x1000);
|
||||||
memory_region_init_io(&s->host_state.data_mem, &pci_host_data_le_ops,
|
memory_region_init_io(&h->data_mem, &pci_host_data_le_ops,
|
||||||
&s->host_state, "pci-conf-data", 0x1000);
|
dev, "pci-conf-data", 0x1000);
|
||||||
sysbus_init_mmio(dev, &s->host_state.conf_mem);
|
sysbus_init_mmio(dev, &h->conf_mem);
|
||||||
sysbus_init_mmio(dev, &s->host_state.data_mem);
|
sysbus_init_mmio(dev, &h->data_mem);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -214,26 +221,26 @@ PCIBus *pci_pmac_init(qemu_irq *pic,
|
|||||||
|
|
||||||
/* Use values found on a real PowerMac */
|
/* Use values found on a real PowerMac */
|
||||||
/* Uninorth main bus */
|
/* Uninorth main bus */
|
||||||
dev = qdev_create(NULL, "uni-north-pci-pcihost");
|
dev = qdev_create(NULL, TYPE_UNI_NORTH_PCI_HOST_BRIDGE);
|
||||||
qdev_init_nofail(dev);
|
qdev_init_nofail(dev);
|
||||||
s = sysbus_from_qdev(dev);
|
s = SYS_BUS_DEVICE(dev);
|
||||||
h = FROM_SYSBUS(PCIHostState, s);
|
h = FROM_SYSBUS(PCIHostState, s);
|
||||||
d = DO_UPCAST(UNINState, host_state, h);
|
d = UNI_NORTH_PCI_HOST_BRIDGE(dev);
|
||||||
memory_region_init(&d->pci_mmio, "pci-mmio", 0x100000000ULL);
|
memory_region_init(&d->pci_mmio, "pci-mmio", 0x100000000ULL);
|
||||||
memory_region_init_alias(&d->pci_hole, "pci-hole", &d->pci_mmio,
|
memory_region_init_alias(&d->pci_hole, "pci-hole", &d->pci_mmio,
|
||||||
0x80000000ULL, 0x70000000ULL);
|
0x80000000ULL, 0x70000000ULL);
|
||||||
memory_region_add_subregion(address_space_mem, 0x80000000ULL,
|
memory_region_add_subregion(address_space_mem, 0x80000000ULL,
|
||||||
&d->pci_hole);
|
&d->pci_hole);
|
||||||
|
|
||||||
d->host_state.bus = pci_register_bus(dev, "pci",
|
h->bus = pci_register_bus(dev, "pci",
|
||||||
pci_unin_set_irq, pci_unin_map_irq,
|
pci_unin_set_irq, pci_unin_map_irq,
|
||||||
pic,
|
pic,
|
||||||
&d->pci_mmio,
|
&d->pci_mmio,
|
||||||
address_space_io,
|
address_space_io,
|
||||||
PCI_DEVFN(11, 0), 4);
|
PCI_DEVFN(11, 0), 4);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
pci_create_simple(d->host_state.bus, PCI_DEVFN(11, 0), "uni-north");
|
pci_create_simple(h->bus, PCI_DEVFN(11, 0), "uni-north");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
sysbus_mmio_map(s, 0, 0xf2800000);
|
sysbus_mmio_map(s, 0, 0xf2800000);
|
||||||
@ -242,30 +249,30 @@ PCIBus *pci_pmac_init(qemu_irq *pic,
|
|||||||
/* DEC 21154 bridge */
|
/* DEC 21154 bridge */
|
||||||
#if 0
|
#if 0
|
||||||
/* XXX: not activated as PPC BIOS doesn't handle multiple buses properly */
|
/* XXX: not activated as PPC BIOS doesn't handle multiple buses properly */
|
||||||
pci_create_simple(d->host_state.bus, PCI_DEVFN(12, 0), "dec-21154");
|
pci_create_simple(h->bus, PCI_DEVFN(12, 0), "dec-21154");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Uninorth AGP bus */
|
/* Uninorth AGP bus */
|
||||||
pci_create_simple(d->host_state.bus, PCI_DEVFN(11, 0), "uni-north-agp");
|
pci_create_simple(h->bus, PCI_DEVFN(11, 0), "uni-north-agp");
|
||||||
dev = qdev_create(NULL, "uni-north-agp-pcihost");
|
dev = qdev_create(NULL, TYPE_UNI_NORTH_AGP_HOST_BRIDGE);
|
||||||
qdev_init_nofail(dev);
|
qdev_init_nofail(dev);
|
||||||
s = sysbus_from_qdev(dev);
|
s = SYS_BUS_DEVICE(dev);
|
||||||
sysbus_mmio_map(s, 0, 0xf0800000);
|
sysbus_mmio_map(s, 0, 0xf0800000);
|
||||||
sysbus_mmio_map(s, 1, 0xf0c00000);
|
sysbus_mmio_map(s, 1, 0xf0c00000);
|
||||||
|
|
||||||
/* Uninorth internal bus */
|
/* Uninorth internal bus */
|
||||||
#if 0
|
#if 0
|
||||||
/* XXX: not needed for now */
|
/* XXX: not needed for now */
|
||||||
pci_create_simple(d->host_state.bus, PCI_DEVFN(14, 0),
|
pci_create_simple(h->bus, PCI_DEVFN(14, 0),
|
||||||
"uni-north-internal-pci");
|
"uni-north-internal-pci");
|
||||||
dev = qdev_create(NULL, "uni-north-internal-pci-pcihost");
|
dev = qdev_create(NULL, TYPE_UNI_NORTH_INTERNAL_PCI_HOST_BRIDGE);
|
||||||
qdev_init_nofail(dev);
|
qdev_init_nofail(dev);
|
||||||
s = sysbus_from_qdev(dev);
|
s = SYS_BUS_DEVICE(dev);
|
||||||
sysbus_mmio_map(s, 0, 0xf4800000);
|
sysbus_mmio_map(s, 0, 0xf4800000);
|
||||||
sysbus_mmio_map(s, 1, 0xf4c00000);
|
sysbus_mmio_map(s, 1, 0xf4c00000);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return d->host_state.bus;
|
return h->bus;
|
||||||
}
|
}
|
||||||
|
|
||||||
PCIBus *pci_pmac_u3_init(qemu_irq *pic,
|
PCIBus *pci_pmac_u3_init(qemu_irq *pic,
|
||||||
@ -279,11 +286,11 @@ PCIBus *pci_pmac_u3_init(qemu_irq *pic,
|
|||||||
|
|
||||||
/* Uninorth AGP bus */
|
/* Uninorth AGP bus */
|
||||||
|
|
||||||
dev = qdev_create(NULL, "u3-agp-pcihost");
|
dev = qdev_create(NULL, TYPE_U3_AGP_HOST_BRIDGE);
|
||||||
qdev_init_nofail(dev);
|
qdev_init_nofail(dev);
|
||||||
s = sysbus_from_qdev(dev);
|
s = SYS_BUS_DEVICE(dev);
|
||||||
h = FROM_SYSBUS(PCIHostState, s);
|
h = FROM_SYSBUS(PCIHostState, s);
|
||||||
d = DO_UPCAST(UNINState, host_state, h);
|
d = U3_AGP_HOST_BRIDGE(dev);
|
||||||
|
|
||||||
memory_region_init(&d->pci_mmio, "pci-mmio", 0x100000000ULL);
|
memory_region_init(&d->pci_mmio, "pci-mmio", 0x100000000ULL);
|
||||||
memory_region_init_alias(&d->pci_hole, "pci-hole", &d->pci_mmio,
|
memory_region_init_alias(&d->pci_hole, "pci-hole", &d->pci_mmio,
|
||||||
@ -291,19 +298,19 @@ PCIBus *pci_pmac_u3_init(qemu_irq *pic,
|
|||||||
memory_region_add_subregion(address_space_mem, 0x80000000ULL,
|
memory_region_add_subregion(address_space_mem, 0x80000000ULL,
|
||||||
&d->pci_hole);
|
&d->pci_hole);
|
||||||
|
|
||||||
d->host_state.bus = pci_register_bus(dev, "pci",
|
h->bus = pci_register_bus(dev, "pci",
|
||||||
pci_unin_set_irq, pci_unin_map_irq,
|
pci_unin_set_irq, pci_unin_map_irq,
|
||||||
pic,
|
pic,
|
||||||
&d->pci_mmio,
|
&d->pci_mmio,
|
||||||
address_space_io,
|
address_space_io,
|
||||||
PCI_DEVFN(11, 0), 4);
|
PCI_DEVFN(11, 0), 4);
|
||||||
|
|
||||||
sysbus_mmio_map(s, 0, 0xf0800000);
|
sysbus_mmio_map(s, 0, 0xf0800000);
|
||||||
sysbus_mmio_map(s, 1, 0xf0c00000);
|
sysbus_mmio_map(s, 1, 0xf0c00000);
|
||||||
|
|
||||||
pci_create_simple(d->host_state.bus, 11 << 3, "u3-agp");
|
pci_create_simple(h->bus, 11 << 3, "u3-agp");
|
||||||
|
|
||||||
return d->host_state.bus;
|
return h->bus;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int unin_main_pci_host_init(PCIDevice *d)
|
static int unin_main_pci_host_init(PCIDevice *d)
|
||||||
@ -419,7 +426,7 @@ static void pci_unin_main_class_init(ObjectClass *klass, void *data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const TypeInfo pci_unin_main_info = {
|
static const TypeInfo pci_unin_main_info = {
|
||||||
.name = "uni-north-pci-pcihost",
|
.name = TYPE_UNI_NORTH_PCI_HOST_BRIDGE,
|
||||||
.parent = TYPE_SYS_BUS_DEVICE,
|
.parent = TYPE_SYS_BUS_DEVICE,
|
||||||
.instance_size = sizeof(UNINState),
|
.instance_size = sizeof(UNINState),
|
||||||
.class_init = pci_unin_main_class_init,
|
.class_init = pci_unin_main_class_init,
|
||||||
@ -433,7 +440,7 @@ static void pci_u3_agp_class_init(ObjectClass *klass, void *data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const TypeInfo pci_u3_agp_info = {
|
static const TypeInfo pci_u3_agp_info = {
|
||||||
.name = "u3-agp-pcihost",
|
.name = TYPE_U3_AGP_HOST_BRIDGE,
|
||||||
.parent = TYPE_SYS_BUS_DEVICE,
|
.parent = TYPE_SYS_BUS_DEVICE,
|
||||||
.instance_size = sizeof(UNINState),
|
.instance_size = sizeof(UNINState),
|
||||||
.class_init = pci_u3_agp_class_init,
|
.class_init = pci_u3_agp_class_init,
|
||||||
@ -447,7 +454,7 @@ static void pci_unin_agp_class_init(ObjectClass *klass, void *data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const TypeInfo pci_unin_agp_info = {
|
static const TypeInfo pci_unin_agp_info = {
|
||||||
.name = "uni-north-agp-pcihost",
|
.name = TYPE_UNI_NORTH_AGP_HOST_BRIDGE,
|
||||||
.parent = TYPE_SYS_BUS_DEVICE,
|
.parent = TYPE_SYS_BUS_DEVICE,
|
||||||
.instance_size = sizeof(UNINState),
|
.instance_size = sizeof(UNINState),
|
||||||
.class_init = pci_unin_agp_class_init,
|
.class_init = pci_unin_agp_class_init,
|
||||||
@ -461,7 +468,7 @@ static void pci_unin_internal_class_init(ObjectClass *klass, void *data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const TypeInfo pci_unin_internal_info = {
|
static const TypeInfo pci_unin_internal_info = {
|
||||||
.name = "uni-north-internal-pci-pcihost",
|
.name = TYPE_UNI_NORTH_INTERNAL_PCI_HOST_BRIDGE,
|
||||||
.parent = TYPE_SYS_BUS_DEVICE,
|
.parent = TYPE_SYS_BUS_DEVICE,
|
||||||
.instance_size = sizeof(UNINState),
|
.instance_size = sizeof(UNINState),
|
||||||
.class_init = pci_unin_internal_class_init,
|
.class_init = pci_unin_internal_class_init,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user