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>
This commit is contained in:
David Hildenbrand 2015-05-13 15:06:44 +02:00 committed by Cornelia Huck
parent 25a3c5af57
commit 1723a1b631
2 changed files with 13 additions and 9 deletions

View File

@ -22,12 +22,6 @@
#include "hw/s390x/event-facility.h" #include "hw/s390x/event-facility.h"
#include "hw/s390x/s390-pci-bus.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) static inline SCLPDevice *get_sclp_device(void)
{ {
return SCLP(object_resolve_path_type("", TYPE_SCLP, NULL)); 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, cpu_physical_memory_write(sccb, &work_sccb,
be16_to_cpu(work_sccb.h.length)); be16_to_cpu(work_sccb.h.length));
sclp_service_interrupt(sccb); sclp_c->service_interrupt(sclp, sccb);
out: out:
return r; 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); SCLPEventFacilityClass *efc = EVENT_FACILITY_GET_CLASS(ef);
uint32_t param = sccb & ~3; uint32_t param = sccb & ~3;
@ -440,6 +434,14 @@ void sclp_service_interrupt(uint32_t sccb)
s390_sclp_extint(param); 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 */ /* qemu object creation and initialization functions */
void s390_sclp_init(void) void s390_sclp_init(void)
@ -499,6 +501,7 @@ static void sclp_class_init(ObjectClass *oc, void *data)
sc->unassign_storage = unassign_storage; sc->unassign_storage = unassign_storage;
sc->read_cpu_info = sclp_read_cpu_info; sc->read_cpu_info = sclp_read_cpu_info;
sc->execute = sclp_execute; sc->execute = sclp_execute;
sc->service_interrupt = service_interrupt;
} }
static TypeInfo sclp_info = { static TypeInfo sclp_info = {

View File

@ -192,6 +192,7 @@ typedef struct SCLPDeviceClass {
/* public */ /* public */
void (*execute)(SCLPDevice *sclp, SCCB *sccb, uint32_t code); void (*execute)(SCLPDevice *sclp, SCCB *sccb, uint32_t code);
void (*service_interrupt)(SCLPDevice *sclp, uint32_t sccb);
} SCLPDeviceClass; } SCLPDeviceClass;
typedef struct sclpMemoryHotplugDev sclpMemoryHotplugDev; typedef struct sclpMemoryHotplugDev sclpMemoryHotplugDev;