aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Schwidefsky <schwidefsky@de.ibm.com>2015-08-19 10:50:10 -0400
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2015-08-26 11:19:49 -0400
commit05bfd70bcdd3cd12c061cb77b73a11ba6f87379d (patch)
tree3de2be35516de728b2d9da5aefe91f34c0b23121
parent42cfc6b590c5eb7ae3c1de89594f8f2193ecbc97 (diff)
s390/3270: redraw screen on unsolicited device end
If a 3270 terminal is disconnected and later reconnected again, it gets an unsolicited device end. This is currently ignored and you have to hit the clear key to get the screen redrawn. Add an automatic full redraw of the screen for this case. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
-rw-r--r--drivers/s390/char/con3270.c4
-rw-r--r--drivers/s390/char/tty3270.c4
2 files changed, 8 insertions, 0 deletions
diff --git a/drivers/s390/char/con3270.c b/drivers/s390/char/con3270.c
index 75ffe9980c3e..7c511add5aa7 100644
--- a/drivers/s390/char/con3270.c
+++ b/drivers/s390/char/con3270.c
@@ -413,6 +413,10 @@ con3270_irq(struct con3270 *cp, struct raw3270_request *rq, struct irb *irb)
413 else 413 else
414 /* Normal end. Copy residual count. */ 414 /* Normal end. Copy residual count. */
415 rq->rescnt = irb->scsw.cmd.count; 415 rq->rescnt = irb->scsw.cmd.count;
416 } else if (irb->scsw.cmd.dstat & DEV_STAT_DEV_END) {
417 /* Interrupt without an outstanding request -> update all */
418 cp->update_flags = CON_UPDATE_ALL;
419 con3270_set_timer(cp, 1);
416 } 420 }
417 return RAW3270_IO_DONE; 421 return RAW3270_IO_DONE;
418} 422}
diff --git a/drivers/s390/char/tty3270.c b/drivers/s390/char/tty3270.c
index e91b89dc6d1f..e96fc7fd9498 100644
--- a/drivers/s390/char/tty3270.c
+++ b/drivers/s390/char/tty3270.c
@@ -659,6 +659,10 @@ tty3270_irq(struct tty3270 *tp, struct raw3270_request *rq, struct irb *irb)
659 else 659 else
660 /* Normal end. Copy residual count. */ 660 /* Normal end. Copy residual count. */
661 rq->rescnt = irb->scsw.cmd.count; 661 rq->rescnt = irb->scsw.cmd.count;
662 } else if (irb->scsw.cmd.dstat & DEV_STAT_DEV_END) {
663 /* Interrupt without an outstanding request -> update all */
664 tp->update_flags = TTY_UPDATE_ALL;
665 tty3270_set_timer(tp, 1);
662 } 666 }
663 return RAW3270_IO_DONE; 667 return RAW3270_IO_DONE;
664} 668}