[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [QEMU PATCH] create struct for machine initialization arguments (v3)



On Fri, Oct 5, 2012 at 8:44 PM, Eduardo Habkost <ehabkost@xxxxxxxxxx> wrote:
> This should help us to:
> - More easily add or remove machine initialization arguments without
>   having to change every single machine init function;
> - More easily make mechanical changes involving the machine init
>   functions in the future;
> - Let machine initialization forward the init arguments to other
>   functions more easily.
>
> This change was half-mechanical process: first the struct was added with
> the local ram_size, boot_device, kernel_*, initrd_*, and cpu_model local
> variable initialization to all functions. Then the compiler helped me
> locate the local variables that are unused, so they could be removed.
>
> Changes v2 -> v3:
>  - Fix typo (missing dot) on main()
>  - Fix another mistake on xen_init_pv() (I had forgotten to add local 
> variables
>    to replace the old function arguments)
>
> Changes v1 -> v2:
>  - Fix mistake on the conversion of pc_xen_hvm_init() and xen_init_pv()

Changelog should be below --- line so that it will be clipped by git am.

The patch does not apply (hw/xilinx_zynq.c), please rebase.

>
> Signed-off-by: Eduardo Habkost <ehabkost@xxxxxxxxxx>
> ---
>  hw/alpha_dp264.c              |  12 ++--
>  hw/an5206.c                   |   8 +--
>  hw/axis_dev88.c               |   9 +--
>  hw/boards.h                   |  16 +++--
>  hw/collie.c                   |   9 +--
>  hw/dummy_m68k.c               |   8 +--
>  hw/exynos4_boards.c           |  16 ++---
>  hw/gumstix.c                  |  11 +---
>  hw/highbank.c                 |  10 ++--
>  hw/integratorcp.c             |  10 ++--
>  hw/kzm.c                      |  10 ++--
>  hw/leon3.c                    |  10 ++--
>  hw/lm32_boards.c              |  18 +++---
>  hw/mainstone.c                |  10 ++--
>  hw/mcf5208.c                  |   8 +--
>  hw/milkymist.c                |  10 ++--
>  hw/mips_fulong2e.c            |   9 ++-
>  hw/mips_jazz.c                |  14 ++---
>  hw/mips_malta.c               |  10 ++--
>  hw/mips_mipssim.c             |  10 ++--
>  hw/mips_r4k.c                 |  10 ++--
>  hw/musicpal.c                 |   9 +--
>  hw/nseries.c                  |  22 ++++---
>  hw/null-machine.c             |   7 +--
>  hw/omap_sx1.c                 |  22 ++++---
>  hw/openrisc_sim.c             |  10 ++--
>  hw/palm.c                     |   9 +--
>  hw/pc_piix.c                  |  50 ++++++++--------
>  hw/petalogix_ml605_mmu.c      |   8 +--
>  hw/petalogix_s3adsp1800_mmu.c |   8 +--
>  hw/ppc/e500plat.c             |  13 +++--
>  hw/ppc/mpc8544ds.c            |  13 +++--
>  hw/ppc405_boards.c            |  25 ++++----
>  hw/ppc440_bamboo.c            |  12 ++--
>  hw/ppc_newworld.c             |  13 +++--
>  hw/ppc_oldworld.c             |  13 +++--
>  hw/ppc_prep.c                 |  13 +++--
>  hw/puv3.c                     |   8 ++-
>  hw/r2d.c                      |   9 +--
>  hw/realview.c                 |  44 +++++++++-----
>  hw/s390-virtio.c              |  13 +++--
>  hw/shix.c                     |   6 +-
>  hw/spapr.c                    |  13 +++--
>  hw/spitz.c                    |  40 ++++++++-----
>  hw/stellaris.c                |  14 ++---
>  hw/sun4m.c                    | 133 
> ++++++++++++++++++++++++++----------------
>  hw/sun4u.c                    |  39 ++++++++-----
>  hw/tosa.c                     |   9 +--
>  hw/versatilepb.c              |  22 ++++---
>  hw/vexpress.c                 |  26 +++++----
>  hw/virtex_ml507.c             |  10 ++--
>  hw/xen_machine_pv.c           |  11 ++--
>  hw/xilinx_zynq.c              |   9 ++-
>  hw/xtensa_lx60.c              |  22 ++++---
>  hw/xtensa_sim.c               |  11 ++--
>  hw/z2.c                       |   9 +--
>  vl.c                          |   9 ++-
>  57 files changed, 518 insertions(+), 414 deletions(-)
>
> diff --git a/hw/alpha_dp264.c b/hw/alpha_dp264.c
> index 9eb939f..2c2e237 100644
> --- a/hw/alpha_dp264.c
> +++ b/hw/alpha_dp264.c
> @@ -42,13 +42,13 @@ static int clipper_pci_map_irq(PCIDevice *d, int irq_num)
>      return (slot + 1) * 4 + irq_num;
>  }
>
> -static void clipper_init(ram_addr_t ram_size,
> -                         const char *boot_device,
> -                         const char *kernel_filename,
> -                         const char *kernel_cmdline,
> -                         const char *initrd_filename,
> -                         const char *cpu_model)
> +static void clipper_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      CPUAlphaState *cpus[4];
>      PCIBus *pci_bus;
>      ISABus *isa_bus;
> diff --git a/hw/an5206.c b/hw/an5206.c
> index 25407c0..042c5fc 100644
> --- a/hw/an5206.c
> +++ b/hw/an5206.c
> @@ -19,11 +19,11 @@
>
>  /* Board init.  */
>
> -static void an5206_init(ram_addr_t ram_size,
> -                     const char *boot_device,
> -                     const char *kernel_filename, const char *kernel_cmdline,
> -                     const char *initrd_filename, const char *cpu_model)
> +static void an5206_init(QEMUMachineInitArgs *args)
>  {
> +    ram_addr_t ram_size = args->ram_size;
> +    const char *cpu_model = args->cpu_model;
> +    const char *kernel_filename = args->kernel_filename;
>      CPUM68KState *env;
>      int kernel_size;
>      uint64_t elf_entry;
> diff --git a/hw/axis_dev88.c b/hw/axis_dev88.c
> index eab6327..2fd7356 100644
> --- a/hw/axis_dev88.c
> +++ b/hw/axis_dev88.c
> @@ -242,11 +242,12 @@ static const MemoryRegionOps gpio_ops = {
>  static struct cris_load_info li;
>
>  static
> -void axisdev88_init (ram_addr_t ram_size,
> -                     const char *boot_device,
> -                     const char *kernel_filename, const char *kernel_cmdline,
> -                     const char *initrd_filename, const char *cpu_model)
> +void axisdev88_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      CRISCPU *cpu;
>      CPUCRISState *env;
>      DeviceState *dev;
> diff --git a/hw/boards.h b/hw/boards.h
> index a2e0a54..813d0e5 100644
> --- a/hw/boards.h
> +++ b/hw/boards.h
> @@ -5,12 +5,16 @@
>
>  #include "qdev.h"
>
> -typedef void QEMUMachineInitFunc(ram_addr_t ram_size,
> -                                 const char *boot_device,
> -                                 const char *kernel_filename,
> -                                 const char *kernel_cmdline,
> -                                 const char *initrd_filename,
> -                                 const char *cpu_model);
> +typedef struct QEMUMachineInitArgs {
> +    ram_addr_t ram_size;
> +    const char *boot_device;
> +    const char *kernel_filename;
> +    const char *kernel_cmdline;
> +    const char *initrd_filename;
> +    const char *cpu_model;
> +} QEMUMachineInitArgs;
> +
> +typedef void QEMUMachineInitFunc(QEMUMachineInitArgs *args);
>
>  typedef void QEMUMachineResetFunc(void);
>
> diff --git a/hw/collie.c b/hw/collie.c
> index 56f89a9..695982a 100644
> --- a/hw/collie.c
> +++ b/hw/collie.c
> @@ -23,11 +23,12 @@ static struct arm_boot_info collie_binfo = {
>      .ram_size = 0x20000000,
>  };
>
> -static void collie_init(ram_addr_t ram_size,
> -                const char *boot_device,
> -                const char *kernel_filename, const char *kernel_cmdline,
> -                const char *initrd_filename, const char *cpu_model)
> +static void collie_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      StrongARMState *s;
>      DriveInfo *dinfo;
>      MemoryRegion *sysmem = get_system_memory();
> diff --git a/hw/dummy_m68k.c b/hw/dummy_m68k.c
> index 7cc7a99..f436a0c 100644
> --- a/hw/dummy_m68k.c
> +++ b/hw/dummy_m68k.c
> @@ -16,11 +16,11 @@
>
>  /* Board init.  */
>
> -static void dummy_m68k_init(ram_addr_t ram_size,
> -                     const char *boot_device,
> -                     const char *kernel_filename, const char *kernel_cmdline,
> -                     const char *initrd_filename, const char *cpu_model)
> +static void dummy_m68k_init(QEMUMachineInitArgs *args)
>  {
> +    ram_addr_t ram_size = args->ram_size;
> +    const char *cpu_model = args->cpu_model;
> +    const char *kernel_filename = args->kernel_filename;
>      CPUM68KState *env;
>      MemoryRegion *address_space_mem =  get_system_memory();
>      MemoryRegion *ram = g_new(MemoryRegion, 1);
> diff --git a/hw/exynos4_boards.c b/hw/exynos4_boards.c
> index 4bb0a60..4951064 100644
> --- a/hw/exynos4_boards.c
> +++ b/hw/exynos4_boards.c
> @@ -130,22 +130,22 @@ static Exynos4210State *exynos4_boards_init_common(
>              exynos4_board_ram_size[board_type]);
>  }
>
> -static void nuri_init(ram_addr_t ram_size,
> -        const char *boot_device,
> -        const char *kernel_filename, const char *kernel_cmdline,
> -        const char *initrd_filename, const char *cpu_model)
> +static void nuri_init(QEMUMachineInitArgs *args)
>  {
> +    const char *kernel_filename = args->kernel_filename;
> +    const char *kernel_cmdline = args->kernel_cmdline;
> +    const char *initrd_filename = args->initrd_filename;
>      exynos4_boards_init_common(kernel_filename, kernel_cmdline,
>                  initrd_filename, EXYNOS4_BOARD_NURI);
>
>      arm_load_kernel(arm_env_get_cpu(first_cpu), &exynos4_board_binfo);
>  }
>
> -static void smdkc210_init(ram_addr_t ram_size,
> -        const char *boot_device,
> -        const char *kernel_filename, const char *kernel_cmdline,
> -        const char *initrd_filename, const char *cpu_model)
> +static void smdkc210_init(QEMUMachineInitArgs *args)
>  {
> +    const char *kernel_filename = args->kernel_filename;
> +    const char *kernel_cmdline = args->kernel_cmdline;
> +    const char *initrd_filename = args->initrd_filename;
>      Exynos4210State *s = exynos4_boards_init_common(kernel_filename,
>              kernel_cmdline, initrd_filename, EXYNOS4_BOARD_SMDKC210);
>
> diff --git a/hw/gumstix.c b/hw/gumstix.c
> index 13a36ea..4103a88 100644
> --- a/hw/gumstix.c
> +++ b/hw/gumstix.c
> @@ -45,10 +45,7 @@
>
>  static const int sector_len = 128 * 1024;
>
> -static void connex_init(ram_addr_t ram_size,
> -                const char *boot_device,
> -                const char *kernel_filename, const char *kernel_cmdline,
> -                const char *initrd_filename, const char *cpu_model)
> +static void connex_init(QEMUMachineInitArgs *args)
>  {
>      PXA2xxState *cpu;
>      DriveInfo *dinfo;
> @@ -84,11 +81,9 @@ static void connex_init(ram_addr_t ram_size,
>                      qdev_get_gpio_in(cpu->gpio, 36));
>  }
>
> -static void verdex_init(ram_addr_t ram_size,
> -                const char *boot_device,
> -                const char *kernel_filename, const char *kernel_cmdline,
> -                const char *initrd_filename, const char *cpu_model)
> +static void verdex_init(QEMUMachineInitArgs *args)
>  {
> +    const char *cpu_model = args->cpu_model;
>      PXA2xxState *cpu;
>      DriveInfo *dinfo;
>      int be;
> diff --git a/hw/highbank.c b/hw/highbank.c
> index 11aa131..15036b6 100644
> --- a/hw/highbank.c
> +++ b/hw/highbank.c
> @@ -187,11 +187,13 @@ static struct arm_boot_info highbank_binfo;
>   * 32-bit host, set the reg value of memory to 0xf7ff00000 in the
>   * device tree and pass -m 2047 to QEMU.
>   */
> -static void highbank_init(ram_addr_t ram_size,
> -                     const char *boot_device,
> -                     const char *kernel_filename, const char *kernel_cmdline,
> -                     const char *initrd_filename, const char *cpu_model)
> +static void highbank_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      DeviceState *dev;
>      SysBusDevice *busdev;
>      qemu_irq *irqp;
> diff --git a/hw/integratorcp.c b/hw/integratorcp.c
> index d0e2e90..ac0ea83 100644
> --- a/hw/integratorcp.c
> +++ b/hw/integratorcp.c
> @@ -438,11 +438,13 @@ static struct arm_boot_info integrator_binfo = {
>      .board_id = 0x113,
>  };
>
> -static void integratorcp_init(ram_addr_t ram_size,
> -                     const char *boot_device,
> -                     const char *kernel_filename, const char *kernel_cmdline,
> -                     const char *initrd_filename, const char *cpu_model)
> +static void integratorcp_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      ARMCPU *cpu;
>      MemoryRegion *address_space_mem = get_system_memory();
>      MemoryRegion *ram = g_new(MemoryRegion, 1);
> diff --git a/hw/kzm.c b/hw/kzm.c
> index 68cd1b4..d1266d9 100644
> --- a/hw/kzm.c
> +++ b/hw/kzm.c
> @@ -70,11 +70,13 @@ static struct arm_boot_info kzm_binfo = {
>      .board_id = 1722,
>  };
>
> -static void kzm_init(ram_addr_t ram_size,
> -                     const char *boot_device,
> -                     const char *kernel_filename, const char *kernel_cmdline,
> -                     const char *initrd_filename, const char *cpu_model)
> +static void kzm_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      ARMCPU *cpu;
>      MemoryRegion *address_space_mem = get_system_memory();
>      MemoryRegion *ram = g_new(MemoryRegion, 1);
> diff --git a/hw/leon3.c b/hw/leon3.c
> index 878d3aa..6486b7b 100644
> --- a/hw/leon3.c
> +++ b/hw/leon3.c
> @@ -94,13 +94,11 @@ static void leon3_set_pil_in(void *opaque, uint32_t 
> pil_in)
>      }
>  }
>
> -static void leon3_generic_hw_init(ram_addr_t  ram_size,
> -                                  const char *boot_device,
> -                                  const char *kernel_filename,
> -                                  const char *kernel_cmdline,
> -                                  const char *initrd_filename,
> -                                  const char *cpu_model)
> +static void leon3_generic_hw_init(QEMUMachineInitArgs *args)
>  {
> +    ram_addr_t ram_size = args->ram_size;
> +    const char *cpu_model = args->cpu_model;
> +    const char *kernel_filename = args->kernel_filename;
>      SPARCCPU *cpu;
>      CPUSPARCState   *env;
>      MemoryRegion *address_space_mem = get_system_memory();
> diff --git a/hw/lm32_boards.c b/hw/lm32_boards.c
> index b76d800..c5a62c8 100644
> --- a/hw/lm32_boards.c
> +++ b/hw/lm32_boards.c
> @@ -69,12 +69,10 @@ static void main_cpu_reset(void *opaque)
>      env->deba = reset_info->flash_base;
>  }
>
> -static void lm32_evr_init(ram_addr_t ram_size_not_used,
> -                          const char *boot_device,
> -                          const char *kernel_filename,
> -                          const char *kernel_cmdline,
> -                          const char *initrd_filename, const char *cpu_model)
> +static void lm32_evr_init(QEMUMachineInitArgs *args)
>  {
> +    const char *cpu_model = args->cpu_model;
> +    const char *kernel_filename = args->kernel_filename;
>      LM32CPU *cpu;
>      CPULM32State *env;
>      DriveInfo *dinfo;
> @@ -159,12 +157,12 @@ static void lm32_evr_init(ram_addr_t ram_size_not_used,
>      qemu_register_reset(main_cpu_reset, reset_info);
>  }
>
> -static void lm32_uclinux_init(ram_addr_t ram_size_not_used,
> -                          const char *boot_device,
> -                          const char *kernel_filename,
> -                          const char *kernel_cmdline,
> -                          const char *initrd_filename, const char *cpu_model)
> +static void lm32_uclinux_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      LM32CPU *cpu;
>      CPULM32State *env;
>      DriveInfo *dinfo;
> diff --git a/hw/mainstone.c b/hw/mainstone.c
> index 97687b6..c0d6034 100644
> --- a/hw/mainstone.c
> +++ b/hw/mainstone.c
> @@ -171,11 +171,13 @@ static void mainstone_common_init(MemoryRegion 
> *address_space_mem,
>      arm_load_kernel(mpu->cpu, &mainstone_binfo);
>  }
>
> -static void mainstone_init(ram_addr_t ram_size,
> -                const char *boot_device,
> -                const char *kernel_filename, const char *kernel_cmdline,
> -                const char *initrd_filename, const char *cpu_model)
> +static void mainstone_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      mainstone_common_init(get_system_memory(), ram_size, kernel_filename,
>                  kernel_cmdline, initrd_filename, cpu_model, mainstone, 
> 0x196);
>  }
> diff --git a/hw/mcf5208.c b/hw/mcf5208.c
> index ee25b1b..688bc3c 100644
> --- a/hw/mcf5208.c
> +++ b/hw/mcf5208.c
> @@ -187,11 +187,11 @@ static void mcf5208_sys_init(MemoryRegion 
> *address_space, qemu_irq *pic)
>      }
>  }
>
> -static void mcf5208evb_init(ram_addr_t ram_size,
> -                     const char *boot_device,
> -                     const char *kernel_filename, const char *kernel_cmdline,
> -                     const char *initrd_filename, const char *cpu_model)
> +static void mcf5208evb_init(QEMUMachineInitArgs *args)
>  {
> +    ram_addr_t ram_size = args->ram_size;
> +    const char *cpu_model = args->cpu_model;
> +    const char *kernel_filename = args->kernel_filename;
>      CPUM68KState *env;
>      int kernel_size;
>      uint64_t elf_entry;
> diff --git a/hw/milkymist.c b/hw/milkymist.c
> index 2e7235b..ca9ed43 100644
> --- a/hw/milkymist.c
> +++ b/hw/milkymist.c
> @@ -73,12 +73,12 @@ static void main_cpu_reset(void *opaque)
>  }
>
>  static void
> -milkymist_init(ram_addr_t ram_size_not_used,
> -                          const char *boot_device,
> -                          const char *kernel_filename,
> -                          const char *kernel_cmdline,
> -                          const char *initrd_filename, const char *cpu_model)
> +milkymist_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      LM32CPU *cpu;
>      CPULM32State *env;
>      int kernel_size;
> diff --git a/hw/mips_fulong2e.c b/hw/mips_fulong2e.c
> index 38e4b86..af7bb50 100644
> --- a/hw/mips_fulong2e.c
> +++ b/hw/mips_fulong2e.c
> @@ -256,10 +256,13 @@ static void cpu_request_exit(void *opaque, int irq, int 
> level)
>      }
>  }
>
> -static void mips_fulong2e_init(ram_addr_t ram_size, const char *boot_device,
> -                        const char *kernel_filename, const char 
> *kernel_cmdline,
> -                        const char *initrd_filename, const char *cpu_model)
> +static void mips_fulong2e_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      char *filename;
>      MemoryRegion *address_space_mem = get_system_memory();
>      MemoryRegion *ram = g_new(MemoryRegion, 1);
> diff --git a/hw/mips_jazz.c b/hw/mips_jazz.c
> index db927f1..14df4d7 100644
> --- a/hw/mips_jazz.c
> +++ b/hw/mips_jazz.c
> @@ -302,21 +302,19 @@ static void mips_jazz_init(MemoryRegion *address_space,
>  }
>
>  static
> -void mips_magnum_init (ram_addr_t ram_size,
> -                       const char *boot_device,
> -                       const char *kernel_filename, const char 
> *kernel_cmdline,
> -                       const char *initrd_filename, const char *cpu_model)
> +void mips_magnum_init(QEMUMachineInitArgs *args)
>  {
> +    ram_addr_t ram_size = args->ram_size;
> +    const char *cpu_model = args->cpu_model;
>          mips_jazz_init(get_system_memory(), get_system_io(),
>                         ram_size, cpu_model, JAZZ_MAGNUM);
>  }
>
>  static
> -void mips_pica61_init (ram_addr_t ram_size,
> -                       const char *boot_device,
> -                       const char *kernel_filename, const char 
> *kernel_cmdline,
> -                       const char *initrd_filename, const char *cpu_model)
> +void mips_pica61_init(QEMUMachineInitArgs *args)
>  {
> +    ram_addr_t ram_size = args->ram_size;
> +    const char *cpu_model = args->cpu_model;
>      mips_jazz_init(get_system_memory(), get_system_io(),
>                     ram_size, cpu_model, JAZZ_PICA61);
>  }
> diff --git a/hw/mips_malta.c b/hw/mips_malta.c
> index ad23f26..14151f9 100644
> --- a/hw/mips_malta.c
> +++ b/hw/mips_malta.c
> @@ -777,11 +777,13 @@ static void cpu_request_exit(void *opaque, int irq, int 
> level)
>  }
>
>  static
> -void mips_malta_init (ram_addr_t ram_size,
> -                      const char *boot_device,
> -                      const char *kernel_filename, const char 
> *kernel_cmdline,
> -                      const char *initrd_filename, const char *cpu_model)
> +void mips_malta_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      char *filename;
>      pflash_t *fl;
>      MemoryRegion *system_memory = get_system_memory();
> diff --git a/hw/mips_mipssim.c b/hw/mips_mipssim.c
> index 830f635..a1d3945 100644
> --- a/hw/mips_mipssim.c
> +++ b/hw/mips_mipssim.c
> @@ -131,11 +131,13 @@ static void mipsnet_init(int base, qemu_irq irq, 
> NICInfo *nd)
>  }
>
>  static void
> -mips_mipssim_init (ram_addr_t ram_size,
> -                   const char *boot_device,
> -                   const char *kernel_filename, const char *kernel_cmdline,
> -                   const char *initrd_filename, const char *cpu_model)
> +mips_mipssim_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      char *filename;
>      MemoryRegion *address_space_mem = get_system_memory();
>      MemoryRegion *ram = g_new(MemoryRegion, 1);
> diff --git a/hw/mips_r4k.c b/hw/mips_r4k.c
> index 967a76e..b73cdc3 100644
> --- a/hw/mips_r4k.c
> +++ b/hw/mips_r4k.c
> @@ -151,11 +151,13 @@ static void main_cpu_reset(void *opaque)
>
>  static const int sector_len = 32 * 1024;
>  static
> -void mips_r4k_init (ram_addr_t ram_size,
> -                    const char *boot_device,
> -                    const char *kernel_filename, const char *kernel_cmdline,
> -                    const char *initrd_filename, const char *cpu_model)
> +void mips_r4k_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      char *filename;
>      MemoryRegion *address_space_mem = get_system_memory();
>      MemoryRegion *ram = g_new(MemoryRegion, 1);
> diff --git a/hw/musicpal.c b/hw/musicpal.c
> index f305e21..f06814c 100644
> --- a/hw/musicpal.c
> +++ b/hw/musicpal.c
> @@ -1508,11 +1508,12 @@ static struct arm_boot_info musicpal_binfo = {
>      .board_id = 0x20e,
>  };
>
> -static void musicpal_init(ram_addr_t ram_size,
> -               const char *boot_device,
> -               const char *kernel_filename, const char *kernel_cmdline,
> -               const char *initrd_filename, const char *cpu_model)
> +static void musicpal_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      ARMCPU *cpu;
>      qemu_irq *cpu_pic;
>      qemu_irq pic[32];
> diff --git a/hw/nseries.c b/hw/nseries.c
> index 6df71eb..7ada90d 100644
> --- a/hw/nseries.c
> +++ b/hw/nseries.c
> @@ -1397,21 +1397,27 @@ static struct arm_boot_info n810_binfo = {
>      .atag_board = n810_atag_setup,
>  };
>
> -static void n800_init(ram_addr_t ram_size,
> -                const char *boot_device,
> -                const char *kernel_filename, const char *kernel_cmdline,
> -                const char *initrd_filename, const char *cpu_model)
> +static void n800_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      return n8x0_init(ram_size, boot_device,
>                      kernel_filename, kernel_cmdline, initrd_filename,
>                      cpu_model, &n800_binfo, 800);
>  }
>
> -static void n810_init(ram_addr_t ram_size,
> -                const char *boot_device,
> -                const char *kernel_filename, const char *kernel_cmdline,
> -                const char *initrd_filename, const char *cpu_model)
> +static void n810_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      return n8x0_init(ram_size, boot_device,
>                      kernel_filename, kernel_cmdline, initrd_filename,
>                      cpu_model, &n810_binfo, 810);
> diff --git a/hw/null-machine.c b/hw/null-machine.c
> index 69910d3..d813c08 100644
> --- a/hw/null-machine.c
> +++ b/hw/null-machine.c
> @@ -15,12 +15,7 @@
>  #include "hw/hw.h"
>  #include "hw/boards.h"
>
> -static void machine_none_init(ram_addr_t ram_size,
> -                              const char *boot_device,
> -                              const char *kernel_filename,
> -                              const char *kernel_cmdline,
> -                              const char *initrd_filename,
> -                              const char *cpu_model)
> +static void machine_none_init(QEMUMachineInitArgs *args)
>  {
>  }
>
> diff --git a/hw/omap_sx1.c b/hw/omap_sx1.c
> index abca341..ad17487 100644
> --- a/hw/omap_sx1.c
> +++ b/hw/omap_sx1.c
> @@ -209,20 +209,26 @@ static void sx1_init(ram_addr_t ram_size,
>      //~ qemu_console_resize(ds, 640, 480);
>  }
>
> -static void sx1_init_v1(ram_addr_t ram_size,
> -                const char *boot_device,
> -                const char *kernel_filename, const char *kernel_cmdline,
> -                const char *initrd_filename, const char *cpu_model)
> +static void sx1_init_v1(QEMUMachineInitArgs *args)
>  {
> +    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;
>      sx1_init(ram_size, boot_device, kernel_filename,
>                  kernel_cmdline, initrd_filename, cpu_model, 1);
>  }
>
> -static void sx1_init_v2(ram_addr_t ram_size,
> -                const char *boot_device,
> -                const char *kernel_filename, const char *kernel_cmdline,
> -                const char *initrd_filename, const char *cpu_model)
> +static void sx1_init_v2(QEMUMachineInitArgs *args)
>  {
> +    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;
>      sx1_init(ram_size, boot_device, kernel_filename,
>                  kernel_cmdline, initrd_filename, cpu_model, 2);
>  }
> diff --git a/hw/openrisc_sim.c b/hw/openrisc_sim.c
> index 55e97f0..e96a944 100644
> --- a/hw/openrisc_sim.c
> +++ b/hw/openrisc_sim.c
> @@ -90,13 +90,11 @@ static void cpu_openrisc_load_kernel(ram_addr_t ram_size,
>      cpu->env.pc = entry;
>  }
>
> -static void openrisc_sim_init(ram_addr_t ram_size,
> -                              const char *boot_device,
> -                              const char *kernel_filename,
> -                              const char *kernel_cmdline,
> -                              const char *initrd_filename,
> -                              const char *cpu_model)
> +static void openrisc_sim_init(QEMUMachineInitArgs *args)
>  {
> +    ram_addr_t ram_size = args->ram_size;
> +    const char *cpu_model = args->cpu_model;
> +    const char *kernel_filename = args->kernel_filename;
>     OpenRISCCPU *cpu = NULL;
>      MemoryRegion *ram;
>      int n;
> diff --git a/hw/palm.c b/hw/palm.c
> index bacdc90..032b8d6 100644
> --- a/hw/palm.c
> +++ b/hw/palm.c
> @@ -190,11 +190,12 @@ static struct arm_boot_info palmte_binfo = {
>      .board_id = 0x331,
>  };
>
> -static void palmte_init(ram_addr_t ram_size,
> -                const char *boot_device,
> -                const char *kernel_filename, const char *kernel_cmdline,
> -                const char *initrd_filename, const char *cpu_model)
> +static void palmte_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      MemoryRegion *address_space_mem = get_system_memory();
>      struct omap_mpu_state_s *mpu;
>      int flash_size = 0x00800000;
> diff --git a/hw/pc_piix.c b/hw/pc_piix.c
> index fd5898f..c9fca05 100644
> --- a/hw/pc_piix.c
> +++ b/hw/pc_piix.c
> @@ -287,13 +287,14 @@ static void pc_init1(MemoryRegion *system_memory,
>      }
>  }
>
> -static void pc_init_pci(ram_addr_t ram_size,
> -                        const char *boot_device,
> -                        const char *kernel_filename,
> -                        const char *kernel_cmdline,
> -                        const char *initrd_filename,
> -                        const char *cpu_model)
> +static void pc_init_pci(QEMUMachineInitArgs *args)
>  {
> +    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;
>      pc_init1(get_system_memory(),
>               get_system_io(),
>               ram_size, boot_device,
> @@ -301,13 +302,14 @@ static void pc_init_pci(ram_addr_t ram_size,
>               initrd_filename, cpu_model, 1, 1);
>  }
>
> -static void pc_init_pci_no_kvmclock(ram_addr_t ram_size,
> -                                    const char *boot_device,
> -                                    const char *kernel_filename,
> -                                    const char *kernel_cmdline,
> -                                    const char *initrd_filename,
> -                                    const char *cpu_model)
> +static void pc_init_pci_no_kvmclock(QEMUMachineInitArgs *args)
>  {
> +    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;
>      pc_init1(get_system_memory(),
>               get_system_io(),
>               ram_size, boot_device,
> @@ -315,13 +317,14 @@ static void pc_init_pci_no_kvmclock(ram_addr_t ram_size,
>               initrd_filename, cpu_model, 1, 0);
>  }
>
> -static void pc_init_isa(ram_addr_t ram_size,
> -                        const char *boot_device,
> -                        const char *kernel_filename,
> -                        const char *kernel_cmdline,
> -                        const char *initrd_filename,
> -                        const char *cpu_model)
> +static void pc_init_isa(QEMUMachineInitArgs *args)
>  {
> +    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;
>      if (cpu_model == NULL)
>          cpu_model = "486";
>      pc_init1(get_system_memory(),
> @@ -332,19 +335,12 @@ static void pc_init_isa(ram_addr_t ram_size,
>  }
>
>  #ifdef CONFIG_XEN
> -static void pc_xen_hvm_init(ram_addr_t ram_size,
> -                            const char *boot_device,
> -                            const char *kernel_filename,
> -                            const char *kernel_cmdline,
> -                            const char *initrd_filename,
> -                            const char *cpu_model)
> +static void pc_xen_hvm_init(QEMUMachineInitArgs *args)
>  {
>      if (xen_hvm_init() != 0) {
>          hw_error("xen hardware virtual machine initialisation failed");
>      }
> -    pc_init_pci_no_kvmclock(ram_size, boot_device,
> -                            kernel_filename, kernel_cmdline,
> -                            initrd_filename, cpu_model);
> +    pc_init_pci_no_kvmclock(args);
>      xen_vcpu_init();
>  }
>  #endif
> diff --git a/hw/petalogix_ml605_mmu.c b/hw/petalogix_ml605_mmu.c
> index dced648..ace0187 100644
> --- a/hw/petalogix_ml605_mmu.c
> +++ b/hw/petalogix_ml605_mmu.c
> @@ -70,12 +70,10 @@ static void machine_cpu_reset(MicroBlazeCPU *cpu)
>  }
>
>  static void
> -petalogix_ml605_init(ram_addr_t ram_size,
> -                          const char *boot_device,
> -                          const char *kernel_filename,
> -                          const char *kernel_cmdline,
> -                          const char *initrd_filename, const char *cpu_model)
> +petalogix_ml605_init(QEMUMachineInitArgs *args)
>  {
> +    ram_addr_t ram_size = args->ram_size;
> +    const char *cpu_model = args->cpu_model;
>      MemoryRegion *address_space_mem = get_system_memory();
>      DeviceState *dev, *dma, *eth0;
>      MicroBlazeCPU *cpu;
> diff --git a/hw/petalogix_s3adsp1800_mmu.c b/hw/petalogix_s3adsp1800_mmu.c
> index 2cf6882..71c32ce 100644
> --- a/hw/petalogix_s3adsp1800_mmu.c
> +++ b/hw/petalogix_s3adsp1800_mmu.c
> @@ -57,12 +57,10 @@ static void machine_cpu_reset(MicroBlazeCPU *cpu)
>  }
>
>  static void
> -petalogix_s3adsp1800_init(ram_addr_t ram_size,
> -                          const char *boot_device,
> -                          const char *kernel_filename,
> -                          const char *kernel_cmdline,
> -                          const char *initrd_filename, const char *cpu_model)
> +petalogix_s3adsp1800_init(QEMUMachineInitArgs *args)
>  {
> +    ram_addr_t ram_size = args->ram_size;
> +    const char *cpu_model = args->cpu_model;
>      DeviceState *dev;
>      MicroBlazeCPU *cpu;
>      CPUMBState *env;
> diff --git a/hw/ppc/e500plat.c b/hw/ppc/e500plat.c
> index 60a5cb3..4cfb940 100644
> --- a/hw/ppc/e500plat.c
> +++ b/hw/ppc/e500plat.c
> @@ -25,13 +25,14 @@ static void e500plat_fixup_devtree(PPCE500Params *params, 
> void *fdt)
>                           sizeof(compatible));
>  }
>
> -static void e500plat_init(ram_addr_t ram_size,
> -                           const char *boot_device,
> -                           const char *kernel_filename,
> -                           const char *kernel_cmdline,
> -                           const char *initrd_filename,
> -                           const char *cpu_model)
> +static void e500plat_init(QEMUMachineInitArgs *args)
>  {
> +    ram_addr_t ram_size = args->ram_size;
> +    const char *boot_device = args->boot_device;
> +    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;
>      PPCE500Params params = {
>          .ram_size = ram_size,
>          .boot_device = boot_device,
> diff --git a/hw/ppc/mpc8544ds.c b/hw/ppc/mpc8544ds.c
> index 984d21c..e651661 100644
> --- a/hw/ppc/mpc8544ds.c
> +++ b/hw/ppc/mpc8544ds.c
> @@ -25,13 +25,14 @@ static void mpc8544ds_fixup_devtree(PPCE500Params 
> *params, void *fdt)
>                           sizeof(compatible));
>  }
>
> -static void mpc8544ds_init(ram_addr_t ram_size,
> -                           const char *boot_device,
> -                           const char *kernel_filename,
> -                           const char *kernel_cmdline,
> -                           const char *initrd_filename,
> -                           const char *cpu_model)
> +static void mpc8544ds_init(QEMUMachineInitArgs *args)
>  {
> +    ram_addr_t ram_size = args->ram_size;
> +    const char *boot_device = args->boot_device;
> +    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;
>      PPCE500Params params = {
>          .ram_size = ram_size,
>          .boot_device = boot_device,
> diff --git a/hw/ppc405_boards.c b/hw/ppc405_boards.c
> index 476775d..e848cb0 100644
> --- a/hw/ppc405_boards.c
> +++ b/hw/ppc405_boards.c
> @@ -158,7 +158,7 @@ static void ref405ep_fpga_reset (void *opaque)
>      fpga->reg1 = 0x0F;
>  }
>
> -static void ref405ep_fpga_init (MemoryRegion *sysmem, uint32_t base)
> +static void ref405ep_fpga_init(MemoryRegion *sysmem, uint32_t base)
>  {
>      ref405ep_fpga_t *fpga;
>      MemoryRegion *fpga_memory = g_new(MemoryRegion, 1);
> @@ -170,13 +170,12 @@ static void ref405ep_fpga_init (MemoryRegion *sysmem, 
> uint32_t base)
>      qemu_register_reset(&ref405ep_fpga_reset, fpga);
>  }
>
> -static void ref405ep_init (ram_addr_t ram_size,
> -                           const char *boot_device,
> -                           const char *kernel_filename,
> -                           const char *kernel_cmdline,
> -                           const char *initrd_filename,
> -                           const char *cpu_model)
> +static void ref405ep_init(QEMUMachineInitArgs *args)
>  {
> +    ram_addr_t ram_size = args->ram_size;
> +    const char *kernel_filename = args->kernel_filename;
> +    const char *kernel_cmdline = args->kernel_cmdline;
> +    const char *initrd_filename = args->initrd_filename;
>      char *filename;
>      ppc4xx_bd_info_t bd;
>      CPUPPCState *env;
> @@ -484,7 +483,7 @@ static void taihu_cpld_reset (void *opaque)
>      cpld->reg1 = 0x80;
>  }
>
> -static void taihu_cpld_init (MemoryRegion *sysmem, uint32_t base)
> +static void taihu_cpld_init(MemoryRegion *sysmem, uint32_t base)
>  {
>      taihu_cpld_t *cpld;
>      MemoryRegion *cpld_memory = g_new(MemoryRegion, 1);
> @@ -495,13 +494,11 @@ static void taihu_cpld_init (MemoryRegion *sysmem, 
> uint32_t base)
>      qemu_register_reset(&taihu_cpld_reset, cpld);
>  }
>
> -static void taihu_405ep_init(ram_addr_t ram_size,
> -                             const char *boot_device,
> -                             const char *kernel_filename,
> -                             const char *kernel_cmdline,
> -                             const char *initrd_filename,
> -                             const char *cpu_model)
> +static void taihu_405ep_init(QEMUMachineInitArgs *args)
>  {
> +    ram_addr_t ram_size = args->ram_size;
> +    const char *kernel_filename = args->kernel_filename;
> +    const char *initrd_filename = args->initrd_filename;
>      char *filename;
>      qemu_irq *pic;
>      MemoryRegion *sysmem = get_system_memory();
> diff --git a/hw/ppc440_bamboo.c b/hw/ppc440_bamboo.c
> index c198071..78e7985 100644
> --- a/hw/ppc440_bamboo.c
> +++ b/hw/ppc440_bamboo.c
> @@ -157,13 +157,13 @@ static void main_cpu_reset(void *opaque)
>      mmubooke_create_initial_mapping(env, 0, 0);
>  }
>
> -static void bamboo_init(ram_addr_t ram_size,
> -                        const char *boot_device,
> -                        const char *kernel_filename,
> -                        const char *kernel_cmdline,
> -                        const char *initrd_filename,
> -                        const char *cpu_model)
> +static void bamboo_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      unsigned int pci_irq_nrs[4] = { 28, 27, 26, 25 };
>      MemoryRegion *address_space_mem = get_system_memory();
>      MemoryRegion *ram_memories
> diff --git a/hw/ppc_newworld.c b/hw/ppc_newworld.c
> index e95cfe8..e7c0747 100644
> --- a/hw/ppc_newworld.c
> +++ b/hw/ppc_newworld.c
> @@ -129,13 +129,14 @@ static void ppc_core99_reset(void *opaque)
>  }
>
>  /* PowerPC Mac99 hardware initialisation */
> -static void ppc_core99_init (ram_addr_t ram_size,
> -                             const char *boot_device,
> -                             const char *kernel_filename,
> -                             const char *kernel_cmdline,
> -                             const char *initrd_filename,
> -                             const char *cpu_model)
> +static void ppc_core99_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      PowerPCCPU *cpu = NULL;
>      CPUPPCState *env = NULL;
>      char *filename;
> diff --git a/hw/ppc_oldworld.c b/hw/ppc_oldworld.c
> index 1dcd8a6..d9f76a8 100644
> --- a/hw/ppc_oldworld.c
> +++ b/hw/ppc_oldworld.c
> @@ -72,13 +72,14 @@ static void ppc_heathrow_reset(void *opaque)
>      cpu_reset(CPU(cpu));
>  }
>
> -static void ppc_heathrow_init (ram_addr_t ram_size,
> -                               const char *boot_device,
> -                               const char *kernel_filename,
> -                               const char *kernel_cmdline,
> -                               const char *initrd_filename,
> -                               const char *cpu_model)
> +static void ppc_heathrow_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      MemoryRegion *sysmem = get_system_memory();
>      PowerPCCPU *cpu = NULL;
>      CPUPPCState *env = NULL;
> diff --git a/hw/ppc_prep.c b/hw/ppc_prep.c
> index 592b7b2..f51f78a 100644
> --- a/hw/ppc_prep.c
> +++ b/hw/ppc_prep.c
> @@ -448,13 +448,14 @@ static void ppc_prep_reset(void *opaque)
>  }
>
>  /* PowerPC PREP hardware initialisation */
> -static void ppc_prep_init (ram_addr_t ram_size,
> -                           const char *boot_device,
> -                           const char *kernel_filename,
> -                           const char *kernel_cmdline,
> -                           const char *initrd_filename,
> -                           const char *cpu_model)
> +static void ppc_prep_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      MemoryRegion *sysmem = get_system_memory();
>      PowerPCCPU *cpu = NULL;
>      CPUPPCState *env = NULL;
> diff --git a/hw/puv3.c b/hw/puv3.c
> index 43f7216..764799c 100644
> --- a/hw/puv3.c
> +++ b/hw/puv3.c
> @@ -91,10 +91,12 @@ static void puv3_load_kernel(const char *kernel_filename)
>      graphic_console_init(NULL, NULL, NULL, NULL, NULL);
>  }
>
> -static void puv3_init(ram_addr_t ram_size, const char *boot_device,
> -                     const char *kernel_filename, const char *kernel_cmdline,
> -                     const char *initrd_filename, const char *cpu_model)
> +static void puv3_init(QEMUMachineInitArgs *args)
>  {
> +    ram_addr_t ram_size = args->ram_size;
> +    const char *cpu_model = args->cpu_model;
> +    const char *kernel_filename = args->kernel_filename;
> +    const char *initrd_filename = args->initrd_filename;
>      CPUUniCore32State *env;
>
>      if (initrd_filename) {
> diff --git a/hw/r2d.c b/hw/r2d.c
> index 0f16e81..5daa42f 100644
> --- a/hw/r2d.c
> +++ b/hw/r2d.c
> @@ -219,11 +219,12 @@ static struct QEMU_PACKED
>      char kernel_cmdline[256];
>  } boot_params;
>
> -static void r2d_init(ram_addr_t ram_size,
> -              const char *boot_device,
> -             const char *kernel_filename, const char *kernel_cmdline,
> -             const char *initrd_filename, const char *cpu_model)
> +static void r2d_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      SuperHCPU *cpu;
>      CPUSH4State *env;
>      ResetData *reset_info;
> diff --git a/hw/realview.c b/hw/realview.c
> index 19db4d0..8dc4be6 100644
> --- a/hw/realview.c
> +++ b/hw/realview.c
> @@ -330,11 +330,14 @@ static void realview_init(ram_addr_t ram_size,
>      arm_load_kernel(arm_env_get_cpu(first_cpu), &realview_binfo);
>  }
>
> -static void realview_eb_init(ram_addr_t ram_size,
> -                     const char *boot_device,
> -                     const char *kernel_filename, const char *kernel_cmdline,
> -                     const char *initrd_filename, const char *cpu_model)
> +static void realview_eb_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      if (!cpu_model) {
>          cpu_model = "arm926";
>      }
> @@ -342,11 +345,14 @@ static void realview_eb_init(ram_addr_t ram_size,
>                    initrd_filename, cpu_model, BOARD_EB);
>  }
>
> -static void realview_eb_mpcore_init(ram_addr_t ram_size,
> -                     const char *boot_device,
> -                     const char *kernel_filename, const char *kernel_cmdline,
> -                     const char *initrd_filename, const char *cpu_model)
> +static void realview_eb_mpcore_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      if (!cpu_model) {
>          cpu_model = "arm11mpcore";
>      }
> @@ -354,11 +360,14 @@ static void realview_eb_mpcore_init(ram_addr_t ram_size,
>                    initrd_filename, cpu_model, BOARD_EB_MPCORE);
>  }
>
> -static void realview_pb_a8_init(ram_addr_t ram_size,
> -                     const char *boot_device,
> -                     const char *kernel_filename, const char *kernel_cmdline,
> -                     const char *initrd_filename, const char *cpu_model)
> +static void realview_pb_a8_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      if (!cpu_model) {
>          cpu_model = "cortex-a8";
>      }
> @@ -366,11 +375,14 @@ static void realview_pb_a8_init(ram_addr_t ram_size,
>                    initrd_filename, cpu_model, BOARD_PB_A8);
>  }
>
> -static void realview_pbx_a9_init(ram_addr_t ram_size,
> -                     const char *boot_device,
> -                     const char *kernel_filename, const char *kernel_cmdline,
> -                     const char *initrd_filename, const char *cpu_model)
> +static void realview_pbx_a9_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      if (!cpu_model) {
>          cpu_model = "cortex-a9";
>      }
> diff --git a/hw/s390-virtio.c b/hw/s390-virtio.c
> index 47eed35..39ff178 100644
> --- a/hw/s390-virtio.c
> +++ b/hw/s390-virtio.c
> @@ -151,13 +151,14 @@ unsigned s390_del_running_cpu(CPUS390XState *env)
>  }
>
>  /* PC hardware initialisation */
> -static void s390_init(ram_addr_t my_ram_size,
> -                      const char *boot_device,
> -                      const char *kernel_filename,
> -                      const char *kernel_cmdline,
> -                      const char *initrd_filename,
> -                      const char *cpu_model)
> +static void s390_init(QEMUMachineInitArgs *args)
>  {
> +    ram_addr_t my_ram_size = args->ram_size;
> +    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;
>      CPUS390XState *env = NULL;
>      MemoryRegion *sysmem = get_system_memory();
>      MemoryRegion *ram = g_new(MemoryRegion, 1);
> diff --git a/hw/shix.c b/hw/shix.c
> index dd9ce17..b56dd54 100644
> --- a/hw/shix.c
> +++ b/hw/shix.c
> @@ -37,11 +37,9 @@
>  #define BIOS_FILENAME "shix_bios.bin"
>  #define BIOS_ADDRESS 0xA0000000
>
> -static void shix_init(ram_addr_t ram_size,
> -               const char *boot_device,
> -              const char *kernel_filename, const char *kernel_cmdline,
> -              const char *initrd_filename, const char *cpu_model)
> +static void shix_init(QEMUMachineInitArgs *args)
>  {
> +    const char *cpu_model = args->cpu_model;
>      int ret;
>      CPUSH4State *env;
>      struct SH7750State *s;
> diff --git a/hw/spapr.c b/hw/spapr.c
> index c34b767..8921c4d 100644
> --- a/hw/spapr.c
> +++ b/hw/spapr.c
> @@ -603,13 +603,14 @@ static int spapr_vga_init(PCIBus *pci_bus)
>  }
>
>  /* pSeries LPAR / sPAPR hardware init */
> -static void ppc_spapr_init(ram_addr_t ram_size,
> -                           const char *boot_device,
> -                           const char *kernel_filename,
> -                           const char *kernel_cmdline,
> -                           const char *initrd_filename,
> -                           const char *cpu_model)
> +static void ppc_spapr_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      PowerPCCPU *cpu;
>      CPUPPCState *env;
>      PCIHostState *phb;
> diff --git a/hw/spitz.c b/hw/spitz.c
> index 20e7835..df829b3 100644
> --- a/hw/spitz.c
> +++ b/hw/spitz.c
> @@ -936,38 +936,46 @@ static void spitz_common_init(ram_addr_t ram_size,
>      sl_bootparam_write(SL_PXA_PARAM_BASE);
>  }
>
> -static void spitz_init(ram_addr_t ram_size,
> -                const char *boot_device,
> -                const char *kernel_filename, const char *kernel_cmdline,
> -                const char *initrd_filename, const char *cpu_model)
> +static void spitz_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      spitz_common_init(ram_size, kernel_filename,
>                  kernel_cmdline, initrd_filename, cpu_model, spitz, 0x2c9);
>  }
>
> -static void borzoi_init(ram_addr_t ram_size,
> -                const char *boot_device,
> -                const char *kernel_filename, const char *kernel_cmdline,
> -                const char *initrd_filename, const char *cpu_model)
> +static void borzoi_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      spitz_common_init(ram_size, kernel_filename,
>                  kernel_cmdline, initrd_filename, cpu_model, borzoi, 0x33f);
>  }
>
> -static void akita_init(ram_addr_t ram_size,
> -                const char *boot_device,
> -                const char *kernel_filename, const char *kernel_cmdline,
> -                const char *initrd_filename, const char *cpu_model)
> +static void akita_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      spitz_common_init(ram_size, kernel_filename,
>                  kernel_cmdline, initrd_filename, cpu_model, akita, 0x2e8);
>  }
>
> -static void terrier_init(ram_addr_t ram_size,
> -                const char *boot_device,
> -                const char *kernel_filename, const char *kernel_cmdline,
> -                const char *initrd_filename, const char *cpu_model)
> +static void terrier_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      spitz_common_init(ram_size, kernel_filename,
>                  kernel_cmdline, initrd_filename, cpu_model, terrier, 0x33f);
>  }
> diff --git a/hw/stellaris.c b/hw/stellaris.c
> index 562fbbf..b79c7fb 100644
> --- a/hw/stellaris.c
> +++ b/hw/stellaris.c
> @@ -1358,19 +1358,17 @@ static void stellaris_init(const char 
> *kernel_filename, const char *cpu_model,
>  }
>
>  /* FIXME: Figure out how to generate these from stellaris_boards.  */
> -static void lm3s811evb_init(ram_addr_t ram_size,
> -                     const char *boot_device,
> -                     const char *kernel_filename, const char *kernel_cmdline,
> -                     const char *initrd_filename, const char *cpu_model)
> +static void lm3s811evb_init(QEMUMachineInitArgs *args)
>  {
> +    const char *cpu_model = args->cpu_model;
> +    const char *kernel_filename = args->kernel_filename;
>      stellaris_init(kernel_filename, cpu_model, &stellaris_boards[0]);
>  }
>
> -static void lm3s6965evb_init(ram_addr_t ram_size,
> -                     const char *boot_device,
> -                     const char *kernel_filename, const char *kernel_cmdline,
> -                     const char *initrd_filename, const char *cpu_model)
> +static void lm3s6965evb_init(QEMUMachineInitArgs *args)
>  {
> +    const char *cpu_model = args->cpu_model;
> +    const char *kernel_filename = args->kernel_filename;
>      stellaris_init(kernel_filename, cpu_model, &stellaris_boards[1]);
>  }
>
> diff --git a/hw/sun4m.c b/hw/sun4m.c
> index c98cd5e..22e011f 100644
> --- a/hw/sun4m.c
> +++ b/hw/sun4m.c
> @@ -1303,92 +1303,118 @@ static const struct sun4m_hwdef sun4m_hwdefs[] = {
>  };
>
>  /* SPARCstation 5 hardware initialisation */
> -static void ss5_init(ram_addr_t RAM_size,
> -                     const char *boot_device,
> -                     const char *kernel_filename, const char *kernel_cmdline,
> -                     const char *initrd_filename, const char *cpu_model)
> +static void ss5_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      sun4m_hw_init(&sun4m_hwdefs[0], RAM_size, boot_device, kernel_filename,
>                    kernel_cmdline, initrd_filename, cpu_model);
>  }
>
>  /* SPARCstation 10 hardware initialisation */
> -static void ss10_init(ram_addr_t RAM_size,
> -                      const char *boot_device,
> -                      const char *kernel_filename, const char 
> *kernel_cmdline,
> -                      const char *initrd_filename, const char *cpu_model)
> +static void ss10_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      sun4m_hw_init(&sun4m_hwdefs[1], RAM_size, boot_device, kernel_filename,
>                    kernel_cmdline, initrd_filename, cpu_model);
>  }
>
>  /* SPARCserver 600MP hardware initialisation */
> -static void ss600mp_init(ram_addr_t RAM_size,
> -                         const char *boot_device,
> -                         const char *kernel_filename,
> -                         const char *kernel_cmdline,
> -                         const char *initrd_filename, const char *cpu_model)
> +static void ss600mp_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      sun4m_hw_init(&sun4m_hwdefs[2], RAM_size, boot_device, kernel_filename,
>                    kernel_cmdline, initrd_filename, cpu_model);
>  }
>
>  /* SPARCstation 20 hardware initialisation */
> -static void ss20_init(ram_addr_t RAM_size,
> -                      const char *boot_device,
> -                      const char *kernel_filename, const char 
> *kernel_cmdline,
> -                      const char *initrd_filename, const char *cpu_model)
> +static void ss20_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      sun4m_hw_init(&sun4m_hwdefs[3], RAM_size, boot_device, kernel_filename,
>                    kernel_cmdline, initrd_filename, cpu_model);
>  }
>
>  /* SPARCstation Voyager hardware initialisation */
> -static void vger_init(ram_addr_t RAM_size,
> -                      const char *boot_device,
> -                      const char *kernel_filename, const char 
> *kernel_cmdline,
> -                      const char *initrd_filename, const char *cpu_model)
> +static void vger_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      sun4m_hw_init(&sun4m_hwdefs[4], RAM_size, boot_device, kernel_filename,
>                    kernel_cmdline, initrd_filename, cpu_model);
>  }
>
>  /* SPARCstation LX hardware initialisation */
> -static void ss_lx_init(ram_addr_t RAM_size,
> -                       const char *boot_device,
> -                       const char *kernel_filename, const char 
> *kernel_cmdline,
> -                       const char *initrd_filename, const char *cpu_model)
> +static void ss_lx_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      sun4m_hw_init(&sun4m_hwdefs[5], RAM_size, boot_device, kernel_filename,
>                    kernel_cmdline, initrd_filename, cpu_model);
>  }
>
>  /* SPARCstation 4 hardware initialisation */
> -static void ss4_init(ram_addr_t RAM_size,
> -                     const char *boot_device,
> -                     const char *kernel_filename, const char *kernel_cmdline,
> -                     const char *initrd_filename, const char *cpu_model)
> +static void ss4_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      sun4m_hw_init(&sun4m_hwdefs[6], RAM_size, boot_device, kernel_filename,
>                    kernel_cmdline, initrd_filename, cpu_model);
>  }
>
>  /* SPARCClassic hardware initialisation */
> -static void scls_init(ram_addr_t RAM_size,
> -                      const char *boot_device,
> -                      const char *kernel_filename, const char 
> *kernel_cmdline,
> -                      const char *initrd_filename, const char *cpu_model)
> +static void scls_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      sun4m_hw_init(&sun4m_hwdefs[7], RAM_size, boot_device, kernel_filename,
>                    kernel_cmdline, initrd_filename, cpu_model);
>  }
>
>  /* SPARCbook hardware initialisation */
> -static void sbook_init(ram_addr_t RAM_size,
> -                       const char *boot_device,
> -                       const char *kernel_filename, const char 
> *kernel_cmdline,
> -                       const char *initrd_filename, const char *cpu_model)
> +static void sbook_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      sun4m_hw_init(&sun4m_hwdefs[8], RAM_size, boot_device, kernel_filename,
>                    kernel_cmdline, initrd_filename, cpu_model);
>  }
> @@ -1651,21 +1677,27 @@ static void sun4d_hw_init(const struct sun4d_hwdef 
> *hwdef, ram_addr_t RAM_size,
>  }
>
>  /* SPARCserver 1000 hardware initialisation */
> -static void ss1000_init(ram_addr_t RAM_size,
> -                        const char *boot_device,
> -                        const char *kernel_filename, const char 
> *kernel_cmdline,
> -                        const char *initrd_filename, const char *cpu_model)
> +static void ss1000_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      sun4d_hw_init(&sun4d_hwdefs[0], RAM_size, boot_device, kernel_filename,
>                    kernel_cmdline, initrd_filename, cpu_model);
>  }
>
>  /* SPARCcenter 2000 hardware initialisation */
> -static void ss2000_init(ram_addr_t RAM_size,
> -                        const char *boot_device,
> -                        const char *kernel_filename, const char 
> *kernel_cmdline,
> -                        const char *initrd_filename, const char *cpu_model)
> +static void ss2000_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      sun4d_hw_init(&sun4d_hwdefs[1], RAM_size, boot_device, kernel_filename,
>                    kernel_cmdline, initrd_filename, cpu_model);
>  }
> @@ -1845,11 +1877,14 @@ static void sun4c_hw_init(const struct sun4c_hwdef 
> *hwdef, ram_addr_t RAM_size,
>  }
>
>  /* SPARCstation 2 hardware initialisation */
> -static void ss2_init(ram_addr_t RAM_size,
> -                     const char *boot_device,
> -                     const char *kernel_filename, const char *kernel_cmdline,
> -                     const char *initrd_filename, const char *cpu_model)
> +static void ss2_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      sun4c_hw_init(&sun4c_hwdefs[0], RAM_size, boot_device, kernel_filename,
>                    kernel_cmdline, initrd_filename, cpu_model);
>  }
> diff --git a/hw/sun4u.c b/hw/sun4u.c
> index 07cd042..379768c 100644
> --- a/hw/sun4u.c
> +++ b/hw/sun4u.c
> @@ -930,31 +930,40 @@ static const struct hwdef hwdefs[] = {
>  };
>
>  /* Sun4u hardware initialisation */
> -static void sun4u_init(ram_addr_t RAM_size,
> -                       const char *boot_devices,
> -                       const char *kernel_filename, const char 
> *kernel_cmdline,
> -                       const char *initrd_filename, const char *cpu_model)
> -{
> +static void sun4u_init(QEMUMachineInitArgs *args)
> +{
> +    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_devices = args->boot_device;
>      sun4uv_init(get_system_memory(), RAM_size, boot_devices, kernel_filename,
>                  kernel_cmdline, initrd_filename, cpu_model, &hwdefs[0]);
>  }
>
>  /* Sun4v hardware initialisation */
> -static void sun4v_init(ram_addr_t RAM_size,
> -                       const char *boot_devices,
> -                       const char *kernel_filename, const char 
> *kernel_cmdline,
> -                       const char *initrd_filename, const char *cpu_model)
> -{
> +static void sun4v_init(QEMUMachineInitArgs *args)
> +{
> +    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_devices = args->boot_device;
>      sun4uv_init(get_system_memory(), RAM_size, boot_devices, kernel_filename,
>                  kernel_cmdline, initrd_filename, cpu_model, &hwdefs[1]);
>  }
>
>  /* Niagara hardware initialisation */
> -static void niagara_init(ram_addr_t RAM_size,
> -                         const char *boot_devices,
> -                         const char *kernel_filename, const char 
> *kernel_cmdline,
> -                         const char *initrd_filename, const char *cpu_model)
> -{
> +static void niagara_init(QEMUMachineInitArgs *args)
> +{
> +    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_devices = args->boot_device;
>      sun4uv_init(get_system_memory(), RAM_size, boot_devices, kernel_filename,
>                  kernel_cmdline, initrd_filename, cpu_model, &hwdefs[2]);
>  }
> diff --git a/hw/tosa.c b/hw/tosa.c
> index 297a8c2..512278c 100644
> --- a/hw/tosa.c
> +++ b/hw/tosa.c
> @@ -205,11 +205,12 @@ static struct arm_boot_info tosa_binfo = {
>      .ram_size = 0x04000000,
>  };
>
> -static void tosa_init(ram_addr_t ram_size,
> -                const char *boot_device,
> -                const char *kernel_filename, const char *kernel_cmdline,
> -                const char *initrd_filename, const char *cpu_model)
> +static void tosa_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      MemoryRegion *address_space_mem = get_system_memory();
>      MemoryRegion *rom = g_new(MemoryRegion, 1);
>      PXA2xxState *mpu;
> diff --git a/hw/versatilepb.c b/hw/versatilepb.c
> index 7a92034..686dcc7 100644
> --- a/hw/versatilepb.c
> +++ b/hw/versatilepb.c
> @@ -342,22 +342,28 @@ static void versatile_init(ram_addr_t ram_size,
>      arm_load_kernel(cpu, &versatile_binfo);
>  }
>
> -static void vpb_init(ram_addr_t ram_size,
> -                     const char *boot_device,
> -                     const char *kernel_filename, const char *kernel_cmdline,
> -                     const char *initrd_filename, const char *cpu_model)
> +static void vpb_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      versatile_init(ram_size,
>                     boot_device,
>                     kernel_filename, kernel_cmdline,
>                     initrd_filename, cpu_model, 0x183);
>  }
>
> -static void vab_init(ram_addr_t ram_size,
> -                     const char *boot_device,
> -                     const char *kernel_filename, const char *kernel_cmdline,
> -                     const char *initrd_filename, const char *cpu_model)
> +static void vab_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      versatile_init(ram_size,
>                     boot_device,
>                     kernel_filename, kernel_cmdline,
> diff --git a/hw/vexpress.c b/hw/vexpress.c
> index 3596d1e..36503d6 100644
> --- a/hw/vexpress.c
> +++ b/hw/vexpress.c
> @@ -467,25 +467,27 @@ static void vexpress_common_init(const VEDBoardInfo 
> *daughterboard,
>      arm_load_kernel(arm_env_get_cpu(first_cpu), &vexpress_binfo);
>  }
>
> -static void vexpress_a9_init(ram_addr_t ram_size,
> -                             const char *boot_device,
> -                             const char *kernel_filename,
> -                             const char *kernel_cmdline,
> -                             const char *initrd_filename,
> -                             const char *cpu_model)
> +static void vexpress_a9_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      vexpress_common_init(&a9_daughterboard,
>                           ram_size, boot_device, kernel_filename,
>                           kernel_cmdline, initrd_filename, cpu_model);
>  }
>
> -static void vexpress_a15_init(ram_addr_t ram_size,
> -                              const char *boot_device,
> -                              const char *kernel_filename,
> -                              const char *kernel_cmdline,
> -                              const char *initrd_filename,
> -                              const char *cpu_model)
> +static void vexpress_a15_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      vexpress_common_init(&a15_daughterboard,
>                           ram_size, boot_device, kernel_filename,
>                           kernel_cmdline, initrd_filename, cpu_model);
> diff --git a/hw/virtex_ml507.c b/hw/virtex_ml507.c
> index 79bc0d1..a09b27a 100644
> --- a/hw/virtex_ml507.c
> +++ b/hw/virtex_ml507.c
> @@ -183,12 +183,12 @@ static int xilinx_load_device_tree(target_phys_addr_t 
> addr,
>      return fdt_size;
>  }
>
> -static void virtex_init(ram_addr_t ram_size,
> -                        const char *boot_device,
> -                        const char *kernel_filename,
> -                        const char *kernel_cmdline,
> -                        const char *initrd_filename, const char *cpu_model)
> +static void virtex_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      MemoryRegion *address_space_mem = get_system_memory();
>      DeviceState *dev;
>      PowerPCCPU *cpu;
> diff --git a/hw/xen_machine_pv.c b/hw/xen_machine_pv.c
> index 4b72aa7..4264703 100644
> --- a/hw/xen_machine_pv.c
> +++ b/hw/xen_machine_pv.c
> @@ -29,13 +29,12 @@
>  #include "xen_domainbuild.h"
>  #include "blockdev.h"
>
> -static void xen_init_pv(ram_addr_t ram_size,
> -                       const char *boot_device,
> -                       const char *kernel_filename,
> -                       const char *kernel_cmdline,
> -                       const char *initrd_filename,
> -                       const char *cpu_model)
> +static void xen_init_pv(QEMUMachineInitArgs *args)
>  {
> +    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;
>      X86CPU *cpu;
>      CPUX86State *env;
>      DriveInfo *dinfo;
> diff --git a/hw/xilinx_zynq.c b/hw/xilinx_zynq.c
> index 7e6c273..83f322e 100644
> --- a/hw/xilinx_zynq.c
> +++ b/hw/xilinx_zynq.c
> @@ -46,10 +46,13 @@ static void gem_init(NICInfo *nd, uint32_t base, qemu_irq 
> irq)
>      sysbus_connect_irq(s, 0, irq);
>  }
>
> -static void zynq_init(ram_addr_t ram_size, const char *boot_device,
> -                        const char *kernel_filename, const char 
> *kernel_cmdline,
> -                        const char *initrd_filename, const char *cpu_model)
> +static void zynq_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      ARMCPU *cpu;
>      MemoryRegion *address_space_mem = get_system_memory();
>      MemoryRegion *ext_ram = g_new(MemoryRegion, 1);
> diff --git a/hw/xtensa_lx60.c b/hw/xtensa_lx60.c
> index 3653f65..1fd2c47 100644
> --- a/hw/xtensa_lx60.c
> +++ b/hw/xtensa_lx60.c
> @@ -268,11 +268,14 @@ static void lx_init(const LxBoardDesc *board,
>      }
>  }
>
> -static void xtensa_lx60_init(ram_addr_t ram_size,
> -                     const char *boot_device,
> -                     const char *kernel_filename, const char *kernel_cmdline,
> -                     const char *initrd_filename, const char *cpu_model)
> +static void xtensa_lx60_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      static const LxBoardDesc lx60_board = {
>          .flash_size = 0x400000,
>          .flash_sector_size = 0x10000,
> @@ -283,11 +286,14 @@ static void xtensa_lx60_init(ram_addr_t ram_size,
>              initrd_filename, cpu_model);
>  }
>
> -static void xtensa_lx200_init(ram_addr_t ram_size,
> -                     const char *boot_device,
> -                     const char *kernel_filename, const char *kernel_cmdline,
> -                     const char *initrd_filename, const char *cpu_model)
> +static void xtensa_lx200_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      static const LxBoardDesc lx200_board = {
>          .flash_size = 0x1000000,
>          .flash_sector_size = 0x20000,
> diff --git a/hw/xtensa_sim.c b/hw/xtensa_sim.c
> index 831460b..2e846d8 100644
> --- a/hw/xtensa_sim.c
> +++ b/hw/xtensa_sim.c
> @@ -96,11 +96,14 @@ static void sim_init(ram_addr_t ram_size,
>      }
>  }
>
> -static void xtensa_sim_init(ram_addr_t ram_size,
> -                     const char *boot_device,
> -                     const char *kernel_filename, const char *kernel_cmdline,
> -                     const char *initrd_filename, const char *cpu_model)
> +static void xtensa_sim_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      if (!cpu_model) {
>          cpu_model = XTENSA_DEFAULT_CPU_MODEL;
>      }
> diff --git a/hw/z2.c b/hw/z2.c
> index 289cee9..0927bad 100644
> --- a/hw/z2.c
> +++ b/hw/z2.c
> @@ -294,11 +294,12 @@ static TypeInfo aer915_info = {
>      .class_init    = aer915_class_init,
>  };
>
> -static void z2_init(ram_addr_t ram_size,
> -                const char *boot_device,
> -                const char *kernel_filename, const char *kernel_cmdline,
> -                const char *initrd_filename, const char *cpu_model)
> +static void z2_init(QEMUMachineInitArgs *args)
>  {
> +    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;
>      MemoryRegion *address_space_mem = get_system_memory();
>      uint32_t sector_len = 0x10000;
>      PXA2xxState *mpu;
> diff --git a/vl.c b/vl.c
> index 8d305ca..b05e224 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -3624,8 +3624,13 @@ int main(int argc, char **argv, char **envp)
>
>      qdev_machine_init();
>
> -    machine->init(ram_size, boot_devices,
> -                  kernel_filename, kernel_cmdline, initrd_filename, 
> cpu_model);
> +    QEMUMachineInitArgs args = { .ram_size = ram_size,
> +                                 .boot_device = boot_devices,
> +                                 .kernel_filename = kernel_filename,
> +                                 .kernel_cmdline = kernel_cmdline,
> +                                 .initrd_filename = initrd_filename,
> +                                 .cpu_model = cpu_model };
> +    machine->init(&args);
>
>      cpu_synchronize_all_post_init();
>
> --
> 1.7.11.4
>

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.