X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/1c79356b52d46aa6b508fb032f5ae709b1f2897b..55e303ae13a4cf49d70f2294092726f2fffb9ef2:/osfmk/mach/memory_object_control.defs diff --git a/osfmk/mach/memory_object_control.defs b/osfmk/mach/memory_object_control.defs index ea4eb53b0..0b30a4dab 100644 --- a/osfmk/mach/memory_object_control.defs +++ b/osfmk/mach/memory_object_control.defs @@ -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. @@ -59,10 +62,10 @@ 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 #include -/* - * 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); + +