/** @file\r
This file provides control over block-oriented firmware devices.\r
\r
- Copyright (c) 2006 - 2008, Intel Corporation \r
- All rights reserved. This program and the accompanying materials \r
- are licensed and made available under the terms and conditions of the BSD License \r
- which accompanies this distribution. The full text of the license may be found at \r
- http://opensource.org/licenses/bsd-license.php \r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials are licensed and made available under \r
+the terms and conditions of the BSD License that accompanies this distribution. \r
+The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php. \r
+ \r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
\r
@par Revision Reference: PI\r
- Version 1.00.\r
+ Version 1.0 and 1.2.\r
\r
**/\r
\r
#ifndef __FIRMWARE_VOLUME_BLOCK_H__\r
#define __FIRMWARE_VOLUME_BLOCK_H__\r
\r
-\r
+//\r
+// EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL is defined in PI 1.0 spec and its GUID value\r
+// is later updated to be the same as that of EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL\r
+// defined in PI 1.2 spec. \r
+//\r
#define EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID \\r
- { 0xDE28BC59, 0x6228, 0x41BD, {0xBD, 0xF6, 0xA3, 0xB9, 0xAD,0xB5, 0x8D, 0xA1 } }\r
+ { 0x8f644fa9, 0xe850, 0x4db1, {0x9c, 0xe2, 0xb, 0x44, 0x69, 0x8e, 0x8d, 0xa4 } }\r
\r
+#define EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL_GUID \\r
+ { 0x8f644fa9, 0xe850, 0x4db1, {0x9c, 0xe2, 0xb, 0x44, 0x69, 0x8e, 0x8d, 0xa4 } }\r
\r
typedef struct _EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL;\r
\r
+typedef EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL; \r
+\r
/**\r
The GetAttributes() function retrieves the attributes and\r
- current settings of the block. Status Codes Returned\r
+ current settings of the block.\r
\r
- @param This Indicates the EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL instance.\r
+ @param This Indicates the EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL instance.\r
\r
@param Attributes Pointer to EFI_FVB_ATTRIBUTES_2 in which the\r
attributes and current settings are\r
typedef\r
EFI_STATUS\r
(EFIAPI * EFI_FVB_GET_ATTRIBUTES)(\r
- IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
+ IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This,\r
OUT EFI_FVB_ATTRIBUTES_2 *Attributes\r
);\r
\r
The SetAttributes() function sets configurable firmware volume\r
attributes and returns the new settings of the firmware volume.\r
\r
- @param This Indicates the EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL instance.\r
+ @param This Indicates the EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL instance.\r
\r
@param Attributes On input, Attributes is a pointer to\r
EFI_FVB_ATTRIBUTES_2 that contains the\r
typedef\r
EFI_STATUS\r
(EFIAPI * EFI_FVB_SET_ATTRIBUTES)(\r
- IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
+ IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This,\r
IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes\r
);\r
\r
a memory-mapped firmware volume. This function should be called\r
only for memory-mapped firmware volumes.\r
\r
- @param This Indicates the EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL instance.\r
+ @param This Indicates the EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL instance.\r
\r
@param Address Pointer to a caller-allocated\r
EFI_PHYSICAL_ADDRESS that, on successful\r
return from GetPhysicalAddress(), contains the\r
base address of the firmware volume.\r
\r
- @retval EFI_SUCCESS The firmware volume base address is returned.\r
+ @retval EFI_SUCCESS The firmware volume base address was returned.\r
\r
- @retval EFI_NOT_SUPPORTED The firmware volume is not memory mapped.\r
+ @retval EFI_UNSUPPORTED The firmware volume is not memory mapped.\r
\r
**/\r
typedef\r
EFI_STATUS\r
(EFIAPI * EFI_FVB_GET_PHYSICAL_ADDRESS)(\r
- IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
+ IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This,\r
OUT EFI_PHYSICAL_ADDRESS *Address\r
);\r
\r
retrieve the block map (see EFI_FIRMWARE_VOLUME_HEADER).\r
\r
\r
- @param This Indicates the EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL instance.\r
+ @param This Indicates the EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL instance.\r
\r
@param Lba Indicates the block for which to return the size.\r
\r
BlockSize.\r
\r
\r
- @retval EFI_SUCCESS The firmware volume base address is returned.\r
+ @retval EFI_SUCCESS The firmware volume base address was returned.\r
\r
@retval EFI_INVALID_PARAMETER The requested LBA is out of range.\r
\r
typedef\r
EFI_STATUS\r
(EFIAPI * EFI_FVB_GET_BLOCK_SIZE)(\r
- IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
+ IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This,\r
IN EFI_LBA Lba,\r
OUT UINTN *BlockSize,\r
OUT UINTN *NumberOfBlocks\r
indicate the number of bytes actually read. The caller must be\r
aware that a read may be partially completed.\r
\r
- @param This Indicates the EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL instance.\r
+ @param This Indicates the EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL instance.\r
\r
@param Lba The starting logical block index\r
from which to read.\r
@param Buffer Pointer to a caller-allocated buffer that will\r
be used to hold the data that is read.\r
\r
- @retval EFI_SUCCESS The firmware volume was read successfully\r
+ @retval EFI_SUCCESS The firmware volume was read successfully,\r
and contents are in Buffer.\r
\r
@retval EFI_BAD_BUFFER_SIZE Read attempted across an LBA\r
typedef\r
EFI_STATUS\r
(EFIAPI *EFI_FVB_READ)(\r
- IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
+ IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This,\r
IN EFI_LBA Lba,\r
IN UINTN Offset,\r
IN OUT UINTN *NumBytes,\r
function, or else the result will be unpredictable. This\r
unpredictability arises because, for a sticky-write firmware\r
volume, a write may negate a bit in the EFI_FVB_ERASE_POLARITY\r
- state but it cannot flip it back again. In general, before\r
- calling the Write() function, the caller should call the\r
- EraseBlocks() function first to erase the specified block to\r
+ state but cannot flip it back again. Before calling the\r
+ Write() function, it is recommended for the caller to first call \r
+ the EraseBlocks() function to erase the specified block to\r
write. A block erase cycle will transition bits from the\r
(NOT)EFI_FVB_ERASE_POLARITY state back to the\r
EFI_FVB_ERASE_POLARITY state. Implementations should be\r
fully flushed to the hardware before the Write() service\r
returns.\r
\r
- @param This Indicates the EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL instance.\r
+ @param This Indicates the EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL instance.\r
\r
@param Lba The starting logical block index to write to.\r
\r
@param Offset Offset into the block at which to begin writing.\r
\r
- @param NumBytes Pointer to a UINTN. At entry, *NumBytes\r
+ @param NumBytes The pointer to a UINTN. At entry, *NumBytes\r
contains the total size of the buffer. At\r
exit, *NumBytes contains the total number of\r
bytes actually written.\r
\r
- @param Buffer Pointer to a caller-allocated buffer that\r
+ @param Buffer The pointer to a caller-allocated buffer that\r
contains the source for the write.\r
\r
@retval EFI_SUCCESS The firmware volume was written successfully.\r
typedef\r
EFI_STATUS\r
(EFIAPI * EFI_FVB_WRITE)(\r
- IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
+ IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This,\r
IN EFI_LBA Lba,\r
IN UINTN Offset,\r
IN OUT UINTN *NumBytes,\r
flushed to the hardware before the EraseBlocks() service\r
returns.\r
\r
- @param This Indicates the EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL\r
+ @param This Indicates the EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL\r
instance.\r
\r
@param ... The variable argument list is a list of tuples.\r
and consists of the following:\r
- An EFI_LBA that indicates the starting LBA\r
- A UINTN that indicates the number of blocks to\r
- erase\r
+ erase.\r
\r
The list is terminated with an\r
EFI_LBA_LIST_TERMINATOR. For example, the\r
(5-7 and 10-11) are to be erased: EraseBlocks\r
(This, 5, 3, 10, 2, EFI_LBA_LIST_TERMINATOR);\r
\r
- @retval EFI_SUCCESS The erase request was successfully\r
+ @retval EFI_SUCCESS The erase request successfully\r
completed.\r
\r
@retval EFI_ACCESS_DENIED The firmware volume is in the\r
typedef\r
EFI_STATUS\r
(EFIAPI * EFI_FVB_ERASE_BLOCKS)(\r
- IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
+ IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This,\r
...\r
);\r
\r
-/**\r
- @par Protocol Description:\r
- The Firmware Volume Block Protocol is the low-level interface\r
- to a firmware volume. File-level access to a firmware volume\r
- should not be done using the Firmware Volume Block Protocol.\r
- Normal access to a firmware volume must use the Firmware\r
- Volume Protocol. Typically, only the file system driver that\r
- produces the Firmware Volume Protocol will bind to the\r
- Firmware Volume Block Protocol. The Firmware Volume Block\r
- Protocol provides the following:\r
- - Byte-level read/write functionality.\r
- - Block-level erase functionality.\r
- - It further exposes device-hardening features, such as may be\r
- equired to protect the firmware from unwanted overwriting\r
- and/or erasure.\r
- - It is useful to layer a file system driver on top of the\r
- Firmware Volume Block Protocol.\r
-\r
- This file system driver produces the Firmware Volume Protocol,\r
- which provides file-level access to a firmware volume. The\r
- Firmware Volume Protocol abstracts the file system that is\r
- used to format the firmware volume and the hardware\r
- device-hardening features that may be present.\r
-**/\r
-struct _EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL {\r
+///\r
+/// The Firmware Volume Block Protocol is the low-level interface\r
+/// to a firmware volume. File-level access to a firmware volume\r
+/// should not be done using the Firmware Volume Block Protocol.\r
+/// Normal access to a firmware volume must use the Firmware\r
+/// Volume Protocol. Typically, only the file system driver that\r
+/// produces the Firmware Volume Protocol will bind to the\r
+/// Firmware Volume Block Protocol.\r
+///\r
+struct _EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL{\r
EFI_FVB_GET_ATTRIBUTES GetAttributes;\r
EFI_FVB_SET_ATTRIBUTES SetAttributes;\r
EFI_FVB_GET_PHYSICAL_ADDRESS GetPhysicalAddress;\r
EFI_FVB_WRITE Write;\r
EFI_FVB_ERASE_BLOCKS EraseBlocks;\r
///\r
- /// Handle of the parent firmware volume.\r
+ /// The handle of the parent firmware volume.\r
/// \r
EFI_HANDLE ParentHandle;\r
};\r
\r
\r
extern EFI_GUID gEfiFirmwareVolumeBlockProtocolGuid;\r
-\r
+extern EFI_GUID gEfiFirmwareVolumeBlock2ProtocolGuid;\r
\r
#endif\r