3 Copyright (c) 2006, Intel Corporation
4 All rights reserved. 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
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.
18 Light weight lib to support Tiano Firmware Volume Block
19 protocol abstraction at runtime.
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.
24 If you are using any of these lib functions.you must first call FvbInitialize ().
31 IN EFI_HANDLE ImageHandle
,
32 IN EFI_SYSTEM_TABLE
*SystemTable
37 Initialize globals and register Fvb Protocol notification function.
50 // The following functions wrap Fvb protocol in the Runtime Lib functions.
51 // The Instance translates into Fvb instance. The Fvb order defined by HOBs and
52 // thus the sequence of FVB protocol addition define Instance.
54 // EfiFvbInitialize () must be called before any of the following functions
62 IN OUT UINTN
*NumBytes
,
68 Reads specified number of bytes into a buffer from the specified block
71 Instance - The FV instance to be read from
72 Lba - The logical block address to be read from
73 Offset - Offset into the block at which to begin reading
74 NumBytes - Pointer that on input contains the total size of
75 the buffer. On output, it contains the total number
77 Buffer - Pointer to a caller allocated buffer that will be
78 used to hold the data read
87 *((UINT64
*) &Guid
) = EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID_LO
;
88 *(((UINT64
*)&Guid
) + 1) = EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID_HI
;
90 return EfiCallEsalService (&Guid
, Read
, Instance
, Lba
, Offset
, (UINT64
) NumBytes
, (UINT64
) Buffer
, 0, 0).Status
;
98 IN OUT UINTN
*NumBytes
,
104 Writes specified number of bytes from the input buffer to the block
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
123 *((UINT64
*) &Guid
) = EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID_LO
;
124 *(((UINT64
*)&Guid
) + 1) = EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID_HI
;
126 return EfiCallEsalService (&Guid
, Write
, Instance
, Lba
, Offset
, (UINT64
) NumBytes
, (UINT64
) Buffer
, 0, 0).Status
;
137 Erases and initializes a firmware volume block
140 Instance - The FV instance to be erased
141 Lba - The logical block index to be erased
150 *((UINT64
*) &Guid
) = EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID_LO
;
151 *(((UINT64
*)&Guid
) + 1) = EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID_HI
;
153 return EfiCallEsalService (&Guid
, EraseBlock
, Instance
, Lba
, 0, 0, 0, 0, 0).Status
;
157 EfiFvbGetVolumeAttributes (
159 OUT EFI_FVB_ATTRIBUTES
*Attributes
164 Retrieves attributes, insures positive polarity of attribute bits, returns
165 resulting attributes in output parameter
168 Instance - The FV instance whose attributes is going to be
170 Attributes - Output buffer which contains attributes
179 *((UINT64
*) &Guid
) = EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID_LO
;
180 *(((UINT64
*)&Guid
) + 1) = EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID_HI
;
182 return EfiCallEsalService (&Guid
, SetVolumeAttributes
, Instance
, (UINT64
) Attributes
, 0, 0, 0, 0, 0).Status
;
186 EfiFvbSetVolumeAttributes (
188 IN EFI_FVB_ATTRIBUTES Attributes
193 Modifies the current settings of the firmware volume according to the
194 input parameter, and returns the new setting of the volume
197 Instance - The FV instance whose attributes is going to be
199 Attributes - On input, it is a pointer to EFI_FVB_ATTRIBUTES
200 containing the desired firmware volume settings.
201 On successful return, it contains the new settings
202 of the firmware volume
211 *((UINT64
*) &Guid
) = EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID_LO
;
212 *(((UINT64
*)&Guid
) + 1) = EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID_HI
;
214 return EfiCallEsalService (&Guid
, SetVolumeAttributes
, Instance
, (UINT64
) Attributes
, 0, 0, 0, 0, 0).Status
;
218 EfiFvbGetPhysicalAddress (
220 OUT EFI_PHYSICAL_ADDRESS
*BaseAddress
225 Retrieves the physical address of a memory mapped FV
228 Instance - The FV instance whose base address is going to be
230 BaseAddress - Pointer to a caller allocated EFI_PHYSICAL_ADDRESS
231 that on successful return, contains the base address
232 of the firmware volume.
241 *((UINT64
*) &Guid
) = EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID_LO
;
242 *(((UINT64
*)&Guid
) + 1) = EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID_HI
;
244 return EfiCallEsalService (&Guid
, GetPhysicalAddress
, Instance
, (UINT64
) BaseAddress
, 0, 0, 0, 0, 0).Status
;
251 OUT UINTN
*BlockSize
,
252 OUT UINTN
*NumOfBlocks
257 Retrieve the size of a logical block
260 Instance - The FV instance whose block size is going to be
262 Lba - Indicates which block to return the size for.
263 BlockSize - A pointer to a caller allocated UINTN in which
264 the size of the block is returned
265 NumOfBlocks - a pointer to a caller allocated UINTN in which the
266 number of consecutive blocks starting with Lba is
267 returned. All blocks in this range have a size of
271 EFI_SUCCESS - The firmware volume was read successfully and
272 contents are in Buffer
278 *((UINT64
*) &Guid
) = EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID_LO
;
279 *(((UINT64
*)&Guid
) + 1) = EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID_HI
;
281 return EfiCallEsalService (
287 (UINT64
) NumOfBlocks
,
295 EfiFvbEraseCustomBlockRange (
298 IN UINTN OffsetStartLba
,
300 IN UINTN OffsetLastLba
305 Erases and initializes a specified range of a firmware volume
308 Instance - The FV instance to be erased
309 StartLba - The starting logical block index to be erased
310 OffsetStartLba - Offset into the starting block at which to
312 LastLba - The last logical block index to be erased
313 OffsetLastLba - Offset into the last block at which to end erasing
322 *((UINT64
*) &Guid
) = EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID_LO
;
323 *(((UINT64
*)&Guid
) + 1) = EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID_HI
;
325 return EfiCallEsalService (
327 EraseCustomBlockRange
,
340 BugBug: Can't turn this off in the current MSA so we need a stub
344 FvbVirtualAddressChangeNotifyEvent (