qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Andreas Färber" <afaerber@suse.de>
To: qemu-devel@nongnu.org
Cc: "Peter Maydell" <peter.maydell@linaro.org>,
	"Evgeny Voevodin" <e.voevodin@samsung.com>,
	"Igor Mitsyanko" <i.mitsyanko@gmail.com>,
	"Dmitry Solodkiy" <d.solodkiy@samsung.com>,
	"Maksim Kozlov" <m.kozlov@samsung.com>,
	"Andreas Färber" <afaerber@suse.de>
Subject: [Qemu-devel] [PATCH 5/6] exynos4: Further QOM'ify machines
Date: Sat, 19 Sep 2015 17:36:42 +0200	[thread overview]
Message-ID: <1442677004-4482-6-git-send-email-afaerber@suse.de> (raw)
In-Reply-To: <1442677004-4482-1-git-send-email-afaerber@suse.de>

Drop board enumeration in favor of an abstract type, and move static
tables into class initialization.

Signed-off-by: Andreas Färber <afaerber@suse.de>
---
 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

  parent reply	other threads:[~2015-09-19 15:36 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-19 15:36 [Qemu-devel] [PATCH 0/6] machine: Deprecate machine_init() Andreas Färber
2015-09-19 15:36 ` [Qemu-devel] [PATCH 1/6] Use type_init() for all machine QOM types Andreas Färber
2015-09-19 15:36 ` [Qemu-devel] [PATCH 2/6] hw/s390x/css: Use type_init() instead of machine_init() Andreas Färber
2015-09-21  8:04   ` Christian Borntraeger
2015-09-19 15:36 ` [Qemu-devel] [PATCH 3/6] Introduce config_init() for QemuOpts Andreas Färber
2015-09-19 15:36 ` [Qemu-devel] [PATCH 4/6] Drop machine_init() and MODULE_INIT_MACHINE Andreas Färber
2015-09-19 15:36 ` Andreas Färber [this message]
2015-09-19 15:36 ` [Qemu-devel] [PATCH 6/6] pc: Use type_register_static() for machine types Andreas Färber
2015-09-21 15:53 ` [Qemu-devel] [PATCH 0/6] machine: Deprecate machine_init() Eduardo Habkost

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1442677004-4482-6-git-send-email-afaerber@suse.de \
    --to=afaerber@suse.de \
    --cc=d.solodkiy@samsung.com \
    --cc=e.voevodin@samsung.com \
    --cc=i.mitsyanko@gmail.com \
    --cc=m.kozlov@samsung.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).