VectorInfoList = (EFI_VECTOR_HANDOFF_INFO *)(GET_GUID_HOB_DATA (GuidHob));\r
}\r
\r
- Status = InitializeCpuExceptionHandlersEx (VectorInfoList, NULL);\r
+ Status = InitializeCpuExceptionHandlers (VectorInfoList);\r
ASSERT_EFI_ERROR (Status);\r
\r
//\r
);\r
\r
/**\r
- Initializes all CPU exceptions entries with optional extra initializations.\r
+ Setup separate stacks for certain exception handlers.\r
\r
- By default, this method should include all functionalities implemented by\r
- InitializeCpuExceptionHandlers(), plus extra initialization works, if any.\r
- This could be done by calling InitializeCpuExceptionHandlers() directly\r
- in this method besides the extra works.\r
+ InitData is optional and processor arch dependent.\r
\r
- InitData is optional and its use and content are processor arch dependent.\r
- The typical usage of it is to convey resources which have to be reserved\r
- elsewhere and are necessary for the extra initializations of exception.\r
+ @param[in] InitData Pointer to data optional for information about how\r
+ to assign stacks for certain exception handlers.\r
\r
- @param[in] VectorInfo Pointer to reserved vector list.\r
- @param[in] InitData Pointer to data optional for extra initializations\r
- of exception.\r
-\r
- @retval EFI_SUCCESS The exceptions have been successfully\r
- initialized.\r
- @retval EFI_INVALID_PARAMETER VectorInfo or InitData contains invalid\r
- content.\r
+ @retval EFI_SUCCESS The stacks are assigned successfully.\r
@retval EFI_UNSUPPORTED This function is not supported.\r
\r
**/\r
EFI_STATUS\r
EFIAPI\r
-InitializeCpuExceptionHandlersEx (\r
- IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL,\r
+InitializeSeparateExceptionStacks (\r
IN CPU_EXCEPTION_INIT_DATA *InitData OPTIONAL\r
);\r
\r
}\r
\r
/**\r
- Initializes all CPU exceptions entries with optional extra initializations.\r
+ Setup separate stacks for certain exception handlers.\r
\r
- By default, this method should include all functionalities implemented by\r
- InitializeCpuExceptionHandlers(), plus extra initialization works, if any.\r
- This could be done by calling InitializeCpuExceptionHandlers() directly\r
- in this method besides the extra works.\r
+ InitData is optional and processor arch dependent.\r
\r
- InitData is optional and its use and content are processor arch dependent.\r
- The typical usage of it is to convey resources which have to be reserved\r
- elsewhere and are necessary for the extra initializations of exception.\r
+ @param[in] InitData Pointer to data optional for information about how\r
+ to assign stacks for certain exception handlers.\r
\r
- @param[in] VectorInfo Pointer to reserved vector list.\r
- @param[in] InitData Pointer to data optional for extra initializations\r
- of exception.\r
-\r
- @retval EFI_SUCCESS The exceptions have been successfully\r
- initialized.\r
- @retval EFI_INVALID_PARAMETER VectorInfo or InitData contains invalid\r
- content.\r
+ @retval EFI_SUCCESS The stacks are assigned successfully.\r
@retval EFI_UNSUPPORTED This function is not supported.\r
\r
**/\r
EFI_STATUS\r
EFIAPI\r
-InitializeCpuExceptionHandlersEx (\r
- IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL,\r
+InitializeSeparateExceptionStacks (\r
IN CPU_EXCEPTION_INIT_DATA *InitData OPTIONAL\r
)\r
{\r
- return InitializeCpuExceptionHandlers (VectorInfo);\r
+ return EFI_UNSUPPORTED;\r
}\r
/** @file\r
CPU DXE Module to produce CPU MP Protocol.\r
\r
- Copyright (c) 2008 - 2017, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2008 - 2022, Intel Corporation. All rights reserved.<BR>\r
SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
/**\r
Initializes CPU exceptions handlers for the sake of stack switch requirement.\r
\r
- This function is a wrapper of InitializeCpuExceptionHandlersEx. It's mainly\r
+ This function is a wrapper of InitializeSeparateExceptionStacks. It's mainly\r
for the sake of AP's init because of EFI_AP_PROCEDURE API requirement.\r
\r
@param[in,out] Buffer The pointer to private data buffer.\r
AsmReadIdtr (&Idtr);\r
EssData->Ia32.IdtTable = (VOID *)Idtr.Base;\r
EssData->Ia32.IdtTableSize = Idtr.Limit + 1;\r
- Status = InitializeCpuExceptionHandlersEx (NULL, EssData);\r
+ Status = InitializeSeparateExceptionStacks (EssData);\r
ASSERT_EFI_ERROR (Status);\r
}\r
\r
/**\r
Initializes CPU exceptions handlers for the sake of stack switch requirement.\r
\r
- This function is a wrapper of InitializeCpuExceptionHandlersEx. It's mainly\r
+ This function is a wrapper of InitializeSeparateExceptionStacks. It's mainly\r
for the sake of AP's init because of EFI_AP_PROCEDURE API requirement.\r
\r
@param[in,out] Buffer The pointer to private data buffer.\r
AsmReadIdtr (&Idtr);\r
EssData->Ia32.IdtTable = (VOID *)Idtr.Base;\r
EssData->Ia32.IdtTableSize = Idtr.Limit + 1;\r
- Status = InitializeCpuExceptionHandlersEx (NULL, EssData);\r
+ Status = InitializeSeparateExceptionStacks (EssData);\r
ASSERT_EFI_ERROR (Status);\r
}\r
\r
}\r
\r
/**\r
- Initializes CPU exceptions entries and setup stack switch for given exceptions.\r
+ Setup separate stacks for certain exception handlers.\r
\r
- This method will call InitializeCpuExceptionHandlers() to setup default\r
- exception handlers unless indicated not to do it explicitly.\r
+ InitData is optional and processor arch dependent.\r
\r
- If InitData is passed with NULL, this method will use the resource reserved\r
- by global variables to initialize it; Otherwise it will use data in InitData\r
- to setup stack switch. This is for the different use cases in DxeCore and\r
- Cpu MP exception initialization.\r
+ @param[in] InitData Pointer to data optional for information about how\r
+ to assign stacks for certain exception handlers.\r
\r
- @param[in] VectorInfo Pointer to reserved vector list.\r
- @param[in] InitData Pointer to data required to setup stack switch for\r
- given exceptions.\r
-\r
- @retval EFI_SUCCESS The exceptions have been successfully\r
- initialized.\r
- @retval EFI_INVALID_PARAMETER VectorInfo or InitData contains invalid\r
- content.\r
+ @retval EFI_SUCCESS The stacks are assigned successfully.\r
+ @retval EFI_UNSUPPORTED This function is not supported.\r
\r
**/\r
EFI_STATUS\r
EFIAPI\r
-InitializeCpuExceptionHandlersEx (\r
- IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL,\r
+InitializeSeparateExceptionStacks (\r
IN CPU_EXCEPTION_INIT_DATA *InitData OPTIONAL\r
)\r
{\r
- EFI_STATUS Status;\r
CPU_EXCEPTION_INIT_DATA EssData;\r
IA32_DESCRIPTOR Idtr;\r
IA32_DESCRIPTOR Gdtr;\r
\r
- //\r
- // To avoid repeat initialization of default handlers, the caller should pass\r
- // an extended init data with InitDefaultHandlers set to FALSE. There's no\r
- // need to call this method to just initialize default handlers. Call non-ex\r
- // version instead; or this method must be implemented as a simple wrapper of\r
- // non-ex version of it, if this version has to be called.\r
- //\r
- if ((InitData == NULL) || InitData->X64.InitDefaultHandlers) {\r
- Status = InitializeCpuExceptionHandlers (VectorInfo);\r
- } else {\r
- Status = EFI_SUCCESS;\r
- }\r
-\r
- if (!EFI_ERROR (Status)) {\r
- //\r
- // Initializing stack switch is only necessary for Stack Guard functionality.\r
- //\r
- if (PcdGetBool (PcdCpuStackGuard)) {\r
- if (InitData == NULL) {\r
- SetMem (mNewGdt, sizeof (mNewGdt), 0);\r
-\r
- AsmReadIdtr (&Idtr);\r
- AsmReadGdtr (&Gdtr);\r
-\r
- EssData.X64.Revision = CPU_EXCEPTION_INIT_DATA_REV;\r
- EssData.X64.KnownGoodStackTop = (UINTN)mNewStack + sizeof (mNewStack);\r
- EssData.X64.KnownGoodStackSize = CPU_KNOWN_GOOD_STACK_SIZE;\r
- EssData.X64.StackSwitchExceptions = CPU_STACK_SWITCH_EXCEPTION_LIST;\r
- EssData.X64.StackSwitchExceptionNumber = CPU_STACK_SWITCH_EXCEPTION_NUMBER;\r
- EssData.X64.IdtTable = (VOID *)Idtr.Base;\r
- EssData.X64.IdtTableSize = Idtr.Limit + 1;\r
- EssData.X64.GdtTable = mNewGdt;\r
- EssData.X64.GdtTableSize = sizeof (mNewGdt);\r
- EssData.X64.ExceptionTssDesc = mNewGdt + Gdtr.Limit + 1;\r
- EssData.X64.ExceptionTssDescSize = CPU_TSS_DESC_SIZE;\r
- EssData.X64.ExceptionTss = mNewGdt + Gdtr.Limit + 1 + CPU_TSS_DESC_SIZE;\r
- EssData.X64.ExceptionTssSize = CPU_TSS_SIZE;\r
-\r
- InitData = &EssData;\r
- }\r
-\r
- Status = ArchSetupExceptionStack (InitData);\r
- }\r
+ if (InitData == NULL) {\r
+ SetMem (mNewGdt, sizeof (mNewGdt), 0);\r
+\r
+ AsmReadIdtr (&Idtr);\r
+ AsmReadGdtr (&Gdtr);\r
+\r
+ EssData.X64.Revision = CPU_EXCEPTION_INIT_DATA_REV;\r
+ EssData.X64.KnownGoodStackTop = (UINTN)mNewStack + sizeof (mNewStack);\r
+ EssData.X64.KnownGoodStackSize = CPU_KNOWN_GOOD_STACK_SIZE;\r
+ EssData.X64.StackSwitchExceptions = CPU_STACK_SWITCH_EXCEPTION_LIST;\r
+ EssData.X64.StackSwitchExceptionNumber = CPU_STACK_SWITCH_EXCEPTION_NUMBER;\r
+ EssData.X64.IdtTable = (VOID *)Idtr.Base;\r
+ EssData.X64.IdtTableSize = Idtr.Limit + 1;\r
+ EssData.X64.GdtTable = mNewGdt;\r
+ EssData.X64.GdtTableSize = sizeof (mNewGdt);\r
+ EssData.X64.ExceptionTssDesc = mNewGdt + Gdtr.Limit + 1;\r
+ EssData.X64.ExceptionTssDescSize = CPU_TSS_DESC_SIZE;\r
+ EssData.X64.ExceptionTss = mNewGdt + Gdtr.Limit + 1 + CPU_TSS_DESC_SIZE;\r
+ EssData.X64.ExceptionTssSize = CPU_TSS_SIZE;\r
+\r
+ InitData = &EssData;\r
}\r
\r
- return Status;\r
+ return ArchSetupExceptionStack (InitData);\r
}\r
}\r
\r
/**\r
- Initializes all CPU exceptions entries with optional extra initializations.\r
+ Setup separate stacks for certain exception handlers.\r
\r
- By default, this method should include all functionalities implemented by\r
- InitializeCpuExceptionHandlers(), plus extra initialization works, if any.\r
- This could be done by calling InitializeCpuExceptionHandlers() directly\r
- in this method besides the extra works.\r
+ InitData is optional and processor arch dependent.\r
\r
- InitData is optional and its use and content are processor arch dependent.\r
- The typical usage of it is to convey resources which have to be reserved\r
- elsewhere and are necessary for the extra initializations of exception.\r
+ @param[in] InitData Pointer to data optional for information about how\r
+ to assign stacks for certain exception handlers.\r
\r
- @param[in] VectorInfo Pointer to reserved vector list.\r
- @param[in] InitData Pointer to data optional for extra initializations\r
- of exception.\r
-\r
- @retval EFI_SUCCESS The exceptions have been successfully\r
- initialized.\r
- @retval EFI_INVALID_PARAMETER VectorInfo or InitData contains invalid\r
- content.\r
+ @retval EFI_SUCCESS The stacks are assigned successfully.\r
+ @retval EFI_UNSUPPORTED This function is not supported.\r
\r
**/\r
EFI_STATUS\r
EFIAPI\r
-InitializeCpuExceptionHandlersEx (\r
- IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL,\r
+InitializeSeparateExceptionStacks (\r
IN CPU_EXCEPTION_INIT_DATA *InitData OPTIONAL\r
)\r
{\r
- EFI_STATUS Status;\r
-\r
- //\r
- // To avoid repeat initialization of default handlers, the caller should pass\r
- // an extended init data with InitDefaultHandlers set to FALSE. There's no\r
- // need to call this method to just initialize default handlers. Call non-ex\r
- // version instead; or this method must be implemented as a simple wrapper of\r
- // non-ex version of it, if this version has to be called.\r
- //\r
- if ((InitData == NULL) || InitData->Ia32.InitDefaultHandlers) {\r
- Status = InitializeCpuExceptionHandlers (VectorInfo);\r
- } else {\r
- Status = EFI_SUCCESS;\r
- }\r
-\r
- if (!EFI_ERROR (Status)) {\r
- //\r
- // Initializing stack switch is only necessary for Stack Guard functionality.\r
- //\r
- if (PcdGetBool (PcdCpuStackGuard) && (InitData != NULL)) {\r
- Status = ArchSetupExceptionStack (InitData);\r
- }\r
+ if (InitData == NULL) {\r
+ return EFI_UNSUPPORTED;\r
}\r
\r
- return Status;\r
+ return ArchSetupExceptionStack (InitData);\r
}\r
}\r
\r
/**\r
- Initializes all CPU exceptions entries with optional extra initializations.\r
+ Setup separate stacks for certain exception handlers.\r
\r
- By default, this method should include all functionalities implemented by\r
- InitializeCpuExceptionHandlers(), plus extra initialization works, if any.\r
- This could be done by calling InitializeCpuExceptionHandlers() directly\r
- in this method besides the extra works.\r
+ InitData is optional and processor arch dependent.\r
\r
- InitData is optional and its use and content are processor arch dependent.\r
- The typical usage of it is to convey resources which have to be reserved\r
- elsewhere and are necessary for the extra initializations of exception.\r
+ @param[in] InitData Pointer to data optional for information about how\r
+ to assign stacks for certain exception handlers.\r
\r
- @param[in] VectorInfo Pointer to reserved vector list.\r
- @param[in] InitData Pointer to data optional for extra initializations\r
- of exception.\r
-\r
- @retval EFI_SUCCESS The exceptions have been successfully\r
- initialized.\r
- @retval EFI_INVALID_PARAMETER VectorInfo or InitData contains invalid\r
- content.\r
+ @retval EFI_SUCCESS The stacks are assigned successfully.\r
+ @retval EFI_UNSUPPORTED This function is not supported.\r
\r
**/\r
EFI_STATUS\r
EFIAPI\r
-InitializeCpuExceptionHandlersEx (\r
- IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL,\r
+InitializeSeparateExceptionStacks (\r
IN CPU_EXCEPTION_INIT_DATA *InitData OPTIONAL\r
)\r
{\r
- return InitializeCpuExceptionHandlers (VectorInfo);\r
+ return EFI_UNSUPPORTED;\r
}\r
}\r
\r
/**\r
- Initializes all CPU exceptions entries with optional extra initializations.\r
+ Setup separate stacks for certain exception handlers.\r
\r
- By default, this method should include all functionalities implemented by\r
- InitializeCpuExceptionHandlers(), plus extra initialization works, if any.\r
- This could be done by calling InitializeCpuExceptionHandlers() directly\r
- in this method besides the extra works.\r
+ InitData is optional and processor arch dependent.\r
\r
- InitData is optional and its use and content are processor arch dependent.\r
- The typical usage of it is to convey resources which have to be reserved\r
- elsewhere and are necessary for the extra initializations of exception.\r
+ @param[in] InitData Pointer to data optional for information about how\r
+ to assign stacks for certain exception handlers.\r
\r
- @param[in] VectorInfo Pointer to reserved vector list.\r
- @param[in] InitData Pointer to data optional for extra initializations\r
- of exception.\r
-\r
- @retval EFI_SUCCESS The exceptions have been successfully\r
- initialized.\r
- @retval EFI_INVALID_PARAMETER VectorInfo or InitData contains invalid\r
- content.\r
+ @retval EFI_SUCCESS The stacks are assigned successfully.\r
+ @retval EFI_UNSUPPORTED This function is not supported.\r
\r
**/\r
EFI_STATUS\r
EFIAPI\r
-InitializeCpuExceptionHandlersEx (\r
- IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL,\r
+InitializeSeparateExceptionStacks (\r
IN CPU_EXCEPTION_INIT_DATA *InitData OPTIONAL\r
)\r
{\r
- return InitializeCpuExceptionHandlers (VectorInfo);\r
+ return EFI_UNSUPPORTED;\r
}\r