]> git.proxmox.com Git - mirror_edk2.git/blob - Nt32Pkg/WinNtFlashMapPei/FlashMap.c
cbb92a8e0561bb579649602878470d4d02993c40
[mirror_edk2.git] / Nt32Pkg / WinNtFlashMapPei / FlashMap.c
1 /**@file
2
3 Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
4 (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
6
7 Module Name:
8
9 FlashMap.c
10
11 Abstract:
12
13 PEIM to build GUIDed HOBs for platform specific flash map
14
15 **/
16
17 //
18 // The package level header files this module uses
19 //
20 #include <PiPei.h>
21
22 #include <WinNtPeim.h>
23 //
24 // The protocols, PPI and GUID defintions for this module
25 //
26 #include <Ppi/NtFwh.h>
27
28 #include <Library/DebugLib.h>
29 #include <Library/PcdLib.h>
30 #include <Library/PeiServicesLib.h>
31
32 EFI_STATUS
33 EFIAPI
34 PeimInitializeFlashMap (
35 IN EFI_FFS_FILE_HEADER *FfsHeader,
36 IN EFI_PEI_SERVICES **PeiServices
37 )
38 /*++
39
40 Routine Description:
41 Build GUIDed HOBs for platform specific flash map
42
43 Arguments:
44 FfsHeader - A pointer to the EFI_FFS_FILE_HEADER structure.
45 PeiServices - General purpose services available to every PEIM.
46
47 Returns:
48 EFI_STATUS
49
50 --*/
51 // TODO: EFI_SUCCESS - add return value to function comment
52 {
53 EFI_STATUS Status;
54 NT_FWH_PPI *NtFwhPpi;
55 EFI_PHYSICAL_ADDRESS FdBase;
56 UINT64 FdSize;
57 EFI_PEI_PPI_DESCRIPTOR *PpiDescriptor;
58
59 DEBUG ((EFI_D_ERROR, "NT 32 Flash Map PEIM Loaded\n"));
60
61 //
62 // Get the Fwh Information PPI
63 //
64 Status = PeiServicesLocatePpi (
65 &gNtFwhPpiGuid, // GUID
66 0, // INSTANCE
67 &PpiDescriptor, // EFI_PEI_PPI_DESCRIPTOR
68 (VOID**)&NtFwhPpi // PPI
69 );
70 ASSERT_EFI_ERROR (Status);
71
72 //
73 // Assume that FD0 contains the Flash map.
74 //
75 Status = NtFwhPpi->NtFwh (0, &FdBase, &FdSize);
76 if (EFI_ERROR (Status)) {
77 return Status;
78 }
79
80 //
81 // Relocate the base of FV region
82 //
83 if (FdBase >= BASE_4GB) {
84 PcdSet64 (PcdFlashNvStorageVariableBase64, PcdGet32 (PcdWinNtFlashNvStorageVariableBase) + (UINT64) FdBase);
85 PcdSet64 (PcdFlashNvStorageFtwWorkingBase64, PcdGet32 (PcdWinNtFlashNvStorageFtwWorkingBase) + (UINT64) FdBase);
86 PcdSet64 (PcdFlashNvStorageFtwSpareBase64, PcdGet32 (PcdWinNtFlashNvStorageFtwSpareBase) + (UINT64) FdBase);
87 } else {
88 PcdSet32 (PcdFlashNvStorageVariableBase, PcdGet32 (PcdWinNtFlashNvStorageVariableBase) + (UINT32) FdBase);
89 PcdSet32 (PcdFlashNvStorageFtwWorkingBase, PcdGet32 (PcdWinNtFlashNvStorageFtwWorkingBase) + (UINT32) FdBase);
90 PcdSet32 (PcdFlashNvStorageFtwSpareBase, PcdGet32 (PcdWinNtFlashNvStorageFtwSpareBase) + (UINT32) FdBase);
91 }
92
93 return EFI_SUCCESS;
94 }
95