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