]> git.proxmox.com Git - mirror_edk2.git/blob - OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockService.h
OvmfPkg: QemuFlashFvbServicesRuntimeDxe: remove FvbScratchSpace field
[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 //
27 // BugBug: Add documentation here for data structure!!!!
28 //
29 #define FVB_PHYSICAL 0
30 #define FVB_VIRTUAL 1
31
32 typedef struct {
33 UINTN FvBase[2];
34 UINTN NumOfBlocks;
35 EFI_FIRMWARE_VOLUME_HEADER VolumeHeader;
36 } EFI_FW_VOL_INSTANCE;
37
38 typedef struct {
39 UINT32 NumFv;
40 EFI_FW_VOL_INSTANCE *FvInstance[2];
41 } ESAL_FWB_GLOBAL;
42
43 //
44 // Fvb Protocol instance data
45 //
46 #define FVB_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE, \
47 FwVolBlockInstance, FVB_DEVICE_SIGNATURE)
48
49 #define FVB_EXTEND_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE, \
50 FvbExtension, FVB_DEVICE_SIGNATURE)
51
52 #define FVB_DEVICE_SIGNATURE SIGNATURE_32 ('F', 'V', 'B', 'N')
53
54 typedef struct {
55 MEDIA_FW_VOL_DEVICE_PATH FvDevPath;
56 EFI_DEVICE_PATH_PROTOCOL EndDevPath;
57 } FV_PIWG_DEVICE_PATH;
58
59 typedef struct {
60 MEMMAP_DEVICE_PATH MemMapDevPath;
61 EFI_DEVICE_PATH_PROTOCOL EndDevPath;
62 } FV_MEMMAP_DEVICE_PATH;
63
64 typedef struct {
65 UINTN Signature;
66 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
67 UINTN Instance;
68 EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL FwVolBlockInstance;
69 } EFI_FW_VOL_BLOCK_DEVICE;
70
71 EFI_STATUS
72 GetFvbInfo (
73 IN UINT64 FvLength,
74 OUT EFI_FIRMWARE_VOLUME_HEADER **FvbInfo
75 );
76
77 EFI_STATUS
78 FvbSetVolumeAttributes (
79 IN UINTN Instance,
80 IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
81 IN ESAL_FWB_GLOBAL *Global,
82 IN BOOLEAN Virtual
83 );
84
85 EFI_STATUS
86 FvbGetVolumeAttributes (
87 IN UINTN Instance,
88 OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
89 IN ESAL_FWB_GLOBAL *Global,
90 IN BOOLEAN Virtual
91 );
92
93 EFI_STATUS
94 FvbGetPhysicalAddress (
95 IN UINTN Instance,
96 OUT EFI_PHYSICAL_ADDRESS *Address,
97 IN ESAL_FWB_GLOBAL *Global,
98 IN BOOLEAN Virtual
99 );
100
101 EFI_STATUS
102 EFIAPI
103 FvbInitialize (
104 IN EFI_HANDLE ImageHandle,
105 IN EFI_SYSTEM_TABLE *SystemTable
106 );
107
108
109 VOID
110 EFIAPI
111 FvbClassAddressChangeEvent (
112 IN EFI_EVENT Event,
113 IN VOID *Context
114 );
115
116 EFI_STATUS
117 FvbGetLbaAddress (
118 IN UINTN Instance,
119 IN EFI_LBA Lba,
120 OUT UINTN *LbaAddress,
121 OUT UINTN *LbaLength,
122 OUT UINTN *NumOfBlocks,
123 IN ESAL_FWB_GLOBAL *Global,
124 IN BOOLEAN Virtual
125 );
126
127 //
128 // Protocol APIs
129 //
130 EFI_STATUS
131 EFIAPI
132 FvbProtocolGetAttributes (
133 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
134 OUT EFI_FVB_ATTRIBUTES_2 *Attributes
135 );
136
137 EFI_STATUS
138 EFIAPI
139 FvbProtocolSetAttributes (
140 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
141 IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes
142 );
143
144 EFI_STATUS
145 EFIAPI
146 FvbProtocolGetPhysicalAddress (
147 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
148 OUT EFI_PHYSICAL_ADDRESS *Address
149 );
150
151 EFI_STATUS
152 EFIAPI
153 FvbProtocolGetBlockSize (
154 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
155 IN CONST EFI_LBA Lba,
156 OUT UINTN *BlockSize,
157 OUT UINTN *NumOfBlocks
158 );
159
160 EFI_STATUS
161 EFIAPI
162 FvbProtocolRead (
163 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
164 IN CONST EFI_LBA Lba,
165 IN CONST UINTN Offset,
166 IN OUT UINTN *NumBytes,
167 IN UINT8 *Buffer
168 );
169
170 EFI_STATUS
171 EFIAPI
172 FvbProtocolWrite (
173 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
174 IN EFI_LBA Lba,
175 IN UINTN Offset,
176 IN OUT UINTN *NumBytes,
177 IN UINT8 *Buffer
178 );
179
180 EFI_STATUS
181 EFIAPI
182 FvbProtocolEraseBlocks (
183 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
184 ...
185 );
186
187 #endif