EFI FIRMWARE VOLUME HEADER

From PhoenixWiki

Jump to: navigation, search

Describes the features and layout of the firmware volume.

Contents

Prototype

#include "EfiFirmwareVolumeHeader.h"
typedef struct {
  UINT8                   ZeroVector[16];
  EFI_GUID                FileSystemGuid;
  UINT64                  FvLength;
  UINT32                  Signature;
  EFI_FVB_ATTRIBUTES      Attributes;
  UINT16                  HeaderLength;
  UINT16                  Checksum;
  UINT8                   Reserved[3];
  UINT8                   Revision;
  EFI_FV_BLOCK_MAP_ENTRY  FvBlockMap[1];
} EFI_FIRMWARE_VOLUME_HEADER;

Members

Members

Member Description
ZeroVector The first 16 bytes are reserved to allow for the reset vector of processors whose reset vector is at address 0.
FileSystemGuid Declares the file system with which the firmware volume is formatted.
FvLength Length in bytes of the complete firmware volume, including the header.
Signature Set to {'_','F','V','H'}.
Attributes Declares capabilities and power-on defaults for the firmware volume.
HeaderLength Length in bytes of the complete firmware volume header.
Checksum A 16-bit checksum of the firmware volume header. A valid header sums to zero.
Reserved In this version of the specification, this field must always be set to zero.
Revision Set to 1. Future versions of this specification may define new header fields and will increment the Revision field accordingly.
FvBlockMap An array of run-length encoded FvBlockMapEntry structures. The array is terminated with an entry of {0,0}.
Entry Description
FvBlockMapEntry.NumBlocks The number of blocks in the run.
FvBlockMapEntry.BlockLength The length of each block in the run.

Description

A firmware volume based on a block device begins with a header that describes the features and layout of the firmware volume. This header includes a description of the capabilities, state, and block map of the device.

The block map is a run-length-encoded array of logical block definitions. This design allows a reasonable mechanism of describing the block layout of typical firmware devices. Each block can be referenced by its logical block address (LBA). The LBA is a zero-based enumeration of all of the blocks—i.e., LBA 0 is the first block, LBA 1 is the second block, and LBA n is the (n-1) device.

The header is always located at the beginning of LBA 0.


Copyright (C) 2008,2010 Phoenix Technologies Ltd. All Rights Reserved. Portions copyright © 2004 Intel Corporation. Used with permission.

Personal tools