diff options
author | raywu <raywu0301@gmail.com> | 2018-06-15 00:00:50 +0800 |
---|---|---|
committer | raywu <raywu0301@gmail.com> | 2018-06-15 00:00:50 +0800 |
commit | b7c51c9cf4864df6aabb99a1ae843becd577237c (patch) | |
tree | eebe9b0d0ca03062955223097e57da84dd618b9a /EDK/Foundation/Framework/Protocol/FirmwareVolumeBlock/FirmwareVolumeBlock.h | |
download | zprj-master.tar.xz |
Diffstat (limited to 'EDK/Foundation/Framework/Protocol/FirmwareVolumeBlock/FirmwareVolumeBlock.h')
-rw-r--r-- | EDK/Foundation/Framework/Protocol/FirmwareVolumeBlock/FirmwareVolumeBlock.h | 270 |
1 files changed, 270 insertions, 0 deletions
diff --git a/EDK/Foundation/Framework/Protocol/FirmwareVolumeBlock/FirmwareVolumeBlock.h b/EDK/Foundation/Framework/Protocol/FirmwareVolumeBlock/FirmwareVolumeBlock.h new file mode 100644 index 0000000..12599f6 --- /dev/null +++ b/EDK/Foundation/Framework/Protocol/FirmwareVolumeBlock/FirmwareVolumeBlock.h @@ -0,0 +1,270 @@ +/*++ + +Copyright (c) 2004, 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 + +Abstract: + + Firmware Volume Block protocol as defined in the Tiano Firmware Volume + specification. + + Low level firmware device access routines to abstract firmware device + hardware. + +--*/ + +#ifndef _FW_VOL_BLOCK_H_ +#define _FW_VOL_BLOCK_H_ + +#include "EfiFirmwareVolumeHeader.h" +//;;## ...AMI_OVERRIDE... Support PI1.x start +#define FRAMEWORK_EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID \ + { \ + 0xDE28BC59, 0x6228, 0x41BD, 0xBD, 0xF6, 0xA3, 0xB9, 0xAD, 0xB5, 0x8D, 0xA1 \ + } + +#define EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL_GUID \ + { \ + 0x8f644fa9, 0xe850, 0x4db1, 0x9c, 0xe2, 0xb, 0x44, 0x69, 0x8e, 0x8d, 0xa4 \ + } + +#if (PI_SPECIFICATION_VERSION < 0x00010000) +#define EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID FRAMEWORK_EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID +#else +// +// EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL is defined in PI 1.0 spec and its GUID value +// is later updated to be the same as that of EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL +// defined in PI 1.2 spec. +// +#define EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL_GUID +#endif + +EFI_FORWARD_DECLARATION (EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL); +typedef EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL; +//;;## ...AMI_OVERRIDE... Support PI1.x end + +typedef +EFI_STATUS +(EFIAPI *EFI_FVB_GET_ATTRIBUTES) ( + IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL * This, + OUT EFI_FVB_ATTRIBUTES * Attributes + ) +/*++ + +Routine Description: + Retrieves Volume attributes. No polarity translations are done. + +Arguments: + This - Calling context + Attributes - output buffer which contains attributes + +Returns: + EFI_INVALID_PARAMETER + EFI_SUCCESS + +--*/ +; + +typedef +EFI_STATUS +(EFIAPI *EFI_FVB_SET_ATTRIBUTES) ( + IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL * This, + IN OUT EFI_FVB_ATTRIBUTES * Attributes + ) +/*++ + +Routine Description: + Sets Volume attributes. No polarity translations are done. + +Arguments: + This - Calling context + Attributes - On input: contains new attributes + On output: contains current attributes of FV + +Returns: + EFI_INVALID_PARAMETER + EFI_SUCCESS + +--*/ +; + +typedef +EFI_STATUS +(EFIAPI *EFI_FVB_GET_PHYSICAL_ADDRESS) ( + IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL * This, + OUT EFI_PHYSICAL_ADDRESS * Address + ) +/*++ + +Routine Description: + Retrieves the physical address of a memory mapped FV. + +Arguments: + This - Calling context + 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. + +Returns: + EFI_UNSUPPORTED + 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 + ) +/*++ + +Routine Description: + Retrieves the size in bytes of a specific block within an FV. + +Arguments: + This - Calling context. + Lba - Indicates which block to return the size for. + BlockSize - BlockSize is a pointer to a caller allocated + UINTN in which the size of the block is returned. + 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. + +Returns: + EFI_INVALID_PARAMETER + 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 + ) +/*++ + +Routine Description: + 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. + +Arguments: + This - Calling context + Lba - Block in which to begin read + Offset - Offset in the block at which to begin read + NumBytes - At input, indicates the requested read size. At output, indicates + the actual number of bytes read. + Buffer - Data buffer in which to place data read. + +Returns: + EFI_INVALID_PARAMETER + EFI_NOT_FOUND + EFI_DEVICE_ERROR + 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 + ) +/*++ + +Routine Description: + + 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. + +Arguments: + This - Calling context + Lba - Block in which to begin write + Offset - Offset in the block at which to begin write + NumBytes - At input, indicates the requested write size. At output, indicates + the actual number of bytes written. + Buffer - Buffer containing source data for the write. + +Returns: + EFI_INVALID_PARAMETER + EFI_NOT_FOUND + EFI_DEVICE_ERROR + EFI_SUCCESS + +--*/ +; + +#define EFI_LBA_LIST_TERMINATOR 0xFFFFFFFFFFFFFFFF + +typedef +EFI_STATUS +(EFIAPI *EFI_FVB_ERASE_BLOCKS) ( + IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL * This, + ... + ) +/*++ + +Routine Description: + 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. + +Arguments: + This - Calling context + ... - Starting LBA followed by Number of Lba to erase. a -1 to terminate + the list. + +Returns: + EFI_INVALID_PARAMETER + EFI_DEVICE_ERROR + EFI_SUCCESS + EFI_ACCESS_DENIED + +--*/ +; + +typedef 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; +} EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL; + +extern EFI_GUID gEfiFirmwareVolumeBlockProtocolGuid; +extern EFI_GUID gEfiFirmwareVolumeBlock2ProtocolGuid; + +#endif |