RTEMS CPU Kit with SuperCore  4.10.99.0
sys/ioccom.h
Go to the documentation of this file.
00001 /*-
00002  * Copyright (c) 1982, 1986, 1990, 1993, 1994
00003  *      The Regents of the University of California.  All rights reserved.
00004  *
00005  * Redistribution and use in source and binary forms, with or without
00006  * modification, are permitted provided that the following conditions
00007  * are met:
00008  * 1. Redistributions of source code must retain the above copyright
00009  *    notice, this list of conditions and the following disclaimer.
00010  * 2. Redistributions in binary form must reproduce the above copyright
00011  *    notice, this list of conditions and the following disclaimer in the
00012  *    documentation and/or other materials provided with the distribution.
00013  * 4. Neither the name of the University nor the names of its contributors
00014  *    may be used to endorse or promote products derived from this software
00015  *    without specific prior written permission.
00016  *
00017  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
00027  * SUCH DAMAGE.
00028  *
00029  *      @(#)ioccom.h    8.2 (Berkeley) 3/28/94
00030  * $FreeBSD$
00031  */
00032 
00033 #ifndef _SYS_IOCCOM_H_
00034 #define _SYS_IOCCOM_H_
00035 
00036 #include <sys/types.h>
00037 #include <stdint.h>
00038 
00039 typedef uint32_t ioctl_command_t;
00040 
00041 /*
00042  * Ioctl's have the command encoded in the lower word, and the size of
00043  * any in or out parameters in the upper word.  The high 3 bits of the
00044  * upper word are used to encode the in/out status of the parameter.
00045  */
00046 #define IOCPARM_SHIFT   13              /* number of bits for ioctl size */
00047 #define IOCPARM_MASK    ((1 << IOCPARM_SHIFT) - 1) /* parameter length mask */
00048 #define IOCPARM_LEN(x)  (((x) >> 16) & IOCPARM_MASK)
00049 #define IOCBASECMD(x)   ((x) & ~(IOCPARM_MASK << 16))
00050 #define IOCGROUP(x)     (((x) >> 8) & 0xff)
00051 
00052 #define IOCPARM_MAX     (1 << IOCPARM_SHIFT) /* max size of ioctl */
00053 #define IOC_VOID        0x20000000      /* no parameters */
00054 #define IOC_OUT         0x40000000      /* copy out parameters */
00055 #define IOC_IN          0x80000000      /* copy in parameters */
00056 #define IOC_INOUT       (IOC_IN|IOC_OUT)
00057 #define IOC_DIRMASK     (IOC_VOID|IOC_OUT|IOC_IN)
00058 
00059 #define _IOC(inout,group,num,len) \
00060         ((ioctl_command_t) \
00061                 ((ioctl_command_t) (inout) \
00062                         | (((ioctl_command_t) (len) & IOCPARM_MASK) << 16) \
00063                         | ((ioctl_command_t) (group) << 8) \
00064                         | (ioctl_command_t) (num)))
00065 #define _IO(g,n)        _IOC(IOC_VOID,  (g), (n), 0)
00066 #define _IOWINT(g,n)    _IOC(IOC_VOID,  (g), (n), sizeof(int))
00067 #define _IOR(g,n,t)     _IOC(IOC_OUT,   (g), (n), sizeof(t))
00068 #define _IOW(g,n,t)     _IOC(IOC_IN,    (g), (n), sizeof(t))
00069 /* this should be _IORW, but stdio got there first */
00070 #define _IOWR(g,n,t)    _IOC(IOC_INOUT, (g), (n), sizeof(t))
00071 
00072 /*
00073  *  IOCTL values
00074  */
00075 
00076 #define       RTEMS_IO_GET_ATTRIBUTES 1
00077 #define       RTEMS_IO_SET_ATTRIBUTES 2
00078 #define       RTEMS_IO_TCDRAIN        3
00079 #define       RTEMS_IO_RCVWAKEUP      4
00080 #define       RTEMS_IO_SNDWAKEUP      5
00081 #define       RTEMS_IO_TCFLUSH        6
00082 
00083 /* copied from libnetworking/sys/filio.h and commented out there */
00084 /* Generic file-descriptor ioctl's. */
00085 #define FIOCLEX          _IO('f', 1)            /* set close on exec on fd */
00086 #define FIONCLEX         _IO('f', 2)            /* remove close on exec */
00087 #define FIONREAD        _IOR('f', 127, int)     /* get # bytes to read */
00088 #define FIONBIO         _IOW('f', 126, int)     /* set/clear non-blocking i/o */
00089 #define FIOASYNC        _IOW('f', 125, int)     /* set/clear async i/o */
00090 #define FIOSETOWN       _IOW('f', 124, int)     /* set owner */
00091 #define FIOGETOWN       _IOR('f', 123, int)     /* get owner */
00092 
00093 #ifdef _KERNEL
00094 
00095 #if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
00096     defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
00097 #define IOCPARM_IVAL(x) ((int)(intptr_t)(void *)*(caddr_t *)(void *)(x))
00098 #endif
00099 
00100 #else
00101 
00102 #include <sys/cdefs.h>
00103 
00104 __BEGIN_DECLS
00105 int     ioctl(int, ioctl_command_t, ...);
00106 __END_DECLS
00107 
00108 #endif
00109 
00110 #endif /* !_SYS_IOCCOM_H_ */