From 9b05600b2cc0407688548fe479fecb7ebfb5bbee Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Wed, 14 Jun 2000 20:22:31 +0000 Subject: *** empty log message *** --- c/src/exec/libcsupport/include/rtems/libio.h | 10 +-- c/src/exec/libcsupport/include/sys/filio.h | 3 + c/src/exec/libcsupport/include/sys/ioccom.h | 93 ++++++++++++++++++++++++++++ c/src/exec/libcsupport/src/ioctl.c | 14 ++++- c/src/exec/libcsupport/src/tcdrain.c | 2 - c/src/exec/libcsupport/src/tcflow.c | 2 - c/src/exec/libcsupport/src/tcflush.c | 2 - c/src/exec/libcsupport/src/tcgetattr.c | 2 - c/src/exec/libcsupport/src/tcgetprgrp.c | 2 - c/src/exec/libcsupport/src/tcsendbreak.c | 2 - c/src/exec/libcsupport/src/tcsetattr.c | 2 - c/src/exec/libcsupport/src/tcsetpgrp.c | 2 - c/src/exec/libnetworking/sys/Makefile.am | 2 +- c/src/lib/include/ioccom.h | 80 ++++++++++++++++++++++++ c/src/lib/include/rtems/libio.h | 10 +-- c/src/lib/include/sys/Makefile.am | 4 +- c/src/lib/include/sys/filio.h | 3 + c/src/lib/include/sys/ioccom.h | 93 ++++++++++++++++++++++++++++ c/src/lib/libc/ioctl.c | 14 ++++- c/src/lib/libc/libio.h | 10 +-- c/src/lib/libc/tcdrain.c | 2 - c/src/lib/libc/tcflow.c | 2 - c/src/lib/libc/tcflush.c | 2 - c/src/lib/libc/tcgetattr.c | 2 - c/src/lib/libc/tcgetprgrp.c | 2 - c/src/lib/libc/tcsendbreak.c | 2 - c/src/lib/libc/tcsetattr.c | 2 - c/src/lib/libc/tcsetpgrp.c | 2 - c/src/libnetworking/sys/Makefile.am | 2 +- c/src/libnetworking/sys/filio.h | 3 + c/src/libnetworking/sys/ioccom.h | 75 ---------------------- 31 files changed, 304 insertions(+), 144 deletions(-) create mode 100644 c/src/exec/libcsupport/include/sys/ioccom.h create mode 100644 c/src/lib/include/ioccom.h create mode 100644 c/src/lib/include/sys/ioccom.h delete mode 100644 c/src/libnetworking/sys/ioccom.h (limited to 'c') diff --git a/c/src/exec/libcsupport/include/rtems/libio.h b/c/src/exec/libcsupport/include/rtems/libio.h index d5255769e6..5df9cccc24 100644 --- a/c/src/exec/libcsupport/include/rtems/libio.h +++ b/c/src/exec/libcsupport/include/rtems/libio.h @@ -22,6 +22,7 @@ #include #include #include +#include /* * Define data types which must be constructed using forward references. @@ -445,15 +446,6 @@ typedef int (*rtems_libio_lseek_t)( int whence ); -/* - * IOCTL values - */ - -#define RTEMS_IO_GET_ATTRIBUTES 1 -#define RTEMS_IO_SET_ATTRIBUTES 2 -#define RTEMS_IO_TCDRAIN 3 -#define FIONREAD 4 - /* * The following macros are used to build up the permissions sets * used to check permissions. These are similar in style to the diff --git a/c/src/exec/libcsupport/include/sys/filio.h b/c/src/exec/libcsupport/include/sys/filio.h index b82a649c0f..5a8b7e4bbb 100644 --- a/c/src/exec/libcsupport/include/sys/filio.h +++ b/c/src/exec/libcsupport/include/sys/filio.h @@ -44,6 +44,8 @@ #include +/* RTEMS defines all of these in sys/ioccom.h */ +#if 0 /* Generic file-descriptor ioctl's. */ #define FIOCLEX _IO('f', 1) /* set close on exec on fd */ #define FIONCLEX _IO('f', 2) /* remove close on exec */ @@ -52,5 +54,6 @@ #define FIOASYNC _IOW('f', 125, int) /* set/clear async i/o */ #define FIOSETOWN _IOW('f', 124, int) /* set owner */ #define FIOGETOWN _IOR('f', 123, int) /* get owner */ +#endif #endif /* !_SYS_FILIO_H_ */ diff --git a/c/src/exec/libcsupport/include/sys/ioccom.h b/c/src/exec/libcsupport/include/sys/ioccom.h new file mode 100644 index 0000000000..0d15d34b0e --- /dev/null +++ b/c/src/exec/libcsupport/include/sys/ioccom.h @@ -0,0 +1,93 @@ +/*- + * Copyright (c) 1982, 1986, 1990, 1993, 1994 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)ioccom.h 8.2 (Berkeley) 3/28/94 + * $Id$ + */ + +#ifndef _SYS_IOCCOM_H_ +#define _SYS_IOCCOM_H_ + +/* + * Ioctl's have the command encoded in the lower word, and the size of + * any in or out parameters in the upper word. The high 3 bits of the + * upper word are used to encode the in/out status of the parameter. + */ +#define IOCPARM_MASK 0x1fff /* parameter length, at most 13 bits */ +#define IOCPARM_LEN(x) (((x) >> 16) & IOCPARM_MASK) +#define IOCBASECMD(x) ((x) & ~(IOCPARM_MASK << 16)) +#define IOCGROUP(x) (((x) >> 8) & 0xff) + +#define IOCPARM_MAX PAGE_SIZE /* max size of ioctl, mult. of PAGE_SIZE */ +#define IOC_VOID 0x20000000 /* no parameters */ +#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(inout,group,num,len) \ + (inout | ((len & IOCPARM_MASK) << 16) | ((group) << 8) | (num)) +#define _IO(g,n) _IOC(IOC_VOID, (g), (n), 0) +#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)) + +/* + * IOCTL values + */ + +#define RTEMS_IO_GET_ATTRIBUTES 1 +#define RTEMS_IO_SET_ATTRIBUTES 2 +#define RTEMS_IO_TCDRAIN 3 + +/* copied from libnetworking/sys/filio.h and commented out there */ +/* Generic file-descriptor ioctl's. */ +#define FIOCLEX _IO('f', 1) /* set close on exec on fd */ +#define FIONCLEX _IO('f', 2) /* remove close on exec */ +#define FIONREAD _IOR('f', 127, int) /* get # bytes to read */ +#define FIONBIO _IOW('f', 126, int) /* set/clear non-blocking i/o */ +#define FIOASYNC _IOW('f', 125, int) /* set/clear async i/o */ +#define FIOSETOWN _IOW('f', 124, int) /* set owner */ +#define FIOGETOWN _IOR('f', 123, int) /* get owner */ + +#ifndef KERNEL + +#include + +__BEGIN_DECLS +int ioctl __P((int, int, ...)); +__END_DECLS + +#endif /* !KERNEL */ + +#endif /* !_SYS_IOCCOM_H_ */ diff --git a/c/src/exec/libcsupport/src/ioctl.c b/c/src/exec/libcsupport/src/ioctl.c index af986743dd..8d84a26a15 100644 --- a/c/src/exec/libcsupport/src/ioctl.c +++ b/c/src/exec/libcsupport/src/ioctl.c @@ -16,19 +16,27 @@ #include "libio_.h" +#include + int ioctl( - int fd, - unsigned32 command, - void * buffer + int fd, + int command, + ... ) { + va_list ap; rtems_status_code rc; rtems_libio_t *iop; + void *buffer; rtems_libio_check_fd( fd ); iop = rtems_libio_iop( fd ); rtems_libio_check_is_open(iop); + va_start(ap, command); + + buffer = va_arg(ap, void *); + /* * Now process the ioctl(). */ diff --git a/c/src/exec/libcsupport/src/tcdrain.c b/c/src/exec/libcsupport/src/tcdrain.c index 0c89a58115..31e026b9bc 100644 --- a/c/src/exec/libcsupport/src/tcdrain.c +++ b/c/src/exec/libcsupport/src/tcdrain.c @@ -20,8 +20,6 @@ #include /* #include */ -int ioctl(); - #include int tcdrain( diff --git a/c/src/exec/libcsupport/src/tcflow.c b/c/src/exec/libcsupport/src/tcflow.c index 723013c898..19b7a9a8fd 100644 --- a/c/src/exec/libcsupport/src/tcflow.c +++ b/c/src/exec/libcsupport/src/tcflow.c @@ -20,8 +20,6 @@ #include /* #include */ -int ioctl(); - #include int tcflow (int fd, int action) diff --git a/c/src/exec/libcsupport/src/tcflush.c b/c/src/exec/libcsupport/src/tcflush.c index 7d2f119aec..44616949a0 100644 --- a/c/src/exec/libcsupport/src/tcflush.c +++ b/c/src/exec/libcsupport/src/tcflush.c @@ -20,8 +20,6 @@ #include /* #include */ -int ioctl(); - #include int tcflush (int fd, int queue) diff --git a/c/src/exec/libcsupport/src/tcgetattr.c b/c/src/exec/libcsupport/src/tcgetattr.c index 388282d37a..8888acd3a9 100644 --- a/c/src/exec/libcsupport/src/tcgetattr.c +++ b/c/src/exec/libcsupport/src/tcgetattr.c @@ -20,8 +20,6 @@ #include /* #include */ -int ioctl(); - #include int tcgetattr( diff --git a/c/src/exec/libcsupport/src/tcgetprgrp.c b/c/src/exec/libcsupport/src/tcgetprgrp.c index 3f34b6ee13..3aca711fcf 100644 --- a/c/src/exec/libcsupport/src/tcgetprgrp.c +++ b/c/src/exec/libcsupport/src/tcgetprgrp.c @@ -20,8 +20,6 @@ #include /* #include */ -int ioctl(); - #include pid_t tcgetprgrp(int fd) diff --git a/c/src/exec/libcsupport/src/tcsendbreak.c b/c/src/exec/libcsupport/src/tcsendbreak.c index b367d26ece..b37729f40a 100644 --- a/c/src/exec/libcsupport/src/tcsendbreak.c +++ b/c/src/exec/libcsupport/src/tcsendbreak.c @@ -20,8 +20,6 @@ #include /* #include */ -int ioctl(); - #include int tcsendbreak ( int fd, int duration ) diff --git a/c/src/exec/libcsupport/src/tcsetattr.c b/c/src/exec/libcsupport/src/tcsetattr.c index 466d2c35fb..d9a8426a3d 100644 --- a/c/src/exec/libcsupport/src/tcsetattr.c +++ b/c/src/exec/libcsupport/src/tcsetattr.c @@ -20,8 +20,6 @@ #include /* #include */ -int ioctl(); - #include #include "libio_.h" diff --git a/c/src/exec/libcsupport/src/tcsetpgrp.c b/c/src/exec/libcsupport/src/tcsetpgrp.c index fa54df3b5f..fb0be34bc4 100644 --- a/c/src/exec/libcsupport/src/tcsetpgrp.c +++ b/c/src/exec/libcsupport/src/tcsetpgrp.c @@ -20,8 +20,6 @@ #include /* #include */ -int ioctl(); - #include int tcsetprgrp(int fd, pid_t pid) diff --git a/c/src/exec/libnetworking/sys/Makefile.am b/c/src/exec/libnetworking/sys/Makefile.am index 07888ddcc7..2e9c416fe7 100644 --- a/c/src/exec/libnetworking/sys/Makefile.am +++ b/c/src/exec/libnetworking/sys/Makefile.am @@ -4,7 +4,7 @@ AUTOMAKE_OPTIONS = foreign 1.4 -H_FILES = buf.h callout.h cdefs.h conf.h domain.h filio.h ioccom.h \ +H_FILES = buf.h callout.h cdefs.h conf.h domain.h filio.h \ ioctl.h kernel.h libkern.h malloc.h mbuf.h mount.h param.h proc.h \ protosw.h queue.h reboot.h resourcevar.h rtprio.h select.h signalvar.h \ socket.h socketvar.h sockio.h sysctl.h syslimits.h syslog.h systm.h \ diff --git a/c/src/lib/include/ioccom.h b/c/src/lib/include/ioccom.h new file mode 100644 index 0000000000..44db3343c8 --- /dev/null +++ b/c/src/lib/include/ioccom.h @@ -0,0 +1,80 @@ +/*- + * Copyright (c) 1982, 1986, 1990, 1993, 1994 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)ioccom.h 8.2 (Berkeley) 3/28/94 + * $Id$ + */ + +#ifndef _SYS_IOCCOM_H_ +#define _SYS_IOCCOM_H_ + +/* the definitions were moved to a common placed so they could be shared */ +#include + +#if 0 +/* + * Ioctl's have the command encoded in the lower word, and the size of + * any in or out parameters in the upper word. The high 3 bits of the + * upper word are used to encode the in/out status of the parameter. + */ +#define IOCPARM_MASK 0x1fff /* parameter length, at most 13 bits */ +#define IOCPARM_LEN(x) (((x) >> 16) & IOCPARM_MASK) +#define IOCBASECMD(x) ((x) & ~(IOCPARM_MASK << 16)) +#define IOCGROUP(x) (((x) >> 8) & 0xff) + +#define IOCPARM_MAX PAGE_SIZE /* max size of ioctl, mult. of PAGE_SIZE */ +#define IOC_VOID 0x20000000 /* no parameters */ +#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(inout,group,num,len) \ + (inout | ((len & IOCPARM_MASK) << 16) | ((group) << 8) | (num)) +#define _IO(g,n) _IOC(IOC_VOID, (g), (n), 0) +#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)) +#endif + +#ifndef KERNEL + +#include + +__BEGIN_DECLS +int ioctl __P((int, int, ...)); +__END_DECLS + +#endif /* !KERNEL */ + +#endif /* !_SYS_IOCCOM_H_ */ diff --git a/c/src/lib/include/rtems/libio.h b/c/src/lib/include/rtems/libio.h index d5255769e6..5df9cccc24 100644 --- a/c/src/lib/include/rtems/libio.h +++ b/c/src/lib/include/rtems/libio.h @@ -22,6 +22,7 @@ #include #include #include +#include /* * Define data types which must be constructed using forward references. @@ -445,15 +446,6 @@ typedef int (*rtems_libio_lseek_t)( int whence ); -/* - * IOCTL values - */ - -#define RTEMS_IO_GET_ATTRIBUTES 1 -#define RTEMS_IO_SET_ATTRIBUTES 2 -#define RTEMS_IO_TCDRAIN 3 -#define FIONREAD 4 - /* * The following macros are used to build up the permissions sets * used to check permissions. These are similar in style to the diff --git a/c/src/lib/include/sys/Makefile.am b/c/src/lib/include/sys/Makefile.am index aa8c375690..a5db29eafc 100644 --- a/c/src/lib/include/sys/Makefile.am +++ b/c/src/lib/include/sys/Makefile.am @@ -14,9 +14,9 @@ else NEWLIB_H_FILES += termios.h endif -H_FILES = utime.h $(NEWLIB_H_FILES) $(NETWORKING_H_FILES) +H_FILES = ioccom.h utime.h $(NEWLIB_H_FILES) $(NETWORKING_H_FILES) -noinst_HEADERS = utime.h termios.h ioctl.h +noinst_HEADERS = utime.h termios.h ioctl.h rtems_ioccom.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/sys \ $(H_FILES:%=$(PROJECT_INCLUDE)/sys/%) diff --git a/c/src/lib/include/sys/filio.h b/c/src/lib/include/sys/filio.h index b82a649c0f..5a8b7e4bbb 100644 --- a/c/src/lib/include/sys/filio.h +++ b/c/src/lib/include/sys/filio.h @@ -44,6 +44,8 @@ #include +/* RTEMS defines all of these in sys/ioccom.h */ +#if 0 /* Generic file-descriptor ioctl's. */ #define FIOCLEX _IO('f', 1) /* set close on exec on fd */ #define FIONCLEX _IO('f', 2) /* remove close on exec */ @@ -52,5 +54,6 @@ #define FIOASYNC _IOW('f', 125, int) /* set/clear async i/o */ #define FIOSETOWN _IOW('f', 124, int) /* set owner */ #define FIOGETOWN _IOR('f', 123, int) /* get owner */ +#endif #endif /* !_SYS_FILIO_H_ */ diff --git a/c/src/lib/include/sys/ioccom.h b/c/src/lib/include/sys/ioccom.h new file mode 100644 index 0000000000..0d15d34b0e --- /dev/null +++ b/c/src/lib/include/sys/ioccom.h @@ -0,0 +1,93 @@ +/*- + * Copyright (c) 1982, 1986, 1990, 1993, 1994 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)ioccom.h 8.2 (Berkeley) 3/28/94 + * $Id$ + */ + +#ifndef _SYS_IOCCOM_H_ +#define _SYS_IOCCOM_H_ + +/* + * Ioctl's have the command encoded in the lower word, and the size of + * any in or out parameters in the upper word. The high 3 bits of the + * upper word are used to encode the in/out status of the parameter. + */ +#define IOCPARM_MASK 0x1fff /* parameter length, at most 13 bits */ +#define IOCPARM_LEN(x) (((x) >> 16) & IOCPARM_MASK) +#define IOCBASECMD(x) ((x) & ~(IOCPARM_MASK << 16)) +#define IOCGROUP(x) (((x) >> 8) & 0xff) + +#define IOCPARM_MAX PAGE_SIZE /* max size of ioctl, mult. of PAGE_SIZE */ +#define IOC_VOID 0x20000000 /* no parameters */ +#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(inout,group,num,len) \ + (inout | ((len & IOCPARM_MASK) << 16) | ((group) << 8) | (num)) +#define _IO(g,n) _IOC(IOC_VOID, (g), (n), 0) +#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)) + +/* + * IOCTL values + */ + +#define RTEMS_IO_GET_ATTRIBUTES 1 +#define RTEMS_IO_SET_ATTRIBUTES 2 +#define RTEMS_IO_TCDRAIN 3 + +/* copied from libnetworking/sys/filio.h and commented out there */ +/* Generic file-descriptor ioctl's. */ +#define FIOCLEX _IO('f', 1) /* set close on exec on fd */ +#define FIONCLEX _IO('f', 2) /* remove close on exec */ +#define FIONREAD _IOR('f', 127, int) /* get # bytes to read */ +#define FIONBIO _IOW('f', 126, int) /* set/clear non-blocking i/o */ +#define FIOASYNC _IOW('f', 125, int) /* set/clear async i/o */ +#define FIOSETOWN _IOW('f', 124, int) /* set owner */ +#define FIOGETOWN _IOR('f', 123, int) /* get owner */ + +#ifndef KERNEL + +#include + +__BEGIN_DECLS +int ioctl __P((int, int, ...)); +__END_DECLS + +#endif /* !KERNEL */ + +#endif /* !_SYS_IOCCOM_H_ */ diff --git a/c/src/lib/libc/ioctl.c b/c/src/lib/libc/ioctl.c index af986743dd..8d84a26a15 100644 --- a/c/src/lib/libc/ioctl.c +++ b/c/src/lib/libc/ioctl.c @@ -16,19 +16,27 @@ #include "libio_.h" +#include + int ioctl( - int fd, - unsigned32 command, - void * buffer + int fd, + int command, + ... ) { + va_list ap; rtems_status_code rc; rtems_libio_t *iop; + void *buffer; rtems_libio_check_fd( fd ); iop = rtems_libio_iop( fd ); rtems_libio_check_is_open(iop); + va_start(ap, command); + + buffer = va_arg(ap, void *); + /* * Now process the ioctl(). */ diff --git a/c/src/lib/libc/libio.h b/c/src/lib/libc/libio.h index d5255769e6..5df9cccc24 100644 --- a/c/src/lib/libc/libio.h +++ b/c/src/lib/libc/libio.h @@ -22,6 +22,7 @@ #include #include #include +#include /* * Define data types which must be constructed using forward references. @@ -445,15 +446,6 @@ typedef int (*rtems_libio_lseek_t)( int whence ); -/* - * IOCTL values - */ - -#define RTEMS_IO_GET_ATTRIBUTES 1 -#define RTEMS_IO_SET_ATTRIBUTES 2 -#define RTEMS_IO_TCDRAIN 3 -#define FIONREAD 4 - /* * The following macros are used to build up the permissions sets * used to check permissions. These are similar in style to the diff --git a/c/src/lib/libc/tcdrain.c b/c/src/lib/libc/tcdrain.c index 0c89a58115..31e026b9bc 100644 --- a/c/src/lib/libc/tcdrain.c +++ b/c/src/lib/libc/tcdrain.c @@ -20,8 +20,6 @@ #include /* #include */ -int ioctl(); - #include int tcdrain( diff --git a/c/src/lib/libc/tcflow.c b/c/src/lib/libc/tcflow.c index 723013c898..19b7a9a8fd 100644 --- a/c/src/lib/libc/tcflow.c +++ b/c/src/lib/libc/tcflow.c @@ -20,8 +20,6 @@ #include /* #include */ -int ioctl(); - #include int tcflow (int fd, int action) diff --git a/c/src/lib/libc/tcflush.c b/c/src/lib/libc/tcflush.c index 7d2f119aec..44616949a0 100644 --- a/c/src/lib/libc/tcflush.c +++ b/c/src/lib/libc/tcflush.c @@ -20,8 +20,6 @@ #include /* #include */ -int ioctl(); - #include int tcflush (int fd, int queue) diff --git a/c/src/lib/libc/tcgetattr.c b/c/src/lib/libc/tcgetattr.c index 388282d37a..8888acd3a9 100644 --- a/c/src/lib/libc/tcgetattr.c +++ b/c/src/lib/libc/tcgetattr.c @@ -20,8 +20,6 @@ #include /* #include */ -int ioctl(); - #include int tcgetattr( diff --git a/c/src/lib/libc/tcgetprgrp.c b/c/src/lib/libc/tcgetprgrp.c index 3f34b6ee13..3aca711fcf 100644 --- a/c/src/lib/libc/tcgetprgrp.c +++ b/c/src/lib/libc/tcgetprgrp.c @@ -20,8 +20,6 @@ #include /* #include */ -int ioctl(); - #include pid_t tcgetprgrp(int fd) diff --git a/c/src/lib/libc/tcsendbreak.c b/c/src/lib/libc/tcsendbreak.c index b367d26ece..b37729f40a 100644 --- a/c/src/lib/libc/tcsendbreak.c +++ b/c/src/lib/libc/tcsendbreak.c @@ -20,8 +20,6 @@ #include /* #include */ -int ioctl(); - #include int tcsendbreak ( int fd, int duration ) diff --git a/c/src/lib/libc/tcsetattr.c b/c/src/lib/libc/tcsetattr.c index 466d2c35fb..d9a8426a3d 100644 --- a/c/src/lib/libc/tcsetattr.c +++ b/c/src/lib/libc/tcsetattr.c @@ -20,8 +20,6 @@ #include /* #include */ -int ioctl(); - #include #include "libio_.h" diff --git a/c/src/lib/libc/tcsetpgrp.c b/c/src/lib/libc/tcsetpgrp.c index fa54df3b5f..fb0be34bc4 100644 --- a/c/src/lib/libc/tcsetpgrp.c +++ b/c/src/lib/libc/tcsetpgrp.c @@ -20,8 +20,6 @@ #include /* #include */ -int ioctl(); - #include int tcsetprgrp(int fd, pid_t pid) diff --git a/c/src/libnetworking/sys/Makefile.am b/c/src/libnetworking/sys/Makefile.am index 07888ddcc7..2e9c416fe7 100644 --- a/c/src/libnetworking/sys/Makefile.am +++ b/c/src/libnetworking/sys/Makefile.am @@ -4,7 +4,7 @@ AUTOMAKE_OPTIONS = foreign 1.4 -H_FILES = buf.h callout.h cdefs.h conf.h domain.h filio.h ioccom.h \ +H_FILES = buf.h callout.h cdefs.h conf.h domain.h filio.h \ ioctl.h kernel.h libkern.h malloc.h mbuf.h mount.h param.h proc.h \ protosw.h queue.h reboot.h resourcevar.h rtprio.h select.h signalvar.h \ socket.h socketvar.h sockio.h sysctl.h syslimits.h syslog.h systm.h \ diff --git a/c/src/libnetworking/sys/filio.h b/c/src/libnetworking/sys/filio.h index b82a649c0f..5a8b7e4bbb 100644 --- a/c/src/libnetworking/sys/filio.h +++ b/c/src/libnetworking/sys/filio.h @@ -44,6 +44,8 @@ #include +/* RTEMS defines all of these in sys/ioccom.h */ +#if 0 /* Generic file-descriptor ioctl's. */ #define FIOCLEX _IO('f', 1) /* set close on exec on fd */ #define FIONCLEX _IO('f', 2) /* remove close on exec */ @@ -52,5 +54,6 @@ #define FIOASYNC _IOW('f', 125, int) /* set/clear async i/o */ #define FIOSETOWN _IOW('f', 124, int) /* set owner */ #define FIOGETOWN _IOR('f', 123, int) /* get owner */ +#endif #endif /* !_SYS_FILIO_H_ */ diff --git a/c/src/libnetworking/sys/ioccom.h b/c/src/libnetworking/sys/ioccom.h deleted file mode 100644 index fc22a54c6d..0000000000 --- a/c/src/libnetworking/sys/ioccom.h +++ /dev/null @@ -1,75 +0,0 @@ -/*- - * Copyright (c) 1982, 1986, 1990, 1993, 1994 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)ioccom.h 8.2 (Berkeley) 3/28/94 - * $Id$ - */ - -#ifndef _SYS_IOCCOM_H_ -#define _SYS_IOCCOM_H_ - -/* - * Ioctl's have the command encoded in the lower word, and the size of - * any in or out parameters in the upper word. The high 3 bits of the - * upper word are used to encode the in/out status of the parameter. - */ -#define IOCPARM_MASK 0x1fff /* parameter length, at most 13 bits */ -#define IOCPARM_LEN(x) (((x) >> 16) & IOCPARM_MASK) -#define IOCBASECMD(x) ((x) & ~(IOCPARM_MASK << 16)) -#define IOCGROUP(x) (((x) >> 8) & 0xff) - -#define IOCPARM_MAX PAGE_SIZE /* max size of ioctl, mult. of PAGE_SIZE */ -#define IOC_VOID 0x20000000 /* no parameters */ -#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(inout,group,num,len) \ - (inout | ((len & IOCPARM_MASK) << 16) | ((group) << 8) | (num)) -#define _IO(g,n) _IOC(IOC_VOID, (g), (n), 0) -#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 - -#include - -__BEGIN_DECLS -int ioctl __P((int, int, ...)); -__END_DECLS - -#endif /* !KERNEL */ - -#endif /* !_SYS_IOCCOM_H_ */ -- cgit v1.2.3