提交 da726e5e 编写于 作者: A Avi Kivity

ppc4xx_pci: convert to memory API

Signed-off-by: NAvi Kivity <avi@redhat.com>
上级 d09510b2
...@@ -54,6 +54,8 @@ struct PPC4xxPCIState { ...@@ -54,6 +54,8 @@ struct PPC4xxPCIState {
PCIHostState pci_state; PCIHostState pci_state;
PCIDevice *pci_dev; PCIDevice *pci_dev;
MemoryRegion iomem_addr;
MemoryRegion iomem_regs;
}; };
typedef struct PPC4xxPCIState PPC4xxPCIState; typedef struct PPC4xxPCIState PPC4xxPCIState;
...@@ -84,35 +86,30 @@ typedef struct PPC4xxPCIState PPC4xxPCIState; ...@@ -84,35 +86,30 @@ typedef struct PPC4xxPCIState PPC4xxPCIState;
#define PCI_REG_SIZE 0x40 #define PCI_REG_SIZE 0x40
static uint32_t pci4xx_cfgaddr_readl(void *opaque, target_phys_addr_t addr) static uint64_t pci4xx_cfgaddr_read(void *opaque, target_phys_addr_t addr,
unsigned size)
{ {
PPC4xxPCIState *ppc4xx_pci = opaque; PPC4xxPCIState *ppc4xx_pci = opaque;
return ppc4xx_pci->pci_state.config_reg; return ppc4xx_pci->pci_state.config_reg;
} }
static CPUReadMemoryFunc * const pci4xx_cfgaddr_read[] = { static void pci4xx_cfgaddr_write(void *opaque, target_phys_addr_t addr,
&pci4xx_cfgaddr_readl, uint64_t value, unsigned size)
&pci4xx_cfgaddr_readl,
&pci4xx_cfgaddr_readl,
};
static void pci4xx_cfgaddr_writel(void *opaque, target_phys_addr_t addr,
uint32_t value)
{ {
PPC4xxPCIState *ppc4xx_pci = opaque; PPC4xxPCIState *ppc4xx_pci = opaque;
ppc4xx_pci->pci_state.config_reg = value & ~0x3; ppc4xx_pci->pci_state.config_reg = value & ~0x3;
} }
static CPUWriteMemoryFunc * const pci4xx_cfgaddr_write[] = { static const MemoryRegionOps pci4xx_cfgaddr_ops = {
&pci4xx_cfgaddr_writel, .read = pci4xx_cfgaddr_read,
&pci4xx_cfgaddr_writel, .write = pci4xx_cfgaddr_write,
&pci4xx_cfgaddr_writel, .endianness = DEVICE_LITTLE_ENDIAN,
}; };
static void ppc4xx_pci_reg_write4(void *opaque, target_phys_addr_t offset, static void ppc4xx_pci_reg_write4(void *opaque, target_phys_addr_t offset,
uint32_t value) uint64_t value, unsigned size)
{ {
struct PPC4xxPCIState *pci = opaque; struct PPC4xxPCIState *pci = opaque;
...@@ -179,7 +176,8 @@ static void ppc4xx_pci_reg_write4(void *opaque, target_phys_addr_t offset, ...@@ -179,7 +176,8 @@ static void ppc4xx_pci_reg_write4(void *opaque, target_phys_addr_t offset,
} }
} }
static uint32_t ppc4xx_pci_reg_read4(void *opaque, target_phys_addr_t offset) static uint64_t ppc4xx_pci_reg_read4(void *opaque, target_phys_addr_t offset,
unsigned size)
{ {
struct PPC4xxPCIState *pci = opaque; struct PPC4xxPCIState *pci = opaque;
uint32_t value; uint32_t value;
...@@ -246,16 +244,10 @@ static uint32_t ppc4xx_pci_reg_read4(void *opaque, target_phys_addr_t offset) ...@@ -246,16 +244,10 @@ static uint32_t ppc4xx_pci_reg_read4(void *opaque, target_phys_addr_t offset)
return value; return value;
} }
static CPUReadMemoryFunc * const pci_reg_read[] = { static const MemoryRegionOps pci_reg_ops = {
&ppc4xx_pci_reg_read4, .read = ppc4xx_pci_reg_read4,
&ppc4xx_pci_reg_read4, .write = ppc4xx_pci_reg_write4,
&ppc4xx_pci_reg_read4, .endianness = DEVICE_LITTLE_ENDIAN,
};
static CPUWriteMemoryFunc * const pci_reg_write[] = {
&ppc4xx_pci_reg_write4,
&ppc4xx_pci_reg_write4,
&ppc4xx_pci_reg_write4,
}; };
static void ppc4xx_pci_reset(void *opaque) static void ppc4xx_pci_reset(void *opaque)
...@@ -337,7 +329,6 @@ PCIBus *ppc4xx_pci_init(CPUState *env, qemu_irq pci_irqs[4], ...@@ -337,7 +329,6 @@ PCIBus *ppc4xx_pci_init(CPUState *env, qemu_irq pci_irqs[4],
target_phys_addr_t registers) target_phys_addr_t registers)
{ {
PPC4xxPCIState *controller; PPC4xxPCIState *controller;
int index;
static int ppc4xx_pci_id; static int ppc4xx_pci_id;
uint8_t *pci_conf; uint8_t *pci_conf;
...@@ -360,12 +351,11 @@ PCIBus *ppc4xx_pci_init(CPUState *env, qemu_irq pci_irqs[4], ...@@ -360,12 +351,11 @@ PCIBus *ppc4xx_pci_init(CPUState *env, qemu_irq pci_irqs[4],
pci_config_set_class(pci_conf, PCI_CLASS_BRIDGE_OTHER); pci_config_set_class(pci_conf, PCI_CLASS_BRIDGE_OTHER);
/* CFGADDR */ /* CFGADDR */
index = cpu_register_io_memory(pci4xx_cfgaddr_read, memory_region_init_io(&controller->iomem_addr, &pci4xx_cfgaddr_ops,
pci4xx_cfgaddr_write, controller, controller, "pci.cfgaddr", 4);
DEVICE_LITTLE_ENDIAN); memory_region_add_subregion(get_system_memory(),
if (index < 0) config_space + PCIC0_CFGADDR,
goto free; &controller->iomem_addr);
cpu_register_physical_memory(config_space + PCIC0_CFGADDR, 4, index);
/* CFGDATA */ /* CFGDATA */
memory_region_init_io(&controller->pci_state.data_mem, memory_region_init_io(&controller->pci_state.data_mem,
...@@ -376,11 +366,10 @@ PCIBus *ppc4xx_pci_init(CPUState *env, qemu_irq pci_irqs[4], ...@@ -376,11 +366,10 @@ PCIBus *ppc4xx_pci_init(CPUState *env, qemu_irq pci_irqs[4],
&controller->pci_state.data_mem); &controller->pci_state.data_mem);
/* Internal registers */ /* Internal registers */
index = cpu_register_io_memory(pci_reg_read, pci_reg_write, controller, memory_region_init_io(&controller->iomem_regs, &pci_reg_ops, controller,
DEVICE_LITTLE_ENDIAN); "pci.regs", PCI_REG_SIZE);
if (index < 0) memory_region_add_subregion(get_system_memory(), registers,
goto free; &controller->iomem_regs);
cpu_register_physical_memory(registers, PCI_REG_SIZE, index);
qemu_register_reset(ppc4xx_pci_reset, controller); qemu_register_reset(ppc4xx_pci_reset, controller);
...@@ -389,9 +378,4 @@ PCIBus *ppc4xx_pci_init(CPUState *env, qemu_irq pci_irqs[4], ...@@ -389,9 +378,4 @@ PCIBus *ppc4xx_pci_init(CPUState *env, qemu_irq pci_irqs[4],
&vmstate_ppc4xx_pci, controller); &vmstate_ppc4xx_pci, controller);
return controller->pci_state.bus; return controller->pci_state.bus;
free:
printf("%s error\n", __func__);
g_free(controller);
return NULL;
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册