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