xref: /xnu-11215.61.5/iokit/IOKit/IOTypes.h (revision 4f1223e81cd707a65cc109d0b8ad6653699da3c4)
1*4f1223e8SApple OSS Distributions /*
2*4f1223e8SApple OSS Distributions  * Copyright (c) 1998-2012 Apple Computer, Inc. All rights reserved.
3*4f1223e8SApple OSS Distributions  *
4*4f1223e8SApple OSS Distributions  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5*4f1223e8SApple OSS Distributions  *
6*4f1223e8SApple OSS Distributions  * This file contains Original Code and/or Modifications of Original Code
7*4f1223e8SApple OSS Distributions  * as defined in and that are subject to the Apple Public Source License
8*4f1223e8SApple OSS Distributions  * Version 2.0 (the 'License'). You may not use this file except in
9*4f1223e8SApple OSS Distributions  * compliance with the License. The rights granted to you under the License
10*4f1223e8SApple OSS Distributions  * may not be used to create, or enable the creation or redistribution of,
11*4f1223e8SApple OSS Distributions  * unlawful or unlicensed copies of an Apple operating system, or to
12*4f1223e8SApple OSS Distributions  * circumvent, violate, or enable the circumvention or violation of, any
13*4f1223e8SApple OSS Distributions  * terms of an Apple operating system software license agreement.
14*4f1223e8SApple OSS Distributions  *
15*4f1223e8SApple OSS Distributions  * Please obtain a copy of the License at
16*4f1223e8SApple OSS Distributions  * http://www.opensource.apple.com/apsl/ and read it before using this file.
17*4f1223e8SApple OSS Distributions  *
18*4f1223e8SApple OSS Distributions  * The Original Code and all software distributed under the License are
19*4f1223e8SApple OSS Distributions  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20*4f1223e8SApple OSS Distributions  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21*4f1223e8SApple OSS Distributions  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22*4f1223e8SApple OSS Distributions  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23*4f1223e8SApple OSS Distributions  * Please see the License for the specific language governing rights and
24*4f1223e8SApple OSS Distributions  * limitations under the License.
25*4f1223e8SApple OSS Distributions  *
26*4f1223e8SApple OSS Distributions  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27*4f1223e8SApple OSS Distributions  */
28*4f1223e8SApple OSS Distributions #ifndef __IOKIT_IOTYPES_H
29*4f1223e8SApple OSS Distributions #define __IOKIT_IOTYPES_H
30*4f1223e8SApple OSS Distributions 
31*4f1223e8SApple OSS Distributions #ifndef XNU_PLATFORM_DriverKit
32*4f1223e8SApple OSS Distributions 
33*4f1223e8SApple OSS Distributions #ifndef IOKIT
34*4f1223e8SApple OSS Distributions #define IOKIT 1
35*4f1223e8SApple OSS Distributions #endif /* !IOKIT */
36*4f1223e8SApple OSS Distributions 
37*4f1223e8SApple OSS Distributions #include <sys/cdefs.h>
38*4f1223e8SApple OSS Distributions 
39*4f1223e8SApple OSS Distributions #if KERNEL
40*4f1223e8SApple OSS Distributions #include <IOKit/system.h>
41*4f1223e8SApple OSS Distributions #else
42*4f1223e8SApple OSS Distributions #include <mach/message.h>
43*4f1223e8SApple OSS Distributions #include <mach/vm_types.h>
44*4f1223e8SApple OSS Distributions #endif
45*4f1223e8SApple OSS Distributions 
46*4f1223e8SApple OSS Distributions #include <IOKit/IOReturn.h>
47*4f1223e8SApple OSS Distributions 
48*4f1223e8SApple OSS Distributions #ifdef __cplusplus
49*4f1223e8SApple OSS Distributions extern "C" {
50*4f1223e8SApple OSS Distributions #endif
51*4f1223e8SApple OSS Distributions 
52*4f1223e8SApple OSS Distributions #ifndef NULL
53*4f1223e8SApple OSS Distributions #ifdef XNU_KERNEL_PRIVATE
54*4f1223e8SApple OSS Distributions #if defined (__cplusplus)
55*4f1223e8SApple OSS Distributions #define NULL nullptr
56*4f1223e8SApple OSS Distributions #else
57*4f1223e8SApple OSS Distributions #define NULL ((void *)0)
58*4f1223e8SApple OSS Distributions #endif
59*4f1223e8SApple OSS Distributions #else // XNU_KERNEL_PRIVATE
60*4f1223e8SApple OSS Distributions 
61*4f1223e8SApple OSS Distributions #ifdef KERNEL
62*4f1223e8SApple OSS Distributions #ifdef XNU_KERNEL_PRIVATE
63*4f1223e8SApple OSS Distributions /*
64*4f1223e8SApple OSS Distributions  * Xcode doesn't currently set up search paths correctly for Kernel extensions,
65*4f1223e8SApple OSS Distributions  * so the clang headers are not seen in the correct order to use their types.
66*4f1223e8SApple OSS Distributions  */
67*4f1223e8SApple OSS Distributions #endif
68*4f1223e8SApple OSS Distributions #define USE_CLANG_TYPES 0
69*4f1223e8SApple OSS Distributions #else
70*4f1223e8SApple OSS Distributions #if defined(__has_feature) && __has_feature(modules)
71*4f1223e8SApple OSS Distributions #define USE_CLANG_TYPES 1
72*4f1223e8SApple OSS Distributions #else
73*4f1223e8SApple OSS Distributions #define USE_CLANG_TYPES 0
74*4f1223e8SApple OSS Distributions #endif
75*4f1223e8SApple OSS Distributions #endif
76*4f1223e8SApple OSS Distributions 
77*4f1223e8SApple OSS Distributions #if USE_CLANG_TYPES
78*4f1223e8SApple OSS Distributions #define __need_NULL
79*4f1223e8SApple OSS Distributions #include <stddef.h>
80*4f1223e8SApple OSS Distributions #undef __need_NULL
81*4f1223e8SApple OSS Distributions #elif defined (__cplusplus)
82*4f1223e8SApple OSS Distributions #if __cplusplus >= 201103L && (defined(__arm__) || defined(__arm64__))
83*4f1223e8SApple OSS Distributions #define NULL nullptr
84*4f1223e8SApple OSS Distributions #else
85*4f1223e8SApple OSS Distributions #define NULL    0
86*4f1223e8SApple OSS Distributions #endif
87*4f1223e8SApple OSS Distributions #else
88*4f1223e8SApple OSS Distributions #define NULL ((void *)0)
89*4f1223e8SApple OSS Distributions #endif
90*4f1223e8SApple OSS Distributions 
91*4f1223e8SApple OSS Distributions #undef USE_CLANG_TYPES
92*4f1223e8SApple OSS Distributions 
93*4f1223e8SApple OSS Distributions #endif // XNU_KERNEL_PRIVATE
94*4f1223e8SApple OSS Distributions #endif
95*4f1223e8SApple OSS Distributions 
96*4f1223e8SApple OSS Distributions /*
97*4f1223e8SApple OSS Distributions  * Simple data types.
98*4f1223e8SApple OSS Distributions  */
99*4f1223e8SApple OSS Distributions #include <stdbool.h>
100*4f1223e8SApple OSS Distributions #include <libkern/OSTypes.h>
101*4f1223e8SApple OSS Distributions 
102*4f1223e8SApple OSS Distributions #if KERNEL
103*4f1223e8SApple OSS Distributions #include <libkern/OSBase.h>
104*4f1223e8SApple OSS Distributions #endif
105*4f1223e8SApple OSS Distributions 
106*4f1223e8SApple OSS Distributions typedef UInt32          IOOptionBits;
107*4f1223e8SApple OSS Distributions typedef SInt32          IOFixed;
108*4f1223e8SApple OSS Distributions typedef UInt32          IOVersion;
109*4f1223e8SApple OSS Distributions typedef UInt32          IOItemCount;
110*4f1223e8SApple OSS Distributions typedef UInt32          IOCacheMode;
111*4f1223e8SApple OSS Distributions 
112*4f1223e8SApple OSS Distributions typedef UInt32          IOByteCount32;
113*4f1223e8SApple OSS Distributions typedef UInt64          IOByteCount64;
114*4f1223e8SApple OSS Distributions 
115*4f1223e8SApple OSS Distributions typedef UInt32  IOPhysicalAddress32;
116*4f1223e8SApple OSS Distributions typedef UInt64  IOPhysicalAddress64;
117*4f1223e8SApple OSS Distributions typedef UInt32  IOPhysicalLength32;
118*4f1223e8SApple OSS Distributions typedef UInt64  IOPhysicalLength64;
119*4f1223e8SApple OSS Distributions 
120*4f1223e8SApple OSS Distributions #if !defined(__arm__) && !defined(__i386__)
121*4f1223e8SApple OSS Distributions typedef mach_vm_address_t       IOVirtualAddress __kernel_ptr_semantics;
122*4f1223e8SApple OSS Distributions #else
123*4f1223e8SApple OSS Distributions typedef vm_address_t            IOVirtualAddress __kernel_ptr_semantics;
124*4f1223e8SApple OSS Distributions #endif
125*4f1223e8SApple OSS Distributions 
126*4f1223e8SApple OSS Distributions #if !defined(__arm__) && !defined(__i386__) && !(defined(__x86_64__) && !defined(KERNEL)) && !(defined(__arm64__) && !defined(__LP64__))
127*4f1223e8SApple OSS Distributions typedef IOByteCount64           IOByteCount;
128*4f1223e8SApple OSS Distributions #define PRIIOByteCount                  PRIu64
129*4f1223e8SApple OSS Distributions #else
130*4f1223e8SApple OSS Distributions typedef IOByteCount32           IOByteCount;
131*4f1223e8SApple OSS Distributions #define PRIIOByteCount                  PRIu32
132*4f1223e8SApple OSS Distributions #endif
133*4f1223e8SApple OSS Distributions 
134*4f1223e8SApple OSS Distributions typedef IOVirtualAddress    IOLogicalAddress;
135*4f1223e8SApple OSS Distributions 
136*4f1223e8SApple OSS Distributions #if !defined(__arm__) && !defined(__i386__) && !(defined(__x86_64__) && !defined(KERNEL))
137*4f1223e8SApple OSS Distributions 
138*4f1223e8SApple OSS Distributions typedef IOPhysicalAddress64      IOPhysicalAddress;
139*4f1223e8SApple OSS Distributions typedef IOPhysicalLength64       IOPhysicalLength;
140*4f1223e8SApple OSS Distributions #define IOPhysical32( hi, lo )          ((UInt64) lo + ((UInt64)(hi) << 32))
141*4f1223e8SApple OSS Distributions #define IOPhysSize      64
142*4f1223e8SApple OSS Distributions 
143*4f1223e8SApple OSS Distributions #else
144*4f1223e8SApple OSS Distributions 
145*4f1223e8SApple OSS Distributions typedef IOPhysicalAddress32      IOPhysicalAddress;
146*4f1223e8SApple OSS Distributions typedef IOPhysicalLength32       IOPhysicalLength;
147*4f1223e8SApple OSS Distributions #define IOPhysical32( hi, lo )          (lo)
148*4f1223e8SApple OSS Distributions #define IOPhysSize      32
149*4f1223e8SApple OSS Distributions 
150*4f1223e8SApple OSS Distributions #endif
151*4f1223e8SApple OSS Distributions 
152*4f1223e8SApple OSS Distributions 
153*4f1223e8SApple OSS Distributions typedef struct{
154*4f1223e8SApple OSS Distributions 	IOPhysicalAddress   address;
155*4f1223e8SApple OSS Distributions 	IOByteCount         length;
156*4f1223e8SApple OSS Distributions } IOPhysicalRange;
157*4f1223e8SApple OSS Distributions 
158*4f1223e8SApple OSS Distributions typedef struct{
159*4f1223e8SApple OSS Distributions 	IOVirtualAddress    address;
160*4f1223e8SApple OSS Distributions 	IOByteCount         length;
161*4f1223e8SApple OSS Distributions } IOVirtualRange;
162*4f1223e8SApple OSS Distributions 
163*4f1223e8SApple OSS Distributions #if !defined(__arm__) && !defined(__i386__)
164*4f1223e8SApple OSS Distributions typedef IOVirtualRange  IOAddressRange;
165*4f1223e8SApple OSS Distributions #else
166*4f1223e8SApple OSS Distributions typedef struct{
167*4f1223e8SApple OSS Distributions 	mach_vm_address_t   address;
168*4f1223e8SApple OSS Distributions 	mach_vm_size_t      length;
169*4f1223e8SApple OSS Distributions } IOAddressRange;
170*4f1223e8SApple OSS Distributions #endif
171*4f1223e8SApple OSS Distributions 
172*4f1223e8SApple OSS Distributions /*
173*4f1223e8SApple OSS Distributions  * Map between #defined or enum'd constants and text description.
174*4f1223e8SApple OSS Distributions  */
175*4f1223e8SApple OSS Distributions typedef struct {
176*4f1223e8SApple OSS Distributions 	int value;
177*4f1223e8SApple OSS Distributions 	const char *name;
178*4f1223e8SApple OSS Distributions } IONamedValue;
179*4f1223e8SApple OSS Distributions 
180*4f1223e8SApple OSS Distributions 
181*4f1223e8SApple OSS Distributions /*
182*4f1223e8SApple OSS Distributions  * Memory alignment -- specified as a power of two.
183*4f1223e8SApple OSS Distributions  */
184*4f1223e8SApple OSS Distributions typedef unsigned int    IOAlignment;
185*4f1223e8SApple OSS Distributions 
186*4f1223e8SApple OSS Distributions #define IO_NULL_VM_TASK         ((vm_task_t)0)
187*4f1223e8SApple OSS Distributions 
188*4f1223e8SApple OSS Distributions 
189*4f1223e8SApple OSS Distributions /*
190*4f1223e8SApple OSS Distributions  * Pull in machine specific stuff.
191*4f1223e8SApple OSS Distributions  */
192*4f1223e8SApple OSS Distributions 
193*4f1223e8SApple OSS Distributions //#include <IOKit/machine/IOTypes.h>
194*4f1223e8SApple OSS Distributions 
195*4f1223e8SApple OSS Distributions #ifndef MACH_KERNEL
196*4f1223e8SApple OSS Distributions 
197*4f1223e8SApple OSS Distributions #ifndef __IOKIT_PORTS_DEFINED__
198*4f1223e8SApple OSS Distributions #define __IOKIT_PORTS_DEFINED__
199*4f1223e8SApple OSS Distributions #ifdef KERNEL
200*4f1223e8SApple OSS Distributions #ifdef __cplusplus
201*4f1223e8SApple OSS Distributions class OSObject;
202*4f1223e8SApple OSS Distributions typedef OSObject * io_object_t;
203*4f1223e8SApple OSS Distributions #else
204*4f1223e8SApple OSS Distributions typedef struct OSObject * io_object_t;
205*4f1223e8SApple OSS Distributions #endif
206*4f1223e8SApple OSS Distributions #else /* KERNEL */
207*4f1223e8SApple OSS Distributions typedef mach_port_t     io_object_t;
208*4f1223e8SApple OSS Distributions #endif /* KERNEL */
209*4f1223e8SApple OSS Distributions #endif /* __IOKIT_PORTS_DEFINED__ */
210*4f1223e8SApple OSS Distributions 
211*4f1223e8SApple OSS Distributions #include <device/device_types.h>
212*4f1223e8SApple OSS Distributions 
213*4f1223e8SApple OSS Distributions typedef io_object_t     io_connect_t;
214*4f1223e8SApple OSS Distributions typedef io_object_t     io_enumerator_t;
215*4f1223e8SApple OSS Distributions typedef io_object_t     io_ident_t;
216*4f1223e8SApple OSS Distributions typedef io_object_t     io_iterator_t;
217*4f1223e8SApple OSS Distributions typedef io_object_t     io_registry_entry_t;
218*4f1223e8SApple OSS Distributions typedef io_object_t     io_service_t;
219*4f1223e8SApple OSS Distributions typedef io_object_t     uext_object_t;
220*4f1223e8SApple OSS Distributions 
221*4f1223e8SApple OSS Distributions #define IO_OBJECT_NULL  ((io_object_t) 0)
222*4f1223e8SApple OSS Distributions 
223*4f1223e8SApple OSS Distributions #endif /* MACH_KERNEL */
224*4f1223e8SApple OSS Distributions 
225*4f1223e8SApple OSS Distributions #include <IOKit/IOMapTypes.h>
226*4f1223e8SApple OSS Distributions 
227*4f1223e8SApple OSS Distributions /*! @enum Scale Factors
228*4f1223e8SApple OSS Distributions  *   @discussion Used when a scale_factor parameter is required to define a unit of time.
229*4f1223e8SApple OSS Distributions  *   @constant kNanosecondScale Scale factor for nanosecond based times.
230*4f1223e8SApple OSS Distributions  *   @constant kMicrosecondScale Scale factor for microsecond based times.
231*4f1223e8SApple OSS Distributions  *   @constant kMillisecondScale Scale factor for millisecond based times.
232*4f1223e8SApple OSS Distributions  *   @constant kTickScale Scale factor for the standard (100Hz) tick.
233*4f1223e8SApple OSS Distributions  *   @constant kSecondScale Scale factor for second based times. */
234*4f1223e8SApple OSS Distributions 
235*4f1223e8SApple OSS Distributions enum {
236*4f1223e8SApple OSS Distributions 	kNanosecondScale  = 1,
237*4f1223e8SApple OSS Distributions 	kMicrosecondScale = 1000,
238*4f1223e8SApple OSS Distributions 	kMillisecondScale = 1000 * 1000,
239*4f1223e8SApple OSS Distributions 	kSecondScale      = 1000 * 1000 * 1000,
240*4f1223e8SApple OSS Distributions 	kTickScale        = (kSecondScale / 100)
241*4f1223e8SApple OSS Distributions };
242*4f1223e8SApple OSS Distributions 
243*4f1223e8SApple OSS Distributions enum {
244*4f1223e8SApple OSS Distributions 	kIOConnectMethodVarOutputSize = -3
245*4f1223e8SApple OSS Distributions };
246*4f1223e8SApple OSS Distributions 
247*4f1223e8SApple OSS Distributions /* compatibility types */
248*4f1223e8SApple OSS Distributions 
249*4f1223e8SApple OSS Distributions #ifndef KERNEL
250*4f1223e8SApple OSS Distributions 
251*4f1223e8SApple OSS Distributions typedef unsigned int IODeviceNumber;
252*4f1223e8SApple OSS Distributions 
253*4f1223e8SApple OSS Distributions #endif
254*4f1223e8SApple OSS Distributions 
255*4f1223e8SApple OSS Distributions #ifdef __cplusplus
256*4f1223e8SApple OSS Distributions }
257*4f1223e8SApple OSS Distributions #endif
258*4f1223e8SApple OSS Distributions 
259*4f1223e8SApple OSS Distributions #else /* !XNU_PLATFORM_DriverKit */
260*4f1223e8SApple OSS Distributions 
261*4f1223e8SApple OSS Distributions #include <stdint.h>
262*4f1223e8SApple OSS Distributions 
263*4f1223e8SApple OSS Distributions typedef uint32_t          IOOptionBits;
264*4f1223e8SApple OSS Distributions typedef int32_t           IOFixed;
265*4f1223e8SApple OSS Distributions typedef uint32_t          IOVersion;
266*4f1223e8SApple OSS Distributions typedef uint32_t          IOItemCount;
267*4f1223e8SApple OSS Distributions typedef uint32_t          IOCacheMode;
268*4f1223e8SApple OSS Distributions 
269*4f1223e8SApple OSS Distributions typedef uint32_t          IOByteCount32;
270*4f1223e8SApple OSS Distributions typedef uint64_t          IOByteCount64;
271*4f1223e8SApple OSS Distributions typedef IOByteCount64     IOByteCount;
272*4f1223e8SApple OSS Distributions 
273*4f1223e8SApple OSS Distributions typedef uint32_t  IOPhysicalAddress32;
274*4f1223e8SApple OSS Distributions typedef uint64_t  IOPhysicalAddress64;
275*4f1223e8SApple OSS Distributions typedef uint32_t  IOPhysicalLength32;
276*4f1223e8SApple OSS Distributions typedef uint64_t  IOPhysicalLength64;
277*4f1223e8SApple OSS Distributions 
278*4f1223e8SApple OSS Distributions typedef IOPhysicalAddress64      IOPhysicalAddress;
279*4f1223e8SApple OSS Distributions typedef IOPhysicalLength64       IOPhysicalLength;
280*4f1223e8SApple OSS Distributions 
281*4f1223e8SApple OSS Distributions typedef uint64_t       IOVirtualAddress;
282*4f1223e8SApple OSS Distributions 
283*4f1223e8SApple OSS Distributions #endif /* XNU_PLATFORM_DriverKit */
284*4f1223e8SApple OSS Distributions 
285*4f1223e8SApple OSS Distributions enum {
286*4f1223e8SApple OSS Distributions 	kIOMaxBusStall40usec = 40000,
287*4f1223e8SApple OSS Distributions 	kIOMaxBusStall30usec = 30000,
288*4f1223e8SApple OSS Distributions 	kIOMaxBusStall25usec = 25000,
289*4f1223e8SApple OSS Distributions 	kIOMaxBusStall20usec = 20000,
290*4f1223e8SApple OSS Distributions 	kIOMaxBusStall10usec = 10000,
291*4f1223e8SApple OSS Distributions 	kIOMaxBusStall5usec  = 5000,
292*4f1223e8SApple OSS Distributions 	kIOMaxBusStallNone   = 0,
293*4f1223e8SApple OSS Distributions };
294*4f1223e8SApple OSS Distributions 
295*4f1223e8SApple OSS Distributions #if PRIVATE
296*4f1223e8SApple OSS Distributions #define LIBKERN_OSNUMBER_FLOAT_SUPPORT          1
297*4f1223e8SApple OSS Distributions #endif /* PRIVATE */
298*4f1223e8SApple OSS Distributions 
299*4f1223e8SApple OSS Distributions #endif /* ! __IOKIT_IOTYPES_H */
300