qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH v3 11/20] nubus-device: add romfile property for loading decl


From: Philippe Mathieu-Daudé
Subject: Re: [PATCH v3 11/20] nubus-device: add romfile property for loading declaration ROMs
Date: Thu, 16 Sep 2021 13:05:41 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0

On 9/16/21 12:05 PM, Mark Cave-Ayland wrote:
> The declaration ROM is located at the top-most address of the standard slot
> space.
> 
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> ---
>  hw/nubus/nubus-device.c  | 43 +++++++++++++++++++++++++++++++++++++++-
>  include/hw/nubus/nubus.h |  6 ++++++
>  2 files changed, 48 insertions(+), 1 deletion(-)

> @@ -38,10 +43,46 @@ static void nubus_device_realize(DeviceState *dev, Error 
> **errp)
>      memory_region_add_subregion(&nubus->slot_io, slot_offset,
>                                  &nd->slot_mem);
>      g_free(name);
> +
> +    /* Declaration ROM */
> +    if (nd->romfile != NULL) {
> +        path = qemu_find_file(QEMU_FILE_TYPE_BIOS, nd->romfile);
> +        if (path == NULL) {
> +            path = g_strdup(nd->romfile);
> +        }
> +
> +        size = get_image_size(path);
> +        if (size < 0) {
> +            error_setg(errp, "failed to find romfile \"%s\"", nd->romfile);
> +            g_free(path);
> +            return;
> +        } else if (size == 0) {
> +            error_setg(errp, "romfile \"%s\" is empty", nd->romfile);
> +            g_free(path);
> +            return;
> +        } else if (size > NUBUS_DECL_ROM_MAX_SIZE) {
> +            error_setg(errp, "romfile \"%s\" too large (maximum size 128K)",
> +                       nd->romfile);
> +            g_free(path);
> +            return;
> +        }
> +
> +        name = g_strdup_printf("nubus-slot-%x-declaration-rom", nd->slot);
> +        memory_region_init_rom(&nd->decl_rom, OBJECT(dev), name, size,
> +                               &error_fatal);
> +        ret = load_image_mr(path, &nd->decl_rom);

load_image_mr() already calls get_image_size(), rom_add_file() and
qemu_find_file(). *But* it doesn't takes and Error handle, and report
error using fprintf()... So unfortunately rom_add*() functions are
kinda outdated and you are doing the right thing to propagate detailled
errors. Therefore:

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

> +        g_free(path);
> +        if (ret < 0) {
> +            warn_report("nubus-device: could not load prom '%s'", 
> nd->romfile);
> +        }
> +        memory_region_add_subregion(&nd->slot_mem, NUBUS_SLOT_SIZE - size,
> +                                    &nd->decl_rom);
> +    }
>  }



reply via email to

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