xref: /xnu-10002.41.9/libsyscall/mach/mach/port_obj.h (revision 699cd48037512bf4380799317ca44ca453c82f57)
1 /*
2  * Copyright (c) 2003 Apple Computer, Inc. All rights reserved.
3  *
4  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5  *
6  * This file contains Original Code and/or Modifications of Original Code
7  * as defined in and that are subject to the Apple Public Source License
8  * Version 2.0 (the 'License'). You may not use this file except in
9  * compliance with the License. The rights granted to you under the License
10  * may not be used to create, or enable the creation or redistribution of,
11  * unlawful or unlicensed copies of an Apple operating system, or to
12  * circumvent, violate, or enable the circumvention or violation of, any
13  * terms of an Apple operating system software license agreement.
14  *
15  * Please obtain a copy of the License at
16  * http://www.opensource.apple.com/apsl/ and read it before using this file.
17  *
18  * The Original Code and all software distributed under the License are
19  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23  * Please see the License for the specific language governing rights and
24  * limitations under the License.
25  *
26  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27  */
28 /*
29  * @OSF_COPYRIGHT@
30  */
31 
32 /*
33  * Define a service to map from a kernel-generated port name
34  * to server-defined "type" and "value" data to be associated
35  * with the port.
36  */
37 
38 #ifndef PORT_OBJ_H
39 #define PORT_OBJ_H
40 
41 #include <mach/port.h>
42 
43 struct port_obj_tentry {
44 	void *pos_value;
45 	int pos_type;
46 };
47 
48 #include <sys/cdefs.h>
49 
50 __BEGIN_DECLS
51 extern void port_obj_init(int);
52 __END_DECLS
53 
54 extern struct port_obj_tentry *port_obj_table;
55 extern int port_obj_table_size;
56 
57 #ifndef PORT_OBJ_ASSERT
58 
59 #define port_set_obj_value_type(pname, value, type)     \
60 do {                                                    \
61 	int ndx;                                        \
62                                                         \
63 	if (!port_obj_table)                            \
64 	        port_obj_init(port_obj_table_size);     \
65 	ndx = MACH_PORT_INDEX(pname);                   \
66 	port_obj_table[ndx].pos_value = (value);        \
67 	port_obj_table[ndx].pos_type = (type);          \
68 } while (0)
69 
70 #define port_get_obj_value(pname)                       \
71 	(port_obj_table[MACH_PORT_INDEX(pname)].pos_value)
72 
73 #define port_get_obj_type(pname)                        \
74 	(port_obj_table[MACH_PORT_INDEX(pname)].pos_type)
75 
76 #else   /* PORT_OBJ_ASSERT */
77 
78 #define port_set_obj_value_type(pname, value, type)     \
79 do {                                                    \
80 	int ndx;                                        \
81                                                         \
82 	if (!port_obj_table)                            \
83 	        port_obj_init(port_obj_table_size);     \
84 	ndx = MACH_PORT_INDEX(pname);                   \
85 	assert(ndx > 0);                                \
86 	assert(ndx < port_obj_table_size);              \
87 	port_obj_table[ndx].pos_value = (value);        \
88 	port_obj_table[ndx].pos_type = (type);          \
89 } while (0)
90 
91 #define port_get_obj_value(pname)                               \
92 	((MACH_PORT_INDEX(pname) < (unsigned)port_obj_table_size) ?     \
93 	port_obj_table[MACH_PORT_INDEX(pname)].pos_value :      \
94 	(panic("port_get_obj_value: index too big"), (void *)-1))
95 
96 #define port_get_obj_type(pname)                                \
97 	((MACH_PORT_INDEX(pname) < (unsigned)port_obj_table_size) ?     \
98 	port_obj_table[MACH_PORT_INDEX(pname)].pos_type :       \
99 	(panic("port_get_obj_type: index too big"), -1))
100 
101 #endif  /* PORT_OBJ_ASSERT */
102 
103 #endif  /* PORT_OBJ_H */
104