]> git.proxmox.com Git - mirror_edk2.git/blob - OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockService.h
OvmfPkg/QemuFlashFvbServices: factor out SetPcdFlashNvStorageBaseAddresses
[mirror_edk2.git] / OvmfPkg / QemuFlashFvbServicesRuntimeDxe / FwBlockService.h
1 /**@file
2
3 Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
4
5 SPDX-License-Identifier: BSD-2-Clause-Patent
6
7 Module Name:
8
9 FwBlockService.h
10
11 Abstract:
12
13 Firmware volume block driver for Intel Firmware Hub (FWH) device
14
15 **/
16
17 #ifndef _FW_BLOCK_SERVICE_H
18 #define _FW_BLOCK_SERVICE_H
19
20 typedef struct {
21 UINTN FvBase;
22 UINTN NumOfBlocks;
23 EFI_FIRMWARE_VOLUME_HEADER VolumeHeader;
24 } EFI_FW_VOL_INSTANCE;
25
26 typedef struct {
27 UINT32 NumFv;
28 EFI_FW_VOL_INSTANCE *FvInstance;
29 } ESAL_FWB_GLOBAL;
30
31 extern ESAL_FWB_GLOBAL *mFvbModuleGlobal;
32
33 //
34 // Fvb Protocol instance data
35 //
36 #define FVB_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE, \
37 FwVolBlockInstance, FVB_DEVICE_SIGNATURE)
38
39 #define FVB_EXTEND_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE, \
40 FvbExtension, FVB_DEVICE_SIGNATURE)
41
42 #define FVB_DEVICE_SIGNATURE SIGNATURE_32 ('F', 'V', 'B', 'N')
43
44 typedef struct {
45 MEDIA_FW_VOL_DEVICE_PATH FvDevPath;
46 EFI_DEVICE_PATH_PROTOCOL EndDevPath;
47 } FV_PIWG_DEVICE_PATH;
48
49 typedef struct {
50 MEMMAP_DEVICE_PATH MemMapDevPath;
51 EFI_DEVICE_PATH_PROTOCOL EndDevPath;
52 } FV_MEMMAP_DEVICE_PATH;
53
54 typedef struct {
55 UINTN Signature;
56 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
57 UINTN Instance;
58 EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL FwVolBlockInstance;
59 } EFI_FW_VOL_BLOCK_DEVICE;
60
61 EFI_STATUS
62 GetFvbInfo (
63 IN UINT64 FvLength,
64 OUT EFI_FIRMWARE_VOLUME_HEADER **FvbInfo
65 );
66
67 EFI_STATUS
68 FvbSetVolumeAttributes (
69 IN UINTN Instance,
70 IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
71 IN ESAL_FWB_GLOBAL *Global
72 );
73
74 EFI_STATUS
75 FvbGetVolumeAttributes (
76 IN UINTN Instance,
77 OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
78 IN ESAL_FWB_GLOBAL *Global
79 );
80
81 EFI_STATUS
82 FvbGetPhysicalAddress (
83 IN UINTN Instance,
84 OUT EFI_PHYSICAL_ADDRESS *Address,
85 IN ESAL_FWB_GLOBAL *Global
86 );
87
88 EFI_STATUS
89 EFIAPI
90 FvbInitialize (
91 IN EFI_HANDLE ImageHandle,
92 IN EFI_SYSTEM_TABLE *SystemTable
93 );
94
95
96 VOID
97 EFIAPI
98 FvbClassAddressChangeEvent (
99 IN EFI_EVENT Event,
100 IN VOID *Context
101 );
102
103 EFI_STATUS
104 FvbGetLbaAddress (
105 IN UINTN Instance,
106 IN EFI_LBA Lba,
107 OUT UINTN *LbaAddress,
108 OUT UINTN *LbaLength,
109 OUT UINTN *NumOfBlocks,
110 IN ESAL_FWB_GLOBAL *Global
111 );
112
113 //
114 // Protocol APIs
115 //
116 EFI_STATUS
117 EFIAPI
118 FvbProtocolGetAttributes (
119 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
120 OUT EFI_FVB_ATTRIBUTES_2 *Attributes
121 );
122
123 EFI_STATUS
124 EFIAPI
125 FvbProtocolSetAttributes (
126 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
127 IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes
128 );
129
130 EFI_STATUS
131 EFIAPI
132 FvbProtocolGetPhysicalAddress (
133 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
134 OUT EFI_PHYSICAL_ADDRESS *Address
135 );
136
137 EFI_STATUS
138 EFIAPI
139 FvbProtocolGetBlockSize (
140 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
141 IN CONST EFI_LBA Lba,
142 OUT UINTN *BlockSize,
143 OUT UINTN *NumOfBlocks
144 );
145
146 EFI_STATUS
147 EFIAPI
148 FvbProtocolRead (
149 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
150 IN CONST EFI_LBA Lba,
151 IN CONST UINTN Offset,
152 IN OUT UINTN *NumBytes,
153 IN UINT8 *Buffer
154 );
155
156 EFI_STATUS
157 EFIAPI
158 FvbProtocolWrite (
159 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
160 IN EFI_LBA Lba,
161 IN UINTN Offset,
162 IN OUT UINTN *NumBytes,
163 IN UINT8 *Buffer
164 );
165
166 EFI_STATUS
167 EFIAPI
168 FvbProtocolEraseBlocks (
169 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
170 ...
171 );
172
173 //
174 // The following functions have different implementations dependent on the
175 // module type chosen for building this driver.
176 //
177 VOID
178 InstallProtocolInterfaces (
179 IN EFI_FW_VOL_BLOCK_DEVICE *FvbDevice
180 );
181
182 VOID
183 InstallVirtualAddressChangeHandler (
184 VOID
185 );
186
187 EFI_STATUS
188 MarkIoMemoryRangeForRuntimeAccess (
189 IN EFI_PHYSICAL_ADDRESS BaseAddress,
190 IN UINTN Length
191 );
192
193 VOID
194 SetPcdFlashNvStorageBaseAddresses (
195 VOID
196 );
197
198 #endif