28
28
#include "qemu/bswap.h"
29
29
#include "exec/address-spaces.h"
31
#define TYPE_SH_PCI_HOST_BRIDGE "sh_pci"
33
#define SH_PCI_HOST_BRIDGE(obj) \
34
OBJECT_CHECK(SHPCIState, (obj), TYPE_SH_PCI_HOST_BRIDGE)
31
36
typedef struct SHPCIState {
37
PCIHostState parent_obj;
36
41
MemoryRegion memconfig_p4;
113
122
static int sh_pci_device_init(SysBusDevice *dev)
118
s = FROM_SYSBUS(SHPCIState, dev);
128
s = SH_PCI_HOST_BRIDGE(dev);
129
phb = PCI_HOST_BRIDGE(s);
119
130
for (i = 0; i < 4; i++) {
120
131
sysbus_init_irq(dev, &s->irq[i]);
122
s->bus = pci_register_bus(&s->busdev.qdev, "pci",
123
sh_pci_set_irq, sh_pci_map_irq,
127
PCI_DEVFN(0, 0), 4, TYPE_PCI_BUS);
128
memory_region_init_io(&s->memconfig_p4, &sh_pci_reg_ops, s,
133
phb->bus = pci_register_bus(DEVICE(dev), "pci",
134
sh_pci_set_irq, sh_pci_map_irq,
138
PCI_DEVFN(0, 0), 4, TYPE_PCI_BUS);
139
memory_region_init_io(&s->memconfig_p4, OBJECT(s), &sh_pci_reg_ops, s,
129
140
"sh_pci", 0x224);
130
memory_region_init_alias(&s->memconfig_a7, "sh_pci.2", &s->memconfig_p4,
132
isa_mmio_setup(&s->isa, 0x40000);
141
memory_region_init_alias(&s->memconfig_a7, OBJECT(s), "sh_pci.2",
142
&s->memconfig_p4, 0, 0x224);
143
memory_region_init_alias(&s->isa, OBJECT(s), "sh_pci.isa",
144
get_system_io(), 0, 0x40000);
133
145
sysbus_init_mmio(dev, &s->memconfig_p4);
134
146
sysbus_init_mmio(dev, &s->memconfig_a7);
135
147
s->iobr = 0xfe240000;
136
148
memory_region_add_subregion(get_system_memory(), s->iobr, &s->isa);
138
s->dev = pci_create_simple(s->bus, PCI_DEVFN(0, 0), "sh_pci_host");
150
s->dev = pci_create_simple(phb->bus, PCI_DEVFN(0, 0), "sh_pci_host");
173
185
static const TypeInfo sh_pci_device_info = {
175
.parent = TYPE_SYS_BUS_DEVICE,
186
.name = TYPE_SH_PCI_HOST_BRIDGE,
187
.parent = TYPE_PCI_HOST_BRIDGE,
176
188
.instance_size = sizeof(SHPCIState),
177
189
.class_init = sh_pci_device_class_init,