[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v4 11/20] nubus-device: add romfile property for loading decl
From: |
Laurent Vivier |
Subject: |
Re: [PATCH v4 11/20] nubus-device: add romfile property for loading declaration ROMs |
Date: |
Mon, 20 Sep 2021 23:47:01 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 |
Le 17/09/2021 à 09:50, Mark Cave-Ayland a écrit :
> 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 | 44 +++++++++++++++++++++++++++++++++++++++-
> include/hw/nubus/nubus.h | 6 ++++++
> 2 files changed, 49 insertions(+), 1 deletion(-)
>
> diff --git a/hw/nubus/nubus-device.c b/hw/nubus/nubus-device.c
> index 9c1992ceb0..3da0db4d54 100644
> --- a/hw/nubus/nubus-device.c
> +++ b/hw/nubus/nubus-device.c
> @@ -9,16 +9,21 @@
> */
>
> #include "qemu/osdep.h"
> +#include "qemu/datadir.h"
> +#include "hw/loader.h"
> #include "hw/nubus/nubus.h"
> #include "qapi/error.h"
> +#include "qemu/error-report.h"
>
>
> static void nubus_device_realize(DeviceState *dev, Error **errp)
> {
> NubusBus *nubus = NUBUS_BUS(qdev_get_parent_bus(dev));
> NubusDevice *nd = NUBUS_DEVICE(dev);
> - char *name;
> + char *name, *path;
> hwaddr slot_offset;
> + int64_t size;
> + int ret;
>
> /* Super */
> slot_offset = (nd->slot - 6) * NUBUS_SUPER_SLOT_SIZE;
> @@ -38,10 +43,47 @@ 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_abort);
> + ret = load_image_mr(path, &nd->decl_rom);
> + g_free(path);
> + if (ret < 0) {
> + error_setg(errp, "could not load romfile \"%s\"", nd->romfile);
> + return;
> + }
> + memory_region_add_subregion(&nd->slot_mem, NUBUS_SLOT_SIZE - size,
> + &nd->decl_rom);
> + }
> }
>
> static Property nubus_device_properties[] = {
> DEFINE_PROP_INT32("slot", NubusDevice, slot, -1),
> + DEFINE_PROP_STRING("romfile", NubusDevice, romfile),
> DEFINE_PROP_END_OF_LIST()
> };
>
> diff --git a/include/hw/nubus/nubus.h b/include/hw/nubus/nubus.h
> index 87a97516c7..0c9f50c32e 100644
> --- a/include/hw/nubus/nubus.h
> +++ b/include/hw/nubus/nubus.h
> @@ -12,6 +12,7 @@
> #include "hw/qdev-properties.h"
> #include "exec/address-spaces.h"
> #include "qom/object.h"
> +#include "qemu/units.h"
>
> #define NUBUS_SUPER_SLOT_SIZE 0x10000000U
> #define NUBUS_SUPER_SLOT_NB 0x9
> @@ -39,12 +40,17 @@ struct NubusBus {
> uint32_t slot_available_mask;
> };
>
> +#define NUBUS_DECL_ROM_MAX_SIZE (128 * KiB)
> +
> struct NubusDevice {
> DeviceState qdev;
>
> int32_t slot;
> MemoryRegion super_slot_mem;
> MemoryRegion slot_mem;
> +
> + char *romfile;
> + MemoryRegion decl_rom;
> };
>
> #endif
>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
- Re: [PATCH v4 03/20] nubus-device: add device slot parameter, (continued)
- [PATCH v4 04/20] nubus: use bitmap to manage available slots, Mark Cave-Ayland, 2021/09/17
- [PATCH v4 05/20] nubus: move slot bitmap checks from NubusDevice realize() to BusClass check_address(), Mark Cave-Ayland, 2021/09/17
- [PATCH v4 06/20] nubus: implement BusClass get_dev_path(), Mark Cave-Ayland, 2021/09/17
- [PATCH v4 11/20] nubus-device: add romfile property for loading declaration ROMs, Mark Cave-Ayland, 2021/09/17
- Re: [PATCH v4 11/20] nubus-device: add romfile property for loading declaration ROMs,
Laurent Vivier <=
- [PATCH v4 08/20] nubus: generate bus error when attempting to access empty slots, Mark Cave-Ayland, 2021/09/17
- [PATCH v4 10/20] nubus-device: remove nubus_register_rom() and nubus_register_format_block(), Mark Cave-Ayland, 2021/09/17
- [PATCH v4 07/20] nubus: add trace-events for empty slot accesses, Mark Cave-Ayland, 2021/09/17
- [PATCH v4 09/20] macfb: don't register declaration ROM, Mark Cave-Ayland, 2021/09/17