mirror of https://github.com/acidanthera/audk.git
252 lines
8.5 KiB
C
252 lines
8.5 KiB
C
|
/** @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
|