41 |
|
|
42 |
struct vm_pager |
struct vm_pager |
43 |
{ |
{ |
44 |
/* Request a page from VM object COOKIE, controled by PAGER. OFFSET |
/* Request data from pager (with cookie COOKIE) to memory object |
45 |
is postion in object. DESIRED_ACCESS is the access that we want |
OBJECT. Data is located at OFFSET in pager. DESIRED_ACCESS is |
46 |
for the page. Page is returned in *PAGEP. If *PAGEP is NULL, and |
the access that we want for the page. PAGE is the absent/busy |
47 |
the fn does not return an error, we allocate a new page. */ |
page that we want filled. */ |
48 |
kern_return_t (*page_request) (struct vm_pager *pager, void *cookie, |
kern_return_t (*page_request) (void *cookie, struct vm_object *object, |
49 |
vm_offset_t offset, vm_prot_t desired_access, |
vm_offset_t offset, vm_prot_t desired_access, |
50 |
struct vm_page **pagep); |
struct vm_page *page); |
51 |
#define PAGER_PAGE_REQUEST(OBJECT, OFFSET, ACCESS, PAGEP) \ |
#define PAGER_PAGE_REQUEST(OBJECT, OFFSET, ACCESS, PAGE) \ |
52 |
(*(OBJECT)->pager_object->page_request) \ |
(*(OBJECT)->pager->page_request) \ |
53 |
((OBJECT)->pager_object, (OBJECT)->pager_cookie, OFFSET, ACCESS, PAGEP) |
((OBJECT)->pager_cookie, OBJECT, OFFSET, ACCESS, PAGE) |
|
|
|
|
/* Flush PAGE into backingstore controled by COOKIN in PAGER. */ |
|
|
kern_return_t (*page_flush) (struct vm_pager *pager, void *cookie, |
|
|
vm_offset_t offset, struct vm_page *page); |
|
|
|
|
|
/* Create OBJECT beling to PAGER. Function may set OBJET->PAGER_COOKIE. */ |
|
|
kern_return_t (*create_object) (struct vm_pager *pager, |
|
|
struct vm_object *object); |
|
54 |
|
|
55 |
/* Initialize OBJECT. OBJECT just have been map into an address space. */ |
/* Initialize OBJECT. OBJECT just have been map into an address space. */ |
56 |
kern_return_t (*init_object) (struct vm_pager *pager, |
kern_return_t (*init_object) (void *cookie, |
57 |
struct vm_object *object); |
struct vm_object *object); |
58 |
|
#define PAGER_INIT_OBJECT(OBJECT) \ |
59 |
/* Cookie for this object - pager may assign whatever value. */ |
(*(OBJECT)->pager->init_object) \ |
60 |
void *cookie; |
((OBJECT)->pager_cookie, OBJECT) |
61 |
|
|
62 |
|
/* Write back data to the pager. |
63 |
|
|
64 |
|
OBJECT contains the data that should be initialized in the |
65 |
|
pager. OFFSET is offset into pager backing storage object. |
66 |
|
SIZE is number of bytes we're writing. DIRTY_P is true if |
67 |
|
the page was dirty. KERNEL_COPY_P is false if we flush page. */ |
68 |
|
kern_return_t (*write_data) (void *cookie, struct vm_object *old_object, |
69 |
|
vm_offset_t offset, struct vm_object *object, |
70 |
|
vm_size_t size, int dirty_p, int kernel_copy_p); |
71 |
|
|
72 |
|
#define PAGER_WRITE_DATA(OBJECT, OFFSET, NEW_OBJECT, SIZE, D_P, KC_P) \ |
73 |
|
(*(OBJECT)->pager->write_data) \ |
74 |
|
((OBJECT)->pager_cookie, OBJECT, OFFSET, NEW_OBJECT, SIZE, D_P, KC_P) |
75 |
|
|
76 |
|
#if 0 |
77 |
|
/* Initialize data for object in default pager. |
78 |
|
|
79 |
|
OBJECT contains the data that should be initialized in the |
80 |
|
pager. OFFSET is offset into pager backing storage object. |
81 |
|
SIZE is number of bytes we're writing. */ |
82 |
|
kern_return_t (*initialize_data) (void *cookie, vm_offset_t offset, |
83 |
|
struct vm_object *object, vm_size_t size); |
84 |
|
#define PAGER_INITIALIZE_DATA(OBJECT, OFFSET, SIZE, NEW_OBJECT) \ |
85 |
|
(*(OBJECT)->pager->init_object) \ |
86 |
|
((OBJECT)->pager_cookie, OFFSET, NEW_OBJECT, SIZE) |
87 |
|
#endif |
88 |
}; |
}; |
89 |
|
|
90 |
/* Pagers that the kernel provides. */ |
/* Pagers that the kernel provides. */ |
91 |
extern struct vm_pager pager_default; |
extern struct vm_pager pager_default; |
92 |
extern struct vm_pager pager_host; |
extern struct vm_pager pager_host; |
93 |
|
extern struct vm_pager pager_extern; |
94 |
|
|
95 |
/* Default pager. */ |
/* Default pager. */ |
96 |
extern struct vm_pager *default_pager; |
extern struct vm_pager *default_pager; |
97 |
|
|
|
/* Initialize host pager on OBJECT. PHYS_ADDR is the physical address |
|
|
that the object should map into memory. */ |
|
|
extern kern_return_t host_pager_init_object (struct vm_object *object, |
|
|
vm_offset_t phys_addr); |
|
|
|
|
98 |
#endif /* vm-pager.h */ |
#endif /* vm-pager.h */ |