|
|
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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.