You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.1 KiB
86 lines
2.1 KiB
/*++
|
|
|
|
Copyright (c) 2000 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
dynsysres.c
|
|
|
|
Abstract:
|
|
|
|
This module contain functions which support dynamic system
|
|
resources e.g. processors, memory, and I/O. Among other things,
|
|
it will contain code necessary to configure the OS for the
|
|
'capacity' of a partition rather than the boot resources.
|
|
|
|
Author:
|
|
|
|
Adam Glass
|
|
|
|
Environment:
|
|
|
|
Kernel mode only.
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#include "halp.h"
|
|
#include "acpitabl.h"
|
|
#include "xxacpi.h"
|
|
|
|
#if defined(_WIN64) && !defined(_AMD64_)
|
|
#define HalpGetAcpiTablePhase0 HalpGetAcpiTable
|
|
#endif
|
|
|
|
PHYSICAL_ADDRESS HalpMaxHotPlugMemoryAddress;
|
|
|
|
VOID
|
|
HalpGetHotPlugMemoryInfo(
|
|
IN PLOADER_PARAMETER_BLOCK LoaderBlock
|
|
)
|
|
{
|
|
PHYSICAL_ADDRESS Extent;
|
|
PACPI_SRAT_ENTRY SratEntry;
|
|
PACPI_SRAT_ENTRY SratEnd;
|
|
PACPI_SRAT SratTable;
|
|
|
|
SratTable = HalpGetAcpiTablePhase0(LoaderBlock, ACPI_SRAT_SIGNATURE);
|
|
if (SratTable == NULL) {
|
|
return;
|
|
}
|
|
|
|
//
|
|
// The Static Resource Affinity Table (SRAT) exists.
|
|
//
|
|
// Scan it to determine if there are any hot plug memory regions.
|
|
//
|
|
|
|
SratEnd = (PACPI_SRAT_ENTRY)(((PUCHAR)SratTable) +
|
|
SratTable->Header.Length);
|
|
for (SratEntry = (PACPI_SRAT_ENTRY)(SratTable + 1);
|
|
SratEntry < SratEnd;
|
|
SratEntry = (PACPI_SRAT_ENTRY)(((PUCHAR) SratEntry) + SratEntry->Length)) {
|
|
switch (SratEntry->Type) {
|
|
case SratMemory:
|
|
Extent.QuadPart = SratEntry->MemoryAffinity.Base.QuadPart +
|
|
SratEntry->MemoryAffinity.Length;
|
|
if (SratEntry->MemoryAffinity.Flags.HotPlug &&
|
|
SratEntry->MemoryAffinity.Flags.Enabled &&
|
|
(Extent.QuadPart > HalpMaxHotPlugMemoryAddress.QuadPart)) {
|
|
HalpMaxHotPlugMemoryAddress = Extent;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
VOID
|
|
HalpDynamicSystemResourceConfiguration(
|
|
IN PLOADER_PARAMETER_BLOCK LoaderBlock
|
|
)
|
|
{
|
|
HalpGetHotPlugMemoryInfo(LoaderBlock);
|
|
}
|
|
|
|
|