Annotation of kernel/mach/port.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
                      7:  * Reserved.  This file contains Original Code and/or Modifications of
                      8:  * Original Code as defined in and that are subject to the Apple Public
                      9:  * Source License Version 1.1 (the "License").  You may not use this file
                     10:  * except in compliance with the License.  Please obtain a copy of the
                     11:  * License at http://www.apple.com/publicsource and read it before using
                     12:  * this file.
                     13:  * 
                     14:  * The Original Code and all software distributed under the License are
                     15:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     16:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     17:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     18:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     19:  * License for the specific language governing rights and limitations
                     20:  * under the License.
                     21:  * 
                     22:  * @APPLE_LICENSE_HEADER_END@
                     23:  */
                     24: 
                     25: /*
                     26:  * Copyright (c) 1995, 1994, 1993, 1992, 1991, 1990  
                     27:  * Open Software Foundation, Inc. 
                     28:  *  
                     29:  * Permission to use, copy, modify, and distribute this software and 
                     30:  * its documentation for any purpose and without fee is hereby granted, 
                     31:  * provided that the above copyright notice appears in all copies and 
                     32:  * that both the copyright notice and this permission notice appear in 
                     33:  * supporting documentation, and that the name of ("OSF") or Open Software 
                     34:  * Foundation not be used in advertising or publicity pertaining to 
                     35:  * distribution of the software without specific, written prior permission. 
                     36:  *  
                     37:  * OSF DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE 
                     38:  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
                     39:  * FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL OSF BE LIABLE FOR ANY 
                     40:  * SPECIAL, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 
                     41:  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN 
                     42:  * ACTION OF CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING 
                     43:  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE 
                     44:  */
                     45: /*
                     46:  * OSF Research Institute MK6.1 (unencumbered) 1/31/1995
                     47:  */
                     48: /* 
                     49:  * Mach Operating System
                     50:  * Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University
                     51:  * All Rights Reserved.
                     52:  * 
                     53:  * Permission to use, copy, modify and distribute this software and its
                     54:  * documentation is hereby granted, provided that both the copyright
                     55:  * notice and this permission notice appear in all copies of the
                     56:  * software, derivative works or modified versions, and any portions
                     57:  * thereof, and that both notices appear in supporting documentation.
                     58:  * 
                     59:  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
                     60:  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
                     61:  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
                     62:  * 
                     63:  * Carnegie Mellon requests users of this software to return to
                     64:  * 
                     65:  *  Software Distribution Coordinator  or  [email protected]
                     66:  *  School of Computer Science
                     67:  *  Carnegie Mellon University
                     68:  *  Pittsburgh PA 15213-3890
                     69:  * 
                     70:  * any improvements or extensions that they make and grant Carnegie Mellon
                     71:  * the rights to redistribute these changes.
                     72:  */
                     73: /*
                     74:  *     File:   mach/port.h
                     75:  *
                     76:  *     Definition of a port
                     77:  *
                     78:  *     [The basic mach_port_t type should probably be machine-dependent,
                     79:  *     as it must be represented by a 32-bit integer.]
                     80:  */
                     81: 
                     82: #ifndef        _MACH_PORT_H_
                     83: #define _MACH_PORT_H_
                     84: 
                     85: #import <mach/boolean.h>
                     86: #import <mach/machine/vm_types.h>
                     87: 
                     88: typedef natural_t mach_port_t;
                     89: typedef mach_port_t mach_port_name_t;
                     90: typedef mach_port_t *mach_port_array_t;
                     91: 
                     92: /*
                     93:  *  MACH_PORT_NULL is a legal value that can be carried in messages.
                     94:  *  It indicates the absence of any port or port rights.  (A port
                     95:  *  argument keeps the message from being "simple", even if the
                     96:  *  value is MACH_PORT_NULL.)  The value MACH_PORT_DEAD is also
                     97:  *  a legal value that can be carried in messages.  It indicates
                     98:  *  that a port right was present, but it died.
                     99:  */
                    100: 
                    101: #define MACH_PORT_NULL         ((mach_port_t) 0)
                    102: #define MACH_PORT_DEAD         ((mach_port_t) ~0)
                    103: 
                    104: #define        MACH_PORT_VALID(name)   \
                    105:                (((name) != MACH_PORT_NULL) && ((name) != MACH_PORT_DEAD))
                    106: 
                    107: /*
                    108:  *  These are the different rights a task may have.
                    109:  *  The MACH_PORT_RIGHT_* definitions are used as arguments
                    110:  *  to mach_port_allocate, mach_port_get_refs, etc, to specify
                    111:  *  a particular right to act upon.  The mach_port_names and
                    112:  *  mach_port_type calls return bitmasks using the MACH_PORT_TYPE_*
                    113:  *  definitions.  This is because a single name may denote
                    114:  *  multiple rights.
                    115:  */
                    116: 
                    117: typedef natural_t mach_port_right_t;
                    118: 
                    119: #define MACH_PORT_RIGHT_SEND           ((mach_port_right_t) 0)
                    120: #define MACH_PORT_RIGHT_RECEIVE                ((mach_port_right_t) 1)
                    121: #define MACH_PORT_RIGHT_SEND_ONCE      ((mach_port_right_t) 2)
                    122: #define MACH_PORT_RIGHT_PORT_SET       ((mach_port_right_t) 3)
                    123: #define MACH_PORT_RIGHT_DEAD_NAME      ((mach_port_right_t) 4)
                    124: #define MACH_PORT_RIGHT_NUMBER         ((mach_port_right_t) 5)
                    125: 
                    126: typedef natural_t mach_port_type_t;
                    127: typedef mach_port_type_t *mach_port_type_array_t;
                    128: 
                    129: #define MACH_PORT_TYPE(right)      ((mach_port_type_t)(1 << ((right)+16)))
                    130: #define MACH_PORT_TYPE_NONE        ((mach_port_type_t) 0)
                    131: #define MACH_PORT_TYPE_SEND        MACH_PORT_TYPE(MACH_PORT_RIGHT_SEND)
                    132: #define MACH_PORT_TYPE_RECEIVE     MACH_PORT_TYPE(MACH_PORT_RIGHT_RECEIVE)
                    133: #define MACH_PORT_TYPE_SEND_ONCE    MACH_PORT_TYPE(MACH_PORT_RIGHT_SEND_ONCE)
                    134: #define MACH_PORT_TYPE_PORT_SET            MACH_PORT_TYPE(MACH_PORT_RIGHT_PORT_SET)
                    135: #define MACH_PORT_TYPE_DEAD_NAME    MACH_PORT_TYPE(MACH_PORT_RIGHT_DEAD_NAME)
                    136: 
                    137: /* Convenient combinations. */
                    138: 
                    139: #define MACH_PORT_TYPE_SEND_RECEIVE                                    \
                    140:                (MACH_PORT_TYPE_SEND|MACH_PORT_TYPE_RECEIVE)
                    141: #define        MACH_PORT_TYPE_SEND_RIGHTS                                      \
                    142:                (MACH_PORT_TYPE_SEND|MACH_PORT_TYPE_SEND_ONCE)
                    143: #define        MACH_PORT_TYPE_PORT_RIGHTS                                      \
                    144:                (MACH_PORT_TYPE_SEND_RIGHTS|MACH_PORT_TYPE_RECEIVE)
                    145: #define        MACH_PORT_TYPE_PORT_OR_DEAD                                     \
                    146:                (MACH_PORT_TYPE_PORT_RIGHTS|MACH_PORT_TYPE_DEAD_NAME)
                    147: #define MACH_PORT_TYPE_ALL_RIGHTS                                      \
                    148:                (MACH_PORT_TYPE_PORT_OR_DEAD|MACH_PORT_TYPE_PORT_SET)
                    149: 
                    150: /* Dummy type bits that mach_port_type/mach_port_names can return. */
                    151: 
                    152: #define MACH_PORT_TYPE_DNREQUEST       0x80000000U
                    153: #define MACH_PORT_TYPE_MAREQUEST       0x40000000
                    154: #define        MACH_PORT_TYPE_COMPAT           0x20000000
                    155: 
                    156: /* User-references for capabilities. */
                    157: 
                    158: typedef natural_t mach_port_urefs_t;
                    159: typedef integer_t mach_port_delta_t;                   /* change in urefs */
                    160: 
                    161: /* Attributes of ports.  (See mach_port_get_receive_status.) */
                    162: 
                    163: typedef natural_t mach_port_seqno_t;           /* sequence number */
                    164: typedef unsigned int mach_port_mscount_t;      /* make-send count */
                    165: typedef unsigned int mach_port_msgcount_t;     /* number of msgs */
                    166: typedef unsigned int mach_port_rights_t;       /* number of rights */
                    167: 
                    168: typedef struct mach_port_status {
                    169:        mach_port_t             mps_pset;       /* containing port set */
                    170:        mach_port_seqno_t       mps_seqno;      /* sequence number */
                    171: /*mach_port_mscount_t*/natural_t mps_mscount;  /* make-send count */
                    172: /*mach_port_msgcount_t*/natural_t mps_qlimit;  /* queue limit */
                    173: /*mach_port_msgcount_t*/natural_t mps_msgcount;        /* number in the queue */
                    174: /*mach_port_rights_t*/natural_t        mps_sorights;   /* how many send-once rights */
                    175: /*boolean_t*/natural_t         mps_srights;    /* do send rights exist? */
                    176: /*boolean_t*/natural_t         mps_pdrequest;  /* port-deleted requested? */
                    177: /*boolean_t*/natural_t         mps_nsrequest;  /* no-senders requested? */
                    178: } mach_port_status_t;
                    179: 
                    180: #define MACH_PORT_QLIMIT_DEFAULT       ((mach_port_msgcount_t) 5)
                    181: #define MACH_PORT_QLIMIT_MAX           ((mach_port_msgcount_t) 16)
                    182: 
                    183: typedef struct mach_port_limits {
                    184:        mach_port_msgcount_t    mpl_qlimit;     /* number of msgs */
                    185: } mach_port_limits_t;
                    186: 
                    187: typedef int *mach_port_info_t;         /* varying array of int */
                    188: 
                    189: /* Flavors for mach_port_get/set_attributes() */
                    190: typedef int mach_port_flavor_t;
                    191: #define MACH_PORT_LIMITS_INFO          1       /* uses mach_port_status_t */
                    192: #define MACH_PORT_RECEIVE_STATUS       2       /* uses mach_port_limits_t */
                    193: #define MACH_PORT_DNREQUESTS_SIZE      3       /* info is int */
                    194: 
                    195: #define MACH_PORT_LIMITS_INFO_COUNT \
                    196:        (sizeof(mach_port_limits_t)/sizeof(int))
                    197: #define MACH_PORT_RECEIVE_STATUS_COUNT \
                    198:        (sizeof(mach_port_status_t)/sizeof(int))
                    199: #define MACH_PORT_DNREQUESTS_SIZE_COUNT 1
                    200: 
                    201: /* Definitions for the old IPC interface. */
                    202: 
                    203: typedef integer_t      port_name_t;            /* A capability's name */
                    204: typedef port_name_t    port_set_name_t;        /* Descriptive alias */
                    205: typedef port_name_t    *port_name_array_t;
                    206: 
                    207: typedef integer_t      port_type_t;            /* What kind of capability? */
                    208: typedef port_type_t    *port_type_array_t;
                    209: 
                    210:        /* Values for port_type_t */
                    211: 
                    212: #define PORT_TYPE_NONE         0               /* No rights */
                    213: #define PORT_TYPE_SEND         1               /* Send rights */
                    214: #define PORT_TYPE_RECEIVE      3               /* obsolete */
                    215: #define PORT_TYPE_OWN          5               /* obsolete */
                    216: #define PORT_TYPE_RECEIVE_OWN  7               /* Send, receive, ownership */
                    217: #define PORT_TYPE_SET          9               /* Set ownership */
                    218: #define PORT_TYPE_LAST         10              /* Last assigned */
                    219: 
                    220: typedef        port_name_t     port_t;                 /* Port with send rights */
                    221: typedef        port_t          port_rcv_t;             /* Port with receive rights */
                    222: typedef        port_t          port_own_t;             /* Port with ownership rights */
                    223: typedef        port_t          port_all_t;             /* Port with receive and ownership */
                    224: typedef        port_t          *port_array_t;
                    225: 
                    226: #define PORT_NULL      ((port_name_t) 0)       /* Used to denote no port; legal value */
                    227: 
                    228: #define PORT_BACKLOG_DEFAULT   MACH_PORT_QLIMIT_DEFAULT
                    229: #define PORT_BACKLOG_MAX       MACH_PORT_QLIMIT_MAX
                    230: 
                    231: #endif /* _MACH_PORT_H_ */

unix.superglobalmegacorp.com

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