]> git.saurik.com Git - apple/xnu.git/blobdiff - iokit/IOKit/IOTypes.h
xnu-6153.41.3.tar.gz
[apple/xnu.git] / iokit / IOKit / IOTypes.h
index 294f325b34df229b3fbd6b7f09db0fc26783ad1a..d07f14f1b17ea846f6475778728bb9b6259db4b9 100644 (file)
@@ -1,8 +1,8 @@
 /*
- * Copyright (c) 1998-2004 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 1998-2012 Apple Computer, Inc. All rights reserved.
  *
  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
- * 
+ *
  * This file contains Original Code and/or Modifications of Original Code
  * as defined in and that are subject to the Apple Public Source License
  * Version 2.0 (the 'License'). You may not use this file except in
  * unlawful or unlicensed copies of an Apple operating system, or to
  * circumvent, violate, or enable the circumvention or violation of, any
  * terms of an Apple operating system software license agreement.
- * 
+ *
  * Please obtain a copy of the License at
  * http://www.opensource.apple.com/apsl/ and read it before using this file.
- * 
+ *
  * The Original Code and all software distributed under the License are
  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
  * Please see the License for the specific language governing rights and
  * limitations under the License.
- * 
- * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
- */
-/*
- * Copyright (c) 1998 Apple Computer, Inc.  All rights reserved. 
- *
- * HISTORY
  *
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
  */
-
-#ifndef        __IOKIT_IOTYPES_H
+#ifndef __IOKIT_IOTYPES_H
 #define __IOKIT_IOTYPES_H
 
+#ifndef PLATFORM_DriverKit
+
 #ifndef IOKIT
 #define IOKIT 1
 #endif /* !IOKIT */
 extern "C" {
 #endif
 
-#ifndef        NULL
-#define        NULL    0
+#ifndef NULL
+#if defined (__cplusplus)
+#if __cplusplus >= 201103L
+#define NULL nullptr
+#else
+#define NULL    0
+#endif
+#else
+#define NULL ((void *)0)
+#endif
 #endif
-       
+
 /*
  * Simple data types.
  */
-#ifndef __MACTYPES__   /* CF MacTypes.h */
-#ifndef __TYPES__      /* guess... Mac Types.h */
-
 #include <stdbool.h>
 #include <libkern/OSTypes.h>
 
-#endif /* __TYPES__ */
-#endif /* __MACTYPES__ */
+#if KERNEL
+#include <libkern/OSBase.h>
+#endif
 
-typedef UInt32         IOOptionBits;
-typedef SInt32         IOFixed;
-typedef UInt32         IOVersion;
-typedef UInt32         IOItemCount;
-typedef UInt32         IOCacheMode;
+typedef UInt32          IOOptionBits;
+typedef SInt32          IOFixed;
+typedef UInt32          IOVersion;
+typedef UInt32          IOItemCount;
+typedef UInt32          IOCacheMode;
 
-typedef UInt32         IOByteCount;
+typedef UInt32          IOByteCount32;
+typedef UInt64          IOByteCount64;
 
-  /* LP64todo - these will need to expand to mach_vm_address_t */
-typedef vm_address_t    IOVirtualAddress;
-typedef IOVirtualAddress IOLogicalAddress;
+typedef UInt32  IOPhysicalAddress32;
+typedef UInt64  IOPhysicalAddress64;
+typedef UInt32  IOPhysicalLength32;
+typedef UInt64  IOPhysicalLength64;
 
-#if 0
+#if !defined(__arm__) && !defined(__i386__)
+typedef mach_vm_address_t       IOVirtualAddress;
+#else
+typedef vm_address_t            IOVirtualAddress;
+#endif
 
-typedef UInt64 IOPhysicalAddress;
-typedef UInt64 IOPhysicalLength;
-#define IOPhysical32( hi, lo )         ((UInt64) lo + ((UInt64)(hi) << 32))
-#define IOPhysSize     64
+#if !defined(__arm__) && !defined(__i386__) && !(defined(__x86_64__) && !defined(KERNEL)) && !(defined(__arm64__) && !defined(__LP64__))
+typedef IOByteCount64           IOByteCount;
+#else
+typedef IOByteCount32           IOByteCount;
+#endif
+
+typedef IOVirtualAddress    IOLogicalAddress;
+
+#if !defined(__arm__) && !defined(__i386__) && !(defined(__x86_64__) && !defined(KERNEL))
+
+typedef IOPhysicalAddress64      IOPhysicalAddress;
+typedef IOPhysicalLength64       IOPhysicalLength;
+#define IOPhysical32( hi, lo )          ((UInt64) lo + ((UInt64)(hi) << 32))
+#define IOPhysSize      64
 
 #else
 
-typedef UInt32 IOPhysicalAddress;
-typedef UInt32 IOPhysicalLength;
-#define IOPhysical32( hi, lo )         (lo)
-#define IOPhysSize     32
+typedef IOPhysicalAddress32      IOPhysicalAddress;
+typedef IOPhysicalLength32       IOPhysicalLength;
+#define IOPhysical32( hi, lo )          (lo)
+#define IOPhysSize      32
 
 #endif
 
-#if __cplusplus
-struct IOVirtualRange
-{
-    IOVirtualAddress   address;
-    IOByteCount                length;
-};
-struct IOAddressRange
-{
-    mach_vm_address_t  address;
-    mach_vm_size_t     length;
-};
-#else
-typedef struct 
-{
-    IOVirtualAddress   address;
-    IOByteCount                length;
+
+typedef struct{
+       IOPhysicalAddress   address;
+       IOByteCount         length;
+} IOPhysicalRange;
+
+typedef struct{
+       IOVirtualAddress    address;
+       IOByteCount         length;
 } IOVirtualRange;
 
-struct IOAddressRange
-{
-    mach_vm_address_t  address;
-    mach_vm_size_t     length;
-};
+#if !defined(__arm__) && !defined(__i386__)
+typedef IOVirtualRange  IOAddressRange;
+#else
+typedef struct{
+       mach_vm_address_t   address;
+       mach_vm_size_t      length;
+} IOAddressRange;
 #endif
 
 /*
@@ -133,9 +145,9 @@ typedef struct {
 /*
  * Memory alignment -- specified as a power of two.
  */
-typedef unsigned int   IOAlignment;
+typedef unsigned int    IOAlignment;
 
-#define IO_NULL_VM_TASK                ((vm_task_t)0)
+#define IO_NULL_VM_TASK         ((vm_task_t)0)
 
 
 /*
@@ -149,89 +161,104 @@ typedef unsigned int     IOAlignment;
 #ifndef __IOKIT_PORTS_DEFINED__
 #define __IOKIT_PORTS_DEFINED__
 #ifdef KERNEL
+#ifdef __cplusplus
+class OSObject;
+typedef OSObject * io_object_t;
+#else
 typedef struct OSObject * io_object_t;
+#endif
 #else /* KERNEL */
-typedef mach_port_t    io_object_t;
+typedef mach_port_t     io_object_t;
 #endif /* KERNEL */
 #endif /* __IOKIT_PORTS_DEFINED__ */
 
 #include <device/device_types.h>
 
-typedef io_object_t    io_connect_t;
-typedef io_object_t    io_enumerator_t;
-typedef io_object_t    io_iterator_t;
-typedef io_object_t    io_registry_entry_t;
-typedef io_object_t    io_service_t;
+typedef io_object_t     io_connect_t;
+typedef io_object_t     io_enumerator_t;
+typedef io_object_t     io_iterator_t;
+typedef io_object_t     io_registry_entry_t;
+typedef io_object_t     io_service_t;
+typedef io_object_t     uext_object_t;
 
-#define        IO_OBJECT_NULL  ((io_object_t) 0)
+#define IO_OBJECT_NULL  ((io_object_t) 0)
 
 #endif /* MACH_KERNEL */
 
 // IOConnectMapMemory memoryTypes
 enum {
-    kIODefaultMemoryType       = 0
+       kIODefaultMemoryType        = 0
 };
 
 enum {
-    kIODefaultCache            = 0,
-    kIOInhibitCache            = 1,
-    kIOWriteThruCache          = 2,
-    kIOCopybackCache           = 3,
-    kIOWriteCombineCache       = 4
+       kIODefaultCache             = 0,
+       kIOInhibitCache             = 1,
+       kIOWriteThruCache           = 2,
+       kIOCopybackCache            = 3,
+       kIOWriteCombineCache        = 4,
+       kIOCopybackInnerCache       = 5,
+       kIOPostedWrite              = 6,
+       kIORealTimeCache            = 7,
+       kIOPostedReordered          = 8,
+       kIOPostedCombinedReordered  = 9,
 };
 
 // IOMemory mapping options
 enum {
-    kIOMapAnywhere             = 0x00000001,
-
-    kIOMapCacheMask            = 0x00000700,
-    kIOMapCacheShift           = 8,
-    kIOMapDefaultCache         = kIODefaultCache      << kIOMapCacheShift,
-    kIOMapInhibitCache         = kIOInhibitCache      << kIOMapCacheShift,
-    kIOMapWriteThruCache       = kIOWriteThruCache    << kIOMapCacheShift,
-    kIOMapCopybackCache                = kIOCopybackCache     << kIOMapCacheShift,
-    kIOMapWriteCombineCache    = kIOWriteCombineCache << kIOMapCacheShift,
-
-    kIOMapUserOptionsMask      = 0x00000fff,
-
-    kIOMapReadOnly             = 0x00001000,
-
-    kIOMapStatic               = 0x01000000,
-    kIOMapReference            = 0x02000000,
-    kIOMapUnique               = 0x04000000
+       kIOMapAnywhere                = 0x00000001,
+
+       kIOMapCacheMask               = 0x00000f00,
+       kIOMapCacheShift              = 8,
+       kIOMapDefaultCache            = kIODefaultCache            << kIOMapCacheShift,
+       kIOMapInhibitCache            = kIOInhibitCache            << kIOMapCacheShift,
+       kIOMapWriteThruCache          = kIOWriteThruCache          << kIOMapCacheShift,
+       kIOMapCopybackCache           = kIOCopybackCache           << kIOMapCacheShift,
+       kIOMapWriteCombineCache       = kIOWriteCombineCache       << kIOMapCacheShift,
+       kIOMapCopybackInnerCache      = kIOCopybackInnerCache      << kIOMapCacheShift,
+       kIOMapPostedWrite             = kIOPostedWrite             << kIOMapCacheShift,
+       kIOMapRealTimeCache           = kIORealTimeCache           << kIOMapCacheShift,
+       kIOMapPostedReordered         = kIOPostedReordered         << kIOMapCacheShift,
+       kIOMapPostedCombinedReordered = kIOPostedCombinedReordered << kIOMapCacheShift,
+
+       kIOMapUserOptionsMask         = 0x00000fff,
+
+       kIOMapReadOnly                = 0x00001000,
+
+       kIOMapStatic                  = 0x01000000,
+       kIOMapReference               = 0x02000000,
+       kIOMapUnique                  = 0x04000000,
+#ifdef XNU_KERNEL_PRIVATE
+       kIOMap64Bit                   = 0x08000000,
+#endif
+       kIOMapPrefault                = 0x10000000,
+       kIOMapOverwrite               = 0x20000000
 };
 
 /*! @enum Scale Factors
-    @discussion Used when a scale_factor parameter is required to define a unit of time.
-    @constant kNanosecondScale Scale factor for nanosecond based times.
-    @constant kMicrosecondScale Scale factor for microsecond based times.
-    @constant kMillisecondScale Scale factor for millisecond based times.
-    @constant kTickScale Scale factor for the standard (100Hz) tick.
-    @constant kSecondScale Scale factor for second based times. */
*   @discussion Used when a scale_factor parameter is required to define a unit of time.
*   @constant kNanosecondScale Scale factor for nanosecond based times.
*   @constant kMicrosecondScale Scale factor for microsecond based times.
*   @constant kMillisecondScale Scale factor for millisecond based times.
*   @constant kTickScale Scale factor for the standard (100Hz) tick.
*   @constant kSecondScale Scale factor for second based times. */
 
 enum {
-    kNanosecondScale  = 1,
-    kMicrosecondScale = 1000,
-    kMillisecondScale = 1000 * 1000,
-    kSecondScale      = 1000 * 1000 * 1000,
-    kTickScale        = (kSecondScale / 100)
+       kNanosecondScale  = 1,
+       kMicrosecondScale = 1000,
+       kMillisecondScale = 1000 * 1000,
+       kSecondScale      = 1000 * 1000 * 1000,
+       kTickScale        = (kSecondScale / 100)
+};
+
+enum {
+       kIOConnectMethodVarOutputSize = -3
 };
 
 /* compatibility types */
 
 #ifndef KERNEL
-/*
- * Machine-independent caching specification.
- */
-typedef enum {
-        IO_CacheOff,                    // cache inhibit
-        IO_WriteThrough,
-        IO_CopyBack
-} IOCache;
 
-//typedef char OSString[64];
 typedef unsigned int IODeviceNumber;
-typedef unsigned int IOObjectNumber;
 
 #endif
 
@@ -239,4 +266,30 @@ typedef unsigned int IOObjectNumber;
 }
 #endif
 
+#else /* !PLATFORM_DriverKit */
+
+#include <stdint.h>
+
+typedef uint32_t          IOOptionBits;
+typedef int32_t           IOFixed;
+typedef uint32_t          IOVersion;
+typedef uint32_t          IOItemCount;
+typedef uint32_t          IOCacheMode;
+
+typedef uint32_t          IOByteCount32;
+typedef uint64_t          IOByteCount64;
+typedef IOByteCount64     IOByteCount;
+
+typedef uint32_t  IOPhysicalAddress32;
+typedef uint64_t  IOPhysicalAddress64;
+typedef uint32_t  IOPhysicalLength32;
+typedef uint64_t  IOPhysicalLength64;
+
+typedef IOPhysicalAddress64      IOPhysicalAddress;
+typedef IOPhysicalLength64       IOPhysicalLength;
+
+typedef uint64_t       IOVirtualAddress;
+
+#endif /* PLATFORM_DriverKit */
+
 #endif /* ! __IOKIT_IOTYPES_H */