diff --git a/include/comrogue/internals/memmgr.h b/include/comrogue/internals/memmgr.h index 78f6f76..2f1efa8 100644 --- a/include/comrogue/internals/memmgr.h +++ b/include/comrogue/internals/memmgr.h @@ -62,9 +62,6 @@ typedef struct tagVMCTXT { RBTREE rbtPageTables; /* tree containing page tables this context owns */ } VMCTXT, *PVMCTXT; -/* Pointer to a function to update the page database with a PTE address. */ -typedef void (*PFNSETPTEADDR)(UINT32, PHYSADDR, BOOL); - /* Invalid page return. */ #define INVALID_PAGE ((UINT32)(-1)) diff --git a/kernel/mm/init_heap.c b/kernel/mm/init_heap.c index fddd7cb..4277758 100644 --- a/kernel/mm/init_heap.c +++ b/kernel/mm/init_heap.c @@ -36,6 +36,7 @@ #include #include #include +#include "initfuncs.h" /*------------------------------------------------------------------------------------------------------------- * Initial heap implementation. Since this will only be used by initializer code and freed with the rest diff --git a/kernel/mm/initfuncs.h b/kernel/mm/initfuncs.h new file mode 100644 index 0000000..7b355f2 --- /dev/null +++ b/kernel/mm/initfuncs.h @@ -0,0 +1,58 @@ +/* + * This file is part of the COMROGUE Operating System for Raspberry Pi + * + * Copyright (c) 2013, Eric J. Bowersox / Erbosoft Enterprises + * All rights reserved. + * + * This program is free for commercial and non-commercial use as long as the following conditions are + * adhered to. + * + * Copyright in this file remains Eric J. Bowersox and/or Erbosoft, and as such any copyright notices + * in the code are not to be removed. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted + * provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this list of conditions and + * the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and + * the following disclaimer in the documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * "Raspberry Pi" is a trademark of the Raspberry Pi Foundation. + */ +#ifndef __INITFUNCS_H_INCLUDED +#define __INITFUNCS_H_INCLUDED + +#ifndef __ASM__ + +#include +#include + +/* Pointer to a function to update the page database with a PTE address. */ +typedef void (*PFNSETPTEADDR)(UINT32, PHYSADDR, BOOL); + +/*------------------------------------ + * Prototypes for the init functions. + *------------------------------------ + */ + +extern IMalloc *_MmGetInitHeap(void); +extern void _MmInitKernelSpace(PSTARTUP_INFO pstartup, PMALLOC pmInitHeap); +extern void _MmInitVMMap(PSTARTUP_INFO pstartup, PMALLOC pmInitHeap); +extern void _MmInitPageAlloc(PSTARTUP_INFO pstartup); + +/* secondary init function in the VM mapper */ +extern void _MmInitPTEMappings(PFNSETPTEADDR pfnSetPTEAddr); + +#endif /* __ASM__ */ + +#endif /* __INITFUNCS_H_INCLUDED */ diff --git a/kernel/mm/kernel_space.c b/kernel/mm/kernel_space.c index 6957891..02fc521 100644 --- a/kernel/mm/kernel_space.c +++ b/kernel/mm/kernel_space.c @@ -38,6 +38,7 @@ #include #include #include +#include "initfuncs.h" #ifdef THIS_FILE #undef THIS_FILE diff --git a/kernel/mm/memmgr.c b/kernel/mm/memmgr.c index 922bfef..1d1bf60 100644 --- a/kernel/mm/memmgr.c +++ b/kernel/mm/memmgr.c @@ -35,17 +35,13 @@ #include #include #include +#include "initfuncs.h" /*--------------------- * Initialization code *--------------------- */ -extern IMalloc *_MmGetInitHeap(void); -extern void _MmInitKernelSpace(PSTARTUP_INFO pstartup, PMALLOC pmInitHeap); -extern void _MmInitVMMap(PSTARTUP_INFO pstartup, PMALLOC pmInitHeap); -extern void _MmInitPageAlloc(PSTARTUP_INFO pstartup); - SEG_INIT_CODE void _MmInit(PSTARTUP_INFO pstartup) { IMalloc *pmInitHeap = _MmGetInitHeap(); diff --git a/kernel/mm/pagealloc.c b/kernel/mm/pagealloc.c index 040be70..27c0b48 100644 --- a/kernel/mm/pagealloc.c +++ b/kernel/mm/pagealloc.c @@ -37,6 +37,7 @@ #include #include #include +#include "initfuncs.h" #ifdef THIS_FILE #undef THIS_FILE @@ -349,9 +350,6 @@ SEG_INIT_CODE static UINT32 build_page_chain(UINT32 ndxFirstPage, UINT32 cpg, un extern char cpgPrestartTotal, cpgLibraryCode, cpgKernelCode, cpgKernelData, cpgKernelBss, cpgInitCode, cpgInitData, cpgInitBss; -/* secondary init function in the VM mapper */ -extern void _MmInitPTEMappings(PFNSETPTEADDR pfnSetPTEAddr); - /* * Initializes the page allocator and the Master Page Database. * diff --git a/kernel/mm/vmmap.c b/kernel/mm/vmmap.c index 3bde7c8..af0884a 100644 --- a/kernel/mm/vmmap.c +++ b/kernel/mm/vmmap.c @@ -40,6 +40,7 @@ #include #include #include +#include "initfuncs.h" #ifdef THIS_FILE #undef THIS_FILE