MP_SYSTEM_DATA mMPSystemData;\r
EFI_PHYSICAL_ADDRESS mStartupVector;\r
MP_CPU_EXCHANGE_INFO *mExchangeInfo;\r
-VOID *mStackStartAddress;\r
BOOLEAN mStopCheckAPsStatus = FALSE;\r
UINTN mNumberOfProcessors;\r
EFI_GENERIC_MEMORY_TEST_PROTOCOL *mGenMemoryTest;\r
\r
This function sends INIT-SIPI-SIPI to AP, and assign procedure specified by ApFunction.\r
\r
- @param Broadcast If TRUE, broadcase IPI to all APs; otherwise, send to specified AP.\r
- @param ApicID The Local APIC ID of the specified AP. If Broadcast is TRUE, it is ignored.\r
- @param ApFunction The procedure for AP to work on.\r
+ @param ProcessorNumber The processor number of the specified AP.\r
+ @param ApicID The Local APIC ID of the specified AP.\r
+ @param ApFunction The procedure for AP to work on.\r
\r
**/\r
VOID\r
SendInitSipiSipi (\r
- IN BOOLEAN Broadcast,\r
+ IN UINTN ProcessorNumber,\r
IN UINT32 ApicID,\r
IN VOID *ApFunction\r
)\r
UINT32 DeliveryMode;\r
\r
mExchangeInfo->ApFunction = ApFunction;\r
- mExchangeInfo->StackStart = mStackStartAddress;\r
+ mExchangeInfo->ProcessorNumber[ApicID] = (UINT32) ProcessorNumber;\r
\r
- if (Broadcast) {\r
- ICRHigh = 0;\r
- ICRLow = BROADCAST_MODE_ALL_EXCLUDING_SELF_BIT | TRIGGER_MODE_LEVEL_BIT | ASSERT_BIT;\r
- } else {\r
- ICRHigh = ApicID << 24;\r
- ICRLow = SPECIFY_CPU_MODE_BIT | TRIGGER_MODE_LEVEL_BIT | ASSERT_BIT;\r
- }\r
+ ICRHigh = ApicID << 24;\r
+ ICRLow = SPECIFY_CPU_MODE_BIT | TRIGGER_MODE_LEVEL_BIT | ASSERT_BIT;\r
\r
VectorNumber = 0;\r
DeliveryMode = DELIVERY_MODE_INIT;\r
\r
VectorNumber = (UINT32) RShiftU64 (mStartupVector, 12);\r
DeliveryMode = DELIVERY_MODE_SIPI;\r
- if (Broadcast) {\r
- ICRLow = BROADCAST_MODE_ALL_EXCLUDING_SELF_BIT | TRIGGER_MODE_LEVEL_BIT | ASSERT_BIT;\r
- } else {\r
- ICRLow = SPECIFY_CPU_MODE_BIT | TRIGGER_MODE_LEVEL_BIT | ASSERT_BIT;\r
- }\r
+ ICRLow = SPECIFY_CPU_MODE_BIT | TRIGGER_MODE_LEVEL_BIT | ASSERT_BIT;\r
\r
ICRLow |= VectorNumber | (DeliveryMode << 8);\r
\r
ASSERT_EFI_ERROR (Status);\r
\r
SendInitSipiSipi (\r
- FALSE,\r
+ ProcessorNumber,\r
(UINT32) ProcessorInfoBuffer.ProcessorId,\r
(VOID *) (UINTN) ApProcWrapper\r
);\r
ASSERT_EFI_ERROR (Status);\r
\r
SendInitSipiSipi (\r
- FALSE,\r
+ ProcessorNumber,\r
(UINT32) ProcessorInfoBuffer.ProcessorId,\r
NULL\r
);\r
\r
ZeroMem ((VOID *) mExchangeInfo, sizeof (MP_CPU_EXCHANGE_INFO));\r
\r
- mStackStartAddress = AllocatePages (EFI_SIZE_TO_PAGES (MAX_CPU_NUMBER * AP_STACK_SIZE));\r
+ mExchangeInfo->StackStart = AllocatePages (EFI_SIZE_TO_PAGES (mNumberOfProcessors * AP_STACK_SIZE));\r
mExchangeInfo->StackSize = AP_STACK_SIZE;\r
\r
AsmReadGdtr (&GdtrForBSP);\r
{\r
EFI_STATUS Status;\r
\r
- PrepareMemoryForConfiguration ();\r
-\r
//\r
// Locates Framework version MP Services Protocol\r
//\r
ASSERT_EFI_ERROR (Status);\r
ASSERT (mNumberOfProcessors < MAX_CPU_NUMBER);\r
\r
+ PrepareMemoryForConfiguration ();\r
+\r
//\r
// Create timer event to check AP state for non-blocking execution.\r
//\r