@@ -9,6 +9,7 @@
#include "net.h"
#include "memory.h"
#include "ioapic.h"
+#include "boards.h"
/* PC-style peripherals (also used by other machines). */
@@ -75,6 +76,13 @@ void i8042_setup_a20_line(ISADevice *dev, qemu_irq *a20_out);
/* pc.c */
extern int fd_bootchk;
+/* Initialization parameters for the PC init functions */
+typedef struct PCInitArgs {
+ QEMUMachineInitArgs *qemu_args;
+ bool pci_enabled;
+ bool kvmclock_enabled;
+} PCInitArgs;
+
void pc_register_ferr_irq(qemu_irq irq);
void pc_acpi_smi_interrupt(void *opaque, int irq, int level);
@@ -118,9 +118,7 @@ static void ioapic_init(GSIState *gsi_state)
}
/* PC hardware initialisation */
-static void pc_init1(QEMUMachineInitArgs *args,
- int pci_enabled,
- int kvmclock_enabled)
+static void pc_init1(PCInitArgs *pc_args)
{
int i;
ram_addr_t below_4g_mem_size, above_4g_mem_size;
@@ -143,16 +141,18 @@ static void pc_init1(QEMUMachineInitArgs *args,
MemoryRegion *system_memory = get_system_memory();
MemoryRegion *system_io = get_system_io();
void *fw_cfg = NULL;
- ram_addr_t ram_size = args->ram_size;
- const char *cpu_model = args->cpu_model;
- const char *kernel_filename = args->kernel_filename;
- const char *kernel_cmdline = args->kernel_cmdline;
- const char *initrd_filename = args->initrd_filename;
- const char *boot_device = args->boot_device;
+ QEMUMachineInitArgs *qemu_args = pc_args->qemu_args;
+ ram_addr_t ram_size = qemu_args->ram_size;
+ const char *cpu_model = qemu_args->cpu_model;
+ const char *kernel_filename = qemu_args->kernel_filename;
+ const char *kernel_cmdline = qemu_args->kernel_cmdline;
+ const char *initrd_filename = qemu_args->initrd_filename;
+ const char *boot_device = qemu_args->boot_device;
+ bool pci_enabled = pc_args->pci_enabled;
pc_cpus_init(cpu_model);
- if (kvmclock_enabled) {
+ if (pc_args->kvmclock_enabled) {
kvmclock_create();
}
@@ -290,19 +290,34 @@ static void pc_init1(QEMUMachineInitArgs *args,
static void pc_init_pci(QEMUMachineInitArgs *args)
{
- pc_init1(args, 1, 1);
+ PCInitArgs pc_args = {
+ .qemu_args = args,
+ .pci_enabled = true,
+ .kvmclock_enabled = true,
+ };
+ pc_init1(&pc_args);
}
static void pc_init_pci_no_kvmclock(QEMUMachineInitArgs *args)
{
- pc_init1(args, 1, 0);
+ PCInitArgs pc_args = {
+ .qemu_args = args,
+ .pci_enabled = true,
+ .kvmclock_enabled = false,
+ };
+ pc_init1(&pc_args);
}
static void pc_init_isa(QEMUMachineInitArgs *args)
{
+ PCInitArgs pc_args = {
+ .qemu_args = args,
+ .pci_enabled = false,
+ .kvmclock_enabled = false,
+ };
if (args->cpu_model == NULL)
args->cpu_model = "486";
- pc_init1(args, 0, 1);
+ pc_init1(&pc_args);
}
#ifdef CONFIG_XEN
Instead of changing pc_init1() arguments every time some additional machine-type-specific behavior has to be introduced, create a struct that will carry all the information needed by the PC initialization functions. Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> --- hw/pc.h | 8 ++++++++ hw/pc_piix.c | 41 ++++++++++++++++++++++++++++------------- 2 files changed, 36 insertions(+), 13 deletions(-)