6811333 Remove prom_printf() message in emlxs driver
[opensolaris.git] / usr / src / uts / common / sys / types.h
blobc926ba7ffcb6cfd29787ca4f04620cd5c5f3d6db
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
21 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
22 /* All Rights Reserved */
26 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
27 * Use is subject to license terms.
30 #ifndef _SYS_TYPES_H
31 #define _SYS_TYPES_H
33 #include <sys/feature_tests.h>
34 #include <sys/isa_defs.h>
37 * Machine dependent definitions moved to <sys/machtypes.h>.
39 #include <sys/machtypes.h>
42 * Include fixed width type declarations proposed by the ISO/JTC1/SC22/WG14 C
43 * committee's working draft for the revision of the current ISO C standard,
44 * ISO/IEC 9899:1990 Programming language - C. These are not currently
45 * required by any standard but constitute a useful, general purpose set
46 * of type definitions which is namespace clean with respect to all standards.
48 #ifdef _KERNEL
49 #include <sys/inttypes.h>
50 #else /* _KERNEL */
51 #include <sys/int_types.h>
52 #endif /* _KERNEL */
54 #if defined(_KERNEL) || defined(_SYSCALL32)
55 #include <sys/types32.h>
56 #endif
58 #ifdef __cplusplus
59 extern "C" {
60 #endif
63 * Strictly conforming ANSI C environments prior to the 1999
64 * revision of the C Standard (ISO/IEC 9899:1999) do not have
65 * the long long data type.
67 #if defined(_LONGLONG_TYPE)
68 typedef long long longlong_t;
69 typedef unsigned long long u_longlong_t;
70 #else
71 /* used to reserve space and generate alignment */
72 typedef union {
73 double _d;
74 int32_t _l[2];
75 } longlong_t;
76 typedef union {
77 double _d;
78 uint32_t _l[2];
79 } u_longlong_t;
80 #endif /* defined(_LONGLONG_TYPE) */
83 * These types (t_{u}scalar_t) exist because the XTI/TPI/DLPI standards had
84 * to use them instead of int32_t and uint32_t because DEC had
85 * shipped 64-bit wide.
87 #if defined(_LP64) || defined(_I32LPx)
88 typedef int32_t t_scalar_t;
89 typedef uint32_t t_uscalar_t;
90 #else
91 typedef long t_scalar_t; /* historical versions */
92 typedef unsigned long t_uscalar_t;
93 #endif /* defined(_LP64) || defined(_I32LPx) */
96 * POSIX Extensions
98 typedef unsigned char uchar_t;
99 typedef unsigned short ushort_t;
100 typedef unsigned int uint_t;
101 typedef unsigned long ulong_t;
103 typedef char *caddr_t; /* ?<core address> type */
104 typedef long daddr_t; /* <disk address> type */
105 typedef short cnt_t; /* ?<count> type */
107 #if !defined(_PTRDIFF_T) || __cplusplus >= 199711L
108 #define _PTRDIFF_T
109 #if defined(_LP64) || defined(_I32LPx)
110 typedef long ptrdiff_t; /* pointer difference */
111 #else
112 typedef int ptrdiff_t; /* (historical version) */
113 #endif
114 #endif
117 * VM-related types
119 typedef ulong_t pfn_t; /* page frame number */
120 typedef ulong_t pgcnt_t; /* number of pages */
121 typedef long spgcnt_t; /* signed number of pages */
123 typedef uchar_t use_t; /* use count for swap. */
124 typedef short sysid_t;
125 typedef short index_t;
126 typedef void *timeout_id_t; /* opaque handle from timeout(9F) */
127 typedef void *bufcall_id_t; /* opaque handle from bufcall(9F) */
130 * The size of off_t and related types depends on the setting of
131 * _FILE_OFFSET_BITS. (Note that other system headers define other types
132 * related to those defined here.)
134 * If _LARGEFILE64_SOURCE is defined, variants of these types that are
135 * explicitly 64 bits wide become available.
137 #ifndef _OFF_T
138 #define _OFF_T
140 #if defined(_LP64) || _FILE_OFFSET_BITS == 32
141 typedef long off_t; /* offsets within files */
142 #elif _FILE_OFFSET_BITS == 64
143 typedef longlong_t off_t; /* offsets within files */
144 #endif
146 #if defined(_LARGEFILE64_SOURCE)
147 #ifdef _LP64
148 typedef off_t off64_t; /* offsets within files */
149 #else
150 typedef longlong_t off64_t; /* offsets within files */
151 #endif
152 #endif /* _LARGEFILE64_SOURCE */
154 #endif /* _OFF_T */
156 #if defined(_LP64) || _FILE_OFFSET_BITS == 32
157 typedef ulong_t ino_t; /* expanded inode type */
158 typedef long blkcnt_t; /* count of file blocks */
159 typedef ulong_t fsblkcnt_t; /* count of file system blocks */
160 typedef ulong_t fsfilcnt_t; /* count of files */
161 #elif _FILE_OFFSET_BITS == 64
162 typedef u_longlong_t ino_t; /* expanded inode type */
163 typedef longlong_t blkcnt_t; /* count of file blocks */
164 typedef u_longlong_t fsblkcnt_t; /* count of file system blocks */
165 typedef u_longlong_t fsfilcnt_t; /* count of files */
166 #endif
168 #if defined(_LARGEFILE64_SOURCE)
169 #ifdef _LP64
170 typedef ino_t ino64_t; /* expanded inode type */
171 typedef blkcnt_t blkcnt64_t; /* count of file blocks */
172 typedef fsblkcnt_t fsblkcnt64_t; /* count of file system blocks */
173 typedef fsfilcnt_t fsfilcnt64_t; /* count of files */
174 #else
175 typedef u_longlong_t ino64_t; /* expanded inode type */
176 typedef longlong_t blkcnt64_t; /* count of file blocks */
177 typedef u_longlong_t fsblkcnt64_t; /* count of file system blocks */
178 typedef u_longlong_t fsfilcnt64_t; /* count of files */
179 #endif
180 #endif /* _LARGEFILE64_SOURCE */
182 #ifdef _LP64
183 typedef int blksize_t; /* used for block sizes */
184 #else
185 typedef long blksize_t; /* used for block sizes */
186 #endif
188 #if defined(__XOPEN_OR_POSIX)
189 typedef enum { _B_FALSE, _B_TRUE } boolean_t;
190 #else
191 typedef enum { B_FALSE, B_TRUE } boolean_t;
192 #ifdef _KERNEL
193 #define VALID_BOOLEAN(x) (((x) == B_FALSE) || ((x) == B_TRUE))
194 #define VOID2BOOLEAN(x) (((uintptr_t)(x) == 0) ? B_FALSE : B_TRUE)
195 #endif /* _KERNEL */
196 #endif /* defined(__XOPEN_OR_POSIX) */
198 #ifdef _KERNEL
199 #define BOOLEAN2VOID(x) ((x) ? 1 : 0)
200 #endif /* _KERNEL */
203 * The {u,}pad64_t types can be used in structures such that those structures
204 * may be accessed by code produced by compilation environments which don't
205 * support a 64 bit integral datatype. The intention is not to allow
206 * use of these fields in such environments, but to maintain the alignment
207 * and offsets of the structure.
209 * Similar comments for {u,}pad128_t.
211 * Note that these types do NOT generate any stronger alignment constraints
212 * than those available in the underlying ABI. See <sys/isa_defs.h>
214 #if defined(_INT64_TYPE)
215 typedef int64_t pad64_t;
216 typedef uint64_t upad64_t;
217 #else
218 typedef union {
219 double _d;
220 int32_t _l[2];
221 } pad64_t;
223 typedef union {
224 double _d;
225 uint32_t _l[2];
226 } upad64_t;
227 #endif
229 typedef union {
230 long double _q;
231 int32_t _l[4];
232 } pad128_t;
234 typedef union {
235 long double _q;
236 uint32_t _l[4];
237 } upad128_t;
239 typedef longlong_t offset_t;
240 typedef u_longlong_t u_offset_t;
241 typedef u_longlong_t len_t;
242 typedef u_longlong_t diskaddr_t;
243 #if (defined(_KERNEL) || defined(_KMEMUSER) || defined(_BOOT))
244 typedef uint64_t paddr_t;
245 #endif
248 * Definitions remaining from previous partial support for 64-bit file
249 * offsets. This partial support for devices greater than 2gb requires
250 * compiler support for long long.
252 #ifdef _LONG_LONG_LTOH
253 typedef union {
254 offset_t _f; /* Full 64 bit offset value */
255 struct {
256 int32_t _l; /* lower 32 bits of offset value */
257 int32_t _u; /* upper 32 bits of offset value */
258 } _p;
259 } lloff_t;
260 #endif
262 #ifdef _LONG_LONG_HTOL
263 typedef union {
264 offset_t _f; /* Full 64 bit offset value */
265 struct {
266 int32_t _u; /* upper 32 bits of offset value */
267 int32_t _l; /* lower 32 bits of offset value */
268 } _p;
269 } lloff_t;
270 #endif
272 #ifdef _LONG_LONG_LTOH
273 typedef union {
274 longlong_t _f; /* Full 64 bit disk address value */
275 struct {
276 int32_t _l; /* lower 32 bits of disk address value */
277 int32_t _u; /* upper 32 bits of disk address value */
278 } _p;
279 } lldaddr_t;
280 #endif
282 #ifdef _LONG_LONG_HTOL
283 typedef union {
284 longlong_t _f; /* Full 64 bit disk address value */
285 struct {
286 int32_t _u; /* upper 32 bits of disk address value */
287 int32_t _l; /* lower 32 bits of disk address value */
288 } _p;
289 } lldaddr_t;
290 #endif
292 typedef uint_t k_fltset_t; /* kernel fault set type */
295 * The following type is for various kinds of identifiers. The
296 * actual type must be the same for all since some system calls
297 * (such as sigsend) take arguments that may be any of these
298 * types. The enumeration type idtype_t defined in sys/procset.h
299 * is used to indicate what type of id is being specified --
300 * a process id, process group id, session id, scheduling class id,
301 * user id, group id, project id, task id or zone id.
303 #if defined(_LP64) || defined(_I32LPx)
304 typedef int id_t;
305 #else
306 typedef long id_t; /* (historical version) */
307 #endif
309 typedef id_t lgrp_id_t; /* lgroup ID */
312 * Type useconds_t is an unsigned integral type capable of storing
313 * values at least in the range of zero to 1,000,000.
315 typedef uint_t useconds_t; /* Time, in microseconds */
317 #ifndef _SUSECONDS_T
318 #define _SUSECONDS_T
319 typedef long suseconds_t; /* signed # of microseconds */
320 #endif /* _SUSECONDS_T */
323 * Typedefs for dev_t components.
325 #if defined(_LP64) || defined(_I32LPx)
326 typedef uint_t major_t; /* major part of device number */
327 typedef uint_t minor_t; /* minor part of device number */
328 #else
329 typedef ulong_t major_t; /* (historical version) */
330 typedef ulong_t minor_t; /* (historical version) */
331 #endif
334 * The data type of a thread priority.
336 typedef short pri_t;
339 * The data type for a CPU flags field. (Can be extended to larger unsigned
340 * types, if needed, limited by ability to update atomically.)
342 typedef ushort_t cpu_flag_t;
345 * For compatibility reasons the following typedefs (prefixed o_)
346 * can't grow regardless of the EFT definition. Although,
347 * applications should not explicitly use these typedefs
348 * they may be included via a system header definition.
349 * WARNING: These typedefs may be removed in a future
350 * release.
351 * ex. the definitions in s5inode.h (now obsoleted)
352 * remained small to preserve compatibility
353 * in the S5 file system type.
355 typedef ushort_t o_mode_t; /* old file attribute type */
356 typedef short o_dev_t; /* old device type */
357 typedef ushort_t o_uid_t; /* old UID type */
358 typedef o_uid_t o_gid_t; /* old GID type */
359 typedef short o_nlink_t; /* old file link type */
360 typedef short o_pid_t; /* old process id type */
361 typedef ushort_t o_ino_t; /* old inode type */
365 * POSIX and XOPEN Declarations
367 typedef int key_t; /* IPC key type */
368 #if defined(_LP64) || defined(_I32LPx)
369 typedef uint_t mode_t; /* file attribute type */
370 #else
371 typedef ulong_t mode_t; /* (historical version) */
372 #endif
374 #ifndef _UID_T
375 #define _UID_T
376 typedef unsigned int uid_t; /* UID type */
377 #endif /* _UID_T */
379 typedef uid_t gid_t; /* GID type */
381 typedef id_t taskid_t;
382 typedef id_t projid_t;
383 typedef id_t poolid_t;
384 typedef id_t zoneid_t;
385 typedef id_t ctid_t;
388 * POSIX definitions are same as defined in thread.h and synch.h.
389 * Any changes made to here should be reflected in corresponding
390 * files as described in comments.
392 typedef uint_t pthread_t; /* = thread_t in thread.h */
393 typedef uint_t pthread_key_t; /* = thread_key_t in thread.h */
395 /* "Magic numbers" tagging synchronization object types */
396 #define _MUTEX_MAGIC 0x4d58 /* "MX" */
397 #define _SEMA_MAGIC 0x534d /* "SM" */
398 #define _COND_MAGIC 0x4356 /* "CV" */
399 #define _RWL_MAGIC 0x5257 /* "RW" */
401 typedef struct _pthread_mutex { /* = mutex_t in synch.h */
402 struct {
403 uint16_t __pthread_mutex_flag1;
404 uint8_t __pthread_mutex_flag2;
405 uint8_t __pthread_mutex_ceiling;
406 uint16_t __pthread_mutex_type;
407 uint16_t __pthread_mutex_magic;
408 } __pthread_mutex_flags;
409 union {
410 struct {
411 uint8_t __pthread_mutex_pad[8];
412 } __pthread_mutex_lock64;
413 struct {
414 uint32_t __pthread_ownerpid;
415 uint32_t __pthread_lockword;
416 } __pthread_mutex_lock32;
417 upad64_t __pthread_mutex_owner64;
418 } __pthread_mutex_lock;
419 upad64_t __pthread_mutex_data;
420 } pthread_mutex_t;
422 typedef struct _pthread_cond { /* = cond_t in synch.h */
423 struct {
424 uint8_t __pthread_cond_flag[4];
425 uint16_t __pthread_cond_type;
426 uint16_t __pthread_cond_magic;
427 } __pthread_cond_flags;
428 upad64_t __pthread_cond_data;
429 } pthread_cond_t;
432 * UNIX 98 Extension
434 typedef struct _pthread_rwlock { /* = rwlock_t in synch.h */
435 int32_t __pthread_rwlock_readers;
436 uint16_t __pthread_rwlock_type;
437 uint16_t __pthread_rwlock_magic;
438 pthread_mutex_t __pthread_rwlock_mutex;
439 pthread_cond_t __pthread_rwlock_readercv;
440 pthread_cond_t __pthread_rwlock_writercv;
441 } pthread_rwlock_t;
444 * SUSV3
446 typedef struct {
447 uint32_t __pthread_barrier_count;
448 uint32_t __pthread_barrier_current;
449 upad64_t __pthread_barrier_cycle;
450 upad64_t __pthread_barrier_reserved;
451 pthread_mutex_t __pthread_barrier_lock;
452 pthread_cond_t __pthread_barrier_cond;
453 } pthread_barrier_t;
455 typedef pthread_mutex_t pthread_spinlock_t;
458 * attributes for threads, dynamically allocated by library
460 typedef struct _pthread_attr {
461 void *__pthread_attrp;
462 } pthread_attr_t;
465 * attributes for mutex, dynamically allocated by library
467 typedef struct _pthread_mutexattr {
468 void *__pthread_mutexattrp;
469 } pthread_mutexattr_t;
472 * attributes for cond, dynamically allocated by library
474 typedef struct _pthread_condattr {
475 void *__pthread_condattrp;
476 } pthread_condattr_t;
479 * pthread_once
481 typedef struct _once {
482 upad64_t __pthread_once_pad[4];
483 } pthread_once_t;
486 * UNIX 98 Extensions
487 * attributes for rwlock, dynamically allocated by library
489 typedef struct _pthread_rwlockattr {
490 void *__pthread_rwlockattrp;
491 } pthread_rwlockattr_t;
494 * SUSV3
495 * attributes for pthread_barrier_t, dynamically allocated by library
497 typedef struct {
498 void *__pthread_barrierattrp;
499 } pthread_barrierattr_t;
501 typedef ulong_t dev_t; /* expanded device type */
503 #if defined(_LP64) || defined(_I32LPx)
504 typedef uint_t nlink_t; /* file link type */
505 typedef int pid_t; /* process id type */
506 #else
507 typedef ulong_t nlink_t; /* (historical version) */
508 typedef long pid_t; /* (historical version) */
509 #endif
511 #if !defined(_SIZE_T) || __cplusplus >= 199711L
512 #define _SIZE_T
513 #if defined(_LP64) || defined(_I32LPx)
514 typedef ulong_t size_t; /* size of something in bytes */
515 #else
516 typedef uint_t size_t; /* (historical version) */
517 #endif
518 #endif /* _SIZE_T */
520 #ifndef _SSIZE_T
521 #define _SSIZE_T
522 #if defined(_LP64) || defined(_I32LPx)
523 typedef long ssize_t; /* size of something in bytes or -1 */
524 #else
525 typedef int ssize_t; /* (historical version) */
526 #endif
527 #endif /* _SSIZE_T */
529 #if !defined(_TIME_T) || __cplusplus >= 199711L
530 #define _TIME_T
531 typedef long time_t; /* time of day in seconds */
532 #endif /* _TIME_T */
534 #if !defined(_CLOCK_T) || __cplusplus >= 199711L
535 #define _CLOCK_T
536 typedef long clock_t; /* relative time in a specified resolution */
537 #endif /* ifndef _CLOCK_T */
539 #ifndef _CLOCKID_T
540 #define _CLOCKID_T
541 typedef int clockid_t; /* clock identifier type */
542 #endif /* ifndef _CLOCKID_T */
544 #ifndef _TIMER_T
545 #define _TIMER_T
546 typedef int timer_t; /* timer identifier type */
547 #endif /* ifndef _TIMER_T */
549 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__)
551 /* BEGIN CSTYLED */
552 typedef unsigned char unchar;
553 typedef unsigned short ushort;
554 typedef unsigned int uint;
555 typedef unsigned long ulong;
556 /* END CSTYLED */
558 #if defined(_KERNEL)
560 #define SHRT_MIN (-32768) /* min value of a "short int" */
561 #define SHRT_MAX 32767 /* max value of a "short int" */
562 #define USHRT_MAX 65535 /* max of "unsigned short int" */
563 #define INT_MIN (-2147483647-1) /* min value of an "int" */
564 #define INT_MAX 2147483647 /* max value of an "int" */
565 #define UINT_MAX 4294967295U /* max value of an "unsigned int" */
566 #if defined(_LP64)
567 #define LONG_MIN (-9223372036854775807L-1L)
568 /* min value of a "long int" */
569 #define LONG_MAX 9223372036854775807L
570 /* max value of a "long int" */
571 #define ULONG_MAX 18446744073709551615UL
572 /* max of "unsigned long int" */
573 #else /* _ILP32 */
574 #define LONG_MIN (-2147483647L-1L)
575 /* min value of a "long int" */
576 #define LONG_MAX 2147483647L /* max value of a "long int" */
577 #define ULONG_MAX 4294967295UL /* max of "unsigned long int" */
578 #endif
580 #define LLONG_MIN (-9223372036854775807LL-1LL)
581 /* min of "long long int" */
582 #define LLONG_MAX 9223372036854775807LL
583 /* max of "long long int" */
584 #define ULLONG_MAX 18446744073709551615ULL
585 /* max of "unsigned long long int" */
587 #endif /* defined(_KERNEL) */
589 #define P_MYPID ((pid_t)0)
592 * The following is the value of type id_t to use to indicate the
593 * caller's current id. See procset.h for the type idtype_t
594 * which defines which kind of id is being specified.
596 #define P_MYID (-1)
597 #define NOPID (pid_t)(-1)
599 #ifndef NODEV
600 #define NODEV (dev_t)(-1l)
601 #ifdef _SYSCALL32
602 #define NODEV32 (dev32_t)(-1)
603 #endif /* _SYSCALL32 */
604 #endif /* NODEV */
607 * The following value of type pfn_t is used to indicate
608 * invalid page frame number.
610 #define PFN_INVALID ((pfn_t)-1)
611 #define PFN_SUSPENDED ((pfn_t)-2)
613 /* BEGIN CSTYLED */
614 typedef unsigned char u_char;
615 typedef unsigned short u_short;
616 typedef unsigned int u_int;
617 typedef unsigned long u_long;
618 typedef struct _quad { int val[2]; } quad_t; /* used by UFS */
619 typedef quad_t quad; /* used by UFS */
620 /* END CSTYLED */
623 * Nested include for BSD/sockets source compatibility.
624 * (The select macros used to be defined here).
626 #include <sys/select.h>
628 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */
631 * _VOID was defined to be either void or char but this is not
632 * required because previous SunOS compilers have accepted the void
633 * type. However, because many system header and source files use the
634 * void keyword, the volatile keyword, and ANSI C function prototypes,
635 * non-ANSI compilers cannot compile the system anyway. The _VOID macro
636 * should therefore not be used and remains for source compatibility
637 * only.
639 /* CSTYLED */
640 #define _VOID void
642 #ifdef __cplusplus
644 #endif
646 #endif /* _SYS_TYPES_H */