Annotation of XNU/osfmk/mach/thread_act.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:          thread_act 3600;
                     64: 
                     65: #include <mach/std_types.defs>
                     66: #include <mach/mach_types.defs>
                     67: 
                     68: /*
                     69:  *     Destroy the target thread.
                     70:  *
                     71:  *     JMM - For legacy reasons this consumes a reference to the
                     72:  *     target thread.  This will have to change in the future because
                     73:  *     we want the interfaces to be able to be defined in more standard
                     74:  *     IDLs and transports, and most of them do not support the notion
                     75:  *     of reference ownership transfers (just sharing).
                     76:  */
                     77: routine thread_terminate(
                     78:                target_act      : thread_act_consume_ref_t); 
                     79: 
                     80: 
                     81: /*
                     82:  *     Return the selected state information for the target
                     83:  *     thr_act.  If the thr_act is currently executing, the results
                     84:  *     may be stale.  [Flavor THREAD_STATE_FLAVOR_LIST provides a
                     85:  *     list of valid flavors for the target thread.]
                     86:  */
                     87: routine act_get_state(
                     88:                target_act      : thread_act_t;
                     89:                flavor          : int;
                     90:        out     old_state       : thread_state_t, CountInOut);
                     91: 
                     92: /*
                     93:  *     Set the selected state information for the target thread.
                     94:  *     If the thread is currently executing, the state change
                     95:  *     may be ill-defined.
                     96:  */
                     97: routine        act_set_state(
                     98:                target_act      : thread_act_t;
                     99:                flavor          : int;
                    100:                new_state       : thread_state_t);
                    101: 
                    102: /*
                    103:  * Backward compatible old-style thread routines.
                    104:  * These have different semantics than the new activation versions.
                    105:  *
                    106:  *     Return the selected state information for the target
                    107:  *     thread.  If the thread is currently executing, the results
                    108:  *     may be stale.  [Flavor THREAD_STATE_FLAVOR_LIST provides a
                    109:  *     list of valid flavors for the target thr_act.]
                    110:  */
                    111: routine thread_get_state(
                    112:                target_act      : thread_act_t;
                    113:                flavor          : thread_state_flavor_t;
                    114:        out     old_state       : thread_state_t, CountInOut);
                    115: 
                    116: /*
                    117:  *     Set the selected state information for the target thread.
                    118:  *     If the thread is currently executing, the state change
                    119:  *     may be ill-defined.
                    120:  */
                    121: routine        thread_set_state(
                    122:                target_act      : thread_act_t;
                    123:                flavor          : thread_state_flavor_t;
                    124:                new_state       : thread_state_t);
                    125: 
                    126: /*
                    127:  *     Increment the suspend count for the target thread.
                    128:  *     Once this call has completed, the thread will not
                    129:  *     execute any further user or meta- instructions.
                    130:  *     Once suspended, a thread may not execute again until
                    131:  *     its suspend count is zero, and the suspend count
                    132:  *     for its task is also zero.
                    133:  */
                    134: routine        thread_suspend(
                    135:                target_act      : thread_act_t);
                    136: 
                    137: /*
                    138:  *     Decrement the suspend count for the target thread,
                    139:  *     if that count is not already zero.
                    140:  */
                    141: routine        thread_resume(
                    142:                target_act      : thread_act_t);
                    143: 
                    144: /*
                    145:  *     Cause any user or meta- instructions currently being
                    146:  *     executed by the target thread to be aborted.  [Meta-
                    147:  *     instructions consist of the basic traps for IPC
                    148:  *     (e.g., msg_send, msg_receive) and self-identification
                    149:  *     (e.g., task_self, thread_self, thread_reply).  Calls
                    150:  *     described by MiG interfaces are not meta-instructions
                    151:  *     themselves.]
                    152:  */
                    153: routine thread_abort(
                    154:                target_act      : thread_act_t);
                    155: 
                    156: /*
                    157:  *     Cause any user or meta- instructions currently being
                    158:  *     executed by the target thread to be aborted so that
                    159:  *     they are transparently restartable.  This call fails
                    160:  *     if the abort would result in a non-restartable condition.
                    161:  *     Retry is the caller's responsibility.  [Meta-
                    162:  *     instructions consist of the basic traps for IPC
                    163:  *     (e.g., msg_send, msg_receive) and self-identification
                    164:  *     (e.g., task_self, thread_self, thread_reply).  Calls
                    165:  *     described by MiG interfaces are not meta-instructions
                    166:  *     themselves.]
                    167:  */
                    168: routine thread_abort_safely(
                    169:                target_act      : thread_act_t);
                    170: 
                    171: 
                    172: routine thread_depress_abort(
                    173:                thread          : thread_act_t);
                    174: 
                    175: 
                    176: /*
                    177:  *     Returns the current value of the selected special port
                    178:  *     associated with the target thread.
                    179:  */
                    180: routine thread_get_special_port(
                    181:                thr_act         : thread_act_t;
                    182:                which_port      : int;
                    183:        out     special_port    : mach_port_t);
                    184: 
                    185: /*
                    186:  *     Set one of the special ports associated with the
                    187:  *     target thread.
                    188:  */
                    189: routine thread_set_special_port(
                    190:                thr_act         : thread_act_t;
                    191:                which_port      : int;
                    192:                special_port    : mach_port_t);
                    193: 
                    194: /*
                    195:  *      Returns information about the target thread.
                    196:  */
                    197: routine thread_info(
                    198:                 target_act      : thread_act_t;
                    199:                 flavor          : thread_flavor_t;
                    200:         out     thread_info_out : thread_info_t, CountInOut);
                    201: 
                    202: /*
                    203:  * Set an exception handler for a thread on one or more exception types
                    204:  */
                    205: routine                thread_set_exception_ports(
                    206:                        thread          : thread_act_t;
                    207:                        exception_mask  : exception_mask_t;
                    208:                        new_port        : mach_port_t;
                    209:                        behavior        : exception_behavior_t;
                    210:                        new_flavor      : thread_state_flavor_t);
                    211: 
                    212: /*
                    213:  * Lookup some of the old exception handlers for a thread
                    214:  */
                    215: routine                thread_get_exception_ports(
                    216:                        thread          : thread_act_t;
                    217:                        exception_mask  : exception_mask_t;
                    218:                  out   masks           : exception_mask_array_t;
                    219:                  out   old_handlers    : exception_handler_array_t, SameCount;
                    220:                  out   old_behaviors   : exception_behavior_array_t, SameCount;
                    221:                  out   old_flavors     : exception_flavor_array_t, SameCount);
                    222: 
                    223: /*
                    224:  * Set an exception handler for a thread on one or more exception types.
                    225:  * At the same time, return the previously defined exception handlers for
                    226:  * those types.
                    227:  */
                    228: routine                thread_swap_exception_ports(
                    229:                        thread          : thread_act_t;
                    230:                        exception_mask  : exception_mask_t;
                    231:                        new_port        : mach_port_t;
                    232:                        behavior        : exception_behavior_t;
                    233:                        new_flavor      : thread_state_flavor_t;
                    234:                  out   masks           : exception_mask_array_t;
                    235:                  out   old_handlers    : exception_handler_array_t, SameCount;
                    236:                  out   old_behaviors   : exception_behavior_array_t, SameCount;
                    237:                  out   old_flavors     : exception_flavor_array_t, SameCount);
                    238: 
                    239: /*
                    240:  *      Set scheduling policy and parameters, both base and limit, for
                    241:  *      the given thread. Policy must be a policy which is enabled for the
                    242:  *      processor set. Change contained threads if requested.
                    243:  */
                    244: routine thread_policy(
                    245:        thr_act                 : thread_act_t;
                    246:        policy                  : policy_t;
                    247:        base                    : policy_base_t;
                    248:        set_limit               : boolean_t);
                    249: 
                    250: /*
                    251:  *      Set scheduling policy and parameters for the given thread.
                    252:  *      Policy must be a policy which is enabled for the
                    253:  *      processor set.
                    254:  *      (This should replace `thread_set_policy()' with the addition
                    255:  *      of the MK Scheduling Framework to the kernel.)
                    256:  */
                    257: routine thread_set_sched(
                    258:        thr_act                 : thread_act_t;
                    259:        policy                  : policy_t;
                    260:        sched_attr              : sched_attr_t);
                    261: 
                    262: /*
                    263:  *      Get scheduling policy and parameters for the given thread.
                    264:  *      (This was added as part of the MK Scheduling Framework.)
                    265:  */
                    266: routine thread_get_sched(
                    267:                thr_act                 : thread_act_t;
                    268:        inout   policy                  : policy_t;
                    269:        out     sched_attr              : sched_attr_t, CountInOut);
                    270: 
                    271: 
                    272: /*
                    273:  * Thread profiling
                    274:  * This call is only valid for MACH_PROF compiled kernels.
                    275:  * Otherwise, KERN_FAILURE is returned.
                    276:  */
                    277: routine thread_sample(
                    278:                thread          : thread_act_t;
                    279:                reply           : mach_port_make_send_t);
                    280: 
                    281: /*
                    282:  * JMM - Keep etap and processor_set related things at the end
                    283:  * because they are likely to be removed.
                    284:  */
                    285: /*
                    286:  *     Sets the ETAP trace status of the target thread.
                    287:  */
                    288: routine        etap_trace_thread(
                    289:                target_act      : thread_act_t;
                    290:                trace_status    : boolean_t);
                    291: 
                    292: /*
                    293:  *     Assign thread to processor set.
                    294:  */
                    295: routine        thread_assign(
                    296:                thread          : thread_act_t;
                    297:                new_set         : processor_set_t);
                    298: 
                    299: /*
                    300:  *     Assign thread to default set.
                    301:  */
                    302: routine thread_assign_default(
                    303:                thread          : thread_act_t);
                    304: 
                    305: /*
                    306:  *     Get current assignment for thread.
                    307:  */
                    308: routine thread_get_assignment(
                    309:                thread          : thread_act_t;
                    310:        out     assigned_set    : processor_set_name_t);
                    311: 
                    312: 
                    313: /*
                    314:  *      Set scheduling policy and parameters, both base and limit, for
                    315:  *      the given thread. Policy can be any policy implemented by the
                    316:  *      processor set, whether enabled or not.
                    317:  *
                    318:  *      JMM - Note that when processor sets go away, this should go on
                    319:  *     the host_priv port (passing in the thread, not vice-versa).
                    320:  */
                    321: routine thread_set_policy(
                    322:        thr_act                 : thread_act_t;
                    323:        pset                    : processor_set_t;
                    324:        policy                  : policy_t;
                    325:        base                    : policy_base_t;
                    326:        limit                   : policy_limit_t);
                    327: 

unix.superglobalmegacorp.com

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