mirror of https://github.com/acidanthera/audk.git
190 lines
3.3 KiB
C
190 lines
3.3 KiB
C
/** @file
|
|
These functions assist in parsing and manipulating a Firmware Volume.
|
|
|
|
Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
|
**/
|
|
|
|
#ifndef _EFI_FV_LIB_H
|
|
#define _EFI_FV_LIB_H
|
|
|
|
//
|
|
// Include files
|
|
//
|
|
#include <string.h>
|
|
|
|
#include <Common/UefiBaseTypes.h>
|
|
#include <Common/PiFirmwareFile.h>
|
|
#include <Common/PiFirmwareVolume.h>
|
|
|
|
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
|