]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmPlatformPkg/FileSystem/BootMonFs/BootMonFsDir.c
ArmPlatformPkg/BootMonFs: Provide mechanism to get BootMonFS file information
[mirror_edk2.git] / ArmPlatformPkg / FileSystem / BootMonFs / BootMonFsDir.c
index 7ef180f54a25d69857ccb9d0125482681c8392ab..835cdae18a3872c4530ebd5f3c54d239ed399721 100644 (file)
@@ -250,6 +250,53 @@ GetFileInfo (
   return EFI_SUCCESS;\r
 }\r
 \r
+STATIC\r
+EFI_STATUS\r
+GetBootMonFsFileInfo (\r
+  IN BOOTMON_FS_INSTANCE *Instance,\r
+  IN BOOTMON_FS_FILE     *File,\r
+  IN OUT UINTN           *BufferSize,\r
+  OUT VOID               *Buffer\r
+  )\r
+{\r
+  EFI_STATUS             Status;\r
+  BOOTMON_FS_FILE_INFO   *Info;\r
+  UINTN                  ResultSize;\r
+  UINTN                  Index;\r
+\r
+  if (File == Instance->RootFile) {\r
+    Status = EFI_UNSUPPORTED;\r
+  } else {\r
+    ResultSize = SIZE_OF_BOOTMON_FS_FILE_INFO;\r
+\r
+    if (*BufferSize < ResultSize) {\r
+      *BufferSize = ResultSize;\r
+      Status = EFI_BUFFER_TOO_SMALL;\r
+    } else {\r
+      Info = Buffer;\r
+\r
+      // Zero out the structure\r
+      ZeroMem (Info, ResultSize);\r
+\r
+      // Fill in the structure\r
+      Info->Size = ResultSize;\r
+\r
+      Info->EntryPoint  = File->HwDescription.EntryPoint;\r
+      Info->RegionCount = File->HwDescription.RegionCount;\r
+      for (Index = 0; Index < File->HwDescription.RegionCount; Index++) {\r
+        Info->Region[Index].LoadAddress = File->HwDescription.Region[Index].LoadAddress;\r
+        Info->Region[Index].Size        = File->HwDescription.Region[Index].Size;\r
+        Info->Region[Index].Offset      = File->HwDescription.Region[Index].Offset;\r
+        Info->Region[Index].Checksum    = File->HwDescription.Region[Index].Checksum;\r
+      }\r
+      *BufferSize = ResultSize;\r
+      Status = EFI_SUCCESS;\r
+    }\r
+  }\r
+\r
+  return Status;\r
+}\r
+\r
 STATIC\r
 EFI_STATUS\r
 SetFileName (\r
@@ -452,6 +499,8 @@ BootMonFsGetInfo (
       Status = GetFilesystemInfo (Instance, BufferSize, Buffer);\r
     } else if (CompareGuid (InformationType, &gEfiFileInfoGuid) != 0) {\r
       Status = GetFileInfo (Instance, File, BufferSize, Buffer);\r
+    } else if (CompareGuid (InformationType, &gArmBootMonFsFileInfoGuid) != 0) {\r
+      Status = GetBootMonFsFileInfo (Instance, File, BufferSize, Buffer);\r
     } else {\r
       Status = EFI_UNSUPPORTED;\r
     }\r