4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FFS file access utilities.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCopyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncThis program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncare licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncwhich accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Get the FFS file state by checking the highest bit set in the header's state field.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ErasePolarity Erase polarity attribute of the firmware volume
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param FfsHeader Points to the FFS file header
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return FFS File state
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while (HighestBit != 0 && ((HighestBit & FileState) == 0)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Check if a block of buffer is erased.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ErasePolarity Erase polarity attribute of the firmware volume
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param InBuffer The buffer to be checked
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param BufferSize Size of the buffer in bytes
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval TRUE The block of buffer is erased
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval FALSE The block of buffer is not erased
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Verify checksum of the firmware volume header.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param FvHeader Points to the firmware volume header to be checked
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval TRUE Checksum verification passed
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval FALSE Checksum verification failed
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Checksum = CalculateSum16 ((UINT16 *) FvHeader, FvHeader->HeaderLength);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Verify checksum of the FFS file header.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param FfsHeader Points to the FFS file header to be checked
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval TRUE Checksum verification passed
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval FALSE Checksum verification failed
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HeaderChecksum = CalculateSum8 ((UINT8 *) FfsHeader, sizeof (EFI_FFS_FILE_HEADER2));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HeaderChecksum = CalculateSum8 ((UINT8 *) FfsHeader, sizeof (EFI_FFS_FILE_HEADER));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HeaderChecksum = (UINT8) (HeaderChecksum - FfsHeader->State - FfsHeader->IntegrityCheck.Checksum.File);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Check if it's a valid FFS file header.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ErasePolarity Erase polarity attribute of the firmware volume
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param FfsHeader Points to the FFS file header to be checked
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param FileState FFS file state to be returned
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval TRUE Valid FFS file header
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval FALSE Invalid FFS file header
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *FileState = GetFileState (ErasePolarity, FfsHeader);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Here we need to verify header checksum
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Check if it's a valid FFS file.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Here we are sure that it has a valid FFS file header since we must call IsValidFfsHeader() first.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ErasePolarity Erase polarity attribute of the firmware volume
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param FfsHeader Points to the FFS file to be checked
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval TRUE Valid FFS file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval FALSE Invalid FFS file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FileState = GetFileState (ErasePolarity, FfsHeader);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ((FfsHeader->Attributes & FFS_ATTRIB_CHECKSUM) == FFS_ATTRIB_CHECKSUM) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataCheckSum = CalculateCheckSum8 ((CONST UINT8 *) FfsHeader + sizeof (EFI_FFS_FILE_HEADER2), FFS_FILE2_SIZE (FfsHeader) - sizeof(EFI_FFS_FILE_HEADER2));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataCheckSum = CalculateCheckSum8 ((CONST UINT8 *) FfsHeader + sizeof (EFI_FFS_FILE_HEADER), FFS_FILE_SIZE (FfsHeader) - sizeof(EFI_FFS_FILE_HEADER));