Annotation of XNU/osfmk/mach/message.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * The contents of this file constitute Original Code as defined in and
                      7:  * are subject to the Apple Public Source License Version 1.1 (the
                      8:  * "License").  You may not use this file except in compliance with the
                      9:  * License.  Please obtain a copy of the License at
                     10:  * http://www.apple.com/publicsource and read it before using this file.
                     11:  * 
                     12:  * This Original Code and all software distributed under the License are
                     13:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     14:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     15:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     16:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     17:  * License for the specific language governing rights and limitations
                     18:  * under the License.
                     19:  * 
                     20:  * @APPLE_LICENSE_HEADER_END@
                     21:  */
                     22: /*
                     23:  * @OSF_COPYRIGHT@
                     24:  */
                     25: /* 
                     26:  * Mach Operating System
                     27:  * Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University
                     28:  * All Rights Reserved.
                     29:  * 
                     30:  * Permission to use, copy, modify and distribute this software and its
                     31:  * documentation is hereby granted, provided that both the copyright
                     32:  * notice and this permission notice appear in all copies of the
                     33:  * software, derivative works or modified versions, and any portions
                     34:  * thereof, and that both notices appear in supporting documentation.
                     35:  * 
                     36:  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
                     37:  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
                     38:  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
                     39:  * 
                     40:  * Carnegie Mellon requests users of this software to return to
                     41:  * 
                     42:  *  Software Distribution Coordinator  or  [email protected]
                     43:  *  School of Computer Science
                     44:  *  Carnegie Mellon University
                     45:  *  Pittsburgh PA 15213-3890
                     46:  * 
                     47:  * any improvements or extensions that they make and grant Carnegie Mellon
                     48:  * the rights to redistribute these changes.
                     49:  */
                     50: /*
                     51:  */
                     52: /*
                     53:  *     File:   mach/message.h
                     54:  *
                     55:  *     Mach IPC message and primitive function definitions.
                     56:  */
                     57: 
                     58: #ifndef        _MACH_MESSAGE_H_
                     59: #define _MACH_MESSAGE_H_
                     60: 
                     61: #ifdef MACH_KERNEL
                     62: /* Have to have MIG parameter check for kernel */
                     63: #define TypeCheck 1
                     64: #define _MIG_KERNEL_SPECIFIC_CODE_ 1
                     65: #endif /* MACH_KERNEL */
                     66: 
                     67: #include <mach/kern_return.h>
                     68: #include <mach/port.h>
                     69: 
                     70: 
                     71: /*
                     72:  *  The timeout mechanism uses mach_msg_timeout_t values,
                     73:  *  passed by value.  The timeout units are milliseconds.
                     74:  *  It is controlled with the MACH_SEND_TIMEOUT
                     75:  *  and MACH_RCV_TIMEOUT options.
                     76:  */
                     77: 
                     78: typedef natural_t mach_msg_timeout_t;
                     79: 
                     80: /*
                     81:  *  The value to be used when there is no timeout.
                     82:  *  (No MACH_SEND_TIMEOUT/MACH_RCV_TIMEOUT option.)
                     83:  */
                     84: 
                     85: #define MACH_MSG_TIMEOUT_NONE          ((mach_msg_timeout_t) 0)
                     86: 
                     87: /*
                     88:  *  The kernel uses MACH_MSGH_BITS_COMPLEX as a hint.  It it isn't on, it
                     89:  *  assumes the body of the message doesn't contain port rights or OOL
                     90:  *  data.  The field is set in received messages.  A user task must
                     91:  *  use caution in interpreting the body of a message if the bit isn't
                     92:  *  on, because the mach_msg_type's in the body might "lie" about the
                     93:  *  contents.  If the bit isn't on, but the mach_msg_types
                     94:  *  in the body specify rights or OOL data, the behavior is undefined.
                     95:  *  (Ie, an error may or may not be produced.)
                     96:  *
                     97:  *  The value of MACH_MSGH_BITS_REMOTE determines the interpretation
                     98:  *  of the msgh_remote_port field.  It is handled like a msgt_name.
                     99:  *
                    100:  *  The value of MACH_MSGH_BITS_LOCAL determines the interpretation
                    101:  *  of the msgh_local_port field.  It is handled like a msgt_name.
                    102:  *
                    103:  *  MACH_MSGH_BITS() combines two MACH_MSG_TYPE_* values, for the remote
                    104:  *  and local fields, into a single value suitable for msgh_bits.
                    105:  *
                    106:  *  MACH_MSGH_BITS_CIRCULAR should be zero; is is used internally.
                    107:  *
                    108:  *  MACH_MSGH_BITS_RTALLOC indicates that rtalloc/rtfree should be used
                    109:  *  instead of kalloc/kfree for the kmsg and associated data buffers.
                    110:  *
                    111:  *  The unused bits should be zero and are reserved for the kernel
                    112:  *  or for future interface expansion.
                    113:  */
                    114: 
                    115: #define MACH_MSGH_BITS_ZERO            0x00000000
                    116: #define MACH_MSGH_BITS_REMOTE_MASK     0x000000ff
                    117: #define MACH_MSGH_BITS_LOCAL_MASK      0x0000ff00
                    118: #define MACH_MSGH_BITS_COMPLEX         0x80000000U
                    119: #define        MACH_MSGH_BITS_CIRCULAR         0x40000000      /* internal use only */
                    120: #define        MACH_MSGH_BITS_RTALLOC          0x20000000      /* internal use only */
                    121: #define        MACH_MSGH_BITS_UNUSED           0x1fff0000
                    122: 
                    123: #define        MACH_MSGH_BITS_PORTS_MASK                               \
                    124:                (MACH_MSGH_BITS_REMOTE_MASK|MACH_MSGH_BITS_LOCAL_MASK)
                    125: 
                    126: #define MACH_MSGH_BITS(remote, local)                          \
                    127:                ((remote) | ((local) << 8))
                    128: #define        MACH_MSGH_BITS_REMOTE(bits)                             \
                    129:                ((bits) & MACH_MSGH_BITS_REMOTE_MASK)
                    130: #define        MACH_MSGH_BITS_LOCAL(bits)                              \
                    131:                (((bits) & MACH_MSGH_BITS_LOCAL_MASK) >> 8)
                    132: #define        MACH_MSGH_BITS_PORTS(bits)                              \
                    133:                ((bits) & MACH_MSGH_BITS_PORTS_MASK)
                    134: #define        MACH_MSGH_BITS_OTHER(bits)                              \
                    135:                ((bits) &~ MACH_MSGH_BITS_PORTS_MASK)
                    136: 
                    137: /*
                    138:  *  Every message starts with a message header.
                    139:  *  Following the message header are zero or more pairs of
                    140:  *  type descriptors (mach_msg_type_t/mach_msg_type_long_t) and
                    141:  *  data values.  The size of the message must be specified in bytes,
                    142:  *  and includes the message header, type descriptors, inline
                    143:  *  data, and inline pointer for out-of-line data.
                    144:  *
                    145:  *  The msgh_remote_port field specifies the destination of the message.
                    146:  *  It must specify a valid send or send-once right for a port.
                    147:  *
                    148:  *  The msgh_local_port field specifies a "reply port".  Normally,
                    149:  *  This field carries a send-once right that the receiver will use
                    150:  *  to reply to the message.  It may carry the values MACH_PORT_NULL,
                    151:  *  MACH_PORT_DEAD, a send-once right, or a send right.
                    152:  *
                    153:  *  The msgh_seqno field carries a sequence number associated with the
                    154:  *  received-from port.  A port's sequence number is incremented every
                    155:  *  time a message is received from it.  In sent messages, the field's
                    156:  *  value is ignored.
                    157:  *
                    158:  *  The msgh_id field is uninterpreted by the message primitives.
                    159:  *  It normally carries information specifying the format
                    160:  *  or meaning of the message.
                    161:  */
                    162: 
                    163: typedef unsigned int mach_msg_bits_t;
                    164: typedef        natural_t mach_msg_size_t;
                    165: typedef integer_t mach_msg_id_t;
                    166: 
                    167: 
                    168: #define MACH_MSG_SIZE_NULL (mach_msg_size_t *) 0
                    169: 
                    170: typedef unsigned int mach_msg_type_name_t;
                    171: 
                    172: #define MACH_MSG_TYPE_MOVE_RECEIVE     16      /* Must hold receive rights */
                    173: #define MACH_MSG_TYPE_MOVE_SEND                17      /* Must hold send rights */
                    174: #define MACH_MSG_TYPE_MOVE_SEND_ONCE   18      /* Must hold sendonce rights */
                    175: #define MACH_MSG_TYPE_COPY_SEND                19      /* Must hold send rights */
                    176: #define MACH_MSG_TYPE_MAKE_SEND                20      /* Must hold receive rights */
                    177: #define MACH_MSG_TYPE_MAKE_SEND_ONCE   21      /* Must hold receive rights */
                    178: #define MACH_MSG_TYPE_COPY_RECEIVE     22      /* Must hold receive rights */
                    179: 
                    180: typedef unsigned int mach_msg_copy_options_t;
                    181: 
                    182: #define MACH_MSG_PHYSICAL_COPY         0
                    183: #define MACH_MSG_VIRTUAL_COPY          1
                    184: #define MACH_MSG_ALLOCATE              2
                    185: #define MACH_MSG_OVERWRITE             3
                    186: #ifdef  MACH_KERNEL
                    187: #define MACH_MSG_KALLOC_COPY_T         4
                    188: #define MACH_MSG_PAGE_LIST_COPY_T      5
                    189: #endif  /* MACH_KERNEL */
                    190: 
                    191: typedef unsigned int mach_msg_descriptor_type_t;
                    192: 
                    193: #define MACH_MSG_PORT_DESCRIPTOR               0
                    194: #define MACH_MSG_OOL_DESCRIPTOR                1
                    195: #define MACH_MSG_OOL_PORTS_DESCRIPTOR          2
                    196: #define MACH_MSG_OOL_VOLATILE_DESCRIPTOR       3
                    197: 
                    198: 
                    199: typedef struct
                    200: {
                    201:   void*                                pad1;
                    202:   mach_msg_size_t              pad2;
                    203:   unsigned int                 pad3 : 24;
                    204:   mach_msg_descriptor_type_t   type : 8;
                    205: } mach_msg_type_descriptor_t;
                    206: 
                    207: typedef struct
                    208: {
                    209:   mach_port_t                  name;
                    210:   mach_msg_size_t              pad1;
                    211:   unsigned int                 pad2 : 16;
                    212:   mach_msg_type_name_t         disposition : 8;
                    213:   mach_msg_descriptor_type_t   type : 8;
                    214: } mach_msg_port_descriptor_t;
                    215: 
                    216: typedef struct
                    217: {
                    218:   void* address;
                    219:   mach_msg_size_t              size;
                    220:   boolean_t                    deallocate: 8;
                    221:   mach_msg_copy_options_t       copy: 8;
                    222:   unsigned int                 pad1: 8;
                    223:   mach_msg_descriptor_type_t    type: 8;
                    224: } mach_msg_ool_descriptor_t;
                    225: 
                    226: typedef struct
                    227: {
                    228:   void*                                address;
                    229:   mach_msg_size_t              count;
                    230:   boolean_t                    deallocate: 8;
                    231:   mach_msg_copy_options_t       copy: 8;
                    232:   mach_msg_type_name_t         disposition : 8;
                    233:   mach_msg_descriptor_type_t   type : 8;
                    234: } mach_msg_ool_ports_descriptor_t;
                    235: 
                    236: typedef union
                    237: {
                    238:   mach_msg_port_descriptor_t           port;
                    239:   mach_msg_ool_descriptor_t            out_of_line;
                    240:   mach_msg_ool_ports_descriptor_t      ool_ports;
                    241:   mach_msg_type_descriptor_t           type;
                    242: } mach_msg_descriptor_t;
                    243: 
                    244: typedef struct
                    245: {
                    246:         mach_msg_size_t msgh_descriptor_count;
                    247: } mach_msg_body_t;
                    248: 
                    249: #define MACH_MSG_BODY_NULL (mach_msg_body_t *) 0
                    250: #define MACH_MSG_DESCRIPTOR_NULL (mach_msg_descriptor_t *) 0
                    251: 
                    252: typedef        struct 
                    253: {
                    254:   mach_msg_bits_t      msgh_bits;
                    255:   mach_msg_size_t      msgh_size;
                    256:   mach_port_t          msgh_remote_port;
                    257:   mach_port_t          msgh_local_port;
                    258:   mach_msg_size_t      msgh_reserved;
                    259:   mach_msg_id_t                msgh_id;
                    260: } mach_msg_header_t;
                    261: 
                    262: #define MACH_MSG_NULL (mach_msg_header_t *) 0
                    263: 
                    264: typedef struct
                    265: {
                    266:         mach_msg_header_t       header;
                    267:         mach_msg_body_t         body;
                    268: } mach_msg_base_t;
                    269: 
                    270: typedef        unsigned int mach_msg_trailer_type_t;
                    271: 
                    272: #define        MACH_MSG_TRAILER_FORMAT_0       0
                    273: 
                    274: typedef        unsigned int mach_msg_trailer_size_t;
                    275: 
                    276: typedef struct 
                    277: {
                    278:   mach_msg_trailer_type_t      msgh_trailer_type;
                    279:   mach_msg_trailer_size_t      msgh_trailer_size;
                    280: } mach_msg_trailer_t;
                    281: 
                    282: typedef struct
                    283: {
                    284:   mach_msg_trailer_type_t       msgh_trailer_type;
                    285:   mach_msg_trailer_size_t       msgh_trailer_size;
                    286:   mach_port_seqno_t             msgh_seqno;
                    287: } mach_msg_seqno_trailer_t;
                    288: 
                    289: typedef struct
                    290: {
                    291:   unsigned int                 val[2];
                    292: } security_token_t;
                    293: 
                    294: typedef struct 
                    295: {
                    296:   mach_msg_trailer_type_t      msgh_trailer_type;
                    297:   mach_msg_trailer_size_t      msgh_trailer_size;
                    298:   mach_port_seqno_t            msgh_seqno;
                    299:   security_token_t             msgh_sender;
                    300: } mach_msg_security_trailer_t;
                    301: 
                    302: typedef mach_msg_security_trailer_t mach_msg_format_0_trailer_t;
                    303: 
                    304: #define MACH_MSG_TRAILER_FORMAT_0_SIZE sizeof(mach_msg_format_0_trailer_t)
                    305: #define MACH_MSG_TRAILER_MINIMUM_SIZE  sizeof(mach_msg_trailer_t)
                    306: #define MAX_TRAILER_SIZE              MACH_MSG_TRAILER_FORMAT_0_SIZE   
                    307: 
                    308: #define   KERNEL_SECURITY_TOKEN_VALUE  { {0, 1} }
                    309: extern security_token_t KERNEL_SECURITY_TOKEN;
                    310: 
                    311: typedef        integer_t mach_msg_options_t;
                    312: 
                    313: typedef struct
                    314: {
                    315:   mach_msg_header_t    header;
                    316: } mach_msg_empty_send_t;
                    317: 
                    318: typedef struct
                    319: {
                    320:   mach_msg_header_t    header;
                    321:   mach_msg_trailer_t   trailer;
                    322: } mach_msg_empty_rcv_t;
                    323: 
                    324: typedef union
                    325: {
                    326:   mach_msg_empty_send_t        send;
                    327:   mach_msg_empty_rcv_t rcv;
                    328: } mach_msg_empty_t;
                    329: 
                    330: /* utility to round the message size - will become machine dependent */
                    331: #define round_msg(x)   (((mach_msg_size_t)(x) + sizeof (natural_t) - 1) & \
                    332:                                ~(sizeof (natural_t) - 1))
                    333: 
                    334: /*
                    335:  *  There is no fixed upper bound to the size of Mach messages.
                    336:  */
                    337: 
                    338: #define        MACH_MSG_SIZE_MAX       ((mach_msg_size_t) ~0)
                    339: 
                    340: /*
                    341:  *  Compatibility definitions, for code written
                    342:  *  when there was a msgh_kind instead of msgh_seqno.
                    343:  */
                    344: 
                    345: #define MACH_MSGH_KIND_NORMAL          0x00000000
                    346: #if    0
                    347: /* code using this is likely to break, so better not to have it defined */
                    348: #define MACH_MSGH_KIND_NOTIFICATION    0x00000001
                    349: #endif
                    350: #define        msgh_kind                       msgh_seqno
                    351: #define mach_msg_kind_t                        mach_port_seqno_t
                    352: 
                    353: /*
                    354:  *  The msgt_number field specifies the number of data elements.
                    355:  *  The msgt_size field specifies the size of each data element, in bits.
                    356:  *  The msgt_name field specifies the type of each data element.
                    357:  *  If msgt_inline is TRUE, the data follows the type descriptor
                    358:  *  in the body of the message.  If msgt_inline is FALSE, then a pointer
                    359:  *  to the data should follow the type descriptor, and the data is
                    360:  *  sent out-of-line.  In this case, if msgt_deallocate is TRUE,
                    361:  *  then the out-of-line data is moved (instead of copied) into the message.
                    362:  *  If msgt_longform is TRUE, then the type descriptor is actually
                    363:  *  a mach_msg_type_long_t.
                    364:  *
                    365:  *  The actual amount of inline data following the descriptor must
                    366:  *  a multiple of the word size.  For out-of-line data, this is a
                    367:  *  pointer.  For inline data, the supplied data size (calculated
                    368:  *  from msgt_number/msgt_size) is rounded up.  This guarantees
                    369:  *  that type descriptors always fall on word boundaries.
                    370:  *
                    371:  *  For port rights, msgt_size must be 8*sizeof(mach_port_t).
                    372:  *  If the data is inline, msgt_deallocate should be FALSE.
                    373:  *  The msgt_unused bit should be zero.
                    374:  *  The msgt_name, msgt_size, msgt_number fields in
                    375:  *  a mach_msg_type_long_t should be zero.
                    376:  */
                    377: 
                    378: typedef natural_t mach_msg_type_size_t;
                    379: typedef natural_t mach_msg_type_number_t;
                    380: 
                    381: /*
                    382:  *  Values received/carried in messages.  Tells the receiver what
                    383:  *  sort of port right he now has.
                    384:  *
                    385:  *  MACH_MSG_TYPE_PORT_NAME is used to transfer a port name
                    386:  *  which should remain uninterpreted by the kernel.  (Port rights
                    387:  *  are not transferred, just the port name.)
                    388:  */
                    389: 
                    390: #define MACH_MSG_TYPE_PORT_NAME                15
                    391: #define MACH_MSG_TYPE_PORT_RECEIVE     MACH_MSG_TYPE_MOVE_RECEIVE
                    392: #define MACH_MSG_TYPE_PORT_SEND                MACH_MSG_TYPE_MOVE_SEND
                    393: #define MACH_MSG_TYPE_PORT_SEND_ONCE   MACH_MSG_TYPE_MOVE_SEND_ONCE
                    394: 
                    395: #define MACH_MSG_TYPE_LAST             22              /* Last assigned */
                    396: 
                    397: /*
                    398:  *  A dummy value.  Mostly used to indicate that the actual value
                    399:  *  will be filled in later, dynamically.
                    400:  */
                    401: 
                    402: #define MACH_MSG_TYPE_POLYMORPHIC      ((mach_msg_type_name_t) -1)
                    403: 
                    404: /*
                    405:  *     Is a given item a port type?
                    406:  */
                    407: 
                    408: #define MACH_MSG_TYPE_PORT_ANY(x)                      \
                    409:        (((x) >= MACH_MSG_TYPE_MOVE_RECEIVE) &&         \
                    410:         ((x) <= MACH_MSG_TYPE_MAKE_SEND_ONCE))
                    411: 
                    412: #define        MACH_MSG_TYPE_PORT_ANY_SEND(x)                  \
                    413:        (((x) >= MACH_MSG_TYPE_MOVE_SEND) &&            \
                    414:         ((x) <= MACH_MSG_TYPE_MAKE_SEND_ONCE))
                    415: 
                    416: #define        MACH_MSG_TYPE_PORT_ANY_RIGHT(x)                 \
                    417:        (((x) >= MACH_MSG_TYPE_MOVE_RECEIVE) &&         \
                    418:         ((x) <= MACH_MSG_TYPE_MOVE_SEND_ONCE))
                    419: 
                    420: typedef integer_t mach_msg_option_t;
                    421: 
                    422: #define MACH_MSG_OPTION_NONE   0x00000000
                    423: 
                    424: #define        MACH_SEND_MSG           0x00000001
                    425: #define        MACH_RCV_MSG            0x00000002
                    426: #define MACH_RCV_LARGE         0x00000004
                    427: 
                    428: #define MACH_SEND_TIMEOUT      0x00000010
                    429: #define MACH_SEND_INTERRUPT    0x00000040      /* libmach implements */
                    430: #define MACH_SEND_CANCEL       0x00000080
                    431: #define MACH_SEND_ALWAYS       0x00010000      /* internal use only */
                    432: #define MACH_SEND_TRAILER      0x00020000      
                    433: 
                    434: #define MACH_RCV_TIMEOUT       0x00000100
                    435: #define MACH_RCV_NOTIFY                0x00000200
                    436: #define MACH_RCV_INTERRUPT     0x00000400      /* libmach implements */
                    437: #define MACH_RCV_OVERWRITE     0x00001000
                    438: 
                    439: /* 
                    440:  * NOTE: a 0x00------ RCV mask implies to ask for
                    441:  * a MACH_MSG_TRAILER_FORMAT_0 with 0 Elements, 
                    442:  * which is equivalent to a mach_msg_trailer_t.
                    443:  */
                    444: #define MACH_RCV_TRAILER_NULL   0
                    445: #define MACH_RCV_TRAILER_SEQNO  1
                    446: #define MACH_RCV_TRAILER_SENDER 2
                    447: 
                    448: #define MACH_RCV_TRAILER_TYPE(x)     (((x) & 0xf) << 28) 
                    449: #define MACH_RCV_TRAILER_ELEMENTS(x) (((x) & 0xf) << 24)  
                    450: #define MACH_RCV_TRAILER_MASK       ((0xff << 24))
                    451: 
                    452: extern mach_msg_trailer_size_t trailer_size[];
                    453: 
                    454: #define GET_RCV_ELEMENTS(y) (((y) >> 24) & 0xf)
                    455: #define REQUESTED_TRAILER_SIZE(y) (trailer_size[GET_RCV_ELEMENTS(y)])
                    456: 
                    457: /*
                    458:  *  Much code assumes that mach_msg_return_t == kern_return_t.
                    459:  *  This definition is useful for descriptive purposes.
                    460:  *
                    461:  *  See <mach/error.h> for the format of error codes.
                    462:  *  IPC errors are system 4.  Send errors are subsystem 0;
                    463:  *  receive errors are subsystem 1.  The code field is always non-zero.
                    464:  *  The high bits of the code field communicate extra information
                    465:  *  for some error codes.  MACH_MSG_MASK masks off these special bits.
                    466:  */
                    467: 
                    468: typedef kern_return_t mach_msg_return_t;
                    469: 
                    470: #define MACH_MSG_SUCCESS               0x00000000
                    471: 
                    472: 
                    473: #define        MACH_MSG_MASK                   0x00003e00
                    474:                /* All special error code bits defined below. */
                    475: #define        MACH_MSG_IPC_SPACE              0x00002000
                    476:                /* No room in IPC name space for another capability name. */
                    477: #define        MACH_MSG_VM_SPACE               0x00001000
                    478:                /* No room in VM address space for out-of-line memory. */
                    479: #define        MACH_MSG_IPC_KERNEL             0x00000800
                    480:                /* Kernel resource shortage handling an IPC capability. */
                    481: #define        MACH_MSG_VM_KERNEL              0x00000400
                    482:                /* Kernel resource shortage handling out-of-line memory. */
                    483: #define MACH_MSG_INVALID_RT_DESCRIPTOR 0x00000200
                    484:                /* Descriptor has an option incompatible with RT
                    485:                   behavior */
                    486: 
                    487: #define MACH_SEND_IN_PROGRESS          0x10000001
                    488:                /* Thread is waiting to send.  (Internal use only.) */
                    489: #define MACH_SEND_INVALID_DATA         0x10000002
                    490:                /* Bogus in-line data. */
                    491: #define MACH_SEND_INVALID_DEST         0x10000003
                    492:                /* Bogus destination port. */
                    493: #define MACH_SEND_TIMED_OUT            0x10000004
                    494:                /* Message not sent before timeout expired. */
                    495: #define MACH_SEND_INTERRUPTED          0x10000007
                    496:                /* Software interrupt. */
                    497: #define MACH_SEND_MSG_TOO_SMALL                0x10000008
                    498:                /* Data doesn't contain a complete message. */
                    499: #define MACH_SEND_INVALID_REPLY                0x10000009
                    500:                /* Bogus reply port. */
                    501: #define MACH_SEND_INVALID_RIGHT                0x1000000a
                    502:                /* Bogus port rights in the message body. */
                    503: #define MACH_SEND_INVALID_NOTIFY       0x1000000b
                    504:                /* Bogus notify port argument. */
                    505: #define MACH_SEND_INVALID_MEMORY       0x1000000c
                    506:                /* Invalid out-of-line memory pointer. */
                    507: #define MACH_SEND_NO_BUFFER            0x1000000d
                    508:                /* No message buffer is available. */
                    509: #define MACH_SEND_INVALID_TYPE         0x1000000f
                    510:                /* Invalid msg-type specification. */
                    511: #define MACH_SEND_INVALID_HEADER       0x10000010
                    512:                /* A field in the header had a bad value. */
                    513: #define MACH_SEND_INVALID_TRAILER      0x10000011
                    514:                /* The trailer to be sent does not match kernel format. */
                    515: #define MACH_SEND_INVALID_RT_OOL_SIZE  0x10000015
                    516:                /* The OOL buffer size is too large for RT behavior */
                    517: 
                    518: #define MACH_RCV_IN_PROGRESS           0x10004001
                    519:                /* Thread is waiting for receive.  (Internal use only.) */
                    520: #define MACH_RCV_INVALID_NAME          0x10004002
                    521:                /* Bogus name for receive port/port-set. */
                    522: #define MACH_RCV_TIMED_OUT             0x10004003
                    523:                /* Didn't get a message within the timeout value. */
                    524: #define MACH_RCV_TOO_LARGE             0x10004004
                    525:                /* Message buffer is not large enough for inline data. */
                    526: #define MACH_RCV_INTERRUPTED           0x10004005
                    527:                /* Software interrupt. */
                    528: #define MACH_RCV_PORT_CHANGED          0x10004006
                    529:                /* Port moved into a set during the receive. */
                    530: #define MACH_RCV_INVALID_NOTIFY                0x10004007
                    531:                /* Bogus notify port argument. */
                    532: #define MACH_RCV_INVALID_DATA          0x10004008
                    533:                /* Bogus message buffer for inline data. */
                    534: #define MACH_RCV_PORT_DIED             0x10004009
                    535:                /* Port/set was sent away/died during receive. */
                    536: #define        MACH_RCV_IN_SET                 0x1000400a
                    537:                /* Port is a member of a port set. */
                    538: #define        MACH_RCV_HEADER_ERROR           0x1000400b
                    539:                /* Error receiving message header.  See special bits. */
                    540: #define        MACH_RCV_BODY_ERROR             0x1000400c
                    541:                /* Error receiving message body.  See special bits. */
                    542: #define        MACH_RCV_INVALID_TYPE           0x1000400d
                    543:                /* Invalid msg-type specification in scatter list. */
                    544: #define        MACH_RCV_SCATTER_SMALL          0x1000400e
                    545:                /* Out-of-line overwrite region is not large enough */
                    546: #define MACH_RCV_INVALID_TRAILER       0x1000400f
                    547:                /* trailer type or number of trailer elements not supported */
                    548: #define MACH_RCV_IN_PROGRESS_TIMED      0x10004011
                    549:                 /* Waiting for receive with timeout. (Internal use only.) */
                    550: 
                    551: extern mach_msg_return_t       mach_msg_overwrite_trap(
                    552:                                        mach_msg_header_t *msg,
                    553:                                        mach_msg_option_t option,
                    554:                                        mach_msg_size_t send_size,
                    555:                                        mach_msg_size_t rcv_size,
                    556:                                        mach_port_name_t rcv_name,
                    557:                                        mach_msg_timeout_t timeout,
                    558:                                        mach_port_name_t notify,
                    559:                                        mach_msg_header_t *rcv_msg,
                    560:                                        mach_msg_size_t rcv_limit);
                    561: 
                    562: extern mach_msg_return_t       mach_msg_overwrite(
                    563:                                        mach_msg_header_t *msg,
                    564:                                        mach_msg_option_t option,
                    565:                                        mach_msg_size_t send_size,
                    566:                                        mach_msg_size_t rcv_size,
                    567:                                        mach_port_name_t rcv_name,
                    568:                                        mach_msg_timeout_t timeout,
                    569:                                        mach_port_name_t notify,
                    570:                                        mach_msg_header_t *rcv_msg,
                    571:                                        mach_msg_size_t rcv_limit);
                    572: 
                    573: extern mach_msg_return_t       mach_msg_trap(
                    574:                                        mach_msg_header_t *msg,
                    575:                                        mach_msg_option_t option,
                    576:                                        mach_msg_size_t send_size,
                    577:                                        mach_msg_size_t rcv_size,
                    578:                                        mach_port_name_t rcv_name,
                    579:                                        mach_msg_timeout_t timeout,
                    580:                                        mach_port_name_t notify);
                    581: 
                    582: extern mach_msg_return_t       mach_msg(
                    583:                                        mach_msg_header_t *msg,
                    584:                                        mach_msg_option_t option,
                    585:                                        mach_msg_size_t send_size,
                    586:                                        mach_msg_size_t rcv_size,
                    587:                                        mach_port_name_t rcv_name,
                    588:                                        mach_msg_timeout_t timeout,
                    589:                                        mach_port_name_t notify);
                    590: 
                    591: #endif /* _MACH_MESSAGE_H_ */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.