199767f8919635c4928607450d9e0abb932109ceToomas Soome/*-
199767f8919635c4928607450d9e0abb932109ceToomas Soome * Copyright (c) 1982, 1986, 1990, 1993, 1994
199767f8919635c4928607450d9e0abb932109ceToomas Soome * The Regents of the University of California. All rights reserved.
199767f8919635c4928607450d9e0abb932109ceToomas Soome *
199767f8919635c4928607450d9e0abb932109ceToomas Soome * Redistribution and use in source and binary forms, with or without
199767f8919635c4928607450d9e0abb932109ceToomas Soome * modification, are permitted provided that the following conditions
199767f8919635c4928607450d9e0abb932109ceToomas Soome * are met:
199767f8919635c4928607450d9e0abb932109ceToomas Soome * 1. Redistributions of source code must retain the above copyright
199767f8919635c4928607450d9e0abb932109ceToomas Soome * notice, this list of conditions and the following disclaimer.
199767f8919635c4928607450d9e0abb932109ceToomas Soome * 2. Redistributions in binary form must reproduce the above copyright
199767f8919635c4928607450d9e0abb932109ceToomas Soome * notice, this list of conditions and the following disclaimer in the
199767f8919635c4928607450d9e0abb932109ceToomas Soome * documentation and/or other materials provided with the distribution.
199767f8919635c4928607450d9e0abb932109ceToomas Soome * 4. Neither the name of the University nor the names of its contributors
199767f8919635c4928607450d9e0abb932109ceToomas Soome * may be used to endorse or promote products derived from this software
199767f8919635c4928607450d9e0abb932109ceToomas Soome * without specific prior written permission.
199767f8919635c4928607450d9e0abb932109ceToomas Soome *
199767f8919635c4928607450d9e0abb932109ceToomas Soome * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
199767f8919635c4928607450d9e0abb932109ceToomas Soome * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
199767f8919635c4928607450d9e0abb932109ceToomas Soome * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
199767f8919635c4928607450d9e0abb932109ceToomas Soome * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
199767f8919635c4928607450d9e0abb932109ceToomas Soome * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
199767f8919635c4928607450d9e0abb932109ceToomas Soome * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
199767f8919635c4928607450d9e0abb932109ceToomas Soome * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
199767f8919635c4928607450d9e0abb932109ceToomas Soome * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
199767f8919635c4928607450d9e0abb932109ceToomas Soome * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
199767f8919635c4928607450d9e0abb932109ceToomas Soome * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
199767f8919635c4928607450d9e0abb932109ceToomas Soome * SUCH DAMAGE.
199767f8919635c4928607450d9e0abb932109ceToomas Soome *
199767f8919635c4928607450d9e0abb932109ceToomas Soome * @(#)ioccom.h 8.2 (Berkeley) 3/28/94
199767f8919635c4928607450d9e0abb932109ceToomas Soome * $FreeBSD$
199767f8919635c4928607450d9e0abb932109ceToomas Soome */
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#ifndef _SYS_IOCCOM_H_
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define _SYS_IOCCOM_H_
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome/*
199767f8919635c4928607450d9e0abb932109ceToomas Soome * Ioctl's have the command encoded in the lower word, and the size of
199767f8919635c4928607450d9e0abb932109ceToomas Soome * any in or out parameters in the upper word. The high 3 bits of the
199767f8919635c4928607450d9e0abb932109ceToomas Soome * upper word are used to encode the in/out status of the parameter.
199767f8919635c4928607450d9e0abb932109ceToomas Soome */
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define IOCPARM_SHIFT 13 /* number of bits for ioctl size */
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define IOCPARM_MASK ((1 << IOCPARM_SHIFT) - 1) /* parameter length mask */
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define IOCPARM_LEN(x) (((x) >> 16) & IOCPARM_MASK)
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define IOCBASECMD(x) ((x) & ~(IOCPARM_MASK << 16))
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define IOCGROUP(x) (((x) >> 8) & 0xff)
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define IOCPARM_MAX (1 << IOCPARM_SHIFT) /* max size of ioctl */
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define IOC_VOID 0x20000000 /* no parameters */
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define IOC_OUT 0x40000000 /* copy out parameters */
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define IOC_IN 0x80000000 /* copy in parameters */
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define IOC_INOUT (IOC_IN|IOC_OUT)
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define IOC_DIRMASK (IOC_VOID|IOC_OUT|IOC_IN)
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define _IOC(inout,group,num,len) ((unsigned long) \
199767f8919635c4928607450d9e0abb932109ceToomas Soome ((inout) | (((len) & IOCPARM_MASK) << 16) | ((group) << 8) | (num)))
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define _IO(g,n) _IOC(IOC_VOID, (g), (n), 0)
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define _IOWINT(g,n) _IOC(IOC_VOID, (g), (n), sizeof(int))
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define _IOR(g,n,t) _IOC(IOC_OUT, (g), (n), sizeof(t))
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define _IOW(g,n,t) _IOC(IOC_IN, (g), (n), sizeof(t))
199767f8919635c4928607450d9e0abb932109ceToomas Soome/* this should be _IORW, but stdio got there first */
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define _IOWR(g,n,t) _IOC(IOC_INOUT, (g), (n), sizeof(t))
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#ifdef _KERNEL
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
199767f8919635c4928607450d9e0abb932109ceToomas Soome defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define IOCPARM_IVAL(x) ((int)(intptr_t)(void *)*(caddr_t *)(void *)(x))
199767f8919635c4928607450d9e0abb932109ceToomas Soome#endif
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#else
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#include <sys/cdefs.h>
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome__BEGIN_DECLS
199767f8919635c4928607450d9e0abb932109ceToomas Soomeint ioctl(int, unsigned long, ...);
199767f8919635c4928607450d9e0abb932109ceToomas Soome__END_DECLS
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#endif
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#endif /* !_SYS_IOCCOM_H_ */