home *** CD-ROM | disk | FTP | other *** search
/ H4CK3R 4 / hacker04 / 04_HACK04.ISO / darwin / darwinx86.iso / usr / include / mach / vm_map.defs < prev    next >
Encoding:
Text File  |  2001-09-30  |  13.8 KB  |  446 lines

  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  Software.Distribution@CS.CMU.EDU
  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.       vm_map 3800;
  64.  
  65. #include <mach/std_types.defs>
  66. #include <mach/mach_types.defs>
  67. #include <mach_debug/mach_debug_types.defs>
  68.  
  69. /*
  70.  *      Returns information about the contents of the virtual
  71.  *      address space of the target task at the specified
  72.  *      address.  The returned protection, inheritance, sharing
  73.  *      and memory object values apply to the entire range described
  74.  *      by the address range returned; the memory object offset
  75.  *      corresponds to the beginning of the address range.
  76.  *      [If the specified address is not allocated, the next
  77.  *      highest address range is described.  If no addresses beyond
  78.  *      the one specified are allocated, the call returns KERN_NO_SPACE.]
  79.  */
  80. routine vm_region(
  81.                 target_task     : vm_map_t;
  82.     inout    address        : vm_address_t;
  83.         out     size            : vm_size_t;
  84.         flavor        : vm_region_flavor_t;
  85.     out    info        : vm_region_info_t, CountInOut;
  86.         out     object_name     : memory_object_name_t =
  87.                                         MACH_MSG_TYPE_MOVE_SEND
  88.                                         ctype: mach_port_t);
  89.  
  90. /*
  91.  *    Allocate zero-filled memory in the address space
  92.  *    of the target task, either at the specified address,
  93.  *    or wherever space can be found (if anywhere is TRUE),
  94.  *    of the specified size.  The address at which the
  95.  *    allocation actually took place is returned.
  96.  */
  97. routine vm_allocate(
  98.         target_task    : vm_task_entry_t;
  99.     inout    address        : vm_address_t;
  100.         size        : vm_size_t;
  101.         flags        : int);
  102.  
  103. /*
  104.  *    Deallocate the specified range from the virtual
  105.  *    address space of the target task.
  106.  */
  107. routine vm_deallocate(
  108.         target_task    : vm_task_entry_t;
  109.         address        : vm_address_t;
  110.         size        : vm_size_t);
  111.  
  112. /*
  113.  *    Set the current or maximum protection attribute
  114.  *    for the specified range of the virtual address
  115.  *    space of the target task.  The current protection
  116.  *    limits the memory access rights of threads within
  117.  *    the task; the maximum protection limits the accesses
  118.  *    that may be given in the current protection.
  119.  *    Protections are specified as a set of {read, write, execute}
  120.  *    *permissions*.
  121.  */
  122. routine vm_protect(
  123.         target_task    : vm_task_entry_t;
  124.         address        : vm_address_t;
  125.         size        : vm_size_t;
  126.         set_maximum    : boolean_t;
  127.         new_protection    : vm_prot_t);
  128.  
  129. /*
  130.  *    Set the inheritance attribute for the specified range
  131.  *    of the virtual address space of the target task.
  132.  *    The inheritance value is one of {none, copy, share}, and
  133.  *    specifies how the child address space should acquire
  134.  *    this memory at the time of a task_create call.
  135.  */
  136. routine vm_inherit(
  137.         target_task    : vm_task_entry_t;
  138.         address        : vm_address_t;
  139.         size        : vm_size_t;
  140.         new_inheritance    : vm_inherit_t);
  141.  
  142. /*
  143.  *    Returns the contents of the specified range of the
  144.  *    virtual address space of the target task.  [The
  145.  *    range must be aligned on a virtual page boundary,
  146.  *    and must be a multiple of pages in extent.  The
  147.  *    protection on the specified range must permit reading.]
  148.  */
  149. routine vm_read(
  150.         target_task    : vm_map_t;
  151.         address        : vm_address_t;
  152.         size        : vm_size_t;
  153.     out    data        : pointer_t);
  154.  
  155. /* 
  156.  * List corrollary to vm_read, returns mapped contents of specified
  157.  * ranges within target address space.
  158.  */
  159. routine vm_read_list(
  160.         target_task     : vm_map_t;
  161.     inout    data_list       : vm_read_entry_t;
  162.         count        : natural_t);
  163.  
  164. /*
  165.  *    Writes the contents of the specified range of the
  166.  *    virtual address space of the target task.  [The
  167.  *    range must be aligned on a virtual page boundary,
  168.  *    and must be a multiple of pages in extent.  The
  169.  *    protection on the specified range must permit writing.]
  170.  */
  171. routine vm_write(
  172.         target_task    : vm_map_t;
  173.         address        : vm_address_t;
  174.         data        : pointer_t);
  175.  
  176. /*
  177.  *    Copy the contents of the source range of the virtual
  178.  *    address space of the target task to the destination
  179.  *    range in that same address space.  [Both of the
  180.  *    ranges must be aligned on a virtual page boundary,
  181.  *    and must be multiples of pages in extent.  The
  182.  *    protection on the source range must permit reading,
  183.  *    and the protection on the destination range must
  184.  *    permit writing.]
  185.  */
  186. routine vm_copy(
  187.         target_task    : vm_map_t;
  188.         source_address    : vm_address_t;
  189.         size        : vm_size_t;
  190.         dest_address    : vm_address_t);
  191.  
  192. /*
  193.  *    Returns the contents of the specified range of the
  194.  *    virtual address space of the target task.  [There
  195.  *    are no alignment restrictions, and the results will
  196.  *      overwrite the area pointed to by data - which must
  197.  *      already exist. The protection on the specified range
  198.  *    must permit reading.]
  199.  */
  200. routine vm_read_overwrite(
  201.         target_task    : vm_map_t;
  202.         address        : vm_address_t;
  203.         size        : vm_size_t;
  204.         data        : vm_address_t;
  205.     out    outsize        : vm_size_t);
  206.  
  207.  
  208. routine vm_msync(
  209.         target_task    : vm_map_t;
  210.         address        : vm_address_t;
  211.         size        : vm_size_t;
  212.         sync_flags    : vm_sync_t );
  213.  
  214. /*
  215.  *    Set the paging behavior attribute for the specified range
  216.  *    of the virtual address space of the target task.
  217.  *    The behavior value is one of {default, random, forward 
  218.  *    sequential, reverse sequential} and indicates the expected
  219.  *    page reference pattern for the specified range.
  220.  */
  221. routine vm_behavior_set(
  222.         target_task    : vm_map_t;
  223.         address        : vm_address_t;
  224.         size        : vm_size_t;
  225.         new_behavior    : vm_behavior_t);
  226.  
  227.  
  228. /*
  229.  *    Map a user-defined memory object into the virtual address
  230.  *    space of the target task.  If desired (anywhere is TRUE),
  231.  *    the kernel will find a suitable address range of the
  232.  *    specified size; else, the specific address will be allocated.
  233.  *
  234.  *    The beginning address of the range will be aligned on a virtual
  235.  *    page boundary, be at or beyond the address specified, and
  236.  *    meet the mask requirements (bits turned on in the mask must not
  237.  *    be turned on in the result); the size of the range, in bytes,
  238.  *    will be rounded    up to an integral number of virtual pages.
  239.  *
  240.  *    The memory in the resulting range will be associated with the
  241.  *    specified memory object, with the beginning of the memory range
  242.  *    referring to the specified offset into the memory object.
  243.  *
  244.  *    The mapping will take the current and maximum protections and
  245.  *    the inheritance attributes specified; see the vm_protect and
  246.  *    vm_inherit calls for a description of these attributes.
  247.  *
  248.  *    If desired (copy is TRUE), the memory range will be filled
  249.  *    with a copy of the data from the memory object; this copy will
  250.  *    be private to this mapping in this target task.  Otherwise,
  251.  *    the memory in this mapping will be shared with other mappings
  252.  *    of the same memory object at the same offset (in this task or
  253.  *    in other tasks).  [The Mach kernel only enforces shared memory
  254.  *    consistency among mappings on one host with similar page alignments.
  255.  *    The user-defined memory manager for this object is responsible
  256.  *    for further consistency.]
  257.  */
  258. routine vm_map(
  259.         target_task    : vm_task_entry_t;
  260.     inout    address        : vm_address_t;
  261.         size        : vm_size_t;
  262.         mask        : vm_address_t;
  263.         flags        : int;
  264.         object        : mem_entry_name_port_t;
  265.         offset        : vm_offset_t;
  266.         copy        : boolean_t;
  267.         cur_protection    : vm_prot_t;
  268.         max_protection    : vm_prot_t;
  269.         inheritance    : vm_inherit_t);
  270.  
  271. /*
  272.  *    Set/Get special properties of memory associated
  273.  *    to some virtual address range, such as cachability, 
  274.  *    migrability, replicability.  Machine-dependent.
  275.  */
  276. routine vm_machine_attribute(
  277.         target_task    : vm_map_t;
  278.         address        : vm_address_t;
  279.         size        : vm_size_t;
  280.         attribute    : vm_machine_attribute_t;
  281.     inout    value        : vm_machine_attribute_val_t);
  282.  
  283. /*
  284.  *      Map portion of a task's address space.
  285.  */
  286. routine vm_remap(
  287.         target_task    : vm_map_t;
  288.     inout    target_address    : vm_address_t;
  289.         size        : vm_size_t;
  290.         mask        : vm_address_t;
  291.         anywhere    : boolean_t;
  292.         src_task    : vm_map_t;
  293.         src_address    : vm_address_t;
  294.         copy        : boolean_t;
  295.     out    cur_protection    : vm_prot_t;
  296.     out    max_protection    : vm_prot_t;
  297.         inheritance    : vm_inherit_t);
  298.  
  299. /*
  300.  *    Require that all future virtual memory allocation
  301.  *    allocates wired memory.  Setting must_wire to FALSE
  302.  *    disables the wired future feature.
  303.  */
  304. routine task_wire(
  305.         target_task    : vm_map_t;
  306.         must_wire    : boolean_t);
  307.  
  308.     
  309. /*
  310.  *    Allow application level processes to create named entries which
  311.  *    correspond to mapped portions of their address space.  These named
  312.  *    entries can then be manipulated, shared with other processes in
  313.  *    other address spaces and ultimately mapped in ohter address spaces
  314.  */
  315.  
  316. routine mach_make_memory_entry(
  317.         target_task    :vm_map_t;
  318.     inout    size        :vm_size_t;
  319.         offset        :vm_offset_t;
  320.         permission    :vm_prot_t;
  321.     out    object_handle    :mach_port_move_send_t;
  322.         parent_entry    :mem_entry_name_port_t);
  323.  
  324. /*
  325.  *      Give the caller information on the given location in a virtual
  326.  *      address space.  If a page is mapped return ref and dirty info.
  327.  */
  328. routine vm_map_page_query(
  329.                 target_map      :vm_map_t;
  330.                 offset          :vm_offset_t;
  331.         out     disposition     :integer_t;
  332.         out     ref_count       :integer_t);
  333.  
  334. /*
  335.  *    Returns information about a region of memory.
  336.  *    Includes info about the chain of objects rooted at that region.
  337.  *      Only available in MACH_VM_DEBUG compiled kernels,
  338.  *      otherwise returns KERN_FAILURE.
  339.  */
  340. routine mach_vm_region_info(
  341.         task        : vm_map_t;
  342.         address        : vm_address_t;
  343.     out    region        : vm_info_region_t;
  344.     out    objects        : vm_info_object_array_t);
  345.  
  346. routine    vm_mapped_pages_info(
  347.         task        : vm_map_t;
  348.     out    pages        : page_address_array_t);
  349.  
  350. /*
  351.  *    Allow application level processes to create named entries which
  352.  *    are backed by sub-maps which describe regions of address space.
  353.  *    These regions of space can have objects mapped into them and
  354.  *    in turn, can be mapped into target address spaces 
  355.  */
  356.  
  357.  
  358. routine    vm_region_object_create(
  359.         target_task    :vm_map_t;
  360.     in    size        :vm_size_t;
  361.     out    region_object    :mach_port_move_send_t);
  362.  
  363. /*
  364.  *    A recursive form of vm_region which probes submaps withint the
  365.  *    address space.
  366.  */
  367. routine vm_region_recurse(
  368.                 target_task     : vm_map_t;
  369.     inout    address        : vm_address_t;
  370.         out     size            : vm_size_t;
  371.     inout    nesting_depth    : natural_t;
  372.     out    info        : vm_region_recurse_info_t,CountInOut);
  373.  
  374.  
  375. /* 
  376.  *    The routines below are temporary, meant for transitional use
  377.  *    as their counterparts are moved from 32 to 64 bit data path
  378.  */
  379.  
  380.  
  381. routine vm_region_recurse_64(
  382.                 target_task     : vm_map_t;
  383.     inout    address        : vm_address_t;
  384.         out     size            : vm_size_t;
  385.     inout    nesting_depth    : natural_t;
  386.     out    info        : vm_region_recurse_info_64_t,CountInOut);
  387.  
  388. routine mach_vm_region_info_64(
  389.         task        : vm_map_t;
  390.         address        : vm_address_t;
  391.     out    region        : vm_info_region_64_t;
  392.     out    objects        : vm_info_object_array_t);
  393.  
  394. routine vm_region_64(
  395.                 target_task     : vm_map_t;
  396.     inout    address        : vm_address_t;
  397.         out     size            : vm_size_t;
  398.         flavor        : vm_region_flavor_t;
  399.     out    info        : vm_region_info_64_t, CountInOut;
  400.         out     object_name     : memory_object_name_t =
  401.                                         MACH_MSG_TYPE_MOVE_SEND
  402.                                         ctype: mach_port_t);
  403.  
  404. routine mach_make_memory_entry_64(
  405.         target_task    :vm_map_t;
  406.     inout    size        :memory_object_size_t;
  407.         offset        :memory_object_offset_t;
  408.         permission    :vm_prot_t;
  409.     out    object_handle    :mach_port_move_send_t;
  410.         parent_entry    :mem_entry_name_port_t);
  411.  
  412.  
  413.  
  414. routine vm_map_64(
  415.         target_task    : vm_task_entry_t;
  416.     inout    address        : vm_address_t;
  417.         size        : vm_size_t;
  418.         mask        : vm_address_t;
  419.         flags        : int;
  420.         object        : mem_entry_name_port_t;
  421.         offset        : memory_object_offset_t;
  422.         copy        : boolean_t;
  423.         cur_protection    : vm_prot_t;
  424.         max_protection    : vm_prot_t;
  425.         inheritance    : vm_inherit_t);
  426.  
  427. routine vm_map_get_upl(
  428.         target_task    : vm_map_t;
  429.         address        : vm_address_t;
  430.     inout    size        : vm_size_t;
  431.     out    upl        : upl_t;
  432.     out    page_info    : upl_page_info_array_t, CountInOut;
  433.     inout    flags        : integer_t;
  434.         force_data_sync    : integer_t);
  435.  
  436. routine vm_upl_map(
  437.         target_task    : vm_map_t;
  438.         upl        : upl_t;
  439.     inout    address        : vm_address_t);
  440.  
  441. routine vm_upl_unmap(
  442.         target_task    : vm_map_t;
  443.         upl        : upl_t);
  444.         
  445.  
  446.