]> git.proxmox.com Git - mirror_edk2.git/blame - Vlv2TbltDevicePkg/FvbRuntimeDxe/FvbService.h
Vlv2TbltDevicePkg: Remove DxeTcg2PhysicalPresenceLibNull
[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
6 This program and the accompanying materials are licensed and made available under\r\r
7 the terms and conditions of the BSD License that accompanies this distribution. \r\r
8 The full text of the license may be found at \r\r
9 http://opensource.org/licenses/bsd-license.php. \r\r
10 \r\r
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r\r
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r\r
13 \r\r
14\r
15**/\r
16\r
17#ifndef _FW_BLOCK_SERVICE_H\r
18#define _FW_BLOCK_SERVICE_H\r
19\r
20#include <Guid/EventGroup.h>\r
21#include <Guid/FirmwareFileSystem2.h>\r
22#include <Guid/SystemNvDataGuid.h>\r
23#include <Protocol/DevicePath.h>\r
24#include <Protocol/FirmwareVolumeBlock.h>\r
25\r
26#include <Library/UefiDriverEntryPoint.h>\r
27#include <Library/UefiBootServicesTableLib.h>\r
28#include <Library/UefiLib.h>\r
29#include <Library/BaseLib.h>\r
30#include <Library/DebugLib.h>\r
31#include <Library/BaseMemoryLib.h>\r
32#include <Library/IoLib.h>\r
33#include <Library/CacheMaintenanceLib.h>\r
34#include <Library/MemoryAllocationLib.h>\r
35#include <Library/PcdLib.h>\r
36#include <Library/FlashDeviceLib.h>\r
37#include <Library/DevicePathLib.h>\r
38\r
39//\r
40// Define two helper macro to extract the Capability field or Status field in FVB\r
41// bit fields.\r
42//\r
43#define EFI_FVB2_CAPABILITIES (EFI_FVB2_READ_DISABLED_CAP | \\r
44 EFI_FVB2_READ_ENABLED_CAP | \\r
45 EFI_FVB2_WRITE_DISABLED_CAP | \\r
46 EFI_FVB2_WRITE_ENABLED_CAP | \\r
47 EFI_FVB2_LOCK_CAP \\r
48 )\r
49\r
50#define EFI_FVB2_STATUS (EFI_FVB2_READ_STATUS | EFI_FVB2_WRITE_STATUS | EFI_FVB2_LOCK_STATUS)\r
51\r
52\r
53typedef struct {\r
54 UINTN FvBase;\r
55 UINTN NumOfBlocks;\r
56 //\r
57 // Note!!!: VolumeHeader must be the last element\r
58 // of the structure.\r
59 //\r
60 EFI_FIRMWARE_VOLUME_HEADER VolumeHeader;\r
61} EFI_FW_VOL_INSTANCE;\r
62\r
63typedef struct {\r
64 EFI_FW_VOL_INSTANCE *FvInstance;\r
65 UINT32 NumFv;\r
66} FWB_GLOBAL;\r
67\r
68//\r
69// Fvb Protocol instance data.\r
70//\r
71#define FVB_DEVICE_FROM_THIS(a) CR(a, EFI_FW_VOL_BLOCK_DEVICE, FwVolBlockInstance, FVB_DEVICE_SIGNATURE)\r
72#define FVB_EXTEND_DEVICE_FROM_THIS(a) CR(a, EFI_FW_VOL_BLOCK_DEVICE, FvbExtension, FVB_DEVICE_SIGNATURE)\r
73#define FVB_DEVICE_SIGNATURE SIGNATURE_32('F','V','B','C')\r
74\r
75typedef struct {\r
76 MEDIA_FW_VOL_DEVICE_PATH FvDevPath;\r
77 EFI_DEVICE_PATH_PROTOCOL EndDevPath;\r
78} FV_PIWG_DEVICE_PATH;\r
79\r
80typedef struct {\r
81 MEMMAP_DEVICE_PATH MemMapDevPath;\r
82 EFI_DEVICE_PATH_PROTOCOL EndDevPath;\r
83} FV_MEMMAP_DEVICE_PATH;\r
84\r
85typedef struct {\r
86 UINT32 Signature;\r
87 EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
88 UINTN Instance;\r
89 EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL FwVolBlockInstance;\r
90} EFI_FW_VOL_BLOCK_DEVICE;\r
91\r
92EFI_STATUS\r
93GetFvbInfo (\r
94 IN EFI_PHYSICAL_ADDRESS FvBaseAddress,\r
95 OUT EFI_FIRMWARE_VOLUME_HEADER **FvbInfo\r
96 );\r
97\r
98//\r
99// Protocol APIs\r
100//\r
101EFI_STATUS\r
102EFIAPI\r
103FvbProtocolGetAttributes (\r
104 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
105 OUT EFI_FVB_ATTRIBUTES_2 *Attributes\r
106 );\r
107\r
108EFI_STATUS\r
109EFIAPI\r
110FvbProtocolSetAttributes (\r
111 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
112 IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes\r
113 );\r
114\r
115EFI_STATUS\r
116EFIAPI\r
117FvbProtocolGetPhysicalAddress (\r
118 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
119 OUT EFI_PHYSICAL_ADDRESS *Address\r
120 );\r
121\r
122EFI_STATUS\r
123EFIAPI\r
124FvbProtocolGetBlockSize (\r
125 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
126 IN EFI_LBA Lba,\r
127 OUT UINTN *BlockSize,\r
128 OUT UINTN *NumOfBlocks\r
129 );\r
130\r
131EFI_STATUS\r
132EFIAPI\r
133FvbProtocolRead (\r
134 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
135 IN EFI_LBA Lba,\r
136 IN UINTN Offset,\r
137 IN OUT UINTN *NumBytes,\r
138 OUT UINT8 *Buffer\r
139 );\r
140\r
141EFI_STATUS\r
142EFIAPI\r
143FvbProtocolWrite (\r
144 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
145 IN EFI_LBA Lba,\r
146 IN UINTN Offset,\r
147 IN OUT UINTN *NumBytes,\r
148 IN UINT8 *Buffer\r
149 );\r
150\r
151EFI_STATUS\r
152EFIAPI\r
153FvbProtocolEraseBlocks (\r
154 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
155 ...\r
156 );\r
157\r
158EFI_FW_VOL_INSTANCE *\r
159GetFvbInstance (\r
160 IN UINTN Instance\r
161 );\r
162\r
163BOOLEAN\r
164IsFvHeaderValid (\r
165 IN EFI_PHYSICAL_ADDRESS FvBase,\r
166 IN CONST EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader\r
167 );\r
168\r
169VOID\r
170InstallFvbProtocol (\r
171 IN EFI_FW_VOL_INSTANCE *FwhInstance,\r
172 IN UINTN InstanceNum\r
173 );\r
174\r
175EFI_STATUS\r
176FvbInitialize (\r
177 VOID\r
178 );\r
179\r
180extern FWB_GLOBAL mFvbModuleGlobal;\r
181extern EFI_FW_VOL_BLOCK_DEVICE mFvbDeviceTemplate;\r
182extern FV_MEMMAP_DEVICE_PATH mFvMemmapDevicePathTemplate;\r
183extern FV_PIWG_DEVICE_PATH mFvPIWGDevicePathTemplate;\r
184extern UINT32 mPlatformFvBaseAddress[3];\r
185\r
186#endif\r
187\r