1. According to PI errata 0000840 and PI 1.2c Vol 3 3.2.3, remove description rows that start with a Required Alignment (bytes) of 2, 4, and 8.
2. In PeiFfsFvPpiGetFileInfo(), FileHeader->Attributes needs to be converted to EFI_FV_FILE_ATTRIBUTES from EFI_FFS_FILE_ATTRIBUTES before it is assigned to FileInfo->FileAttributes. 3. Set EFI_FV_FILE_ATTRIB_FIXED and EFI_FV_FILE_ATTRIB_MEMORY_MAPPED bits for EFI_FV_FILE_ATTRIBUTES based on the FFS file and FV image. Signed-off-by: lzeng14 Reviewed-by: lgao4 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12776 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@ -16,6 +16,18 @@
|
|||||||
|
|
||||||
#include "FwVolDriver.h"
|
#include "FwVolDriver.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Required Alignment Alignment Value in FFS Alignment Value in
|
||||||
|
(bytes) Attributes Field Firmware Volume Interfaces
|
||||||
|
1 0 0
|
||||||
|
16 1 4
|
||||||
|
128 2 7
|
||||||
|
512 3 9
|
||||||
|
1 KB 4 10
|
||||||
|
4 KB 5 12
|
||||||
|
32 KB 6 15
|
||||||
|
64 KB 7 16
|
||||||
|
**/
|
||||||
UINT8 mFvAttributes[] = {0, 4, 7, 9, 10, 12, 15, 16};
|
UINT8 mFvAttributes[] = {0, 4, 7, 9, 10, 12, 15, 16};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -31,9 +43,19 @@ FfsAttributes2FvFileAttributes (
|
|||||||
IN EFI_FFS_FILE_ATTRIBUTES FfsAttributes
|
IN EFI_FFS_FILE_ATTRIBUTES FfsAttributes
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
FfsAttributes = (EFI_FFS_FILE_ATTRIBUTES) ((FfsAttributes & FFS_ATTRIB_DATA_ALIGNMENT) >> 3);
|
UINT8 DataAlignment;
|
||||||
ASSERT (FfsAttributes < 8);
|
EFI_FV_FILE_ATTRIBUTES FileAttribute;
|
||||||
return (EFI_FV_FILE_ATTRIBUTES) mFvAttributes[FfsAttributes];
|
|
||||||
|
DataAlignment = (UINT8) ((FfsAttributes & FFS_ATTRIB_DATA_ALIGNMENT) >> 3);
|
||||||
|
ASSERT (DataAlignment < 8);
|
||||||
|
|
||||||
|
FileAttribute = (EFI_FV_FILE_ATTRIBUTES) mFvAttributes[DataAlignment];
|
||||||
|
|
||||||
|
if ((FfsAttributes & FFS_ATTRIB_FIXED) == FFS_ATTRIB_FIXED) {
|
||||||
|
FileAttribute |= EFI_FV_FILE_ATTRIB_FIXED;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FileAttribute;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -200,6 +222,9 @@ FvGetNextFile (
|
|||||||
*FileType = FfsFileHeader->Type;
|
*FileType = FfsFileHeader->Type;
|
||||||
CopyGuid (NameGuid, &FfsFileHeader->Name);
|
CopyGuid (NameGuid, &FfsFileHeader->Name);
|
||||||
*Attributes = FfsAttributes2FvFileAttributes (FfsFileHeader->Attributes);
|
*Attributes = FfsAttributes2FvFileAttributes (FfsFileHeader->Attributes);
|
||||||
|
if ((FvDevice->FwVolHeader->Attributes & EFI_FVB2_MEMORY_MAPPED) == EFI_FVB2_MEMORY_MAPPED) {
|
||||||
|
*Attributes |= EFI_FV_FILE_ATTRIB_MEMORY_MAPPED;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// we need to substract the header size
|
// we need to substract the header size
|
||||||
@ -377,6 +402,9 @@ FvReadFile (
|
|||||||
//
|
//
|
||||||
*FoundType = FfsHeader->Type;
|
*FoundType = FfsHeader->Type;
|
||||||
*FileAttributes = FfsAttributes2FvFileAttributes (FfsHeader->Attributes);
|
*FileAttributes = FfsAttributes2FvFileAttributes (FfsHeader->Attributes);
|
||||||
|
if ((FvDevice->FwVolHeader->Attributes & EFI_FVB2_MEMORY_MAPPED) == EFI_FVB2_MEMORY_MAPPED) {
|
||||||
|
*FileAttributes |= EFI_FV_FILE_ATTRIB_MEMORY_MAPPED;
|
||||||
|
}
|
||||||
*AuthenticationStatus = 0;
|
*AuthenticationStatus = 0;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
Reference in New Issue
Block a user