]> git.proxmox.com Git - mirror_edk2.git/blobdiff - UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c
UefiCpuPkg/ExceptionLib: Update UpdateIdtTable()
[mirror_edk2.git] / UefiCpuPkg / Library / CpuExceptionHandlerLib / DxeException.c
index 92de04ce08d879c9311cf3c54dca6cb6660a3285..cffb13aea98423d9b080c0a8955b39fd0fc2ea06 100644 (file)
@@ -83,20 +83,22 @@ InitializeCpuInterruptHandlers (
   UINTN                              Index;\r
   UINTN                              InterruptEntry;\r
   UINT8                              *InterruptEntryCode;\r
+  RESERVED_VECTORS_DATA              *ReservedVectors;\r
+  EFI_CPU_INTERRUPT_HANDLER          *ExternalInterruptHandler;\r
 \r
-  mReservedVectors = AllocatePool (sizeof (RESERVED_VECTORS_DATA) * CPU_INTERRUPT_NUM);\r
-  ASSERT (mReservedVectors != NULL);\r
-  SetMem ((VOID *) mReservedVectors, sizeof (RESERVED_VECTORS_DATA) * CPU_INTERRUPT_NUM, 0xff);\r
+  ReservedVectors = AllocatePool (sizeof (RESERVED_VECTORS_DATA) * CPU_INTERRUPT_NUM);\r
+  ASSERT (ReservedVectors != NULL);\r
+  SetMem ((VOID *) ReservedVectors, sizeof (RESERVED_VECTORS_DATA) * CPU_INTERRUPT_NUM, 0xff);\r
   if (VectorInfo != NULL) {\r
-    Status = ReadAndVerifyVectorInfo (VectorInfo, mReservedVectors, CPU_INTERRUPT_NUM);\r
+    Status = ReadAndVerifyVectorInfo (VectorInfo, ReservedVectors, CPU_INTERRUPT_NUM);\r
     if (EFI_ERROR (Status)) {\r
-      FreePool (mReservedVectors);\r
+      FreePool (ReservedVectors);\r
       return EFI_INVALID_PARAMETER;\r
     }\r
   }\r
   InitializeSpinLock (&mDisplayMessageSpinLock);\r
-  mExternalInterruptHandler = AllocateZeroPool (sizeof (EFI_CPU_INTERRUPT_HANDLER) * CPU_INTERRUPT_NUM);\r
-  ASSERT (mExternalInterruptHandler != NULL);\r
+  ExternalInterruptHandler = AllocateZeroPool (sizeof (EFI_CPU_INTERRUPT_HANDLER) * CPU_INTERRUPT_NUM);\r
+  ASSERT (ExternalInterruptHandler != NULL);\r
 \r
   //\r
   // Read IDT descriptor and calculate IDT size\r
@@ -130,7 +132,12 @@ InitializeCpuInterruptHandlers (
   }\r
 \r
   TemplateMap.ExceptionStart = (UINTN) InterruptEntryCode;\r
-  UpdateIdtTable (IdtTable, &TemplateMap, CPU_INTERRUPT_NUM);\r
+  mExceptionHandlerData.IdtEntryCount            = CPU_INTERRUPT_NUM;\r
+  mExceptionHandlerData.ReservedVectors          = ReservedVectors;\r
+  mExceptionHandlerData.ExternalInterruptHandler = ExternalInterruptHandler;\r
+  InitializeSpinLock (&mExceptionHandlerData.DisplayMessageSpinLock);\r
+\r
+  UpdateIdtTable (IdtTable, &TemplateMap, &mExceptionHandlerData);\r
 \r
   //\r
   // Load Interrupt Descriptor Table\r