1 /* 2 * Copyright 2002-2009, Axel Dörfler, axeld@pinc-software.de. 3 * Distributed under the terms of the MIT License. 4 * 5 * Copyright 2001-2002, Travis Geiselbrecht. All rights reserved. 6 * Distributed under the terms of the NewOS License. 7 */ 8 #ifndef _KERNEL_VM_VM_PAGE_H 9 #define _KERNEL_VM_VM_PAGE_H 10 11 12 #include <vm/vm.h> 13 14 15 struct kernel_args; 16 17 extern int32 gMappedPagesCount; 18 19 20 struct vm_page_reservation { 21 uint32 count; 22 }; 23 24 25 #ifdef __cplusplus 26 extern "C" { 27 #endif 28 29 void vm_page_init_num_pages(struct kernel_args *args); 30 status_t vm_page_init(struct kernel_args *args); 31 status_t vm_page_init_post_area(struct kernel_args *args); 32 status_t vm_page_init_post_thread(struct kernel_args *args); 33 34 status_t vm_mark_page_inuse(addr_t page); 35 status_t vm_mark_page_range_inuse(addr_t startPage, addr_t length); 36 void vm_page_free(struct VMCache *cache, struct vm_page *page); 37 void vm_page_set_state(struct vm_page *page, int state); 38 void vm_page_requeue(struct vm_page *page, bool tail); 39 40 // get some data about the number of pages in the system 41 size_t vm_page_num_pages(void); 42 size_t vm_page_num_free_pages(void); 43 size_t vm_page_num_available_pages(void); 44 size_t vm_page_num_unused_pages(void); 45 void vm_page_get_stats(system_info *info); 46 47 status_t vm_page_write_modified_page_range(struct VMCache *cache, 48 uint32 firstPage, uint32 endPage); 49 status_t vm_page_write_modified_pages(struct VMCache *cache); 50 void vm_page_schedule_write_page(struct vm_page *page); 51 void vm_page_schedule_write_page_range(struct VMCache *cache, 52 uint32 firstPage, uint32 endPage); 53 54 void vm_page_unreserve_pages(vm_page_reservation* reservation); 55 void vm_page_reserve_pages(vm_page_reservation* reservation, uint32 count, 56 int priority); 57 bool vm_page_try_reserve_pages(vm_page_reservation* reservation, uint32 count, 58 int priority); 59 60 struct vm_page *vm_page_allocate_page(vm_page_reservation* reservation, 61 uint32 flags); 62 struct vm_page *vm_page_allocate_page_run(uint32 flags, addr_t base, 63 addr_t length, int priority); 64 struct vm_page *vm_page_allocate_page_run_no_base(uint32 flags, addr_t count, 65 int priority); 66 struct vm_page *vm_page_at_index(int32 index); 67 struct vm_page *vm_lookup_page(addr_t pageNumber); 68 bool vm_page_is_dummy(struct vm_page *page); 69 70 #ifdef __cplusplus 71 } 72 #endif 73 74 #endif /* _KERNEL_VM_VM_PAGE_H */ 75