1 /** @file
2 This PEIM initialize FSP.
3
4 Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php.
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13 **/
14
15
16 #include "FspInitPei.h"
17
18 /**
19 This is the entrypoint of PEIM
20
21 @param[in] FileHandle Handle of the file being invoked.
22 @param[in] PeiServices Describes the list of possible PEI Services.
23
24 @retval EFI_SUCCESS if it completed successfully.
25 **/
26 EFI_STATUS
27 EFIAPI
FspPeiEntryPoint(IN EFI_PEI_FILE_HANDLE FileHandle,IN CONST EFI_PEI_SERVICES ** PeiServices)28 FspPeiEntryPoint (
29 IN EFI_PEI_FILE_HANDLE FileHandle,
30 IN CONST EFI_PEI_SERVICES **PeiServices
31 )
32 {
33 FSP_INFO_HEADER *FspHeader;
34 UINT8 PcdFspApiVersion;
35
36 DEBUG ((DEBUG_INFO, "FspPeiEntryPoint\n"));
37 PcdFspApiVersion = 1;
38
39 FspHeader = FspFindFspHeader (PcdGet32 (PcdFlashFvFspBase));
40 DEBUG ((DEBUG_INFO, "FspHeader - 0x%x\n", FspHeader));
41 if (FspHeader == NULL) {
42 return EFI_DEVICE_ERROR;
43 }
44
45 ASSERT (FspHeader->TempRamInitEntryOffset != 0);
46 ASSERT (FspHeader->FspInitEntryOffset != 0);
47 ASSERT (FspHeader->NotifyPhaseEntryOffset != 0);
48
49 if ((PcdGet8 (PcdFspApiVersion) >= 2) &&
50 (FspHeader->HeaderRevision >= FSP_HEADER_REVISION_2) &&
51 (FspHeader->ApiEntryNum >= 6) ) {
52 ASSERT (FspHeader->FspMemoryInitEntryOffset != 0);
53 ASSERT (FspHeader->TempRamExitEntryOffset != 0);
54 ASSERT (FspHeader->FspSiliconInitEntryOffset != 0);
55 PcdFspApiVersion = PcdGet8 (PcdFspApiVersion);
56 }
57 DEBUG ((DEBUG_INFO, "PcdFspApiVersion - 0x%x\n", PcdFspApiVersion));
58
59 if (PcdFspApiVersion == 1) {
60 PeiFspInitV1 (FspHeader);
61 } else {
62 PeiFspInitV2 (FspHeader);
63 }
64
65 return EFI_SUCCESS;
66 }
67