Working on Paging API #67

This commit is contained in:
Adrien Bourmault 2020-01-11 00:17:42 +01:00
parent 40cd623b97
commit 3bce4c6208
1 changed files with 35 additions and 31 deletions

View File

@ -173,7 +173,7 @@ void MmInitPaging(void)
else if ((ulong)curAddrPT >= USERSPACE) {
MmPT[index] = ((ulong)curAddrPT - diffKernUsr) | PRESENT; // Not present for instance
xedni = (((ulong)curAddrPT - diffKernUsr) / ((ulong)KPAGESIZE));
MmPhysicalPageTable[xedni] = (ulong)curAddrPT;
//MmPhysicalPageTable[xedni] = (ulong)curAddrPT;
if ((ulong)curAddrPT == USERSPACE) {
DebugLog("\tUserspace at %p:%p\n", curAddrPT, curAddrPT - diffKernUsr);
@ -295,44 +295,48 @@ void MmUnmapPage(void* virtualAddr)
//
// Find a free block of pages
//
void *MmGetPhyPageBlock(size_t size, bool usermode) {
void *startPhyPage = 0;
void *endPhyPage = 0;
size_t curSize = 0;
/* void *MmGetPhyPageBlock(size_t size, bool usermode) { */
/* void *startPhyPage = 0; */
/* void *endPhyPage = 0; */
/* ulong offset = 0; */
/* size_t curSize = 0; */
// Maximum PHYSICAL address in memory
ulong phRamSize = memoryMap.freeRamSize + memoryMap.nonfreeRamSize;
/* // Maximum PHYSICAL address in memory */
/* ulong phRamSize = memoryMap.freeRamSize + memoryMap.nonfreeRamSize; */
ulong curVirtAddr = 0;
/* ulong curVirtAddr = 0; */
if (!usermode) {
startPhyPage = MmTransVirtToPhyAddr((void*)KPAGESIZE + 1);
endPhyPage = (void*)MmPhysLastKernAddress;
} else {
startPhyPage = MmTransVirtToPhyAddr((void*)USERSPACE);
endPhyPage = (void*)(phRamSize & ~(KPAGESIZE - 1));
}
/* if (!usermode) { */
/* startPhyPage = MmTransVirtToPhyAddr((void*)KPAGESIZE); */
/* endPhyPage = (void*)MmPhysLastKernAddress; */
/* offset = 0; */
/* } else { */
/* startPhyPage = MmTransVirtToPhyAddr((void*)USERSPACE); */
/* endPhyPage = (void*)(phRamSize & ~(KPAGESIZE - 1)); */
/* offset = (ulong)USERSPACE - MmPhysLastKernAddress - KPAGESIZE; */
/* } */
DebugLog("Start phy at %p\n", startPhyPage);
DebugLog("End phy at %p\n", endPhyPage);
/* DebugLog("Start phy at %p\n", startPhyPage); */
/* DebugLog("End phy at %p\n", endPhyPage); */
for (ulong curPhyAddr = (ulong)startPhyPage;
curPhyAddr <= (ulong)endPhyPage;
curPhyAddr += KPAGESIZE) {
curVirtAddr = (ulong)MmTransPhyToVirtAddr((void*)curPhyAddr);
/* for (ulong curPhyAddr = (ulong)startPhyPage; */
/* curPhyAddr <= (ulong)endPhyPage; */
/* curPhyAddr += KPAGESIZE) { */
/* curVirtAddr = (ulong)MmTransPhyToVirtAddr((void*)curPhyAddr); */
if (curVirtAddr == 0) {
DebugLog("CurrentAddr %p\n", curVirtAddr);
DebugLog("\t Free !\n");
curSize += KPAGESIZE;
}
if (curSize >= size)
break;
}
/* if (curVirtAddr == 0) { */
/* DebugLog("CurrentAddr %p\n", curPhyAddr); */
/* DebugLog("\t Free !\n"); */
/* curSize += KPAGESIZE; */
/* } */
return NULL;
}
/* if (curSize >= size) */
/* break; */
/* } */
/* return NULL; */
/* } */
//-----------