00001
00002
00003
00004
00005
00006
00007
00008 #ifndef PAGE_TABLE_H
00009 #define PAGE_TABLE_H
00010
00011
00012 struct page_table;
00013
00014
00015 typedef void (*page_table_handler_t) ( struct page_table *pt, int page, void *arg );
00016
00017
00018 typedef int (*page_table_iterator_t) ( struct page_table *pt, void *arg );
00019
00020
00021
00022 struct page_table * page_table_create( char *base, int pages, int access, page_table_handler_t handler, void *handler_arg );
00023
00024
00025 void page_table_delete( struct page_table *pt );
00026
00027
00028 char *page_table_base( struct page_table *pt );
00029
00030
00031 struct page_table * page_table_from_base( char *base );
00032
00033
00034 int page_table_pages( struct page_table *pt );
00035
00036
00037 char *page_table_data( struct page_table *pt, int page );
00038
00039
00040 int page_table_access_set( struct page_table *pt, int page, int npages, int access );
00041
00042
00043 int page_table_access_get( struct page_table *pt, int page );
00044
00045
00046 int page_table_pagesize();
00047
00048
00049 int page_table_iterate( page_table_iterator_t iter, void *arg );
00050
00051 #define PAGE_TABLE_ACCESS_READ 1
00052 #define PAGE_TABLE_ACCESS_WRITE 2
00053 #define PAGE_TABLE_ACCESS_EXEC 4
00054
00055 #define PAGE_TABLE_ACCESS_NONE 0
00056 #define PAGE_TABLE_ACCESS_ALL (PAGE_TABLE_ACCESS_READ|PAGE_TABLE_ACCESS_WRITE|PAGE_TABLE_ACCESS_EXEC)
00057
00058 #endif