Factored out of pc_system_firmware_init() so the next commit can reuse
it in hw/arm/virt.c.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
hw/block/pflash_cfi01.c | 28 ++++++++++++++++++++++++++++
hw/i386/pc_sysfw.c | 16 ++--------------
include/hw/block/flash.h | 1 +
3 files changed, 31 insertions(+), 14 deletions(-)
diff --git a/hw/block/pflash_cfi01.c b/hw/block/pflash_cfi01.c
index 16dfae14b8..333b736277 100644
--- a/hw/block/pflash_cfi01.c
+++ b/hw/block/pflash_cfi01.c
@@ -44,9 +44,12 @@
#include "qapi/error.h"
#include "qemu/timer.h"
#include "qemu/bitops.h"
+#include "qemu/error-report.h"
#include "qemu/host-utils.h"
#include "qemu/log.h"
+#include "qemu/option.h"
#include "hw/sysbus.h"
+#include "sysemu/blockdev.h"
#include "sysemu/sysemu.h"
#include "trace.h"
@@ -968,6 +971,31 @@ MemoryRegion *pflash_cfi01_get_memory(PFlashCFI01 *fl)
return &fl->mem;
}
+/*
+ * Handle -drive if=pflash for machines that use properties.
+ * If @dinfo is null, do nothing.
+ * Else if @fl's property "drive" is already set, fatal error.
+ * Else set it to the BlockBackend with @dinfo.
+ */
+void pflash_cfi01_legacy_drive(PFlashCFI01 *fl, DriveInfo *dinfo)
+{
+ Location loc;
+
+ if (!dinfo) {
+ return;
+ }
+
+ loc_push_none(&loc);
+ qemu_opts_loc_restore(dinfo->opts);
+ if (fl->blk) {
+ error_report("clashes with -machine");
+ exit(1);
+ }
+ qdev_prop_set_drive(DEVICE(fl), "drive",
+ blk_by_legacy_dinfo(dinfo), &error_fatal);
+ loc_pop(&loc);
+}
+
static void postload_update_cb(void *opaque, int running, RunState state)
{
PFlashCFI01 *pfl = opaque;
diff --git a/hw/i386/pc_sysfw.c b/hw/i386/pc_sysfw.c
index 75925f5d3f..751fcafa12 100644
--- a/hw/i386/pc_sysfw.c
+++ b/hw/i386/pc_sysfw.c
@@ -269,9 +269,7 @@ void pc_system_firmware_init(PCMachineState *pcms,
{
PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms);
int i;
- DriveInfo *pflash_drv;
BlockBackend *pflash_blk[ARRAY_SIZE(pcms->flash)];
- Location loc;
if (!pcmc->pci_enabled) {
old_pc_system_rom_init(rom_memory, true);
@@ -280,18 +278,8 @@ void pc_system_firmware_init(PCMachineState *pcms,
/* Map legacy -drive if=pflash to machine properties */
for (i = 0; i < ARRAY_SIZE(pcms->flash); i++) {
- pflash_drv = drive_get(IF_PFLASH, 0, i);
- if (pflash_drv) {
- loc_push_none(&loc);
- qemu_opts_loc_restore(pflash_drv->opts);
- if (pflash_cfi01_get_blk(pcms->flash[i])) {
- error_report("clashes with -machine");
- exit(1);
- }
- qdev_prop_set_drive(DEVICE(pcms->flash[i]), "drive",
- blk_by_legacy_dinfo(pflash_drv), &error_fatal);
- loc_pop(&loc);
- }
+ pflash_cfi01_legacy_drive(pcms->flash[i],
+ drive_get(IF_PFLASH, 0, i));
pflash_blk[i] = pflash_cfi01_get_blk(pcms->flash[i]);
}
diff --git a/include/hw/block/flash.h b/include/hw/block/flash.h
index a0f488732a..1acaf7de80 100644
--- a/include/hw/block/flash.h
+++ b/include/hw/block/flash.h
@@ -24,6 +24,7 @@ PFlashCFI01 *pflash_cfi01_register(hwaddr base,
int be);
BlockBackend *pflash_cfi01_get_blk(PFlashCFI01 *fl);
MemoryRegion *pflash_cfi01_get_memory(PFlashCFI01 *fl);
+void pflash_cfi01_legacy_drive(PFlashCFI01 *dev, DriveInfo *dinfo);
/* pflash_cfi02.c */
--
2.17.2
On 4/16/19 11:13 AM, Markus Armbruster wrote:
> Factored out of pc_system_firmware_init() so the next commit can reuse
> it in hw/arm/virt.c.
>
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
> hw/block/pflash_cfi01.c | 28 ++++++++++++++++++++++++++++
> hw/i386/pc_sysfw.c | 16 ++--------------
> include/hw/block/flash.h | 1 +
> 3 files changed, 31 insertions(+), 14 deletions(-)
>
> diff --git a/hw/block/pflash_cfi01.c b/hw/block/pflash_cfi01.c
> index 16dfae14b8..333b736277 100644
> --- a/hw/block/pflash_cfi01.c
> +++ b/hw/block/pflash_cfi01.c
> @@ -44,9 +44,12 @@
> #include "qapi/error.h"
> #include "qemu/timer.h"
> #include "qemu/bitops.h"
> +#include "qemu/error-report.h"
> #include "qemu/host-utils.h"
> #include "qemu/log.h"
> +#include "qemu/option.h"
> #include "hw/sysbus.h"
> +#include "sysemu/blockdev.h"
> #include "sysemu/sysemu.h"
> #include "trace.h"
>
> @@ -968,6 +971,31 @@ MemoryRegion *pflash_cfi01_get_memory(PFlashCFI01 *fl)
> return &fl->mem;
> }
>
> +/*
> + * Handle -drive if=pflash for machines that use properties.
> + * If @dinfo is null, do nothing.
> + * Else if @fl's property "drive" is already set, fatal error.
> + * Else set it to the BlockBackend with @dinfo.
> + */
> +void pflash_cfi01_legacy_drive(PFlashCFI01 *fl, DriveInfo *dinfo)
> +{
> + Location loc;
> +
> + if (!dinfo) {
> + return;
> + }
> +
> + loc_push_none(&loc);
> + qemu_opts_loc_restore(dinfo->opts);
> + if (fl->blk) {
> + error_report("clashes with -machine");
> + exit(1);
> + }
> + qdev_prop_set_drive(DEVICE(fl), "drive",
> + blk_by_legacy_dinfo(dinfo), &error_fatal);
> + loc_pop(&loc);
> +}
> +
> static void postload_update_cb(void *opaque, int running, RunState state)
> {
> PFlashCFI01 *pfl = opaque;
> diff --git a/hw/i386/pc_sysfw.c b/hw/i386/pc_sysfw.c
> index 75925f5d3f..751fcafa12 100644
> --- a/hw/i386/pc_sysfw.c
> +++ b/hw/i386/pc_sysfw.c
> @@ -269,9 +269,7 @@ void pc_system_firmware_init(PCMachineState *pcms,
> {
> PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms);
> int i;
> - DriveInfo *pflash_drv;
> BlockBackend *pflash_blk[ARRAY_SIZE(pcms->flash)];
> - Location loc;
>
> if (!pcmc->pci_enabled) {
> old_pc_system_rom_init(rom_memory, true);
> @@ -280,18 +278,8 @@ void pc_system_firmware_init(PCMachineState *pcms,
>
> /* Map legacy -drive if=pflash to machine properties */
> for (i = 0; i < ARRAY_SIZE(pcms->flash); i++) {
> - pflash_drv = drive_get(IF_PFLASH, 0, i);
> - if (pflash_drv) {
> - loc_push_none(&loc);
> - qemu_opts_loc_restore(pflash_drv->opts);
You can now remove the '#include "qemu/option.h"' in this file.
With that:
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> - if (pflash_cfi01_get_blk(pcms->flash[i])) {
> - error_report("clashes with -machine");
> - exit(1);
> - }
> - qdev_prop_set_drive(DEVICE(pcms->flash[i]), "drive",
> - blk_by_legacy_dinfo(pflash_drv), &error_fatal);
> - loc_pop(&loc);
> - }
> + pflash_cfi01_legacy_drive(pcms->flash[i],
> + drive_get(IF_PFLASH, 0, i));
> pflash_blk[i] = pflash_cfi01_get_blk(pcms->flash[i]);
> }
>
> diff --git a/include/hw/block/flash.h b/include/hw/block/flash.h
> index a0f488732a..1acaf7de80 100644
> --- a/include/hw/block/flash.h
> +++ b/include/hw/block/flash.h
> @@ -24,6 +24,7 @@ PFlashCFI01 *pflash_cfi01_register(hwaddr base,
> int be);
> BlockBackend *pflash_cfi01_get_blk(PFlashCFI01 *fl);
> MemoryRegion *pflash_cfi01_get_memory(PFlashCFI01 *fl);
> +void pflash_cfi01_legacy_drive(PFlashCFI01 *dev, DriveInfo *dinfo);
>
> /* pflash_cfi02.c */
>
>
Philippe Mathieu-Daudé <philmd@redhat.com> writes:
> On 4/16/19 11:13 AM, Markus Armbruster wrote:
>> Factored out of pc_system_firmware_init() so the next commit can reuse
>> it in hw/arm/virt.c.
>>
>> Signed-off-by: Markus Armbruster <armbru@redhat.com>
>> ---
>> hw/block/pflash_cfi01.c | 28 ++++++++++++++++++++++++++++
>> hw/i386/pc_sysfw.c | 16 ++--------------
>> include/hw/block/flash.h | 1 +
>> 3 files changed, 31 insertions(+), 14 deletions(-)
>>
>> diff --git a/hw/block/pflash_cfi01.c b/hw/block/pflash_cfi01.c
>> index 16dfae14b8..333b736277 100644
>> --- a/hw/block/pflash_cfi01.c
>> +++ b/hw/block/pflash_cfi01.c
>> @@ -44,9 +44,12 @@
>> #include "qapi/error.h"
>> #include "qemu/timer.h"
>> #include "qemu/bitops.h"
>> +#include "qemu/error-report.h"
>> #include "qemu/host-utils.h"
>> #include "qemu/log.h"
>> +#include "qemu/option.h"
>> #include "hw/sysbus.h"
>> +#include "sysemu/blockdev.h"
>> #include "sysemu/sysemu.h"
>> #include "trace.h"
>>
>> @@ -968,6 +971,31 @@ MemoryRegion *pflash_cfi01_get_memory(PFlashCFI01 *fl)
>> return &fl->mem;
>> }
>>
>> +/*
>> + * Handle -drive if=pflash for machines that use properties.
>> + * If @dinfo is null, do nothing.
>> + * Else if @fl's property "drive" is already set, fatal error.
>> + * Else set it to the BlockBackend with @dinfo.
>> + */
>> +void pflash_cfi01_legacy_drive(PFlashCFI01 *fl, DriveInfo *dinfo)
>> +{
>> + Location loc;
>> +
>> + if (!dinfo) {
>> + return;
>> + }
>> +
>> + loc_push_none(&loc);
>> + qemu_opts_loc_restore(dinfo->opts);
>> + if (fl->blk) {
>> + error_report("clashes with -machine");
>> + exit(1);
>> + }
>> + qdev_prop_set_drive(DEVICE(fl), "drive",
>> + blk_by_legacy_dinfo(dinfo), &error_fatal);
>> + loc_pop(&loc);
>> +}
>> +
>> static void postload_update_cb(void *opaque, int running, RunState state)
>> {
>> PFlashCFI01 *pfl = opaque;
>> diff --git a/hw/i386/pc_sysfw.c b/hw/i386/pc_sysfw.c
>> index 75925f5d3f..751fcafa12 100644
>> --- a/hw/i386/pc_sysfw.c
>> +++ b/hw/i386/pc_sysfw.c
>> @@ -269,9 +269,7 @@ void pc_system_firmware_init(PCMachineState *pcms,
>> {
>> PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms);
>> int i;
>> - DriveInfo *pflash_drv;
>> BlockBackend *pflash_blk[ARRAY_SIZE(pcms->flash)];
>> - Location loc;
>>
>> if (!pcmc->pci_enabled) {
>> old_pc_system_rom_init(rom_memory, true);
>> @@ -280,18 +278,8 @@ void pc_system_firmware_init(PCMachineState *pcms,
>>
>> /* Map legacy -drive if=pflash to machine properties */
>> for (i = 0; i < ARRAY_SIZE(pcms->flash); i++) {
>> - pflash_drv = drive_get(IF_PFLASH, 0, i);
>> - if (pflash_drv) {
>> - loc_push_none(&loc);
>> - qemu_opts_loc_restore(pflash_drv->opts);
>
> You can now remove the '#include "qemu/option.h"' in this file.
Nice.
> With that:
> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Thanks!
On 04/16/19 11:13, Markus Armbruster wrote:
> Factored out of pc_system_firmware_init() so the next commit can reuse
s/Factored/Factor/
(no need to repost, can be done in the PULL)
with that:
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Thanks!
Laszlo
> it in hw/arm/virt.c.
>
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
> hw/block/pflash_cfi01.c | 28 ++++++++++++++++++++++++++++
> hw/i386/pc_sysfw.c | 16 ++--------------
> include/hw/block/flash.h | 1 +
> 3 files changed, 31 insertions(+), 14 deletions(-)
>
> diff --git a/hw/block/pflash_cfi01.c b/hw/block/pflash_cfi01.c
> index 16dfae14b8..333b736277 100644
> --- a/hw/block/pflash_cfi01.c
> +++ b/hw/block/pflash_cfi01.c
> @@ -44,9 +44,12 @@
> #include "qapi/error.h"
> #include "qemu/timer.h"
> #include "qemu/bitops.h"
> +#include "qemu/error-report.h"
> #include "qemu/host-utils.h"
> #include "qemu/log.h"
> +#include "qemu/option.h"
> #include "hw/sysbus.h"
> +#include "sysemu/blockdev.h"
> #include "sysemu/sysemu.h"
> #include "trace.h"
>
> @@ -968,6 +971,31 @@ MemoryRegion *pflash_cfi01_get_memory(PFlashCFI01 *fl)
> return &fl->mem;
> }
>
> +/*
> + * Handle -drive if=pflash for machines that use properties.
> + * If @dinfo is null, do nothing.
> + * Else if @fl's property "drive" is already set, fatal error.
> + * Else set it to the BlockBackend with @dinfo.
> + */
> +void pflash_cfi01_legacy_drive(PFlashCFI01 *fl, DriveInfo *dinfo)
> +{
> + Location loc;
> +
> + if (!dinfo) {
> + return;
> + }
> +
> + loc_push_none(&loc);
> + qemu_opts_loc_restore(dinfo->opts);
> + if (fl->blk) {
> + error_report("clashes with -machine");
> + exit(1);
> + }
> + qdev_prop_set_drive(DEVICE(fl), "drive",
> + blk_by_legacy_dinfo(dinfo), &error_fatal);
> + loc_pop(&loc);
> +}
> +
> static void postload_update_cb(void *opaque, int running, RunState state)
> {
> PFlashCFI01 *pfl = opaque;
> diff --git a/hw/i386/pc_sysfw.c b/hw/i386/pc_sysfw.c
> index 75925f5d3f..751fcafa12 100644
> --- a/hw/i386/pc_sysfw.c
> +++ b/hw/i386/pc_sysfw.c
> @@ -269,9 +269,7 @@ void pc_system_firmware_init(PCMachineState *pcms,
> {
> PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms);
> int i;
> - DriveInfo *pflash_drv;
> BlockBackend *pflash_blk[ARRAY_SIZE(pcms->flash)];
> - Location loc;
>
> if (!pcmc->pci_enabled) {
> old_pc_system_rom_init(rom_memory, true);
> @@ -280,18 +278,8 @@ void pc_system_firmware_init(PCMachineState *pcms,
>
> /* Map legacy -drive if=pflash to machine properties */
> for (i = 0; i < ARRAY_SIZE(pcms->flash); i++) {
> - pflash_drv = drive_get(IF_PFLASH, 0, i);
> - if (pflash_drv) {
> - loc_push_none(&loc);
> - qemu_opts_loc_restore(pflash_drv->opts);
> - if (pflash_cfi01_get_blk(pcms->flash[i])) {
> - error_report("clashes with -machine");
> - exit(1);
> - }
> - qdev_prop_set_drive(DEVICE(pcms->flash[i]), "drive",
> - blk_by_legacy_dinfo(pflash_drv), &error_fatal);
> - loc_pop(&loc);
> - }
> + pflash_cfi01_legacy_drive(pcms->flash[i],
> + drive_get(IF_PFLASH, 0, i));
> pflash_blk[i] = pflash_cfi01_get_blk(pcms->flash[i]);
> }
>
> diff --git a/include/hw/block/flash.h b/include/hw/block/flash.h
> index a0f488732a..1acaf7de80 100644
> --- a/include/hw/block/flash.h
> +++ b/include/hw/block/flash.h
> @@ -24,6 +24,7 @@ PFlashCFI01 *pflash_cfi01_register(hwaddr base,
> int be);
> BlockBackend *pflash_cfi01_get_blk(PFlashCFI01 *fl);
> MemoryRegion *pflash_cfi01_get_memory(PFlashCFI01 *fl);
> +void pflash_cfi01_legacy_drive(PFlashCFI01 *dev, DriveInfo *dinfo);
>
> /* pflash_cfi02.c */
>
>
© 2016 - 2026 Red Hat, Inc.