From: Olivia Yin <hong-hua.yin@freescale.com>
To: qemu-ppc@nongnu.org, qemu-devel@nongnu.org
Cc: Olivia Yin <hong-hua.yin@freescale.com>
Subject: [Qemu-devel] [PATCH 4/5] replaece rom_add_blob* with image_blob_reset
Date: Fri, 26 Oct 2012 16:02:05 +0800 [thread overview]
Message-ID: <1351238526-2551-5-git-send-email-hong-hua.yin@freescale.com> (raw)
In-Reply-To: <1351238526-2551-4-git-send-email-hong-hua.yin@freescale.com>
Signed-off-by: Olivia Yin <hong-hua.yin@freescale.com>
---
hw/arm_boot.c | 20 ++++++++++++++++----
hw/elf_ops.h | 9 ++++++++-
hw/exynos4210.c | 10 ++++++++--
hw/highbank.c | 9 ++++++++-
hw/lm32_hwsetup.h | 9 ++++++++-
hw/loader.c | 23 +++++++++++++++++++----
hw/mips_fulong2e.c | 10 ++++++++--
hw/mips_malta.c | 10 ++++++++--
hw/mips_r4k.c | 10 ++++++++--
hw/ppc/e500.c | 21 +++++++++++----------
hw/ppc440_bamboo.c | 9 ++++++++-
hw/r2d.c | 10 ++++++++--
12 files changed, 118 insertions(+), 32 deletions(-)
diff --git a/hw/arm_boot.c b/hw/arm_boot.c
index a6e9143..53c8861 100644
--- a/hw/arm_boot.c
+++ b/hw/arm_boot.c
@@ -68,8 +68,14 @@ static void default_write_secondary(ARMCPU *cpu,
for (n = 0; n < ARRAY_SIZE(smpboot); n++) {
smpboot[n] = tswap32(smpboot[n]);
}
- rom_add_blob_fixed("smpboot", smpboot, sizeof(smpboot),
- info->smp_loader_start);
+ ImageBlob *blob;
+ blob = g_malloc0(sizeof(*blob));
+ blob->name = g_strdup("smpboot");
+ blob->addr = info->smp_loader_start;
+ blob->size = sizeof(smpboot);
+ blob->data = g_malloc0(blob->size);
+ memcpy(blob->data, smpboot, blob->size);
+ qemu_register_reset(image_blob_reset, blob);
}
static void default_reset_secondary(ARMCPU *cpu,
@@ -439,8 +445,14 @@ void arm_load_kernel(ARMCPU *cpu, struct arm_boot_info *info)
for (n = 0; n < sizeof(bootloader) / 4; n++) {
bootloader[n] = tswap32(bootloader[n]);
}
- rom_add_blob_fixed("bootloader", bootloader, sizeof(bootloader),
- info->loader_start);
+ ImageBlob *blob;
+ blob = g_malloc0(sizeof(*blob));
+ blob->name = g_strdup("bootloader");
+ blob->addr = dst_addr;
+ blob->size = sizeof(bootloader);
+ blob->data = g_malloc0(blob->size);
+ memcpy(blob->data, bootloader, blob->size);
+ qemu_register_reset(image_blob_reset, blob);
if (info->nb_cpus > 1) {
info->write_secondary_boot(cpu, info);
}
diff --git a/hw/elf_ops.h b/hw/elf_ops.h
index 731a983..cf219c7 100644
--- a/hw/elf_ops.h
+++ b/hw/elf_ops.h
@@ -281,7 +281,14 @@ static int glue(load_elf, SZ)(const char *name, int fd,
}
snprintf(label, sizeof(label), "phdr #%d: %s", i, name);
- rom_add_blob_fixed(label, data, mem_size, addr);
+ ImageBlob *blob;
+ blob = g_malloc0(sizeof(*blob));
+ blob->name = g_strdup(label);
+ blob->addr = addr;
+ blob->size = mem_size;
+ blob->data = g_malloc0(blob->size);
+ memcpy(blob->data, data, blob->size);
+ qemu_register_reset(image_blob_reset, blob);
total_size += mem_size;
if (addr < low)
diff --git a/hw/exynos4210.c b/hw/exynos4210.c
index 00d4db8..9191fdb 100644
--- a/hw/exynos4210.c
+++ b/hw/exynos4210.c
@@ -100,8 +100,14 @@ void exynos4210_write_secondary(ARMCPU *cpu,
for (n = 0; n < ARRAY_SIZE(smpboot); n++) {
smpboot[n] = tswap32(smpboot[n]);
}
- rom_add_blob_fixed("smpboot", smpboot, sizeof(smpboot),
- info->smp_loader_start);
+ ImageBlob *blob;
+ blob = g_malloc0(sizeof(*blob));
+ blob->name = g_strdup("smpboot");
+ blob->addr = info->smp_loader_start;
+ blob->size = sizeof(smpboot);
+ blob->data = g_malloc0(blob->size);
+ memcpy(blob->data, smpboot, blob->size);
+ qemu_register_reset(image_blob_reset, blob);
}
Exynos4210State *exynos4210_init(MemoryRegion *system_mem,
diff --git a/hw/highbank.c b/hw/highbank.c
index 11aa131..ff29221 100644
--- a/hw/highbank.c
+++ b/hw/highbank.c
@@ -57,7 +57,14 @@ static void hb_write_secondary(ARMCPU *cpu, const struct arm_boot_info *info)
for (n = 0; n < ARRAY_SIZE(smpboot); n++) {
smpboot[n] = tswap32(smpboot[n]);
}
- rom_add_blob_fixed("smpboot", smpboot, sizeof(smpboot), SMP_BOOT_ADDR);
+ ImageBlob *blob;
+ blob = g_malloc0(sizeof(*blob));
+ blob->name = g_strdup("smpboot");
+ blob->addr = SMP_BOOT_ADDR;
+ blob->size = sizeof(smpboot);
+ blob->data = g_malloc0(blob->size);
+ memcpy(blob->data, smpboot, blob->size);
+ qemu_register_reset(image_blob_reset, blob);
}
static void hb_reset_secondary(ARMCPU *cpu, const struct arm_boot_info *info)
diff --git a/hw/lm32_hwsetup.h b/hw/lm32_hwsetup.h
index 70dc61f..8db1a36 100644
--- a/hw/lm32_hwsetup.h
+++ b/hw/lm32_hwsetup.h
@@ -73,7 +73,14 @@ static inline void hwsetup_free(HWSetup *hw)
static inline void hwsetup_create_rom(HWSetup *hw,
target_phys_addr_t base)
{
- rom_add_blob("hwsetup", hw->data, TARGET_PAGE_SIZE, base);
+ ImageBlob *blob;
+ blob = g_malloc0(sizeof(*blob));
+ blob->name = g_strdup("hwsetup");
+ blob->addr = base;
+ blob->size = TARGET_PAGE_SIZE;
+ blob->data = g_malloc0(blob->size);
+ memcpy(blob->data, hw->data, blob->size);
+ qemu_register_reset(image_blob_reset, blob);
}
static inline void hwsetup_add_u8(HWSetup *hw, uint8_t u)
diff --git a/hw/loader.c b/hw/loader.c
index 4a20ed2..5cf776a 100644
--- a/hw/loader.c
+++ b/hw/loader.c
@@ -134,8 +134,16 @@ ssize_t read_targphys(const char *name,
buf = g_malloc(nbytes);
did = read(fd, buf, nbytes);
- if (did > 0)
- rom_add_blob_fixed("read", buf, did, dst_addr);
+ if (did > 0) {
+ ImageBlob *blob;
+ blob = g_malloc0(sizeof(*blob));
+ blob->name = g_strdup("read");
+ blob->addr = dst_addr;
+ blob->size = nbytes;
+ blob->data = g_malloc0(blob->size);
+ memcpy(blob->data, buf, blob->size);
+ qemu_register_reset(image_blob_reset, blob);
+ }
g_free(buf);
return did;
}
@@ -169,13 +177,20 @@ void pstrcpy_targphys(const char *name, target_phys_addr_t dest, int buf_size,
if (buf_size <= 0) return;
nulp = memchr(source, 0, buf_size);
+ ImageBlob *blob;
+ blob = g_malloc0(sizeof(*blob));
+ blob->name = g_strdup(name);
+ blob->addr = dest;
if (nulp) {
- rom_add_blob_fixed(name, source, (nulp - source) + 1, dest);
+ blob->size = (nulp - source) + 1;
} else {
- rom_add_blob_fixed(name, source, buf_size, dest);
+ blob->size = buf_size;
ptr = rom_ptr(dest + buf_size - 1);
*ptr = 0;
}
+ blob->data = g_malloc0(blob->size);
+ memcpy(blob->data, source, blob->size);
+ qemu_register_reset(image_blob_reset, blob);
}
/* A.OUT loader */
diff --git a/hw/mips_fulong2e.c b/hw/mips_fulong2e.c
index d4a8672..87f560e 100644
--- a/hw/mips_fulong2e.c
+++ b/hw/mips_fulong2e.c
@@ -162,8 +162,14 @@ static int64_t load_kernel (CPUMIPSState *env)
prom_set(prom_buf, index++, "modetty0=38400n8r");
prom_set(prom_buf, index++, NULL);
- rom_add_blob_fixed("prom", prom_buf, prom_size,
- cpu_mips_kseg0_to_phys(NULL, ENVP_ADDR));
+ ImageBlob *blob;
+ blob = g_malloc0(sizeof(*blob));
+ blob->name = g_strdup("prom");
+ blob->addr = cpu_mips_kseg0_to_phys(NULL, ENVP_ADDR);
+ blob->size = prom_size;
+ blob->data = g_malloc0(blob->size);
+ memcpy(blob->data, prom_buf, blob->size);
+ qemu_register_reset(image_blob_reset, blob);
return kernel_entry;
}
diff --git a/hw/mips_malta.c b/hw/mips_malta.c
index 632b466..6f0fb13 100644
--- a/hw/mips_malta.c
+++ b/hw/mips_malta.c
@@ -736,8 +736,14 @@ static int64_t load_kernel (void)
prom_set(prom_buf, prom_index++, "38400n8r");
prom_set(prom_buf, prom_index++, NULL);
- rom_add_blob_fixed("prom", prom_buf, prom_size,
- cpu_mips_kseg0_to_phys(NULL, ENVP_ADDR));
+ ImageBlob *blob;
+ blob = g_malloc0(sizeof(*blob));
+ blob->name = g_strdup("prom");
+ blob->addr = cpu_mips_kseg0_to_phys(NULL, ENVP_ADDR);
+ blob->size = prom_size;
+ blob->data = g_malloc0(blob->size);
+ memcpy(blob->data, prom_buf, blob->size);
+ qemu_register_reset(image_blob_reset, blob);
return kernel_entry;
}
diff --git a/hw/mips_r4k.c b/hw/mips_r4k.c
index 967a76e..401917b 100644
--- a/hw/mips_r4k.c
+++ b/hw/mips_r4k.c
@@ -134,8 +134,14 @@ static int64_t load_kernel(void)
snprintf((char *)params_buf + 8, 256, "%s", loaderparams.kernel_cmdline);
}
- rom_add_blob_fixed("params", params_buf, params_size,
- (16 << 20) - 264);
+ ImageBlob *blob;
+ blob = g_malloc0(sizeof(*blob));
+ blob->name = g_strdup("params");
+ blob->addr = (16 << 20) - 264;
+ blob->size = params_size;
+ blob->data = g_malloc0(blob->size);
+ memcpy(blob->data, params_buf, blob->size);
+ qemu_register_reset(image_blob_reset, blob);
return entry;
}
diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c
index c3fb618..c4cc6cc 100644
--- a/hw/ppc/e500.c
+++ b/hw/ppc/e500.c
@@ -150,19 +150,19 @@ static int ppce500_load_device_tree(CPUPPCState *env,
char *filename;
filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, dtb_file);
if (!filename) {
- goto out;
+ return ret;
}
fdt = load_device_tree(filename, &fdt_size);
if (!fdt) {
- goto out;
+ return ret;
}
goto done;
}
fdt = create_device_tree(&fdt_size);
if (fdt == NULL) {
- goto out;
+ return ret;
}
/* Manipulate device tree in memory. */
@@ -332,15 +332,16 @@ static int ppce500_load_device_tree(CPUPPCState *env,
done:
qemu_devtree_dumpdtb(fdt, fdt_size);
- ret = rom_add_blob_fixed(BINARY_DEVICE_TREE_FILE, fdt, fdt_size, addr);
- if (ret < 0) {
- goto out;
- }
+ ImageBlob *blob;
+ blob = g_malloc0(sizeof(*blob));
+ blob->name = g_strdup(BINARY_DEVICE_TREE_FILE);
+ blob->addr = addr;
+ blob->size = fdt_size;
+ blob->data = g_malloc0(blob->size);
+ memcpy(blob->data, fdt, blob->size);
+ qemu_register_reset(image_blob_reset, blob);
g_free(fdt);
ret = fdt_size;
-
-out:
-
return ret;
}
diff --git a/hw/ppc440_bamboo.c b/hw/ppc440_bamboo.c
index 9286438..e3e49dd 100644
--- a/hw/ppc440_bamboo.c
+++ b/hw/ppc440_bamboo.c
@@ -111,7 +111,14 @@ static int bamboo_load_device_tree(target_phys_addr_t addr,
qemu_devtree_setprop_cell(fdt, "/cpus/cpu@0", "timebase-frequency",
tb_freq);
- ret = rom_add_blob_fixed(BINARY_DEVICE_TREE_FILE, fdt, fdt_size, addr);
+ ImageBlob *blob;
+ blob = g_malloc0(sizeof(*blob));
+ blob->name = g_strdup(BINARY_DEVICE_TREE_FILE);
+ blob->addr = addr;
+ blob->size = fdt_size;
+ blob->data = g_malloc0(blob->size);
+ memcpy(blob->data, fdt, blob->size);
+ qemu_register_reset(image_blob_reset, blob);
g_free(fdt);
out:
diff --git a/hw/r2d.c b/hw/r2d.c
index 1bc191f..15e1be4 100644
--- a/hw/r2d.c
+++ b/hw/r2d.c
@@ -338,8 +338,14 @@ static void r2d_init(ram_addr_t ram_size,
sizeof(boot_params.kernel_cmdline));
}
- rom_add_blob_fixed("boot_params", &boot_params, sizeof(boot_params),
- SDRAM_BASE + BOOT_PARAMS_OFFSET);
+ ImageBlob *blob;
+ blob = g_malloc0(sizeof(*blob));
+ blob->name = g_strdup("boot_params");
+ blob->addr = SDRAM_BASE + BOOT_PARAMS_OFFSET;
+ blob->size = sizeof(boot_params);
+ blob->data = g_malloc0(blob->size);
+ memcpy(blob->data, &boot_params, blob->size);
+ qemu_register_reset(image_blob_reset, blob);
}
static QEMUMachine r2d_machine = {
--
1.7.1
next prev parent reply other threads:[~2012-10-26 8:44 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-26 8:02 [Qemu-devel] [PATCH 0/5] register reset handlers to reload image Olivia Yin
2012-10-26 8:02 ` [Qemu-devel] [PATCH 1/5] define image_file_reset and image_blob_reset Olivia Yin
2012-10-26 8:02 ` [Qemu-devel] [PATCH 2/5] use reset handlers to reload kernel and initrd Olivia Yin
2012-10-26 8:02 ` [Qemu-devel] [PATCH 3/5] replace rom_add_file* with image_file_reset Olivia Yin
2012-10-26 8:02 ` Olivia Yin [this message]
2012-10-26 8:02 ` [Qemu-devel] [PATCH 5/5] remove rom related functions in loader Olivia Yin
2012-10-26 9:32 ` [Qemu-devel] [PATCH 2/5] use reset handlers to reload kernel and initrd 陳韋任 (Wei-Ren Chen)
2012-10-29 5:12 ` Yin Olivia-R63875
2012-10-26 9:28 ` [Qemu-devel] [PATCH 1/5] define image_file_reset and image_blob_reset 陳韋任 (Wei-Ren Chen)
2012-10-26 9:17 ` [Qemu-devel] [PATCH 0/5] register reset handlers to reload image 陳韋任 (Wei-Ren Chen)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1351238526-2551-5-git-send-email-hong-hua.yin@freescale.com \
--to=hong-hua.yin@freescale.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).