patch-2.2.16 linux/drivers/s390/char/con3215.c
Next file: linux/drivers/s390/char/hwc_con.c
Previous file: linux/drivers/s390/block/xpram.h
Back to the patch index
Back to the overall index
- Lines: 89
- Date:
Wed Jun 7 14:26:43 2000
- Orig file:
v2.2.15/linux/drivers/s390/char/con3215.c
- Orig date:
Wed May 3 17:16:43 2000
diff -urN v2.2.15/linux/drivers/s390/char/con3215.c linux/drivers/s390/char/con3215.c
@@ -342,6 +342,7 @@
tty->ldisc.write_wakeup)
(tty->ldisc.write_wakeup)(tty);
wake_up_interruptible(&tty->write_wait);
+ wake_up_interruptible(&tty->poll_wait);
}
}
@@ -445,22 +446,29 @@
if (count >= TTY_FLIPBUF_SIZE - tty->flip.count)
count = TTY_FLIPBUF_SIZE - tty->flip.count - 1;
EBCASC(raw->inbuf, count);
- if (count == 2 &&
- strncmp(raw->inbuf, "^c", 2) == 0) {
+ if (count == 2 && (
+ /* hat is 0xb0 in codepage 037 (US etc.) and thus */
+ /* converted to 0x5e in ascii ('^') */
+ strncmp(raw->inbuf, "^c", 2) == 0 ||
+ /* hat is 0xb0 in several other codepages (German,*/
+ /* UK, ...) and thus converted to ascii octal 252 */
+ strncmp(raw->inbuf, "\252c", 2) == 0) ) {
/* emulate a control C = break */
tty->flip.count++;
*tty->flip.flag_buf_ptr++ = TTY_NORMAL;
*tty->flip.char_buf_ptr++ = INTR_CHAR(tty);
tty_flip_buffer_push(raw->tty);
- } else if (count == 2 &&
- strncmp(raw->inbuf, "^d", 2) == 0) {
+ } else if (count == 2 && (
+ strncmp(raw->inbuf, "^d", 2) == 0 ||
+ strncmp(raw->inbuf, "\252d", 2) == 0) ) {
/* emulate a control D = end of file */
tty->flip.count++;
*tty->flip.flag_buf_ptr++ = TTY_NORMAL;
*tty->flip.char_buf_ptr++ = EOF_CHAR(tty);
tty_flip_buffer_push(raw->tty);
- } else if (count == 2 &&
- strncmp(raw->inbuf, "^z", 2) == 0) {
+ } else if (count == 2 && (
+ strncmp(raw->inbuf, "^z", 2) == 0 ||
+ strncmp(raw->inbuf, "\252z", 2) == 0) ) {
/* emulate a control Z = suspend */
tty->flip.count++;
*tty->flip.flag_buf_ptr++ = TTY_NORMAL;
@@ -470,7 +478,8 @@
memcpy(tty->flip.char_buf_ptr,
raw->inbuf, count);
if (count < 2 ||
- strncmp(raw->inbuf+count-2, "^n", 2)) {
+ (strncmp(raw->inbuf+count-2, "^n", 2) ||
+ strncmp(raw->inbuf+count-2, "\252n", 2)) ) {
/* don't add the auto \n */
tty->flip.char_buf_ptr[count] = '\n';
memset(tty->flip.flag_buf_ptr,
@@ -660,6 +669,7 @@
return -1;
raw->flags |= RAW3215_ACTIVE;
s390irq_spin_lock_irqsave(raw->irq, flags);
+ set_cons_dev(raw->irq);
raw3215_try_io(raw);
s390irq_spin_unlock_irqrestore(raw->irq, flags);
@@ -934,6 +944,7 @@
raw = (raw3215_info *) tty->driver_data;
raw3215_flush_buffer(raw);
wake_up_interruptible(&tty->write_wait);
+ wake_up_interruptible(&tty->poll_wait);
if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&
tty->ldisc.write_wakeup)
(tty->ldisc.write_wakeup)(tty);
@@ -1029,8 +1040,6 @@
if (MACHINE_IS_VM) {
cpcmd("TERM CONMODE 3215", NULL, 0);
cpcmd("TERM AUTOCR OFF", NULL, 0);
- cpcmd("TERM HOLD OFF", NULL, 0);
- cpcmd("TERM MORE 5 5", NULL, 0);
}
kmem_start = (kmem_start + 7) & -8L;
@@ -1061,9 +1070,6 @@
if (raw->irq != -1) {
register_console(&con3215);
- s390irq_spin_lock(raw->irq);
- set_cons_dev(raw->irq);
- s390irq_spin_unlock(raw->irq);
} else {
kmem_start = (long) raw;
raw3215[0] = NULL;
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)