diff options
| author | Maksim Yevmenkin <emax@FreeBSD.org> | 2006-02-28 23:46:23 +0000 |
|---|---|---|
| committer | Maksim Yevmenkin <emax@FreeBSD.org> | 2006-02-28 23:46:23 +0000 |
| commit | d168d9548740f54012ff00051c306d1527a28702 (patch) | |
| tree | 1dfe4b5e62c72a4a8be5ecf2979324cfc038d50e /sys/dev/kbd | |
| parent | 464fcfbc5c7fbe28ae0ac468ef0680f28a55aeeb (diff) | |
Notes
Diffstat (limited to 'sys/dev/kbd')
| -rw-r--r-- | sys/dev/kbd/kbd.c | 24 |
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); } } |
