Initial memory manager initialization code
This commit is contained in:
parent
42a1373612
commit
04e22c127e
@ -14,9 +14,26 @@
|
||||
|
||||
/* Pages related definitions */
|
||||
#define MM_PAGE_MASK 0xFFF
|
||||
#define MM_PAGE_SHIFT 12
|
||||
#define MM_PAGE_SHIFT 12L
|
||||
#define MM_PAGE_SIZE 4096
|
||||
|
||||
#define MM_PTE_BASE 0xFFFFF68000000000UI64
|
||||
#define MM_PDE_BASE 0xFFFFF6FB40000000UI64
|
||||
#define MM_PPE_BASE 0xFFFFF6FB7DA00000UI64
|
||||
#define MM_PXE_BASE 0xFFFFF6FB7DBED000UI64
|
||||
|
||||
#define MM_PTI_SHIFT 12
|
||||
#define MM_PDI_SHIFT 21
|
||||
#define MM_PPI_SHIFT 30
|
||||
#define MM_PXI_SHIFT 39
|
||||
|
||||
#define MM_PTE_SHIFT 3
|
||||
|
||||
#define MM_PXE_PER_PAGE 512
|
||||
|
||||
/* Minimum number of physical pages needed by the system */
|
||||
#define MM_MINIMUM_PHYSICAL_PAGES 2048
|
||||
|
||||
/* Page size enumeration list */
|
||||
typedef enum _PAGE_SIZE
|
||||
{
|
||||
|
@ -17,6 +17,9 @@
|
||||
#define MM_PAGE_SHIFT 12
|
||||
#define MM_PAGE_SIZE 4096
|
||||
|
||||
/* Minimum number of physical pages needed by the system */
|
||||
#define MM_MINIMUM_PHYSICAL_PAGES 1100
|
||||
|
||||
/* Page size enumeration list */
|
||||
typedef enum _PAGE_SIZE
|
||||
{
|
||||
|
@ -36,7 +36,10 @@ list(APPEND XTOSKRNL_SOURCE
|
||||
${XTOSKRNL_SOURCE_DIR}/ke/${ARCH}/krnlinit.c
|
||||
${XTOSKRNL_SOURCE_DIR}/ke/${ARCH}/kthread.c
|
||||
${XTOSKRNL_SOURCE_DIR}/ke/${ARCH}/proc.c
|
||||
${XTOSKRNL_SOURCE_DIR}/mm/globals.c
|
||||
${XTOSKRNL_SOURCE_DIR}/mm/init.c
|
||||
${XTOSKRNL_SOURCE_DIR}/mm/kpools.c
|
||||
${XTOSKRNL_SOURCE_DIR}/mm/${ARCH}/init.c
|
||||
${XTOSKRNL_SOURCE_DIR}/mm/${ARCH}/pages.c
|
||||
${XTOSKRNL_SOURCE_DIR}/po/idle.c
|
||||
${XTOSKRNL_SOURCE_DIR}/rtl/atomic.c
|
||||
|
@ -18,4 +18,24 @@ VOID
|
||||
MmZeroPages(IN PVOID Address,
|
||||
IN ULONG Size);
|
||||
|
||||
XTAPI
|
||||
PMMPTE
|
||||
MmpGetPdeAddress(PVOID Address);
|
||||
|
||||
XTAPI
|
||||
PMMPTE
|
||||
MmpGetPpeAddress(PVOID Address);
|
||||
|
||||
XTAPI
|
||||
PMMPTE
|
||||
MmpGetPteAddress(PVOID Address);
|
||||
|
||||
XTAPI
|
||||
PMMPTE
|
||||
MmpGetPxeAddress(PVOID Address);
|
||||
|
||||
XTAPI
|
||||
VOID
|
||||
MmpInitializeArchitecture();
|
||||
|
||||
#endif /* __XTOSKRNL_AMD64_MMI_H */
|
||||
|
@ -42,4 +42,19 @@ EXTERN KSERVICE_DESCRIPTOR_TABLE KeServiceDescriptorTable[KSERVICE_TABLES_COUNT]
|
||||
/* Kernel process list */
|
||||
EXTERN LIST_ENTRY KepProcessListHead;
|
||||
|
||||
/* Biggest free memory descriptor */
|
||||
EXTERN PLOADER_MEMORY_MAPPING MmFreeDescriptor;
|
||||
|
||||
/* Highest physical page number */
|
||||
EXTERN ULONG_PTR MmHighestPhysicalPage;
|
||||
|
||||
/* Lowest physical page number */
|
||||
EXTERN ULONG_PTR MmLowestPhysicalPage;
|
||||
|
||||
/* Number of physical pages */
|
||||
EXTERN ULONG MmNumberOfPhysicalPages;
|
||||
|
||||
/* Old biggest free memory descriptor */
|
||||
EXTERN LOADER_MEMORY_MAPPING MmOldFreeDescriptor;
|
||||
|
||||
#endif /* __XTOSKRNL_GLOBALS_H */
|
||||
|
@ -18,4 +18,8 @@ VOID
|
||||
MmZeroPages(IN PVOID Address,
|
||||
IN ULONG Size);
|
||||
|
||||
XTAPI
|
||||
VOID
|
||||
MmpInitializeArchitecture();
|
||||
|
||||
#endif /* __XTOSKRNL_I686_MMI_H */
|
||||
|
@ -24,4 +24,20 @@ VOID
|
||||
MmFreeKernelStack(IN PVOID Stack,
|
||||
IN BOOLEAN LargeStack);
|
||||
|
||||
XTAPI
|
||||
VOID
|
||||
MmInitializeMemoryManager();
|
||||
|
||||
XTAPI
|
||||
VOID
|
||||
MmpScanMemoryDescriptors();
|
||||
|
||||
XTAPI
|
||||
BOOLEAN
|
||||
MmpVerifyMemoryTypeFree(LOADER_MEMORY_TYPE MemoryType);
|
||||
|
||||
XTAPI
|
||||
BOOLEAN
|
||||
MmpVerifyMemoryTypeInvisible(LOADER_MEMORY_TYPE MemoryType);
|
||||
|
||||
#endif /* __XTOSKRNL_MMI_H */
|
||||
|
104
xtoskrnl/mm/amd64/init.c
Normal file
104
xtoskrnl/mm/amd64/init.c
Normal file
@ -0,0 +1,104 @@
|
||||
/**
|
||||
* PROJECT: ExectOS
|
||||
* COPYRIGHT: See COPYING.md in the top level directory
|
||||
* FILE: xtoskrnl/mm/amd64/init.c
|
||||
* DESCRIPTION: Architecture specific Memory Manager initialization routines
|
||||
* DEVELOPERS: Rafal Kupiec <belliash@codingworkshop.eu.org>
|
||||
*/
|
||||
|
||||
#include <xtos.h>
|
||||
|
||||
|
||||
/**
|
||||
* Gets the address of the PDE (Page Directory Entry), that maps given address.
|
||||
*
|
||||
* @param Address
|
||||
* Specifies the address to find the PDE for.
|
||||
*
|
||||
* @return This routine returns the address of the PDE.
|
||||
*
|
||||
* @since XT 1.0
|
||||
*/
|
||||
XTAPI
|
||||
PMMPTE
|
||||
MmpGetPdeAddress(PVOID Address)
|
||||
{
|
||||
ULONGLONG Offset;
|
||||
|
||||
Offset = ((((ULONGLONG)Address & (((ULONGLONG)1 << 48) - 1)) >> MM_PDI_SHIFT) << MM_PTE_SHIFT);
|
||||
return (PMMPTE)(MM_PDE_BASE + Offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the address of the PPE (Page Directory Pointer Table Entry), that maps given address.
|
||||
*
|
||||
* @param Address
|
||||
* Specifies the address to find the PPE for.
|
||||
*
|
||||
* @return This routine returns the address of the PPE.
|
||||
*
|
||||
* @since XT 1.0
|
||||
*/
|
||||
XTAPI
|
||||
PMMPTE
|
||||
MmpGetPpeAddress(PVOID Address)
|
||||
{
|
||||
ULONGLONG Offset;
|
||||
|
||||
Offset = ((((ULONGLONG)Address & (((ULONGLONG)1 << 48) - 1)) >> MM_PPI_SHIFT) << MM_PTE_SHIFT);
|
||||
return (PMMPTE)(MM_PPE_BASE + Offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the address of the PTE (Page Table Entry), that maps given address.
|
||||
*
|
||||
* @param Address
|
||||
* Specifies the address to find the PTE for.
|
||||
*
|
||||
* @return This routine returns the address of the PTE.
|
||||
*
|
||||
* @since XT 1.0
|
||||
*/
|
||||
XTAPI
|
||||
PMMPTE
|
||||
MmpGetPteAddress(PVOID Address)
|
||||
{
|
||||
ULONGLONG Offset;
|
||||
|
||||
Offset = ((((ULONGLONG)Address & (((ULONGLONG)1 << 48) - 1)) >> MM_PTI_SHIFT) << MM_PTE_SHIFT);
|
||||
return (PMMPTE)(MM_PTE_BASE + Offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the address of the PXE (Extended Page Entry), that maps given address.
|
||||
*
|
||||
* @param Address
|
||||
* Specifies the address to find the PXE for.
|
||||
*
|
||||
* @return This routine returns the address of the PXE.
|
||||
*
|
||||
* @since XT 1.0
|
||||
*/
|
||||
XTAPI
|
||||
PMMPTE
|
||||
MmpGetPxeAddress(PVOID Address)
|
||||
{
|
||||
ULONGLONG Offset;
|
||||
|
||||
Offset = (((ULONGLONG)Address >> MM_PXI_SHIFT) & (MM_PXE_PER_PAGE - 1));
|
||||
return (PMMPTE)(MM_PXE_BASE + Offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs architecture specific initialization of the XTOS Memory Manager.
|
||||
*
|
||||
* @return This routine does not return any value.
|
||||
*
|
||||
* @since XT 1.0
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
MmpInitializeArchitecture()
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
}
|
25
xtoskrnl/mm/globals.c
Normal file
25
xtoskrnl/mm/globals.c
Normal file
@ -0,0 +1,25 @@
|
||||
/**
|
||||
* PROJECT: ExectOS
|
||||
* COPYRIGHT: See COPYING.md in the top level directory
|
||||
* FILE: xtoskrnl/mm/globals.c
|
||||
* DESCRIPTION: Memory Manager initialization routines
|
||||
* DEVELOPERS: Rafal Kupiec <belliash@codingworkshop.eu.org>
|
||||
*/
|
||||
|
||||
#include <xtos.h>
|
||||
|
||||
|
||||
/* Biggest free memory descriptor */
|
||||
PLOADER_MEMORY_MAPPING MmFreeDescriptor;
|
||||
|
||||
/* Highest physical page number */
|
||||
ULONG_PTR MmHighestPhysicalPage;
|
||||
|
||||
/* Lowest physical page number */
|
||||
ULONG_PTR MmLowestPhysicalPage = -1;
|
||||
|
||||
/* Number of physical pages */
|
||||
ULONG MmNumberOfPhysicalPages;
|
||||
|
||||
/* Old biggest free memory descriptor */
|
||||
LOADER_MEMORY_MAPPING MmOldFreeDescriptor;
|
24
xtoskrnl/mm/i686/init.c
Normal file
24
xtoskrnl/mm/i686/init.c
Normal file
@ -0,0 +1,24 @@
|
||||
/**
|
||||
* PROJECT: ExectOS
|
||||
* COPYRIGHT: See COPYING.md in the top level directory
|
||||
* FILE: xtoskrnl/mm/i686/init.c
|
||||
* DESCRIPTION: Architecture specific Memory Manager initialization routines
|
||||
* DEVELOPERS: Rafal Kupiec <belliash@codingworkshop.eu.org>
|
||||
*/
|
||||
|
||||
#include <xtos.h>
|
||||
|
||||
|
||||
/**
|
||||
* Performs architecture specific initialization of the XTOS Memory Manager.
|
||||
*
|
||||
* @return This routine does not return any value.
|
||||
*
|
||||
* @since XT 1.0
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
MmpInitializeArchitecture()
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
}
|
Loading…
Reference in New Issue
Block a user