@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
(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
IN UINT32 ApiIdx\r
)\r
{\r
- EFI_SEC_PEI_HAND_OFF SecCoreData;\r
- IA32_DESCRIPTOR IdtDescriptor;\r
- SEC_IDT_TABLE IdtTableInStack;\r
- UINT32 Index;\r
- FSP_GLOBAL_DATA PeiFspData;\r
- UINT64 ExceptionHandler;\r
- UINTN IdtSize;\r
+ EFI_SEC_PEI_HAND_OFF SecCoreData;\r
+ IA32_DESCRIPTOR IdtDescriptor;\r
+ SEC_IDT_TABLE IdtTableInStack;\r
+ UINT32 Index;\r
+ FSP_GLOBAL_DATA PeiFspData;\r
+ IA32_IDT_GATE_DESCRIPTOR ExceptionHandler;\r
+ UINTN IdtSize;\r
\r
//\r
// Process all libraries constructor function linked to SecCore.\r
if (IdtDescriptor.Base == 0) {\r
ExceptionHandler = FspGetExceptionHandler (mIdtEntryTemplate);\r
for (Index = 0; Index < FixedPcdGet8 (PcdFspMaxInterruptSupported); Index++) {\r
- CopyMem ((VOID *)&IdtTableInStack.IdtTable[Index], (VOID *)&ExceptionHandler, sizeof (UINT64));\r
+ CopyMem ((VOID *)&IdtTableInStack.IdtTable[Index], (VOID *)&ExceptionHandler, sizeof (IA32_IDT_GATE_DESCRIPTOR));\r
}\r
\r
IdtSize = sizeof (IdtTableInStack.IdtTable);\r
\r
typedef\r
VOID\r
-(EFIAPI *PEI_CORE_ENTRY) (\r
+(EFIAPI *PEI_CORE_ENTRY)(\r
IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData,\r
IN CONST EFI_PEI_PPI_DESCRIPTOR *PpiList\r
);\r
// Note: For IA32, only the 4 bytes immediately preceding IDT is used to store\r
// EFI_PEI_SERVICES**\r
//\r
- UINT64 PeiService;\r
- UINT64 IdtTable[FixedPcdGet8 (PcdFspMaxInterruptSupported)];\r
+ UINT64 PeiService;\r
+ IA32_IDT_GATE_DESCRIPTOR IdtTable[FixedPcdGet8 (PcdFspMaxInterruptSupported)];\r
} SEC_IDT_TABLE;\r
\r
/**\r