From owner-freebsd-current@FreeBSD.ORG Fri Sep 25 12:39:12 2009 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A0AC01065672 for ; Fri, 25 Sep 2009 12:39:12 +0000 (UTC) (envelope-from ed@hoeg.nl) Received: from palm.hoeg.nl (mx0.hoeg.nl [IPv6:2001:7b8:613:100::211]) by mx1.freebsd.org (Postfix) with ESMTP id 0B1EC8FC13 for ; Fri, 25 Sep 2009 12:39:12 +0000 (UTC) Received: by palm.hoeg.nl (Postfix, from userid 1000) id 4896D1CC47; Fri, 25 Sep 2009 14:39:11 +0200 (CEST) Date: Fri, 25 Sep 2009 14:39:11 +0200 From: Ed Schouten To: Kostik Belousov Message-ID: <20090925123911.GP95398@hoeg.nl> References: <200909191756.n8JHuQCq031719@svn.freebsd.org> <86zl8jften.fsf@gmail.com> <20090925062134.GN95398@hoeg.nl> <20090925105729.GT47688@deviant.kiev.zoral.com.ua> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="SLRDCdsRrCd4mzuj" Content-Disposition: inline In-Reply-To: <20090925105729.GT47688@deviant.kiev.zoral.com.ua> User-Agent: Mutt/1.5.20 (2009-06-14) Cc: Anonymous , freebsd-current@freebsd.org Subject: [Patch] [regression] libvgl and r197330 (kbd) X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Sep 2009 12:39:12 -0000 --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 wrote: > On Fri, Sep 25, 2009 at 08:21:34AM +0200, Ed Schouten wrote: > > Hi, > >=20 > > * Anonymous 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 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--