Annotation of kernel/mach/memory_object.defs, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
        !             3:  *
        !             4:  * @APPLE_LICENSE_HEADER_START@
        !             5:  * 
        !             6:  * Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
        !             7:  * Reserved.  This file contains Original Code and/or Modifications of
        !             8:  * Original Code as defined in and that are subject to the Apple Public
        !             9:  * Source License Version 1.1 (the "License").  You may not use this file
        !            10:  * except in compliance with the License.  Please obtain a copy of the
        !            11:  * License at http://www.apple.com/publicsource and read it before using
        !            12:  * this file.
        !            13:  * 
        !            14:  * The Original Code and all software distributed under the License are
        !            15:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
        !            16:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
        !            17:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
        !            18:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
        !            19:  * License for the specific language governing rights and limitations
        !            20:  * under the License.
        !            21:  * 
        !            22:  * @APPLE_LICENSE_HEADER_END@
        !            23:  */
        !            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:  * HISTORY
        !            52:  * $Log: memory_object.defs,v $
        !            53:  * Revision 1.1.1.1.666.4  1999/03/16 17:05:40  wsanchez
        !            54:  * Substitute License
        !            55:  *
        !            56:  * Revision 1.1.1.1.666.3  1999/03/16 15:28:03  wsanchez
        !            57:  * Substitute copyright
        !            58:  *
        !            59:  * Revision 1.1.1.1.666.2  1999/03/16 10:37:39  umeshv
        !            60:  * Fixed errors in previous commit.
        !            61:  *
        !            62:  * Revision 1.1.1.1.666.1  1999/03/11 09:52:50  umeshv
        !            63:  * Added copyrights.
        !            64:  *
        !            65:  * Revision 1.1.1.1  1997/09/30 02:44:51  wsanchez
        !            66:  * Import of kernel from umeshv/kernel
        !            67:  *
        !            68:  * Revision 2.9  91/08/28  11:15:19  jsb
        !            69:  *     Added conditionalized sequence number support.
        !            70:  *     [91/08/13            rpd]
        !            71:  *     Fixed memory_object_supply_completed and memory_object_data_return
        !            72:  *     to use mach_port_t as the C type name for port arguments.
        !            73:  *     [91/08/02            rpd]
        !            74:  *     Update types in new memory object routines.  Add
        !            75:  *     memory_object_change_completed.
        !            76:  *     [91/07/03  14:05:39  dlb]
        !            77:  * 
        !            78:  * Revision 2.8  91/07/01  08:25:16  jsb
        !            79:  *     From David Black at OSF: added memory_object_supply_completed
        !            80:  *     and memory_object_data_return.
        !            81:  *     [91/06/29  14:54:47  jsb]
        !            82:  * 
        !            83:  * Revision 2.7  91/06/25  10:30:30  rpd
        !            84:  *     Changed the port-based type declarations
        !            85:  *     to use mach_port_t as the C type name.
        !            86:  *     [91/05/23            rpd]
        !            87:  * 
        !            88:  * Revision 2.6  91/06/17  15:47:26  jsb
        !            89:  *     If KERNEL and NORMA_VM, then use a userprefix (to allow interposition).
        !            90:  *     [91/06/17  10:55:06  jsb]
        !            91:  * 
        !            92:  * Revision 2.5  91/05/14  16:55:36  mrt
        !            93:  *     Correcting copyright
        !            94:  * 
        !            95:  * Revision 2.4  91/02/05  17:33:53  mrt
        !            96:  *     Changed to new Mach copyright
        !            97:  *     [91/02/01  17:19:02  mrt]
        !            98:  * 
        !            99:  * Revision 2.3  90/08/06  17:06:11  rpd
        !           100:  *     For compatibility with Mach 2.5, added dealloc to
        !           101:  *     arguments of memory_object_terminate and memory_object_copy.
        !           102:  *     [90/08/04            rpd]
        !           103:  * 
        !           104:  * Revision 2.2  90/06/02  14:58:51  rpd
        !           105:  *     Changed memory_object argument to memory_object_lock_completed
        !           106:  *     to default to a send-once right but still allow send rights.
        !           107:  *     [90/05/31            rpd]
        !           108:  * 
        !           109:  *     Converted to new IPC.
        !           110:  *     [90/03/26  22:35:02  rpd]
        !           111:  * 
        !           112:  * Revision 2.1  89/08/03  17:18:02  rwd
        !           113:  * Created.
        !           114:  * 
        !           115:  * Revision 2.3  89/02/25  18:38:17  gm0w
        !           116:  *     Changes for cleanup.
        !           117:  * 
        !           118:  * Revision 2.2  89/01/15  16:31:06  rpd
        !           119:  *     Moved from kern/ to mach/.
        !           120:  *     [89/01/15  14:40:04  rpd]
        !           121:  * 
        !           122:  * Revision 2.6  89/01/12  07:58:12  rpd
        !           123:  *     Fixed includes.
        !           124:  *     [89/01/12  04:52:21  rpd]
        !           125:  * 
        !           126:  * Revision 2.5  88/12/19  02:46:15  mwyoung
        !           127:  *     Change argument to memory_object_init to avoid lint in the MiG
        !           128:  *     output.
        !           129:  *     [88/12/18            mwyoung]
        !           130:  *     
        !           131:  *     Add memory_object_copy.
        !           132:  *     [88/11/07            mwyoung]
        !           133:  * 
        !           134:  * Revision 2.4  88/08/25  18:16:54  mwyoung
        !           135:  *     Add memory_object_terminate.
        !           136:  *     [88/08/11  18:46:46  mwyoung]
        !           137:  * 
        !           138:  * 29-Jun-88  Michael Young (mwyoung) at Carnegie-Mellon University
        !           139:  *     Use new types.
        !           140:  *
        !           141:  * 29-Jun-88  Michael Young (mwyoung) at Carnegie-Mellon University
        !           142:  *     Moved data type declarations to "mach_types.defs".
        !           143:  *
        !           144:  *  9-Dec-87  Michael Young (mwyoung) at Carnegie-Mellon University
        !           145:  *     Split that part of the interface applicable only to default
        !           146:  *     pagers into a separate interface definition.
        !           147:  *
        !           148:  *     Documented the interface.
        !           149:  *     
        !           150:  *     Purged history.  Contributors so far: jle, mwyoung, bolosky.
        !           151:  *
        !           152:  */
        !           153: /*
        !           154:  * File:       mach/memory_object.defs
        !           155:  *
        !           156:  * Abstract:
        !           157:  *     Basic Mach external memory management interface declaration.
        !           158:  */
        !           159: 
        !           160: subsystem
        !           161: #if    KERNEL_USER
        !           162:          KernelUser
        !           163: #endif KERNEL_USER
        !           164: #if    KERNEL_SERVER
        !           165:          KernelServer
        !           166: #endif KERNEL_SERVER
        !           167:                     memory_object 2200;
        !           168: 
        !           169: #include <mach/std_types.defs>
        !           170: #include <mach/mach_types.defs>
        !           171: 
        !           172: #if    SEQNOS
        !           173: serverprefix seqnos_;
        !           174: serverdemux seqnos_memory_object_server;
        !           175: #endif SEQNOS
        !           176: 
        !           177: /*
        !           178:  *     Initialize the specified memory object, providing
        !           179:  *     a reqeust port on which control calls can be made, and
        !           180:  *     a name port that identifies this object to callers of
        !           181:  *     vm_regions.
        !           182:  *     [To allow the mapping of this object to be used, the
        !           183:  *     memory manager must call memory_object_set_attributes,
        !           184:  *     specifying the "ready" parameter as TRUE.  To reject
        !           185:  *     all mappings of this object, the memory manager may
        !           186:  *     use memory_object_destroy.]
        !           187:  */
        !           188: simpleroutine  memory_object_init(
        !           189:                memory_object           : memory_object_t;
        !           190: #if    SEQNOS
        !           191:        msgseqno seqno                  : mach_port_seqno_t;
        !           192: #endif SEQNOS
        !           193:                memory_control          : memory_object_control_t =
        !           194:                                                MACH_MSG_TYPE_MAKE_SEND
        !           195:                                                ctype: mach_port_t;
        !           196:                memory_object_name      : memory_object_name_t =
        !           197:                                                MACH_MSG_TYPE_MAKE_SEND
        !           198:                                                ctype: mach_port_t;
        !           199:                memory_object_page_size : vm_size_t);
        !           200: 
        !           201: /*
        !           202:  *     Indicates that the specified memory object is no longer
        !           203:  *     mapped (or cached -- see memory_object_set_attributes),
        !           204:  *     and that further mappings will cause another memory_object_init
        !           205:  *     call to be made.  No further calls will be made on
        !           206:  *     the memory object by this kernel.
        !           207:  *
        !           208:  *     [All rights to the control and name ports are included
        !           209:  *     in this call.  The memory manager should use port_deallocate
        !           210:  *     to release them once they are no longer needed.]
        !           211:  */
        !           212: simpleroutine  memory_object_terminate(
        !           213:                memory_object           : memory_object_t =
        !           214:                                                MACH_MSG_TYPE_MOVE_SEND
        !           215:                                                ctype: mach_port_t;
        !           216: #if    SEQNOS
        !           217:        msgseqno seqno                  : mach_port_seqno_t;
        !           218: #endif SEQNOS
        !           219:                memory_control          : memory_object_control_t =
        !           220:                                                MACH_MSG_TYPE_MOVE_RECEIVE
        !           221:                                                ctype: mach_port_t
        !           222: #if    KERNEL_USER
        !           223:                /* for compatibility with Mach 2.5 kernels */
        !           224:                                                , dealloc
        !           225: #endif KERNEL_USER
        !           226:                                                ;
        !           227:                memory_object_name      : memory_object_name_t =
        !           228:                                                MACH_MSG_TYPE_MOVE_RECEIVE
        !           229:                                                ctype: mach_port_t
        !           230: #if    KERNEL_USER
        !           231:                /* for compatibility with Mach 2.5 kernels */
        !           232:                                                , dealloc
        !           233: #endif KERNEL_USER
        !           234:                                                );
        !           235: 
        !           236: /*
        !           237:  *     Indicates that a copy has been made of the specified range of
        !           238:  *     the given original memory object.  The kernel will use the new
        !           239:  *     memory object, control and name ports to refer to the new copy
        !           240:  *     (once the memory manager has asserted its "ready" attribute).
        !           241:  *
        !           242:  *     Cached pages from the original memory object at the time of
        !           243:  *     the copy operation are handled as follows:
        !           244:  *             Readable pages may be silently copied to the new
        !           245:  *              memory object (with all access permissions).
        !           246:  *             Pages not copied are locked to prevent write access.
        !           247:  *
        !           248:  *     This call includes only the new memory object itself; a
        !           249:  *     memory_object_init call will be made on the new memory
        !           250:  *     object after the actions above are completed.
        !           251:  *
        !           252:  *     The new memory object is *temporary*, meaning that the
        !           253:  *     memory manager should not change its contents or allow
        !           254:  *     the memory object to be mapped in another client.  The
        !           255:  *     memory manager may use the memory_object_data_unavailable
        !           256:  *     call to indicate that the appropriate page of the original
        !           257:  *     memory object may be used to fulfill a data request.
        !           258:  *
        !           259:  *     [Reply should be memory_object_set_attributes on the
        !           260:  *     new memory object control port to indicate readiness.]
        !           261:  */
        !           262: simpleroutine  memory_object_copy(
        !           263:                old_memory_object       : memory_object_t;
        !           264: #if    SEQNOS
        !           265:        msgseqno seqno                  : mach_port_seqno_t;
        !           266: #endif SEQNOS
        !           267:                old_memory_control      : memory_object_control_t =
        !           268:                                                MACH_MSG_TYPE_MAKE_SEND
        !           269:                                                ctype: mach_port_t;
        !           270:                offset                  : vm_offset_t;
        !           271:                length                  : vm_size_t;
        !           272:                new_memory_object       : memory_object_t =
        !           273:                                                MACH_MSG_TYPE_MOVE_RECEIVE
        !           274:                                                ctype: mach_port_t
        !           275: #if    KERNEL_USER
        !           276:                /* for compatibility with Mach 2.5 kernels */
        !           277:                                                , dealloc
        !           278: #endif KERNEL_USER
        !           279:                                                );
        !           280: 
        !           281: /*
        !           282:  *     Request data from this memory object.  At least
        !           283:  *     the specified data should be returned with at
        !           284:  *     least the specified access permitted.
        !           285:  *
        !           286:  *     [Reply should be memory_object_data_provided.]
        !           287:  */
        !           288: simpleroutine  memory_object_data_request(
        !           289:                memory_object           : memory_object_t;
        !           290: #if    SEQNOS
        !           291:        msgseqno seqno                  : mach_port_seqno_t;
        !           292: #endif SEQNOS
        !           293:                memory_control          : memory_object_control_t =
        !           294:                                                MACH_MSG_TYPE_MAKE_SEND
        !           295:                                                ctype: mach_port_t;
        !           296:                offset                  : vm_offset_t;
        !           297:                length                  : vm_size_t;
        !           298:                desired_access          : vm_prot_t);
        !           299: 
        !           300: /*
        !           301:  *     Request that the specified portion of this
        !           302:  *     memory object be unlocked to allow the specified
        !           303:  *     forms of access; the kernel already has the data.
        !           304:  *
        !           305:  *     [Reply should be memory_object_lock_request.]
        !           306:  */
        !           307: simpleroutine  memory_object_data_unlock(
        !           308:                memory_object           : memory_object_t;
        !           309: #if    SEQNOS
        !           310:        msgseqno seqno                  : mach_port_seqno_t;
        !           311: #endif SEQNOS
        !           312:                memory_control          : memory_object_control_t =
        !           313:                                                MACH_MSG_TYPE_MAKE_SEND
        !           314:                                                ctype: mach_port_t;
        !           315:                offset                  : vm_offset_t;
        !           316:                length                  : vm_size_t;
        !           317:                desired_access          : vm_prot_t);
        !           318: 
        !           319: /*
        !           320:  *     Write back modifications made to this portion of
        !           321:  *     the memory object while in memory.
        !           322:  *
        !           323:  *     Unless explicitly requested by a memory_object_lock_request
        !           324:  *     (clean, but not flush), the kernel will not retain
        !           325:  *     the data.
        !           326:  *
        !           327:  *     [Reply should be vm_deallocate to release the data.]
        !           328:  */
        !           329: simpleroutine  memory_object_data_write(
        !           330:                memory_object           : memory_object_t;
        !           331: #if    SEQNOS
        !           332:        msgseqno seqno                  : mach_port_seqno_t;
        !           333: #endif SEQNOS
        !           334:                memory_control          : memory_object_control_t =
        !           335:                                                MACH_MSG_TYPE_MAKE_SEND
        !           336:                                                ctype: mach_port_t;
        !           337:                offset                  : vm_offset_t;
        !           338:                data                    : pointer_t);
        !           339: 
        !           340: /*
        !           341:  *     Indicate that a previous memory_object_lock_reqeust has been
        !           342:  *     completed.  Note that this call is made on whatever
        !           343:  *     port is specified in the memory_object_lock_request; that port
        !           344:  *     need not be the memory object port itself.
        !           345:  *
        !           346:  *     [No reply expected.]
        !           347:  */
        !           348: simpleroutine  memory_object_lock_completed(
        !           349:                memory_object           : memory_object_t =
        !           350:                        polymorphic|MACH_MSG_TYPE_PORT_SEND_ONCE
        !           351:                        ctype: mach_port_t;
        !           352: #if    SEQNOS
        !           353:        msgseqno seqno                  : mach_port_seqno_t;
        !           354: #endif SEQNOS
        !           355:                memory_control          : memory_object_control_t =
        !           356:                                                MACH_MSG_TYPE_MAKE_SEND
        !           357:                                                ctype: mach_port_t;
        !           358:                offset                  : vm_offset_t;
        !           359:                length                  : vm_size_t);
        !           360: 
        !           361: /*
        !           362:  *     Indicate that a previous memory_object_data_supply has been
        !           363:  *     completed.  Note that this call is made on whatever
        !           364:  *     port is specified in the memory_object_data_supply; that port
        !           365:  *     need not be the memory object port itself.
        !           366:  *
        !           367:  *     The result parameter indicates what happened during the supply.
        !           368:  *     If it is not KERN_SUCCESS, then error_offset identifies the
        !           369:  *     first offset at which a problem occurred.  The pagein operation
        !           370:  *     stopped at this point.  Note that the only failures reported
        !           371:  *     by this mechanism are KERN_MEMORY_PRESENT.  All other failures
        !           372:  *     (invalid argument, error on pagein of supplied data in manager's
        !           373:  *     address space) cause the entire operation to fail.
        !           374:  *
        !           375:  *     XXX Check what actually happens in latter case!
        !           376:  *
        !           377:  *     [No reply expected.]
        !           378:  */
        !           379: simpleroutine  memory_object_supply_completed(
        !           380:                memory_object           : memory_object_t =
        !           381:                        polymorphic|MACH_MSG_TYPE_PORT_SEND_ONCE
        !           382:                        ctype: mach_port_t;
        !           383: #if    SEQNOS
        !           384:        msgseqno seqno                  : mach_port_seqno_t;
        !           385: #endif SEQNOS
        !           386:                memory_control          : memory_object_control_t =
        !           387:                                                MACH_MSG_TYPE_MAKE_SEND
        !           388:                                                ctype: mach_port_t;
        !           389:                offset                  : vm_offset_t;
        !           390:                length                  : vm_size_t;
        !           391:                result                  : kern_return_t;
        !           392:                error_offset            : vm_offset_t);
        !           393: 
        !           394: /*
        !           395:  *     Return data to manager.  This call is used in place of data_write
        !           396:  *     for objects initialized by object_ready instead of set_attributes.
        !           397:  *     This call indicates whether the returned data is dirty and whether
        !           398:  *     the kernel kept a copy.  Precious data remains precious if the
        !           399:  *     kernel keeps a copy.  The indication that the kernel kept a copy
        !           400:  *     is only a hint if the data is not precious; the cleaned copy may
        !           401:  *     be discarded without further notifying the manager.
        !           402:  *
        !           403:  *     [Reply should be vm_deallocate to release the data.]
        !           404:  */
        !           405: simpleroutine   memory_object_data_return(
        !           406:                memory_object           : memory_object_t;
        !           407: #if    SEQNOS
        !           408:        msgseqno seqno                  : mach_port_seqno_t;
        !           409: #endif SEQNOS
        !           410:                memory_control          : memory_object_control_t =
        !           411:                                                MACH_MSG_TYPE_MAKE_SEND
        !           412:                                                ctype: mach_port_t;
        !           413:                offset                  : vm_offset_t;
        !           414:                data                    : pointer_t;
        !           415:                dirty                   : boolean_t;
        !           416:                kernel_copy             : boolean_t);
        !           417: 
        !           418: /*
        !           419:  * XXX Warning:  This routine does NOT contain a memory_object_control_t
        !           420:  * XXX because the memory_object_change_attributes call may cause
        !           421:  * XXX  memory object termination (by uncaching the object).  This would
        !           422:  * XXX  yield an invalid port.
        !           423:  */
        !           424: 
        !           425: simpleroutine  memory_object_change_completed(
        !           426:                memory_object           : memory_object_t =
        !           427:                        polymorphic|MACH_MSG_TYPE_PORT_SEND_ONCE
        !           428:                        ctype: mach_port_t;
        !           429: #if    SEQNOS
        !           430:        msgseqno seqno                  : mach_port_seqno_t;
        !           431: #endif SEQNOS
        !           432:                may_cache               : boolean_t;
        !           433:                copy_strategy           : memory_object_copy_strategy_t);

unix.superglobalmegacorp.com

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