s390x/sclp: clean up sclp masks
Introduce an sccb_mask_t to be used for SCLP event masks instead of just unsigned int or uint32_t. This will allow later to extend the mask with more ease. Signed-off-by: Claudio Imbrenda <imbrenda@linux.vnet.ibm.com> Message-Id: <1519407778-23095-3-git-send-email-imbrenda@linux.vnet.ibm.com> Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com> Signed-off-by: Cornelia Huck <cohuck@redhat.com>
This commit is contained in:
parent
bc61c8c626
commit
1ffed98f24
@ -102,12 +102,12 @@ static bool can_handle_event(uint8_t type)
|
|||||||
return type == SCLP_EVENT_MESSAGE || type == SCLP_EVENT_PMSGCMD;
|
return type == SCLP_EVENT_MESSAGE || type == SCLP_EVENT_PMSGCMD;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int send_mask(void)
|
static sccb_mask_t send_mask(void)
|
||||||
{
|
{
|
||||||
return SCLP_EVENT_MASK_OP_CMD | SCLP_EVENT_MASK_PMSGCMD;
|
return SCLP_EVENT_MASK_OP_CMD | SCLP_EVENT_MASK_PMSGCMD;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int receive_mask(void)
|
static sccb_mask_t receive_mask(void)
|
||||||
{
|
{
|
||||||
return SCLP_EVENT_MASK_MSG | SCLP_EVENT_MASK_PMSGCMD;
|
return SCLP_EVENT_MASK_MSG | SCLP_EVENT_MASK_PMSGCMD;
|
||||||
}
|
}
|
||||||
|
@ -83,12 +83,12 @@ static bool can_handle_event(uint8_t type)
|
|||||||
return type == SCLP_EVENT_ASCII_CONSOLE_DATA;
|
return type == SCLP_EVENT_ASCII_CONSOLE_DATA;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int send_mask(void)
|
static sccb_mask_t send_mask(void)
|
||||||
{
|
{
|
||||||
return SCLP_EVENT_MASK_MSG_ASCII;
|
return SCLP_EVENT_MASK_MSG_ASCII;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int receive_mask(void)
|
static sccb_mask_t receive_mask(void)
|
||||||
{
|
{
|
||||||
return SCLP_EVENT_MASK_MSG_ASCII;
|
return SCLP_EVENT_MASK_MSG_ASCII;
|
||||||
}
|
}
|
||||||
|
@ -29,8 +29,8 @@ typedef struct SCLPEventsBus {
|
|||||||
struct SCLPEventFacility {
|
struct SCLPEventFacility {
|
||||||
SysBusDevice parent_obj;
|
SysBusDevice parent_obj;
|
||||||
SCLPEventsBus sbus;
|
SCLPEventsBus sbus;
|
||||||
/* guest' receive mask */
|
/* guest's receive mask */
|
||||||
unsigned int receive_mask;
|
sccb_mask_t receive_mask;
|
||||||
/*
|
/*
|
||||||
* when false, we keep the same broken, backwards compatible behaviour as
|
* when false, we keep the same broken, backwards compatible behaviour as
|
||||||
* before, allowing only masks of size exactly 4; when true, we implement
|
* before, allowing only masks of size exactly 4; when true, we implement
|
||||||
@ -61,9 +61,9 @@ static bool event_pending(SCLPEventFacility *ef)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int get_host_send_mask(SCLPEventFacility *ef)
|
static sccb_mask_t get_host_send_mask(SCLPEventFacility *ef)
|
||||||
{
|
{
|
||||||
unsigned int mask;
|
sccb_mask_t mask;
|
||||||
BusChild *kid;
|
BusChild *kid;
|
||||||
SCLPEventClass *child;
|
SCLPEventClass *child;
|
||||||
|
|
||||||
@ -77,9 +77,9 @@ static unsigned int get_host_send_mask(SCLPEventFacility *ef)
|
|||||||
return mask;
|
return mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int get_host_receive_mask(SCLPEventFacility *ef)
|
static sccb_mask_t get_host_receive_mask(SCLPEventFacility *ef)
|
||||||
{
|
{
|
||||||
unsigned int mask;
|
sccb_mask_t mask;
|
||||||
BusChild *kid;
|
BusChild *kid;
|
||||||
SCLPEventClass *child;
|
SCLPEventClass *child;
|
||||||
|
|
||||||
@ -189,7 +189,7 @@ out:
|
|||||||
}
|
}
|
||||||
|
|
||||||
static uint16_t handle_sccb_read_events(SCLPEventFacility *ef, SCCB *sccb,
|
static uint16_t handle_sccb_read_events(SCLPEventFacility *ef, SCCB *sccb,
|
||||||
unsigned int mask)
|
sccb_mask_t mask)
|
||||||
{
|
{
|
||||||
uint16_t rc;
|
uint16_t rc;
|
||||||
int slen;
|
int slen;
|
||||||
@ -242,8 +242,8 @@ static void copy_mask(uint8_t *dst, uint8_t *src, uint16_t dst_len,
|
|||||||
|
|
||||||
static void read_event_data(SCLPEventFacility *ef, SCCB *sccb)
|
static void read_event_data(SCLPEventFacility *ef, SCCB *sccb)
|
||||||
{
|
{
|
||||||
unsigned int sclp_active_selection_mask;
|
sccb_mask_t sclp_active_selection_mask;
|
||||||
unsigned int sclp_cp_receive_mask;
|
sccb_mask_t sclp_cp_receive_mask;
|
||||||
|
|
||||||
ReadEventData *red = (ReadEventData *) sccb;
|
ReadEventData *red = (ReadEventData *) sccb;
|
||||||
|
|
||||||
@ -285,7 +285,7 @@ static void write_event_mask(SCLPEventFacility *ef, SCCB *sccb)
|
|||||||
{
|
{
|
||||||
WriteEventMask *we_mask = (WriteEventMask *) sccb;
|
WriteEventMask *we_mask = (WriteEventMask *) sccb;
|
||||||
uint16_t mask_length = be16_to_cpu(we_mask->mask_length);
|
uint16_t mask_length = be16_to_cpu(we_mask->mask_length);
|
||||||
uint32_t tmp_mask;
|
sccb_mask_t tmp_mask;
|
||||||
|
|
||||||
if (!mask_length || (mask_length > SCLP_EVENT_MASK_LEN_MAX) ||
|
if (!mask_length || (mask_length > SCLP_EVENT_MASK_LEN_MAX) ||
|
||||||
((mask_length != 4) && !ef->allow_all_mask_sizes)) {
|
((mask_length != 4) && !ef->allow_all_mask_sizes)) {
|
||||||
|
@ -37,12 +37,12 @@ void raise_irq_cpu_hotplug(void)
|
|||||||
sclp_service_interrupt(0);
|
sclp_service_interrupt(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int send_mask(void)
|
static sccb_mask_t send_mask(void)
|
||||||
{
|
{
|
||||||
return SCLP_EVENT_MASK_CONFIG_MGT_DATA;
|
return SCLP_EVENT_MASK_CONFIG_MGT_DATA;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int receive_mask(void)
|
static sccb_mask_t receive_mask(void)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -28,12 +28,12 @@ static bool can_handle_event(uint8_t type)
|
|||||||
return type == SCLP_EVENT_SIGNAL_QUIESCE;
|
return type == SCLP_EVENT_SIGNAL_QUIESCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int send_mask(void)
|
static sccb_mask_t send_mask(void)
|
||||||
{
|
{
|
||||||
return SCLP_EVENT_MASK_SIGNAL_QUIESCE;
|
return SCLP_EVENT_MASK_SIGNAL_QUIESCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int receive_mask(void)
|
static sccb_mask_t receive_mask(void)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -28,12 +28,14 @@
|
|||||||
#define SCLP_EVENT_SIGNAL_QUIESCE 0x1d
|
#define SCLP_EVENT_SIGNAL_QUIESCE 0x1d
|
||||||
|
|
||||||
/* SCLP event masks */
|
/* SCLP event masks */
|
||||||
#define SCLP_EVENT_MASK_SIGNAL_QUIESCE 0x00000008
|
#define SCLP_EVMASK(T) (1ULL << (sizeof(sccb_mask_t) * 8 - (T)))
|
||||||
#define SCLP_EVENT_MASK_MSG_ASCII 0x00000040
|
|
||||||
#define SCLP_EVENT_MASK_CONFIG_MGT_DATA 0x10000000
|
#define SCLP_EVENT_MASK_OP_CMD SCLP_EVMASK(SCLP_EVENT_OPRTNS_COMMAND)
|
||||||
#define SCLP_EVENT_MASK_OP_CMD 0x80000000
|
#define SCLP_EVENT_MASK_MSG SCLP_EVMASK(SCLP_EVENT_MESSAGE)
|
||||||
#define SCLP_EVENT_MASK_MSG 0x40000000
|
#define SCLP_EVENT_MASK_CONFIG_MGT_DATA SCLP_EVMASK(SCLP_EVENT_CONFIG_MGT_DATA)
|
||||||
#define SCLP_EVENT_MASK_PMSGCMD 0x00800000
|
#define SCLP_EVENT_MASK_PMSGCMD SCLP_EVMASK(SCLP_EVENT_PMSGCMD)
|
||||||
|
#define SCLP_EVENT_MASK_MSG_ASCII SCLP_EVMASK(SCLP_EVENT_ASCII_CONSOLE_DATA)
|
||||||
|
#define SCLP_EVENT_MASK_SIGNAL_QUIESCE SCLP_EVMASK(SCLP_EVENT_SIGNAL_QUIESCE)
|
||||||
|
|
||||||
#define SCLP_UNCONDITIONAL_READ 0x00
|
#define SCLP_UNCONDITIONAL_READ 0x00
|
||||||
#define SCLP_SELECTIVE_READ 0x01
|
#define SCLP_SELECTIVE_READ 0x01
|
||||||
@ -71,6 +73,8 @@ typedef struct WriteEventMask {
|
|||||||
#define WEM_RECEIVE_MASK(wem, mask_len) ((wem)->masks + 2 * (mask_len))
|
#define WEM_RECEIVE_MASK(wem, mask_len) ((wem)->masks + 2 * (mask_len))
|
||||||
#define WEM_SEND_MASK(wem, mask_len) ((wem)->masks + 3 * (mask_len))
|
#define WEM_SEND_MASK(wem, mask_len) ((wem)->masks + 3 * (mask_len))
|
||||||
|
|
||||||
|
typedef uint32_t sccb_mask_t;
|
||||||
|
|
||||||
typedef struct EventBufferHeader {
|
typedef struct EventBufferHeader {
|
||||||
uint16_t length;
|
uint16_t length;
|
||||||
uint8_t type;
|
uint8_t type;
|
||||||
@ -160,7 +164,7 @@ typedef struct WriteEventData {
|
|||||||
typedef struct ReadEventData {
|
typedef struct ReadEventData {
|
||||||
SCCBHeader h;
|
SCCBHeader h;
|
||||||
union {
|
union {
|
||||||
uint32_t mask;
|
sccb_mask_t mask;
|
||||||
EventBufferHeader ebh;
|
EventBufferHeader ebh;
|
||||||
};
|
};
|
||||||
} QEMU_PACKED ReadEventData;
|
} QEMU_PACKED ReadEventData;
|
||||||
@ -176,10 +180,10 @@ typedef struct SCLPEventClass {
|
|||||||
int (*init)(SCLPEvent *event);
|
int (*init)(SCLPEvent *event);
|
||||||
|
|
||||||
/* get SCLP's send mask */
|
/* get SCLP's send mask */
|
||||||
unsigned int (*get_send_mask)(void);
|
sccb_mask_t (*get_send_mask)(void);
|
||||||
|
|
||||||
/* get SCLP's receive mask */
|
/* get SCLP's receive mask */
|
||||||
unsigned int (*get_receive_mask)(void);
|
sccb_mask_t (*get_receive_mask)(void);
|
||||||
|
|
||||||
int (*read_event_data)(SCLPEvent *event, EventBufferHeader *evt_buf_hdr,
|
int (*read_event_data)(SCLPEvent *event, EventBufferHeader *evt_buf_hdr,
|
||||||
int *slen);
|
int *slen);
|
||||||
|
Loading…
Reference in New Issue
Block a user