mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-28 16:14:04 +02:00
UefiCpuPkg:Add RegisterExceptionHandler in PeiCpuExceptionHandlerLib
The PEI instance of the CpuExceptionHandlerLib didn't implement the RegisterCpuInterruptHandler() API. This patch adds the missing API. Signed-off-by: Zhiguang Liu <zhiguang.liu@intel.com> Cc: Eric Dong <eric.dong@intel.com> Reviewed-by: Ray Ni <ray.ni@intel.com> Cc: Rahul Kumar <rahul1.kumar@intel.com>
This commit is contained in:
parent
d618fe05bf
commit
a7e070808c
@ -100,6 +100,42 @@ CommonExceptionHandler (
|
|||||||
CommonExceptionHandlerWorker (ExceptionType, SystemContext, ExceptionHandlerData);
|
CommonExceptionHandlerWorker (ExceptionType, SystemContext, ExceptionHandlerData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Registers a function to be called from the processor interrupt handler.
|
||||||
|
|
||||||
|
This function registers and enables the handler specified by InterruptHandler for a processor
|
||||||
|
interrupt or exception type specified by InterruptType. If InterruptHandler is NULL, then the
|
||||||
|
handler for the processor interrupt or exception type specified by InterruptType is uninstalled.
|
||||||
|
The installed handler is called once for each processor interrupt or exception.
|
||||||
|
NOTE: This function should be invoked after InitializeCpuExceptionHandlers() is invoked,
|
||||||
|
otherwise EFI_UNSUPPORTED returned.
|
||||||
|
|
||||||
|
@param[in] InterruptType Defines which interrupt or exception to hook.
|
||||||
|
@param[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.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS The handler for the processor interrupt was successfully installed or uninstalled.
|
||||||
|
@retval EFI_ALREADY_STARTED InterruptHandler is not NULL, and a handler for InterruptType was
|
||||||
|
previously installed.
|
||||||
|
@retval EFI_INVALID_PARAMETER InterruptHandler is NULL, and a handler for InterruptType was not
|
||||||
|
previously installed.
|
||||||
|
@retval EFI_UNSUPPORTED The interrupt specified by InterruptType is not supported,
|
||||||
|
or this function is not supported.
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
RegisterCpuInterruptHandler (
|
||||||
|
IN EFI_EXCEPTION_TYPE InterruptType,
|
||||||
|
IN EFI_CPU_INTERRUPT_HANDLER InterruptHandler
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EXCEPTION_HANDLER_DATA *ExceptionHandlerData;
|
||||||
|
|
||||||
|
ExceptionHandlerData = GetExceptionHandlerData ();
|
||||||
|
return RegisterCpuInterruptHandlerWorker (InterruptType, InterruptHandler, ExceptionHandlerData);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Initializes all CPU exceptions entries and provides the default exception handlers.
|
Initializes all CPU exceptions entries and provides the default exception handlers.
|
||||||
|
|
||||||
@ -135,7 +171,7 @@ InitializeCpuExceptionHandlers (
|
|||||||
ASSERT (ExceptionHandlerData != NULL);
|
ASSERT (ExceptionHandlerData != NULL);
|
||||||
ExceptionHandlerData->IdtEntryCount = CPU_EXCEPTION_NUM;
|
ExceptionHandlerData->IdtEntryCount = CPU_EXCEPTION_NUM;
|
||||||
ExceptionHandlerData->ReservedVectors = ReservedVectors;
|
ExceptionHandlerData->ReservedVectors = ReservedVectors;
|
||||||
ExceptionHandlerData->ExternalInterruptHandler = NULL;
|
ExceptionHandlerData->ExternalInterruptHandler = AllocateZeroPool (sizeof (EFI_CPU_INTERRUPT_HANDLER) * ExceptionHandlerData->IdtEntryCount);
|
||||||
InitializeSpinLock (&ExceptionHandlerData->DisplayMessageSpinLock);
|
InitializeSpinLock (&ExceptionHandlerData->DisplayMessageSpinLock);
|
||||||
|
|
||||||
Status = InitializeCpuExceptionHandlersWorker (VectorInfo, ExceptionHandlerData);
|
Status = InitializeCpuExceptionHandlersWorker (VectorInfo, ExceptionHandlerData);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user