]> git.proxmox.com Git - mirror_edk2.git/blame - UefiPayloadPkg/FvbRuntimeDxe/FvbService.h
OvmfPkg/PlatformPei: set the Hypervisor Features PCD
[mirror_edk2.git] / UefiPayloadPkg / FvbRuntimeDxe / FvbService.h
CommitLineData
ae8acce8
GD
1/** @file\r
2The header file for Firmware volume block driver.\r
3\r
4Copyright (c) 2014 - 2021, Intel Corporation. All rights reserved.<BR>\r
5SPDX-License-Identifier: BSD-2-Clause-Patent\r
6\r
7**/\r
8\r
9#ifndef FW_BLOCK_SERVICE_H_\r
10#define FW_BLOCK_SERVICE_H_\r
11\r
12#include <Guid/EventGroup.h>\r
13#include <Guid/FirmwareFileSystem2.h>\r
14#include <Guid/SystemNvDataGuid.h>\r
15#include <Guid/VariableFormat.h>\r
16#include <Protocol/DevicePath.h>\r
17#include <Protocol/FirmwareVolumeBlock.h>\r
18#include <Library/UefiDriverEntryPoint.h>\r
19#include <Library/UefiBootServicesTableLib.h>\r
20#include <Library/UefiLib.h>\r
21#include <Library/BaseLib.h>\r
22#include <Library/DebugLib.h>\r
23#include <Library/BaseMemoryLib.h>\r
24#include <Library/IoLib.h>\r
25#include <Library/CacheMaintenanceLib.h>\r
26#include <Library/MemoryAllocationLib.h>\r
27#include <Library/PcdLib.h>\r
28#include <Library/FlashDeviceLib.h>\r
29#include <Library/DevicePathLib.h>\r
30#include <Library/HobLib.h>\r
31#include <Library/DxeServicesLib.h>\r
32#include <Guid/NvVariableInfoGuid.h>\r
33#include <Register/ArchitecturalMsr.h>\r
34\r
35//\r
36// Define two helper macro to extract the Capability field or Status field in FVB\r
37// bit fields\r
38//\r
e5efcf8b 39#define EFI_FVB2_CAPABILITIES (EFI_FVB2_READ_DISABLED_CAP |\\r
ae8acce8
GD
40 EFI_FVB2_READ_ENABLED_CAP | \\r
41 EFI_FVB2_WRITE_DISABLED_CAP | \\r
42 EFI_FVB2_WRITE_ENABLED_CAP | \\r
43 EFI_FVB2_LOCK_CAP \\r
44 )\r
45\r
e5efcf8b 46#define EFI_FVB2_STATUS (EFI_FVB2_READ_STATUS | EFI_FVB2_WRITE_STATUS | EFI_FVB2_LOCK_STATUS)\r
ae8acce8
GD
47\r
48typedef struct {\r
e5efcf8b
MK
49 UINTN FvBase;\r
50 UINTN NumOfBlocks;\r
ae8acce8
GD
51 //\r
52 // Note!!!: VolumeHeader must be the last element\r
53 // of the structure.\r
54 //\r
e5efcf8b 55 EFI_FIRMWARE_VOLUME_HEADER VolumeHeader;\r
ae8acce8
GD
56} EFI_FW_VOL_INSTANCE;\r
57\r
ae8acce8 58typedef struct {\r
e5efcf8b
MK
59 EFI_FW_VOL_INSTANCE *FvInstance;\r
60 UINT32 NumFv;\r
61 UINT32 Flags;\r
ae8acce8
GD
62} FWB_GLOBAL;\r
63\r
64//\r
65// Fvb Protocol instance data\r
66//\r
e5efcf8b
MK
67#define FVB_DEVICE_FROM_THIS(a) CR(a, EFI_FW_VOL_BLOCK_DEVICE, FwVolBlockInstance, FVB_DEVICE_SIGNATURE)\r
68#define FVB_EXTEND_DEVICE_FROM_THIS(a) CR(a, EFI_FW_VOL_BLOCK_DEVICE, FvbExtension, FVB_DEVICE_SIGNATURE)\r
69#define FVB_DEVICE_SIGNATURE SIGNATURE_32('F','V','B','C')\r
ae8acce8
GD
70\r
71typedef struct {\r
e5efcf8b
MK
72 MEDIA_FW_VOL_DEVICE_PATH FvDevPath;\r
73 EFI_DEVICE_PATH_PROTOCOL EndDevPath;\r
ae8acce8
GD
74} FV_PIWG_DEVICE_PATH;\r
75\r
76typedef struct {\r
77 MEMMAP_DEVICE_PATH MemMapDevPath;\r
78 EFI_DEVICE_PATH_PROTOCOL EndDevPath;\r
79} FV_MEMMAP_DEVICE_PATH;\r
80\r
81typedef struct {\r
82 UINT32 Signature;\r
83 EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
84 UINTN Instance;\r
85 EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL FwVolBlockInstance;\r
86} EFI_FW_VOL_BLOCK_DEVICE;\r
87\r
88/**\r
89 Get a heathy FV header used for variable store recovery\r
90\r
91 @retval The FV header.\r
92\r
93**/\r
94EFI_FIRMWARE_VOLUME_HEADER *\r
95GetFvHeaderTemplate (\r
96 VOID\r
97 );\r
98\r
99EFI_STATUS\r
100InitVariableStore (\r
101 VOID\r
102 );\r
103\r
104//\r
105// Protocol APIs\r
106//\r
107EFI_STATUS\r
108EFIAPI\r
109FvbProtocolGetAttributes (\r
e5efcf8b
MK
110 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
111 OUT EFI_FVB_ATTRIBUTES_2 *Attributes\r
ae8acce8
GD
112 );\r
113\r
114EFI_STATUS\r
115EFIAPI\r
116FvbProtocolSetAttributes (\r
e5efcf8b
MK
117 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
118 IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes\r
ae8acce8
GD
119 );\r
120\r
121EFI_STATUS\r
122EFIAPI\r
123FvbProtocolGetPhysicalAddress (\r
124 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
e5efcf8b 125 OUT EFI_PHYSICAL_ADDRESS *Address\r
ae8acce8
GD
126 );\r
127\r
128EFI_STATUS\r
129EFIAPI\r
130FvbProtocolGetBlockSize (\r
131 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
e5efcf8b
MK
132 IN EFI_LBA Lba,\r
133 OUT UINTN *BlockSize,\r
134 OUT UINTN *NumOfBlocks\r
ae8acce8
GD
135 );\r
136\r
137EFI_STATUS\r
138EFIAPI\r
139FvbProtocolRead (\r
e5efcf8b
MK
140 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
141 IN EFI_LBA Lba,\r
142 IN UINTN Offset,\r
143 IN OUT UINTN *NumBytes,\r
144 OUT UINT8 *Buffer\r
ae8acce8
GD
145 );\r
146\r
147EFI_STATUS\r
148EFIAPI\r
149FvbProtocolWrite (\r
e5efcf8b
MK
150 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
151 IN EFI_LBA Lba,\r
152 IN UINTN Offset,\r
153 IN OUT UINTN *NumBytes,\r
154 IN UINT8 *Buffer\r
ae8acce8
GD
155 );\r
156\r
157EFI_STATUS\r
158EFIAPI\r
159FvbProtocolEraseBlocks (\r
e5efcf8b 160 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
ae8acce8
GD
161 ...\r
162 );\r
163\r
164EFI_FW_VOL_INSTANCE *\r
165GetFvbInstance (\r
e5efcf8b 166 IN UINTN Instance\r
ae8acce8
GD
167 );\r
168\r
169EFI_STATUS\r
170InstallFvbProtocol (\r
e5efcf8b
MK
171 IN EFI_FW_VOL_INSTANCE *FwhInstance,\r
172 IN UINTN InstanceNum\r
ae8acce8
GD
173 );\r
174\r
175EFI_STATUS\r
176FvbInitialize (\r
177 VOID\r
178 );\r
179\r
e5efcf8b
MK
180extern FWB_GLOBAL mFvbModuleGlobal;\r
181extern EFI_FW_VOL_BLOCK_DEVICE mFvbDeviceTemplate;\r
182extern FV_MEMMAP_DEVICE_PATH mFvMemmapDevicePathTemplate;\r
183extern FV_PIWG_DEVICE_PATH mFvPIWGDevicePathTemplate;\r
ae8acce8
GD
184\r
185#endif\r