[S390] cio: introduce fcx enabled scsw format
Extend the scsw data structure to the format required by fcx. Also provide helper functions for easier access to fields which are present in both the traditional as well as the modified format. Signed-off-by: Peter Oberparleiter <peter.oberparleiter@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
This commit is contained in:

committed by
Heiko Carstens

parent
4f2bd92e3b
commit
23d805b647
@@ -372,17 +372,17 @@ raw3270_irq (struct ccw_device *cdev, unsigned long intparm, struct irb *irb)
|
||||
|
||||
if (IS_ERR(irb))
|
||||
rc = RAW3270_IO_RETRY;
|
||||
else if (irb->scsw.fctl & SCSW_FCTL_HALT_FUNC) {
|
||||
else if (irb->scsw.cmd.fctl & SCSW_FCTL_HALT_FUNC) {
|
||||
rq->rc = -EIO;
|
||||
rc = RAW3270_IO_DONE;
|
||||
} else if (irb->scsw.dstat == (DEV_STAT_CHN_END | DEV_STAT_DEV_END |
|
||||
DEV_STAT_UNIT_EXCEP)) {
|
||||
} else if (irb->scsw.cmd.dstat == (DEV_STAT_CHN_END | DEV_STAT_DEV_END |
|
||||
DEV_STAT_UNIT_EXCEP)) {
|
||||
/* Handle CE-DE-UE and subsequent UDE */
|
||||
set_bit(RAW3270_FLAGS_BUSY, &rp->flags);
|
||||
rc = RAW3270_IO_BUSY;
|
||||
} else if (test_bit(RAW3270_FLAGS_BUSY, &rp->flags)) {
|
||||
/* Wait for UDE if busy flag is set. */
|
||||
if (irb->scsw.dstat & DEV_STAT_DEV_END) {
|
||||
if (irb->scsw.cmd.dstat & DEV_STAT_DEV_END) {
|
||||
clear_bit(RAW3270_FLAGS_BUSY, &rp->flags);
|
||||
/* Got it, now retry. */
|
||||
rc = RAW3270_IO_RETRY;
|
||||
@@ -497,7 +497,7 @@ raw3270_init_irq(struct raw3270_view *view, struct raw3270_request *rq,
|
||||
* Unit-Check Processing:
|
||||
* Expect Command Reject or Intervention Required.
|
||||
*/
|
||||
if (irb->scsw.dstat & DEV_STAT_UNIT_CHECK) {
|
||||
if (irb->scsw.cmd.dstat & DEV_STAT_UNIT_CHECK) {
|
||||
/* Request finished abnormally. */
|
||||
if (irb->ecw[0] & SNS0_INTERVENTION_REQ) {
|
||||
set_bit(RAW3270_FLAGS_BUSY, &view->dev->flags);
|
||||
@@ -505,16 +505,16 @@ raw3270_init_irq(struct raw3270_view *view, struct raw3270_request *rq,
|
||||
}
|
||||
}
|
||||
if (rq) {
|
||||
if (irb->scsw.dstat & DEV_STAT_UNIT_CHECK) {
|
||||
if (irb->scsw.cmd.dstat & DEV_STAT_UNIT_CHECK) {
|
||||
if (irb->ecw[0] & SNS0_CMD_REJECT)
|
||||
rq->rc = -EOPNOTSUPP;
|
||||
else
|
||||
rq->rc = -EIO;
|
||||
} else
|
||||
/* Request finished normally. Copy residual count. */
|
||||
rq->rescnt = irb->scsw.count;
|
||||
rq->rescnt = irb->scsw.cmd.count;
|
||||
}
|
||||
if (irb->scsw.dstat & DEV_STAT_ATTENTION) {
|
||||
if (irb->scsw.cmd.dstat & DEV_STAT_ATTENTION) {
|
||||
set_bit(RAW3270_FLAGS_ATTN, &view->dev->flags);
|
||||
wake_up(&raw3270_wait_queue);
|
||||
}
|
||||
|
Reference in New Issue
Block a user