/** @file\r
\r
- Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>\r
- This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php.\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+ Copyright (c) 2016 - 2022, Intel Corporation. All rights reserved.<BR>\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
#include "SecFsp.h"\r
\r
-\r
/**\r
This function check the FSP API calling condition.\r
\r
EFI_STATUS\r
EFIAPI\r
FspApiCallingCheck (\r
- IN UINT8 ApiIdx,\r
- IN VOID *ApiParam\r
+ IN UINT8 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
\r
- Status = EFI_SUCCESS;\r
+ Status = EFI_SUCCESS;\r
FspData = GetFspGlobalDataPointer ();\r
- \r
+\r
if (ApiIdx == NotifyPhaseApiIndex) {\r
//\r
// NotifyPhase check\r
//\r
- if ((FspData == NULL) || ((UINT32)FspData == 0xFFFFFFFF)) {\r
+ if ((FspData == NULL) || ((UINTN)FspData == MAX_ADDRESS) || ((UINTN)FspData == MAX_UINT32)) {\r
Status = EFI_UNSUPPORTED;\r
} else {\r
if (FspData->Signature != FSP_GLOBAL_DATA_SIGNATURE) {\r
//\r
// FspMemoryInit check\r
//\r
- if ((UINT32)FspData != 0xFFFFFFFF) {\r
+ if (((UINTN)FspData != MAX_ADDRESS) && ((UINTN)FspData != MAX_UINT32)) {\r
Status = EFI_UNSUPPORTED;\r
+ } else if (ApiParam == NULL) {\r
+ Status = EFI_SUCCESS;\r
} else if (EFI_ERROR (FspUpdSignatureCheck (ApiIdx, ApiParam))) {\r
Status = EFI_INVALID_PARAMETER;\r
}\r
//\r
// TempRamExit check\r
//\r
- if ((FspData == NULL) || ((UINT32)FspData == 0xFFFFFFFF)) {\r
+ if ((FspData == NULL) || ((UINTN)FspData == MAX_ADDRESS) || ((UINTN)FspData == MAX_UINT32)) {\r
Status = EFI_UNSUPPORTED;\r
} else {\r
if (FspData->Signature != FSP_GLOBAL_DATA_SIGNATURE) {\r
Status = EFI_UNSUPPORTED;\r
}\r
}\r
- } else if (ApiIdx == FspSiliconInitApiIndex) {\r
+ } else if ((ApiIdx == FspSiliconInitApiIndex) || (ApiIdx == FspMultiPhaseSiInitApiIndex)) {\r
//\r
// FspSiliconInit check\r
//\r
- if ((FspData == NULL) || ((UINT32)FspData == 0xFFFFFFFF)) {\r
+ if ((FspData == NULL) || ((UINTN)FspData == MAX_ADDRESS) || ((UINTN)FspData == MAX_UINT32)) {\r
Status = EFI_UNSUPPORTED;\r
} else {\r
if (FspData->Signature != FSP_GLOBAL_DATA_SIGNATURE) {\r
Status = EFI_UNSUPPORTED;\r
- } else if (EFI_ERROR (FspUpdSignatureCheck (ApiIdx, ApiParam))) {\r
+ } else if (ApiIdx == FspSiliconInitApiIndex) {\r
+ if (ApiParam == NULL) {\r
+ Status = EFI_SUCCESS;\r
+ } else if (EFI_ERROR (FspUpdSignatureCheck (FspSiliconInitApiIndex, ApiParam))) {\r
+ Status = EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ //\r
+ // Reset MultiPhase NumberOfPhases to zero\r
+ //\r
+ FspData->NumberOfPhases = 0;\r
+ }\r
+ }\r
+ } else if (ApiIdx == FspMultiPhaseMemInitApiIndex) {\r
+ if ((FspData == NULL) || ((UINTN)FspData == MAX_ADDRESS) || ((UINTN)FspData == MAX_UINT32)) {\r
+ Status = EFI_UNSUPPORTED;\r
+ }\r
+ } else if (ApiIdx == FspSmmInitApiIndex) {\r
+ //\r
+ // FspSmmInitApiIndex check\r
+ //\r
+ if ((FspData == NULL) || ((UINTN)FspData == MAX_ADDRESS) || ((UINTN)FspData == MAX_UINT32)) {\r
+ Status = EFI_UNSUPPORTED;\r
+ } else {\r
+ if (FspData->Signature != FSP_GLOBAL_DATA_SIGNATURE) {\r
+ Status = EFI_UNSUPPORTED;\r
+ } else if (ApiParam == NULL) {\r
+ Status = EFI_SUCCESS;\r
+ } else if (EFI_ERROR (FspUpdSignatureCheck (FspSmmInitApiIndex, ApiParam))) {\r
Status = EFI_INVALID_PARAMETER;\r
}\r
}\r
SetFspApiCallingIndex (ApiIdx);\r
}\r
}\r
- \r
+\r
return Status;\r
}\r