From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=42070 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Ofd0o-0007Pd-SB for qemu-devel@nongnu.org; Sun, 01 Aug 2010 14:11:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1Ofd0n-00066M-EX for qemu-devel@nongnu.org; Sun, 01 Aug 2010 14:11:50 -0400 Received: from smtp5-g21.free.fr ([212.27.42.5]:47928) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Ofd0m-00065y-Rt for qemu-devel@nongnu.org; Sun, 01 Aug 2010 14:11:49 -0400 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sun, 1 Aug 2010 19:37:21 +0200 Message-Id: <1280684242-19611-19-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 19/20] [MIPS] qdev: add a mips board device, which initializes the ram and the rom 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?= Also add an empty machine (to be used with the mips board device) Finally, add a workaround to be able to create the initial system bus Signed-off-by: Herv=C3=A9 Poussineau --- hw/mips_jazz.c | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++= ++++++ hw/qdev.c | 6 ++++ 2 files changed, 84 insertions(+), 0 deletions(-) diff --git a/hw/mips_jazz.c b/hw/mips_jazz.c index 6daf76e..b4c95c9 100644 --- a/hw/mips_jazz.c +++ b/hw/mips_jazz.c @@ -37,6 +37,7 @@ #include "loader.h" #include "mc146818rtc.h" #include "rc4030.h" +#include "sysbus.h" =20 enum jazz_model_e { @@ -274,6 +275,14 @@ void mips_pica61_init (ram_addr_t ram_size, mips_jazz_init(ram_size, cpu_model, JAZZ_PICA61); } =20 +static +void empty_init (ram_addr_t ram_size, + const char *boot_device, + const char *kernel_filename, const char *kernel_cmdline= , + const char *initrd_filename, const char *cpu_model) +{ +} + static QEMUMachine mips_magnum_machine =3D { .name =3D "magnum", .desc =3D "MIPS Magnum", @@ -288,10 +297,79 @@ static QEMUMachine mips_pica61_machine =3D { .use_scsi =3D 1, }; =20 +static QEMUMachine empty_machine =3D { + .name =3D "empty", + .desc =3D "Empty machine", + .init =3D empty_init, +}; + static void mips_jazz_machine_init(void) { qemu_register_machine(&mips_magnum_machine); qemu_register_machine(&mips_pica61_machine); + qemu_register_machine(&empty_machine); } =20 machine_init(mips_jazz_machine_init); + +typedef struct MipsBoardState { + SysBusDevice busdev; + + char *romfile; + uint32_t romsize; + uint32_t ramsize; +} MipsBoardState; + +static int mips_board_device_init(SysBusDevice *dev) +{ + MipsBoardState *s =3D FROM_SYSBUS(MipsBoardState, dev); + int bios_size; + ram_addr_t ram_size; + ram_addr_t ram_offset; + ram_addr_t bios_offset; + + /* allocate RAM */ + ram_size =3D s->ramsize * 1024 * 1024; + ram_offset =3D qemu_ram_alloc(NULL, "mips_jazz.ram", ram_size); + cpu_register_physical_memory(0, ram_size, ram_offset | IO_MEM_RAM); + + /* load the BIOS image */ + if (s->romfile) { + bios_offset =3D qemu_ram_alloc(NULL, "mips_jazz.bios", s->romsiz= e); + cpu_register_physical_memory(0x1fc00000LL, + s->romsize, bios_offset | IO_MEM_RO= M); + cpu_register_physical_memory(0xfff00000LL, + s->romsize, bios_offset | IO_MEM_RO= M); + + bios_size =3D load_image_targphys(s->romfile, + 0x1fc00000LL, + s->romsize); + + bios_size =3D load_image_targphys(s->romfile, + 0xfff00000LL, + s->romsize); + if (bios_size !=3D s->romsize) { + return -1; + } + } + return 0; +} + +static SysBusDeviceInfo board_device_info =3D { + .qdev.name =3D "mips-board", + .qdev.size =3D sizeof(MipsBoardState), + .init =3D mips_board_device_init, + .qdev.props =3D (Property[]) { + DEFINE_PROP_STRING("romfile", MipsBoardState, romfile), + DEFINE_PROP_HEX32("romsize", MipsBoardState, romsize, 0x40000), + DEFINE_PROP_UINT32("ramsize", MipsBoardState, ramsize, 64), + DEFINE_PROP_END_OF_LIST(), + }, +}; + +static void mips_register_devices(void) +{ + sysbus_register_withprop(&board_device_info); +} + +device_init(mips_register_devices) diff --git a/hw/qdev.c b/hw/qdev.c index e99c73f..f907385 100644 --- a/hw/qdev.c +++ b/hw/qdev.c @@ -455,6 +455,12 @@ static BusState *qbus_find_recursive(BusState *bus, = const char *name, BusState *child, *ret; int match =3D 1; =20 + if (!bus) { + if (!main_system_bus) { + main_system_bus =3D qbus_create(&system_bus_info, NULL, "mai= n-system-bus"); + } + return main_system_bus; + } if (name && (strcmp(bus->name, name) !=3D 0)) { match =3D 0; } --=20 1.7.1.GIT