]> git.proxmox.com Git - mirror_edk2.git/blame - OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FvbInfo.c
NetworkPkg: Move Network library header file from MdeModulePkg to NetworkPkg
[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
JJ
23//\r
24// The protocols, PPI and GUID defintions for this module\r
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
34 UINT64 FvLength;\r
35 EFI_FIRMWARE_VOLUME_HEADER FvbInfo;\r
36 //\r
37 // EFI_FV_BLOCK_MAP_ENTRY ExtraBlockMap[n];//n=0\r
38 //\r
39 EFI_FV_BLOCK_MAP_ENTRY End[1];\r
40} EFI_FVB_MEDIA_INFO;\r
41\r
42EFI_FVB_MEDIA_INFO mPlatformFvbMediaInfo[] = {\r
43 //\r
44 // Systen NvStorage FVB\r
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
a4ce9ffd
JJ
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
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
97 IN UINT64 FvLength,\r
98 OUT EFI_FIRMWARE_VOLUME_HEADER **FvbInfo\r
99 )\r
100{\r
101 STATIC BOOLEAN Checksummed = FALSE;\r
102 UINTN Index;\r
103\r
104 if (!Checksummed) {\r
ea0d111e
LE
105 for (Index = 0;\r
106 Index < sizeof (mPlatformFvbMediaInfo) / sizeof (EFI_FVB_MEDIA_INFO);\r
107 Index += 1) {\r
a4ce9ffd
JJ
108 UINT16 Checksum;\r
109 mPlatformFvbMediaInfo[Index].FvbInfo.Checksum = 0;\r
110 Checksum = CalculateCheckSum16 (\r
111 (UINT16*) &mPlatformFvbMediaInfo[Index].FvbInfo,\r
112 mPlatformFvbMediaInfo[Index].FvbInfo.HeaderLength\r
113 );\r
114 mPlatformFvbMediaInfo[Index].FvbInfo.Checksum = Checksum;\r
115 }\r
116 Checksummed = TRUE;\r
117 }\r
118\r
ea0d111e
LE
119 for (Index = 0;\r
120 Index < sizeof (mPlatformFvbMediaInfo) / sizeof (EFI_FVB_MEDIA_INFO);\r
121 Index += 1) {\r
a4ce9ffd
JJ
122 if (mPlatformFvbMediaInfo[Index].FvLength == FvLength) {\r
123 *FvbInfo = &mPlatformFvbMediaInfo[Index].FvbInfo;\r
124 return EFI_SUCCESS;\r
125 }\r
126 }\r
127\r
128 return EFI_NOT_FOUND;\r
129}\r