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