hw/arm/raspi: Make machines children of abstract RaspiMachineClass
QOM'ify RaspiMachineState. Now machines inherit of RaspiMachineClass. Cc: Igor Mammedov <imammedo@redhat.com> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Acked-by: Igor Mammedov <imammedo@redhat.com> Message-id: 20200208165645.15657-8-f4bug@amsat.org Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
cc360632f6
commit
cb57df6f7f
|
@ -34,10 +34,28 @@
|
||||||
/* Registered machine type (matches RPi Foundation bootloader and U-Boot) */
|
/* Registered machine type (matches RPi Foundation bootloader and U-Boot) */
|
||||||
#define MACH_TYPE_BCM2708 3138
|
#define MACH_TYPE_BCM2708 3138
|
||||||
|
|
||||||
typedef struct RasPiState {
|
typedef struct RaspiMachineState {
|
||||||
|
/*< private >*/
|
||||||
|
MachineState parent_obj;
|
||||||
|
/*< public >*/
|
||||||
BCM283XState soc;
|
BCM283XState soc;
|
||||||
MemoryRegion ram;
|
MemoryRegion ram;
|
||||||
} RasPiState;
|
} RaspiMachineState;
|
||||||
|
|
||||||
|
typedef struct RaspiMachineClass {
|
||||||
|
/*< private >*/
|
||||||
|
MachineClass parent_obj;
|
||||||
|
/*< public >*/
|
||||||
|
} RaspiMachineClass;
|
||||||
|
|
||||||
|
#define TYPE_RASPI_MACHINE MACHINE_TYPE_NAME("raspi-common")
|
||||||
|
#define RASPI_MACHINE(obj) \
|
||||||
|
OBJECT_CHECK(RaspiMachineState, (obj), TYPE_RASPI_MACHINE)
|
||||||
|
|
||||||
|
#define RASPI_MACHINE_CLASS(klass) \
|
||||||
|
OBJECT_CLASS_CHECK(RaspiMachineClass, (klass), TYPE_RASPI_MACHINE)
|
||||||
|
#define RASPI_MACHINE_GET_CLASS(obj) \
|
||||||
|
OBJECT_GET_CLASS(RaspiMachineClass, (obj), TYPE_RASPI_MACHINE)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Board revision codes:
|
* Board revision codes:
|
||||||
|
@ -211,7 +229,7 @@ static void setup_boot(MachineState *machine, int version, size_t ram_size)
|
||||||
|
|
||||||
static void raspi_init(MachineState *machine, uint32_t board_rev)
|
static void raspi_init(MachineState *machine, uint32_t board_rev)
|
||||||
{
|
{
|
||||||
RasPiState *s = g_new0(RasPiState, 1);
|
RaspiMachineState *s = RASPI_MACHINE(machine);
|
||||||
int version = board_version(board_rev);
|
int version = board_version(board_rev);
|
||||||
uint64_t ram_size = board_ram_size(board_rev);
|
uint64_t ram_size = board_ram_size(board_rev);
|
||||||
uint32_t vcram_size;
|
uint32_t vcram_size;
|
||||||
|
@ -264,8 +282,10 @@ static void raspi2_init(MachineState *machine)
|
||||||
raspi_init(machine, 0xa21041);
|
raspi_init(machine, 0xa21041);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void raspi2_machine_init(MachineClass *mc)
|
static void raspi2_machine_class_init(ObjectClass *oc, void *data)
|
||||||
{
|
{
|
||||||
|
MachineClass *mc = MACHINE_CLASS(oc);
|
||||||
|
|
||||||
mc->desc = "Raspberry Pi 2B";
|
mc->desc = "Raspberry Pi 2B";
|
||||||
mc->init = raspi2_init;
|
mc->init = raspi2_init;
|
||||||
mc->block_default_type = IF_SD;
|
mc->block_default_type = IF_SD;
|
||||||
|
@ -278,7 +298,6 @@ static void raspi2_machine_init(MachineClass *mc)
|
||||||
mc->default_ram_size = 1 * GiB;
|
mc->default_ram_size = 1 * GiB;
|
||||||
mc->ignore_memory_transaction_failures = true;
|
mc->ignore_memory_transaction_failures = true;
|
||||||
};
|
};
|
||||||
DEFINE_MACHINE("raspi2", raspi2_machine_init)
|
|
||||||
|
|
||||||
#ifdef TARGET_AARCH64
|
#ifdef TARGET_AARCH64
|
||||||
static void raspi3_init(MachineState *machine)
|
static void raspi3_init(MachineState *machine)
|
||||||
|
@ -286,8 +305,10 @@ static void raspi3_init(MachineState *machine)
|
||||||
raspi_init(machine, 0xa02082);
|
raspi_init(machine, 0xa02082);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void raspi3_machine_init(MachineClass *mc)
|
static void raspi3_machine_class_init(ObjectClass *oc, void *data)
|
||||||
{
|
{
|
||||||
|
MachineClass *mc = MACHINE_CLASS(oc);
|
||||||
|
|
||||||
mc->desc = "Raspberry Pi 3B";
|
mc->desc = "Raspberry Pi 3B";
|
||||||
mc->init = raspi3_init;
|
mc->init = raspi3_init;
|
||||||
mc->block_default_type = IF_SD;
|
mc->block_default_type = IF_SD;
|
||||||
|
@ -299,5 +320,26 @@ static void raspi3_machine_init(MachineClass *mc)
|
||||||
mc->default_cpus = BCM283X_NCPUS;
|
mc->default_cpus = BCM283X_NCPUS;
|
||||||
mc->default_ram_size = 1 * GiB;
|
mc->default_ram_size = 1 * GiB;
|
||||||
}
|
}
|
||||||
DEFINE_MACHINE("raspi3", raspi3_machine_init)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static const TypeInfo raspi_machine_types[] = {
|
||||||
|
{
|
||||||
|
.name = MACHINE_TYPE_NAME("raspi2"),
|
||||||
|
.parent = TYPE_RASPI_MACHINE,
|
||||||
|
.class_init = raspi2_machine_class_init,
|
||||||
|
#ifdef TARGET_AARCH64
|
||||||
|
}, {
|
||||||
|
.name = MACHINE_TYPE_NAME("raspi3"),
|
||||||
|
.parent = TYPE_RASPI_MACHINE,
|
||||||
|
.class_init = raspi3_machine_class_init,
|
||||||
|
#endif
|
||||||
|
}, {
|
||||||
|
.name = TYPE_RASPI_MACHINE,
|
||||||
|
.parent = TYPE_MACHINE,
|
||||||
|
.instance_size = sizeof(RaspiMachineState),
|
||||||
|
.class_size = sizeof(RaspiMachineClass),
|
||||||
|
.abstract = true,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
DEFINE_TYPES(raspi_machine_types)
|
||||||
|
|
Loading…
Reference in a new issue