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