IA32_IDT_GATE_DESCRIPTOR *IdtGateDescriptor;\r
FSP_INFO_HEADER *FspInfoHeader;\r
\r
- FspInfoHeader = (FSP_INFO_HEADER *)(GetFspBaseAddress() + FSP_INFO_HEADER_OFF);\r
+ FspInfoHeader = (FSP_INFO_HEADER *)AsmGetFspInfoHeader();\r
ExceptionHandler = IdtEntryTemplate;\r
IdtGateDescriptor = (IA32_IDT_GATE_DESCRIPTOR *)&ExceptionHandler;\r
Entry = (IdtGateDescriptor->Bits.OffsetHigh << 16) | IdtGateDescriptor->Bits.OffsetLow;\r
TopOfCar = PcdGet32 (PcdTemporaryRamBase) + PcdGet32 (PcdTemporaryRamSize);\r
\r
FspPlatformData->DataPtr = NULL;\r
- FspPlatformData->CodeRegionSize = 0;\r
+ FspPlatformData->MicrocodeRegionBase = 0;\r
+ FspPlatformData->MicrocodeRegionSize = 0;\r
FspPlatformData->CodeRegionBase = 0;\r
- FspPlatformData->MicorcodeRegionBase = 0;\r
- FspPlatformData->MicorcodeRegionSize = 0;\r
+ FspPlatformData->CodeRegionSize = 0;\r
\r
//\r
// Pointer to the size field\r
//\r
DwordSize = 4;\r
StackPtr = StackPtr - 1 - DwordSize;\r
- CopyMem (&(FspPlatformData->CodeRegionBase), StackPtr, (DwordSize << 2));\r
+ CopyMem (&(FspPlatformData->MicrocodeRegionBase), StackPtr, (DwordSize << 2));\r
StackPtr--;\r
} else if (*(StackPtr - 1) == FSP_PER0_SIGNATURE) {\r
//\r
It needs to be done as soon as possible after the stack is setup.\r
\r
@param[in,out] PeiFspData Pointer of the FSP global data.\r
- @param[in] BootloaderStack Bootloader stack.\r
+ @param[in] BootLoaderStack BootLoader stack.\r
@param[in] ApiIdx The index of the FSP API.\r
\r
**/\r
VOID\r
FspGlobalDataInit (\r
IN OUT FSP_GLOBAL_DATA *PeiFspData,\r
- IN UINT32 BootloaderStack,\r
+ IN UINT32 BootLoaderStack,\r
IN UINT8 ApiIdx\r
)\r
{\r
ZeroMem ((VOID *)PeiFspData, sizeof(FSP_GLOBAL_DATA));\r
\r
PeiFspData->Signature = FSP_GLOBAL_DATA_SIGNATURE;\r
- PeiFspData->CoreStack = BootloaderStack;\r
+ PeiFspData->CoreStack = BootLoaderStack;\r
PeiFspData->PerfIdx = 2;\r
\r
SetFspMeasurePoint (FSP_PERF_ID_API_FSPINIT_ENTRY);\r
// Get FSP Header offset\r
// It may have multiple FVs, so look into the last one for FSP header\r
//\r
- PeiFspData->FspInfoHeader = (FSP_INFO_HEADER *)(GetFspBaseAddress() + FSP_INFO_HEADER_OFF);\r
+ PeiFspData->FspInfoHeader = (FSP_INFO_HEADER *)AsmGetFspInfoHeader();\r
SecGetPlatformData (PeiFspData);\r
\r
//\r
This function check the FSP API calling condition.\r
\r
@param[in] ApiIdx Internal index of the FSP API.\r
+ @param[in] ApiParam Parameter of the FSP API.\r
\r
**/\r
EFI_STATUS\r
EFIAPI\r
FspApiCallingCheck (\r
- UINT32 ApiIdx\r
+ IN UINT32 ApiIdx,\r
+ IN VOID *ApiParam\r
)\r
{\r
- EFI_STATUS Status;\r
- FSP_GLOBAL_DATA *FspData;\r
+ EFI_STATUS Status;\r
+ FSP_GLOBAL_DATA *FspData;\r
+ FSP_INIT_PARAMS *FspInitParams;\r
+ FSP_INIT_RT_COMMON_BUFFER *FspRtBuffer;\r
+\r
+ FspInitParams = (FSP_INIT_PARAMS *) ApiParam;\r
+ FspRtBuffer = ((FSP_INIT_RT_COMMON_BUFFER *)FspInitParams->RtBufferPtr);\r
\r
Status = EFI_SUCCESS;\r
- FspData = GetFspGlobalDataPointer ();\r
+ FspData = GetFspGlobalDataPointer ();\r
if (ApiIdx == 1) {\r
//\r
// FspInit check\r
//\r
if ((UINT32)FspData != 0xFFFFFFFF) {\r
Status = EFI_UNSUPPORTED;\r
+ } else if ((FspRtBuffer == NULL) || ((FspRtBuffer->BootLoaderTolumSize % EFI_PAGE_SIZE) != 0)) {\r
+ Status = EFI_INVALID_PARAMETER;\r
}\r
} else if (ApiIdx == 2) {\r
//\r
//\r
if ((UINT32)FspData != 0xFFFFFFFF) {\r
Status = EFI_UNSUPPORTED;\r
+ } else if ((FspRtBuffer == NULL) || ((FspRtBuffer->BootLoaderTolumSize % EFI_PAGE_SIZE) != 0)) {\r
+ Status = EFI_INVALID_PARAMETER;\r
}\r
} else if (ApiIdx == 4) {\r
//\r
\r
return Status;\r
}\r
+\r
+/**\r
+ This function gets the boot FV offset in FSP.\r
+ @return the boot firmware volumen offset inside FSP binary\r
+\r
+**/\r
+UINT32\r
+EFIAPI\r
+GetBootFirmwareVolumeOffset (\r
+ VOID\r
+ )\r
+{ \r
+ return PcdGet32 (PcdFspBootFirmwareVolumeBase) - PcdGet32 (PcdFspAreaBaseAddress);\r
+}\r