mirror of https://github.com/acidanthera/audk.git
ArmPlatformPkg/BootMonFs: Provide mechanism to get BootMonFS file information
Add additional structure to get file meta-data information from BootMonFS based files. AXF files are processed by the Flash loader and the ELF header stripped. The relevant information is stored in the file-system. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Harry Liebel <Harry.Liebel@arm.com> Reviewed-By: Olivier Martin <olivier.martin@arm.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15902 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
91c38d4e94
commit
da5daf369f
|
@ -40,6 +40,8 @@
|
|||
## Include/Guid/ArmGlobalVariableHob.h
|
||||
gArmGlobalVariableGuid = { 0xc3253c90, 0xa24f, 0x4599, { 0xa6, 0x64, 0x1f, 0x88, 0x13, 0x77, 0x8f, 0xc9} }
|
||||
|
||||
gArmBootMonFsFileInfoGuid = { 0x41e26b9c, 0xada6, 0x45b3, { 0x80, 0x8e, 0x23, 0x57, 0xa3, 0x5b, 0x60, 0xd6 } }
|
||||
|
||||
[Ppis]
|
||||
## Include/Ppi/ArmGlobalVariable.h
|
||||
gArmGlobalVariablePpiGuid = { 0xab1c1816, 0xd542, 0x4e6f, {0x9b, 0x1e, 0x8e, 0xcd, 0x92, 0x53, 0xe2, 0xe7} }
|
||||
|
|
|
@ -43,6 +43,7 @@
|
|||
UefiLib
|
||||
|
||||
[Guids]
|
||||
gArmBootMonFsFileInfoGuid
|
||||
gEfiFileSystemInfoGuid
|
||||
gEfiFileInfoGuid
|
||||
gEfiFileSystemVolumeLabelInfoIdGuid
|
||||
|
|
|
@ -250,6 +250,53 @@ GetFileInfo (
|
|||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
GetBootMonFsFileInfo (
|
||||
IN BOOTMON_FS_INSTANCE *Instance,
|
||||
IN BOOTMON_FS_FILE *File,
|
||||
IN OUT UINTN *BufferSize,
|
||||
OUT VOID *Buffer
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
BOOTMON_FS_FILE_INFO *Info;
|
||||
UINTN ResultSize;
|
||||
UINTN Index;
|
||||
|
||||
if (File == Instance->RootFile) {
|
||||
Status = EFI_UNSUPPORTED;
|
||||
} else {
|
||||
ResultSize = SIZE_OF_BOOTMON_FS_FILE_INFO;
|
||||
|
||||
if (*BufferSize < ResultSize) {
|
||||
*BufferSize = ResultSize;
|
||||
Status = EFI_BUFFER_TOO_SMALL;
|
||||
} else {
|
||||
Info = Buffer;
|
||||
|
||||
// Zero out the structure
|
||||
ZeroMem (Info, ResultSize);
|
||||
|
||||
// Fill in the structure
|
||||
Info->Size = ResultSize;
|
||||
|
||||
Info->EntryPoint = File->HwDescription.EntryPoint;
|
||||
Info->RegionCount = File->HwDescription.RegionCount;
|
||||
for (Index = 0; Index < File->HwDescription.RegionCount; Index++) {
|
||||
Info->Region[Index].LoadAddress = File->HwDescription.Region[Index].LoadAddress;
|
||||
Info->Region[Index].Size = File->HwDescription.Region[Index].Size;
|
||||
Info->Region[Index].Offset = File->HwDescription.Region[Index].Offset;
|
||||
Info->Region[Index].Checksum = File->HwDescription.Region[Index].Checksum;
|
||||
}
|
||||
*BufferSize = ResultSize;
|
||||
Status = EFI_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
SetFileName (
|
||||
|
@ -452,6 +499,8 @@ BootMonFsGetInfo (
|
|||
Status = GetFilesystemInfo (Instance, BufferSize, Buffer);
|
||||
} else if (CompareGuid (InformationType, &gEfiFileInfoGuid) != 0) {
|
||||
Status = GetFileInfo (Instance, File, BufferSize, Buffer);
|
||||
} else if (CompareGuid (InformationType, &gArmBootMonFsFileInfoGuid) != 0) {
|
||||
Status = GetBootMonFsFileInfo (Instance, File, BufferSize, Buffer);
|
||||
} else {
|
||||
Status = EFI_UNSUPPORTED;
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include <Protocol/FirmwareVolumeBlock.h>
|
||||
#include <Protocol/SimpleFileSystem.h>
|
||||
|
||||
#include <Guid/BootMonFsFileInfo.h>
|
||||
#include <Guid/FileInfo.h>
|
||||
#include <Guid/FileSystemInfo.h>
|
||||
#include <Guid/FileSystemVolumeLabelInfo.h>
|
||||
|
|
Loading…
Reference in New Issue