diff --git a/src/sys/include/mm/paging.h b/src/sys/include/mm/paging.h new file mode 100644 index 0000000..5dfbb97 --- /dev/null +++ b/src/sys/include/mm/paging.h @@ -0,0 +1,18 @@ +#ifndef _PAGING_H +#define _PAGING_H + +#include + +#define pageLength 0x00000400 +#define pageSize 4096 +#define pageEntries (pageSize/4) +#define tablesBaseAddress 0xBFC00000 +#define parentPageDirAddr 0x100000 + +#define PAGE_STACK 0x00000400 +#define PAGE_PRESENT 0x00000001 +#define PAGE_WRITE 0x00000002 +#define PAGE_USER 0x00000004 +#define PAGE_EXECUTE 0x00000008 +#define PAGE_DEFAULT (PAGE_PRESENT|PAGE_WRITE|PAGE_USER) +#define KERNEL_PAGE_DEFAULT (PAGE_PRESENT|PAGE_WRITE) diff --git a/src/sys/include/mm/vmm.h b/src/sys/include/mm/vmm.h new file mode 100644 index 0000000..0f7ce3d --- /dev/null +++ b/src/sys/include/mm/vmm.h @@ -0,0 +1,30 @@ +#ifndef _VMM_H +#define _VMM_H + +#include +#include +#include + +#define memAvail 1 +#define memNotavail 2 +#define vmmID -3 +#define vmmMemoryMapAddr 0xE6667000 + +typedef struct _mMap mMap; +struct _mMap +{ + uInt32 pageAddr; + uInt32 physicalAddr; + mMap *First; + mMap *Last; + mMap *Next; + mMap *Previous; + spinLock_t *lock; +}; + +extern int numPages; +extern uInt32 freePages; +extern uInt32 usedPages; +mMap *mmFreePages; + + diff --git a/src/sys/mm/Makefile b/src/sys/mm/Makefile index 602497a..d68c945 100644 --- a/src/sys/mm/Makefile +++ b/src/sys/mm/Makefile @@ -6,7 +6,7 @@ include ../Makefile.inc # Objects -OBJS = page_fault.o pagefault.o vmminit.o getfreevirtualpage.o copyvirtualspace.o setpageattributes.o unmappage.o getphysicaladdr.o getfreepage.o createvirtualspace.o memory.o paging.o +OBJS = page_fault.o pagefault.o copyvirtualspace.o getfreepage.o memory.o all: $(OBJS) diff --git a/src/sys/mm/copyvirtualspace.c b/src/sys/mm/copyvirtualspace.c index aa89a9d..6f97b26 100644 --- a/src/sys/mm/copyvirtualspace.c +++ b/src/sys/mm/copyvirtualspace.c @@ -35,7 +35,7 @@ #include #include -void vmmCopyVirtualSpace(kTask_t *task, kTask_t *new) +void mmCopyVirtualSpace(kTask_t *task, kTask_t *new) { mMap *tmp, *tmp2 , *prev; diff --git a/src/sys/mm/getfreepage.c b/src/sys/mm/getfreepage.c index 6342271..6d7130e 100644 --- a/src/sys/mm/getfreepage.c +++ b/src/sys/mm/getfreepage.c @@ -5,15 +5,15 @@ #include static spinLock_t vmmGFPlock = SPIN_LOCK_INITIALIZER; -void * vmmGetFreePage(kTask_t *task) +void * mmGetFreeVirtualPage(kTask_t *task) { mMap *tmp; /* remove the first free entry from the free pages list */ - tmp = vmmFreePages->First; + tmp = mmFreePages->First; freePages--; - vmmFreePages->First = vmmFreePages->First->Next; - vmmFreePages->First->Previous = NULL; + mmFreePages->First = vmmFreePages->First->Next; + mmFreePages->First->Previous = NULL; /* add the free entry to the task's pages list */ usedPages++; diff --git a/src/sys/mm/memory.c b/src/sys/mm/memory.c index 345d44b..a8bd42b 100644 --- a/src/sys/mm/memory.c +++ b/src/sys/mm/memory.c @@ -153,7 +153,7 @@ return (0); } -int countMemory() { +uInt32 countMemory() { register uInt32 *mem = 0x0; unsigned long memCount = -1, tempMemory = 0x0; unsigned short memKb = 0;