Loading...
iokit/Kernel/IOMapper.cpp xnu-2050.22.13 xnu-1228
--- xnu/xnu-2050.22.13/iokit/Kernel/IOMapper.cpp
+++ xnu/xnu-1228/iokit/Kernel/IOMapper.cpp
@@ -27,9 +27,9 @@
  */
 #include <IOKit/IOLib.h>
 #include <IOKit/IOMapper.h>
-#include <IOKit/IODMACommand.h>
 #include <libkern/c++/OSData.h>
-#include <libkern/OSDebug.h>
+
+#include "IOCopyMapper.h"
 
 __BEGIN_DECLS
 extern ppnum_t pmap_find_phys(pmap_t pmap, addr64_t va);
@@ -39,9 +39,9 @@
 OSDefineMetaClassAndAbstractStructors(IOMapper, IOService);
 
 OSMetaClassDefineReservedUsed(IOMapper, 0);
-OSMetaClassDefineReservedUsed(IOMapper, 1);
-OSMetaClassDefineReservedUsed(IOMapper, 2);
-OSMetaClassDefineReservedUsed(IOMapper, 3);
+OSMetaClassDefineReservedUnused(IOMapper, 1);
+OSMetaClassDefineReservedUnused(IOMapper, 2);
+OSMetaClassDefineReservedUnused(IOMapper, 3);
 OSMetaClassDefineReservedUnused(IOMapper, 4);
 OSMetaClassDefineReservedUnused(IOMapper, 5);
 OSMetaClassDefineReservedUnused(IOMapper, 6);
@@ -73,7 +73,6 @@
 
 bool IOMapper::start(IOService *provider)
 {
-    OSObject * obj;
     if (!super::start(provider))
         return false;
 
@@ -87,14 +86,6 @@
         sMapperLock.unlock();
     }
 
-    if (provider)
-    {
-    	obj = provider->getProperty("iommu-id");
-	if (!obj)
-	    obj = provider->getProperty("AAPL,phandle");
-	if (obj)
-	    setProperty(gIOMapperIDKey, obj);
-    }
     return true;
 }
 
@@ -132,60 +123,9 @@
 void IOMapper::waitForSystemMapper()
 {
     sMapperLock.lock();
-    while ((uintptr_t) IOMapper::gSystem & kWaitMask)
-    {
-		OSReportWithBacktrace("waitForSystemMapper");
+    while ((vm_address_t) IOMapper::gSystem & kWaitMask)
         sMapperLock.sleep(&IOMapper::gSystem);
-    }
     sMapperLock.unlock();
-}
-
-IOMapper * IOMapper::copyMapperForDevice(IOService * device)
-{
-    OSObject * obj;
-    IOMapper * mapper;
-    OSDictionary * matching;
-    
-    obj = device->copyProperty("iommu-parent");
-    if (!obj)
-	return (NULL);
-
-    if ((mapper = OSDynamicCast(IOMapper, obj)))
-	return (mapper);
-
-    matching = IOService::propertyMatching(gIOMapperIDKey, obj);
-    if (matching)
-    {
-	mapper = OSDynamicCast(IOMapper, IOService::waitForMatchingService(matching));
-    	matching->release();
-    }
-    if (mapper)
-	device->setProperty("iommu-parent", mapper);
-    else
-	obj->release();
-    
-    return (mapper);
-}
-
-ppnum_t IOMapper::iovmAllocDMACommand(IODMACommand * command, IOItemCount pageCount)
-{
-    return (0);
-}
-
-void IOMapper::iovmFreeDMACommand(IODMACommand * command,
-				  ppnum_t addr, IOItemCount pageCount)
-{
-}
-
-ppnum_t IOMapper::iovmMapMemory(
-    			  OSObject                    * memory,   // dma command or iomd
-			  ppnum_t                       offsetPage,
-			  ppnum_t                       pageCount,
-			  uint32_t                      options,
-			  upl_page_info_t             * pageList,
-			  const IODMAMapSpecification * mapSpecification)
-{
-    return (0);
 }
 
 void IOMapper::iovmInsert(ppnum_t addr, IOItemCount offset,
@@ -211,8 +151,8 @@
     kern_return_t kr;
     vm_address_t address;
 
-    size = round_page(size);
-    kr = kmem_alloc_contig(kernel_map, &address, size, PAGE_MASK, 0 /*max_pnum*/, 0 /*pnum_mask*/, false);
+    size = round_page_32(size);
+    kr = kmem_alloc_contig(kernel_map, &address, size, PAGE_MASK, 0, 0);
     if (kr)
         return 0;
 
@@ -233,7 +173,7 @@
 {
     vm_address_t address = (vm_address_t) artHandle;
 
-    size = round_page(size);
+    size = round_page_32(size);
     kmem_free(kernel_map, address, size);	// Just panic if address is 0
 }
 
@@ -264,7 +204,6 @@
 ppnum_t IOMapperInsertPage(ppnum_t addr, unsigned offset, ppnum_t page)
 {
     if (IOMapper::gSystem) {
-		if (!addr) panic("!addr");
         IOMapper::gSystem->iovmInsert(addr, (IOItemCount) offset, page);
         return addr + offset;
     }
@@ -404,4 +343,23 @@
         ml_phys_write_double((vm_offset_t) address, value);
 }
 
+mach_vm_address_t IOMallocPhysical(mach_vm_size_t size, mach_vm_address_t mask)
+{
+    mach_vm_address_t address = 0;
+    if (gIOCopyMapper)
+    {
+	address = ptoa_64(gIOCopyMapper->iovmAlloc(atop_64(round_page(size))));
+    }
+    return (address);
+}
+
+void IOFreePhysical(mach_vm_address_t address, mach_vm_size_t size)
+{
+    if (gIOCopyMapper)
+    {
+	gIOCopyMapper->iovmFree(atop_64(address), atop_64(round_page(size)));
+    }
+}
+
+
 __END_DECLS