]> git.proxmox.com Git - mirror_edk2.git/blob - Vlv2TbltDevicePkg/PlatformInitPei/FlashMap.c
f32eaac4798cc05c1654c8e8f64530243f6ee1ba
[mirror_edk2.git] / Vlv2TbltDevicePkg / PlatformInitPei / FlashMap.c
1 /** @file
2
3 Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
4
5 SPDX-License-Identifier: BSD-2-Clause-Patent
6
7
8
9
10
11 Module Name:
12
13 FlashMap.c
14
15 Abstract:
16
17 Build GUIDed HOBs for platform specific flash map.
18
19 --*/
20
21 #include "Efi.h"
22 #include "Pei.h"
23 #include "PeiLib.h"
24 #include "PeiLib.h"
25 #include "EfiFlashMap.h"
26 #include EFI_PROTOCOL_CONSUMER (FirmwareVolumeBlock)
27 #include EFI_GUID_DEFINITION (FlashMapHob)
28 #include EFI_GUID_DEFINITION (SystemNvDataGuid)
29 #include EFI_GUID_DEFINITION (FirmwareFileSystem)
30
31 EFI_GUID mFvBlockGuid = EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID;
32 EFI_GUID mFfsGuid = EFI_FIRMWARE_FILE_SYSTEM_GUID;
33 EFI_GUID mSystemDataGuid = EFI_SYSTEM_NV_DATA_HOB_GUID;
34
35 static EFI_FLASH_AREA_DATA mFlashAreaData[] = {
36 //
37 // Variable area
38 //
39 { FixedPcdGet32 (PcdFlashNvStorageVariableBase),
40 FixedPcdGet32 (PcdFlashNvStorageVariableSize),
41 EFI_FLASH_AREA_SUBFV | EFI_FLASH_AREA_MEMMAPPED_FV,
42 EFI_FLASH_AREA_EFI_VARIABLES },
43
44 //
45 // Boot block 2nd part
46 //
47 { FixedPcdGet32 (PcdFlashFvRecovery2Base),
48 FixedPcdGet32 (PcdFlashFvRecovery2Size),
49 EFI_FLASH_AREA_SUBFV | EFI_FLASH_AREA_MEMMAPPED_FV,
50 EFI_FLASH_AREA_FTW_BACKUP },
51
52 //
53 // Recovery FV
54 //
55 { FixedPcdGet32 (PcdFlashFvRecoveryBase),
56 FixedPcdGet32 (PcdFlashFvRecoverySize),
57 EFI_FLASH_AREA_FV | EFI_FLASH_AREA_MEMMAPPED_FV,
58 EFI_FLASH_AREA_RECOVERY_BIOS },
59
60 //
61 // Main FV
62 //
63 { FixedPcdGet32 (PcdFlashFvMainBase),
64 FixedPcdGet32 (PcdFlashFvMainSize),
65 EFI_FLASH_AREA_FV | EFI_FLASH_AREA_MEMMAPPED_FV,
66 EFI_FLASH_AREA_MAIN_BIOS }
67
68 };
69
70 #define NUM_FLASH_AREA_DATA (ARRAY_SIZE (mFlashAreaData))
71
72 /**
73 Build GUID HOBs for platform specific flash map.
74
75 @param FfsHeader Pointer this FFS file header.
76 @param PeiServices General purpose services available to every PEIM.
77
78 @retval EFI_SUCCESS Guid HOBs for platform flash map is built.
79 @retval Otherwise Failed to build the Guid HOB data.
80
81 **/
82 EFI_STATUS
83 PeimInitializeFlashMap (
84 IN EFI_FFS_FILE_HEADER *FfsHeader,
85 IN EFI_PEI_SERVICES **PeiServices
86 )
87 {
88 UINTN Index;
89 EFI_FLASH_AREA_HOB_DATA FlashHobData;
90
91 //
92 // Build flash area entries as GUIDed HOBs.
93 //
94 for (Index = 0; Index < NUM_FLASH_AREA_DATA; Index++) {
95 ZeroMem(&FlashHobData, sizeof (EFI_FLASH_AREA_HOB_DATA));
96
97 FlashHobData.AreaType = mFlashAreaData[Index].AreaType;
98 FlashHobData.NumberOfEntries = 1;
99 FlashHobData.SubAreaData.Attributes = mFlashAreaData[Index].Attributes;
100 FlashHobData.SubAreaData.Base = (EFI_PHYSICAL_ADDRESS) (UINTN) mFlashAreaData[Index].Base;
101 FlashHobData.SubAreaData.Length = (EFI_PHYSICAL_ADDRESS) (UINTN) mFlashAreaData[Index].Length;
102
103 switch (FlashHobData.AreaType) {
104 case EFI_FLASH_AREA_RECOVERY_BIOS:
105 case EFI_FLASH_AREA_MAIN_BIOS:
106 CopyMem (
107 &FlashHobData.AreaTypeGuid,
108 &mFfsGuid,
109 sizeof (EFI_GUID)
110 );
111 CopyMem (
112 &FlashHobData.SubAreaData.FileSystem,
113 &mFvBlockGuid,
114 sizeof (EFI_GUID)
115 );
116 break;
117
118 case EFI_FLASH_AREA_GUID_DEFINED:
119 CopyMem (
120 &FlashHobData.AreaTypeGuid,
121 &mSystemDataGuid,
122 sizeof (EFI_GUID)
123 );
124 CopyMem (
125 &FlashHobData.SubAreaData.FileSystem,
126 &mFvBlockGuid,
127 sizeof (EFI_GUID)
128 );
129 break;
130
131 default:
132 break;
133 }
134
135 PeiBuildHobGuidData(PeiServices,
136 &gEfiFlashMapHobGuid,
137 &FlashHobData,
138 sizeof (EFI_FLASH_AREA_HOB_DATA)
139 );
140 }
141 return EFI_SUCCESS;
142 }
143