etrax-ser: Convert to MemoryRegion

Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
Edgar E. Iglesias 2011-08-11 13:47:45 +02:00 committed by Avi Kivity
parent 5dd25f368c
commit dbfb57f3b1
1 changed files with 18 additions and 15 deletions

View File

@ -47,6 +47,7 @@
struct etrax_serial struct etrax_serial
{ {
SysBusDevice busdev; SysBusDevice busdev;
MemoryRegion mmio;
CharDriverState *chr; CharDriverState *chr;
qemu_irq irq; qemu_irq irq;
@ -73,7 +74,8 @@ static void ser_update_irq(struct etrax_serial *s)
qemu_set_irq(s->irq, !!s->regs[R_MASKED_INTR]); qemu_set_irq(s->irq, !!s->regs[R_MASKED_INTR]);
} }
static uint32_t ser_readl (void *opaque, target_phys_addr_t addr) static uint64_t
ser_read(void *opaque, target_phys_addr_t addr, unsigned int size)
{ {
struct etrax_serial *s = opaque; struct etrax_serial *s = opaque;
D(CPUState *env = s->env); D(CPUState *env = s->env);
@ -108,10 +110,12 @@ static uint32_t ser_readl (void *opaque, target_phys_addr_t addr)
} }
static void static void
ser_writel (void *opaque, target_phys_addr_t addr, uint32_t value) ser_write(void *opaque, target_phys_addr_t addr,
uint64_t val64, unsigned int size)
{ {
struct etrax_serial *s = opaque; struct etrax_serial *s = opaque;
unsigned char ch = value; uint32_t value = val64;
unsigned char ch = val64;
D(CPUState *env = s->env); D(CPUState *env = s->env);
D(qemu_log("%s " TARGET_FMT_plx "=%x\n", __func__, addr, value)); D(qemu_log("%s " TARGET_FMT_plx "=%x\n", __func__, addr, value));
@ -142,14 +146,14 @@ ser_writel (void *opaque, target_phys_addr_t addr, uint32_t value)
ser_update_irq(s); ser_update_irq(s);
} }
static CPUReadMemoryFunc * const ser_read[] = { static const MemoryRegionOps ser_ops = {
NULL, NULL, .read = ser_read,
&ser_readl, .write = ser_write,
}; .endianness = DEVICE_NATIVE_ENDIAN,
.valid = {
static CPUWriteMemoryFunc * const ser_write[] = { .min_access_size = 4,
NULL, NULL, .max_access_size = 4
&ser_writel, }
}; };
static void serial_receive(void *opaque, const uint8_t *buf, int size) static void serial_receive(void *opaque, const uint8_t *buf, int size)
@ -207,12 +211,11 @@ static void etraxfs_ser_reset(DeviceState *d)
static int etraxfs_ser_init(SysBusDevice *dev) static int etraxfs_ser_init(SysBusDevice *dev)
{ {
struct etrax_serial *s = FROM_SYSBUS(typeof (*s), dev); struct etrax_serial *s = FROM_SYSBUS(typeof (*s), dev);
int ser_regs;
sysbus_init_irq(dev, &s->irq); sysbus_init_irq(dev, &s->irq);
ser_regs = cpu_register_io_memory(ser_read, ser_write, s, memory_region_init_io(&s->mmio, &ser_ops, s, "etraxfs-serial", R_MAX * 4);
DEVICE_NATIVE_ENDIAN); sysbus_init_mmio_region(dev, &s->mmio);
sysbus_init_mmio(dev, R_MAX * 4, ser_regs);
s->chr = qdev_init_chardev(&dev->qdev); s->chr = qdev_init_chardev(&dev->qdev);
if (s->chr) if (s->chr)
qemu_chr_add_handlers(s->chr, qemu_chr_add_handlers(s->chr,