]> git.proxmox.com Git - mirror_edk2.git/blame - DuetPkg/FvbRuntimeService/FwBlockService.h
Updated EFI_FVB_ATTRIBUTES to EFI_FVB_ATTRIBUTES_2.
[mirror_edk2.git] / DuetPkg / FvbRuntimeService / FwBlockService.h
CommitLineData
9071550e 1/**@file\r
2Copyright (c) 2007, Intel Corporation \r
3All rights reserved. This program and the accompanying materials \r
4are licensed and made available under the terms and conditions of the BSD License \r
5which accompanies this distribution. The full text of the license may be found at \r
6http://opensource.org/licenses/bsd-license.php \r
7 \r
8THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
9WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
10\r
11Module Name:\r
12\r
13 FwBlockService.h\r
14 \r
15Abstract:\r
16\r
17 Firmware volume block driver for Intel Firmware Hub (FWH) device\r
18\r
19**/\r
20#ifndef _FW_BLOCK_SERVICE_H\r
21#define _FW_BLOCK_SERVICE_H\r
22\r
23//\r
24// The package level header files this module uses\r
25//\r
26#include <PiDxe.h>\r
27\r
28//\r
29// The protocols, PPI and GUID defintions for this module\r
30//\r
31#include <Guid/EventGroup.h>\r
32#include <Guid/FirmwareFileSystem2.h>\r
33#include <Protocol/FvbExtension.h>\r
34#include <Protocol/FirmwareVolumeBlock.h>\r
35#include <Guid/AlternateFvBlock.h>\r
36#include <Protocol/DevicePath.h>\r
37#include <Protocol/SimpleFileSystem.h>\r
38#include <Protocol/BlockIo.h>\r
39#include <Library/DevicePathLib.h>\r
40#include <Guid/SystemNvDataGuid.h>\r
41#include <Guid/FlashMapHob.h>\r
42#include <Guid/HobList.h>\r
43#include <Guid/AlternateFvBlock.h>\r
44#include <Protocol/FvbExtension.h>\r
45\r
46//\r
47// The Library classes this module consumes\r
48//\r
49#include <Library/UefiLib.h>\r
50#include <Library/UefiDriverEntryPoint.h>\r
51#include <Library/BaseLib.h>\r
52#include <Library/DxeServicesTableLib.h>\r
53#include <Library/UefiRuntimeLib.h>\r
54#include <Library/DebugLib.h>\r
55#include <Library/HobLib.h>\r
56#include <Library/BaseMemoryLib.h>\r
57#include <Library/MemoryAllocationLib.h>\r
58#include <Library/UefiBootServicesTableLib.h>\r
59#include <Library/PcdLib.h>\r
60\r
61\r
62#define FWH_READ_LOCK (1 << 2)\r
63#define FWH_LOCK_DOWN (1 << 1)\r
64#define FWH_WRITE_LOCK 1\r
65#define FWH_WRITE_STATE_STATUS (1 << 7)\r
66#define FWH_ERASE_STATUS (1 << 5)\r
67#define FWH_PROGRAM_STATUS (1 << 4)\r
68#define FWH_VPP_STATUS (1 << 3)\r
69#define STALL_TIME 5\r
70#define FWH_ERASE_STATUS_BITS (FWH_ERASE_STATUS || FWH_VPP_STATUS)\r
71#define FWH_WRITE_STATUS_BITS (FWH_WRITE_STATUS || FWH_VPP_STATUS)\r
72\r
73//\r
74// BugBug: Add documentation here for data structure!!!!\r
75//\r
76#define FVB_PHYSICAL 0\r
77#define FVB_VIRTUAL 1\r
78\r
79#define EFI_FVB2_CAPABILITIES (EFI_FVB2_READ_DISABLED_CAP | \\r
80 EFI_FVB2_READ_ENABLED_CAP | \\r
81 EFI_FVB2_WRITE_DISABLED_CAP | \\r
82 EFI_FVB2_WRITE_ENABLED_CAP | \\r
83 EFI_FVB2_LOCK_CAP \\r
84 )\r
85#define EFI_FVB2_STATUS (EFI_FVB2_READ_STATUS | EFI_FVB2_WRITE_STATUS | EFI_FVB2_LOCK_STATUS)\r
86\r
87typedef struct {\r
88 EFI_LOCK FvbDevLock;\r
89 UINTN FvBase[2];\r
90 //\r
91 // We can treat VolumeSignature combined with MappedFile \r
92 // as a unique key to locate the mapped file.\r
93#define MAX_PATH 256\r
94 UINT32 VolumeId;\r
95 CHAR16 MappedFile[MAX_PATH];\r
96 UINT32 ActuralSize;\r
97 UINT32 Offset;\r
98 \r
99 EFI_DEVICE_PATH_PROTOCOL *Device; // only used in BS period, won't use after memory map changed\r
100 UINTN NumOfBlocks;\r
101 BOOLEAN WriteEnabled;\r
102 EFI_FIRMWARE_VOLUME_HEADER VolumeHeader;\r
103} EFI_FW_VOL_INSTANCE;\r
104\r
105typedef struct {\r
106 UINT32 NumFv;\r
107 EFI_FW_VOL_INSTANCE *FvInstance[2];\r
108 UINT8 *FvbScratchSpace[2];\r
109} ESAL_FWB_GLOBAL;\r
110\r
111//\r
112// Fvb Protocol instance data\r
113//\r
114#define FVB_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE, FwVolBlockInstance, FVB_DEVICE_SIGNATURE)\r
115#define FVB_EXTEND_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE, FvbExtension, FVB_DEVICE_SIGNATURE)\r
116#define FVB_DEVICE_SIGNATURE EFI_SIGNATURE_32 ('F', 'V', 'B', 'C')\r
117\r
118typedef struct {\r
119 MEMMAP_DEVICE_PATH MemMapDevPath;\r
120 EFI_DEVICE_PATH_PROTOCOL EndDevPath;\r
121} FV_DEVICE_PATH;\r
122\r
123typedef struct {\r
124 UINTN Signature;\r
125 FV_DEVICE_PATH DevicePath;\r
126 UINTN Instance;\r
127 EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL FwVolBlockInstance;\r
128 EFI_FVB_EXTENSION_PROTOCOL FvbExtension;\r
129} EFI_FW_VOL_BLOCK_DEVICE;\r
130\r
131EFI_STATUS\r
132GetFvbInfo (\r
133 IN EFI_PHYSICAL_ADDRESS FvBaseAddress,\r
134 OUT EFI_FIRMWARE_VOLUME_HEADER **FvbInfo\r
135 )\r
136;\r
137\r
138EFI_STATUS\r
139EnableFvbWrites (\r
140 IN BOOLEAN EnableWrites\r
141 )\r
142;\r
143\r
144EFI_STATUS\r
145PlatformGetFvbWriteBase (\r
146 IN UINTN CurrentBaseAddress,\r
147 IN UINTN *NewBaseAddress,\r
148 IN BOOLEAN *WriteEnabled\r
149 )\r
150;\r
151\r
152EFI_STATUS\r
153EnablePlatformFvb (\r
154 VOID\r
155 )\r
156;\r
157\r
158BOOLEAN\r
159SetPlatformFvbLock (\r
160 IN UINTN LbaAddress\r
161 )\r
162;\r
163\r
164EFI_STATUS\r
165FvbReadBlock (\r
166 IN UINTN Instance,\r
167 IN EFI_LBA Lba,\r
168 IN UINTN BlockOffset,\r
169 IN OUT UINTN *NumBytes,\r
170 IN UINT8 *Buffer,\r
171 IN ESAL_FWB_GLOBAL *Global,\r
172 IN BOOLEAN Virtual\r
173 )\r
174;\r
175\r
176EFI_STATUS\r
177FvbWriteBlock (\r
178 IN UINTN Instance,\r
179 IN EFI_LBA Lba,\r
180 IN UINTN BlockOffset,\r
181 IN OUT UINTN *NumBytes,\r
182 IN UINT8 *Buffer,\r
183 IN ESAL_FWB_GLOBAL *Global,\r
184 IN BOOLEAN Virtual\r
185 )\r
186;\r
187\r
188EFI_STATUS\r
189FvbEraseBlock (\r
190 IN UINTN Instance,\r
191 IN EFI_LBA Lba,\r
192 IN ESAL_FWB_GLOBAL *Global,\r
193 IN BOOLEAN Virtual\r
194 )\r
195;\r
196\r
197EFI_STATUS\r
198FvbSetVolumeAttributes (\r
199 IN UINTN Instance,\r
8ee3a199 200 IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes,\r
9071550e 201 IN ESAL_FWB_GLOBAL *Global,\r
202 IN BOOLEAN Virtual\r
203 )\r
204;\r
205\r
206EFI_STATUS\r
207FvbGetVolumeAttributes (\r
208 IN UINTN Instance,\r
8ee3a199 209 OUT EFI_FVB_ATTRIBUTES_2 *Attributes,\r
9071550e 210 IN ESAL_FWB_GLOBAL *Global,\r
211 IN BOOLEAN Virtual\r
212 )\r
213;\r
214\r
215EFI_STATUS\r
216FvbGetPhysicalAddress (\r
217 IN UINTN Instance,\r
218 OUT EFI_PHYSICAL_ADDRESS *Address,\r
219 IN ESAL_FWB_GLOBAL *Global,\r
220 IN BOOLEAN Virtual\r
221 )\r
222;\r
223\r
224EFI_STATUS\r
225EFIAPI\r
226FvbInitialize (\r
227 IN EFI_HANDLE ImageHandle,\r
228 IN EFI_SYSTEM_TABLE *SystemTable\r
229 )\r
230;\r
231\r
232VOID\r
233EFIAPI\r
234FvbClassAddressChangeEvent (\r
235 IN EFI_EVENT Event,\r
236 IN VOID *Context\r
237 )\r
238;\r
239\r
240EFI_STATUS\r
241FvbSpecificInitialize (\r
242 IN ESAL_FWB_GLOBAL *mFvbModuleGlobal\r
243 )\r
244;\r
245\r
246EFI_STATUS\r
247FvbGetLbaAddress (\r
248 IN UINTN Instance,\r
249 IN EFI_LBA Lba,\r
250 OUT UINTN *LbaAddress,\r
251 OUT UINTN *LbaLength,\r
252 OUT UINTN *NumOfBlocks,\r
253 IN ESAL_FWB_GLOBAL *Global,\r
254 IN BOOLEAN Virtual\r
255 )\r
256;\r
257\r
258EFI_STATUS\r
259FvbEraseCustomBlockRange (\r
260 IN UINTN Instance,\r
261 IN EFI_LBA StartLba,\r
262 IN UINTN OffsetStartLba,\r
263 IN EFI_LBA LastLba,\r
264 IN UINTN OffsetLastLba,\r
265 IN ESAL_FWB_GLOBAL *Global,\r
266 IN BOOLEAN Virtual\r
267 )\r
268;\r
269\r
270//\r
271// Protocol APIs\r
272//\r
273EFI_STATUS\r
274EFIAPI\r
275FvbProtocolGetAttributes (\r
276 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
8ee3a199 277 OUT EFI_FVB_ATTRIBUTES_2 *Attributes\r
9071550e 278 )\r
279;\r
280\r
281EFI_STATUS\r
282EFIAPI\r
283FvbProtocolSetAttributes (\r
284 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
8ee3a199 285 IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes\r
9071550e 286 )\r
287;\r
288\r
289EFI_STATUS\r
290EFIAPI\r
291FvbProtocolGetPhysicalAddress (\r
292 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
293 OUT EFI_PHYSICAL_ADDRESS *Address\r
294 )\r
295;\r
296\r
297EFI_STATUS\r
298EFIAPI\r
299FvbProtocolGetBlockSize (\r
300 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
301 IN EFI_LBA Lba,\r
302 OUT UINTN *BlockSize,\r
303 OUT UINTN *NumOfBlocks\r
304 )\r
305;\r
306\r
307EFI_STATUS\r
308EFIAPI\r
309FvbProtocolRead (\r
310 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
311 IN EFI_LBA Lba,\r
312 IN UINTN Offset,\r
313 IN OUT UINTN *NumBytes,\r
314 IN UINT8 *Buffer\r
315 )\r
316;\r
317\r
318EFI_STATUS\r
319EFIAPI\r
320FvbProtocolWrite (\r
321 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
322 IN EFI_LBA Lba,\r
323 IN UINTN Offset,\r
324 IN OUT UINTN *NumBytes,\r
325 IN UINT8 *Buffer\r
326 )\r
327;\r
328\r
329EFI_STATUS\r
330EFIAPI\r
331FvbProtocolEraseBlocks (\r
332 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
333 ... \r
334 )\r
335;\r
336\r
337EFI_STATUS\r
338EFIAPI\r
339FvbExtendProtocolEraseCustomBlockRange (\r
340 IN EFI_FVB_EXTENSION_PROTOCOL *This,\r
341 IN EFI_LBA StartLba,\r
342 IN UINTN OffsetStartLba,\r
343 IN EFI_LBA LastLba,\r
344 IN UINTN OffsetLastLba\r
345 )\r
346;\r
347\r
348#endif\r