]> git.proxmox.com Git - mirror_edk2.git/blame - EdkNt32Pkg/RuntimeDxe/FvbServices/Common/FwBlockService.h
Fixed EDKT116, which more than one target will break the build.
[mirror_edk2.git] / EdkNt32Pkg / RuntimeDxe / FvbServices / Common / FwBlockService.h
CommitLineData
878ddf1f 1/*++\r
2\r
3Copyright (c) 2006, Intel Corporation \r
4All rights reserved. This program and the accompanying materials \r
5are licensed and made available under the terms and conditions of the BSD License \r
6which accompanies this distribution. The full text of the license may be found at \r
7http://opensource.org/licenses/bsd-license.php \r
8 \r
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
11\r
12Module Name:\r
13\r
14 FwBlockService.h\r
15 \r
16Abstract:\r
17\r
18 Firmware volume block driver for Intel Firmware Hub (FWH) device\r
19\r
20--*/\r
21\r
22#ifndef _FW_BLOCK_SERVICE_H\r
23#define _FW_BLOCK_SERVICE_H\r
24\r
25//\r
26// Statements that include other header files\r
27//\r
28#include "Tiano.h"\r
29#include "EfiFirmwareVolumeHeader.h"\r
30#include "EfiRuntimeLib.h"\r
31#include "EfiHobLib.h"\r
32#include "EfiScriptLib.h"\r
33\r
34#include EFI_PROTOCOL_PRODUCER (FirmwareVolumeBlock)\r
35#include EFI_PROTOCOL_PRODUCER (FvbExtension)\r
36#include EFI_GUID_DEFINITION (AlternateFvBlock)\r
37#include EFI_GUID_DEFINITION (Hob)\r
38#include EFI_GUID_DEFINITION (DxeServices)\r
39#include EFI_PROTOCOL_CONSUMER (CpuIo)\r
40\r
41#define FVB_MAX_RETRY_TIMES 10000000\r
42#define FWH_BLOCK_ERASE_SETUP_COMMAND 0x20\r
43#define FWH_BLOCK_ERASE_CONFIRM_COMMAND 0xd0\r
44#define FWH_READ_STATUS_COMMAND 0x70\r
45#define FWH_CLEAR_STATUS_COMMAND 0x50\r
46#define FWH_READ_ARRAY_COMMAND 0xff\r
47#define FWH_WRITE_SETUP_COMMAND 0x40\r
48#define FWH_OPEN_FEATURE_SPACE_COMMAND 0x91\r
49#define FWH_READ_LOCK (1 << 2)\r
50#define FWH_WRITE_LOCK (1 << 1)\r
51#define FWH_LOCK_DOWN 1\r
52#define FWH_WRITE_STATE_STATUS (1 << 7)\r
53#define FWH_ERASE_STATUS (1 << 5)\r
54#define FWH_PROGRAM_STATUS (1 << 4)\r
55#define FWH_VPP_STATUS (1 << 3)\r
56#define STALL_TIME 5\r
57#define FWH_ERASE_STATUS_BITS (FWH_ERASE_STATUS || FWH_VPP_STATUS)\r
58#define FWH_WRITE_STATUS_BITS (FWH_WRITE_STATUS || FWH_VPP_STATUS)\r
59#define CFI_BLOCK_LOCK_UNLOCK 0x60\r
60#define CFI_BLOCK_LOCK_CONFIRM 1\r
61#define CFI_BLOCK_UNLOCK_CONFIRM 0xD0\r
62#define CFI_QUERY 0x98\r
63\r
64//\r
65// BugBug: Add documentation here for data structure!!!!\r
66//\r
67#define FVB_PHYSICAL 0\r
68#define FVB_VIRTUAL 1\r
69\r
70typedef struct {\r
71 EFI_LOCK FvbDevLock;\r
72 UINTN FvBase[2];\r
73 UINTN FvWriteBase[2];\r
74 UINTN NumOfBlocks;\r
75 BOOLEAN WriteEnabled;\r
76 EFI_FIRMWARE_VOLUME_HEADER VolumeHeader;\r
77} EFI_FW_VOL_INSTANCE;\r
78\r
79typedef struct {\r
80 UINT32 NumFv;\r
81 EFI_FW_VOL_INSTANCE *FvInstance[2];\r
82 UINT8 *FvbScratchSpace[2];\r
83} ESAL_FWB_GLOBAL;\r
84\r
85//\r
86// Fvb Protocol instance data\r
87//\r
88#define FVB_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE, FwVolBlockInstance, FVB_DEVICE_SIGNATURE)\r
89#define FVB_EXTEND_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE, FvbExtension, FVB_DEVICE_SIGNATURE)\r
90#define FVB_DEVICE_SIGNATURE EFI_SIGNATURE_32 ('F', 'V', 'B', 'C')\r
91\r
92typedef struct {\r
93 MEMMAP_DEVICE_PATH MemMapDevPath;\r
94 EFI_DEVICE_PATH_PROTOCOL EndDevPath;\r
95} FV_DEVICE_PATH;\r
96\r
97typedef struct {\r
98 UINTN Signature;\r
99 FV_DEVICE_PATH DevicePath;\r
100 UINTN Instance;\r
101 EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL FwVolBlockInstance;\r
102 EFI_FVB_EXTENSION_PROTOCOL FvbExtension;\r
103} EFI_FW_VOL_BLOCK_DEVICE;\r
104\r
105EFI_STATUS\r
106GetFvbInfo (\r
107 IN EFI_PHYSICAL_ADDRESS FvBaseAddress,\r
108 OUT EFI_FIRMWARE_VOLUME_HEADER **FvbInfo\r
109 )\r
110;\r
111\r
112EFI_STATUS\r
113EnableFvbWrites (\r
114 IN BOOLEAN EnableWrites\r
115 )\r
116;\r
117\r
118EFI_STATUS\r
119PlatformGetFvbWriteBase (\r
120 IN UINTN CurrentBaseAddress,\r
121 IN UINTN *NewBaseAddress,\r
122 IN BOOLEAN *WriteEnabled\r
123 )\r
124;\r
125\r
126EFI_STATUS\r
127EnablePlatformFvb (\r
128 VOID\r
129 )\r
130;\r
131\r
132BOOLEAN\r
133SetPlatformFvbLock (\r
134 IN UINTN LbaAddress\r
135 )\r
136;\r
137\r
138EFI_STATUS\r
139FvbReadBlock (\r
140 IN UINTN Instance,\r
141 IN EFI_LBA Lba,\r
142 IN UINTN BlockOffset,\r
143 IN OUT UINTN *NumBytes,\r
144 IN UINT8 *Buffer,\r
145 IN ESAL_FWB_GLOBAL *Global,\r
146 IN BOOLEAN Virtual\r
147 )\r
148;\r
149\r
150EFI_STATUS\r
151FvbWriteBlock (\r
152 IN UINTN Instance,\r
153 IN EFI_LBA Lba,\r
154 IN UINTN BlockOffset,\r
155 IN OUT UINTN *NumBytes,\r
156 IN UINT8 *Buffer,\r
157 IN ESAL_FWB_GLOBAL *Global,\r
158 IN BOOLEAN Virtual\r
159 )\r
160;\r
161\r
162EFI_STATUS\r
163FvbEraseBlock (\r
164 IN UINTN Instance,\r
165 IN EFI_LBA Lba,\r
166 IN ESAL_FWB_GLOBAL *Global,\r
167 IN BOOLEAN Virtual\r
168 )\r
169;\r
170\r
171EFI_STATUS\r
172FvbSetVolumeAttributes (\r
173 IN UINTN Instance,\r
174 IN OUT EFI_FVB_ATTRIBUTES *Attributes,\r
175 IN ESAL_FWB_GLOBAL *Global,\r
176 IN BOOLEAN Virtual\r
177 )\r
178;\r
179\r
180EFI_STATUS\r
181FvbGetVolumeAttributes (\r
182 IN UINTN Instance,\r
183 OUT EFI_FVB_ATTRIBUTES *Attributes,\r
184 IN ESAL_FWB_GLOBAL *Global,\r
185 IN BOOLEAN Virtual\r
186 )\r
187;\r
188\r
189EFI_STATUS\r
190FvbGetPhysicalAddress (\r
191 IN UINTN Instance,\r
192 OUT EFI_PHYSICAL_ADDRESS *Address,\r
193 IN ESAL_FWB_GLOBAL *Global,\r
194 IN BOOLEAN Virtual\r
195 )\r
196;\r
197\r
198EFI_STATUS\r
199EFIAPI\r
200FvbInitialize (\r
201 IN EFI_HANDLE ImageHandle,\r
202 IN EFI_SYSTEM_TABLE *SystemTable\r
203 )\r
204;\r
205\r
206\r
207VOID\r
208EFIAPI\r
209FvbClassAddressChangeEvent (\r
210 IN EFI_EVENT Event,\r
211 IN VOID *Context\r
212 )\r
213;\r
214\r
215EFI_STATUS\r
216FvbSpecificInitialize (\r
217 IN ESAL_FWB_GLOBAL *mFvbModuleGlobal\r
218 )\r
219;\r
220\r
221EFI_STATUS\r
222FvbGetLbaAddress (\r
223 IN UINTN Instance,\r
224 IN EFI_LBA Lba,\r
225 OUT UINTN *LbaAddress,\r
226 OUT UINTN *LbaWriteAddress,\r
227 OUT UINTN *LbaLength,\r
228 OUT UINTN *NumOfBlocks,\r
229 IN ESAL_FWB_GLOBAL *Global,\r
230 IN BOOLEAN Virtual\r
231 )\r
232;\r
233\r
234EFI_STATUS\r
235FvbEraseCustomBlockRange (\r
236 IN UINTN Instance,\r
237 IN EFI_LBA StartLba,\r
238 IN UINTN OffsetStartLba,\r
239 IN EFI_LBA LastLba,\r
240 IN UINTN OffsetLastLba,\r
241 IN ESAL_FWB_GLOBAL *Global,\r
242 IN BOOLEAN Virtual\r
243 )\r
244;\r
245\r
246//\r
247// Protocol APIs\r
248//\r
249EFI_STATUS\r
250EFIAPI\r
251FvbProtocolGetAttributes (\r
252 IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
253 OUT EFI_FVB_ATTRIBUTES *Attributes\r
254 )\r
255;\r
256\r
257EFI_STATUS\r
258EFIAPI\r
259FvbProtocolSetAttributes (\r
260 IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
261 IN OUT EFI_FVB_ATTRIBUTES *Attributes\r
262 )\r
263;\r
264\r
265EFI_STATUS\r
266EFIAPI\r
267FvbProtocolGetPhysicalAddress (\r
268 IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
269 OUT EFI_PHYSICAL_ADDRESS *Address\r
270 )\r
271;\r
272\r
273EFI_STATUS\r
274EFIAPI\r
275FvbProtocolGetBlockSize (\r
276 IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
277 IN EFI_LBA Lba,\r
278 OUT UINTN *BlockSize,\r
279 OUT UINTN *NumOfBlocks\r
280 )\r
281;\r
282\r
283EFI_STATUS\r
284EFIAPI\r
285FvbProtocolRead (\r
286 IN 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
291 )\r
292;\r
293\r
294EFI_STATUS\r
295EFIAPI\r
296FvbProtocolWrite (\r
297 IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
298 IN EFI_LBA Lba,\r
299 IN UINTN Offset,\r
300 IN OUT UINTN *NumBytes,\r
301 IN UINT8 *Buffer\r
302 )\r
303;\r
304\r
305EFI_STATUS\r
306EFIAPI\r
307FvbProtocolEraseBlocks (\r
308 IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
309 ...\r
310 )\r
311;\r
312\r
313EFI_STATUS\r
314EFIAPI\r
315FvbExtendProtocolEraseCustomBlockRange (\r
316 IN EFI_FVB_EXTENSION_PROTOCOL *This,\r
317 IN EFI_LBA StartLba,\r
318 IN UINTN OffsetStartLba,\r
319 IN EFI_LBA LastLba,\r
320 IN UINTN OffsetLastLba\r
321 )\r
322;\r
323\r
324#endif\r