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 */
|
||||
#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 */
|
||||
#define KEXCEPTION_FRAME_SIZE sizeof(KEXCEPTION_FRAME)
|
||||
#define KSWITCH_FRAME_SIZE sizeof(KSWITCH_FRAME)
|
||||
|
|
|
@ -168,6 +168,10 @@
|
|||
/* XTOS Kernel stack guard pages */
|
||||
#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 */
|
||||
#define KTRAP_FRAME_ALIGN 0x08
|
||||
#define KTRAP_FRAME_SIZE sizeof(KTRAP_FRAME)
|
||||
|
|
|
@ -60,4 +60,7 @@ EXTERN LOADER_MEMORY_MAPPING MmOldFreeDescriptor;
|
|||
/* Page Map Level */
|
||||
EXTERN ULONG MmPageMapLevel;
|
||||
|
||||
/* Processor structures data (THIS IS A TEMPORARY HACK) */
|
||||
EXTERN UCHAR MmProcessorStructuresData[MAXIMUM_PROCESSORS - 1][KPROCESSOR_STRUCTURES_SIZE];
|
||||
|
||||
#endif /* __XTOSKRNL_GLOBALS_H */
|
||||
|
|
|
@ -19,11 +19,20 @@ MmAllocateKernelStack(IN PVOID *Stack,
|
|||
IN BOOLEAN LargeStack,
|
||||
IN UCHAR SystemNode);
|
||||
|
||||
XTAPI
|
||||
XTSTATUS
|
||||
MmAllocateProcessorStructures(IN ULONG CpuNumber,
|
||||
OUT PVOID *StructuresData);
|
||||
|
||||
XTAPI
|
||||
VOID
|
||||
MmFreeKernelStack(IN PVOID Stack,
|
||||
IN BOOLEAN LargeStack);
|
||||
|
||||
XTAPI
|
||||
VOID
|
||||
MmFreeProcessorStructures(IN PVOID StructuresData);
|
||||
|
||||
XTAPI
|
||||
VOID
|
||||
MmInitializeMemoryManager(VOID);
|
||||
|
|
|
@ -26,3 +26,6 @@ LOADER_MEMORY_MAPPING MmOldFreeDescriptor;
|
|||
|
||||
/* Page Map Level */
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*
|
||||
|
@ -55,3 +100,20 @@ MmFreeKernelStack(IN PVOID Stack,
|
|||
{
|
||||
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