+/**\r
+ Worker function to execute a caller provided function on all enabled CPUs.\r
+\r
+ @param[in] Procedure A pointer to the function to be run on\r
+ enabled CPUs of the system.\r
+\r
+**/\r
+VOID\r
+StartupAllCPUsWorker (\r
+ IN EFI_AP_PROCEDURE Procedure\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+ EDKII_PEI_MP_SERVICES2_PPI *CpuMp2Ppi;\r
+ CPU_FEATURES_DATA *CpuFeaturesData;\r
+\r
+ CpuFeaturesData = GetCpuFeaturesData ();\r
+\r
+ //\r
+ // Get MP Services2 Ppi\r
+ //\r
+ Status = PeiServicesLocatePpi (\r
+ &gEdkiiPeiMpServices2PpiGuid,\r
+ 0,\r
+ NULL,\r
+ (VOID **)&CpuMp2Ppi\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ //\r
+ // Wakeup all APs for data collection.\r
+ //\r
+ Status = CpuMp2Ppi->StartupAllCPUs (\r
+ CpuMp2Ppi,\r
+ Procedure,\r
+ 0,\r
+ CpuFeaturesData\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+}\r
+\r