]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Foundation/Library/RuntimeDxe/EfiRuntimeLib/Ipf/Fvb.c
Update the copyright notice format
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Library / RuntimeDxe / EfiRuntimeLib / Ipf / Fvb.c
1 /*++
2
3 Copyright (c) 2004 - 2007, Intel Corporation. All rights reserved.<BR>
4 This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12 Module Name:
13
14 Fvb.c
15
16 Abstract:
17
18 Light weight lib to support Tiano Firmware Volume Block
19 protocol abstraction at runtime.
20
21 All these functions convert EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID
22 class function to the Runtime Lib function. There is a 1 to 1 mapping.
23
24 If you are using any of these lib functions.you must first call FvbInitialize ().
25
26 --*/
27
28 #include "Tiano.h"
29 #include "EfiRuntimeLib.h"
30 #include EFI_PROTOCOL_DEFINITION (ExtendedSalGuid)
31 #include "SalApi.h"
32
33 EFI_STATUS
34 EfiFvbInitialize (
35 VOID
36 )
37 /*++
38
39 Routine Description:
40 Initialize globals and register Fvb Protocol notification function.
41
42 Arguments:
43 None
44
45 Returns:
46 EFI_SUCCESS
47
48 --*/
49 {
50 return EFI_SUCCESS;
51 }
52 //
53 // The following functions wrap Fvb protocol in the Runtime Lib functions.
54 // The Instance translates into Fvb instance. The Fvb order defined by HOBs and
55 // thus the sequence of FVB protocol addition define Instance.
56 //
57 // EfiFvbInitialize () must be called before any of the following functions
58 // must be called.
59 //
60 EFI_STATUS
61 EfiFvbReadBlock (
62 IN UINTN Instance,
63 IN EFI_LBA Lba,
64 IN UINTN Offset,
65 IN OUT UINTN *NumBytes,
66 IN UINT8 *Buffer
67 )
68 /*++
69
70 Routine Description:
71 Reads specified number of bytes into a buffer from the specified block
72
73 Arguments:
74 Instance - The FV instance to be read from
75 Lba - The logical block address to be read from
76 Offset - Offset into the block at which to begin reading
77 NumBytes - Pointer that on input contains the total size of
78 the buffer. On output, it contains the total number
79 of bytes read
80 Buffer - Pointer to a caller allocated buffer that will be
81 used to hold the data read
82
83 Returns:
84 Status code
85
86 --*/
87 {
88 EFI_GUID Guid = EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID;
89
90 return EfiCallEsalService (&Guid, Read, Instance, Lba, Offset, (UINT64) NumBytes, (UINT64) Buffer, 0, 0).Status;
91 }
92
93 EFI_STATUS
94 EfiFvbWriteBlock (
95 IN UINTN Instance,
96 IN EFI_LBA Lba,
97 IN UINTN Offset,
98 IN OUT UINTN *NumBytes,
99 IN UINT8 *Buffer
100 )
101 /*++
102
103 Routine Description:
104 Writes specified number of bytes from the input buffer to the block
105
106 Arguments:
107 Instance - The FV instance to be written to
108 Lba - The starting logical block index to write to
109 Offset - Offset into the block at which to begin writing
110 NumBytes - Pointer that on input contains the total size of
111 the buffer. On output, it contains the total number
112 of bytes actually written
113 Buffer - Pointer to a caller allocated buffer that contains
114 the source for the write
115
116 Returns:
117 Status code
118
119 --*/
120 {
121 EFI_GUID Guid = EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID;
122
123 return EfiCallEsalService (&Guid, Write, Instance, Lba, Offset, (UINT64) NumBytes, (UINT64) Buffer, 0, 0).Status;
124 }
125
126 EFI_STATUS
127 EfiFvbEraseBlock (
128 IN UINTN Instance,
129 IN UINTN Lba
130 )
131 /*++
132
133 Routine Description:
134 Erases and initializes a firmware volume block
135
136 Arguments:
137 Instance - The FV instance to be erased
138 Lba - The logical block index to be erased
139
140 Returns:
141 Status code
142
143 --*/
144 {
145 EFI_GUID Guid = EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID;
146
147 return EfiCallEsalService (&Guid, EraseBlock, Instance, Lba, 0, 0, 0, 0, 0).Status;
148 }
149
150 EFI_STATUS
151 EfiFvbGetVolumeAttributes (
152 IN UINTN Instance,
153 OUT EFI_FVB_ATTRIBUTES *Attributes
154 )
155 /*++
156
157 Routine Description:
158 Retrieves attributes, insures positive polarity of attribute bits, returns
159 resulting attributes in output parameter
160
161 Arguments:
162 Instance - The FV instance whose attributes is going to be
163 returned
164 Attributes - Output buffer which contains attributes
165
166 Returns:
167 Status code
168
169 --*/
170 {
171 EFI_GUID Guid = EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID;
172
173 return EfiCallEsalService (&Guid, SetVolumeAttributes, Instance, (UINT64) Attributes, 0, 0, 0, 0, 0).Status;
174 }
175
176 EFI_STATUS
177 EfiFvbSetVolumeAttributes (
178 IN UINTN Instance,
179 IN EFI_FVB_ATTRIBUTES Attributes
180 )
181 /*++
182
183 Routine Description:
184 Modifies the current settings of the firmware volume according to the
185 input parameter.
186
187 Arguments:
188 Instance - The FV instance whose attributes is going to be
189 modified
190 Attributes - It is a pointer to EFI_FVB_ATTRIBUTES
191 containing the desired firmware volume settings.
192
193 Returns:
194 Status code
195
196 --*/
197 {
198 EFI_GUID Guid = EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID;
199
200 return EfiCallEsalService (&Guid, SetVolumeAttributes, Instance, (UINT64) (&Attributes), 0, 0, 0, 0, 0).Status;
201 }
202
203 EFI_STATUS
204 EfiFvbGetPhysicalAddress (
205 IN UINTN Instance,
206 OUT EFI_PHYSICAL_ADDRESS *BaseAddress
207 )
208 /*++
209
210 Routine Description:
211 Retrieves the physical address of a memory mapped FV
212
213 Arguments:
214 Instance - The FV instance whose base address is going to be
215 returned
216 BaseAddress - Pointer to a caller allocated EFI_PHYSICAL_ADDRESS
217 that on successful return, contains the base address
218 of the firmware volume.
219
220 Returns:
221 Status code
222
223 --*/
224 {
225 EFI_GUID Guid = EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID;
226
227 return EfiCallEsalService (&Guid, GetPhysicalAddress, Instance, (UINT64) BaseAddress, 0, 0, 0, 0, 0).Status;
228 }
229
230 EFI_STATUS
231 EfiFvbGetBlockSize (
232 IN UINTN Instance,
233 IN EFI_LBA Lba,
234 OUT UINTN *BlockSize,
235 OUT UINTN *NumOfBlocks
236 )
237 /*++
238
239 Routine Description:
240 Retrieve the size of a logical block
241
242 Arguments:
243 Instance - The FV instance whose block size is going to be
244 returned
245 Lba - Indicates which block to return the size for.
246 BlockSize - A pointer to a caller allocated UINTN in which
247 the size of the block is returned
248 NumOfBlocks - a pointer to a caller allocated UINTN in which the
249 number of consecutive blocks starting with Lba is
250 returned. All blocks in this range have a size of
251 BlockSize
252
253 Returns:
254 EFI_SUCCESS - The firmware volume was read successfully and
255 contents are in Buffer
256
257 --*/
258 {
259 EFI_GUID Guid = EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID;
260
261 return EfiCallEsalService (
262 &Guid,
263 GetBlockSize,
264 Instance,
265 Lba,
266 (UINT64) BlockSize,
267 (UINT64) NumOfBlocks,
268 0,
269 0,
270 0
271 ).Status;
272 }
273
274 EFI_STATUS
275 EfiFvbEraseCustomBlockRange (
276 IN UINTN Instance,
277 IN EFI_LBA StartLba,
278 IN UINTN OffsetStartLba,
279 IN EFI_LBA LastLba,
280 IN UINTN OffsetLastLba
281 )
282 /*++
283
284 Routine Description:
285 Erases and initializes a specified range of a firmware volume
286
287 Arguments:
288 Instance - The FV instance to be erased
289 StartLba - The starting logical block index to be erased
290 OffsetStartLba - Offset into the starting block at which to
291 begin erasing
292 LastLba - The last logical block index to be erased
293 OffsetLastLba - Offset into the last block at which to end erasing
294
295 Returns:
296 Status code
297
298 --*/
299 {
300 EFI_GUID Guid = EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID;
301
302 return EfiCallEsalService (
303 &Guid,
304 EraseCustomBlockRange,
305 Instance,
306 StartLba,
307 OffsetStartLba,
308 LastLba,
309 OffsetLastLba,
310 0,
311 0
312 ).Status;
313 }
314 EFI_STATUS
315 EfiFvbShutdown (
316 VOID
317 )
318 /*++
319
320 Routine Description:
321 Release resources allocated in EfiFvbInitialize.
322
323 Arguments:
324 None
325
326 Returns:
327 EFI_SUCCESS
328
329 --*/
330 {
331 return EFI_SUCCESS;
332 }