2 * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
4 * @APPLE_LICENSE_HEADER_START@
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.
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
20 * @APPLE_LICENSE_HEADER_END@
26 * Mach Operating System
27 * Copyright (c) 1991,1990,1989 Carnegie Mellon University
28 * All Rights Reserved.
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.
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.
40 * Carnegie Mellon requests users of this software to return to
42 * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
43 * School of Computer Science
44 * Carnegie Mellon University
45 * Pittsburgh PA 15213-3890
47 * any improvements or extensions that they make and grant Carnegie Mellon
48 * the rights to redistribute these changes.
51 * File: device/device.defs
55 * Mach device support. Mach devices are accessed through
56 * block and character device interfaces to the kernel.
62 #endif /* KERNEL_SERVER */
65 #include <mach/std_types.defs>
66 #include <mach/mach_types.defs>
67 #include <mach/clock_types.defs>
68 #include <mach/clock_types.defs>
70 import <device/device_types.h>;
74 type reply_port_t = MACH_MSG_TYPE_MAKE_SEND_ONCE | polymorphic
79 type io_name_t = c_string[*:128];
80 type io_string_t = c_string[*:512];
81 type io_struct_inband_t = array[*:4096] of char;
82 type io_scalar_inband_t = array[*:16] of int;
83 type io_async_ref_t = array[*:8] of natural_t;
84 type io_buf_ptr_t = ^array[] of MACH_MSG_TYPE_INTEGER_8;
86 type io_object_t = mach_port_t
89 intran: io_object_t iokit_lookup_object_port(mach_port_t)
90 outtran: mach_port_t iokit_make_object_port(io_object_t)
91 destructor: iokit_remove_reference(io_object_t)
92 #endif /* KERNEL_SERVER */
95 type io_connect_t = mach_port_t
98 intran: io_connect_t iokit_lookup_connect_port(mach_port_t)
99 outtran: mach_port_t iokit_make_connect_port(io_connect_t)
100 destructor: iokit_remove_reference(io_connect_t)
101 #endif /* KERNEL_SERVER */
104 routine io_object_get_class(
105 object : io_object_t;
106 out className : io_name_t
109 routine io_object_conforms_to(
110 object : io_object_t;
111 in className : io_name_t;
112 out conforms : boolean_t
115 routine io_iterator_next(
116 iterator : io_object_t;
117 out object : io_object_t
120 routine io_iterator_reset(
121 iterator : io_object_t
124 routine io_service_get_matching_services(
125 master_port : mach_port_t;
126 in matching : io_string_t;
127 out existing : io_object_t
130 routine io_service_add_notification_old(
131 master_port : mach_port_t;
132 in notification_type : io_name_t;
133 in matching : io_string_t;
134 in wake_port : mach_port_make_send_t;
135 in reference : natural_t;
136 out notification : io_object_t
139 routine io_registry_create_iterator(
140 master_port : mach_port_t;
141 in plane : io_name_t;
143 out iterator : io_object_t
146 routine io_registry_iterator_enter_entry(
147 iterator : io_object_t
150 routine io_registry_iterator_exit_entry(
151 iterator : io_object_t
154 routine io_registry_entry_from_path(
155 master_port : mach_port_t;
156 in path : io_string_t;
157 out registry_entry : io_object_t
160 routine io_registry_entry_get_name(
161 registry_entry : io_object_t;
165 routine io_registry_entry_get_properties(
166 registry_entry : io_object_t;
167 out properties : io_buf_ptr_t, physicalcopy
170 routine io_registry_entry_get_property(
171 registry_entry : io_object_t;
172 in property_name : io_name_t;
173 out data : io_struct_inband_t, CountInOut
176 routine io_registry_entry_get_child_iterator(
177 registry_entry : io_object_t;
178 in plane : io_name_t;
179 out iterator : io_object_t
182 routine io_registry_entry_get_parent_iterator(
183 registry_entry : io_object_t;
184 in plane : io_name_t;
185 out iterator : io_object_t
188 routine io_service_open(
189 service : io_object_t;
190 in owningTask : task_t;
191 in connect_type : int;
192 out connection : io_connect_t
195 routine io_service_close(
196 connection : io_connect_t
199 routine io_connect_get_service(
200 connection : io_connect_t;
201 out service : io_object_t
204 routine io_connect_set_notification_port(
205 connection : io_connect_t;
206 in notification_type : int;
207 in port : mach_port_make_send_t;
211 routine io_connect_map_memory(
212 connection : io_connect_t;
213 in memory_type : int;
214 in into_task : task_t;
215 inout address : vm_address_t;
216 inout size : vm_size_t;
220 routine io_connect_add_client(
221 connection : io_connect_t;
222 in connect_to : io_connect_t
225 routine io_connect_set_properties(
226 connection : io_connect_t;
227 in properties : io_buf_ptr_t, physicalcopy;
228 out result : natural_t
232 routine io_connect_method_scalarI_scalarO(
233 connection : io_connect_t;
235 in input : io_scalar_inband_t;
236 out output : io_scalar_inband_t, CountInOut
239 routine io_connect_method_scalarI_structureO(
240 connection : io_connect_t;
242 in input : io_scalar_inband_t;
243 out output : io_struct_inband_t, CountInOut
246 routine io_connect_method_scalarI_structureI(
247 connection : io_connect_t;
249 in input : io_scalar_inband_t;
250 in inputStruct : io_struct_inband_t
253 routine io_connect_method_structureI_structureO(
254 connection : io_connect_t;
256 in input : io_struct_inband_t;
257 out output : io_struct_inband_t, CountInOut
260 routine io_registry_entry_get_path(
261 registry_entry : io_object_t;
262 in plane : io_name_t;
263 out path : io_string_t
266 routine io_registry_get_root_entry(
267 master_port : mach_port_t;
268 out root : io_object_t
271 routine io_registry_entry_set_properties(
272 registry_entry : io_object_t;
273 in properties : io_buf_ptr_t, physicalcopy;
274 out result : natural_t
277 routine io_registry_entry_in_plane(
278 registry_entry : io_object_t;
279 in plane : io_name_t;
280 out inPlane : boolean_t
283 routine io_object_get_retain_count(
284 object : io_object_t;
285 out retainCount : int
288 routine io_service_get_busy_state(
289 service : io_object_t;
293 routine io_service_wait_quiet(
294 service : io_object_t;
295 wait_time : mach_timespec_t
298 routine io_registry_entry_create_iterator(
299 registry_entry : io_object_t;
300 in plane : io_name_t;
302 out iterator : io_object_t
305 routine io_iterator_is_valid(
306 iterator : io_object_t;
307 out is_valid : boolean_t
310 routine io_make_matching(
311 master_port : mach_port_t;
314 in input : io_struct_inband_t;
315 out matching : io_string_t
318 routine io_catalog_send_data(
319 master_port : mach_port_t;
321 in inData : io_buf_ptr_t;
322 out result : natural_t
325 routine io_catalog_terminate(
326 master_port : mach_port_t;
331 routine io_catalog_get_data(
332 master_port : mach_port_t;
334 out outData : io_buf_ptr_t
337 routine io_catalog_get_gen_count(
338 master_port : mach_port_t;
342 routine io_catalog_module_loaded(
343 master_port : mach_port_t;
347 routine io_catalog_reset(
348 master_port : mach_port_t;
352 routine io_service_request_probe(
353 service : io_object_t;
357 routine io_registry_entry_get_name_in_plane(
358 registry_entry : io_object_t;
359 in plane : io_name_t;
363 routine io_service_match_property_table(
364 service : io_object_t;
365 in matching : io_string_t;
366 out matches : boolean_t
369 routine io_async_method_scalarI_scalarO(
370 connection : io_connect_t;
371 in wake_port : mach_port_make_send_t;
372 in reference : io_async_ref_t;
374 in input : io_scalar_inband_t;
375 out output : io_scalar_inband_t, CountInOut
378 routine io_async_method_scalarI_structureO(
379 connection : io_connect_t;
380 in wake_port : mach_port_make_send_t;
381 in reference : io_async_ref_t;
383 in input : io_scalar_inband_t;
384 out output : io_struct_inband_t, CountInOut
387 routine io_async_method_scalarI_structureI(
388 connection : io_connect_t;
389 in wake_port : mach_port_make_send_t;
390 in reference : io_async_ref_t;
392 in input : io_scalar_inband_t;
393 in inputStruct : io_struct_inband_t
396 routine io_async_method_structureI_structureO(
397 connection : io_connect_t;
398 in wake_port : mach_port_make_send_t;
399 in reference : io_async_ref_t;
401 in input : io_struct_inband_t;
402 out output : io_struct_inband_t, CountInOut
405 routine io_service_add_notification(
406 master_port : mach_port_t;
407 in notification_type : io_name_t;
408 in matching : io_string_t;
409 in wake_port : mach_port_make_send_t;
410 in reference : io_async_ref_t;
411 out notification : io_object_t
414 routine io_service_add_interest_notification(
415 service : io_object_t;
416 in type_of_interest : io_name_t;
417 in wake_port : mach_port_make_send_t;
418 in reference : io_async_ref_t;
419 out notification : io_object_t
422 routine io_service_acknowledge_notification(
423 service : io_object_t;
424 in notify_ref : natural_t;
425 in response : natural_t
428 routine io_connect_get_notification_semaphore(
429 connection : io_connect_t;
430 in notification_type : natural_t;
431 out semaphore : semaphore_t
435 routine io_connect_unmap_memory(
436 connection : io_connect_t;
437 in memory_type : int;
438 in into_task : task_t;
439 in address : vm_address_t