/** @file
These functions assist in parsing and manipulating a Firmware Volume.
Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _EFI_FV_LIB_H
#define _EFI_FV_LIB_H
//
// Include files
//
#include 
#include 
#include 
#include 
EFI_STATUS
InitializeFvLib (
  IN VOID                         *Fv,
  IN UINT32                       FvLength
  )
;
EFI_STATUS
GetFvHeader (
  OUT EFI_FIRMWARE_VOLUME_HEADER  **FvHeader,
  OUT UINT32                      *FvLength
  )
;
EFI_STATUS
GetNextFile (
  IN EFI_FFS_FILE_HEADER          *CurrentFile,
  OUT EFI_FFS_FILE_HEADER         **NextFile
  )
;
EFI_STATUS
GetFileByName (
  IN EFI_GUID                     *FileName,
  OUT EFI_FFS_FILE_HEADER         **File
  )
;
EFI_STATUS
GetFileByType (
  IN EFI_FV_FILETYPE              FileType,
  IN UINTN                        Instance,
  OUT EFI_FFS_FILE_HEADER         **File
  )
;
EFI_STATUS
GetSectionByType (
  IN EFI_FFS_FILE_HEADER          *File,
  IN EFI_SECTION_TYPE             SectionType,
  IN UINTN                        Instance,
  OUT EFI_FILE_SECTION_POINTER    *Section
  )
;
//
// will not parse compressed sections
//
EFI_STATUS
VerifyFv (
  IN EFI_FIRMWARE_VOLUME_HEADER   *FvHeader
  )
;
EFI_STATUS
VerifyFfsFile (
  IN EFI_FFS_FILE_HEADER          *FfsHeader
  )
;
UINT32
GetFfsFileLength (
  EFI_FFS_FILE_HEADER *FfsHeader
  )
;
UINT32
GetSectionFileLength (
  EFI_COMMON_SECTION_HEADER *SectionHeader
  )
;
UINT32
GetFfsHeaderLength(
   IN EFI_FFS_FILE_HEADER *FfsHeader
   )
;
UINT32
GetSectionHeaderLength(
   IN EFI_COMMON_SECTION_HEADER *SectionHeader
   )
;
/*++
Routine Description:
  Verify the current pointer points to a FFS file header.
Arguments:
  FfsHeader     Pointer to an alleged FFS file.
Returns:
  EFI_SUCCESS           The Ffs header is valid.
  EFI_NOT_FOUND         This "file" is the beginning of free space.
  EFI_VOLUME_CORRUPTED  The Ffs header is not valid.
--*/
UINT32
GetLength (
  UINT8                           *ThreeByteLength
  )
;
/*++
Routine Description:
  Converts a three byte length value into a UINT32.
Arguments:
  ThreeByteLength   Pointer to the first of the 3 byte length.
Returns:
  UINT32      Size of the section
--*/
EFI_STATUS
GetErasePolarity (
  OUT BOOLEAN   *ErasePolarity
  )
;
/*++
Routine Description:
  This function returns with the FV erase polarity.  If the erase polarity
  for a bit is 1, the function return TRUE.
Arguments:
  ErasePolarity   A pointer to the erase polarity.
Returns:
  EFI_SUCCESS              The function completed successfully.
  EFI_INVALID_PARAMETER    One of the input parameters was invalid.
--*/
UINT8
GetFileState (
  IN BOOLEAN              ErasePolarity,
  IN EFI_FFS_FILE_HEADER  *FfsHeader
  )
;
/*++
Routine Description:
  This function returns a the highest state bit in the FFS that is set.
  It in no way validate the FFS file.
Arguments:
  ErasePolarity The erase polarity for the file state bits.
  FfsHeader     Pointer to a FFS file.
Returns:
  UINT8   The hightest set state of the file.
--*/
#endif