Module Name: src
Committed By: dholland
Date: Thu May 22 16:31:19 UTC 2014
Modified Files:
src/sys/arch/hp300/dev: dcm.c
src/sys/compat/common: tty_43.c
src/sys/kern: tty.c
src/sys/net: ppp_tty.c
src/sys/sys: tty.h
Log Message:
Use accessor functions for the tty's table of control characters.
(at least from outside the core tty sources)
Move some xon/xoff code from net/ppp_tty.c to kern/tty.c.
To generate a diff of this commit:
cvs rdiff -u -r1.85 -r1.86 src/sys/arch/hp300/dev/dcm.c
cvs rdiff -u -r1.29 -r1.30 src/sys/compat/common/tty_43.c
cvs rdiff -u -r1.260 -r1.261 src/sys/kern/tty.c
cvs rdiff -u -r1.57 -r1.58 src/sys/net/ppp_tty.c
cvs rdiff -u -r1.91 -r1.92 src/sys/sys/tty.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/hp300/dev/dcm.c
diff -u src/sys/arch/hp300/dev/dcm.c:1.85 src/sys/arch/hp300/dev/dcm.c:1.86
--- src/sys/arch/hp300/dev/dcm.c:1.85 Mon Mar 24 19:42:58 2014
+++ src/sys/arch/hp300/dev/dcm.c Thu May 22 16:31:19 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: dcm.c,v 1.85 2014/03/24 19:42:58 christos Exp $ */
+/* $NetBSD: dcm.c,v 1.86 2014/05/22 16:31:19 dholland Exp $ */
/*-
* Copyright (c) 1996, 1997 The NetBSD Foundation, Inc.
@@ -78,7 +78,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dcm.c,v 1.85 2014/03/24 19:42:58 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dcm.c,v 1.86 2014/05/22 16:31:19 dholland Exp $");
#include "opt_kgdb.h"
@@ -1394,9 +1394,11 @@ dcmsetischeme(int brd, int flags)
for (i = 0; i < NDCMPORT; i++) {
tp = sc->sc_tty[i];
- if ((c = tp->t_cc[VSTART]) != _POSIX_VDISABLE)
+ c = tty_getctrlchar(tp, VSTART);
+ if (c != _POSIX_VDISABLE)
dcm->dcm_bmap[c].data_data |= (1 << i);
- if ((c = tp->t_cc[VSTOP]) != _POSIX_VDISABLE)
+ c = tty_getctrlchar(tp, VSTOP);
+ if (c != _POSIX_VDISABLE)
dcm->dcm_bmap[c].data_data |= (1 << i);
}
}
Index: src/sys/compat/common/tty_43.c
diff -u src/sys/compat/common/tty_43.c:1.29 src/sys/compat/common/tty_43.c:1.30
--- src/sys/compat/common/tty_43.c:1.29 Wed Nov 19 18:36:02 2008
+++ src/sys/compat/common/tty_43.c Thu May 22 16:31:19 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: tty_43.c,v 1.29 2008/11/19 18:36:02 ad Exp $ */
+/* $NetBSD: tty_43.c,v 1.30 2014/05/22 16:31:19 dholland Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -62,7 +62,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tty_43.c,v 1.29 2008/11/19 18:36:02 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tty_43.c,v 1.30 2014/05/22 16:31:19 dholland Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -118,11 +118,9 @@ ttcompat(struct tty *tp, u_long com, voi
switch (com) {
case TIOCGETP: {
struct sgttyb *sg = (struct sgttyb *)data;
- u_char *cc;
int speed;
mutex_spin_enter(&tty_lock);
- cc = tp->t_cc;
speed = ttspeedtab(tp->t_ospeed, compatspeeds);
sg->sg_ospeed = (speed == -1) ? MAX_SPEED : speed;
if (tp->t_ispeed == 0)
@@ -131,8 +129,8 @@ ttcompat(struct tty *tp, u_long com, voi
speed = ttspeedtab(tp->t_ispeed, compatspeeds);
sg->sg_ispeed = (speed == -1) ? MAX_SPEED : speed;
}
- sg->sg_erase = cc[VERASE];
- sg->sg_kill = cc[VKILL];
+ sg->sg_erase = tty_getctrlchar(tp, VERASE);
+ sg->sg_kill = tty_getctrlchar(tp, VKILL);
sg->sg_flags = ttcompatgetflags(tp);
mutex_spin_exit(&tty_lock);
break;
@@ -165,52 +163,48 @@ ttcompat(struct tty *tp, u_long com, voi
case TIOCGETC: {
struct tchars *tc = (struct tchars *)data;
- u_char *cc = tp->t_cc;
- tc->t_intrc = cc[VINTR];
- tc->t_quitc = cc[VQUIT];
- tc->t_startc = cc[VSTART];
- tc->t_stopc = cc[VSTOP];
- tc->t_eofc = cc[VEOF];
- tc->t_brkc = cc[VEOL];
+ tc->t_intrc = tty_getctrlchar(tp, VINTR);
+ tc->t_quitc = tty_getctrlchar(tp, VQUIT);
+ tc->t_startc = tty_getctrlchar(tp, VSTART);
+ tc->t_stopc = tty_getctrlchar(tp, VSTOP);
+ tc->t_eofc = tty_getctrlchar(tp, VEOF);
+ tc->t_brkc = tty_getctrlchar(tp, VEOL);
break;
}
case TIOCSETC: {
struct tchars *tc = (struct tchars *)data;
- u_char *cc = tp->t_cc;
- cc[VINTR] = tc->t_intrc;
- cc[VQUIT] = tc->t_quitc;
- cc[VSTART] = tc->t_startc;
- cc[VSTOP] = tc->t_stopc;
- cc[VEOF] = tc->t_eofc;
- cc[VEOL] = tc->t_brkc;
+ tty_setctrlchar(tp, VINTR, tc->t_intrc);
+ tty_setctrlchar(tp, VQUIT, tc->t_quitc);
+ tty_setctrlchar(tp, VSTART, tc->t_startc);
+ tty_setctrlchar(tp, VSTOP, tc->t_stopc);
+ tty_setctrlchar(tp, VEOF, tc->t_eofc);
+ tty_setctrlchar(tp, VEOL, tc->t_brkc);
if (tc->t_brkc == (char)-1)
- cc[VEOL2] = _POSIX_VDISABLE;
+ tty_setctrlchar(tp, VEOL2, _POSIX_VDISABLE);
break;
}
case TIOCSLTC: {
struct ltchars *ltc = (struct ltchars *)data;
- u_char *cc = tp->t_cc;
- cc[VSUSP] = ltc->t_suspc;
- cc[VDSUSP] = ltc->t_dsuspc;
- cc[VREPRINT] = ltc->t_rprntc;
- cc[VDISCARD] = ltc->t_flushc;
- cc[VWERASE] = ltc->t_werasc;
- cc[VLNEXT] = ltc->t_lnextc;
+ tty_setctrlchar(tp, VSUSP, ltc->t_suspc);
+ tty_setctrlchar(tp, VDSUSP, ltc->t_dsuspc);
+ tty_setctrlchar(tp, VREPRINT, ltc->t_rprntc);
+ tty_setctrlchar(tp, VDISCARD, ltc->t_flushc);
+ tty_setctrlchar(tp, VWERASE, ltc->t_werasc);
+ tty_setctrlchar(tp, VLNEXT, ltc->t_lnextc);
break;
}
case TIOCGLTC: {
struct ltchars *ltc = (struct ltchars *)data;
- u_char *cc = tp->t_cc;
- ltc->t_suspc = cc[VSUSP];
- ltc->t_dsuspc = cc[VDSUSP];
- ltc->t_rprntc = cc[VREPRINT];
- ltc->t_flushc = cc[VDISCARD];
- ltc->t_werasc = cc[VWERASE];
- ltc->t_lnextc = cc[VLNEXT];
+ ltc->t_suspc = tty_getctrlchar(tp, VSUSP);
+ ltc->t_dsuspc = tty_getctrlchar(tp, VDSUSP);
+ ltc->t_rprntc = tty_getctrlchar(tp, VREPRINT);
+ ltc->t_flushc = tty_getctrlchar(tp, VDISCARD);
+ ltc->t_werasc = tty_getctrlchar(tp, VWERASE);
+ ltc->t_lnextc = tty_getctrlchar(tp, VLNEXT);
break;
}
case TIOCLBIS:
Index: src/sys/kern/tty.c
diff -u src/sys/kern/tty.c:1.260 src/sys/kern/tty.c:1.261
--- src/sys/kern/tty.c:1.260 Thu May 22 16:28:06 2014
+++ src/sys/kern/tty.c Thu May 22 16:31:19 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: tty.c,v 1.260 2014/05/22 16:28:06 dholland Exp $ */
+/* $NetBSD: tty.c,v 1.261 2014/05/22 16:31:19 dholland Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -63,7 +63,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tty.c,v 1.260 2014/05/22 16:28:06 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tty.c,v 1.261 2014/05/22 16:31:19 dholland Exp $");
#include "opt_compat_netbsd.h"
@@ -2967,3 +2967,45 @@ ttysigintr(void *cookie)
mutex_spin_exit(&tty_lock);
mutex_exit(proc_lock);
}
+
+unsigned char
+tty_getctrlchar(struct tty *tp, unsigned which)
+{
+ KASSERT(which < NCCS);
+ return tp->t_cc[which];
+}
+
+void
+tty_setctrlchar(struct tty *tp, unsigned which, unsigned char val)
+{
+ KASSERT(which < NCCS);
+ tp->t_cc[which] = val;
+}
+
+int
+tty_try_xonxoff(struct tty *tp, unsigned char c)
+{
+ const struct cdevsw *cdev;
+
+ if (tp->t_iflag & IXON) {
+ if (c == tp->t_cc[VSTOP] && tp->t_cc[VSTOP] != _POSIX_VDISABLE) {
+ if ((tp->t_state & TS_TTSTOP) == 0) {
+ tp->t_state |= TS_TTSTOP;
+ cdev = cdevsw_lookup(tp->t_dev);
+ if (cdev != NULL)
+ (*cdev->d_stop)(tp, 0);
+ }
+ return 0;
+ }
+ if (c == tp->t_cc[VSTART] && tp->t_cc[VSTART] != _POSIX_VDISABLE) {
+ tp->t_state &= ~TS_TTSTOP;
+ if (tp->t_oproc != NULL) {
+ mutex_spin_enter(&tty_lock); /* XXX */
+ (*tp->t_oproc)(tp);
+ mutex_spin_exit(&tty_lock); /* XXX */
+ }
+ return 0;
+ }
+ }
+ return EAGAIN;
+}
Index: src/sys/net/ppp_tty.c
diff -u src/sys/net/ppp_tty.c:1.57 src/sys/net/ppp_tty.c:1.58
--- src/sys/net/ppp_tty.c:1.57 Mon Apr 5 07:22:24 2010
+++ src/sys/net/ppp_tty.c Thu May 22 16:31:19 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: ppp_tty.c,v 1.57 2010/04/05 07:22:24 joerg Exp $ */
+/* $NetBSD: ppp_tty.c,v 1.58 2014/05/22 16:31:19 dholland Exp $ */
/* Id: ppp_tty.c,v 1.3 1996/07/01 01:04:11 paulus Exp */
/*
@@ -93,7 +93,7 @@
/* from NetBSD: if_ppp.c,v 1.15.2.2 1994/07/28 05:17:58 cgd Exp */
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ppp_tty.c,v 1.57 2010/04/05 07:22:24 joerg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ppp_tty.c,v 1.58 2014/05/22 16:31:19 dholland Exp $");
#include "ppp.h"
@@ -978,8 +978,8 @@ pppinput(int c, struct tty *tp)
{
struct ppp_softc *sc;
struct mbuf *m;
- const struct cdevsw *cdev;
int ilen, s;
+ int result;
sc = (struct ppp_softc *) tp->t_sc;
if (sc == NULL || tp != (struct tty *) sc->sc_devp)
@@ -1000,26 +1000,12 @@ pppinput(int c, struct tty *tp)
/*
* Handle software flow control of output.
*/
- if (tp->t_iflag & IXON) {
- if (c == tp->t_cc[VSTOP] && tp->t_cc[VSTOP] != _POSIX_VDISABLE) {
- if ((tp->t_state & TS_TTSTOP) == 0) {
- tp->t_state |= TS_TTSTOP;
- cdev = cdevsw_lookup(tp->t_dev);
- if (cdev != NULL)
- (*cdev->d_stop)(tp, 0);
- }
- return 0;
- }
- if (c == tp->t_cc[VSTART] && tp->t_cc[VSTART] != _POSIX_VDISABLE) {
- tp->t_state &= ~TS_TTSTOP;
- if (tp->t_oproc != NULL) {
- mutex_spin_enter(&tty_lock); /* XXX */
- (*tp->t_oproc)(tp);
- mutex_spin_exit(&tty_lock); /* XXX */
- }
+ result = tty_try_xonxoff(tp, c);
+ if (result == 0) {
+ /* Character was recognized and consumed. */
return 0;
- }
}
+ /* Character wasn't consumed, continue processing it. */
s = spltty();
if (c & 0x80)
Index: src/sys/sys/tty.h
diff -u src/sys/sys/tty.h:1.91 src/sys/sys/tty.h:1.92
--- src/sys/sys/tty.h:1.91 Sun Feb 24 06:20:24 2013
+++ src/sys/sys/tty.h Thu May 22 16:31:19 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: tty.h,v 1.91 2013/02/24 06:20:24 matt Exp $ */
+/* $NetBSD: tty.h,v 1.92 2014/05/22 16:31:19 dholland Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -151,7 +151,9 @@ struct tty {
void *t_softc; /* pointer to driver's softc. */
};
+#ifdef TTY_ALLOW_PRIVATE
#define t_cc t_termios.c_cc
+#endif
#define t_cflag t_termios.c_cflag
#define t_iflag t_termios.c_iflag
#define t_ispeed t_termios.c_ispeed
@@ -303,6 +305,10 @@ void clfree(struct clist *);
extern int (*ttcompatvec)(struct tty *, u_long, void *, int, struct lwp *);
+unsigned char tty_getctrlchar(struct tty *, unsigned /*which*/);
+void tty_setctrlchar(struct tty *, unsigned /*which*/, unsigned char /*val*/);
+int tty_try_xonxoff(struct tty *, unsigned char /*c*/);
+
#endif /* _KERNEL */
#endif /* !_SYS_TTY_H_ */