X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=UefiCpuPkg%2FLibrary%2FCpuExceptionHandlerLib%2FDxeException.c;h=cffb13aea98423d9b080c0a8955b39fd0fc2ea06;hp=92de04ce08d879c9311cf3c54dca6cb6660a3285;hb=9db15f8148081688a0679b76a7258e9fc66107bc;hpb=ab95e54dc4ec949fd13e8bdda1c7423469e08c3d diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c b/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c index 92de04ce08..cffb13aea9 100644 --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c @@ -83,20 +83,22 @@ InitializeCpuInterruptHandlers ( UINTN Index; UINTN InterruptEntry; UINT8 *InterruptEntryCode; + RESERVED_VECTORS_DATA *ReservedVectors; + EFI_CPU_INTERRUPT_HANDLER *ExternalInterruptHandler; - mReservedVectors = AllocatePool (sizeof (RESERVED_VECTORS_DATA) * CPU_INTERRUPT_NUM); - ASSERT (mReservedVectors != NULL); - SetMem ((VOID *) mReservedVectors, sizeof (RESERVED_VECTORS_DATA) * CPU_INTERRUPT_NUM, 0xff); + ReservedVectors = AllocatePool (sizeof (RESERVED_VECTORS_DATA) * CPU_INTERRUPT_NUM); + ASSERT (ReservedVectors != NULL); + SetMem ((VOID *) ReservedVectors, sizeof (RESERVED_VECTORS_DATA) * CPU_INTERRUPT_NUM, 0xff); if (VectorInfo != NULL) { - Status = ReadAndVerifyVectorInfo (VectorInfo, mReservedVectors, CPU_INTERRUPT_NUM); + Status = ReadAndVerifyVectorInfo (VectorInfo, ReservedVectors, CPU_INTERRUPT_NUM); if (EFI_ERROR (Status)) { - FreePool (mReservedVectors); + FreePool (ReservedVectors); return EFI_INVALID_PARAMETER; } } InitializeSpinLock (&mDisplayMessageSpinLock); - mExternalInterruptHandler = AllocateZeroPool (sizeof (EFI_CPU_INTERRUPT_HANDLER) * CPU_INTERRUPT_NUM); - ASSERT (mExternalInterruptHandler != NULL); + ExternalInterruptHandler = AllocateZeroPool (sizeof (EFI_CPU_INTERRUPT_HANDLER) * CPU_INTERRUPT_NUM); + ASSERT (ExternalInterruptHandler != NULL); // // Read IDT descriptor and calculate IDT size @@ -130,7 +132,12 @@ InitializeCpuInterruptHandlers ( } TemplateMap.ExceptionStart = (UINTN) InterruptEntryCode; - UpdateIdtTable (IdtTable, &TemplateMap, CPU_INTERRUPT_NUM); + mExceptionHandlerData.IdtEntryCount = CPU_INTERRUPT_NUM; + mExceptionHandlerData.ReservedVectors = ReservedVectors; + mExceptionHandlerData.ExternalInterruptHandler = ExternalInterruptHandler; + InitializeSpinLock (&mExceptionHandlerData.DisplayMessageSpinLock); + + UpdateIdtTable (IdtTable, &TemplateMap, &mExceptionHandlerData); // // Load Interrupt Descriptor Table