xref: /NextBSD/sys/sys/mach/mach_vm.h (revision bfb144d7055a4ecc1c0143f75c9906701905eb05)
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