aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/char
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/s390/char')
-rw-r--r--drivers/s390/char/con3215.c25
-rw-r--r--drivers/s390/char/sclp_tty.c21
-rw-r--r--drivers/s390/char/sclp_vt220.c12
3 files changed, 18 insertions, 40 deletions
diff --git a/drivers/s390/char/con3215.c b/drivers/s390/char/con3215.c
index 75419cf9d353..1f060914cfa4 100644
--- a/drivers/s390/char/con3215.c
+++ b/drivers/s390/char/con3215.c
@@ -16,6 +16,7 @@
16#include <linux/types.h> 16#include <linux/types.h>
17#include <linux/kdev_t.h> 17#include <linux/kdev_t.h>
18#include <linux/tty.h> 18#include <linux/tty.h>
19#include <linux/tty_flip.h>
19#include <linux/vt_kern.h> 20#include <linux/vt_kern.h>
20#include <linux/init.h> 21#include <linux/init.h>
21#include <linux/console.h> 22#include <linux/console.h>
@@ -432,8 +433,6 @@ raw3215_irq(struct ccw_device *cdev, unsigned long intparm, struct irb *irb)
432 if (count > slen) 433 if (count > slen)
433 count = slen; 434 count = slen;
434 } else 435 } else
435 if (count >= TTY_FLIPBUF_SIZE - tty->flip.count)
436 count = TTY_FLIPBUF_SIZE - tty->flip.count - 1;
437 EBCASC(raw->inbuf, count); 436 EBCASC(raw->inbuf, count);
438 cchar = ctrlchar_handle(raw->inbuf, count, tty); 437 cchar = ctrlchar_handle(raw->inbuf, count, tty);
439 switch (cchar & CTRLCHAR_MASK) { 438 switch (cchar & CTRLCHAR_MASK) {
@@ -441,28 +440,20 @@ raw3215_irq(struct ccw_device *cdev, unsigned long intparm, struct irb *irb)
441 break; 440 break;
442 441
443 case CTRLCHAR_CTRL: 442 case CTRLCHAR_CTRL:
444 tty->flip.count++; 443 tty_insert_flip_char(tty, cchar, TTY_NORMAL);
445 *tty->flip.flag_buf_ptr++ = TTY_NORMAL;
446 *tty->flip.char_buf_ptr++ = cchar;
447 tty_flip_buffer_push(raw->tty); 444 tty_flip_buffer_push(raw->tty);
448 break; 445 break;
449 446
450 case CTRLCHAR_NONE: 447 case CTRLCHAR_NONE:
451 memcpy(tty->flip.char_buf_ptr,
452 raw->inbuf, count);
453 if (count < 2 || 448 if (count < 2 ||
454 (strncmp(raw->inbuf+count-2, "^n", 2) && 449 (strncmp(raw->inbuf+count-2, "\252n", 2) &&
455 strncmp(raw->inbuf+count-2, "\252n", 2)) ) { 450 strncmp(raw->inbuf+count-2, "^n", 2)) ) {
456 /* don't add the auto \n */ 451 /* add the auto \n */
457 tty->flip.char_buf_ptr[count] = '\n'; 452 raw->inbuf[count] = '\n';
458 memset(tty->flip.flag_buf_ptr,
459 TTY_NORMAL, count + 1);
460 count++; 453 count++;
461 } else 454 } else
462 count-=2; 455 count -= 2;
463 tty->flip.char_buf_ptr += count; 456 tty_insert_flip_string(tty, raw->inbuf, count);
464 tty->flip.flag_buf_ptr += count;
465 tty->flip.count += count;
466 tty_flip_buffer_push(raw->tty); 457 tty_flip_buffer_push(raw->tty);
467 break; 458 break;
468 } 459 }
diff --git a/drivers/s390/char/sclp_tty.c b/drivers/s390/char/sclp_tty.c
index a20d7c89341d..6cbf067f1a8f 100644
--- a/drivers/s390/char/sclp_tty.c
+++ b/drivers/s390/char/sclp_tty.c
@@ -13,6 +13,7 @@
13#include <linux/kmod.h> 13#include <linux/kmod.h>
14#include <linux/tty.h> 14#include <linux/tty.h>
15#include <linux/tty_driver.h> 15#include <linux/tty_driver.h>
16#include <linux/tty_flip.h>
16#include <linux/sched.h> 17#include <linux/sched.h>
17#include <linux/wait.h> 18#include <linux/wait.h>
18#include <linux/slab.h> 19#include <linux/slab.h>
@@ -496,25 +497,19 @@ sclp_tty_input(unsigned char* buf, unsigned int count)
496 case CTRLCHAR_SYSRQ: 497 case CTRLCHAR_SYSRQ:
497 break; 498 break;
498 case CTRLCHAR_CTRL: 499 case CTRLCHAR_CTRL:
499 sclp_tty->flip.count++; 500 tty_insert_flip_char(sclp_tty, cchar, TTY_NORMAL);
500 *sclp_tty->flip.flag_buf_ptr++ = TTY_NORMAL;
501 *sclp_tty->flip.char_buf_ptr++ = cchar;
502 tty_flip_buffer_push(sclp_tty); 501 tty_flip_buffer_push(sclp_tty);
503 break; 502 break;
504 case CTRLCHAR_NONE: 503 case CTRLCHAR_NONE:
505 /* send (normal) input to line discipline */ 504 /* send (normal) input to line discipline */
506 memcpy(sclp_tty->flip.char_buf_ptr, buf, count);
507 if (count < 2 || 505 if (count < 2 ||
508 (strncmp ((const char *) buf + count - 2, "^n", 2) && 506 (strncmp((const char *) buf + count - 2, "^n", 2) &&
509 strncmp ((const char *) buf + count - 2, "\0252n", 2))) { 507 strncmp((const char *) buf + count - 2, "\252n", 2))) {
510 sclp_tty->flip.char_buf_ptr[count] = '\n'; 508 /* add the auto \n */
511 count++; 509 tty_insert_flip_string(sclp_tty, buf, count);
510 tty_insert_flip_char(sclp_tty, '\n', TTY_NORMAL);
512 } else 511 } else
513 count -= 2; 512 tty_insert_flip_string(sclp_tty, buf, count - 2);
514 memset(sclp_tty->flip.flag_buf_ptr, TTY_NORMAL, count);
515 sclp_tty->flip.char_buf_ptr += count;
516 sclp_tty->flip.flag_buf_ptr += count;
517 sclp_tty->flip.count += count;
518 tty_flip_buffer_push(sclp_tty); 513 tty_flip_buffer_push(sclp_tty);
519 break; 514 break;
520 } 515 }
diff --git a/drivers/s390/char/sclp_vt220.c b/drivers/s390/char/sclp_vt220.c
index 06bd85824d7b..9e02625c82cf 100644
--- a/drivers/s390/char/sclp_vt220.c
+++ b/drivers/s390/char/sclp_vt220.c
@@ -16,6 +16,7 @@
16#include <linux/kernel.h> 16#include <linux/kernel.h>
17#include <linux/tty.h> 17#include <linux/tty.h>
18#include <linux/tty_driver.h> 18#include <linux/tty_driver.h>
19#include <linux/tty_flip.h>
19#include <linux/sched.h> 20#include <linux/sched.h>
20#include <linux/errno.h> 21#include <linux/errno.h>
21#include <linux/mm.h> 22#include <linux/mm.h>
@@ -482,16 +483,7 @@ sclp_vt220_receiver_fn(struct evbuf_header *evbuf)
482 /* Send input to line discipline */ 483 /* Send input to line discipline */
483 buffer++; 484 buffer++;
484 count--; 485 count--;
485 /* Prevent buffer overrun by discarding input. Note that 486 tty_insert_flip_string(sclp_vt220_tty, buffer, count);
486 * because buffer_push works asynchronously, we cannot wait
487 * for the buffer to be emptied. */
488 if (count + sclp_vt220_tty->flip.count > TTY_FLIPBUF_SIZE)
489 count = TTY_FLIPBUF_SIZE - sclp_vt220_tty->flip.count;
490 memcpy(sclp_vt220_tty->flip.char_buf_ptr, buffer, count);
491 memset(sclp_vt220_tty->flip.flag_buf_ptr, TTY_NORMAL, count);
492 sclp_vt220_tty->flip.char_buf_ptr += count;
493 sclp_vt220_tty->flip.flag_buf_ptr += count;
494 sclp_vt220_tty->flip.count += count;
495 tty_flip_buffer_push(sclp_vt220_tty); 487 tty_flip_buffer_push(sclp_vt220_tty);
496 break; 488 break;
497 } 489 }