Patchwork [RFC,v2,3/5] replace rom_add_file* with image_file_reset

login
register
mail settings
Submitter Olivia Yin
Date Oct. 29, 2012, 5:21 a.m.
Message ID <1351488096-22765-4-git-send-email-hong-hua.yin@freescale.com>
Download mbox | patch
Permalink /patch/194824/
State New
Headers show

Comments

Olivia Yin - Oct. 29, 2012, 5:21 a.m.
Signed-off-by: Olivia Yin <hong-hua.yin@freescale.com>
---
 hw/cirrus_vga.c |    6 +++++-
 hw/pc.c         |    6 +++++-
 hw/pc_sysfw.c   |   14 +++++++-------
 hw/pci.c        |   10 ++++++++--
 hw/sga.c        |    6 +++++-
 hw/vga-isa.c    |    6 +++++-
 6 files changed, 35 insertions(+), 13 deletions(-)
Alexander Graf - Oct. 29, 2012, 8:48 a.m.
On 29.10.2012, at 06:21, Olivia Yin wrote:

> Signed-off-by: Olivia Yin <hong-hua.yin@freescale.com>
> ---
> hw/cirrus_vga.c |    6 +++++-
> hw/pc.c         |    6 +++++-
> hw/pc_sysfw.c   |   14 +++++++-------
> hw/pci.c        |   10 ++++++++--
> hw/sga.c        |    6 +++++-
> hw/vga-isa.c    |    6 +++++-
> 6 files changed, 35 insertions(+), 13 deletions(-)
> 
> diff --git a/hw/cirrus_vga.c b/hw/cirrus_vga.c
> index e4af2e9..8b2c974 100644
> --- a/hw/cirrus_vga.c
> +++ b/hw/cirrus_vga.c
> @@ -2906,7 +2906,11 @@ static int vga_initfn(ISADevice *dev)
>     s->ds = graphic_console_init(s->update, s->invalidate,
>                                  s->screen_dump, s->text_update,
>                                  s);
> -    rom_add_vga(VGABIOS_CIRRUS_FILENAME);
> +    ImageFile *image;
> +    image = g_malloc(sizeof(*image));
> +    image->name = g_strdup(VGABIOS_CIRRUS_FILENAME);
> +    image->addr = 0;
> +    qemu_register_reset(image_file_reset, image);

This looks like a perfect candidate for a helper function, no? ;)

In fact, maybe you should just leave the old rom_ function names and simply replace them by the snippet above.


Alex

>     /* XXX ISA-LFB support */
>     /* FIXME not qdev yet */
>     return 0;
> diff --git a/hw/pc.c b/hw/pc.c
> index 16de04c..aa4ccba 100644
> --- a/hw/pc.c
> +++ b/hw/pc.c
> @@ -977,7 +977,11 @@ void *pc_memory_init(MemoryRegion *system_memory,
>     }
> 
>     for (i = 0; i < nb_option_roms; i++) {
> -        rom_add_option(option_rom[i].name, option_rom[i].bootindex);
> +        ImageFile *image;
> +        image = g_malloc(sizeof(*image));
> +        image->name = g_strdup(option_rom[i].name);
> +        image->addr = 0;
> +        qemu_register_reset(image_file_reset, image);
>     }
>     return fw_cfg;
> }
> diff --git a/hw/pc_sysfw.c b/hw/pc_sysfw.c
> index 9d7c5f4..06e606b 100644
> --- a/hw/pc_sysfw.c
> +++ b/hw/pc_sysfw.c
> @@ -151,18 +151,18 @@ static void old_pc_system_rom_init(MemoryRegion *rom_memory)
>     }
>     if (bios_size <= 0 ||
>         (bios_size % 65536) != 0) {
> -        goto bios_error;
> +        fprintf(stderr, "qemu: could not load PC BIOS '%s'\n", bios_name);
> +        exit(1);
>     }
>     bios = g_malloc(sizeof(*bios));
>     memory_region_init_ram(bios, "pc.bios", bios_size);
>     vmstate_register_ram_global(bios);
>     memory_region_set_readonly(bios, true);
> -    ret = rom_add_file_fixed(bios_name, (uint32_t)(-bios_size), -1);
> -    if (ret != 0) {
> -    bios_error:
> -        fprintf(stderr, "qemu: could not load PC BIOS '%s'\n", bios_name);
> -        exit(1);
> -    }
> +    ImageFile *image;
> +    image = g_malloc(sizeof(*image));
> +    image->name = g_strdup(filename);
> +    image->addr = (uint32_t)(-bios_size);
> +    qemu_register_reset(image_file_reset, image);
>     if (filename) {
>         g_free(filename);
>     }
> diff --git a/hw/pci.c b/hw/pci.c
> index d44fd0e..7efc41a 100644
> --- a/hw/pci.c
> +++ b/hw/pci.c
> @@ -34,6 +34,7 @@
> #include "msi.h"
> #include "msix.h"
> #include "exec-memory.h"
> +#include "loader.h"
> 
> //#define DEBUG_PCI
> #ifdef DEBUG_PCI
> @@ -1792,12 +1793,17 @@ static int pci_add_option_rom(PCIDevice *pdev, bool is_default_rom)
>          * Load rom via fw_cfg instead of creating a rom bar,
>          * for 0.11 compatibility.
>          */
> +        ImageFile *image;
> +        image = g_malloc(sizeof(*image));
> +        image->name = g_strdup(pdev->romfile);
> +        image->addr = 0;
>         int class = pci_get_word(pdev->config + PCI_CLASS_DEVICE);
>         if (class == 0x0300) {
> -            rom_add_vga(pdev->romfile);
> +            image->dir = g_strdup("vgaroms");
>         } else {
> -            rom_add_option(pdev->romfile, -1);
> +            image->dir = g_strdup("genroms");
>         }
> +        qemu_register_reset(image_file_reset, image);
>         return 0;
>     }
> 
> diff --git a/hw/sga.c b/hw/sga.c
> index a666349..25c002a 100644
> --- a/hw/sga.c
> +++ b/hw/sga.c
> @@ -37,7 +37,11 @@ typedef struct ISAGAState {
> 
> static int sga_initfn(ISADevice *dev)
> {
> -    rom_add_vga(SGABIOS_FILENAME);
> +    ImageFile *image;
> +    image = g_malloc(sizeof(*image));
> +    image->name = g_strdup(SGABIOS_FILENAME);
> +    image->addr = 0;
> +    qemu_register_reset(image_file_reset, image);
>     return 0;
> }
> static void sga_class_initfn(ObjectClass *klass, void *data)
> diff --git a/hw/vga-isa.c b/hw/vga-isa.c
> index 046602b..e9c90e8 100644
> --- a/hw/vga-isa.c
> +++ b/hw/vga-isa.c
> @@ -67,7 +67,11 @@ static int vga_initfn(ISADevice *dev)
> 
>     vga_init_vbe(s, isa_address_space(dev));
>     /* ROM BIOS */
> -    rom_add_vga(VGABIOS_FILENAME);
> +    ImageFile *image;
> +    image = g_malloc(sizeof(*image));
> +    image->name = g_strdup(VGABIOS_FILENAME);
> +    image->addr = 0;
> +    qemu_register_reset(image_file_reset, image);
>     return 0;
> }
> 
> -- 
> 1.7.1
> 
> 
>
Alexander Graf - Oct. 29, 2012, 9:27 a.m.
On 29.10.2012, at 09:48, Alexander Graf wrote:

> 
> On 29.10.2012, at 06:21, Olivia Yin wrote:
> 
>> Signed-off-by: Olivia Yin <hong-hua.yin@freescale.com>
>> ---
>> hw/cirrus_vga.c |    6 +++++-
>> hw/pc.c         |    6 +++++-
>> hw/pc_sysfw.c   |   14 +++++++-------
>> hw/pci.c        |   10 ++++++++--
>> hw/sga.c        |    6 +++++-
>> hw/vga-isa.c    |    6 +++++-
>> 6 files changed, 35 insertions(+), 13 deletions(-)
>> 
>> diff --git a/hw/cirrus_vga.c b/hw/cirrus_vga.c
>> index e4af2e9..8b2c974 100644
>> --- a/hw/cirrus_vga.c
>> +++ b/hw/cirrus_vga.c
>> @@ -2906,7 +2906,11 @@ static int vga_initfn(ISADevice *dev)
>>    s->ds = graphic_console_init(s->update, s->invalidate,
>>                                 s->screen_dump, s->text_update,
>>                                 s);
>> -    rom_add_vga(VGABIOS_CIRRUS_FILENAME);
>> +    ImageFile *image;
>> +    image = g_malloc(sizeof(*image));
>> +    image->name = g_strdup(VGABIOS_CIRRUS_FILENAME);
>> +    image->addr = 0;
>> +    qemu_register_reset(image_file_reset, image);
> 
> This looks like a perfect candidate for a helper function, no? ;)
> 
> In fact, maybe you should just leave the old rom_ function names and simply replace them by the snippet above.

And make sure to reuse the rom structs too, so things like rom_copy() remain functional. Of course you'll have to add a check for the new rom type so that you don't access the "data" field in there. But if you reuse that infrastructure, everything will just happily plug in.


Alex

Patch

diff --git a/hw/cirrus_vga.c b/hw/cirrus_vga.c
index e4af2e9..8b2c974 100644
--- a/hw/cirrus_vga.c
+++ b/hw/cirrus_vga.c
@@ -2906,7 +2906,11 @@  static int vga_initfn(ISADevice *dev)
     s->ds = graphic_console_init(s->update, s->invalidate,
                                  s->screen_dump, s->text_update,
                                  s);
-    rom_add_vga(VGABIOS_CIRRUS_FILENAME);
+    ImageFile *image;
+    image = g_malloc(sizeof(*image));
+    image->name = g_strdup(VGABIOS_CIRRUS_FILENAME);
+    image->addr = 0;
+    qemu_register_reset(image_file_reset, image);
     /* XXX ISA-LFB support */
     /* FIXME not qdev yet */
     return 0;
diff --git a/hw/pc.c b/hw/pc.c
index 16de04c..aa4ccba 100644
--- a/hw/pc.c
+++ b/hw/pc.c
@@ -977,7 +977,11 @@  void *pc_memory_init(MemoryRegion *system_memory,
     }
 
     for (i = 0; i < nb_option_roms; i++) {
-        rom_add_option(option_rom[i].name, option_rom[i].bootindex);
+        ImageFile *image;
+        image = g_malloc(sizeof(*image));
+        image->name = g_strdup(option_rom[i].name);
+        image->addr = 0;
+        qemu_register_reset(image_file_reset, image);
     }
     return fw_cfg;
 }
diff --git a/hw/pc_sysfw.c b/hw/pc_sysfw.c
index 9d7c5f4..06e606b 100644
--- a/hw/pc_sysfw.c
+++ b/hw/pc_sysfw.c
@@ -151,18 +151,18 @@  static void old_pc_system_rom_init(MemoryRegion *rom_memory)
     }
     if (bios_size <= 0 ||
         (bios_size % 65536) != 0) {
-        goto bios_error;
+        fprintf(stderr, "qemu: could not load PC BIOS '%s'\n", bios_name);
+        exit(1);
     }
     bios = g_malloc(sizeof(*bios));
     memory_region_init_ram(bios, "pc.bios", bios_size);
     vmstate_register_ram_global(bios);
     memory_region_set_readonly(bios, true);
-    ret = rom_add_file_fixed(bios_name, (uint32_t)(-bios_size), -1);
-    if (ret != 0) {
-    bios_error:
-        fprintf(stderr, "qemu: could not load PC BIOS '%s'\n", bios_name);
-        exit(1);
-    }
+    ImageFile *image;
+    image = g_malloc(sizeof(*image));
+    image->name = g_strdup(filename);
+    image->addr = (uint32_t)(-bios_size);
+    qemu_register_reset(image_file_reset, image);
     if (filename) {
         g_free(filename);
     }
diff --git a/hw/pci.c b/hw/pci.c
index d44fd0e..7efc41a 100644
--- a/hw/pci.c
+++ b/hw/pci.c
@@ -34,6 +34,7 @@ 
 #include "msi.h"
 #include "msix.h"
 #include "exec-memory.h"
+#include "loader.h"
 
 //#define DEBUG_PCI
 #ifdef DEBUG_PCI
@@ -1792,12 +1793,17 @@  static int pci_add_option_rom(PCIDevice *pdev, bool is_default_rom)
          * Load rom via fw_cfg instead of creating a rom bar,
          * for 0.11 compatibility.
          */
+        ImageFile *image;
+        image = g_malloc(sizeof(*image));
+        image->name = g_strdup(pdev->romfile);
+        image->addr = 0;
         int class = pci_get_word(pdev->config + PCI_CLASS_DEVICE);
         if (class == 0x0300) {
-            rom_add_vga(pdev->romfile);
+            image->dir = g_strdup("vgaroms");
         } else {
-            rom_add_option(pdev->romfile, -1);
+            image->dir = g_strdup("genroms");
         }
+        qemu_register_reset(image_file_reset, image);
         return 0;
     }
 
diff --git a/hw/sga.c b/hw/sga.c
index a666349..25c002a 100644
--- a/hw/sga.c
+++ b/hw/sga.c
@@ -37,7 +37,11 @@  typedef struct ISAGAState {
 
 static int sga_initfn(ISADevice *dev)
 {
-    rom_add_vga(SGABIOS_FILENAME);
+    ImageFile *image;
+    image = g_malloc(sizeof(*image));
+    image->name = g_strdup(SGABIOS_FILENAME);
+    image->addr = 0;
+    qemu_register_reset(image_file_reset, image);
     return 0;
 }
 static void sga_class_initfn(ObjectClass *klass, void *data)
diff --git a/hw/vga-isa.c b/hw/vga-isa.c
index 046602b..e9c90e8 100644
--- a/hw/vga-isa.c
+++ b/hw/vga-isa.c
@@ -67,7 +67,11 @@  static int vga_initfn(ISADevice *dev)
 
     vga_init_vbe(s, isa_address_space(dev));
     /* ROM BIOS */
-    rom_add_vga(VGABIOS_FILENAME);
+    ImageFile *image;
+    image = g_malloc(sizeof(*image));
+    image->name = g_strdup(VGABIOS_FILENAME);
+    image->addr = 0;
+    qemu_register_reset(image_file_reset, image);
     return 0;
 }