]> git.proxmox.com Git - mirror_edk2.git/commitdiff
BaseTools/VolInfo: Parse apriori files
authorKonstantin Aladyshev <aladyshev22@gmail.com>
Fri, 22 Jul 2022 15:37:30 +0000 (23:37 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Sun, 2 Oct 2022 05:34:38 +0000 (05:34 +0000)
Output file GUIDs from the DXE and PEI apriori files.

Signed-off-by: Konstantin Aladyshev <aladyshev22@gmail.com>
Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
Reviewed-by: Bob Feng <bob.c.feng@intel.com>
BaseTools/Source/C/VolInfo/VolInfo.c

index d9be3d8c1809f161c5ec48f2f3f441329ee90049..8da4d5e713a26b88a2f40baaa8e0e0e11e2ac2b0 100644 (file)
@@ -43,6 +43,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
 //\r
 \r
 EFI_GUID  gEfiCrc32GuidedSectionExtractionProtocolGuid = EFI_CRC32_GUIDED_SECTION_EXTRACTION_PROTOCOL_GUID;\r
+EFI_GUID  gPeiAprioriFileNameGuid = { 0x1b45cc0a, 0x156a, 0x428a, { 0XAF, 0x62,  0x49, 0x86, 0x4d, 0xa0, 0xe6, 0xe6 }};\r
+EFI_GUID  gAprioriGuid = { 0xFC510EE7, 0xFFDC, 0x11D4, { 0xBD, 0x41, 0x00, 0x80, 0xC7, 0x3C, 0x88, 0x81 }};\r
 \r
 #define UTILITY_MAJOR_VERSION      1\r
 #define UTILITY_MINOR_VERSION      0\r
@@ -107,6 +109,12 @@ ReadHeader (
   OUT BOOLEAN   *ErasePolarity\r
   );\r
 \r
+STATIC\r
+EFI_STATUS\r
+PrintAprioriFile (\r
+  EFI_FFS_FILE_HEADER         *FileHeader\r
+  );\r
+\r
 STATIC\r
 EFI_STATUS\r
 PrintFileInfo (\r
@@ -1083,6 +1091,53 @@ Returns:
   return EFI_SUCCESS;\r
 }\r
 \r
+STATIC\r
+EFI_STATUS\r
+PrintAprioriFile (\r
+  EFI_FFS_FILE_HEADER         *FileHeader\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  Print GUIDs from the APRIORI file\r
+\r
+Arguments:\r
+\r
+  FileHeader - The file header\r
+\r
+Returns:\r
+\r
+  EFI_SUCCESS       - The APRIORI file was parsed correctly\r
+  EFI_SECTION_ERROR - Problem with file parsing\r
+\r
+--*/\r
+{\r
+  UINT8               GuidBuffer[PRINTED_GUID_BUFFER_SIZE];\r
+  UINT32              HeaderSize;\r
+\r
+  HeaderSize = FvBufGetFfsHeaderSize (FileHeader);\r
+\r
+  if (FileHeader->Type != EFI_FV_FILETYPE_FREEFORM)\r
+    return EFI_SECTION_ERROR;\r
+\r
+  EFI_COMMON_SECTION_HEADER* SectionHeader = (EFI_COMMON_SECTION_HEADER *) ((UINTN) FileHeader + HeaderSize);\r
+  if (SectionHeader->Type != EFI_SECTION_RAW)\r
+    return EFI_SECTION_ERROR;\r
+\r
+  UINT32 SectionLength = GetSectionFileLength (SectionHeader);\r
+  EFI_GUID* FileName = (EFI_GUID *) ((UINT8 *) SectionHeader + sizeof (EFI_COMMON_SECTION_HEADER));\r
+  while (((UINT8 *) FileName) < ((UINT8 *) SectionHeader + SectionLength)) {\r
+    PrintGuidToBuffer (FileName, GuidBuffer, sizeof (GuidBuffer), TRUE);\r
+    printf ("%s  ", GuidBuffer);\r
+    PrintGuidName (GuidBuffer);\r
+    printf ("\n");\r
+    FileName++;\r
+  }\r
+\r
+  return EFI_SUCCESS;\r
+}\r
+\r
 STATIC\r
 EFI_STATUS\r
 PrintFileInfo (\r
@@ -1339,6 +1394,25 @@ Returns:
     break;\r
   }\r
 \r
+  if (!CompareGuid (\r
+       &FileHeader->Name,\r
+       &gPeiAprioriFileNameGuid\r
+       ))\r
+  {\r
+    printf("\n");\r
+    printf("PEI APRIORI FILE:\n");\r
+    return PrintAprioriFile (FileHeader);\r
+  }\r
+  if (!CompareGuid (\r
+       &FileHeader->Name,\r
+       &gAprioriGuid\r
+       ))\r
+  {\r
+    printf("\n");\r
+    printf("DXE APRIORI FILE:\n");\r
+    return PrintAprioriFile (FileHeader);\r
+  }\r
+\r
   return EFI_SUCCESS;\r
 }\r
 \r