]> git.saurik.com Git - apple/xnu.git/blobdiff - iokit/IOKit/IOMapper.h
xnu-6153.41.3.tar.gz
[apple/xnu.git] / iokit / IOKit / IOMapper.h
index 14b9d3dd8a5ca00555b7a2cc287c1600509b60fe..df5214478d32011ccccd4f36ebf0bea7d380c9f0 100644 (file)
@@ -1,17 +1,20 @@
 /*
- * Copyright (c) 1998-2003 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 1998-2016 Apple Inc. All rights reserved.
+ *
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
  *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * Copyright (c) 1999-2003 Apple Computer, Inc.  All Rights Reserved.
- * 
  * 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
- * compliance with the License. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
- * file.
- * 
+ * compliance with the License. The rights granted to you under the License
+ * may not be used to create, or enable the creation or redistribution of,
+ * 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,
@@ -19,8 +22,8 @@
  * 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_LICENSE_HEADER_END@
+ *
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
  */
 
 #ifndef __IOKIT_IOMAPPER_H
@@ -35,95 +38,116 @@ __BEGIN_DECLS
 // These are C accessors to the system mapper for non-IOKit clients
 ppnum_t IOMapperIOVMAlloc(unsigned pages);
 void IOMapperIOVMFree(ppnum_t addr, unsigned pages);
-
 ppnum_t IOMapperInsertPage(ppnum_t addr, unsigned offset, ppnum_t page);
-void IOMapperInsertPPNPages(ppnum_t addr, unsigned offset,
-                            ppnum_t *pageList, unsigned pageCount);
-void IOMapperInsertUPLPages(ppnum_t addr, unsigned offset,
-                            upl_page_info_t *pageList, unsigned pageCount);
+
 __END_DECLS
 
 #if __cplusplus
 
 #include <IOKit/IOService.h>
 #include <IOKit/IOMemoryDescriptor.h>
+#include <IOKit/IODMACommand.h>
 
 class OSData;
 
+extern const OSSymbol * gIOMapperIDKey;
+
 class IOMapper : public IOService
 {
-    OSDeclareAbstractStructors(IOMapper);
+       OSDeclareAbstractStructors(IOMapper);
 
-    // Give the platform expert access to setMapperRequired();
-    friend class IOPlatformExpert;
+// Give the platform expert access to setMapperRequired();
+       friend class IOPlatformExpert;
+       friend class IOMemoryDescriptor;
+       friend class IOGeneralMemoryDescriptor;
 
 private:
-    enum SystemMapperState {
-        kNoMapper  = 0,
-        kUnknown   = 1,
-        kHasMapper = 2,        // Any other value is pointer to a live mapper
-        kWaitMask  = 3,
-    };
+       enum SystemMapperState {
+               kNoMapper  = 0,
+               kUnknown   = 1,
+               kHasMapper = 2, // Any other value is pointer to a live mapper
+               kWaitMask  = 3,
+       };
 protected:
-    void *fTable;
-    ppnum_t fTablePhys;
-    IOItemCount fTableSize;
-    OSData *fTableHandle;
-    bool fIsSystem;
+#ifdef XNU_KERNEL_PRIVATE
+       uint64_t   __reservedA[6];
+       kern_allocation_name_t fAllocName;
+       uint32_t   __reservedB;
+       uint32_t   fPageSize;
+#else
+       uint64_t __reserved[8];
+#endif
+       bool fIsSystem;
 
-    virtual bool start(IOService *provider);
-    virtual void free();
+       static void setMapperRequired(bool hasMapper);
+       static void waitForSystemMapper();
 
-    static void setMapperRequired(bool hasMapper);
-    static void waitForSystemMapper();
+       virtual bool initHardware(IOService *provider) = 0;
 
-    virtual bool initHardware(IOService *provider) = 0;
+public:
+       virtual bool start(IOService *provider) APPLE_KEXT_OVERRIDE;
+       virtual void free() APPLE_KEXT_OVERRIDE;
 
-    virtual bool allocTable(IOByteCount size);
+// To get access to the system mapper IOMapper::gSystem
+       static IOMapper *gSystem;
 
-public:
-    // Static routines capable of allocating tables that are physically
-    // contiguous in real memory space.
-    static OSData * NewARTTable(IOByteCount size,
-                                void ** virtAddrP, ppnum_t *physAddrP);
-    static void FreeARTTable(OSData *handle, IOByteCount size);
+       static void
+       checkForSystemMapper()
+       {
+               if ((uintptr_t) gSystem & kWaitMask) {
+                       waitForSystemMapper();
+               }
+       }
+
+       static IOMapper * copyMapperForDevice(IOService * device);
+       static IOMapper * copyMapperForDeviceWithIndex(IOService * device, unsigned int index);
+
+// { subclasses
+
+       virtual uint64_t getPageSize(void) const = 0;
 
+       virtual IOReturn iovmMapMemory(IOMemoryDescriptor          * memory,
+           uint64_t                      descriptorOffset,
+           uint64_t                      length,
+           uint32_t                      mapOptions,
+           const IODMAMapSpecification * mapSpecification,
+           IODMACommand                * dmaCommand,
+           const IODMAMapPageList      * pageList,
+           uint64_t                    * mapAddress,
+           uint64_t                    * mapLength) = 0;
 
-    // To get access to the system mapper IOMapper::gSystem 
-    static IOMapper *gSystem;
+       virtual IOReturn iovmUnmapMemory(IOMemoryDescriptor * memory,
+           IODMACommand       * dmaCommand,
+           uint64_t             mapAddress,
+           uint64_t             mapLength) = 0;
 
-    virtual ppnum_t iovmAlloc(IOItemCount pages) = 0;
-    virtual void iovmFree(ppnum_t addr, IOItemCount pages) = 0;
+       virtual IOReturn iovmInsert(uint32_t options,
+           uint64_t mapAddress,
+           uint64_t offset,
+           uint64_t physicalAddress,
+           uint64_t length) = 0;
 
-    virtual void iovmInsert(ppnum_t addr, IOItemCount offset, ppnum_t page) = 0;
-    virtual void iovmInsert(ppnum_t addr, IOItemCount offset,
-                            ppnum_t *pageList, IOItemCount pageCount);
-    virtual void iovmInsert(ppnum_t addr, IOItemCount offset,
-                            upl_page_info_t *pageList, IOItemCount pageCount);
-    static void checkForSystemMapper()
-        { if ((vm_address_t) gSystem & kWaitMask) waitForSystemMapper(); };
+       virtual uint64_t mapToPhysicalAddress(uint64_t mappedAddress) = 0;
 
-    // Function will panic if the given address is not found in a valid
-    // iovm mapping.
-    virtual addr64_t mapAddr(IOPhysicalAddress addr) = 0;
+// }
 
 private:
-    OSMetaClassDeclareReservedUnused(IOMapper, 0);
-    OSMetaClassDeclareReservedUnused(IOMapper, 1);
-    OSMetaClassDeclareReservedUnused(IOMapper, 2);
-    OSMetaClassDeclareReservedUnused(IOMapper, 3);
-    OSMetaClassDeclareReservedUnused(IOMapper, 4);
-    OSMetaClassDeclareReservedUnused(IOMapper, 5);
-    OSMetaClassDeclareReservedUnused(IOMapper, 6);
-    OSMetaClassDeclareReservedUnused(IOMapper, 7);
-    OSMetaClassDeclareReservedUnused(IOMapper, 8);
-    OSMetaClassDeclareReservedUnused(IOMapper, 9);
-    OSMetaClassDeclareReservedUnused(IOMapper, 10);
-    OSMetaClassDeclareReservedUnused(IOMapper, 11);
-    OSMetaClassDeclareReservedUnused(IOMapper, 12);
-    OSMetaClassDeclareReservedUnused(IOMapper, 13);
-    OSMetaClassDeclareReservedUnused(IOMapper, 14);
-    OSMetaClassDeclareReservedUnused(IOMapper, 15);
+       OSMetaClassDeclareReservedUnused(IOMapper, 0);
+       OSMetaClassDeclareReservedUnused(IOMapper, 1);
+       OSMetaClassDeclareReservedUnused(IOMapper, 2);
+       OSMetaClassDeclareReservedUnused(IOMapper, 3);
+       OSMetaClassDeclareReservedUnused(IOMapper, 4);
+       OSMetaClassDeclareReservedUnused(IOMapper, 5);
+       OSMetaClassDeclareReservedUnused(IOMapper, 6);
+       OSMetaClassDeclareReservedUnused(IOMapper, 7);
+       OSMetaClassDeclareReservedUnused(IOMapper, 8);
+       OSMetaClassDeclareReservedUnused(IOMapper, 9);
+       OSMetaClassDeclareReservedUnused(IOMapper, 10);
+       OSMetaClassDeclareReservedUnused(IOMapper, 11);
+       OSMetaClassDeclareReservedUnused(IOMapper, 12);
+       OSMetaClassDeclareReservedUnused(IOMapper, 13);
+       OSMetaClassDeclareReservedUnused(IOMapper, 14);
+       OSMetaClassDeclareReservedUnused(IOMapper, 15);
 };
 
 #endif /* __cplusplus */