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
}\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