1 /*++ @file
2 PEIM to build GUIDed HOBs for platform specific flash map
3
4 Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
5 Portions copyright (c) 2011, Apple Inc. All rights reserved.
6 This program and the accompanying materials
7 are licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution. The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php
10
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13
14 **/
15
16
17 #include "PiPei.h"
18
19 #include <Guid/SystemNvDataGuid.h>
20 #include <Ppi/EmuThunk.h>
21
22 #include <Library/DebugLib.h>
23 #include <Library/PeimEntryPoint.h>
24 #include <Library/HobLib.h>
25 #include <Library/PeiServicesLib.h>
26 #include <Library/PeiServicesTablePointerLib.h>
27 #include <Library/BaseMemoryLib.h>
28 #include <Library/PcdLib.h>
29
30 EFI_STATUS
31 EFIAPI
PeimInitializeFlashMap(IN EFI_PEI_FILE_HANDLE FileHandle,IN CONST EFI_PEI_SERVICES ** PeiServices)32 PeimInitializeFlashMap (
33 IN EFI_PEI_FILE_HANDLE FileHandle,
34 IN CONST EFI_PEI_SERVICES **PeiServices
35 )
36 /*++
37
38 Routine Description:
39 Build GUIDed HOBs for platform specific flash map
40
41 Arguments:
42 FfsHeader - A pointer to the EFI_FFS_FILE_HEADER structure.
43 PeiServices - General purpose services available to every PEIM.
44
45 Returns:
46 EFI_STATUS
47
48 **/
49 {
50 EFI_STATUS Status;
51 EMU_THUNK_PPI *Thunk;
52 EFI_PEI_PPI_DESCRIPTOR *PpiDescriptor;
53 EFI_PHYSICAL_ADDRESS FdBase;
54 EFI_PHYSICAL_ADDRESS FdFixUp;
55 UINT64 FdSize;
56
57 DEBUG ((EFI_D_ERROR, "EmulatorPkg Flash Map PEIM Loaded\n"));
58
59 //
60 // Get the Fwh Information PPI
61 //
62 Status = PeiServicesLocatePpi (
63 &gEmuThunkPpiGuid, // GUID
64 0, // INSTANCE
65 &PpiDescriptor, // EFI_PEI_PPI_DESCRIPTOR
66 (VOID **)&Thunk // PPI
67 );
68 ASSERT_EFI_ERROR (Status);
69
70 //
71 // Assume that FD0 contains the Flash map.
72 //
73 Status = Thunk->FirmwareDevices (0, &FdBase, &FdSize, &FdFixUp);
74 if (EFI_ERROR (Status)) {
75 return Status;
76 }
77
78 PcdSet64 (PcdFlashNvStorageVariableBase64, PcdGet64 (PcdEmuFlashNvStorageVariableBase) + FdFixUp);
79 PcdSet64 (PcdFlashNvStorageFtwWorkingBase64, PcdGet64 (PcdEmuFlashNvStorageFtwWorkingBase) + FdFixUp);
80 PcdSet64 (PcdFlashNvStorageFtwSpareBase64, PcdGet64 (PcdEmuFlashNvStorageFtwSpareBase) + FdFixUp);
81
82 return EFI_SUCCESS;
83 }
84