1 /** @file 2 3 Copyright (c) 2016 - 2020, Intel Corporation. All rights reserved.<BR> 4 SPDX-License-Identifier: BSD-2-Clause-Patent 5 6 **/ 7 8 #include "SecFsp.h" 9 10 11 /** 12 This function check the FSP API calling condition. 13 14 @param[in] ApiIdx Internal index of the FSP API. 15 @param[in] ApiParam Parameter of the FSP API. 16 17 **/ 18 EFI_STATUS 19 EFIAPI FspApiCallingCheck(IN UINT8 ApiIdx,IN VOID * ApiParam)20FspApiCallingCheck ( 21 IN UINT8 ApiIdx, 22 IN VOID *ApiParam 23 ) 24 { 25 EFI_STATUS Status; 26 FSP_GLOBAL_DATA *FspData; 27 28 Status = EFI_SUCCESS; 29 FspData = GetFspGlobalDataPointer (); 30 31 if (ApiIdx == NotifyPhaseApiIndex) { 32 // 33 // NotifyPhase check 34 // 35 if ((FspData == NULL) || ((UINT32)FspData == 0xFFFFFFFF)) { 36 Status = EFI_UNSUPPORTED; 37 } else { 38 if (FspData->Signature != FSP_GLOBAL_DATA_SIGNATURE) { 39 Status = EFI_UNSUPPORTED; 40 } 41 } 42 } else if (ApiIdx == FspMemoryInitApiIndex) { 43 // 44 // FspMemoryInit check 45 // 46 if ((UINT32)FspData != 0xFFFFFFFF) { 47 Status = EFI_UNSUPPORTED; 48 } else if (EFI_ERROR (FspUpdSignatureCheck (ApiIdx, ApiParam))) { 49 Status = EFI_INVALID_PARAMETER; 50 } 51 } else if (ApiIdx == TempRamExitApiIndex) { 52 // 53 // TempRamExit check 54 // 55 if ((FspData == NULL) || ((UINT32)FspData == 0xFFFFFFFF)) { 56 Status = EFI_UNSUPPORTED; 57 } else { 58 if (FspData->Signature != FSP_GLOBAL_DATA_SIGNATURE) { 59 Status = EFI_UNSUPPORTED; 60 } 61 } 62 } else if ((ApiIdx == FspSiliconInitApiIndex) || (ApiIdx == FspMultiPhaseSiInitApiIndex)) { 63 // 64 // FspSiliconInit check 65 // 66 if ((FspData == NULL) || ((UINT32)FspData == 0xFFFFFFFF)) { 67 Status = EFI_UNSUPPORTED; 68 } else { 69 if (FspData->Signature != FSP_GLOBAL_DATA_SIGNATURE) { 70 Status = EFI_UNSUPPORTED; 71 } else if (EFI_ERROR (FspUpdSignatureCheck (FspSiliconInitApiIndex, ApiParam))) { 72 Status = EFI_INVALID_PARAMETER; 73 } 74 } 75 } else { 76 Status = EFI_UNSUPPORTED; 77 } 78 79 if (!EFI_ERROR (Status)) { 80 if ((ApiIdx != FspMemoryInitApiIndex)) { 81 // 82 // For FspMemoryInit, the global data is not valid yet 83 // The API index will be updated by SecCore after the global data 84 // is initialized 85 // 86 SetFspApiCallingIndex (ApiIdx); 87 } 88 } 89 90 return Status; 91 } 92