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