#include "paging.h" #include "kernel.h" #define invlpg(page) asm volatile("invlpg (%0)" :: "r" (page)) void paging_reinit() { map_p1.l[(uint32_t)&map_p2 >> 12] = (uint32_t)&entry_map_p2 | P1_P | P1_W | P1_G; map_p1.l[(uint32_t)&framebuffer >> 12] = 0xb8000 | P1_P | P1_W | P1_G; invlpg(&map_p2); for(unsigned int i = 0; i < 1024; i++) { if(map_p2[i] & P2_P && !(map_p2[i] & P2_G)) { map_p2[i] = 0; } if(map_p1.b[0x300][i] & P1_P && !(map_p1.b[0x300][i] & P1_G)) { map_p1.b[0x300][i] = 0; } if(map_p1.b[0x3ff][i] & P1_P && !(map_p1.b[0x3ff][i] & P1_G)) { map_p1.b[0x3ff][i] = 0; } } asm volatile( "mov %%cr4, %%eax\n" "or $0x00000080, %%eax\n" "mov %%eax, %%cr4\n" ::: "%eax" ); }