pflash_cfi01: New pflash_cfi01_legacy_drive()
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> Reviewed-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Message-id: 20190416091348.26075-3-armbru@redhat.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
c8d8ef00a1
commit
2d731dbd5e
@ -44,9 +44,12 @@
|
|||||||
#include "qapi/error.h"
|
#include "qapi/error.h"
|
||||||
#include "qemu/timer.h"
|
#include "qemu/timer.h"
|
||||||
#include "qemu/bitops.h"
|
#include "qemu/bitops.h"
|
||||||
|
#include "qemu/error-report.h"
|
||||||
#include "qemu/host-utils.h"
|
#include "qemu/host-utils.h"
|
||||||
#include "qemu/log.h"
|
#include "qemu/log.h"
|
||||||
|
#include "qemu/option.h"
|
||||||
#include "hw/sysbus.h"
|
#include "hw/sysbus.h"
|
||||||
|
#include "sysemu/blockdev.h"
|
||||||
#include "sysemu/sysemu.h"
|
#include "sysemu/sysemu.h"
|
||||||
#include "trace.h"
|
#include "trace.h"
|
||||||
|
|
||||||
@ -968,6 +971,31 @@ MemoryRegion *pflash_cfi01_get_memory(PFlashCFI01 *fl)
|
|||||||
return &fl->mem;
|
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)
|
static void postload_update_cb(void *opaque, int running, RunState state)
|
||||||
{
|
{
|
||||||
PFlashCFI01 *pfl = opaque;
|
PFlashCFI01 *pfl = opaque;
|
||||||
|
@ -269,9 +269,7 @@ void pc_system_firmware_init(PCMachineState *pcms,
|
|||||||
{
|
{
|
||||||
PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms);
|
PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms);
|
||||||
int i;
|
int i;
|
||||||
DriveInfo *pflash_drv;
|
|
||||||
BlockBackend *pflash_blk[ARRAY_SIZE(pcms->flash)];
|
BlockBackend *pflash_blk[ARRAY_SIZE(pcms->flash)];
|
||||||
Location loc;
|
|
||||||
|
|
||||||
if (!pcmc->pci_enabled) {
|
if (!pcmc->pci_enabled) {
|
||||||
old_pc_system_rom_init(rom_memory, true);
|
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 */
|
/* Map legacy -drive if=pflash to machine properties */
|
||||||
for (i = 0; i < ARRAY_SIZE(pcms->flash); i++) {
|
for (i = 0; i < ARRAY_SIZE(pcms->flash); i++) {
|
||||||
pflash_drv = drive_get(IF_PFLASH, 0, i);
|
pflash_cfi01_legacy_drive(pcms->flash[i],
|
||||||
if (pflash_drv) {
|
drive_get(IF_PFLASH, 0, i));
|
||||||
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_blk[i] = pflash_cfi01_get_blk(pcms->flash[i]);
|
pflash_blk[i] = pflash_cfi01_get_blk(pcms->flash[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,6 +24,7 @@ PFlashCFI01 *pflash_cfi01_register(hwaddr base,
|
|||||||
int be);
|
int be);
|
||||||
BlockBackend *pflash_cfi01_get_blk(PFlashCFI01 *fl);
|
BlockBackend *pflash_cfi01_get_blk(PFlashCFI01 *fl);
|
||||||
MemoryRegion *pflash_cfi01_get_memory(PFlashCFI01 *fl);
|
MemoryRegion *pflash_cfi01_get_memory(PFlashCFI01 *fl);
|
||||||
|
void pflash_cfi01_legacy_drive(PFlashCFI01 *dev, DriveInfo *dinfo);
|
||||||
|
|
||||||
/* pflash_cfi02.c */
|
/* pflash_cfi02.c */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user