From: Heinz Graalfs Date: Wed, 4 Sep 2013 10:55:45 +0000 (+0200) Subject: s390/sclp: add reset() functions X-Git-Tag: qemu-xen-4.5.0-rc1~448^2~6 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=3af6de321f39eda37d60a26559c63029c0d5b4c9;p=qemu-upstream-4.5-testing.git s390/sclp: add reset() functions Add reset() functions for event-facility, sclpconsole, and sclpquiesce. The reset() functions perform variable initialization at IPL and e.g. when monitor system_reset is called. Signed-off-by: Heinz Graalfs Reviewed-by: Thomas Huth Reviewed-by: Alexander Graf Signed-off-by: Christian Borntraeger --- diff --git a/hw/char/sclpconsole.c b/hw/char/sclpconsole.c index 776f2840e..12488afca 100644 --- a/hw/char/sclpconsole.c +++ b/hw/char/sclpconsole.c @@ -228,10 +228,6 @@ static int console_init(SCLPEvent *event) return -1; } console_available = true; - scon->iov_sclp = 0; - scon->iov_bs = 0; - scon->iov_data_len = 0; - scon->iov_sclp_rest = 0; event->event_type = SCLP_EVENT_ASCII_CONSOLE_DATA; if (scon->chr) { qemu_chr_add_handlers(scon->chr, chr_can_read, @@ -243,6 +239,18 @@ static int console_init(SCLPEvent *event) return 0; } +static void console_reset(DeviceState *dev) +{ + SCLPEvent *event = SCLP_EVENT(dev); + SCLPConsole *scon = DO_UPCAST(SCLPConsole, event, event); + + event->event_pending = false; + scon->iov_sclp = 0; + scon->iov_bs = 0; + scon->iov_data_len = 0; + scon->iov_sclp_rest = 0; +} + static int console_exit(SCLPEvent *event) { return 0; @@ -259,6 +267,7 @@ static void console_class_init(ObjectClass *klass, void *data) SCLPEventClass *ec = SCLP_EVENT_CLASS(klass); dc->props = console_properties; + dc->reset = console_reset; dc->vmsd = &vmstate_sclpconsole; ec->init = console_init; ec->exit = console_exit; diff --git a/hw/s390x/event-facility.c b/hw/s390x/event-facility.c index a3aceef8f..d45968fa4 100644 --- a/hw/s390x/event-facility.c +++ b/hw/s390x/event-facility.c @@ -338,10 +338,19 @@ static int init_event_facility(S390SCLPDevice *sdev) return 0; } +static void reset_event_facility(DeviceState *dev) +{ + S390SCLPDevice *sdev = SCLP_S390_DEVICE(dev); + + sdev->ef->receive_mask = 0; +} + static void init_event_facility_class(ObjectClass *klass, void *data) { + DeviceClass *dc = DEVICE_CLASS(klass); S390SCLPDeviceClass *k = SCLP_S390_DEVICE_CLASS(klass); + dc->reset = reset_event_facility; k->init = init_event_facility; } diff --git a/hw/s390x/sclpquiesce.c b/hw/s390x/sclpquiesce.c index d335251c0..73a18ea3b 100644 --- a/hw/s390x/sclpquiesce.c +++ b/hw/s390x/sclpquiesce.c @@ -105,11 +105,19 @@ static int quiesce_init(SCLPEvent *event) return 0; } +static void quiesce_reset(DeviceState *dev) +{ + SCLPEvent *event = SCLP_EVENT(dev); + + event->event_pending = false; +} + static void quiesce_class_init(ObjectClass *klass, void *data) { DeviceClass *dc = DEVICE_CLASS(klass); SCLPEventClass *k = SCLP_EVENT_CLASS(klass); + dc->reset = quiesce_reset; dc->vmsd = &vmstate_sclpquiesce; k->init = quiesce_init;