@return FSP specific IDT gate descriptor.\r
\r
**/\r
-UINT64\r
+IA32_IDT_GATE_DESCRIPTOR\r
FspGetExceptionHandler (\r
IN UINT64 IdtEntryTemplate\r
)\r
{\r
UINT32 Entry;\r
- UINT64 ExceptionHandler;\r
+ IA32_IDT_GATE_DESCRIPTOR ExceptionHandler;\r
IA32_IDT_GATE_DESCRIPTOR *IdtGateDescriptor;\r
FSP_INFO_HEADER *FspInfoHeader;\r
\r
+ ZeroMem ((VOID *)&ExceptionHandler, sizeof (IA32_IDT_GATE_DESCRIPTOR));\r
FspInfoHeader = (FSP_INFO_HEADER *)(UINTN)AsmGetFspInfoHeader ();\r
- ExceptionHandler = IdtEntryTemplate;\r
- IdtGateDescriptor = (IA32_IDT_GATE_DESCRIPTOR *)&ExceptionHandler;\r
+ *(UINT64 *) &ExceptionHandler = IdtEntryTemplate;\r
+ IdtGateDescriptor = &ExceptionHandler;\r
Entry = (IdtGateDescriptor->Bits.OffsetHigh << 16) | IdtGateDescriptor->Bits.OffsetLow;\r
Entry = FspInfoHeader->ImageBase + FspInfoHeader->ImageSize - (~Entry + 1);\r
IdtGateDescriptor->Bits.OffsetHigh = (UINT16)(Entry >> 16);\r
ZeroMem ((VOID *)PeiFspData, sizeof (FSP_GLOBAL_DATA));\r
\r
PeiFspData->Signature = FSP_GLOBAL_DATA_SIGNATURE;\r
- PeiFspData->Version = 0;\r
+ PeiFspData->Version = FSP_GLOBAL_DATA_VERSION;\r
PeiFspData->CoreStack = BootLoaderStack;\r
PeiFspData->PerfIdx = 2;\r
PeiFspData->PerfSig = FSP_PERFORMANCE_DATA_SIGNATURE;\r
+ //\r
+ // Cache FspHobList pointer passed by bootloader via ApiParameter2\r
+ //\r
+ PeiFspData->FspHobListPtr = (VOID **)GetFspApiParameter2 ();\r
\r
SetFspMeasurePoint (FSP_PERF_ID_API_FSP_MEMORY_INIT_ENTRY);\r
\r
(PeiFspData->FspInfoHeader->ImageRevision >> 24) & 0xFF, \\r
(PeiFspData->FspInfoHeader->ImageRevision >> 16) & 0xFF, \\r
(PeiFspData->FspInfoHeader->HeaderRevision >= 6) ? \\r
- (((PeiFspData->FspInfoHeader->ImageRevision >> 8) & 0xFF) | (PeiFspData->FspInfoHeader->ExtendedImageRevision & 0xFF00)) :\\r
- ((PeiFspData->FspInfoHeader->ImageRevision >> 8) & 0xFF), \\r
+ (((PeiFspData->FspInfoHeader->ImageRevision >> 8) & 0xFF) | (PeiFspData->FspInfoHeader->ExtendedImageRevision & 0xFF00)) : \\r
+ ((PeiFspData->FspInfoHeader->ImageRevision >> 8) & 0xFF), \\r
(PeiFspData->FspInfoHeader->HeaderRevision >= 6) ? \\r
- ((PeiFspData->FspInfoHeader->ImageRevision & 0xFF) | ((PeiFspData->FspInfoHeader->ExtendedImageRevision & 0xFF) << 8)): \\r
- (PeiFspData->FspInfoHeader->ImageRevision & 0xFF)\r
+ ((PeiFspData->FspInfoHeader->ImageRevision & 0xFF) | ((PeiFspData->FspInfoHeader->ExtendedImageRevision & 0xFF) << 8)) : \\r
+ (PeiFspData->FspInfoHeader->ImageRevision & 0xFF)\r
));\r
}\r
\r