aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/kbd
diff options
context:
space:
mode:
authorMaksim Yevmenkin <emax@FreeBSD.org>2006-02-28 23:46:23 +0000
committerMaksim Yevmenkin <emax@FreeBSD.org>2006-02-28 23:46:23 +0000
commitd168d9548740f54012ff00051c306d1527a28702 (patch)
tree1dfe4b5e62c72a4a8be5ecf2979324cfc038d50e /sys/dev/kbd
parent464fcfbc5c7fbe28ae0ac468ef0680f28a55aeeb (diff)
Notes
Diffstat (limited to 'sys/dev/kbd')
-rw-r--r--sys/dev/kbd/kbd.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/sys/dev/kbd/kbd.c b/sys/dev/kbd/kbd.c
index 978644139277..1c004c3fd8a2 100644
--- a/sys/dev/kbd/kbd.c
+++ b/sys/dev/kbd/kbd.c
@@ -185,8 +185,12 @@ kbd_register(keyboard_t *kbd)
{
const keyboard_driver_t **list;
const keyboard_driver_t *p;
+ keyboard_t *mux;
+ keyboard_info_t ki;
int index;
+ mux = kbd_get_keyboard(kbd_find_keyboard("kbdmux", -1));
+
for (index = 0; index < keyboards; ++index) {
if (keyboard[index] == NULL)
break;
@@ -208,6 +212,16 @@ kbd_register(keyboard_t *kbd)
if (strcmp(p->name, kbd->kb_name) == 0) {
keyboard[index] = kbd;
kbdsw[index] = p->kbdsw;
+
+ if (mux != NULL) {
+ bzero(&ki, sizeof(ki));
+ strcpy(ki.kb_name, kbd->kb_name);
+ ki.kb_unit = kbd->kb_unit;
+
+ (*kbdsw[mux->kb_index]->ioctl)
+ (mux, KBADDKBD, (caddr_t) &ki);
+ }
+
return (index);
}
}
@@ -216,6 +230,16 @@ kbd_register(keyboard_t *kbd)
if (strcmp(p->name, kbd->kb_name) == 0) {
keyboard[index] = kbd;
kbdsw[index] = p->kbdsw;
+
+ if (mux != NULL) {
+ bzero(&ki, sizeof(ki));
+ strcpy(ki.kb_name, kbd->kb_name);
+ ki.kb_unit = kbd->kb_unit;
+
+ (*kbdsw[mux->kb_index]->ioctl)
+ (mux, KBADDKBD, (caddr_t) &ki);
+ }
+
return (index);
}
}