]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ShellPkg: Modify the 'dh' Shell command to dump the Firmware Management Protocol...
authorTapan Shah <tapandshah@hpe.com>
Fri, 18 Mar 2016 16:28:03 +0000 (11:28 -0500)
committerQiu Shumin <shumin.qiu@intel.com>
Thu, 24 Mar 2016 03:23:12 +0000 (11:23 +0800)
Modify 'dh' shell command to dump FirmwareManagement Protocol information.
Add FirmwareManagement image descriptor V1 and V2 structure definition in UefiHandleParsingLib.h to support decoding V1/V2 revisions.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Tapan Shah <tapandshah@hpe.com>
Reviewed-by: Qiu Shumin <shumin.qiu@intel.com>
Reviewed-by: Jaben Carsey <jaben.carsey@intel.com>
ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c
ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.h
ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.uni

index 4c46e5e48de719f395dff41681a907d6729fea66..22d778b132835d8487774ccf150b333c7d5340e5 100644 (file)
@@ -3,7 +3,7 @@
 \r
   Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved.<BR>\r
   (C) Copyright 2013-2015 Hewlett-Packard Development Company, L.P.<BR>\r
-  (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>\r
+  (C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<BR>\r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
   which accompanies this distribution.  The full text of the license may be found at\r
@@ -823,6 +823,407 @@ ERROR_EXIT:
   SHELL_FREE_NON_NULL (InformationBlock);\r
   return NULL;\r
 }\r
+\r
+/**\r
+  Function to dump information about EFI_FIRMWARE_MANAGEMENT_PROTOCOL Protocol.\r
+\r
+  @param[in] TheHandle      The handle that has the protocol installed.\r
+  @param[in] Verbose        TRUE for additional information, FALSE otherwise.\r
+\r
+  @retval A pointer to a string containing the information.\r
+**/\r
+CHAR16*\r
+EFIAPI\r
+FirmwareManagementDumpInformation (\r
+  IN CONST EFI_HANDLE TheHandle,\r
+  IN CONST BOOLEAN    Verbose\r
+  )\r
+{\r
+  EFI_STATUS                          Status;\r
+  EFI_FIRMWARE_MANAGEMENT_PROTOCOL    *EfiFwMgmtProtocol;\r
+  EFI_FIRMWARE_IMAGE_DESCRIPTOR       *ImageInfo;\r
+  EFI_FIRMWARE_IMAGE_DESCRIPTOR_V1    *ImageInfoV1;\r
+  EFI_FIRMWARE_IMAGE_DESCRIPTOR_V2    *ImageInfoV2;\r
+  UINT64                              AttributeSetting;\r
+  UINTN                               ImageInfoSize;\r
+  UINTN                               DescriptorSize;\r
+  UINT32                              DescriptorVersion;\r
+  UINT32                              PackageVersion;\r
+  UINT8                               DescriptorCount;\r
+  UINT8                               Index;\r
+  UINT8                               Index1;\r
+  UINT8                               ImageCount;\r
+  CHAR16                              *PackageVersionName;\r
+  CHAR16                              *TempStr;\r
+  CHAR16                              *RetVal;\r
+  CHAR16                              *TempRetVal;\r
+  CHAR16                              *AttributeSettingStr;\r
+  BOOLEAN                             Found;\r
+  BOOLEAN                             AttributeSupported;\r
+\r
+  //\r
+  // Initialize local variables\r
+  //\r
+  ImageCount             = 0;\r
+  ImageInfoSize          = 1;\r
+  AttributeSetting       = 0;\r
+  Found                  = FALSE;\r
+  AttributeSupported     = FALSE;\r
+  ImageInfo              = NULL;\r
+  ImageInfoV1            = NULL;\r
+  ImageInfoV2            = NULL;\r
+  PackageVersionName     = NULL;\r
+  RetVal                 = NULL;\r
+  TempRetVal             = NULL;\r
+  TempStr                = NULL;\r
+  AttributeSettingStr    = NULL;\r
+\r
+  if (!Verbose) {\r
+    return (CatSPrint(NULL, L"FirmwareManagement"));\r
+  }\r
+\r
+  Status = gBS->OpenProtocol (\r
+                  (EFI_HANDLE) (TheHandle),\r
+                  &gEfiFirmwareManagementProtocolGuid,\r
+                  (VOID **) &EfiFwMgmtProtocol,\r
+                  NULL,\r
+                  NULL,\r
+                  EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
+                  );\r
+\r
+  if (EFI_ERROR (Status)) {\r
+    return NULL;\r
+  }\r
+\r
+  Status = EfiFwMgmtProtocol->GetImageInfo (\r
+                                EfiFwMgmtProtocol,\r
+                                &ImageInfoSize,\r
+                                ImageInfo,\r
+                                &DescriptorVersion,\r
+                                &DescriptorCount,\r
+                                &DescriptorSize,\r
+                                &PackageVersion,\r
+                                &PackageVersionName\r
+                                );\r
+\r
+  if (Status == EFI_BUFFER_TOO_SMALL) {\r
+    ImageInfo = AllocateZeroPool (ImageInfoSize);\r
+\r
+    if (ImageInfo == NULL) {\r
+      Status = EFI_OUT_OF_RESOURCES;\r
+    } else {\r
+      Status = EfiFwMgmtProtocol->GetImageInfo (\r
+                                    EfiFwMgmtProtocol,\r
+                                    &ImageInfoSize,\r
+                                    ImageInfo,\r
+                                    &DescriptorVersion,\r
+                                    &DescriptorCount,\r
+                                    &DescriptorSize,\r
+                                    &PackageVersion,\r
+                                    &PackageVersionName\r
+                                    );\r
+    }\r
+  }\r
+\r
+  if (EFI_ERROR (Status)) {\r
+    goto ERROR_EXIT;\r
+  }\r
+\r
+  //\r
+  // Decode Image Descriptor data only if its version is supported\r
+  //\r
+  if (DescriptorVersion <= EFI_FIRMWARE_IMAGE_DESCRIPTOR_VERSION) {\r
+\r
+    if (ImageInfo == NULL) {\r
+      goto ERROR_EXIT;\r
+    }\r
+\r
+    ImageInfoV1 = (EFI_FIRMWARE_IMAGE_DESCRIPTOR_V1 *)ImageInfo;\r
+    ImageInfoV2 = (EFI_FIRMWARE_IMAGE_DESCRIPTOR_V2 *)ImageInfo;\r
+\r
+    //\r
+    // Set ImageInfoSize in return buffer\r
+    //\r
+    TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_FMP_IMAGE_INFO_SIZE), NULL);\r
+    if (TempStr == NULL) {\r
+      goto ERROR_EXIT;\r
+    }\r
+    RetVal = CatSPrint (NULL, TempStr, ImageInfoSize);\r
+    SHELL_FREE_NON_NULL (TempStr);\r
+\r
+    //\r
+    // Set DescriptorVersion in return buffer\r
+    //\r
+    TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_FMP_DESCRIPTOR_VERSION), NULL);\r
+    if (TempStr == NULL) {\r
+      goto ERROR_EXIT;\r
+    }\r
+    TempRetVal = CatSPrint (RetVal, TempStr, DescriptorVersion);\r
+    SHELL_FREE_NON_NULL (RetVal);\r
+    RetVal = TempRetVal;\r
+    SHELL_FREE_NON_NULL (TempStr);\r
+\r
+    //\r
+    // Set DescriptorCount in return buffer\r
+    //\r
+    TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_FMP_DESCRIPTOR_COUNT), NULL);\r
+    if (TempStr == NULL) {\r
+      goto ERROR_EXIT;\r
+    }\r
+    TempRetVal = CatSPrint (RetVal, TempStr, DescriptorCount);\r
+    SHELL_FREE_NON_NULL (RetVal);\r
+    RetVal = TempRetVal;\r
+    SHELL_FREE_NON_NULL (TempStr);\r
+\r
+\r
+    //\r
+    // Set DescriptorSize in return buffer\r
+    //\r
+    TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_FMP_DESCRIPTOR_SIZE), NULL);\r
+    if (TempStr == NULL) {\r
+      goto ERROR_EXIT;\r
+    }\r
+    TempRetVal = CatSPrint (RetVal, TempStr, DescriptorSize);\r
+    SHELL_FREE_NON_NULL (RetVal);\r
+    RetVal = TempRetVal;\r
+    SHELL_FREE_NON_NULL (TempStr);\r
+\r
+    //\r
+    // Set PackageVersion in return buffer\r
+    //\r
+    TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_FMP_PACKAGE_VERSION), NULL);\r
+    if (TempStr == NULL) {\r
+      goto ERROR_EXIT;\r
+    }\r
+    TempRetVal = CatSPrint (RetVal, TempStr, PackageVersion);\r
+    SHELL_FREE_NON_NULL (RetVal);\r
+    RetVal = TempRetVal;\r
+    SHELL_FREE_NON_NULL (TempStr);\r
+\r
+    //\r
+    // Set PackageVersionName in return buffer\r
+    //\r
+    TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_FMP_PACKAGE_VERSION_NAME), NULL);\r
+    if (TempStr == NULL) {\r
+      goto ERROR_EXIT;\r
+    }\r
+    TempRetVal = CatSPrint (RetVal, TempStr, PackageVersionName);\r
+    SHELL_FREE_NON_NULL (RetVal);\r
+    RetVal = TempRetVal;\r
+    SHELL_FREE_NON_NULL (TempStr);\r
+\r
+    for (Index = 0; Index < DescriptorCount; Index++) {\r
+      //\r
+      // First check if Attribute is supported\r
+      // and generate a string for AttributeSetting field\r
+      //\r
+      SHELL_FREE_NON_NULL (AttributeSettingStr);\r
+      AttributeSupported = FALSE;\r
+      AttributeSetting   = 0;\r
+      if (DescriptorVersion == EFI_FIRMWARE_IMAGE_DESCRIPTOR_VERSION_V1) {\r
+        if (ImageInfoV1[Index].AttributesSupported != 0x0) {\r
+          AttributeSupported = TRUE;\r
+          AttributeSetting   = ImageInfoV1[Index].AttributesSetting;\r
+        }\r
+      } else if (DescriptorVersion == EFI_FIRMWARE_IMAGE_DESCRIPTOR_VERSION_V2) {\r
+        if (ImageInfoV2[Index].AttributesSupported != 0x0) {\r
+          AttributeSupported = TRUE;\r
+          AttributeSetting   = ImageInfoV2[Index].AttributesSetting;\r
+        }\r
+      } else {\r
+        if (ImageInfo[Index].AttributesSupported != 0x0) {\r
+          AttributeSupported = TRUE;\r
+          AttributeSetting   = ImageInfo[Index].AttributesSetting;\r
+        }\r
+      }\r
+\r
+      if (!AttributeSupported) {\r
+        AttributeSettingStr = CatSPrint (NULL, L"None");\r
+      } else {\r
+        AttributeSettingStr = CatSPrint (NULL, L"(");\r
+\r
+        if (AttributeSetting & IMAGE_ATTRIBUTE_IMAGE_UPDATABLE) {\r
+          TempRetVal = CatSPrint (AttributeSettingStr, L" IMAGE_ATTRIBUTE_IMAGE_UPDATABLE");\r
+          SHELL_FREE_NON_NULL (AttributeSettingStr);\r
+          AttributeSettingStr = TempRetVal;\r
+        }\r
+        if (AttributeSetting & IMAGE_ATTRIBUTE_RESET_REQUIRED) {\r
+          TempRetVal = CatSPrint (AttributeSettingStr, L" IMAGE_ATTRIBUTE_RESET_REQUIRED");\r
+          SHELL_FREE_NON_NULL (AttributeSettingStr);\r
+          AttributeSettingStr = TempRetVal;\r
+        }\r
+        if (AttributeSetting & IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) {\r
+          TempRetVal = CatSPrint (AttributeSettingStr, L" IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED");\r
+          SHELL_FREE_NON_NULL (AttributeSettingStr);\r
+          AttributeSettingStr = TempRetVal;\r
+        }\r
+        if (AttributeSetting & IMAGE_ATTRIBUTE_IN_USE) {\r
+          TempRetVal = CatSPrint (AttributeSettingStr, L" IMAGE_ATTRIBUTE_IN_USE");\r
+          SHELL_FREE_NON_NULL (AttributeSettingStr);\r
+          AttributeSettingStr = TempRetVal;\r
+        }\r
+        if (AttributeSetting & IMAGE_ATTRIBUTE_UEFI_IMAGE) {\r
+          TempRetVal = CatSPrint (AttributeSettingStr, L" IMAGE_ATTRIBUTE_UEFI_IMAGE");\r
+          SHELL_FREE_NON_NULL (AttributeSettingStr);\r
+          AttributeSettingStr = TempRetVal;\r
+        }\r
+        TempRetVal = CatSPrint (AttributeSettingStr, L" )");\r
+        SHELL_FREE_NON_NULL (AttributeSettingStr);\r
+        AttributeSettingStr = TempRetVal;\r
+      }\r
+\r
+      if (DescriptorVersion == EFI_FIRMWARE_IMAGE_DESCRIPTOR_VERSION_V1) {\r
+        if (ImageInfoV1[Index].ImageIndex != 0x0) {\r
+          ImageCount++;\r
+        }\r
+\r
+        TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_FMP_IMAGE_DESCRIPTOR_INFO_V1), NULL);\r
+        if (TempStr == NULL) {\r
+          goto ERROR_EXIT;\r
+        }\r
+        TempRetVal = CatSPrint (\r
+                       RetVal,\r
+                       TempStr,\r
+                       Index,\r
+                       ImageInfoV1[Index].ImageIndex,\r
+                       ImageInfoV1[Index].ImageTypeId,\r
+                       ImageInfoV1[Index].ImageId,\r
+                       ImageInfoV1[Index].ImageIdName,\r
+                       ImageInfoV1[Index].Version,\r
+                       ImageInfoV1[Index].VersionName,\r
+                       ImageInfoV1[Index].Size,\r
+                       ImageInfoV1[Index].AttributesSupported,\r
+                       AttributeSettingStr,\r
+                       ImageInfoV1[Index].Compatibilities\r
+                       );\r
+        SHELL_FREE_NON_NULL (RetVal);\r
+        RetVal = TempRetVal;\r
+        SHELL_FREE_NON_NULL (TempStr);\r
+      } else if (DescriptorVersion == EFI_FIRMWARE_IMAGE_DESCRIPTOR_VERSION_V2) {\r
+        if (ImageInfoV2[Index].ImageIndex != 0x0) {\r
+          ImageCount++;\r
+        }\r
+\r
+        TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_FMP_IMAGE_DESCRIPTOR_INFO_V2), NULL);\r
+        if (TempStr == NULL) {\r
+          goto ERROR_EXIT;\r
+        }\r
+        TempRetVal = CatSPrint (\r
+                       RetVal,\r
+                       TempStr,\r
+                       Index,\r
+                       ImageInfoV2[Index].ImageIndex,\r
+                       ImageInfoV2[Index].ImageTypeId,\r
+                       ImageInfoV2[Index].ImageId,\r
+                       ImageInfoV2[Index].ImageIdName,\r
+                       ImageInfoV2[Index].Version,\r
+                       ImageInfoV2[Index].VersionName,\r
+                       ImageInfoV2[Index].Size,\r
+                       ImageInfoV2[Index].AttributesSupported,\r
+                       AttributeSettingStr,\r
+                       ImageInfoV2[Index].Compatibilities,\r
+                       ImageInfoV2[Index].LowestSupportedImageVersion\r
+                       );\r
+        SHELL_FREE_NON_NULL (RetVal);\r
+        RetVal = TempRetVal;\r
+        SHELL_FREE_NON_NULL (TempStr);\r
+      } else {\r
+        if (ImageInfo[Index].ImageIndex != 0x0) {\r
+          ImageCount++;\r
+        }\r
+\r
+        TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_FMP_IMAGE_DESCRIPTOR_INFO), NULL);\r
+        if (TempStr == NULL) {\r
+          goto ERROR_EXIT;\r
+        }\r
+        TempRetVal = CatSPrint (\r
+                       RetVal,\r
+                       TempStr,\r
+                       Index,\r
+                       ImageInfo[Index].ImageIndex,\r
+                       ImageInfo[Index].ImageTypeId,\r
+                       ImageInfo[Index].ImageId,\r
+                       ImageInfo[Index].ImageIdName,\r
+                       ImageInfo[Index].Version,\r
+                       ImageInfo[Index].VersionName,\r
+                       ImageInfo[Index].Size,\r
+                       ImageInfo[Index].AttributesSupported,\r
+                       AttributeSettingStr,\r
+                       ImageInfo[Index].Compatibilities,\r
+                       ImageInfo[Index].LowestSupportedImageVersion,\r
+                       ImageInfo[Index].LastAttemptVersion,\r
+                       ImageInfo[Index].LastAttemptStatus,\r
+                       ImageInfo[Index].HardwareInstance\r
+                       );\r
+        SHELL_FREE_NON_NULL (RetVal);\r
+        RetVal = TempRetVal;\r
+        SHELL_FREE_NON_NULL (TempStr);\r
+      }\r
+    }\r
+  }\r
+\r
+  if (ImageCount > 0) {\r
+    for (Index=0; Index<DescriptorCount; Index++) {\r
+      for (Index1=Index+1; Index1<DescriptorCount; Index1++) {\r
+        if (DescriptorVersion == EFI_FIRMWARE_IMAGE_DESCRIPTOR_VERSION_V1) {\r
+          if (ImageInfoV1[Index].ImageId == ImageInfoV1[Index1].ImageId) {\r
+            Found = TRUE;\r
+            //\r
+            // At least one match found indicating presense of non unique ImageId values so no more comparisons needed\r
+            //\r
+            goto ENDLOOP;\r
+          }\r
+        } else if (DescriptorVersion == EFI_FIRMWARE_IMAGE_DESCRIPTOR_VERSION_V2) {\r
+          if (ImageInfoV2[Index].ImageId == ImageInfoV2[Index1].ImageId) {\r
+            Found = TRUE;\r
+            //\r
+            // At least one match found indicating presense of non unique ImageId values so no more comparisons needed\r
+            //\r
+            goto ENDLOOP;\r
+          }\r
+        } else {\r
+          if (ImageInfo[Index].ImageId == ImageInfo[Index1].ImageId) {\r
+            Found = TRUE;\r
+            //\r
+            // At least one match found indicating presense of non unique ImageId values so no more comparisons needed\r
+            //\r
+            goto ENDLOOP;\r
+          }\r
+        }\r
+      }\r
+    }\r
+  }\r
+\r
+ENDLOOP:\r
+  //\r
+  // Check if ImageId with duplicate value was found\r
+  //\r
+  if (Found == TRUE) {\r
+    TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_FMP_IMAGEID_NON_UNIQUE), NULL);\r
+    if (TempStr == NULL) {\r
+      goto ERROR_EXIT;\r
+    }\r
+    TempRetVal = CatSPrint (RetVal, TempStr);\r
+    SHELL_FREE_NON_NULL (RetVal);\r
+    RetVal = TempRetVal;\r
+    SHELL_FREE_NON_NULL (TempStr);\r
+  }\r
+\r
+  SHELL_FREE_NON_NULL (ImageInfo);\r
+  SHELL_FREE_NON_NULL (PackageVersionName);\r
+  SHELL_FREE_NON_NULL (AttributeSettingStr);\r
+\r
+  return RetVal;\r
+\r
+ERROR_EXIT:\r
+  SHELL_FREE_NON_NULL (RetVal);\r
+  SHELL_FREE_NON_NULL (ImageInfo);\r
+  SHELL_FREE_NON_NULL (PackageVersionName);\r
+  SHELL_FREE_NON_NULL (AttributeSettingStr);\r
+\r
+  return NULL;\r
+}\r
+\r
 //\r
 // Put the information on the NT32 protocol GUIDs here so we are not dependant on the Nt32Pkg\r
 //\r
@@ -1018,7 +1419,7 @@ STATIC CONST GUID_INFO_BLOCK mGuidStringList[] = {
 //\r
 // UEFI 2.3\r
 //\r
-  {STRING_TOKEN(STR_FW_MGMT),               &gEfiFirmwareManagementProtocolGuid,              NULL},\r
+  {STRING_TOKEN(STR_FW_MGMT),               &gEfiFirmwareManagementProtocolGuid,              FirmwareManagementDumpInformation},\r
   {STRING_TOKEN(STR_IP_SEC),                &gEfiIpSecProtocolGuid,                           NULL},\r
   {STRING_TOKEN(STR_IP_SEC2),               &gEfiIpSec2ProtocolGuid,                          NULL},\r
 \r
index b9141fa44b0f4cce2d8e27935aef44c7ed6f9540..6f2ca50922a02fd05e4c248f7fac366ba4e7085b 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Provides interface to advanced shell functionality for parsing both handle and protocol database.\r
 \r
-  (C) Copyright 2013-2015 Hewlett-Packard Development Company, L.P.<BR>\r
+  (C) Copyright 2013-2016 Hewlett-Packard Development Company, L.P.<BR>\r
   Copyright (c) 2011 - 2015, Intel Corporation. All rights reserved.<BR>\r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
 #include <Library/ShellLib.h>\r
 #include <Library/SortLib.h>\r
 \r
+#define   EFI_FIRMWARE_IMAGE_DESCRIPTOR_VERSION_V1   1\r
+#define   EFI_FIRMWARE_IMAGE_DESCRIPTOR_VERSION_V2   2\r
+\r
+///\r
+/// EFI_FIRMWARE_IMAGE_DESCRIPTOR in UEFI spec < 2.4a\r
+///\r
+typedef struct {\r
+  /// \r
+  /// A unique number identifying the firmware image within the device.  The number is \r
+  /// between 1 and DescriptorCount.\r
+  /// \r
+  UINT8                            ImageIndex;\r
+  ///\r
+  /// A unique number identifying the firmware image type.  \r
+  /// \r
+  EFI_GUID                         ImageTypeId;\r
+  /// \r
+  /// A unique number identifying the firmware image. \r
+  /// \r
+  UINT64                           ImageId;\r
+  /// \r
+  /// A pointer to a null-terminated string representing the firmware image name.  \r
+  /// \r
+  CHAR16                           *ImageIdName;\r
+  /// \r
+  /// Identifies the version of the device firmware. The format is vendor specific and new \r
+  /// version must have a greater value than an old version.\r
+  /// \r
+  UINT32                           Version;\r
+  /// \r
+  /// A pointer to a null-terminated string representing the firmware image version name.\r
+  /// \r
+  CHAR16                           *VersionName;\r
+  /// \r
+  /// Size of the image in bytes.  If size=0, then only ImageIndex and ImageTypeId are valid.\r
+  /// \r
+  UINTN                            Size;\r
+  /// \r
+  /// Image attributes that are supported by this device.  See 'Image Attribute Definitions' \r
+  /// for possible returned values of this parameter.  A value of 1 indicates the attribute is \r
+  /// supported and the current setting value is indicated in AttributesSetting.  A \r
+  /// value of 0 indicates the attribute is not supported and the current setting value in \r
+  /// AttributesSetting is meaningless.\r
+  /// \r
+  UINT64                           AttributesSupported;\r
+  /// \r
+  /// Image attributes.  See 'Image Attribute Definitions' for possible returned values of \r
+  /// this parameter.\r
+  /// \r
+  UINT64                           AttributesSetting;\r
+  /// \r
+  /// Image compatibilities.  See 'Image Compatibility Definitions' for possible returned \r
+  /// values of this parameter.\r
+  /// \r
+  UINT64                           Compatibilities;\r
+} EFI_FIRMWARE_IMAGE_DESCRIPTOR_V1;\r
+\r
+\r
+///\r
+/// EFI_FIRMWARE_IMAGE_DESCRIPTOR in UEFI spec > 2.4a and < 2.5\r
+///\r
+typedef struct {\r
+  /// \r
+  /// A unique number identifying the firmware image within the device.  The number is \r
+  /// between 1 and DescriptorCount.\r
+  /// \r
+  UINT8                            ImageIndex;\r
+  ///\r
+  /// A unique number identifying the firmware image type.  \r
+  /// \r
+  EFI_GUID                         ImageTypeId;\r
+  /// \r
+  /// A unique number identifying the firmware image. \r
+  /// \r
+  UINT64                           ImageId;\r
+  /// \r
+  /// A pointer to a null-terminated string representing the firmware image name.  \r
+  /// \r
+  CHAR16                           *ImageIdName;\r
+  /// \r
+  /// Identifies the version of the device firmware. The format is vendor specific and new \r
+  /// version must have a greater value than an old version.\r
+  /// \r
+  UINT32                           Version;\r
+  /// \r
+  /// A pointer to a null-terminated string representing the firmware image version name.\r
+  /// \r
+  CHAR16                           *VersionName;\r
+  /// \r
+  /// Size of the image in bytes.  If size=0, then only ImageIndex and ImageTypeId are valid.\r
+  /// \r
+  UINTN                            Size;\r
+  /// \r
+  /// Image attributes that are supported by this device.  See 'Image Attribute Definitions' \r
+  /// for possible returned values of this parameter.  A value of 1 indicates the attribute is \r
+  /// supported and the current setting value is indicated in AttributesSetting.  A \r
+  /// value of 0 indicates the attribute is not supported and the current setting value in \r
+  /// AttributesSetting is meaningless.\r
+  /// \r
+  UINT64                           AttributesSupported;\r
+  /// \r
+  /// Image attributes.  See 'Image Attribute Definitions' for possible returned values of \r
+  /// this parameter.\r
+  /// \r
+  UINT64                           AttributesSetting;\r
+  /// \r
+  /// Image compatibilities.  See 'Image Compatibility Definitions' for possible returned \r
+  /// values of this parameter.\r
+  /// \r
+  UINT64                           Compatibilities;\r
+  ///\r
+  /// Describes the lowest ImageDescriptor version that the device will accept. Only\r
+  /// present in version 2 or higher.\r
+  UINT32                           LowestSupportedImageVersion;\r
+} EFI_FIRMWARE_IMAGE_DESCRIPTOR_V2;\r
+\r
 typedef struct {\r
   LIST_ENTRY  Link;\r
   EFI_HANDLE  TheHandle;\r
index 7e827f088b0317119c23205d1ad81ddf4579bc29..0cb2fa874651902f9aa355544c624a7f97b2e0f8 100644 (file)
 #string STR_UNDI_IPV6_INFO                #language en-US "    UNDI IPv6 Supported: %%H%d%%N \r\n"\r
 #string STR_UNKNOWN_INFO_TYPE             #language en-US "    The 'InformationType' - %%H%g%%N can't be recongnized\r\n"\r
 \r
+#string STR_FMP_IMAGEID_NON_UNIQUE                      #language en-US "  The ImageId value for each Firmware Image is not unique.\r\n"\r
+#string STR_FMP_IMAGE_INFO_SIZE                         #language en-US "  ImageInfoSize: %%H0x%L016x%%N\r\n"\r
+#string STR_FMP_DESCRIPTOR_VERSION                      #language en-US "  DescriptorVersion: %%H%d%%N\r\n"\r
+#string STR_FMP_DESCRIPTOR_COUNT                        #language en-US "  DescriptorCount : %%H%d%%N\r\n"\r
+#string STR_FMP_DESCRIPTOR_SIZE                         #language en-US "  DescriptorSize : %%H0x%Lx%%N\r\n"\r
+#string STR_FMP_PACKAGE_VERSION                         #language en-US "  PackageVersion : %%H0x%08x%%N\r\n"\r
+#string STR_FMP_PACKAGE_VERSION_NAME                    #language en-US "  PackageVersionName : %%H%s%%N\r\n"\r
+#string STR_FMP_IMAGE_DESCRIPTOR_INFO                   #language en-US ""\r
+                                                                        "  ImageInfo[%%H%d%%N]:\r\n"\r
+                                                                        "  =============\r\n"\r
+                                                                        "    ImageIndex                  : %%H%d%%N\r\n"\r
+                                                                        "    ImageTypeId                 : %%H%g%%N\r\n"\r
+                                                                        "    ImageId                     : %%H%L016x%%N\r\n"\r
+                                                                        "    ImageIdName                 : %%H%s%%N\r\n"\r
+                                                                        "    Version                     : %%H0x%08x%%N\r\n"\r
+                                                                        "    VersionName                 : %%H%s%%N\r\n"\r
+                                                                        "    Size                        : %%H0x%L016x%%N\r\n"\r
+                                                                        "    AttributesSupported         : %%H0x%L016x%%N\r\n"\r
+                                                                        "    AttributesSetting           : %%H%s%%N\r\n"\r
+                                                                        "    Compatibilities             : %%H0x%L016x%%N\r\n"\r
+                                                                        "    LowestSupportedImageVersion : %%H0x%08x%%N\r\n"\r
+                                                                        "    LastAttemptVersion          : %%H0x%08x%%N\r\n"\r
+                                                                        "    LastAttemptStatus           : %%H0x%08x%%N\r\n"\r
+                                                                        "    HardwareInstance            : %%H0x%08x%%N\r\n"\r
+\r
+#string STR_FMP_IMAGE_DESCRIPTOR_INFO_V1                #language en-US ""\r
+                                                                        "  ImageInfo[%%H%d%%N]:\r\n"\r
+                                                                        "  =============\r\n"\r
+                                                                        "    ImageIndex                  : %%H%d%%N\r\n"\r
+                                                                        "    ImageTypeId                 : %%H%g%%N\r\n"\r
+                                                                        "    ImageId                     : %%H%L016x%%N\r\n"\r
+                                                                        "    ImageIdName                 : %%H%s%%N\r\n"\r
+                                                                        "    Version                     : %%H0x%08x%%N\r\n"\r
+                                                                        "    VersionName                 : %%H%s%%N\r\n"\r
+                                                                        "    Size                        : %%H0x%L016x%%N\r\n"\r
+                                                                        "    AttributesSupported         : %%H0x%L016x%%N\r\n"\r
+                                                                        "    AttributesSetting           : %%H%s%%N\r\n"\r
+                                                                        "    Compatibilities             : %%H0x%L016x%%N\r\n"\r
+\r
+#string STR_FMP_IMAGE_DESCRIPTOR_INFO_V2                #language en-US ""\r
+                                                                        "  ImageInfo[%%H%d%%N]:\r\n"\r
+                                                                        "  =============\r\n"\r
+                                                                        "    ImageIndex                  : %%H%d%%N\r\n"\r
+                                                                        "    ImageTypeId                 : %%H%g%%N\r\n"\r
+                                                                        "    ImageId                     : %%H%L016x%%N\r\n"\r
+                                                                        "    ImageIdName                 : %%H%s%%N\r\n"\r
+                                                                        "    Version                     : %%H0x%08x%%N\r\n"\r
+                                                                        "    VersionName                 : %%H%s%%N\r\n"\r
+                                                                        "    Size                        : %%H0x%L016x%%N\r\n"\r
+                                                                        "    AttributesSupported         : %%H0x%L016x%%N\r\n"\r
+                                                                        "    AttributesSetting           : %%H%s%%N\r\n"\r
+                                                                        "    Compatibilities             : %%H0x%L016x%%N\r\n"\r
+                                                                        "    LowestSupportedImageVersion : %%H0x%08x%%N\r\n"\r