Page MenuHomeFreeBSD

D38818.id119313.diff
No OneTemporary

D38818.id119313.diff

diff --git a/sys/dev/adb/adb_kbd.c b/sys/dev/adb/adb_kbd.c
--- a/sys/dev/adb/adb_kbd.c
+++ b/sys/dev/adb/adb_kbd.c
@@ -688,18 +688,11 @@
static int
set_typematic(keyboard_t *kbd, int code)
{
- /* These numbers are in microseconds, so convert to ticks */
-
- static int delays[] = { 250, 500, 750, 1000 };
- static 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 };
-
+ /* Delays and rates from kbdio.h are in microseconds, so convert to ticks */
if (code & ~0x7f)
return EINVAL;
- kbd->kb_delay1 = delays[(code >> 5) & 3];
- kbd->kb_delay2 = rates[code & 0x1f];
+ kbd->kb_delay1 = kbdelays[(code >> 5) & 3];
+ kbd->kb_delay2 = kbrates[code & 0x1f];
return 0;
}
diff --git a/sys/dev/atkbdc/atkbd.c b/sys/dev/atkbdc/atkbd.c
--- a/sys/dev/atkbdc/atkbd.c
+++ b/sys/dev/atkbdc/atkbd.c
@@ -1571,12 +1571,6 @@
return ((id2 << 8) | id1);
}
-static int delays[] = { 250, 500, 750, 1000 };
-static 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 };
-
static int
typematic_delay(int i)
{
diff --git a/sys/dev/gpio/gpiokeys.c b/sys/dev/gpio/gpiokeys.c
--- a/sys/dev/gpio/gpiokeys.c
+++ b/sys/dev/gpio/gpiokeys.c
@@ -975,17 +975,11 @@
static int
gpiokeys_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];
+ kbd->kb_delay1 = kbdelays[(code >> 5) & 3];
+ kbd->kb_delay2 = kbrates[code & 0x1f];
return (0);
}
diff --git a/sys/dev/hid/hkbd.c b/sys/dev/hid/hkbd.c
--- a/sys/dev/hid/hkbd.c
+++ b/sys/dev/hid/hkbd.c
@@ -1832,17 +1832,11 @@
#ifdef EVDEV_SUPPORT
struct hkbd_softc *sc = kbd->kb_data;
#endif
- 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];
+ kbd->kb_delay1 = kbdelays[(code >> 5) & 3];
+ kbd->kb_delay2 = kbrates[code & 0x1f];
#ifdef EVDEV_SUPPORT
if (sc->sc_evdev != NULL)
evdev_push_repeats(sc->sc_evdev, kbd);
diff --git a/sys/dev/kbdmux/kbdmux.c b/sys/dev/kbdmux/kbdmux.c
--- a/sys/dev/kbdmux/kbdmux.c
+++ b/sys/dev/kbdmux/kbdmux.c
@@ -963,17 +963,6 @@
static int
kbdmux_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg)
{
- static int delays[] = {
- 250, 500, 750, 1000
- };
-
- static 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
- };
-
kbdmux_state_t *state = (kbdmux_state_t *) kbd->kb_data;
kbdmux_kbd_t *k;
keyboard_info_t *ki;
@@ -1206,14 +1195,14 @@
int i;
/* lookup delay */
- for (i = sizeof(delays)/sizeof(delays[0]) - 1; i > 0; i --)
- if (((int *)arg)[0] >= delays[i])
+ for (i = sizeof(kbdelays)/sizeof(kbdelays[0]) - 1; i > 0; i --)
+ if (((int *)arg)[0] >= kbdelays[i])
break;
mode = i << 5;
/* lookup rate */
- for (i = sizeof(rates)/sizeof(rates[0]) - 1; i > 0; i --)
- if (((int *)arg)[1] >= rates[i])
+ for (i = sizeof(kbrates)/sizeof(kbrates[0]) - 1; i > 0; i --)
+ if (((int *)arg)[1] >= kbrates[i])
break;
mode |= i;
} else
@@ -1225,8 +1214,8 @@
return (EINVAL);
}
- kbd->kb_delay1 = delays[(mode >> 5) & 3];
- kbd->kb_delay2 = rates[mode & 0x1f];
+ kbd->kb_delay1 = kbdelays[(mode >> 5) & 3];
+ kbd->kb_delay2 = kbrates[mode & 0x1f];
#ifdef EVDEV_SUPPORT
if (state->ks_evdev != NULL &&
evdev_rcpt_mask & EVDEV_RCPT_KBDMUX)
diff --git a/sys/dev/usb/input/ukbd.c b/sys/dev/usb/input/ukbd.c
--- a/sys/dev/usb/input/ukbd.c
+++ b/sys/dev/usb/input/ukbd.c
@@ -2002,17 +2002,11 @@
#ifdef EVDEV_SUPPORT
struct ukbd_softc *sc = kbd->kb_data;
#endif
- 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];
+ kbd->kb_delay1 = kbdelays[(code >> 5) & 3];
+ kbd->kb_delay2 = kbrates[code & 0x1f];
#ifdef EVDEV_SUPPORT
if (sc->sc_evdev != NULL)
evdev_push_repeats(sc->sc_evdev, kbd);
diff --git a/sys/dev/vkbd/vkbd.c b/sys/dev/vkbd/vkbd.c
--- a/sys/dev/vkbd/vkbd.c
+++ b/sys/dev/vkbd/vkbd.c
@@ -1305,22 +1305,16 @@
* Local functions
*/
-static int delays[] = { 250, 500, 750, 1000 };
-static 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 };
-
static int
typematic_delay(int i)
{
- return (delays[(i >> 5) & 3]);
+ return (kbdelays[(i >> 5) & 3]);
}
static int
typematic_rate(int i)
{
- return (rates[i & 0x1f]);
+ return (kbrates[i & 0x1f]);
}
static int
@@ -1329,13 +1323,13 @@
int value;
int i;
- for (i = nitems(delays) - 1; i > 0; i --) {
- if (delay >= delays[i])
+ for (i = nitems(kbdelays) - 1; i > 0; i --) {
+ if (delay >= kbdelays[i])
break;
}
value = i << 5;
- for (i = nitems(rates) - 1; i > 0; i --) {
- if (rate >= rates[i])
+ for (i = nitems(kbrates) - 1; i > 0; i --) {
+ if (rate >= kbrates[i])
break;
}
value |= i;
diff --git a/sys/sys/kbio.h b/sys/sys/kbio.h
--- a/sys/sys/kbio.h
+++ b/sys/sys/kbio.h
@@ -70,6 +70,13 @@
};
typedef struct keyboard_info keyboard_info_t;
+/* keyboard repeat rate mapping table */
+static const int kbdelays[] = { 250, 500, 750, 1000 };
+static const int kbrates[] = { 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 };
+
/* add/remove keyboard to/from mux */
#define KBADDKBD _IOW('K', 68, keyboard_info_t) /* add keyboard */
#define KBRELKBD _IOW('K', 69, keyboard_info_t) /* release keyboard */
diff --git a/usr.sbin/kbdcontrol/kbdcontrol.c b/usr.sbin/kbdcontrol/kbdcontrol.c
--- a/usr.sbin/kbdcontrol/kbdcontrol.c
+++ b/usr.sbin/kbdcontrol/kbdcontrol.c
@@ -107,13 +107,8 @@
/* 93-96 */ "" , "" , "" , "" ,
};
-static const int delays[] = {250, 500, 750, 1000};
-static const int repeats[] = { 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};
-static const int ndelays = (sizeof(delays) / sizeof(int));
-static const int nrepeats = (sizeof(repeats) / sizeof(int));
+static const int ndelays = (sizeof(kbdelays) / sizeof(int));
+static const int nrepeats = (sizeof(kbrates) / sizeof(int));
static int hex = 0;
static int paths_configured = 0;
static int token;
@@ -1058,14 +1053,20 @@
int r, d;
if (!strcmp(opt, "slow")) {
- delay = 1000, repeat = 500;
- d = 3, r = 31;
+ delay = 1000;
+ repeat = 504;
+ d = 3;
+ r = 31;
} else if (!strcmp(opt, "normal")) {
- delay = 500, repeat = 125;
- d = 1, r = 15;
+ delay = 500;
+ repeat = 126;
+ d = 1;
+ r = 15;
} else if (!strcmp(opt, "fast")) {
- delay = repeat = 0;
- d = r = 0;
+ delay = 0;
+ repeat = 0;
+ d = 0;
+ r = 0;
} else {
int n;
char *v1;
@@ -1081,11 +1082,11 @@
return;
}
for (n = 0; n < ndelays - 1; n++)
- if (delay <= delays[n])
+ if (delay <= kbdelays[n])
break;
d = n;
for (n = 0; n < nrepeats - 1; n++)
- if (repeat <= repeats[n])
+ if (repeat <= kbrates[n])
break;
r = n;
}
@@ -1093,6 +1094,7 @@
arg[0] = delay;
arg[1] = repeat;
if (ioctl(0, KDSETREPEAT, arg)) {
+ warn("fallback, setting keyboard rate via legacy interface (KDSETRAD), will be removed soon");
if (ioctl(0, KDSETRAD, (d << 5) | r))
warn("setting keyboard rate");
}

File Metadata

Mime Type
text/plain
Expires
Thu, Jan 1, 12:25 AM (12 h, 16 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27425432
Default Alt Text
D38818.id119313.diff (8 KB)

Event Timeline