CPU_MP_DATA *CpuMpData;\r
UINTN CallerNumber;\r
CPU_INFO_IN_HOB *CpuInfoInHob;\r
+ UINTN OriginalProcessorNumber;\r
\r
CpuMpData = GetCpuMpData ();\r
CpuInfoInHob = (CPU_INFO_IN_HOB *) (UINTN) CpuMpData->CpuInfoInHob;\r
\r
+ //\r
+ // Lower 24 bits contains the actual processor number.\r
+ //\r
+ OriginalProcessorNumber = ProcessorNumber;\r
+ ProcessorNumber &= BIT24 - 1;\r
+\r
//\r
// Check whether caller processor is BSP\r
//\r
&ProcessorInfoBuffer->Location.Thread\r
);\r
\r
+ if ((OriginalProcessorNumber & CPU_V2_EXTENDED_TOPOLOGY) != 0) {\r
+ GetProcessorLocation2ByApicId (\r
+ CpuInfoInHob[ProcessorNumber].ApicId,\r
+ &ProcessorInfoBuffer->ExtendedInformation.Location2.Package,\r
+ &ProcessorInfoBuffer->ExtendedInformation.Location2.Die,\r
+ &ProcessorInfoBuffer->ExtendedInformation.Location2.Tile,\r
+ &ProcessorInfoBuffer->ExtendedInformation.Location2.Module,\r
+ &ProcessorInfoBuffer->ExtendedInformation.Location2.Core,\r
+ &ProcessorInfoBuffer->ExtendedInformation.Location2.Thread\r
+ );\r
+ }\r
+\r
if (HealthData != NULL) {\r
HealthData->Uint32 = CpuInfoInHob[ProcessorNumber].Health;\r
}\r