diff options
author | David Hildenbrand <dahi@linux.vnet.ibm.com> | 2015-05-13 15:06:44 +0200 |
---|---|---|
committer | Cornelia Huck <cornelia.huck@de.ibm.com> | 2015-09-07 16:10:43 +0200 |
commit | 1723a1b6313851d9704961e1f527312ee0a5fce4 (patch) | |
tree | 0c937fc5327759aac2ecf9d020d1de10742b713f | |
parent | 25a3c5af57db0319f5cfb4c439efbc78b230599e (diff) | |
download | qemu-1723a1b6313851d9704961e1f527312ee0a5fce4.zip qemu-1723a1b6313851d9704961e1f527312ee0a5fce4.tar.gz qemu-1723a1b6313851d9704961e1f527312ee0a5fce4.tar.bz2 |
s390/sclp: move sclp_service_interrupt into the sclp device
Let's make that function a method of the new sclp device, keeping
the wrapper for existing users.
We can now let go of get_event_facility().
Reviewed-by: Matthew Rosato <mjrosato@linux.vnet.ibm.com>
Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
-rw-r--r-- | hw/s390x/sclp.c | 21 | ||||
-rw-r--r-- | include/hw/s390x/sclp.h | 1 |
2 files changed, 13 insertions, 9 deletions
diff --git a/hw/s390x/sclp.c b/hw/s390x/sclp.c index c367ff8..87f4902 100644 --- a/hw/s390x/sclp.c +++ b/hw/s390x/sclp.c @@ -22,12 +22,6 @@ #include "hw/s390x/event-facility.h" #include "hw/s390x/s390-pci-bus.h" -static inline SCLPEventFacility *get_event_facility(void) -{ - return EVENT_FACILITY(object_resolve_path_type("", TYPE_SCLP_EVENT_FACILITY, - NULL)); -} - static inline SCLPDevice *get_sclp_device(void) { return SCLP(object_resolve_path_type("", TYPE_SCLP, NULL)); @@ -417,15 +411,15 @@ int sclp_service_call(CPUS390XState *env, uint64_t sccb, uint32_t code) cpu_physical_memory_write(sccb, &work_sccb, be16_to_cpu(work_sccb.h.length)); - sclp_service_interrupt(sccb); + sclp_c->service_interrupt(sclp, sccb); out: return r; } -void sclp_service_interrupt(uint32_t sccb) +static void service_interrupt(SCLPDevice *sclp, uint32_t sccb) { - SCLPEventFacility *ef = get_event_facility(); + SCLPEventFacility *ef = sclp->event_facility; SCLPEventFacilityClass *efc = EVENT_FACILITY_GET_CLASS(ef); uint32_t param = sccb & ~3; @@ -440,6 +434,14 @@ void sclp_service_interrupt(uint32_t sccb) s390_sclp_extint(param); } +void sclp_service_interrupt(uint32_t sccb) +{ + SCLPDevice *sclp = get_sclp_device(); + SCLPDeviceClass *sclp_c = SCLP_GET_CLASS(sclp); + + sclp_c->service_interrupt(sclp, sccb); +} + /* qemu object creation and initialization functions */ void s390_sclp_init(void) @@ -499,6 +501,7 @@ static void sclp_class_init(ObjectClass *oc, void *data) sc->unassign_storage = unassign_storage; sc->read_cpu_info = sclp_read_cpu_info; sc->execute = sclp_execute; + sc->service_interrupt = service_interrupt; } static TypeInfo sclp_info = { diff --git a/include/hw/s390x/sclp.h b/include/hw/s390x/sclp.h index 60db98c..50094eb 100644 --- a/include/hw/s390x/sclp.h +++ b/include/hw/s390x/sclp.h @@ -192,6 +192,7 @@ typedef struct SCLPDeviceClass { /* public */ void (*execute)(SCLPDevice *sclp, SCCB *sccb, uint32_t code); + void (*service_interrupt)(SCLPDevice *sclp, uint32_t sccb); } SCLPDeviceClass; typedef struct sclpMemoryHotplugDev sclpMemoryHotplugDev; |