[PATCH 15/17] hw/avr: Pass mcu_type to class_base_init via .class_data

Richard Henderson posted 17 patches 1 week, 1 day ago
There is a newer version of this series
[PATCH 15/17] hw/avr: Pass mcu_type to class_base_init via .class_data
Posted by Richard Henderson 1 week, 1 day ago
We want to be able to do more common work on MachineClass.
Pass the class name as a string in .class_data.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 hw/avr/arduino.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/hw/avr/arduino.c b/hw/avr/arduino.c
index 48ef478346..29cb776848 100644
--- a/hw/avr/arduino.c
+++ b/hw/avr/arduino.c
@@ -69,6 +69,13 @@ static void arduino_machine_class_init(ObjectClass *oc, void *data)
     mc->no_parallel = 1;
 }
 
+static void arduino_machine_class_base_init(ObjectClass *oc, void *data)
+{
+    ArduinoMachineClass *amc = ARDUINO_MACHINE_CLASS(oc);
+
+    amc->mcu_type = data;
+}
+
 static void arduino_duemilanove_class_init(ObjectClass *oc, void *data)
 {
     MachineClass *mc = MACHINE_CLASS(oc);
@@ -80,7 +87,6 @@ static void arduino_duemilanove_class_init(ObjectClass *oc, void *data)
      */
     mc->desc        = "Arduino Duemilanove (ATmega168)",
     mc->alias       = "2009";
-    amc->mcu_type   = TYPE_ATMEGA168_MCU;
     amc->xtal_hz    = 16 * 1000 * 1000;
 };
 
@@ -95,7 +101,6 @@ static void arduino_uno_class_init(ObjectClass *oc, void *data)
      */
     mc->desc        = "Arduino UNO (ATmega328P)";
     mc->alias       = "uno";
-    amc->mcu_type   = TYPE_ATMEGA328_MCU;
     amc->xtal_hz    = 16 * 1000 * 1000;
 };
 
@@ -110,7 +115,6 @@ static void arduino_mega_class_init(ObjectClass *oc, void *data)
      */
     mc->desc        = "Arduino Mega (ATmega1280)";
     mc->alias       = "mega";
-    amc->mcu_type   = TYPE_ATMEGA1280_MCU;
     amc->xtal_hz    = 16 * 1000 * 1000;
 };
 
@@ -125,7 +129,6 @@ static void arduino_mega2560_class_init(ObjectClass *oc, void *data)
      */
     mc->desc        = "Arduino Mega 2560 (ATmega2560)";
     mc->alias       = "mega2560";
-    amc->mcu_type   = TYPE_ATMEGA2560_MCU;
     amc->xtal_hz    = 16 * 1000 * 1000; /* CSTCE16M0V53-R0 */
 };
 
@@ -134,24 +137,29 @@ static const TypeInfo arduino_machine_types[] = {
         .name          = MACHINE_TYPE_NAME("arduino-duemilanove"),
         .parent        = TYPE_ARDUINO_MACHINE,
         .class_init    = arduino_duemilanove_class_init,
+        .class_data    = (void *)TYPE_ATMEGA168_MCU,
     }, {
         .name          = MACHINE_TYPE_NAME("arduino-uno"),
         .parent        = TYPE_ARDUINO_MACHINE,
         .class_init    = arduino_uno_class_init,
+        .class_data    = (void *)TYPE_ATMEGA328_MCU,
     }, {
         .name          = MACHINE_TYPE_NAME("arduino-mega"),
         .parent        = TYPE_ARDUINO_MACHINE,
         .class_init    = arduino_mega_class_init,
+        .class_data    = (void *)TYPE_ATMEGA1280_MCU,
     }, {
         .name          = MACHINE_TYPE_NAME("arduino-mega-2560-v3"),
         .parent        = TYPE_ARDUINO_MACHINE,
         .class_init    = arduino_mega2560_class_init,
+        .class_data    = (void *)TYPE_ATMEGA2560_MCU,
     }, {
         .name           = TYPE_ARDUINO_MACHINE,
         .parent         = TYPE_MACHINE,
         .instance_size  = sizeof(ArduinoMachineState),
         .class_size     = sizeof(ArduinoMachineClass),
         .class_init     = arduino_machine_class_init,
+        .class_base_init = arduino_machine_class_base_init,
         .abstract       = true,
     }
 };
-- 
2.43.0
Re: [PATCH 15/17] hw/avr: Pass mcu_type to class_base_init via .class_data
Posted by Pierrick Bouvier 1 week ago
On 3/23/25 10:37, Richard Henderson wrote:
> We want to be able to do more common work on MachineClass.
> Pass the class name as a string in .class_data.
> 
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
>   hw/avr/arduino.c | 16 ++++++++++++----
>   1 file changed, 12 insertions(+), 4 deletions(-)

Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Re: [PATCH 15/17] hw/avr: Pass mcu_type to class_base_init via .class_data
Posted by Philippe Mathieu-Daudé 1 week, 1 day ago
On 23/3/25 18:37, Richard Henderson wrote:
> We want to be able to do more common work on MachineClass.
> Pass the class name as a string in .class_data.
> 
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
>   hw/avr/arduino.c | 16 ++++++++++++----
>   1 file changed, 12 insertions(+), 4 deletions(-)

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>