From da5daf369fd4c130e0dbf43c292cc57ee8eabcdf Mon Sep 17 00:00:00 2001 From: Harry Liebel Date: Tue, 26 Aug 2014 10:15:21 +0000 Subject: 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 Reviewed-By: Olivier Martin git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15902 6f19259b-4bc3-4df7-8a09-765794883524 --- ArmPlatformPkg/ArmPlatformPkg.dec | 2 + ArmPlatformPkg/FileSystem/BootMonFs/BootMonFs.inf | 1 + ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsDir.c | 49 ++++++++++++++++++++++ .../FileSystem/BootMonFs/BootMonFsInternal.h | 1 + 4 files changed, 53 insertions(+) (limited to 'ArmPlatformPkg') diff --git a/ArmPlatformPkg/ArmPlatformPkg.dec b/ArmPlatformPkg/ArmPlatformPkg.dec index 555c9284bc..5b2e831412 100644 --- a/ArmPlatformPkg/ArmPlatformPkg.dec +++ b/ArmPlatformPkg/ArmPlatformPkg.dec @@ -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} } diff --git a/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFs.inf b/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFs.inf index d7770f0b96..94e8916e1b 100644 --- a/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFs.inf +++ b/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFs.inf @@ -43,6 +43,7 @@ UefiLib [Guids] + gArmBootMonFsFileInfoGuid gEfiFileSystemInfoGuid gEfiFileInfoGuid gEfiFileSystemVolumeLabelInfoIdGuid diff --git a/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsDir.c b/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsDir.c index 7ef180f54a..835cdae18a 100644 --- a/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsDir.c +++ b/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsDir.c @@ -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; } diff --git a/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsInternal.h b/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsInternal.h index 3167bba00a..57343618ab 100644 --- a/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsInternal.h +++ b/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsInternal.h @@ -26,6 +26,7 @@ #include #include +#include #include #include #include -- cgit v1.2.3