* Re: [Qemu-devel] [PATCH 01/13] mips_jazz: convert to memory API @ 2011-09-24 8:29 Hervé Poussineau 2011-09-25 9:18 ` Avi Kivity 0 siblings, 1 reply; 6+ messages in thread From: Hervé Poussineau @ 2011-09-24 8:29 UTC (permalink / raw) To: avi; +Cc: QEMU Developers Avi Kivity wrote: > Signed-off-by: Avi Kivity <avi@redhat.com> > --- > > hw/mips_jazz.c | 90 ++++++++++++++++++++++++++++---------------------------- > 1 files changed, 45 insertions(+), 45 deletions(-) > > diff --git a/hw/mips_jazz.c b/hw/mips_jazz.c > index f3c9f93..7cac5da 100644 > --- a/hw/mips_jazz.c > +++ b/hw/mips_jazz.c >@@ -203,10 +203,11 @@ void mips_jazz_init (ram_addr_t ram_size, > sysbus_connect_irq(sysbus, 0, rc4030[3]); > { > /* Simple ROM, so user doesn't have to provide one */ > - ram_addr_t rom_offset = qemu_ram_alloc(NULL, "g364fb.rom", > 0x80000); > - uint8_t *rom = qemu_get_ram_ptr(rom_offset); > - cpu_register_physical_memory(0x60000000, 0x80000, > - rom_offset | IO_MEM_ROM); > + MemoryRegion *rom_mr = g_new(MemoryRegion, 1); > + memory_region_init_ram(rom_mr, NULL, "g364fb.rom", 0x80000); > + memory_region_set_readonly(rom_mr, true); > + uint8_t *rom = memory_region_get_ram_ptr(rom_mr); > + memory_region_add_subregion(address_space, 0x60000000, rom_mr); > rom[0] = 0x10; /* Mips G364 */ > } > break; This part breaks Magnum emulation, where firmware writes to 0x60000000, and then checks if value has been modified. This is not working as expected (value is modified) because memory_region_set_readonly() is unimplemented... Hervé ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH 01/13] mips_jazz: convert to memory API 2011-09-24 8:29 [Qemu-devel] [PATCH 01/13] mips_jazz: convert to memory API Hervé Poussineau @ 2011-09-25 9:18 ` Avi Kivity 2011-09-25 11:51 ` Avi Kivity 0 siblings, 1 reply; 6+ messages in thread From: Avi Kivity @ 2011-09-25 9:18 UTC (permalink / raw) To: Hervé Poussineau; +Cc: QEMU Developers On 09/24/2011 11:29 AM, Hervé Poussineau wrote: > > This part breaks Magnum emulation, where firmware writes to > 0x60000000, and then checks if value has been modified. > This is not working as expected (value is modified) because > memory_region_set_readonly() is unimplemented... Whoops! Will provide a fix asap. -- error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH 01/13] mips_jazz: convert to memory API 2011-09-25 9:18 ` Avi Kivity @ 2011-09-25 11:51 ` Avi Kivity 2011-09-25 12:37 ` Hervé Poussineau 0 siblings, 1 reply; 6+ messages in thread From: Avi Kivity @ 2011-09-25 11:51 UTC (permalink / raw) To: Hervé Poussineau; +Cc: QEMU Developers [-- Attachment #1: Type: text/plain, Size: 518 bytes --] On 09/25/2011 12:18 PM, Avi Kivity wrote: > On 09/24/2011 11:29 AM, Hervé Poussineau wrote: >> >> This part breaks Magnum emulation, where firmware writes to >> 0x60000000, and then checks if value has been modified. >> This is not working as expected (value is modified) because >> memory_region_set_readonly() is unimplemented... > > Whoops! Will provide a fix asap. > Please test the attached patch (works for me with 440FX PAM) -- error compiling committee.c: too many arguments to function [-- Attachment #2: 0001-memory-implement-memory_region_set_readonly.patch --] [-- Type: text/x-patch, Size: 5152 bytes --] >From fb1cd6f998fe7dba889e5c77962f94bb1a15d202 Mon Sep 17 00:00:00 2001 From: Avi Kivity <avi@redhat.com> Date: Sun, 25 Sep 2011 14:48:47 +0300 Subject: [PATCH] memory: implement memory_region_set_readonly() The property is inheritable, but only if set to true. This is so that memory routers can mark sections of RAM as read-only via aliases. Signed-off-by: Avi Kivity <avi@redhat.com> --- memory.c | 29 ++++++++++++++++++++++------- memory.h | 1 + 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/memory.c b/memory.c index ba74435..71e769e 100644 --- a/memory.c +++ b/memory.c @@ -126,6 +126,7 @@ struct FlatRange { AddrRange addr; uint8_t dirty_log_mask; bool readable; + bool readonly; }; /* Flattened global view of current active memory hierarchy. Kept in sorted @@ -166,7 +167,8 @@ static bool flatrange_equal(FlatRange *a, FlatRange *b) return a->mr == b->mr && addrrange_equal(a->addr, b->addr) && a->offset_in_region == b->offset_in_region - && a->readable == b->readable; + && a->readable == b->readable + && a->readonly == b->readonly; } static void flatview_init(FlatView *view) @@ -203,7 +205,8 @@ static bool can_merge(FlatRange *r1, FlatRange *r2) && r1->mr == r2->mr && r1->offset_in_region + r1->addr.size == r2->offset_in_region && r1->dirty_log_mask == r2->dirty_log_mask - && r1->readable == r2->readable; + && r1->readable == r2->readable + && r1->readonly == r2->readonly; } /* Attempt to simplify a view by merging ajacent ranges */ @@ -307,6 +310,10 @@ static void as_memory_range_add(AddressSpace *as, FlatRange *fr) phys_offset &= ~TARGET_PAGE_MASK & ~IO_MEM_ROMD; } + if (fr->readonly) { + phys_offset |= IO_MEM_ROM; + } + cpu_register_physical_memory_log(fr->addr.start, fr->addr.size, phys_offset, @@ -484,7 +491,8 @@ static void as_io_ioeventfd_del(AddressSpace *as, MemoryRegionIoeventfd *fd) static void render_memory_region(FlatView *view, MemoryRegion *mr, target_phys_addr_t base, - AddrRange clip) + AddrRange clip, + bool readonly) { MemoryRegion *subregion; unsigned i; @@ -495,6 +503,7 @@ static void render_memory_region(FlatView *view, AddrRange tmp; base += mr->addr; + readonly |= mr->readonly; tmp = addrrange_make(base, mr->size); @@ -507,13 +516,13 @@ static void render_memory_region(FlatView *view, if (mr->alias) { base -= mr->alias->addr; base -= mr->alias_offset; - render_memory_region(view, mr->alias, base, clip); + render_memory_region(view, mr->alias, base, clip, readonly); return; } /* Render subregions in priority order. */ QTAILQ_FOREACH(subregion, &mr->subregions, subregions_link) { - render_memory_region(view, subregion, base, clip); + render_memory_region(view, subregion, base, clip, readonly); } if (!mr->terminates) { @@ -536,6 +545,7 @@ static void render_memory_region(FlatView *view, fr.addr = addrrange_make(base, now); fr.dirty_log_mask = mr->dirty_log_mask; fr.readable = mr->readable; + fr.readonly = readonly; flatview_insert(view, i, &fr); ++i; base += now; @@ -555,6 +565,7 @@ static void render_memory_region(FlatView *view, fr.addr = addrrange_make(base, remain); fr.dirty_log_mask = mr->dirty_log_mask; fr.readable = mr->readable; + fr.readonly = readonly; flatview_insert(view, i, &fr); } } @@ -566,7 +577,7 @@ static FlatView generate_memory_topology(MemoryRegion *mr) flatview_init(&view); - render_memory_region(&view, mr, 0, addrrange_make(0, INT64_MAX)); + render_memory_region(&view, mr, 0, addrrange_make(0, INT64_MAX), false); flatview_simplify(&view); return view; @@ -772,6 +783,7 @@ void memory_region_init(MemoryRegion *mr, mr->offset = 0; mr->terminates = false; mr->readable = true; + mr->readonly = false; mr->destructor = memory_region_destructor_none; mr->priority = 0; mr->may_overlap = false; @@ -1035,7 +1047,10 @@ void memory_region_sync_dirty_bitmap(MemoryRegion *mr) void memory_region_set_readonly(MemoryRegion *mr, bool readonly) { - /* FIXME */ + if (mr->readonly != readonly) { + mr->readonly = readonly; + memory_region_update_topology(); + } } void memory_region_rom_device_set_readable(MemoryRegion *mr, bool readable) diff --git a/memory.h b/memory.h index 06b83ae..e93e65a 100644 --- a/memory.h +++ b/memory.h @@ -114,6 +114,7 @@ struct MemoryRegion { IORange iorange; bool terminates; bool readable; + bool readonly; /* For RAM regions */ MemoryRegion *alias; target_phys_addr_t alias_offset; unsigned priority; -- 1.7.6.3 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH 01/13] mips_jazz: convert to memory API 2011-09-25 11:51 ` Avi Kivity @ 2011-09-25 12:37 ` Hervé Poussineau 0 siblings, 0 replies; 6+ messages in thread From: Hervé Poussineau @ 2011-09-25 12:37 UTC (permalink / raw) To: Avi Kivity; +Cc: QEMU Developers Avi Kivity a écrit : > On 09/25/2011 12:18 PM, Avi Kivity wrote: >> On 09/24/2011 11:29 AM, Hervé Poussineau wrote: >>> >>> This part breaks Magnum emulation, where firmware writes to >>> 0x60000000, and then checks if value has been modified. >>> This is not working as expected (value is modified) because >>> memory_region_set_readonly() is unimplemented... >> >> Whoops! Will provide a fix asap. >> > > Please test the attached patch (works for me with 440FX PAM) > Yes, this patch also fixes Magnum emulation. Thanks. Hervé ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Qemu-devel] [PULL 00/13] Memory API conversion, batch 8 @ 2011-09-21 8:19 Avi Kivity 2011-09-21 8:19 ` [Qemu-devel] [PATCH 01/13] mips_jazz: convert to memory API Avi Kivity 0 siblings, 1 reply; 6+ messages in thread From: Avi Kivity @ 2011-09-21 8:19 UTC (permalink / raw) To: Anthony Liguori, qemu-devel Available on git://github.com/avikivity/qemu.git memory/batch Please pull. Avi Kivity (13): mips_jazz: convert to memory API mips_malta: convert to memory API mips_mipssim: convert to memory API mips_r4k: convert to memory API musicpal: convert to memory API omap1: convert to memory API (part I) omap1: convert to memory API (part II) omap1: convert to memory API (part III) omap1: convert to memory API (part IV) omap1: convert to memory API (part V) omap_lcdc: remove imif, emiff from structure soc_dma: drop soc_dma_port_add_mem_ram() omap1: convert to memory API (part VI) hw/mips_jazz.c | 90 +++--- hw/mips_malta.c | 53 ++-- hw/mips_mipssim.c | 15 +- hw/mips_r4k.c | 39 +-- hw/musicpal.c | 243 ++++++--------- hw/omap.h | 32 ++- hw/omap1.c | 859 +++++++++++++++++++++++++++++------------------------ hw/omap2.c | 6 +- hw/omap_lcdc.c | 7 +- hw/omap_sx1.c | 4 +- hw/palm.c | 4 +- hw/soc_dma.h | 8 +- 12 files changed, 705 insertions(+), 655 deletions(-) -- 1.7.6.3 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Qemu-devel] [PATCH 01/13] mips_jazz: convert to memory API 2011-09-21 8:19 [Qemu-devel] [PULL 00/13] Memory API conversion, batch 8 Avi Kivity @ 2011-09-21 8:19 ` Avi Kivity 0 siblings, 0 replies; 6+ messages in thread From: Avi Kivity @ 2011-09-21 8:19 UTC (permalink / raw) To: Anthony Liguori, qemu-devel Signed-off-by: Avi Kivity <avi@redhat.com> --- hw/mips_jazz.c | 90 ++++++++++++++++++++++++++++---------------------------- 1 files changed, 45 insertions(+), 45 deletions(-) diff --git a/hw/mips_jazz.c b/hw/mips_jazz.c index f3c9f93..7cac5da 100644 --- a/hw/mips_jazz.c +++ b/hw/mips_jazz.c @@ -52,44 +52,42 @@ static void main_cpu_reset(void *opaque) cpu_reset(env); } -static uint32_t rtc_readb(void *opaque, target_phys_addr_t addr) +static uint64_t rtc_read(void *opaque, target_phys_addr_t addr, unsigned size) { return cpu_inw(0x71); } -static void rtc_writeb(void *opaque, target_phys_addr_t addr, uint32_t val) +static void rtc_write(void *opaque, target_phys_addr_t addr, + uint64_t val, unsigned size) { cpu_outw(0x71, val & 0xff); } -static CPUReadMemoryFunc * const rtc_read[3] = { - rtc_readb, - rtc_readb, - rtc_readb, +static const MemoryRegionOps rtc_ops = { + .read = rtc_read, + .write = rtc_write, + .endianness = DEVICE_NATIVE_ENDIAN, }; -static CPUWriteMemoryFunc * const rtc_write[3] = { - rtc_writeb, - rtc_writeb, - rtc_writeb, -}; - -static void dma_dummy_writeb(void *opaque, target_phys_addr_t addr, uint32_t val) +static uint64_t dma_dummy_read(void *opaque, target_phys_addr_t addr, + unsigned size) { /* Nothing to do. That is only to ensure that * the current DMA acknowledge cycle is completed. */ + return 0xff; } -static CPUReadMemoryFunc * const dma_dummy_read[3] = { - NULL, - NULL, - NULL, -}; +static void dma_dummy_write(void *opaque, target_phys_addr_t addr, + uint64_t val, unsigned size) +{ + /* Nothing to do. That is only to ensure that + * the current DMA acknowledge cycle is completed. */ +} -static CPUWriteMemoryFunc * const dma_dummy_write[3] = { - dma_dummy_writeb, - dma_dummy_writeb, - dma_dummy_writeb, +static const MemoryRegionOps dma_dummy_ops = { + .read = dma_dummy_read, + .write = dma_dummy_write, + .endianness = DEVICE_NATIVE_ENDIAN, }; #define MAGNUM_BIOS_SIZE_MAX 0x7e000 @@ -105,7 +103,7 @@ static void cpu_request_exit(void *opaque, int irq, int level) } static -void mips_jazz_init (ram_addr_t ram_size, +void mips_jazz_init (MemoryRegion *address_space, ram_addr_t ram_size, const char *cpu_model, enum jazz_model_e jazz_model) { @@ -115,7 +113,8 @@ void mips_jazz_init (ram_addr_t ram_size, qemu_irq *rc4030, *i8259; rc4030_dma *dmas; void* rc4030_opaque; - int s_rtc, s_dma_dummy; + MemoryRegion *rtc = g_new(MemoryRegion, 1); + MemoryRegion *dma_dummy = g_new(MemoryRegion, 1); NICInfo *nd; DeviceState *dev; SysBusDevice *sysbus; @@ -123,8 +122,9 @@ void mips_jazz_init (ram_addr_t ram_size, DriveInfo *fds[MAX_FD]; qemu_irq esp_reset, dma_enable; qemu_irq *cpu_exit_irq; - ram_addr_t ram_offset; - ram_addr_t bios_offset; + MemoryRegion *ram = g_new(MemoryRegion, 1); + MemoryRegion *bios = g_new(MemoryRegion, 1); + MemoryRegion *bios2 = g_new(MemoryRegion, 1); /* init CPUs */ if (cpu_model == NULL) { @@ -143,14 +143,15 @@ void mips_jazz_init (ram_addr_t ram_size, qemu_register_reset(main_cpu_reset, env); /* allocate RAM */ - ram_offset = qemu_ram_alloc(NULL, "mips_jazz.ram", ram_size); - cpu_register_physical_memory(0, ram_size, ram_offset | IO_MEM_RAM); + memory_region_init_ram(ram, NULL, "mips_jazz.ram", ram_size); + memory_region_add_subregion(address_space, 0, ram); - bios_offset = qemu_ram_alloc(NULL, "mips_jazz.bios", MAGNUM_BIOS_SIZE); - cpu_register_physical_memory(0x1fc00000LL, - MAGNUM_BIOS_SIZE, bios_offset | IO_MEM_ROM); - cpu_register_physical_memory(0xfff00000LL, - MAGNUM_BIOS_SIZE, bios_offset | IO_MEM_ROM); + memory_region_init_ram(bios, NULL, "mips_jazz.bios", MAGNUM_BIOS_SIZE); + memory_region_set_readonly(bios, true); + memory_region_init_alias(bios2, "mips_jazz.bios", bios, + 0, MAGNUM_BIOS_SIZE); + memory_region_add_subregion(address_space, 0x1fc00000LL, bios); + memory_region_add_subregion(address_space, 0xfff00000LL, bios2); /* load the BIOS image. */ if (bios_name == NULL) @@ -175,9 +176,8 @@ void mips_jazz_init (ram_addr_t ram_size, /* Chipset */ rc4030_opaque = rc4030_init(env->irq[6], env->irq[3], &rc4030, &dmas); - s_dma_dummy = cpu_register_io_memory(dma_dummy_read, dma_dummy_write, NULL, - DEVICE_NATIVE_ENDIAN); - cpu_register_physical_memory(0x8000d000, 0x00001000, s_dma_dummy); + memory_region_init_io(dma_dummy, &dma_dummy_ops, NULL, "dummy_dma", 0x1000); + memory_region_add_subregion(address_space, 0x8000d000, dma_dummy); /* ISA devices */ i8259 = i8259_init(env->irq[4]); @@ -203,10 +203,11 @@ void mips_jazz_init (ram_addr_t ram_size, sysbus_connect_irq(sysbus, 0, rc4030[3]); { /* Simple ROM, so user doesn't have to provide one */ - ram_addr_t rom_offset = qemu_ram_alloc(NULL, "g364fb.rom", 0x80000); - uint8_t *rom = qemu_get_ram_ptr(rom_offset); - cpu_register_physical_memory(0x60000000, 0x80000, - rom_offset | IO_MEM_ROM); + MemoryRegion *rom_mr = g_new(MemoryRegion, 1); + memory_region_init_ram(rom_mr, NULL, "g364fb.rom", 0x80000); + memory_region_set_readonly(rom_mr, true); + uint8_t *rom = memory_region_get_ram_ptr(rom_mr); + memory_region_add_subregion(address_space, 0x60000000, rom_mr); rom[0] = 0x10; /* Mips G364 */ } break; @@ -252,9 +253,8 @@ void mips_jazz_init (ram_addr_t ram_size, /* Real time clock */ rtc_init(1980, NULL); - s_rtc = cpu_register_io_memory(rtc_read, rtc_write, NULL, - DEVICE_NATIVE_ENDIAN); - cpu_register_physical_memory(0x80004000, 0x00001000, s_rtc); + memory_region_init_io(rtc, &rtc_ops, NULL, "rtc", 0x1000); + memory_region_add_subregion(address_space, 0x80004000, rtc); /* Keyboard (i8042) */ i8042_mm_init(rc4030[6], rc4030[7], 0x80005000, 0x1000, 0x1); @@ -299,7 +299,7 @@ void mips_magnum_init (ram_addr_t ram_size, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) { - mips_jazz_init(ram_size, cpu_model, JAZZ_MAGNUM); + mips_jazz_init(get_system_memory(), ram_size, cpu_model, JAZZ_MAGNUM); } static @@ -308,7 +308,7 @@ void mips_pica61_init (ram_addr_t ram_size, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) { - mips_jazz_init(ram_size, cpu_model, JAZZ_PICA61); + mips_jazz_init(get_system_memory(), ram_size, cpu_model, JAZZ_PICA61); } static QEMUMachine mips_magnum_machine = { -- 1.7.6.3 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [Qemu-devel] [PATCH 00/13] Memory API conversion, batch 8 @ 2011-09-18 14:15 Avi Kivity 2011-09-18 14:15 ` [Qemu-devel] [PATCH 01/13] mips_jazz: convert to memory API Avi Kivity 0 siblings, 1 reply; 6+ messages in thread From: Avi Kivity @ 2011-09-18 14:15 UTC (permalink / raw) To: qemu-devel Batch 7 has some issues due to the ISA conversion, so I reordered some patches and am posting this for your review and testing. It should be straightforward but this stuff never is. Also available on git://github.com/avikivity/qemu.git memory/batch Avi Kivity (13): mips_jazz: convert to memory API mips_malta: convert to memory API mips_mipssim: convert to memory API mips_r4k: convert to memory API musicpal: convert to memory API omap1: convert to memory API (part I) omap1: convert to memory API (part II) omap1: convert to memory API (part III) omap1: convert to memory API (part IV) omap1: convert to memory API (part V) omap_lcdc: remove imif, emiff from structure soc_dma: drop soc_dma_port_add_mem_ram() omap1: convert to memory API (part VI) hw/mips_jazz.c | 90 +++--- hw/mips_malta.c | 53 ++-- hw/mips_mipssim.c | 15 +- hw/mips_r4k.c | 39 +-- hw/musicpal.c | 243 ++++++--------- hw/omap.h | 32 ++- hw/omap1.c | 859 +++++++++++++++++++++++++++++------------------------ hw/omap2.c | 6 +- hw/omap_lcdc.c | 7 +- hw/omap_sx1.c | 4 +- hw/palm.c | 4 +- hw/soc_dma.h | 8 +- 12 files changed, 705 insertions(+), 655 deletions(-) -- 1.7.6.3 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Qemu-devel] [PATCH 01/13] mips_jazz: convert to memory API 2011-09-18 14:15 [Qemu-devel] [PATCH 00/13] Memory API conversion, batch 8 Avi Kivity @ 2011-09-18 14:15 ` Avi Kivity 0 siblings, 0 replies; 6+ messages in thread From: Avi Kivity @ 2011-09-18 14:15 UTC (permalink / raw) To: qemu-devel Signed-off-by: Avi Kivity <avi@redhat.com> --- hw/mips_jazz.c | 90 ++++++++++++++++++++++++++++---------------------------- 1 files changed, 45 insertions(+), 45 deletions(-) diff --git a/hw/mips_jazz.c b/hw/mips_jazz.c index f3c9f93..7cac5da 100644 --- a/hw/mips_jazz.c +++ b/hw/mips_jazz.c @@ -52,44 +52,42 @@ static void main_cpu_reset(void *opaque) cpu_reset(env); } -static uint32_t rtc_readb(void *opaque, target_phys_addr_t addr) +static uint64_t rtc_read(void *opaque, target_phys_addr_t addr, unsigned size) { return cpu_inw(0x71); } -static void rtc_writeb(void *opaque, target_phys_addr_t addr, uint32_t val) +static void rtc_write(void *opaque, target_phys_addr_t addr, + uint64_t val, unsigned size) { cpu_outw(0x71, val & 0xff); } -static CPUReadMemoryFunc * const rtc_read[3] = { - rtc_readb, - rtc_readb, - rtc_readb, +static const MemoryRegionOps rtc_ops = { + .read = rtc_read, + .write = rtc_write, + .endianness = DEVICE_NATIVE_ENDIAN, }; -static CPUWriteMemoryFunc * const rtc_write[3] = { - rtc_writeb, - rtc_writeb, - rtc_writeb, -}; - -static void dma_dummy_writeb(void *opaque, target_phys_addr_t addr, uint32_t val) +static uint64_t dma_dummy_read(void *opaque, target_phys_addr_t addr, + unsigned size) { /* Nothing to do. That is only to ensure that * the current DMA acknowledge cycle is completed. */ + return 0xff; } -static CPUReadMemoryFunc * const dma_dummy_read[3] = { - NULL, - NULL, - NULL, -}; +static void dma_dummy_write(void *opaque, target_phys_addr_t addr, + uint64_t val, unsigned size) +{ + /* Nothing to do. That is only to ensure that + * the current DMA acknowledge cycle is completed. */ +} -static CPUWriteMemoryFunc * const dma_dummy_write[3] = { - dma_dummy_writeb, - dma_dummy_writeb, - dma_dummy_writeb, +static const MemoryRegionOps dma_dummy_ops = { + .read = dma_dummy_read, + .write = dma_dummy_write, + .endianness = DEVICE_NATIVE_ENDIAN, }; #define MAGNUM_BIOS_SIZE_MAX 0x7e000 @@ -105,7 +103,7 @@ static void cpu_request_exit(void *opaque, int irq, int level) } static -void mips_jazz_init (ram_addr_t ram_size, +void mips_jazz_init (MemoryRegion *address_space, ram_addr_t ram_size, const char *cpu_model, enum jazz_model_e jazz_model) { @@ -115,7 +113,8 @@ void mips_jazz_init (ram_addr_t ram_size, qemu_irq *rc4030, *i8259; rc4030_dma *dmas; void* rc4030_opaque; - int s_rtc, s_dma_dummy; + MemoryRegion *rtc = g_new(MemoryRegion, 1); + MemoryRegion *dma_dummy = g_new(MemoryRegion, 1); NICInfo *nd; DeviceState *dev; SysBusDevice *sysbus; @@ -123,8 +122,9 @@ void mips_jazz_init (ram_addr_t ram_size, DriveInfo *fds[MAX_FD]; qemu_irq esp_reset, dma_enable; qemu_irq *cpu_exit_irq; - ram_addr_t ram_offset; - ram_addr_t bios_offset; + MemoryRegion *ram = g_new(MemoryRegion, 1); + MemoryRegion *bios = g_new(MemoryRegion, 1); + MemoryRegion *bios2 = g_new(MemoryRegion, 1); /* init CPUs */ if (cpu_model == NULL) { @@ -143,14 +143,15 @@ void mips_jazz_init (ram_addr_t ram_size, qemu_register_reset(main_cpu_reset, env); /* allocate RAM */ - ram_offset = qemu_ram_alloc(NULL, "mips_jazz.ram", ram_size); - cpu_register_physical_memory(0, ram_size, ram_offset | IO_MEM_RAM); + memory_region_init_ram(ram, NULL, "mips_jazz.ram", ram_size); + memory_region_add_subregion(address_space, 0, ram); - bios_offset = qemu_ram_alloc(NULL, "mips_jazz.bios", MAGNUM_BIOS_SIZE); - cpu_register_physical_memory(0x1fc00000LL, - MAGNUM_BIOS_SIZE, bios_offset | IO_MEM_ROM); - cpu_register_physical_memory(0xfff00000LL, - MAGNUM_BIOS_SIZE, bios_offset | IO_MEM_ROM); + memory_region_init_ram(bios, NULL, "mips_jazz.bios", MAGNUM_BIOS_SIZE); + memory_region_set_readonly(bios, true); + memory_region_init_alias(bios2, "mips_jazz.bios", bios, + 0, MAGNUM_BIOS_SIZE); + memory_region_add_subregion(address_space, 0x1fc00000LL, bios); + memory_region_add_subregion(address_space, 0xfff00000LL, bios2); /* load the BIOS image. */ if (bios_name == NULL) @@ -175,9 +176,8 @@ void mips_jazz_init (ram_addr_t ram_size, /* Chipset */ rc4030_opaque = rc4030_init(env->irq[6], env->irq[3], &rc4030, &dmas); - s_dma_dummy = cpu_register_io_memory(dma_dummy_read, dma_dummy_write, NULL, - DEVICE_NATIVE_ENDIAN); - cpu_register_physical_memory(0x8000d000, 0x00001000, s_dma_dummy); + memory_region_init_io(dma_dummy, &dma_dummy_ops, NULL, "dummy_dma", 0x1000); + memory_region_add_subregion(address_space, 0x8000d000, dma_dummy); /* ISA devices */ i8259 = i8259_init(env->irq[4]); @@ -203,10 +203,11 @@ void mips_jazz_init (ram_addr_t ram_size, sysbus_connect_irq(sysbus, 0, rc4030[3]); { /* Simple ROM, so user doesn't have to provide one */ - ram_addr_t rom_offset = qemu_ram_alloc(NULL, "g364fb.rom", 0x80000); - uint8_t *rom = qemu_get_ram_ptr(rom_offset); - cpu_register_physical_memory(0x60000000, 0x80000, - rom_offset | IO_MEM_ROM); + MemoryRegion *rom_mr = g_new(MemoryRegion, 1); + memory_region_init_ram(rom_mr, NULL, "g364fb.rom", 0x80000); + memory_region_set_readonly(rom_mr, true); + uint8_t *rom = memory_region_get_ram_ptr(rom_mr); + memory_region_add_subregion(address_space, 0x60000000, rom_mr); rom[0] = 0x10; /* Mips G364 */ } break; @@ -252,9 +253,8 @@ void mips_jazz_init (ram_addr_t ram_size, /* Real time clock */ rtc_init(1980, NULL); - s_rtc = cpu_register_io_memory(rtc_read, rtc_write, NULL, - DEVICE_NATIVE_ENDIAN); - cpu_register_physical_memory(0x80004000, 0x00001000, s_rtc); + memory_region_init_io(rtc, &rtc_ops, NULL, "rtc", 0x1000); + memory_region_add_subregion(address_space, 0x80004000, rtc); /* Keyboard (i8042) */ i8042_mm_init(rc4030[6], rc4030[7], 0x80005000, 0x1000, 0x1); @@ -299,7 +299,7 @@ void mips_magnum_init (ram_addr_t ram_size, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) { - mips_jazz_init(ram_size, cpu_model, JAZZ_MAGNUM); + mips_jazz_init(get_system_memory(), ram_size, cpu_model, JAZZ_MAGNUM); } static @@ -308,7 +308,7 @@ void mips_pica61_init (ram_addr_t ram_size, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) { - mips_jazz_init(ram_size, cpu_model, JAZZ_PICA61); + mips_jazz_init(get_system_memory(), ram_size, cpu_model, JAZZ_PICA61); } static QEMUMachine mips_magnum_machine = { -- 1.7.6.3 ^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2011-09-25 12:38 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-09-24 8:29 [Qemu-devel] [PATCH 01/13] mips_jazz: convert to memory API Hervé Poussineau 2011-09-25 9:18 ` Avi Kivity 2011-09-25 11:51 ` Avi Kivity 2011-09-25 12:37 ` Hervé Poussineau -- strict thread matches above, loose matches on Subject: below -- 2011-09-21 8:19 [Qemu-devel] [PULL 00/13] Memory API conversion, batch 8 Avi Kivity 2011-09-21 8:19 ` [Qemu-devel] [PATCH 01/13] mips_jazz: convert to memory API Avi Kivity 2011-09-18 14:15 [Qemu-devel] [PATCH 00/13] Memory API conversion, batch 8 Avi Kivity 2011-09-18 14:15 ` [Qemu-devel] [PATCH 01/13] mips_jazz: convert to memory API Avi Kivity
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).