[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 5/6] exynos4: Further QOM'ify machines
From: |
Andreas Färber |
Subject: |
[Qemu-devel] [PATCH 5/6] exynos4: Further QOM'ify machines |
Date: |
Sat, 19 Sep 2015 17:36:42 +0200 |
Drop board enumeration in favor of an abstract type, and move static
tables into class initialization.
Signed-off-by: Andreas Färber <address@hidden>
---
hw/arm/exynos4_boards.c | 71 ++++++++++++++++++++++++++-----------------------
1 file changed, 38 insertions(+), 33 deletions(-)
diff --git a/hw/arm/exynos4_boards.c b/hw/arm/exynos4_boards.c
index 336c8b2..ec7f235 100644
--- a/hw/arm/exynos4_boards.c
+++ b/hw/arm/exynos4_boards.c
@@ -46,26 +46,17 @@
#define SMDK_LAN9118_BASE_ADDR 0x05000000
-typedef enum Exynos4BoardType {
- EXYNOS4_BOARD_NURI,
- EXYNOS4_BOARD_SMDKC210,
- EXYNOS4_NUM_OF_BOARDS
-} Exynos4BoardType;
-
-static int exynos4_board_id[EXYNOS4_NUM_OF_BOARDS] = {
- [EXYNOS4_BOARD_NURI] = 0xD33,
- [EXYNOS4_BOARD_SMDKC210] = 0xB16,
-};
+typedef struct Exynos4MachineClass {
+ MachineClass parent_class;
-static int exynos4_board_smp_bootreg_addr[EXYNOS4_NUM_OF_BOARDS] = {
- [EXYNOS4_BOARD_NURI] = EXYNOS4210_SECOND_CPU_BOOTREG,
- [EXYNOS4_BOARD_SMDKC210] = EXYNOS4210_SECOND_CPU_BOOTREG,
-};
+ int id;
+ int smp_bootreg_addr;
+ unsigned long ram_size;
+} Exynos4MachineClass;
-static unsigned long exynos4_board_ram_size[EXYNOS4_NUM_OF_BOARDS] = {
- [EXYNOS4_BOARD_NURI] = 0x40000000,
- [EXYNOS4_BOARD_SMDKC210] = 0x40000000,
-};
+#define TYPE_EXYNOS4_MACHINE MACHINE_TYPE_NAME("exynos4")
+#define EXYNOS4_MACHINE_CLASS(cls) \
+ OBJECT_CLASS_CHECK(Exynos4MachineClass, (cls), TYPE_EXYNOS4_MACHINE)
static struct arm_boot_info exynos4_board_binfo = {
.loader_start = EXYNOS4210_BASE_BOOT_ADDR,
@@ -92,10 +83,10 @@ static void lan9215_init(uint32_t base, qemu_irq irq)
}
}
-static Exynos4210State *exynos4_boards_init_common(MachineState *machine,
- Exynos4BoardType board_type)
+static Exynos4210State *exynos4_boards_init_common(MachineState *machine)
{
MachineClass *mc = MACHINE_GET_CLASS(machine);
+ Exynos4MachineClass *emc = EXYNOS4_MACHINE_CLASS(mc);
if (smp_cpus != EXYNOS4210_NCPUS && !qtest_enabled()) {
fprintf(stderr, "%s board supports only %d CPU cores. Ignoring
smp_cpus"
@@ -103,10 +94,9 @@ static Exynos4210State
*exynos4_boards_init_common(MachineState *machine,
mc->name, EXYNOS4210_NCPUS);
}
- exynos4_board_binfo.ram_size = exynos4_board_ram_size[board_type];
- exynos4_board_binfo.board_id = exynos4_board_id[board_type];
- exynos4_board_binfo.smp_bootreg_addr =
- exynos4_board_smp_bootreg_addr[board_type];
+ exynos4_board_binfo.ram_size = emc->ram_size;
+ exynos4_board_binfo.board_id = emc->id;
+ exynos4_board_binfo.smp_bootreg_addr = emc->smp_bootreg_addr;
exynos4_board_binfo.kernel_filename = machine->kernel_filename;
exynos4_board_binfo.initrd_filename = machine->initrd_filename;
exynos4_board_binfo.kernel_cmdline = machine->kernel_cmdline;
@@ -117,27 +107,24 @@ static Exynos4210State
*exynos4_boards_init_common(MachineState *machine,
" kernel_filename: %s\n"
" kernel_cmdline: %s\n"
" initrd_filename: %s\n",
- exynos4_board_ram_size[board_type] / 1048576,
- exynos4_board_ram_size[board_type],
+ emc->ram_size / 1048576, emc->ram_size,
machine->kernel_filename,
machine->kernel_cmdline,
machine->initrd_filename);
- return exynos4210_init(get_system_memory(),
- exynos4_board_ram_size[board_type]);
+ return exynos4210_init(get_system_memory(), emc->ram_size);
}
static void nuri_init(MachineState *machine)
{
- exynos4_boards_init_common(machine, EXYNOS4_BOARD_NURI);
+ exynos4_boards_init_common(machine);
arm_load_kernel(ARM_CPU(first_cpu), &exynos4_board_binfo);
}
static void smdkc210_init(MachineState *machine)
{
- Exynos4210State *s = exynos4_boards_init_common(machine,
- EXYNOS4_BOARD_SMDKC210);
+ Exynos4210State *s = exynos4_boards_init_common(machine);
lan9215_init(SMDK_LAN9118_BASE_ADDR,
qemu_irq_invert(s->irq_table[exynos4210_get_irq(37, 1)]));
@@ -147,35 +134,53 @@ static void smdkc210_init(MachineState *machine)
static void nuri_class_init(ObjectClass *oc, void *data)
{
MachineClass *mc = MACHINE_CLASS(oc);
+ Exynos4MachineClass *emc = EXYNOS4_MACHINE_CLASS(oc);
mc->desc = "Samsung NURI board (Exynos4210)";
mc->init = nuri_init;
mc->max_cpus = EXYNOS4210_NCPUS;
+
+ emc->id = 0xD33;
+ emc->smp_bootreg_addr = EXYNOS4210_SECOND_CPU_BOOTREG;
+ emc->ram_size = 0x40000000;
}
static const TypeInfo nuri_type = {
.name = MACHINE_TYPE_NAME("nuri"),
- .parent = TYPE_MACHINE,
+ .parent = TYPE_EXYNOS4_MACHINE,
.class_init = nuri_class_init,
};
static void smdkc210_class_init(ObjectClass *oc, void *data)
{
MachineClass *mc = MACHINE_CLASS(oc);
+ Exynos4MachineClass *emc = EXYNOS4_MACHINE_CLASS(oc);
mc->desc = "Samsung SMDKC210 board (Exynos4210)";
mc->init = smdkc210_init;
mc->max_cpus = EXYNOS4210_NCPUS;
+
+ emc->id = 0xB16;
+ emc->smp_bootreg_addr = EXYNOS4210_SECOND_CPU_BOOTREG;
+ emc->ram_size = 0x40000000;
}
static const TypeInfo smdkc210_type = {
.name = MACHINE_TYPE_NAME("smdkc210"),
- .parent = TYPE_MACHINE,
+ .parent = TYPE_EXYNOS4_MACHINE,
.class_init = smdkc210_class_init,
};
+static const TypeInfo exynos4_machine_type = {
+ .name = TYPE_EXYNOS4_MACHINE,
+ .parent = TYPE_MACHINE,
+ .abstract = true,
+ .class_size = sizeof(Exynos4MachineClass),
+};
+
static void exynos4_machines_init(void)
{
+ type_register_static(&exynos4_machine_type);
type_register_static(&nuri_type);
type_register_static(&smdkc210_type);
}
--
2.1.4
- [Qemu-devel] [PATCH 0/6] machine: Deprecate machine_init(), Andreas Färber, 2015/09/19
- [Qemu-devel] [PATCH 3/6] Introduce config_init() for QemuOpts, Andreas Färber, 2015/09/19
- [Qemu-devel] [PATCH 4/6] Drop machine_init() and MODULE_INIT_MACHINE, Andreas Färber, 2015/09/19
- [Qemu-devel] [PATCH 2/6] hw/s390x/css: Use type_init() instead of machine_init(), Andreas Färber, 2015/09/19
- [Qemu-devel] [PATCH 6/6] pc: Use type_register_static() for machine types, Andreas Färber, 2015/09/19
- [Qemu-devel] [PATCH 1/6] Use type_init() for all machine QOM types, Andreas Färber, 2015/09/19
- [Qemu-devel] [PATCH 5/6] exynos4: Further QOM'ify machines,
Andreas Färber <=
- Re: [Qemu-devel] [PATCH 0/6] machine: Deprecate machine_init(), Eduardo Habkost, 2015/09/21