Implement MmAllocateProcessorStructures() routine as a temporary hack to get a buffer for AP initialization
This commit is contained in:
parent
8d6d27651c
commit
b65ff2a767
@ -142,6 +142,10 @@
|
|||||||
/* XTOS Kernel stack guard pages */
|
/* XTOS Kernel stack guard pages */
|
||||||
#define KERNEL_STACK_GUARD_PAGES 1
|
#define KERNEL_STACK_GUARD_PAGES 1
|
||||||
|
|
||||||
|
/* Processor structures size */
|
||||||
|
#define KPROCESSOR_STRUCTURES_SIZE ((2 * KERNEL_STACK_SIZE) + sizeof(ArInitialGdt) + sizeof(ArInitialTss) + \
|
||||||
|
sizeof(ArInitialProcessorBlock) + MM_PAGE_SIZE)
|
||||||
|
|
||||||
/* Kernel frames */
|
/* Kernel frames */
|
||||||
#define KEXCEPTION_FRAME_SIZE sizeof(KEXCEPTION_FRAME)
|
#define KEXCEPTION_FRAME_SIZE sizeof(KEXCEPTION_FRAME)
|
||||||
#define KSWITCH_FRAME_SIZE sizeof(KSWITCH_FRAME)
|
#define KSWITCH_FRAME_SIZE sizeof(KSWITCH_FRAME)
|
||||||
|
@ -168,6 +168,10 @@
|
|||||||
/* XTOS Kernel stack guard pages */
|
/* XTOS Kernel stack guard pages */
|
||||||
#define KERNEL_STACK_GUARD_PAGES 1
|
#define KERNEL_STACK_GUARD_PAGES 1
|
||||||
|
|
||||||
|
/* Processor structures size */
|
||||||
|
#define KPROCESSOR_STRUCTURES_SIZE ((2 * KERNEL_STACK_SIZE) + sizeof(ArInitialGdt) + sizeof(ArInitialTss) + \
|
||||||
|
sizeof(ArInitialProcessorBlock) + MM_PAGE_SIZE)
|
||||||
|
|
||||||
/* Kernel frames */
|
/* Kernel frames */
|
||||||
#define KTRAP_FRAME_ALIGN 0x08
|
#define KTRAP_FRAME_ALIGN 0x08
|
||||||
#define KTRAP_FRAME_SIZE sizeof(KTRAP_FRAME)
|
#define KTRAP_FRAME_SIZE sizeof(KTRAP_FRAME)
|
||||||
|
@ -60,4 +60,7 @@ EXTERN LOADER_MEMORY_MAPPING MmOldFreeDescriptor;
|
|||||||
/* Page Map Level */
|
/* Page Map Level */
|
||||||
EXTERN ULONG MmPageMapLevel;
|
EXTERN ULONG MmPageMapLevel;
|
||||||
|
|
||||||
|
/* Processor structures data (THIS IS A TEMPORARY HACK) */
|
||||||
|
EXTERN UCHAR MmProcessorStructuresData[MAXIMUM_PROCESSORS - 1][KPROCESSOR_STRUCTURES_SIZE];
|
||||||
|
|
||||||
#endif /* __XTOSKRNL_GLOBALS_H */
|
#endif /* __XTOSKRNL_GLOBALS_H */
|
||||||
|
@ -19,11 +19,20 @@ MmAllocateKernelStack(IN PVOID *Stack,
|
|||||||
IN BOOLEAN LargeStack,
|
IN BOOLEAN LargeStack,
|
||||||
IN UCHAR SystemNode);
|
IN UCHAR SystemNode);
|
||||||
|
|
||||||
|
XTAPI
|
||||||
|
XTSTATUS
|
||||||
|
MmAllocateProcessorStructures(IN ULONG CpuNumber,
|
||||||
|
OUT PVOID *StructuresData);
|
||||||
|
|
||||||
XTAPI
|
XTAPI
|
||||||
VOID
|
VOID
|
||||||
MmFreeKernelStack(IN PVOID Stack,
|
MmFreeKernelStack(IN PVOID Stack,
|
||||||
IN BOOLEAN LargeStack);
|
IN BOOLEAN LargeStack);
|
||||||
|
|
||||||
|
XTAPI
|
||||||
|
VOID
|
||||||
|
MmFreeProcessorStructures(IN PVOID StructuresData);
|
||||||
|
|
||||||
XTAPI
|
XTAPI
|
||||||
VOID
|
VOID
|
||||||
MmInitializeMemoryManager(VOID);
|
MmInitializeMemoryManager(VOID);
|
||||||
|
@ -26,3 +26,6 @@ LOADER_MEMORY_MAPPING MmOldFreeDescriptor;
|
|||||||
|
|
||||||
/* Page Map Level */
|
/* Page Map Level */
|
||||||
ULONG MmPageMapLevel;
|
ULONG MmPageMapLevel;
|
||||||
|
|
||||||
|
/* Processor structures data (THIS IS A TEMPORARY HACK) */
|
||||||
|
UCHAR MmProcessorStructuresData[MAXIMUM_PROCESSORS - 1][KPROCESSOR_STRUCTURES_SIZE] = {0};
|
||||||
|
@ -35,6 +35,51 @@ MmAllocateKernelStack(IN PVOID *Stack,
|
|||||||
return STATUS_NOT_IMPLEMENTED;
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allocates a buffer for structures needed by a processor and assigns it to a corresponding CPU.
|
||||||
|
*
|
||||||
|
* @param CpuNumber
|
||||||
|
* Specifies the zero-indexed CPU number as an owner of the allocated structures.
|
||||||
|
*
|
||||||
|
* @param StructuresData
|
||||||
|
* Supplies a pointer to the memory area that will contain the allocated buffer.
|
||||||
|
*
|
||||||
|
* @return This routine returns a status code.
|
||||||
|
*
|
||||||
|
* @since XT 1.0
|
||||||
|
*/
|
||||||
|
XTAPI
|
||||||
|
XTSTATUS
|
||||||
|
MmAllocateProcessorStructures(IN ULONG CpuNumber,
|
||||||
|
OUT PVOID *StructuresData)
|
||||||
|
{
|
||||||
|
PKPROCESSOR_BLOCK ProcessorBlock;
|
||||||
|
PVOID ProcessorStructures;
|
||||||
|
UINT_PTR Address;
|
||||||
|
|
||||||
|
/* Not implemented yet, this is just a hack */
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
|
||||||
|
/* Assign memory for processor structures from preallocated buffer */
|
||||||
|
ProcessorStructures = &MmProcessorStructuresData[CpuNumber - 1];
|
||||||
|
|
||||||
|
/* Make sure all structures are zeroed */
|
||||||
|
RtlZeroMemory(ProcessorStructures, KPROCESSOR_STRUCTURES_SIZE);
|
||||||
|
|
||||||
|
/* Align address to page size boundary and find a space for processor block */
|
||||||
|
Address = ROUND_UP((UINT_PTR)ProcessorStructures, MM_PAGE_SIZE);
|
||||||
|
ProcessorBlock = (PKPROCESSOR_BLOCK)((PUCHAR)Address + (2 * KERNEL_STACK_SIZE) + sizeof(ArInitialGdt));
|
||||||
|
|
||||||
|
/* Store processor number in the processor block */
|
||||||
|
ProcessorBlock->CpuNumber = CpuNumber;
|
||||||
|
|
||||||
|
/* Return pointer to the processor structures */
|
||||||
|
*StructuresData = ProcessorStructures;
|
||||||
|
|
||||||
|
/* Return success */
|
||||||
|
return STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Destroys a kernel stack and frees page table entry.
|
* Destroys a kernel stack and frees page table entry.
|
||||||
*
|
*
|
||||||
@ -55,3 +100,20 @@ MmFreeKernelStack(IN PVOID Stack,
|
|||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
UNIMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destroys an unused set of processor structures.
|
||||||
|
*
|
||||||
|
* @param StructuresData
|
||||||
|
* Supplies a pointer to the memory area containing the allocated buffer.
|
||||||
|
*
|
||||||
|
* @return This routine does not return any value.
|
||||||
|
*
|
||||||
|
* @since XT 1.0
|
||||||
|
*/
|
||||||
|
XTAPI
|
||||||
|
VOID
|
||||||
|
MmFreeProcessorStructures(IN PVOID StructuresData)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user