mirror of
https://git.proxmox.com/git/qemu
synced 2025-08-12 01:58:21 +00:00
mcf_intc: convert to memory API
Signed-off-by: Benoît Canet <benoit.canet@gmail.com> Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
parent
c65fc1dff3
commit
663d94467a
4
hw/mcf.h
4
hw/mcf.h
@ -15,7 +15,9 @@ void mcf_uart_mm_init(struct MemoryRegion *sysmem,
|
|||||||
qemu_irq irq, CharDriverState *chr);
|
qemu_irq irq, CharDriverState *chr);
|
||||||
|
|
||||||
/* mcf_intc.c */
|
/* mcf_intc.c */
|
||||||
qemu_irq *mcf_intc_init(target_phys_addr_t base, CPUState *env);
|
qemu_irq *mcf_intc_init(struct MemoryRegion *sysmem,
|
||||||
|
target_phys_addr_t base,
|
||||||
|
CPUState *env);
|
||||||
|
|
||||||
/* mcf_fec.c */
|
/* mcf_fec.c */
|
||||||
void mcf_fec_init(struct MemoryRegion *sysmem, NICInfo *nd,
|
void mcf_fec_init(struct MemoryRegion *sysmem, NICInfo *nd,
|
||||||
|
@ -221,7 +221,7 @@ static void mcf5208evb_init(ram_addr_t ram_size,
|
|||||||
memory_region_add_subregion(address_space_mem, 0x80000000, sram);
|
memory_region_add_subregion(address_space_mem, 0x80000000, sram);
|
||||||
|
|
||||||
/* Internal peripherals. */
|
/* Internal peripherals. */
|
||||||
pic = mcf_intc_init(0xfc048000, env);
|
pic = mcf_intc_init(address_space_mem, 0xfc048000, env);
|
||||||
|
|
||||||
mcf_uart_mm_init(address_space_mem, 0xfc060000, pic[26], serial_hds[0]);
|
mcf_uart_mm_init(address_space_mem, 0xfc060000, pic[26], serial_hds[0]);
|
||||||
mcf_uart_mm_init(address_space_mem, 0xfc064000, pic[27], serial_hds[1]);
|
mcf_uart_mm_init(address_space_mem, 0xfc064000, pic[27], serial_hds[1]);
|
||||||
|
@ -7,8 +7,10 @@
|
|||||||
*/
|
*/
|
||||||
#include "hw.h"
|
#include "hw.h"
|
||||||
#include "mcf.h"
|
#include "mcf.h"
|
||||||
|
#include "exec-memory.h"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
MemoryRegion iomem;
|
||||||
uint64_t ipr;
|
uint64_t ipr;
|
||||||
uint64_t imr;
|
uint64_t imr;
|
||||||
uint64_t ifr;
|
uint64_t ifr;
|
||||||
@ -41,7 +43,8 @@ static void mcf_intc_update(mcf_intc_state *s)
|
|||||||
m68k_set_irq_level(s->env, best_level, s->active_vector);
|
m68k_set_irq_level(s->env, best_level, s->active_vector);
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t mcf_intc_read(void *opaque, target_phys_addr_t addr)
|
static uint64_t mcf_intc_read(void *opaque, target_phys_addr_t addr,
|
||||||
|
unsigned size)
|
||||||
{
|
{
|
||||||
int offset;
|
int offset;
|
||||||
mcf_intc_state *s = (mcf_intc_state *)opaque;
|
mcf_intc_state *s = (mcf_intc_state *)opaque;
|
||||||
@ -73,7 +76,8 @@ static uint32_t mcf_intc_read(void *opaque, target_phys_addr_t addr)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mcf_intc_write(void *opaque, target_phys_addr_t addr, uint32_t val)
|
static void mcf_intc_write(void *opaque, target_phys_addr_t addr,
|
||||||
|
uint64_t val, unsigned size)
|
||||||
{
|
{
|
||||||
int offset;
|
int offset;
|
||||||
mcf_intc_state *s = (mcf_intc_state *)opaque;
|
mcf_intc_state *s = (mcf_intc_state *)opaque;
|
||||||
@ -127,31 +131,24 @@ static void mcf_intc_reset(mcf_intc_state *s)
|
|||||||
s->active_vector = 24;
|
s->active_vector = 24;
|
||||||
}
|
}
|
||||||
|
|
||||||
static CPUReadMemoryFunc * const mcf_intc_readfn[] = {
|
static const MemoryRegionOps mcf_intc_ops = {
|
||||||
mcf_intc_read,
|
.read = mcf_intc_read,
|
||||||
mcf_intc_read,
|
.write = mcf_intc_write,
|
||||||
mcf_intc_read
|
.endianness = DEVICE_NATIVE_ENDIAN,
|
||||||
};
|
};
|
||||||
|
|
||||||
static CPUWriteMemoryFunc * const mcf_intc_writefn[] = {
|
qemu_irq *mcf_intc_init(MemoryRegion *sysmem,
|
||||||
mcf_intc_write,
|
target_phys_addr_t base,
|
||||||
mcf_intc_write,
|
CPUState *env)
|
||||||
mcf_intc_write
|
|
||||||
};
|
|
||||||
|
|
||||||
qemu_irq *mcf_intc_init(target_phys_addr_t base, CPUState *env)
|
|
||||||
{
|
{
|
||||||
mcf_intc_state *s;
|
mcf_intc_state *s;
|
||||||
int iomemtype;
|
|
||||||
|
|
||||||
s = g_malloc0(sizeof(mcf_intc_state));
|
s = g_malloc0(sizeof(mcf_intc_state));
|
||||||
s->env = env;
|
s->env = env;
|
||||||
mcf_intc_reset(s);
|
mcf_intc_reset(s);
|
||||||
|
|
||||||
iomemtype = cpu_register_io_memory(mcf_intc_readfn,
|
memory_region_init_io(&s->iomem, &mcf_intc_ops, s, "mcf", 0x100);
|
||||||
mcf_intc_writefn, s,
|
memory_region_add_subregion(sysmem, base, &s->iomem);
|
||||||
DEVICE_NATIVE_ENDIAN);
|
|
||||||
cpu_register_physical_memory(base, 0x100, iomemtype);
|
|
||||||
|
|
||||||
return qemu_allocate_irqs(mcf_intc_set_irq, s, 64);
|
return qemu_allocate_irqs(mcf_intc_set_irq, s, 64);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user