26 |
#include "queue.h" |
#include "queue.h" |
27 |
#include "vm-object.h" |
#include "vm-object.h" |
28 |
#include "thread-lock.h" |
#include "thread-lock.h" |
29 |
|
#include "vm-page.h" |
30 |
|
|
31 |
|
/* List of pages, used when providing kernel or user application |
32 |
|
with data. ???? */ |
33 |
|
struct vm_map_pagelist |
34 |
|
{ |
35 |
|
struct vm_page **pages; /* Array of pages. */ |
36 |
|
unsigned int n_pages; /* Number of pages in array. */ |
37 |
|
}; |
38 |
|
|
39 |
|
struct vm_map_copy |
40 |
|
{ |
41 |
|
unsigned int type; |
42 |
|
vm_offset_t offset; |
43 |
|
vm_size_t size; |
44 |
|
|
45 |
|
#define VM_MAP_COPY_OBJECT 0 |
46 |
|
#define VM_MAP_COPY_PAGELIST 1 |
47 |
|
#define VM_MAP_COPY_SUBMAP 2 |
48 |
|
|
49 |
|
union { |
50 |
|
struct vm_object *vm_object; |
51 |
|
struct vm_map *vm_submap; |
52 |
|
struct vm_map_pagelist *vm_pagelist; |
53 |
|
} object; |
54 |
|
}; |
55 |
|
|
56 |
/* Portion of address space pointing to only one vm_object or |
/* Portion of address space pointing to only one vm_object or |
57 |
another vm_map. |
another vm_map. |
60 |
have no pager and should be treated as an anonymous region. |
have no pager and should be treated as an anonymous region. |
61 |
|
|
62 |
For anonymous regions we create the object on page fault. */ |
For anonymous regions we create the object on page fault. */ |
|
|
|
|
/* ??? make union of object and submap. */ |
|
|
|
|
63 |
struct vm_map_entry |
struct vm_map_entry |
64 |
{ |
{ |
65 |
struct queue_entry link; /* Link is list of entries. */ |
struct queue_entry link; /* Link is list of entries. */ |
171 |
vm_offset_t offset, vm_size_t size, |
vm_offset_t offset, vm_size_t size, |
172 |
int deallocate_p); |
int deallocate_p); |
173 |
|
|
174 |
|
/* Copy in region [ADDRESS, ADDRESS+SIZE) if MAP into a page list. |
175 |
|
Page list is returned in *PLISTP. If we fail, return error code. */ |
176 |
|
extern kern_return_t vm_map_copyin_pagelist (struct vm_map *map, |
177 |
|
vm_offset_t address, |
178 |
|
vm_size_t size, int dealloc_p, |
179 |
|
struct vm_map_pagelist **plistp); |
180 |
|
|
181 |
|
/* Copy in OBJECT into a map copy object structure. The copy |
182 |
|
structure is returned. NULL is returned if we run out of memory. */ |
183 |
|
extern struct vm_map_copy *vm_map_copyin_object (struct vm_object *object, |
184 |
|
vm_offset_t offset, |
185 |
|
vm_offset_t size); |
186 |
|
|
187 |
|
/* Copy out map copy COPY into MAP. Store resulting addres in |
188 |
|
*ADDRESSP. If everthing goes well, COPY is destroyed. */ |
189 |
|
extern kern_return_t vm_map_copyout (struct vm_map *map, |
190 |
|
struct vm_map_copy *copy, |
191 |
|
vm_offset_t *addressp); |
192 |
|
|
193 |
#endif /* KERN_VM_MAP_H */ |
#endif /* KERN_VM_MAP_H */ |