[Midnightbsd-cvs] src: dev/atkbdc: merge

laffer1 at midnightbsd.org laffer1 at midnightbsd.org
Sat Nov 29 17:32:07 EST 2008


Log Message:
-----------
merge

Modified Files:
--------------
    src/sys/dev/atkbdc:
        atkbd.c (r1.2 -> r1.3)
        atkbd_atkbdc.c (r1.1.1.1 -> r1.2)
        atkbdc.c (r1.2 -> r1.3)
        atkbdc_isa.c (r1.2 -> r1.3)
        psm.c (r1.3 -> r1.4)

-------------- next part --------------
Index: atkbdc.c
===================================================================
RCS file: /home/cvs/src/sys/dev/atkbdc/atkbdc.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -L sys/dev/atkbdc/atkbdc.c -L sys/dev/atkbdc/atkbdc.c -u -r1.2 -r1.3
--- sys/dev/atkbdc/atkbdc.c
+++ sys/dev/atkbdc/atkbdc.c
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/atkbdc/atkbdc.c,v 1.21 2005/06/10 20:56:37 marius Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/atkbdc/atkbdc.c,v 1.25 2006/09/04 00:19:31 dwhite Exp $");
 
 #include "opt_kbd.h"
 
@@ -174,8 +174,6 @@
 	tag = I386_BUS_SPACE_IO;
 #elif defined(__amd64__)
 	tag = AMD64_BUS_SPACE_IO;
-#elif defined(__alpha__)
-	tag = busspace_isa_io;
 #elif defined(__ia64__)
 	tag = IA64_BUS_SPACE_IO;
 #elif defined(__sparc64__)
@@ -215,7 +213,7 @@
 	port0 = IO_KBD;
 	resource_int_value("atkbdc", 0, "port", &port0);
 	port1 = IO_KBD + KBD_STATUS_PORT;
-#if notyet
+#ifdef notyet
 	bus_space_map(tag, port0, IO_KBDSIZE, 0, &h0);
 	bus_space_map(tag, port1, IO_KBDSIZE, 0, &h1);
 #else
@@ -225,6 +223,14 @@
 #endif
 
 #if defined(__i386__)
+	/*
+	 * Check if we really have AT keyboard controller. Poll status
+	 * register until we get "all clear" indication. If no such
+	 * indication comes, it probably means that there is no AT
+	 * keyboard controller present. Give up in such case. Check relies
+	 * on the fact that reading from non-existing in/out port returns
+	 * 0xff on i386. May or may not be true on other platforms.
+	 */
 	flags = intr_disable();
 	for (i = 0; i != 65535; i++) {
 		if ((bus_space_read_1(tag, h1, 0) & 0x2) == 0)
@@ -232,7 +238,7 @@
 	}
 	intr_restore(flags);
 	if (i == 65535)
-		return ENXIO;
+                return ENXIO;
 #endif
 
 	return atkbdc_setup(atkbdc_softc[0], tag, h0, h1);
@@ -873,9 +879,15 @@
 	    t -= delta;
 	}
 
-	waited += (delta * 1000);
-	if (waited == (delta * 1000000))
+	/*
+	 * Some systems (Intel/IBM blades) do not have keyboard devices and
+	 * will thus hang in this procedure. Time out after delta seconds to
+	 * avoid this hang -- the keyboard attach will fail later on.
+	 */
+        waited += (delta * 1000);
+        if (waited == (delta * 1000000))
 	    return;
+
 	DELAY(delta*1000);
     }
 #if KBDIO_DEBUG >= 2
Index: atkbd.c
===================================================================
RCS file: /home/cvs/src/sys/dev/atkbdc/atkbd.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -L sys/dev/atkbdc/atkbd.c -L sys/dev/atkbdc/atkbd.c -u -r1.2 -r1.3
--- sys/dev/atkbdc/atkbd.c
+++ sys/dev/atkbdc/atkbd.c
@@ -26,8 +26,9 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/atkbdc/atkbd.c,v 1.47.2.1 2006/05/26 00:56:14 sobomax Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/atkbdc/atkbd.c,v 1.52 2006/10/25 13:35:42 ru Exp $");
 
+#include "opt_compat.h"
 #include "opt_kbd.h"
 #include "opt_atkbd.h"
 
@@ -181,9 +182,6 @@
 
 typedef struct atkbd_state {
 	KBDC		kbdc;		/* keyboard controller */
-					/* XXX: don't move this field; pcvt
-					 * expects `kbdc' to be the first
-					 * field in this structure. */
 	int		ks_mode;	/* input mode (K_XLATE,K_RAW,K_CODE) */
 	int		ks_flags;	/* flags */
 #define COMPOSE		(1 << 0)
@@ -482,6 +480,22 @@
 	int delay[2];
 	int c;
 
+	if (!KBD_HAS_DEVICE(kbd)) {
+		/*
+		 * The keyboard was not detected before;
+		 * it must have been reconnected!
+		 */
+		state = (atkbd_state_t *)kbd->kb_data;
+		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);
+		delay[0] = kbd->kb_delay1;
+		delay[1] = kbd->kb_delay2;
+		atkbd_ioctl(kbd, KDSETREPEAT, (caddr_t)delay);
+	}
+
 	if (KBD_IS_ACTIVE(kbd) && KBD_IS_BUSY(kbd)) {
 		/* let the callback function to process the input */
 		(*kbd->kb_callback.kc_func)(kbd, KBDIO_KEYINPUT,
@@ -491,22 +505,6 @@
 		do {
 			c = atkbd_read_char(kbd, FALSE);
 		} while (c != NOKEY);
-
-		if (!KBD_HAS_DEVICE(kbd)) {
-			/*
-			 * The keyboard was not detected before;
-			 * it must have been reconnected!
-			 */
-			state = (atkbd_state_t *)kbd->kb_data;
-			init_keyboard(state->kbdc, &kbd->kb_type,
-				      kbd->kb_config);
-			atkbd_ioctl(kbd, KDSETLED, (caddr_t)&state->ks_state);
-			get_typematic(kbd);
-			delay[0] = kbd->kb_delay1;
-			delay[1] = kbd->kb_delay2;
-			atkbd_ioctl(kbd, KDSETREPEAT, (caddr_t)delay);
-			KBD_FOUND_DEVICE(kbd);
-		}
 	}
 	return 0;
 }
@@ -854,6 +852,10 @@
 	int error;
 	int s;
 	int i;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+    defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+	int ival;
+#endif
 
 	s = spltty();
 	switch (cmd) {
@@ -861,6 +863,13 @@
 	case KDGKBMODE:		/* get keyboard mode */
 		*(int *)arg = state->ks_mode;
 		break;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+    defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+	case _IO('K', 7):
+		ival = IOCPARM_IVAL(arg);
+		arg = (caddr_t)&ival;
+		/* FALLTHROUGH */
+#endif
 	case KDSKBMODE:		/* set keyboard mode */
 		switch (*(int *)arg) {
 		case K_XLATE:
@@ -886,6 +895,13 @@
 	case KDGETLED:		/* get keyboard LED */
 		*(int *)arg = KBD_LED_VAL(kbd);
 		break;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+    defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+	case _IO('K', 66):
+		ival = IOCPARM_IVAL(arg);
+		arg = (caddr_t)&ival;
+		/* FALLTHROUGH */
+#endif
 	case KDSETLED:		/* set keyboard LED */
 		/* NOTE: lock key state in ks_state won't be changed */
 		if (*(int *)arg & ~LOCK_MASK) {
@@ -915,6 +931,13 @@
 	case KDGKBSTATE:	/* get lock key state */
 		*(int *)arg = state->ks_state & LOCK_MASK;
 		break;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+    defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+	case _IO('K', 20):
+		ival = IOCPARM_IVAL(arg);
+		arg = (caddr_t)&ival;
+		/* FALLTHROUGH */
+#endif
 	case KDSKBSTATE:	/* set lock key state */
 		if (*(int *)arg & ~LOCK_MASK) {
 			splx(s);
@@ -938,6 +961,13 @@
 		}
 		return error;
 
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+    defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+	case _IO('K', 67):
+		ival = IOCPARM_IVAL(arg);
+		arg = (caddr_t)&ival;
+		/* FALLTHROUGH */
+#endif
 	case KDSETRAD:		/* set keyboard repeat rate (old interface) */
 		splx(s);
 		if (!KBD_HAS_DEVICE(kbd))
@@ -1330,7 +1360,7 @@
 		}
 	}
 
-#if defined(__alpha__) || defined(__sparc64__)
+#if defined(__sparc64__)
 	if (send_kbd_command_and_data(
 		kbdc, KBDC_SET_SCANCODE_SET, 2) != KBD_ACK) {
 		printf("atkbd: can't set translation.\n");
Index: atkbd_atkbdc.c
===================================================================
RCS file: /home/cvs/src/sys/dev/atkbdc/atkbd_atkbdc.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -L sys/dev/atkbdc/atkbd_atkbdc.c -L sys/dev/atkbdc/atkbd_atkbdc.c -u -r1.1.1.1 -r1.2
--- sys/dev/atkbdc/atkbd_atkbdc.c
+++ sys/dev/atkbdc/atkbd_atkbdc.c
@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/atkbdc/atkbd_atkbdc.c,v 1.19 2005/06/10 20:56:37 marius Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/atkbdc/atkbd_atkbdc.c,v 1.20 2007/02/23 12:18:33 piso Exp $");
 
 #include "opt_kbd.h"
 
@@ -136,7 +136,7 @@
 					  RF_SHAREABLE | RF_ACTIVE);
 	if (sc->intr == NULL)
 		return ENXIO;
-	error = bus_setup_intr(dev, sc->intr, INTR_TYPE_TTY, atkbdintr,
+	error = bus_setup_intr(dev, sc->intr, INTR_TYPE_TTY, NULL, atkbdintr,
 			       kbd, &sc->ih);
 	if (error)
 		bus_release_resource(dev, SYS_RES_IRQ, rid, sc->intr);
Index: atkbdc_isa.c
===================================================================
RCS file: /home/cvs/src/sys/dev/atkbdc/atkbdc_isa.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -L sys/dev/atkbdc/atkbdc_isa.c -L sys/dev/atkbdc/atkbdc_isa.c -u -r1.2 -r1.3
--- sys/dev/atkbdc/atkbdc_isa.c
+++ sys/dev/atkbdc/atkbdc_isa.c
@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/atkbdc/atkbdc_isa.c,v 1.33.2.1 2006/05/26 00:56:14 sobomax Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/atkbdc/atkbdc_isa.c,v 1.36 2006/07/03 23:40:58 jkim Exp $");
 
 #include "opt_kbd.h"
 
@@ -37,6 +37,7 @@
 #include <sys/malloc.h>
 #include <machine/resource.h>
 #include <sys/rman.h>
+#include <machine/bus.h>
 
 #include <dev/atkbdc/atkbdc_subr.h>
 #include <dev/atkbdc/atkbdcreg.h>
@@ -111,15 +112,21 @@
 	 * The AT keyboard controller uses two ports (a command/data port
 	 * 0x60 and a status port 0x64), which may be given to us in 
 	 * one resource (0x60 through 0x64) or as two separate resources
-	 * (0x60 and 0x64). Furthermore, /boot/device.hints may contain
-	 * just one port, 0x60. We shall adjust resource settings 
-	 * so that these two ports are available as two separate resources.
+	 * (0x60 and 0x64). Some brain-damaged ACPI BIOS has reversed
+	 * command/data port and status port. Furthermore, /boot/device.hints
+	 * may contain just one port, 0x60. We shall adjust resource settings
+	 * so that these two ports are available as two separate resources
+	 * in correct order.
 	 */
 	device_quiet(dev);
 	rid = 0;
 	if (bus_get_resource(dev, SYS_RES_IOPORT, rid, &start, &count) != 0)
 		return ENXIO;
-	if (count > 1)	/* adjust the count */
+	if (start == IO_KBD + KBD_STATUS_PORT) {
+		start = IO_KBD;
+		count++;
+	}
+	if (count > 1)	/* adjust the count and/or start port */
 		bus_set_resource(dev, SYS_RES_IOPORT, rid, start, 1);
 	port0 = bus_alloc_resource_any(dev, SYS_RES_IOPORT, &rid, RF_ACTIVE);
 	if (port0 == NULL)
Index: psm.c
===================================================================
RCS file: /home/cvs/src/sys/dev/atkbdc/psm.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -L sys/dev/atkbdc/psm.c -L sys/dev/atkbdc/psm.c -u -r1.3 -r1.4
--- sys/dev/atkbdc/psm.c
+++ sys/dev/atkbdc/psm.c
@@ -59,7 +59,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/atkbdc/psm.c,v 1.86.2.2 2006/04/21 09:40:25 takawata Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/atkbdc/psm.c,v 1.93 2007/06/17 04:32:18 mjacob Exp $");
 
 #include "opt_isa.h"
 #include "opt_psm.h"
@@ -361,7 +361,7 @@
       0x08, MOUSE_PS2INTELLI_PACKETSIZE, enable_msintelli, },
     { MOUSE_MODEL_GLIDEPOINT,		/* ALPS GlidePoint */
       0xc0, MOUSE_PS2_PACKETSIZE, enable_aglide, },
-    { MOUSE_MODEL_THINK,		/* Kensignton ThinkingMouse */
+    { MOUSE_MODEL_THINK,		/* Kensington ThinkingMouse */
       0x80, MOUSE_PS2_PACKETSIZE, enable_kmouse, },
     { MOUSE_MODEL_VERSAPAD,		/* Interlink electronics VersaPad */
       0xe8, MOUSE_PS2VERSA_PACKETSIZE, enable_versapad, },
@@ -1251,6 +1251,16 @@
         endprobe(ENXIO);
     }
 
+    /*
+     * Synaptics TouchPad seems to go back to Relative Mode after
+     * the previous set_controller_command_byte() call; by issueing
+     * a Read Mode Byte command, the touchpad is in Absolute Mode
+     * again.
+     */
+    if (sc->hw.model == MOUSE_MODEL_SYNAPTICS) {
+        mouse_ext_command(sc->kbdc, 1);
+    }
+
     /* done */
     kbdc_set_device_mask(sc->kbdc, mask | KBD_AUX_CONTROL_BITS);
     kbdc_lock(sc->kbdc, FALSE);
@@ -1275,7 +1285,7 @@
 				      RF_SHAREABLE | RF_ACTIVE);
     if (sc->intr == NULL)
 	return (ENXIO);
-    error = bus_setup_intr(dev, sc->intr, INTR_TYPE_TTY, psmintr, sc, &sc->ih);
+    error = bus_setup_intr(dev, sc->intr, INTR_TYPE_TTY, NULL, psmintr, sc, &sc->ih);
     if (error) {
 	bus_release_resource(dev, SYS_RES_IRQ, rid, sc->intr);
 	return (error);
@@ -1805,6 +1815,8 @@
 	     */
 	    if (((old_mousemode_t *)addr)->resolution > 0)
 	        mode.resolution = -((old_mousemode_t *)addr)->resolution - 1;
+	    else
+	        mode.resolution = 0;
 	    mode.accelfactor = ((old_mousemode_t *)addr)->accelfactor;
 	    mode.level = -1;
 	} else {
@@ -2885,7 +2897,7 @@
     return TRUE;
 }
 
-#if notyet
+#ifdef notyet
 /* Logitech MouseMan Cordless II */
 static int
 enable_lcordless(struct psm_softc *sc)


More information about the Midnightbsd-cvs mailing list