]> git.proxmox.com Git - mirror_edk2.git/blame - IntelFsp2Pkg/FspSecCore/SecFspApiChk.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / IntelFsp2Pkg / FspSecCore / SecFspApiChk.c
CommitLineData
cf1d4549
JY
1/** @file\r
2\r
630df8c8 3 Copyright (c) 2016 - 2022, Intel Corporation. All rights reserved.<BR>\r
9672cd30 4 SPDX-License-Identifier: BSD-2-Clause-Patent\r
cf1d4549
JY
5\r
6**/\r
7\r
8#include "SecFsp.h"\r
9\r
cf1d4549
JY
10/**\r
11 This function check the FSP API calling condition.\r
12\r
13 @param[in] ApiIdx Internal index of the FSP API.\r
14 @param[in] ApiParam Parameter of the FSP API.\r
15\r
16**/\r
17EFI_STATUS\r
18EFIAPI\r
19FspApiCallingCheck (\r
111f2228
MK
20 IN UINT8 ApiIdx,\r
21 IN VOID *ApiParam\r
cf1d4549
JY
22 )\r
23{\r
111f2228
MK
24 EFI_STATUS Status;\r
25 FSP_GLOBAL_DATA *FspData;\r
cf1d4549 26\r
111f2228 27 Status = EFI_SUCCESS;\r
cf1d4549 28 FspData = GetFspGlobalDataPointer ();\r
e37bb20c 29\r
cf1d4549
JY
30 if (ApiIdx == NotifyPhaseApiIndex) {\r
31 //\r
32 // NotifyPhase check\r
33 //\r
630df8c8 34 if ((FspData == NULL) || ((UINTN)FspData == MAX_ADDRESS) || ((UINTN)FspData == MAX_UINT32)) {\r
cf1d4549
JY
35 Status = EFI_UNSUPPORTED;\r
36 } else {\r
37 if (FspData->Signature != FSP_GLOBAL_DATA_SIGNATURE) {\r
38 Status = EFI_UNSUPPORTED;\r
39 }\r
40 }\r
41 } else if (ApiIdx == FspMemoryInitApiIndex) {\r
42 //\r
43 // FspMemoryInit check\r
44 //\r
630df8c8 45 if (((UINTN)FspData != MAX_ADDRESS) && ((UINTN)FspData != MAX_UINT32)) {\r
cf1d4549 46 Status = EFI_UNSUPPORTED;\r
b84f32ae
CC
47 } else if (ApiParam == NULL) {\r
48 Status = EFI_SUCCESS;\r
cf1d4549
JY
49 } else if (EFI_ERROR (FspUpdSignatureCheck (ApiIdx, ApiParam))) {\r
50 Status = EFI_INVALID_PARAMETER;\r
51 }\r
52 } else if (ApiIdx == TempRamExitApiIndex) {\r
53 //\r
54 // TempRamExit check\r
55 //\r
630df8c8 56 if ((FspData == NULL) || ((UINTN)FspData == MAX_ADDRESS) || ((UINTN)FspData == MAX_UINT32)) {\r
cf1d4549
JY
57 Status = EFI_UNSUPPORTED;\r
58 } else {\r
59 if (FspData->Signature != FSP_GLOBAL_DATA_SIGNATURE) {\r
60 Status = EFI_UNSUPPORTED;\r
61 }\r
62 }\r
f2cdb268 63 } else if ((ApiIdx == FspSiliconInitApiIndex) || (ApiIdx == FspMultiPhaseSiInitApiIndex)) {\r
cf1d4549
JY
64 //\r
65 // FspSiliconInit check\r
66 //\r
630df8c8 67 if ((FspData == NULL) || ((UINTN)FspData == MAX_ADDRESS) || ((UINTN)FspData == MAX_UINT32)) {\r
cf1d4549
JY
68 Status = EFI_UNSUPPORTED;\r
69 } else {\r
70 if (FspData->Signature != FSP_GLOBAL_DATA_SIGNATURE) {\r
71 Status = EFI_UNSUPPORTED;\r
3d35a6c2 72 } else if (ApiIdx == FspSiliconInitApiIndex) {\r
b84f32ae
CC
73 if (ApiParam == NULL) {\r
74 Status = EFI_SUCCESS;\r
75 } else if (EFI_ERROR (FspUpdSignatureCheck (FspSiliconInitApiIndex, ApiParam))) {\r
76 Status = EFI_INVALID_PARAMETER;\r
77 }\r
78\r
3d35a6c2
CC
79 //\r
80 // Reset MultiPhase NumberOfPhases to zero\r
81 //\r
82 FspData->NumberOfPhases = 0;\r
cf1d4549
JY
83 }\r
84 }\r
3d35a6c2
CC
85 } else if (ApiIdx == FspMultiPhaseMemInitApiIndex) {\r
86 if ((FspData == NULL) || ((UINTN)FspData == MAX_ADDRESS) || ((UINTN)FspData == MAX_UINT32)) {\r
87 Status = EFI_UNSUPPORTED;\r
88 }\r
48249243
HZ
89 } else if (ApiIdx == FspSmmInitApiIndex) {\r
90 //\r
91 // FspSmmInitApiIndex check\r
92 //\r
93 if ((FspData == NULL) || ((UINTN)FspData == MAX_ADDRESS) || ((UINTN)FspData == MAX_UINT32)) {\r
94 Status = EFI_UNSUPPORTED;\r
95 } else {\r
96 if (FspData->Signature != FSP_GLOBAL_DATA_SIGNATURE) {\r
97 Status = EFI_UNSUPPORTED;\r
b84f32ae
CC
98 } else if (ApiParam == NULL) {\r
99 Status = EFI_SUCCESS;\r
48249243
HZ
100 } else if (EFI_ERROR (FspUpdSignatureCheck (FspSmmInitApiIndex, ApiParam))) {\r
101 Status = EFI_INVALID_PARAMETER;\r
102 }\r
103 }\r
cf1d4549
JY
104 } else {\r
105 Status = EFI_UNSUPPORTED;\r
106 }\r
107\r
108 if (!EFI_ERROR (Status)) {\r
109 if ((ApiIdx != FspMemoryInitApiIndex)) {\r
110 //\r
111 // For FspMemoryInit, the global data is not valid yet\r
112 // The API index will be updated by SecCore after the global data\r
113 // is initialized\r
114 //\r
115 SetFspApiCallingIndex (ApiIdx);\r
116 }\r
117 }\r
e37bb20c 118\r
cf1d4549
JY
119 return Status;\r
120}\r