]> git.proxmox.com Git - mirror_edk2.git/blob - IntelFsp2Pkg/FspSecCore/SecFspApiChk.c
IntelFsp2Pkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / IntelFsp2Pkg / FspSecCore / SecFspApiChk.c
1 /** @file
2
3 Copyright (c) 2016 - 2018, 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
20 FspApiCallingCheck (
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) {
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 (ApiIdx, 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 }