kern
annotate src/vm.h @ 18:096807345aa2
fixed the stupid mistake. forgot to page-align the page directory
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Sun, 27 Mar 2011 06:28:26 +0300 |
parents | 098b1cb5eeaa |
children | 7ece008f09c5 |
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@17 | 45 #endif /* VM_H_ */ |