]> git.saurik.com Git - apple/xnu.git/blobdiff - osfmk/mach/memory_object_control.defs
xnu-517.tar.gz
[apple/xnu.git] / osfmk / mach / memory_object_control.defs
index ea4eb53b09af3d5837deaa1c70cff18e5a0ff61d..0b30a4dab21eed6cd158d022b1a636cffe8b9d1b 100644 (file)
@@ -3,19 +3,22 @@
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
- * The contents of this file constitute Original Code as defined in and
- * are subject to the Apple Public Source License Version 1.1 (the
- * "License").  You may not use this file except in compliance with the
- * License.  Please obtain a copy of the License at
- * http://www.apple.com/publicsource and read it before using this file.
+ * Copyright (c) 1999-2003 Apple Computer, Inc.  All Rights Reserved.
  * 
- * This Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * 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.
+ * 
+ * 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,
  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
- * License for the specific language governing rights and limitations
- * under the License.
+ * 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@
  */
@@ -50,7 +53,7 @@
 /*
  */
 /*
- * File:       mach/memory_object.defs
+ * File:       mach/memory_object_control.defs
  *
  * Abstract:
  *     Basic Mach external memory management interface declaration.
 subsystem
 #if    KERNEL_USER
          KernelUser
-#endif KERNEL_USER
+#endif /* KERNEL_USER */
 #if    KERNEL_SERVER
          KernelServer
-#endif KERNEL_SERVER
+#endif /* KERNEL_SERVER */
                     memory_object_control 2000;
 
 #ifdef MACH_KERNEL
@@ -72,38 +75,26 @@ subsystem
 #include <mach/std_types.defs>
 #include <mach/mach_types.defs>
 
-/*
- * JMM - For now we define back-and-forth paging until we get the code
- * cleaned up.
- */
-#define _BACK_AND_FORTH_PAGING_
-
 /*
  *      Retrieves the attributes currently associated with
  *      a memory object.
  */
 routine memory_object_get_attributes(
-                memory_control  : vm_object_t;
+                memory_control : memory_object_control_t;
                flavor          : memory_object_flavor_t;
        out     attributes      : memory_object_info_t, CountInOut);
 
 
-simpleroutine memory_object_change_attributes(
-                memory_control  : vm_object_t;
+routine memory_object_change_attributes(
+                memory_control : memory_object_control_t;
                 flavor          : memory_object_flavor_t;
                attributes      : memory_object_info_t
-#ifdef _BACK_AND_FORTH_PAGING_
-                ; reply_to      : mach_port_t =
-                        MACH_MSG_TYPE_MAKE_SEND|polymorphic
-#endif
                );
 
-simpleroutine memory_object_synchronize_completed (
-                       memory_control  : vm_object_t;
-                       offset          : memory_object_offset_t;
-                       length          : vm_offset_t);
-
-skip;
+routine memory_object_synchronize_completed (
+               memory_control  : memory_object_control_t;
+               offset          : memory_object_offset_t;
+               length          : vm_offset_t);
 
 /*
  *     Control use of the data associated with the given
@@ -121,99 +112,75 @@ skip;
  *     ("offset") and size ("size").  Only pages with the
  *     same page alignment as the starting offset are
  *     considered.
- *
- *     A single acknowledgement is sent (to the "reply_to"
- *     port) when these actions are complete.
- *
- *     There are two versions of this routine because IPC distinguishes
- *     between booleans and integers (a 2-valued integer is NOT a
- *     boolean).  The new routine is backwards compatible at the C
- *     language interface.
  */
-simpleroutine memory_object_lock_request(
-               memory_control  : vm_object_t;
+routine memory_object_lock_request(
+               memory_control  : memory_object_control_t;
                offset          : memory_object_offset_t;
                size            : memory_object_size_t;
                should_return   : memory_object_return_t;
                flags           : integer_t;
                lock_value      : vm_prot_t
-#ifdef _BACK_AND_FORTH_PAGING_
-               ; reply_to      : mach_port_t =
-                       MACH_MSG_TYPE_MAKE_SEND|polymorphic
-#endif
                );
 
 
-       skip;
-
 /*
  */
-simpleroutine memory_object_destroy(
-               memory_control  : vm_object_t;
+routine memory_object_destroy(
+               memory_control  : memory_object_control_t;
                reason          : kern_return_t);
 
 /*
- *     Provide the data contents of a range of the given memory
- *     object, with the access restriction specified, optional
- *     precious attribute, and reply message.  [Only
- *     whole virtual pages of data can be accepted; partial pages
- *     will be discarded.  Data should be provided on request, but
- *     may be provided in advance as desired.  When data already
- *     held by this kernel is provided again, the new data is ignored.
- *     The access restriction is the subset of {read, write, execute}
- *     which are prohibited.  The kernel may not provide any data (or
- *     protection) consistency among pages with different virtual page
- *     alignments within the same object.  The precious value controls
- *     how the kernel treats the data.  If it is FALSE, the kernel treats
- *     its copy as a temporary and may throw it away if it hasn't been
- *     changed.  If the precious value is TRUE, the kernel treats its
- *     copy as a data repository and promises to return it to the manager;
- *     the manager may tell the kernel to throw it away instead by flushing
- *     and not cleaning the data -- see memory_object_lock_request.  The
- *     reply_to port is for a compeletion message; it will be
- *     memory_object_supply_completed.]
+ *     The pager gets memory_object_data_request and memory_object_data_return
+ *     calls to inform it that data within the memory object needs to be
+ *     manipulated.  Those requests simply identify the range in the memory
+ *     object that needs servicing, but not the data itself.  The pager
+ *     turns around and requests one (or several) Universal Page Lists (UPLs)
+ *     from the VM cache object associated with the memory object via one
+ *     of the following calls.  These UPLs are then committed (or aborted)
+ *     in whole (or in ranges) as the processing completes.
  */
 
-       skip;
-
-       skip;
-
-routine vm_object_upl_request(
-               object          :vm_object_entry_t;
-       in      offset          :memory_object_offset_t;
-       in      size            :vm_size_t;
-       out     upl             :mach_port_move_send_t;
-       out     page_list       :upl_page_list_ptr_t, CountInOut;
-       in      cntrl_flags     :integer_t);
-
-routine vm_pager_upl_request(
-               object          :vm_object_entry_t;
-       in      offset          :memory_object_offset_t;
-       in      size            :vm_size_t;
-       in      super_size      :vm_size_t;
-       out     upl             :mach_port_move_send_t;
-       out     page_list       :upl_page_list_ptr_t, CountInOut;
-       in      cntrl_flags     :integer_t);
-
-routine vm_upl_map(
-               map             :vm_task_entry_t;
-       in      upl             :upl_object_t;
-       inout   dst_addr        :vm_offset_t);
-
-routine vm_upl_unmap(
-               map             :vm_task_entry_t;
-       in      upl             :upl_object_t);
-
-routine vm_upl_abort(
-               upl_object      :upl_object_entry_t;
-       in      abort_cond      :integer_t);
-routine vm_upl_commit(
-               upl_object      :upl_object_entry_t;
-       in      page_list       :upl_page_list_ptr_t);
-
-routine vm_upl_commit_range(
-               upl_object      :upl_object_entry_t;
-               offset          :vm_offset_t;
-               size            :vm_size_t;
-       in      page_list       :upl_page_list_ptr_t);
+routine memory_object_upl_request(
+               memory_control  : memory_object_control_t;
+       in      offset          : memory_object_offset_t;
+       in      size            : vm_size_t;
+       out     upl             : upl_t;
+       out     page_list       : upl_page_info_array_t, CountInOut;
+       in      cntrl_flags     : integer_t);
+
+routine memory_object_super_upl_request(
+               memory_control          : memory_object_control_t;
+       in      offset          : memory_object_offset_t;
+       in      size            : vm_size_t;
+       in      super_size      : vm_size_t;
+       out     upl             : upl_t;
+       out     page_list       : upl_page_info_array_t, CountInOut;
+       in      cntrl_flags     : integer_t);
+
+/*
+ * This functions allows a single page to be manipulated with less overhead
+ * than creating a UPL.
+ */
+routine memory_object_page_op(
+               memory_control  : memory_object_control_t;
+       in      offset          : memory_object_offset_t;
+       in      ops             : integer_t;
+       out     phys_entry      : uint32_t;
+       out     flags           : integer_t);
+
+routine memory_object_recover_named(
+               memory_control  : memory_object_control_t;
+       in      wait_on_terminating : boolean_t);
+
+routine memory_object_release_name(
+               memory_control  : memory_object_control_t;
+               flags           : integer_t);
+
+routine memory_object_range_op(
+               memory_control  : memory_object_control_t;
+       in      offset_beg      : memory_object_offset_t;
+       in      offset_end      : memory_object_offset_t;
+       in      ops             : integer_t;
+       out     range           : integer_t);
+
+