summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorroyger <royger@FreeBSD.org>2015-05-21 10:40:18 +0000
committerroyger <royger@FreeBSD.org>2015-05-21 10:40:18 +0000
commit67f688612fea61b526d18f51bc9f0b9599aed951 (patch)
tree64bac17a59fb6d8d1805d397334566784b540cea /sys
parent227f0f0c838082926a83b466f2f7c3d028281c4d (diff)
downloadFreeBSD-src-67f688612fea61b526d18f51bc9f0b9599aed951.zip
FreeBSD-src-67f688612fea61b526d18f51bc9f0b9599aed951.tar.gz
MFC: r282269, r282277
atkbd: remove usage of x86bios Remove leftover from r282269.
Diffstat (limited to 'sys')
-rw-r--r--sys/conf/files.amd646
-rw-r--r--sys/conf/files.i3864
-rw-r--r--sys/dev/atkbdc/atkbd.c82
3 files changed, 22 insertions, 70 deletions
diff --git a/sys/conf/files.amd64 b/sys/conf/files.amd64
index 2c94300..312fc3c 100644
--- a/sys/conf/files.amd64
+++ b/sys/conf/files.amd64
@@ -531,10 +531,10 @@ compat/ndis/winx64_wrap.S optional ndisapi pci
libkern/memmove.c standard
libkern/memset.c standard
#
-# x86 real mode BIOS emulator, required by atkbdc/dpms/vesa
+# x86 real mode BIOS emulator, required by dpms/vesa
#
-compat/x86bios/x86bios.c optional x86bios | atkbd | dpms | vesa
-contrib/x86emu/x86emu.c optional x86bios | atkbd | dpms | vesa
+compat/x86bios/x86bios.c optional x86bios | dpms | vesa
+contrib/x86emu/x86emu.c optional x86bios | dpms | vesa
#
# bvm console
#
diff --git a/sys/conf/files.i386 b/sys/conf/files.i386
index 0ba06ef..da2e20a 100644
--- a/sys/conf/files.i386
+++ b/sys/conf/files.i386
@@ -552,9 +552,9 @@ i386/xbox/xboxfb.c optional xboxfb
dev/fb/boot_font.c optional xboxfb
i386/xbox/pic16l.s optional xbox
#
-# x86 real mode BIOS support, required by atkbdc/dpms/vesa
+# x86 real mode BIOS support, required by dpms/vesa
#
-compat/x86bios/x86bios.c optional x86bios | atkbd | dpms | vesa
+compat/x86bios/x86bios.c optional x86bios | dpms | vesa
#
# x86 shared code between IA32, AMD64 and PC98 architectures
#
diff --git a/sys/dev/atkbdc/atkbd.c b/sys/dev/atkbdc/atkbd.c
index 199fcb1..e1f461c 100644
--- a/sys/dev/atkbdc/atkbd.c
+++ b/sys/dev/atkbdc/atkbd.c
@@ -44,19 +44,6 @@ __FBSDID("$FreeBSD$");
#include <machine/bus.h>
#include <machine/resource.h>
-#if defined(__i386__) || defined(__amd64__)
-#include <machine/md_var.h>
-#include <machine/psl.h>
-#include <compat/x86bios/x86bios.h>
-#include <machine/pc/bios.h>
-
-#include <vm/vm.h>
-#include <vm/pmap.h>
-#include <vm/vm_param.h>
-
-#include <isa/isareg.h>
-#endif /* __i386__ || __amd64__ */
-
#include <sys/kbio.h>
#include <dev/kbd/kbdreg.h>
#include <dev/atkbdc/atkbdreg.h>
@@ -65,6 +52,9 @@ __FBSDID("$FreeBSD$");
static timeout_t atkbd_timeout;
static void atkbd_shutdown_final(void *v);
+#define DEFAULT_DELAY 0x1 /* 500ms */
+#define DEFAULT_RATE 0x10 /* 14Hz */
+
int
atkbd_probe_unit(device_t dev, int irq, int flags)
{
@@ -239,7 +229,7 @@ static keyboard_switch_t atkbdsw = {
KEYBOARD_DRIVER(atkbd, atkbdsw, atkbd_configure);
/* local functions */
-static int get_typematic(keyboard_t *kbd);
+static int set_typematic(keyboard_t *kbd);
static int setup_kbd_port(KBDC kbdc, int port, int intr);
static int get_kbd_echo(KBDC kbdc);
static int probe_keyboard(KBDC kbdc, int flags);
@@ -433,7 +423,7 @@ atkbd_init(int unit, keyboard_t **kbdp, void *arg, int flags)
goto bad;
}
atkbd_ioctl(kbd, KDSETLED, (caddr_t)&state->ks_state);
- get_typematic(kbd);
+ set_typematic(kbd);
delay[0] = kbd->kb_delay1;
delay[1] = kbd->kb_delay2;
atkbd_ioctl(kbd, KDSETREPEAT, (caddr_t)delay);
@@ -490,7 +480,7 @@ atkbd_intr(keyboard_t *kbd, void *arg)
init_keyboard(state->kbdc, &kbd->kb_type, kbd->kb_config);
KBD_FOUND_DEVICE(kbd);
atkbd_ioctl(kbd, KDSETLED, (caddr_t)&state->ks_state);
- get_typematic(kbd);
+ set_typematic(kbd);
delay[0] = kbd->kb_delay1;
delay[1] = kbd->kb_delay2;
atkbd_ioctl(kbd, KDSETREPEAT, (caddr_t)delay);
@@ -1089,57 +1079,19 @@ atkbd_shutdown_final(void *v)
/* local functions */
static int
-get_typematic(keyboard_t *kbd)
+set_typematic(keyboard_t *kbd)
{
-#if defined(__i386__) || defined(__amd64__)
- /*
- * Only some systems allow us to retrieve the keyboard repeat
- * rate previously set via the BIOS...
- */
- x86regs_t regs;
- uint8_t *p;
+ int val, error;
+ atkbd_state_t *state = kbd->kb_data;
- /*
- * Traditional entry points of int 0x15 and 0x16 are fixed
- * and later BIOSes follow them. (U)EFI CSM specification
- * also mandates these fixed entry points.
- *
- * Validate the entry points here before we proceed further.
- * It's known that some recent laptops does not have the
- * same entry point and hang on boot if we call it.
- */
- if (x86bios_get_intr(0x15) != 0xf000f859 ||
- x86bios_get_intr(0x16) != 0xf000e82e)
- return (ENODEV);
-
- /* Is BIOS system configuration table supported? */
- x86bios_init_regs(&regs);
- regs.R_AH = 0xc0;
- x86bios_intr(&regs, 0x15);
- if ((regs.R_FLG & PSL_C) != 0 || regs.R_AH != 0)
- return (ENODEV);
-
- /* Is int 0x16, function 0x09 supported? */
- p = x86bios_offset((regs.R_ES << 4) + regs.R_BX);
- if (readw(p) < 5 || (readb(p + 6) & 0x40) == 0)
- return (ENODEV);
-
- /* Is int 0x16, function 0x0306 supported? */
- x86bios_init_regs(&regs);
- regs.R_AH = 0x09;
- x86bios_intr(&regs, 0x16);
- if ((regs.R_AL & 0x08) == 0)
- return (ENODEV);
-
- x86bios_init_regs(&regs);
- regs.R_AX = 0x0306;
- x86bios_intr(&regs, 0x16);
- kbd->kb_delay1 = typematic_delay(regs.R_BH << 5);
- kbd->kb_delay2 = typematic_rate(regs.R_BL);
- return (0);
-#else
- return (ENODEV);
-#endif /* __i386__ || __amd64__ */
+ val = typematic(DEFAULT_DELAY, DEFAULT_RATE);
+ error = write_kbd(state->kbdc, KBDC_SET_TYPEMATIC, val);
+ if (error == 0) {
+ kbd->kb_delay1 = typematic_delay(val);
+ kbd->kb_delay2 = typematic_rate(val);
+ }
+
+ return (error);
}
static int
OpenPOWER on IntegriCloud