]> git.proxmox.com Git - mirror_edk2.git/blame - Vlv2TbltDevicePkg/FvbRuntimeDxe/FvbService.h
Vlv2TbltDevicePkg: Update to use UefiDecompressLib in MdeModulePkg
[mirror_edk2.git] / Vlv2TbltDevicePkg / FvbRuntimeDxe / FvbService.h
CommitLineData
3cbfba02
DW
1/** @file\r
2 The header file for Firmware volume block driver.\r
3\r
4Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>\r
5 \r\r
9dc8036d
MK
6 SPDX-License-Identifier: BSD-2-Clause-Patent\r
7\r
3cbfba02
DW
8 \r\r
9\r
10**/\r
11\r
12#ifndef _FW_BLOCK_SERVICE_H\r
13#define _FW_BLOCK_SERVICE_H\r
14\r
15#include <Guid/EventGroup.h>\r
16#include <Guid/FirmwareFileSystem2.h>\r
17#include <Guid/SystemNvDataGuid.h>\r
18#include <Protocol/DevicePath.h>\r
19#include <Protocol/FirmwareVolumeBlock.h>\r
20\r
21#include <Library/UefiDriverEntryPoint.h>\r
22#include <Library/UefiBootServicesTableLib.h>\r
23#include <Library/UefiLib.h>\r
24#include <Library/BaseLib.h>\r
25#include <Library/DebugLib.h>\r
26#include <Library/BaseMemoryLib.h>\r
27#include <Library/IoLib.h>\r
28#include <Library/CacheMaintenanceLib.h>\r
29#include <Library/MemoryAllocationLib.h>\r
30#include <Library/PcdLib.h>\r
31#include <Library/FlashDeviceLib.h>\r
32#include <Library/DevicePathLib.h>\r
33\r
34//\r
35// Define two helper macro to extract the Capability field or Status field in FVB\r
36// bit fields.\r
37//\r
38#define EFI_FVB2_CAPABILITIES (EFI_FVB2_READ_DISABLED_CAP | \\r
39 EFI_FVB2_READ_ENABLED_CAP | \\r
40 EFI_FVB2_WRITE_DISABLED_CAP | \\r
41 EFI_FVB2_WRITE_ENABLED_CAP | \\r
42 EFI_FVB2_LOCK_CAP \\r
43 )\r
44\r
45#define EFI_FVB2_STATUS (EFI_FVB2_READ_STATUS | EFI_FVB2_WRITE_STATUS | EFI_FVB2_LOCK_STATUS)\r
46\r
47\r
48typedef struct {\r
49 UINTN FvBase;\r
50 UINTN NumOfBlocks;\r
51 //\r
52 // Note!!!: VolumeHeader must be the last element\r
53 // of the structure.\r
54 //\r
55 EFI_FIRMWARE_VOLUME_HEADER VolumeHeader;\r
56} EFI_FW_VOL_INSTANCE;\r
57\r
58typedef struct {\r
59 EFI_FW_VOL_INSTANCE *FvInstance;\r
60 UINT32 NumFv;\r
61} FWB_GLOBAL;\r
62\r
63//\r
64// Fvb Protocol instance data.\r
65//\r
66#define FVB_DEVICE_FROM_THIS(a) CR(a, EFI_FW_VOL_BLOCK_DEVICE, FwVolBlockInstance, FVB_DEVICE_SIGNATURE)\r
67#define FVB_EXTEND_DEVICE_FROM_THIS(a) CR(a, EFI_FW_VOL_BLOCK_DEVICE, FvbExtension, FVB_DEVICE_SIGNATURE)\r
68#define FVB_DEVICE_SIGNATURE SIGNATURE_32('F','V','B','C')\r
69\r
70typedef struct {\r
71 MEDIA_FW_VOL_DEVICE_PATH FvDevPath;\r
72 EFI_DEVICE_PATH_PROTOCOL EndDevPath;\r
73} FV_PIWG_DEVICE_PATH;\r
74\r
75typedef struct {\r
76 MEMMAP_DEVICE_PATH MemMapDevPath;\r
77 EFI_DEVICE_PATH_PROTOCOL EndDevPath;\r
78} FV_MEMMAP_DEVICE_PATH;\r
79\r
80typedef struct {\r
81 UINT32 Signature;\r
82 EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
83 UINTN Instance;\r
84 EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL FwVolBlockInstance;\r
85} EFI_FW_VOL_BLOCK_DEVICE;\r
86\r
87EFI_STATUS\r
88GetFvbInfo (\r
89 IN EFI_PHYSICAL_ADDRESS FvBaseAddress,\r
90 OUT EFI_FIRMWARE_VOLUME_HEADER **FvbInfo\r
91 );\r
92\r
93//\r
94// Protocol APIs\r
95//\r
96EFI_STATUS\r
97EFIAPI\r
98FvbProtocolGetAttributes (\r
99 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
100 OUT EFI_FVB_ATTRIBUTES_2 *Attributes\r
101 );\r
102\r
103EFI_STATUS\r
104EFIAPI\r
105FvbProtocolSetAttributes (\r
106 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
107 IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes\r
108 );\r
109\r
110EFI_STATUS\r
111EFIAPI\r
112FvbProtocolGetPhysicalAddress (\r
113 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
114 OUT EFI_PHYSICAL_ADDRESS *Address\r
115 );\r
116\r
117EFI_STATUS\r
118EFIAPI\r
119FvbProtocolGetBlockSize (\r
120 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
121 IN EFI_LBA Lba,\r
122 OUT UINTN *BlockSize,\r
123 OUT UINTN *NumOfBlocks\r
124 );\r
125\r
126EFI_STATUS\r
127EFIAPI\r
128FvbProtocolRead (\r
129 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
130 IN EFI_LBA Lba,\r
131 IN UINTN Offset,\r
132 IN OUT UINTN *NumBytes,\r
133 OUT UINT8 *Buffer\r
134 );\r
135\r
136EFI_STATUS\r
137EFIAPI\r
138FvbProtocolWrite (\r
139 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
140 IN EFI_LBA Lba,\r
141 IN UINTN Offset,\r
142 IN OUT UINTN *NumBytes,\r
143 IN UINT8 *Buffer\r
144 );\r
145\r
146EFI_STATUS\r
147EFIAPI\r
148FvbProtocolEraseBlocks (\r
149 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
150 ...\r
151 );\r
152\r
153EFI_FW_VOL_INSTANCE *\r
154GetFvbInstance (\r
155 IN UINTN Instance\r
156 );\r
157\r
158BOOLEAN\r
159IsFvHeaderValid (\r
160 IN EFI_PHYSICAL_ADDRESS FvBase,\r
161 IN CONST EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader\r
162 );\r
163\r
164VOID\r
165InstallFvbProtocol (\r
166 IN EFI_FW_VOL_INSTANCE *FwhInstance,\r
167 IN UINTN InstanceNum\r
168 );\r
169\r
170EFI_STATUS\r
171FvbInitialize (\r
172 VOID\r
173 );\r
174\r
175extern FWB_GLOBAL mFvbModuleGlobal;\r
176extern EFI_FW_VOL_BLOCK_DEVICE mFvbDeviceTemplate;\r
177extern FV_MEMMAP_DEVICE_PATH mFvMemmapDevicePathTemplate;\r
178extern FV_PIWG_DEVICE_PATH mFvPIWGDevicePathTemplate;\r
179extern UINT32 mPlatformFvBaseAddress[3];\r
180\r
181#endif\r
182\r