xnu-4570.1.46.tar.gz
[apple/xnu.git] / osfmk / device / iokit_rpc.c
index 1412f4115a39788a028cad37ce7816e3f82bfc44..d44eea33c0de74d9ca855134c03576dbd7f09890 100644 (file)
@@ -63,6 +63,9 @@
 #if defined(__i386__) || defined(__x86_64__)
 #include <i386/pmap.h>
 #endif
+#if defined(__arm__) || defined(__arm64__)
+#include <arm/pmap.h>
+#endif
 #include <IOKit/IOTypes.h>
 
 #define EXTERN
@@ -73,6 +76,7 @@
  */
 
 extern void iokit_add_reference( io_object_t obj );
+extern void iokit_add_connect_reference( io_object_t obj );
 
 extern ipc_port_t iokit_port_for_object( io_object_t obj,
                        ipc_kobject_type_t type );
@@ -140,7 +144,7 @@ MIGEXTERN io_object_t
 iokit_lookup_object_port(
        ipc_port_t      port)
 {
-       register io_object_t    obj;
+       io_object_t     obj;
 
        if (!IP_VALID(port))
            return (NULL);
@@ -162,7 +166,7 @@ MIGEXTERN io_object_t
 iokit_lookup_connect_port(
        ipc_port_t      port)
 {
-       register io_object_t    obj;
+       io_object_t     obj;
 
        if (!IP_VALID(port))
            return (NULL);
@@ -170,7 +174,7 @@ iokit_lookup_connect_port(
        iokit_lock_port(port);
        if (ip_active(port) && (ip_kotype(port) == IKOT_IOKIT_CONNECT)) {
            obj = (io_object_t) port->ip_kobject;
-           iokit_add_reference( obj );
+           iokit_add_connect_reference( obj );
        }
        else
            obj = NULL;
@@ -200,7 +204,7 @@ iokit_lookup_connect_ref(io_object_t connectRef, ipc_space_t space)
                        iokit_lock_port(port);
                        if (ip_active(port) && (ip_kotype(port) == IKOT_IOKIT_CONNECT)) {
                                obj = (io_object_t) port->ip_kobject;
-                               iokit_add_reference(obj);
+                               iokit_add_connect_reference(obj);
                        }
                        iokit_unlock_port(port);
 
@@ -257,8 +261,8 @@ MIGEXTERN ipc_port_t
 iokit_make_object_port(
        io_object_t     obj )
 {
-    register ipc_port_t        port;
-    register ipc_port_t        sendPort;
+    ipc_port_t port;
+    ipc_port_t sendPort;
 
     if( obj == NULL)
         return IP_NULL;
@@ -279,8 +283,8 @@ MIGEXTERN ipc_port_t
 iokit_make_connect_port(
        io_object_t     obj )
 {
-    register ipc_port_t        port;
-    register ipc_port_t        sendPort;
+    ipc_port_t port;
+    ipc_port_t sendPort;
 
     if( obj == NULL)
         return IP_NULL;
@@ -510,9 +514,14 @@ kern_return_t IOMapPages(vm_map_t map, mach_vm_address_t va, mach_vm_address_t p
        case kIOMapCopybackCache:
            flags = VM_WIMG_COPYBACK;
            break;
+
        case kIOMapCopybackInnerCache:
            flags = VM_WIMG_INNERWBACK;
            break;
+
+       case kIOMapPostedWrite:
+           flags = VM_WIMG_POSTED;
+           break;
     }
 
     pmap_set_cache_attributes(pagenum, flags);
@@ -521,9 +530,7 @@ kern_return_t IOMapPages(vm_map_t map, mach_vm_address_t va, mach_vm_address_t p
 
 
     // Set up a block mapped area
-    pmap_map_block(pmap, va, pagenum, (uint32_t) atop_64(round_page_64(length)), prot, 0, 0);
-
-    return( KERN_SUCCESS );
+    return pmap_map_block(pmap, va, pagenum, (uint32_t) atop_64(round_page_64(length)), prot, 0, 0);
 }
 
 kern_return_t IOUnmapPages(vm_map_t map, mach_vm_address_t va, mach_vm_size_t length)
@@ -570,6 +577,14 @@ kern_return_t IOProtectCacheMode(vm_map_t __unused map, mach_vm_address_t __unus
        case kIOMapCopybackCache:
            flags = VM_WIMG_COPYBACK;
            break;
+
+       case kIOMapCopybackInnerCache:
+           flags = VM_WIMG_INNERWBACK;
+           break;
+
+       case kIOMapPostedWrite:
+           flags = VM_WIMG_POSTED;
+           break;
     }
 
     pmap_flush_context_init(&pmap_flush_context_storage);
@@ -604,6 +619,8 @@ ppnum_t IOGetLastPageNumber(void)
                        highest = lastPage;
        }
        return (highest);
+#elif __arm__ || __arm64__
+       return 0;
 #else
 #error unknown arch
 #endif