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