67 K_PANIC(
"Error: vmm_findFreePage Failed");
75 K_PANIC(
"Error: vmm_findFreePage Failed");
95 K_PANIC(
"Error: vmm_findFreePage Failed");
109 K_PANIC(
"Error: vmm_findFreePage Failed");
130 K_PANIC(
"Error: vmm_findFreePage Failed");
149 K_PANIC(
"Error: vmm_findFreePage Failed");
161 K_PANIC(
"ERROR: vmm_findFreePage Failed");
166 "movl %%eax,%%cr3 \n"
167 "movl %%cr0,%%eax \n"
168 "orl $0x80010000,%%eax \n"
169 "movl %%eax,%%cr0 \n"
177 K_PANIC(
"vmmRemapPage failed\n");
203 uint16_t destPageDirectoryIndex = 0x0, destPageTableIndex = 0x0;
204 uint32_t *pageDir = 0x0, *pageTable = 0x0;
209 kpanic(
"Invalid PID %i", pid);
231 destPageDirectoryIndex =
PD_INDEX(dest);
242 destPageTableIndex =
PT_INDEX(dest);
246 kpanic(
"A Page Is Already Mapped Here: 0x%X:0x%X", dest, destPageTableIndex);
249 kprintf(
"Stack Page: [0x%X]\n", dest);
253 kprintf(
"Page Present: [0x%X][0x%X]", dest, pageTable[destPageTableIndex]);
264 pageTable[destPageTableIndex] = (
uint32_t) (source | perms);
267 rmDone:
asm volatile(
275 if (haveLock == 0x0) {
295 int pdI = 0x0, ptI = 0x0, c = 0, lc = 0;
311 kpanic(
"Failed To Allocate Page Dir: 0x%X", pdI);
321 if (startAddress == 0x0)
338 gotPages:
for (c = 0; c < count; c++) {
340 K_PANIC(
"vmmRemapPage failed: gfkp-1\n");
348 return (startAddress);
368 for (counter = 0x0; counter <
PD_ENTRIES; counter++) {
378 uint32_t i = 0x0, x = 0x0, y = 0x0, count = ((size + 4095) / 0x1000), c = 0x0;
379 uInt32 dI = 0x0, tI = 0x0;
380 uint32_t baseAddr = 0x0, offset = 0x0;
385 baseAddr = (
uint32_t) ptr & 0xFFFFF000;
388 dI = (baseAddr / (1024 * 4096));
389 tI = ((baseAddr - (dI * (1024 * 4096))) / 4096);
393 K_PANIC(
"vmm_remapPage: Failed");
403 kprintf(
"mapping completed\n");
409 for (y = 0; y < 1024; y++) {
416 for (c = 0; ((c < count) && (y + c < 1024)); c++) {
429 for (c = 0; c < count; c++) {
431 if ((tI + c) >= 0x1000) {
440 childPageTable = (
uint32_t *) (0x5A01000 + (0x1000 * dI));
452 for (i = 0; i < 0x1000; i++) {
456 return ((
void *) ((x * (1024 * 4096)) + (y * 4096) + offset));
463 childPageTable = (
uint32_t *) (0x5A01000 + (0x1000 * dI));
475 for (i = 0; i < 0x1000; i++) {
479 return ((
void *) ((x * (1024 * 4096)) + (y * 4096) + offset));
509 for (y = 0; y < 1024; y++) {
513 for (c = 0; c < count; c++) {
522 for (c = 0; c < count; c++) {
578 for (i = old; i <
new; i += 0x1000) {
583 }
else if (
new < old) {
608 pageTableSrc[y] = 0x0;
626 pageTableSrc[y] = 0x0;