3 Copyright (c) 2016 - 2022, Intel Corporation. All rights reserved.<BR>
4 SPDX-License-Identifier: BSD-2-Clause-Patent
11 This function check the FSP API calling condition.
13 @param[in] ApiIdx Internal index of the FSP API.
14 @param[in] ApiParam Parameter of the FSP API.
25 FSP_GLOBAL_DATA
*FspData
;
28 FspData
= GetFspGlobalDataPointer ();
30 if (ApiIdx
== NotifyPhaseApiIndex
) {
34 if ((FspData
== NULL
) || ((UINTN
)FspData
== MAX_ADDRESS
) || ((UINTN
)FspData
== MAX_UINT32
)) {
35 Status
= EFI_UNSUPPORTED
;
37 if (FspData
->Signature
!= FSP_GLOBAL_DATA_SIGNATURE
) {
38 Status
= EFI_UNSUPPORTED
;
41 } else if (ApiIdx
== FspMemoryInitApiIndex
) {
43 // FspMemoryInit check
45 if (((UINTN
)FspData
!= MAX_ADDRESS
) && ((UINTN
)FspData
!= MAX_UINT32
)) {
46 Status
= EFI_UNSUPPORTED
;
47 } else if (ApiParam
== NULL
) {
49 } else if (EFI_ERROR (FspUpdSignatureCheck (ApiIdx
, ApiParam
))) {
50 Status
= EFI_INVALID_PARAMETER
;
52 } else if (ApiIdx
== TempRamExitApiIndex
) {
56 if ((FspData
== NULL
) || ((UINTN
)FspData
== MAX_ADDRESS
) || ((UINTN
)FspData
== MAX_UINT32
)) {
57 Status
= EFI_UNSUPPORTED
;
59 if (FspData
->Signature
!= FSP_GLOBAL_DATA_SIGNATURE
) {
60 Status
= EFI_UNSUPPORTED
;
63 } else if ((ApiIdx
== FspSiliconInitApiIndex
) || (ApiIdx
== FspMultiPhaseSiInitApiIndex
)) {
65 // FspSiliconInit check
67 if ((FspData
== NULL
) || ((UINTN
)FspData
== MAX_ADDRESS
) || ((UINTN
)FspData
== MAX_UINT32
)) {
68 Status
= EFI_UNSUPPORTED
;
70 if (FspData
->Signature
!= FSP_GLOBAL_DATA_SIGNATURE
) {
71 Status
= EFI_UNSUPPORTED
;
72 } else if (ApiIdx
== FspSiliconInitApiIndex
) {
73 if (ApiParam
== NULL
) {
75 } else if (EFI_ERROR (FspUpdSignatureCheck (FspSiliconInitApiIndex
, ApiParam
))) {
76 Status
= EFI_INVALID_PARAMETER
;
80 // Reset MultiPhase NumberOfPhases to zero
82 FspData
->NumberOfPhases
= 0;
85 } else if (ApiIdx
== FspMultiPhaseMemInitApiIndex
) {
86 if ((FspData
== NULL
) || ((UINTN
)FspData
== MAX_ADDRESS
) || ((UINTN
)FspData
== MAX_UINT32
)) {
87 Status
= EFI_UNSUPPORTED
;
89 } else if (ApiIdx
== FspSmmInitApiIndex
) {
91 // FspSmmInitApiIndex check
93 if ((FspData
== NULL
) || ((UINTN
)FspData
== MAX_ADDRESS
) || ((UINTN
)FspData
== MAX_UINT32
)) {
94 Status
= EFI_UNSUPPORTED
;
96 if (FspData
->Signature
!= FSP_GLOBAL_DATA_SIGNATURE
) {
97 Status
= EFI_UNSUPPORTED
;
98 } else if (ApiParam
== NULL
) {
100 } else if (EFI_ERROR (FspUpdSignatureCheck (FspSmmInitApiIndex
, ApiParam
))) {
101 Status
= EFI_INVALID_PARAMETER
;
105 Status
= EFI_UNSUPPORTED
;
108 if (!EFI_ERROR (Status
)) {
109 if ((ApiIdx
!= FspMemoryInitApiIndex
)) {
111 // For FspMemoryInit, the global data is not valid yet
112 // The API index will be updated by SecCore after the global data
115 SetFspApiCallingIndex (ApiIdx
);