qemu-cr16/hw/cr16c/sc14450board.c
Jonas Bewig 005bf105aa
WIP
2025-04-14 09:07:59 +02:00

60 lines
1.8 KiB
C

#include "boot.h"
#include "hw/boards.h"
#include "hw/sysbus.h"
#include "qapi/error.h"
#include "qom/object.h"
#include "sc14450.h"
typedef struct SC14450BoardMachineState {
MachineState parent_obj;
SC14450McuState mcu;
} SC14450BoardMachineState;
typedef struct SC14450BoardMachineClass {
MachineClass parent_class;
} SC14450BoardMachineClass;
#define TYPE_SC14450_BOARD_BASE_MACHINE MACHINE_TYPE_NAME("SC14450-board-base")
#define TYPE_SC14450_BOARD_MACHINE MACHINE_TYPE_NAME("SC14450-board")
DECLARE_OBJ_CHECKERS(SC14450BoardMachineState, SC14450BoardMachineClass, SC14450_BOARD_MACHINE, TYPE_SC14450_BOARD_MACHINE)
static void sc14450board_init(MachineState* machine)
{
SC14450BoardMachineState* m_state = SC14450_BOARD_MACHINE(machine);
object_initialize_child(OBJECT(machine), "mcu", &m_state->mcu, TYPE_SC14450S_MCU);
sysbus_realize(SYS_BUS_DEVICE(&m_state->mcu), &error_abort);
if (machine->firmware) {
if (!cr16c_load_firmware(&m_state->mcu.cpu, machine, &m_state->mcu.flash, machine->firmware)) {
exit(1);
}
}
}
static void sc14450board_class_init(ObjectClass* oc, void* data)
{
MachineClass* mc = MACHINE_CLASS(oc);
mc->desc = "SC14450 VoIP + DECT Processor Board";
mc->alias = "sc14450board";
mc->init = sc14450board_init;
mc->default_cpus = 1;
mc->min_cpus = 1;
mc->max_cpus = 1;
mc->no_floppy = 1;
mc->no_cdrom = 1;
mc->no_parallel = 1;
mc->is_default = 1;
}
static const TypeInfo sc14450board_machine_types[] = {
{
.name = TYPE_SC14450_BOARD_MACHINE,
.parent = TYPE_MACHINE,
.instance_size = sizeof(SC14450BoardMachineState),
.class_size = sizeof(SC14450BoardMachineClass),
.class_init = sc14450board_class_init,
}
};
DEFINE_TYPES(sc14450board_machine_types);