From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=41935 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Ofd0N-00079b-9V for qemu-devel@nongnu.org; Sun, 01 Aug 2010 14:11:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1Ofd0L-00060y-VD for qemu-devel@nongnu.org; Sun, 01 Aug 2010 14:11:23 -0400 Received: from smtp5-g21.free.fr ([212.27.42.5]:43723) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Ofd0L-00060f-9P for qemu-devel@nongnu.org; Sun, 01 Aug 2010 14:11:21 -0400 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sun, 1 Aug 2010 19:37:14 +0200 Message-Id: <1280684242-19611-12-git-send-email-hpoussin@reactos.org> In-Reply-To: <4C5579DA.8050508@reactos.org> References: <4C5579DA.8050508@reactos.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH 12/20] [MIPS] qdev: convert g364fb to rc4030 device List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Use it in Jazz emulation Signed-off-by: Herv=C3=A9 Poussineau --- hw/g364fb.c | 62 +++++++++++++++++++++++++++++++++++++++++---------= ----- hw/mips.h | 5 ---- hw/mips_jazz.c | 2 +- vl.c | 1 + 4 files changed, 48 insertions(+), 22 deletions(-) diff --git a/hw/g364fb.c b/hw/g364fb.c index 3c8fb98..4b5e6ef 100644 --- a/hw/g364fb.c +++ b/hw/g364fb.c @@ -21,6 +21,8 @@ #include "mips.h" #include "console.h" #include "pixel_ops.h" +#include "rc4030.h" +#include "qdev-addr.h" =20 //#define DEBUG_G364 =20 @@ -37,7 +39,7 @@ typedef struct G364State { /* hardware */ uint8_t *vram; ram_addr_t vram_offset; - int vram_size; + uint32_t vram_size; qemu_irq irq; /* registers */ uint8_t color_palette[256][3]; @@ -53,6 +55,14 @@ typedef struct G364State { int blanked; } G364State; =20 +typedef struct RC4030G364State { + RC4030Device dev; + target_phys_addr_t iobase; + target_phys_addr_t vram; + uint32_t irq; + G364State state; +} RC4030G364State; + #define REG_ID 0x000000 #define REG_BOOT 0x080000 #define REG_DISPLAY 0x080118 @@ -279,9 +289,8 @@ static inline void g364fb_invalidate_display(void *op= aque) } } =20 -static void g364fb_reset(void *opaque) +static void g364fb_reset(G364State *s) { - G364State *s =3D opaque; qemu_irq_lower(s->irq); =20 memset(s->color_palette, 0, sizeof(s->color_palette)); @@ -292,7 +301,13 @@ static void g364fb_reset(void *opaque) s->top_of_screen =3D 0; s->width =3D s->height =3D 0; memset(s->vram, 0, s->vram_size); - g364fb_invalidate_display(opaque); + g364fb_invalidate_display(s); +} + +static void g364fb_reset1(DeviceState *d) +{ + G364State *s =3D &container_of(d, RC4030G364State, dev.qdev)->state; + g364fb_reset(s); } =20 static void g364fb_screen_dump(void *opaque, const char *filename) @@ -583,32 +598,47 @@ static void g364fb_save(QEMUFile *f, void *opaque) qemu_put_be32(f, s->height); } =20 -int g364fb_mm_init(target_phys_addr_t vram_base, - target_phys_addr_t ctrl_base, int it_shift, - qemu_irq irq) +static int g364fb_init(RC4030Device *dev) { - G364State *s; + RC4030G364State *rc4030 =3D container_of(dev, RC4030G364State, dev); + G364State *s =3D &rc4030->state; int io_ctrl; =20 - s =3D qemu_mallocz(sizeof(G364State)); - - s->vram_size =3D 8 * 1024 * 1024; s->vram_offset =3D qemu_ram_alloc(NULL, "g364fb.vram", s->vram_size)= ; s->vram =3D qemu_get_ram_ptr(s->vram_offset); - s->irq =3D irq; + rc4030_init_irq(dev, &s->irq, rc4030->irq); =20 - qemu_register_reset(g364fb_reset, s); register_savevm(NULL, "g364fb", 0, 1, g364fb_save, g364fb_load, s); - g364fb_reset(s); =20 s->ds =3D graphic_console_init(g364fb_update_display, g364fb_invalidate_display, g364fb_screen_dump, NULL, s); =20 - cpu_register_physical_memory(vram_base, s->vram_size, s->vram_offset= ); + cpu_register_physical_memory(rc4030->vram, s->vram_size, s->vram_off= set); =20 io_ctrl =3D cpu_register_io_memory(g364fb_ctrl_read, g364fb_ctrl_wri= te, s); - cpu_register_physical_memory(ctrl_base, 0x200000, io_ctrl); + cpu_register_physical_memory(rc4030->iobase, 0x200000, io_ctrl); =20 return 0; } + +static RC4030DeviceInfo g364fb_device_info =3D { + .qdev.name =3D "rc4030-g364fb", + .qdev.size =3D sizeof(RC4030G364State), + .qdev.reset =3D g364fb_reset1, + .init =3D g364fb_init, + .qdev.props =3D (Property[]) { + DEFINE_PROP_TADDR("iobase", RC4030G364State, iobase, 0x60000000)= , + DEFINE_PROP_TADDR("vram", RC4030G364State, vram, 0x40000000), + DEFINE_PROP_HEX32("vram_size", RC4030G364State, state.vram_size,= 8 * 1024 * 1024), + DEFINE_PROP_UINT32("irq", RC4030G364State, irq, 3), + DEFINE_PROP_END_OF_LIST(), + }, +}; + +static void g364fb_register_devices(void) +{ + rc4030_qdev_register(&g364fb_device_info); +} + +device_init(g364fb_register_devices) diff --git a/hw/mips.h b/hw/mips.h index 023d85c..aa790d8 100644 --- a/hw/mips.h +++ b/hw/mips.h @@ -12,11 +12,6 @@ PCIBus *bonito_init(qemu_irq *pic); void *ds1225y_init(target_phys_addr_t mem_base, const char *filename); void ds1225y_set_protection(void *opaque, int protection); =20 -/* g364fb.c */ -int g364fb_mm_init(target_phys_addr_t vram_base, - target_phys_addr_t ctrl_base, int it_shift, - qemu_irq irq); - /* mipsnet.c */ void mipsnet_init(int base, qemu_irq irq, NICInfo *nd); =20 diff --git a/hw/mips_jazz.c b/hw/mips_jazz.c index 96946e8..c4f3721 100644 --- a/hw/mips_jazz.c +++ b/hw/mips_jazz.c @@ -206,7 +206,7 @@ void mips_jazz_init (ram_addr_t ram_size, if (vga_interface_type !=3D VGA_NONE) { switch (jazz_model) { case JAZZ_MAGNUM: - g364fb_mm_init(0x40000000, 0x60000000, 0, rc4030[3]); + rc4030_create_simple("rc4030-g364fb"); break; case JAZZ_PICA61: isa_create_simple("isa-vga-mm"); diff --git a/vl.c b/vl.c index 9815f8d..eb4c212 100644 --- a/vl.c +++ b/vl.c @@ -266,6 +266,7 @@ static struct { { .driver =3D "cirrus-vga", .flag =3D &default_vga }= , { .driver =3D "vmware-svga", .flag =3D &default_vga }= , { .driver =3D "isa-vga-mm", .flag =3D &default_vga }= , + { .driver =3D "rc4030-g364fb", .flag =3D &default_vga }= , }; =20 static int default_driver_check(QemuOpts *opts, void *opaque) --=20 1.7.1.GIT