Add parameter CpuExceptionData for InitializeCpuExceptionHandlersWorker().
Cc: Michael Kinney <michael.d.kinney@intel.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Feng Tian <feng.tian@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jeff Fan <jeff.fan@intel.com>
Reviewed-by: Feng Tian <feng.tian@intel.com>
/**\r
Internal worker function to initialize exception handler.\r
\r
- @param[in] VectorInfo Pointer to reserved vector list.\r
+ @param[in] VectorInfo Pointer to reserved vector list.\r
+ @param[in, out] ExceptionHandlerData Pointer to exception handler data.\r
\r
@retval EFI_SUCCESS CPU Exception Entries have been successfully initialized \r
with default exception handlers.\r
**/\r
EFI_STATUS\r
InitializeCpuExceptionHandlersWorker (\r
- IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL\r
+ IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL,\r
+ IN OUT EXCEPTION_HANDLER_DATA *ExceptionHandlerData\r
);\r
\r
/**\r
\r
extern SPIN_LOCK mDisplayMessageSpinLock;\r
extern EFI_CPU_INTERRUPT_HANDLER *mExternalInterruptHandler;\r
+extern RESERVED_VECTORS_DATA mReservedVectorsData[CPU_EXCEPTION_NUM];\r
+extern EFI_CPU_INTERRUPT_HANDLER mExternalInterruptHandlerTable[CPU_EXCEPTION_NUM];\r
EXCEPTION_HANDLER_DATA mExceptionHandlerData;\r
\r
/**\r
IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL\r
)\r
{\r
- return InitializeCpuExceptionHandlersWorker (VectorInfo);\r
+ mExceptionHandlerData.ReservedVectors = mReservedVectorsData;\r
+ mExceptionHandlerData.ExternalInterruptHandler = mExternalInterruptHandlerTable;\r
+ InitializeSpinLock (&mExceptionHandlerData.DisplayMessageSpinLock);\r
+ return InitializeCpuExceptionHandlersWorker (VectorInfo, &mExceptionHandlerData);\r
}\r
\r
/**\r
/**\r
Internal worker function to initialize exception handler.\r
\r
- @param[in] VectorInfo Pointer to reserved vector list.\r
+ @param[in] VectorInfo Pointer to reserved vector list.\r
+ @param[in, out] ExceptionHandlerData Pointer to exception handler data.\r
\r
@retval EFI_SUCCESS CPU Exception Entries have been successfully initialized \r
with default exception handlers.\r
**/\r
EFI_STATUS\r
InitializeCpuExceptionHandlersWorker (\r
- IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL\r
+ IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL,\r
+ IN OUT EXCEPTION_HANDLER_DATA *ExceptionHandlerData\r
)\r
{\r
EFI_STATUS Status;\r
UINTN IdtEntryCount;\r
EXCEPTION_HANDLER_TEMPLATE_MAP TemplateMap;\r
IA32_IDT_GATE_DESCRIPTOR *IdtTable;\r
+ RESERVED_VECTORS_DATA *ReservedVectors;\r
\r
- mReservedVectors = mReservedVectorsData;\r
- SetMem ((VOID *) mReservedVectors, sizeof (RESERVED_VECTORS_DATA) * CPU_EXCEPTION_NUM, 0xff);\r
+ ReservedVectors = ExceptionHandlerData->ReservedVectors;\r
+ SetMem ((VOID *) ReservedVectors, sizeof (RESERVED_VECTORS_DATA) * CPU_EXCEPTION_NUM, 0xff);\r
if (VectorInfo != NULL) {\r
- Status = ReadAndVerifyVectorInfo (VectorInfo, mReservedVectors, CPU_EXCEPTION_NUM);\r
+ Status = ReadAndVerifyVectorInfo (VectorInfo, ReservedVectors, CPU_EXCEPTION_NUM);\r
if (EFI_ERROR (Status)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
CONST UINTN mDoFarReturnFlag = 1; \r
\r
+extern RESERVED_VECTORS_DATA mReservedVectorsData[CPU_EXCEPTION_NUM];\r
+extern EFI_CPU_INTERRUPT_HANDLER mExternalInterruptHandlerTable[CPU_EXCEPTION_NUM];\r
EXCEPTION_HANDLER_DATA mExceptionHandlerData;\r
/**\r
Initializes all CPU exceptions entries and provides the default exception handlers.\r
IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL\r
)\r
{\r
- return InitializeCpuExceptionHandlersWorker (VectorInfo);\r
+ mExceptionHandlerData.ReservedVectors = mReservedVectorsData;\r
+ mExceptionHandlerData.ExternalInterruptHandler = mExternalInterruptHandlerTable;\r
+ InitializeSpinLock (&mExceptionHandlerData.DisplayMessageSpinLock);\r
+ return InitializeCpuExceptionHandlersWorker (VectorInfo, &mExceptionHandlerData);\r
}\r
\r
/**\r