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 -