By the way, are you sure 'pckbd_set_xtscancode' in sys/dev/pckbc/pckbd.c is correct? This function tries to check for scancode set 3 using
cmd[0] = KBC_SETTABLE; cmd[1] = 0; if (pckbc_poll_cmd(kbctag, kbcslot, cmd, 2, 1, resp, 0)) { /* * query failed, step down to table 2 to be * safe. */ #ifdef DEBUG printf("pckbd: table 3 verification failed\n"); #endif continue; } else if (resp[0] == 3) { #ifdef DEBUG printf("pckbd: settling on table 3\n"); #endif break; } #ifdef DEBUG else printf("pckbd: table \"%x\" != 3, trying 2\n", resp[0]); However, http://www.win.tue.nl/~aeb/linux/kbd/scancodes-10.html says: "The usual PC keyboards are capable of producing three sets of scancodes. Writing 0xf0 followed by 1, 2 or 3 to port 0x60 will put the keyboard in scancode mode 1, 2 or 3. Writing 0xf0 followed by 0 queries the mode, resulting in a scancode byte 43, 41 or 3f from the keyboard." So "resp[0] == 3" always fails and the code falls back to using scancode set 2.