diff options
-rw-r--r-- | sys/dev/cfe/cfe_console.c | 14 | ||||
-rw-r--r-- | sys/dev/dcons/dcons_os.c | 12 | ||||
-rw-r--r-- | sys/dev/ofw/ofw_console.c | 12 | ||||
-rw-r--r-- | sys/dev/sio/sio.c | 12 | ||||
-rw-r--r-- | sys/dev/syscons/syscons.c | 12 | ||||
-rw-r--r-- | sys/dev/uart/uart_tty.c | 12 | ||||
-rw-r--r-- | sys/dev/usb/serial/usb_serial.c | 12 | ||||
-rw-r--r-- | sys/dev/xen/console/console.c | 12 | ||||
-rw-r--r-- | sys/gdb/gdb_cons.c | 10 | ||||
-rw-r--r-- | sys/ia64/ia64/ssc.c | 10 | ||||
-rw-r--r-- | sys/kern/kern_cons.c | 26 | ||||
-rw-r--r-- | sys/mips/adm5120/console.c | 14 | ||||
-rw-r--r-- | sys/pc98/cbus/sio.c | 12 | ||||
-rw-r--r-- | sys/powerpc/mambo/mambo_console.c | 12 | ||||
-rw-r--r-- | sys/sys/cons.h | 10 |
15 files changed, 192 insertions, 0 deletions
diff --git a/sys/dev/cfe/cfe_console.c b/sys/dev/cfe/cfe_console.c index 5a6b0a2..485fd08 100644 --- a/sys/dev/cfe/cfe_console.c +++ b/sys/dev/cfe/cfe_console.c @@ -76,6 +76,8 @@ static cn_init_t cfe_cninit; static cn_term_t cfe_cnterm; static cn_getc_t cfe_cngetc; static cn_putc_t cfe_cnputc; +static cn_grab_t cfe_cngrab; +static cn_ungrab_t cfe_cnungrab; CONSOLE_DRIVER(cfe); @@ -183,6 +185,18 @@ cfe_cnterm(struct consdev *cp) } +static void +cfe_cngrab(struct consdev *cp) +{ + +} + +static void +cfe_cnungrab(struct consdev *cp) +{ + +} + static int cfe_cngetc(struct consdev *cp) { diff --git a/sys/dev/dcons/dcons_os.c b/sys/dev/dcons/dcons_os.c index d638d41..a37d64c 100644 --- a/sys/dev/dcons/dcons_os.c +++ b/sys/dev/dcons/dcons_os.c @@ -109,6 +109,8 @@ static cn_init_t dcons_cninit; static cn_term_t dcons_cnterm; static cn_getc_t dcons_cngetc; static cn_putc_t dcons_cnputc; +static cn_grab_t dcons_cngrab; +static cn_ungrab_t dcons_cnungrab; CONSOLE_DRIVER(dcons); @@ -246,6 +248,16 @@ dcons_cnterm(struct consdev *cp) { } +static void +dcons_cngrab(struct consdev *cp) +{ +} + +static void +dcons_cnungrab(struct consdev *cp) +{ +} + static int dcons_cngetc(struct consdev *cp) { diff --git a/sys/dev/ofw/ofw_console.c b/sys/dev/ofw/ofw_console.c index 62dbe51..e71d5c1 100644 --- a/sys/dev/ofw/ofw_console.c +++ b/sys/dev/ofw/ofw_console.c @@ -74,6 +74,8 @@ static cn_init_t ofw_cninit; static cn_term_t ofw_cnterm; static cn_getc_t ofw_cngetc; static cn_putc_t ofw_cnputc; +static cn_grab_t ofw_cngrab; +static cn_ungrab_t ofw_cnungrab; CONSOLE_DRIVER(ofw); @@ -192,6 +194,16 @@ ofw_cnterm(struct consdev *cp) { } +static void +ofw_cngrab(struct consdev *cp) +{ +} + +static void +ofw_cnungrab(struct consdev *cp) +{ +} + static int ofw_cngetc(struct consdev *cp) { diff --git a/sys/dev/sio/sio.c b/sys/dev/sio/sio.c index 7e2054e..d389f45 100644 --- a/sys/dev/sio/sio.c +++ b/sys/dev/sio/sio.c @@ -2293,6 +2293,8 @@ static cn_init_t sio_cninit; static cn_term_t sio_cnterm; static cn_getc_t sio_cngetc; static cn_putc_t sio_cnputc; +static cn_grab_t sio_cngrab; +static cn_ungrab_t sio_cnungrab; CONSOLE_DRIVER(sio); @@ -2512,6 +2514,16 @@ sio_cnterm(cp) comconsole = -1; } +static void +sio_cngrab(struct consdev *cp) +{ +} + +static void +sio_cnungrab(struct consdev *cp) +{ +} + static int sio_cngetc(struct consdev *cd) { diff --git a/sys/dev/syscons/syscons.c b/sys/dev/syscons/syscons.c index db678a5..f25026e 100644 --- a/sys/dev/syscons/syscons.c +++ b/sys/dev/syscons/syscons.c @@ -229,6 +229,8 @@ static cn_init_t sc_cninit; static cn_term_t sc_cnterm; static cn_getc_t sc_cngetc; static cn_putc_t sc_cnputc; +static cn_grab_t sc_cngrab; +static cn_ungrab_t sc_cnungrab; CONSOLE_DRIVER(sc); @@ -1609,6 +1611,16 @@ sc_cnterm(struct consdev *cp) } static void +sc_cngrab(struct consdev *cp) +{ +} + +static void +sc_cnungrab(struct consdev *cp) +{ +} + +static void sc_cnputc(struct consdev *cd, int c) { u_char buf[1]; diff --git a/sys/dev/uart/uart_tty.c b/sys/dev/uart/uart_tty.c index 2170108..97ee08d 100644 --- a/sys/dev/uart/uart_tty.c +++ b/sys/dev/uart/uart_tty.c @@ -54,6 +54,8 @@ static cn_init_t uart_cninit; static cn_term_t uart_cnterm; static cn_getc_t uart_cngetc; static cn_putc_t uart_cnputc; +static cn_grab_t uart_cngrab; +static cn_ungrab_t uart_cnungrab; CONSOLE_DRIVER(uart); @@ -108,6 +110,16 @@ uart_cnterm(struct consdev *cp) } static void +uart_cngrab(struct consdev *cp) +{ +} + +static void +uart_cnungrab(struct consdev *cp) +{ +} + +static void uart_cnputc(struct consdev *cp, int c) { diff --git a/sys/dev/usb/serial/usb_serial.c b/sys/dev/usb/serial/usb_serial.c index a3e6ffb..e63a0aa 100644 --- a/sys/dev/usb/serial/usb_serial.c +++ b/sys/dev/usb/serial/usb_serial.c @@ -1308,6 +1308,8 @@ static cn_init_t ucom_cninit; static cn_term_t ucom_cnterm; static cn_getc_t ucom_cngetc; static cn_putc_t ucom_cnputc; +static cn_grab_t ucom_cngrab; +static cn_ungrab_t ucom_cnungrab; CONSOLE_DRIVER(ucom); @@ -1332,6 +1334,16 @@ ucom_cnterm(struct consdev *cp) { } +static void +ucom_cngrab(struct consdev *cp) +{ +} + +static void +ucom_cnungrab(struct consdev *cp) +{ +} + static int ucom_cngetc(struct consdev *cd) { diff --git a/sys/dev/xen/console/console.c b/sys/dev/xen/console/console.c index 5a14623..6a845ca 100644 --- a/sys/dev/xen/console/console.c +++ b/sys/dev/xen/console/console.c @@ -50,6 +50,8 @@ static cn_init_t xc_cninit; static cn_term_t xc_cnterm; static cn_getc_t xc_cngetc; static cn_putc_t xc_cnputc; +static cn_grab_t xc_cngrab; +static cn_ungrab_t xc_cnungrab; #define XC_POLLTIME (hz/10) @@ -126,6 +128,16 @@ xc_cnterm(struct consdev *cp) { } +static void +xc_cngrab(struct consdev *cp) +{ +} + +static void +xc_cnungrab(struct consdev *cp) +{ +} + static int xc_cngetc(struct consdev *dev) { diff --git a/sys/gdb/gdb_cons.c b/sys/gdb/gdb_cons.c index 2e01cd4..6ecdc04 100644 --- a/sys/gdb/gdb_cons.c +++ b/sys/gdb/gdb_cons.c @@ -87,6 +87,16 @@ gdb_cnterm(struct consdev *cp) { } +static void +gdb_cngrab(struct consdev *cp) +{ +} + +static void +gdb_cnungrab(struct consdev *cp) +{ +} + static int gdb_cngetc(struct consdev *cp) { diff --git a/sys/ia64/ia64/ssc.c b/sys/ia64/ia64/ssc.c index ff810fc..95a6165 100644 --- a/sys/ia64/ia64/ssc.c +++ b/sys/ia64/ia64/ssc.c @@ -102,6 +102,16 @@ ssc_cnterm(struct consdev *cp) } static void +ssc_cngrab(struct consdev *cp) +{ +} + +static void +ssc_cnungrab(struct consdev *cp) +{ +} + +static void ssc_cnattach(void *arg) { struct tty *tp; diff --git a/sys/kern/kern_cons.c b/sys/kern/kern_cons.c index 42b98cf..75dc881 100644 --- a/sys/kern/kern_cons.c +++ b/sys/kern/kern_cons.c @@ -344,6 +344,32 @@ SYSCTL_PROC(_kern, OID_AUTO, consmute, CTLTYPE_INT|CTLFLAG_RW, 0, sizeof(cn_mute), sysctl_kern_consmute, "I", "State of the console muting"); +void +cngrab() +{ + struct cn_device *cnd; + struct consdev *cn; + + STAILQ_FOREACH(cnd, &cn_devlist, cnd_next) { + cn = cnd->cnd_cn; + if (!kdb_active || !(cn->cn_flags & CN_FLAG_NODEBUG)) + cn->cn_ops->cn_grab(cn); + } +} + +void +cnungrab() +{ + struct cn_device *cnd; + struct consdev *cn; + + STAILQ_FOREACH(cnd, &cn_devlist, cnd_next) { + cn = cnd->cnd_cn; + if (!kdb_active || !(cn->cn_flags & CN_FLAG_NODEBUG)) + cn->cn_ops->cn_ungrab(cn); + } +} + /* * Low level console routines. */ diff --git a/sys/mips/adm5120/console.c b/sys/mips/adm5120/console.c index 899aa5b..20cd53d 100644 --- a/sys/mips/adm5120/console.c +++ b/sys/mips/adm5120/console.c @@ -49,6 +49,8 @@ static cn_init_t uart_cninit; static cn_term_t uart_cnterm; static cn_getc_t uart_cngetc; static cn_putc_t uart_cnputc; +static cn_grab_t uart_cngrab; +static cn_ungrab_t uart_cnungrab; static void uart_cnprobe(struct consdev *cp) @@ -90,4 +92,16 @@ uart_cnterm(struct consdev * cp) } +static void +uart_cngrab(struct consdev *cp) +{ + +} + +static void +uart_cnungrab(struct consdev *cp) +{ + +} + CONSOLE_DRIVER(uart); diff --git a/sys/pc98/cbus/sio.c b/sys/pc98/cbus/sio.c index 959726f..754d4ad 100644 --- a/sys/pc98/cbus/sio.c +++ b/sys/pc98/cbus/sio.c @@ -3460,6 +3460,8 @@ static cn_init_t sio_cninit; static cn_term_t sio_cnterm; static cn_getc_t sio_cngetc; static cn_putc_t sio_cnputc; +static cn_grab_t sio_cngrab; +static cn_ungrab_t sio_cnungrab; CONSOLE_DRIVER(sio); @@ -3679,6 +3681,16 @@ sio_cnterm(cp) comconsole = -1; } +static void +sio_cngrab(struct consdev *cp) +{ +} + +static void +sio_cnungrab(struct consdev *cp) +{ +} + static int sio_cngetc(struct consdev *cd) { diff --git a/sys/powerpc/mambo/mambo_console.c b/sys/powerpc/mambo/mambo_console.c index 880ef57..c8b0ad7 100644 --- a/sys/powerpc/mambo/mambo_console.c +++ b/sys/powerpc/mambo/mambo_console.c @@ -69,6 +69,8 @@ static cn_init_t mambo_cninit; static cn_term_t mambo_cnterm; static cn_getc_t mambo_cngetc; static cn_putc_t mambo_cnputc; +static cn_grab_t mambo_cngrab; +static cn_ungrab_t mambo_cnungrab; CONSOLE_DRIVER(mambo); @@ -146,6 +148,16 @@ mambo_cnterm(struct consdev *cp) { } +static void +mambo_cngrab(struct consdev *cp) +{ +} + +static void +mambo_cnungrab(struct consdev *cp) +{ +} + static int mambo_cngetc(struct consdev *cp) { diff --git a/sys/sys/cons.h b/sys/sys/cons.h index e84318f..bd599c0 100644 --- a/sys/sys/cons.h +++ b/sys/sys/cons.h @@ -44,6 +44,8 @@ struct tty; typedef void cn_probe_t(struct consdev *); typedef void cn_init_t(struct consdev *); typedef void cn_term_t(struct consdev *); +typedef void cn_grab_t(struct consdev *); +typedef void cn_ungrab_t(struct consdev *); typedef int cn_getc_t(struct consdev *); typedef void cn_putc_t(struct consdev *, int); @@ -58,6 +60,10 @@ struct consdev_ops { /* kernel getchar interface */ cn_putc_t *cn_putc; /* kernel putchar interface */ + cn_grab_t *cn_grab; + /* grab console for exclusive kernel use */ + cn_ungrab_t *cn_ungrab; + /* ungrab console */ }; struct consdev { @@ -99,6 +105,8 @@ extern struct tty *constty; /* Temporary virtual console. */ .cn_term = name##_cnterm, \ .cn_getc = name##_cngetc, \ .cn_putc = name##_cnputc, \ + .cn_grab = name##_cngrab, \ + .cn_ungrab = name##_cnungrab, \ }; \ CONSOLE_DEVICE(name##_consdev, name##_consdev_ops, NULL) @@ -109,6 +117,8 @@ int cnadd(struct consdev *); void cnavailable(struct consdev *, int); void cnremove(struct consdev *); void cnselect(struct consdev *); +void cngrab(void); +void cnungrab(void); int cncheckc(void); int cngetc(void); void cnputc(int); |