Looks good to me.  I will let Shumin check also.

Reviewed-by: Jaben Carsey <[email protected]>

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

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to