//\r
// FSP_MULTI_PHASE_INIT and FSP_MULTI_PHASE_SI_INIT API functions having same prototype.\r
//\r
- UINTN FspMultiPhaseApiEntry;\r
- UINTN FspMultiPhaseApiOffset;\r
- EFI_STATUS Status;\r
- BOOLEAN InterruptState;\r
+ UINTN FspMultiPhaseApiEntry;\r
+ UINTN FspMultiPhaseApiOffset;\r
+ EFI_STATUS Status;\r
+ BOOLEAN InterruptState;\r
+ BOOLEAN IsVariableServiceRequest;\r
+ FSP_MULTI_PHASE_PARAMS *FspMultiPhaseParamsPtr;\r
+\r
+ FspMultiPhaseParamsPtr = (FSP_MULTI_PHASE_PARAMS *)FspMultiPhaseParams;\r
+ IsVariableServiceRequest = FALSE;\r
+ if ((FspMultiPhaseParamsPtr->MultiPhaseAction == EnumMultiPhaseGetVariableRequestInfo) ||\r
+ (FspMultiPhaseParamsPtr->MultiPhaseAction == EnumMultiPhaseCompleteVariableRequest))\r
+ {\r
+ IsVariableServiceRequest = TRUE;\r
+ }\r
\r
if (ComponentIndex == FspMultiPhaseMemInitApiIndex) {\r
FspHeader = (FSP_INFO_HEADER *)FspFindFspHeader (PcdGet32 (PcdFspmBaseAddress));\r
if (FspHeader == NULL) {\r
return EFI_DEVICE_ERROR;\r
+ } else if (FspHeader->SpecVersion < 0x24) {\r
+ return EFI_UNSUPPORTED;\r
}\r
\r
FspMultiPhaseApiOffset = FspHeader->FspMultiPhaseMemInitEntryOffset;\r
FspHeader = (FSP_INFO_HEADER *)FspFindFspHeader (PcdGet32 (PcdFspsBaseAddress));\r
if (FspHeader == NULL) {\r
return EFI_DEVICE_ERROR;\r
+ } else if (FspHeader->SpecVersion < 0x22) {\r
+ return EFI_UNSUPPORTED;\r
+ } else if ((FspHeader->SpecVersion < 0x24) && (IsVariableServiceRequest == TRUE)) {\r
+ return EFI_UNSUPPORTED;\r
}\r
\r
FspMultiPhaseApiOffset = FspHeader->FspMultiPhaseSiInitEntryOffset;\r
/**\r
FSP Wrapper Variable Request Handler\r
\r
- @param[in] FspHobListPtr - Pointer to FSP HobList (valid after FSP-M completed)\r
- @param[in] ComponentIndex - FSP Component which executing MultiPhase initialization.\r
+ @param[in, out] FspHobListPtr - Pointer to FSP HobList (valid after FSP-M completed)\r
+ @param[in] ComponentIndex - FSP Component which executing MultiPhase initialization.\r
\r
- @retval EFI_UNSUPPORTED FSP Wrapper cannot support the specific variable request\r
+ @retval EFI_UNSUPPORTED FSP Wrapper cannot support the specific variable request,\r
+ or FSP does not support VariableService\r
@retval EFI_STATUS Return FSP returned status\r
\r
**/\r
/**\r
FSP Wrapper MultiPhase Handler\r
\r
- @param[in] FspHobListPtr - Pointer to FSP HobList (valid after FSP-M completed)\r
- @param[in] ComponentIndex - FSP Component which executing MultiPhase initialization.\r
+ @param[in, out] FspHobListPtr - Pointer to FSP HobList (valid after FSP-M completed)\r
+ @param[in] ComponentIndex - FSP Component which executing MultiPhase initialization.\r
\r
- @retval EFI_STATUS Always return EFI_SUCCESS\r
+ @retval EFI_UNSUPPORTED Specific MultiPhase action was not supported.\r
+ @retval EFI_SUCCESS MultiPhase action were completed successfully.\r
\r
**/\r
EFI_STATUS\r