types.h revision 150559
11541Srgrimes/*-
214500Shsu * Copyright (c) 1982, 1986, 1991, 1993, 1994
31541Srgrimes *	The Regents of the University of California.  All rights reserved.
41541Srgrimes * (c) UNIX System Laboratories, Inc.
51541Srgrimes * All or some portions of this file are derived from material licensed
61541Srgrimes * to the University of California by American Telephone and Telegraph
71541Srgrimes * Co. or Unix System Laboratories, Inc. and are reproduced herein with
81541Srgrimes * the permission of UNIX System Laboratories, Inc.
91541Srgrimes *
101541Srgrimes * Redistribution and use in source and binary forms, with or without
111541Srgrimes * modification, are permitted provided that the following conditions
121541Srgrimes * are met:
131541Srgrimes * 1. Redistributions of source code must retain the above copyright
141541Srgrimes *    notice, this list of conditions and the following disclaimer.
151541Srgrimes * 2. Redistributions in binary form must reproduce the above copyright
161541Srgrimes *    notice, this list of conditions and the following disclaimer in the
171541Srgrimes *    documentation and/or other materials provided with the distribution.
181541Srgrimes * 4. Neither the name of the University nor the names of its contributors
191541Srgrimes *    may be used to endorse or promote products derived from this software
201541Srgrimes *    without specific prior written permission.
211541Srgrimes *
221541Srgrimes * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
231541Srgrimes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
241541Srgrimes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
251541Srgrimes * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
261541Srgrimes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
271541Srgrimes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
281541Srgrimes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
291541Srgrimes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
301541Srgrimes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
311541Srgrimes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
321541Srgrimes * SUCH DAMAGE.
331541Srgrimes *
3414500Shsu *	@(#)types.h	8.6 (Berkeley) 2/19/95
3550477Speter * $FreeBSD: head/sys/sys/types.h 150559 2005-09-26 07:45:35Z njl $
361541Srgrimes */
371541Srgrimes
381541Srgrimes#ifndef _SYS_TYPES_H_
391541Srgrimes#define	_SYS_TYPES_H_
401541Srgrimes
4133778Sbde#include <sys/cdefs.h>
4233778Sbde
431541Srgrimes/* Machine type dependent parameters. */
4490868Smike#include <machine/endian.h>
4593514Smike#include <sys/_types.h>
461541Srgrimes
47146824Srodrigc#include <sys/_pthreadtypes.h>
48146824Srodrigc
49104341Smike#if __BSD_VISIBLE
501541Srgrimestypedef	unsigned char	u_char;
511541Srgrimestypedef	unsigned short	u_short;
521541Srgrimestypedef	unsigned int	u_int;
531541Srgrimestypedef	unsigned long	u_long;
54128448Sobrien#ifndef _KERNEL
551541Srgrimestypedef	unsigned short	ushort;		/* Sys V compatibility */
561541Srgrimestypedef	unsigned int	uint;		/* Sys V compatibility */
571541Srgrimes#endif
58128448Sobrien#endif
591541Srgrimes
6093514Smike/*
6193514Smike * XXX POSIX sized integrals that should appear only in <sys/stdint.h>.
6293514Smike */
6393514Smike#ifndef _INT8_T_DECLARED
6493514Smiketypedef	__int8_t	int8_t;
6593514Smike#define	_INT8_T_DECLARED
6693514Smike#endif
6793514Smike
6893514Smike#ifndef _INT16_T_DECLARED
6993514Smiketypedef	__int16_t	int16_t;
7093514Smike#define	_INT16_T_DECLARED
7193514Smike#endif
7293514Smike
7393514Smike#ifndef _INT32_T_DECLARED
7493514Smiketypedef	__int32_t	int32_t;
7593514Smike#define	_INT32_T_DECLARED
7693514Smike#endif
7793514Smike
7893514Smike#ifndef _INT64_T_DECLARED
7993514Smiketypedef	__int64_t	int64_t;
8093514Smike#define	_INT64_T_DECLARED
8193514Smike#endif
8293514Smike
8393514Smike#ifndef _UINT8_T_DECLARED
8493514Smiketypedef	__uint8_t	uint8_t;
8593514Smike#define	_UINT8_T_DECLARED
8693514Smike#endif
8793514Smike
8893514Smike#ifndef _UINT16_T_DECLARED
8993514Smiketypedef	__uint16_t	uint16_t;
9093514Smike#define	_UINT16_T_DECLARED
9193514Smike#endif
9293514Smike
9393514Smike#ifndef _UINT32_T_DECLARED
9493514Smiketypedef	__uint32_t	uint32_t;
9593514Smike#define	_UINT32_T_DECLARED
9693514Smike#endif
9793514Smike
9893514Smike#ifndef _UINT64_T_DECLARED
9993514Smiketypedef	__uint64_t	uint64_t;
10093514Smike#define	_UINT64_T_DECLARED
10193514Smike#endif
10293514Smike
10393514Smike#ifndef _INTPTR_T_DECLARED
10493514Smiketypedef	__intptr_t	intptr_t;
10593514Smiketypedef	__uintptr_t	uintptr_t;
10693514Smike#define	_INTPTR_T_DECLARED
10793514Smike#endif
10893514Smike
109104341Smiketypedef __uint8_t	u_int8_t;	/* unsigned integrals (deprecated) */
11041927Sdttypedef __uint16_t	u_int16_t;
11141927Sdttypedef __uint32_t	u_int32_t;
11241927Sdttypedef __uint64_t	u_int64_t;
11341927Sdt
114104341Smiketypedef	__uint64_t	u_quad_t;	/* quads (deprecated) */
115104341Smiketypedef	__int64_t	quad_t;
1161541Srgrimestypedef	quad_t *	qaddr_t;
1171541Srgrimes
1181541Srgrimestypedef	char *		caddr_t;	/* core address */
11951901Smarceltypedef	__const char *	c_caddr_t;	/* core address, pointer to const */
12051901Smarceltypedef	__volatile char *v_caddr_t;	/* core address, pointer to volatile */
121110051Smike
122143952Sdas#ifndef _BLKSIZE_T_DECLARED
123143952Sdastypedef	__blksize_t	blksize_t;
124143952Sdas#define	_BLKSIZE_T_DECLARED
125143952Sdas#endif
126143952Sdas
127143952Sdas#ifndef _BLKCNT_T_DECLARED
128143952Sdastypedef	__blkcnt_t	blkcnt_t;
129143952Sdas#define	_BLKCNT_T_DECLARED
130143952Sdas#endif
131143952Sdas
132110051Smike#ifndef _CLOCK_T_DECLARED
133110051Smiketypedef	__clock_t	clock_t;
134110051Smike#define	_CLOCK_T_DECLARED
135110051Smike#endif
136110051Smike
137110051Smike#ifndef _CLOCKID_T_DECLARED
138110051Smiketypedef	__clockid_t	clockid_t;
139110051Smike#define	_CLOCKID_T_DECLARED
140110051Smike#endif
141110051Smike
142102227Smiketypedef	__critical_t	critical_t;	/* Critical section value */
143104341Smiketypedef	__int64_t	daddr_t;	/* disk address */
144110051Smike
145112745Smike#ifndef _DEV_T_DECLARED
146112745Smiketypedef	__dev_t		dev_t;		/* device number or struct cdev */
147112745Smike#define	_DEV_T_DECLARED
148112745Smike#endif
149112745Smike
150110051Smike#ifndef _FFLAGS_T_DECLARED
151110051Smiketypedef	__fflags_t	fflags_t;	/* file flags */
152110051Smike#define	_FFLAGS_T_DECLARED
153110051Smike#endif
154110051Smike
155130434Sdastypedef	__fixpt_t	fixpt_t;	/* fixed point number */
15691325Smike
157110051Smike#ifndef _FSBLKCNT_T_DECLARED		/* for statvfs() */
158110051Smiketypedef	__fsblkcnt_t	fsblkcnt_t;
159110051Smiketypedef	__fsfilcnt_t	fsfilcnt_t;
160110051Smike#define	_FSBLKCNT_T_DECLARED
161110051Smike#endif
162110051Smike
163102227Smike#ifndef _GID_T_DECLARED
164102227Smiketypedef	__gid_t		gid_t;		/* group id */
165102227Smike#define	_GID_T_DECLARED
16691325Smike#endif
16791325Smike
168105683Stjr#ifndef _IN_ADDR_T_DECLARED
169105683Stjrtypedef	__uint32_t	in_addr_t;	/* base type for internet address */
170105683Stjr#define	_IN_ADDR_T_DECLARED
171105683Stjr#endif
172105683Stjr
173105683Stjr#ifndef _IN_PORT_T_DECLARED
174105683Stjrtypedef	__uint16_t	in_port_t;
175105683Stjr#define	_IN_PORT_T_DECLARED
176105683Stjr#endif
177105683Stjr
178105650Smike#ifndef _ID_T_DECLARED
179105650Smiketypedef	__id_t		id_t;		/* can hold a uid_t or pid_t */
180105650Smike#define	_ID_T_DECLARED
181105650Smike#endif
182105650Smike
183111705Smike#ifndef _INO_T_DECLARED
184111705Smiketypedef	__ino_t		ino_t;		/* inode number */
185111705Smike#define	_INO_T_DECLARED
186111705Smike#endif
187102325Smike
188105142Smike#ifndef _KEY_T_DECLARED
189105142Smiketypedef	__key_t		key_t;		/* IPC key (for Sys V IPC) */
190105142Smike#define	_KEY_T_DECLARED
191105142Smike#endif
192105142Smike
193130735Smarcel#ifndef _LWPID_T_DECLARED
194130735Smarceltypedef	__lwpid_t	lwpid_t;	/* Thread ID (a.k.a. LWP) */
195130735Smarcel#define	_LWPID_T_DECLARED
196130735Smarcel#endif
197130735Smarcel
198102325Smike#ifndef _MODE_T_DECLARED
199102325Smiketypedef	__mode_t	mode_t;		/* permissions */
200102325Smike#define	_MODE_T_DECLARED
201102325Smike#endif
202102325Smike
203111705Smike#ifndef _NLINK_T_DECLARED
204111705Smiketypedef	__nlink_t	nlink_t;	/* link count */
205111705Smike#define	_NLINK_T_DECLARED
206111705Smike#endif
207102325Smike
208102325Smike#ifndef _OFF_T_DECLARED
209102227Smiketypedef	__off_t		off_t;		/* file offset */
210102325Smike#define	_OFF_T_DECLARED
211102325Smike#endif
212102325Smike
213103457Smike#ifndef _PID_T_DECLARED
214102227Smiketypedef	__pid_t		pid_t;		/* process id */
215103457Smike#define	_PID_T_DECLARED
216103457Smike#endif
217103457Smike
218102227Smiketypedef	__register_t	register_t;
219105650Smike
220105650Smike#ifndef _RLIM_T_DECLARED
221105650Smiketypedef	__rlim_t	rlim_t;		/* resource limit */
222105650Smike#define	_RLIM_T_DECLARED
223105650Smike#endif
224105650Smike
225102227Smiketypedef	__segsz_t	segsz_t;	/* segment size (in pages) */
226108190Smike
227110051Smike#ifndef _SIZE_T_DECLARED
228110051Smiketypedef	__size_t	size_t;
229110051Smike#define	_SIZE_T_DECLARED
230110051Smike#endif
231110051Smike
232110051Smike#ifndef _SSIZE_T_DECLARED
233110051Smiketypedef	__ssize_t	ssize_t;
234110051Smike#define	_SSIZE_T_DECLARED
235110051Smike#endif
236110051Smike
237108190Smike#ifndef _SUSECONDS_T_DECLARED
238108190Smiketypedef	__suseconds_t	suseconds_t;	/* microseconds (signed) */
239108190Smike#define	_SUSECONDS_T_DECLARED
240108190Smike#endif
241108190Smike
242110051Smike#ifndef _TIME_T_DECLARED
243110051Smiketypedef	__time_t	time_t;
244110051Smike#define	_TIME_T_DECLARED
245110051Smike#endif
246110051Smike
247110051Smike#ifndef _TIMER_T_DECLARED
248110051Smiketypedef	__timer_t	timer_t;
249110051Smike#define	_TIMER_T_DECLARED
250110051Smike#endif
251110051Smike
252102227Smiketypedef	__u_register_t	u_register_t;
25394363Smike
254102227Smike#ifndef _UID_T_DECLARED
255102227Smiketypedef	__uid_t		uid_t;		/* user id */
256102227Smike#define	_UID_T_DECLARED
25736735Sdfr#endif
25894363Smike
259108190Smike#ifndef _USECONDS_T_DECLARED
260108190Smiketypedef	__useconds_t	useconds_t;	/* microseconds (unsigned) */
261108190Smike#define	_USECONDS_T_DECLARED
262108190Smike#endif
263108190Smike
264102227Smiketypedef	__vm_offset_t	vm_offset_t;
265102227Smiketypedef	__vm_ooffset_t	vm_ooffset_t;
266112569Sjaketypedef	__vm_paddr_t	vm_paddr_t;
267102227Smiketypedef	__vm_pindex_t	vm_pindex_t;
268102227Smiketypedef	__vm_size_t	vm_size_t;
2691541Srgrimes
27055205Speter#ifdef _KERNEL
27115481Sbdetypedef	int		boolean_t;
272127239Smarceltypedef	__cpumask_t	cpumask_t;
273150559Snjltypedef	struct device	*device_t;
274102227Smiketypedef	__intfptr_t	intfptr_t;
275102421Smike
276102421Smike/*-
277102421Smike * XXX this is fixed width for historical reasons.  It should have had type
278102421Smike * __int_fast32_t.  Fixed-width types should not be used unless binary
279102421Smike * compatibility is essential.  Least-width types should be used even less
280102421Smike * since they provide smaller benefits.
281102421Smike * XXX should be MD.
282102421Smike * XXX this is bogus in -current, but still used for spl*().
283102421Smike */
284102421Smiketypedef	__uint32_t	intrmask_t;	/* Interrupt mask (spl, xxx_imask...) */
285102421Smike
286102227Smiketypedef	__uintfptr_t	uintfptr_t;
287104341Smiketypedef	__uint64_t	uoff_t;
28815481Sbdetypedef	struct vm_page	*vm_page_t;
28912642Sbde
29067708Sphk#define offsetof(type, field) __offsetof(type, field)
29167708Sphk
29255205Speter#endif /* !_KERNEL */
29346818Sphk
2941541Srgrimes/*
295103867Smike * The following are all things that really shouldn't exist in this header,
296103867Smike * since its purpose is to provide typedefs, not miscellaneous doodads.
2971541Srgrimes */
298103867Smike#if __BSD_VISIBLE
2991541Srgrimes
300103867Smike#include <sys/select.h>
3011541Srgrimes
302104341Smike#ifndef _KERNEL
30324896Sbde/*
304104341Smike * minor() gives a cookie instead of an index since we don't want to
305104341Smike * change the meanings of bits 0-15 or waste time and space shifting
306104341Smike * bits 16-31 for devices that don't use them.
307104341Smike */
308104341Smike#define major(x)        ((int)(((u_int)(x) >> 8)&0xff)) /* major number */
309104341Smike#define minor(x)        ((int)((x)&0xffff00ff))         /* minor number */
310104341Smike#endif /* !_KERNEL */
311104341Smike
312130640Sphk#define makedev(x,y)    ((dev_t)(((x) << 8) | (y)))     /* create dev_t */
313130640Sphk
314104341Smike/*
31524896Sbde * These declarations belong elsewhere, but are repeated here and in
31624896Sbde * <stdio.h> to give broken programs a better chance of working with
31724896Sbde * 64-bit off_t's.
31824896Sbde */
31955205Speter#ifndef _KERNEL
32024896Sbde__BEGIN_DECLS
32124896Sbde#ifndef _FTRUNCATE_DECLARED
32224896Sbde#define	_FTRUNCATE_DECLARED
32392719Salfredint	 ftruncate(int, off_t);
32424896Sbde#endif
32524896Sbde#ifndef _LSEEK_DECLARED
32624896Sbde#define	_LSEEK_DECLARED
32792719Salfredoff_t	 lseek(int, off_t, int);
32824896Sbde#endif
32924896Sbde#ifndef _MMAP_DECLARED
33024896Sbde#define	_MMAP_DECLARED
33192719Salfredvoid *	 mmap(void *, size_t, int, int, int, off_t);
33224896Sbde#endif
33324896Sbde#ifndef _TRUNCATE_DECLARED
33424896Sbde#define	_TRUNCATE_DECLARED
33592719Salfredint	 truncate(const char *, off_t);
33624896Sbde#endif
33724896Sbde__END_DECLS
33855205Speter#endif /* !_KERNEL */
33924896Sbde
34098271Swollman#endif /* __BSD_VISIBLE */
3411541Srgrimes
3421541Srgrimes#endif /* !_SYS_TYPES_H_ */
343