Annotation of XNU/osfmk/mach/task.defs, revision 1.1.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_FREE_COPYRIGHT@
                     24:  */
                     25: /* 
                     26:  * Mach Operating System
                     27:  * Copyright (c) 1991,1990,1989 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/mach_port.defs
                     54:  *     Author: Rich Draves
                     55:  *
                     56:  *     Exported kernel calls.
                     57:  */
                     58: 
                     59: subsystem
                     60: #if    KERNEL_SERVER
                     61:          KernelServer
                     62: #endif KERNEL_SERVER
                     63:          task 3400;
                     64: 
                     65: #include <mach/std_types.defs>
                     66: #include <mach/mach_types.defs>
                     67: /*
                     68:  *     Create a new task with an empty set of IPC rights,
                     69:  *     and having an address space constructed from the
                     70:  *     target task (or empty, if inherit_memory is FALSE).
                     71:  */
                     72: routine task_create(
                     73:                target_task     : task_t;
                     74:                ledgers         : ledger_array_t;
                     75:                inherit_memory  : boolean_t;
                     76:        out     child_task      : task_t);
                     77: 
                     78: /*
                     79:  *     Destroy the target task, causing all of its threads
                     80:  *     to be destroyed, all of its IPC rights to be deallocated,
                     81:  *     and all of its address space to be deallocated.
                     82:  */
                     83: routine task_terminate(
                     84:                target_task     : task_t);
                     85: 
                     86: /*
                     87:  *     Returns the set of threads belonging to the target task.
                     88:  */
                     89: routine task_threads(
                     90:                target_task     : task_t;
                     91:        out     act_list        : thread_act_array_t);
                     92: 
                     93: /*
                     94:  *     Stash a handful of ports for the target task; child
                     95:  *     tasks inherit this stash at task_create time.
                     96:  */
                     97: routine        mach_ports_register(
                     98:                target_task     : task_t;
                     99:                init_port_set   : mach_port_array_t =
                    100:                                        ^array[] of mach_port_t);
                    101: 
                    102: /*
                    103:  *     Retrieve the stashed ports for the target task.
                    104:  */
                    105: routine        mach_ports_lookup(
                    106:                target_task     : task_t;
                    107:        out     init_port_set   : mach_port_array_t =
                    108:                                        ^array[] of mach_port_t);
                    109: 
                    110: /*
                    111:  *      Returns information about the target task.
                    112:  */
                    113: routine task_info(
                    114:                 target_task     : task_t;
                    115:                 flavor          : task_flavor_t;
                    116:         out     task_info_out   : task_info_t, CountInOut);
                    117: 
                    118: /*
                    119:  * Set task information.
                    120:  */
                    121: routine        task_set_info(
                    122:                target_task     : task_t;
                    123:                flavor          : task_flavor_t;
                    124:                task_info_in    : task_info_t);
                    125: 
                    126: /*
                    127:  *     Increment the suspend count for the target task.
                    128:  *     No threads within a task may run when the suspend
                    129:  *     count for that task is non-zero.
                    130:  */
                    131: routine        task_suspend(
                    132:                target_task     : task_t);
                    133: 
                    134: 
                    135: /*
                    136:  *     Decrement the suspend count for the target task,
                    137:  *     if the count is currently non-zero.  If the resulting
                    138:  *     suspend count is zero, then threads within the task
                    139:  *     that also have non-zero suspend counts may execute.
                    140:  */
                    141: routine        task_resume(
                    142:                target_task     : task_t);
                    143: 
                    144: /*
                    145:  *     Returns the current value of the selected special port
                    146:  *     associated with the target task.
                    147:  */
                    148: routine task_get_special_port(
                    149:                task            : task_t;
                    150:                which_port      : int;
                    151:        out     special_port    : mach_port_t);
                    152: 
                    153: /*
                    154:  *     Set one of the special ports associated with the
                    155:  *     target task.
                    156:  */
                    157: routine task_set_special_port(
                    158:                task            : task_t;
                    159:                which_port      : int;
                    160:                special_port    : mach_port_t);
                    161: 
                    162: /*
                    163:  *     Create a new thread within the target task, returning
                    164:  *     the port representing the first thr_act in that new thread.  The
                    165:  *     initial execution state of the thread is undefined.
                    166:  */
                    167: routine thread_create(
                    168:                parent_task     : task_t;
                    169:        out     child_act       : thread_act_t);
                    170: 
                    171: /*
                    172:  *      Create a new thread within the target task, returning
                    173:  *      the port representing that new thread.  The new thread 
                    174:  *     is not suspended; its initial execution state is given
                    175:  *     by flavor and new_state. Returns the port representing 
                    176:  *     the new thread.
                    177:  */
                    178: routine thread_create_running(
                    179:                 parent_task     : task_t;
                    180:                 flavor          : thread_state_flavor_t;
                    181:                 new_state       : thread_state_t;
                    182:         out     child_act       : thread_act_t);
                    183: 
                    184: /*
                    185:  * Set an exception handler for a task on one or more exception types.
                    186:  * These handlers are invoked for all threads in the task if there are
                    187:  * no thread-specific exception handlers or those handlers returned an
                    188:  * error.
                    189:  */
                    190: routine        task_set_exception_ports(
                    191:                task            : task_t;
                    192:                exception_mask  : exception_mask_t;
                    193:                new_port        : mach_port_t;
                    194:                behavior        : exception_behavior_t;
                    195:                new_flavor      : thread_state_flavor_t);
                    196: 
                    197: 
                    198: /*
                    199:  * Lookup some of the old exception handlers for a task
                    200:  */
                    201: routine        task_get_exception_ports(
                    202:                task            : task_t;
                    203:                exception_mask  : exception_mask_t;
                    204:          out   masks           : exception_mask_array_t;
                    205:          out   old_handlers    : exception_handler_array_t, SameCount;
                    206:          out   old_behaviors   : exception_behavior_array_t, SameCount;
                    207:          out   old_flavors     : exception_flavor_array_t, SameCount);
                    208: 
                    209: 
                    210: /*
                    211:  * Set an exception handler for a thread on one or more exception types.
                    212:  * At the same time, return the previously defined exception handlers for
                    213:  * those types.
                    214:  */
                    215: routine        task_swap_exception_ports(
                    216:                task            : task_t;
                    217:                exception_mask  : exception_mask_t;
                    218:                new_port        : mach_port_t;
                    219:                behavior        : exception_behavior_t;
                    220:                new_flavor      : thread_state_flavor_t;
                    221:          out   masks           : exception_mask_array_t;
                    222:          out   old_handlerss   : exception_handler_array_t, SameCount;
                    223:          out   old_behaviors   : exception_behavior_array_t, SameCount;
                    224:          out   old_flavors     : exception_flavor_array_t, SameCount);
                    225: 
                    226: /*
                    227:  * Create and destroy lock_set and semaphore synchronizers on a
                    228:  * per-task basis (i.e. the task owns them).
                    229:  */
                    230: routine lock_set_create(
                    231:                task            : task_t;
                    232:        out     new_lock_set    : lock_set_t;
                    233:                n_ulocks        : int;
                    234:                policy          : int);
                    235: 
                    236: routine lock_set_destroy(
                    237:                task            : task_t;
                    238:                lock_set        : lock_set_t);
                    239: 
                    240: routine semaphore_create(
                    241:                task            : task_t;
                    242:        out     semaphore       : semaphore_t;
                    243:                policy          : int;
                    244:                value           : int);
                    245: 
                    246: routine semaphore_destroy(
                    247:                task            : task_t;
                    248:                semaphore       : semaphore_consume_ref_t);
                    249: 
                    250: /*
                    251:  *      Set scheduling policy and parameters for the given task.
                    252:  *      Policy must be a policy which is enabled for the
                    253:  *      processor set. Change contained threads if requested.
                    254:  *      (This should replace `task_policy()' with the addition
                    255:  *      of the MK Scheduling Framework to the kernel.)
                    256:  */
                    257: routine task_set_sched(
                    258:        task                    : task_t;
                    259:        policy                  : policy_t;
                    260:        sched_attr              : sched_attr_t;
                    261:        set_limit               : boolean_t;
                    262:        change                  : boolean_t);
                    263: 
                    264: /*
                    265:  *      Get scheduling policy and parameters for the given task.
                    266:  *      (This was added as part of the MK Scheduling Framework.)
                    267:  */
                    268: routine task_get_sched(
                    269:        task                    : task_t;
                    270:        policy                  : policy_t;
                    271:        sched_attr              : sched_attr_t;
                    272:        sched_attr_size         : int);
                    273: 
                    274: 
                    275: /*
                    276:  * Task profiling.
                    277:  */
                    278: routine task_sample(
                    279:                task            : task_t;
                    280:                reply           : mach_port_make_send_t);
                    281: 
                    282: /*
                    283:  * JMM - Everything from here down is likely to go away soon
                    284:  */
                    285: /*
                    286:  *      Set scheduling policy and parameters, both base and limit, for
                    287:  *      the given task. Policy must be a policy which is enabled for the
                    288:  *      processor set. Change contained threads if requested.
                    289:  */
                    290: routine task_policy(
                    291:        task                    : task_t;
                    292:        policy                  : policy_t;
                    293:        base                    : policy_base_t;
                    294:        set_limit               : boolean_t;
                    295:        change                  : boolean_t);
                    296: 
                    297: 
                    298: /*
                    299:  *     Establish a user-level handler for the specified
                    300:  *     system call.
                    301:  */
                    302: routine task_set_emulation(
                    303:                target_port     : task_t;
                    304:                routine_entry_pt: vm_address_t;
                    305:                routine_number  : int); 
                    306: 
                    307: /*
                    308:  *     Get user-level handler entry points for all
                    309:  *     emulated system calls.
                    310:  */
                    311: routine task_get_emulation_vector(
                    312:                task            : task_t;
                    313:        out     vector_start    : int;
                    314:        out     emulation_vector: emulation_vector_t);
                    315: 
                    316: /*
                    317:  *     Establish user-level handlers for the specified
                    318:  *     system calls. Non-emulated system calls are specified
                    319:  *     with emulation_vector[i] == EML_ROUTINE_NULL.
                    320:  */
                    321: routine task_set_emulation_vector(
                    322:                task            : task_t;
                    323:                vector_start    : int;
                    324:                emulation_vector: emulation_vector_t);
                    325: 
                    326: 
                    327: /*
                    328:  *      Establish restart pc for interrupted atomic sequences.
                    329:  */
                    330: routine task_set_ras_pc(
                    331:                target_task     : task_t;
                    332:                basepc          : vm_address_t;
                    333:                boundspc        : vm_address_t);
                    334: 
                    335: 
                    336: /* 
                    337:  * JMM - Want to eliminate kernel tasks and processor_set so
                    338:  * keep them at the end.
                    339:  */
                    340: /*
                    341:  *     Create a new task in the kernel's address space with
                    342:  *     an empty set of IPC rights, with a map allocated from
                    343:  *     the kernel's map starting at map_base of length map_size.
                    344:  */
                    345: routine kernel_task_create(
                    346:                target_task     : task_t;
                    347:                map_base        : vm_offset_t;
                    348:                map_size        : vm_size_t;
                    349:        out     child_task      : task_t);
                    350: 
                    351: /*
                    352:  *     Assign task to processor set.
                    353:  */
                    354: routine task_assign(
                    355:                task            : task_t;
                    356:                new_set         : processor_set_t;
                    357:                assign_threads  : boolean_t);
                    358: 
                    359: /*
                    360:  *     Assign task to default set.
                    361:  */
                    362: routine task_assign_default(
                    363:                task            : task_t;
                    364:                assign_threads  : boolean_t);
                    365: 
                    366: /*
                    367:  *     Get current assignment for task.
                    368:  */
                    369: routine task_get_assignment(
                    370:                task            : task_t;
                    371:        out     assigned_set    : processor_set_name_t);
                    372: 
                    373: /*
                    374:  *      Set scheduling policy and parameters, both base and limit, for
                    375:  *      the given task. Policy can be any policy implemented by the
                    376:  *      processor set, whether enabled or not. Change contained threads
                    377:  *      if requested.
                    378:  *
                    379:  *      JMM - Note that when processor sets go away, this should go on
                    380:  *     the host_priv port (passing in the task, not vice-versa).
                    381:  */
                    382: routine task_set_policy(
                    383:        task                    : task_t;
                    384:        pset                    : processor_set_t;
                    385:        policy                  : policy_t;
                    386:        base                    : policy_base_t;
                    387:        limit                   : policy_limit_t;
                    388:        change                  : boolean_t);
                    389: 
                    390: /*
                    391:  *      Registers the caller-specified RPC subsystem as a new object.
                    392:  */
                    393: routine mach_subsystem_create(
                    394:                task            : task_t;
                    395:                user_subsys     : user_subsystem_t;
                    396:        out     subsys          : subsystem_t);
                    397: 

unix.superglobalmegacorp.com

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