//\r
// AP state\r
//\r
+// The state transitions for an AP when it process a procedure are:\r
+// Idle ----> Ready ----> Busy ----> Idle\r
+// [BSP] [AP] [AP]\r
+//\r
typedef enum {\r
CpuStateIdle,\r
CpuStateReady,\r
CpuStateBusy,\r
- CpuStateFinished,\r
CpuStateDisabled\r
} CPU_STATE;\r
\r
UINTN BackupBuffer;\r
UINTN BackupBufferSize;\r
\r
- volatile UINT32 StartCount;\r
volatile UINT32 FinishedCount;\r
- volatile UINT32 RunningCount;\r
+ UINT32 RunningCount;\r
BOOLEAN SingleThread;\r
EFI_AP_PROCEDURE Procedure;\r
VOID *ProcArguments;\r
BOOLEAN TimerInterruptState;\r
UINT64 MicrocodePatchAddress;\r
UINT64 MicrocodePatchRegionSize;\r
+\r
+ UINT32 ProcessorSignature;\r
+ UINT32 ProcessorFlags;\r
+ UINT64 MicrocodeDataAddress;\r
+ UINT32 MicrocodeRevision;\r
+\r
+ //\r
+ // Whether need to use Init-Sipi-Sipi to wake up the APs.\r
+ // Two cases need to set this value to TRUE. One is in HLT\r
+ // loop mode, the other is resume from S3 which loop mode\r
+ // will be hardcode change to HLT mode by PiSmmCpuDxeSmm \r
+ // driver.\r
+ //\r
+ BOOLEAN WakeUpByInitSipiSipi;\r
};\r
\r
extern EFI_GUID mCpuInitMpLibHobGuid;\r
/**\r
Detect whether specified processor can find matching microcode patch and load it.\r
\r
- @param[in] CpuMpData The pointer to CPU MP Data structure.\r
+ @param[in] CpuMpData The pointer to CPU MP Data structure.\r
+ @param[in] IsBspCallIn Indicate whether the caller is BSP or not.\r
**/\r
VOID\r
MicrocodeDetect (\r
- IN CPU_MP_DATA *CpuMpData\r
+ IN CPU_MP_DATA *CpuMpData,\r
+ IN BOOLEAN IsBspCallIn\r
);\r
\r
/**\r