// Copy all 32-bit code and 64-bit code into memory with type of\r
// EfiBootServicesCode to avoid page fault if NX memory protection is enabled.\r
//\r
- if (ExchangeInfo->ModeTransitionMemory != 0) {\r
+ if (CpuMpData->WakeupBufferHigh != 0) {\r
Size = CpuMpData->AddressMap.RendezvousFunnelSize -\r
CpuMpData->AddressMap.ModeTransitionOffset;\r
CopyMem (\r
- (VOID *)(UINTN)ExchangeInfo->ModeTransitionMemory,\r
+ (VOID *)CpuMpData->WakeupBufferHigh,\r
CpuMpData->AddressMap.RendezvousFunnelAddress +\r
CpuMpData->AddressMap.ModeTransitionOffset,\r
Size\r
);\r
\r
- ExchangeInfo->ModeHighMemory = ExchangeInfo->ModeTransitionMemory;\r
- ExchangeInfo->ModeHighMemory += (UINT32)ExchangeInfo->ModeOffset -\r
- (UINT32)CpuMpData->AddressMap.ModeTransitionOffset;\r
+ ExchangeInfo->ModeTransitionMemory = (UINT32)CpuMpData->WakeupBufferHigh;\r
+ ExchangeInfo->ModeHighMemory = (UINT32)CpuMpData->WakeupBufferHigh +\r
+ (UINT32)ExchangeInfo->ModeOffset -\r
+ (UINT32)CpuMpData->AddressMap.ModeTransitionOffset;\r
ExchangeInfo->ModeHighSegment = (UINT16)ExchangeInfo->CodeSegment;\r
} else {\r
ExchangeInfo->ModeTransitionMemory = (UINT32)\r
CpuMpData->WakeupBuffer = GetWakeupBuffer (ApResetVectorSize);\r
CpuMpData->MpCpuExchangeInfo = (MP_CPU_EXCHANGE_INFO *) (UINTN)\r
(CpuMpData->WakeupBuffer + CpuMpData->AddressMap.RendezvousFunnelSize);\r
- CpuMpData->MpCpuExchangeInfo->ModeTransitionMemory = (UINT32)\r
- GetModeTransitionBuffer (\r
- CpuMpData->AddressMap.RendezvousFunnelSize -\r
- CpuMpData->AddressMap.ModeTransitionOffset\r
- );\r
+ CpuMpData->WakeupBufferHigh = GetModeTransitionBuffer (\r
+ CpuMpData->AddressMap.RendezvousFunnelSize -\r
+ CpuMpData->AddressMap.ModeTransitionOffset\r
+ );\r
}\r
BackupAndPrepareWakeupBuffer (CpuMpData);\r
}\r