mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
next-cube: QOMify NeXTRTC
This is to allow the RTC functionality to be maintained within its own separate device rather than as part of the next-pc device. Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Message-ID: <20241222130012.1013374-26-mark.cave-ayland@ilande.co.uk> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Thomas Huth <huth@tuxfamily.org>
This commit is contained in:
parent
501b5099f6
commit
49100693e9
1 changed files with 50 additions and 21 deletions
|
@ -42,7 +42,13 @@
|
|||
#define RAM_SIZE 0x4000000
|
||||
#define ROM_FILE "Rev_2.5_v66.bin"
|
||||
|
||||
typedef struct NeXTRTC {
|
||||
|
||||
#define TYPE_NEXT_RTC "next-rtc"
|
||||
OBJECT_DECLARE_SIMPLE_TYPE(NeXTRTC, NEXT_RTC)
|
||||
|
||||
struct NeXTRTC {
|
||||
SysBusDevice parent_obj;
|
||||
|
||||
int8_t phase;
|
||||
uint8_t ram[32];
|
||||
uint8_t command;
|
||||
|
@ -50,7 +56,7 @@ typedef struct NeXTRTC {
|
|||
uint8_t status;
|
||||
uint8_t control;
|
||||
uint8_t retval;
|
||||
} NeXTRTC;
|
||||
};
|
||||
|
||||
#define TYPE_NEXT_SCSI "next-scsi"
|
||||
OBJECT_DECLARE_SIMPLE_TYPE(NeXTSCSI, NEXT_SCSI)
|
||||
|
@ -1012,6 +1018,37 @@ static const MemoryRegionOps next_dummy_en_ops = {
|
|||
.endianness = DEVICE_BIG_ENDIAN,
|
||||
};
|
||||
|
||||
static const VMStateDescription next_rtc_vmstate = {
|
||||
.name = "next-rtc",
|
||||
.version_id = 3,
|
||||
.minimum_version_id = 3,
|
||||
.fields = (const VMStateField[]) {
|
||||
VMSTATE_INT8(phase, NeXTRTC),
|
||||
VMSTATE_UINT8_ARRAY(ram, NeXTRTC, 32),
|
||||
VMSTATE_UINT8(command, NeXTRTC),
|
||||
VMSTATE_UINT8(value, NeXTRTC),
|
||||
VMSTATE_UINT8(status, NeXTRTC),
|
||||
VMSTATE_UINT8(control, NeXTRTC),
|
||||
VMSTATE_UINT8(retval, NeXTRTC),
|
||||
VMSTATE_END_OF_LIST()
|
||||
},
|
||||
};
|
||||
|
||||
static void next_rtc_class_init(ObjectClass *klass, void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
|
||||
dc->desc = "NeXT RTC";
|
||||
dc->vmsd = &next_rtc_vmstate;
|
||||
}
|
||||
|
||||
static const TypeInfo next_rtc_info = {
|
||||
.name = TYPE_NEXT_RTC,
|
||||
.parent = TYPE_SYS_BUS_DEVICE,
|
||||
.instance_size = sizeof(NeXTRTC),
|
||||
.class_init = next_rtc_class_init,
|
||||
};
|
||||
|
||||
static void next_pc_rtc_data_in_irq(void *opaque, int n, int level)
|
||||
{
|
||||
NeXTPC *s = NEXT_PC(opaque);
|
||||
|
@ -1078,6 +1115,12 @@ static void next_pc_realize(DeviceState *dev, Error **errp)
|
|||
}
|
||||
sysbus_connect_irq(sbd, 0, qdev_get_gpio_in(dev, NEXT_SCC_I));
|
||||
sysbus_connect_irq(sbd, 1, qdev_get_gpio_in(dev, NEXT_SCC_DMA_I));
|
||||
|
||||
/* RTC */
|
||||
d = DEVICE(&s->rtc);
|
||||
if (!sysbus_realize(SYS_BUS_DEVICE(d), errp)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static void next_pc_init(Object *obj)
|
||||
|
@ -1111,6 +1154,8 @@ static void next_pc_init(Object *obj)
|
|||
"next.timer", 4);
|
||||
sysbus_init_mmio(sbd, &s->timer_mem);
|
||||
|
||||
object_initialize_child(obj, "rtc", &s->rtc, TYPE_NEXT_RTC);
|
||||
|
||||
s->rtc_power_irq = qdev_get_gpio_in(DEVICE(obj), NEXT_PWR_I);
|
||||
qdev_init_gpio_in_named(DEVICE(obj), next_pc_rtc_data_in_irq,
|
||||
"pc-rtc-data-in", 1);
|
||||
|
@ -1128,26 +1173,10 @@ static const Property next_pc_properties[] = {
|
|||
DEFINE_PROP_LINK("cpu", NeXTPC, cpu, TYPE_M68K_CPU, M68kCPU *),
|
||||
};
|
||||
|
||||
static const VMStateDescription next_rtc_vmstate = {
|
||||
.name = "next-rtc",
|
||||
.version_id = 2,
|
||||
.minimum_version_id = 2,
|
||||
.fields = (const VMStateField[]) {
|
||||
VMSTATE_INT8(phase, NeXTRTC),
|
||||
VMSTATE_UINT8_ARRAY(ram, NeXTRTC, 32),
|
||||
VMSTATE_UINT8(command, NeXTRTC),
|
||||
VMSTATE_UINT8(value, NeXTRTC),
|
||||
VMSTATE_UINT8(status, NeXTRTC),
|
||||
VMSTATE_UINT8(control, NeXTRTC),
|
||||
VMSTATE_UINT8(retval, NeXTRTC),
|
||||
VMSTATE_END_OF_LIST()
|
||||
},
|
||||
};
|
||||
|
||||
static const VMStateDescription next_pc_vmstate = {
|
||||
.name = "next-pc",
|
||||
.version_id = 3,
|
||||
.minimum_version_id = 3,
|
||||
.version_id = 4,
|
||||
.minimum_version_id = 4,
|
||||
.fields = (const VMStateField[]) {
|
||||
VMSTATE_UINT32(scr1, NeXTPC),
|
||||
VMSTATE_UINT32(scr2, NeXTPC),
|
||||
|
@ -1155,7 +1184,6 @@ static const VMStateDescription next_pc_vmstate = {
|
|||
VMSTATE_UINT32(int_mask, NeXTPC),
|
||||
VMSTATE_UINT32(int_status, NeXTPC),
|
||||
VMSTATE_UINT32(led, NeXTPC),
|
||||
VMSTATE_STRUCT(rtc, NeXTPC, 0, next_rtc_vmstate, NeXTRTC),
|
||||
VMSTATE_END_OF_LIST()
|
||||
},
|
||||
};
|
||||
|
@ -1305,6 +1333,7 @@ static void next_register_type(void)
|
|||
type_register_static(&next_typeinfo);
|
||||
type_register_static(&next_pc_info);
|
||||
type_register_static(&next_scsi_info);
|
||||
type_register_static(&next_rtc_info);
|
||||
}
|
||||
|
||||
type_init(next_register_type)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue