[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