1 #ifndef MACH_VM_H_ 2 #define MACH_VM_H_ 3 #include <vm/vm.h> 4 #include <vm/vm_object.h> 5 6 struct vm_map_links { 7 struct vm_map_entry *prev; /* previous entry */ 8 struct vm_map_entry *next; /* next entry */ 9 vm_offset_t start; /* start address */ 10 vm_offset_t end; /* end address */ 11 }; 12 13 /* 14 * Type: struct vm_map_header 15 * 16 * Description: 17 * Header for a vm_map and a vm_map_copy. 18 */ 19 struct vm_map_header { 20 struct vm_map_links links; /* first, last, min, max */ 21 int nentries; /* Number of entries */ 22 boolean_t entries_pageable; 23 /* are map entries pageable? */ 24 }; 25 26 27 struct vm_map_copy { 28 int type; 29 #define VM_MAP_COPY_ENTRY_LIST 1 30 #define VM_MAP_COPY_OBJECT 2 31 #define VM_MAP_COPY_OBJECT_PREALLOC 3 32 #define VM_MAP_COPY_KERNEL_BUFFER 4 33 vm_offset_t offset; 34 vm_size_t size; 35 union { 36 struct vm_map_header hdr; /* ENTRY_LIST */ 37 vm_object_t object; /* OBJECT */ 38 struct { /* KERNEL_BUFFER */ 39 vm_offset_t kdata; 40 vm_size_t kalloc_size; /* size of this copy_t */ 41 } c_k; 42 } c_u; 43 }; 44 45 #define cpy_hdr c_u.hdr 46 47 #define cpy_object c_u.object 48 #define cpy_index c_u.c_o.index 49 50 #define cpy_kdata c_u.c_k.kdata 51 #define cpy_kalloc_size c_u.c_k.kalloc_size 52 53 #define VM_MAP_COPY_NULL ((vm_map_copy_t) 0) 54 #define VM_MAP_NULL ((vm_map_t) 0) 55 56 #define vm_map_copy_to_entry(copy) \ 57 ((struct vm_map_entry *) &(copy)->cpy_hdr.links) 58 #define vm_map_copy_first_entry(copy) \ 59 ((copy)->cpy_hdr.links.next) 60 #define vm_map_copy_last_entry(copy) \ 61 ((copy)->cpy_hdr.links.prev) 62 63 typedef struct vm_map_copy *vm_map_copy_t; 64 65 /* Discard a copy without using it */ 66 extern void vm_map_copy_discard( 67 vm_map_copy_t copy); 68 69 /* Overwrite existing memory with a copy */ 70 extern kern_return_t vm_map_copy_overwrite( 71 vm_map_t dst_map, 72 vm_map_address_t dst_addr, 73 vm_map_copy_t copy, 74 boolean_t interruptible); 75 76 /* Place a copy into a map */ 77 extern kern_return_t vm_map_copyout( 78 vm_map_t dst_map, 79 vm_map_address_t *dst_addr, /* OUT */ 80 vm_map_copy_t copy); 81 82 extern kern_return_t vm_map_copyin( 83 vm_map_t src_map, 84 vm_map_address_t src_addr, 85 vm_map_size_t len, 86 boolean_t src_destroy, 87 vm_map_copy_t *copy_result); /* OUT */ 88 89 extern kern_return_t vm_map_copyin_common( 90 vm_map_t src_map, 91 vm_map_address_t src_addr, 92 vm_map_size_t len, 93 boolean_t src_destroy, 94 boolean_t src_volatile, 95 vm_map_copy_t *copy_result, /* OUT */ 96 boolean_t use_maxprot); 97 98 extern kern_return_t vm_map_copy_extract( 99 vm_map_t src_map, 100 vm_map_address_t src_addr, 101 vm_map_size_t len, 102 vm_map_copy_t *copy_result, /* OUT */ 103 vm_prot_t *cur_prot, /* OUT */ 104 vm_prot_t *max_prot); 105 106 107 int mach_vm_allocate(vm_map_t map, vm_offset_t *addr, size_t _size, int flags); 108 int mach_vm_deallocate(vm_map_t target __unused, mach_vm_address_t addr, mach_vm_size_t len); 109 110 int 111 mach_vm_map(vm_map_t map, mach_vm_address_t *address, mach_vm_size_t _size, 112 mach_vm_offset_t _mask, int _flags, mem_entry_name_port_t object __unused, 113 memory_object_offset_t offset __unused, boolean_t copy __unused, 114 vm_prot_t cur_protection, vm_prot_t max_protection, vm_inherit_t inh); 115 116 #endif /* MACH_VM_H_ */ 117