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