提交 aee97b84 编写于 作者: A Avi Kivity 提交者: Anthony Liguori

pci: pass I/O address space to new PCI bus

This lets us register BARs in the I/O address space.
Reviewed-by: NRichard Henderson <rth@twiddle.net>
Reviewed-by: NAnthony Liguori <aliguori@us.ibm.com>
Signed-off-by: NAvi Kivity <avi@redhat.com>
Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
上级 309cb471
...@@ -348,6 +348,7 @@ PCIBus *pci_apb_init(target_phys_addr_t special_base, ...@@ -348,6 +348,7 @@ PCIBus *pci_apb_init(target_phys_addr_t special_base,
d->bus = pci_register_bus(&d->busdev.qdev, "pci", d->bus = pci_register_bus(&d->busdev.qdev, "pci",
pci_apb_set_irq, pci_pbm_map_irq, d, pci_apb_set_irq, pci_pbm_map_irq, d,
get_system_memory(), get_system_memory(),
get_system_io(),
0, 32); 0, 32);
pci_bus_set_mem_base(d->bus, mem_base); pci_bus_set_mem_base(d->bus, mem_base);
......
...@@ -775,6 +775,7 @@ PCIBus *bonito_init(qemu_irq *pic) ...@@ -775,6 +775,7 @@ PCIBus *bonito_init(qemu_irq *pic)
pcihost = FROM_SYSBUS(BonitoState, sysbus_from_qdev(dev)); pcihost = FROM_SYSBUS(BonitoState, sysbus_from_qdev(dev));
b = pci_register_bus(&pcihost->busdev.qdev, "pci", pci_bonito_set_irq, b = pci_register_bus(&pcihost->busdev.qdev, "pci", pci_bonito_set_irq,
pci_bonito_map_irq, pic, get_system_memory(), pci_bonito_map_irq, pic, get_system_memory(),
get_system_io(),
0x28, 32); 0x28, 32);
pcihost->bus = b; pcihost->bus = b;
qdev_init_nofail(dev); qdev_init_nofail(dev);
......
...@@ -62,7 +62,8 @@ static void pci_grackle_reset(void *opaque) ...@@ -62,7 +62,8 @@ static void pci_grackle_reset(void *opaque)
} }
PCIBus *pci_grackle_init(uint32_t base, qemu_irq *pic, PCIBus *pci_grackle_init(uint32_t base, qemu_irq *pic,
MemoryRegion *address_space) MemoryRegion *address_space_mem,
MemoryRegion *address_space_io)
{ {
DeviceState *dev; DeviceState *dev;
SysBusDevice *s; SysBusDevice *s;
...@@ -75,7 +76,10 @@ PCIBus *pci_grackle_init(uint32_t base, qemu_irq *pic, ...@@ -75,7 +76,10 @@ PCIBus *pci_grackle_init(uint32_t base, qemu_irq *pic,
d->host_state.bus = pci_register_bus(&d->busdev.qdev, "pci", d->host_state.bus = pci_register_bus(&d->busdev.qdev, "pci",
pci_grackle_set_irq, pci_grackle_set_irq,
pci_grackle_map_irq, pci_grackle_map_irq,
pic, address_space, 0, 4); pic,
address_space_mem,
address_space_io,
0, 4);
pci_create_simple(d->host_state.bus, 0, "grackle"); pci_create_simple(d->host_state.bus, 0, "grackle");
......
...@@ -1093,7 +1093,9 @@ PCIBus *gt64120_register(qemu_irq *pic) ...@@ -1093,7 +1093,9 @@ PCIBus *gt64120_register(qemu_irq *pic)
d = FROM_SYSBUS(GT64120State, s); d = FROM_SYSBUS(GT64120State, s);
d->pci.bus = pci_register_bus(&d->busdev.qdev, "pci", d->pci.bus = pci_register_bus(&d->busdev.qdev, "pci",
gt64120_pci_set_irq, gt64120_pci_map_irq, gt64120_pci_set_irq, gt64120_pci_map_irq,
pic, get_system_memory(), pic,
get_system_memory(),
get_system_io(),
PCI_DEVFN(18, 0), 4); PCI_DEVFN(18, 0), 4);
d->ISD_handle = cpu_register_io_memory(gt64120_read, gt64120_write, d, d->ISD_handle = cpu_register_io_memory(gt64120_read, gt64120_write, d,
DEVICE_NATIVE_ENDIAN); DEVICE_NATIVE_ENDIAN);
......
...@@ -179,7 +179,9 @@ struct PCII440FXState; ...@@ -179,7 +179,9 @@ struct PCII440FXState;
typedef struct PCII440FXState PCII440FXState; typedef struct PCII440FXState PCII440FXState;
PCIBus *i440fx_init(PCII440FXState **pi440fx_state, int *piix_devfn, PCIBus *i440fx_init(PCII440FXState **pi440fx_state, int *piix_devfn,
qemu_irq *pic, MemoryRegion *address_space, qemu_irq *pic,
MemoryRegion *address_space_mem,
MemoryRegion *address_space_io,
ram_addr_t ram_size); ram_addr_t ram_size);
void i440fx_init_memory_mappings(PCII440FXState *d); void i440fx_init_memory_mappings(PCII440FXState *d);
......
...@@ -69,6 +69,7 @@ static void ioapic_init(IsaIrqState *isa_irq_state) ...@@ -69,6 +69,7 @@ static void ioapic_init(IsaIrqState *isa_irq_state)
/* PC hardware initialisation */ /* PC hardware initialisation */
static void pc_init1(MemoryRegion *system_memory, static void pc_init1(MemoryRegion *system_memory,
MemoryRegion *system_io,
ram_addr_t ram_size, ram_addr_t ram_size,
const char *boot_device, const char *boot_device,
const char *kernel_filename, const char *kernel_filename,
...@@ -129,7 +130,7 @@ static void pc_init1(MemoryRegion *system_memory, ...@@ -129,7 +130,7 @@ static void pc_init1(MemoryRegion *system_memory,
if (pci_enabled) { if (pci_enabled) {
pci_bus = i440fx_init(&i440fx_state, &piix3_devfn, isa_irq, pci_bus = i440fx_init(&i440fx_state, &piix3_devfn, isa_irq,
system_memory, ram_size); system_memory, system_io, ram_size);
} else { } else {
pci_bus = NULL; pci_bus = NULL;
i440fx_state = NULL; i440fx_state = NULL;
...@@ -218,6 +219,7 @@ static void pc_init_pci(ram_addr_t ram_size, ...@@ -218,6 +219,7 @@ static void pc_init_pci(ram_addr_t ram_size,
const char *cpu_model) const char *cpu_model)
{ {
pc_init1(get_system_memory(), pc_init1(get_system_memory(),
get_system_io(),
ram_size, boot_device, ram_size, boot_device,
kernel_filename, kernel_cmdline, kernel_filename, kernel_cmdline,
initrd_filename, cpu_model, 1, 1); initrd_filename, cpu_model, 1, 1);
...@@ -231,6 +233,7 @@ static void pc_init_pci_no_kvmclock(ram_addr_t ram_size, ...@@ -231,6 +233,7 @@ static void pc_init_pci_no_kvmclock(ram_addr_t ram_size,
const char *cpu_model) const char *cpu_model)
{ {
pc_init1(get_system_memory(), pc_init1(get_system_memory(),
get_system_io(),
ram_size, boot_device, ram_size, boot_device,
kernel_filename, kernel_cmdline, kernel_filename, kernel_cmdline,
initrd_filename, cpu_model, 1, 0); initrd_filename, cpu_model, 1, 0);
...@@ -246,6 +249,7 @@ static void pc_init_isa(ram_addr_t ram_size, ...@@ -246,6 +249,7 @@ static void pc_init_isa(ram_addr_t ram_size,
if (cpu_model == NULL) if (cpu_model == NULL)
cpu_model = "486"; cpu_model = "486";
pc_init1(get_system_memory(), pc_init1(get_system_memory(),
get_system_io(),
ram_size, boot_device, ram_size, boot_device,
kernel_filename, kernel_cmdline, kernel_filename, kernel_cmdline,
initrd_filename, cpu_model, 0, 1); initrd_filename, cpu_model, 0, 1);
......
...@@ -264,13 +264,14 @@ int pci_find_domain(const PCIBus *bus) ...@@ -264,13 +264,14 @@ int pci_find_domain(const PCIBus *bus)
void pci_bus_new_inplace(PCIBus *bus, DeviceState *parent, void pci_bus_new_inplace(PCIBus *bus, DeviceState *parent,
const char *name, const char *name,
MemoryRegion *address_space, MemoryRegion *address_space_mem,
MemoryRegion *address_space_io,
uint8_t devfn_min) uint8_t devfn_min)
{ {
qbus_create_inplace(&bus->qbus, &pci_bus_info, parent, name); qbus_create_inplace(&bus->qbus, &pci_bus_info, parent, name);
assert(PCI_FUNC(devfn_min) == 0); assert(PCI_FUNC(devfn_min) == 0);
bus->devfn_min = devfn_min; bus->devfn_min = devfn_min;
bus->address_space = address_space; bus->address_space = address_space_mem;
/* host bridge */ /* host bridge */
QLIST_INIT(&bus->child); QLIST_INIT(&bus->child);
...@@ -280,13 +281,16 @@ void pci_bus_new_inplace(PCIBus *bus, DeviceState *parent, ...@@ -280,13 +281,16 @@ void pci_bus_new_inplace(PCIBus *bus, DeviceState *parent,
} }
PCIBus *pci_bus_new(DeviceState *parent, const char *name, PCIBus *pci_bus_new(DeviceState *parent, const char *name,
MemoryRegion *address_space, uint8_t devfn_min) MemoryRegion *address_space_mem,
MemoryRegion *address_space_io,
uint8_t devfn_min)
{ {
PCIBus *bus; PCIBus *bus;
bus = qemu_mallocz(sizeof(*bus)); bus = qemu_mallocz(sizeof(*bus));
bus->qbus.qdev_allocated = 1; bus->qbus.qdev_allocated = 1;
pci_bus_new_inplace(bus, parent, name, address_space, devfn_min); pci_bus_new_inplace(bus, parent, name, address_space_mem,
address_space_io, devfn_min);
return bus; return bus;
} }
...@@ -315,12 +319,14 @@ void pci_bus_set_mem_base(PCIBus *bus, target_phys_addr_t base) ...@@ -315,12 +319,14 @@ void pci_bus_set_mem_base(PCIBus *bus, target_phys_addr_t base)
PCIBus *pci_register_bus(DeviceState *parent, const char *name, PCIBus *pci_register_bus(DeviceState *parent, const char *name,
pci_set_irq_fn set_irq, pci_map_irq_fn map_irq, pci_set_irq_fn set_irq, pci_map_irq_fn map_irq,
void *irq_opaque, void *irq_opaque,
MemoryRegion *address_space, MemoryRegion *address_space_mem,
MemoryRegion *address_space_io,
uint8_t devfn_min, int nirq) uint8_t devfn_min, int nirq)
{ {
PCIBus *bus; PCIBus *bus;
bus = pci_bus_new(parent, name, address_space, devfn_min); bus = pci_bus_new(parent, name, address_space_mem,
address_space_io, devfn_min);
pci_bus_irqs(bus, set_irq, map_irq, irq_opaque, nirq); pci_bus_irqs(bus, set_irq, map_irq, irq_opaque, nirq);
return bus; return bus;
} }
......
...@@ -239,10 +239,13 @@ typedef int (*pci_hotplug_fn)(DeviceState *qdev, PCIDevice *pci_dev, ...@@ -239,10 +239,13 @@ typedef int (*pci_hotplug_fn)(DeviceState *qdev, PCIDevice *pci_dev,
PCIHotplugState state); PCIHotplugState state);
void pci_bus_new_inplace(PCIBus *bus, DeviceState *parent, void pci_bus_new_inplace(PCIBus *bus, DeviceState *parent,
const char *name, const char *name,
MemoryRegion *address_space, MemoryRegion *address_space_mem,
MemoryRegion *address_space_io,
uint8_t devfn_min); uint8_t devfn_min);
PCIBus *pci_bus_new(DeviceState *parent, const char *name, PCIBus *pci_bus_new(DeviceState *parent, const char *name,
MemoryRegion *address_space, uint8_t devfn_min); MemoryRegion *address_space_mem,
MemoryRegion *address_space_io,
uint8_t devfn_min);
void pci_bus_irqs(PCIBus *bus, pci_set_irq_fn set_irq, pci_map_irq_fn map_irq, void pci_bus_irqs(PCIBus *bus, pci_set_irq_fn set_irq, pci_map_irq_fn map_irq,
void *irq_opaque, int nirq); void *irq_opaque, int nirq);
int pci_bus_get_irq_level(PCIBus *bus, int irq_num); int pci_bus_get_irq_level(PCIBus *bus, int irq_num);
...@@ -250,7 +253,8 @@ void pci_bus_hotplug(PCIBus *bus, pci_hotplug_fn hotplug, DeviceState *dev); ...@@ -250,7 +253,8 @@ void pci_bus_hotplug(PCIBus *bus, pci_hotplug_fn hotplug, DeviceState *dev);
PCIBus *pci_register_bus(DeviceState *parent, const char *name, PCIBus *pci_register_bus(DeviceState *parent, const char *name,
pci_set_irq_fn set_irq, pci_map_irq_fn map_irq, pci_set_irq_fn set_irq, pci_map_irq_fn map_irq,
void *irq_opaque, void *irq_opaque,
MemoryRegion *address_space, MemoryRegion *address_space_mem,
MemoryRegion *address_space_io,
uint8_t devfn_min, int nirq); uint8_t devfn_min, int nirq);
void pci_device_reset(PCIDevice *dev); void pci_device_reset(PCIDevice *dev);
void pci_bus_reset(PCIBus *bus); void pci_bus_reset(PCIBus *bus);
......
...@@ -242,7 +242,8 @@ static PCIBus *i440fx_common_init(const char *device_name, ...@@ -242,7 +242,8 @@ static PCIBus *i440fx_common_init(const char *device_name,
PCII440FXState **pi440fx_state, PCII440FXState **pi440fx_state,
int *piix3_devfn, int *piix3_devfn,
qemu_irq *pic, qemu_irq *pic,
MemoryRegion *address_space, MemoryRegion *address_space_mem,
MemoryRegion *address_space_io,
ram_addr_t ram_size) ram_addr_t ram_size)
{ {
DeviceState *dev; DeviceState *dev;
...@@ -253,8 +254,9 @@ static PCIBus *i440fx_common_init(const char *device_name, ...@@ -253,8 +254,9 @@ static PCIBus *i440fx_common_init(const char *device_name,
dev = qdev_create(NULL, "i440FX-pcihost"); dev = qdev_create(NULL, "i440FX-pcihost");
s = FROM_SYSBUS(I440FXState, sysbus_from_qdev(dev)); s = FROM_SYSBUS(I440FXState, sysbus_from_qdev(dev));
s->address_space = address_space; s->address_space = address_space_mem;
b = pci_bus_new(&s->busdev.qdev, NULL, s->address_space, 0); b = pci_bus_new(&s->busdev.qdev, NULL, s->address_space,
address_space_io, 0);
s->bus = b; s->bus = b;
qdev_init_nofail(dev); qdev_init_nofail(dev);
...@@ -291,13 +293,15 @@ static PCIBus *i440fx_common_init(const char *device_name, ...@@ -291,13 +293,15 @@ static PCIBus *i440fx_common_init(const char *device_name,
} }
PCIBus *i440fx_init(PCII440FXState **pi440fx_state, int *piix3_devfn, PCIBus *i440fx_init(PCII440FXState **pi440fx_state, int *piix3_devfn,
qemu_irq *pic, MemoryRegion *address_space, qemu_irq *pic,
MemoryRegion *address_space_mem,
MemoryRegion *address_space_io,
ram_addr_t ram_size) ram_addr_t ram_size)
{ {
PCIBus *b; PCIBus *b;
b = i440fx_common_init("i440FX", pi440fx_state, piix3_devfn, pic, b = i440fx_common_init("i440FX", pi440fx_state, piix3_devfn, pic,
address_space, ram_size); address_space_mem, address_space_io, ram_size);
return b; return b;
} }
......
...@@ -348,6 +348,7 @@ PCIBus *ppc4xx_pci_init(CPUState *env, qemu_irq pci_irqs[4], ...@@ -348,6 +348,7 @@ PCIBus *ppc4xx_pci_init(CPUState *env, qemu_irq pci_irqs[4],
ppc4xx_pci_map_irq, ppc4xx_pci_map_irq,
pci_irqs, pci_irqs,
get_system_memory(), get_system_memory(),
get_system_io(),
0, 4); 0, 4);
controller->pci_dev = pci_register_device(controller->pci_state.bus, controller->pci_dev = pci_register_device(controller->pci_state.bus,
......
...@@ -55,11 +55,16 @@ qemu_irq *heathrow_pic_init(int *pmem_index, ...@@ -55,11 +55,16 @@ qemu_irq *heathrow_pic_init(int *pmem_index,
/* Grackle PCI */ /* Grackle PCI */
PCIBus *pci_grackle_init(uint32_t base, qemu_irq *pic, PCIBus *pci_grackle_init(uint32_t base, qemu_irq *pic,
MemoryRegion *address_space); MemoryRegion *address_space_mem,
MemoryRegion *address_space_io);
/* UniNorth PCI */ /* UniNorth PCI */
PCIBus *pci_pmac_init(qemu_irq *pic, MemoryRegion *address_space); PCIBus *pci_pmac_init(qemu_irq *pic,
PCIBus *pci_pmac_u3_init(qemu_irq *pic, MemoryRegion *address_space); MemoryRegion *address_space_mem,
MemoryRegion *address_space_io);
PCIBus *pci_pmac_u3_init(qemu_irq *pic,
MemoryRegion *address_space_mem,
MemoryRegion *address_space_io);
/* Mac NVRAM */ /* Mac NVRAM */
typedef struct MacIONVRAMState MacIONVRAMState; typedef struct MacIONVRAMState MacIONVRAMState;
......
...@@ -318,10 +318,10 @@ static void ppc_core99_init (ram_addr_t ram_size, ...@@ -318,10 +318,10 @@ static void ppc_core99_init (ram_addr_t ram_size,
pic = openpic_init(NULL, &pic_mem_index, smp_cpus, openpic_irqs, NULL); pic = openpic_init(NULL, &pic_mem_index, smp_cpus, openpic_irqs, NULL);
if (PPC_INPUT(env) == PPC_FLAGS_INPUT_970) { if (PPC_INPUT(env) == PPC_FLAGS_INPUT_970) {
/* 970 gets a U3 bus */ /* 970 gets a U3 bus */
pci_bus = pci_pmac_u3_init(pic, get_system_memory()); pci_bus = pci_pmac_u3_init(pic, get_system_memory(), get_system_io());
machine_arch = ARCH_MAC99_U3; machine_arch = ARCH_MAC99_U3;
} else { } else {
pci_bus = pci_pmac_init(pic, get_system_memory()); pci_bus = pci_pmac_init(pic, get_system_memory(), get_system_io());
machine_arch = ARCH_MAC99; machine_arch = ARCH_MAC99;
} }
/* init basic PC hardware */ /* init basic PC hardware */
......
...@@ -234,7 +234,9 @@ static void ppc_heathrow_init (ram_addr_t ram_size, ...@@ -234,7 +234,9 @@ static void ppc_heathrow_init (ram_addr_t ram_size,
hw_error("Only 6xx bus is supported on heathrow machine\n"); hw_error("Only 6xx bus is supported on heathrow machine\n");
} }
pic = heathrow_pic_init(&pic_mem_index, 1, heathrow_irqs); pic = heathrow_pic_init(&pic_mem_index, 1, heathrow_irqs);
pci_bus = pci_grackle_init(0xfec00000, pic, get_system_memory()); pci_bus = pci_grackle_init(0xfec00000, pic,
get_system_memory(),
get_system_io());
pci_vga_init(pci_bus); pci_vga_init(pci_bus);
escc_mem_index = escc_init(0x80013000, pic[0x0f], pic[0x10], serial_hds[0], escc_mem_index = escc_init(0x80013000, pic[0x0f], pic[0x10], serial_hds[0],
......
...@@ -649,7 +649,7 @@ static void ppc_prep_init (ram_addr_t ram_size, ...@@ -649,7 +649,7 @@ static void ppc_prep_init (ram_addr_t ram_size,
hw_error("Only 6xx bus is supported on PREP machine\n"); hw_error("Only 6xx bus is supported on PREP machine\n");
} }
i8259 = i8259_init(first_cpu->irq_inputs[PPC6xx_INPUT_INT]); i8259 = i8259_init(first_cpu->irq_inputs[PPC6xx_INPUT_INT]);
pci_bus = pci_prep_init(i8259, get_system_memory()); pci_bus = pci_prep_init(i8259, get_system_memory(), get_system_io());
/* Hmm, prep has no pci-isa bridge ??? */ /* Hmm, prep has no pci-isa bridge ??? */
isa_bus_new(NULL); isa_bus_new(NULL);
isa_bus_irqs(i8259); isa_bus_irqs(i8259);
......
...@@ -282,7 +282,8 @@ static int e500_pcihost_initfn(SysBusDevice *dev) ...@@ -282,7 +282,8 @@ static int e500_pcihost_initfn(SysBusDevice *dev)
PPCE500PCIState *s; PPCE500PCIState *s;
PCIBus *b; PCIBus *b;
int i; int i;
MemoryRegion *address_space = get_system_memory(); MemoryRegion *address_space_mem = get_system_memory();
MemoryRegion *address_space_io = get_system_io();
h = FROM_SYSBUS(PCIHostState, sysbus_from_qdev(dev)); h = FROM_SYSBUS(PCIHostState, sysbus_from_qdev(dev));
s = DO_UPCAST(PPCE500PCIState, pci_state, h); s = DO_UPCAST(PPCE500PCIState, pci_state, h);
...@@ -292,8 +293,8 @@ static int e500_pcihost_initfn(SysBusDevice *dev) ...@@ -292,8 +293,8 @@ static int e500_pcihost_initfn(SysBusDevice *dev)
} }
b = pci_register_bus(&s->pci_state.busdev.qdev, NULL, mpc85xx_pci_set_irq, b = pci_register_bus(&s->pci_state.busdev.qdev, NULL, mpc85xx_pci_set_irq,
mpc85xx_pci_map_irq, s->irq, address_space, mpc85xx_pci_map_irq, s->irq, address_space_mem,
PCI_DEVFN(0x11, 0), 4); address_space_io, PCI_DEVFN(0x11, 0), 4);
s->pci_state.bus = b; s->pci_state.bus = b;
pci_create_simple(b, 0, "e500-host-bridge"); pci_create_simple(b, 0, "e500-host-bridge");
......
...@@ -110,7 +110,9 @@ static void prep_set_irq(void *opaque, int irq_num, int level) ...@@ -110,7 +110,9 @@ static void prep_set_irq(void *opaque, int irq_num, int level)
qemu_set_irq(pic[(irq_num & 1) ? 11 : 9] , level); qemu_set_irq(pic[(irq_num & 1) ? 11 : 9] , level);
} }
PCIBus *pci_prep_init(qemu_irq *pic, MemoryRegion *address_space) PCIBus *pci_prep_init(qemu_irq *pic,
MemoryRegion *address_space_mem,
MemoryRegion *address_space_io)
{ {
PREPPCIState *s; PREPPCIState *s;
PCIDevice *d; PCIDevice *d;
...@@ -119,7 +121,9 @@ PCIBus *pci_prep_init(qemu_irq *pic, MemoryRegion *address_space) ...@@ -119,7 +121,9 @@ PCIBus *pci_prep_init(qemu_irq *pic, MemoryRegion *address_space)
s = qemu_mallocz(sizeof(PREPPCIState)); s = qemu_mallocz(sizeof(PREPPCIState));
s->bus = pci_register_bus(NULL, "pci", s->bus = pci_register_bus(NULL, "pci",
prep_set_irq, prep_map_irq, pic, prep_set_irq, prep_map_irq, pic,
address_space, 0, 4); address_space_mem,
address_space_io,
0, 4);
pci_host_conf_register_ioport(0xcf8, s); pci_host_conf_register_ioport(0xcf8, s);
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
#include "qemu-common.h" #include "qemu-common.h"
#include "memory.h" #include "memory.h"
PCIBus *pci_prep_init(qemu_irq *pic, MemoryRegion *address_space); PCIBus *pci_prep_init(qemu_irq *pic,
MemoryRegion *address_space_mem,
MemoryRegion *address_space_io);
#endif #endif
...@@ -128,7 +128,9 @@ static int sh_pci_init_device(SysBusDevice *dev) ...@@ -128,7 +128,9 @@ static int sh_pci_init_device(SysBusDevice *dev)
} }
s->bus = pci_register_bus(&s->busdev.qdev, "pci", s->bus = pci_register_bus(&s->busdev.qdev, "pci",
sh_pci_set_irq, sh_pci_map_irq, sh_pci_set_irq, sh_pci_map_irq,
s->irq, get_system_memory(), s->irq,
get_system_memory(),
get_system_io(),
PCI_DEVFN(0, 0), 4); PCI_DEVFN(0, 0), 4);
s->memconfig = cpu_register_io_memory(sh_pci_reg.r, sh_pci_reg.w, s->memconfig = cpu_register_io_memory(sh_pci_reg.r, sh_pci_reg.w,
s, DEVICE_NATIVE_ENDIAN); s, DEVICE_NATIVE_ENDIAN);
......
...@@ -201,7 +201,9 @@ static int pci_unin_internal_init_device(SysBusDevice *dev) ...@@ -201,7 +201,9 @@ static int pci_unin_internal_init_device(SysBusDevice *dev)
return 0; return 0;
} }
PCIBus *pci_pmac_init(qemu_irq *pic, MemoryRegion *address_space) PCIBus *pci_pmac_init(qemu_irq *pic,
MemoryRegion *address_space_mem,
MemoryRegion *address_space_io)
{ {
DeviceState *dev; DeviceState *dev;
SysBusDevice *s; SysBusDevice *s;
...@@ -215,7 +217,9 @@ PCIBus *pci_pmac_init(qemu_irq *pic, MemoryRegion *address_space) ...@@ -215,7 +217,9 @@ PCIBus *pci_pmac_init(qemu_irq *pic, MemoryRegion *address_space)
d = FROM_SYSBUS(UNINState, s); d = FROM_SYSBUS(UNINState, s);
d->host_state.bus = pci_register_bus(&d->busdev.qdev, "pci", d->host_state.bus = pci_register_bus(&d->busdev.qdev, "pci",
pci_unin_set_irq, pci_unin_map_irq, pci_unin_set_irq, pci_unin_map_irq,
pic, address_space, pic,
address_space_mem,
address_space_io,
PCI_DEVFN(11, 0), 4); PCI_DEVFN(11, 0), 4);
#if 0 #if 0
...@@ -253,7 +257,9 @@ PCIBus *pci_pmac_init(qemu_irq *pic, MemoryRegion *address_space) ...@@ -253,7 +257,9 @@ PCIBus *pci_pmac_init(qemu_irq *pic, MemoryRegion *address_space)
return d->host_state.bus; return d->host_state.bus;
} }
PCIBus *pci_pmac_u3_init(qemu_irq *pic, MemoryRegion *address_space) PCIBus *pci_pmac_u3_init(qemu_irq *pic,
MemoryRegion *address_space_mem,
MemoryRegion *address_space_io)
{ {
DeviceState *dev; DeviceState *dev;
SysBusDevice *s; SysBusDevice *s;
...@@ -268,7 +274,9 @@ PCIBus *pci_pmac_u3_init(qemu_irq *pic, MemoryRegion *address_space) ...@@ -268,7 +274,9 @@ PCIBus *pci_pmac_u3_init(qemu_irq *pic, MemoryRegion *address_space)
d->host_state.bus = pci_register_bus(&d->busdev.qdev, "pci", d->host_state.bus = pci_register_bus(&d->busdev.qdev, "pci",
pci_unin_set_irq, pci_unin_map_irq, pci_unin_set_irq, pci_unin_map_irq,
pic, address_space, pic,
address_space_mem,
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);
......
...@@ -112,7 +112,7 @@ static int pci_vpb_init(SysBusDevice *dev) ...@@ -112,7 +112,7 @@ static int pci_vpb_init(SysBusDevice *dev)
} }
bus = pci_register_bus(&dev->qdev, "pci", bus = pci_register_bus(&dev->qdev, "pci",
pci_vpb_set_irq, pci_vpb_map_irq, s->irq, pci_vpb_set_irq, pci_vpb_map_irq, s->irq,
get_system_memory(), get_system_memory(), get_system_io(),
PCI_DEVFN(11, 0), 4); PCI_DEVFN(11, 0), 4);
/* ??? Register memory space. */ /* ??? Register memory space. */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册