pci_host: convert conf index and data ports to memory API
Reviewed-by: Richard Henderson <rth@twiddle.net> Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
parent
2b985d9c29
commit
d0ed8076cb
13
hw/dec_pci.c
13
hw/dec_pci.c
@ -80,16 +80,15 @@ PCIBus *pci_dec_21154_init(PCIBus *parent_bus, int devfn)
|
||||
static int pci_dec_21154_init_device(SysBusDevice *dev)
|
||||
{
|
||||
DECState *s;
|
||||
int pci_mem_config, pci_mem_data;
|
||||
|
||||
s = FROM_SYSBUS(DECState, dev);
|
||||
|
||||
pci_mem_config = pci_host_conf_register_mmio(&s->host_state,
|
||||
DEVICE_LITTLE_ENDIAN);
|
||||
pci_mem_data = pci_host_data_register_mmio(&s->host_state,
|
||||
DEVICE_LITTLE_ENDIAN);
|
||||
sysbus_init_mmio(dev, 0x1000, pci_mem_config);
|
||||
sysbus_init_mmio(dev, 0x1000, pci_mem_data);
|
||||
memory_region_init_io(&s->host_state.conf_mem, &pci_host_conf_le_ops,
|
||||
&s->host_state, "pci-conf-idx", 0x1000);
|
||||
memory_region_init_io(&s->host_state.data_mem, &pci_host_data_le_ops,
|
||||
&s->host_state, "pci-data-idx", 0x1000);
|
||||
sysbus_init_mmio_region(dev, &s->host_state.conf_mem);
|
||||
sysbus_init_mmio_region(dev, &s->host_state.data_mem);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -92,16 +92,15 @@ PCIBus *pci_grackle_init(uint32_t base, qemu_irq *pic,
|
||||
static int pci_grackle_init_device(SysBusDevice *dev)
|
||||
{
|
||||
GrackleState *s;
|
||||
int pci_mem_config, pci_mem_data;
|
||||
|
||||
s = FROM_SYSBUS(GrackleState, dev);
|
||||
|
||||
pci_mem_config = pci_host_conf_register_mmio(&s->host_state,
|
||||
DEVICE_LITTLE_ENDIAN);
|
||||
pci_mem_data = pci_host_data_register_mmio(&s->host_state,
|
||||
DEVICE_LITTLE_ENDIAN);
|
||||
sysbus_init_mmio(dev, 0x1000, pci_mem_config);
|
||||
sysbus_init_mmio(dev, 0x1000, pci_mem_data);
|
||||
memory_region_init_io(&s->host_state.conf_mem, &pci_host_conf_le_ops,
|
||||
&s->host_state, "pci-conf-idx", 0x1000);
|
||||
memory_region_init_io(&s->host_state.data_mem, &pci_host_data_le_ops,
|
||||
&s->host_state, "pci-data-idx", 0x1000);
|
||||
sysbus_init_mmio_region(dev, &s->host_state.conf_mem);
|
||||
sysbus_init_mmio_region(dev, &s->host_state.data_mem);
|
||||
|
||||
qemu_register_reset(pci_grackle_reset, &s->host_state);
|
||||
return 0;
|
||||
|
@ -94,82 +94,72 @@ uint32_t pci_data_read(PCIBus *s, uint32_t addr, int len)
|
||||
return val;
|
||||
}
|
||||
|
||||
static void pci_host_config_write(ReadWriteHandler *handler,
|
||||
pcibus_t addr, uint32_t val, int len)
|
||||
static void pci_host_config_write(void *opaque, target_phys_addr_t addr,
|
||||
uint64_t val, unsigned len)
|
||||
{
|
||||
PCIHostState *s = container_of(handler, PCIHostState, conf_handler);
|
||||
PCIHostState *s = opaque;
|
||||
|
||||
PCI_DPRINTF("%s addr %" FMT_PCIBUS " %d val %"PRIx32"\n",
|
||||
PCI_DPRINTF("%s addr " TARGET_FMT_plx " len %d val %"PRIx64"\n",
|
||||
__func__, addr, len, val);
|
||||
s->config_reg = val;
|
||||
}
|
||||
|
||||
static uint32_t pci_host_config_read(ReadWriteHandler *handler,
|
||||
pcibus_t addr, int len)
|
||||
static uint64_t pci_host_config_read(void *opaque, target_phys_addr_t addr,
|
||||
unsigned len)
|
||||
{
|
||||
PCIHostState *s = container_of(handler, PCIHostState, conf_handler);
|
||||
PCIHostState *s = opaque;
|
||||
uint32_t val = s->config_reg;
|
||||
|
||||
PCI_DPRINTF("%s addr %" FMT_PCIBUS " len %d val %"PRIx32"\n",
|
||||
PCI_DPRINTF("%s addr " TARGET_FMT_plx " len %d val %"PRIx32"\n",
|
||||
__func__, addr, len, val);
|
||||
return val;
|
||||
}
|
||||
|
||||
static void pci_host_data_write(ReadWriteHandler *handler,
|
||||
pcibus_t addr, uint32_t val, int len)
|
||||
static void pci_host_data_write(void *opaque, target_phys_addr_t addr,
|
||||
uint64_t val, unsigned len)
|
||||
{
|
||||
PCIHostState *s = container_of(handler, PCIHostState, data_handler);
|
||||
PCI_DPRINTF("write addr %" FMT_PCIBUS " len %d val %x\n",
|
||||
addr, len, val);
|
||||
PCIHostState *s = opaque;
|
||||
PCI_DPRINTF("write addr " TARGET_FMT_plx " len %d val %x\n",
|
||||
addr, len, (unsigned)val);
|
||||
if (s->config_reg & (1u << 31))
|
||||
pci_data_write(s->bus, s->config_reg | (addr & 3), val, len);
|
||||
}
|
||||
|
||||
static uint32_t pci_host_data_read(ReadWriteHandler *handler,
|
||||
pcibus_t addr, int len)
|
||||
static uint64_t pci_host_data_read(void *opaque,
|
||||
target_phys_addr_t addr, unsigned len)
|
||||
{
|
||||
PCIHostState *s = container_of(handler, PCIHostState, data_handler);
|
||||
PCIHostState *s = opaque;
|
||||
uint32_t val;
|
||||
if (!(s->config_reg & (1 << 31)))
|
||||
return 0xffffffff;
|
||||
val = pci_data_read(s->bus, s->config_reg | (addr & 3), len);
|
||||
PCI_DPRINTF("read addr %" FMT_PCIBUS " len %d val %x\n",
|
||||
PCI_DPRINTF("read addr " TARGET_FMT_plx " len %d val %x\n",
|
||||
addr, len, val);
|
||||
return val;
|
||||
}
|
||||
|
||||
static void pci_host_init(PCIHostState *s)
|
||||
{
|
||||
s->conf_handler.write = pci_host_config_write;
|
||||
s->conf_handler.read = pci_host_config_read;
|
||||
s->data_handler.write = pci_host_data_write;
|
||||
s->data_handler.read = pci_host_data_read;
|
||||
}
|
||||
const MemoryRegionOps pci_host_conf_le_ops = {
|
||||
.read = pci_host_config_read,
|
||||
.write = pci_host_config_write,
|
||||
.endianness = DEVICE_LITTLE_ENDIAN,
|
||||
};
|
||||
|
||||
int pci_host_conf_register_mmio(PCIHostState *s, int endian)
|
||||
{
|
||||
pci_host_init(s);
|
||||
return cpu_register_io_memory_simple(&s->conf_handler, endian);
|
||||
}
|
||||
const MemoryRegionOps pci_host_conf_be_ops = {
|
||||
.read = pci_host_config_read,
|
||||
.write = pci_host_config_write,
|
||||
.endianness = DEVICE_BIG_ENDIAN,
|
||||
};
|
||||
|
||||
void pci_host_conf_register_ioport(pio_addr_t ioport, PCIHostState *s)
|
||||
{
|
||||
pci_host_init(s);
|
||||
register_ioport_simple(&s->conf_handler, ioport, 4, 4);
|
||||
sysbus_init_ioports(&s->busdev, ioport, 4);
|
||||
}
|
||||
const MemoryRegionOps pci_host_data_le_ops = {
|
||||
.read = pci_host_data_read,
|
||||
.write = pci_host_data_write,
|
||||
.endianness = DEVICE_LITTLE_ENDIAN,
|
||||
};
|
||||
|
||||
const MemoryRegionOps pci_host_data_be_ops = {
|
||||
.read = pci_host_data_read,
|
||||
.write = pci_host_data_write,
|
||||
.endianness = DEVICE_BIG_ENDIAN,
|
||||
};
|
||||
|
||||
int pci_host_data_register_mmio(PCIHostState *s, int endian)
|
||||
{
|
||||
pci_host_init(s);
|
||||
return cpu_register_io_memory_simple(&s->data_handler, endian);
|
||||
}
|
||||
|
||||
void pci_host_data_register_ioport(pio_addr_t ioport, PCIHostState *s)
|
||||
{
|
||||
pci_host_init(s);
|
||||
register_ioport_simple(&s->data_handler, ioport, 4, 1);
|
||||
register_ioport_simple(&s->data_handler, ioport, 4, 2);
|
||||
register_ioport_simple(&s->data_handler, ioport, 4, 4);
|
||||
sysbus_init_ioports(&s->busdev, ioport, 4);
|
||||
}
|
||||
|
@ -29,12 +29,11 @@
|
||||
#define PCI_HOST_H
|
||||
|
||||
#include "sysbus.h"
|
||||
#include "rwhandler.h"
|
||||
|
||||
struct PCIHostState {
|
||||
SysBusDevice busdev;
|
||||
ReadWriteHandler conf_handler;
|
||||
ReadWriteHandler data_handler;
|
||||
MemoryRegion conf_mem;
|
||||
MemoryRegion data_mem;
|
||||
MemoryRegion *address_space;
|
||||
uint32_t config_reg;
|
||||
PCIBus *bus;
|
||||
@ -49,12 +48,9 @@ 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);
|
||||
|
||||
/* for mmio */
|
||||
int pci_host_conf_register_mmio(PCIHostState *s, int endian);
|
||||
int pci_host_data_register_mmio(PCIHostState *s, int endian);
|
||||
|
||||
/* for ioio */
|
||||
void pci_host_conf_register_ioport(pio_addr_t ioport, PCIHostState *s);
|
||||
void pci_host_data_register_ioport(pio_addr_t ioport, PCIHostState *s);
|
||||
extern const MemoryRegionOps pci_host_conf_le_ops;
|
||||
extern const MemoryRegionOps pci_host_conf_be_ops;
|
||||
extern const MemoryRegionOps pci_host_data_le_ops;
|
||||
extern const MemoryRegionOps pci_host_data_be_ops;
|
||||
|
||||
#endif /* PCI_HOST_H */
|
||||
|
@ -235,9 +235,16 @@ static int i440fx_pcihost_initfn(SysBusDevice *dev)
|
||||
{
|
||||
I440FXState *s = FROM_SYSBUS(I440FXState, dev);
|
||||
|
||||
pci_host_conf_register_ioport(0xcf8, s);
|
||||
memory_region_init_io(&s->conf_mem, &pci_host_conf_le_ops, s,
|
||||
"pci-conf-idx", 4);
|
||||
sysbus_add_io(dev, 0xcf8, &s->conf_mem);
|
||||
sysbus_init_ioports(&s->busdev, 0xcf8, 4);
|
||||
|
||||
memory_region_init_io(&s->data_mem, &pci_host_data_le_ops, s,
|
||||
"pci-conf-data", 4);
|
||||
sysbus_add_io(dev, 0xcfc, &s->data_mem);
|
||||
sysbus_init_ioports(&s->busdev, 0xcfc, 4);
|
||||
|
||||
pci_host_data_register_ioport(0xcfc, s);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -368,10 +368,12 @@ PCIBus *ppc4xx_pci_init(CPUState *env, qemu_irq pci_irqs[4],
|
||||
cpu_register_physical_memory(config_space + PCIC0_CFGADDR, 4, index);
|
||||
|
||||
/* CFGDATA */
|
||||
index = pci_host_data_register_mmio(&controller->pci_state, 1);
|
||||
if (index < 0)
|
||||
goto free;
|
||||
cpu_register_physical_memory(config_space + PCIC0_CFGDATA, 4, index);
|
||||
memory_region_init_io(&controller->pci_state.data_mem,
|
||||
&pci_host_data_be_ops,
|
||||
&controller->pci_state, "pci-conf-data", 4);
|
||||
memory_region_add_subregion(get_system_memory(),
|
||||
config_space + PCIC0_CFGDATA,
|
||||
&controller->pci_state.data_mem);
|
||||
|
||||
/* Internal registers */
|
||||
index = cpu_register_io_memory(pci_reg_read, pci_reg_write, controller,
|
||||
|
@ -79,8 +79,6 @@ struct PPCE500PCIState {
|
||||
uint32_t gasket_time;
|
||||
qemu_irq irq[4];
|
||||
/* mmio maps */
|
||||
int cfgaddr;
|
||||
int cfgdata;
|
||||
int reg;
|
||||
};
|
||||
|
||||
@ -268,18 +266,18 @@ static void e500_pci_map(SysBusDevice *dev, target_phys_addr_t base)
|
||||
PCIHostState *h = FROM_SYSBUS(PCIHostState, sysbus_from_qdev(dev));
|
||||
PPCE500PCIState *s = DO_UPCAST(PPCE500PCIState, pci_state, h);
|
||||
|
||||
cpu_register_physical_memory(base + PCIE500_CFGADDR, 4, s->cfgaddr);
|
||||
cpu_register_physical_memory(base + PCIE500_CFGDATA, 4, s->cfgdata);
|
||||
sysbus_add_memory(dev, base + PCIE500_CFGADDR, &h->conf_mem);
|
||||
sysbus_add_memory(dev, base + PCIE500_CFGDATA, &h->data_mem);
|
||||
cpu_register_physical_memory(base + PCIE500_REG_BASE, PCIE500_REG_SIZE,
|
||||
s->reg);
|
||||
}
|
||||
|
||||
static void e500_pci_unmap(SysBusDevice *dev, target_phys_addr_t base)
|
||||
{
|
||||
cpu_register_physical_memory(base + PCIE500_CFGADDR, 4,
|
||||
IO_MEM_UNASSIGNED);
|
||||
cpu_register_physical_memory(base + PCIE500_CFGDATA, 4,
|
||||
IO_MEM_UNASSIGNED);
|
||||
PCIHostState *h = FROM_SYSBUS(PCIHostState, sysbus_from_qdev(dev));
|
||||
|
||||
sysbus_del_memory(dev, &h->conf_mem);
|
||||
sysbus_del_memory(dev, &h->data_mem);
|
||||
cpu_register_physical_memory(base + PCIE500_REG_BASE, PCIE500_REG_SIZE,
|
||||
IO_MEM_UNASSIGNED);
|
||||
}
|
||||
@ -309,9 +307,10 @@ static int e500_pcihost_initfn(SysBusDevice *dev)
|
||||
|
||||
pci_create_simple(b, 0, "e500-host-bridge");
|
||||
|
||||
s->cfgaddr = pci_host_conf_register_mmio(&s->pci_state, DEVICE_BIG_ENDIAN);
|
||||
s->cfgdata = pci_host_data_register_mmio(&s->pci_state,
|
||||
DEVICE_LITTLE_ENDIAN);
|
||||
memory_region_init_io(&h->conf_mem, &pci_host_conf_be_ops, h,
|
||||
"pci-conf-idx", 4);
|
||||
memory_region_init_io(&h->data_mem, &pci_host_data_le_ops, h,
|
||||
"pci-conf-data", 4);
|
||||
s->reg = cpu_register_io_memory(e500_pci_reg_read, e500_pci_reg_write, s,
|
||||
DEVICE_BIG_ENDIAN);
|
||||
sysbus_init_mmio_cb2(dev, e500_pci_map, e500_pci_unmap);
|
||||
|
@ -125,9 +125,15 @@ PCIBus *pci_prep_init(qemu_irq *pic,
|
||||
address_space_io,
|
||||
0, 4);
|
||||
|
||||
pci_host_conf_register_ioport(0xcf8, s);
|
||||
memory_region_init_io(&s->conf_mem, &pci_host_conf_be_ops, s,
|
||||
"pci-conf-idx", 1);
|
||||
memory_region_add_subregion(address_space_io, 0xcf8, &s->conf_mem);
|
||||
sysbus_init_ioports(&s->busdev, 0xcf8, 1);
|
||||
|
||||
pci_host_data_register_ioport(0xcfc, s);
|
||||
memory_region_init_io(&s->conf_mem, &pci_host_data_be_ops, s,
|
||||
"pci-conf-data", 1);
|
||||
memory_region_add_subregion(address_space_io, 0xcfc, &s->data_mem);
|
||||
sysbus_init_ioports(&s->busdev, 0xcfc, 1);
|
||||
|
||||
PPC_io_memory = cpu_register_io_memory(PPC_PCIIO_read,
|
||||
PPC_PCIIO_write, s,
|
||||
|
@ -41,7 +41,6 @@ static const int unin_irq_line[] = { 0x1b, 0x1c, 0x1d, 0x1e };
|
||||
typedef struct UNINState {
|
||||
SysBusDevice busdev;
|
||||
PCIHostState host_state;
|
||||
ReadWriteHandler data_handler;
|
||||
} UNINState;
|
||||
|
||||
static int pci_unin_map_irq(PCIDevice *pci_dev, int irq_num)
|
||||
@ -100,67 +99,70 @@ static uint32_t unin_get_config_reg(uint32_t reg, uint32_t addr)
|
||||
return retval;
|
||||
}
|
||||
|
||||
static void unin_data_write(ReadWriteHandler *handler,
|
||||
pcibus_t addr, uint32_t val, int len)
|
||||
static void unin_data_write(void *opaque, target_phys_addr_t addr,
|
||||
uint64_t val, unsigned len)
|
||||
{
|
||||
UNINState *s = container_of(handler, UNINState, data_handler);
|
||||
UNIN_DPRINTF("write addr %" FMT_PCIBUS " len %d val %x\n", addr, len, val);
|
||||
UNINState *s = opaque;
|
||||
UNIN_DPRINTF("write addr %" TARGET_FMT_plx " len %d val %"PRIx64"\n",
|
||||
addr, len, val);
|
||||
pci_data_write(s->host_state.bus,
|
||||
unin_get_config_reg(s->host_state.config_reg, addr),
|
||||
val, len);
|
||||
}
|
||||
|
||||
static uint32_t unin_data_read(ReadWriteHandler *handler,
|
||||
pcibus_t addr, int len)
|
||||
static uint64_t unin_data_read(void *opaque, target_phys_addr_t addr,
|
||||
unsigned len)
|
||||
{
|
||||
UNINState *s = container_of(handler, UNINState, data_handler);
|
||||
UNINState *s = opaque;
|
||||
uint32_t val;
|
||||
|
||||
val = pci_data_read(s->host_state.bus,
|
||||
unin_get_config_reg(s->host_state.config_reg, addr),
|
||||
len);
|
||||
UNIN_DPRINTF("read addr %" FMT_PCIBUS " len %d val %x\n", addr, len, val);
|
||||
UNIN_DPRINTF("read addr %" TARGET_FMT_plx " len %d val %x\n",
|
||||
addr, len, val);
|
||||
return val;
|
||||
}
|
||||
|
||||
static const MemoryRegionOps unin_data_ops = {
|
||||
.read = unin_data_read,
|
||||
.write = unin_data_write,
|
||||
.endianness = DEVICE_LITTLE_ENDIAN,
|
||||
};
|
||||
|
||||
static int pci_unin_main_init_device(SysBusDevice *dev)
|
||||
{
|
||||
UNINState *s;
|
||||
int pci_mem_config, pci_mem_data;
|
||||
|
||||
/* Use values found on a real PowerMac */
|
||||
/* Uninorth main bus */
|
||||
s = FROM_SYSBUS(UNINState, dev);
|
||||
|
||||
pci_mem_config = pci_host_conf_register_mmio(&s->host_state,
|
||||
DEVICE_LITTLE_ENDIAN);
|
||||
s->data_handler.read = unin_data_read;
|
||||
s->data_handler.write = unin_data_write;
|
||||
pci_mem_data = cpu_register_io_memory_simple(&s->data_handler,
|
||||
DEVICE_LITTLE_ENDIAN);
|
||||
sysbus_init_mmio(dev, 0x1000, pci_mem_config);
|
||||
sysbus_init_mmio(dev, 0x1000, pci_mem_data);
|
||||
memory_region_init_io(&s->host_state.conf_mem, &pci_host_conf_le_ops,
|
||||
&s->host_state, "pci-conf-idx", 0x1000);
|
||||
memory_region_init_io(&s->host_state.data_mem, &unin_data_ops, s,
|
||||
"pci-conf-data", 0x1000);
|
||||
sysbus_init_mmio_region(dev, &s->host_state.conf_mem);
|
||||
sysbus_init_mmio_region(dev, &s->host_state.data_mem);
|
||||
|
||||
qemu_register_reset(pci_unin_reset, &s->host_state);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int pci_u3_agp_init_device(SysBusDevice *dev)
|
||||
{
|
||||
UNINState *s;
|
||||
int pci_mem_config, pci_mem_data;
|
||||
|
||||
/* Uninorth U3 AGP bus */
|
||||
s = FROM_SYSBUS(UNINState, dev);
|
||||
|
||||
pci_mem_config = pci_host_conf_register_mmio(&s->host_state,
|
||||
DEVICE_LITTLE_ENDIAN);
|
||||
s->data_handler.read = unin_data_read;
|
||||
s->data_handler.write = unin_data_write;
|
||||
pci_mem_data = cpu_register_io_memory_simple(&s->data_handler,
|
||||
DEVICE_LITTLE_ENDIAN);
|
||||
sysbus_init_mmio(dev, 0x1000, pci_mem_config);
|
||||
sysbus_init_mmio(dev, 0x1000, pci_mem_data);
|
||||
memory_region_init_io(&s->host_state.conf_mem, &pci_host_conf_le_ops,
|
||||
&s->host_state, "pci-conf-idx", 0x1000);
|
||||
memory_region_init_io(&s->host_state.data_mem, &unin_data_ops, s,
|
||||
"pci-conf-data", 0x1000);
|
||||
sysbus_init_mmio_region(dev, &s->host_state.conf_mem);
|
||||
sysbus_init_mmio_region(dev, &s->host_state.data_mem);
|
||||
|
||||
qemu_register_reset(pci_unin_reset, &s->host_state);
|
||||
|
||||
@ -170,34 +172,32 @@ static int pci_u3_agp_init_device(SysBusDevice *dev)
|
||||
static int pci_unin_agp_init_device(SysBusDevice *dev)
|
||||
{
|
||||
UNINState *s;
|
||||
int pci_mem_config, pci_mem_data;
|
||||
|
||||
/* Uninorth AGP bus */
|
||||
s = FROM_SYSBUS(UNINState, dev);
|
||||
|
||||
pci_mem_config = pci_host_conf_register_mmio(&s->host_state,
|
||||
DEVICE_LITTLE_ENDIAN);
|
||||
pci_mem_data = pci_host_data_register_mmio(&s->host_state,
|
||||
DEVICE_LITTLE_ENDIAN);
|
||||
sysbus_init_mmio(dev, 0x1000, pci_mem_config);
|
||||
sysbus_init_mmio(dev, 0x1000, pci_mem_data);
|
||||
memory_region_init_io(&s->host_state.conf_mem, &pci_host_conf_le_ops,
|
||||
&s->host_state, "pci-conf-idx", 0x1000);
|
||||
memory_region_init_io(&s->host_state.data_mem, &pci_host_data_le_ops,
|
||||
&s->host_state, "pci-conf-data", 0x1000);
|
||||
sysbus_init_mmio_region(dev, &s->host_state.conf_mem);
|
||||
sysbus_init_mmio_region(dev, &s->host_state.data_mem);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int pci_unin_internal_init_device(SysBusDevice *dev)
|
||||
{
|
||||
UNINState *s;
|
||||
int pci_mem_config, pci_mem_data;
|
||||
|
||||
/* Uninorth internal bus */
|
||||
s = FROM_SYSBUS(UNINState, dev);
|
||||
|
||||
pci_mem_config = pci_host_conf_register_mmio(&s->host_state,
|
||||
DEVICE_LITTLE_ENDIAN);
|
||||
pci_mem_data = pci_host_data_register_mmio(&s->host_state,
|
||||
DEVICE_LITTLE_ENDIAN);
|
||||
sysbus_init_mmio(dev, 0x1000, pci_mem_config);
|
||||
sysbus_init_mmio(dev, 0x1000, pci_mem_data);
|
||||
memory_region_init_io(&s->host_state.conf_mem, &pci_host_conf_le_ops,
|
||||
&s->host_state, "pci-conf-idx", 0x1000);
|
||||
memory_region_init_io(&s->host_state.data_mem, &pci_host_data_le_ops,
|
||||
&s->host_state, "pci-conf-data", 0x1000);
|
||||
sysbus_init_mmio_region(dev, &s->host_state.conf_mem);
|
||||
sysbus_init_mmio_region(dev, &s->host_state.data_mem);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user