summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorru <ru@FreeBSD.org>2006-09-27 19:57:02 +0000
committerru <ru@FreeBSD.org>2006-09-27 19:57:02 +0000
commit4ef62e4ca582414062d69e20a1ccdade4a110938 (patch)
treea886251dab8c19f71a5bfd0199ec1d9b327b3513 /sys
parentf6b387ce531fb4ba91958db5aadcb53f89d4ed1b (diff)
downloadFreeBSD-src-4ef62e4ca582414062d69e20a1ccdade4a110938.zip
FreeBSD-src-4ef62e4ca582414062d69e20a1ccdade4a110938.tar.gz
Fix our ioctl(2) implementation when the argument is "int". New
ioctls passing integer arguments should use the _IOWINT() macro. This fixes a lot of ioctl's not working on sparc64, most notable being keyboard/syscons ioctls. Full ABI compatibility is provided, with the bonus of fixing the handling of old ioctls on sparc64. Reviewed by: bde (with contributions) Tested by: emax, marius MFC after: 1 week
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/atkbdc/atkbd.c33
-rw-r--r--sys/dev/digi/digi.c13
-rw-r--r--sys/dev/kbdmux/kbdmux.c29
-rw-r--r--sys/dev/syscons/scvidctl.c30
-rw-r--r--sys/dev/syscons/syscons.c85
-rw-r--r--sys/dev/uart/uart_kbd_sun.c25
-rw-r--r--sys/dev/usb/ukbd.c33
-rw-r--r--sys/dev/vkbd/vkbd.c28
-rw-r--r--sys/fs/procfs/procfs_ioctl.c31
-rw-r--r--sys/kern/sys_generic.c26
-rw-r--r--sys/kern/tty_pts.c11
-rw-r--r--sys/kern/tty_pty.c11
-rw-r--r--sys/modules/digi/digi/Makefile1
-rw-r--r--sys/modules/if_tap/Makefile5
-rw-r--r--sys/modules/kbdmux/Makefile5
-rw-r--r--sys/modules/procfs/Makefile1
-rw-r--r--sys/modules/ukbd/Makefile6
-rw-r--r--sys/modules/vkbd/Makefile5
-rw-r--r--sys/net/if_tap.c14
-rw-r--r--sys/net/if_tap.h2
-rw-r--r--sys/pc98/cbus/pckbd.c26
-rw-r--r--sys/sys/consio.h14
-rw-r--r--sys/sys/digiio.h2
-rw-r--r--sys/sys/ioccom.h12
-rw-r--r--sys/sys/kbio.h16
-rw-r--r--sys/sys/pioctl.h8
-rw-r--r--sys/sys/ttycom.h2
27 files changed, 421 insertions, 53 deletions
diff --git a/sys/dev/atkbdc/atkbd.c b/sys/dev/atkbdc/atkbd.c
index 9ec650e..76f2184 100644
--- a/sys/dev/atkbdc/atkbd.c
+++ b/sys/dev/atkbdc/atkbd.c
@@ -28,6 +28,7 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include "opt_compat.h"
#include "opt_kbd.h"
#include "opt_atkbd.h"
@@ -851,6 +852,10 @@ atkbd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg)
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) {
@@ -858,6 +863,13 @@ atkbd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg)
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:
@@ -883,6 +895,13 @@ atkbd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg)
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) {
@@ -912,6 +931,13 @@ atkbd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg)
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);
@@ -935,6 +961,13 @@ atkbd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg)
}
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))
diff --git a/sys/dev/digi/digi.c b/sys/dev/digi/digi.c
index 2eb72b0..7adc72a 100644
--- a/sys/dev/digi/digi.c
+++ b/sys/dev/digi/digi.c
@@ -913,6 +913,10 @@ digiioctl(struct tty *tp, u_long cmd, void *data, int flag, struct thread *td)
{
struct digi_softc *sc;
struct digi_p *port;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+ defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+ int ival;
+#endif
port = tp->t_sc;
sc = port->sc;
@@ -942,8 +946,15 @@ digiioctl(struct tty *tp, u_long cmd, void *data, int flag, struct thread *td)
}
}
return (0);
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+ defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+ case _IO('e', 'C'):
+ ival = IOCPARM_IVAL(data);
+ data = &ival;
+ /* FALLTHROUGH */
+#endif
case DIGIIO_RING:
- port->send_ring = *(u_char *)data;
+ port->send_ring = (u_char)*(int *)data;
break;
default:
return (ENOTTY);
diff --git a/sys/dev/kbdmux/kbdmux.c b/sys/dev/kbdmux/kbdmux.c
index d058b8a..8e93272c 100644
--- a/sys/dev/kbdmux/kbdmux.c
+++ b/sys/dev/kbdmux/kbdmux.c
@@ -31,6 +31,7 @@
* $FreeBSD$
*/
+#include "opt_compat.h"
#include "opt_kbd.h"
#include <sys/param.h>
@@ -940,6 +941,9 @@ kbdmux_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg)
kbdmux_kbd_t *k;
keyboard_info_t *ki;
int error = 0, mode;
+#ifdef COMPAT_FREEBSD6
+ int ival;
+#endif
if (state == NULL)
return (ENXIO);
@@ -1048,6 +1052,12 @@ kbdmux_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg)
KBDMUX_UNLOCK(state);
break;
+#ifdef COMPAT_FREEBSD6
+ case _IO('K', 7):
+ ival = IOCPARM_IVAL(arg);
+ arg = (caddr_t)&ival;
+ /* FALLTHROUGH */
+#endif
case KDSKBMODE: /* set keyboard mode */
KBDMUX_LOCK(state);
@@ -1082,6 +1092,12 @@ kbdmux_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg)
KBDMUX_UNLOCK(state);
break;
+#ifdef COMPAT_FREEBSD6
+ case _IO('K', 66):
+ ival = IOCPARM_IVAL(arg);
+ arg = (caddr_t)&ival;
+ /* FALLTHROUGH */
+#endif
case KDSETLED: /* set keyboard LED */
KBDMUX_LOCK(state);
@@ -1107,6 +1123,12 @@ kbdmux_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg)
KBDMUX_UNLOCK(state);
break;
+#ifdef COMPAT_FREEBSD6
+ case _IO('K', 20):
+ ival = IOCPARM_IVAL(arg);
+ arg = (caddr_t)&ival;
+ /* FALLTHROUGH */
+#endif
case KDSKBSTATE: /* set lock key state */
KBDMUX_LOCK(state);
@@ -1128,6 +1150,13 @@ kbdmux_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg)
return (kbdmux_ioctl(kbd, KDSETLED, arg));
/* NOT REACHED */
+#ifdef COMPAT_FREEBSD6
+ case _IO('K', 67):
+ cmd = KDSETRAD;
+ ival = IOCPARM_IVAL(arg);
+ arg = (caddr_t)&ival;
+ /* FALLTHROUGH */
+#endif
case KDSETREPEAT: /* set keyboard repeat rate (new interface) */
case KDSETRAD: /* set keyboard repeat rate (old interface) */
KBDMUX_LOCK(state);
diff --git a/sys/dev/syscons/scvidctl.c b/sys/dev/syscons/scvidctl.c
index f2debe3..65a56c6 100644
--- a/sys/dev/syscons/scvidctl.c
+++ b/sys/dev/syscons/scvidctl.c
@@ -30,6 +30,7 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include "opt_compat.h"
#include "opt_syscons.h"
#include <sys/param.h>
@@ -482,6 +483,10 @@ sc_vid_ioctl(struct tty *tp, u_long cmd, caddr_t data, int flag, struct thread *
video_adapter_info_t adp_info;
int error;
int s;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+ defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+ int ival;
+#endif
scp = SC_STAT(tp->t_dev);
if (scp == NULL) /* tp == SC_MOUSE */
@@ -584,6 +589,13 @@ sc_vid_ioctl(struct tty *tp, u_long cmd, caddr_t data, int flag, struct thread *
case FBIO_FINDMODE:
return fb_ioctl(adp, FBIO_FINDMODE, data);
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+ defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+ case _IO('c', 104):
+ ival = IOCPARM_IVAL(data);
+ data = (caddr_t)&ival;
+ /* FALLTHROUGH */
+#endif
case CONS_SETWINORG: /* set frame buffer window origin */
case FBIO_SETWINORG:
if (scp != scp->sc->cur_scp)
@@ -675,8 +687,15 @@ sc_vid_ioctl(struct tty *tp, u_long cmd, caddr_t data, int flag, struct thread *
return sc_set_graphics_mode(scp, tp, cmd & 0xff);
#endif /* SC_NO_MODE_CHANGE */
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+ defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+ case _IO('K', 10):
+ ival = IOCPARM_IVAL(data);
+ data = (caddr_t)&ival;
+ /* FALLTHROUGH */
+#endif
case KDSETMODE: /* set current mode of this (virtual) console */
- switch (*(intptr_t *)data) {
+ switch (*(int *)data) {
case KD_TEXT: /* switch to TEXT (known) mode */
/*
* If scp->mode is of graphics modes, we don't know which
@@ -804,8 +823,15 @@ sc_vid_ioctl(struct tty *tp, u_long cmd, caddr_t data, int flag, struct thread *
*data = ISGRAPHSC(scp) ? KD_GRAPHICS : KD_TEXT;
return 0;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+ defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+ case _IO('K', 13):
+ ival = IOCPARM_IVAL(data);
+ data = (caddr_t)&ival;
+ /* FALLTHROUGH */
+#endif
case KDSBORDER: /* set border color of this (virtual) console */
- scp->border = *(intptr_t *)data;
+ scp->border = *(int *)data;
if (scp == scp->sc->cur_scp)
sc_set_border(scp, scp->border);
return 0;
diff --git a/sys/dev/syscons/syscons.c b/sys/dev/syscons/syscons.c
index 08f8e90..4976896 100644
--- a/sys/dev/syscons/syscons.c
+++ b/sys/dev/syscons/syscons.c
@@ -32,6 +32,7 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include "opt_compat.h"
#include "opt_syscons.h"
#include "opt_splash.h"
#include "opt_ddb.h"
@@ -680,6 +681,10 @@ scioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td)
sc_softc_t *sc;
scr_stat *scp;
int s;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+ defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+ int ival;
+#endif
tp = dev->si_tty;
@@ -980,6 +985,13 @@ scioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td)
bcopy(&scp->smode, data, sizeof(struct vt_mode));
return 0;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+ defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+ case _IO('v', 4):
+ ival = IOCPARM_IVAL(data);
+ data = (caddr_t)&ival;
+ /* FALLTHROUGH */
+#endif
case VT_RELDISP: /* screen switcher ioctl */
s = spltty();
/*
@@ -996,7 +1008,7 @@ scioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td)
return EPERM;
}
error = EINVAL;
- switch(*(intptr_t *)data) {
+ switch(*(int *)data) {
case VT_FALSE: /* user refuses to release screen, abort */
if ((error = finish_vt_rel(scp, FALSE, &s)) == 0)
DPRINTF(5, ("%s%d: VT_FALSE\n", SC_DRIVER_NAME, sc->unit));
@@ -1025,8 +1037,15 @@ scioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td)
}
return EINVAL;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+ defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+ case _IO('v', 5):
+ ival = IOCPARM_IVAL(data);
+ data = (caddr_t)&ival;
+ /* FALLTHROUGH */
+#endif
case VT_ACTIVATE: /* switch to screen *data */
- i = (*(intptr_t *)data == 0) ? scp->index : (*(intptr_t *)data - 1);
+ i = (*(int *)data == 0) ? scp->index : (*(int *)data - 1);
s = spltty();
error = sc_clean_up(sc->cur_scp);
splx(s);
@@ -1034,8 +1053,15 @@ scioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td)
return error;
return sc_switch_scr(sc, i);
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+ defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+ case _IO('v', 6):
+ ival = IOCPARM_IVAL(data);
+ data = (caddr_t)&ival;
+ /* FALLTHROUGH */
+#endif
case VT_WAITACTIVE: /* wait for switch to occur */
- i = (*(intptr_t *)data == 0) ? scp->index : (*(intptr_t *)data - 1);
+ i = (*(int *)data == 0) ? scp->index : (*(int *)data - 1);
if ((i < sc->first_vty) || (i >= sc->first_vty + sc->vtys))
return EINVAL;
s = spltty();
@@ -1087,6 +1113,13 @@ scioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td)
#endif
return 0;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+ defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+ case _IO('K', 20):
+ ival = IOCPARM_IVAL(data);
+ data = (caddr_t)&ival;
+ /* FALLTHROUGH */
+#endif
case KDSKBSTATE: /* set keyboard state (locks) */
if (*(int *)data & ~LOCK_MASK)
return EINVAL;
@@ -1109,14 +1142,28 @@ scioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td)
error = ENODEV;
return error;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+ defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+ case _IO('K', 67):
+ ival = IOCPARM_IVAL(data);
+ data = (caddr_t)&ival;
+ /* FALLTHROUGH */
+#endif
case KDSETRAD: /* set keyboard repeat & delay rates (old) */
if (*(int *)data & ~0x7f)
return EINVAL;
- error = kbd_ioctl(sc->kbd, cmd, data);
+ error = kbd_ioctl(sc->kbd, KDSETRAD, data);
if (error == ENOIOCTL)
error = ENODEV;
return error;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+ defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+ case _IO('K', 7):
+ ival = IOCPARM_IVAL(data);
+ data = (caddr_t)&ival;
+ /* FALLTHROUGH */
+#endif
case KDSKBMODE: /* set keyboard mode */
switch (*(int *)data) {
case K_XLATE: /* switch to XLT ascii mode */
@@ -1124,7 +1171,7 @@ scioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td)
case K_CODE: /* switch to CODE mode */
scp->kbd_mode = *(int *)data;
if (scp == sc->cur_scp)
- kbd_ioctl(sc->kbd, cmd, data);
+ kbd_ioctl(sc->kbd, KDSKBMODE, data);
return 0;
default:
return EINVAL;
@@ -1141,6 +1188,13 @@ scioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td)
error = ENODEV;
return error;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+ defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+ case _IO('K', 8):
+ ival = IOCPARM_IVAL(data);
+ data = (caddr_t)&ival;
+ /* FALLTHROUGH */
+#endif
case KDMKTONE: /* sound the bell */
if (*(int*)data)
sc_bell(scp, (*(int*)data)&0xffff,
@@ -1149,6 +1203,13 @@ scioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td)
sc_bell(scp, scp->bell_pitch, scp->bell_duration);
return 0;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+ defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+ case _IO('K', 63):
+ ival = IOCPARM_IVAL(data);
+ data = (caddr_t)&ival;
+ /* FALLTHROUGH */
+#endif
case KIOCSOUND: /* make tone (*data) hz */
if (scp == sc->cur_scp) {
if (*(int *)data)
@@ -1166,6 +1227,13 @@ scioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td)
}
return 0;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+ defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+ case _IO('K', 66):
+ ival = IOCPARM_IVAL(data);
+ data = (caddr_t)&ival;
+ /* FALLTHROUGH */
+#endif
case KDSETLED: /* set keyboard LED status */
if (*(int *)data & ~LED_MASK) /* FIXME: LOCK_MASK? */
return EINVAL;
@@ -1188,6 +1256,13 @@ scioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td)
error = ENODEV;
return error;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+ defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+ case _IO('c', 110):
+ ival = IOCPARM_IVAL(data);
+ data = (caddr_t)&ival;
+ /* FALLTHROUGH */
+#endif
case CONS_SETKBD: /* set the new keyboard */
{
keyboard_t *newkbd;
diff --git a/sys/dev/uart/uart_kbd_sun.c b/sys/dev/uart/uart_kbd_sun.c
index 02db9c6..81dde39 100644
--- a/sys/dev/uart/uart_kbd_sun.c
+++ b/sys/dev/uart/uart_kbd_sun.c
@@ -27,6 +27,7 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include "opt_compat.h"
#include "opt_kbd.h"
#include <sys/param.h>
@@ -425,6 +426,9 @@ sunkbd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t data)
{
struct sunkbd_softc *sc;
int error;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5)
+ int ival;
+#endif
sc = (struct sunkbd_softc *)kbd;
error = 0;
@@ -432,6 +436,12 @@ sunkbd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t data)
case KDGKBMODE:
*(int *)data = sc->sc_mode;
break;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5)
+ case _IO('K', 7):
+ ival = IOCPARM_IVAL(data);
+ data = (caddr_t)&ival;
+ /* FALLTHROUGH */
+#endif
case KDSKBMODE:
switch (*(int *)data) {
case K_XLATE:
@@ -456,6 +466,12 @@ sunkbd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t data)
case KDGETLED:
*(int *)data = KBD_LED_VAL(kbd);
break;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5)
+ case _IO('K', 66):
+ ival = IOCPARM_IVAL(data);
+ data = (caddr_t)&ival;
+ /* FALLTHROUGH */
+#endif
case KDSETLED:
if (*(int *)data & ~LOCK_MASK) {
error = EINVAL;
@@ -478,6 +494,12 @@ sunkbd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t data)
case KDGKBSTATE:
*(int *)data = sc->sc_state & LOCK_MASK;
break;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5)
+ case _IO('K', 20):
+ ival = IOCPARM_IVAL(data);
+ data = (caddr_t)&ival;
+ /* FALLTHROUGH */
+#endif
case KDSKBSTATE:
if (*(int *)data & ~LOCK_MASK) {
error = EINVAL;
@@ -485,7 +507,8 @@ sunkbd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t data)
}
sc->sc_state &= ~LOCK_MASK;
sc->sc_state |= *(int *)data;
- break;
+ /* set LEDs and quit */
+ return (sunkbd_ioctl(kbd, KDSETLED, data));
case KDSETREPEAT:
case KDSETRAD:
break;
diff --git a/sys/dev/usb/ukbd.c b/sys/dev/usb/ukbd.c
index 848ac81..3919794 100644
--- a/sys/dev/usb/ukbd.c
+++ b/sys/dev/usb/ukbd.c
@@ -45,6 +45,7 @@ __FBSDID("$FreeBSD$");
* HID spec: http://www.usb.org/developers/devclass_docs/HID1_11.pdf
*/
+#include "opt_compat.h"
#include "opt_kbd.h"
#include "opt_ukbd.h"
@@ -1159,6 +1160,10 @@ ukbd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg)
ukbd_state_t *state = kbd->kb_data;
int s;
int i;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+ defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+ int ival;
+#endif
s = splusb();
switch (cmd) {
@@ -1166,6 +1171,13 @@ ukbd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg)
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:
@@ -1191,6 +1203,13 @@ ukbd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg)
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) {
@@ -1215,6 +1234,13 @@ ukbd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg)
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);
@@ -1241,6 +1267,13 @@ ukbd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg)
kbd->kb_delay2 = ((int *)arg)[1];
return 0;
+#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);
return set_typematic(kbd, *(int *)arg);
diff --git a/sys/dev/vkbd/vkbd.c b/sys/dev/vkbd/vkbd.c
index 7795318..9eca6de 100644
--- a/sys/dev/vkbd/vkbd.c
+++ b/sys/dev/vkbd/vkbd.c
@@ -31,6 +31,7 @@
* $FreeBSD$
*/
+#include "opt_compat.h"
#include "opt_kbd.h"
#include <sys/param.h>
@@ -1092,6 +1093,9 @@ vkbd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg)
{
vkbd_state_t *state = (vkbd_state_t *) kbd->kb_data;
int i;
+#ifdef COMPAT_FREEBSD6
+ int ival;
+#endif
VKBD_LOCK(state);
@@ -1100,6 +1104,12 @@ vkbd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg)
*(int *)arg = state->ks_mode;
break;
+#ifdef COMPAT_FREEBSD6
+ 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:
@@ -1130,6 +1140,12 @@ vkbd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg)
*(int *)arg = KBD_LED_VAL(kbd);
break;
+#ifdef COMPAT_FREEBSD6
+ 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) {
@@ -1155,6 +1171,12 @@ vkbd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg)
*(int *)arg = state->ks_state & LOCK_MASK;
break;
+#ifdef COMPAT_FREEBSD6
+ 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) {
VKBD_UNLOCK(state);
@@ -1174,6 +1196,12 @@ vkbd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg)
vkbd_status_changed(state);
break;
+#ifdef COMPAT_FREEBSD6
+ case _IO('K', 67):
+ ival = IOCPARM_IVAL(arg);
+ arg = (caddr_t)&ival;
+ /* FALLTHROUGH */
+#endif
case KDSETRAD: /* set keyboard repeat rate (old interface) */
kbd->kb_delay1 = typematic_delay(*(int *)arg);
kbd->kb_delay2 = typematic_rate(*(int *)arg);
diff --git a/sys/fs/procfs/procfs_ioctl.c b/sys/fs/procfs/procfs_ioctl.c
index 7acf7d2..3808a2b 100644
--- a/sys/fs/procfs/procfs_ioctl.c
+++ b/sys/fs/procfs/procfs_ioctl.c
@@ -65,6 +65,9 @@ procfs_ioctl(PFS_IOCTL_ARGS)
struct procfs_status32 *ps32;
#endif
int error, flags, sig;
+#ifdef COMPAT_FREEBSD6
+ int ival;
+#endif
PROC_LOCK(p);
error = 0;
@@ -72,20 +75,35 @@ procfs_ioctl(PFS_IOCTL_ARGS)
#if defined(COMPAT_FREEBSD5) || defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
case _IOC(IOC_IN, 'p', 1, 0):
#endif
+#ifdef COMPAT_FREEBSD6
+ case _IO('p', 1):
+ ival = IOCPARM_IVAL(data);
+ data = &ival;
+#endif
case PIOCBIS:
- p->p_stops |= *(uintptr_t *)data;
+ p->p_stops |= *(unsigned int *)data;
break;
#if defined(COMPAT_FREEBSD5) || defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
case _IOC(IOC_IN, 'p', 2, 0):
#endif
+#ifdef COMPAT_FREEBSD6
+ case _IO('p', 2):
+ ival = IOCPARM_IVAL(data);
+ data = &ival;
+#endif
case PIOCBIC:
- p->p_stops &= ~*(uintptr_t *)data;
+ p->p_stops &= ~*(unsigned int *)data;
break;
#if defined(COMPAT_FREEBSD5) || defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
case _IOC(IOC_IN, 'p', 3, 0):
#endif
+#ifdef COMPAT_FREEBSD6
+ case _IO('p', 3):
+ ival = IOCPARM_IVAL(data);
+ data = &ival;
+#endif
case PIOCSFL:
- flags = *(uintptr_t *)data;
+ flags = *(unsigned int *)data;
if (flags & PF_ISUGID && (error = suser(td)) != 0)
break;
p->p_pfsflags = flags;
@@ -132,10 +150,15 @@ procfs_ioctl(PFS_IOCTL_ARGS)
#if defined(COMPAT_FREEBSD5) || defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
case _IOC(IOC_IN, 'p', 5, 0):
#endif
+#ifdef COMPAT_FREEBSD6
+ case _IO('p', 5):
+ ival = IOCPARM_IVAL(data);
+ data = &ival;
+#endif
case PIOCCONT:
if (p->p_step == 0)
break;
- sig = *(uintptr_t *)data;
+ sig = *(unsigned int *)data;
if (sig != 0 && !_SIG_VALID(sig)) {
error = EINVAL;
break;
diff --git a/sys/kern/sys_generic.c b/sys/kern/sys_generic.c
index 13387ec..cab79b8 100644
--- a/sys/kern/sys_generic.c
+++ b/sys/kern/sys_generic.c
@@ -524,9 +524,9 @@ int
ioctl(struct thread *td, struct ioctl_args *uap)
{
u_long com;
- int error;
+ int arg, error;
u_int size;
- caddr_t data, memp;
+ caddr_t data;
if (uap->com > 0xffffffff) {
printf(
@@ -548,20 +548,24 @@ ioctl(struct thread *td, struct ioctl_args *uap)
#else
((com & (IOC_IN | IOC_OUT)) && size == 0) ||
#endif
- ((com & IOC_VOID) && size > 0))
+ ((com & IOC_VOID) && size > 0 && size != sizeof(int)))
return (ENOTTY);
if (size > 0) {
- memp = malloc((u_long)size, M_IOCTLOPS, M_WAITOK);
- data = memp;
- } else {
- memp = NULL;
+ if (!(com & IOC_VOID))
+ data = malloc((u_long)size, M_IOCTLOPS, M_WAITOK);
+ else {
+ /* Integer argument. */
+ arg = (intptr_t)uap->data;
+ data = (void *)&arg;
+ size = 0;
+ }
+ } else
data = (void *)&uap->data;
- }
if (com & IOC_IN) {
error = copyin(uap->data, data, (u_int)size);
if (error) {
- free(memp, M_IOCTLOPS);
+ free(data, M_IOCTLOPS);
return (error);
}
} else if (com & IOC_OUT) {
@@ -577,8 +581,8 @@ ioctl(struct thread *td, struct ioctl_args *uap)
if (error == 0 && (com & IOC_OUT))
error = copyout(data, uap->data, (u_int)size);
- if (memp != NULL)
- free(memp, M_IOCTLOPS);
+ if (size > 0)
+ free(data, M_IOCTLOPS);
return (error);
}
diff --git a/sys/kern/tty_pts.c b/sys/kern/tty_pts.c
index 942b77f..9b1466f 100644
--- a/sys/kern/tty_pts.c
+++ b/sys/kern/tty_pts.c
@@ -641,6 +641,10 @@ ptcioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td
{
struct tty *tp = dev->si_tty;
struct pt_desc *pt = dev->si_drv1;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+ defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+ int ival;
+#endif
switch (cmd) {
@@ -710,6 +714,13 @@ ptcioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td
ndflush(&tp->t_outq, tp->t_outq.c_cc);
break;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+ defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+ case _IO('t', 95):
+ ival = IOCPARM_IVAL(data);
+ data = (caddr_t)&ival;
+ /* FALLTHROUGH */
+#endif
case TIOCSIG:
if (*(unsigned int *)data >= NSIG ||
*(unsigned int *)data == 0)
diff --git a/sys/kern/tty_pty.c b/sys/kern/tty_pty.c
index c861d40..af005ab 100644
--- a/sys/kern/tty_pty.c
+++ b/sys/kern/tty_pty.c
@@ -573,6 +573,10 @@ ptcioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td
{
struct tty *tp = dev->si_tty;
struct ptsc *pt = dev->si_drv1;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+ defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+ int ival;
+#endif
switch (cmd) {
@@ -627,6 +631,13 @@ ptcioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td
ndflush(&tp->t_outq, tp->t_outq.c_cc);
break;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+ defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+ case _IO('t', 95):
+ ival = IOCPARM_IVAL(data);
+ data = (caddr_t)&ival;
+ /* FALLTHROUGH */
+#endif
case TIOCSIG:
if (*(unsigned int *)data >= NSIG ||
*(unsigned int *)data == 0)
diff --git a/sys/modules/digi/digi/Makefile b/sys/modules/digi/digi/Makefile
index 6ba9c6e..a9bd010 100644
--- a/sys/modules/digi/digi/Makefile
+++ b/sys/modules/digi/digi/Makefile
@@ -10,6 +10,7 @@ SRCS+= opt_compat.h
.if !defined(KERNBUILDDIR)
opt_compat.h:
echo "#define COMPAT_43 1" > opt_compat.h
+ echo "#define COMPAT_FREEBSD6 1" >> opt_compat.h
.endif
.include <bsd.kmod.mk>
diff --git a/sys/modules/if_tap/Makefile b/sys/modules/if_tap/Makefile
index 3b75586..c138e71 100644
--- a/sys/modules/if_tap/Makefile
+++ b/sys/modules/if_tap/Makefile
@@ -5,9 +5,12 @@
.PATH: ${.CURDIR}/../../net
KMOD= if_tap
-SRCS= if_tap.c opt_inet.h vnode_if.h
+SRCS= if_tap.c opt_compat.h opt_inet.h vnode_if.h
.if !defined(KERNBUILDDIR)
+opt_compat.h:
+ echo "#define COMPAT_FREEBSD6 1" > ${.TARGET}
+
opt_inet.h:
echo "#define INET 1" > opt_inet.h
.endif
diff --git a/sys/modules/kbdmux/Makefile b/sys/modules/kbdmux/Makefile
index 2d64ddf..70b39a0 100644
--- a/sys/modules/kbdmux/Makefile
+++ b/sys/modules/kbdmux/Makefile
@@ -4,9 +4,12 @@
.PATH: ${.CURDIR}/../../dev/kbdmux
KMOD= kbdmux
-SRCS= kbdmux.c opt_kbd.h bus_if.h device_if.h
+SRCS= kbdmux.c opt_compat.h opt_kbd.h bus_if.h device_if.h
.if !defined(KERNBUILDDIR)
+opt_compat.h:
+ echo "#define COMPAT_FREEBSD6 1" > ${.TARGET}
+
opt_kbd.h:
echo "#define KBD_INSTALL_CDEV 1" > ${.TARGET}
.endif
diff --git a/sys/modules/procfs/Makefile b/sys/modules/procfs/Makefile
index 48a3e02..6c840ed 100644
--- a/sys/modules/procfs/Makefile
+++ b/sys/modules/procfs/Makefile
@@ -32,6 +32,7 @@ opt_compat.h:
echo "#define COMPAT_43 1" > ${.TARGET}
echo "#define COMPAT_FREEBSD4 1" >> ${.TARGET}
echo "#define COMPAT_FREEBSD5 1" >> ${.TARGET}
+ echo "#define COMPAT_FREEBSD6 1" >> ${.TARGET}
.if ${MACHINE_ARCH} == "amd64"
echo "#define COMPAT_IA32 1" >> ${.TARGET}
echo "#define COMPAT_LINUX32 1" >> ${.TARGET}
diff --git a/sys/modules/ukbd/Makefile b/sys/modules/ukbd/Makefile
index 80d2905..331e729 100644
--- a/sys/modules/ukbd/Makefile
+++ b/sys/modules/ukbd/Makefile
@@ -3,9 +3,13 @@
.PATH: ${.CURDIR}/../../dev/usb
KMOD= ukbd
-SRCS= bus_if.h device_if.h opt_usb.h opt_kbd.h opt_ukbd.h usbdevs.h ukbd.c
+SRCS= bus_if.h device_if.h opt_compat.h opt_usb.h opt_kbd.h opt_ukbd.h \
+ usbdevs.h ukbd.c
.if !defined(KERNBUILDDIR)
+opt_compat.h:
+ echo "#define COMPAT_FREEBSD6 1" > ${.TARGET}
+
opt_kbd.h:
echo "#define KBD_INSTALL_CDEV 1" > ${.TARGET}
.endif
diff --git a/sys/modules/vkbd/Makefile b/sys/modules/vkbd/Makefile
index 29591dc..500274c 100644
--- a/sys/modules/vkbd/Makefile
+++ b/sys/modules/vkbd/Makefile
@@ -4,9 +4,12 @@
.PATH: ${.CURDIR}/../../dev/vkbd
KMOD= vkbd
-SRCS= vkbd.c opt_kbd.h
+SRCS= vkbd.c opt_compat.h opt_kbd.h
.if !defined(KERNBUILDDIR)
+opt_compat.h:
+ echo "#define COMPAT_FREEBSD6 1" > ${.TARGET}
+
opt_kbd.h:
echo "#define KBD_INSTALL_CDEV 1" > ${.TARGET}
.endif
diff --git a/sys/net/if_tap.c b/sys/net/if_tap.c
index dd40cde..1f0ed89 100644
--- a/sys/net/if_tap.c
+++ b/sys/net/if_tap.c
@@ -35,6 +35,7 @@
* $Id: if_tap.c,v 0.21 2000/07/23 21:46:02 max Exp $
*/
+#include "opt_compat.h"
#include "opt_inet.h"
#include <sys/param.h>
@@ -612,6 +613,10 @@ tapioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td
struct tapinfo *tapp = NULL;
int s;
int f;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+ defined(COMPAT_FREEBSD4)
+ int ival;
+#endif
switch (cmd) {
case TAPSIFINFO:
@@ -686,8 +691,15 @@ tapioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td
bcopy(&ifp->if_flags, data, sizeof(ifp->if_flags));
break;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+ defined(COMPAT_FREEBSD4)
+ case _IO('V', 0):
+ ival = IOCPARM_IVAL(data);
+ data = (caddr_t)&ival;
+ /* FALLTHROUGH */
+#endif
case VMIO_SIOCSIFFLAGS: /* VMware/VMnet SIOCSIFFLAGS */
- f = *(intptr_t *)data;
+ f = *(int *)data;
f &= 0x0fff;
f &= ~IFF_CANTCHANGE;
f |= IFF_UP;
diff --git a/sys/net/if_tap.h b/sys/net/if_tap.h
index daaddf7..0086285 100644
--- a/sys/net/if_tap.h
+++ b/sys/net/if_tap.h
@@ -57,7 +57,7 @@ struct tapinfo {
#define TAPGIFINFO _IOR('t', 92, struct tapinfo)
/* VMware ioctl's */
-#define VMIO_SIOCSIFFLAGS _IO('V', 0)
+#define VMIO_SIOCSIFFLAGS _IOWINT('V', 0)
#define VMIO_SIOCSKEEP _IO('V', 1)
#define VMIO_SIOCSIFBR _IO('V', 2)
#define VMIO_SIOCSLADRF _IO('V', 3)
diff --git a/sys/pc98/cbus/pckbd.c b/sys/pc98/cbus/pckbd.c
index a93aa52..b22ced3 100644
--- a/sys/pc98/cbus/pckbd.c
+++ b/sys/pc98/cbus/pckbd.c
@@ -28,6 +28,7 @@
* $FreeBSD$
*/
+#include "opt_compat.h"
#include "opt_kbd.h"
#include <sys/param.h>
@@ -704,6 +705,10 @@ pckbd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg)
pckbd_state_t *state = kbd->kb_data;
int s;
int i;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+ defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+ int ival;
+#endif
s = spltty();
switch (cmd) {
@@ -711,6 +716,13 @@ pckbd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg)
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:
@@ -736,6 +748,13 @@ pckbd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg)
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) {
@@ -756,6 +775,13 @@ pckbd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg)
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);
diff --git a/sys/sys/consio.h b/sys/sys/consio.h
index 505ef06..7b18ade 100644
--- a/sys/sys/consio.h
+++ b/sys/sys/consio.h
@@ -51,10 +51,10 @@
#define KD_TEXT1 2 /* set text mode !restore fonts */
#define KD_PIXEL 3 /* set pixel mode */
#define KDGETMODE _IOR('K', 9, int)
-#define KDSETMODE _IO('K', 10 /*, int */)
+#define KDSETMODE _IOWINT('K', 10)
/* set border color */
-#define KDSBORDER _IO('K', 13 /*, int */)
+#define KDSBORDER _IOWINT('K', 13)
/* set up raster(pixel) text mode */
struct _scr_size {
@@ -255,10 +255,10 @@ typedef struct vid_info vid_info_t;
#define CONS_FINDMODE _IOWR('c', 103, video_info_t)
/* set the frame buffer window origin (equivalent to FBIO_SETWINORG) */
-#define CONS_SETWINORG _IO('c', 104 /*, u_int */)
+#define CONS_SETWINORG _IOWINT('c', 104)
/* use the specified keyboard */
-#define CONS_SETKBD _IO('c', 110 /*, int */)
+#define CONS_SETKBD _IOWINT('c', 110)
/* release the current keyboard */
#define CONS_RELKBD _IO('c', 111)
@@ -320,13 +320,13 @@ typedef struct vt_mode vtmode_t;
#define VT_FALSE 0
#define VT_TRUE 1
#define VT_ACKACQ 2
-#define VT_RELDISP _IO('v', 4 /*, int */)
+#define VT_RELDISP _IOWINT('v', 4)
/* activate the specified vty */
-#define VT_ACTIVATE _IO('v', 5 /*, int */)
+#define VT_ACTIVATE _IOWINT('v', 5)
/* wait until the specified vty is activate */
-#define VT_WAITACTIVE _IO('v', 6 /*, int */)
+#define VT_WAITACTIVE _IOWINT('v', 6)
/* get the currently active vty */
#define VT_GETACTIVE _IOR('v', 7, int)
diff --git a/sys/sys/digiio.h b/sys/sys/digiio.h
index 7382c0a..57824dc 100644
--- a/sys/sys/digiio.h
+++ b/sys/sys/digiio.h
@@ -59,7 +59,7 @@ enum {
#define DIGIIO_REINIT _IO('e', 'A')
#define DIGIIO_DEBUG _IOW('e', 'B', int)
-#define DIGIIO_RING _IO('e', 'C')
+#define DIGIIO_RING _IOWINT('e', 'C')
#define DIGIIO_MODEL _IOR('e', 'D', enum digi_model)
#define DIGIIO_IDENT _IOW('e', 'E', char *)
#define DIGIIO_SETALTPIN _IOW('e', 'F', int)
diff --git a/sys/sys/ioccom.h b/sys/sys/ioccom.h
index 7d25b39..acbd0eb 100644
--- a/sys/sys/ioccom.h
+++ b/sys/sys/ioccom.h
@@ -48,17 +48,25 @@
#define IOC_OUT 0x40000000 /* copy out parameters */
#define IOC_IN 0x80000000 /* copy in parameters */
#define IOC_INOUT (IOC_IN|IOC_OUT)
-#define IOC_DIRMASK 0xe0000000 /* mask for IN/OUT/VOID */
+#define IOC_DIRMASK (IOC_VOID|IOC_OUT|IOC_IN)
#define _IOC(inout,group,num,len) \
((unsigned long)(inout | ((len & IOCPARM_MASK) << 16) | ((group) << 8) | (num)))
#define _IO(g,n) _IOC(IOC_VOID, (g), (n), 0)
+#define _IOWINT(g,n) _IOC(IOC_VOID, (g), (n), sizeof(int))
#define _IOR(g,n,t) _IOC(IOC_OUT, (g), (n), sizeof(t))
#define _IOW(g,n,t) _IOC(IOC_IN, (g), (n), sizeof(t))
/* this should be _IORW, but stdio got there first */
#define _IOWR(g,n,t) _IOC(IOC_INOUT, (g), (n), sizeof(t))
-#ifndef _KERNEL
+#ifdef _KERNEL
+
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+ defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+#define IOCPARM_IVAL(x) ((int)(intptr_t)(void *)*(caddr_t *)(void *)(x))
+#endif
+
+#else
#include <sys/cdefs.h>
diff --git a/sys/sys/kbio.h b/sys/sys/kbio.h
index 97522197..00bcacf 100644
--- a/sys/sys/kbio.h
+++ b/sys/sys/kbio.h
@@ -15,16 +15,16 @@
#define K_XLATE 1 /* keyboard returns ascii */
#define K_CODE 2 /* keyboard returns keycodes */
#define KDGKBMODE _IOR('K', 6, int)
-#define KDSKBMODE _IO('K', 7 /*, int */)
+#define KDSKBMODE _IOWINT('K', 7)
/* make tone */
-#define KDMKTONE _IO('K', 8 /*, int */)
+#define KDMKTONE _IOWINT('K', 8)
/* see console.h for the definitions of the following ioctls */
#ifdef notdef
#define KDGETMODE _IOR('K', 9, int)
-#define KDSETMODE _IO('K', 10 /*, int */)
-#define KDSBORDER _IO('K', 13 /*, int */)
+#define KDSETMODE _IOWINT('K', 10)
+#define KDSBORDER _IOWINT('K', 13)
#endif
/* get/set keyboard lock state */
@@ -34,14 +34,14 @@
#define ALKED 8 /* AltGr locked */
#define LOCK_MASK (CLKED | NLKED | SLKED | ALKED)
#define KDGKBSTATE _IOR('K', 19, int)
-#define KDSKBSTATE _IO('K', 20 /*, int */)
+#define KDSKBSTATE _IOWINT('K', 20)
/* enable/disable I/O access */
#define KDENABIO _IO('K', 60)
#define KDDISABIO _IO('K', 61)
/* make sound */
-#define KIOCSOUND _IO('K', 63 /*, int */)
+#define KIOCSOUND _IOWINT('K', 63)
/* get keyboard model */
#define KB_OTHER 0 /* keyboard not known */
@@ -55,10 +55,10 @@
#define LED_SCR 4 /* Scroll lock LED */
#define LED_MASK (LED_CAP | LED_NUM | LED_SCR)
#define KDGETLED _IOR('K', 65, int)
-#define KDSETLED _IO('K', 66 /*, int */)
+#define KDSETLED _IOWINT('K', 66)
/* set keyboard repeat rate (obsolete, use KDSETREPEAT below) */
-#define KDSETRAD _IO('K', 67 /*, int */)
+#define KDSETRAD _IOWINT('K', 67)
struct keyboard_info {
int kb_index; /* kbdio index# */
diff --git a/sys/sys/pioctl.h b/sys/sys/pioctl.h
index 9e3233f..91a3229 100644
--- a/sys/sys/pioctl.h
+++ b/sys/sys/pioctl.h
@@ -49,12 +49,12 @@ struct procfs_status {
unsigned long val; /* Any extra data */
};
-# define PIOCBIS _IO('p', 1) /* Set event flag */
-# define PIOCBIC _IO('p', 2) /* Clear event flag */
-# define PIOCSFL _IO('p', 3) /* Set flags */
+# define PIOCBIS _IOWINT('p', 1) /* Set event flag */
+# define PIOCBIC _IOWINT('p', 2) /* Clear event flag */
+# define PIOCSFL _IOWINT('p', 3) /* Set flags */
/* wait for proc to stop */
# define PIOCWAIT _IOR('p', 4, struct procfs_status)
-# define PIOCCONT _IO('p', 5) /* Continue a process */
+# define PIOCCONT _IOWINT('p', 5) /* Continue a process */
/* Get proc status */
# define PIOCSTATUS _IOR('p', 6, struct procfs_status)
# define PIOCGFL _IOR('p', 7, unsigned int) /* Get flags */
diff --git a/sys/sys/ttycom.h b/sys/sys/ttycom.h
index 4545d84..6e59577 100644
--- a/sys/sys/ttycom.h
+++ b/sys/sys/ttycom.h
@@ -123,7 +123,7 @@ struct winsize {
#define TIOCSCTTY _IO('t', 97) /* become controlling tty */
/* 97-90 tun; some conflicts */
#define TIOCEXT _IOW('t', 96, int) /* pty: external processing */
-#define TIOCSIG _IO('t', 95) /* pty: generate signal */
+#define TIOCSIG _IOWINT('t', 95) /* pty: generate signal */
#define TIOCDRAIN _IO('t', 94) /* wait till output drained */
/* 92-90 tap; some conflicts */
#define TIOCMSDTRWAIT _IOW('t', 91, int) /* modem: set wait on close */
OpenPOWER on IntegriCloud