/** @file | |
This file declares Firmware Volume Block protocol. | |
Low level firmware device access routines to abstract firmware device | |
hardware. | |
Copyright (c) 2006, Intel Corporation | |
All rights reserved. This program and the accompanying materials | |
are licensed and made available under the terms and conditions of the BSD License | |
which accompanies this distribution. The full text of the license may be found at | |
http://opensource.org/licenses/bsd-license.php | |
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
Module Name: FirmwareVolumeBlock.h | |
@par Revision Reference: | |
This protocol is defined in Framework of EFI Firmware Volume Block specification. | |
Version 0.9 | |
**/ | |
#ifndef __FIRMWARE_VOLUME_BLOCK_H__ | |
#define __FIRMWARE_VOLUME_BLOCK_H__ | |
#define EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID \ | |
{ \ | |
0xDE28BC59, 0x6228, 0x41BD, {0xBD, 0xF6, 0xA3, 0xB9, 0xAD, 0xB5, 0x8D, 0xA1 } \ | |
} | |
typedef struct _EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL; | |
/** | |
Retrieves Volume attributes. No polarity translations are done. | |
@param This Calling context | |
@param Attributes output buffer which contains attributes | |
@retval EFI_INVALID_PARAMETER | |
@retval EFI_SUCCESS | |
**/ | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_FVB_GET_ATTRIBUTES) ( | |
IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, | |
OUT EFI_FVB_ATTRIBUTES *Attributes | |
) | |
; | |
/** | |
Sets Volume attributes. No polarity translations are done. | |
@param This Calling context | |
@param Attributes On input: contains new attributes | |
On output: contains current attributes of FV | |
@retval EFI_INVALID_PARAMETER | |
@retval EFI_SUCCESS | |
**/ | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_FVB_SET_ATTRIBUTES) ( | |
IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, | |
IN OUT EFI_FVB_ATTRIBUTES *Attributes | |
) | |
; | |
/** | |
Retrieves the physical address of a memory mapped FV. | |
@param This Calling context | |
@param Attributes Address is a pointer to a caller allocated EFI_PHYSICAL_ADDRESS | |
that on successful return from GetPhysicalAddress() contains the | |
base address of the firmware volume. | |
@retval EFI_UNSUPPORTED | |
@retval EFI_SUCCESS | |
**/ | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_FVB_GET_PHYSICAL_ADDRESS) ( | |
IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, | |
OUT EFI_PHYSICAL_ADDRESS *Address | |
) | |
; | |
/** | |
Retrieves the size in bytes of a specific block within an FV. | |
@param This Calling context. | |
@param Lba Indicates which block to return the size for. | |
@param BlockSize BlockSize is a pointer to a caller allocated | |
UINTN in which the size of the block is returned. | |
@param NumberOfBlocks NumberOfBlocks is a pointer to a caller allocated | |
UINTN in which the number of consecutive blocks | |
starting with Lba is returned. All blocks in this | |
range have a size of BlockSize. | |
@retval EFI_INVALID_PARAMETER | |
@retval EFI_SUCCESS | |
**/ | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_FVB_GET_BLOCK_SIZE) ( | |
IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, | |
IN EFI_LBA Lba, | |
OUT UINTN *BlockSize, | |
OUT UINTN *NumberOfBlocks | |
) | |
; | |
/** | |
Reads data beginning at Lba:Offset from FV and places the data in Buffer. | |
The read terminates either when *NumBytes of data have been read, or when | |
a block boundary is reached. *NumBytes is updated to reflect the actual | |
number of bytes read. | |
@param This Calling context | |
@param Lba Block in which to begin read | |
@param Offset Offset in the block at which to begin read | |
@param NumBytes At input, indicates the requested read size. At output, indicates | |
the actual number of bytes read. | |
@param Buffer Data buffer in which to place data read. | |
@retval EFI_INVALID_PARAMETER | |
@retval EFI_NOT_FOUND | |
@retval EFI_DEVICE_ERROR | |
@retval EFI_SUCCESS | |
**/ | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_FVB_READ) ( | |
IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, | |
IN EFI_LBA Lba, | |
IN UINTN Offset, | |
IN OUT UINTN *NumBytes, | |
OUT UINT8 *Buffer | |
) | |
; | |
/** | |
Writes data beginning at Lba:Offset from FV. The write terminates either | |
when *NumBytes of data have been written, or when a block boundary is | |
reached. *NumBytes is updated to reflect the actual number of bytes | |
written. | |
@param This Calling context | |
@param Lba Block in which to begin write | |
@param Offset Offset in the block at which to begin write | |
@param NumBytes At input, indicates the requested write size. At output, indicates | |
the actual number of bytes written. | |
@param Buffer Buffer containing source data for the write. | |
@retval EFI_INVALID_PARAMETER | |
@retval EFI_NOT_FOUND | |
@retval EFI_DEVICE_ERROR | |
@retval EFI_SUCCESS | |
**/ | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_FVB_WRITE) ( | |
IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, | |
IN EFI_LBA Lba, | |
IN UINTN Offset, | |
IN OUT UINTN *NumBytes, | |
IN UINT8 *Buffer | |
) | |
; | |
#define EFI_LBA_LIST_TERMINATOR 0xFFFFFFFFFFFFFFFFULL | |
/** | |
The EraseBlock() function erases one or more blocks as denoted by the | |
variable argument list. The entire parameter list of blocks must be verified | |
prior to erasing any blocks. If a block is requested that does not exist | |
within the associated firmware volume (it has a larger index than the last | |
block of the firmware volume), the EraseBlock() function must return | |
EFI_INVALID_PARAMETER without modifying the contents of the firmware volume. | |
@param This Calling context | |
@param ... Starting LBA followed by Number of Lba to erase. a -1 to terminate | |
the list. | |
@retval EFI_INVALID_PARAMETER | |
@retval EFI_DEVICE_ERROR | |
@retval EFI_SUCCESS | |
@retval EFI_ACCESS_DENIED | |
**/ | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_FVB_ERASE_BLOCKS) ( | |
IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, | |
... | |
) | |
; | |
/** | |
@par Protocol Description: | |
This protocol provides control over block-oriented firmware devices. | |
Typically, the FFS (or an alternate file system) driver consumes the | |
Firmware Volume Block Protocol and produces the Firmware Volume Protocol. | |
@param GetAttributes | |
Retrieves the current volume attributes. | |
@param SetAttributes | |
Sets the current volume attributes. | |
@param GetPhysicalAddress | |
Retrieves the memory-mapped address of the firmware volume. | |
@param GetBlockSize | |
Retrieves the size for a specific block. | |
@param Read | |
Reads n bytes into a buffer from the firmware volume hardware. | |
@param Write | |
Writes n bytes from a buffer into the firmware volume hardware. | |
@param EraseBlocks | |
Erases specified block(s) and sets all values as indicated by | |
the EFI_FVB_ERASE_POLARITY bit. | |
@param ParentHandle | |
Handle of the parent firmware volume. | |
**/ | |
struct _EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL { | |
EFI_FVB_GET_ATTRIBUTES GetVolumeAttributes; | |
EFI_FVB_SET_ATTRIBUTES SetVolumeAttributes; | |
EFI_FVB_GET_PHYSICAL_ADDRESS GetPhysicalAddress; | |
EFI_FVB_GET_BLOCK_SIZE GetBlockSize; | |
EFI_FVB_READ Read; | |
EFI_FVB_WRITE Write; | |
EFI_FVB_ERASE_BLOCKS EraseBlocks; | |
EFI_HANDLE ParentHandle; | |
}; | |
extern EFI_GUID gEfiFirmwareVolumeBlockProtocolGuid; | |
#endif |