66dc50f705
Simplify the error handling of the SSCH and RSCH handler avoiding arbitrary and cryptic error codes being used to tell how the instruction is supposed to end. Let the code detecting the condition tell how it's to be handled in a less ambiguous way. It's best to handle SSCH and RSCH in one go as the emulation of the two shares a lot of code. For passthrough this change isn't pure refactoring, but changes the way kernel reported EFAULT is handled. After clarifying the kernel interface we decided that EFAULT shall be mapped to unit exception. Same goes for unexpected error codes and absence of required ORB flags. Signed-off-by: Halil Pasic <pasic@linux.vnet.ibm.com> Message-Id: <20171017140453.51099-4-pasic@linux.vnet.ibm.com> Tested-by: Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com> [CH: cosmetic changes] Reviewed-by: Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com> Signed-off-by: Cornelia Huck <cohuck@redhat.com>
40 lines
1.1 KiB
C
40 lines
1.1 KiB
C
/*
|
|
* s390 CCW Assignment Support
|
|
*
|
|
* Copyright 2017 IBM Corp.
|
|
* Author(s): Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com>
|
|
* Xiao Feng Ren <renxiaof@linux.vnet.ibm.com>
|
|
*
|
|
* This work is licensed under the terms of the GNU GPL, version 2 or (at
|
|
* your option) any later version. See the COPYING file in the top-level
|
|
* directory.
|
|
*/
|
|
|
|
#ifndef HW_S390_CCW_H
|
|
#define HW_S390_CCW_H
|
|
|
|
#include "hw/s390x/ccw-device.h"
|
|
|
|
#define TYPE_S390_CCW "s390-ccw"
|
|
#define S390_CCW_DEVICE(obj) \
|
|
OBJECT_CHECK(S390CCWDevice, (obj), TYPE_S390_CCW)
|
|
#define S390_CCW_DEVICE_CLASS(klass) \
|
|
OBJECT_CLASS_CHECK(S390CCWDeviceClass, (klass), TYPE_S390_CCW)
|
|
#define S390_CCW_DEVICE_GET_CLASS(obj) \
|
|
OBJECT_GET_CLASS(S390CCWDeviceClass, (obj), TYPE_S390_CCW)
|
|
|
|
typedef struct S390CCWDevice {
|
|
CcwDevice parent_obj;
|
|
CssDevId hostid;
|
|
char *mdevid;
|
|
} S390CCWDevice;
|
|
|
|
typedef struct S390CCWDeviceClass {
|
|
CCWDeviceClass parent_class;
|
|
void (*realize)(S390CCWDevice *dev, char *sysfsdev, Error **errp);
|
|
void (*unrealize)(S390CCWDevice *dev, Error **errp);
|
|
IOInstEnding (*handle_request) (SubchDev *sch);
|
|
} S390CCWDeviceClass;
|
|
|
|
#endif
|