Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 25 Sep 2009 14:39:11 +0200
From:      Ed Schouten <ed@80386.nl>
To:        Kostik Belousov <kostikbel@gmail.com>
Cc:        Anonymous <swell.k@gmail.com>, freebsd-current@freebsd.org
Subject:   [Patch] [regression] libvgl and r197330 (kbd)
Message-ID:  <20090925123911.GP95398@hoeg.nl>
In-Reply-To: <20090925105729.GT47688@deviant.kiev.zoral.com.ua>
References:  <200909191756.n8JHuQCq031719@svn.freebsd.org> <86zl8jften.fsf@gmail.com> <20090925062134.GN95398@hoeg.nl> <20090925105729.GT47688@deviant.kiev.zoral.com.ua>

next in thread | previous in thread | raw e-mail | index | archive | help

--SLRDCdsRrCd4mzuj
Content-Type: multipart/mixed; boundary="VRppCkiwz5ce4F2G"
Content-Disposition: inline


--VRppCkiwz5ce4F2G
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Hi all,

* Kostik Belousov <kostikbel@gmail.com> wrote:
> On Fri, Sep 25, 2009 at 08:21:34AM +0200, Ed Schouten wrote:
> > Hi,
> >=20
> > * Anonymous <swell.k@gmail.com> wrote:
> > >      VIDEOOUT: [VO_SDL] SDL initialization failed: Unable to initiali=
ze keymap.
> >=20
> > Ah, it seems SDL also calls GIO_KEYMAP. Just rebuilding SDL should fix
> > this. I promised to add a message to UPDATING as well, so I'll also
> > mention SDL should be rebuilt as well.
>=20
> I consider this as a very strong argument to keep the existing ioctl
> as is, and provide new ioctl that takes new table.

I've attached a patch that should restore binary compatibility. I first
thought this wasn't really needed, because most applications would use
K_RAW instead of K_XLATE anyway.

Just breaking binary compatibility with kbdcontrol(1) wouldn't have been
too bad, but it turns out things like SDL use this as well. I've
attached a patch that should restore binary compatibility. Anyone
interested in testing this before I commit it to SVN?

--=20
 Ed Schouten <ed@80386.nl>
 WWW: http://80386.nl/

--VRppCkiwz5ce4F2G
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment; filename="kbd.diff"
Content-Transfer-Encoding: quoted-printable

Index: sys/dev/syscons/syscons.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/dev/syscons/syscons.c	(revision 197480)
+++ sys/dev/syscons/syscons.c	(working copy)
@@ -1332,6 +1332,8 @@
=20
     case GIO_KEYMAP:		/* get keyboard translation table */
     case PIO_KEYMAP:		/* set keyboard translation table */
+    case OGIO_KEYMAP:		/* get keyboard translation table (compat) */
+    case OPIO_KEYMAP:		/* set keyboard translation table (compat) */
     case GIO_DEADKEYMAP:	/* get accent key translation table */
     case PIO_DEADKEYMAP:	/* set accent key translation table */
     case GETFKEY:		/* get function key string */
Index: sys/dev/uart/uart_kbd_sun.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/dev/uart/uart_kbd_sun.c	(revision 197480)
+++ sys/dev/uart/uart_kbd_sun.c	(working copy)
@@ -739,6 +739,7 @@
 	case KDSETRAD:
 		break;
 	case PIO_KEYMAP:
+	case OPIO_KEYMAP:
 	case PIO_KEYMAPENT:
 	case PIO_DEADKEYMAP:
 	default:
Index: sys/dev/atkbdc/atkbd.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/dev/atkbdc/atkbd.c	(revision 197480)
+++ sys/dev/atkbdc/atkbd.c	(working copy)
@@ -982,6 +982,7 @@
 		return error;
=20
 	case PIO_KEYMAP:	/* set keyboard translation table */
+	case OPIO_KEYMAP:	/* set keyboard translation table (compat) */
 	case PIO_KEYMAPENT:	/* set keyboard translation table entry */
 	case PIO_DEADKEYMAP:	/* set accent key translation table */
 		state->ks_accents =3D 0;
Index: sys/dev/kbd/kbd.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/dev/kbd/kbd.c	(revision 197480)
+++ sys/dev/kbd/kbd.c	(working copy)
@@ -837,15 +837,15 @@
 int
 genkbd_commonioctl(keyboard_t *kbd, u_long cmd, caddr_t arg)
 {
-#ifndef KBD_DISABLE_KEYMAP_LOAD
 	keymap_t *mapp;
-#endif
+	okeymap_t *omapp;
 	keyarg_t *keyp;
 	fkeyarg_t *fkeyp;
 	int s;
-	int i;
+	int i, j;
 	int error;
=20
+
 	s =3D spltty();
 	switch (cmd) {
=20
@@ -874,14 +874,39 @@
 		    sizeof(keymap_t));
 		splx(s);
 		return (error);
+	case OGIO_KEYMAP:	/* get keyboard translation table (compat) */
+		mapp =3D kbd->kb_keymap;
+		omapp =3D (okeymap_t *)arg;
+		omapp->n_keys =3D mapp->n_keys;
+		for (i =3D 0; i < NUM_KEYS; i++) {
+			for (j =3D 0; j < NUM_STATES; j++)
+				omapp->key[i].map[j] =3D
+				    mapp->key[i].map[j];
+			omapp->key[i].spcl =3D mapp->key[i].spcl;
+			omapp->key[i].flgs =3D mapp->key[i].flgs;
+		}
+		return (0);
 	case PIO_KEYMAP:	/* set keyboard translation table */
+	case OPIO_KEYMAP:	/* set keyboard translation table (compat) */
 #ifndef KBD_DISABLE_KEYMAP_LOAD
 		mapp =3D malloc(sizeof *mapp, M_TEMP, M_NOWAIT);
-		error =3D copyin(*(void **)arg, mapp, sizeof *mapp);
-		if (error !=3D 0) {
-			splx(s);
-			free(mapp, M_TEMP);
-			return (error);
+		if (cmd =3D=3D OPIO_KEYMAP) {
+			omapp =3D (okeymap_t *)arg;
+			mapp->n_keys =3D omapp->n_keys;
+			for (i =3D 0; i < NUM_KEYS; i++) {
+				for (j =3D 0; j < NUM_STATES; j++)
+					mapp->key[i].map[j] =3D
+					    omapp->key[i].map[j];
+				mapp->key[i].spcl =3D omapp->key[i].spcl;
+				mapp->key[i].flgs =3D omapp->key[i].flgs;
+			}
+		} else {
+			error =3D copyin(*(void **)arg, mapp, sizeof *mapp);
+			if (error !=3D 0) {
+				splx(s);
+				free(mapp, M_TEMP);
+				return (error);
+			}
 		}
=20
 		error =3D keymap_change_ok(kbd->kb_keymap, mapp, curthread);
Index: sys/dev/kbdmux/kbdmux.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/dev/kbdmux/kbdmux.c	(revision 197480)
+++ sys/dev/kbdmux/kbdmux.c	(working copy)
@@ -1198,6 +1198,7 @@
 		break;
=20
 	case PIO_KEYMAP:	/* set keyboard translation table */
+	case OPIO_KEYMAP:	/* set keyboard translation table (compat) */
 	case PIO_KEYMAPENT:	/* set keyboard translation table entry */
 	case PIO_DEADKEYMAP:	/* set accent key translation table */
 		KBDMUX_LOCK(state);
Index: sys/dev/adb/adb_kbd.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/dev/adb/adb_kbd.c	(revision 197480)
+++ sys/dev/adb/adb_kbd.c	(working copy)
@@ -747,6 +747,7 @@
 		break;
=20
 	case PIO_KEYMAP:
+	case OPIO_KEYMAP:
 	case PIO_KEYMAPENT:
 	case PIO_DEADKEYMAP:
 	default:
Index: sys/dev/vkbd/vkbd.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/dev/vkbd/vkbd.c	(revision 197480)
+++ sys/dev/vkbd/vkbd.c	(working copy)
@@ -1208,6 +1208,7 @@
 		break;
=20
 	case PIO_KEYMAP:	/* set keyboard translation table */
+	case OPIO_KEYMAP:	/* set keyboard translation table (compat) */
 	case PIO_KEYMAPENT:	/* set keyboard translation table entry */
 	case PIO_DEADKEYMAP:	/* set accent key translation table */
 		state->ks_accents =3D 0;
Index: sys/dev/usb/input/ukbd.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/dev/usb/input/ukbd.c	(revision 197480)
+++ sys/dev/usb/input/ukbd.c	(working copy)
@@ -1527,6 +1527,8 @@
 		return (ukbd_set_typematic(kbd, *(int *)arg));
=20
 	case PIO_KEYMAP:		/* set keyboard translation table */
+	case OPIO_KEYMAP:		/* set keyboard translation table
+					 * (compat) */
 	case PIO_KEYMAPENT:		/* set keyboard translation table
 					 * entry */
 	case PIO_DEADKEYMAP:		/* set accent key translation table */
Index: sys/pc98/cbus/pckbd.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/pc98/cbus/pckbd.c	(revision 197480)
+++ sys/pc98/cbus/pckbd.c	(working copy)
@@ -799,6 +799,7 @@
 		break;
=20
 	case PIO_KEYMAP:	/* set keyboard translation table */
+	case OPIO_KEYMAP:	/* set keyboard translation table (compat) */
 	case PIO_KEYMAPENT:	/* set keyboard translation table entry */
 	case PIO_DEADKEYMAP:	/* set accent key translation table */
 		state->ks_accents =3D 0;
Index: sys/i386/ibcs2/ibcs2_ioctl.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/i386/ibcs2/ibcs2_ioctl.c	(revision 197480)
+++ sys/i386/ibcs2/ibcs2_ioctl.c	(working copy)
@@ -654,12 +654,12 @@
 		break;
=20
 	case IBCS2_GIO_KEYMAP:      /* Get keyboard map table */
-	        uap->cmd =3D GIO_KEYMAP;
+	        uap->cmd =3D OGIO_KEYMAP;
 	        error =3D ioctl(td, (struct ioctl_args *)uap);
 		break;
=20
 	case IBCS2_PIO_KEYMAP:      /* Set keyboard map table */
-	        uap->cmd =3D PIO_KEYMAP;
+	        uap->cmd =3D OPIO_KEYMAP;
 	        error =3D ioctl(td, (struct ioctl_args *)uap);
 		break;
=20
Index: sys/sys/kbio.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/sys/kbio.h	(revision 197480)
+++ sys/sys/kbio.h	(working copy)
@@ -120,6 +120,20 @@
 };
 typedef struct keymap keymap_t;
=20
+#ifdef _KERNEL
+struct okeyent_t {
+	u_char		map[NUM_STATES];
+	u_char		spcl;
+	u_char		flgs;
+};
+
+struct okeymap {
+	u_short		n_keys;
+	struct okeyent_t key[NUM_KEYS];
+};
+typedef struct okeymap okeymap_t;
+#endif /* _KERNEL */
+
 #endif /* !_KEYMAP_DECLARED */
=20
 /* defines for "special" keys (spcl bit set in keymap) */
@@ -223,6 +237,10 @@
 /* XXX: Should have keymap_t as an argument, but that's too big for ioctl(=
)! */
 #define GIO_KEYMAP 	 _IO('k', 6)
 #define PIO_KEYMAP 	 _IO('k', 7)
+#ifdef _KERNEL
+#define OGIO_KEYMAP 	_IOR('k', 6, okeymap_t)
+#define OPIO_KEYMAP 	_IOW('k', 7, okeymap_t)
+#endif /* _KERNEL */
 #define GIO_DEADKEYMAP 	_IOR('k', 8, accentmap_t)
 #define PIO_DEADKEYMAP 	_IOW('k', 9, accentmap_t)
 #define GIO_KEYMAPENT 	_IOWR('k', 10, keyarg_t)

--VRppCkiwz5ce4F2G--

--SLRDCdsRrCd4mzuj
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (FreeBSD)

iEYEARECAAYFAkq8ue8ACgkQ52SDGA2eCwX+ogCfX6h3gVXTBO5VNECmpAOrgB2i
7MkAnA5PwwU87rRUZ2BkZe3X/LhqUXLX
=FwgY
-----END PGP SIGNATURE-----

--SLRDCdsRrCd4mzuj--



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