• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /** @file
2 
3   Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
4   This program and the accompanying materials
5   are licensed and made available under the terms and conditions of the BSD License
6   which accompanies this distribution.  The full text of the license may be found at
7   http://opensource.org/licenses/bsd-license.php.
8 
9   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11 
12 **/
13 
14 #include "SecFsp.h"
15 
16 
17 /**
18   This function check the FSP API calling condition.
19 
20   @param[in]  ApiIdx           Internal index of the FSP API.
21   @param[in]  ApiParam         Parameter of the FSP API.
22 
23 **/
24 EFI_STATUS
25 EFIAPI
FspApiCallingCheck(IN UINT8 ApiIdx,IN VOID * ApiParam)26 FspApiCallingCheck (
27   IN UINT8     ApiIdx,
28   IN VOID     *ApiParam
29   )
30 {
31   EFI_STATUS                Status;
32   FSP_GLOBAL_DATA           *FspData;
33 
34   Status = EFI_SUCCESS;
35   FspData = GetFspGlobalDataPointer ();
36 
37   if (ApiIdx == NotifyPhaseApiIndex) {
38     //
39     // NotifyPhase check
40     //
41     if ((FspData == NULL) || ((UINT32)FspData == 0xFFFFFFFF)) {
42       Status = EFI_UNSUPPORTED;
43     } else {
44       if (FspData->Signature != FSP_GLOBAL_DATA_SIGNATURE) {
45         Status = EFI_UNSUPPORTED;
46       }
47     }
48   } else if (ApiIdx == FspMemoryInitApiIndex) {
49     //
50     // FspMemoryInit check
51     //
52     if ((UINT32)FspData != 0xFFFFFFFF) {
53       Status = EFI_UNSUPPORTED;
54     } else if (EFI_ERROR (FspUpdSignatureCheck (ApiIdx, ApiParam))) {
55       Status = EFI_INVALID_PARAMETER;
56     }
57   } else if (ApiIdx == TempRamExitApiIndex) {
58     //
59     // TempRamExit check
60     //
61     if ((FspData == NULL) || ((UINT32)FspData == 0xFFFFFFFF)) {
62       Status = EFI_UNSUPPORTED;
63     } else {
64       if (FspData->Signature != FSP_GLOBAL_DATA_SIGNATURE) {
65         Status = EFI_UNSUPPORTED;
66       }
67     }
68   } else if (ApiIdx == FspSiliconInitApiIndex) {
69     //
70     // FspSiliconInit check
71     //
72     if ((FspData == NULL) || ((UINT32)FspData == 0xFFFFFFFF)) {
73       Status = EFI_UNSUPPORTED;
74     } else {
75       if (FspData->Signature != FSP_GLOBAL_DATA_SIGNATURE) {
76         Status = EFI_UNSUPPORTED;
77       } else if (EFI_ERROR (FspUpdSignatureCheck (ApiIdx, ApiParam))) {
78         Status = EFI_INVALID_PARAMETER;
79       }
80     }
81   } else {
82     Status = EFI_UNSUPPORTED;
83   }
84 
85   if (!EFI_ERROR (Status)) {
86     if ((ApiIdx != FspMemoryInitApiIndex)) {
87       //
88       // For FspMemoryInit, the global data is not valid yet
89       // The API index will be updated by SecCore after the global data
90       // is initialized
91       //
92       SetFspApiCallingIndex (ApiIdx);
93     }
94   }
95 
96   return Status;
97 }
98