summaryrefslogtreecommitdiffstats
path: root/sys/dev/uart
diff options
context:
space:
mode:
authormarius <marius@FreeBSD.org>2005-06-04 21:54:31 +0000
committermarius <marius@FreeBSD.org>2005-06-04 21:54:31 +0000
commitf1c26a9917b41db8f8f147a22576945ea521bb0b (patch)
tree1898fbb5445e5e8dcfc7535d4b84168d69882873 /sys/dev/uart
parentd128ff3218882f4ff46a3cefae1cc7b96bfbee79 (diff)
downloadFreeBSD-src-f1c26a9917b41db8f8f147a22576945ea521bb0b.zip
FreeBSD-src-f1c26a9917b41db8f8f147a22576945ea521bb0b.tar.gz
Replace the band-aid for allowing to call sunkbd_configure() multiple
times which was added in the last revision with what should be a proper solution as long as keyboards that were pluggged in after the kernel has fully booted aren't supported. I.e. when sunkbd_configure() is called for the high-level console probe make sure that the keyboard is both successfully configured (i.e. also probed) and attached. The band- aid left the possibility to attach the keyboard device to the high-level console without attaching the keyboard device itself when the keyboard is plugged in after uart(4) attached but before syscons(4) does.
Diffstat (limited to 'sys/dev/uart')
-rw-r--r--sys/dev/uart/uart_kbd_sun.c33
1 files changed, 19 insertions, 14 deletions
diff --git a/sys/dev/uart/uart_kbd_sun.c b/sys/dev/uart/uart_kbd_sun.c
index 97c8bc5..4d024d2 100644
--- a/sys/dev/uart/uart_kbd_sun.c
+++ b/sys/dev/uart/uart_kbd_sun.c
@@ -190,22 +190,27 @@ sunkbd_configure(int flags)
{
struct sunkbd_softc *sc;
- if (KBD_IS_CONFIGURED(&sunkbd_softc.sc_kbd))
- goto found;
-
- if (!KBD_IS_INITIALIZED(&sunkbd_softc.sc_kbd)) {
- if (uart_cpu_getdev(UART_DEV_KEYBOARD, &uart_keyboard))
- return (0);
- if (uart_probe(&uart_keyboard))
+ /*
+ * We are only prepared to be used for the high-level console
+ * when the keyboard is both configured and attached.
+ */
+ if (!(flags & KB_CONF_PROBE_ONLY)) {
+ if (KBD_IS_INITIALIZED(&sunkbd_softc.sc_kbd))
+ goto found;
+ else
return (0);
- uart_init(&uart_keyboard);
-
- uart_keyboard.type = UART_DEV_KEYBOARD;
- uart_keyboard.attach = sunkbd_attach;
- uart_add_sysdev(&uart_keyboard);
- KBD_INIT_DONE(&sunkbd_softc.sc_kbd);
}
+ if (uart_cpu_getdev(UART_DEV_KEYBOARD, &uart_keyboard))
+ return (0);
+ if (uart_probe(&uart_keyboard))
+ return (0);
+ uart_init(&uart_keyboard);
+
+ uart_keyboard.type = UART_DEV_KEYBOARD;
+ uart_keyboard.attach = sunkbd_attach;
+ uart_add_sysdev(&uart_keyboard);
+
if (sunkbd_probe_keyboard(&uart_keyboard) == -1)
return (0);
@@ -222,7 +227,6 @@ sunkbd_configure(int flags)
kbd_register(&sc->sc_kbd);
sc->sc_sysdev = &uart_keyboard;
- KBD_CONFIG_DONE(&sc->sc_kbd);
found:
/* Return number of found keyboards. */
@@ -254,6 +258,7 @@ sunkbd_attach(struct uart_softc *sc)
&sunkbd_softc, SWI_TTY, INTR_TYPE_TTY, &sc->sc_softih);
sc->sc_opened = 1;
+ KBD_INIT_DONE(&sunkbd_softc.sc_kbd);
}
return (0);
OpenPOWER on IntegriCloud