Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 21 May 2015 10:40:19 +0000 (UTC)
From:      Roger Pau Monné <royger@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r283219 - in stable/10/sys: conf dev/atkbdc
Message-ID:  <201505211040.t4LAeJJm012808@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: royger
Date: Thu May 21 10:40:18 2015
New Revision: 283219
URL: https://svnweb.freebsd.org/changeset/base/283219

Log:
  MFC: r282269, r282277
  
  atkbd: remove usage of x86bios
  Remove leftover from r282269.

Modified:
  stable/10/sys/conf/files.amd64
  stable/10/sys/conf/files.i386
  stable/10/sys/dev/atkbdc/atkbd.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/conf/files.amd64
==============================================================================
--- stable/10/sys/conf/files.amd64	Thu May 21 10:28:33 2015	(r283218)
+++ stable/10/sys/conf/files.amd64	Thu May 21 10:40:18 2015	(r283219)
@@ -531,10 +531,10 @@ compat/ndis/winx64_wrap.S	optional	ndisa
 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
 #

Modified: stable/10/sys/conf/files.i386
==============================================================================
--- stable/10/sys/conf/files.i386	Thu May 21 10:28:33 2015	(r283218)
+++ stable/10/sys/conf/files.i386	Thu May 21 10:40:18 2015	(r283219)
@@ -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
 #

Modified: stable/10/sys/dev/atkbdc/atkbd.c
==============================================================================
--- stable/10/sys/dev/atkbdc/atkbd.c	Thu May 21 10:28:33 2015	(r283218)
+++ stable/10/sys/dev/atkbdc/atkbd.c	Thu May 21 10:40:18 2015	(r283219)
@@ -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, 
 			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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201505211040.t4LAeJJm012808>