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 | |