]> 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 d877974ef49a84b0f4b45e7285d43896b93fd02e..df5214478d32011ccccd4f36ebf0bea7d380c9f0 100644 (file)
@@ -1,8 +1,8 @@
 /*
- * Copyright (c) 1998-2003 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 1998-2016 Apple 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,
@@ -22,7 +22,7 @@
  * 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@
  */
 
@@ -38,16 +38,7 @@ __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);
-
-mach_vm_address_t IOMallocPhysical(mach_vm_size_t size, mach_vm_address_t mask);
-
-void IOFreePhysical(mach_vm_address_t address, mach_vm_size_t size);
 
 __END_DECLS
 
@@ -55,98 +46,108 @@ __END_DECLS
 
 #include <IOKit/IOService.h>
 #include <IOKit/IOMemoryDescriptor.h>
+#include <IOKit/IODMACommand.h>
 
 class OSData;
-class IODMACommand;
 
 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;
-
-
-    static void setMapperRequired(bool hasMapper);
-    static void waitForSystemMapper();
+#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 initHardware(IOService *provider) = 0;
+       static void setMapperRequired(bool hasMapper);
+       static void waitForSystemMapper();
 
-    virtual bool allocTable(IOByteCount size);
+       virtual bool initHardware(IOService *provider) = 0;
 
 public:
-    virtual bool start(IOService *provider);
-    virtual void free();
+       virtual bool start(IOService *provider) APPLE_KEXT_OVERRIDE;
+       virtual void free() APPLE_KEXT_OVERRIDE;
 
-    // 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);
+// To get access to the system mapper IOMapper::gSystem
+       static IOMapper *gSystem;
 
+       static void
+       checkForSystemMapper()
+       {
+               if ((uintptr_t) gSystem & kWaitMask) {
+                       waitForSystemMapper();
+               }
+       }
 
-    // To get access to the system mapper IOMapper::gSystem 
-    static IOMapper *gSystem;
+       static IOMapper * copyMapperForDevice(IOService * device);
+       static IOMapper * copyMapperForDeviceWithIndex(IOService * device, unsigned int index);
 
-    virtual ppnum_t iovmAlloc(IOItemCount pages) = 0;
-    virtual void iovmFree(ppnum_t addr, IOItemCount pages) = 0;
+// { subclasses
 
-    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);
+       virtual uint64_t getPageSize(void) const = 0;
 
-    static void checkForSystemMapper()
-        { if ((uintptr_t) gSystem & kWaitMask) waitForSystemMapper(); };
+       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;
 
-    static IOMapper * copyMapperForDevice(IOService * device);
+       virtual IOReturn iovmUnmapMemory(IOMemoryDescriptor * memory,
+           IODMACommand       * dmaCommand,
+           uint64_t             mapAddress,
+           uint64_t             mapLength) = 0;
 
-       
-    // Function will panic if the given address is not found in a valid
-    // iovm mapping.
-    virtual addr64_t mapAddr(IOPhysicalAddress addr) = 0;
+       virtual IOReturn iovmInsert(uint32_t options,
+           uint64_t mapAddress,
+           uint64_t offset,
+           uint64_t physicalAddress,
+           uint64_t length) = 0;
 
-    // Get the address mask to or into an address to bypass this mapper
-    virtual bool getBypassMask(addr64_t *maskP) const;
+       virtual uint64_t mapToPhysicalAddress(uint64_t mappedAddress) = 0;
 
-    virtual ppnum_t iovmAllocDMACommand(IODMACommand * command, IOItemCount pageCount);
-    virtual void iovmFreeDMACommand(IODMACommand * command, ppnum_t addr, IOItemCount pageCount);
-    
-    OSMetaClassDeclareReservedUsed(IOMapper, 0);
-    OSMetaClassDeclareReservedUsed(IOMapper, 1);
-    OSMetaClassDeclareReservedUsed(IOMapper, 2);
+// }
 
 private:
-    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 */