]> git.proxmox.com Git - mirror_edk2.git/blame - OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FvbInfo.c
OvmfPkg: Apply uncrustify changes
[mirror_edk2.git] / OvmfPkg / QemuFlashFvbServicesRuntimeDxe / FvbInfo.c
CommitLineData
a4ce9ffd
JJ
1/**@file\r
2\r
ea0d111e 3 Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>\r
141f0c64 4\r
b26f0cf9 5 SPDX-License-Identifier: BSD-2-Clause-Patent\r
a4ce9ffd 6\r
ea0d111e 7 Module Name:\r
a4ce9ffd 8\r
ea0d111e 9 FvbInfo.c\r
a4ce9ffd 10\r
ea0d111e
LE
11 Abstract:\r
12\r
13 Defines data structure that is the volume header found.These data is intent\r
14 to decouple FVB driver with FV header.\r
a4ce9ffd
JJ
15\r
16**/\r
17\r
18//\r
19// The package level header files this module uses\r
20//\r
0f2eb31c
LE
21#include <Pi/PiFirmwareVolume.h>\r
22\r
a4ce9ffd 23//\r
a2e75595 24// The protocols, PPI and GUID definitions for this module\r
a4ce9ffd 25//\r
a4ce9ffd 26#include <Guid/SystemNvDataGuid.h>\r
a4ce9ffd
JJ
27//\r
28// The Library classes this module consumes\r
29//\r
a4ce9ffd 30#include <Library/BaseLib.h>\r
a4ce9ffd
JJ
31#include <Library/PcdLib.h>\r
32\r
33typedef struct {\r
ac0a286f
MK
34 UINT64 FvLength;\r
35 EFI_FIRMWARE_VOLUME_HEADER FvbInfo;\r
a4ce9ffd
JJ
36 //\r
37 // EFI_FV_BLOCK_MAP_ENTRY ExtraBlockMap[n];//n=0\r
38 //\r
ac0a286f 39 EFI_FV_BLOCK_MAP_ENTRY End[1];\r
a4ce9ffd
JJ
40} EFI_FVB_MEDIA_INFO;\r
41\r
42EFI_FVB_MEDIA_INFO mPlatformFvbMediaInfo[] = {\r
43 //\r
a2e75595 44 // System NvStorage FVB\r
a4ce9ffd
JJ
45 //\r
46 {\r
47 FixedPcdGet32 (PcdFlashNvStorageVariableSize) +\r
48 FixedPcdGet32 (PcdFlashNvStorageFtwWorkingSize) +\r
49 FixedPcdGet32 (PcdFlashNvStorageFtwSpareSize) +\r
50 FixedPcdGet32 (PcdOvmfFlashNvStorageEventLogSize),\r
51 {\r
52 {\r
53 0,\r
54 }, // ZeroVector[16]\r
55 EFI_SYSTEM_NV_DATA_FV_GUID,\r
56 FixedPcdGet32 (PcdFlashNvStorageVariableSize) +\r
57 FixedPcdGet32 (PcdFlashNvStorageFtwWorkingSize) +\r
58 FixedPcdGet32 (PcdFlashNvStorageFtwSpareSize) +\r
59 FixedPcdGet32 (PcdOvmfFlashNvStorageEventLogSize),\r
60 EFI_FVH_SIGNATURE,\r
141f0c64 61 EFI_FVB2_MEMORY_MAPPED |\r
ac0a286f
MK
62 EFI_FVB2_READ_ENABLED_CAP |\r
63 EFI_FVB2_READ_STATUS |\r
64 EFI_FVB2_WRITE_ENABLED_CAP |\r
65 EFI_FVB2_WRITE_STATUS |\r
66 EFI_FVB2_ERASE_POLARITY |\r
67 EFI_FVB2_ALIGNMENT_16,\r
a4ce9ffd
JJ
68 sizeof (EFI_FIRMWARE_VOLUME_HEADER) + sizeof (EFI_FV_BLOCK_MAP_ENTRY),\r
69 0, // CheckSum\r
70 0, // ExtHeaderOffset\r
71 {\r
72 0,\r
73 }, // Reserved[1]\r
74 2, // Revision\r
75 {\r
84043adf
LE
76 {\r
77 (FixedPcdGet32 (PcdFlashNvStorageVariableSize) +\r
78 FixedPcdGet32 (PcdFlashNvStorageFtwWorkingSize) +\r
79 FixedPcdGet32 (PcdFlashNvStorageFtwSpareSize) +\r
ea0d111e
LE
80 FixedPcdGet32 (PcdOvmfFlashNvStorageEventLogSize)) /\r
81 FixedPcdGet32 (PcdOvmfFirmwareBlockSize),\r
84043adf
LE
82 FixedPcdGet32 (PcdOvmfFirmwareBlockSize),\r
83 }\r
84 } // BlockMap[1]\r
a4ce9ffd
JJ
85 },\r
86 {\r
84043adf
LE
87 {\r
88 0,\r
89 0\r
90 }\r
91 } // End[1]\r
a4ce9ffd
JJ
92 }\r
93};\r
94\r
95EFI_STATUS\r
96GetFvbInfo (\r
ac0a286f
MK
97 IN UINT64 FvLength,\r
98 OUT EFI_FIRMWARE_VOLUME_HEADER **FvbInfo\r
a4ce9ffd
JJ
99 )\r
100{\r
ac0a286f
MK
101 STATIC BOOLEAN Checksummed = FALSE;\r
102 UINTN Index;\r
a4ce9ffd
JJ
103\r
104 if (!Checksummed) {\r
ea0d111e
LE
105 for (Index = 0;\r
106 Index < sizeof (mPlatformFvbMediaInfo) / sizeof (EFI_FVB_MEDIA_INFO);\r
ac0a286f
MK
107 Index += 1)\r
108 {\r
109 UINT16 Checksum;\r
a4ce9ffd 110 mPlatformFvbMediaInfo[Index].FvbInfo.Checksum = 0;\r
ac0a286f
MK
111 Checksum = CalculateCheckSum16 (\r
112 (UINT16 *)&mPlatformFvbMediaInfo[Index].FvbInfo,\r
113 mPlatformFvbMediaInfo[Index].FvbInfo.HeaderLength\r
114 );\r
a4ce9ffd
JJ
115 mPlatformFvbMediaInfo[Index].FvbInfo.Checksum = Checksum;\r
116 }\r
ac0a286f 117\r
a4ce9ffd
JJ
118 Checksummed = TRUE;\r
119 }\r
120\r
ea0d111e
LE
121 for (Index = 0;\r
122 Index < sizeof (mPlatformFvbMediaInfo) / sizeof (EFI_FVB_MEDIA_INFO);\r
ac0a286f
MK
123 Index += 1)\r
124 {\r
a4ce9ffd
JJ
125 if (mPlatformFvbMediaInfo[Index].FvLength == FvLength) {\r
126 *FvbInfo = &mPlatformFvbMediaInfo[Index].FvbInfo;\r
127 return EFI_SUCCESS;\r
128 }\r
129 }\r
130\r
131 return EFI_NOT_FOUND;\r
132}\r