1/*
2 * Copyright (c) 1998-2012 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#ifndef	__IOKIT_IOTYPES_H
29#define __IOKIT_IOTYPES_H
30
31#ifndef IOKIT
32#define IOKIT 1
33#endif /* !IOKIT */
34
35#if KERNEL
36#include <IOKit/system.h>
37#else
38#include <mach/message.h>
39#include <mach/vm_types.h>
40#endif
41
42#include <IOKit/IOReturn.h>
43
44#ifdef __cplusplus
45extern "C" {
46#endif
47
48#ifndef	NULL
49#if defined (__cplusplus)
50#define	NULL	0
51#else
52#define NULL ((void *)0)
53#endif
54#endif
55
56/*
57 * Simple data types.
58 */
59#include <stdbool.h>
60#include <libkern/OSTypes.h>
61
62#if KERNEL
63#include <libkern/OSBase.h>
64#endif
65
66typedef UInt32		IOOptionBits;
67typedef SInt32		IOFixed;
68typedef UInt32		IOVersion;
69typedef UInt32		IOItemCount;
70typedef UInt32  	IOCacheMode;
71
72typedef UInt32	 	IOByteCount32;
73typedef UInt64	 	IOByteCount64;
74
75typedef UInt32	IOPhysicalAddress32;
76typedef UInt64	IOPhysicalAddress64;
77typedef UInt32	IOPhysicalLength32;
78typedef UInt64	IOPhysicalLength64;
79
80#if !defined(__arm__) && !defined(__i386__)
81typedef mach_vm_address_t	IOVirtualAddress;
82#else
83typedef vm_address_t		IOVirtualAddress;
84#endif
85
86#if !defined(__arm__) && !defined(__i386__) && !(defined(__x86_64__) && !defined(KERNEL))
87typedef IOByteCount64		IOByteCount;
88#else
89typedef IOByteCount32	 	IOByteCount;
90#endif
91
92typedef IOVirtualAddress    IOLogicalAddress;
93
94#if !defined(__arm__) && !defined(__i386__) && !(defined(__x86_64__) && !defined(KERNEL))
95
96typedef IOPhysicalAddress64	 IOPhysicalAddress;
97typedef IOPhysicalLength64	 IOPhysicalLength;
98#define IOPhysical32( hi, lo )		((UInt64) lo + ((UInt64)(hi) << 32))
99#define IOPhysSize	64
100
101#else
102
103typedef IOPhysicalAddress32	 IOPhysicalAddress;
104typedef IOPhysicalLength32	 IOPhysicalLength;
105#define IOPhysical32( hi, lo )		(lo)
106#define IOPhysSize	32
107
108#endif
109
110
111typedef struct
112{
113    IOPhysicalAddress	address;
114    IOByteCount		length;
115} IOPhysicalRange;
116
117typedef struct
118{
119    IOVirtualAddress	address;
120    IOByteCount		length;
121} IOVirtualRange;
122
123#if !defined(__arm__) && !defined(__i386__)
124typedef IOVirtualRange	IOAddressRange;
125#else
126typedef struct
127{
128    mach_vm_address_t	address;
129    mach_vm_size_t	length;
130} IOAddressRange;
131#endif
132
133/*
134 * Map between #defined or enum'd constants and text description.
135 */
136typedef struct {
137	int value;
138	const char *name;
139} IONamedValue;
140
141
142/*
143 * Memory alignment -- specified as a power of two.
144 */
145typedef unsigned int	IOAlignment;
146
147#define IO_NULL_VM_TASK		((vm_task_t)0)
148
149
150/*
151 * Pull in machine specific stuff.
152 */
153
154//#include <IOKit/machine/IOTypes.h>
155
156#ifndef MACH_KERNEL
157
158#ifndef __IOKIT_PORTS_DEFINED__
159#define __IOKIT_PORTS_DEFINED__
160#ifdef KERNEL
161#ifdef __cplusplus
162class OSObject;
163typedef OSObject * io_object_t;
164#else
165typedef struct OSObject * io_object_t;
166#endif
167#else /* KERNEL */
168typedef mach_port_t	io_object_t;
169#endif /* KERNEL */
170#endif /* __IOKIT_PORTS_DEFINED__ */
171
172#include <device/device_types.h>
173
174typedef io_object_t	io_connect_t;
175typedef io_object_t	io_enumerator_t;
176typedef io_object_t	io_iterator_t;
177typedef io_object_t	io_registry_entry_t;
178typedef io_object_t	io_service_t;
179
180#define	IO_OBJECT_NULL	((io_object_t) 0)
181
182#endif /* MACH_KERNEL */
183
184// IOConnectMapMemory memoryTypes
185enum {
186    kIODefaultMemoryType	= 0
187};
188
189enum {
190    kIODefaultCache		= 0,
191    kIOInhibitCache		= 1,
192    kIOWriteThruCache		= 2,
193    kIOCopybackCache		= 3,
194    kIOWriteCombineCache	= 4,
195    kIOCopybackInnerCache	= 5
196};
197
198// IOMemory mapping options
199enum {
200    kIOMapAnywhere		= 0x00000001,
201
202    kIOMapCacheMask		= 0x00000700,
203    kIOMapCacheShift		= 8,
204    kIOMapDefaultCache		= kIODefaultCache       << kIOMapCacheShift,
205    kIOMapInhibitCache		= kIOInhibitCache       << kIOMapCacheShift,
206    kIOMapWriteThruCache	= kIOWriteThruCache     << kIOMapCacheShift,
207    kIOMapCopybackCache		= kIOCopybackCache      << kIOMapCacheShift,
208    kIOMapWriteCombineCache	= kIOWriteCombineCache  << kIOMapCacheShift,
209    kIOMapCopybackInnerCache	= kIOCopybackInnerCache << kIOMapCacheShift,
210
211    kIOMapUserOptionsMask	= 0x00000fff,
212
213    kIOMapReadOnly		= 0x00001000,
214
215    kIOMapStatic		= 0x01000000,
216    kIOMapReference		= 0x02000000,
217    kIOMapUnique		= 0x04000000,
218#ifdef XNU_KERNEL_PRIVATE
219    kIOMap64Bit			= 0x08000000,
220#endif
221    kIOMapPrefault		= 0x10000000,
222};
223
224/*! @enum Scale Factors
225    @discussion Used when a scale_factor parameter is required to define a unit of time.
226    @constant kNanosecondScale Scale factor for nanosecond based times.
227    @constant kMicrosecondScale Scale factor for microsecond based times.
228    @constant kMillisecondScale Scale factor for millisecond based times.
229    @constant kTickScale Scale factor for the standard (100Hz) tick.
230    @constant kSecondScale Scale factor for second based times. */
231
232enum {
233    kNanosecondScale  = 1,
234    kMicrosecondScale = 1000,
235    kMillisecondScale = 1000 * 1000,
236    kSecondScale      = 1000 * 1000 * 1000,
237    kTickScale        = (kSecondScale / 100)
238};
239
240enum {
241    kIOConnectMethodVarOutputSize = -3
242};
243
244/* compatibility types */
245
246#ifndef KERNEL
247
248typedef unsigned int IODeviceNumber;
249
250#endif
251
252#ifdef __cplusplus
253}
254#endif
255
256#endif /* ! __IOKIT_IOTYPES_H */
257