1/* 2 * CDDL HEADER START 3 * 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. 7 * 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. 12 * 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] 18 * 19 * CDDL HEADER END 20 */ 21/* 22 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26/* 27 * Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T 28 * All Rights Reserved 29 */ 30 31/* 32 * University Copyright- Copyright (c) 1982, 1986, 1988 33 * The Regents of the University of California 34 * All Rights Reserved 35 * 36 * University Acknowledgment- Portions of this document are derived from 37 * software developed by the University of California, Berkeley, and its 38 * contributors. 39 */ 40 41#ifndef _SYS_TYPES_H 42#define _SYS_TYPES_H 43 44/* 45 * Include fixed width type declarations proposed by the ISO/JTC1/SC22/WG14 C 46 * committee's working draft for the revision of the current ISO C standard, 47 * ISO/IEC 9899:1990 Programming language - C. These are not currently 48 * required by any standard but constitute a useful, general purpose set 49 * of type definitions which is namespace clean with respect to all standards. 50 */ 51 52#include <sys/int_types.h> 53#include <sys/feature_tests.h> 54 55#ifdef __cplusplus 56extern "C" { 57#endif 58 59#ifndef _ASM 60 61/* From SunOS types.h */ 62#if defined(mc68000) 63typedef struct _physadr { short r[1]; } *physadr; 64typedef struct _label { int val[13]; } label_t; 65#elif defined(__i386) 66typedef struct _physadr { short r[1]; } *physadr; 67typedef struct _label { int val[8]; } label_t; 68#elif defined(__sparc) 69typedef struct _physadr { int r[1]; } *physadr; 70typedef struct _label { int val[2]; } label_t; 71#else 72typedef struct _physadr { int r[1]; } *physadr; 73typedef struct _label { int val[10]; } label_t; 74#endif 75 76/* POSIX Extensions */ 77 78typedef unsigned char uchar_t; 79typedef unsigned short ushort_t; 80typedef unsigned int uint_t; 81typedef unsigned long ulong_t; 82 83 84/* For BSD compatibility */ 85typedef char *addr_t; /* ?<core address> type */ 86 87typedef char *caddr_t; /* ?<core address> type */ 88typedef long daddr_t; /* <disk address> type */ 89typedef short cnt_t; /* ?<count> type */ 90typedef ulong_t pgcnt_t; /* number of pages */ 91 92#ifdef _ILP32 93typedef ulong_t paddr_t; /* <physical address> type */ 94typedef long swblk_t; 95#endif 96 97typedef uchar_t use_t; /* use count for swap. */ 98typedef short sysid_t; 99typedef short index_t; 100typedef short lock_t; /* lock work for busy wait */ 101typedef enum boolean { B_FALSE, B_TRUE } boolean_t; 102typedef ulong_t l_dev_t; 103 104/* 105 * The following protects users who use other than Sun compilers 106 * (eg, GNU C) that don't support long long, and need to include 107 * this header file. 108 */ 109#ifdef _LONGLONG_TYPE 110typedef long long longlong_t; 111typedef unsigned long long u_longlong_t; 112#else 113#ifdef GCC 114typedef int64_t longlong_t; 115typedef uint64_t u_longlong_t; 116#else 117/* used to reserve space and generate alignment */ 118typedef union { 119 int32_t l[2]; 120 double d; 121} longlong_t; 122typedef union { 123 uint32_t l[2]; 124 double d; 125} u_longlong_t; 126#endif /* GCC */ 127#endif /* _LONGLONG_TYPE */ 128 129/* 130 * The {u,}pad64_t types can be used in structures such that those structures 131 * may be accessed by code produced by compilation environments which don't 132 * support a 64 bit integral datatype. The intention is not to allow 133 * use of these fields in such environments, but to maintain the alignment 134 * and offsets of the structure. 135 * 136 * Similar comments for {u,}pad128_t. 137 * 138 * Note that these types do NOT generate any stronger alignment constraints 139 * than those available in the underlying ABI. See <sys/isa_list.h> 140 */ 141#ifdef _LONGLONG_TYPE 142typedef int64_t pad64_t; 143typedef uint64_t upad64_t; 144#else 145typedef union { 146 double _d; 147 int32_t _l[2]; 148} pad64_t; 149 150typedef union { 151 double _d; 152 uint32_t _l[2]; 153} upad64_t; 154#endif /* _LONGLONG_TYPE */ 155 156typedef union { 157 long double _q; 158 int32_t _l[4]; 159} pad128_t; 160 161typedef union { 162 long double _q; 163 uint32_t _l[4]; 164} upad128_t; 165 166/* 167 * attributes for threads, dynamically allocated by library 168 */ 169typedef struct { 170 void *__pthread_attrp; 171} pthread_attr_t; 172 173/* types related to file sizes, counts, offsets, etc. */ 174#if defined(_LP64) || _FILE_OFFSET_BITS == 32 175typedef long off_t; /* ?<offset> type */ 176typedef long blkcnt_t; /* counts file blocks */ 177typedef ulong_t fsblkcnt_t; /* counts file system blocks */ 178typedef ulong_t fsfilcnt_t; /* counts files */ 179typedef ulong_t ino_t; /* expanded inode type */ 180#elif _FILE_OFFSET_BITS == 64 181typedef longlong_t off_t; /* offsets within files */ 182typedef longlong_t blkcnt_t; /* count of file blocks */ 183typedef u_longlong_t fsblkcnt_t; /* count of file system blocks */ 184typedef u_longlong_t fsfilcnt_t; /* count of files */ 185typedef u_longlong_t ino_t; /* expanded inode type */ 186#endif 187 188#ifdef _LP64 189typedef int blksize_t; /* used for block sizes */ 190#else 191typedef long blksize_t; /* used for block sizes */ 192#endif 193 194#ifdef _LARGEFILE64_SOURCE 195#ifdef _LP64 196typedef off_t off64_t; 197typedef blkcnt_t blkcnt64_t; 198typedef fsblkcnt_t fsblkcnt64_t; 199typedef fsfilcnt_t fsfilcnt64_t; 200typedef ino_t ino64_t; 201#else 202typedef longlong_t off64_t; /* ?<offset> type */ 203typedef longlong_t blkcnt64_t; /* counts file blocks */ 204typedef u_longlong_t fsblkcnt64_t; /* counts file system blocks */ 205typedef u_longlong_t fsfilcnt64_t; /* counts files */ 206typedef u_longlong_t ino64_t; /* expanded inode type */ 207#endif 208#endif 209 210/* 211 * The following type is for various kinds of identifiers. The 212 * actual type must be the same for all since some system calls 213 * (such as sigsend) take arguments that may be any of these 214 * types. The enumeration type idtype_t defined in sys/procset.h 215 * is used to indicate what type of id is being specified. 216 */ 217 218typedef longlong_t offset_t; 219typedef u_longlong_t u_offset_t; 220typedef longlong_t diskaddr_t; 221 222/* 223 * These types (t_{u}scalar_t) exist because the XTI/TPI/DLPI standards had 224 * to use them instead of int32_t and uint32_t because DEC had 225 * shipped 64-bit wide. 226 */ 227#if defined(_LP64) || defined(_I32LPx) 228typedef int32_t t_scalar_t; 229typedef uint32_t t_uscalar_t; 230#else 231typedef long t_scalar_t; /* historical versions */ 232typedef unsigned long t_uscalar_t; 233#endif /* defined(_LP64) || defined(_I32LPx) */ 234 235/* 236 * Partial support for 64-bit file offset enclosed herein, 237 * specifically used to access devices greater than 2gb. 238 * However, support for devices greater than 2gb requires compiler 239 * support for long long. 240 */ 241#ifdef _LONG_LONG_LTOH 242typedef union lloff { 243 offset_t _f; /* Full 64 bit offset value */ 244 struct { 245 int32_t _l; /* lower 32 bits of offset value */ 246 int32_t _u; /* upper 32 bits of offset value */ 247 } _p; 248} lloff_t; 249#endif 250 251#ifdef _LONG_LONG_HTOL 252typedef union lloff { 253 offset_t _f; /* Full 64 bit offset value */ 254 struct { 255 int32_t _u; /* upper 32 bits of offset value */ 256 int32_t _l; /* lower 32 bits of offset value */ 257 } _p; 258} lloff_t; 259#endif 260 261#ifdef _LONG_LONG_LTOH 262typedef union lldaddr { 263 diskaddr_t _f; /* Full 64 bit disk address value */ 264 struct { 265 int32_t _l; /* lower 32 bits of disk address value */ 266 int32_t _u; /* upper 32 bits of disk address value */ 267 } _p; 268} lldaddr_t; 269#endif 270 271#ifdef _LONG_LONG_HTOL 272typedef union lldaddr { 273 diskaddr_t _f; /* Full 64 bit disk address value */ 274 struct { 275 int32_t _u; /* upper 32 bits of disk address value */ 276 int32_t _l; /* lower 32 bits of disk address value */ 277 } _p; 278} lldaddr_t; 279#endif 280 281typedef ulong_t k_fltset_t; /* kernel fault set type */ 282 283#if defined(_LP64) || defined(_I32LPx) 284typedef int id_t; /* A process id, */ 285 /* process group id, */ 286 /* session id, */ 287 /* scheduling class id, */ 288 /* user id or group id. */ 289#else 290typedef long id_t; 291#endif 292 293typedef void *timeout_id_t; 294typedef void *bufcall_id_t; 295 296/* Typedefs for dev_t components */ 297 298#if !defined(_LP64) && defined(__cplusplus) 299typedef ulong_t major_t; /* major part of device number */ 300typedef ulong_t minor_t; /* minor part of device number */ 301#else 302typedef uint_t major_t; 303typedef uint_t minor_t; 304#endif 305 306typedef short pri_t; 307 308/* 309 * For compatibility reasons the following typedefs (prefixed o_) 310 * can't grow regardless of the EFT definition. Although, 311 * applications should not explicitly use these typedefs 312 * they may be included via a system header definition. 313 * WARNING: These typedefs may be removed in a future 314 * release. 315 * ex. the definitions in s5inode.h (now obsoleted) 316 * remained small to preserve compatibility 317 * in the S5 file system type. 318 */ 319typedef ushort_t o_mode_t; /* old file attribute type */ 320typedef short o_dev_t; /* old device type */ 321typedef ushort_t o_uid_t; /* old UID type */ 322typedef o_uid_t o_gid_t; /* old GID type */ 323typedef short o_nlink_t; /* old file link type */ 324typedef short o_pid_t; /* old process id type */ 325typedef ushort_t o_ino_t; /* old inode type */ 326 327/* POSIX and XOPEN Declarations */ 328 329typedef int key_t; /* IPC key type */ 330#if !defined(_LP64) && defined(__cplusplus) 331typedef ulong_t mode_t; /* file attribute type */ 332#else 333typedef uint_t mode_t; 334#endif 335 336#ifndef _UID_T 337#define _UID_T 338#if !defined(_LP64) && defined(__cplusplus) 339typedef long uid_t; /* UID type */ 340#else 341typedef int uid_t; 342#endif 343#endif 344 345typedef uid_t gid_t; /* GID type */ 346typedef id_t taskid_t; /* task ID type */ 347typedef id_t projid_t; /* project ID type */ 348typedef id_t poolid_t; /* pool ID type */ 349typedef id_t zoneid_t; /* zone ID type */ 350typedef id_t ctid_t; /* contract ID type */ 351 352typedef uint32_t datalink_id_t; 353 354typedef ulong_t dev_t; /* expanded device type */ 355 356#if !defined(_LP64) && defined(__cplusplus) 357typedef ulong_t nlink_t; /* file link type */ 358typedef long pid_t; /* process id type */ 359#else 360typedef uint_t nlink_t; 361typedef int pid_t; 362#endif 363 364#ifndef _SIZE_T 365#define _SIZE_T 366#if !defined(_LP64) && defined(__cplusplus) 367typedef uint_t size_t; 368#else 369typedef ulong_t size_t; 370#endif 371#endif 372 373#ifndef _SSIZE_T 374#define _SSIZE_T 375#if !defined(_LP64) && defined(__cplusplus) 376typedef int ssize_t; 377#else 378typedef long ssize_t; /* used by functions which return a */ 379 /* count of bytes or an error indication */ 380#endif 381#endif 382 383#ifndef _TIME_T 384#define _TIME_T 385typedef long time_t; /* time of day in seconds */ 386#endif /* _TIME_T */ 387 388#ifndef _CLOCK_T 389#define _CLOCK_T 390typedef long clock_t; /* relative time in a specified resolution */ 391#endif /* ifndef _CLOCK_T */ 392 393#if (defined(_KERNEL) || !defined(_POSIX_SOURCE)) 394 395/* BEGIN CSTYLED */ 396typedef unsigned char unchar; 397typedef unsigned int uint; 398typedef unsigned long ulong; 399/* END CSTYLED */ 400 401#if defined(_KERNEL) 402 403#define SHRT_MIN -32768 /* min value of a "short int" */ 404#define SHRT_MAX 32767 /* max value of a "short int" */ 405#define USHRT_MAX 65535u /* max value of "unsigned short int" */ 406#define INT_MIN (-2147483647-1) /* min value of an "int" */ 407#define INT_MAX 2147483647 /* max value of an "int" */ 408#define UINT_MAX 4294967295u /* max value of an "unsigned int" */ 409#if !defined(_LP64) 410#define LONG_MIN (-2147483647L-1L) /* min value of a "long int" */ 411#define LONG_MAX 2147483647L /* max value of a "long int" */ 412#define ULONG_MAX 4294967295UL /* max value of "unsigned long int" */ 413#else 414#define LONG_MIN (-9223372036854775807L-1L) 415#define LONG_MAX 9223372036854775807L 416#define ULONG_MAX 18446744073709551615UL 417#endif 418 419#endif /* defined(_KERNEL) */ 420 421 422#define P_MYPID ((pid_t)0) 423 424/* 425 * The following is the value of type id_t to use to indicate the 426 * caller's current id. See procset.h for the type idtype_t 427 * which defines which kind of id is being specified. 428 */ 429 430#define P_MYID (-1) 431#define NOPID (pid_t)(-1) 432 433#ifndef NODEV 434#define NODEV (dev_t)(-1) 435#endif 436 437#ifdef _ILP32 438/* 439 * A host identifier is used to uniquely define a particular node 440 * on an rfs network. Its type is as follows. 441 */ 442 443typedef long hostid_t; 444 445/* 446 * The following value of type hostid_t is used to indicate the 447 * current host. The actual hostid for each host is in the 448 * kernel global variable rfs_hostid. 449 */ 450 451#define P_MYHOSTID (-1) 452#endif 453 454#endif /* END (defined(_KERNEL) || !defined(_POSIX_SOURCE)) */ 455 456/* BEGIN CSTYLED */ 457typedef unsigned char u_char; 458typedef unsigned short u_short; 459typedef unsigned int u_int; 460typedef unsigned long u_long; 461typedef unsigned short ushort; /* sys III compat */ 462typedef struct _quad { int val[2]; } quad; /* used by UFS */ 463/* END CSTYLED */ 464 465/* 466 * These were added to allow non-ANSI compilers to compile the system. 467 */ 468 469#ifdef __STDC__ 470 471/* _VOID, const, volatile left in for source compatibility */ 472 473/* BEGIN CSTYLED */ 474#ifndef _VOID 475#define _VOID void 476#endif 477 478#else 479 480#ifndef _VOID 481#define _VOID char 482#endif 483 484#ifndef const 485#define const 486#endif 487 488#ifndef volatile 489#define volatile 490#endif 491/* END CSTYLED */ 492 493#endif /* __STDC__ */ 494 495#endif /* _ASM */ 496 497/* 498 * Nested include for BSD/sockets source compatibility. 499 * (The select macros used to be defined here). 500 */ 501#include <sys/select.h> 502/* 503 * Nested include for BSD compatibility. 504 */ 505 506#define AHZ 64 507 508#include <sys/sysmacros.h> 509 510#ifdef __cplusplus 511} 512#endif 513 514#endif /* _SYS_TYPES_H */ 515