raw3270.c (a8931ef380c92d121ae74ecfb03b2d63f72eea6f) | raw3270.c (23d805b647db6c2063a13089497615efa9deacdd) |
---|---|
1/* 2 * drivers/s390/char/raw3270.c 3 * IBM/3270 Driver - core functions. 4 * 5 * Author(s): 6 * Original 3270 Code for 2.4 written by Richard Hitt (UTS Global) 7 * Rewritten for 2.5 by Martin Schwidefsky <schwidefsky@de.ibm.com> 8 * -- Copyright (C) 2003 IBM Deutschland Entwicklung GmbH, IBM Corporation --- 358 unchanged lines hidden (view full) --- 367 rp = (struct raw3270 *) cdev->dev.driver_data; 368 if (!rp) 369 return; 370 rq = (struct raw3270_request *) intparm; 371 view = rq ? rq->view : rp->view; 372 373 if (IS_ERR(irb)) 374 rc = RAW3270_IO_RETRY; | 1/* 2 * drivers/s390/char/raw3270.c 3 * IBM/3270 Driver - core functions. 4 * 5 * Author(s): 6 * Original 3270 Code for 2.4 written by Richard Hitt (UTS Global) 7 * Rewritten for 2.5 by Martin Schwidefsky <schwidefsky@de.ibm.com> 8 * -- Copyright (C) 2003 IBM Deutschland Entwicklung GmbH, IBM Corporation --- 358 unchanged lines hidden (view full) --- 367 rp = (struct raw3270 *) cdev->dev.driver_data; 368 if (!rp) 369 return; 370 rq = (struct raw3270_request *) intparm; 371 view = rq ? rq->view : rp->view; 372 373 if (IS_ERR(irb)) 374 rc = RAW3270_IO_RETRY; |
375 else if (irb->scsw.fctl & SCSW_FCTL_HALT_FUNC) { | 375 else if (irb->scsw.cmd.fctl & SCSW_FCTL_HALT_FUNC) { |
376 rq->rc = -EIO; 377 rc = RAW3270_IO_DONE; | 376 rq->rc = -EIO; 377 rc = RAW3270_IO_DONE; |
378 } else if (irb->scsw.dstat == (DEV_STAT_CHN_END | DEV_STAT_DEV_END | 379 DEV_STAT_UNIT_EXCEP)) { | 378 } else if (irb->scsw.cmd.dstat == (DEV_STAT_CHN_END | DEV_STAT_DEV_END | 379 DEV_STAT_UNIT_EXCEP)) { |
380 /* Handle CE-DE-UE and subsequent UDE */ 381 set_bit(RAW3270_FLAGS_BUSY, &rp->flags); 382 rc = RAW3270_IO_BUSY; 383 } else if (test_bit(RAW3270_FLAGS_BUSY, &rp->flags)) { 384 /* Wait for UDE if busy flag is set. */ | 380 /* Handle CE-DE-UE and subsequent UDE */ 381 set_bit(RAW3270_FLAGS_BUSY, &rp->flags); 382 rc = RAW3270_IO_BUSY; 383 } else if (test_bit(RAW3270_FLAGS_BUSY, &rp->flags)) { 384 /* Wait for UDE if busy flag is set. */ |
385 if (irb->scsw.dstat & DEV_STAT_DEV_END) { | 385 if (irb->scsw.cmd.dstat & DEV_STAT_DEV_END) { |
386 clear_bit(RAW3270_FLAGS_BUSY, &rp->flags); 387 /* Got it, now retry. */ 388 rc = RAW3270_IO_RETRY; 389 } else 390 rc = RAW3270_IO_BUSY; 391 } else if (view) 392 rc = view->fn->intv(view, rq, irb); 393 else --- 98 unchanged lines hidden (view full) --- 492static int 493raw3270_init_irq(struct raw3270_view *view, struct raw3270_request *rq, 494 struct irb *irb) 495{ 496 /* 497 * Unit-Check Processing: 498 * Expect Command Reject or Intervention Required. 499 */ | 386 clear_bit(RAW3270_FLAGS_BUSY, &rp->flags); 387 /* Got it, now retry. */ 388 rc = RAW3270_IO_RETRY; 389 } else 390 rc = RAW3270_IO_BUSY; 391 } else if (view) 392 rc = view->fn->intv(view, rq, irb); 393 else --- 98 unchanged lines hidden (view full) --- 492static int 493raw3270_init_irq(struct raw3270_view *view, struct raw3270_request *rq, 494 struct irb *irb) 495{ 496 /* 497 * Unit-Check Processing: 498 * Expect Command Reject or Intervention Required. 499 */ |
500 if (irb->scsw.dstat & DEV_STAT_UNIT_CHECK) { | 500 if (irb->scsw.cmd.dstat & DEV_STAT_UNIT_CHECK) { |
501 /* Request finished abnormally. */ 502 if (irb->ecw[0] & SNS0_INTERVENTION_REQ) { 503 set_bit(RAW3270_FLAGS_BUSY, &view->dev->flags); 504 return RAW3270_IO_BUSY; 505 } 506 } 507 if (rq) { | 501 /* Request finished abnormally. */ 502 if (irb->ecw[0] & SNS0_INTERVENTION_REQ) { 503 set_bit(RAW3270_FLAGS_BUSY, &view->dev->flags); 504 return RAW3270_IO_BUSY; 505 } 506 } 507 if (rq) { |
508 if (irb->scsw.dstat & DEV_STAT_UNIT_CHECK) { | 508 if (irb->scsw.cmd.dstat & DEV_STAT_UNIT_CHECK) { |
509 if (irb->ecw[0] & SNS0_CMD_REJECT) 510 rq->rc = -EOPNOTSUPP; 511 else 512 rq->rc = -EIO; 513 } else 514 /* Request finished normally. Copy residual count. */ | 509 if (irb->ecw[0] & SNS0_CMD_REJECT) 510 rq->rc = -EOPNOTSUPP; 511 else 512 rq->rc = -EIO; 513 } else 514 /* Request finished normally. Copy residual count. */ |
515 rq->rescnt = irb->scsw.count; | 515 rq->rescnt = irb->scsw.cmd.count; |
516 } | 516 } |
517 if (irb->scsw.dstat & DEV_STAT_ATTENTION) { | 517 if (irb->scsw.cmd.dstat & DEV_STAT_ATTENTION) { |
518 set_bit(RAW3270_FLAGS_ATTN, &view->dev->flags); 519 wake_up(&raw3270_wait_queue); 520 } 521 return RAW3270_IO_DONE; 522} 523 524static struct raw3270_fn raw3270_init_fn = { 525 .intv = raw3270_init_irq --- 904 unchanged lines hidden --- | 518 set_bit(RAW3270_FLAGS_ATTN, &view->dev->flags); 519 wake_up(&raw3270_wait_queue); 520 } 521 return RAW3270_IO_DONE; 522} 523 524static struct raw3270_fn raw3270_init_fn = { 525 .intv = raw3270_init_irq --- 904 unchanged lines hidden --- |