]> git.proxmox.com Git - mirror_edk2.git/blame - EmulatorPkg/FvbServicesRuntimeDxe/FvbInfo.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / EmulatorPkg / FvbServicesRuntimeDxe / FvbInfo.c
CommitLineData
949f388f 1/*++ @file\r
2 Defines data structure that is the volume header found.These data is intent\r
3 to decouple FVB driver with FV header.\r
4\r
5Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>\r
6Portions copyright (c) 2011, Apple Inc. All rights reserved.\r
e3ba31da 7SPDX-License-Identifier: BSD-2-Clause-Patent\r
949f388f 8\r
9\r
10**/\r
11\r
12#include <PiDxe.h>\r
13\r
14#include <Guid/EventGroup.h>\r
15#include <Guid/FirmwareFileSystem2.h>\r
16#include <Guid/SystemNvDataGuid.h>\r
17\r
18#include <Protocol/FirmwareVolumeBlock.h>\r
19#include <Protocol/DevicePath.h>\r
20\r
21#include <Library/UefiLib.h>\r
22#include <Library/UefiDriverEntryPoint.h>\r
23#include <Library/BaseLib.h>\r
24#include <Library/DxeServicesTableLib.h>\r
25#include <Library/UefiRuntimeLib.h>\r
26#include <Library/DebugLib.h>\r
27#include <Library/HobLib.h>\r
28#include <Library/BaseMemoryLib.h>\r
29#include <Library/MemoryAllocationLib.h>\r
30#include <Library/UefiBootServicesTableLib.h>\r
31#include <Library/PcdLib.h>\r
32#include <Library/DevicePathLib.h>\r
33\r
949f388f 34typedef struct {\r
a550d468
MK
35 UINT64 FvLength;\r
36 EFI_FIRMWARE_VOLUME_HEADER FvbInfo;\r
949f388f 37 //\r
38 // EFI_FV_BLOCK_MAP_ENTRY ExtraBlockMap[n];//n=0\r
39 //\r
a550d468 40 EFI_FV_BLOCK_MAP_ENTRY End[1];\r
949f388f 41} EFI_FVB_MEDIA_INFO;\r
42\r
43EFI_FVB_MEDIA_INFO mPlatformFvbMediaInfo[] = {\r
44 //\r
45 // Recovery BOIS FVB\r
46 //\r
47 {\r
48 FixedPcdGet32 (PcdEmuFlashFvRecoverySize),\r
49 {\r
50 {\r
51 0,\r
52 }, // ZeroVector[16]\r
53 EFI_FIRMWARE_FILE_SYSTEM2_GUID,\r
54 FixedPcdGet32 (PcdEmuFlashFvRecoverySize),\r
55 EFI_FVH_SIGNATURE,\r
56 EFI_FVB2_READ_ENABLED_CAP |\r
a550d468
MK
57 EFI_FVB2_READ_STATUS |\r
58 EFI_FVB2_WRITE_ENABLED_CAP |\r
59 EFI_FVB2_WRITE_STATUS |\r
60 EFI_FVB2_ERASE_POLARITY,\r
949f388f 61 sizeof (EFI_FIRMWARE_VOLUME_HEADER) + sizeof (EFI_FV_BLOCK_MAP_ENTRY),\r
62 0, // CheckSum\r
63 0, // ExtHeaderOffset\r
64 {\r
65 0,\r
66 }, // Reserved[1]\r
67 2, // Revision\r
68 {\r
69 {\r
70 FixedPcdGet32 (PcdEmuFlashFvRecoverySize)/FixedPcdGet32 (PcdEmuFirmwareBlockSize),\r
71 FixedPcdGet32 (PcdEmuFirmwareBlockSize),\r
72 }\r
73 }\r
74 },\r
75 {\r
76 {\r
77 0,\r
78 0\r
79 }\r
80 }\r
81 },\r
82 //\r
83 // Systen NvStorage FVB\r
84 //\r
85 {\r
86 FixedPcdGet32 (PcdFlashNvStorageVariableSize) + \\r
87 FixedPcdGet32 (PcdFlashNvStorageFtwWorkingSize) + \\r
88 FixedPcdGet32 (PcdFlashNvStorageFtwSpareSize) + \\r
89 FixedPcdGet32 (PcdEmuFlashNvStorageEventLogSize),\r
90 {\r
91 {\r
92 0,\r
93 }, // ZeroVector[16]\r
94 EFI_SYSTEM_NV_DATA_FV_GUID,\r
95 FixedPcdGet32 (PcdFlashNvStorageVariableSize) + \\r
96 FixedPcdGet32 (PcdFlashNvStorageFtwWorkingSize) + \\r
97 FixedPcdGet32 (PcdFlashNvStorageFtwSpareSize) + \\r
98 FixedPcdGet32 (PcdEmuFlashNvStorageEventLogSize),\r
99 EFI_FVH_SIGNATURE,\r
100 EFI_FVB2_READ_ENABLED_CAP |\r
a550d468
MK
101 EFI_FVB2_READ_STATUS |\r
102 EFI_FVB2_WRITE_ENABLED_CAP |\r
103 EFI_FVB2_WRITE_STATUS |\r
104 EFI_FVB2_ERASE_POLARITY,\r
949f388f 105 sizeof (EFI_FIRMWARE_VOLUME_HEADER) + sizeof (EFI_FV_BLOCK_MAP_ENTRY),\r
106 0, // CheckSum\r
107 0, // ExtHeaderOffset\r
108 {\r
109 0,\r
110 }, // Reserved[1]\r
111 2, // Revision\r
112 {\r
113 {\r
114 (FixedPcdGet32 (PcdFlashNvStorageVariableSize) + \\r
a550d468
MK
115 FixedPcdGet32 (PcdFlashNvStorageFtwWorkingSize) + \\r
116 FixedPcdGet32 (PcdFlashNvStorageFtwSpareSize) + \\r
117 FixedPcdGet32 (PcdEmuFlashNvStorageEventLogSize)) / FixedPcdGet32 (PcdEmuFirmwareBlockSize),\r
949f388f 118 FixedPcdGet32 (PcdEmuFirmwareBlockSize),\r
119 }\r
120 }\r
121 },\r
122 {\r
123 {\r
124 0,\r
125 0\r
126 }\r
127 }\r
128 }\r
129};\r
130\r
131EFI_STATUS\r
132GetFvbInfo (\r
a550d468
MK
133 IN UINT64 FvLength,\r
134 OUT EFI_FIRMWARE_VOLUME_HEADER **FvbInfo\r
949f388f 135 )\r
136{\r
a550d468 137 UINTN Index;\r
949f388f 138\r
139 for (Index = 0; Index < sizeof (mPlatformFvbMediaInfo) / sizeof (EFI_FVB_MEDIA_INFO); Index += 1) {\r
140 if (mPlatformFvbMediaInfo[Index].FvLength == FvLength) {\r
141 *FvbInfo = &mPlatformFvbMediaInfo[Index].FvbInfo;\r
142 return EFI_SUCCESS;\r
143 }\r
144 }\r
145\r
146 return EFI_NOT_FOUND;\r
147}\r