summaryrefslogtreecommitdiff
path: root/ArmPlatformPkg
diff options
context:
space:
mode:
authorHarry Liebel <Harry.Liebel@arm.com>2014-08-26 10:15:21 +0000
committeroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>2014-08-26 10:15:21 +0000
commitda5daf369fd4c130e0dbf43c292cc57ee8eabcdf (patch)
treefedf3e407a351da565e90419d3fd96649958622e /ArmPlatformPkg
parent91c38d4e94c1461f5824b83d3722fe46626aa0d3 (diff)
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
Diffstat (limited to 'ArmPlatformPkg')
-rw-r--r--ArmPlatformPkg/ArmPlatformPkg.dec2
-rw-r--r--ArmPlatformPkg/FileSystem/BootMonFs/BootMonFs.inf1
-rw-r--r--ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsDir.c49
-rw-r--r--ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsInternal.h1
4 files changed, 53 insertions, 0 deletions
diff --git a/ArmPlatformPkg/ArmPlatformPkg.dec b/ArmPlatformPkg/ArmPlatformPkg.dec
index 555c9284b..5b2e83141 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 d7770f0b9..94e8916e1 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 7ef180f54..835cdae18 100644
--- a/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsDir.c
+++ b/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsDir.c
@@ -252,6 +252,53 @@ GetFileInfo (
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 (
IN BOOTMON_FS_FILE *File,
IN CHAR16 *FileNameUnicode
@@ -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 3167bba00..57343618a 100644
--- a/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsInternal.h
+++ b/ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsInternal.h
@@ -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>