\r
CONST UINTN mDoFarReturnFlag = 0;\r
\r
-RESERVED_VECTORS_DATA mReservedVectorsData[CPU_EXCEPTION_NUM];\r
-EFI_CPU_INTERRUPT_HANDLER mExternalInterruptHandlerTable[CPU_EXCEPTION_NUM];\r
-UINTN mEnabledInterruptNum = 0;\r
-\r
-EXCEPTION_HANDLER_DATA mExceptionHandlerData;\r
+RESERVED_VECTORS_DATA mReservedVectorsData[CPU_INTERRUPT_NUM];\r
+EFI_CPU_INTERRUPT_HANDLER mExternalInterruptHandlerTable[CPU_INTERRUPT_NUM];\r
+EXCEPTION_HANDLER_DATA mExceptionHandlerData = {\r
+ 0, // To be fixed\r
+ 0, // To be fixed\r
+ mReservedVectorsData,\r
+ mExternalInterruptHandlerTable\r
+};\r
\r
UINT8 mNewStack[CPU_STACK_SWITCH_EXCEPTION_NUMBER *\r
CPU_KNOWN_GOOD_STACK_SIZE];\r
IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL\r
)\r
{\r
- mExceptionHandlerData.ReservedVectors = mReservedVectorsData;\r
- mExceptionHandlerData.ExternalInterruptHandler = mExternalInterruptHandlerTable;\r
InitializeSpinLock (&mExceptionHandlerData.DisplayMessageSpinLock);\r
return InitializeCpuExceptionHandlersWorker (VectorInfo, &mExceptionHandlerData);\r
}\r
IA32_DESCRIPTOR IdtDescriptor;\r
UINTN IdtEntryCount;\r
EXCEPTION_HANDLER_TEMPLATE_MAP TemplateMap;\r
- UINTN Index;\r
- UINTN InterruptEntry;\r
- UINT8 *InterruptEntryCode;\r
- RESERVED_VECTORS_DATA *ReservedVectors;\r
- EFI_CPU_INTERRUPT_HANDLER *ExternalInterruptHandler;\r
-\r
- Status = gBS->AllocatePool (\r
- EfiBootServicesCode,\r
- sizeof (RESERVED_VECTORS_DATA) * CPU_INTERRUPT_NUM,\r
- (VOID **)&ReservedVectors\r
- );\r
- ASSERT (!EFI_ERROR (Status) && ReservedVectors != NULL);\r
- SetMem ((VOID *)ReservedVectors, sizeof (RESERVED_VECTORS_DATA) * CPU_INTERRUPT_NUM, 0xff);\r
+\r
+ SetMem ((VOID *)mReservedVectorsData, sizeof (RESERVED_VECTORS_DATA) * CPU_INTERRUPT_NUM, 0xff);\r
if (VectorInfo != NULL) {\r
- Status = ReadAndVerifyVectorInfo (VectorInfo, ReservedVectors, CPU_INTERRUPT_NUM);\r
+ Status = ReadAndVerifyVectorInfo (VectorInfo, mReservedVectorsData, CPU_INTERRUPT_NUM);\r
if (EFI_ERROR (Status)) {\r
- FreePool (ReservedVectors);\r
return EFI_INVALID_PARAMETER;\r
}\r
}\r
\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
AsmGetTemplateAddressMap (&TemplateMap);\r
ASSERT (TemplateMap.ExceptionStubHeaderSize <= HOOKAFTER_STUB_SIZE);\r
\r
- Status = gBS->AllocatePool (\r
- EfiBootServicesCode,\r
- TemplateMap.ExceptionStubHeaderSize * CPU_INTERRUPT_NUM,\r
- (VOID **)&InterruptEntryCode\r
- );\r
- ASSERT (!EFI_ERROR (Status) && InterruptEntryCode != NULL);\r
-\r
- InterruptEntry = (UINTN)InterruptEntryCode;\r
- for (Index = 0; Index < CPU_INTERRUPT_NUM; Index++) {\r
- CopyMem (\r
- (VOID *)InterruptEntry,\r
- (VOID *)TemplateMap.ExceptionStart,\r
- TemplateMap.ExceptionStubHeaderSize\r
- );\r
- AsmVectorNumFixup ((VOID *)InterruptEntry, (UINT8)Index, (VOID *)TemplateMap.ExceptionStart);\r
- InterruptEntry += TemplateMap.ExceptionStubHeaderSize;\r
- }\r
-\r
- TemplateMap.ExceptionStart = (UINTN)InterruptEntryCode;\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