Annotation of OSKit-Mach/include/mach/memory_object.defs, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Mach Operating System
                      3:  * Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University
                      4:  * All Rights Reserved.
                      5:  *
                      6:  * Permission to use, copy, modify and distribute this software and its
                      7:  * documentation is hereby granted, provided that both the copyright
                      8:  * notice and this permission notice appear in all copies of the
                      9:  * software, derivative works or modified versions, and any portions
                     10:  * thereof, and that both notices appear in supporting documentation.
                     11:  *
                     12:  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
                     13:  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
                     14:  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
                     15:  *
                     16:  * Carnegie Mellon requests users of this software to return to
                     17:  *
                     18:  *  Software Distribution Coordinator  or  [email protected]
                     19:  *  School of Computer Science
                     20:  *  Carnegie Mellon University
                     21:  *  Pittsburgh PA 15213-3890
                     22:  *
                     23:  * any improvements or extensions that they make and grant Carnegie Mellon
                     24:  * the rights to redistribute these changes.
                     25:  */
                     26: /*
                     27:  * File:       mach/memory_object.defs
                     28:  *
                     29:  * Abstract:
                     30:  *     Basic Mach external memory management interface declaration.
                     31:  */
                     32: 
                     33: subsystem
                     34: #if    KERNEL_USER
                     35:          KernelUser
                     36: #endif /* KERNEL_USER */
                     37: #if    KERNEL_SERVER
                     38:          KernelServer
                     39: #endif /* KERNEL_SERVER */
                     40:                     memory_object 2200;
                     41: 
                     42: #ifdef KERNEL
                     43: #include <norma_vm.h>
                     44: #if    NORMA_VM
                     45: userprefix k_;
                     46: #endif /* NORMA_VM */
                     47: #endif /* KERNEL */
                     48: 
                     49: #include <mach/std_types.defs>
                     50: #include <mach/mach_types.defs>
                     51: 
                     52: #if    SEQNOS
                     53: serverprefix seqnos_;
                     54: serverdemux seqnos_memory_object_server;
                     55: #endif /* SEQNOS */
                     56: 
                     57: /*
                     58:  *     Initialize the specified memory object, providing
                     59:  *     a reqeust port on which control calls can be made, and
                     60:  *     a name port that identifies this object to callers of
                     61:  *     vm_regions.
                     62:  *     [To allow the mapping of this object to be used, the
                     63:  *     memory manager must call memory_object_set_attributes,
                     64:  *     specifying the "ready" parameter as TRUE.  To reject
                     65:  *     all mappings of this object, the memory manager may
                     66:  *     use memory_object_destroy.]
                     67:  */
                     68: simpleroutine  memory_object_init(
                     69:                memory_object           : memory_object_t;
                     70: #if    SEQNOS
                     71:        msgseqno seqno                  : mach_port_seqno_t;
                     72: #endif /* SEQNOS */
                     73:                memory_control          : memory_object_control_t =
                     74:                                                MACH_MSG_TYPE_MAKE_SEND
                     75:                                                ctype: mach_port_t;
                     76:                memory_object_name      : memory_object_name_t =
                     77:                                                MACH_MSG_TYPE_MAKE_SEND
                     78:                                                ctype: mach_port_t;
                     79:                memory_object_page_size : vm_size_t);
                     80: 
                     81: /*
                     82:  *     Indicates that the specified memory object is no longer
                     83:  *     mapped (or cached -- see memory_object_set_attributes),
                     84:  *     and that further mappings will cause another memory_object_init
                     85:  *     call to be made.  No further calls will be made on
                     86:  *     the memory object by this kernel.
                     87:  *
                     88:  *     [All rights to the control and name ports are included
                     89:  *     in this call.  The memory manager should use port_deallocate
                     90:  *     to release them once they are no longer needed.]
                     91:  */
                     92: simpleroutine  memory_object_terminate(
                     93:                memory_object           : memory_object_t =
                     94:                                                MACH_MSG_TYPE_MOVE_SEND
                     95:                                                ctype: mach_port_t;
                     96: #if    SEQNOS
                     97:        msgseqno seqno                  : mach_port_seqno_t;
                     98: #endif /* SEQNOS */
                     99:                memory_control          : memory_object_control_t =
                    100:                                                MACH_MSG_TYPE_MOVE_RECEIVE
                    101:                                                ctype: mach_port_t
                    102: #if    KERNEL_USER
                    103:                /* for compatibility with Mach 2.5 kernels */
                    104:                                                , dealloc
                    105: #endif /* KERNEL_USER */
                    106:                                                ;
                    107:                memory_object_name      : memory_object_name_t =
                    108:                                                MACH_MSG_TYPE_MOVE_RECEIVE
                    109:                                                ctype: mach_port_t
                    110: #if    KERNEL_USER
                    111:                /* for compatibility with Mach 2.5 kernels */
                    112:                                                , dealloc
                    113: #endif /* KERNEL_USER */
                    114:                                                );
                    115: 
                    116: /*
                    117:  *     Indicates that a copy has been made of the specified range of
                    118:  *     the given original memory object.  The kernel will use the new
                    119:  *     memory object, control and name ports to refer to the new copy
                    120:  *     (once the memory manager has asserted its "ready" attribute).
                    121:  *
                    122:  *     Cached pages from the original memory object at the time of
                    123:  *     the copy operation are handled as follows:
                    124:  *             Readable pages may be silently copied to the new
                    125:  *              memory object (with all access permissions).
                    126:  *             Pages not copied are locked to prevent write access.
                    127:  *
                    128:  *     This call includes only the new memory object itself; a
                    129:  *     memory_object_init call will be made on the new memory
                    130:  *     object after the actions above are completed.
                    131:  *
                    132:  *     The new memory object is *temporary*, meaning that the
                    133:  *     memory manager should not change its contents or allow
                    134:  *     the memory object to be mapped in another client.  The
                    135:  *     memory manager may use the memory_object_data_unavailable
                    136:  *     call to indicate that the appropriate page of the original
                    137:  *     memory object may be used to fulfill a data request.
                    138:  *
                    139:  *     [Reply should be memory_object_set_attributes on the
                    140:  *     new memory object control port to indicate readiness.]
                    141:  */
                    142: simpleroutine  memory_object_copy(
                    143:                old_memory_object       : memory_object_t;
                    144: #if    SEQNOS
                    145:        msgseqno seqno                  : mach_port_seqno_t;
                    146: #endif /* SEQNOS */
                    147:                old_memory_control      : memory_object_control_t =
                    148:                                                MACH_MSG_TYPE_MAKE_SEND
                    149:                                                ctype: mach_port_t;
                    150:                offset                  : vm_offset_t;
                    151:                length                  : vm_size_t;
                    152:                new_memory_object       : memory_object_t =
                    153:                                                MACH_MSG_TYPE_MOVE_RECEIVE
                    154:                                                ctype: mach_port_t
                    155: #if    KERNEL_USER
                    156:                /* for compatibility with Mach 2.5 kernels */
                    157:                                                , dealloc
                    158: #endif /* KERNEL_USER */
                    159:                                                );
                    160: 
                    161: /*
                    162:  *     Request data from this memory object.  At least
                    163:  *     the specified data should be returned with at
                    164:  *     least the specified access permitted.
                    165:  *
                    166:  *     [Reply should be memory_object_data_provided.]
                    167:  */
                    168: simpleroutine  memory_object_data_request(
                    169:                memory_object           : memory_object_t;
                    170: #if    SEQNOS
                    171:        msgseqno seqno                  : mach_port_seqno_t;
                    172: #endif /* SEQNOS */
                    173:                memory_control          : memory_object_control_t =
                    174:                                                MACH_MSG_TYPE_MAKE_SEND
                    175:                                                ctype: mach_port_t;
                    176:                offset                  : vm_offset_t;
                    177:                length                  : vm_size_t;
                    178:                desired_access          : vm_prot_t);
                    179: 
                    180: /*
                    181:  *     Request that the specified portion of this
                    182:  *     memory object be unlocked to allow the specified
                    183:  *     forms of access; the kernel already has the data.
                    184:  *
                    185:  *     [Reply should be memory_object_lock_request.]
                    186:  */
                    187: simpleroutine  memory_object_data_unlock(
                    188:                memory_object           : memory_object_t;
                    189: #if    SEQNOS
                    190:        msgseqno seqno                  : mach_port_seqno_t;
                    191: #endif /* SEQNOS */
                    192:                memory_control          : memory_object_control_t =
                    193:                                                MACH_MSG_TYPE_MAKE_SEND
                    194:                                                ctype: mach_port_t;
                    195:                offset                  : vm_offset_t;
                    196:                length                  : vm_size_t;
                    197:                desired_access          : vm_prot_t);
                    198: 
                    199: /*
                    200:  *     Write back modifications made to this portion of
                    201:  *     the memory object while in memory.
                    202:  *
                    203:  *     Unless explicitly requested by a memory_object_lock_request
                    204:  *     (clean, but not flush), the kernel will not retain
                    205:  *     the data.
                    206:  *
                    207:  *     [Reply should be vm_deallocate to release the data.]
                    208:  */
                    209: simpleroutine  memory_object_data_write(
                    210:                memory_object           : memory_object_t;
                    211: #if    SEQNOS
                    212:        msgseqno seqno                  : mach_port_seqno_t;
                    213: #endif /* SEQNOS */
                    214:                memory_control          : memory_object_control_t =
                    215:                                                MACH_MSG_TYPE_MAKE_SEND
                    216:                                                ctype: mach_port_t;
                    217:                offset                  : vm_offset_t;
                    218:                data                    : pointer_t);
                    219: 
                    220: /*
                    221:  *     Indicate that a previous memory_object_lock_reqeust has been
                    222:  *     completed.  Note that this call is made on whatever
                    223:  *     port is specified in the memory_object_lock_request; that port
                    224:  *     need not be the memory object port itself.
                    225:  *
                    226:  *     [No reply expected.]
                    227:  */
                    228: simpleroutine  memory_object_lock_completed(
                    229:                memory_object           : memory_object_t =
                    230:                        polymorphic|MACH_MSG_TYPE_PORT_SEND_ONCE
                    231:                        ctype: mach_port_t;
                    232: #if    SEQNOS
                    233:        msgseqno seqno                  : mach_port_seqno_t;
                    234: #endif /* SEQNOS */
                    235:                memory_control          : memory_object_control_t =
                    236:                                                MACH_MSG_TYPE_MAKE_SEND
                    237:                                                ctype: mach_port_t;
                    238:                offset                  : vm_offset_t;
                    239:                length                  : vm_size_t);
                    240: 
                    241: /*
                    242:  *     Indicate that a previous memory_object_data_supply has been
                    243:  *     completed.  Note that this call is made on whatever
                    244:  *     port is specified in the memory_object_data_supply; that port
                    245:  *     need not be the memory object port itself.
                    246:  *
                    247:  *     The result parameter indicates what happened during the supply.
                    248:  *     If it is not KERN_SUCCESS, then error_offset identifies the
                    249:  *     first offset at which a problem occurred.  The pagein operation
                    250:  *     stopped at this point.  Note that the only failures reported
                    251:  *     by this mechanism are KERN_MEMORY_PRESENT.  All other failures
                    252:  *     (invalid argument, error on pagein of supplied data in manager's
                    253:  *     address space) cause the entire operation to fail.
                    254:  *
                    255:  *     XXX Check what actually happens in latter case!
                    256:  *
                    257:  *     [No reply expected.]
                    258:  */
                    259: simpleroutine  memory_object_supply_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:                offset                  : vm_offset_t;
                    270:                length                  : vm_size_t;
                    271:                result                  : kern_return_t;
                    272:                error_offset            : vm_offset_t);
                    273: 
                    274: /*
                    275:  *     Return data to manager.  This call is used in place of data_write
                    276:  *     for objects initialized by object_ready instead of set_attributes.
                    277:  *     This call indicates whether the returned data is dirty and whether
                    278:  *     the kernel kept a copy.  Precious data remains precious if the
                    279:  *     kernel keeps a copy.  The indication that the kernel kept a copy
                    280:  *     is only a hint if the data is not precious; the cleaned copy may
                    281:  *     be discarded without further notifying the manager.
                    282:  *
                    283:  *     [Reply should be vm_deallocate to release the data.]
                    284:  */
                    285: simpleroutine   memory_object_data_return(
                    286:                memory_object           : memory_object_t;
                    287: #if    SEQNOS
                    288:        msgseqno seqno                  : mach_port_seqno_t;
                    289: #endif /* SEQNOS */
                    290:                memory_control          : memory_object_control_t =
                    291:                                                MACH_MSG_TYPE_MAKE_SEND
                    292:                                                ctype: mach_port_t;
                    293:                offset                  : vm_offset_t;
                    294:                data                    : pointer_t;
                    295:                dirty                   : boolean_t;
                    296:                kernel_copy             : boolean_t);
                    297: 
                    298: /*
                    299:  * XXX Warning:  This routine does NOT contain a memory_object_control_t
                    300:  * XXX because the memory_object_change_attributes call may cause
                    301:  * XXX  memory object termination (by uncaching the object).  This would
                    302:  * XXX  yield an invalid port.
                    303:  */
                    304: 
                    305: simpleroutine  memory_object_change_completed(
                    306:                memory_object           : memory_object_t =
                    307:                        polymorphic|MACH_MSG_TYPE_PORT_SEND_ONCE
                    308:                        ctype: mach_port_t;
                    309: #if    SEQNOS
                    310:        msgseqno seqno                  : mach_port_seqno_t;
                    311: #endif /* SEQNOS */
                    312:                may_cache               : boolean_t;
                    313:                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.