home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.2 (Developer) / NS_dev_3.2.iso / NextDeveloper / Headers / mach / mach.defs < prev    next >
Text File  |  1993-01-06  |  31KB  |  1,061 lines

  1. /* 
  2.  * Mach Operating System
  3.  * Copyright (c) 1989 Carnegie-Mellon University
  4.  * Copyright (c) 1988 Carnegie-Mellon University
  5.  * All rights reserved.  The CMU software License Agreement specifies
  6.  * the terms and conditions for use and redistribution.
  7.  */
  8. /*
  9.  * HISTORY
  10.  * $Log:    mach.defs,v $
  11.  * 15-Aug-91    Gregg Kellogg (gk) at NeXT
  12.  *    Got rid of MACH_IPC_XXXHACK and uimport of <mach/mach_extra.h>
  13.  *
  14.  * Revision 2.11  89/10/11  14:37:34  dlb
  15.  *     Prefix host_info, slot_info, and cpu_control with xxx.
  16.  *     [88/11/28            dlb]
  17.  * 
  18.  * Revision 2.10  89/10/10  22:50:52  mwyoung
  19.  *     Move memory_object_get_attributes and
  20.  *     vm_set_default_memory_manager to unused msg IDs within the
  21.  *     mach subsystem ID range (they had been OUTSIDE the range).
  22.  *     Msg IDs used belong to the obsolete calls pager_data_lock
  23.  *     and pager_clean_request (removed as of 21-Jan-88, before the
  24.  *     external pager interface was even in experimental use).
  25.  * 
  26.  *     WARNING! There are NO more msg IDs left at the end of this
  27.  *     subsystem.
  28.  *     [89/09/06            dbg]
  29.  * 
  30.  * Revision 2.9  89/10/10  10:55:28  mwyoung
  31.  *     Correct the documentation for memory_object_lock_request().
  32.  *     [89/08/10            mwyoung]
  33.  * 
  34.  * Revision 2.8  89/05/06  02:57:49  rpd
  35.  *     Purged <kern/task_statistics.h>, <kern/thread_statistics.h>.
  36.  *     [89/05/05  20:43:26  rpd]
  37.  * 
  38.  * Revision 2.7  89/05/01  17:02:43  rpd
  39.  *     Do not define KERNEL_SERVER here; it is passed in now.
  40.  *     Removed port_set_select.
  41.  *     [89/05/01  14:52:15  rpd]
  42.  * 
  43.  * Revision 2.6  89/04/18  16:43:24  mwyoung
  44.  *     Add memory_object_get_attributes, vm_set_default_memory_manager.
  45.  *     [89/04/07            mwyoung]
  46.  * 
  47.  * Revision 2.5  89/04/08  23:40:22  rpd
  48.  *     Added IsLong to the variabled-sized inline arguments of
  49.  *     task_info, thread_info, thread_set_state, thread_get_state.
  50.  *     [89/04/08  22:53:40  rpd]
  51.  * 
  52.  * Revision 2.4  89/03/09  20:20:28  rpd
  53.  *     More cleanup.
  54.  * 
  55.  * Revision 2.3  89/02/25  18:13:43  gm0w
  56.  *     Changes for cleanup.
  57.  * 
  58.  * Revision 2.2  89/01/15  16:30:12  rpd
  59.  *     Moved from kern/ to mach/.
  60.  *     [89/01/15  14:39:26  rpd]
  61.  * 
  62.  * Revision 2.19  89/01/12  07:56:49  rpd
  63.  *     Moved ipc_statistics, callout_info, callout_statistics, fpa_counters
  64.  *     calls out to other interface files.
  65.  *     [89/01/12  04:47:56  rpd]
  66.  * 
  67.  * Revision 2.18  89/01/10  23:31:31  rpd
  68.  *     Changed MACH_IPCSTATS to MACH_IPC_STATS.
  69.  *     Added MACH_IPC_XXXHACK, which enables the xxx_port_* calls.
  70.  *     [89/01/10  23:08:52  rpd]
  71.  * 
  72.  * Revision 2.17  89/01/04  13:36:35  rpd
  73.  *     Added host_fpa_counters and host_fpa_counters_reset calls.
  74.  *     These are conditional on ROMP_FPA_COUNT, which an RT option.
  75.  *     [89/01/01  15:02:29  rpd]
  76.  * 
  77.  * Revision 2.16  88/10/18  03:21:19  mwyoung
  78.  *     All the host_info call to be made on any kernel-provided object.
  79.  *     [88/09/23            mwyoung]
  80.  * 
  81.  * Revision 2.15  88/10/18  00:29:45  mwyoung
  82.  *     Changed the formal parameters in port_names and port_type
  83.  *     to be different than the routine names. Lint doesn't like 
  84.  *     the code that was generated.
  85.  *     [88/10/17  16:55:57  mrt]
  86.  * 
  87.  * Revision 2.14  88/10/11  10:19:18  rpd
  88.  *     Added port_set_backup.
  89.  *     [88/10/11  08:04:46  rpd]
  90.  * 
  91.  * Revision 2.13  88/10/01  21:56:58  rpd
  92.  *     Removed the kernel keyword.
  93.  *     [88/10/01  21:29:02  rpd]
  94.  * 
  95.  * Revision 2.12  88/09/25  22:14:59  rpd
  96.  *     Added new port_set_select call, the port set equivalent of port_select.
  97.  *     [88/09/19  16:27:14  rpd]
  98.  *     
  99.  *     Changed includes to the new style.
  100.  *     Added host_ipc_statistics_reset, host_callout_info,
  101.  *     host_callout_statistics, host_callout_statistics_reset.
  102.  *     [88/09/09  04:45:02  rpd]
  103.  * 
  104.  * Revision 2.11  88/08/30  17:28:07  mwyoung
  105.  *     So that transition compatibility code can temporarily use the
  106.  *     "xxx_" forms of the IPC routines, change the tag on which the
  107.  *     calls are generated.
  108.  *     [88/08/30            mwyoung]
  109.  * 
  110.  * Revision 2.10  88/08/25  18:16:23  mwyoung
  111.  *     Corrected include file references.
  112.  *     [88/08/22            mwyoung]
  113.  *     
  114.  *     Fixed documentation of port_extract_receive, embellished
  115.  *     port_set_allocate.
  116.  *     [88/08/20  03:02:39  mwyoung]
  117.  *     
  118.  *     Fill in memory_object_destroy call.  Adjust documentation for
  119.  *     thread_get_state.
  120.  *     [88/08/11  18:46:11  mwyoung]
  121.  * 
  122.  * Revision 2.9  88/08/03  15:34:47  dorr
  123.  * Turn off mach_device by default.  put task_set_emulation
  124.  * inside mach_emulation ifdef instead of mach_device.
  125.  * 
  126.  * Revision 2.8  88/07/22  07:35:21  rpd
  127.  * Conditionalize host_ipc_statistics call on MACH_IPCSTATS.
  128.  * 
  129.  * Revision 2.7  88/07/21  12:04:01  rpd
  130.  * Changed conditional on task_set_emulation to MACH_EMULATION.
  131.  * 
  132.  * Revision 2.6  88/07/21  00:33:47  rpd
  133.  * Made kernel keyword dependent on KERNEL_SERVER.
  134.  * Removed import of kern/mach_types.h, which is now in mach_types.defs.
  135.  * 
  136.  * Revision 2.5  88/07/20  16:38:13  rpd
  137.  * Made new port & port_set calls standard.
  138.  * 
  139.  * Revision 2.4  88/07/18  16:51:04  mwyoung
  140.  * Add space for memory_object_destroy; put tags on "skip" lines.
  141.  * 
  142.  * Revision 2.3  88/07/17  19:33:26  mwyoung
  143.  * *** empty log message ***
  144.  * 
  145.  * Revision 2.2.2.2  88/07/04  15:33:50  mwyoung
  146.  * Convert to use memory_object_-style names for routines that
  147.  * are expected to last.
  148.  * 
  149.  * Moved data type declarations to "mach_types.defs".
  150.  * 
  151.  * Use new type names for memory management interface.
  152.  * 
  153.  * Change pager_attributes to memory_object_set_attributes, rework
  154.  * arguments.
  155.  * 
  156.  * Revision 2.2.2.1  88/06/28  20:34:57  mwyoung
  157.  * Added vm_map, pager_attributes, pager_data_error calls.
  158.  * Merged rpd's IPC changes.
  159.  * Use conditional compilation for experimental interface parts.
  160.  * Documented the calls.
  161.  * 
  162.  * 26-Jun-88  Michael Young (mwyoung) at Carnegie-Mellon University
  163.  *    Document the calls.
  164.  *
  165.  * 26-Jun-88  Michael Young (mwyoung) at Carnegie-Mellon University
  166.  *    Add pager_attributes.
  167.  *
  168.  * 19-Jun-88  Michael Young (mwyoung) at Carnegie-Mellon University
  169.  *    Added vm_map, pager_data_error.  Removed obsolete entries.
  170.  *
  171.  * 28-Jan-88 Douglas Orr (dorr) at Carnegie-Mellon University
  172.  *    Added task_set_emulation. Note that task_set_emulation
  173.  *    only works in kernels with the MACH_EMULATION attribute on.
  174.  *    task_get_ioport only works in kernels with the MACH_DEVICE
  175.  *    attribute on.
  176.  *
  177.  * 21-Jan-88  David Golub (dbg) at Carnegie-Mellon University
  178.  *    Added new thread and task interfaces.  Obsolete interfaces
  179.  *    are prefixed with 'xxx_' but remain (temporarily) for binary
  180.  *    compatibility.  Made task_create no longer return the task's
  181.  *    data port (it doesn't exist).  Removed obsolete external pager
  182.  *    interfaces (per mwyoung): pager_data_lock, pager_clean_request,
  183.  *    pager_flush_request.
  184.  *
  185.  *  3-Dec-87  David Golub (dbg) at Carnegie-Mellon University
  186.  *    Added deallocator functions for task_t, thread_t, vm_map_t.
  187.  *
  188.  * 18-Nov-87  Avadis Tevanian (avie) at Carnegie-Mellon University
  189.  *    Reset history.
  190.  *
  191.  */
  192. /*
  193.  *    Matchmaker definitions file for Mach kernel interface.
  194.  */
  195. #ifdef    KERNEL
  196. #include <mach_xp.h>
  197. #include <mach_net.h>
  198. #include <mach_np.h>
  199. #else
  200. #define MACH_XP            0
  201. #define MACH_NET        1
  202. #define MACH_NP            1
  203. #endif    KERNEL
  204.  
  205. subsystem mach 2000;
  206.  
  207. #include <mach/std_types.defs>
  208. #include <mach/mach_types.defs>
  209.  
  210. #if    KERNEL_USER
  211. uimport <mach/mach_user_internal.h>;
  212. #endif    KERNEL_USER
  213.  
  214. skip;            /* old port_allocate */
  215. skip;            /* old port_deallocate */
  216. skip;            /* old port_enable */
  217. skip;            /* old port_disable */
  218. skip;            /* old port_select */
  219. skip;            /* old port_set_backlog */
  220. skip;            /* old port_status */
  221.  
  222. /*
  223.  *    Create a new task with an empty set of IPC rights,
  224.  *    and having an address space constructed from the
  225.  *    target task (or empty, if inherit_memory is FALSE).
  226.  */
  227. routine task_create(
  228.         target_task    : task_t;
  229.         inherit_memory    : boolean_t;
  230.     out    child_task    : task_t);
  231.  
  232. /*
  233.  *    Destroy the target task, causing all of its threads
  234.  *    to be destroyed, all of its IPC rights to be deallocated,
  235.  *    and all of its address space to be deallocated.
  236.  */
  237. routine task_terminate(
  238.         target_task    : task_t);
  239.  
  240. skip;            /* old task suspend */
  241. skip;            /* old task_resume */
  242.  
  243. /*
  244.  *    Returns the set of threads belonging to the target task.
  245.  */
  246. routine task_threads(
  247.         target_task    : task_t;
  248.     out    thread_list    : thread_array_t);
  249.  
  250. skip;        /* task_ports: OBSOLETE */
  251. skip;        /* old task_status */
  252. skip;        /* old task_set_notify */
  253. skip;        /* old thread_create */
  254.  
  255. /*
  256.  *    Destroy the target thread.
  257.  */
  258. routine thread_terminate(
  259.         target_thread    : thread_t);
  260.  
  261. skip;        /* old thread_suspend */
  262. skip;        /* old thread_resume */
  263. skip;        /* old thread_status */
  264. skip;        /* old thread_mutate */
  265.  
  266. /*
  267.  *    Allocate zero-filled memory in the address space
  268.  *    of the target task, either at the specified address,
  269.  *    or wherever space can be found (if anywhere is TRUE),
  270.  *    of the specified size.  The address at which the
  271.  *    allocation actually took place is returned.
  272.  */
  273. routine vm_allocate(
  274.         target_task    : vm_task_t;
  275.     inout    address        : vm_address_t;
  276.         size        : vm_size_t;
  277.         anywhere    : boolean_t);
  278.  
  279. #if    NeXT
  280. skip;    // No external pagers.
  281. #else    NeXT
  282. /*
  283.  *    Map the user-defined memory object
  284.  *    into the target task's address space.  OBSOLETE --
  285.  *    use vm_map instead.
  286.  */
  287. routine vm_allocate_with_pager(
  288.         target_task    : vm_task_t;
  289.     inout    address        : vm_address_t;
  290.         size        : vm_size_t;
  291.         anywhere    : boolean_t;
  292.         memory_object    : memory_object_t;
  293.         offset        : vm_offset_t);
  294. #endif    NeXT
  295.  
  296. /*
  297.  *    Deallocate the specified range from the virtual
  298.  *    address space of the target task.
  299.  */
  300. routine vm_deallocate(
  301.         target_task    : vm_task_t;
  302.         address        : vm_address_t;
  303.         size        : vm_size_t);
  304.  
  305. /*
  306.  *    Set the current or maximum protection attribute
  307.  *    for the specified range of the virtual address
  308.  *    space of the target task.  The current protection
  309.  *    limits the memory access rights of threads within
  310.  *    the task; the maximum protection limits the accesses
  311.  *    that may be given in the current protection.
  312.  *    Protections are specified as a set of {read, write, execute}
  313.  *    *permissions*.
  314.  */
  315. routine vm_protect(
  316.         target_task    : vm_task_t;
  317.         address        : vm_address_t;
  318.         size        : vm_size_t;
  319.         set_maximum    : boolean_t;
  320.         new_protection    : vm_prot_t);
  321.  
  322. /*
  323.  *    Set the inheritance attribute for the specified range
  324.  *    of the virtual address space of the target task.
  325.  *    The inheritance value is one of {none, copy, share}, and
  326.  *    specifies how the child address space should acquire
  327.  *    this memory at the time of a task_create call.
  328.  */
  329. routine vm_inherit(
  330.         target_task    : vm_task_t;
  331.         address        : vm_address_t;
  332.         size        : vm_size_t;
  333.         new_inheritance    : vm_inherit_t);
  334.  
  335. /*
  336.  *    Returns the contents of the specified range of the
  337.  *    virtual address space of the target task.  [The
  338.  *    range must be aligned on a virtual page boundary,
  339.  *    and must be a multiple of pages in extent.  The
  340.  *    protection on the specified range must permit reading.]
  341.  */
  342. routine vm_read(
  343.         target_task    : vm_task_t;
  344.         address        : vm_address_t;
  345.         size        : vm_size_t;
  346.     out    data        : pointer_t);
  347.  
  348. /*
  349.  *    Writes the contents of the specified range of the
  350.  *    virtual address space of the target task.  [The
  351.  *    range must be aligned on a virtual page boundary,
  352.  *    and must be a multiple of pages in extent.  The
  353.  *    protection on the specified range must permit writing.]
  354.  */
  355. routine vm_write(
  356.         target_task    : vm_task_t;
  357.         address        : vm_address_t;
  358.         data        : pointer_t);
  359.  
  360. /*
  361.  *    Copy the contents of the source range the virtual
  362.  *    address space of the target task to the destination
  363.  *    range in that same address space.  [Both of the
  364.  *    ranges must be aligned on a virtual page boundary,
  365.  *    and must be multiples of pages in extent.  The
  366.  *    protection on the source range must permit reading,
  367.  *    and the protection on the destination range must
  368.  *    permit writing.]
  369.  */
  370. routine vm_copy(
  371.         target_task    : vm_task_t;
  372.         source_address    : vm_address_t;
  373.         size        : vm_size_t;
  374.         dest_address    : vm_address_t);
  375.  
  376. /*
  377.  *    Returns information about the contents of the virtual
  378.  *    address space of the target task at the specified
  379.  *    address.  The returned protection, inheritance, sharing
  380.  *    and memory object values apply to the entire range described
  381.  *    by the address range returned; the memory object offset
  382.  *    corresponds to the beginning of the address range.
  383.  *    [If the specified address is not allocated, the next
  384.  *    highest address range is described.  If no addresses beyond
  385.  *    the one specified are allocated, the call returns KERN_NO_SPACE.]
  386.  */
  387. routine vm_region(
  388.         target_task    : vm_task_t;
  389.     inout    address        : vm_address_t;
  390.     out    size        : vm_size_t;
  391.     out    protection    : vm_prot_t;
  392.     out    max_protection    : vm_prot_t;
  393.     out    inheritance    : vm_inherit_t;
  394.     out    is_shared    : boolean_t;
  395.     out    object_name    : memory_object_name_t;
  396.     out    offset        : vm_offset_t);
  397.  
  398. /*
  399.  *    Return virtual memory statistics for the host
  400.  *    on which the target task resides.  [Note that the
  401.  *    statistics are not specific to the target task.]
  402.  */
  403. routine vm_statistics(
  404.         target_task    : vm_task_t;
  405.     out    vm_stats    : vm_statistics_data_t);
  406.  
  407. /* RUBBISH */
  408. routine task_by_unix_pid(
  409.         target_task    : task_t;
  410.         process_id    : int;
  411.     out    result_task    : task_t);
  412.  
  413. skip;    /* preserve numbering */
  414.  
  415. #if    NeXT
  416. skip;    /* no mach_ports_register() */
  417. skip;    /* no mach_ports_lookup() */
  418. #else    NeXT
  419. /*
  420.  *    Stash a handful of ports for the target task; child
  421.  *    tasks inherit this stash at task_create time.
  422.  */
  423. routine    mach_ports_register(
  424.         target_task    : task_t;
  425.         init_port_set    : port_array_t);
  426.         
  427. /*
  428.  *    Retrieve the stashed ports for the target task.
  429.  */
  430. routine    mach_ports_lookup(
  431.         target_task    : task_t;
  432.     out    init_port_set    : port_array_t);
  433. #endif    NeXT
  434.  
  435. /* GARBAGE */
  436. routine unix_pid(
  437.         target_task    : task_t;
  438.     out    process_id    : int);
  439.  
  440. #if    MACH_NET
  441. /*
  442.  *    Redirect network IP messages to the specified Mach port.
  443.  */
  444. routine netipc_listen(
  445.         request_port    : port_t;
  446.         src_addr    : int;
  447.         dst_addr    : int;
  448.         src_port    : int;
  449.         dst_port    : int;
  450.         protocol    : int;
  451.         ipc_port    : port_t);
  452.  
  453. /*
  454.  *    Stop IP message redirection as set up by netipc_listen.
  455.  */
  456. routine netipc_ignore(
  457.         request_port    : port_t;
  458.         ipc_port    : port_t);
  459. #else    MACH_NET
  460. skip;
  461. skip;
  462. #endif    MACH_NET
  463.  
  464. #if    MACH_XP
  465. /*
  466.  *    Provide the data contents of a range of the given memory
  467.  *    object, with the access restriction specified.  [Only
  468.  *    whole virtual pages of data can be accepted; partial pages
  469.  *    will be discarded.  Data should be provided on request, but
  470.  *    may be provided in advance as desired.  When data already
  471.  *    held by this kernel is provided again, the new data is ignored.
  472.  *    The access restriction is the subset of {read, write, execute}
  473.  *    which are prohibited.  The kernel may not provide any data (or
  474.  *    protection) consistency among pages with different virtual page
  475.  *    alignments within the same object.]
  476.  */
  477. simpleroutine memory_object_data_provided(
  478.         memory_control    : memory_object_control_t;
  479.         offset        : vm_offset_t;
  480.         data        : pointer_t;
  481.         lock_value    : vm_prot_t);
  482.  
  483. /*
  484.  *    Indicate that a range of the given temporary memory object does
  485.  *    not exist, and that the backing memory object should be used
  486.  *    instead (or zero-fill memory be used, if no backing object exists).
  487.  *    [This call is intended for use only by the default memory manager.
  488.  *    It should not be used to indicate a real error -- memory_object_data_error
  489.  *    should be used for that purpose.]
  490.  */
  491. simpleroutine memory_object_data_unavailable(
  492.         memory_control    : memory_object_control_t;
  493.         offset        : vm_offset_t;
  494.         size        : vm_size_t);
  495.  
  496. /*
  497.  *    Retrieves the attributes currently associated with
  498.  *    a memory object.
  499.  */
  500. routine memory_object_get_attributes(
  501.         memory_control    : memory_object_control_t;
  502.     out    object_ready    : boolean_t;
  503.     out    may_cache    : boolean_t;
  504.     out    copy_strategy    : memory_object_copy_strategy_t);
  505.  
  506.  
  507. /*
  508.  *    Sets the default memory manager, the port to which
  509.  *    newly-created temporary memory objects are delivered.
  510.  *    [See (memory_object_default)memory_object_create.]
  511.  *    The old memory manager port is returned.
  512.  */
  513. routine vm_set_default_memory_manager(
  514.         host        : task_t;    /* XXX */
  515.     inout    default_manager    : memory_object_t);
  516.  
  517. skip;    /* pager_flush_request : OBSOLETE */
  518.  
  519. /*
  520.  *    Control use of the data associated with the given
  521.  *    memory object.  For each page in the given range,
  522.  *    perform the following operations, in order:
  523.  *        1)  restrict access to the page (disallow
  524.  *            forms specified by "prot");
  525.  *        2)  write back modifications (if "should_clean"
  526.  *            is asserted, and the page is dirty); and,
  527.  *        3)  flush the cached copy (if "should_flush"
  528.  *            is asserted).
  529.  *    The set of pages is defined by a starting offset
  530.  *    ("offset") and size ("size").  Only pages with the
  531.  *    same page alignment as the starting offset are
  532.  *    considered.
  533.  *
  534.  *    A single acknowledgement is sent (to the "reply_to"
  535.  *    port) when these actions are complete.
  536.  */
  537. simpleroutine memory_object_lock_request(
  538.         memory_control    : memory_object_control_t;
  539.         offset        : vm_offset_t;
  540.         size        : vm_size_t;
  541.         should_clean    : boolean_t;
  542.         should_flush    : boolean_t;
  543.         lock_value    : vm_prot_t;
  544.         reply_to    : port_t);
  545.  
  546. /*
  547.  *    Specify whether data for the given memory object may be
  548.  *    retained by the kernel even after all address space
  549.  *    mappings of the object have been deallocated.
  550.  */
  551. simpleroutine pager_cache(
  552.         memory_control    : memory_object_control_t;
  553.         should_cache    : boolean_t);
  554. #else    MACH_XP
  555. skip;    /* memory_object_data_provided */
  556. skip;    /* memory_object_data_unavailable */
  557. skip;    /* memory_object_get_attributes */
  558. skip;    /* vm_set_default_memory_manager */
  559. skip;    /* pager_flush_request : OBSOLETE */
  560. skip;    /* memory_object_lock_request */
  561. skip;    /* pager_cache */
  562. #endif    MACH_XP
  563.  
  564. skip;        /* old thread_wait */
  565. skip;        /* old task_wait */
  566.  
  567. /*
  568.  *    Returns information about the host on which the
  569.  *    target object resides.  [This object may be
  570.  *    a task, thread, or memory_object_control port.]
  571.  */
  572. routine xxx_host_info(
  573.         target_task    : port_t;
  574.     out    info        : machine_info_data_t);
  575.     
  576. /*
  577.  *    Returns information about a particular processor on
  578.  *    the host on which the target task resides.
  579.  */
  580. routine xxx_slot_info(
  581.         target_task    : task_t;
  582.         slot        : int;
  583.     out    info        : machine_slot_data_t);
  584.  
  585. /*
  586.  *    Performs control operations (currently only
  587.  *    turning off or on) on a particular processor on
  588.  *    the host on which the target task resides.
  589.  */
  590. routine xxx_cpu_control(
  591.         target_task    : task_t;
  592.         cpu        : int;
  593.         running        : boolean_t);
  594.  
  595. skip;        /* old thread_statistics */
  596. skip;        /* old task_statistics */
  597.  
  598. #if    MACH_NP
  599. /*
  600.  *    Initialize the direct network IPC system.
  601.  */
  602. routine    netport_init(
  603.         request_port    : port_t);
  604.  
  605. /*
  606.  *    Enter an association between a network port
  607.  *    and a local Mach port.
  608.  */
  609. routine    netport_enter(
  610.         request_port    : port_t;
  611.         netport        : network_port_t;
  612.         port        : port_t;
  613.         local        : boolean_t);
  614.  
  615. /*
  616.  *    Remove an association established by netport_enter.
  617.  */
  618. routine    netport_remove(
  619.         request_port    : port_t;
  620.         netport        : network_port_t);
  621. #else    MACH_NP
  622. skip;
  623. skip;
  624. skip;
  625. #endif    MACH_NP
  626.  
  627. #if    MACH_XP
  628. /*
  629.  *    A form of the pager_data_provided call that takes its
  630.  *    data inline in the request message.
  631.  */
  632. simpleroutine pager_data_provided_inline(
  633.         memory_control    : memory_object_control_t;
  634.         offset        : vm_offset_t;
  635.         data        : vm_page_data_t;
  636.         lock_value    : vm_prot_t);
  637. #else    MACH_XP
  638. skip;
  639. #endif    MACH_XP
  640.  
  641. /*
  642.  *    Increment the suspend count for the target task.
  643.  *    No threads within a task may run when the suspend
  644.  *    count for that task is non-zero.
  645.  */
  646. routine    task_suspend(
  647.         target_task    : task_t);
  648.  
  649. /*
  650.  *    Decrement the suspend count for the target task,
  651.  *    if the count is currently non-zero.  If the resulting
  652.  *    suspend    count is zero, then threads within the task
  653.  *    that also have non-zero suspend counts may execute.
  654.  */
  655. routine    task_resume(
  656.         target_task    : task_t);
  657.  
  658. /*
  659.  *    Returns the current value of the selected special port
  660.  *    associated with the target task.
  661.  */
  662. routine task_get_special_port(
  663.         task        : task_t;
  664.         which_port    : int;
  665.     out    special_port    : port_t);
  666.  
  667. /*
  668.  *    Set one of the special ports associated with the
  669.  *    target task.
  670.  */
  671. routine task_set_special_port(
  672.         task        : task_t;
  673.         which_port    : int;
  674.         special_port    : port_t);
  675.  
  676. /*
  677.  *    Returns information about the target task.
  678.  */
  679. routine    task_info(
  680.         target_task    : task_t;
  681.         flavor        : int;
  682.     out    task_info_out    : task_info_t, IsLong);
  683.  
  684.  
  685. /*
  686.  *    Create a new thread within the target task, returning
  687.  *    the port representing that new thread.  The
  688.  *    initial execution state of the thread is undefined.
  689.  */
  690. routine thread_create(
  691.         parent_task    : task_t;
  692.     out    child_thread    : thread_t);
  693.  
  694. /*
  695.  *    Increment the suspend count for the target thread.
  696.  *    Once this call has completed, the thread will not
  697.  *    execute any further user or meta- instructions.
  698.  *    Once suspended, a thread may not execute again until
  699.  *    its suspend count is zero, and the suspend count
  700.  *    for its task is also zero.
  701.  */
  702. routine    thread_suspend(
  703.         target_thread    : thread_t);
  704.  
  705. /*
  706.  *    Decrement the suspend count for the target thread,
  707.  *    if that count is not already zero.
  708.  */
  709. routine    thread_resume(
  710.         target_thread    : thread_t);
  711.  
  712. /*
  713.  *    Cause any user or meta- instructions currently being
  714.  *    executed by the target thread to be aborted.  [Meta-
  715.  *    instructions consist of the basic traps for IPC
  716.  *    (e.g., msg_send, msg_receive) and self-identification
  717.  *    (e.g., task_self, thread_self, thread_reply).  Calls
  718.  *    described by MiG interfaces are not meta-instructions
  719.  *    themselves.]
  720.  */
  721. routine thread_abort(
  722.         target_thread    : thread_t);
  723.  
  724. /*
  725.  *    Return the selected state information for the target
  726.  *    thread.  If the thread is currently executing, the results
  727.  *    may be stale.  [Flavor THREAD_STATE_FLAVOR_LIST provides a
  728.  *    list of valid flavors for the target thread.]
  729.  */
  730. routine thread_get_state(
  731.         target_thread    : thread_t;
  732.         flavor        : int;
  733.     out    old_state    : thread_state_t, IsLong);
  734.  
  735. /*
  736.  *    Set the selected state information for the target thread.
  737.  *    If the thread is currently executing, the state change
  738.  *    may be ill-defined.
  739.  */
  740. routine    thread_set_state(
  741.         target_thread    : thread_t;
  742.         flavor        : int;
  743.         new_state    : thread_state_t, IsLong);
  744.  
  745. /*
  746.  *    Returns the current value of the selected special port
  747.  *    associated with the target thread.
  748.  */
  749. routine thread_get_special_port(
  750.         thread        : thread_t;
  751.         which_port    : int;
  752.     out    special_port    : port_t);
  753.  
  754. /*
  755.  *    Set one of the special ports associated with the
  756.  *    target thread.
  757.  */
  758. routine thread_set_special_port(
  759.         thread        : thread_t;
  760.         which_port    : int;
  761.         special_port    : port_t);
  762.  
  763. /*
  764.  *    Returns information about the target thread.
  765.  */
  766. routine    thread_info(
  767.         target_thread    : thread_t;
  768.         flavor        : int;
  769.     out    thread_info_out    : thread_info_t, IsLong);
  770.  
  771. skip;
  772.  
  773. skip;
  774.  
  775. skip;    /* old host_ipc_statistics */
  776.  
  777. /*
  778.  *    Returns the set of port and port set names
  779.  *    to which the target task has access, along with
  780.  *    the type (set or port) for each name.
  781.  */
  782. routine port_names(
  783.         task        : task_t;
  784.     out    port_names_p    : port_name_array_t;
  785.     out    port_types    : port_type_array_t);
  786.  
  787. /*
  788.  *    Returns the type (set or port) for the port name
  789.  *    within the target task.
  790.  */
  791. routine port_type(
  792.         task        : task_t;
  793.         port_name    : port_name_t;
  794.     out    port_type_p    : port_type_t);
  795.  
  796. /*
  797.  *    Changes the name by which a port (or port set) is known to
  798.  *    the target task.
  799.  */
  800. routine port_rename(
  801.         task        : task_t;
  802.         old_name    : port_name_t;
  803.         new_name    : port_name_t);
  804.  
  805. /*
  806.  *    Allocate a new port (with all rights) in the target task.
  807.  *    The port name in that task is returned.
  808.  */
  809. routine port_allocate(
  810.         task        : task_t;
  811.     out    port_name    : port_name_t);
  812.  
  813. /*
  814.  *    Deallocate the port with the given name from the target task.
  815.  */
  816. routine port_deallocate(
  817.         task        : task_t;
  818.         port_name    : port_name_t);
  819.  
  820. /*
  821.  *    Set the number of messages that may be queued to
  822.  *    the port in the target task with the given name
  823.  *    before further message queueing operations block.
  824.  *    The target task must hold receive rights for the
  825.  *    port named.
  826.  */
  827. routine port_set_backlog(
  828.         task        : task_t;
  829.         port_name    : port_name_t;
  830.         backlog        : int);
  831.  
  832. /*
  833.  *    Return information about the port with the given
  834.  *    name in the target task.  Only the ownership and
  835.  *    receive_rights results are meaningful unless the
  836.  *    target task holds receive rights for the port.
  837.  */
  838. routine port_status(
  839.         task        : task_t;
  840.         port_name    : port_name_t;
  841.     out    enabled        : port_set_name_t;
  842.     out    num_msgs    : int;
  843.     out    backlog        : int;
  844.     out    ownership    : boolean_t;
  845.     out    receive_rights    : boolean_t);
  846.  
  847. /*
  848.  *    Allocate a new port set in the target task, returning
  849.  *    the name of that new port set.  [The new set is
  850.  *    initially empty.]
  851.  */
  852. routine port_set_allocate(
  853.         task        : task_t;
  854.     out    set_name    : port_set_name_t);
  855.  
  856. /*
  857.  *    Deallocate the named port set from the target task.
  858.  *    Ports that are currently members of the named port
  859.  *    set are first removed from the set.
  860.  */
  861. routine port_set_deallocate(
  862.         task        : task_t;
  863.         set_name    : port_set_name_t);
  864.  
  865. /*
  866.  *    Add the named port to the port set named within
  867.  *    the target task.  [If the port currently is a member
  868.  *    of another port set, it is removed from that set.]
  869.  */
  870. routine port_set_add(
  871.         task        : task_t;
  872.         set_name    : port_set_name_t;
  873.         port_name    : port_name_t);
  874.  
  875. /*
  876.  *    Remove the named port from the port set named within
  877.  *    the target task.
  878.  */
  879. routine port_set_remove(
  880.         task        : task_t;
  881.         port_name    : port_name_t);
  882.  
  883. /*
  884.  *    Returns the current set of ports that are members
  885.  *    of the named port set in the target task.
  886.  */
  887. routine port_set_status(
  888.         task        : task_t;
  889.         set_name    : port_set_name_t;
  890.     out    members        : port_name_array_t);
  891.  
  892. /*
  893.  *    Insert send rights for the specified port into
  894.  *    the target task with the specified port name.
  895.  *    [If the name is in use, or the target task already
  896.  *    has another name for the specified port, then
  897.  *    the operation will fail.]
  898.  */
  899. routine port_insert_send(
  900.         task        : task_t;
  901.         my_port        : port_t;
  902.         its_name    : port_name_t);
  903.  
  904. /*
  905.  *    Returns send rights for the named port in the
  906.  *    target task, removing that port name and port
  907.  *    send rights from the target task.  [If the
  908.  *    target task holds receive rights for this port,
  909.  *    the operation will fail.]
  910.  */
  911. routine port_extract_send(
  912.         task        : task_t;
  913.         its_name    : port_name_t;
  914.     out    its_port    : port_t);
  915.  
  916. /*
  917.  *    Insert receive rights for the specified port into
  918.  *    the target task with the specified port name.
  919.  *    [If the name is in use, or the target task already
  920.  *    has another name for the specified port, then
  921.  *    the operation will fail.
  922.  */
  923. routine port_insert_receive(
  924.         task        : task_t;
  925.         my_port        : port_t = MSG_TYPE_PORT_ALL;
  926.         its_name    : port_name_t);
  927.  
  928. /*
  929.  *    Returns receive rights for the named port in the
  930.  *    target task, removing that port name and all port
  931.  *    rights from the target task.
  932.  */
  933. routine port_extract_receive(
  934.         task        : task_t;
  935.         its_name    : port_name_t;
  936.     out    its_port    : port_t = MSG_TYPE_PORT_ALL);
  937.  
  938. #if    MACH_XP
  939. /*
  940.  *    Map a user-defined memory object into the virtual address
  941.  *    space of the target task.  If desired (anywhere is TRUE),
  942.  *    the kernel will find a suitable address range of the
  943.  *    specified size; else, the specific address will be allocated.
  944.  *
  945.  *    The beginning address of the range will be aligned on a virtual
  946.  *    page boundary, be at or beyond the address specified, and
  947.  *    meet the mask requirements (bits turned on in the mask must not
  948.  *    be turned on in the result); the size of the range, in bytes,
  949.  *    will be rounded    up to an integral number of virtual pages.
  950.  *
  951.  *    The memory in the resulting range will be associated with the
  952.  *    specified memory object, with the beginning of the memory range
  953.  *    referring to the specified offset into the memory object.
  954.  *
  955.  *    The mapping will take the current and maximum protections and
  956.  *    the inheritance attributes specified; see the vm_protect and
  957.  *    vm_inherit calls for a description of these attributes.
  958.  *
  959.  *    If desired (copy is TRUE), the memory range will be filled
  960.  *    with a copy of the data from the memory object; this copy will
  961.  *    be private to this mapping in this target task.  Otherwise,
  962.  *    the memory in this mapping will be shared with other mappings
  963.  *    of the same memory object at the same offset (in this task or
  964.  *    in other tasks).  [The Mach kernel only enforces shared memory
  965.  *    consistency among mappings on one host with similar page alignments.
  966.  *    The user-defined memory manager for this object is responsible
  967.  *    for further consistency.]
  968.  */
  969. routine vm_map(
  970.         target_task    : vm_task_t;
  971.     inout    address        : vm_address_t;
  972.         size        : vm_size_t;
  973.         mask        : vm_address_t;
  974.         anywhere    : boolean_t;
  975.         memory_object    : memory_object_t;
  976.         offset        : vm_offset_t;
  977.         copy        : boolean_t;
  978.         cur_protection    : vm_prot_t;
  979.         max_protection    : vm_prot_t;
  980.         inheritance    : vm_inherit_t);
  981.  
  982. /*
  983.  *    Indicate that a range of the specified memory object cannot
  984.  *    be provided at this time.  [Threads waiting for memory pages
  985.  *    specified by this call will experience a memory exception.
  986.  *    Only threads waiting at the time of the call are affected.]
  987.  */
  988. simpleroutine memory_object_data_error(
  989.         memory_control    : memory_object_control_t;
  990.         offset        : vm_offset_t;
  991.         size        : vm_size_t;
  992.         error_value    : kern_return_t);
  993.  
  994. /*
  995.  *    Make decisions regarding the use of the specified
  996.  *    memory object.
  997.  */
  998. simpleroutine memory_object_set_attributes(
  999.         memory_control    : memory_object_control_t;
  1000.         object_ready    : boolean_t;
  1001.         may_cache    : boolean_t;
  1002.         copy_strategy    : memory_object_copy_strategy_t);
  1003.  
  1004. /*
  1005.  */
  1006. simpleroutine memory_object_destroy(
  1007.         memory_control    : memory_object_control_t;
  1008.         reason        : kern_return_t);
  1009.  
  1010. #else    MACH_XP
  1011. skip;    /* vm_map */
  1012. skip;    /* memory_object_data_error */
  1013. skip;    /* memory_object_set_attributes */
  1014. skip;    /* memory_object_destroy */
  1015. #endif    MACH_XP
  1016.  
  1017. skip;    /* old host_ipc_statistics_reset */
  1018. skip;    /* old host_callout_info */
  1019. skip;    /* old host_callout_statistics */
  1020. skip;    /* old host_callout_statistics_reset */
  1021. skip;    /* old port_set_select */
  1022.  
  1023. /*
  1024.  *    Sets a backup port for the named port.  The task
  1025.  *    must have receive rights for the named port.
  1026.  *    Returns the previous backup port, if any.
  1027.  */
  1028. routine port_set_backup(
  1029.         task        : task_t;
  1030.         port_name    : port_name_t;
  1031.         backup        : port_t;
  1032.     out    previous    : port_t);
  1033.  
  1034. skip;    /* old host_fpa_counters */
  1035. skip;    /* old host_fpa_counters_reset */
  1036.  
  1037. /*
  1038.  *  Synchronize the contents of an address space with backing store.
  1039.  *  Dirty pages in the address range are written to their appropriate
  1040.  *  backing store.  All pageouts are attempted.  If any pageout causes
  1041.  *  an error, vm_synchronize returns KERN_FAILURE.  If a page would be
  1042.  *  written to the default pager (swapfile), that page is skipped and
  1043.  *  KERN_FAILURE is returned.  This call is synchronous.
  1044.  */
  1045. routine vm_synchronize(
  1046.         target_task    : vm_task_t;
  1047.         address        : vm_address_t;
  1048.         size        : vm_size_t);
  1049.  
  1050. routine vm_set_policy(
  1051.         target_task    : vm_task_t;
  1052.         address        : vm_address_t;
  1053.         size        : vm_size_t;
  1054.         policy        : int);
  1055.  
  1056. routine vm_deactivate(
  1057.         target_task    : vm_task_t;
  1058.         address        : vm_address_t;
  1059.         size        : vm_size_t;
  1060.         when        : int);
  1061.