@@ -105,6 +105,7 @@ struct NeXTPC {
105
105
106
106
NeXTRTC rtc ;
107
107
qemu_irq rtc_power_irq ;
108
+ qemu_irq rtc_data_irq ;
108
109
};
109
110
110
111
typedef struct next_dma {
@@ -179,8 +180,8 @@ static bool next_rtc_cmd_is_write(uint8_t cmd)
179
180
180
181
static void next_rtc_data_in_irq (void * opaque , int n , int level )
181
182
{
182
- NeXTPC * s = NEXT_PC (opaque );
183
- NeXTRTC * rtc = & s -> rtc ;
183
+ NeXTRTC * rtc = NEXT_RTC (opaque );
184
+ NeXTPC * s = NEXT_PC ( container_of ( rtc , NeXTPC , rtc )) ;
184
185
185
186
if (rtc -> phase < 8 ) {
186
187
rtc -> command = (rtc -> command << 1 ) | level ;
@@ -274,13 +275,10 @@ static void next_scr2_rtc_update(NeXTPC *s)
274
275
/* If we are in going down clock... do something */
275
276
if (((old_scr2 & SCR2_RTCLK ) != (scr2_2 & SCR2_RTCLK )) &&
276
277
((scr2_2 & SCR2_RTCLK ) == 0 )) {
277
- qemu_irq rtc_data_in_irq = qdev_get_gpio_in_named (
278
- DEVICE (s ), "rtc-data-in" , 0 );
279
-
280
278
if (scr2_2 & SCR2_RTDATA ) {
281
- qemu_irq_raise (rtc_data_in_irq );
279
+ qemu_irq_raise (s -> rtc_data_irq );
282
280
} else {
283
- qemu_irq_lower (rtc_data_in_irq );
281
+ qemu_irq_lower (s -> rtc_data_irq );
284
282
}
285
283
}
286
284
} else {
@@ -1028,6 +1026,12 @@ static void next_rtc_reset_hold(Object *obj, ResetType type)
1028
1026
memcpy (rtc -> ram , rtc_ram2 , 32 );
1029
1027
}
1030
1028
1029
+ static void next_rtc_init (Object * obj )
1030
+ {
1031
+ qdev_init_gpio_in_named (DEVICE (obj ), next_rtc_data_in_irq ,
1032
+ "rtc-data-in" , 1 );
1033
+ }
1034
+
1031
1035
static const VMStateDescription next_rtc_vmstate = {
1032
1036
.name = "next-rtc" ,
1033
1037
.version_id = 3 ,
@@ -1057,6 +1061,7 @@ static void next_rtc_class_init(ObjectClass *klass, void *data)
1057
1061
static const TypeInfo next_rtc_info = {
1058
1062
.name = TYPE_NEXT_RTC ,
1059
1063
.parent = TYPE_SYS_BUS_DEVICE ,
1064
+ .instance_init = next_rtc_init ,
1060
1065
.instance_size = sizeof (NeXTRTC ),
1061
1066
.class_init = next_rtc_class_init ,
1062
1067
};
@@ -1128,6 +1133,9 @@ static void next_pc_realize(DeviceState *dev, Error **errp)
1128
1133
if (!sysbus_realize (SYS_BUS_DEVICE (d ), errp )) {
1129
1134
return ;
1130
1135
}
1136
+ /* Data from NeXTPC to RTC */
1137
+ qdev_connect_gpio_out_named (dev , "rtc-data-out" , 0 ,
1138
+ qdev_get_gpio_in_named (d , "rtc-data-in" , 0 ));
1131
1139
}
1132
1140
1133
1141
static void next_pc_init (Object * obj )
@@ -1166,8 +1174,8 @@ static void next_pc_init(Object *obj)
1166
1174
s -> rtc_power_irq = qdev_get_gpio_in (DEVICE (obj ), NEXT_PWR_I );
1167
1175
qdev_init_gpio_in_named (DEVICE (obj ), next_pc_rtc_data_in_irq ,
1168
1176
"pc-rtc-data-in" , 1 );
1169
- qdev_init_gpio_in_named (DEVICE (obj ), next_rtc_data_in_irq ,
1170
- "rtc-data-in " , 1 );
1177
+ qdev_init_gpio_out_named (DEVICE (obj ), & s -> rtc_data_irq ,
1178
+ "rtc-data-out " , 1 );
1171
1179
}
1172
1180
1173
1181
/*
0 commit comments