Lines Matching +full:0 +full:x11d

97 static int hkbd_debug = 0;
98 static int hkbd_no_leds = 0;
100 static SYSCTL_NODE(_hw_hid, OID_AUTO, hkbd, CTLFLAG_RW, 0, "USB keyboard");
102 &hkbd_debug, 0, "Debug level");
104 &hkbd_no_leds, 0, "Disables setting of keyboard leds");
114 #define HKBD_NFKEY (sizeof(fkey_tab)/sizeof(fkey_tab[0])) /* units */
117 CTASSERT((key) >= 0 && (key) < HKBD_NKEYCODE); \
121 #define MOD_EJECT 0x01
122 #define MOD_FN 0x02
124 #define MOD_MIN 0xe0
125 #define MOD_MAX 0xe7
166 #define HKBD_FLAG_COMPOSE 0x00000001
167 #define HKBD_FLAG_POLLING 0x00000002
168 #define HKBD_FLAG_ATTACHED 0x00000010
169 #define HKBD_FLAG_GONE 0x00000020
171 #define HKBD_FLAG_HID_MASK 0x003fffc0
172 #define HKBD_FLAG_APPLE_EJECT 0x00000040
173 #define HKBD_FLAG_APPLE_FN 0x00000080
174 #define HKBD_FLAG_APPLE_SWAP 0x00000100
175 #define HKBD_FLAG_NUMLOCK 0x00080000
176 #define HKBD_FLAG_CAPSLOCK 0x00100000
177 #define HKBD_FLAG_SCROLLLOCK 0x00200000
181 int sc_accents; /* accent key index (> 0) */
201 #define KEY_NONE 0x00
202 #define KEY_ERROR 0x01
204 #define KEY_PRESS 0
205 #define KEY_RELEASE 0x400
206 #define KEY_INDEX(c) ((c) & 0xFF)
208 #define SCAN_PRESS 0
209 #define SCAN_RELEASE 0x80
210 #define SCAN_PREFIX_E0 0x100
211 #define SCAN_PREFIX_E1 0x200
212 #define SCAN_PREFIX_CTL 0x400
213 #define SCAN_PREFIX_SHIFT 0x800
216 #define SCAN_CHAR(c) ((c) & 0x7f)
221 } while (0)
225 } while (0)
229 } while (0)
233 } while (0)
237 } while (0)
241 } while (0)
243 #define NN 0 /* no translation */
249 * 0x53: keypad NumLock/Clear
250 * 0x66: Power
251 * 0x67: keypad =
252 * 0x68: F13
253 * 0x69: F14
254 * 0x6a: F15
257 * 0x90: Kana
258 * 0x91: Eisu
261 0, 0, 0, 0, 30, 48, 46, 32, /* 00 - 07 */
262 18, 33, 34, 35, 23, 36, 37, 38, /* 08 - 0F */
360 if (sc->sc_delay == 0) in hkbd_start_timer()
385 DPRINTF("0x%02x (%d) %s\n", key, key, in hkbd_put_key()
410 KASSERT((sc->sc_flags & HKBD_FLAG_POLLING) != 0, in hkbd_do_poll()
462 (sc->sc_flags & HKBD_FLAG_POLLING) != 0, in hkbd_get_key()
504 sc->sc_repeat_key = 0; in hkbd_interrupt()
531 if (sc->sc_repeat_key != 0) { in hkbd_interrupt()
535 if (dtime <= 0) { in hkbd_interrupt()
561 if ((sc->sc_flags & HKBD_FLAG_POLLING) != 0) in hkbd_event_keyinput()
575 c = hkbd_read_char(&sc->sc_kbd, 0); in hkbd_event_keyinput()
591 sc->sc_delay = 0; in hkbd_timeout()
614 case 0x28: return 0x49; /* RETURN -> INSERT */ in hkbd_apple_fn()
615 case 0x2a: return 0x4c; /* BACKSPACE -> DEL */ in hkbd_apple_fn()
616 case 0x50: return 0x4a; /* LEFT ARROW -> HOME */ in hkbd_apple_fn()
617 case 0x4f: return 0x4d; /* RIGHT ARROW -> END */ in hkbd_apple_fn()
618 case 0x52: return 0x4b; /* UP ARROW -> PGUP */ in hkbd_apple_fn()
619 case 0x51: return 0x4e; /* DOWN ARROW -> PGDN */ in hkbd_apple_fn()
628 case 0x35: return 0x64; in hkbd_apple_swap()
629 case 0x64: return 0x35; in hkbd_apple_swap()
640 uint8_t id = 0; in hkbd_intr_callback()
647 if (len == 0) { in hkbd_intr_callback()
652 if (sc->sc_kbd_id != 0) { in hkbd_intr_callback()
654 id = buf[0]; in hkbd_intr_callback()
657 if (len == 0) { in hkbd_intr_callback()
664 if (bit_test(sc->sc_loc_key_valid, 0) && id == sc->sc_id_loc_key[0]) { in hkbd_intr_callback()
667 memset(&sc->sc_ndata0, 0, bitstr_size(HKBD_NKEYCODE)); in hkbd_intr_callback()
674 modifiers = 0; in hkbd_intr_callback()
691 } else if (i == 0) { in hkbd_intr_callback()
692 struct hid_location tmp_loc = sc->sc_loc_key[0]; in hkbd_intr_callback()
733 DPRINTF("modifiers = 0x%04x\n", modifiers); in hkbd_intr_callback()
735 DPRINTF("Key 0x%02x pressed\n", i); in hkbd_intr_callback()
758 if (error != 0) in hkbd_probe()
778 memset(sc->sc_loc_key_valid, 0, bitstr_size(HKBD_NKEYCODE)); in hkbd_parse_hid()
787 hid_input, tlc_index, 0, &sc->sc_loc_apple_eject, &flags, in hkbd_parse_hid()
795 HID_USAGE2(0xFFFF, 0x0003), in hkbd_parse_hid()
796 hid_input, tlc_index, 0, &sc->sc_loc_apple_fn, &flags, in hkbd_parse_hid()
805 HID_USAGE2(HUP_KEYBOARD, 0x00), in hkbd_parse_hid()
806 hid_input, tlc_index, 0, &sc->sc_loc_key[0], &flags, in hkbd_parse_hid()
807 &sc->sc_id_loc_key[0], NULL)) { in hkbd_parse_hid()
811 bit_set(sc->sc_loc_key_valid, 0); in hkbd_parse_hid()
820 hid_input, tlc_index, 0, &sc->sc_loc_key[key], &flags, in hkbd_parse_hid()
824 DPRINTFN(1, "Found key 0x%02x\n", key); in hkbd_parse_hid()
831 HID_USAGE2(HUP_LEDS, 0x01), in hkbd_parse_hid()
832 hid_output, tlc_index, 0, &sc->sc_loc_numlock, &flags, in hkbd_parse_hid()
839 HID_USAGE2(HUP_LEDS, 0x02), in hkbd_parse_hid()
840 hid_output, tlc_index, 0, &sc->sc_loc_capslock, &flags, in hkbd_parse_hid()
842 if ((sc->sc_flags & HKBD_FLAG_NUMLOCK) == 0) in hkbd_parse_hid()
849 HID_USAGE2(HUP_LEDS, 0x03), in hkbd_parse_hid()
850 hid_output, tlc_index, 0, &sc->sc_loc_scrolllock, &flags, in hkbd_parse_hid()
853 == 0) in hkbd_parse_hid()
861 HKBD_FLAG_SCROLLLOCK)) != 0) in hkbd_parse_hid()
886 kbd_init_struct(kbd, HKBD_DRIVER_NAME, KB_OTHER, unit, 0, 0, 0); in hkbd_attach()
893 TASK_INIT(&sc->sc_task, 0, hkbd_event_keyinput, sc); in hkbd_attach()
894 callout_init_mtx(&sc->sc_callout, &sc->sc_mtx, 0); in hkbd_attach()
906 for (n = 0; n < HKBD_NFKEY; n++) { in hkbd_attach()
926 if (err == 0) { in hkbd_attach()
935 (err != 0) || hkbd_any_key_valid(sc) == false) { in hkbd_attach()
938 err = hid_set_protocol(dev, 0); in hkbd_attach()
940 if (err != 0) { in hkbd_attach()
944 hkbd_parse_hid(sc, hkbd_boot_desc, sizeof(hkbd_boot_desc), 0); in hkbd_attach()
948 hid_set_idle(dev, 0, 0); in hkbd_attach()
954 if (kbd_register(kbd) < 0) { in hkbd_attach()
983 for (i = 0x00; i <= 0xFF; i++) in hkbd_attach()
1007 return (0); /* success */ in hkbd_attach()
1039 memset(&sc->sc_ndata, 0, bitstr_size(HKBD_NKEYCODE)); in hkbd_detach()
1080 sc->sc_kbd.kb_flags = 0; in hkbd_detach()
1085 return (0); in hkbd_detach()
1097 return (0); in hkbd_resume()
1120 return (0); in hkbd_configure()
1141 return (0); in hkbd_test_if()
1155 return (0); in hkbd_intr()
1177 return (0); in hkbd_enable()
1189 return (0); in hkbd_disable()
1202 return (0); in hkbd_check()
1205 hkbd_do_poll(sc, 0); in hkbd_check()
1208 if (sc->sc_buffered_char[0]) { in hkbd_check()
1215 return (0); in hkbd_check()
1227 return (0); in hkbd_check_char_locked()
1229 if ((sc->sc_composed_char > 0) && in hkbd_check_char_locked()
1267 if (sc->sc_buffered_char[0]) { in hkbd_read()
1268 scancode = sc->sc_buffered_char[0]; in hkbd_read()
1270 sc->sc_buffered_char[0] &= ~SCAN_PREFIX; in hkbd_read()
1271 return ((scancode & SCAN_PREFIX_E0) ? 0xe0 : 0xe1); in hkbd_read()
1273 sc->sc_buffered_char[0] = sc->sc_buffered_char[1]; in hkbd_read()
1274 sc->sc_buffered_char[1] = 0; in hkbd_read()
1280 usbcode = hkbd_get_key(sc, (wait == FALSE) ? 0 : 1); in hkbd_read()
1319 if ((sc->sc_composed_char > 0) && in hkbd_read_char_locked()
1322 sc->sc_composed_char = 0; in hkbd_read_char_locked()
1324 if (action > 0xFF) { in hkbd_read_char_locked()
1334 scancode = sc->sc_buffered_char[0]; in hkbd_read_char_locked()
1337 sc->sc_buffered_char[0] = (scancode & ~SCAN_PREFIX); in hkbd_read_char_locked()
1338 return ((scancode & SCAN_PREFIX_E0) ? 0xe0 : 0xe1); in hkbd_read_char_locked()
1340 sc->sc_buffered_char[0] = sc->sc_buffered_char[1]; in hkbd_read_char_locked()
1341 sc->sc_buffered_char[1] = 0; in hkbd_read_char_locked()
1349 usbcode = hkbd_get_key(sc, (wait == FALSE) ? 0 : 1); in hkbd_read_char_locked()
1380 case 0x38: /* left alt (compose key) */ in hkbd_read_char_locked()
1385 if (sc->sc_composed_char > 0xFF) { in hkbd_read_char_locked()
1386 sc->sc_composed_char = 0; in hkbd_read_char_locked()
1392 sc->sc_composed_char = 0; in hkbd_read_char_locked()
1409 case 0x47: in hkbd_read_char_locked()
1410 case 0x48: in hkbd_read_char_locked()
1411 case 0x49: /* keypad 7,8,9 */ in hkbd_read_char_locked()
1413 sc->sc_composed_char += keycode - 0x40; in hkbd_read_char_locked()
1416 case 0x4B: in hkbd_read_char_locked()
1417 case 0x4C: in hkbd_read_char_locked()
1418 case 0x4D: /* keypad 4,5,6 */ in hkbd_read_char_locked()
1420 sc->sc_composed_char += keycode - 0x47; in hkbd_read_char_locked()
1423 case 0x4F: in hkbd_read_char_locked()
1424 case 0x50: in hkbd_read_char_locked()
1425 case 0x51: /* keypad 1,2,3 */ in hkbd_read_char_locked()
1427 sc->sc_composed_char += keycode - 0x4E; in hkbd_read_char_locked()
1430 case 0x52: /* keypad 0 */ in hkbd_read_char_locked()
1435 case SCAN_RELEASE | 0x47: in hkbd_read_char_locked()
1436 case SCAN_RELEASE | 0x48: in hkbd_read_char_locked()
1437 case SCAN_RELEASE | 0x49: /* keypad 7,8,9 */ in hkbd_read_char_locked()
1438 case SCAN_RELEASE | 0x4B: in hkbd_read_char_locked()
1439 case SCAN_RELEASE | 0x4C: in hkbd_read_char_locked()
1440 case SCAN_RELEASE | 0x4D: /* keypad 4,5,6 */ in hkbd_read_char_locked()
1441 case SCAN_RELEASE | 0x4F: in hkbd_read_char_locked()
1442 case SCAN_RELEASE | 0x50: in hkbd_read_char_locked()
1443 case SCAN_RELEASE | 0x51: /* keypad 1,2,3 */ in hkbd_read_char_locked()
1444 case SCAN_RELEASE | 0x52: /* keypad 0 */ in hkbd_read_char_locked()
1447 case 0x38: /* left alt key */ in hkbd_read_char_locked()
1451 if (sc->sc_composed_char > 0) { in hkbd_read_char_locked()
1453 sc->sc_composed_char = 0; in hkbd_read_char_locked()
1470 if (sc->sc_composed_char <= 0xFF) { in hkbd_read_char_locked()
1531 if ((sc->sc_flags & HKBD_FLAG_POLLING) == 0) in hkbd_ioctl_locked()
1605 return (0); in hkbd_ioctl_locked()
1613 kbd->kb_delay1 = imax(((int *)arg)[0], 250); in hkbd_ioctl_locked()
1622 return (0); in hkbd_ioctl_locked()
1645 sc->sc_accents = 0; in hkbd_ioctl_locked()
1651 return (0); in hkbd_ioctl_locked()
1662 if (curthread->td_critnest != 0) in hkbd_ioctl()
1700 sc->sc_accents = 0; in hkbd_clear_state()
1701 sc->sc_composed_char = 0; in hkbd_clear_state()
1703 sc->sc_buffered_char[0] = 0; in hkbd_clear_state()
1704 sc->sc_buffered_char[1] = 0; in hkbd_clear_state()
1706 memset(&sc->sc_ndata, 0, bitstr_size(HKBD_NKEYCODE)); in hkbd_clear_state()
1707 memset(&sc->sc_odata, 0, bitstr_size(HKBD_NKEYCODE)); in hkbd_clear_state()
1708 memset(&sc->sc_ndata0, 0, bitstr_size(HKBD_NKEYCODE)); in hkbd_clear_state()
1709 memset(&sc->sc_odata0, 0, bitstr_size(HKBD_NKEYCODE)); in hkbd_clear_state()
1710 sc->sc_repeat_time = 0; in hkbd_clear_state()
1711 sc->sc_repeat_key = 0; in hkbd_clear_state()
1718 return (len == 0) ? 1 : -1; in hkbd_get_state()
1740 else if (sc->sc_polling > 0) in hkbd_poll()
1743 if (sc->sc_polling != 0) { in hkbd_poll()
1748 sc->sc_delay = 0; in hkbd_poll()
1752 return (0); in hkbd_poll()
1767 DPRINTF("leds=0x%02x\n", leds); in hkbd_set_leds()
1771 return (0); in hkbd_set_leds()
1774 memset(sc->sc_buffer, 0, HKBD_BUFFER_SIZE); in hkbd_set_leds()
1777 any = 0; in hkbd_set_leds()
1783 &sc->sc_loc_numlock, leds & NLKED ? 1 : 0); in hkbd_set_leds()
1789 &sc->sc_loc_scrolllock, leds & SLKED ? 1 : 0); in hkbd_set_leds()
1795 &sc->sc_loc_capslock, leds & CLKED ? 1 : 0); in hkbd_set_leds()
1801 return (0); in hkbd_set_leds()
1810 if (id != 0) { in hkbd_set_leds()
1811 sc->sc_buffer[0] = id; in hkbd_set_leds()
1833 if (code & ~0x7f) { in hkbd_set_typematic()
1837 kbd->kb_delay2 = kbrates[code & 0x1f]; in hkbd_set_typematic()
1842 return (0); in hkbd_set_typematic()
1857 * mapped Alted PrintScreens to an unusual usbcode (0x8a). in hkbd_atkeycode()
1858 * hkbd_trtab translates this to 0x7e, and key2scan() would in hkbd_atkeycode()
1859 * translate that to 0x79 (Intl' 4). Assume that if we have in hkbd_atkeycode()
1860 * an Alted 0x7e here then it actually is an Alted PrintScreen. in hkbd_atkeycode()
1862 * The usual usbcode for all PrintScreens is 0x46. hkbd_trtab in hkbd_atkeycode()
1863 * translates this to 0x5c, so the Alt check to classify 0x5c in hkbd_atkeycode()
1866 if ((keycode == 0x5c || keycode == 0x7e) && in hkbd_atkeycode()
1867 (HKBD_KEY_PRESSED(bitmap, 0xe2 /* ALT-L */) || in hkbd_atkeycode()
1868 HKBD_KEY_PRESSED(bitmap, 0xe6 /* ALT-R */))) in hkbd_atkeycode()
1869 return (0x54); in hkbd_atkeycode()
1878 0x11c, /* Enter */ in hkbd_key2scan()
1880 0x11d, /* Ctrl-R */ in hkbd_key2scan()
1881 0x135, /* Divide */ in hkbd_key2scan()
1882 0x137, /* PrintScreen */ in hkbd_key2scan()
1883 0x138, /* Alt-R */ in hkbd_key2scan()
1884 0x147, /* Home */ in hkbd_key2scan()
1885 0x148, /* Up */ in hkbd_key2scan()
1886 0x149, /* PageUp */ in hkbd_key2scan()
1887 0x14b, /* Left */ in hkbd_key2scan()
1888 0x14d, /* Right */ in hkbd_key2scan()
1889 0x14f, /* End */ in hkbd_key2scan()
1891 0x150, /* Down */ in hkbd_key2scan()
1892 0x151, /* PageDown */ in hkbd_key2scan()
1893 0x152, /* Insert */ in hkbd_key2scan()
1894 0x153, /* Delete */ in hkbd_key2scan()
1895 0x146, /* Pause/Break */ in hkbd_key2scan()
1896 0x15b, /* Win_L(Super_L) */ in hkbd_key2scan()
1897 0x15c, /* Win_R(Super_R) */ in hkbd_key2scan()
1898 0x15d, /* Application(Menu) */ in hkbd_key2scan()
1901 0x168, /* Sun Type 6 Help */ in hkbd_key2scan()
1902 0x15e, /* Sun Type 6 Stop */ in hkbd_key2scan()
1904 0x15f, /* Sun Type 6 Again */ in hkbd_key2scan()
1905 0x160, /* Sun Type 6 Props */ in hkbd_key2scan()
1906 0x161, /* Sun Type 6 Undo */ in hkbd_key2scan()
1907 0x162, /* Sun Type 6 Front */ in hkbd_key2scan()
1908 0x163, /* Sun Type 6 Copy */ in hkbd_key2scan()
1909 0x164, /* Sun Type 6 Open */ in hkbd_key2scan()
1910 0x165, /* Sun Type 6 Paste */ in hkbd_key2scan()
1911 0x166, /* Sun Type 6 Find */ in hkbd_key2scan()
1912 0x167, /* Sun Type 6 Cut */ in hkbd_key2scan()
1913 0x125, /* Sun Type 6 Mute */ in hkbd_key2scan()
1915 0x11f, /* Sun Type 6 VolumeDown */ in hkbd_key2scan()
1916 0x11e, /* Sun Type 6 VolumeUp */ in hkbd_key2scan()
1917 0x120, /* Sun Type 6 PowerDown */ in hkbd_key2scan()
1920 0x73, /* Keyboard Intl' 1 (backslash / underscore) */ in hkbd_key2scan()
1921 0x70, /* Keyboard Intl' 2 (Katakana / Hiragana) */ in hkbd_key2scan()
1922 0x7d, /* Keyboard Intl' 3 (Yen sign) (Not using in jp106/109) */ in hkbd_key2scan()
1923 0x79, /* Keyboard Intl' 4 (Henkan) */ in hkbd_key2scan()
1924 0x7b, /* Keyboard Intl' 5 (Muhenkan) */ in hkbd_key2scan()
1925 0x5c, /* Keyboard Intl' 6 (Keypad ,) (For PC-9821 layout) */ in hkbd_key2scan()
1926 0x71, /* Apple Keyboard JIS (Kana) */ in hkbd_key2scan()
1927 0x72, /* Apple Keyboard JIS (Eisu) */ in hkbd_key2scan()
1934 if (code == 0x137 && (!( in hkbd_key2scan()
1935 HKBD_KEY_PRESSED(bitmap, 0xe0 /* CTRL-L */) || in hkbd_key2scan()
1936 HKBD_KEY_PRESSED(bitmap, 0xe4 /* CTRL-R */) || in hkbd_key2scan()
1937 HKBD_KEY_PRESSED(bitmap, 0xe1 /* SHIFT-L */) || in hkbd_key2scan()
1938 HKBD_KEY_PRESSED(bitmap, 0xe5 /* SHIFT-R */)))) { in hkbd_key2scan()
1942 if ((code == 0x146) && (!( in hkbd_key2scan()
1943 HKBD_KEY_PRESSED(bitmap, 0xe0 /* CTRL-L */) || in hkbd_key2scan()
1944 HKBD_KEY_PRESSED(bitmap, 0xe4 /* CTRL-R */)))) { in hkbd_key2scan()
1945 code = (0x45 | SCAN_PREFIX_E1 | SCAN_PREFIX_CTL); in hkbd_key2scan()
1952 sc->sc_buffered_char[0] = (0x1d | (code & SCAN_RELEASE)); in hkbd_key2scan()
1956 sc->sc_buffered_char[0] = (0x2a | (code & SCAN_RELEASE)); in hkbd_key2scan()
1959 sc->sc_buffered_char[0] = (code & ~SCAN_PREFIX); in hkbd_key2scan()
1960 sc->sc_buffered_char[1] = 0; in hkbd_key2scan()
1962 return ((code & SCAN_PREFIX_E0) ? 0xe0 : 0xe1); in hkbd_key2scan()
2003 return (0); in hkbd_driver_load()