File tree Expand file tree Collapse file tree
Kernel/KernelServices/VirtualMem Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ #include "vmem.h"
2+
3+ static uint32_t page_dir [1024 ] __attribute__((aligned (4096 )));
4+ static uint32_t first_page_table [1024 ] __attribute__((4096 ));
5+
6+ void paging_init () {
7+ for (int i = 0 ; i < 1024 ; i ++ ) {
8+ first_page_table [i ] = 0 ;
9+ }
10+ for (int i = 0 ; i < 1024 ; i ++ ) {
11+ first_page_table [i ] = (i * PAGE_SIZE ) | PAGE_PRESENT | PAGE_RW ;
12+ }
13+ for (int i = 0 ; i < 1024 ; i ++ ) {
14+ page_dir [i ] = 0 ;
15+ }
16+ page_dir [0 ] = ((uint32_t )first_page_table ) | PAGE_PRESENT | PAGE_RW ;
17+ load_page_dir (page_dir );
18+ enable_paging ();
19+ }
20+
21+ void load_page_dir (uint32_t * pd ) {
22+ __asm__ __volatile__("mov %0, %%cr3" :: "r" (pd ));
23+ }
24+
25+ void enable_paging () {
26+ uint32_t cr0 ;
27+ __asm__ __volatile__("mov %%cr0, %0" :"=r" (cr0 ));
28+ cr0 |= 0x80000000 ;
29+ __asm__ __volatile__("mov %0, %%cr0" ::"r" (cr0 ));
30+ }
Original file line number Diff line number Diff line change 1+ #ifndef VMEM_H
2+ #define VMEM_H
3+
4+ #include <OpenKernel/SystemLib/Std/types.h>
5+
6+ #define PAGE_PRESENT 0x1
7+ #define PAGE_RW 0x2
8+ #define PAGE_USER 0x4
9+
10+ void paging_init ();
11+ void load_page_dir (uint32_t * pd );
12+ void enable_paging ();
13+
14+ #endif
You can’t perform that action at this time.
0 commit comments