Annotation of XNU/osfmk/mach/memory_object.defs, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
        !             3:  *
        !             4:  * @APPLE_LICENSE_HEADER_START@
        !             5:  * 
        !             6:  * The contents of this file constitute Original Code as defined in and
        !             7:  * are subject to the Apple Public Source License Version 1.1 (the
        !             8:  * "License").  You may not use this file except in compliance with the
        !             9:  * License.  Please obtain a copy of the License at
        !            10:  * http://www.apple.com/publicsource and read it before using this file.
        !            11:  * 
        !            12:  * This Original Code and all software distributed under the License are
        !            13:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
        !            14:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
        !            15:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
        !            16:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
        !            17:  * License for the specific language governing rights and limitations
        !            18:  * under the License.
        !            19:  * 
        !            20:  * @APPLE_LICENSE_HEADER_END@
        !            21:  */
        !            22: /*
        !            23:  * @OSF_COPYRIGHT@
        !            24:  */
        !            25: /* 
        !            26:  * Mach Operating System
        !            27:  * Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University
        !            28:  * All Rights Reserved.
        !            29:  * 
        !            30:  * Permission to use, copy, modify and distribute this software and its
        !            31:  * documentation is hereby granted, provided that both the copyright
        !            32:  * notice and this permission notice appear in all copies of the
        !            33:  * software, derivative works or modified versions, and any portions
        !            34:  * thereof, and that both notices appear in supporting documentation.
        !            35:  * 
        !            36:  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
        !            37:  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
        !            38:  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
        !            39:  * 
        !            40:  * Carnegie Mellon requests users of this software to return to
        !            41:  * 
        !            42:  *  Software Distribution Coordinator  or  [email protected]
        !            43:  *  School of Computer Science
        !            44:  *  Carnegie Mellon University
        !            45:  *  Pittsburgh PA 15213-3890
        !            46:  * 
        !            47:  * any improvements or extensions that they make and grant Carnegie Mellon
        !            48:  * the rights to redistribute these changes.
        !            49:  */
        !            50: /*
        !            51:  */
        !            52: /*
        !            53:  * File:       mach/memory_object.defs
        !            54:  *
        !            55:  * Abstract:
        !            56:  *     Basic Mach external memory management interface declaration.
        !            57:  */
        !            58: 
        !            59: subsystem
        !            60: #if    KERNEL_USER
        !            61:          KernelUser
        !            62: #endif KERNEL_USER
        !            63: #if    KERNEL_SERVER
        !            64:          KernelServer
        !            65: #endif KERNEL_SERVER
        !            66:                     memory_object 2200;
        !            67: 
        !            68: #ifdef MACH_KERNEL
        !            69: #include <advisory_pageout.h>
        !            70: #endif /* MACH_KERNEL */
        !            71: 
        !            72: #include <mach/std_types.defs>
        !            73: #include <mach/mach_types.defs>
        !            74: 
        !            75: #if    KERNEL_SERVER
        !            76: serverprefix dp_;
        !            77: #else
        !            78: #if    SEQNOS
        !            79: serverprefix seqnos_;
        !            80: serverdemux seqnos_memory_object_server;
        !            81: #endif SEQNOS
        !            82: #endif
        !            83: 
        !            84: /*
        !            85:  *     Initialize the specified memory object, providing
        !            86:  *     a reqeust port on which control calls can be made.
        !            87:  *     [To allow the mapping of this object to be used, the
        !            88:  *     memory manager must call memory_object_set_attributes,
        !            89:  *     specifying the "ready" parameter as TRUE.  To reject
        !            90:  *     all mappings of this object, the memory manager may
        !            91:  *     use memory_object_destroy.]
        !            92:  */
        !            93: simpleroutine  memory_object_init(
        !            94:                memory_object           : memory_object_t;
        !            95: #if    SEQNOS
        !            96:        msgseqno seqno                  : mach_port_seqno_t;
        !            97: #endif SEQNOS
        !            98:                memory_control          : memory_object_control_t =
        !            99:                                                MACH_MSG_TYPE_MAKE_SEND
        !           100:                                                ctype: mach_port_t;
        !           101:                memory_object_page_size : vm_size_t);
        !           102: 
        !           103: 
        !           104: /*
        !           105:  *     Indicates that the specified memory object is no longer
        !           106:  *     mapped (or cached -- see memory_object_set_attributes),
        !           107:  *     and that further mappings will cause another memory_object_init
        !           108:  *     call to be made.  No further calls will be made on
        !           109:  *     the memory object by this kernel.
        !           110:  *
        !           111:  *     [All rights to the control and name ports are included
        !           112:  *     in this call.  The memory manager should use port_deallocate
        !           113:  *     to release them once they are no longer needed.]
        !           114:  */
        !           115: simpleroutine  memory_object_terminate(
        !           116:                memory_object           : memory_object_t =
        !           117:                                                MACH_MSG_TYPE_MOVE_SEND
        !           118:                                                ctype: mach_port_t;
        !           119: #if    SEQNOS
        !           120:        msgseqno seqno                  : mach_port_seqno_t;
        !           121: #endif SEQNOS
        !           122:                memory_control          : memory_object_control_t =
        !           123:                                                MACH_MSG_TYPE_MOVE_RECEIVE
        !           124:                                                ctype: mach_port_t);
        !           125: 
        !           126: /*
        !           127:  *     Request data from this memory object.  At least
        !           128:  *     the specified data should be returned with at
        !           129:  *     least the specified access permitted.
        !           130:  *
        !           131:  *     [Reply should be memory_object_data_provided.]
        !           132:  */
        !           133: simpleroutine  memory_object_data_request(
        !           134:                memory_object           : memory_object_t;
        !           135: #if    SEQNOS
        !           136:        msgseqno seqno                  : mach_port_seqno_t;
        !           137: #endif SEQNOS
        !           138:                memory_control          : memory_object_control_t =
        !           139:                                                MACH_MSG_TYPE_MAKE_SEND
        !           140:                                                ctype: mach_port_t;
        !           141:                offset                  : vm_offset_t;
        !           142:                length                  : vm_size_t;
        !           143:                desired_access          : vm_prot_t);
        !           144: 
        !           145: /*
        !           146:  *     Request that the specified portion of this
        !           147:  *     memory object be unlocked to allow the specified
        !           148:  *     forms of access; the kernel already has the data.
        !           149:  *
        !           150:  *     [Reply should be memory_object_lock_request.]
        !           151:  */
        !           152: simpleroutine  memory_object_data_unlock(
        !           153:                memory_object           : memory_object_t;
        !           154: #if    SEQNOS
        !           155:        msgseqno seqno                  : mach_port_seqno_t;
        !           156: #endif SEQNOS
        !           157:                memory_control          : memory_object_control_t =
        !           158:                                                MACH_MSG_TYPE_MAKE_SEND
        !           159:                                                ctype: mach_port_t;
        !           160:                offset                  : vm_offset_t;
        !           161:                length                  : vm_size_t;
        !           162:                desired_access          : vm_prot_t);
        !           163: 
        !           164: /*
        !           165:  *     Indicate that a previous memory_object_lock_reqeust has been
        !           166:  *     completed.  Note that this call is made on whatever
        !           167:  *     port is specified in the memory_object_lock_request; that port
        !           168:  *     need not be the memory object port itself.
        !           169:  *
        !           170:  *     [No reply expected.]
        !           171:  */
        !           172: simpleroutine  memory_object_lock_completed(
        !           173:                memory_object           : memory_object_t =
        !           174:                        polymorphic|MACH_MSG_TYPE_PORT_SEND_ONCE
        !           175:                        ctype: mach_port_t;
        !           176: #if    SEQNOS
        !           177:        msgseqno seqno                  : mach_port_seqno_t;
        !           178: #endif SEQNOS
        !           179:                memory_control          : memory_object_control_t =
        !           180:                                                MACH_MSG_TYPE_MAKE_SEND
        !           181:                                                ctype: mach_port_t;
        !           182:                offset                  : vm_offset_t;
        !           183:                length                  : vm_size_t);
        !           184: 
        !           185: /*
        !           186:  *     Indicate that a previous memory_object_data_supply has been
        !           187:  *     completed.  Note that this call is made on whatever
        !           188:  *     port is specified in the memory_object_data_supply; that port
        !           189:  *     need not be the memory object port itself.
        !           190:  *
        !           191:  *     The result parameter indicates what happened during the supply.
        !           192:  *     If it is not KERN_SUCCESS, then error_offset identifies the
        !           193:  *     first offset at which a problem occurred.  The pagein operation
        !           194:  *     stopped at this point.  Note that the only failures reported
        !           195:  *     by this mechanism are KERN_MEMORY_PRESENT.  All other failures
        !           196:  *     (invalid argument, error on pagein of supplied data in manager's
        !           197:  *     address space) cause the entire operation to fail.
        !           198:  *
        !           199:  *     XXX Check what actually happens in latter case!
        !           200:  *
        !           201:  *     [No reply expected.]
        !           202:  */
        !           203: simpleroutine  memory_object_supply_completed(
        !           204:                memory_object           : memory_object_t =
        !           205:                        polymorphic|MACH_MSG_TYPE_PORT_SEND_ONCE
        !           206:                        ctype: mach_port_t;
        !           207: #if    SEQNOS
        !           208:        msgseqno seqno                  : mach_port_seqno_t;
        !           209: #endif SEQNOS
        !           210:                memory_control          : memory_object_control_t =
        !           211:                                                MACH_MSG_TYPE_MAKE_SEND
        !           212:                                                ctype: mach_port_t;
        !           213:                offset                  : vm_offset_t;
        !           214:                length                  : vm_size_t;
        !           215:                result                  : kern_return_t;
        !           216:                error_offset            : vm_offset_t);
        !           217: 
        !           218: /*
        !           219:  *     Return data to manager.  This call is used in place of data_write
        !           220:  *     for objects initialized by object_ready instead of set_attributes.
        !           221:  *     This call indicates whether the returned data is dirty and whether
        !           222:  *     the kernel kept a copy.  Precious data remains precious if the
        !           223:  *     kernel keeps a copy.  The indication that the kernel kept a copy
        !           224:  *     is only a hint if the data is not precious; the cleaned copy may
        !           225:  *     be discarded without further notifying the manager.
        !           226:  *
        !           227:  *     [Reply should be vm_deallocate to release the data.]
        !           228:  */
        !           229: simpleroutine   memory_object_data_return(
        !           230:                memory_object           : memory_object_t;
        !           231: #if    SEQNOS
        !           232:        msgseqno seqno                  : mach_port_seqno_t;
        !           233: #endif SEQNOS
        !           234:                memory_control          : memory_object_control_t =
        !           235:                                                MACH_MSG_TYPE_MAKE_SEND
        !           236:                                                ctype: mach_port_t;
        !           237:                offset                  : vm_offset_t;
        !           238:                data                    : pointer_t;
        !           239:                dirty                   : boolean_t;
        !           240:                kernel_copy             : boolean_t);
        !           241: 
        !           242: 
        !           243: simpleroutine memory_object_synchronize(
        !           244:                memory_object           : memory_object_t;
        !           245: #if    SEQNOS
        !           246:        msgseqno seqno                  : mach_port_seqno_t;
        !           247: #endif SEQNOS
        !           248:                memory_control          : memory_object_control_t =
        !           249:                                          MACH_MSG_TYPE_MAKE_SEND
        !           250:                                          ctype: mach_port_t;
        !           251:                        offset          : vm_offset_t;
        !           252:                        length          : vm_offset_t;
        !           253:                        sync_flags      : vm_sync_t );
        !           254: 
        !           255: 
        !           256: /*
        !           257:  *     Confirm a successful memory_object_change attributes message.
        !           258:  */
        !           259: simpleroutine   memory_object_change_completed(
        !           260:                 memory_object           : memory_object_t =
        !           261:                                polymorphic|MACH_MSG_TYPE_PORT_SEND_ONCE
        !           262:                                ctype: mach_port_t;
        !           263: #if     SEQNOS
        !           264:         msgseqno seqno                  : mach_port_seqno_t;
        !           265: #endif  SEQNOS
        !           266:                 memory_control          : memory_object_control_t =
        !           267:                                 MACH_MSG_TYPE_MAKE_SEND
        !           268:                                 ctype: mach_port_t;
        !           269:                 flavor                 : memory_object_flavor_t);
        !           270: 
        !           271: 
        !           272: #if    !defined(ADVISORY_PAGEOUT) || ADVISORY_PAGEOUT
        !           273: 
        !           274: /*
        !           275:  *     Advisory pageout
        !           276:  *     Inform pager that the kernel would like to discard the given 
        !           277:  *     page.
        !           278:  *     The pager should then clean/flush this page via the lock_request
        !           279:  *     mechanism.
        !           280:  *     If the pager does not cooperate, the kernel then uses mandatory
        !           281:  *     (regular) pageout on this page.
        !           282:  *
        !           283:  */
        !           284: simpleroutine   memory_object_discard_request(
        !           285:                memory_object           : memory_object_t;
        !           286: #if    SEQNOS
        !           287:        msgseqno seqno                  : mach_port_seqno_t;
        !           288: #endif SEQNOS
        !           289:                memory_control          : memory_object_control_t =
        !           290:                                                MACH_MSG_TYPE_MAKE_SEND
        !           291:                                                ctype: mach_port_t;
        !           292:                offset                  : vm_offset_t;
        !           293:                length                  : vm_size_t);
        !           294: 
        !           295: #else  /* !defined(ADVISORY_PAGEOUT) || ADVISORY_PAGEOUT */
        !           296: skip;
        !           297: #endif /* !defined(ADVISORY_PAGEOUT) || ADVISORY_PAGEOUT */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.