From 27332c1b34b2ee966854708d0ed957eeb6d61baa Mon Sep 17 00:00:00 2001 From: =?utf8?q?Imre=20Vad=C3=A1sz?= Date: Fri, 24 Nov 2017 20:19:50 +0100 Subject: [PATCH] kernel - Get rid of old KDSETRAD keyboard ioctl, and some __i386__ kbd code. * The KDSETREPEAT ioctl was implemented as a replacement more than 18 years ago in 1999 (FreeBSD svn r44628). --- sys/bus/u4b/input/ukbd.c | 22 ------------------ sys/dev/misc/kbd/atkbd.c | 49 ---------------------------------------- sys/dev/misc/kbdmux/kbdmux.c | 30 ++++++++++-------------- sys/dev/misc/syscons/syscons.c | 11 --------- sys/sys/kbio.h | 2 ++ usr.sbin/kbdcontrol/kbdcontrol.c | 12 ++-------- 6 files changed, 16 insertions(+), 110 deletions(-) diff --git a/sys/bus/u4b/input/ukbd.c b/sys/bus/u4b/input/ukbd.c index 3344aa145c..bb36139131 100644 --- a/sys/bus/u4b/input/ukbd.c +++ b/sys/bus/u4b/input/ukbd.c @@ -351,7 +351,6 @@ static const uint8_t ukbd_boot_desc[] = { /* prototypes */ static void ukbd_timeout(void *); static void ukbd_set_leds(struct ukbd_softc *, uint8_t); -static int ukbd_set_typematic(keyboard_t *, int); #ifdef UKBD_EMULATE_ATSCANCODE static int ukbd_key2scan(struct ukbd_softc *, int, int, int); #endif @@ -1868,10 +1867,6 @@ ukbd_ioctl_locked(keyboard_t *kbd, u_long cmd, caddr_t arg) kbd->kb_delay2 = ((int *)arg)[1]; return (0); - case KDSETRAD: /* set keyboard repeat rate (old - * interface) */ - return (ukbd_set_typematic(kbd, *(int *)arg)); - case PIO_KEYMAP: /* set keyboard translation table */ case PIO_KEYMAPENT: /* set keyboard translation table * entry */ @@ -1988,23 +1983,6 @@ ukbd_set_leds(struct ukbd_softc *sc, uint8_t leds) usbd_transfer_start(sc->sc_xfer[UKBD_CTRL_LED]); } -static int -ukbd_set_typematic(keyboard_t *kbd, int code) -{ - static const int delays[] = {250, 500, 750, 1000}; - static const int rates[] = {34, 38, 42, 46, 50, 55, 59, 63, - 68, 76, 84, 92, 100, 110, 118, 126, - 136, 152, 168, 184, 200, 220, 236, 252, - 272, 304, 336, 368, 400, 440, 472, 504}; - - if (code & ~0x7f) { - return (EINVAL); - } - kbd->kb_delay1 = delays[(code >> 5) & 3]; - kbd->kb_delay2 = rates[code & 0x1f]; - return (0); -} - #ifdef UKBD_EMULATE_ATSCANCODE static int ukbd_key2scan(struct ukbd_softc *sc, int code, int shift, int up) diff --git a/sys/dev/misc/kbd/atkbd.c b/sys/dev/misc/kbd/atkbd.c index b04b6cf65a..96266962db 100644 --- a/sys/dev/misc/kbd/atkbd.c +++ b/sys/dev/misc/kbd/atkbd.c @@ -42,16 +42,6 @@ #include #include -#ifdef __i386__ -#include -#include -#include -#include - -#include -#include -#endif /* __i386__ */ - #include #include "kbdreg.h" #include "atkbdreg.h" @@ -923,18 +913,6 @@ atkbd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg) } return error; - case KDSETRAD: /* set keyboard repeat rate (old interface) */ - crit_exit(); - if (!KBD_HAS_DEVICE(kbd)) { - return 0; - } - error = write_kbd(state->kbdc, KBDC_SET_TYPEMATIC, *(int *)arg); - if (error == 0) { - kbd->kb_delay1 = typematic_delay(*(int *)arg); - kbd->kb_delay2 = typematic_rate(*(int *)arg); - } - return error; - case PIO_KEYMAP: /* set keyboard translation table */ case PIO_KEYMAPENT: /* set keyboard translation table entry */ case PIO_DEADKEYMAP: /* set accent key translation table */ @@ -1019,34 +997,7 @@ atkbd_poll(keyboard_t *kbd, int on) static int get_typematic(keyboard_t *kbd) { -#ifdef __i386__ - /* - * Only some systems allow us to retrieve the keyboard repeat - * rate previously set via the BIOS... - */ - struct vm86frame vmf; - u_int32_t p; - - bzero(&vmf, sizeof(vmf)); - vmf.vmf_ax = 0xc000; - vm86_intcall(0x15, &vmf); - if ((vmf.vmf_eflags & PSL_C) || vmf.vmf_ah) - return ENODEV; - p = BIOS_PADDRTOVADDR(((u_int32_t)vmf.vmf_es << 4) + vmf.vmf_bx); - if ((readb(p + 6) & 0x40) == 0) /* int 16, function 0x09 supported? */ - return ENODEV; - vmf.vmf_ax = 0x0900; - vm86_intcall(0x16, &vmf); - if ((vmf.vmf_al & 0x08) == 0) /* int 16, function 0x0306 supported? */ - return ENODEV; - vmf.vmf_ax = 0x0306; - vm86_intcall(0x16, &vmf); - kbd->kb_delay1 = typematic_delay(vmf.vmf_bh << 5); - kbd->kb_delay2 = typematic_rate(vmf.vmf_bl); - return 0; -#else return ENODEV; -#endif /* __i386__ */ } static int diff --git a/sys/dev/misc/kbdmux/kbdmux.c b/sys/dev/misc/kbdmux/kbdmux.c index ee924765dc..e00a413284 100644 --- a/sys/dev/misc/kbdmux/kbdmux.c +++ b/sys/dev/misc/kbdmux/kbdmux.c @@ -875,7 +875,7 @@ kbdmux_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg) kbdmux_state_t *state = (kbdmux_state_t *) kbd->kb_data; kbdmux_kbd_t *k; keyboard_info_t *ki; - int error = 0, mode; + int error = 0, mode, i; if (state == NULL) return (ENXIO); @@ -1024,23 +1024,17 @@ kbdmux_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg) /* NOT REACHED */ case KDSETREPEAT: /* set keyboard repeat rate (new interface) */ - case KDSETRAD: /* set keyboard repeat rate (old interface) */ - if (cmd == KDSETREPEAT) { - int i; - - /* lookup delay */ - for (i = NELEM(delays) - 1; i > 0; i --) - if (((int *)arg)[0] >= delays[i]) - break; - mode = i << 5; - - /* lookup rate */ - for (i = NELEM(rates) - 1; i > 0; i --) - if (((int *)arg)[1] >= rates[i]) - break; - mode |= i; - } else - mode = *(int *)arg; + /* lookup delay */ + for (i = NELEM(delays) - 1; i > 0; i --) + if (((int *)arg)[0] >= delays[i]) + break; + mode = i << 5; + + /* lookup rate */ + for (i = NELEM(rates) - 1; i > 0; i --) + if (((int *)arg)[1] >= rates[i]) + break; + mode |= i; if (mode & ~0x7f) return (EINVAL); diff --git a/sys/dev/misc/syscons/syscons.c b/sys/dev/misc/syscons/syscons.c index b7b58f5676..4bbc6b8e9e 100644 --- a/sys/dev/misc/syscons/syscons.c +++ b/sys/dev/misc/syscons/syscons.c @@ -1396,17 +1396,6 @@ scioctl(struct dev_ioctl_args *ap) lwkt_reltoken(&tty_token); return error; - case KDSETRAD: /* set keyboard repeat & delay rates (old) */ - if (*(int *)data & ~0x7f) { - lwkt_reltoken(&tty_token); - return EINVAL; - } - error = kbd_ioctl(sc->kbd, cmd, data); - if (error == ENOIOCTL) - error = ENODEV; - lwkt_reltoken(&tty_token); - return error; - case KDSKBMODE: /* set keyboard mode */ switch (*(int *)data) { case K_XLATE: /* switch to XLT ascii mode */ diff --git a/sys/sys/kbio.h b/sys/sys/kbio.h index 53d21d4484..5e956039da 100644 --- a/sys/sys/kbio.h +++ b/sys/sys/kbio.h @@ -59,8 +59,10 @@ #define KDGETLED _IOR('K', 65, int) #define KDSETLED _IO('K', 66 /*, int */) +#if 0 /* deprecated ioctl */ /* set keyboard repeat rate (obsolete, use KDSETREPEAT below) */ #define KDSETRAD _IO('K', 67 /*, int */) +#endif /* see console.h for the definition of the following ioctl */ #if 0 /* notdef */ diff --git a/usr.sbin/kbdcontrol/kbdcontrol.c b/usr.sbin/kbdcontrol/kbdcontrol.c index 2ef8c537af..e4163d9756 100644 --- a/usr.sbin/kbdcontrol/kbdcontrol.c +++ b/usr.sbin/kbdcontrol/kbdcontrol.c @@ -905,17 +905,13 @@ set_keyrates(char *opt) int arg[2]; int repeat; int delay; - int r, d; if (!strcmp(opt, "slow")) { delay = 1000, repeat = 500; - d = 3, r = 31; } else if (!strcmp(opt, "normal")) { delay = 500, repeat = 125; - d = 1, r = 15; } else if (!strcmp(opt, "fast")) { delay = repeat = 0; - d = r = 0; } else { int n; char *v1; @@ -933,19 +929,15 @@ badopt: for (n = 0; n < ndelays - 1; n++) if (delay <= delays[n]) break; - d = n; for (n = 0; n < nrepeats - 1; n++) if (repeat <= repeats[n]) break; - r = n; } arg[0] = delay; arg[1] = repeat; - if (ioctl(0, KDSETREPEAT, arg)) { - if (ioctl(0, KDSETRAD, (d << 5) | r)) - warn("setting keyboard rate"); - } + if (ioctl(0, KDSETREPEAT, arg) == -1) + warn("setting keyboard rate"); } -- 2.11.4.GIT