diff options
author | Kartik Agaram <vc@akkartik.com> | 2019-09-14 01:42:29 -0700 |
---|---|---|
committer | Kartik Agaram <vc@akkartik.com> | 2019-09-14 01:45:55 -0700 |
commit | 46bb1d3157f9ad575c83a4bfa1e32b0d21bc8546 (patch) | |
tree | 28918f653d7cf970d33d5592047ef663289aca40 /kernel.soso/vmm.h | |
parent | ded2b24ce28f4a9df75ce40117f0f06f09574369 (diff) | |
download | mu-46bb1d3157f9ad575c83a4bfa1e32b0d21bc8546.tar.gz |
5650 - support a second OS: soso
https://github.com/ozkl/soso + Much smaller than Linux; builds instantly + Supports graphics - No network support - Doesn't work on a cloud server (yet?)
Diffstat (limited to 'kernel.soso/vmm.h')
-rw-r--r-- | kernel.soso/vmm.h | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/kernel.soso/vmm.h b/kernel.soso/vmm.h new file mode 100644 index 00000000..f7955afb --- /dev/null +++ b/kernel.soso/vmm.h @@ -0,0 +1,48 @@ +#ifndef VMM_H +#define VMM_H + +#include "common.h" + +typedef struct Process Process; +typedef struct List List; + +extern uint32 *gKernelPageDirectory; + +extern uint8 gKernelPageHeapBitmap[]; + + +#define SET_PAGEFRAME_USED(bitmap, pageIndex) bitmap[((uint32) pageIndex)/8] |= (1 << (((uint32) pageIndex)%8)) +#define SET_PAGEFRAME_UNUSED(bitmap, p_addr) bitmap[((uint32) p_addr/PAGESIZE_4M)/8] &= ~(1 << (((uint32) p_addr/PAGESIZE_4M)%8)) +#define IS_PAGEFRAME_USED(bitmap, pageIndex) (bitmap[((uint32) pageIndex)/8] & (1 << (((uint32) pageIndex)%8))) + +#define SET_PAGEHEAP_USED(pageIndex) gKernelPageHeapBitmap[((uint32) pageIndex)/8] |= (1 << (((uint32) pageIndex)%8)) +#define SET_PAGEHEAP_UNUSED(p_addr) gKernelPageHeapBitmap[((uint32) p_addr/PAGESIZE_4K)/8] &= ~(1 << (((uint32) p_addr/PAGESIZE_4K)%8)) +#define IS_PAGEHEAP_USED(pageIndex) (gKernelPageHeapBitmap[((uint32) pageIndex)/8] & (1 << (((uint32) pageIndex)%8))) + +char* getPageFrame4M(); +void releasePageFrame4M(uint32 p_addr); + +uint32 *getPdFromReservedArea4K(); +void releasePdFromReservedArea4K(uint32 *); + +void initializeMemory(uint32 high_mem); + +uint32 *createPd(); +void destroyPd(uint32 *); +uint32 *copyPd(uint32* pd); + +BOOL addPageToPd(uint32* pd, char *v_addr, char *p_addr, int flags); +BOOL removePageFromPd(uint32* pd, char *v_addr, BOOL releasePageFrame); + +void enablePaging(); +void disablePaging(); + +uint32 getTotalPageCount(); +uint32 getUsedPageCount(); +uint32 getFreePageCount(); + +void initializeProcessMmap(Process* process); +void* mapMemory(Process* process, uint32 nBytes, uint32 pAddress, List* pAddressList); +BOOL unmapMemory(Process* process, uint32 nBytes, uint32 vAddress); + +#endif // VMM_H |