]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/dev/usb/input/ukbd.c
hid: Import usbhid - USB transport backend for HID subsystem.
[FreeBSD/FreeBSD.git] / sys / dev / usb / input / ukbd.c
1 #include <sys/cdefs.h>
2 __FBSDID("$FreeBSD$");
3
4 /*-
5  * SPDX-License-Identifier: BSD-2-Clause-NetBSD
6  *
7  * Copyright (c) 1998 The NetBSD Foundation, Inc.
8  * All rights reserved.
9  *
10  * This code is derived from software contributed to The NetBSD Foundation
11  * by Lennart Augustsson (lennart@augustsson.net) at
12  * Carlstedt Research & Technology.
13  *
14  * Redistribution and use in source and binary forms, with or without
15  * modification, are permitted provided that the following conditions
16  * are met:
17  * 1. Redistributions of source code must retain the above copyright
18  *    notice, this list of conditions and the following disclaimer.
19  * 2. Redistributions in binary form must reproduce the above copyright
20  *    notice, this list of conditions and the following disclaimer in the
21  *    documentation and/or other materials provided with the distribution.
22  *
23  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
24  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
25  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
26  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
27  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
32  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33  * POSSIBILITY OF SUCH DAMAGE.
34  *
35  */
36
37 /*
38  * HID spec: http://www.usb.org/developers/devclass_docs/HID1_11.pdf
39  */
40
41 #include "opt_kbd.h"
42 #include "opt_ukbd.h"
43 #include "opt_evdev.h"
44
45 #include <sys/stdint.h>
46 #include <sys/stddef.h>
47 #include <sys/param.h>
48 #include <sys/queue.h>
49 #include <sys/types.h>
50 #include <sys/systm.h>
51 #include <sys/kernel.h>
52 #include <sys/bus.h>
53 #include <sys/module.h>
54 #include <sys/lock.h>
55 #include <sys/mutex.h>
56 #include <sys/condvar.h>
57 #include <sys/sysctl.h>
58 #include <sys/sx.h>
59 #include <sys/unistd.h>
60 #include <sys/callout.h>
61 #include <sys/malloc.h>
62 #include <sys/priv.h>
63 #include <sys/proc.h>
64
65 #include <dev/hid/hid.h>
66
67 #include <dev/usb/usb.h>
68 #include <dev/usb/usbdi.h>
69 #include <dev/usb/usbdi_util.h>
70 #include <dev/usb/usbhid.h>
71
72 #define USB_DEBUG_VAR ukbd_debug
73 #include <dev/usb/usb_debug.h>
74
75 #include <dev/usb/quirk/usb_quirk.h>
76
77 #ifdef EVDEV_SUPPORT
78 #include <dev/evdev/input.h>
79 #include <dev/evdev/evdev.h>
80 #endif
81
82 #include <sys/ioccom.h>
83 #include <sys/filio.h>
84 #include <sys/kbio.h>
85
86 #include <dev/kbd/kbdreg.h>
87
88 /* the initial key map, accent map and fkey strings */
89 #if defined(UKBD_DFLT_KEYMAP) && !defined(KLD_MODULE)
90 #define KBD_DFLT_KEYMAP
91 #include "ukbdmap.h"
92 #endif
93
94 /* the following file must be included after "ukbdmap.h" */
95 #include <dev/kbd/kbdtables.h>
96
97 #ifdef USB_DEBUG
98 static int ukbd_debug = 0;
99 static int ukbd_no_leds = 0;
100 static int ukbd_pollrate = 0;
101
102 static SYSCTL_NODE(_hw_usb, OID_AUTO, ukbd, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
103     "USB keyboard");
104 SYSCTL_INT(_hw_usb_ukbd, OID_AUTO, debug, CTLFLAG_RWTUN,
105     &ukbd_debug, 0, "Debug level");
106 SYSCTL_INT(_hw_usb_ukbd, OID_AUTO, no_leds, CTLFLAG_RWTUN,
107     &ukbd_no_leds, 0, "Disables setting of keyboard leds");
108 SYSCTL_INT(_hw_usb_ukbd, OID_AUTO, pollrate, CTLFLAG_RWTUN,
109     &ukbd_pollrate, 0, "Force this polling rate, 1-1000Hz");
110 #endif
111
112 #define UKBD_EMULATE_ATSCANCODE        1
113 #define UKBD_DRIVER_NAME          "ukbd"
114 #define UKBD_NKEYCODE                 256 /* units */
115 #define UKBD_IN_BUF_SIZE  (4 * UKBD_NKEYCODE) /* scancodes */
116 #define UKBD_IN_BUF_FULL  ((UKBD_IN_BUF_SIZE / 2) - 1)  /* scancodes */
117 #define UKBD_NFKEY        (sizeof(fkey_tab)/sizeof(fkey_tab[0]))        /* units */
118 #define UKBD_BUFFER_SIZE              64        /* bytes */
119 #define UKBD_KEY_PRESSED(map, key) ({ \
120         CTASSERT((key) >= 0 && (key) < UKBD_NKEYCODE); \
121         ((map)[(key) / 64] & (1ULL << ((key) % 64))); \
122 })
123
124 #define MOD_EJECT       0x01
125 #define MOD_FN          0x02
126
127 struct ukbd_data {
128         uint64_t bitmap[howmany(UKBD_NKEYCODE, 64)];
129 };
130
131 enum {
132         UKBD_INTR_DT_0,
133         UKBD_INTR_DT_1,
134         UKBD_CTRL_LED,
135         UKBD_N_TRANSFER,
136 };
137
138 struct ukbd_softc {
139         keyboard_t sc_kbd;
140         keymap_t sc_keymap;
141         accentmap_t sc_accmap;
142         fkeytab_t sc_fkeymap[UKBD_NFKEY];
143         uint64_t sc_loc_key_valid[howmany(UKBD_NKEYCODE, 64)];
144         struct hid_location sc_loc_apple_eject;
145         struct hid_location sc_loc_apple_fn;
146         struct hid_location sc_loc_key[UKBD_NKEYCODE];
147         struct hid_location sc_loc_numlock;
148         struct hid_location sc_loc_capslock;
149         struct hid_location sc_loc_scrolllock;
150         struct usb_callout sc_callout;
151         struct ukbd_data sc_ndata;
152         struct ukbd_data sc_odata;
153
154         struct thread *sc_poll_thread;
155         struct usb_device *sc_udev;
156         struct usb_interface *sc_iface;
157         struct usb_xfer *sc_xfer[UKBD_N_TRANSFER];
158 #ifdef EVDEV_SUPPORT
159         struct evdev_dev *sc_evdev;
160 #endif
161
162         sbintime_t sc_co_basetime;
163         int     sc_delay;
164         uint32_t sc_repeat_time;
165         uint32_t sc_input[UKBD_IN_BUF_SIZE];    /* input buffer */
166         uint32_t sc_time_ms;
167         uint32_t sc_composed_char;      /* composed char code, if non-zero */
168 #ifdef UKBD_EMULATE_ATSCANCODE
169         uint32_t sc_buffered_char[2];
170 #endif
171         uint32_t sc_flags;              /* flags */
172 #define UKBD_FLAG_COMPOSE       0x00000001
173 #define UKBD_FLAG_POLLING       0x00000002
174 #define UKBD_FLAG_SET_LEDS      0x00000004
175 #define UKBD_FLAG_ATTACHED      0x00000010
176 #define UKBD_FLAG_GONE          0x00000020
177
178 #define UKBD_FLAG_HID_MASK      0x003fffc0
179 #define UKBD_FLAG_APPLE_EJECT   0x00000040
180 #define UKBD_FLAG_APPLE_FN      0x00000080
181 #define UKBD_FLAG_APPLE_SWAP    0x00000100
182 #define UKBD_FLAG_NUMLOCK       0x00080000
183 #define UKBD_FLAG_CAPSLOCK      0x00100000
184 #define UKBD_FLAG_SCROLLLOCK    0x00200000
185
186         int     sc_mode;                /* input mode (K_XLATE,K_RAW,K_CODE) */
187         int     sc_state;               /* shift/lock key state */
188         int     sc_accents;             /* accent key index (> 0) */
189         int     sc_polling;             /* polling recursion count */
190         int     sc_led_size;
191         int     sc_kbd_size;
192
193         uint16_t sc_inputs;
194         uint16_t sc_inputhead;
195         uint16_t sc_inputtail;
196
197         uint8_t sc_leds;                /* store for async led requests */
198         uint8_t sc_iface_index;
199         uint8_t sc_iface_no;
200         uint8_t sc_id_apple_eject;
201         uint8_t sc_id_apple_fn;
202         uint8_t sc_id_loc_key[UKBD_NKEYCODE];
203         uint8_t sc_id_numlock;
204         uint8_t sc_id_capslock;
205         uint8_t sc_id_scrolllock;
206         uint8_t sc_kbd_id;
207         uint8_t sc_repeat_key;
208
209         uint8_t sc_buffer[UKBD_BUFFER_SIZE];
210 };
211
212 #define KEY_NONE          0x00
213 #define KEY_ERROR         0x01
214
215 #define KEY_PRESS         0
216 #define KEY_RELEASE       0x400
217 #define KEY_INDEX(c)      ((c) & 0xFF)
218
219 #define SCAN_PRESS        0
220 #define SCAN_RELEASE      0x80
221 #define SCAN_PREFIX_E0    0x100
222 #define SCAN_PREFIX_E1    0x200
223 #define SCAN_PREFIX_CTL   0x400
224 #define SCAN_PREFIX_SHIFT 0x800
225 #define SCAN_PREFIX     (SCAN_PREFIX_E0  | SCAN_PREFIX_E1 | \
226                          SCAN_PREFIX_CTL | SCAN_PREFIX_SHIFT)
227 #define SCAN_CHAR(c)    ((c) & 0x7f)
228
229 #define UKBD_LOCK()     USB_MTX_LOCK(&Giant)
230 #define UKBD_UNLOCK()   USB_MTX_UNLOCK(&Giant)
231 #define UKBD_LOCK_ASSERT()      USB_MTX_ASSERT(&Giant, MA_OWNED)
232
233 #define NN 0                            /* no translation */
234 /*
235  * Translate USB keycodes to AT keyboard scancodes.
236  */
237 /*
238  * FIXME: Mac USB keyboard generates:
239  * 0x53: keypad NumLock/Clear
240  * 0x66: Power
241  * 0x67: keypad =
242  * 0x68: F13
243  * 0x69: F14
244  * 0x6a: F15
245  * 
246  * USB Apple Keyboard JIS generates:
247  * 0x90: Kana
248  * 0x91: Eisu
249  */
250 static const uint8_t ukbd_trtab[256] = {
251         0, 0, 0, 0, 30, 48, 46, 32,     /* 00 - 07 */
252         18, 33, 34, 35, 23, 36, 37, 38, /* 08 - 0F */
253         50, 49, 24, 25, 16, 19, 31, 20, /* 10 - 17 */
254         22, 47, 17, 45, 21, 44, 2, 3,   /* 18 - 1F */
255         4, 5, 6, 7, 8, 9, 10, 11,       /* 20 - 27 */
256         28, 1, 14, 15, 57, 12, 13, 26,  /* 28 - 2F */
257         27, 43, 43, 39, 40, 41, 51, 52, /* 30 - 37 */
258         53, 58, 59, 60, 61, 62, 63, 64, /* 38 - 3F */
259         65, 66, 67, 68, 87, 88, 92, 70, /* 40 - 47 */
260         104, 102, 94, 96, 103, 99, 101, 98,     /* 48 - 4F */
261         97, 100, 95, 69, 91, 55, 74, 78,/* 50 - 57 */
262         89, 79, 80, 81, 75, 76, 77, 71, /* 58 - 5F */
263         72, 73, 82, 83, 86, 107, 122, NN,       /* 60 - 67 */
264         NN, NN, NN, NN, NN, NN, NN, NN, /* 68 - 6F */
265         NN, NN, NN, NN, 115, 108, 111, 113,     /* 70 - 77 */
266         109, 110, 112, 118, 114, 116, 117, 119, /* 78 - 7F */
267         121, 120, NN, NN, NN, NN, NN, 123,      /* 80 - 87 */
268         124, 125, 126, 127, 128, NN, NN, NN,    /* 88 - 8F */
269         129, 130, NN, NN, NN, NN, NN, NN,       /* 90 - 97 */
270         NN, NN, NN, NN, NN, NN, NN, NN, /* 98 - 9F */
271         NN, NN, NN, NN, NN, NN, NN, NN, /* A0 - A7 */
272         NN, NN, NN, NN, NN, NN, NN, NN, /* A8 - AF */
273         NN, NN, NN, NN, NN, NN, NN, NN, /* B0 - B7 */
274         NN, NN, NN, NN, NN, NN, NN, NN, /* B8 - BF */
275         NN, NN, NN, NN, NN, NN, NN, NN, /* C0 - C7 */
276         NN, NN, NN, NN, NN, NN, NN, NN, /* C8 - CF */
277         NN, NN, NN, NN, NN, NN, NN, NN, /* D0 - D7 */
278         NN, NN, NN, NN, NN, NN, NN, NN, /* D8 - DF */
279         29, 42, 56, 105, 90, 54, 93, 106,       /* E0 - E7 */
280         NN, NN, NN, NN, NN, NN, NN, NN, /* E8 - EF */
281         NN, NN, NN, NN, NN, NN, NN, NN, /* F0 - F7 */
282         NN, NN, NN, NN, NN, NN, NN, NN, /* F8 - FF */
283 };
284
285 static const uint8_t ukbd_boot_desc[] = {
286         0x05, 0x01, 0x09, 0x06, 0xa1,
287         0x01, 0x05, 0x07, 0x19, 0xe0,
288         0x29, 0xe7, 0x15, 0x00, 0x25,
289         0x01, 0x75, 0x01, 0x95, 0x08,
290         0x81, 0x02, 0x95, 0x01, 0x75,
291         0x08, 0x81, 0x01, 0x95, 0x03,
292         0x75, 0x01, 0x05, 0x08, 0x19,
293         0x01, 0x29, 0x03, 0x91, 0x02,
294         0x95, 0x05, 0x75, 0x01, 0x91,
295         0x01, 0x95, 0x06, 0x75, 0x08,
296         0x15, 0x00, 0x26, 0xff, 0x00,
297         0x05, 0x07, 0x19, 0x00, 0x2a,
298         0xff, 0x00, 0x81, 0x00, 0xc0
299 };
300
301 /* prototypes */
302 static void     ukbd_timeout(void *);
303 static void     ukbd_set_leds(struct ukbd_softc *, uint8_t);
304 static int      ukbd_set_typematic(keyboard_t *, int);
305 #ifdef UKBD_EMULATE_ATSCANCODE
306 static uint32_t ukbd_atkeycode(int, const uint64_t *);
307 static int      ukbd_key2scan(struct ukbd_softc *, int, const uint64_t *, int);
308 #endif
309 static uint32_t ukbd_read_char(keyboard_t *, int);
310 static void     ukbd_clear_state(keyboard_t *);
311 static int      ukbd_ioctl(keyboard_t *, u_long, caddr_t);
312 static int      ukbd_enable(keyboard_t *);
313 static int      ukbd_disable(keyboard_t *);
314 static void     ukbd_interrupt(struct ukbd_softc *);
315 static void     ukbd_event_keyinput(struct ukbd_softc *);
316
317 static device_probe_t ukbd_probe;
318 static device_attach_t ukbd_attach;
319 static device_detach_t ukbd_detach;
320 static device_resume_t ukbd_resume;
321
322 #ifdef EVDEV_SUPPORT
323 static evdev_event_t ukbd_ev_event;
324
325 static const struct evdev_methods ukbd_evdev_methods = {
326         .ev_event = ukbd_ev_event,
327 };
328 #endif
329
330 static bool
331 ukbd_any_key_pressed(struct ukbd_softc *sc)
332 {
333         bool ret = false;
334         unsigned i;
335
336         for (i = 0; i != howmany(UKBD_NKEYCODE, 64); i++)
337                 ret |= (sc->sc_odata.bitmap[i] != 0);
338         return (ret);
339 }
340
341 static bool
342 ukbd_any_key_valid(struct ukbd_softc *sc)
343 {
344         bool ret = false;
345         unsigned i;
346
347         for (i = 0; i != howmany(UKBD_NKEYCODE, 64); i++)
348                 ret |= (sc->sc_loc_key_valid[i] != 0);
349         return (ret);
350 }
351
352 static bool
353 ukbd_is_modifier_key(uint32_t key)
354 {
355
356         return (key >= 0xe0 && key <= 0xe7);
357 }
358
359 static void
360 ukbd_start_timer(struct ukbd_softc *sc)
361 {
362         sbintime_t delay, now, prec;
363
364         now = sbinuptime();
365
366         /* check if initial delay passed and fallback to key repeat delay */
367         if (sc->sc_delay == 0)
368                 sc->sc_delay = sc->sc_kbd.kb_delay2;
369
370         /* compute timeout */
371         delay = SBT_1MS * sc->sc_delay;
372         sc->sc_co_basetime += delay;
373
374         /* check if we are running behind */
375         if (sc->sc_co_basetime < now)
376                 sc->sc_co_basetime = now;
377
378         /* This is rarely called, so prefer precision to efficiency. */
379         prec = qmin(delay >> 7, SBT_1MS * 10);
380         usb_callout_reset_sbt(&sc->sc_callout, sc->sc_co_basetime, prec,
381             ukbd_timeout, sc, C_ABSOLUTE);
382 }
383
384 static void
385 ukbd_put_key(struct ukbd_softc *sc, uint32_t key)
386 {
387
388         UKBD_LOCK_ASSERT();
389
390         DPRINTF("0x%02x (%d) %s\n", key, key,
391             (key & KEY_RELEASE) ? "released" : "pressed");
392
393 #ifdef EVDEV_SUPPORT
394         if (evdev_rcpt_mask & EVDEV_RCPT_HW_KBD && sc->sc_evdev != NULL)
395                 evdev_push_event(sc->sc_evdev, EV_KEY,
396                     evdev_hid2key(KEY_INDEX(key)), !(key & KEY_RELEASE));
397 #endif
398
399         if (sc->sc_inputs < UKBD_IN_BUF_SIZE) {
400                 sc->sc_input[sc->sc_inputtail] = key;
401                 ++(sc->sc_inputs);
402                 ++(sc->sc_inputtail);
403                 if (sc->sc_inputtail >= UKBD_IN_BUF_SIZE) {
404                         sc->sc_inputtail = 0;
405                 }
406         } else {
407                 DPRINTF("input buffer is full\n");
408         }
409 }
410
411 static void
412 ukbd_do_poll(struct ukbd_softc *sc, uint8_t wait)
413 {
414
415         UKBD_LOCK_ASSERT();
416         KASSERT((sc->sc_flags & UKBD_FLAG_POLLING) != 0,
417             ("ukbd_do_poll called when not polling\n"));
418         DPRINTFN(2, "polling\n");
419
420         if (USB_IN_POLLING_MODE_FUNC() == 0) {
421                 /*
422                  * In this context the kernel is polling for input,
423                  * but the USB subsystem works in normal interrupt-driven
424                  * mode, so we just wait on the USB threads to do the job.
425                  * Note that we currently hold the Giant, but it's also used
426                  * as the transfer mtx, so we must release it while waiting.
427                  */
428                 while (sc->sc_inputs == 0) {
429                         /*
430                          * Give USB threads a chance to run.  Note that
431                          * kern_yield performs DROP_GIANT + PICKUP_GIANT.
432                          */
433                         kern_yield(PRI_UNCHANGED);
434                         if (!wait)
435                                 break;
436                 }
437                 return;
438         }
439
440         while (sc->sc_inputs == 0) {
441                 usbd_transfer_poll(sc->sc_xfer, UKBD_N_TRANSFER);
442
443                 /* Delay-optimised support for repetition of keys */
444                 if (ukbd_any_key_pressed(sc)) {
445                         /* a key is pressed - need timekeeping */
446                         DELAY(1000);
447
448                         /* 1 millisecond has passed */
449                         sc->sc_time_ms += 1;
450                 }
451
452                 ukbd_interrupt(sc);
453
454                 if (!wait)
455                         break;
456         }
457 }
458
459 static int32_t
460 ukbd_get_key(struct ukbd_softc *sc, uint8_t wait)
461 {
462         int32_t c;
463
464         UKBD_LOCK_ASSERT();
465         KASSERT((USB_IN_POLLING_MODE_FUNC() == 0) ||
466             (sc->sc_flags & UKBD_FLAG_POLLING) != 0,
467             ("not polling in kdb or panic\n"));
468
469         if (sc->sc_inputs == 0 &&
470             (sc->sc_flags & UKBD_FLAG_GONE) == 0) {
471                 /* start transfer, if not already started */
472                 usbd_transfer_start(sc->sc_xfer[UKBD_INTR_DT_0]);
473                 usbd_transfer_start(sc->sc_xfer[UKBD_INTR_DT_1]);
474         }
475
476         if (sc->sc_flags & UKBD_FLAG_POLLING)
477                 ukbd_do_poll(sc, wait);
478
479         if (sc->sc_inputs == 0) {
480                 c = -1;
481         } else {
482                 c = sc->sc_input[sc->sc_inputhead];
483                 --(sc->sc_inputs);
484                 ++(sc->sc_inputhead);
485                 if (sc->sc_inputhead >= UKBD_IN_BUF_SIZE) {
486                         sc->sc_inputhead = 0;
487                 }
488         }
489         return (c);
490 }
491
492 static void
493 ukbd_interrupt(struct ukbd_softc *sc)
494 {
495         const uint32_t now = sc->sc_time_ms;
496         unsigned key;
497
498         UKBD_LOCK_ASSERT();
499
500         /* Check for modifier key changes first */
501         for (key = 0xe0; key != 0xe8; key++) {
502                 const uint64_t mask = 1ULL << (key % 64);
503                 const uint64_t delta =
504                     sc->sc_odata.bitmap[key / 64] ^
505                     sc->sc_ndata.bitmap[key / 64];
506
507                 if (delta & mask) {
508                         if (sc->sc_odata.bitmap[key / 64] & mask)
509                                 ukbd_put_key(sc, key | KEY_RELEASE);
510                         else
511                                 ukbd_put_key(sc, key | KEY_PRESS);
512                 }
513         }
514
515         /* Check for key changes */
516         for (key = 0; key != UKBD_NKEYCODE; key++) {
517                 const uint64_t mask = 1ULL << (key % 64);
518                 const uint64_t delta =
519                     sc->sc_odata.bitmap[key / 64] ^
520                     sc->sc_ndata.bitmap[key / 64];
521
522                 if (mask == 1 && delta == 0) {
523                         key += 63;
524                         continue;       /* skip empty areas */
525                 } else if (ukbd_is_modifier_key(key)) {
526                         continue;
527                 } else if (delta & mask) {
528                         if (sc->sc_odata.bitmap[key / 64] & mask) {
529                                 ukbd_put_key(sc, key | KEY_RELEASE);
530
531                                 /* clear repeating key, if any */
532                                 if (sc->sc_repeat_key == key)
533                                         sc->sc_repeat_key = 0;
534                         } else {
535                                 ukbd_put_key(sc, key | KEY_PRESS);
536
537                                 sc->sc_co_basetime = sbinuptime();
538                                 sc->sc_delay = sc->sc_kbd.kb_delay1;
539                                 ukbd_start_timer(sc);
540
541                                 /* set repeat time for last key */
542                                 sc->sc_repeat_time = now + sc->sc_kbd.kb_delay1;
543                                 sc->sc_repeat_key = key;
544                         }
545                 }
546         }
547
548         /* synchronize old data with new data */
549         sc->sc_odata = sc->sc_ndata;
550
551         /* check if last key is still pressed */
552         if (sc->sc_repeat_key != 0) {
553                 const int32_t dtime = (sc->sc_repeat_time - now);
554
555                 /* check if time has elapsed */
556                 if (dtime <= 0) {
557                         ukbd_put_key(sc, sc->sc_repeat_key | KEY_PRESS);
558                         sc->sc_repeat_time = now + sc->sc_kbd.kb_delay2;
559                 }
560         }
561
562 #ifdef EVDEV_SUPPORT
563         if (evdev_rcpt_mask & EVDEV_RCPT_HW_KBD && sc->sc_evdev != NULL)
564                 evdev_sync(sc->sc_evdev);
565 #endif
566
567         /* wakeup keyboard system */
568         ukbd_event_keyinput(sc);
569 }
570
571 static void
572 ukbd_event_keyinput(struct ukbd_softc *sc)
573 {
574         int c;
575
576         UKBD_LOCK_ASSERT();
577
578         if ((sc->sc_flags & UKBD_FLAG_POLLING) != 0)
579                 return;
580
581         if (sc->sc_inputs == 0)
582                 return;
583
584         if (KBD_IS_ACTIVE(&sc->sc_kbd) &&
585             KBD_IS_BUSY(&sc->sc_kbd)) {
586                 /* let the callback function process the input */
587                 (sc->sc_kbd.kb_callback.kc_func) (&sc->sc_kbd, KBDIO_KEYINPUT,
588                     sc->sc_kbd.kb_callback.kc_arg);
589         } else {
590                 /* read and discard the input, no one is waiting for it */
591                 do {
592                         c = ukbd_read_char(&sc->sc_kbd, 0);
593                 } while (c != NOKEY);
594         }
595 }
596
597 static void
598 ukbd_timeout(void *arg)
599 {
600         struct ukbd_softc *sc = arg;
601
602         UKBD_LOCK_ASSERT();
603
604         sc->sc_time_ms += sc->sc_delay;
605         sc->sc_delay = 0;
606
607         ukbd_interrupt(sc);
608
609         /* Make sure any leftover key events gets read out */
610         ukbd_event_keyinput(sc);
611
612         if (ukbd_any_key_pressed(sc) || (sc->sc_inputs != 0)) {
613                 ukbd_start_timer(sc);
614         }
615 }
616
617 static uint32_t
618 ukbd_apple_fn(uint32_t keycode)
619 {
620         switch (keycode) {
621         case 0x28: return 0x49; /* RETURN -> INSERT */
622         case 0x2a: return 0x4c; /* BACKSPACE -> DEL */
623         case 0x50: return 0x4a; /* LEFT ARROW -> HOME */
624         case 0x4f: return 0x4d; /* RIGHT ARROW -> END */
625         case 0x52: return 0x4b; /* UP ARROW -> PGUP */
626         case 0x51: return 0x4e; /* DOWN ARROW -> PGDN */
627         default: return keycode;
628         }
629 }
630
631 static uint32_t
632 ukbd_apple_swap(uint32_t keycode)
633 {
634         switch (keycode) {
635         case 0x35: return 0x64;
636         case 0x64: return 0x35;
637         default: return keycode;
638         }
639 }
640
641 static void
642 ukbd_intr_callback(struct usb_xfer *xfer, usb_error_t error)
643 {
644         struct ukbd_softc *sc = usbd_xfer_softc(xfer);
645         struct usb_page_cache *pc;
646         uint32_t i;
647         uint8_t id;
648         uint8_t modifiers;
649         int offset;
650         int len;
651
652         UKBD_LOCK_ASSERT();
653
654         usbd_xfer_status(xfer, &len, NULL, NULL, NULL);
655         pc = usbd_xfer_get_frame(xfer, 0);
656
657         switch (USB_GET_STATE(xfer)) {
658         case USB_ST_TRANSFERRED:
659                 DPRINTF("actlen=%d bytes\n", len);
660
661                 if (len == 0) {
662                         DPRINTF("zero length data\n");
663                         goto tr_setup;
664                 }
665
666                 if (sc->sc_kbd_id != 0) {
667                         /* check and remove HID ID byte */
668                         usbd_copy_out(pc, 0, &id, 1);
669                         offset = 1;
670                         len--;
671                         if (len == 0) {
672                                 DPRINTF("zero length data\n");
673                                 goto tr_setup;
674                         }
675                 } else {
676                         offset = 0;
677                         id = 0;
678                 }
679
680                 if (len > UKBD_BUFFER_SIZE)
681                         len = UKBD_BUFFER_SIZE;
682
683                 /* get data */
684                 usbd_copy_out(pc, offset, sc->sc_buffer, len);
685
686                 /* clear temporary storage */
687                 memset(&sc->sc_ndata, 0, sizeof(sc->sc_ndata));
688
689                 /* clear modifiers */
690                 modifiers = 0;
691
692                 /* scan through HID data */
693                 if ((sc->sc_flags & UKBD_FLAG_APPLE_EJECT) &&
694                     (id == sc->sc_id_apple_eject)) {
695                         if (hid_get_data(sc->sc_buffer, len, &sc->sc_loc_apple_eject))
696                                 modifiers |= MOD_EJECT;
697                 }
698                 if ((sc->sc_flags & UKBD_FLAG_APPLE_FN) &&
699                     (id == sc->sc_id_apple_fn)) {
700                         if (hid_get_data(sc->sc_buffer, len, &sc->sc_loc_apple_fn))
701                                 modifiers |= MOD_FN;
702                 }
703
704                 for (i = 0; i != UKBD_NKEYCODE; i++) {
705                         const uint64_t valid = sc->sc_loc_key_valid[i / 64];
706                         const uint64_t mask = 1ULL << (i % 64);
707
708                         if (mask == 1 && valid == 0) {
709                                 i += 63;
710                                 continue;       /* skip empty areas */
711                         } else if (~valid & mask) {
712                                 continue;       /* location is not valid */
713                         } else if (id != sc->sc_id_loc_key[i]) {
714                                 continue;       /* invalid HID ID */
715                         } else if (i == 0) {
716                                 struct hid_location tmp_loc = sc->sc_loc_key[0];
717                                 /* range check array size */
718                                 if (tmp_loc.count > UKBD_NKEYCODE)
719                                         tmp_loc.count = UKBD_NKEYCODE;
720                                 while (tmp_loc.count--) {
721                                         uint32_t key =
722                                             hid_get_udata(sc->sc_buffer, len, &tmp_loc);
723                                         /* advance to next location */
724                                         tmp_loc.pos += tmp_loc.size;
725                                         if (modifiers & MOD_FN)
726                                                 key = ukbd_apple_fn(key);
727                                         if (sc->sc_flags & UKBD_FLAG_APPLE_SWAP)
728                                                 key = ukbd_apple_swap(key);
729                                         if (key == KEY_NONE || key == KEY_ERROR || key >= UKBD_NKEYCODE)
730                                                 continue;
731                                         /* set key in bitmap */
732                                         sc->sc_ndata.bitmap[key / 64] |= 1ULL << (key % 64);
733                                 }
734                         } else if (hid_get_data(sc->sc_buffer, len, &sc->sc_loc_key[i])) {
735                                 uint32_t key = i;
736
737                                 if (modifiers & MOD_FN)
738                                         key = ukbd_apple_fn(key);
739                                 if (sc->sc_flags & UKBD_FLAG_APPLE_SWAP)
740                                         key = ukbd_apple_swap(key);
741                                 if (key == KEY_NONE || key == KEY_ERROR || key >= UKBD_NKEYCODE)
742                                         continue;
743                                 /* set key in bitmap */
744                                 sc->sc_ndata.bitmap[key / 64] |= 1ULL << (key % 64);
745                         }
746                 }
747 #ifdef USB_DEBUG
748                 DPRINTF("modifiers = 0x%04x\n", modifiers);
749                 for (i = 0; i != UKBD_NKEYCODE; i++) {
750                         const uint64_t valid = sc->sc_ndata.bitmap[i / 64];
751                         const uint64_t mask = 1ULL << (i % 64);
752
753                         if (valid & mask)
754                                 DPRINTF("Key 0x%02x pressed\n", i);
755                 }
756 #endif
757                 ukbd_interrupt(sc);
758
759         case USB_ST_SETUP:
760 tr_setup:
761                 if (sc->sc_inputs < UKBD_IN_BUF_FULL) {
762                         usbd_xfer_set_frame_len(xfer, 0, usbd_xfer_max_len(xfer));
763                         usbd_transfer_submit(xfer);
764                 } else {
765                         DPRINTF("input queue is full!\n");
766                 }
767                 break;
768
769         default:                        /* Error */
770                 DPRINTF("error=%s\n", usbd_errstr(error));
771
772                 if (error != USB_ERR_CANCELLED) {
773                         /* try to clear stall first */
774                         usbd_xfer_set_stall(xfer);
775                         goto tr_setup;
776                 }
777                 break;
778         }
779 }
780
781 static void
782 ukbd_set_leds_callback(struct usb_xfer *xfer, usb_error_t error)
783 {
784         struct ukbd_softc *sc = usbd_xfer_softc(xfer);
785         struct usb_device_request req;
786         struct usb_page_cache *pc;
787         uint8_t id;
788         uint8_t any;
789         int len;
790
791         UKBD_LOCK_ASSERT();
792
793 #ifdef USB_DEBUG
794         if (ukbd_no_leds)
795                 return;
796 #endif
797
798         switch (USB_GET_STATE(xfer)) {
799         case USB_ST_TRANSFERRED:
800         case USB_ST_SETUP:
801                 if (!(sc->sc_flags & UKBD_FLAG_SET_LEDS))
802                         break;
803                 sc->sc_flags &= ~UKBD_FLAG_SET_LEDS;
804
805                 req.bmRequestType = UT_WRITE_CLASS_INTERFACE;
806                 req.bRequest = UR_SET_REPORT;
807                 USETW2(req.wValue, UHID_OUTPUT_REPORT, 0);
808                 req.wIndex[0] = sc->sc_iface_no;
809                 req.wIndex[1] = 0;
810                 req.wLength[1] = 0;
811
812                 memset(sc->sc_buffer, 0, UKBD_BUFFER_SIZE);
813
814                 id = 0;
815                 any = 0;
816
817                 /* Assumption: All led bits must be in the same ID. */
818
819                 if (sc->sc_flags & UKBD_FLAG_NUMLOCK) {
820                         if (sc->sc_leds & NLKED) {
821                                 hid_put_udata(sc->sc_buffer + 1, UKBD_BUFFER_SIZE - 1,
822                                     &sc->sc_loc_numlock, 1);
823                         }
824                         id = sc->sc_id_numlock;
825                         any = 1;
826                 }
827
828                 if (sc->sc_flags & UKBD_FLAG_SCROLLLOCK) {
829                         if (sc->sc_leds & SLKED) {
830                                 hid_put_udata(sc->sc_buffer + 1, UKBD_BUFFER_SIZE - 1,
831                                     &sc->sc_loc_scrolllock, 1);
832                         }
833                         id = sc->sc_id_scrolllock;
834                         any = 1;
835                 }
836
837                 if (sc->sc_flags & UKBD_FLAG_CAPSLOCK) {
838                         if (sc->sc_leds & CLKED) {
839                                 hid_put_udata(sc->sc_buffer + 1, UKBD_BUFFER_SIZE - 1,
840                                     &sc->sc_loc_capslock, 1);
841                         }
842                         id = sc->sc_id_capslock;
843                         any = 1;
844                 }
845
846                 /* if no leds, nothing to do */
847                 if (!any)
848                         break;
849
850                 /* range check output report length */
851                 len = sc->sc_led_size;
852                 if (len > (UKBD_BUFFER_SIZE - 1))
853                         len = (UKBD_BUFFER_SIZE - 1);
854
855                 /* check if we need to prefix an ID byte */
856                 sc->sc_buffer[0] = id;
857
858                 pc = usbd_xfer_get_frame(xfer, 1);
859                 if (id != 0) {
860                         len++;
861                         usbd_copy_in(pc, 0, sc->sc_buffer, len);
862                 } else {
863                         usbd_copy_in(pc, 0, sc->sc_buffer + 1, len);
864                 }
865                 req.wLength[0] = len;
866                 usbd_xfer_set_frame_len(xfer, 1, len);
867
868                 DPRINTF("len=%d, id=%d\n", len, id);
869
870                 /* setup control request last */
871                 pc = usbd_xfer_get_frame(xfer, 0);
872                 usbd_copy_in(pc, 0, &req, sizeof(req));
873                 usbd_xfer_set_frame_len(xfer, 0, sizeof(req));
874
875                 /* start data transfer */
876                 usbd_xfer_set_frames(xfer, 2);
877                 usbd_transfer_submit(xfer);
878                 break;
879
880         default:                        /* Error */
881                 DPRINTFN(1, "error=%s\n", usbd_errstr(error));
882                 break;
883         }
884 }
885
886 static const struct usb_config ukbd_config[UKBD_N_TRANSFER] = {
887         [UKBD_INTR_DT_0] = {
888                 .type = UE_INTERRUPT,
889                 .endpoint = UE_ADDR_ANY,
890                 .direction = UE_DIR_IN,
891                 .flags = {.pipe_bof = 1,.short_xfer_ok = 1,},
892                 .bufsize = 0,   /* use wMaxPacketSize */
893                 .callback = &ukbd_intr_callback,
894         },
895
896         [UKBD_INTR_DT_1] = {
897                 .type = UE_INTERRUPT,
898                 .endpoint = UE_ADDR_ANY,
899                 .direction = UE_DIR_IN,
900                 .flags = {.pipe_bof = 1,.short_xfer_ok = 1,},
901                 .bufsize = 0,   /* use wMaxPacketSize */
902                 .callback = &ukbd_intr_callback,
903         },
904
905         [UKBD_CTRL_LED] = {
906                 .type = UE_CONTROL,
907                 .endpoint = 0x00,       /* Control pipe */
908                 .direction = UE_DIR_ANY,
909                 .bufsize = sizeof(struct usb_device_request) + UKBD_BUFFER_SIZE,
910                 .callback = &ukbd_set_leds_callback,
911                 .timeout = 1000,        /* 1 second */
912         },
913 };
914
915 /* A match on these entries will load ukbd */
916 static const STRUCT_USB_HOST_ID __used ukbd_devs[] = {
917         {USB_IFACE_CLASS(UICLASS_HID),
918          USB_IFACE_SUBCLASS(UISUBCLASS_BOOT),
919          USB_IFACE_PROTOCOL(UIPROTO_BOOT_KEYBOARD),},
920 };
921
922 static int
923 ukbd_probe(device_t dev)
924 {
925         keyboard_switch_t *sw = kbd_get_switch(UKBD_DRIVER_NAME);
926         struct usb_attach_arg *uaa = device_get_ivars(dev);
927         void *d_ptr;
928         int error;
929         uint16_t d_len;
930
931         UKBD_LOCK_ASSERT();
932         DPRINTFN(11, "\n");
933
934         if (sw == NULL) {
935                 return (ENXIO);
936         }
937         if (uaa->usb_mode != USB_MODE_HOST) {
938                 return (ENXIO);
939         }
940
941         if (uaa->info.bInterfaceClass != UICLASS_HID)
942                 return (ENXIO);
943
944         if (usb_test_quirk(uaa, UQ_KBD_IGNORE))
945                 return (ENXIO);
946
947         if ((uaa->info.bInterfaceSubClass == UISUBCLASS_BOOT) &&
948             (uaa->info.bInterfaceProtocol == UIPROTO_BOOT_KEYBOARD))
949                 return (BUS_PROBE_DEFAULT);
950
951         error = usbd_req_get_hid_desc(uaa->device, NULL,
952             &d_ptr, &d_len, M_TEMP, uaa->info.bIfaceIndex);
953
954         if (error)
955                 return (ENXIO);
956
957         if (hid_is_keyboard(d_ptr, d_len)) {
958                 if (hid_is_mouse(d_ptr, d_len)) {
959                         /*
960                          * NOTE: We currently don't support USB mouse
961                          * and USB keyboard on the same USB endpoint.
962                          * Let "ums" driver win.
963                          */
964                         error = ENXIO;
965                 } else {
966                         error = BUS_PROBE_DEFAULT;
967                 }
968         } else {
969                 error = ENXIO;
970         }
971         free(d_ptr, M_TEMP);
972         return (error);
973 }
974
975 static void
976 ukbd_parse_hid(struct ukbd_softc *sc, const uint8_t *ptr, uint32_t len)
977 {
978         uint32_t flags;
979         uint32_t key;
980
981         /* reset detected bits */
982         sc->sc_flags &= ~UKBD_FLAG_HID_MASK;
983
984         /* reset detected keys */
985         memset(sc->sc_loc_key_valid, 0, sizeof(sc->sc_loc_key_valid));
986
987         /* check if there is an ID byte */
988         sc->sc_kbd_size = hid_report_size_max(ptr, len,
989             hid_input, &sc->sc_kbd_id);
990
991         /* investigate if this is an Apple Keyboard */
992         if (hid_locate(ptr, len,
993             HID_USAGE2(HUP_CONSUMER, HUG_APPLE_EJECT),
994             hid_input, 0, &sc->sc_loc_apple_eject, &flags,
995             &sc->sc_id_apple_eject)) {
996                 if (flags & HIO_VARIABLE)
997                         sc->sc_flags |= UKBD_FLAG_APPLE_EJECT | 
998                             UKBD_FLAG_APPLE_SWAP;
999                 DPRINTFN(1, "Found Apple eject-key\n");
1000         }
1001         if (hid_locate(ptr, len,
1002             HID_USAGE2(0xFFFF, 0x0003),
1003             hid_input, 0, &sc->sc_loc_apple_fn, &flags,
1004             &sc->sc_id_apple_fn)) {
1005                 if (flags & HIO_VARIABLE)
1006                         sc->sc_flags |= UKBD_FLAG_APPLE_FN;
1007                 DPRINTFN(1, "Found Apple FN-key\n");
1008         }
1009
1010         /* figure out event buffer */
1011         if (hid_locate(ptr, len,
1012             HID_USAGE2(HUP_KEYBOARD, 0x00),
1013             hid_input, 0, &sc->sc_loc_key[0], &flags,
1014             &sc->sc_id_loc_key[0])) {
1015                 if (flags & HIO_VARIABLE) {
1016                         DPRINTFN(1, "Ignoring keyboard event control\n");
1017                 } else {
1018                         sc->sc_loc_key_valid[0] |= 1;
1019                         DPRINTFN(1, "Found keyboard event array\n");
1020                 }
1021         }
1022
1023         /* figure out the keys */
1024         for (key = 1; key != UKBD_NKEYCODE; key++) {
1025                 if (hid_locate(ptr, len,
1026                     HID_USAGE2(HUP_KEYBOARD, key),
1027                     hid_input, 0, &sc->sc_loc_key[key], &flags,
1028                     &sc->sc_id_loc_key[key])) {
1029                         if (flags & HIO_VARIABLE) {
1030                                 sc->sc_loc_key_valid[key / 64] |=
1031                                     1ULL << (key % 64);
1032                                 DPRINTFN(1, "Found key 0x%02x\n", key);
1033                         }
1034                 }
1035         }
1036
1037         /* figure out leds on keyboard */
1038         sc->sc_led_size = hid_report_size_max(ptr, len,
1039             hid_output, NULL);
1040
1041         if (hid_locate(ptr, len,
1042             HID_USAGE2(HUP_LEDS, 0x01),
1043             hid_output, 0, &sc->sc_loc_numlock, &flags,
1044             &sc->sc_id_numlock)) {
1045                 if (flags & HIO_VARIABLE)
1046                         sc->sc_flags |= UKBD_FLAG_NUMLOCK;
1047                 DPRINTFN(1, "Found keyboard numlock\n");
1048         }
1049         if (hid_locate(ptr, len,
1050             HID_USAGE2(HUP_LEDS, 0x02),
1051             hid_output, 0, &sc->sc_loc_capslock, &flags,
1052             &sc->sc_id_capslock)) {
1053                 if (flags & HIO_VARIABLE)
1054                         sc->sc_flags |= UKBD_FLAG_CAPSLOCK;
1055                 DPRINTFN(1, "Found keyboard capslock\n");
1056         }
1057         if (hid_locate(ptr, len,
1058             HID_USAGE2(HUP_LEDS, 0x03),
1059             hid_output, 0, &sc->sc_loc_scrolllock, &flags,
1060             &sc->sc_id_scrolllock)) {
1061                 if (flags & HIO_VARIABLE)
1062                         sc->sc_flags |= UKBD_FLAG_SCROLLLOCK;
1063                 DPRINTFN(1, "Found keyboard scrolllock\n");
1064         }
1065 }
1066
1067 static int
1068 ukbd_attach(device_t dev)
1069 {
1070         struct ukbd_softc *sc = device_get_softc(dev);
1071         struct usb_attach_arg *uaa = device_get_ivars(dev);
1072         int unit = device_get_unit(dev);
1073         keyboard_t *kbd = &sc->sc_kbd;
1074         void *hid_ptr = NULL;
1075         usb_error_t err;
1076         uint16_t n;
1077         uint16_t hid_len;
1078 #ifdef EVDEV_SUPPORT
1079         struct evdev_dev *evdev;
1080         int i;
1081 #endif
1082 #ifdef USB_DEBUG
1083         int rate;
1084 #endif
1085         UKBD_LOCK_ASSERT();
1086
1087         kbd_init_struct(kbd, UKBD_DRIVER_NAME, KB_OTHER, unit, 0, 0, 0);
1088
1089         kbd->kb_data = (void *)sc;
1090
1091         device_set_usb_desc(dev);
1092
1093         sc->sc_udev = uaa->device;
1094         sc->sc_iface = uaa->iface;
1095         sc->sc_iface_index = uaa->info.bIfaceIndex;
1096         sc->sc_iface_no = uaa->info.bIfaceNum;
1097         sc->sc_mode = K_XLATE;
1098
1099         usb_callout_init_mtx(&sc->sc_callout, &Giant, 0);
1100
1101 #ifdef UKBD_NO_POLLING
1102         err = usbd_transfer_setup(uaa->device,
1103             &uaa->info.bIfaceIndex, sc->sc_xfer, ukbd_config,
1104             UKBD_N_TRANSFER, sc, &Giant);
1105 #else
1106         /*
1107          * Setup the UKBD USB transfers one by one, so they are memory
1108          * independent which allows for handling panics triggered by
1109          * the keyboard driver itself, typically via CTRL+ALT+ESC
1110          * sequences. Or if the USB keyboard driver was processing a
1111          * key at the moment of panic.
1112          */
1113         for (n = 0; n != UKBD_N_TRANSFER; n++) {
1114                 err = usbd_transfer_setup(uaa->device,
1115                     &uaa->info.bIfaceIndex, sc->sc_xfer + n, ukbd_config + n,
1116                     1, sc, &Giant);
1117                 if (err)
1118                         break;
1119         }
1120 #endif
1121
1122         if (err) {
1123                 DPRINTF("error=%s\n", usbd_errstr(err));
1124                 goto detach;
1125         }
1126         /* setup default keyboard maps */
1127
1128         sc->sc_keymap = key_map;
1129         sc->sc_accmap = accent_map;
1130         for (n = 0; n < UKBD_NFKEY; n++) {
1131                 sc->sc_fkeymap[n] = fkey_tab[n];
1132         }
1133
1134         kbd_set_maps(kbd, &sc->sc_keymap, &sc->sc_accmap,
1135             sc->sc_fkeymap, UKBD_NFKEY);
1136
1137         KBD_FOUND_DEVICE(kbd);
1138
1139         ukbd_clear_state(kbd);
1140
1141         /*
1142          * FIXME: set the initial value for lock keys in "sc_state"
1143          * according to the BIOS data?
1144          */
1145         KBD_PROBE_DONE(kbd);
1146
1147         /* get HID descriptor */
1148         err = usbd_req_get_hid_desc(uaa->device, NULL, &hid_ptr,
1149             &hid_len, M_TEMP, uaa->info.bIfaceIndex);
1150
1151         if (err == 0) {
1152                 DPRINTF("Parsing HID descriptor of %d bytes\n",
1153                     (int)hid_len);
1154
1155                 ukbd_parse_hid(sc, hid_ptr, hid_len);
1156
1157                 free(hid_ptr, M_TEMP);
1158         }
1159
1160         /* check if we should use the boot protocol */
1161         if (usb_test_quirk(uaa, UQ_KBD_BOOTPROTO) ||
1162             (err != 0) || ukbd_any_key_valid(sc) == false) {
1163                 DPRINTF("Forcing boot protocol\n");
1164
1165                 err = usbd_req_set_protocol(sc->sc_udev, NULL, 
1166                         sc->sc_iface_index, 0);
1167
1168                 if (err != 0) {
1169                         DPRINTF("Set protocol error=%s (ignored)\n",
1170                             usbd_errstr(err));
1171                 }
1172
1173                 ukbd_parse_hid(sc, ukbd_boot_desc, sizeof(ukbd_boot_desc));
1174         }
1175
1176         /* ignore if SETIDLE fails, hence it is not crucial */
1177         usbd_req_set_idle(sc->sc_udev, NULL, sc->sc_iface_index, 0, 0);
1178
1179         ukbd_ioctl(kbd, KDSETLED, (caddr_t)&sc->sc_state);
1180
1181         KBD_INIT_DONE(kbd);
1182
1183         if (kbd_register(kbd) < 0) {
1184                 goto detach;
1185         }
1186         KBD_CONFIG_DONE(kbd);
1187
1188         ukbd_enable(kbd);
1189
1190 #ifdef KBD_INSTALL_CDEV
1191         if (kbd_attach(kbd)) {
1192                 goto detach;
1193         }
1194 #endif
1195
1196 #ifdef EVDEV_SUPPORT
1197         evdev = evdev_alloc();
1198         evdev_set_name(evdev, device_get_desc(dev));
1199         evdev_set_phys(evdev, device_get_nameunit(dev));
1200         evdev_set_id(evdev, BUS_USB, uaa->info.idVendor,
1201            uaa->info.idProduct, 0);
1202         evdev_set_serial(evdev, usb_get_serial(uaa->device));
1203         evdev_set_methods(evdev, kbd, &ukbd_evdev_methods);
1204         evdev_support_event(evdev, EV_SYN);
1205         evdev_support_event(evdev, EV_KEY);
1206         if (sc->sc_flags & (UKBD_FLAG_NUMLOCK | UKBD_FLAG_CAPSLOCK |
1207                             UKBD_FLAG_SCROLLLOCK))
1208                 evdev_support_event(evdev, EV_LED);
1209         evdev_support_event(evdev, EV_REP);
1210
1211         for (i = 0x00; i <= 0xFF; i++)
1212                 evdev_support_key(evdev, evdev_hid2key(i));
1213         if (sc->sc_flags & UKBD_FLAG_NUMLOCK)
1214                 evdev_support_led(evdev, LED_NUML);
1215         if (sc->sc_flags & UKBD_FLAG_CAPSLOCK)
1216                 evdev_support_led(evdev, LED_CAPSL);
1217         if (sc->sc_flags & UKBD_FLAG_SCROLLLOCK)
1218                 evdev_support_led(evdev, LED_SCROLLL);
1219
1220         if (evdev_register_mtx(evdev, &Giant))
1221                 evdev_free(evdev);
1222         else
1223                 sc->sc_evdev = evdev;
1224 #endif
1225
1226         sc->sc_flags |= UKBD_FLAG_ATTACHED;
1227
1228         if (bootverbose) {
1229                 kbdd_diag(kbd, bootverbose);
1230         }
1231
1232 #ifdef USB_DEBUG
1233         /* check for polling rate override */
1234         rate = ukbd_pollrate;
1235         if (rate > 0) {
1236                 if (rate > 1000)
1237                         rate = 1;
1238                 else
1239                         rate = 1000 / rate;
1240
1241                 /* set new polling interval in ms */
1242                 usbd_xfer_set_interval(sc->sc_xfer[UKBD_INTR_DT_0], rate);
1243                 usbd_xfer_set_interval(sc->sc_xfer[UKBD_INTR_DT_1], rate);
1244         }
1245 #endif
1246         /* start the keyboard */
1247         usbd_transfer_start(sc->sc_xfer[UKBD_INTR_DT_0]);
1248         usbd_transfer_start(sc->sc_xfer[UKBD_INTR_DT_1]);
1249
1250         return (0);                     /* success */
1251
1252 detach:
1253         ukbd_detach(dev);
1254         return (ENXIO);                 /* error */
1255 }
1256
1257 static int
1258 ukbd_detach(device_t dev)
1259 {
1260         struct ukbd_softc *sc = device_get_softc(dev);
1261         int error;
1262
1263         UKBD_LOCK_ASSERT();
1264
1265         DPRINTF("\n");
1266
1267         sc->sc_flags |= UKBD_FLAG_GONE;
1268
1269         usb_callout_stop(&sc->sc_callout);
1270
1271         /* kill any stuck keys */
1272         if (sc->sc_flags & UKBD_FLAG_ATTACHED) {
1273                 /* stop receiving events from the USB keyboard */
1274                 usbd_transfer_stop(sc->sc_xfer[UKBD_INTR_DT_0]);
1275                 usbd_transfer_stop(sc->sc_xfer[UKBD_INTR_DT_1]);
1276
1277                 /* release all leftover keys, if any */
1278                 memset(&sc->sc_ndata, 0, sizeof(sc->sc_ndata));
1279
1280                 /* process releasing of all keys */
1281                 ukbd_interrupt(sc);
1282         }
1283
1284         ukbd_disable(&sc->sc_kbd);
1285
1286 #ifdef KBD_INSTALL_CDEV
1287         if (sc->sc_flags & UKBD_FLAG_ATTACHED) {
1288                 error = kbd_detach(&sc->sc_kbd);
1289                 if (error) {
1290                         /* usb attach cannot return an error */
1291                         device_printf(dev, "WARNING: kbd_detach() "
1292                             "returned non-zero! (ignored)\n");
1293                 }
1294         }
1295 #endif
1296
1297 #ifdef EVDEV_SUPPORT
1298         evdev_free(sc->sc_evdev);
1299 #endif
1300
1301         if (KBD_IS_CONFIGURED(&sc->sc_kbd)) {
1302                 error = kbd_unregister(&sc->sc_kbd);
1303                 if (error) {
1304                         /* usb attach cannot return an error */
1305                         device_printf(dev, "WARNING: kbd_unregister() "
1306                             "returned non-zero! (ignored)\n");
1307                 }
1308         }
1309         sc->sc_kbd.kb_flags = 0;
1310
1311         usbd_transfer_unsetup(sc->sc_xfer, UKBD_N_TRANSFER);
1312
1313         usb_callout_drain(&sc->sc_callout);
1314
1315         DPRINTF("%s: disconnected\n",
1316             device_get_nameunit(dev));
1317
1318         return (0);
1319 }
1320
1321 static int
1322 ukbd_resume(device_t dev)
1323 {
1324         struct ukbd_softc *sc = device_get_softc(dev);
1325
1326         UKBD_LOCK_ASSERT();
1327
1328         ukbd_clear_state(&sc->sc_kbd);
1329
1330         return (0);
1331 }
1332
1333 #ifdef EVDEV_SUPPORT
1334 static void
1335 ukbd_ev_event(struct evdev_dev *evdev, uint16_t type, uint16_t code,
1336     int32_t value)
1337 {
1338         keyboard_t *kbd = evdev_get_softc(evdev);
1339
1340         if (evdev_rcpt_mask & EVDEV_RCPT_HW_KBD &&
1341             (type == EV_LED || type == EV_REP)) {
1342                 mtx_lock(&Giant);
1343                 kbd_ev_event(kbd, type, code, value);
1344                 mtx_unlock(&Giant);
1345         }
1346 }
1347 #endif
1348
1349 /* early keyboard probe, not supported */
1350 static int
1351 ukbd_configure(int flags)
1352 {
1353         return (0);
1354 }
1355
1356 /* detect a keyboard, not used */
1357 static int
1358 ukbd__probe(int unit, void *arg, int flags)
1359 {
1360         return (ENXIO);
1361 }
1362
1363 /* reset and initialize the device, not used */
1364 static int
1365 ukbd_init(int unit, keyboard_t **kbdp, void *arg, int flags)
1366 {
1367         return (ENXIO);
1368 }
1369
1370 /* test the interface to the device, not used */
1371 static int
1372 ukbd_test_if(keyboard_t *kbd)
1373 {
1374         return (0);
1375 }
1376
1377 /* finish using this keyboard, not used */
1378 static int
1379 ukbd_term(keyboard_t *kbd)
1380 {
1381         return (ENXIO);
1382 }
1383
1384 /* keyboard interrupt routine, not used */
1385 static int
1386 ukbd_intr(keyboard_t *kbd, void *arg)
1387 {
1388         return (0);
1389 }
1390
1391 /* lock the access to the keyboard, not used */
1392 static int
1393 ukbd_lock(keyboard_t *kbd, int lock)
1394 {
1395         return (1);
1396 }
1397
1398 /*
1399  * Enable the access to the device; until this function is called,
1400  * the client cannot read from the keyboard.
1401  */
1402 static int
1403 ukbd_enable(keyboard_t *kbd)
1404 {
1405
1406         UKBD_LOCK();
1407         KBD_ACTIVATE(kbd);
1408         UKBD_UNLOCK();
1409
1410         return (0);
1411 }
1412
1413 /* disallow the access to the device */
1414 static int
1415 ukbd_disable(keyboard_t *kbd)
1416 {
1417
1418         UKBD_LOCK();
1419         KBD_DEACTIVATE(kbd);
1420         UKBD_UNLOCK();
1421
1422         return (0);
1423 }
1424
1425 /* check if data is waiting */
1426 /* Currently unused. */
1427 static int
1428 ukbd_check(keyboard_t *kbd)
1429 {
1430         struct ukbd_softc *sc = kbd->kb_data;
1431
1432         UKBD_LOCK_ASSERT();
1433
1434         if (!KBD_IS_ACTIVE(kbd))
1435                 return (0);
1436
1437         if (sc->sc_flags & UKBD_FLAG_POLLING)
1438                 ukbd_do_poll(sc, 0);
1439
1440 #ifdef UKBD_EMULATE_ATSCANCODE
1441         if (sc->sc_buffered_char[0]) {
1442                 return (1);
1443         }
1444 #endif
1445         if (sc->sc_inputs > 0) {
1446                 return (1);
1447         }
1448         return (0);
1449 }
1450
1451 /* check if char is waiting */
1452 static int
1453 ukbd_check_char_locked(keyboard_t *kbd)
1454 {
1455         struct ukbd_softc *sc = kbd->kb_data;
1456
1457         UKBD_LOCK_ASSERT();
1458
1459         if (!KBD_IS_ACTIVE(kbd))
1460                 return (0);
1461
1462         if ((sc->sc_composed_char > 0) &&
1463             (!(sc->sc_flags & UKBD_FLAG_COMPOSE))) {
1464                 return (1);
1465         }
1466         return (ukbd_check(kbd));
1467 }
1468
1469 static int
1470 ukbd_check_char(keyboard_t *kbd)
1471 {
1472         int result;
1473
1474         UKBD_LOCK();
1475         result = ukbd_check_char_locked(kbd);
1476         UKBD_UNLOCK();
1477
1478         return (result);
1479 }
1480
1481 /* read one byte from the keyboard if it's allowed */
1482 /* Currently unused. */
1483 static int
1484 ukbd_read(keyboard_t *kbd, int wait)
1485 {
1486         struct ukbd_softc *sc = kbd->kb_data;
1487         int32_t usbcode;
1488 #ifdef UKBD_EMULATE_ATSCANCODE
1489         uint32_t keycode;
1490         uint32_t scancode;
1491
1492 #endif
1493
1494         UKBD_LOCK_ASSERT();
1495
1496         if (!KBD_IS_ACTIVE(kbd))
1497                 return (-1);
1498
1499 #ifdef UKBD_EMULATE_ATSCANCODE
1500         if (sc->sc_buffered_char[0]) {
1501                 scancode = sc->sc_buffered_char[0];
1502                 if (scancode & SCAN_PREFIX) {
1503                         sc->sc_buffered_char[0] &= ~SCAN_PREFIX;
1504                         return ((scancode & SCAN_PREFIX_E0) ? 0xe0 : 0xe1);
1505                 }
1506                 sc->sc_buffered_char[0] = sc->sc_buffered_char[1];
1507                 sc->sc_buffered_char[1] = 0;
1508                 return (scancode);
1509         }
1510 #endif                                  /* UKBD_EMULATE_ATSCANCODE */
1511
1512         /* XXX */
1513         usbcode = ukbd_get_key(sc, (wait == FALSE) ? 0 : 1);
1514         if (!KBD_IS_ACTIVE(kbd) || (usbcode == -1))
1515                 return (-1);
1516
1517         ++(kbd->kb_count);
1518
1519 #ifdef UKBD_EMULATE_ATSCANCODE
1520         keycode = ukbd_atkeycode(usbcode, sc->sc_ndata.bitmap);
1521         if (keycode == NN) {
1522                 return -1;
1523         }
1524         return (ukbd_key2scan(sc, keycode, sc->sc_ndata.bitmap,
1525             (usbcode & KEY_RELEASE)));
1526 #else                                   /* !UKBD_EMULATE_ATSCANCODE */
1527         return (usbcode);
1528 #endif                                  /* UKBD_EMULATE_ATSCANCODE */
1529 }
1530
1531 /* read char from the keyboard */
1532 static uint32_t
1533 ukbd_read_char_locked(keyboard_t *kbd, int wait)
1534 {
1535         struct ukbd_softc *sc = kbd->kb_data;
1536         uint32_t action;
1537         uint32_t keycode;
1538         int32_t usbcode;
1539 #ifdef UKBD_EMULATE_ATSCANCODE
1540         uint32_t scancode;
1541 #endif
1542
1543         UKBD_LOCK_ASSERT();
1544
1545         if (!KBD_IS_ACTIVE(kbd))
1546                 return (NOKEY);
1547
1548 next_code:
1549
1550         /* do we have a composed char to return ? */
1551
1552         if ((sc->sc_composed_char > 0) &&
1553             (!(sc->sc_flags & UKBD_FLAG_COMPOSE))) {
1554                 action = sc->sc_composed_char;
1555                 sc->sc_composed_char = 0;
1556
1557                 if (action > 0xFF) {
1558                         goto errkey;
1559                 }
1560                 goto done;
1561         }
1562 #ifdef UKBD_EMULATE_ATSCANCODE
1563
1564         /* do we have a pending raw scan code? */
1565
1566         if (sc->sc_mode == K_RAW) {
1567                 scancode = sc->sc_buffered_char[0];
1568                 if (scancode) {
1569                         if (scancode & SCAN_PREFIX) {
1570                                 sc->sc_buffered_char[0] = (scancode & ~SCAN_PREFIX);
1571                                 return ((scancode & SCAN_PREFIX_E0) ? 0xe0 : 0xe1);
1572                         }
1573                         sc->sc_buffered_char[0] = sc->sc_buffered_char[1];
1574                         sc->sc_buffered_char[1] = 0;
1575                         return (scancode);
1576                 }
1577         }
1578 #endif                                  /* UKBD_EMULATE_ATSCANCODE */
1579
1580         /* see if there is something in the keyboard port */
1581         /* XXX */
1582         usbcode = ukbd_get_key(sc, (wait == FALSE) ? 0 : 1);
1583         if (usbcode == -1) {
1584                 return (NOKEY);
1585         }
1586         ++kbd->kb_count;
1587
1588 #ifdef UKBD_EMULATE_ATSCANCODE
1589         /* USB key index -> key code -> AT scan code */
1590         keycode = ukbd_atkeycode(usbcode, sc->sc_ndata.bitmap);
1591         if (keycode == NN) {
1592                 return (NOKEY);
1593         }
1594         /* return an AT scan code for the K_RAW mode */
1595         if (sc->sc_mode == K_RAW) {
1596                 return (ukbd_key2scan(sc, keycode, sc->sc_ndata.bitmap,
1597                     (usbcode & KEY_RELEASE)));
1598         }
1599 #else                                   /* !UKBD_EMULATE_ATSCANCODE */
1600
1601         /* return the byte as is for the K_RAW mode */
1602         if (sc->sc_mode == K_RAW) {
1603                 return (usbcode);
1604         }
1605         /* USB key index -> key code */
1606         keycode = ukbd_trtab[KEY_INDEX(usbcode)];
1607         if (keycode == NN) {
1608                 return (NOKEY);
1609         }
1610 #endif                                  /* UKBD_EMULATE_ATSCANCODE */
1611
1612         switch (keycode) {
1613         case 0x38:                      /* left alt (compose key) */
1614                 if (usbcode & KEY_RELEASE) {
1615                         if (sc->sc_flags & UKBD_FLAG_COMPOSE) {
1616                                 sc->sc_flags &= ~UKBD_FLAG_COMPOSE;
1617
1618                                 if (sc->sc_composed_char > 0xFF) {
1619                                         sc->sc_composed_char = 0;
1620                                 }
1621                         }
1622                 } else {
1623                         if (!(sc->sc_flags & UKBD_FLAG_COMPOSE)) {
1624                                 sc->sc_flags |= UKBD_FLAG_COMPOSE;
1625                                 sc->sc_composed_char = 0;
1626                         }
1627                 }
1628                 break;
1629         }
1630
1631         /* return the key code in the K_CODE mode */
1632         if (usbcode & KEY_RELEASE) {
1633                 keycode |= SCAN_RELEASE;
1634         }
1635         if (sc->sc_mode == K_CODE) {
1636                 return (keycode);
1637         }
1638         /* compose a character code */
1639         if (sc->sc_flags & UKBD_FLAG_COMPOSE) {
1640                 switch (keycode) {
1641                         /* key pressed, process it */
1642                 case 0x47:
1643                 case 0x48:
1644                 case 0x49:              /* keypad 7,8,9 */
1645                         sc->sc_composed_char *= 10;
1646                         sc->sc_composed_char += keycode - 0x40;
1647                         goto check_composed;
1648
1649                 case 0x4B:
1650                 case 0x4C:
1651                 case 0x4D:              /* keypad 4,5,6 */
1652                         sc->sc_composed_char *= 10;
1653                         sc->sc_composed_char += keycode - 0x47;
1654                         goto check_composed;
1655
1656                 case 0x4F:
1657                 case 0x50:
1658                 case 0x51:              /* keypad 1,2,3 */
1659                         sc->sc_composed_char *= 10;
1660                         sc->sc_composed_char += keycode - 0x4E;
1661                         goto check_composed;
1662
1663                 case 0x52:              /* keypad 0 */
1664                         sc->sc_composed_char *= 10;
1665                         goto check_composed;
1666
1667                         /* key released, no interest here */
1668                 case SCAN_RELEASE | 0x47:
1669                 case SCAN_RELEASE | 0x48:
1670                 case SCAN_RELEASE | 0x49:       /* keypad 7,8,9 */
1671                 case SCAN_RELEASE | 0x4B:
1672                 case SCAN_RELEASE | 0x4C:
1673                 case SCAN_RELEASE | 0x4D:       /* keypad 4,5,6 */
1674                 case SCAN_RELEASE | 0x4F:
1675                 case SCAN_RELEASE | 0x50:
1676                 case SCAN_RELEASE | 0x51:       /* keypad 1,2,3 */
1677                 case SCAN_RELEASE | 0x52:       /* keypad 0 */
1678                         goto next_code;
1679
1680                 case 0x38:              /* left alt key */
1681                         break;
1682
1683                 default:
1684                         if (sc->sc_composed_char > 0) {
1685                                 sc->sc_flags &= ~UKBD_FLAG_COMPOSE;
1686                                 sc->sc_composed_char = 0;
1687                                 goto errkey;
1688                         }
1689                         break;
1690                 }
1691         }
1692         /* keycode to key action */
1693         action = genkbd_keyaction(kbd, SCAN_CHAR(keycode),
1694             (keycode & SCAN_RELEASE),
1695             &sc->sc_state, &sc->sc_accents);
1696         if (action == NOKEY) {
1697                 goto next_code;
1698         }
1699 done:
1700         return (action);
1701
1702 check_composed:
1703         if (sc->sc_composed_char <= 0xFF) {
1704                 goto next_code;
1705         }
1706 errkey:
1707         return (ERRKEY);
1708 }
1709
1710 /* Currently wait is always false. */
1711 static uint32_t
1712 ukbd_read_char(keyboard_t *kbd, int wait)
1713 {
1714         uint32_t keycode;
1715
1716         UKBD_LOCK();
1717         keycode = ukbd_read_char_locked(kbd, wait);
1718         UKBD_UNLOCK();
1719
1720         return (keycode);
1721 }
1722
1723 /* some useful control functions */
1724 static int
1725 ukbd_ioctl_locked(keyboard_t *kbd, u_long cmd, caddr_t arg)
1726 {
1727         struct ukbd_softc *sc = kbd->kb_data;
1728         int i;
1729 #if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
1730     defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
1731         int ival;
1732
1733 #endif
1734
1735         UKBD_LOCK_ASSERT();
1736
1737         switch (cmd) {
1738         case KDGKBMODE:         /* get keyboard mode */
1739                 *(int *)arg = sc->sc_mode;
1740                 break;
1741 #if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
1742     defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
1743         case _IO('K', 7):
1744                 ival = IOCPARM_IVAL(arg);
1745                 arg = (caddr_t)&ival;
1746                 /* FALLTHROUGH */
1747 #endif
1748         case KDSKBMODE:         /* set keyboard mode */
1749                 switch (*(int *)arg) {
1750                 case K_XLATE:
1751                         if (sc->sc_mode != K_XLATE) {
1752                                 /* make lock key state and LED state match */
1753                                 sc->sc_state &= ~LOCK_MASK;
1754                                 sc->sc_state |= KBD_LED_VAL(kbd);
1755                         }
1756                         /* FALLTHROUGH */
1757                 case K_RAW:
1758                 case K_CODE:
1759                         if (sc->sc_mode != *(int *)arg) {
1760                                 if ((sc->sc_flags & UKBD_FLAG_POLLING) == 0)
1761                                         ukbd_clear_state(kbd);
1762                                 sc->sc_mode = *(int *)arg;
1763                         }
1764                         break;
1765                 default:
1766                         return (EINVAL);
1767                 }
1768                 break;
1769
1770         case KDGETLED:                  /* get keyboard LED */
1771                 *(int *)arg = KBD_LED_VAL(kbd);
1772                 break;
1773 #if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
1774     defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
1775         case _IO('K', 66):
1776                 ival = IOCPARM_IVAL(arg);
1777                 arg = (caddr_t)&ival;
1778                 /* FALLTHROUGH */
1779 #endif
1780         case KDSETLED:                  /* set keyboard LED */
1781                 /* NOTE: lock key state in "sc_state" won't be changed */
1782                 if (*(int *)arg & ~LOCK_MASK)
1783                         return (EINVAL);
1784
1785                 i = *(int *)arg;
1786
1787                 /* replace CAPS LED with ALTGR LED for ALTGR keyboards */
1788                 if (sc->sc_mode == K_XLATE &&
1789                     kbd->kb_keymap->n_keys > ALTGR_OFFSET) {
1790                         if (i & ALKED)
1791                                 i |= CLKED;
1792                         else
1793                                 i &= ~CLKED;
1794                 }
1795                 if (KBD_HAS_DEVICE(kbd))
1796                         ukbd_set_leds(sc, i);
1797
1798                 KBD_LED_VAL(kbd) = *(int *)arg;
1799                 break;
1800         case KDGKBSTATE:                /* get lock key state */
1801                 *(int *)arg = sc->sc_state & LOCK_MASK;
1802                 break;
1803 #if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
1804     defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
1805         case _IO('K', 20):
1806                 ival = IOCPARM_IVAL(arg);
1807                 arg = (caddr_t)&ival;
1808                 /* FALLTHROUGH */
1809 #endif
1810         case KDSKBSTATE:                /* set lock key state */
1811                 if (*(int *)arg & ~LOCK_MASK) {
1812                         return (EINVAL);
1813                 }
1814                 sc->sc_state &= ~LOCK_MASK;
1815                 sc->sc_state |= *(int *)arg;
1816
1817                 /* set LEDs and quit */
1818                 return (ukbd_ioctl(kbd, KDSETLED, arg));
1819
1820         case KDSETREPEAT:               /* set keyboard repeat rate (new
1821                                          * interface) */
1822                 if (!KBD_HAS_DEVICE(kbd)) {
1823                         return (0);
1824                 }
1825                 /*
1826                  * Convert negative, zero and tiny args to the same limits
1827                  * as atkbd.  We could support delays of 1 msec, but
1828                  * anything much shorter than the shortest atkbd value
1829                  * of 250.34 is almost unusable as well as incompatible.
1830                  */
1831                 kbd->kb_delay1 = imax(((int *)arg)[0], 250);
1832                 kbd->kb_delay2 = imax(((int *)arg)[1], 34);
1833 #ifdef EVDEV_SUPPORT
1834                 if (sc->sc_evdev != NULL)
1835                         evdev_push_repeats(sc->sc_evdev, kbd);
1836 #endif
1837                 return (0);
1838
1839 #if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
1840     defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
1841         case _IO('K', 67):
1842                 ival = IOCPARM_IVAL(arg);
1843                 arg = (caddr_t)&ival;
1844                 /* FALLTHROUGH */
1845 #endif
1846         case KDSETRAD:                  /* set keyboard repeat rate (old
1847                                          * interface) */
1848                 return (ukbd_set_typematic(kbd, *(int *)arg));
1849
1850         case PIO_KEYMAP:                /* set keyboard translation table */
1851         case OPIO_KEYMAP:               /* set keyboard translation table
1852                                          * (compat) */
1853         case PIO_KEYMAPENT:             /* set keyboard translation table
1854                                          * entry */
1855         case PIO_DEADKEYMAP:            /* set accent key translation table */
1856                 sc->sc_accents = 0;
1857                 /* FALLTHROUGH */
1858         default:
1859                 return (genkbd_commonioctl(kbd, cmd, arg));
1860         }
1861
1862         return (0);
1863 }
1864
1865 static int
1866 ukbd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg)
1867 {
1868         int result;
1869
1870         /*
1871          * XXX Check if someone is calling us from a critical section:
1872          */
1873         if (curthread->td_critnest != 0)
1874                 return (EDEADLK);
1875
1876         /*
1877          * XXX KDGKBSTATE, KDSKBSTATE and KDSETLED can be called from any
1878          * context where printf(9) can be called, which among other things
1879          * includes interrupt filters and threads with any kinds of locks
1880          * already held.  For this reason it would be dangerous to acquire
1881          * the Giant here unconditionally.  On the other hand we have to
1882          * have it to handle the ioctl.
1883          * So we make our best effort to auto-detect whether we can grab
1884          * the Giant or not.  Blame syscons(4) for this.
1885          */
1886         switch (cmd) {
1887         case KDGKBSTATE:
1888         case KDSKBSTATE:
1889         case KDSETLED:
1890                 if (!mtx_owned(&Giant) && !USB_IN_POLLING_MODE_FUNC())
1891                         return (EDEADLK);       /* best I could come up with */
1892                 /* FALLTHROUGH */
1893         default:
1894                 UKBD_LOCK();
1895                 result = ukbd_ioctl_locked(kbd, cmd, arg);
1896                 UKBD_UNLOCK();
1897                 return (result);
1898         }
1899 }
1900
1901 /* clear the internal state of the keyboard */
1902 static void
1903 ukbd_clear_state(keyboard_t *kbd)
1904 {
1905         struct ukbd_softc *sc = kbd->kb_data;
1906
1907         UKBD_LOCK_ASSERT();
1908
1909         sc->sc_flags &= ~(UKBD_FLAG_COMPOSE | UKBD_FLAG_POLLING);
1910         sc->sc_state &= LOCK_MASK;      /* preserve locking key state */
1911         sc->sc_accents = 0;
1912         sc->sc_composed_char = 0;
1913 #ifdef UKBD_EMULATE_ATSCANCODE
1914         sc->sc_buffered_char[0] = 0;
1915         sc->sc_buffered_char[1] = 0;
1916 #endif
1917         memset(&sc->sc_ndata, 0, sizeof(sc->sc_ndata));
1918         memset(&sc->sc_odata, 0, sizeof(sc->sc_odata));
1919         sc->sc_repeat_time = 0;
1920         sc->sc_repeat_key = 0;
1921 }
1922
1923 /* save the internal state, not used */
1924 static int
1925 ukbd_get_state(keyboard_t *kbd, void *buf, size_t len)
1926 {
1927         return (len == 0) ? 1 : -1;
1928 }
1929
1930 /* set the internal state, not used */
1931 static int
1932 ukbd_set_state(keyboard_t *kbd, void *buf, size_t len)
1933 {
1934         return (EINVAL);
1935 }
1936
1937 static int
1938 ukbd_poll(keyboard_t *kbd, int on)
1939 {
1940         struct ukbd_softc *sc = kbd->kb_data;
1941
1942         UKBD_LOCK();
1943         /*
1944          * Keep a reference count on polling to allow recursive
1945          * cngrab() during a panic for example.
1946          */
1947         if (on)
1948                 sc->sc_polling++;
1949         else if (sc->sc_polling > 0)
1950                 sc->sc_polling--;
1951
1952         if (sc->sc_polling != 0) {
1953                 sc->sc_flags |= UKBD_FLAG_POLLING;
1954                 sc->sc_poll_thread = curthread;
1955         } else {
1956                 sc->sc_flags &= ~UKBD_FLAG_POLLING;
1957                 sc->sc_delay = 0;
1958         }
1959         UKBD_UNLOCK();
1960
1961         return (0);
1962 }
1963
1964 /* local functions */
1965
1966 static void
1967 ukbd_set_leds(struct ukbd_softc *sc, uint8_t leds)
1968 {
1969
1970         UKBD_LOCK_ASSERT();
1971         DPRINTF("leds=0x%02x\n", leds);
1972
1973 #ifdef EVDEV_SUPPORT
1974         if (sc->sc_evdev != NULL)
1975                 evdev_push_leds(sc->sc_evdev, leds);
1976 #endif
1977
1978         sc->sc_leds = leds;
1979         sc->sc_flags |= UKBD_FLAG_SET_LEDS;
1980
1981         /* start transfer, if not already started */
1982
1983         usbd_transfer_start(sc->sc_xfer[UKBD_CTRL_LED]);
1984 }
1985
1986 static int
1987 ukbd_set_typematic(keyboard_t *kbd, int code)
1988 {
1989 #ifdef EVDEV_SUPPORT
1990         struct ukbd_softc *sc = kbd->kb_data;
1991 #endif
1992         static const int delays[] = {250, 500, 750, 1000};
1993         static const int rates[] = {34, 38, 42, 46, 50, 55, 59, 63,
1994                 68, 76, 84, 92, 100, 110, 118, 126,
1995                 136, 152, 168, 184, 200, 220, 236, 252,
1996         272, 304, 336, 368, 400, 440, 472, 504};
1997
1998         if (code & ~0x7f) {
1999                 return (EINVAL);
2000         }
2001         kbd->kb_delay1 = delays[(code >> 5) & 3];
2002         kbd->kb_delay2 = rates[code & 0x1f];
2003 #ifdef EVDEV_SUPPORT
2004         if (sc->sc_evdev != NULL)
2005                 evdev_push_repeats(sc->sc_evdev, kbd);
2006 #endif
2007         return (0);
2008 }
2009
2010 #ifdef UKBD_EMULATE_ATSCANCODE
2011 static uint32_t
2012 ukbd_atkeycode(int usbcode, const uint64_t *bitmap)
2013 {
2014         uint32_t keycode;
2015
2016         keycode = ukbd_trtab[KEY_INDEX(usbcode)];
2017
2018         /*
2019          * Translate Alt-PrintScreen to SysRq.
2020          *
2021          * Some or all AT keyboards connected through USB have already
2022          * mapped Alted PrintScreens to an unusual usbcode (0x8a).
2023          * ukbd_trtab translates this to 0x7e, and key2scan() would
2024          * translate that to 0x79 (Intl' 4).  Assume that if we have
2025          * an Alted 0x7e here then it actually is an Alted PrintScreen.
2026          *
2027          * The usual usbcode for all PrintScreens is 0x46.  ukbd_trtab
2028          * translates this to 0x5c, so the Alt check to classify 0x5c
2029          * is routine.
2030          */
2031         if ((keycode == 0x5c || keycode == 0x7e) &&
2032             (UKBD_KEY_PRESSED(bitmap, 0xe2 /* ALT-L */) ||
2033              UKBD_KEY_PRESSED(bitmap, 0xe6 /* ALT-R */)))
2034                 return (0x54);
2035         return (keycode);
2036 }
2037
2038 static int
2039 ukbd_key2scan(struct ukbd_softc *sc, int code, const uint64_t *bitmap, int up)
2040 {
2041         static const int scan[] = {
2042                 /* 89 */
2043                 0x11c,  /* Enter */
2044                 /* 90-99 */
2045                 0x11d,  /* Ctrl-R */
2046                 0x135,  /* Divide */
2047                 0x137,  /* PrintScreen */
2048                 0x138,  /* Alt-R */
2049                 0x147,  /* Home */
2050                 0x148,  /* Up */
2051                 0x149,  /* PageUp */
2052                 0x14b,  /* Left */
2053                 0x14d,  /* Right */
2054                 0x14f,  /* End */
2055                 /* 100-109 */
2056                 0x150,  /* Down */
2057                 0x151,  /* PageDown */
2058                 0x152,  /* Insert */
2059                 0x153,  /* Delete */
2060                 0x146,  /* Pause/Break */
2061                 0x15b,  /* Win_L(Super_L) */
2062                 0x15c,  /* Win_R(Super_R) */
2063                 0x15d,  /* Application(Menu) */
2064
2065                 /* SUN TYPE 6 USB KEYBOARD */
2066                 0x168,  /* Sun Type 6 Help */
2067                 0x15e,  /* Sun Type 6 Stop */
2068                 /* 110 - 119 */
2069                 0x15f,  /* Sun Type 6 Again */
2070                 0x160,  /* Sun Type 6 Props */
2071                 0x161,  /* Sun Type 6 Undo */
2072                 0x162,  /* Sun Type 6 Front */
2073                 0x163,  /* Sun Type 6 Copy */
2074                 0x164,  /* Sun Type 6 Open */
2075                 0x165,  /* Sun Type 6 Paste */
2076                 0x166,  /* Sun Type 6 Find */
2077                 0x167,  /* Sun Type 6 Cut */
2078                 0x125,  /* Sun Type 6 Mute */
2079                 /* 120 - 130 */
2080                 0x11f,  /* Sun Type 6 VolumeDown */
2081                 0x11e,  /* Sun Type 6 VolumeUp */
2082                 0x120,  /* Sun Type 6 PowerDown */
2083
2084                 /* Japanese 106/109 keyboard */
2085                 0x73,   /* Keyboard Intl' 1 (backslash / underscore) */
2086                 0x70,   /* Keyboard Intl' 2 (Katakana / Hiragana) */
2087                 0x7d,   /* Keyboard Intl' 3 (Yen sign) (Not using in jp106/109) */
2088                 0x79,   /* Keyboard Intl' 4 (Henkan) */
2089                 0x7b,   /* Keyboard Intl' 5 (Muhenkan) */
2090                 0x5c,   /* Keyboard Intl' 6 (Keypad ,) (For PC-9821 layout) */
2091                 0x71,   /* Apple Keyboard JIS (Kana) */
2092                 0x72,   /* Apple Keyboard JIS (Eisu) */
2093         };
2094
2095         if ((code >= 89) && (code < (int)(89 + nitems(scan)))) {
2096                 code = scan[code - 89];
2097         }
2098         /* PrintScreen */
2099         if (code == 0x137 && (!(
2100             UKBD_KEY_PRESSED(bitmap, 0xe0 /* CTRL-L */) ||
2101             UKBD_KEY_PRESSED(bitmap, 0xe4 /* CTRL-R */) ||
2102             UKBD_KEY_PRESSED(bitmap, 0xe1 /* SHIFT-L */) ||
2103             UKBD_KEY_PRESSED(bitmap, 0xe5 /* SHIFT-R */)))) {
2104                 code |= SCAN_PREFIX_SHIFT;
2105         }
2106         /* Pause/Break */
2107         if ((code == 0x146) && (!(
2108             UKBD_KEY_PRESSED(bitmap, 0xe0 /* CTRL-L */) ||
2109             UKBD_KEY_PRESSED(bitmap, 0xe4 /* CTRL-R */)))) {
2110                 code = (0x45 | SCAN_PREFIX_E1 | SCAN_PREFIX_CTL);
2111         }
2112         code |= (up ? SCAN_RELEASE : SCAN_PRESS);
2113
2114         if (code & SCAN_PREFIX) {
2115                 if (code & SCAN_PREFIX_CTL) {
2116                         /* Ctrl */
2117                         sc->sc_buffered_char[0] = (0x1d | (code & SCAN_RELEASE));
2118                         sc->sc_buffered_char[1] = (code & ~SCAN_PREFIX);
2119                 } else if (code & SCAN_PREFIX_SHIFT) {
2120                         /* Shift */
2121                         sc->sc_buffered_char[0] = (0x2a | (code & SCAN_RELEASE));
2122                         sc->sc_buffered_char[1] = (code & ~SCAN_PREFIX_SHIFT);
2123                 } else {
2124                         sc->sc_buffered_char[0] = (code & ~SCAN_PREFIX);
2125                         sc->sc_buffered_char[1] = 0;
2126                 }
2127                 return ((code & SCAN_PREFIX_E0) ? 0xe0 : 0xe1);
2128         }
2129         return (code);
2130
2131 }
2132
2133 #endif                                  /* UKBD_EMULATE_ATSCANCODE */
2134
2135 static keyboard_switch_t ukbdsw = {
2136         .probe = &ukbd__probe,
2137         .init = &ukbd_init,
2138         .term = &ukbd_term,
2139         .intr = &ukbd_intr,
2140         .test_if = &ukbd_test_if,
2141         .enable = &ukbd_enable,
2142         .disable = &ukbd_disable,
2143         .read = &ukbd_read,
2144         .check = &ukbd_check,
2145         .read_char = &ukbd_read_char,
2146         .check_char = &ukbd_check_char,
2147         .ioctl = &ukbd_ioctl,
2148         .lock = &ukbd_lock,
2149         .clear_state = &ukbd_clear_state,
2150         .get_state = &ukbd_get_state,
2151         .set_state = &ukbd_set_state,
2152         .poll = &ukbd_poll,
2153 };
2154
2155 KEYBOARD_DRIVER(ukbd, ukbdsw, ukbd_configure);
2156
2157 static int
2158 ukbd_driver_load(module_t mod, int what, void *arg)
2159 {
2160         switch (what) {
2161         case MOD_LOAD:
2162                 kbd_add_driver(&ukbd_kbd_driver);
2163                 break;
2164         case MOD_UNLOAD:
2165                 kbd_delete_driver(&ukbd_kbd_driver);
2166                 break;
2167         }
2168         return (0);
2169 }
2170
2171 static devclass_t ukbd_devclass;
2172
2173 static device_method_t ukbd_methods[] = {
2174         DEVMETHOD(device_probe, ukbd_probe),
2175         DEVMETHOD(device_attach, ukbd_attach),
2176         DEVMETHOD(device_detach, ukbd_detach),
2177         DEVMETHOD(device_resume, ukbd_resume),
2178
2179         DEVMETHOD_END
2180 };
2181
2182 static driver_t ukbd_driver = {
2183         .name = "ukbd",
2184         .methods = ukbd_methods,
2185         .size = sizeof(struct ukbd_softc),
2186 };
2187
2188 DRIVER_MODULE(ukbd, uhub, ukbd_driver, ukbd_devclass, ukbd_driver_load, 0);
2189 MODULE_DEPEND(ukbd, usb, 1, 1, 1);
2190 MODULE_DEPEND(ukbd, hid, 1, 1, 1);
2191 #ifdef EVDEV_SUPPORT
2192 MODULE_DEPEND(ukbd, evdev, 1, 1, 1);
2193 #endif
2194 MODULE_VERSION(ukbd, 1);
2195 #ifndef USBHID_ENABLED
2196 USB_PNP_HOST_INFO(ukbd_devs);
2197 #endif