]> git.proxmox.com Git - mirror_edk2.git/blame - DuetPkg/FvbRuntimeService/FwBlockService.h
Three GUIDs had been retired, PrimaryConsoleInDeviceGuid, PrimaryConsoleOutDeviceGuid...
[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
9071550e 33#include <Protocol/FirmwareVolumeBlock.h>\r
34#include <Guid/AlternateFvBlock.h>\r
35#include <Protocol/DevicePath.h>\r
36#include <Protocol/SimpleFileSystem.h>\r
37#include <Protocol/BlockIo.h>\r
38#include <Library/DevicePathLib.h>\r
39#include <Guid/SystemNvDataGuid.h>\r
40#include <Guid/FlashMapHob.h>\r
41#include <Guid/HobList.h>\r
42#include <Guid/AlternateFvBlock.h>\r
9071550e 43\r
44//\r
45// The Library classes this module consumes\r
46//\r
47#include <Library/UefiLib.h>\r
48#include <Library/UefiDriverEntryPoint.h>\r
49#include <Library/BaseLib.h>\r
50#include <Library/DxeServicesTableLib.h>\r
51#include <Library/UefiRuntimeLib.h>\r
52#include <Library/DebugLib.h>\r
53#include <Library/HobLib.h>\r
54#include <Library/BaseMemoryLib.h>\r
55#include <Library/MemoryAllocationLib.h>\r
56#include <Library/UefiBootServicesTableLib.h>\r
57#include <Library/PcdLib.h>\r
58\r
59\r
60#define FWH_READ_LOCK (1 << 2)\r
61#define FWH_LOCK_DOWN (1 << 1)\r
62#define FWH_WRITE_LOCK 1\r
63#define FWH_WRITE_STATE_STATUS (1 << 7)\r
64#define FWH_ERASE_STATUS (1 << 5)\r
65#define FWH_PROGRAM_STATUS (1 << 4)\r
66#define FWH_VPP_STATUS (1 << 3)\r
67#define STALL_TIME 5\r
68#define FWH_ERASE_STATUS_BITS (FWH_ERASE_STATUS || FWH_VPP_STATUS)\r
69#define FWH_WRITE_STATUS_BITS (FWH_WRITE_STATUS || FWH_VPP_STATUS)\r
70\r
71//\r
72// BugBug: Add documentation here for data structure!!!!\r
73//\r
74#define FVB_PHYSICAL 0\r
75#define FVB_VIRTUAL 1\r
76\r
77#define EFI_FVB2_CAPABILITIES (EFI_FVB2_READ_DISABLED_CAP | \\r
78 EFI_FVB2_READ_ENABLED_CAP | \\r
79 EFI_FVB2_WRITE_DISABLED_CAP | \\r
80 EFI_FVB2_WRITE_ENABLED_CAP | \\r
81 EFI_FVB2_LOCK_CAP \\r
82 )\r
83#define EFI_FVB2_STATUS (EFI_FVB2_READ_STATUS | EFI_FVB2_WRITE_STATUS | EFI_FVB2_LOCK_STATUS)\r
84\r
85typedef struct {\r
86 EFI_LOCK FvbDevLock;\r
87 UINTN FvBase[2];\r
88 //\r
89 // We can treat VolumeSignature combined with MappedFile \r
90 // as a unique key to locate the mapped file.\r
91#define MAX_PATH 256\r
92 UINT32 VolumeId;\r
93 CHAR16 MappedFile[MAX_PATH];\r
94 UINT32 ActuralSize;\r
95 UINT32 Offset;\r
96 \r
97 EFI_DEVICE_PATH_PROTOCOL *Device; // only used in BS period, won't use after memory map changed\r
98 UINTN NumOfBlocks;\r
99 BOOLEAN WriteEnabled;\r
100 EFI_FIRMWARE_VOLUME_HEADER VolumeHeader;\r
101} EFI_FW_VOL_INSTANCE;\r
102\r
103typedef struct {\r
104 UINT32 NumFv;\r
105 EFI_FW_VOL_INSTANCE *FvInstance[2];\r
106 UINT8 *FvbScratchSpace[2];\r
107} ESAL_FWB_GLOBAL;\r
108\r
109//\r
110// Fvb Protocol instance data\r
111//\r
112#define FVB_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE, FwVolBlockInstance, FVB_DEVICE_SIGNATURE)\r
113#define FVB_EXTEND_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE, FvbExtension, FVB_DEVICE_SIGNATURE)\r
eea53ce1 114#define FVB_DEVICE_SIGNATURE SIGNATURE_32 ('F', 'V', 'B', 'C')\r
9071550e 115\r
116typedef struct {\r
117 MEMMAP_DEVICE_PATH MemMapDevPath;\r
118 EFI_DEVICE_PATH_PROTOCOL EndDevPath;\r
119} FV_DEVICE_PATH;\r
120\r
121typedef struct {\r
122 UINTN Signature;\r
123 FV_DEVICE_PATH DevicePath;\r
124 UINTN Instance;\r
125 EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL FwVolBlockInstance;\r
9071550e 126} EFI_FW_VOL_BLOCK_DEVICE;\r
127\r
128EFI_STATUS\r
129GetFvbInfo (\r
130 IN EFI_PHYSICAL_ADDRESS FvBaseAddress,\r
131 OUT EFI_FIRMWARE_VOLUME_HEADER **FvbInfo\r
ed66e1bc 132 );\r
9071550e 133\r
134EFI_STATUS\r
135EnableFvbWrites (\r
136 IN BOOLEAN EnableWrites\r
ed66e1bc 137 );\r
9071550e 138\r
139EFI_STATUS\r
140PlatformGetFvbWriteBase (\r
141 IN UINTN CurrentBaseAddress,\r
142 IN UINTN *NewBaseAddress,\r
143 IN BOOLEAN *WriteEnabled\r
ed66e1bc 144 );\r
9071550e 145\r
146EFI_STATUS\r
147EnablePlatformFvb (\r
148 VOID\r
ed66e1bc 149 );\r
9071550e 150\r
151BOOLEAN\r
152SetPlatformFvbLock (\r
153 IN UINTN LbaAddress\r
ed66e1bc 154 );\r
9071550e 155\r
156EFI_STATUS\r
157FvbReadBlock (\r
158 IN UINTN Instance,\r
159 IN EFI_LBA Lba,\r
160 IN UINTN BlockOffset,\r
161 IN OUT UINTN *NumBytes,\r
162 IN UINT8 *Buffer,\r
163 IN ESAL_FWB_GLOBAL *Global,\r
164 IN BOOLEAN Virtual\r
ed66e1bc 165 );\r
9071550e 166\r
167EFI_STATUS\r
168FvbWriteBlock (\r
169 IN UINTN Instance,\r
170 IN EFI_LBA Lba,\r
171 IN UINTN BlockOffset,\r
172 IN OUT UINTN *NumBytes,\r
173 IN UINT8 *Buffer,\r
174 IN ESAL_FWB_GLOBAL *Global,\r
175 IN BOOLEAN Virtual\r
ed66e1bc 176 );\r
9071550e 177\r
178EFI_STATUS\r
179FvbEraseBlock (\r
180 IN UINTN Instance,\r
181 IN EFI_LBA Lba,\r
182 IN ESAL_FWB_GLOBAL *Global,\r
183 IN BOOLEAN Virtual\r
ed66e1bc 184 );\r
9071550e 185\r
186EFI_STATUS\r
187FvbSetVolumeAttributes (\r
188 IN UINTN Instance,\r
8ee3a199 189 IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes,\r
9071550e 190 IN ESAL_FWB_GLOBAL *Global,\r
191 IN BOOLEAN Virtual\r
ed66e1bc 192 );\r
9071550e 193\r
194EFI_STATUS\r
195FvbGetVolumeAttributes (\r
196 IN UINTN Instance,\r
8ee3a199 197 OUT EFI_FVB_ATTRIBUTES_2 *Attributes,\r
9071550e 198 IN ESAL_FWB_GLOBAL *Global,\r
199 IN BOOLEAN Virtual\r
ed66e1bc 200 );\r
9071550e 201\r
202EFI_STATUS\r
203FvbGetPhysicalAddress (\r
204 IN UINTN Instance,\r
205 OUT EFI_PHYSICAL_ADDRESS *Address,\r
206 IN ESAL_FWB_GLOBAL *Global,\r
207 IN BOOLEAN Virtual\r
ed66e1bc 208 );\r
9071550e 209\r
210EFI_STATUS\r
211EFIAPI\r
212FvbInitialize (\r
213 IN EFI_HANDLE ImageHandle,\r
214 IN EFI_SYSTEM_TABLE *SystemTable\r
ed66e1bc 215 );\r
9071550e 216\r
217VOID\r
218EFIAPI\r
219FvbClassAddressChangeEvent (\r
220 IN EFI_EVENT Event,\r
221 IN VOID *Context\r
ed66e1bc 222 );\r
9071550e 223\r
224EFI_STATUS\r
225FvbSpecificInitialize (\r
226 IN ESAL_FWB_GLOBAL *mFvbModuleGlobal\r
ed66e1bc 227 );\r
9071550e 228\r
229EFI_STATUS\r
230FvbGetLbaAddress (\r
231 IN UINTN Instance,\r
232 IN EFI_LBA Lba,\r
233 OUT UINTN *LbaAddress,\r
234 OUT UINTN *LbaLength,\r
235 OUT UINTN *NumOfBlocks,\r
236 IN ESAL_FWB_GLOBAL *Global,\r
237 IN BOOLEAN Virtual\r
ed66e1bc 238 );\r
9071550e 239\r
9071550e 240//\r
241// Protocol APIs\r
242//\r
243EFI_STATUS\r
244EFIAPI\r
245FvbProtocolGetAttributes (\r
246 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
8ee3a199 247 OUT EFI_FVB_ATTRIBUTES_2 *Attributes\r
ed66e1bc 248 );\r
9071550e 249\r
250EFI_STATUS\r
251EFIAPI\r
252FvbProtocolSetAttributes (\r
253 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
8ee3a199 254 IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes\r
ed66e1bc 255 );\r
9071550e 256\r
257EFI_STATUS\r
258EFIAPI\r
259FvbProtocolGetPhysicalAddress (\r
260 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
261 OUT EFI_PHYSICAL_ADDRESS *Address\r
ed66e1bc 262 );\r
9071550e 263\r
264EFI_STATUS\r
265EFIAPI\r
266FvbProtocolGetBlockSize (\r
267 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
268 IN EFI_LBA Lba,\r
269 OUT UINTN *BlockSize,\r
270 OUT UINTN *NumOfBlocks\r
ed66e1bc 271 );\r
9071550e 272\r
273EFI_STATUS\r
274EFIAPI\r
275FvbProtocolRead (\r
276 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
277 IN EFI_LBA Lba,\r
278 IN UINTN Offset,\r
279 IN OUT UINTN *NumBytes,\r
280 IN UINT8 *Buffer\r
ed66e1bc 281 );\r
9071550e 282\r
283EFI_STATUS\r
284EFIAPI\r
285FvbProtocolWrite (\r
286 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
287 IN EFI_LBA Lba,\r
288 IN UINTN Offset,\r
289 IN OUT UINTN *NumBytes,\r
290 IN UINT8 *Buffer\r
ed66e1bc 291 );\r
9071550e 292\r
293EFI_STATUS\r
294EFIAPI\r
295FvbProtocolEraseBlocks (\r
296 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
297 ... \r
ed66e1bc 298 );\r
9071550e 299\r
9071550e 300#endif\r