SendInitIpiAllExcludingSelf ();\r
}\r
\r
+/**\r
+ A minimal wrapper function that allows MtrrSetAllMtrrs() to be passed to\r
+ EFI_MP_SERVICES_PROTOCOL.StartupAllAPs() as Procedure.\r
+\r
+ @param[in] Buffer Pointer to an MTRR_SETTINGS object, to be passed to\r
+ MtrrSetAllMtrrs().\r
+**/\r
+VOID\r
+EFIAPI\r
+SetMtrrsFromBuffer (\r
+ IN VOID *Buffer\r
+ )\r
+{\r
+ MtrrSetAllMtrrs (Buffer);\r
+}\r
+\r
/**\r
Initialize Multi-processor support.\r
\r
)\r
{\r
EFI_STATUS Status;\r
+ MTRR_SETTINGS MtrrSettings;\r
UINTN Timeout;\r
\r
gMaxLogicalProcessorNumber = (UINTN) PcdGet32 (PcdCpuMaxLogicalProcessorNumber);\r
//\r
CollectBistDataFromHob ();\r
\r
+ //\r
+ // Synchronize MTRR settings to APs.\r
+ //\r
+ MtrrGetAllMtrrs (&MtrrSettings);\r
+ Status = mMpServicesTemplate.StartupAllAPs (\r
+ &mMpServicesTemplate, // This\r
+ SetMtrrsFromBuffer, // Procedure\r
+ TRUE, // SingleThread\r
+ NULL, // WaitEvent\r
+ 0, // TimeoutInMicrosecsond\r
+ &MtrrSettings, // ProcedureArgument\r
+ NULL // FailedCpuList\r
+ );\r
+ ASSERT (Status == EFI_SUCCESS || Status == EFI_NOT_STARTED);\r
+\r
Status = gBS->InstallMultipleProtocolInterfaces (\r
&mMpServiceHandle,\r
&gEfiMpServiceProtocolGuid, &mMpServicesTemplate,\r