aboutsummaryrefslogtreecommitdiff
path: root/hw/m48t59.c
diff options
context:
space:
mode:
Diffstat (limited to 'hw/m48t59.c')
-rw-r--r--hw/m48t59.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/hw/m48t59.c b/hw/m48t59.c
index d5a91aa5d1..bb58419d2a 100644
--- a/hw/m48t59.c
+++ b/hw/m48t59.c
@@ -618,10 +618,8 @@ static int m48t59_load(QEMUFile *f, void *opaque, int version_id)
return 0;
}
-static void m48t59_reset(void *opaque)
+static void m48t59_reset_common(m48t59_t *NVRAM)
{
- m48t59_t *NVRAM = opaque;
-
NVRAM->addr = 0;
NVRAM->lock = 0;
if (NVRAM->alrm_timer != NULL)
@@ -631,6 +629,22 @@ static void m48t59_reset(void *opaque)
qemu_del_timer(NVRAM->wd_timer);
}
+static void m48t59_reset_isa(DeviceState *d)
+{
+ M48t59ISAState *isa = container_of(d, M48t59ISAState, busdev.qdev);
+ m48t59_t *NVRAM = &isa->state;
+
+ m48t59_reset_common(NVRAM);
+}
+
+static void m48t59_reset_sysbus(DeviceState *d)
+{
+ M48t59SysBusState *sys = container_of(d, M48t59SysBusState, busdev.qdev);
+ m48t59_t *NVRAM = &sys->state;
+
+ m48t59_reset_common(NVRAM);
+}
+
/* Initialisation routine */
m48t59_t *m48t59_init (qemu_irq IRQ, target_phys_addr_t mem_base,
uint32_t io_base, uint16_t size,
@@ -691,7 +705,6 @@ static void m48t59_init_common(m48t59_t *s)
}
qemu_get_timedate(&s->alarm, 0);
- qemu_register_reset(m48t59_reset, s);
register_savevm("m48t59", -1, 1, m48t59_save, m48t59_load, s);
}
@@ -725,6 +738,7 @@ static ISADeviceInfo m48t59_isa_info = {
.init = m48t59_init_isa1,
.qdev.name = "m48t59_isa",
.qdev.size = sizeof(M48t59ISAState),
+ .qdev.reset = m48t59_reset_isa,
.qdev.no_user = 1,
.qdev.props = (Property[]) {
DEFINE_PROP_UINT32("size", M48t59ISAState, state.size, -1),
@@ -738,6 +752,7 @@ static SysBusDeviceInfo m48t59_info = {
.init = m48t59_init1,
.qdev.name = "m48t59",
.qdev.size = sizeof(M48t59SysBusState),
+ .qdev.reset = m48t59_reset_sysbus,
.qdev.props = (Property[]) {
DEFINE_PROP_UINT32("size", M48t59SysBusState, state.size, -1),
DEFINE_PROP_UINT32("type", M48t59SysBusState, state.type, -1),