diff options
| -rw-r--r-- | drivers/s390/char/sclp.c | 12 | ||||
| -rw-r--r-- | drivers/s390/char/sclp.h | 6 | ||||
| -rw-r--r-- | drivers/s390/char/sclp_config.c | 2 | ||||
| -rw-r--r-- | drivers/s390/char/sclp_cpi_sys.c | 2 | ||||
| -rw-r--r-- | drivers/s390/char/sclp_rw.c | 4 | ||||
| -rw-r--r-- | drivers/s390/char/sclp_vt220.c | 2 |
6 files changed, 15 insertions, 13 deletions
diff --git a/drivers/s390/char/sclp.c b/drivers/s390/char/sclp.c index 25629b92dec3..2c7a1ee6b041 100644 --- a/drivers/s390/char/sclp.c +++ b/drivers/s390/char/sclp.c | |||
| @@ -29,10 +29,10 @@ static ext_int_info_t ext_int_info_hwc; | |||
| 29 | /* Lock to protect internal data consistency. */ | 29 | /* Lock to protect internal data consistency. */ |
| 30 | static DEFINE_SPINLOCK(sclp_lock); | 30 | static DEFINE_SPINLOCK(sclp_lock); |
| 31 | 31 | ||
| 32 | /* Mask of events that we can receive from the sclp interface. */ | 32 | /* Mask of events that we can send to the sclp interface. */ |
| 33 | static sccb_mask_t sclp_receive_mask; | 33 | static sccb_mask_t sclp_receive_mask; |
| 34 | 34 | ||
| 35 | /* Mask of events that we can send to the sclp interface. */ | 35 | /* Mask of events that we can receive from the sclp interface. */ |
| 36 | static sccb_mask_t sclp_send_mask; | 36 | static sccb_mask_t sclp_send_mask; |
| 37 | 37 | ||
| 38 | /* List of registered event listeners and senders. */ | 38 | /* List of registered event listeners and senders. */ |
| @@ -380,7 +380,7 @@ sclp_interrupt_handler(__u16 code) | |||
| 380 | } | 380 | } |
| 381 | sclp_running_state = sclp_running_state_idle; | 381 | sclp_running_state = sclp_running_state_idle; |
| 382 | } | 382 | } |
| 383 | if (evbuf_pending && sclp_receive_mask != 0 && | 383 | if (evbuf_pending && |
| 384 | sclp_activation_state == sclp_activation_state_active) | 384 | sclp_activation_state == sclp_activation_state_active) |
| 385 | __sclp_queue_read_req(); | 385 | __sclp_queue_read_req(); |
| 386 | spin_unlock(&sclp_lock); | 386 | spin_unlock(&sclp_lock); |
| @@ -459,8 +459,8 @@ sclp_dispatch_state_change(void) | |||
| 459 | reg = NULL; | 459 | reg = NULL; |
| 460 | list_for_each(l, &sclp_reg_list) { | 460 | list_for_each(l, &sclp_reg_list) { |
| 461 | reg = list_entry(l, struct sclp_register, list); | 461 | reg = list_entry(l, struct sclp_register, list); |
| 462 | receive_mask = reg->receive_mask & sclp_receive_mask; | 462 | receive_mask = reg->send_mask & sclp_receive_mask; |
| 463 | send_mask = reg->send_mask & sclp_send_mask; | 463 | send_mask = reg->receive_mask & sclp_send_mask; |
| 464 | if (reg->sclp_receive_mask != receive_mask || | 464 | if (reg->sclp_receive_mask != receive_mask || |
| 465 | reg->sclp_send_mask != send_mask) { | 465 | reg->sclp_send_mask != send_mask) { |
| 466 | reg->sclp_receive_mask = receive_mask; | 466 | reg->sclp_receive_mask = receive_mask; |
| @@ -615,8 +615,8 @@ struct init_sccb { | |||
| 615 | u16 mask_length; | 615 | u16 mask_length; |
| 616 | sccb_mask_t receive_mask; | 616 | sccb_mask_t receive_mask; |
| 617 | sccb_mask_t send_mask; | 617 | sccb_mask_t send_mask; |
| 618 | sccb_mask_t sclp_send_mask; | ||
| 619 | sccb_mask_t sclp_receive_mask; | 618 | sccb_mask_t sclp_receive_mask; |
| 619 | sccb_mask_t sclp_send_mask; | ||
| 620 | } __attribute__((packed)); | 620 | } __attribute__((packed)); |
| 621 | 621 | ||
| 622 | /* Prepare init mask request. Called while sclp_lock is locked. */ | 622 | /* Prepare init mask request. Called while sclp_lock is locked. */ |
diff --git a/drivers/s390/char/sclp.h b/drivers/s390/char/sclp.h index aa8186d18aee..bac80e856f97 100644 --- a/drivers/s390/char/sclp.h +++ b/drivers/s390/char/sclp.h | |||
| @@ -122,11 +122,13 @@ struct sclp_req { | |||
| 122 | /* of some routines it wants to be called from the low level driver */ | 122 | /* of some routines it wants to be called from the low level driver */ |
| 123 | struct sclp_register { | 123 | struct sclp_register { |
| 124 | struct list_head list; | 124 | struct list_head list; |
| 125 | /* event masks this user is registered for */ | 125 | /* User wants to receive: */ |
| 126 | sccb_mask_t receive_mask; | 126 | sccb_mask_t receive_mask; |
| 127 | /* User wants to send: */ | ||
| 127 | sccb_mask_t send_mask; | 128 | sccb_mask_t send_mask; |
| 128 | /* actually present events */ | 129 | /* H/W can receive: */ |
| 129 | sccb_mask_t sclp_receive_mask; | 130 | sccb_mask_t sclp_receive_mask; |
| 131 | /* H/W can send: */ | ||
| 130 | sccb_mask_t sclp_send_mask; | 132 | sccb_mask_t sclp_send_mask; |
| 131 | /* called if event type availability changes */ | 133 | /* called if event type availability changes */ |
| 132 | void (*state_change_fn)(struct sclp_register *); | 134 | void (*state_change_fn)(struct sclp_register *); |
diff --git a/drivers/s390/char/sclp_config.c b/drivers/s390/char/sclp_config.c index 9dc77f14fa52..b8f35bc52b7b 100644 --- a/drivers/s390/char/sclp_config.c +++ b/drivers/s390/char/sclp_config.c | |||
| @@ -64,7 +64,7 @@ static int __init sclp_conf_init(void) | |||
| 64 | return rc; | 64 | return rc; |
| 65 | } | 65 | } |
| 66 | 66 | ||
| 67 | if (!(sclp_conf_register.sclp_receive_mask & EVTYP_CONFMGMDATA_MASK)) { | 67 | if (!(sclp_conf_register.sclp_send_mask & EVTYP_CONFMGMDATA_MASK)) { |
| 68 | printk(KERN_WARNING TAG "no configuration management.\n"); | 68 | printk(KERN_WARNING TAG "no configuration management.\n"); |
| 69 | sclp_unregister(&sclp_conf_register); | 69 | sclp_unregister(&sclp_conf_register); |
| 70 | rc = -ENOSYS; | 70 | rc = -ENOSYS; |
diff --git a/drivers/s390/char/sclp_cpi_sys.c b/drivers/s390/char/sclp_cpi_sys.c index 41617032afdc..9f37456222e9 100644 --- a/drivers/s390/char/sclp_cpi_sys.c +++ b/drivers/s390/char/sclp_cpi_sys.c | |||
| @@ -129,7 +129,7 @@ static int cpi_req(void) | |||
| 129 | "to hardware console.\n"); | 129 | "to hardware console.\n"); |
| 130 | goto out; | 130 | goto out; |
| 131 | } | 131 | } |
| 132 | if (!(sclp_cpi_event.sclp_send_mask & EVTYP_CTLPROGIDENT_MASK)) { | 132 | if (!(sclp_cpi_event.sclp_receive_mask & EVTYP_CTLPROGIDENT_MASK)) { |
| 133 | printk(KERN_WARNING "cpi: no control program " | 133 | printk(KERN_WARNING "cpi: no control program " |
| 134 | "identification support\n"); | 134 | "identification support\n"); |
| 135 | rc = -EOPNOTSUPP; | 135 | rc = -EOPNOTSUPP; |
diff --git a/drivers/s390/char/sclp_rw.c b/drivers/s390/char/sclp_rw.c index ad7195d3de0c..da09781b32f7 100644 --- a/drivers/s390/char/sclp_rw.c +++ b/drivers/s390/char/sclp_rw.c | |||
| @@ -452,10 +452,10 @@ sclp_emit_buffer(struct sclp_buffer *buffer, | |||
| 452 | return -EIO; | 452 | return -EIO; |
| 453 | 453 | ||
| 454 | sccb = buffer->sccb; | 454 | sccb = buffer->sccb; |
| 455 | if (sclp_rw_event.sclp_send_mask & EVTYP_MSG_MASK) | 455 | if (sclp_rw_event.sclp_receive_mask & EVTYP_MSG_MASK) |
| 456 | /* Use normal write message */ | 456 | /* Use normal write message */ |
| 457 | sccb->msg_buf.header.type = EVTYP_MSG; | 457 | sccb->msg_buf.header.type = EVTYP_MSG; |
| 458 | else if (sclp_rw_event.sclp_send_mask & EVTYP_PMSGCMD_MASK) | 458 | else if (sclp_rw_event.sclp_receive_mask & EVTYP_PMSGCMD_MASK) |
| 459 | /* Use write priority message */ | 459 | /* Use write priority message */ |
| 460 | sccb->msg_buf.header.type = EVTYP_PMSGCMD; | 460 | sccb->msg_buf.header.type = EVTYP_PMSGCMD; |
| 461 | else | 461 | else |
diff --git a/drivers/s390/char/sclp_vt220.c b/drivers/s390/char/sclp_vt220.c index f47f4a768be5..92f527201792 100644 --- a/drivers/s390/char/sclp_vt220.c +++ b/drivers/s390/char/sclp_vt220.c | |||
| @@ -202,7 +202,7 @@ sclp_vt220_callback(struct sclp_req *request, void *data) | |||
| 202 | static int | 202 | static int |
| 203 | __sclp_vt220_emit(struct sclp_vt220_request *request) | 203 | __sclp_vt220_emit(struct sclp_vt220_request *request) |
| 204 | { | 204 | { |
| 205 | if (!(sclp_vt220_register.sclp_send_mask & EVTYP_VT220MSG_MASK)) { | 205 | if (!(sclp_vt220_register.sclp_receive_mask & EVTYP_VT220MSG_MASK)) { |
| 206 | request->sclp_req.status = SCLP_REQ_FAILED; | 206 | request->sclp_req.status = SCLP_REQ_FAILED; |
| 207 | return -EIO; | 207 | return -EIO; |
| 208 | } | 208 | } |
