TianoCore EDK2 master
|
#include <Ppi/VectorHandoffInfo.h>
#include <Protocol/Cpu.h>
#include <Library/BaseLib.h>
#include <Library/SerialPortLib.h>
#include <Library/PrintLib.h>
#include <Library/LocalApicLib.h>
#include <Library/PeCoffGetEntryPointLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/SynchronizationLib.h>
#include <Library/CpuExceptionHandlerLib.h>
#include "ArchInterruptDefs.h"
Go to the source code of this file.
Data Structures | |
struct | EXCEPTION_HANDLER_TEMPLATE_MAP |
struct | EXCEPTION_HANDLER_DATA |
Macros | |
#define | CPU_EXCEPTION_NUM 32 |
#define | CPU_INTERRUPT_NUM 256 |
#define | HOOKAFTER_STUB_SIZE 18 |
#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 |
#define | CPU_STACK_SWITCH_EXCEPTION_NUMBER FixedPcdGetSize (PcdCpuStackSwitchExceptionList) |
#define | CPU_STACK_SWITCH_EXCEPTION_LIST FixedPcdGetPtr (PcdCpuStackSwitchExceptionList) |
#define | CPU_KNOWN_GOOD_STACK_SIZE FixedPcdGet32 (PcdCpuKnownGoodStackSize) |
#define | CPU_TSS_GDT_SIZE (SIZE_2KB + CPU_TSS_DESC_SIZE + CPU_TSS_SIZE) |
Variables | |
CONST UINT32 | mErrorCodeFlag |
CONST UINTN | mDoFarReturnFlag |
Common header file for CPU Exception Handler Library.
Copyright (c) 2012 - 2022, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
Definition in file CpuExceptionCommon.h.
#define CPU_EXCEPTION_NUM 32 |
Definition at line 23 of file CpuExceptionCommon.h.
#define CPU_INTERRUPT_NUM 256 |
Definition at line 24 of file CpuExceptionCommon.h.
#define CPU_KNOWN_GOOD_STACK_SIZE FixedPcdGet32 (PcdCpuKnownGoodStackSize) |
Definition at line 47 of file CpuExceptionCommon.h.
#define CPU_STACK_SWITCH_EXCEPTION_LIST FixedPcdGetPtr (PcdCpuStackSwitchExceptionList) |
Definition at line 44 of file CpuExceptionCommon.h.
#define CPU_STACK_SWITCH_EXCEPTION_NUMBER FixedPcdGetSize (PcdCpuStackSwitchExceptionList) |
Definition at line 41 of file CpuExceptionCommon.h.
#define CPU_TSS_GDT_SIZE (SIZE_2KB + CPU_TSS_DESC_SIZE + CPU_TSS_SIZE) |
Definition at line 50 of file CpuExceptionCommon.h.
#define HOOKAFTER_STUB_SIZE 18 |
Definition at line 25 of file CpuExceptionCommon.h.
#define IA32_PF_EC_ID BIT4 |
Definition at line 34 of file CpuExceptionCommon.h.
#define IA32_PF_EC_P BIT0 |
Definition at line 30 of file CpuExceptionCommon.h.
#define IA32_PF_EC_PK BIT5 |
Definition at line 35 of file CpuExceptionCommon.h.
#define IA32_PF_EC_RSVD BIT3 |
Definition at line 33 of file CpuExceptionCommon.h.
#define IA32_PF_EC_SGX BIT15 |
Definition at line 37 of file CpuExceptionCommon.h.
#define IA32_PF_EC_SS BIT6 |
Definition at line 36 of file CpuExceptionCommon.h.
#define IA32_PF_EC_US BIT2 |
Definition at line 32 of file CpuExceptionCommon.h.
#define IA32_PF_EC_WR BIT1 |
Definition at line 31 of file CpuExceptionCommon.h.
Read IDT handler value from IDT entry.
IdtEntry | Pointer to IDT entry to be read. |
Definition at line 37 of file ArchExceptionHandler.c.
VOID ArchRestoreExceptionContext | ( | IN UINTN | ExceptionType, |
IN EFI_SYSTEM_CONTEXT | SystemContext, | ||
IN EXCEPTION_HANDLER_DATA * | ExceptionHandlerData | ||
) |
Restore CPU exception context when handling EFI_VECTOR_HANDOFF_HOOK_AFTER case.
[in] | ExceptionType | Exception type. |
[in] | SystemContext | Pointer to EFI_SYSTEM_CONTEXT. |
[in] | ExceptionHandlerData | Pointer to exception handler data. |
Definition at line 91 of file ArchExceptionHandler.c.
VOID ArchSaveExceptionContext | ( | IN UINTN | ExceptionType, |
IN EFI_SYSTEM_CONTEXT | SystemContext, | ||
IN EXCEPTION_HANDLER_DATA * | ExceptionHandlerData | ||
) |
Save CPU exception context when handling EFI_VECTOR_HANDOFF_HOOK_AFTER case.
[in] | ExceptionType | Exception type. |
[in] | SystemContext | Pointer to EFI_SYSTEM_CONTEXT. |
[in] | ExceptionHandlerData | Pointer to exception handler data. |
Definition at line 52 of file ArchExceptionHandler.c.
EFI_STATUS ArchSetupExceptionStack | ( | IN VOID * | Buffer, |
IN OUT UINTN * | BufferSize | ||
) |
Setup separate stacks for certain exception handlers.
[in] | Buffer | Point to buffer used to separate exception stack. |
[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. |
EFI_SUCCESS | The stacks are assigned successfully. |
EFI_BUFFER_TOO_SMALL | This BufferSize is too small. |
EFI_UNSUPPORTED | This function is not supported. |
Setup separate stacks for certain exception handlers.
[in] | Buffer | Point to buffer used to separate exception stack. |
[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. |
EFI_SUCCESS | The stacks are assigned successfully. |
EFI_BUFFER_TOO_SMALL | This BufferSize is too small. |
Definition at line 119 of file ArchExceptionHandler.c.
Return address map of exception handler template so that C code can generate exception tables.
IdtEntry | Pointer to IDT entry to be updated. |
InterruptHandler | IDT handler value. |
Definition at line 20 of file ArchExceptionHandler.c.
VOID EFIAPI AsmGetTemplateAddressMap | ( | OUT EXCEPTION_HANDLER_TEMPLATE_MAP * | AddressMap | ) |
Return address map of exception handler template so that C code can generate exception tables.
AddressMap | Pointer to a buffer where the address map is returned. |
VOID EFIAPI AsmGetTssTemplateMap | ( | OUT EXCEPTION_HANDLER_TEMPLATE_MAP * | AddressMap | ) |
Return address map of exception handler template so that C code can generate exception tables. The template is only for exceptions using task gate instead of interrupt gate.
AddressMap | Pointer to a buffer where the address map is returned. |
VOID EFIAPI AsmVectorNumFixup | ( | IN VOID * | NewVectorAddr, |
IN UINT8 | VectorNum, | ||
IN VOID * | OldVectorAddr | ||
) |
Fix up the vector number and function address in the vector code.
[in] | NewVectorAddr | New vector handler address. |
[in] | VectorNum | Index of vector. |
[in] | OldVectorAddr | Old vector handler address. |
VOID CommonExceptionHandlerWorker | ( | IN EFI_EXCEPTION_TYPE | ExceptionType, |
IN EFI_SYSTEM_CONTEXT | SystemContext, | ||
IN EXCEPTION_HANDLER_DATA * | ExceptionHandlerData | ||
) |
Internal worker function for common exception handler.
ExceptionType | Exception type. |
SystemContext | Pointer to EFI_SYSTEM_CONTEXT. |
ExceptionHandlerData | Pointer to exception handler data. |
Definition at line 21 of file PeiDxeSmmCpuException.c.
VOID DumpImageAndCpuContent | ( | IN EFI_EXCEPTION_TYPE | ExceptionType, |
IN EFI_SYSTEM_CONTEXT | SystemContext | ||
) |
Display CPU information.
ExceptionType | Exception type. |
SystemContext | Pointer to EFI_SYSTEM_CONTEXT. |
Definition at line 403 of file ArchExceptionHandler.c.
Find and display image base address and return image base and its entry point.
CurrentEip | Current instruction pointer. |
Find and display image base address and return image base and its entry point.
CurrentEra | Current instruction pointer. |
Definition at line 117 of file CpuExceptionCommon.c.
CONST CHAR8 * GetExceptionNameStr | ( | IN EFI_EXCEPTION_TYPE | ExceptionType | ) |
Get ASCII format string exception name by exception type.
ExceptionType | Exception type. |
Definition at line 105 of file CpuExceptionHandlerLib.c.
EFI_STATUS InitializeCpuExceptionHandlersWorker | ( | IN EFI_VECTOR_HANDOFF_INFO *VectorInfo | OPTIONAL, |
IN OUT EXCEPTION_HANDLER_DATA * | ExceptionHandlerData | ||
) |
Internal worker function to initialize exception handler.
[in] | VectorInfo | Pointer to reserved vector list. |
[in,out] | ExceptionHandlerData | Pointer to exception handler data. |
EFI_SUCCESS | CPU Exception Entries have been successfully initialized with default exception handlers. |
EFI_INVALID_PARAMETER | VectorInfo includes the invalid content if VectorInfo is not NULL. |
EFI_UNSUPPORTED | This function is not supported. |
Definition at line 251 of file PeiDxeSmmCpuException.c.
Prints a message to the serial port.
Format | Format string for the message to print. |
... | Variable argument list whose contents are accessed based on the format string specified by Format. |
Definition at line 75 of file CpuExceptionHandlerLib.c.
EFI_STATUS ReadAndVerifyVectorInfo | ( | IN EFI_VECTOR_HANDOFF_INFO * | VectorInfo, |
OUT RESERVED_VECTORS_DATA * | ReservedVector, | ||
IN UINTN | VectorCount | ||
) |
Read and save reserved vector information
[in] | VectorInfo | Pointer to reserved vector list. |
[out] | ReservedVector | Pointer to reserved vector data buffer. |
[in] | VectorCount | Vector number to be updated. |
EFI_INVALID_PARAMETER | VectorInfo includes the invalid content if VectorInfo is not NULL. |
Definition at line 166 of file CpuExceptionCommon.c.
EFI_STATUS RegisterCpuInterruptHandlerWorker | ( | IN EFI_EXCEPTION_TYPE | InterruptType, |
IN EFI_CPU_INTERRUPT_HANDLER | InterruptHandler, | ||
IN EXCEPTION_HANDLER_DATA * | ExceptionHandlerData | ||
) |
Registers a function to be called from the processor interrupt handler.
[in] | InterruptType | Defines which interrupt or exception to hook. |
[in] | InterruptHandler | A pointer to a function of type EFI_CPU_INTERRUPT_HANDLER that is called when a processor interrupt occurs. If this parameter is NULL, then the handler will be uninstalled |
[in] | ExceptionHandlerData | Pointer to exception handler data. |
EFI_SUCCESS | The handler for the processor interrupt was successfully installed or uninstalled. |
EFI_ALREADY_STARTED | InterruptHandler is not NULL, and a handler for InterruptType was previously installed. |
EFI_INVALID_PARAMETER | InterruptHandler is NULL, and a handler for InterruptType was not previously installed. |
EFI_UNSUPPORTED | The interrupt specified by InterruptType is not supported, or this function is not supported. |
Definition at line 307 of file PeiDxeSmmCpuException.c.
VOID UpdateIdtTable | ( | IN IA32_IDT_GATE_DESCRIPTOR * | IdtTable, |
IN EXCEPTION_HANDLER_TEMPLATE_MAP * | TemplateMap, | ||
IN EXCEPTION_HANDLER_DATA * | ExceptionHandlerData | ||
) |
Internal worker function to update IDT entries accordling to vector attributes.
[in] | IdtTable | Pointer to IDT table. |
[in] | TemplateMap | Pointer to a buffer where the address map is returned. |
[in] | ExceptionHandlerData | Pointer to exception handler data. |
Definition at line 176 of file PeiDxeSmmCpuException.c.
Definition at line 15 of file DxeException.c.
|
extern |
Definition at line 17 of file CpuExceptionCommon.c.