]> git.proxmox.com Git - mirror_edk2.git/blame - DuetPkg/FvbRuntimeService/FwBlockService.h
clean up the un-suitable ';' location when declaring the functions.
[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
ed66e1bc 135 );\r
9071550e 136\r
137EFI_STATUS\r
138EnableFvbWrites (\r
139 IN BOOLEAN EnableWrites\r
ed66e1bc 140 );\r
9071550e 141\r
142EFI_STATUS\r
143PlatformGetFvbWriteBase (\r
144 IN UINTN CurrentBaseAddress,\r
145 IN UINTN *NewBaseAddress,\r
146 IN BOOLEAN *WriteEnabled\r
ed66e1bc 147 );\r
9071550e 148\r
149EFI_STATUS\r
150EnablePlatformFvb (\r
151 VOID\r
ed66e1bc 152 );\r
9071550e 153\r
154BOOLEAN\r
155SetPlatformFvbLock (\r
156 IN UINTN LbaAddress\r
ed66e1bc 157 );\r
9071550e 158\r
159EFI_STATUS\r
160FvbReadBlock (\r
161 IN UINTN Instance,\r
162 IN EFI_LBA Lba,\r
163 IN UINTN BlockOffset,\r
164 IN OUT UINTN *NumBytes,\r
165 IN UINT8 *Buffer,\r
166 IN ESAL_FWB_GLOBAL *Global,\r
167 IN BOOLEAN Virtual\r
ed66e1bc 168 );\r
9071550e 169\r
170EFI_STATUS\r
171FvbWriteBlock (\r
172 IN UINTN Instance,\r
173 IN EFI_LBA Lba,\r
174 IN UINTN BlockOffset,\r
175 IN OUT UINTN *NumBytes,\r
176 IN UINT8 *Buffer,\r
177 IN ESAL_FWB_GLOBAL *Global,\r
178 IN BOOLEAN Virtual\r
ed66e1bc 179 );\r
9071550e 180\r
181EFI_STATUS\r
182FvbEraseBlock (\r
183 IN UINTN Instance,\r
184 IN EFI_LBA Lba,\r
185 IN ESAL_FWB_GLOBAL *Global,\r
186 IN BOOLEAN Virtual\r
ed66e1bc 187 );\r
9071550e 188\r
189EFI_STATUS\r
190FvbSetVolumeAttributes (\r
191 IN UINTN Instance,\r
8ee3a199 192 IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes,\r
9071550e 193 IN ESAL_FWB_GLOBAL *Global,\r
194 IN BOOLEAN Virtual\r
ed66e1bc 195 );\r
9071550e 196\r
197EFI_STATUS\r
198FvbGetVolumeAttributes (\r
199 IN UINTN Instance,\r
8ee3a199 200 OUT EFI_FVB_ATTRIBUTES_2 *Attributes,\r
9071550e 201 IN ESAL_FWB_GLOBAL *Global,\r
202 IN BOOLEAN Virtual\r
ed66e1bc 203 );\r
9071550e 204\r
205EFI_STATUS\r
206FvbGetPhysicalAddress (\r
207 IN UINTN Instance,\r
208 OUT EFI_PHYSICAL_ADDRESS *Address,\r
209 IN ESAL_FWB_GLOBAL *Global,\r
210 IN BOOLEAN Virtual\r
ed66e1bc 211 );\r
9071550e 212\r
213EFI_STATUS\r
214EFIAPI\r
215FvbInitialize (\r
216 IN EFI_HANDLE ImageHandle,\r
217 IN EFI_SYSTEM_TABLE *SystemTable\r
ed66e1bc 218 );\r
9071550e 219\r
220VOID\r
221EFIAPI\r
222FvbClassAddressChangeEvent (\r
223 IN EFI_EVENT Event,\r
224 IN VOID *Context\r
ed66e1bc 225 );\r
9071550e 226\r
227EFI_STATUS\r
228FvbSpecificInitialize (\r
229 IN ESAL_FWB_GLOBAL *mFvbModuleGlobal\r
ed66e1bc 230 );\r
9071550e 231\r
232EFI_STATUS\r
233FvbGetLbaAddress (\r
234 IN UINTN Instance,\r
235 IN EFI_LBA Lba,\r
236 OUT UINTN *LbaAddress,\r
237 OUT UINTN *LbaLength,\r
238 OUT UINTN *NumOfBlocks,\r
239 IN ESAL_FWB_GLOBAL *Global,\r
240 IN BOOLEAN Virtual\r
ed66e1bc 241 );\r
9071550e 242\r
243EFI_STATUS\r
244FvbEraseCustomBlockRange (\r
245 IN UINTN Instance,\r
246 IN EFI_LBA StartLba,\r
247 IN UINTN OffsetStartLba,\r
248 IN EFI_LBA LastLba,\r
249 IN UINTN OffsetLastLba,\r
250 IN ESAL_FWB_GLOBAL *Global,\r
251 IN BOOLEAN Virtual\r
ed66e1bc 252 );\r
9071550e 253\r
254//\r
255// Protocol APIs\r
256//\r
257EFI_STATUS\r
258EFIAPI\r
259FvbProtocolGetAttributes (\r
260 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
8ee3a199 261 OUT EFI_FVB_ATTRIBUTES_2 *Attributes\r
ed66e1bc 262 );\r
9071550e 263\r
264EFI_STATUS\r
265EFIAPI\r
266FvbProtocolSetAttributes (\r
267 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
8ee3a199 268 IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes\r
ed66e1bc 269 );\r
9071550e 270\r
271EFI_STATUS\r
272EFIAPI\r
273FvbProtocolGetPhysicalAddress (\r
274 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
275 OUT EFI_PHYSICAL_ADDRESS *Address\r
ed66e1bc 276 );\r
9071550e 277\r
278EFI_STATUS\r
279EFIAPI\r
280FvbProtocolGetBlockSize (\r
281 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
282 IN EFI_LBA Lba,\r
283 OUT UINTN *BlockSize,\r
284 OUT UINTN *NumOfBlocks\r
ed66e1bc 285 );\r
9071550e 286\r
287EFI_STATUS\r
288EFIAPI\r
289FvbProtocolRead (\r
290 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
291 IN EFI_LBA Lba,\r
292 IN UINTN Offset,\r
293 IN OUT UINTN *NumBytes,\r
294 IN UINT8 *Buffer\r
ed66e1bc 295 );\r
9071550e 296\r
297EFI_STATUS\r
298EFIAPI\r
299FvbProtocolWrite (\r
300 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
301 IN EFI_LBA Lba,\r
302 IN UINTN Offset,\r
303 IN OUT UINTN *NumBytes,\r
304 IN UINT8 *Buffer\r
ed66e1bc 305 );\r
9071550e 306\r
307EFI_STATUS\r
308EFIAPI\r
309FvbProtocolEraseBlocks (\r
310 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
311 ... \r
ed66e1bc 312 );\r
9071550e 313\r
314EFI_STATUS\r
315EFIAPI\r
316FvbExtendProtocolEraseCustomBlockRange (\r
317 IN EFI_FVB_EXTENSION_PROTOCOL *This,\r
318 IN EFI_LBA StartLba,\r
319 IN UINTN OffsetStartLba,\r
320 IN EFI_LBA LastLba,\r
321 IN UINTN OffsetLastLba\r
ed66e1bc 322 );\r
9071550e 323\r
324#endif\r