From 8f07f895fb03800e54c23225639116f34d2ce7b1 Mon Sep 17 00:00:00 2001 From: vanjeff Date: Thu, 15 Mar 2012 05:24:07 +0000 Subject: Import two CPU Exception Handler Library instances: SecPeiCpuExceptionHandler.inf and DxeSmmCpuExceptionHandler.inf. Signed-off-by: vanjeff Reviewed-by: jyao1 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13098 6f19259b-4bc3-4df7-8a09-765794883524 --- .../CpuExceptionHandlerLib/DxeSmmCpuException.c | 84 ++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeSmmCpuException.c (limited to 'UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeSmmCpuException.c') diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeSmmCpuException.c b/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeSmmCpuException.c new file mode 100644 index 0000000000..3110687284 --- /dev/null +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeSmmCpuException.c @@ -0,0 +1,84 @@ +/** @file + CPU Exception Library provides DXE/SMM CPU exception handler. + +Copyright (c) 2012, 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 that 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. + +**/ + +#include + +#include "CpuExceptionCommon.h" +#include + +// +// Spinlock for CPU information display +// +SPIN_LOCK mDisplayMessageSpinLock; + +// +// Image align size for DXE/SMM +// +CONST UINTN mImageAlignSize = SIZE_4KB; + +/** + Common exception handler. + + @param ExceptionType Exception type. + @param SystemContext Pointer to EFI_SYSTEM_CONTEXT. +**/ +VOID +EFIAPI +CommonExceptionHandler ( + IN EFI_EXCEPTION_TYPE ExceptionType, + IN EFI_SYSTEM_CONTEXT SystemContext + ) +{ + // + // Get Spinlock to display CPU information + // + while (!AcquireSpinLockOrFail (&mDisplayMessageSpinLock)) { + CpuPause (); + } + + // + // Display ExceptionType, CPU information and Image information + // + DumpCpuContent (ExceptionType, SystemContext); + + // + // Release Spinlock + // + ReleaseSpinLock (&mDisplayMessageSpinLock); + + // + // Enter a dead loop. + // + CpuDeadLoop (); +} + +/** + Setup CPU exception handlers. + + This API will setups the CPU exception handler to display CPU contents and run into + CpuDeadLoop(). + @Note: Before invoking this API, caller must allocate memory for IDT table and load + IDTR by AsmWriteIdtr(). + +**/ +VOID +EFIAPI +SetupCpuExceptionHandlers ( + IN VOID + ) +{ + InitializeSpinLock (&mDisplayMessageSpinLock); + InternalSetupCpuExceptionHandlers (); +} + -- cgit v1.2.3