rev |
line source |
nuclear@17
|
1 #ifndef VM_H_
|
nuclear@17
|
2 #define VM_H_
|
nuclear@17
|
3
|
nuclear@17
|
4 #include <stdlib.h>
|
nuclear@17
|
5 #include "mboot.h"
|
nuclear@17
|
6
|
nuclear@17
|
7 /* page mapping flags */
|
nuclear@17
|
8 #define PG_PRESENT (1 << 0)
|
nuclear@17
|
9 #define PG_WRITABLE (1 << 1)
|
nuclear@17
|
10 #define PG_USER (1 << 2)
|
nuclear@17
|
11 #define PG_WRITE_THROUGH (1 << 3)
|
nuclear@17
|
12 #define PG_NOCACHE (1 << 4)
|
nuclear@17
|
13 #define PG_ACCESSED (1 << 5)
|
nuclear@17
|
14 #define PG_DIRTY (1 << 6)
|
nuclear@17
|
15 #define PG_TYPE (1 << 7)
|
nuclear@17
|
16 /* PG_GLOBAL mappings won't flush from TLB */
|
nuclear@17
|
17 #define PG_GLOBAL (1 << 8)
|
nuclear@17
|
18
|
nuclear@17
|
19
|
nuclear@17
|
20 #define PGSIZE 4096
|
nuclear@17
|
21 #define PGOFFS_MASK 0xfff
|
nuclear@17
|
22 #define PGNUM_MASK 0xfffff000
|
nuclear@18
|
23 #define PGENT_ADDR_MASK PGNUM_MASK
|
nuclear@17
|
24
|
nuclear@17
|
25 #define ADDR_TO_PAGE(x) ((uint32_t)(x) >> 12)
|
nuclear@17
|
26 #define PAGE_TO_ADDR(x) ((uint32_t)(x) << 12)
|
nuclear@17
|
27
|
nuclear@17
|
28 #define ADDR_TO_PGTBL(x) ((uint32_t)(x) >> 22)
|
nuclear@17
|
29 #define ADDR_TO_PGTBL_PG(x) (((uint32_t)(x) >> 12) & 0x3ff)
|
nuclear@17
|
30 #define ADDR_TO_PGOFFS(x) ((uint32_t)(x) & PGOFFS_MASK)
|
nuclear@17
|
31
|
nuclear@17
|
32 #define PAGE_TO_PGTBL(x) ((uint32_t)(x) >> 10)
|
nuclear@17
|
33 #define PAGE_TO_PGTBL_PG(x) ((uint32_t)(x) & 0x3ff)
|
nuclear@17
|
34
|
nuclear@17
|
35
|
nuclear@17
|
36 void init_vm(struct mboot_info *mb);
|
nuclear@17
|
37
|
nuclear@17
|
38 void map_page(int vpage, int ppage, unsigned int attr);
|
nuclear@17
|
39 void map_page_range(int vpg_start, int pgcount, int ppg_start, unsigned int attr);
|
nuclear@17
|
40
|
nuclear@17
|
41 void map_mem_range(uint32_t vaddr, size_t sz, uint32_t paddr, unsigned int attr);
|
nuclear@17
|
42
|
nuclear@18
|
43 uint32_t virt_to_phys(uint32_t vaddr);
|
nuclear@18
|
44
|
nuclear@22
|
45 enum {
|
nuclear@22
|
46 MEM_KERNEL,
|
nuclear@22
|
47 MEM_USER
|
nuclear@22
|
48 };
|
nuclear@22
|
49
|
nuclear@22
|
50 int pgalloc(int num, int area);
|
nuclear@22
|
51
|
nuclear@17
|
52 #endif /* VM_H_ */
|