summaryrefslogtreecommitdiffstats
path: root/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeSmmCpuException.c
diff options
context:
space:
mode:
authorvanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524>2012-03-15 05:24:07 +0000
committervanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524>2012-03-15 05:24:07 +0000
commit8f07f895fb03800e54c23225639116f34d2ce7b1 (patch)
tree36fd4e2235cba7e6f55574e1b8dd8f60a0919e9d /UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeSmmCpuException.c
parent1e172d6bbfeb75d3a5d9f0066eee97789fc617b7 (diff)
downloadedk2-8f07f895fb03800e54c23225639116f34d2ce7b1.tar.gz
edk2-8f07f895fb03800e54c23225639116f34d2ce7b1.tar.bz2
edk2-8f07f895fb03800e54c23225639116f34d2ce7b1.zip
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
Diffstat (limited to 'UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeSmmCpuException.c')
-rw-r--r--UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeSmmCpuException.c84
1 files changed, 84 insertions, 0 deletions
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.<BR>
+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 <PiDxe.h>
+
+#include "CpuExceptionCommon.h"
+#include <Library/SynchronizationLib.h>
+
+//
+// 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 ();
+}
+