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.