]> git.proxmox.com Git - mirror_edk2.git/blobdiff - UefiCpuPkg/Library/CpuExceptionHandlerLib/CpuExceptionCommon.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / UefiCpuPkg / Library / CpuExceptionHandlerLib / CpuExceptionCommon.h
index 459f06ac8452fbf60a00c7e6db732f87cddba4ea..4593c204a6e8ac078dac602d8ee0359a3e578b87 100644 (file)
@@ -1,14 +1,8 @@
 /** @file\r
   Common header file for CPU Exception Handler Library.\r
 \r
-  Copyright (c) 2012 - 2018, Intel Corporation. All rights reserved.<BR>\r
-  This program and the accompanying materials\r
-  are licensed and made available under the terms and conditions of the BSD License\r
-  which accompanies this distribution.  The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php\r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+  Copyright (c) 2012 - 2022, Intel Corporation. All rights reserved.<BR>\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
 #include <Library/SynchronizationLib.h>\r
 #include <Library/CpuExceptionHandlerLib.h>\r
 \r
-#define  CPU_EXCEPTION_NUM          32\r
-#define  CPU_INTERRUPT_NUM         256\r
-#define  HOOKAFTER_STUB_SIZE        16\r
+#define  CPU_EXCEPTION_NUM    32\r
+#define  CPU_INTERRUPT_NUM    256\r
+#define  HOOKAFTER_STUB_SIZE  18\r
 \r
 //\r
 // Exception Error Code of Page-Fault Exception\r
 //\r
-#define IA32_PF_EC_P                BIT0\r
-#define IA32_PF_EC_WR               BIT1\r
-#define IA32_PF_EC_US               BIT2\r
-#define IA32_PF_EC_RSVD             BIT3\r
-#define IA32_PF_EC_ID               BIT4\r
-#define IA32_PF_EC_PK               BIT5\r
-#define IA32_PF_EC_SGX              BIT15\r
+#define IA32_PF_EC_P     BIT0\r
+#define IA32_PF_EC_WR    BIT1\r
+#define IA32_PF_EC_US    BIT2\r
+#define IA32_PF_EC_RSVD  BIT3\r
+#define IA32_PF_EC_ID    BIT4\r
+#define IA32_PF_EC_PK    BIT5\r
+#define IA32_PF_EC_SS    BIT6\r
+#define IA32_PF_EC_SGX   BIT15\r
 \r
 #include "ArchInterruptDefs.h"\r
 \r
 #define CPU_KNOWN_GOOD_STACK_SIZE \\r
   FixedPcdGet32 (PcdCpuKnownGoodStackSize)\r
 \r
-#define CPU_TSS_GDT_SIZE (SIZE_2KB + CPU_TSS_DESC_SIZE + CPU_TSS_SIZE)\r
+#define CPU_TSS_GDT_SIZE  (SIZE_2KB + CPU_TSS_DESC_SIZE + CPU_TSS_SIZE)\r
 \r
 //\r
 // Record exception handler information\r
 //\r
 typedef struct {\r
-  UINTN ExceptionStart;\r
-  UINTN ExceptionStubHeaderSize;\r
-  UINTN HookAfterStubHeaderStart;\r
+  UINTN    ExceptionStart;\r
+  UINTN    ExceptionStubHeaderSize;\r
+  UINTN    HookAfterStubHeaderStart;\r
 } EXCEPTION_HANDLER_TEMPLATE_MAP;\r
 \r
 typedef struct {\r
-  UINTN                       IdtEntryCount;\r
-  SPIN_LOCK                   DisplayMessageSpinLock;\r
-  RESERVED_VECTORS_DATA       *ReservedVectors;\r
-  EFI_CPU_INTERRUPT_HANDLER   *ExternalInterruptHandler;\r
+  UINTN                        IdtEntryCount;\r
+  SPIN_LOCK                    DisplayMessageSpinLock;\r
+  RESERVED_VECTORS_DATA        *ReservedVectors;\r
+  EFI_CPU_INTERRUPT_HANDLER    *ExternalInterruptHandler;\r
 } EXCEPTION_HANDLER_DATA;\r
 \r
-extern CONST UINT32                mErrorCodeFlag;\r
-extern CONST UINTN                 mDoFarReturnFlag;\r
+extern CONST UINT32  mErrorCodeFlag;\r
+extern CONST UINTN   mDoFarReturnFlag;\r
 \r
 /**\r
   Return address map of exception handler template so that C code can generate\r
@@ -82,7 +77,7 @@ extern CONST UINTN                 mDoFarReturnFlag;
 VOID\r
 EFIAPI\r
 AsmGetTemplateAddressMap (\r
-  OUT EXCEPTION_HANDLER_TEMPLATE_MAP *AddressMap\r
+  OUT EXCEPTION_HANDLER_TEMPLATE_MAP  *AddressMap\r
   );\r
 \r
 /**\r
@@ -95,8 +90,8 @@ AsmGetTemplateAddressMap (
 **/\r
 VOID\r
 ArchUpdateIdtEntry (\r
-  IN IA32_IDT_GATE_DESCRIPTOR        *IdtEntry,\r
-  IN UINTN                           InterruptHandler\r
+  OUT IA32_IDT_GATE_DESCRIPTOR  *IdtEntry,\r
+  IN  UINTN                     InterruptHandler\r
   );\r
 \r
 /**\r
@@ -107,7 +102,7 @@ ArchUpdateIdtEntry (
 **/\r
 UINTN\r
 ArchGetIdtHandler (\r
-  IN IA32_IDT_GATE_DESCRIPTOR        *IdtEntry\r
+  IN IA32_IDT_GATE_DESCRIPTOR  *IdtEntry\r
   );\r
 \r
 /**\r
@@ -133,7 +128,7 @@ InternalPrintMessage (
 **/\r
 VOID\r
 DumpModuleImageInfo (\r
-  IN  UINTN              CurrentEip\r
+  IN  UINTN  CurrentEip\r
   );\r
 \r
 /**\r
@@ -144,8 +139,8 @@ DumpModuleImageInfo (
 **/\r
 VOID\r
 DumpImageAndCpuContent (\r
-  IN EFI_EXCEPTION_TYPE   ExceptionType,\r
-  IN EFI_SYSTEM_CONTEXT   SystemContext\r
+  IN EFI_EXCEPTION_TYPE  ExceptionType,\r
+  IN EFI_SYSTEM_CONTEXT  SystemContext\r
   );\r
 \r
 /**\r
@@ -162,8 +157,8 @@ DumpImageAndCpuContent (
 **/\r
 EFI_STATUS\r
 InitializeCpuExceptionHandlersWorker (\r
-  IN EFI_VECTOR_HANDOFF_INFO       *VectorInfo OPTIONAL,\r
-  IN OUT EXCEPTION_HANDLER_DATA    *ExceptionHandlerData\r
+  IN EFI_VECTOR_HANDOFF_INFO     *VectorInfo OPTIONAL,\r
+  IN OUT EXCEPTION_HANDLER_DATA  *ExceptionHandlerData\r
   );\r
 \r
 /**\r
@@ -185,9 +180,9 @@ InitializeCpuExceptionHandlersWorker (
 **/\r
 EFI_STATUS\r
 RegisterCpuInterruptHandlerWorker (\r
-  IN EFI_EXCEPTION_TYPE            InterruptType,\r
-  IN EFI_CPU_INTERRUPT_HANDLER     InterruptHandler,\r
-  IN EXCEPTION_HANDLER_DATA        *ExceptionHandlerData\r
+  IN EFI_EXCEPTION_TYPE         InterruptType,\r
+  IN EFI_CPU_INTERRUPT_HANDLER  InterruptHandler,\r
+  IN EXCEPTION_HANDLER_DATA     *ExceptionHandlerData\r
   );\r
 \r
 /**\r
@@ -215,9 +210,9 @@ UpdateIdtTable (
 **/\r
 VOID\r
 ArchSaveExceptionContext (\r
-  IN UINTN                        ExceptionType,\r
-  IN EFI_SYSTEM_CONTEXT           SystemContext,\r
-  IN EXCEPTION_HANDLER_DATA       *ExceptionHandlerData\r
+  IN UINTN                   ExceptionType,\r
+  IN EFI_SYSTEM_CONTEXT      SystemContext,\r
+  IN EXCEPTION_HANDLER_DATA  *ExceptionHandlerData\r
   );\r
 \r
 /**\r
@@ -229,9 +224,9 @@ ArchSaveExceptionContext (
 **/\r
 VOID\r
 ArchRestoreExceptionContext (\r
-  IN UINTN                        ExceptionType,\r
-  IN EFI_SYSTEM_CONTEXT           SystemContext,\r
-  IN EXCEPTION_HANDLER_DATA       *ExceptionHandlerData\r
+  IN UINTN                   ExceptionType,\r
+  IN EFI_SYSTEM_CONTEXT      SystemContext,\r
+  IN EXCEPTION_HANDLER_DATA  *ExceptionHandlerData\r
   );\r
 \r
 /**\r
@@ -245,9 +240,9 @@ ArchRestoreExceptionContext (
 VOID\r
 EFIAPI\r
 AsmVectorNumFixup (\r
-  IN VOID    *NewVectorAddr,\r
-  IN UINT8   VectorNum,\r
-  IN VOID    *OldVectorAddr\r
+  IN VOID   *NewVectorAddr,\r
+  IN UINT8  VectorNum,\r
+  IN VOID   *OldVectorAddr\r
   );\r
 \r
 /**\r
@@ -263,9 +258,9 @@ AsmVectorNumFixup (
 **/\r
 EFI_STATUS\r
 ReadAndVerifyVectorInfo (\r
-  IN  EFI_VECTOR_HANDOFF_INFO       *VectorInfo,\r
-  OUT RESERVED_VECTORS_DATA         *ReservedVector,\r
-  IN  UINTN                         VectorCount\r
+  IN  EFI_VECTOR_HANDOFF_INFO  *VectorInfo,\r
+  OUT RESERVED_VECTORS_DATA    *ReservedVector,\r
+  IN  UINTN                    VectorCount\r
   );\r
 \r
 /**\r
@@ -277,7 +272,7 @@ ReadAndVerifyVectorInfo (
 **/\r
 CONST CHAR8 *\r
 GetExceptionNameStr (\r
-  IN EFI_EXCEPTION_TYPE          ExceptionType\r
+  IN EFI_EXCEPTION_TYPE  ExceptionType\r
   );\r
 \r
 /**\r
@@ -289,24 +284,28 @@ GetExceptionNameStr (
 **/\r
 VOID\r
 CommonExceptionHandlerWorker (\r
-  IN EFI_EXCEPTION_TYPE          ExceptionType,\r
-  IN EFI_SYSTEM_CONTEXT          SystemContext,\r
-  IN EXCEPTION_HANDLER_DATA      *ExceptionHandlerData\r
+  IN EFI_EXCEPTION_TYPE      ExceptionType,\r
+  IN EFI_SYSTEM_CONTEXT      SystemContext,\r
+  IN EXCEPTION_HANDLER_DATA  *ExceptionHandlerData\r
   );\r
 \r
 /**\r
-  Setup separate stack for specific exceptions.\r
+  Setup separate stacks for certain exception handlers.\r
 \r
-  @param[in] StackSwitchData      Pointer to data required for setuping up\r
-                                  stack switch.\r
+  @param[in]       Buffer        Point to buffer used to separate exception stack.\r
+  @param[in, out]  BufferSize    On input, it indicates the byte size of Buffer.\r
+                                 If the size is not enough, the return status will\r
+                                 be EFI_BUFFER_TOO_SMALL, and output BufferSize\r
+                                 will be the size it needs.\r
 \r
-  @retval EFI_SUCCESS             The exceptions have been successfully\r
-                                  initialized with new stack.\r
-  @retval EFI_INVALID_PARAMETER   StackSwitchData contains invalid content.\r
+  @retval EFI_SUCCESS             The stacks are assigned successfully.\r
+  @retval EFI_BUFFER_TOO_SMALL    This BufferSize is too small.\r
+  @retval EFI_UNSUPPORTED         This function is not supported.\r
 **/\r
 EFI_STATUS\r
-ArchSetupExcpetionStack (\r
-  IN CPU_EXCEPTION_INIT_DATA        *StackSwitchData\r
+ArchSetupExceptionStack (\r
+  IN     VOID   *Buffer,\r
+  IN OUT UINTN  *BufferSize\r
   );\r
 \r
 /**\r
@@ -323,4 +322,3 @@ AsmGetTssTemplateMap (
   );\r
 \r
 #endif\r
-\r