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