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
85 EFI_GUID Guid
= EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID
;
87 return EfiCallEsalService (&Guid
, Read
, Instance
, Lba
, Offset
, (UINT64
) NumBytes
, (UINT64
) Buffer
, 0, 0).Status
;
95 IN OUT UINTN
*NumBytes
,
101 Writes specified number of bytes from the input buffer to the block
104 Instance - The FV instance to be written to
105 Lba - The starting logical block index to write to
106 Offset - Offset into the block at which to begin writing
107 NumBytes - Pointer that on input contains the total size of
108 the buffer. On output, it contains the total number
109 of bytes actually written
110 Buffer - Pointer to a caller allocated buffer that contains
111 the source for the write
118 EFI_GUID Guid
= EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID
;
120 return EfiCallEsalService (&Guid
, Write
, Instance
, Lba
, Offset
, (UINT64
) NumBytes
, (UINT64
) Buffer
, 0, 0).Status
;
131 Erases and initializes a firmware volume block
134 Instance - The FV instance to be erased
135 Lba - The logical block index to be erased
142 EFI_GUID Guid
= EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID
;
144 return EfiCallEsalService (&Guid
, EraseBlock
, Instance
, Lba
, 0, 0, 0, 0, 0).Status
;
148 EfiFvbGetVolumeAttributes (
150 OUT EFI_FVB_ATTRIBUTES
*Attributes
155 Retrieves attributes, insures positive polarity of attribute bits, returns
156 resulting attributes in output parameter
159 Instance - The FV instance whose attributes is going to be
161 Attributes - Output buffer which contains attributes
168 EFI_GUID Guid
= EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID
;
170 return EfiCallEsalService (&Guid
, SetVolumeAttributes
, Instance
, (UINT64
) Attributes
, 0, 0, 0, 0, 0).Status
;
174 EfiFvbSetVolumeAttributes (
176 IN EFI_FVB_ATTRIBUTES Attributes
181 Modifies the current settings of the firmware volume according to the
182 input parameter, and returns the new setting of the volume
185 Instance - The FV instance whose attributes is going to be
187 Attributes - On input, it is a pointer to EFI_FVB_ATTRIBUTES
188 containing the desired firmware volume settings.
189 On successful return, it contains the new settings
190 of the firmware volume
197 EFI_GUID Guid
= EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID
;
199 return EfiCallEsalService (&Guid
, SetVolumeAttributes
, Instance
, (UINT64
) Attributes
, 0, 0, 0, 0, 0).Status
;
203 EfiFvbGetPhysicalAddress (
205 OUT EFI_PHYSICAL_ADDRESS
*BaseAddress
210 Retrieves the physical address of a memory mapped FV
213 Instance - The FV instance whose base address is going to be
215 BaseAddress - Pointer to a caller allocated EFI_PHYSICAL_ADDRESS
216 that on successful return, contains the base address
217 of the firmware volume.
224 EFI_GUID Guid
= EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID
;
226 return EfiCallEsalService (&Guid
, GetPhysicalAddress
, Instance
, (UINT64
) BaseAddress
, 0, 0, 0, 0, 0).Status
;
233 OUT UINTN
*BlockSize
,
234 OUT UINTN
*NumOfBlocks
239 Retrieve the size of a logical block
242 Instance - The FV instance whose block size is going to be
244 Lba - Indicates which block to return the size for.
245 BlockSize - A pointer to a caller allocated UINTN in which
246 the size of the block is returned
247 NumOfBlocks - a pointer to a caller allocated UINTN in which the
248 number of consecutive blocks starting with Lba is
249 returned. All blocks in this range have a size of
253 EFI_SUCCESS - The firmware volume was read successfully and
254 contents are in Buffer
258 EFI_GUID Guid
= EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID
;
260 return EfiCallEsalService (
266 (UINT64
) NumOfBlocks
,
274 EfiFvbEraseCustomBlockRange (
277 IN UINTN OffsetStartLba
,
279 IN UINTN OffsetLastLba
284 Erases and initializes a specified range of a firmware volume
287 Instance - The FV instance to be erased
288 StartLba - The starting logical block index to be erased
289 OffsetStartLba - Offset into the starting block at which to
291 LastLba - The last logical block index to be erased
292 OffsetLastLba - Offset into the last block at which to end erasing
299 EFI_GUID Guid
= EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID
;
301 return EfiCallEsalService (
303 EraseCustomBlockRange
,
316 BugBug: Can't turn this off in the current MSA so we need a stub
320 FvbVirtualAddressChangeNotifyEvent (