X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/1c79356b52d46aa6b508fb032f5ae709b1f2897b..bca245acd4c03fd752d1a45f011ad495e60fe53d:/osfmk/mach/memory_object.defs?ds=sidebyside diff --git a/osfmk/mach/memory_object.defs b/osfmk/mach/memory_object.defs index 2e8ffe8f4..e6f93082b 100644 --- a/osfmk/mach/memory_object.defs +++ b/osfmk/mach/memory_object.defs @@ -1,23 +1,29 @@ /* - * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. + * Copyright (c) 2000-2004 Apple Computer, Inc. All rights reserved. * - * @APPLE_LICENSE_HEADER_START@ + * @APPLE_OSREFERENCE_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. + * 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. The rights granted to you under the License + * may not be used to create, or enable the creation or redistribution of, + * 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. * - * This Original Code and all software distributed under the License are - * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * 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@ + * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ */ /* * @OSF_COPYRIGHT@ @@ -59,183 +65,142 @@ subsystem #if KERNEL_USER KernelUser -#endif KERNEL_USER +#endif /* KERNEL_USER */ #if KERNEL_SERVER KernelServer -#endif KERNEL_SERVER +#endif /* KERNEL_SERVER */ memory_object 2200; -#ifdef MACH_KERNEL -#include -#endif /* MACH_KERNEL */ - #include #include #if KERNEL_SERVER serverprefix dp_; -#else -#if SEQNOS -serverprefix seqnos_; -serverdemux seqnos_memory_object_server; -#endif SEQNOS #endif /* * Initialize the specified memory object, providing - * a reqeust port on which control calls can be made. + * a memory object control reference on which to make + * cache control calls. * [To allow the mapping of this object to be used, the * memory manager must call memory_object_set_attributes, * specifying the "ready" parameter as TRUE. To reject * all mappings of this object, the memory manager may * use memory_object_destroy.] */ -simpleroutine memory_object_init( +routine memory_object_init( memory_object : memory_object_t; -#if SEQNOS - msgseqno seqno : mach_port_seqno_t; -#endif SEQNOS - memory_control : memory_object_control_t = - MACH_MSG_TYPE_MAKE_SEND - ctype: mach_port_t; - memory_object_page_size : vm_size_t); + memory_control : memory_object_control_t; + memory_object_page_size : memory_object_cluster_size_t); /* * Indicates that the specified memory object is no longer * mapped (or cached -- see memory_object_set_attributes), * and that further mappings will cause another memory_object_init - * call to be made. No further calls will be made on - * the memory object by this kernel. + * call to be made. * - * [All rights to the control and name ports are included - * in this call. The memory manager should use port_deallocate - * to release them once they are no longer needed.] + * [The kernel will release its reference on the memory object + * after this call returns. The memory object control associated + * with the memory object is no longer usable - the pager should + * drop the control reference granted to it by memory_object_init.] */ -simpleroutine memory_object_terminate( - memory_object : memory_object_t = - MACH_MSG_TYPE_MOVE_SEND - ctype: mach_port_t; -#if SEQNOS - msgseqno seqno : mach_port_seqno_t; -#endif SEQNOS - memory_control : memory_object_control_t = - MACH_MSG_TYPE_MOVE_RECEIVE - ctype: mach_port_t); +routine memory_object_terminate( + memory_object : memory_object_t); /* * Request data from this memory object. At least * the specified data should be returned with at * least the specified access permitted. * - * [Reply should be memory_object_data_provided.] + * [Response should be upl commit over the specified range.] */ -simpleroutine memory_object_data_request( +routine memory_object_data_request( memory_object : memory_object_t; -#if SEQNOS - msgseqno seqno : mach_port_seqno_t; -#endif SEQNOS - memory_control : memory_object_control_t = - MACH_MSG_TYPE_MAKE_SEND - ctype: mach_port_t; offset : memory_object_offset_t; - length : vm_size_t; - desired_access : vm_prot_t); + length : memory_object_cluster_size_t; + desired_access : vm_prot_t; + fault_info : memory_object_fault_info_t); /* - * Request that the specified portion of this - * memory object be unlocked to allow the specified - * forms of access; the kernel already has the data. + * Return data to manager. This call is used in place of data_write + * for objects initialized by object_ready instead of set_attributes. + * This call indicates whether the returned data is dirty and whether + * the kernel kept a copy. Precious data remains precious if the + * kernel keeps a copy. The indication that the kernel kept a copy + * is only a hint if the data is not precious; the cleaned copy may + * be discarded without further notifying the manager. * - * [Reply should be memory_object_lock_request.] + * [response should be a upl_commit over the range specified] */ -simpleroutine memory_object_data_unlock( +routine memory_object_data_return( memory_object : memory_object_t; -#if SEQNOS - msgseqno seqno : mach_port_seqno_t; -#endif SEQNOS - memory_control : memory_object_control_t = - MACH_MSG_TYPE_MAKE_SEND - ctype: mach_port_t; - offset : memory_object_offset_t; - length : vm_size_t; - desired_access : vm_prot_t); + offset : memory_object_offset_t; + size : memory_object_cluster_size_t; + out resid_offset : memory_object_offset_t; + out io_error : int; + dirty : boolean_t; + kernel_copy : boolean_t; + upl_flags : int); /* - * Indicate that a previous memory_object_lock_reqeust has been - * completed. Note that this call is made on whatever - * port is specified in the memory_object_lock_request; that port - * need not be the memory object port itself. + * Provide initial data contents for this region of + * the memory object. If data has already been written + * to the object, this value must be discarded; otherwise, + * this call acts identically to memory_object_data_return. * - * [No reply expected.] + * [response should be UPL commit over the specified range.] */ -simpleroutine memory_object_lock_completed( - memory_object : memory_object_t = - polymorphic|MACH_MSG_TYPE_PORT_SEND_ONCE - ctype: mach_port_t; -#if SEQNOS - msgseqno seqno : mach_port_seqno_t; -#endif SEQNOS - memory_control : memory_object_control_t = - MACH_MSG_TYPE_MAKE_SEND - ctype: mach_port_t; +routine memory_object_data_initialize( + memory_object : memory_object_t; offset : memory_object_offset_t; - length : vm_size_t); - - skip; + size : memory_object_cluster_size_t); /* - * Return data to manager. This call is used in place of data_write - * for objects initialized by object_ready instead of set_attributes. - * This call indicates whether the returned data is dirty and whether - * the kernel kept a copy. Precious data remains precious if the - * kernel keeps a copy. The indication that the kernel kept a copy - * is only a hint if the data is not precious; the cleaned copy may - * be discarded without further notifying the manager. + * Request that the specified portion of this + * memory object be unlocked to allow the specified + * forms of access; the kernel already has the data. * - * [Reply should be vm_deallocate to release the data.] + * [Response should be memory_object_lock_request when + * the operation is fully complete.] */ -simpleroutine memory_object_data_return( +routine memory_object_data_unlock( memory_object : memory_object_t; -#if SEQNOS - msgseqno seqno : mach_port_seqno_t; -#endif SEQNOS - memory_control : memory_object_control_t = - MACH_MSG_TYPE_MAKE_SEND - ctype: mach_port_t; - offset : memory_object_offset_t; - data : pointer_t; - dirty : boolean_t; - kernel_copy : boolean_t); + offset : memory_object_offset_t; + size : memory_object_size_t; + desired_access : vm_prot_t); -simpleroutine memory_object_synchronize( +/* + * Request that the specified portion of this + * memory object be synchronized with its backing + * store according to the supplied flags. + * + * [Response should be memory_object_synchronize_completed when + * the operation is fully complete.] + */ +routine memory_object_synchronize( memory_object : memory_object_t; -#if SEQNOS - msgseqno seqno : mach_port_seqno_t; -#endif SEQNOS - memory_control : memory_object_control_t = - MACH_MSG_TYPE_MAKE_SEND - ctype: mach_port_t; - offset : memory_object_offset_t; - length : vm_offset_t; - sync_flags : vm_sync_t ); - + offset : memory_object_offset_t; + size : memory_object_size_t; + sync_flags : vm_sync_t ); /* - * Confirm a successful memory_object_change attributes message. + * Notify the pager that the specified memory object + * has no other (mapped) references besides the named + * reference held by the pager itself. + * + * [Response should be a release of the named reference when + * the pager deems that appropriate.] */ -simpleroutine memory_object_change_completed( - memory_object : memory_object_t = - polymorphic|MACH_MSG_TYPE_PORT_SEND_ONCE - ctype: mach_port_t; -#if SEQNOS - msgseqno seqno : mach_port_seqno_t; -#endif SEQNOS - memory_control : memory_object_control_t = - MACH_MSG_TYPE_MAKE_SEND - ctype: mach_port_t; - flavor : memory_object_flavor_t); +routine memory_object_map( + memory_object : memory_object_t; + prot : vm_prot_t); +routine memory_object_last_unmap( + memory_object : memory_object_t); +routine memory_object_data_reclaim( + memory_object : memory_object_t; + reclaim_backing_store : boolean_t); - skip; +/* vim: set ft=c : */