qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] Re: [PATCH 2/2][RFC] Load an OpenBios ELF image instead of


From: Aurelien Jarno
Subject: [Qemu-devel] Re: [PATCH 2/2][RFC] Load an OpenBios ELF image instead of OpenHackware binary object if found
Date: Fri, 19 Dec 2008 09:45:18 +0100
User-agent: Mozilla-Thunderbird 2.0.0.17 (X11/20081018)

Laurent Vivier a écrit :
> This patch try to load an OpenBIOS ELF image instead of
> OpenHackware binary. Default behavior is used if the OpenBIOS (openbios-ppc32)
> file is not found

Actually, I wonder if it won't be simpler to just remove OpenHackware
and always use the OpenBIOS image.

> Signed-off-by: Laurent Vivier <address@hidden>
> Signed-off-by: Blue Swirl <address@hidden>
> ---
>  hw/ppc_mac.h      |    2 ++
>  hw/ppc_oldworld.c |   32 ++++++++++++++++++++++----------
>  2 files changed, 24 insertions(+), 10 deletions(-)
> 
> diff --git a/hw/ppc_mac.h b/hw/ppc_mac.h
> index 3a26cde..c833d17 100644
> --- a/hw/ppc_mac.h
> +++ b/hw/ppc_mac.h
> @@ -31,6 +31,8 @@
>  #define BIOS_FILENAME "ppc_rom.bin"
>  #define VGABIOS_FILENAME "video.x"
>  #define NVRAM_SIZE        0x2000
> +#define PROM_FILENAME    "openbios-ppc32"
> +#define PROM_ADDR         0xfff00000
>  
>  #define KERNEL_LOAD_ADDR 0x01000000
>  #define INITRD_LOAD_ADDR 0x01800000
> diff --git a/hw/ppc_oldworld.c b/hw/ppc_oldworld.c
> index 696add2..73cf4ab 100644
> --- a/hw/ppc_oldworld.c
> +++ b/hw/ppc_oldworld.c
> @@ -164,19 +164,31 @@ static void ppc_heathrow_init (ram_addr_t ram_size, int 
> vga_ram_size,
>      /* allocate and load BIOS */
>      bios_offset = qemu_ram_alloc(BIOS_SIZE);
>      if (bios_name == NULL)
> -        bios_name = BIOS_FILENAME;
> +        bios_name = PROM_FILENAME;
>      snprintf(buf, sizeof(buf), "%s/%s", bios_dir, bios_name);
> -    bios_size = load_image(buf, phys_ram_base + bios_offset);
> +    cpu_register_physical_memory(PROM_ADDR, BIOS_SIZE, bios_offset | 
> IO_MEM_ROM);
> +    /* First try OpenBIOS (ELF) */
> +    bios_size = load_elf(buf, 0, NULL, NULL, NULL);
>      if (bios_size < 0 || bios_size > BIOS_SIZE) {
> -        cpu_abort(env, "qemu: could not load PowerPC bios '%s'\n", buf);
> -        exit(1);
> -    }
> -    if (bios_size > 0x00080000) {
> -        /* As the NVRAM is located at 0xFFF04000, we cannot use 1 MB BIOSes 
> */
> -        cpu_abort(env, "G3BW Mac hardware can not handle 1 MB BIOS\n");
> +
> +        /* OpenHackWare */
> +
> +        bios_name = BIOS_FILENAME;
> +        snprintf(buf, sizeof(buf), "%s/%s", bios_dir, bios_name);
> +        bios_size =  get_image_size(buf);
> +        bios_size = load_image_targphys(buf, (uint32_t)(-bios_size), 
> bios_size);
> +        if (bios_size < 0 || bios_size > BIOS_SIZE) {
> +            cpu_abort(env, "qemu: could not load PowerPC bios '%s'\n", buf);
> +            exit(1);
> +        }
> +        bios_size = (bios_size + 0xfff) & ~0xffff;
> +        if (bios_size > 0x00080000) {
> +          /* As the NVRAM is located at 0xFFF04000,
> +           * we cannot use 1 MB BIOSes
> +           */
> +            cpu_abort(env, "G3BW Mac hardware can not handle 1 MB BIOS\n");
> +        }
>      }
> -    cpu_register_physical_memory((uint32_t)(-bios_size),
> -                                 bios_size, bios_offset | IO_MEM_ROM);
>  
>      /* allocate and load VGA BIOS */
>      vga_bios_offset = qemu_ram_alloc(VGA_BIOS_SIZE);


-- 
  .''`.  Aurelien Jarno             | GPG: 1024D/F1BCDB73
 : :' :  Debian developer           | Electrical Engineer
 `. `'   address@hidden         | address@hidden
   `-    people.debian.org/~aurel32 | www.aurel32.net




reply via email to

[Prev in Thread] Current Thread [Next in Thread]