public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Jeff Booher-Kaeding <Jeff.Booher-Kaeding@arm.com>
To: shrishail <shrishail.patil@microchip.com>,
	"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: "eric.jin@intel.com" <eric.jin@intel.com>,
	Supreeth Venkatesh <Supreeth.Venkatesh@arm.com>
Subject: Re: [edk2-test][PATCH V2 1/3] Adding FMP to IHVSCT.
Date: Mon, 5 Aug 2019 21:08:20 +0000	[thread overview]
Message-ID: <5260170f0148b7043925454a1d7f6dfcd0e7f6de.camel@arm.com> (raw)
In-Reply-To: <20190801070326.1852-1-shrishail.patil@microchip.com>

My comments are inline, and my review is condtional upon fixing them

Reviewd-by: Jeff Booher-Kaeding <Jeff.Booher-Kaeding@arm.com>


On Thu, 2019-08-01 at 12:33 +0530, shrishail wrote:
> From: Shrishail Patil <Shrishail.Patil@microchip.com>
>
> Adding Firmware Management Protocol to IHVSCT.
> This patch contains source code which is copied from
> UEFISCT and added into IHVSCT.
>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: shrishail patil <shrishail.patil@microchip.com>
> ---
> .../FirmwareManagementBBTestConformance.c     | 3632
> +++++++++++++++++
> .../FirmwareManagementBBTestFunction.c        |  891 ++++
> .../FirmwareManagementBBTestMain.c            |  228 ++
> .../FirmwareManagementBBTestMain.h            |  223 +
> .../FirmwareManagement/BlackBoxTest/Guid.c    |   63 +
> .../FirmwareManagement/BlackBoxTest/Guid.h    |  153 +
> .../IhvFirmwareManagementBBTest.inf           |   52 +
> 7 files changed, 5242 insertions(+)
> create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/
> FirmwareManagement/BlackBoxTest/FirmwareManagementBBTestConformance.c
> create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/
> FirmwareManagement/BlackBoxTest/FirmwareManagementBBTestFunction.c
> create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/
> FirmwareManagement/BlackBoxTest/FirmwareManagementBBTestMain.c
> create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/
> FirmwareManagement/BlackBoxTest/FirmwareManagementBBTestMain.h
> create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/
> FirmwareManagement/BlackBoxTest/Guid.c
> create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/
> FirmwareManagement/BlackBoxTest/Guid.h
> create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/
> FirmwareManagement/BlackBoxTest/IhvFirmwareManagementBBTest.inf
>
> diff --git a/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/FirmwareManagement/BlackBoxTest
> /FirmwareManagementBBTestConformance.c b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/FirmwareManagement/BlackBoxTest
> /FirmwareManagementBBTestConformance.c
> new file mode 100644
> index 00000000..95d36dc7
> --- /dev/null
> +++ b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/FirmwareManagement/BlackBoxTest
> /FirmwareManagementBBTestConformance.c
> @@ -0,0 +1,3632 @@
> +/** @file
> +
> +  Copyright 2006 - 2016 Unified EFI, Inc.<BR>
> +  Copyright (c) 2010 - 2016, Dell Inc. All rights reserved.<BR>
> +  Copyright (c) 2019,Microchip Technology Inc.<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
> +  http://opensource.org/licenses/bsd-license.php
> +
> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
> BASIS,
> +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS
> OR IMPLIED.
> +
> +**/
> +/*++
> +
> +Module Name:
> +    FirmwareManagementBBTestConformance.c
> +
> +Abstract:
> +    Firmware Management Protocol's conformance tests.
> +
> +--*/
> +
> +#define DEBUG_ALL                                0
> +#define DEBUG_GET_IMAGE_INFO                     0
> +#define DEBUG_GET_IMAGE                          0
> +#define DEBUG_SET_IMAGE                          0
> +#define DEBUG_CHECK_IMAGE                        0
> +#define DEBUG_SET_PACKAGE_INFO                   0
> +
> +#include "SctLib.h"
> +#include "FirmwareManagementBBTestMain.h"
> +
> +//
> *********************************************************************
> *******
> +//   Support Routines
> +//
> *********************************************************************
> *******
> +
> +EFI_STATUS
> +CheckForSupportGetImage (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  );
> +
> +EFI_STATUS
> +CheckForSupportSetImage (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  );
> +
> +
> +EFI_STATUS
> +CheckForSupportCheckImage (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  );
> +
> +EFI_STATUS
> +CheckForSupportSetPackageInfo (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  );
> +
> +//
> *********************************************************************
> *******
> +//   Check Points
> +//
> *********************************************************************
> *******
> +
> +EFI_STATUS
> +BBTestGetImageInfoConformanceTestCheckpoint1 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  );
> +
> +EFI_STATUS
> +BBTestGetImageInfoConformanceTestCheckpoint2 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  );
> +
> +EFI_STATUS
> +BBTestGetImageConformanceTestCheckpoint1 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  );
> +
> +EFI_STATUS
> +BBTestGetImageConformanceTestCheckpoint2 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  );
> +
> +EFI_STATUS
> +BBTestGetImageConformanceTestCheckpoint3 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  );
> +
> +EFI_STATUS
> +BBTestGetImageConformanceTestCheckpoint4 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  );
> +
> +EFI_STATUS
> +BBTestSetImageConformanceTestCheckpoint1 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  );
> +
> +EFI_STATUS
> +BBTestSetImageConformanceTestCheckpoint2 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  );
> +
> +EFI_STATUS
> +BBTestSetImageConformanceTestCheckpoint3 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  );
> +
> +EFI_STATUS
> +BBTestSetImageConformanceTestCheckpoint4 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  );
> +
> +EFI_STATUS
> +BBTestCheckImageConformanceTestCheckpoint1 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  );
> +
> +EFI_STATUS
> +BBTestCheckImageConformanceTestCheckpoint2 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  );
> +
> +EFI_STATUS
> +BBTestSetPackageInfoConformanceTestCheckpoint1 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  );
> +
> +EFI_STATUS
> +BBTestSetPackageInfoConformanceTestCheckpoint2 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  );
> +
> +EFI_STATUS
> +BBTestSetPackageInfoConformanceTestCheckpoint3 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  );
> +
> +EFI_STATUS
> +BBTestSetPackageInfoConformanceTestCheckpoint4 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  );
> +
> +//
> *********************************************************************
> *******
> +//   Support Routines
> +//
> +//
> +//
> *********************************************************************
> *******
> +
> +//
> *********************************************************************
> *******
> +//   Support Routine: Progress
> +//
> *********************************************************************
> *******
> +
> +EFI_STATUS
> +Progress (
> +  IN UINTN                                       Completion
> +)
> +{
> +  return EFI_SUCCESS;
> +}
> +
> +//
> *********************************************************************
> *******
> +//   Support Routine: CheckForSupportGetImage
> +//
> *********************************************************************
> *******
> +
> +EFI_STATUS
> +CheckForSupportGetImage (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +)
> +{
> +  EFI_STATUS                                     Status;
> +  EFI_TEST_ASSERTION                             AssertionType;
> +  EFI_GUID                                       TestGuid;
> +  CHAR16                                         *ResultMessageLabel
> ;
> +  CHAR16                                         *ResultMessageData;
> +
> +  UINT8                                          ImageIndex;
> +  VOID                                           *Image;
> +  UINTN                                          ImageSize;
> +
> +  //
> +  // Init
> +  //
> +
> +  Status = EFI_SUCCESS;
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  TestGuid = gFirmwareManagementBBTestConformanceSupportGuid001;
> +  ResultMessageLabel = L"GetImage, function support check";
> +
> +  ImageIndex = 0;
> +  Image = NULL;
> +  ImageSize = 0;
> +
> +  //
> +  // Check if function is supported
> +  //
> +
> +  Status = FirmwareManagement->GetImage (
> +                                 FirmwareManagement,
> +                                 ImageIndex,
> +                                 Image,
> +                                 &ImageSize
> +                                 );
> +
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  if (Status == EFI_UNSUPPORTED) {
> +    ResultMessageData = L"function is NOT supported";
> +  } else {
> +    ResultMessageData = L"function is supported.";
> +  }
> +
> +  StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 TestGuid,
> +                 ResultMessageLabel,
> +                 L"Result - %s\n%a:%d: Status - %r",
> +                 ResultMessageData,
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );
> +
> +  if (Image != NULL) {
> +    gtBS->FreePool (Image);
> +  }
> +
> +  if (Status == EFI_UNSUPPORTED) {
> +    return EFI_UNSUPPORTED;
> +  } else {
> +    return EFI_SUCCESS;
> +  }
> +}
> +
> +//
> *********************************************************************
> *******
> +//   Support Routine: CheckForSupportSetImage
> +//
> *********************************************************************
> *******
> +
> +EFI_STATUS
> +CheckForSupportSetImage (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +)
> +{
> +  EFI_STATUS                                     Status;
> +  EFI_TEST_ASSERTION                             AssertionType;
> +  EFI_GUID                                       TestGuid;
> +  CHAR16                                         *ResultMessageLabel
> ;
> +  CHAR16                                         *ResultMessageData;
> +
> +  UINT8                                          ImageIndex;
> +  VOID                                           *Image;
> +  UINTN                                          ImageSize;
> +  CHAR16                                         *AbortReason;
> +
> +  //
> +  // Init
> +  //
> +
> +  Status = EFI_SUCCESS;
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  TestGuid = gFirmwareManagementBBTestConformanceSupportGuid002;
> +  ResultMessageLabel = L"SetImage, function support check";
> +
> +  ImageIndex = 0;
> +  Image = NULL;
> +  ImageSize = 0;
> +  AbortReason = NULL;
> +
> +  //
> +  // Check if function is supported
> +  //
> +
> +  Status = FirmwareManagement->SetImage (
> +                                 FirmwareManagement,
> +                                 ImageIndex,
> +                                 Image,
> +                                 ImageSize,
> +                                 NULL,  // VendorCode
> +                                 Progress,
> +                                 &AbortReason
> +                                 );
> +
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  if (Status == EFI_UNSUPPORTED) {
> +    ResultMessageData = L"function is NOT supported";
> +  } else {
> +    ResultMessageData = L"function is supported.";
> +  }
> +
> +  StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 TestGuid,
> +                 ResultMessageLabel,
> +                 L"Result - %s\n%a:%d: Status - %r",
> +                 ResultMessageData,
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );
> +
> +  if (AbortReason != NULL) {
> +    gtBS->FreePool (AbortReason);
> +  }
> +
> +  if (Status == EFI_UNSUPPORTED) {
> +    return EFI_UNSUPPORTED;
> +  } else {
> +    return EFI_SUCCESS;
> +  }
> +}
> +
> +//
> *********************************************************************
> *******
> +//   Support Routine: CheckForSupportCheckImage
> +//
> *********************************************************************
> *******
> +
> +EFI_STATUS
> +CheckForSupportCheckImage (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +)
> +{
> +  EFI_STATUS                                     Status;
> +  EFI_TEST_ASSERTION                             AssertionType;
> +  EFI_GUID                                       TestGuid;
> +  CHAR16                                         *ResultMessageLabel
> ;
> +  CHAR16                                         *ResultMessageData;
> +
> +  UINT8                                          ImageIndex;
> +  VOID                                           *Image;
> +  UINTN                                          ImageSize;
> +  UINT32                                         ImageUpdatable;
> +
> +  //
> +  // Init
> +  //
> +
> +  Status = EFI_SUCCESS;
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  TestGuid = gFirmwareManagementBBTestConformanceSupportGuid003;
> +  ResultMessageLabel = L"CheckImage, function support check";
> +
> +  ImageIndex = 0;
> +  Image = NULL;
> +  ImageSize = 0;
> +
> +  //
> +  // Check if function is supported
> +  //
> +
> +  Status = FirmwareManagement->CheckImage (
> +                                 FirmwareManagement,
> +                                 ImageIndex,
> +                                 Image,
> +                                 ImageSize,
> +                                 &ImageUpdatable
> +                                 );
> +
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  if (Status == EFI_UNSUPPORTED) {
> +    ResultMessageData = L"function is NOT supported";
> +  } else {
> +    ResultMessageData = L"function is supported.";
> +  }
> +
> +  StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 TestGuid,
> +                 ResultMessageLabel,
> +                 L"Result - %s\n%a:%d: Status - %r",
> +                 ResultMessageData,
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );
> +
> +  if (Status == EFI_UNSUPPORTED) {
> +    return EFI_UNSUPPORTED;
> +  } else {
> +    return EFI_SUCCESS;
> +  }
> +}
> +
> +//
> *********************************************************************
> *******
> +//   Support Routine: CheckForSupportSetPackageInfo
> +//
> *********************************************************************
> *******
> +
> +EFI_STATUS
> +CheckForSupportSetPackageInfo (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +)
> +{
> +  EFI_STATUS                                     Status;
> +  EFI_TEST_ASSERTION                             AssertionType;
> +  EFI_GUID                                       TestGuid;
> +  CHAR16                                         *ResultMessageLabel
> ;
> +  CHAR16                                         *ResultMessageData;
> +
> +  VOID                                           *Image;
> +  UINTN                                          ImageSize;
> +  VOID                                           *VendorCode;
> +  UINT32                                         PackageVersion;
> +  CHAR16                                         *PackageVersionName
> ;
> +
> +  //
> +  // Init
> +  //
> +
> +  Status = EFI_SUCCESS;
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  TestGuid = gFirmwareManagementBBTestConformanceSupportGuid004;
> +  ResultMessageLabel = L"SetPackageInfo, function support check";
> +
> +  Image = NULL;
> +  ImageSize = 0;
> +  VendorCode = NULL;
> +  PackageVersion = 0;
> +  PackageVersionName = NULL;
> +
> +  //
> +  // Check if function is supported
> +  //
> +
> +  Status = FirmwareManagement->SetPackageInfo (
> +                                 FirmwareManagement,
> +                                 Image,
> +                                 ImageSize,
> +                                 VendorCode,
> +                                 PackageVersion,
> +                                 PackageVersionName
> +                                 );
> +
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  if (Status == EFI_UNSUPPORTED) {
> +    ResultMessageData = L"function is NOT supported";
> +  } else {
> +    ResultMessageData = L"function is supported.";
> +  }
> +
> +  StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 TestGuid,
> +                 ResultMessageLabel,
> +                 L"Result - %s\n%a:%d: Status - %r",
> +                 ResultMessageData,
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );
> +
> +  if (Status == EFI_UNSUPPORTED) {
> +    return EFI_UNSUPPORTED;
> +  } else {
> +    return EFI_SUCCESS;
> +  }
> +}
> +
> +//
> *********************************************************************
> *******
> +//   Test Cases
> +//
> +//
> +//
> *********************************************************************
> *******
> +

The below is commented out, which should be removed before upstream.
> +/*
> +EFI_STATUS
> +BBTestUnitTest (
> +  IN EFI_BB_TEST_PROTOCOL                        *This,
> +  IN VOID                                        *ClientInterface,
> +  IN EFI_TEST_LEVEL                              TestLevel,
> +  IN EFI_HANDLE                                  SupportHandle
> +  )
> +{
> +  return EFI_SUCCESS;
> +}
> +*/


> +
> +//
> *********************************************************************
> *******
> +//   Test Case: GetImageInfo
> +//
> *********************************************************************
> *******
> +
> +EFI_STATUS
> +BBTestGetImageInfoConformanceTest (
> +  IN EFI_BB_TEST_PROTOCOL                        *This,
> +  IN VOID                                        *ClientInterface,
> +  IN EFI_TEST_LEVEL                              TestLevel,
> +  IN EFI_HANDLE                                  SupportHandle
> +  )
> +{
> +  EFI_STANDARD_TEST_LIBRARY_PROTOCOL             *StandardLib;
> +  EFI_STATUS                                     Status;
> +  EFI_FIRMWARE_MANAGEMENT_PROTOCOL               *FirmwareManagement
> ;
> +
> +  //
> +  // Init
> +  //
> +
> +  FirmwareManagement =
> (EFI_FIRMWARE_MANAGEMENT_PROTOCOL*)ClientInterface;
> +
> +  Status = gtBS->HandleProtocol (
> +                   SupportHandle,
> +                   &gEfiStandardTestLibraryGuid,
> +                   (VOID **) &StandardLib
> +                   );
> +  if (EFI_ERROR(Status)) {
> +    return Status;
> +  }
> +
> +  //
> +  // Call check point(s)
> +  //
> +
> +  BBTestGetImageInfoConformanceTestCheckpoint1 (StandardLib,
> FirmwareManagement);
> +  BBTestGetImageInfoConformanceTestCheckpoint2 (StandardLib,
> FirmwareManagement);
> +
> +  return EFI_SUCCESS;
> +}
> +
> +//
> *********************************************************************
> *******
> +//   Test Case: GetImage
> +//
> *********************************************************************
> *******
> +
> +EFI_STATUS
> +BBTestGetImageConformanceTest (
> +  IN EFI_BB_TEST_PROTOCOL                        *This,
> +  IN VOID                                        *ClientInterface,
> +  IN EFI_TEST_LEVEL                              TestLevel,
> +  IN EFI_HANDLE                                  SupportHandle
> +  )
> +{
> +  EFI_STANDARD_TEST_LIBRARY_PROTOCOL             *StandardLib;
> +  EFI_STATUS                                     Status;
> +  EFI_FIRMWARE_MANAGEMENT_PROTOCOL               *FirmwareManagement
> ;
> +
> +  //
> +  // Init
> +  //
> +
> +  FirmwareManagement =
> (EFI_FIRMWARE_MANAGEMENT_PROTOCOL*)ClientInterface;
> +
> +  Status = gtBS->HandleProtocol (
> +                   SupportHandle,
> +                   &gEfiStandardTestLibraryGuid,
> +                   (VOID **) &StandardLib
> +                   );
> +  if (EFI_ERROR(Status)) {
> +    return Status;
> +  }
> +
> +  //
> +  // Check if function is supported
> +  //
> +
> +  Status = CheckForSupportGetImage (StandardLib,
> FirmwareManagement);
> +  if (Status == EFI_UNSUPPORTED) {
> +    return Status;
> +  }
> +
> +  //
> +  // Call check point(s)
> +  //
> +
> +  BBTestGetImageConformanceTestCheckpoint1 (StandardLib,
> FirmwareManagement);
> +  BBTestGetImageConformanceTestCheckpoint2 (StandardLib,
> FirmwareManagement);
> +  BBTestGetImageConformanceTestCheckpoint3 (StandardLib,
> FirmwareManagement);
> +  BBTestGetImageConformanceTestCheckpoint4 (StandardLib,
> FirmwareManagement);
> +
> +  return EFI_SUCCESS;
> +}
> +
> +//
> *********************************************************************
> *******
> +//   Test Case: SetImage
> +//
> *********************************************************************
> *******
> +
> +EFI_STATUS
> +BBTestSetImageConformanceTest (
> +  IN EFI_BB_TEST_PROTOCOL                        *This,
> +  IN VOID                                        *ClientInterface,
> +  IN EFI_TEST_LEVEL                              TestLevel,
> +  IN EFI_HANDLE                                  SupportHandle
> +  )
> +{
> +  EFI_STANDARD_TEST_LIBRARY_PROTOCOL             *StandardLib;
> +  EFI_STATUS                                     Status;
> +  EFI_FIRMWARE_MANAGEMENT_PROTOCOL               *FirmwareManagement
> ;
> +
> +  //
> +  // Init
> +  //
> +
> +  FirmwareManagement =
> (EFI_FIRMWARE_MANAGEMENT_PROTOCOL*)ClientInterface;
> +
> +  Status = gtBS->HandleProtocol (
> +                   SupportHandle,
> +                   &gEfiStandardTestLibraryGuid,
> +                   (VOID **) &StandardLib
> +                   );
> +  if (EFI_ERROR(Status)) {
> +    return Status;
> +  }
> +
> +  //
> +  // Check if function is supported
> +  //
> +
> +  Status = CheckForSupportSetImage (StandardLib,
> FirmwareManagement);
> +  if (Status == EFI_UNSUPPORTED) {
> +    return Status;
> +  }
> +
> +  //
> +  // Call check point(s)
> +  //
> +
> +  BBTestSetImageConformanceTestCheckpoint1 (StandardLib,
> FirmwareManagement);
> +  //BBTestSetImageConformanceTestCheckpoint2 (StandardLib,
> FirmwareManagement);
> +  BBTestSetImageConformanceTestCheckpoint3 (StandardLib,
> FirmwareManagement);
> +  BBTestSetImageConformanceTestCheckpoint4 (StandardLib,
> FirmwareManagement);
> +
> +  return Status;
> +}
> +
> +//
> *********************************************************************
> *******
> +//   Test Case: CheckImage
> +//
> *********************************************************************
> *******
> +
> +EFI_STATUS
> +BBTestCheckImageConformanceTest (
> +  IN EFI_BB_TEST_PROTOCOL                        *This,
> +  IN VOID                                        *ClientInterface,
> +  IN EFI_TEST_LEVEL                              TestLevel,
> +  IN EFI_HANDLE                                  SupportHandle
> +  )
> +{
> +  EFI_STANDARD_TEST_LIBRARY_PROTOCOL             *StandardLib;
> +  EFI_STATUS                                     Status;
> +  EFI_FIRMWARE_MANAGEMENT_PROTOCOL               *FirmwareManagement
> ;
> +
> +  //
> +  // Init
> +  //
> +
> +  FirmwareManagement =
> (EFI_FIRMWARE_MANAGEMENT_PROTOCOL*)ClientInterface;
> +
> +  Status = gtBS->HandleProtocol (
> +                   SupportHandle,
> +                   &gEfiStandardTestLibraryGuid,
> +                   (VOID **) &StandardLib
> +                   );
> +  if (EFI_ERROR(Status)) {
> +    return Status;
> +  }
> +
> +  //
> +  // Check if function is supported
> +  //
> +
> +  Status = CheckForSupportCheckImage (StandardLib,
> FirmwareManagement);
> +  if (Status == EFI_UNSUPPORTED) {
> +    return Status;
> +  }
> +
> +  //
> +  // Call check point(s)
> +  //
> +
> +  BBTestCheckImageConformanceTestCheckpoint1 (StandardLib,
> FirmwareManagement);
> +  BBTestCheckImageConformanceTestCheckpoint2 (StandardLib,
> FirmwareManagement);
> +
> +  return Status;
> +}
> +
> +//
> *********************************************************************
> *******
> +//   Test Case: SetPackageInfo
> +//
> *********************************************************************
> *******
> +
> +EFI_STATUS
> +BBTestSetPackageInfoConformanceTest (
> +  IN EFI_BB_TEST_PROTOCOL                        *This,
> +  IN VOID                                        *ClientInterface,
> +  IN EFI_TEST_LEVEL                              TestLevel,
> +  IN EFI_HANDLE                                  SupportHandle
> +  )
> +{
> +  EFI_STANDARD_TEST_LIBRARY_PROTOCOL             *StandardLib;
> +  EFI_STATUS                                     Status;
> +  EFI_FIRMWARE_MANAGEMENT_PROTOCOL               *FirmwareManagement
> ;
> +
> +  //
> +  // Init
> +  //
> +
> +  FirmwareManagement =
> (EFI_FIRMWARE_MANAGEMENT_PROTOCOL*)ClientInterface;
> +
> +  Status = gtBS->HandleProtocol (
> +                   SupportHandle,
> +                   &gEfiStandardTestLibraryGuid,
> +                   (VOID **) &StandardLib
> +                   );
> +  if (EFI_ERROR(Status)) {
> +    return Status;
> +  }
> +
> +  //
> +  // Check if function is supported
> +  //
> +
> +  Status = CheckForSupportSetPackageInfo (StandardLib,
> FirmwareManagement);
> +  if (Status == EFI_UNSUPPORTED) {
> +    return Status;
> +  }
> +
> +  //
> +  // Call check point(s)
> +  //
> +
> +  BBTestSetPackageInfoConformanceTestCheckpoint1 (StandardLib,
> FirmwareManagement);
> +  BBTestSetPackageInfoConformanceTestCheckpoint2 (StandardLib,
> FirmwareManagement);
> +  BBTestSetPackageInfoConformanceTestCheckpoint3 (StandardLib,
> FirmwareManagement);
> +  BBTestSetPackageInfoConformanceTestCheckpoint4 (StandardLib,
> FirmwareManagement);
> +
> +  return Status;
> +}
> +
> +//
> *********************************************************************
> *******
> +//   Check Points
> +//
> +//
> +//
> *********************************************************************
> *******
> +
> +//
> *********************************************************************
> *******
> +//   Checkpoint: GetImageInfo, 1
> +//
> *********************************************************************
> *******
> +
> +/**
> +  This routine:
> +    - Calls function with valid parameters, except ImageInfoSize =
> 1.
> +      The function should return EFI_BUFFER_TOO_SMALL and
> ImageInfoSize > 1.
> +**/
> +
> +EFI_STATUS
> +BBTestGetImageInfoConformanceTestCheckpoint1 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  )
> +{
> +  EFI_STATUS                                     Status;
> +  EFI_TEST_ASSERTION                             AssertionType;
> +  EFI_GUID                                       TestGuid;
> +  CHAR16                                         *ResultMessageLabel
> ;
> +  CHAR16                                         *ResultMessageData;
> +
> +  UINTN                                          ImageInfoSize;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *ImageInfo;
> +  UINT32                                         DescriptorVersion;
> +  UINT8                                          DescriptorCount;
> +  UINTN                                          DescriptorSize;
> +  UINT32                                         PackageVersion;
> +  CHAR16                                         *PackageVersionName
> ;
> +
> +  //
> +  // Init
> +  //
> +
> +  Status = EFI_SUCCESS;
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  TestGuid = gFirmwareManagementBBTestConformanceAssertionGuid001;
> +  ResultMessageLabel = L"GetImageInfo, conformance checkpoint #1";
> +  ResultMessageData = L"correctly returned EFI_BUFFER_TOO_SMALL.";
> +
> +  ImageInfo = NULL;
> +  PackageVersionName = NULL;
> +
> +  ImageInfoSize = (sizeof (EFI_FIRMWARE_IMAGE_DESCRIPTOR)) * 20;
> +  Status = gtBS->AllocatePool (
> +                   EfiBootServicesData,
> +                   ImageInfoSize,
> +                   (VOID **) &ImageInfo
> +                   );
> +  if (EFI_ERROR (Status)) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"test case initialization failure.";
> +    goto Exit;
> +  }
> +  ImageInfoSize = 1;
> +
> +  //
> +  // Check the data returned by the function
> +  //
> +
> +  Status = FirmwareManagement->GetImageInfo (
> +                                 FirmwareManagement,
> +                                 &ImageInfoSize,
> +                                 ImageInfo,
> +                                 &DescriptorVersion,
> +                                 &DescriptorCount,
> +                                 &DescriptorSize,
> +                                 &PackageVersion,
> +                                 &PackageVersionName
> +                                 );
> +
> +  if (Status != EFI_BUFFER_TOO_SMALL) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"failed to return EFI_BUFFER_TOO_SMALL.";
> +    goto Exit;
> +  }
> +  if (ImageInfoSize <= 1) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"failed to update *ImageInfoSize.";
> +  }
> +
> +  //
> +  // Report the checkpoint result
> +  //
> +
> +Exit:
> +  StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 TestGuid,
> +                 ResultMessageLabel,
> +                 L"Result - %s\n%a:%d: Status - %r",
> +                 ResultMessageData,
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );
> +  if (PackageVersionName != NULL) {
> +    gtBS->FreePool (PackageVersionName);
> +  }
> +  if (ImageInfo != NULL) {
> +    gtBS->FreePool (ImageInfo);
> +  }
> +
> +  return EFI_SUCCESS;
> +}
> +
> +//
> *********************************************************************
> *******
> +//   Checkpoint: GetImageInfo, 2
> +//
> *********************************************************************
> *******
> +
> +/**
> +  This routine:
> +    - Calls function with valid parameters, except &ImageInfoSize =
> NULL.
> +      The function should return EFI_INVALID_PARAMETER.
> +**/
> +
> +EFI_STATUS
> +BBTestGetImageInfoConformanceTestCheckpoint2 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  )
> +{
> +  EFI_STATUS                                     Status;
> +  EFI_TEST_ASSERTION                             AssertionType;
> +  EFI_GUID                                       TestGuid;
> +  CHAR16                                         *ResultMessageLabel
> ;
> +  CHAR16                                         *ResultMessageData;
> +
> +  UINTN                                          ImageInfoSize;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *ImageInfo;
> +  UINT32                                         DescriptorVersion;
> +  UINT8                                          DescriptorCount;
> +  UINTN                                          DescriptorSize;
> +  UINT32                                         PackageVersion;
> +  CHAR16                                         *PackageVersionName
> ;
> +
> +  //
> +  // Init
> +  //
> +
> +  Status = EFI_SUCCESS;
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  TestGuid = gFirmwareManagementBBTestConformanceAssertionGuid002;
> +  ResultMessageLabel = L"GetImageInfo, conformance checkpoint #2";
> +  ResultMessageData = L"correctly returned EFI_INVALID_PARAMETER.";
> +
> +  ImageInfo = NULL;
> +  PackageVersionName = NULL;
> +
> +  ImageInfoSize = (sizeof (EFI_FIRMWARE_IMAGE_DESCRIPTOR)) * 20;
> +  Status = gtBS->AllocatePool (
> +                   EfiBootServicesData,
> +                   ImageInfoSize,
> +                   (VOID **) &ImageInfo
> +                   );
> +  if (EFI_ERROR (Status)) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"test case initialization failure.";
> +    goto Exit;
> +  }
> +
> +  //
> +  // Check the data returned by the function
> +  //
> +
> +  Status = FirmwareManagement->GetImageInfo (
> +                                 FirmwareManagement,
> +                                 NULL, // &ImageInfoSize
> +                                 ImageInfo,
> +                                 &DescriptorVersion,
> +                                 &DescriptorCount,
> +                                 &DescriptorSize,
> +                                 &PackageVersion,
> +                                 &PackageVersionName
> +                                 );
> +
> +  if (Status != EFI_INVALID_PARAMETER) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"failed to return EFI_INVALID_PARAMETER.";
> +  }
> +
> +  //
> +  // Report the checkpoint result
> +  //
> +
> +Exit:
> +  StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 TestGuid,
> +                 ResultMessageLabel,
> +                 L"Result - %s\n%a:%d: Status - %r",
> +                 ResultMessageData,
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );
> +  if (PackageVersionName != NULL) {
> +    gtBS->FreePool (PackageVersionName);
> +  }
> +  if (ImageInfo != NULL) {
> +    gtBS->FreePool (ImageInfo);
> +  }
> +
> +  return EFI_SUCCESS;
> +}
> +
> +//
> *********************************************************************
> *******
> +//   Checkpoint: GetImage, 1
> +//
> *********************************************************************
> *******
> +
> +/**
> +  This routine:
> +    - Calls function with valid parameters, except ImageSize = 1.
> +      The function should return EFI_BUFFER_TOO_SMALL and ImageSize
> > 1.
> +**/
> +
> +EFI_STATUS
> +BBTestGetImageConformanceTestCheckpoint1 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  )
> +{
> +  EFI_STATUS                                     Status;
> +  EFI_TEST_ASSERTION                             AssertionType;
> +  EFI_GUID                                       TestGuid;
> +  CHAR16                                         *ResultMessageLabel
> ;
> +  CHAR16                                         *ResultMessageData;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *BufferImageInfo;
> +  VOID                                           *BufferImage;
> +
> +  UINTN                                          ImageInfoSize;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *ImageInfo;
> +  UINT32                                         DescriptorVersion;
> +  UINT8                                          DescriptorCount;
> +  UINTN                                          DescriptorSize;
> +  UINT32                                         PackageVersion;
> +  CHAR16                                         *PackageVersionName
> ;
> +
> +  VOID                                           *Image;
> +  UINTN                                          ImageSize;
> +
> +  UINTN                                          i;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *p;
> +  UINTN                                          FunctionTested;
> +
> +  //
> +  // Init
> +  //
> +
> +  Status = EFI_SUCCESS;
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  TestGuid = gFirmwareManagementBBTestConformanceAssertionGuid003;
> +  ResultMessageLabel = L"GetImage, conformance checkpoint #1";
> +
> +  BufferImageInfo = NULL;
> +  BufferImage = NULL;
> +  ImageInfo = NULL;
> +  Image = NULL;
> +  PackageVersionName = NULL;
> +  FunctionTested = 0;
> +
> +  // Use a sufficiently large buffer to obtain EFI_SUCCESS,
> +  // since some implementation does NOT correctly return
> EFI_BUFFER_TOO_SMALL.
> +  // Check for EFI_BUFFER_TOO_SMALL in another conformance test.
> +
> +  ImageInfoSize = (sizeof (EFI_FIRMWARE_IMAGE_DESCRIPTOR)) * 20;
> +  Status = gtBS->AllocatePool (
> +                   EfiBootServicesData,
> +                   ImageInfoSize,
> +                   (VOID **) &ImageInfo
> +                   );
> +  if (EFI_ERROR (Status)) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"test case initialization failure.";
> +    goto Exit;
> +  }
> +
> +  Status = FirmwareManagement->GetImageInfo (
> +                                 FirmwareManagement,
> +                                 &ImageInfoSize,
> +                                 ImageInfo,
> +                                 &DescriptorVersion,
> +                                 &DescriptorCount,
> +                                 &DescriptorSize,
> +                                 &PackageVersion,
> +                                 &PackageVersionName
> +                                 );
> +  if (Status == EFI_BUFFER_TOO_SMALL) {
> +    gtBS->FreePool (ImageInfo);
> +    Status = gtBS->AllocatePool (
> +                     EfiBootServicesData,
> +                     ImageInfoSize,
> +                     (VOID **) &ImageInfo
> +                     );
> +    if (EFI_ERROR (Status)) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"test case initialization failure.";
> +      goto Exit;
> +    }
> +    Status = FirmwareManagement->GetImageInfo (
> +                                   FirmwareManagement,
> +                                   &ImageInfoSize,
> +                                   ImageInfo,
> +                                   &DescriptorVersion,
> +                                   &DescriptorCount,
> +                                   &DescriptorSize,
> +                                   &PackageVersion,
> +                                   &PackageVersionName
> +                                   );
> +    if (Status != EFI_SUCCESS) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"test case initialization failure.";
> +      BufferImageInfo = ImageInfo;
> +      goto Exit;
> +    }
> +  }
> +  BufferImageInfo = ImageInfo;
> +
> +  if (DescriptorSize == 0) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"*DescriptorSize is 0.";
> +    goto Exit;  // Note the Status = EFI_SUCCESS
> +  }
> +  if ((DescriptorCount * DescriptorSize) > ImageInfoSize) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"((*DescriptorCount) * (*DescriptorSize)) >
> *ImageInfoSize.";
> +    goto Exit;  // Note the Status = EFI_SUCCESS
> +  }
> +
> +  //
> +  // Check the data returned by the function
> +  //
> +
> +  for (i = 0; i < DescriptorCount; i++) {
> +    p = (EFI_FIRMWARE_IMAGE_DESCRIPTOR *) (((UINT8 *) ImageInfo) +
> (i * DescriptorSize));
> +
> +    if (((p->AttributesSupported &
> IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) ==
> +          IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) &&
> +        ((p->AttributesSetting &
> IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) ==
> +          IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED)) {
> +      continue;
> +    }
> +    if (p->Size == 0) {
> +      continue;
> +    }
> +    if ((p->AttributesSupported & IMAGE_ATTRIBUTE_IMAGE_UPDATABLE)
> != IMAGE_ATTRIBUTE_IMAGE_UPDATABLE) {
> +      continue;
> +    }
> +    if ((p->AttributesSetting & IMAGE_ATTRIBUTE_IMAGE_UPDATABLE) !=
> IMAGE_ATTRIBUTE_IMAGE_UPDATABLE) {
> +      continue;
> +    }
> +
> +    ImageSize = p->Size;
> +    Status = gtBS->AllocatePool (
> +                     EfiBootServicesData,
> +                     ImageSize,
> +                     (VOID **) &Image
> +                     );
> +    if (EFI_ERROR (Status)) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"test case initialization failure.";
> +      goto Exit;
> +    }
> +    BufferImage = Image;
> +
> +    ImageSize = 1;
> +    FunctionTested++;
> +    Status = FirmwareManagement->GetImage (
> +                                   FirmwareManagement,
> +                                   p->ImageIndex,
> +                                   Image,
> +                                   &ImageSize
> +                                   );
> +    gtBS->FreePool (BufferImage);
> +    BufferImage = NULL;
> +    Image = NULL;
> +
> +    //
> +    // Report the checkpoint result
> +    //
> +
> +    if (Status != EFI_BUFFER_TOO_SMALL) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"failed to return EFI_BUFFER_TOO_SMALL.";
> +      goto Exit;
> +    }
> +    if (ImageInfoSize <= 1) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"failed to update *ImageSize.";
> +      goto Exit;
> +    }
> +  }
> +
> +  if (FunctionTested == 0) {
> +    AssertionType = EFI_TEST_ASSERTION_PASSED;
> +    ResultMessageData = L"test skipped - test case does not apply.";
> +  } else {
> +    AssertionType = EFI_TEST_ASSERTION_PASSED;
> +    ResultMessageData = L"correctly returned EFI_BUFFER_TOO_SMALL.";
> +  }
> +
> +Exit:
> +  StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 TestGuid,
> +                 ResultMessageLabel,
> +                 L"Result - %s\n%a:%d: Status - %r",
> +                 ResultMessageData,
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );
> +
> +  if (PackageVersionName != NULL) {
> +    gtBS->FreePool (PackageVersionName);
> +  }
> +  if (BufferImageInfo != NULL) {
> +    gtBS->FreePool (BufferImageInfo);
> +  }
> +  if (BufferImage != NULL) {
> +      gtBS->FreePool (BufferImage);
> +  }
> +
> +  return EFI_SUCCESS;
> +}
> +
> +//
> *********************************************************************
> *******
> +//   Checkpoint: GetImage, 2
> +//
> *********************************************************************
> *******
> +
> +/**
> +  This routine:
> +    - Calls function with valid parameters, except Image = NULL.
> +      The function should return EFI_INVALID_PARAMETER.
> +**/
> +
> +EFI_STATUS
> +BBTestGetImageConformanceTestCheckpoint2 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  )
> +{
> +  EFI_STATUS                                     Status;
> +  EFI_TEST_ASSERTION                             AssertionType;
> +  EFI_GUID                                       TestGuid;
> +  CHAR16                                         *ResultMessageLabel
> ;
> +  CHAR16                                         *ResultMessageData;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *BufferImageInfo;
> +
> +  UINTN                                          ImageInfoSize;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *ImageInfo;
> +  UINT32                                         DescriptorVersion;
> +  UINT8                                          DescriptorCount;
> +  UINTN                                          DescriptorSize;
> +  UINT32                                         PackageVersion;
> +  CHAR16                                         *PackageVersionName
> ;
> +
> +  VOID                                           *Image;
> +  UINTN                                          ImageSize;
> +
> +  UINTN                                          i;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *p;
> +  UINTN                                          FunctionTested;
> +
> +  //
> +  // Init
> +  //
> +
> +  Status = EFI_SUCCESS;
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  TestGuid = gFirmwareManagementBBTestConformanceAssertionGuid004;
> +  ResultMessageLabel = L"GetImage, conformance checkpoint #2";
> +
> +  BufferImageInfo = NULL;
> +  ImageInfo = NULL;
> +  Image = NULL;
> +  PackageVersionName = NULL;
> +  FunctionTested = 0;
> +
> +  // Use a sufficiently large buffer to obtain EFI_SUCCESS,
> +  // since some implementation does NOT correctly return
> EFI_BUFFER_TOO_SMALL.
> +  // Check for EFI_BUFFER_TOO_SMALL in another conformance test.
> +
> +  ImageInfoSize = (sizeof (EFI_FIRMWARE_IMAGE_DESCRIPTOR)) * 20;
> +  Status = gtBS->AllocatePool (
> +                   EfiBootServicesData,
> +                   ImageInfoSize,
> +                   (VOID **) &ImageInfo
> +                   );
> +  if (EFI_ERROR (Status)) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"test case initialization failure.";
> +    goto Exit;
> +  }
> +
> +  Status = FirmwareManagement->GetImageInfo (
> +                                 FirmwareManagement,
> +                                 &ImageInfoSize,
> +                                 ImageInfo,
> +                                 &DescriptorVersion,
> +                                 &DescriptorCount,
> +                                 &DescriptorSize,
> +                                 &PackageVersion,
> +                                 &PackageVersionName
> +                                 );
> +  if (Status == EFI_BUFFER_TOO_SMALL) {
> +    gtBS->FreePool (ImageInfo);
> +    Status = gtBS->AllocatePool (
> +                     EfiBootServicesData,
> +                     ImageInfoSize,
> +                     (VOID **) &ImageInfo
> +                     );
> +    if (EFI_ERROR (Status)) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"test case initialization failure.";
> +      goto Exit;
> +    }
> +    Status = FirmwareManagement->GetImageInfo (
> +                                   FirmwareManagement,
> +                                   &ImageInfoSize,
> +                                   ImageInfo,
> +                                   &DescriptorVersion,
> +                                   &DescriptorCount,
> +                                   &DescriptorSize,
> +                                   &PackageVersion,
> +                                   &PackageVersionName
> +                                   );
> +    if (Status != EFI_SUCCESS) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"test case initialization failure.";
> +      BufferImageInfo = ImageInfo;
> +      goto Exit;
> +    }
> +  }
> +  BufferImageInfo = ImageInfo;
> +
> +  if (DescriptorSize == 0) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"*DescriptorSize is 0.";
> +    goto Exit;  // Note the Status = EFI_SUCCESS
> +  }
> +  if ((DescriptorCount * DescriptorSize) > ImageInfoSize) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"((*DescriptorCount) * (*DescriptorSize)) >
> *ImageInfoSize.";
> +    goto Exit;  // Note the Status = EFI_SUCCESS
> +  }
> +
> +  //
> +  // Check the data returned by the function
> +  //
> +
> +  for (i = 0; i < DescriptorCount; i++) {
> +    p = (EFI_FIRMWARE_IMAGE_DESCRIPTOR *) (((UINT8 *) ImageInfo) +
> (i * DescriptorSize));
> +
> +    if (((p->AttributesSupported &
> IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) ==
> +          IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) &&
> +        ((p->AttributesSetting &
> IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) ==
> +          IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED)) {
> +      continue;
> +    }
> +    if (p->Size == 0) {
> +      continue;
> +    }
> +    if ((p->AttributesSupported & IMAGE_ATTRIBUTE_IMAGE_UPDATABLE)
> != IMAGE_ATTRIBUTE_IMAGE_UPDATABLE) {
> +      continue;
> +    }
> +    if ((p->AttributesSetting & IMAGE_ATTRIBUTE_IMAGE_UPDATABLE) !=
> IMAGE_ATTRIBUTE_IMAGE_UPDATABLE) {
> +      continue;
> +    }
> +
> +    // Use a sufficiently large buffer size to avoid
> EFI_BUFFER_TOO_SMALL.
> +    ImageSize = p->Size * 2;
> +    Image = NULL;
> +    FunctionTested++;
> +    Status = FirmwareManagement->GetImage (
> +                                   FirmwareManagement,
> +                                   p->ImageIndex,
> +                                   Image,
> +                                   &ImageSize
> +                                   );
> +
> +    //
> +    // Report the checkpoint result
> +    //
> +
> +    if (Status != EFI_INVALID_PARAMETER) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"failed to return
> EFI_INVALID_PARAMETER.";
> +      goto Exit;
> +    }
> +  }
> +
> +  if (FunctionTested == 0) {
> +    AssertionType = EFI_TEST_ASSERTION_PASSED;
> +    ResultMessageData = L"test skipped - test case does not apply.";
> +  } else {
> +    AssertionType = EFI_TEST_ASSERTION_PASSED;
> +    ResultMessageData = L"correctly returned
> EFI_INVALID_PARAMETER.";
> +  }
> +
> +Exit:
> +  StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 TestGuid,
> +                 ResultMessageLabel,
> +                 L"Result - %s\n%a:%d: Status - %r",
> +                 ResultMessageData,
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );
> +
> +  if (PackageVersionName != NULL) {
> +    gtBS->FreePool (PackageVersionName);
> +  }
> +  if (BufferImageInfo != NULL) {
> +    gtBS->FreePool (BufferImageInfo);
> +  }
> +
> +  return EFI_SUCCESS;
> +}
> +
> +//
> *********************************************************************
> *******
> +//   Checkpoint: GetImage, 3
> +//
> *********************************************************************
> *******
> +
> +/**
> +  This routine:
> +    - Calls function with valid parameters, except ImageIndex = 0 or
> +      ImageIndex = DescriptorCount + 1.
> +      The function should return EFI_INVALID_PARAMETER or
> EFI_NOT_FOUND.
> +**/
> +
> +EFI_STATUS
> +BBTestGetImageConformanceTestCheckpoint3 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  )
> +{
> +  EFI_STATUS                                     Status;
> +  EFI_TEST_ASSERTION                             AssertionType;
> +  EFI_GUID                                       TestGuid;
> +  CHAR16                                         *ResultMessageLabel
> ;
> +  CHAR16                                         *ResultMessageData;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *BufferImageInfo;
> +  VOID                                           *BufferImage;
> +
> +  UINTN                                          ImageInfoSize;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *ImageInfo;
> +  UINT32                                         DescriptorVersion;
> +  UINT8                                          DescriptorCount;
> +  UINTN                                          DescriptorSize;
> +  UINT32                                         PackageVersion;
> +  CHAR16                                         *PackageVersionName
> ;
> +
> +  VOID                                           *Image;
> +  UINTN                                          ImageSize;
> +  UINT8                                          ImageIndex;
> +
> +  //
> +  // Init
> +  //
> +
> +  Status = EFI_SUCCESS;
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  TestGuid = gFirmwareManagementBBTestConformanceAssertionGuid005;
> +  ResultMessageLabel = L"GetImage, conformance checkpoint #3";
> +
> +  BufferImageInfo = NULL;
> +  BufferImage = NULL;
> +  ImageInfo = NULL;
> +  Image = NULL;
> +  PackageVersionName = NULL;
> +
> +  // Use a sufficiently large buffer to obtain EFI_SUCCESS,
> +  // since some implementation does NOT correctly return
> EFI_BUFFER_TOO_SMALL.
> +  // Check for EFI_BUFFER_TOO_SMALL in another conformance test.
> +
> +  ImageInfoSize = (sizeof (EFI_FIRMWARE_IMAGE_DESCRIPTOR)) * 20;
> +  Status = gtBS->AllocatePool (
> +                   EfiBootServicesData,
> +                   ImageInfoSize,
> +                   (VOID **) &ImageInfo
> +                   );
> +  if (EFI_ERROR (Status)) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"test case initialization failure.";
> +    goto Exit;
> +  }
> +
> +  Status = FirmwareManagement->GetImageInfo (
> +                                 FirmwareManagement,
> +                                 &ImageInfoSize,
> +                                 ImageInfo,
> +                                 &DescriptorVersion,
> +                                 &DescriptorCount,
> +                                 &DescriptorSize,
> +                                 &PackageVersion,
> +                                 &PackageVersionName
> +                                 );
> +  if (Status == EFI_BUFFER_TOO_SMALL) {
> +    gtBS->FreePool (ImageInfo);
> +    Status = gtBS->AllocatePool (
> +                     EfiBootServicesData,
> +                     ImageInfoSize,
> +                     (VOID **) &ImageInfo
> +                     );
> +    if (EFI_ERROR (Status)) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"test case initialization failure.";
> +      goto Exit;
> +    }
> +    Status = FirmwareManagement->GetImageInfo (
> +                                   FirmwareManagement,
> +                                   &ImageInfoSize,
> +                                   ImageInfo,
> +                                   &DescriptorVersion,
> +                                   &DescriptorCount,
> +                                   &DescriptorSize,
> +                                   &PackageVersion,
> +                                   &PackageVersionName
> +                                   );
> +    if (Status != EFI_SUCCESS) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"test case initialization failure.";
> +      BufferImageInfo = ImageInfo;
> +      goto Exit;
> +    }
> +  }
> +  BufferImageInfo = ImageInfo;
> +
> +  if (DescriptorSize == 0) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"*DescriptorSize is 0.";
> +    goto Exit;  // Note the Status = EFI_SUCCESS
> +  }
> +  if ((DescriptorCount * DescriptorSize) > ImageInfoSize) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"((*DescriptorCount) * (*DescriptorSize)) >
> *ImageInfoSize.";
> +    goto Exit;  // Note the Status = EFI_SUCCESS
> +  }
> +
> +  //
> +  // Check the data returned by the function
> +  //
> +
> +  // Dummy image so as to fail on Image = NULL
> +  // Any size since the function should check for index before size
> +  ImageSize = 64;
> +  Status = gtBS->AllocatePool (
> +                   EfiBootServicesData,
> +                   ImageSize,
> +                   (VOID **) &Image
> +                   );
> +  if (EFI_ERROR (Status)) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"test case initialization failure.";
> +    goto Exit;
> +  }
> +  BufferImage = Image;
> +
> +  AssertionType = EFI_TEST_ASSERTION_FAILED;
> +  ResultMessageData = L"failed to return EFI_INVALID_PARAMETER or
> EFI_NOT_FOUND.";
> +
> +  ImageIndex = 0;
> +  Status = FirmwareManagement->GetImage (
> +                                 FirmwareManagement,
> +                                 ImageIndex,
> +                                 Image,
> +                                 &ImageSize
> +                                 );
> +  if ((Status != EFI_INVALID_PARAMETER) && (Status !=
> EFI_NOT_FOUND)) {
> +    goto Exit;
> +  }
> +
> +  if ((DescriptorCount + 1) != 0) {
> +    ImageIndex = DescriptorCount + 1;
> +    Status = FirmwareManagement->GetImage (
> +                                   FirmwareManagement,
> +                                   ImageIndex,
> +                                   Image,
> +                                   &ImageSize
> +                                   );
> +    if ((Status != EFI_INVALID_PARAMETER) && (Status !=
> EFI_NOT_FOUND)) {
> +      goto Exit;
> +    }
> +  }
> +
> +  //
> +  // Report the checkpoint result
> +  //
> +
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  ResultMessageData = L"correctly returned EFI_INVALID_PARAMETER or
> EFI_NOT_FOUND.";
> +
> +Exit:
> +  StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 TestGuid,
> +                 ResultMessageLabel,
> +                 L"Result - %s\n%a:%d: Status - %r",
> +                 ResultMessageData,
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );
> +
> +  if (PackageVersionName != NULL) {
> +    gtBS->FreePool (PackageVersionName);
> +  }
> +  if (BufferImageInfo != NULL) {
> +    gtBS->FreePool (BufferImageInfo);
> +  }
> +   if (BufferImage != NULL) {
> +      gtBS->FreePool (BufferImage);
> +  }
> +
> +  return EFI_SUCCESS;
> +}
> +
> +//
> *********************************************************************
> *******
> +//   Checkpoint: GetImage, 4
> +//
> *********************************************************************
> *******
> +
> +/**
> +  This routine:
> +    - The function requires authentication.
> +    - Calls function with valid parameters, except Image has dummy
> +      authentication data.
> +      The function should return EFI_SECURITY_VIOLATION.
> +**/
> +
> +EFI_STATUS
> +BBTestGetImageConformanceTestCheckpoint4 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  )
> +{
> +  EFI_STATUS                                     Status;
> +  EFI_TEST_ASSERTION                             AssertionType;
> +  EFI_GUID                                       TestGuid;
> +  CHAR16                                         *ResultMessageLabel
> ;
> +  CHAR16                                         *ResultMessageData;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *BufferImageInfo;
> +  VOID                                           *BufferImage;
> +
> +  UINTN                                          ImageInfoSize;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *ImageInfo;
> +  UINT32                                         DescriptorVersion;
> +  UINT8                                          DescriptorCount;
> +  UINTN                                          DescriptorSize;
> +  UINT32                                         PackageVersion;
> +  CHAR16                                         *PackageVersionName
> ;
> +
> +  VOID                                           *Image;
> +  UINTN                                          ImageSize;
> +
> +  UINTN                                          i;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *p;
> +  UINTN                                          FunctionTested;
> +
> +  //
> +  // Init
> +  //
> +
> +  Status = EFI_SUCCESS;
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  TestGuid = gFirmwareManagementBBTestConformanceAssertionGuid006;
> +  ResultMessageLabel = L"GetImage, conformance checkpoint #4";
> +
> +  BufferImageInfo = NULL;
> +  BufferImage = NULL;
> +  ImageInfo = NULL;
> +  Image = NULL;
> +  PackageVersionName = NULL;
> +  FunctionTested = 0;
> +
> +  // Use a sufficiently large buffer to obtain EFI_SUCCESS,
> +  // since some implementation does NOT correctly return
> EFI_BUFFER_TOO_SMALL.
> +  // Check for EFI_BUFFER_TOO_SMALL in another conformance test.
> +
> +  ImageInfoSize = (sizeof (EFI_FIRMWARE_IMAGE_DESCRIPTOR)) * 20;
> +  Status = gtBS->AllocatePool (
> +                   EfiBootServicesData,
> +                   ImageInfoSize,
> +                   (VOID **) &ImageInfo
> +                   );
> +  if (EFI_ERROR (Status)) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"test case initialization failure.";
> +    goto Exit;
> +  }
> +
> +  Status = FirmwareManagement->GetImageInfo (
> +                                 FirmwareManagement,
> +                                 &ImageInfoSize,
> +                                 ImageInfo,
> +                                 &DescriptorVersion,
> +                                 &DescriptorCount,
> +                                 &DescriptorSize,
> +                                 &PackageVersion,
> +                                 &PackageVersionName
> +                                 );
> +  if (Status == EFI_BUFFER_TOO_SMALL) {
> +    gtBS->FreePool (ImageInfo);
> +    Status = gtBS->AllocatePool (
> +                     EfiBootServicesData,
> +                     ImageInfoSize,
> +                     (VOID **) &ImageInfo
> +                     );
> +    if (EFI_ERROR (Status)) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"test case initialization failure.";
> +      goto Exit;
> +    }
> +    Status = FirmwareManagement->GetImageInfo (
> +                                   FirmwareManagement,
> +                                   &ImageInfoSize,
> +                                   ImageInfo,
> +                                   &DescriptorVersion,
> +                                   &DescriptorCount,
> +                                   &DescriptorSize,
> +                                   &PackageVersion,
> +                                   &PackageVersionName
> +                                   );
> +    if (Status != EFI_SUCCESS) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"test case initialization failure.";
> +      BufferImageInfo = ImageInfo;
> +      goto Exit;
> +    }
> +  }
> +  BufferImageInfo = ImageInfo;
> +
> +  if (DescriptorSize == 0) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"*DescriptorSize is 0.";
> +    goto Exit;  // Note the Status = EFI_SUCCESS
> +  }
> +  if ((DescriptorCount * DescriptorSize) > ImageInfoSize) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"((*DescriptorCount) * (*DescriptorSize)) >
> *ImageInfoSize.";
> +    goto Exit;  // Note the Status = EFI_SUCCESS
> +  }
> +
> +  //
> +  // Check the data returned by the function
> +  //
> +
> +  for (i = 0; i < DescriptorCount; i++) {
> +    p = (EFI_FIRMWARE_IMAGE_DESCRIPTOR *) (((UINT8 *) ImageInfo) +
> (i * DescriptorSize));
> +
> +    if ((p->AttributesSupported &
> IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) !=
> IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) {
> +      continue;
> +    }
> +    if ((p->AttributesSetting &
> IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) !=
> IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) {
> +      continue;
> +    }
> +    if (p->Size == 0) {
> +      continue;
> +    }
> +    if ((p->AttributesSupported & IMAGE_ATTRIBUTE_IMAGE_UPDATABLE)
> != IMAGE_ATTRIBUTE_IMAGE_UPDATABLE) {
> +      continue;
> +    }
> +    if ((p->AttributesSetting & IMAGE_ATTRIBUTE_IMAGE_UPDATABLE) !=
> IMAGE_ATTRIBUTE_IMAGE_UPDATABLE) {
> +      continue;
> +    }
> +
> +    // Use a sufficiently large buffer size to avoid
> EFI_BUFFER_TOO_SMALL.
> +    ImageSize = p->Size * 2;
> +    Status = gtBS->AllocatePool (
> +                     EfiBootServicesData,
> +                     ImageSize,
> +                     (VOID **) &Image
> +                     );
> +    if (EFI_ERROR (Status)) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"test case initialization failure.";
> +      goto Exit;
> +    }
> +    BufferImage = Image;
> +
> +    FunctionTested++;
> +
> +    Status = FirmwareManagement->GetImage (
> +                                   FirmwareManagement,
> +                                   p->ImageIndex,
> +                                   Image,
> +                                   &ImageSize
> +                                   );
> +    gtBS->FreePool (BufferImage);
> +    BufferImage = NULL;
> +    Image = NULL;
> +
> +    //
> +    // Report the checkpoint result
> +    //
> +
> +    if (Status != EFI_SECURITY_VIOLATION) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"failed to return
> EFI_SECURITY_VIOLATION.";
> +      goto Exit;
> +    }
> +  }
> +
> +  if (FunctionTested == 0) {
> +    AssertionType = EFI_TEST_ASSERTION_PASSED;
> +    ResultMessageData = L"test skipped - test case does not apply.";
> +  } else {
> +    AssertionType = EFI_TEST_ASSERTION_PASSED;
> +    ResultMessageData = L"correctly returned
> EFI_SECURITY_VIOLATION";
> +  }
> +
> +Exit:
> +  StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 TestGuid,
> +                 ResultMessageLabel,
> +                 L"Result - %s\n%a:%d: Status - %r",
> +                 ResultMessageData,
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );
> +
> +  if (PackageVersionName != NULL) {
> +    gtBS->FreePool (PackageVersionName);
> +  }
> +  if (BufferImageInfo != NULL) {
> +    gtBS->FreePool (BufferImageInfo);
> +  }
> +  if (BufferImage != NULL) {
> +    gtBS->FreePool (BufferImage);
> +  }
> +
> +  return EFI_SUCCESS;
> +}
> +
> +//
> *********************************************************************
> *******
> +//   Checkpoint: SetImage, 1
> +//
> *********************************************************************
> *******
> +
> +/**
> +  This routine:
> +    - Calls function with valid parameters, except Image = NULL.
> +      The function should return EFI_INVALID_PARAMETER.
> +**/
> +
> +EFI_STATUS
> +BBTestSetImageConformanceTestCheckpoint1 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  )
> +{
> +  EFI_STATUS                                     Status;
> +  EFI_TEST_ASSERTION                             AssertionType;
> +  EFI_GUID                                       TestGuid;
> +  CHAR16                                         *ResultMessageLabel
> ;
> +  CHAR16                                         *ResultMessageData;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *BufferImageInfo;
> +
> +  UINTN                                          ImageInfoSize;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *ImageInfo;
> +  UINT32                                         DescriptorVersion;
> +  UINT8                                          DescriptorCount;
> +  UINTN                                          DescriptorSize;
> +  UINT32                                         PackageVersion;
> +  CHAR16                                         *PackageVersionName
> ;
> +
> +  CHAR16                                         *AbortReason;
> +
> +  VOID                                           *Image;
> +  UINTN                                          ImageSize;
> +
> +  UINTN                                          i;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *p;
> +  UINTN                                          FunctionTested;
> +
> +  //
> +  // Init
> +  //
> +
> +  Status = EFI_SUCCESS;
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  TestGuid = gFirmwareManagementBBTestConformanceAssertionGuid007;
> +  ResultMessageLabel = L"SetImage, conformance checkpoint #1";
> +
> +  BufferImageInfo = NULL;
> +  ImageInfo = NULL;
> +  Image = NULL;
> +  PackageVersionName = NULL;
> +  AbortReason = NULL;
> +  FunctionTested = 0;
> +
> +  // Use a sufficiently large buffer to obtain EFI_SUCCESS,
> +  // since some implementation does NOT correctly return
> EFI_BUFFER_TOO_SMALL.
> +  // Check for EFI_BUFFER_TOO_SMALL in another conformance test.
> +
> +  ImageInfoSize = (sizeof (EFI_FIRMWARE_IMAGE_DESCRIPTOR)) * 20;
> +  Status = gtBS->AllocatePool (
> +                   EfiBootServicesData,
> +                   ImageInfoSize,
> +                   (VOID **) &ImageInfo
> +                   );
> +  if (EFI_ERROR (Status)) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"test case initialization failure.";
> +    goto Exit;
> +  }
> +
> +  Status = FirmwareManagement->GetImageInfo (
> +                                 FirmwareManagement,
> +                                 &ImageInfoSize,
> +                                 ImageInfo,
> +                                 &DescriptorVersion,
> +                                 &DescriptorCount,
> +                                 &DescriptorSize,
> +                                 &PackageVersion,
> +                                 &PackageVersionName
> +                                 );
> +  if (Status == EFI_BUFFER_TOO_SMALL) {
> +    gtBS->FreePool (ImageInfo);
> +    Status = gtBS->AllocatePool (
> +                     EfiBootServicesData,
> +                     ImageInfoSize,
> +                     (VOID **) &ImageInfo
> +                     );
> +    if (EFI_ERROR (Status)) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"test case initialization failure.";
> +      goto Exit;
> +    }
> +    Status = FirmwareManagement->GetImageInfo (
> +                                   FirmwareManagement,
> +                                   &ImageInfoSize,
> +                                   ImageInfo,
> +                                   &DescriptorVersion,
> +                                   &DescriptorCount,
> +                                   &DescriptorSize,
> +                                   &PackageVersion,
> +                                   &PackageVersionName
> +                                   );
> +    if (Status != EFI_SUCCESS) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"test case initialization failure.";
> +      BufferImageInfo = ImageInfo;
> +      goto Exit;
> +    }
> +  }
> +  BufferImageInfo = ImageInfo;
> +
> +  if (DescriptorSize == 0) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"*DescriptorSize is 0.";
> +    goto Exit;  // Note the Status = EFI_SUCCESS
> +  }
> +  if ((DescriptorCount * DescriptorSize) > ImageInfoSize) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"((*DescriptorCount) * (*DescriptorSize)) >
> *ImageInfoSize.";
> +    goto Exit;  // Note the Status = EFI_SUCCESS
> +  }
> +
> +  //
> +  // Check the data returned by the function
> +  //
> +
> +  for (i = 0; i < DescriptorCount; i++) {
> +    p = (EFI_FIRMWARE_IMAGE_DESCRIPTOR *) (((UINT8 *) ImageInfo) +
> (i * DescriptorSize));
> +
> +    if (((p->AttributesSupported &
> IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) ==
> +          IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) &&
> +        ((p->AttributesSetting &
> IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) ==
> +          IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED)) {
> +      continue;
> +    }
> +    if (p->Size == 0) {
> +      continue;
> +    }
> +    if ((p->AttributesSupported & IMAGE_ATTRIBUTE_IMAGE_UPDATABLE)
> != IMAGE_ATTRIBUTE_IMAGE_UPDATABLE) {
> +      continue;
> +    }
> +    if ((p->AttributesSetting & IMAGE_ATTRIBUTE_IMAGE_UPDATABLE) !=
> IMAGE_ATTRIBUTE_IMAGE_UPDATABLE) {
> +      continue;
> +    }
> +
> +    ImageSize = p->Size;
> +    Image = NULL;
> +    FunctionTested++;
> +    Status = FirmwareManagement->SetImage (
> +                                   FirmwareManagement,
> +                                   p->ImageIndex,
> +                                   Image,
> +                                   ImageSize,
> +                                   NULL,  // VendorCode
> +                                   Progress,
> +                                   &AbortReason
> +                                   );
> +
> +    //
> +    // Report the checkpoint result
> +    //
> +
> +    if (Status != EFI_INVALID_PARAMETER) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"failed to return
> EFI_INVALID_PARAMETER.";
> +      goto Exit;
> +    }
> +  }
> +
> +  if (FunctionTested == 0) {
> +    AssertionType = EFI_TEST_ASSERTION_PASSED;
> +    ResultMessageData = L"test skipped - test case does not apply.";
> +  } else {
> +    AssertionType = EFI_TEST_ASSERTION_PASSED;
> +    ResultMessageData = L"correctly returned
> EFI_INVALID_PARAMETER.";
> +  }
> +
> +Exit:
> +  StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 TestGuid,
> +                 ResultMessageLabel,
> +                 L"Result - %s\n%a:%d: Status - %r",
> +                 ResultMessageData,
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );
> +
> +  if (PackageVersionName != NULL) {
> +    gtBS->FreePool (PackageVersionName);
> +  }
> +  if (BufferImageInfo != NULL) {
> +    gtBS->FreePool (BufferImageInfo);
> +  }
> +  if (AbortReason != NULL) {
> +    gtBS->FreePool (AbortReason);
> +  }
> +
> +  return EFI_SUCCESS;
> +}
> +
> +//
> *********************************************************************
> *******
> +//   Checkpoint: SetImage, 2
> +//
> *********************************************************************
> *******
> +
> +/**
> +  This routine:
> +    - Calls function with valid parameters, except Image is a dummy
> image.
> +      The function should return EFI_INVALID_PARAMETER or
> EFI_ABORTED.
> +**/
> +
> +EFI_STATUS
> +BBTestSetImageConformanceTestCheckpoint2 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  )
> +{
> +  EFI_STATUS                                     Status;
> +  EFI_TEST_ASSERTION                             AssertionType;
> +  EFI_GUID                                       TestGuid;
> +  CHAR16                                         *ResultMessageLabel
> ;
> +  CHAR16                                         *ResultMessageData;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *BufferImageInfo;
> +  VOID                                           *BufferImage;
> +
> +  UINTN                                          ImageInfoSize;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *ImageInfo;
> +  UINT32                                         DescriptorVersion;
> +  UINT8                                          DescriptorCount;
> +  UINTN                                          DescriptorSize;
> +  UINT32                                         PackageVersion;
> +  CHAR16                                         *PackageVersionName
> ;
> +
> +  CHAR16                                         *AbortReason;
> +
> +  VOID                                           *Image;
> +  UINTN                                          ImageSize;
> +
> +  UINTN                                          i;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *p;
> +  UINTN                                          FunctionTested;
> +
> +  //
> +  // Init
> +  //
> +
> +  Status = EFI_SUCCESS;
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  TestGuid = gFirmwareManagementBBTestConformanceAssertionGuid008;
> +  ResultMessageLabel = L"SetImage, conformance checkpoint #2";
> +
> +  BufferImageInfo = NULL;
> +  BufferImage = NULL;
> +  ImageInfo = NULL;
> +  Image = NULL;
> +  PackageVersionName = NULL;
> +  AbortReason = NULL;
> +  FunctionTested = 0;
> +
> +  // Use a sufficiently large buffer to obtain EFI_SUCCESS,
> +  // since some implementation does NOT correctly return
> EFI_BUFFER_TOO_SMALL.
> +  // Check for EFI_BUFFER_TOO_SMALL in another conformance test.
> +
> +  ImageInfoSize = (sizeof (EFI_FIRMWARE_IMAGE_DESCRIPTOR)) * 20;
> +  Status = gtBS->AllocatePool (
> +                   EfiBootServicesData,
> +                   ImageInfoSize,
> +                   (VOID **) &ImageInfo
> +                   );
> +  if (EFI_ERROR (Status)) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"test case initialization failure.";
> +    goto Exit;
> +  }
> +
> +  Status = FirmwareManagement->GetImageInfo (
> +                                 FirmwareManagement,
> +                                 &ImageInfoSize,
> +                                 ImageInfo,
> +                                 &DescriptorVersion,
> +                                 &DescriptorCount,
> +                                 &DescriptorSize,
> +                                 &PackageVersion,
> +                                 &PackageVersionName
> +                                 );
> +  if (Status == EFI_BUFFER_TOO_SMALL) {
> +    gtBS->FreePool (ImageInfo);
> +    Status = gtBS->AllocatePool (
> +                     EfiBootServicesData,
> +                     ImageInfoSize,
> +                     (VOID **) &ImageInfo
> +                     );
> +    if (EFI_ERROR (Status)) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"test case initialization failure.";
> +      goto Exit;
> +    }
> +    Status = FirmwareManagement->GetImageInfo (
> +                                   FirmwareManagement,
> +                                   &ImageInfoSize,
> +                                   ImageInfo,
> +                                   &DescriptorVersion,
> +                                   &DescriptorCount,
> +                                   &DescriptorSize,
> +                                   &PackageVersion,
> +                                   &PackageVersionName
> +                                   );
> +    if (Status != EFI_SUCCESS) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"test case initialization failure.";
> +      BufferImageInfo = ImageInfo;
> +      goto Exit;
> +    }
> +  }
> +  BufferImageInfo = ImageInfo;
> +
> +  if (DescriptorSize == 0) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"*DescriptorSize is 0.";
> +    goto Exit;  // Note the Status = EFI_SUCCESS
> +  }
> +  if ((DescriptorCount * DescriptorSize) > ImageInfoSize) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"((*DescriptorCount) * (*DescriptorSize)) >
> *ImageInfoSize.";
> +    goto Exit;  // Note the Status = EFI_SUCCESS
> +  }
> +
> +  //
> +  // Check the data returned by the function
> +  //
> +
> +  for (i = 0; i < DescriptorCount; i++) {
> +    p = (EFI_FIRMWARE_IMAGE_DESCRIPTOR *) (((UINT8 *) ImageInfo) +
> (i * DescriptorSize));
> +
> +    if (((p->AttributesSupported &
> IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) ==
> +          IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) &&
> +        ((p->AttributesSetting &
> IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) ==
> +          IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED)) {
> +      continue;
> +    }
> +    if (p->Size == 0) {
> +      continue;
> +    }
> +    if ((p->AttributesSupported & IMAGE_ATTRIBUTE_IMAGE_UPDATABLE)
> != IMAGE_ATTRIBUTE_IMAGE_UPDATABLE) {
> +      continue;
> +    }
> +    if ((p->AttributesSetting & IMAGE_ATTRIBUTE_IMAGE_UPDATABLE) !=
> IMAGE_ATTRIBUTE_IMAGE_UPDATABLE) {
> +      continue;
> +    }
> +
> +    ImageSize = p->Size;
> +    Status = gtBS->AllocatePool (
> +                     EfiBootServicesData,
> +                     ImageSize,
> +                     (VOID **) &Image
> +                     );
> +    if (EFI_ERROR (Status)) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"test case initialization failure.";
> +      goto Exit;
> +    }
> +    BufferImage = Image;
> +    FunctionTested++;
> +    Status = FirmwareManagement->SetImage (
> +                                   FirmwareManagement,
> +                                   p->ImageIndex,
> +                                   Image,
> +                                   ImageSize,
> +                                   NULL,  // VendorCode
> +                                   Progress,
> +                                   &AbortReason
> +                                   );
> +    gtBS->FreePool (BufferImage);
> +    BufferImage = NULL;
> +    Image = NULL;
> +
> +    //
> +    // Report the checkpoint result
> +    //
> +
> +    if ((Status != EFI_INVALID_PARAMETER) && (Status !=
> EFI_ABORTED)) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"failed to return EFI_INVALID_PARAMETER
> or EFI_ABORTED.";
> +      goto Exit;
> +    }
> +  }
> +
> +  if (FunctionTested == 0) {
> +    AssertionType = EFI_TEST_ASSERTION_PASSED;
> +    ResultMessageData = L"test skipped - test case does not apply.";
> +  } else {
> +    AssertionType = EFI_TEST_ASSERTION_PASSED;
> +    ResultMessageData = L"correctly returned EFI_INVALID_PARAMETER
> or EFI_ABORTED.";
> +  }
> +
> +Exit:
> +  StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 TestGuid,
> +                 ResultMessageLabel,
> +                 L"Result - %s\n%a:%d: Status - %r",
> +                 ResultMessageData,
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );
> +
> +  if (PackageVersionName != NULL) {
> +    gtBS->FreePool (PackageVersionName);
> +  }
> +  if (BufferImageInfo != NULL) {
> +    gtBS->FreePool (BufferImageInfo);
> +  }
> +  if (BufferImage != NULL) {
> +    gtBS->FreePool (BufferImage);
> +  }
> +  if (AbortReason != NULL) {
> +    gtBS->FreePool (AbortReason);
> +  }
> +
> +  return EFI_SUCCESS;
> +}
> +
> +//
> *********************************************************************
> *******
> +//   Checkpoint: SetImage, 3
> +//
> *********************************************************************
> *******
> +
> +/**
> +  This routine:
> +    - Calls function with valid parameters, except ImageIndex = 0 or
> +      ImageIndex = DescriptorCount + 1.
> +      The function should return EFI_INVALID_PARAMETER or
> EFI_ABORTED.
> +**/
> +
> +EFI_STATUS
> +BBTestSetImageConformanceTestCheckpoint3 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  )
> +{
> +  EFI_STATUS                                     Status;
> +  EFI_TEST_ASSERTION                             AssertionType;
> +  EFI_GUID                                       TestGuid;
> +  CHAR16                                         *ResultMessageLabel
> ;
> +  CHAR16                                         *ResultMessageData;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *BufferImageInfo;
> +  VOID                                           *BufferImage;
> +
> +  UINTN                                          ImageInfoSize;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *ImageInfo;
> +  UINT32                                         DescriptorVersion;
> +  UINT8                                          DescriptorCount;
> +  UINTN                                          DescriptorSize;
> +  UINT32                                         PackageVersion;
> +  CHAR16                                         *PackageVersionName
> ;
> +
> +  CHAR16                                         *AbortReason;
> +
> +  VOID                                           *Image;
> +  UINTN                                          ImageSize;
> +  UINT8                                          ImageIndex;
> +
> +  //
> +  // Init
> +  //
> +
> +  Status = EFI_SUCCESS;
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  TestGuid = gFirmwareManagementBBTestConformanceAssertionGuid009;
> +  ResultMessageLabel = L"SetImage, conformance checkpoint #3";
> +
> +  BufferImageInfo = NULL;
> +  BufferImage=NULL;
> +  ImageInfo = NULL;
> +  Image = NULL;
> +  PackageVersionName = NULL;
> +  AbortReason = NULL;
> +
> +  // Use a sufficiently large buffer to obtain EFI_SUCCESS,
> +  // since some implementation does NOT correctly return
> EFI_BUFFER_TOO_SMALL.
> +  // Check for EFI_BUFFER_TOO_SMALL in another conformance test.
> +
> +  ImageInfoSize = (sizeof (EFI_FIRMWARE_IMAGE_DESCRIPTOR)) * 20;
> +  Status = gtBS->AllocatePool (
> +                   EfiBootServicesData,
> +                   ImageInfoSize,
> +                   (VOID **) &ImageInfo
> +                   );
> +  if (EFI_ERROR (Status)) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"test case initialization failure.";
> +    goto Exit;
> +  }
> +
> +  Status = FirmwareManagement->GetImageInfo (
> +                                 FirmwareManagement,
> +                                 &ImageInfoSize,
> +                                 ImageInfo,
> +                                 &DescriptorVersion,
> +                                 &DescriptorCount,
> +                                 &DescriptorSize,
> +                                 &PackageVersion,
> +                                 &PackageVersionName
> +                                 );
> +  if (Status == EFI_BUFFER_TOO_SMALL) {
> +    gtBS->FreePool (ImageInfo);
> +    Status = gtBS->AllocatePool (
> +                     EfiBootServicesData,
> +                     ImageInfoSize,
> +                     (VOID **) &ImageInfo
> +                     );
> +    if (EFI_ERROR (Status)) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"test case initialization failure.";
> +      goto Exit;
> +    }
> +    Status = FirmwareManagement->GetImageInfo (
> +                                   FirmwareManagement,
> +                                   &ImageInfoSize,
> +                                   ImageInfo,
> +                                   &DescriptorVersion,
> +                                   &DescriptorCount,
> +                                   &DescriptorSize,
> +                                   &PackageVersion,
> +                                   &PackageVersionName
> +                                   );
> +    if (Status != EFI_SUCCESS) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"test case initialization failure.";
> +      BufferImageInfo = ImageInfo;
> +      goto Exit;
> +    }
> +  }
> +  BufferImageInfo = ImageInfo;
> +
> +  if (DescriptorSize == 0) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"*DescriptorSize is 0.";
> +    goto Exit;  // Note the Status = EFI_SUCCESS
> +  }
> +  if ((DescriptorCount * DescriptorSize) > ImageInfoSize) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"((*DescriptorCount) * (*DescriptorSize)) >
> *ImageInfoSize.";
> +    goto Exit;  // Note the Status = EFI_SUCCESS
> +  }
> +
> +  //
> +  // Check the data returned by the function
> +  //
> +
> +  // Dummy image so as to fail on Image = NULL
> +  // Any size since the function should check for index before size
> +  ImageSize = 64;
> +  Status = gtBS->AllocatePool (
> +                   EfiBootServicesData,
> +                   ImageSize,
> +                   (VOID **) &Image
> +                   );
> +  if (EFI_ERROR (Status)) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"test case initialization failure.";
> +    goto Exit;
> +  }
> +  BufferImage = Image;
> +
> +  AssertionType = EFI_TEST_ASSERTION_FAILED;
> +  ResultMessageData = L"failed to return EFI_INVALID_PARAMETER or
> EFI_ABORTED.";
> +
> +  ImageIndex = 0;
> +  Status = FirmwareManagement->SetImage (
> +                                 FirmwareManagement,
> +                                 ImageIndex,
> +                                 Image,
> +                                 ImageSize,
> +                                 NULL,  // VendorCode
> +                                 Progress,
> +                                 &AbortReason
> +                                 );
> +  if ((Status != EFI_INVALID_PARAMETER) && (Status != EFI_ABORTED))
> {
> +    goto Exit;
> +  }
> +
> +  if ((DescriptorCount + 1) != 0) {
> +    ImageIndex = DescriptorCount + 1;
> +    Status = FirmwareManagement->SetImage (
> +                                   FirmwareManagement,
> +                                   ImageIndex,
> +                                   Image,
> +                                   ImageSize,
> +                                   NULL,  // Vendorcode
> +                                   Progress,
> +                                   &AbortReason
> +                                   );
> +    if ((Status != EFI_INVALID_PARAMETER) && (Status !=
> EFI_ABORTED)) {
> +      goto Exit;
> +    }
> +  }
> +
> +  //
> +  // Report the checkpoint result
> +  //
> +
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  ResultMessageData = L"correctly returned EFI_INVALID_PARAMETER or
> EFI_ABORTED.";
> +
> +Exit:
> +  StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 TestGuid,
> +                 ResultMessageLabel,
> +                 L"Result - %s\n%a:%d: Status - %r",
> +                 ResultMessageData,
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );
> +
> +  if (PackageVersionName != NULL) {
> +    gtBS->FreePool (PackageVersionName);
> +  }
> +  if (BufferImageInfo != NULL) {
> +    gtBS->FreePool (BufferImageInfo);
> +  }
> +  if (BufferImage != NULL) {
> +      gtBS->FreePool (BufferImage);
> +  }
> +  if (AbortReason != NULL) {
> +    gtBS->FreePool (AbortReason);
> +  }
> +
> +  return EFI_SUCCESS;
> +}
> +
> +//
> *********************************************************************
> *******
> +//   Checkpoint: SetImage, 4
> +//
> *********************************************************************
> *******
> +
> +/**
> +  This routine:
> +    - The function requires authentication.
> +    - Calls function with valid parameters, except Image has dummy
> +      authentication data.
> +      The function should return EFI_SECURITY_VIOLATION.
> +**/
> +
> +EFI_STATUS
> +BBTestSetImageConformanceTestCheckpoint4 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  )
> +{
> +  EFI_STATUS                                     Status;
> +  EFI_TEST_ASSERTION                             AssertionType;
> +  EFI_GUID                                       TestGuid;
> +  CHAR16                                         *ResultMessageLabel
> ;
> +  CHAR16                                         *ResultMessageData;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *BufferImageInfo;
> +  VOID                                           *BufferImage;
> +
> +  UINTN                                          ImageInfoSize;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *ImageInfo;
> +  UINT32                                         DescriptorVersion;
> +  UINT8                                          DescriptorCount;
> +  UINTN                                          DescriptorSize;
> +  UINT32                                         PackageVersion;
> +  CHAR16                                         *PackageVersionName
> ;
> +
> +  CHAR16                                         *AbortReason;
> +
> +  VOID                                           *Image;
> +  UINTN                                          ImageSize;
> +
> +  UINTN                                          i;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *p;
> +  UINTN                                          FunctionTested;
> +
> +  //
> +  // Init
> +  //
> +
> +  Status = EFI_SUCCESS;
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  TestGuid = gFirmwareManagementBBTestConformanceAssertionGuid010;
> +  ResultMessageLabel = L"SetImage, conformance checkpoint #4";
> +
> +  BufferImageInfo = NULL;
> +  BufferImage = NULL;
> +  ImageInfo = NULL;
> +  Image = NULL;
> +  PackageVersionName = NULL;
> +  AbortReason = NULL;
> +  FunctionTested = 0;
> +
> +  // Use a sufficiently large buffer to obtain EFI_SUCCESS,
> +  // since some implementation does NOT correctly return
> EFI_BUFFER_TOO_SMALL.
> +  // Check for EFI_BUFFER_TOO_SMALL in another conformance test.
> +
> +  ImageInfoSize = (sizeof (EFI_FIRMWARE_IMAGE_DESCRIPTOR)) * 20;
> +  Status = gtBS->AllocatePool (
> +                   EfiBootServicesData,
> +                   ImageInfoSize,
> +                   (VOID **) &ImageInfo
> +                   );
> +  if (EFI_ERROR (Status)) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"test case initialization failure.";
> +    goto Exit;
> +  }
> +
> +  Status = FirmwareManagement->GetImageInfo (
> +                                 FirmwareManagement,
> +                                 &ImageInfoSize,
> +                                 ImageInfo,
> +                                 &DescriptorVersion,
> +                                 &DescriptorCount,
> +                                 &DescriptorSize,
> +                                 &PackageVersion,
> +                                 &PackageVersionName
> +                                 );
> +  if (Status == EFI_BUFFER_TOO_SMALL) {
> +    gtBS->FreePool (ImageInfo);
> +    Status = gtBS->AllocatePool (
> +                     EfiBootServicesData,
> +                     ImageInfoSize,
> +                     (VOID **) &ImageInfo
> +                     );
> +    if (EFI_ERROR (Status)) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"test case initialization failure.";
> +      goto Exit;
> +    }
> +    Status = FirmwareManagement->GetImageInfo (
> +                                   FirmwareManagement,
> +                                   &ImageInfoSize,
> +                                   ImageInfo,
> +                                   &DescriptorVersion,
> +                                   &DescriptorCount,
> +                                   &DescriptorSize,
> +                                   &PackageVersion,
> +                                   &PackageVersionName
> +                                   );
> +    if (Status != EFI_SUCCESS) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"test case initialization failure.";
> +      BufferImageInfo = ImageInfo;
> +      goto Exit;
> +    }
> +  }
> +  BufferImageInfo = ImageInfo;
> +
> +  if (DescriptorSize == 0) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"*DescriptorSize is 0.";
> +    goto Exit;  // Note the Status = EFI_SUCCESS
> +  }
> +  if ((DescriptorCount * DescriptorSize) > ImageInfoSize) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"((*DescriptorCount) * (*DescriptorSize)) >
> *ImageInfoSize.";
> +    goto Exit;  // Note the Status = EFI_SUCCESS
> +  }
> +
> +  //
> +  // Check the data returned by the function
> +  //
> +
> +  for (i = 0; i < DescriptorCount; i++) {
> +    p = (EFI_FIRMWARE_IMAGE_DESCRIPTOR *) (((UINT8 *) ImageInfo) +
> (i * DescriptorSize));
> +
> +    if ((p->AttributesSupported &
> IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) !=
> IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) {
> +      continue;
> +    }
> +    if ((p->AttributesSetting &
> IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) !=
> IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) {
> +      continue;
> +    }
> +    if (p->Size == 0) {
> +      continue;
> +    }
> +    if ((p->AttributesSupported & IMAGE_ATTRIBUTE_IMAGE_UPDATABLE)
> != IMAGE_ATTRIBUTE_IMAGE_UPDATABLE) {
> +      continue;
> +    }
> +    if ((p->AttributesSetting & IMAGE_ATTRIBUTE_IMAGE_UPDATABLE) !=
> IMAGE_ATTRIBUTE_IMAGE_UPDATABLE) {
> +      continue;
> +    }
> +
> +    ImageSize = p->Size;
> +    Status = gtBS->AllocatePool (
> +                     EfiBootServicesData,
> +                     ImageSize,
> +                     (VOID **) &Image
> +                     );
> +    if (EFI_ERROR (Status)) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"test case initialization failure.";
> +      goto Exit;
> +    }
> +    BufferImage = Image;
> +    FunctionTested++;
> +    Status = FirmwareManagement->SetImage (
> +                                   FirmwareManagement,
> +                                   p->ImageIndex,
> +                                   Image,
> +                                   ImageSize,
> +                                   NULL,  // VendorCode
> +                                   Progress,
> +                                   &AbortReason
> +                                   );
> +    gtBS->FreePool (BufferImage);
> +    BufferImage = NULL;
> +    Image = NULL;
> +
> +    //
> +    // Report the checkpoint result
> +    //
> +
> +    if (Status != EFI_SECURITY_VIOLATION) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"failed to return
> EFI_SECURITY_VIOLATION.";
> +      goto Exit;
> +    }
> +  }
> +
> +  if (FunctionTested == 0) {
> +    AssertionType = EFI_TEST_ASSERTION_PASSED;
> +    ResultMessageData = L"test skipped - test case does not apply.";
> +  } else {
> +    AssertionType = EFI_TEST_ASSERTION_PASSED;
> +    ResultMessageData = L"correctly returned
> EFI_SECURITY_VIOLATION";
> +  }
> +
> +Exit:
> +  StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 TestGuid,
> +                 ResultMessageLabel,
> +                 L"Result - %s\n%a:%d: Status - %r",
> +                 ResultMessageData,
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );
> +
> +  if (PackageVersionName != NULL) {
> +    gtBS->FreePool (PackageVersionName);
> +  }
> +  if (BufferImageInfo != NULL) {
> +    gtBS->FreePool (BufferImageInfo);
> +  }
> +  if (BufferImage != NULL) {
> +    gtBS->FreePool (BufferImage);
> +  }
> +  if (AbortReason != NULL) {
> +    gtBS->FreePool (AbortReason);
> +  }
> +
> +  return EFI_SUCCESS;
> +}
> +
> +//
> *********************************************************************
> *******
> +//   Checkpoint: CheckImage, 1
> +//
> *********************************************************************
> *******
> +
> +/**
> +  This routine:
> +    - Calls function with valid parameters, except Image = NULL.
> +      The function should return EFI_INVALID_PARAMETER.
> +**/
> +
> +EFI_STATUS
> +BBTestCheckImageConformanceTestCheckpoint1 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  )
> +{
> +  EFI_STATUS                                     Status;
> +  EFI_TEST_ASSERTION                             AssertionType;
> +  EFI_GUID                                       TestGuid;
> +  CHAR16                                         *ResultMessageLabel
> ;
> +  CHAR16                                         *ResultMessageData;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *BufferImageInfo;
> +
> +  UINTN                                          ImageInfoSize;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *ImageInfo;
> +  UINT32                                         DescriptorVersion;
> +  UINT8                                          DescriptorCount;
> +  UINTN                                          DescriptorSize;
> +  UINT32                                         PackageVersion;
> +  CHAR16                                         *PackageVersionName
> ;
> +
> +  UINT32                                         ImageUpdatable;
> +
> +  VOID                                           *Image;
> +  UINTN                                          ImageSize;
> +
> +  UINTN                                          i;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *p;
> +  UINTN                                          FunctionTested;
> +
> +  //
> +  // Init
> +  //
> +
> +  Status = EFI_SUCCESS;
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  TestGuid = gFirmwareManagementBBTestConformanceAssertionGuid011;
> +  ResultMessageLabel = L"CheckImage, conformance checkpoint #1";
> +
> +  BufferImageInfo = NULL;
> +  ImageInfo = NULL;
> +  Image = NULL;
> +  PackageVersionName = NULL;
> +  FunctionTested = 0;
> +
> +  // Use a sufficiently large buffer to obtain EFI_SUCCESS,
> +  // since some implementation does NOT correctly return
> EFI_BUFFER_TOO_SMALL.
> +  // Check for EFI_BUFFER_TOO_SMALL in another conformance test.
> +
> +  ImageInfoSize = (sizeof (EFI_FIRMWARE_IMAGE_DESCRIPTOR)) * 20;
> +  Status = gtBS->AllocatePool (
> +                   EfiBootServicesData,
> +                   ImageInfoSize,
> +                   (VOID **) &ImageInfo
> +                   );
> +  if (EFI_ERROR (Status)) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"test case initialization failure.";
> +    goto Exit;
> +  }
> +
> +  Status = FirmwareManagement->GetImageInfo (
> +                                 FirmwareManagement,
> +                                 &ImageInfoSize,
> +                                 ImageInfo,
> +                                 &DescriptorVersion,
> +                                 &DescriptorCount,
> +                                 &DescriptorSize,
> +                                 &PackageVersion,
> +                                 &PackageVersionName
> +                                 );
> +  if (Status == EFI_BUFFER_TOO_SMALL) {
> +    gtBS->FreePool (ImageInfo);
> +    Status = gtBS->AllocatePool (
> +                     EfiBootServicesData,
> +                     ImageInfoSize,
> +                     (VOID **) &ImageInfo
> +                     );
> +    if (EFI_ERROR (Status)) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"test case initialization failure.";
> +      goto Exit;
> +    }
> +    Status = FirmwareManagement->GetImageInfo (
> +                                   FirmwareManagement,
> +                                   &ImageInfoSize,
> +                                   ImageInfo,
> +                                   &DescriptorVersion,
> +                                   &DescriptorCount,
> +                                   &DescriptorSize,
> +                                   &PackageVersion,
> +                                   &PackageVersionName
> +                                   );
> +    if (Status != EFI_SUCCESS) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"test case initialization failure.";
> +      BufferImageInfo = ImageInfo;
> +      goto Exit;
> +    }
> +  }
> +  BufferImageInfo = ImageInfo;
> +
> +  if (DescriptorSize == 0) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"*DescriptorSize is 0.";
> +    goto Exit;  // Note the Status = EFI_SUCCESS
> +  }
> +  if ((DescriptorCount * DescriptorSize) > ImageInfoSize) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"((*DescriptorCount) * (*DescriptorSize)) >
> *ImageInfoSize.";
> +    goto Exit;  // Note the Status = EFI_SUCCESS
> +  }
> +
> +  //
> +  // Check the data returned by the function
> +  //
> +
> +  for (i = 0; i < DescriptorCount; i++) {
> +    p = (EFI_FIRMWARE_IMAGE_DESCRIPTOR *) (((UINT8 *) ImageInfo) +
> (i * DescriptorSize));
> +
> +    if (((p->AttributesSupported &
> IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) ==
> +          IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) &&
> +        ((p->AttributesSetting &
> IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) ==
> +          IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED)) {
> +      continue;
> +    }
> +    if (p->Size == 0) {
> +      continue;
> +    }
> +    if ((p->AttributesSupported & IMAGE_ATTRIBUTE_IMAGE_UPDATABLE)
> != IMAGE_ATTRIBUTE_IMAGE_UPDATABLE) {
> +      continue;
> +    }
> +    if ((p->AttributesSetting & IMAGE_ATTRIBUTE_IMAGE_UPDATABLE) !=
> IMAGE_ATTRIBUTE_IMAGE_UPDATABLE) {
> +      continue;
> +    }
> +
> +    ImageSize = p->Size;
> +    Image = NULL;
> +    FunctionTested++;
> +    Status = FirmwareManagement->CheckImage (
> +                                   FirmwareManagement,
> +                                   p->ImageIndex,
> +                                   Image,
> +                                   ImageSize,
> +                                   &ImageUpdatable
> +                                   );
> +
> +    //
> +    // Report the checkpoint result
> +    //
> +
> +    if (Status != EFI_INVALID_PARAMETER) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"failed to return
> EFI_INVALID_PARAMETER.";
> +      goto Exit;
> +    }
> +  }
> +
> +  if (FunctionTested == 0) {
> +    AssertionType = EFI_TEST_ASSERTION_PASSED;
> +    ResultMessageData = L"test skipped - test case does not apply.";
> +  } else {
> +    AssertionType = EFI_TEST_ASSERTION_PASSED;
> +    ResultMessageData = L"correctly returned
> EFI_INVALID_PARAMETER.";
> +  }
> +
> +Exit:
> +  StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 TestGuid,
> +                 ResultMessageLabel,
> +                 L"Result - %s\n%a:%d: Status - %r",
> +                 ResultMessageData,
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );
> +
> +  if (PackageVersionName != NULL) {
> +    gtBS->FreePool (PackageVersionName);
> +  }
> +  if (BufferImageInfo != NULL) {
> +    gtBS->FreePool (BufferImageInfo);
> +  }
> +
> +  return EFI_SUCCESS;
> +}
> +
> +//
> *********************************************************************
> *******
> +//   Checkpoint: CheckImage, 2
> +//
> *********************************************************************
> *******
> +
> +/**
> +  This routine:
> +    - The function requires authentication.
> +    - Calls function with valid parameters, except Image has dummy
> +      authentication data.
> +      The function should return EFI_SECURITY_VIOLATION.
> +**/
> +
> +EFI_STATUS
> +BBTestCheckImageConformanceTestCheckpoint2 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  )
> +{
> +  EFI_STATUS                                     Status;
> +  EFI_TEST_ASSERTION                             AssertionType;
> +  EFI_GUID                                       TestGuid;
> +  CHAR16                                         *ResultMessageLabel
> ;
> +  CHAR16                                         *ResultMessageData;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *BufferImageInfo;
> +  VOID                                           *BufferImage;
> +
> +  UINTN                                          ImageInfoSize;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *ImageInfo;
> +  UINT32                                         DescriptorVersion;
> +  UINT8                                          DescriptorCount;
> +  UINTN                                          DescriptorSize;
> +  UINT32                                         PackageVersion;
> +  CHAR16                                         *PackageVersionName
> ;
> +
> +  UINT32                                         ImageUpdatable;
> +
> +  VOID                                           *Image;
> +  UINTN                                          ImageSize;
> +
> +  UINTN                                          i;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *p;
> +  UINTN                                          FunctionTested;
> +
> +  //
> +  // Init
> +  //
> +
> +  Status = EFI_SUCCESS;
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  TestGuid = gFirmwareManagementBBTestConformanceAssertionGuid012;
> +  ResultMessageLabel = L"CheckImage, conformance checkpoint #2";
> +
> +  BufferImageInfo = NULL;
> +  BufferImage = NULL;
> +  ImageInfo = NULL;
> +  Image = NULL;
> +  PackageVersionName = NULL;
> +  FunctionTested = 0;
> +
> +  // Use a sufficiently large buffer to obtain EFI_SUCCESS,
> +  // since some implementation does NOT correctly return
> EFI_BUFFER_TOO_SMALL.
> +  // Check for EFI_BUFFER_TOO_SMALL in another conformance test.
> +
> +  ImageInfoSize = (sizeof (EFI_FIRMWARE_IMAGE_DESCRIPTOR)) * 20;
> +  Status = gtBS->AllocatePool (
> +                   EfiBootServicesData,
> +                   ImageInfoSize,
> +                   (VOID **) &ImageInfo
> +                   );
> +  if (EFI_ERROR (Status)) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"test case initialization failure.";
> +    goto Exit;
> +  }
> +
> +  Status = FirmwareManagement->GetImageInfo (
> +                                 FirmwareManagement,
> +                                 &ImageInfoSize,
> +                                 ImageInfo,
> +                                 &DescriptorVersion,
> +                                 &DescriptorCount,
> +                                 &DescriptorSize,
> +                                 &PackageVersion,
> +                                 &PackageVersionName
> +                                 );
> +  if (Status == EFI_BUFFER_TOO_SMALL) {
> +    gtBS->FreePool (ImageInfo);
> +    Status = gtBS->AllocatePool (
> +                     EfiBootServicesData,
> +                     ImageInfoSize,
> +                     (VOID **) &ImageInfo
> +                     );
> +    if (EFI_ERROR (Status)) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"test case initialization failure.";
> +      goto Exit;
> +    }
> +    Status = FirmwareManagement->GetImageInfo (
> +                                   FirmwareManagement,
> +                                   &ImageInfoSize,
> +                                   ImageInfo,
> +                                   &DescriptorVersion,
> +                                   &DescriptorCount,
> +                                   &DescriptorSize,
> +                                   &PackageVersion,
> +                                   &PackageVersionName
> +                                   );
> +    if (Status != EFI_SUCCESS) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"test case initialization failure.";
> +      BufferImageInfo = ImageInfo;
> +      goto Exit;
> +    }
> +  }
> +  BufferImageInfo = ImageInfo;
> +
> +  if (DescriptorSize == 0) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"*DescriptorSize is 0.";
> +    goto Exit;  // Note the Status = EFI_SUCCESS
> +  }
> +  if ((DescriptorCount * DescriptorSize) > ImageInfoSize) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"((*DescriptorCount) * (*DescriptorSize)) >
> *ImageInfoSize.";
> +    goto Exit;  // Note the Status = EFI_SUCCESS
> +  }
> +
> +  //
> +  // Check the data returned by the function
> +  //
> +
> +  for (i = 0; i < DescriptorCount; i++) {
> +    p = (EFI_FIRMWARE_IMAGE_DESCRIPTOR *) (((UINT8 *) ImageInfo) +
> (i * DescriptorSize));
> +
> +    if ((p->AttributesSupported &
> IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) !=
> IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) {
> +      continue;
> +    }
> +    if ((p->AttributesSetting &
> IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) !=
> IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) {
> +      continue;
> +    }
> +    if (p->Size == 0) {
> +      continue;
> +    }
> +    if ((p->AttributesSupported & IMAGE_ATTRIBUTE_IMAGE_UPDATABLE)
> != IMAGE_ATTRIBUTE_IMAGE_UPDATABLE) {
> +      continue;
> +    }
> +    if ((p->AttributesSetting & IMAGE_ATTRIBUTE_IMAGE_UPDATABLE) !=
> IMAGE_ATTRIBUTE_IMAGE_UPDATABLE) {
> +      continue;
> +    }
> +
> +    ImageSize = p->Size;
> +    Status = gtBS->AllocatePool (
> +                     EfiBootServicesData,
> +                     ImageSize,
> +                     (VOID **) &Image
> +                     );
> +    if (EFI_ERROR (Status)) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"test case initialization failure.";
> +      goto Exit;
> +    }
> +    BufferImage = Image;
> +    FunctionTested++;
> +    Status = FirmwareManagement->CheckImage (
> +                                   FirmwareManagement,
> +                                   p->ImageIndex,
> +                                   Image,
> +                                   ImageSize,
> +                                   &ImageUpdatable
> +                                   );
> +    gtBS->FreePool (BufferImage);
> +    BufferImage = NULL;
> +    Image = NULL;
> +
> +    //
> +    // Report the checkpoint result
> +    //
> +
> +    if (Status != EFI_SECURITY_VIOLATION) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"failed to return
> EFI_SECURITY_VIOLATION.";
> +      goto Exit;
> +    }
> +  }
> +
> +  if (FunctionTested == 0) {
> +    AssertionType = EFI_TEST_ASSERTION_PASSED;
> +    ResultMessageData = L"test skipped - test case does not apply.";
> +  } else {
> +    AssertionType = EFI_TEST_ASSERTION_PASSED;
> +    ResultMessageData = L"correctly returned
> EFI_SECURITY_VIOLATION";
> +  }
> +
> +Exit:
> +  StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 TestGuid,
> +                 ResultMessageLabel,
> +                 L"Result - %s\n%a:%d: Status - %r",
> +                 ResultMessageData,
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );
> +
> +  if (PackageVersionName != NULL) {
> +    gtBS->FreePool (PackageVersionName);
> +  }
> +  if (BufferImageInfo != NULL) {
> +    gtBS->FreePool (BufferImageInfo);
> +  }
> +  if (BufferImage != NULL) {
> +    gtBS->FreePool (BufferImage);
> +  }
> +
> +  return EFI_SUCCESS;
> +}
> +
> +//
> *********************************************************************
> *******
> +//   Checkpoint: SetPackageInfo, 1
> +//
> *********************************************************************
> *******
> +
> +/**
> +  This routine:
> +    - Gets PackageVersionNameMaxLen.
> +    - Calls function with valid parameters, except
> PackageVersionName is longer
> +      than the value returned in PackageVersionNameLen.
> +      The function should return EFI_INVALID_PARAMETER.
> +**/
> +
> +EFI_STATUS
> +BBTestSetPackageInfoConformanceTestCheckpoint1 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  )
> +{
> +  EFI_STATUS                                     Status;
> +  EFI_TEST_ASSERTION                             AssertionType;
> +  EFI_GUID                                       TestGuid;
> +  CHAR16                                         *ResultMessageLabel
> ;
> +  CHAR16                                         *ResultMessageData;
> +
> +  UINT32                                         PackageVersion;
> +  CHAR16                                         *PackageVersionName
> ;
> +  UINT32                                         PackageVersionNameM
> axLen;
> +  UINT64                                         AttributesSupported
> ;
> +  UINT64                                         AttributesSetting;
> +
> +  CHAR16                                         *TestName;
> +  UINT32                                         TestNameLength;
> +
> +  UINTN                                          i;
> +
> +  //
> +  // Init
> +  //
> +
> +  Status = EFI_SUCCESS;
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  TestGuid = gFirmwareManagementBBTestConformanceAssertionGuid013;
> +  ResultMessageLabel = L"SetPackageInfo, function checkpoint #1";
> +
> +  PackageVersionName = NULL;
> +  TestName = NULL;
> +
> +  //
> +  // Get PackageVersionNameMaxLen
> +  //
> +
> +  Status = FirmwareManagement->GetPackageInfo (
> +                                 FirmwareManagement,
> +                                 &PackageVersion,
> +                                 &PackageVersionName,
> +                                 &PackageVersionNameMaxLen,
> +                                 &AttributesSupported,
> +                                 &AttributesSetting
> +                                 );
> +  if (Status != EFI_SUCCESS) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"test case initialization failure.";
> +    goto Exit;
> +  }
> +
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  ResultMessageData = L"test skipped - test case does not apply.";
> +  if (PackageVersionNameMaxLen == 0) {
> +    goto Exit;
> +  }
> +  if (((AttributesSupported &
> PACKAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) ==
> +        PACKAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) &&
> +      ((AttributesSetting &
> PACKAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) ==
> +        PACKAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED)) {
> +    goto Exit;
> +  }
> +  if ((AttributesSupported & PACKAGE_ATTRIBUTE_VERSION_UPDATABLE) !=
> +       PACKAGE_ATTRIBUTE_VERSION_UPDATABLE) {
> +    goto Exit;
> +  }
> +  if ((AttributesSetting & PACKAGE_ATTRIBUTE_VERSION_UPDATABLE) !=
> +       PACKAGE_ATTRIBUTE_VERSION_UPDATABLE) {
> +    goto Exit;
> +  }
> +
> +  //
> +  // Check the data returned by the function
> +  //
> +
> +  gtBS->FreePool (PackageVersionName);
> +  PackageVersionName = NULL;
> +  TestNameLength = PackageVersionNameMaxLen + 1;
> +  Status = gtBS->AllocatePool (
> +                  EfiBootServicesData,
> +                  TestNameLength * 2,  // Unicode
> +                  (VOID **) &TestName
> +                  );
> +  if (EFI_ERROR (Status)) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"test case initialization failure.";
> +    goto Exit;
> +  }
> +  for (i = 0; i < (TestNameLength - 1); i++) {
> +    TestName[i] = L' ';
> +  }
> +  TestName[i] = L'\0';
> +  Status = FirmwareManagement->SetPackageInfo (
> +                                 FirmwareManagement,
> +                                 NULL,  // Image
> +                                 0,  // ImageSize
> +                                 NULL,  // VendorCode
> +                                 0x01010101, // Dummy PackageVersion
> +                                 TestName
> +                                 );
> +
> +  if (Status == EFI_INVALID_PARAMETER) {
> +    AssertionType = EFI_TEST_ASSERTION_PASSED;
> +    ResultMessageData = L"correctly returned
> EFI_INVALID_PARAMETER.";
> +  } else {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"failed to return EFI_INVALID_PARAMETER.";
> +  }
> +
> +  //
> +  // Report the checkpoint result
> +  //
> +
> +Exit:
> +  StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 TestGuid,
> +                 ResultMessageLabel,
> +                 L"Result - %s\n%a:%d: Status - %r",
> +                 ResultMessageData,
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );
> +
> +  if (PackageVersionName != NULL) {
> +    gtBS->FreePool (PackageVersionName);
> +  }
> +  if (TestName != NULL) {
> +    gtBS->FreePool (TestName);
> +  }
> +
> +  return EFI_SUCCESS;
> +}
> +
> +//
> *********************************************************************
> *******
> +//   Checkpoint: SetPackageInfo, 2
> +//
> *********************************************************************
> *******
> +
> +/**
> +  This routine:
> +    - The function requires authentication.
> +    - Calls function with valid parameters, except Image is NULL.
> +      The function should return EFI_SECURITY_VIOLATION.
> +**/
> +
> +EFI_STATUS
> +BBTestSetPackageInfoConformanceTestCheckpoint2 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  )
> +{
> +  EFI_STATUS                                     Status;
> +  EFI_TEST_ASSERTION                             AssertionType;
> +  EFI_GUID                                       TestGuid;
> +  CHAR16                                         *ResultMessageLabel
> ;
> +  CHAR16                                         *ResultMessageData;
> +
> +  UINT32                                         PackageVersion;
> +  CHAR16                                         *PackageVersionName
> ;
> +  UINT32                                         PackageVersionNameM
> axLen;
> +  UINT64                                         AttributesSupported
> ;
> +  UINT64                                         AttributesSetting;
> +
> +  VOID                                           *Image;
> +  UINTN                                          ImageSize;
> +
> +  //
> +  // Init
> +  //
> +
> +  Status = EFI_SUCCESS;
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  TestGuid = gFirmwareManagementBBTestConformanceAssertionGuid014;
> +  ResultMessageLabel = L"SetPackageInfo, function checkpoint #2";
> +
> +  PackageVersionName = NULL;
> +
> +  //
> +  // Get PackageVersionNameMaxLen
> +  //
> +
> +  Status = FirmwareManagement->GetPackageInfo (
> +                                 FirmwareManagement,
> +                                 &PackageVersion,
> +                                 &PackageVersionName,
> +                                 &PackageVersionNameMaxLen,
> +                                 &AttributesSupported,
> +                                 &AttributesSetting
> +                                 );
> +  if (Status != EFI_SUCCESS) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"test case initialization failure.";
> +    goto Exit;
> +  }
> +
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  ResultMessageData = L"test skipped - test case does not apply.";
> +  if ((AttributesSupported &
> PACKAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) !=
> PACKAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) {
> +    goto Exit;
> +  }
> +  if ((AttributesSetting &
> PACKAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) !=
> PACKAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) {
> +    goto Exit;
> +  }
> +  if ((AttributesSupported & PACKAGE_ATTRIBUTE_VERSION_UPDATABLE) !=
> +       PACKAGE_ATTRIBUTE_VERSION_UPDATABLE) {
> +    goto Exit;
> +  }
> +  if ((AttributesSetting & PACKAGE_ATTRIBUTE_VERSION_UPDATABLE) !=
> +       PACKAGE_ATTRIBUTE_VERSION_UPDATABLE) {
> +    goto Exit;
> +  }
> +
> +  //
> +  // Check the data returned by the function
> +  //
> +
> +  Image = NULL;
> +  ImageSize = 64;  // Dummy
> +  Status = FirmwareManagement->SetPackageInfo (
> +                                 FirmwareManagement,
> +                                 Image,
> +                                 ImageSize,
> +                                 NULL,  // VendorCode
> +                                 PackageVersion,
> +                                 PackageVersionName
> +                                 );
> +
> +  if (Status == EFI_SECURITY_VIOLATION) {
> +    AssertionType = EFI_TEST_ASSERTION_PASSED;
> +    ResultMessageData = L"correctly returned
> EFI_SECURITY_VIOLATION.";
> +  } else {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"failed to return EFI_SECURITY_VIOLATION.";
> +  }
> +
> +  //
> +  // Report the checkpoint result
> +  //
> +
> +Exit:
> +  StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 TestGuid,
> +                 ResultMessageLabel,
> +                 L"Result - %s\n%a:%d: Status - %r",
> +                 ResultMessageData,
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );
> +
> +  if (PackageVersionName != NULL) {
> +    gtBS->FreePool (PackageVersionName);
> +  }
> +
> +  return EFI_SUCCESS;
> +}
> +
> +//
> *********************************************************************
> *******
> +//   Checkpoint: SetPackageInfo, 3
> +//
> *********************************************************************
> *******
> +
> +/**
> +  This routine:
> +    - The function requires authentication.
> +    - Calls function with valid parameters, except ImageSize is 0.
> +      The function should return EFI_SECURITY_VIOLATION.
> +**/
> +
> +EFI_STATUS
> +BBTestSetPackageInfoConformanceTestCheckpoint3 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  )
> +{
> +  EFI_STATUS                                     Status;
> +  EFI_TEST_ASSERTION                             AssertionType;
> +  EFI_GUID                                       TestGuid;
> +  CHAR16                                         *ResultMessageLabel
> ;
> +  CHAR16                                         *ResultMessageData;
> +
> +  UINT32                                         PackageVersion;
> +  CHAR16                                         *PackageVersionName
> ;
> +  UINT32                                         PackageVersionNameM
> axLen;
> +  UINT64                                         AttributesSupported
> ;
> +  UINT64                                         AttributesSetting;
> +
> +  VOID                                           *Image;
> +  UINTN                                          ImageSize;
> +
> +  //
> +  // Init
> +  //
> +
> +  Status = EFI_SUCCESS;
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  TestGuid = gFirmwareManagementBBTestConformanceAssertionGuid015;
> +  ResultMessageLabel = L"SetPackageInfo, function checkpoint #3";
> +
> +  PackageVersionName = NULL;
> +  Image = NULL;
> +
> +  //
> +  // Get PackageVersionNameMaxLen
> +  //
> +
> +  Status = FirmwareManagement->GetPackageInfo (
> +                                 FirmwareManagement,
> +                                 &PackageVersion,
> +                                 &PackageVersionName,
> +                                 &PackageVersionNameMaxLen,
> +                                 &AttributesSupported,
> +                                 &AttributesSetting
> +                                 );
> +  if (Status != EFI_SUCCESS) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"test case initialization failure.";
> +    goto Exit;
> +  }
> +
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  ResultMessageData = L"test skipped - test case does not apply.";
> +  if ((AttributesSupported &
> PACKAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) !=
> PACKAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) {
> +    goto Exit;
> +  }
> +  if ((AttributesSetting &
> PACKAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) !=
> PACKAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) {
> +    goto Exit;
> +  }
> +  if ((AttributesSupported & PACKAGE_ATTRIBUTE_VERSION_UPDATABLE) !=
> +       PACKAGE_ATTRIBUTE_VERSION_UPDATABLE) {
> +    goto Exit;
> +  }
> +  if ((AttributesSetting & PACKAGE_ATTRIBUTE_VERSION_UPDATABLE) !=
> +       PACKAGE_ATTRIBUTE_VERSION_UPDATABLE) {
> +    goto Exit;
> +  }
> +
> +  //
> +  // Check the data returned by the function
> +  //
> +
> +  Status = gtBS->AllocatePool (
> +                EfiBootServicesData,
> +                64,  // Dummy
> +                (VOID **) &Image
> +                );
> +  if (EFI_ERROR (Status)) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"test case initialization failure.";
> +    goto Exit;
> +  }
> +  ImageSize = 0;
> +  Status = FirmwareManagement->SetPackageInfo (
> +                                 FirmwareManagement,
> +                                 Image,
> +                                 ImageSize,
> +                                 NULL,  // VendorCode
> +                                 PackageVersion,
> +                                 PackageVersionName
> +                                 );
> +
> +  if (Status == EFI_SECURITY_VIOLATION) {
> +    AssertionType = EFI_TEST_ASSERTION_PASSED;
> +    ResultMessageData = L"correctly returned
> EFI_SECURITY_VIOLATION.";
> +  } else {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"failed to return EFI_SECURITY_VIOLATION.";
> +  }
> +
> +  //
> +  // Report the checkpoint result
> +  //
> +
> +Exit:
> +  StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 TestGuid,
> +                 ResultMessageLabel,
> +                 L"Result - %s\n%a:%d: Status - %r",
> +                 ResultMessageData,
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );
> +
> +  if (PackageVersionName != NULL) {
> +    gtBS->FreePool (PackageVersionName);
> +  }
> +  if (Image != NULL) {
> +    gtBS->FreePool (Image);
> +  }
> +
> +  return EFI_SUCCESS;
> +}
> +
> +//
> *********************************************************************
> *******
> +//   Checkpoint: SetPackageInfo, 4
> +//
> *********************************************************************
> *******
> +
> +/**
> +  This routine:
> +    - The function requires authentication.
> +    - Calls function with valid parameters, except Image has a dummy
> +      authentication data.
> +      The function should return EFI_SECURITY_VIOLATION.
> +**/
> +
> +EFI_STATUS
> +BBTestSetPackageInfoConformanceTestCheckpoint4 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  )
> +{
> +  EFI_STATUS                                     Status;
> +  EFI_TEST_ASSERTION                             AssertionType;
> +  EFI_GUID                                       TestGuid;
> +  CHAR16                                         *ResultMessageLabel
> ;
> +  CHAR16                                         *ResultMessageData;
> +
> +  UINT32                                         PackageVersion;
> +  CHAR16                                         *PackageVersionName
> ;
> +  UINT32                                         PackageVersionNameM
> axLen;
> +  UINT64                                         AttributesSupported
> ;
> +  UINT64                                         AttributesSetting;
> +
> +  VOID                                           *Image;
> +  UINTN                                          ImageSize;
> +
> +  //
> +  // Init
> +  //
> +
> +  Status = EFI_SUCCESS;
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  TestGuid = gFirmwareManagementBBTestConformanceAssertionGuid016;
> +  ResultMessageLabel = L"SetPackageInfo, function checkpoint #4";
> +
> +  PackageVersionName = NULL;
> +  Image = NULL;
> +  ImageSize = 64;
> +
> +  //
> +  // Get PackageVersionNameMaxLen
> +  //
> +
> +  Status = FirmwareManagement->GetPackageInfo (
> +                                 FirmwareManagement,
> +                                 &PackageVersion,
> +                                 &PackageVersionName,
> +                                 &PackageVersionNameMaxLen,
> +                                 &AttributesSupported,
> +                                 &AttributesSetting
> +                                 );
> +  if (Status != EFI_SUCCESS) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"test case initialization failure.";
> +    goto Exit;
> +  }
> +
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  ResultMessageData = L"test skipped - test case does not apply.";
> +  if ((AttributesSupported &
> PACKAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) !=
> PACKAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) {
> +    goto Exit;
> +  }
> +  if ((AttributesSetting &
> PACKAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) !=
> PACKAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) {
> +    goto Exit;
> +  }
> +  if ((AttributesSupported & PACKAGE_ATTRIBUTE_VERSION_UPDATABLE) !=
> +       PACKAGE_ATTRIBUTE_VERSION_UPDATABLE) {
> +    goto Exit;
> +  }
> +  if ((AttributesSetting & PACKAGE_ATTRIBUTE_VERSION_UPDATABLE) !=
> +       PACKAGE_ATTRIBUTE_VERSION_UPDATABLE) {
> +    goto Exit;
> +  }
> +
> +  //
> +  // Check the data returned by the function
> +  //
> +
> +  Status = gtBS->AllocatePool (
> +                EfiBootServicesData,
> +                ImageSize,
> +                (VOID **) &Image
> +                );
> +  if (EFI_ERROR (Status)) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"test case initialization failure.";
> +    goto Exit;
> +  }
> +  Status = FirmwareManagement->SetPackageInfo (
> +                                 FirmwareManagement,
> +                                 Image,
> +                                 ImageSize,
> +                                 NULL,  // VendorCode
> +                                 PackageVersion,
> +                                 PackageVersionName
> +                                 );
> +
> +  if (Status == EFI_SECURITY_VIOLATION) {
> +    AssertionType = EFI_TEST_ASSERTION_PASSED;
> +    ResultMessageData = L"correctly returned
> EFI_SECURITY_VIOLATION.";
> +  } else {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"failed to return EFI_SECURITY_VIOLATION.";
> +  }
> +
> +  //
> +  // Report the checkpoint result
> +  //
> +
> +Exit:
> +  StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 TestGuid,
> +                 ResultMessageLabel,
> +                 L"Result - %s\n%a:%d: Status - %r",
> +                 ResultMessageData,
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );
> +
> +  if (PackageVersionName != NULL) {
> +    gtBS->FreePool (PackageVersionName);
> +  }
> +  if (Image != NULL) {
> +    gtBS->FreePool (Image);
> +  }
> +
> +  return EFI_SUCCESS;
> +}
> +
> diff --git a/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/FirmwareManagement/BlackBoxTest
> /FirmwareManagementBBTestFunction.c b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/FirmwareManagement/BlackBoxTest
> /FirmwareManagementBBTestFunction.c
> new file mode 100644
> index 00000000..99a74aa5
> --- /dev/null
> +++ b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/FirmwareManagement/BlackBoxTest
> /FirmwareManagementBBTestFunction.c
> @@ -0,0 +1,891 @@
> +/** @file
> +
> +  Copyright 2006 - 2016 Unified EFI, Inc.<BR>
> +  Copyright (c) 2010 - 2016, Dell Inc. All rights reserved.<BR>
> +  Copyright (c) 2019,Microchip Technology Inc.<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
> +  http://opensource.org/licenses/bsd-license.php
> +
> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
> BASIS,
> +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS
> OR IMPLIED.
> +
> +**/
> +/*++
> +
> +Module Name:
> +    FirmwareManagementBBTestFunction.c
> +
> +Abstract:
> +    Firmware Management Protocol's function tests.
> +
> +--*/
> +
> +#define DEBUG_ALL                                0
> +#define DEBUG_GET_IMAGE_INFO                     1
> +#define DEBUG_GET_IMAGE                          0
> +#define DEBUG_GET_PACKAGE_INFO                   1
> +
> +
> +#include "SctLib.h"
> +#include "FirmwareManagementBBTestMain.h"
> +
> +//
> *********************************************************************
> *******
> +//   Check Points
> +//
> *********************************************************************
> *******
> +
> +EFI_STATUS
> +BBTestGetImageInfoFunctionTestCheckpoint1 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  );
> +
> +EFI_STATUS
> +BBTestGetImageFunctionTestCheckpoint1 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  );
> +
> +EFI_STATUS
> +BBTestGetPackageInfoFunctionTestCheckpoint1 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  );
> +
> +//
> *********************************************************************
> *******
> +//   Test Cases
> +//
> +//
> +//
> *********************************************************************
> *******
> +

The below is commented out, which should be removed before upstream.
> +/*
> +EFI_STATUS
> +BBTestUnitTest (
> +  IN EFI_BB_TEST_PROTOCOL                        *This,
> +  IN VOID                                        *ClientInterface,
> +  IN EFI_TEST_LEVEL                              TestLevel,
> +  IN EFI_HANDLE                                  SupportHandle
> +  )
> +{
> +  return EFI_SUCCESS;
> +}
> +*/


> +
> +//
> *********************************************************************
> *******
> +//   Test Case: GetImageInfo
> +//
> *********************************************************************
> *******
> +
> +EFI_STATUS
> +BBTestGetImageInfoFunctionTest (
> +  IN EFI_BB_TEST_PROTOCOL                        *This,
> +  IN VOID                                        *ClientInterface,
> +  IN EFI_TEST_LEVEL                              TestLevel,
> +  IN EFI_HANDLE                                  SupportHandle
> +  )
> +{
> +  EFI_STANDARD_TEST_LIBRARY_PROTOCOL             *StandardLib;
> +  EFI_STATUS                                     Status;
> +  EFI_FIRMWARE_MANAGEMENT_PROTOCOL               *FirmwareManagement
> ;
> +
> +  //
> +  // Init
> +  //
> +
> +  FirmwareManagement =
> (EFI_FIRMWARE_MANAGEMENT_PROTOCOL*)ClientInterface;
> +
> +  Status = gtBS->HandleProtocol (
> +                   SupportHandle,
> +                   &gEfiStandardTestLibraryGuid,
> +                   (VOID **) &StandardLib
> +                   );
> +  if (EFI_ERROR(Status)) {
> +    return Status;
> +  }
> +
> +  //
> +  // Call check point(s)
> +  //
> +
> +  BBTestGetImageInfoFunctionTestCheckpoint1 (StandardLib,
> FirmwareManagement);
> +
> +  return EFI_SUCCESS;
> +}
> +
> +//
> *********************************************************************
> *******
> +// Test Case: GetImage
> +//
> *********************************************************************
> *******
> +
> +EFI_STATUS
> +BBTestGetImageFunctionTest (
> +  IN EFI_BB_TEST_PROTOCOL                        *This,
> +  IN VOID                                        *ClientInterface,
> +  IN EFI_TEST_LEVEL                              TestLevel,
> +  IN EFI_HANDLE                                  SupportHandle
> +  )
> +{
> +  EFI_STANDARD_TEST_LIBRARY_PROTOCOL             *StandardLib;
> +  EFI_STATUS                                     Status;
> +  EFI_FIRMWARE_MANAGEMENT_PROTOCOL               *FirmwareManagement
> ;
> +
> +  //
> +  // Init
> +  //
> +
> +  FirmwareManagement =
> (EFI_FIRMWARE_MANAGEMENT_PROTOCOL*)ClientInterface;
> +
> +  Status = gtBS->HandleProtocol (
> +                   SupportHandle,
> +                   &gEfiStandardTestLibraryGuid,
> +                   (VOID **) &StandardLib
> +                   );
> +  if (EFI_ERROR(Status)) {
> +    return Status;
> +  }
> +
> +  //
> +  // Call check point(s)
> +  //
> +
> +  BBTestGetImageFunctionTestCheckpoint1 (StandardLib,
> FirmwareManagement);
> +
> +  return EFI_SUCCESS;
> +}
> +
> +//
> *********************************************************************
> *******
> +//   Test Case: GetPackageInfo
> +//
> *********************************************************************
> *******
> +
> +EFI_STATUS
> +BBTestGetPackageInfoFunctionTest (
> +  IN EFI_BB_TEST_PROTOCOL                        *This,
> +  IN VOID                                        *ClientInterface,
> +  IN EFI_TEST_LEVEL                              TestLevel,
> +  IN EFI_HANDLE                                  SupportHandle
> +  )
> +{
> +  EFI_STANDARD_TEST_LIBRARY_PROTOCOL             *StandardLib;
> +  EFI_STATUS                                     Status;
> +  EFI_FIRMWARE_MANAGEMENT_PROTOCOL               *FirmwareManagement
> ;
> +
> +  //
> +  // Init
> +  //
> +
> +  FirmwareManagement =
> (EFI_FIRMWARE_MANAGEMENT_PROTOCOL*)ClientInterface;
> +
> +  Status = gtBS->HandleProtocol (
> +                   SupportHandle,
> +                   &gEfiStandardTestLibraryGuid,
> +                   (VOID **) &StandardLib
> +                   );
> +  if (EFI_ERROR(Status)) {
> +    return Status;
> +  }
> +
> +  //
> +  // Call check point(s)
> +  //
> +
> +  BBTestGetPackageInfoFunctionTestCheckpoint1 (StandardLib,
> FirmwareManagement);
> +
> +  return EFI_SUCCESS;
> +}
> +
> +//
> *********************************************************************
> *******
> +//   Check Points
> +//
> +//
> +//
> *********************************************************************
> *******
> +
> +//
> *********************************************************************
> *******
> +//   Checkpoint: GetImageInfo, 1
> +//
> *********************************************************************
> *******
> +
> +/**
> +  This routine:
> +    - Calls function with all valid parameters.
> +      The function should return EFI_SUCCESS.
> +    - Checks DescriptorSize is 0.
> +    - Checks (DescriptorCount * DescriptorSize) is <= ImageInfoSize.
> +    - Checks DescriptorVersion is == 1.
> +    - Checks ImageIndex is between 1 and DescriptorCount.
> +    - Checks AttributesSupported has no bits set beyond bit3.
> +    - Checks AttribtuesSetting has no bits set beyond bit3.
> +    - Checks Compatibilities bit1 thru bit15 are 0s.
> +**/
> +
> +EFI_STATUS
> +BBTestGetImageInfoFunctionTestCheckpoint1 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  )
> +{
> +  EFI_STATUS                                     Status;
> +  EFI_TEST_ASSERTION                             AssertionType;
> +  EFI_GUID                                       TestGuid;
> +  CHAR16                                         *ResultMessageLabel
> ;
> +  CHAR16                                         *ResultMessageData;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *BufferImageInfo;
> +
> +  UINTN                                          ImageInfoSize;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *ImageInfo;
> +  UINT32                                         DescriptorVersion;
> +  UINT8                                          DescriptorCount;
> +  UINTN                                          DescriptorSize;
> +  UINT32                                         PackageVersion;
> +  CHAR16                                         *PackageVersionName
> ;
> +
> +  CHAR16*                                        Attribute[4];
> +
> +  UINTN                                          i;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *p;
> +
> +#if (DEBUG_ALL || DEBUG_GET_IMAGE_INFO)
> +
> +  CHAR16                                         *BitField;
> +  CHAR16                                         *BitSetting;
> +
> +  UINT64                                         j;
> +  UINTN                                          k;
> +
> +#endif
> +
> +  //
> +  // Init
> +  //
> +
> +  Status = EFI_SUCCESS;
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  TestGuid = gFirmwareManagementBBTestFunctionAssertionGuid001;
> +  ResultMessageLabel = L"GetImageInfo, function checkpoint #1";
> +
> +  BufferImageInfo = NULL;
> +  ImageInfo = NULL;
> +  PackageVersionName = NULL;
> +
> +  Attribute[0] = L"Image Updatable";
> +  Attribute[1] = L"Reset Required";
> +  Attribute[2] = L"Authentication Required";
> +  Attribute[3] = L"In Use";
> +
> +  // Use a sufficiently large buffer to obtain EFI_SUCCESS,
> +  // since some implementation does NOT correctly return
> EFI_BUFFER_TOO_SMALL.
> +  // Check for EFI_BUFFER_TOO_SMALL in another conformance test.
> +
> +  ImageInfoSize = (sizeof (EFI_FIRMWARE_IMAGE_DESCRIPTOR)) * 20;
> +  Status = gtBS->AllocatePool (
> +                   EfiBootServicesData,
> +                   ImageInfoSize,
> +                   (VOID **) &ImageInfo
> +                   );
> +  if (EFI_ERROR (Status)) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"test case initialization failure.";
> +    goto Exit;
> +  }
> +
> +  Status = FirmwareManagement->GetImageInfo (
> +                                 FirmwareManagement,
> +                                 &ImageInfoSize,
> +                                 ImageInfo,
> +                                 &DescriptorVersion,
> +                                 &DescriptorCount,
> +                                 &DescriptorSize,
> +                                 &PackageVersion,
> +                                 &PackageVersionName
> +                                 );
> +  if (Status == EFI_BUFFER_TOO_SMALL) {
> +    gtBS->FreePool (ImageInfo);
> +    Status = gtBS->AllocatePool (
> +                     EfiBootServicesData,
> +                     ImageInfoSize,
> +                     (VOID **) &ImageInfo
> +                     );
> +    if (EFI_ERROR (Status)) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"test case initialization failure.";
> +      goto Exit;
> +    }
> +    Status = FirmwareManagement->GetImageInfo (
> +                                   FirmwareManagement,
> +                                   &ImageInfoSize,
> +                                   ImageInfo,
> +                                   &DescriptorVersion,
> +                                   &DescriptorCount,
> +                                   &DescriptorSize,
> +                                   &PackageVersion,
> +                                   &PackageVersionName
> +                                   );
> +  }
> +
> +  //
> +  // Check the data returned by the function
> +  //
> +
> +  BufferImageInfo = ImageInfo;
> +
> +  if (Status == EFI_SUCCESS) {
> +    AssertionType = EFI_TEST_ASSERTION_PASSED;
> +    ResultMessageData = L"correctly returned EFI_SUCCESS.";
> +  } else {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"failed to return EFI_SUCCESS.";
> +    goto Exit;
> +  }
> +
> +  if (DescriptorSize == 0) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"*DescriptorSize is 0.";
> +    goto Exit;  // Note the Status = EFI_SUCCESS
> +  }
> +
> +  if ((DescriptorCount * DescriptorSize) > ImageInfoSize) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"((*DescriptorCount) * (*DescriptorSize)) >
> *ImageInfoSize.";
> +    goto Exit;  // Note the Status = EFI_SUCCESS
> +  }
> +
> +  if (DescriptorVersion != 1) {
> +    AssertionType = EFI_TEST_ASSERTION_WARNING;
> +    ResultMessageData = L"*DescriptorVersion != 1.";
> +    goto Exit;
> +  }
> +
> +  for (i = 0; i < DescriptorCount; i++) {
> +    p = (EFI_FIRMWARE_IMAGE_DESCRIPTOR *) (((UINT8 *) ImageInfo) +
> (i * DescriptorSize));
> +
> +    if (p->ImageIndex > DescriptorCount) {
> +      AssertionType = EFI_TEST_ASSERTION_WARNING;
> +      ResultMessageData = L"ImageIndex is beyond DescriptorCount.";
> +      goto Exit;
> +    }
> +
> +    if ((p->AttributesSupported & 0xFFFFFFFFFFFFFFF0) != 0) {
> +      AssertionType = EFI_TEST_ASSERTION_WARNING;
> +      ResultMessageData = L"AttributesSupported has bit(s) set
> beyond bit3.";
> +      goto Exit;
> +    }
> +
> +    if ((p->AttributesSetting & 0xFFFFFFFFFFFFFFF0) != 0) {
> +      AssertionType = EFI_TEST_ASSERTION_WARNING;
> +      ResultMessageData = L"AttributesSetting has bit(s) set beyond
> bit3.";
> +      goto Exit;
> +    }
> +
> +    if ((p->Compatibilities & 0x000000000000FFFE) !=0) {
> +      AssertionType = EFI_TEST_ASSERTION_WARNING;
> +      ResultMessageData = L"Compatibilities have bit(s) set between
> bit1 and bit15.";
> +      goto Exit;
> +    }
> +  }
> +
> +#if (DEBUG_ALL || DEBUG_GET_IMAGE_INFO)
> +
> +  StandardLib->RecordMessage (
> +                 StandardLib,
> +                 EFI_VERBOSE_LEVEL_QUIET,
> +                 L"Firmware Image Info Header: \n"
> +                 L"  - *ImageInfoSize = %x\n"
> +                 L"  - *DescriptorVersion = %x\n"
> +                 L"  - *DescriptorCount = %x\n"
> +                 L"  - *DescriptorSzie = %x\n"
> +                 L"  - *PackageVersion = %08x\n"
> +                 L"  - **PackageVersionName = %s\n",
> +                 ImageInfoSize,
> +                 DescriptorVersion,
> +                 DescriptorCount,
> +                 DescriptorSize,
> +                 PackageVersion,
> +                 PackageVersionName
> +                 );
> +
> +  for (i = 0; i < DescriptorCount; i++) {
> +    p = (EFI_FIRMWARE_IMAGE_DESCRIPTOR *) (((UINT8 *) ImageInfo) +
> (i * DescriptorSize));
> +    StandardLib->RecordMessage (
> +                   StandardLib,
> +                   EFI_VERBOSE_LEVEL_QUIET,
> +                   L"Descriptor Index = %x:\n"
> +                   L"  - ImageTypeId = %08x-%04x-%04x-
> %02x%02x%02x%02x%02x%02x%02x%02x",
> +                   p->ImageIndex,
> +                   p->ImageTypeId.Data1,
> +                   p->ImageTypeId.Data2,
> +                   p->ImageTypeId.Data3,
> +                   p->ImageTypeId.Data4[0],
> +                   p->ImageTypeId.Data4[1],
> +                   p->ImageTypeId.Data4[2],
> +                   p->ImageTypeId.Data4[3],
> +                   p->ImageTypeId.Data4[4],
> +                   p->ImageTypeId.Data4[5],
> +                   p->ImageTypeId.Data4[6],
> +                   p->ImageTypeId.Data4[7]
> +                   );
> +    StandardLib->RecordMessage (
> +                   StandardLib,
> +                   EFI_VERBOSE_LEVEL_QUIET,
> +                   L"  - ImageId = %016X\n"
> +                   L"  - *ImageIdName = %s\n"
> +                   L"  - Version = %08x\n"
> +                   L"  - *VersionName = %s\n"
> +                   L"  - Size = %x",
> +                   p->ImageId,
> +                   p->ImageIdName,
> +                   p->Version,
> +                   p->VersionName,
> +                   p->Size
> +                   );
> +    StandardLib->RecordMessage (
> +                   StandardLib,
> +                   EFI_VERBOSE_LEVEL_QUIET,
> +                   L"  - AttributesSupported = %016x\n"
> +                   L"  - AttributesSetting   = %016x",
> +                   p->AttributesSupported,
> +                   p->AttributesSetting
> +                   );
> +    for (j = 1, k = 0; j <= IMAGE_ATTRIBUTE_IN_USE; j =
> SctLShiftU64(j, 1), k++) {
> +      BitField = Attribute[k];
> +      if ((p->AttributesSupported & j) != j) {
> +        BitSetting = L"Not Supported";
> +      } else if ((p->AttributesSetting & j) == j) {
> +        BitSetting = L"Yes";
> +      } else {
> +        BitSetting = L"No";
> +      }
> +      StandardLib->RecordMessage (
> +                     StandardLib,
> +                     EFI_VERBOSE_LEVEL_QUIET,
> +                     L"    - %s = %s",
> +                     BitField,
> +                     BitSetting
> +                     );
> +    }
> +    StandardLib->RecordMessage (
> +                   StandardLib,
> +                   EFI_VERBOSE_LEVEL_QUIET,
> +                   L"  - Compatibilities = %016x\n",
> +                   p->Compatibilities
> +                   );
> +  }
> +
> +#endif
> +
> +  //
> +  // Report the checkpoint result
> +  //
> +
> +
> +Exit:
> +  StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 TestGuid,
> +                 ResultMessageLabel,
> +                 L"Result - %s\n%a:%d: Status - %r",
> +                 ResultMessageData,
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );
> +  if (PackageVersionName != NULL) {
> +    gtBS->FreePool (PackageVersionName);
> +  }
> +  if (BufferImageInfo != NULL) {
> +    gtBS->FreePool (BufferImageInfo);
> +  }
> +
> +  return EFI_SUCCESS;
> +}
> +
> +//
> *********************************************************************
> *******
> +//   Checkpoint: GetImage, 1
> +//
> *********************************************************************
> *******
> +
> +/**
> +  This routine:
> +    - Calls function with all valid parameters.
> +      The function should return EFI_SUCCESS or EFI_UNSUPPORTED.
> +**/
> +
> +EFI_STATUS
> +BBTestGetImageFunctionTestCheckpoint1 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  )
> +{
> +  EFI_STATUS                                     Status;
> +  EFI_TEST_ASSERTION                             AssertionType;
> +  EFI_GUID                                       TestGuid;
> +  CHAR16                                         *ResultMessageLabel
> ;
> +  CHAR16                                         *ResultMessageData;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *BufferImageInfo;
> +  VOID                                           *BufferImage;
> +
> +  UINTN                                          ImageInfoSize;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *ImageInfo;
> +  UINT32                                         DescriptorVersion;
> +  UINT8                                          DescriptorCount;
> +  UINTN                                          DescriptorSize;
> +  UINT32                                         PackageVersion;
> +  CHAR16                                         *PackageVersionName
> ;
> +
> +  VOID                                           *Image;
> +  UINTN                                          ImageSize;
> +
> +  UINTN                                          i;
> +  EFI_FIRMWARE_IMAGE_DESCRIPTOR                  *p;
> +  UINTN                                          FunctionTested;
> +
> +  //
> +  // Init
> +  //
> +
> +  Status = EFI_SUCCESS;
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  TestGuid = gFirmwareManagementBBTestFunctionAssertionGuid002;
> +  ResultMessageLabel = L"GetImage, function checkpoint #1";
> +
> +  BufferImageInfo = NULL;
> +  BufferImage = NULL;
> +  ImageInfo = NULL;
> +  Image = NULL;
> +  PackageVersionName = NULL;
> +  FunctionTested = 0;
> +
> +  // Use a sufficiently large buffer to obtain EFI_SUCCESS,
> +  // since some implementation does NOT correctly return
> EFI_BUFFER_TOO_SMALL.
> +  // Check for EFI_BUFFER_TOO_SMALL in another conformance test.
> +
> +  ImageInfoSize = (sizeof (EFI_FIRMWARE_IMAGE_DESCRIPTOR)) * 20;
> +  Status = gtBS->AllocatePool (
> +                   EfiBootServicesData,
> +                   ImageInfoSize,
> +                   (VOID **) &ImageInfo
> +                   );
> +  if (EFI_ERROR (Status)) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"test case initialization failure.";
> +    goto Exit;
> +  }
> +
> +  Status = FirmwareManagement->GetImageInfo (
> +                                 FirmwareManagement,
> +                                 &ImageInfoSize,
> +                                 ImageInfo,
> +                                 &DescriptorVersion,
> +                                 &DescriptorCount,
> +                                 &DescriptorSize,
> +                                 &PackageVersion,
> +                                 &PackageVersionName
> +                                 );
> +  if (Status == EFI_BUFFER_TOO_SMALL) {
> +    gtBS->FreePool (ImageInfo);
> +    Status = gtBS->AllocatePool (
> +                     EfiBootServicesData,
> +                     ImageInfoSize,
> +                     (VOID **) &ImageInfo
> +                     );
> +    if (EFI_ERROR (Status)) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"test case initialization failure.";
> +      goto Exit;
> +    }
> +    Status = FirmwareManagement->GetImageInfo (
> +                                   FirmwareManagement,
> +                                   &ImageInfoSize,
> +                                   ImageInfo,
> +                                   &DescriptorVersion,
> +                                   &DescriptorCount,
> +                                   &DescriptorSize,
> +                                   &PackageVersion,
> +                                   &PackageVersionName
> +                                   );
> +    if (Status != EFI_SUCCESS) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"test case initialization failure.";
> +      BufferImageInfo = ImageInfo;
> +      goto Exit;
> +    }
> +  }
> +  BufferImageInfo = ImageInfo;
> +
> +  if (DescriptorSize == 0) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"*DescriptorSize is 0.";
> +    goto Exit;  // Note the Status = EFI_SUCCESS
> +  }
> +  if ((DescriptorCount * DescriptorSize) > ImageInfoSize) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"((*DescriptorCount) * (*DescriptorSize)) >
> *ImageInfoSize.";
> +    goto Exit;  // Note the Status = EFI_SUCCESS
> +  }
> +
> +  //
> +  // Check the data returned by the function
> +  //
> +
> +  for (i = 0; i < DescriptorCount; i++) {
> +    p = (EFI_FIRMWARE_IMAGE_DESCRIPTOR *) (((UINT8 *) ImageInfo) +
> (i * DescriptorSize));
> +
> +    if (((p->AttributesSupported &
> IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) ==
> +          IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) &&
> +        ((p->AttributesSetting &
> IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED) ==
> +          IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED)) {
> +      continue;
> +    }
> +    if (p->Size == 0) {
> +      continue;
> +    }
> +    if ((p->AttributesSupported & IMAGE_ATTRIBUTE_IMAGE_UPDATABLE)
> != IMAGE_ATTRIBUTE_IMAGE_UPDATABLE) {
> +      continue;
> +    }
> +    if ((p->AttributesSetting & IMAGE_ATTRIBUTE_IMAGE_UPDATABLE) !=
> IMAGE_ATTRIBUTE_IMAGE_UPDATABLE) {
> +      continue;
> +    }
> +
> +    ImageSize = p->Size;
> +    Status = gtBS->AllocatePool (
> +                     EfiBootServicesData,
> +                     ImageSize,
> +                     (VOID **) &Image
> +                     );
> +    if (EFI_ERROR (Status)) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"test case initialization failure.";
> +      goto Exit;
> +    }
> +    BufferImage = Image;
> +
> +    FunctionTested++;
> +    Status = FirmwareManagement->GetImage (
> +                                   FirmwareManagement,
> +                                   p->ImageIndex,
> +                                   Image,
> +                                   &ImageSize
> +                                   );
> +
> +    if (Status == EFI_BUFFER_TOO_SMALL) {
> +      gtBS->FreePool (Image);
> +      Status = gtBS->AllocatePool (
> +                       EfiBootServicesData,
> +                       ImageSize,
> +                       (VOID **) &Image
> +                       );
> +      if (EFI_ERROR (Status)) {
> +        AssertionType = EFI_TEST_ASSERTION_FAILED;
> +        ResultMessageData = L"test case initialization failure.";
> +        goto Exit;
> +      }
> +    }
> +    BufferImage = Image;
> +
> +    Status = FirmwareManagement->GetImage (
> +                                   FirmwareManagement,
> +                                   p->ImageIndex,
> +                                   Image,
> +                                   &ImageSize
> +                                   );
> +    gtBS->FreePool (BufferImage);
> +    BufferImage = NULL;
> +    Image = NULL;
> +
> +    //
> +    // Report the checkpoint result
> +    //
> +
> +    if ((Status != EFI_SUCCESS) && (Status != EFI_UNSUPPORTED)) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +      ResultMessageData = L"failed to return EFI_SUCCESS or
> EFI_UNSUPPORTED.";
> +      goto Exit;
> +    }
> +  }
> +
> +  if (FunctionTested == 0) {
> +    AssertionType = EFI_TEST_ASSERTION_PASSED;
> +    ResultMessageData = L"test skipped - test case does not apply.";
> +  } else {
> +    AssertionType = EFI_TEST_ASSERTION_PASSED;
> +    ResultMessageData = L"correctly returned EFI_SUCCESS or
> EFI_UNSUPPORTED.";
> +  }
> +
> +Exit:
> +  StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 TestGuid,
> +                 ResultMessageLabel,
> +                 L"Result - %s\n%a:%d: Status - %r",
> +                 ResultMessageData,
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );
> +
> +  if (PackageVersionName != NULL) {
> +    gtBS->FreePool (PackageVersionName);
> +  }
> +  if (BufferImageInfo != NULL) {
> +    gtBS->FreePool (BufferImageInfo);
> +  }
> +  if (BufferImage != NULL) {
> +      gtBS->FreePool (BufferImage);
> +  }
> +
> +  return EFI_SUCCESS;
> +}
> +
> +//
> *********************************************************************
> *******
> +//   Checkpoint: GetPackageInfo, 1
> +//
> *********************************************************************
> *******
> +
> +/**
> +  This routine:
> +    - Calls function with all valid parameters.
> +      The function should return EFI_SUCCESS or EFI_UNSUPPORTED.
> +    - Checks AttributesSupported has no bits set beyond bit2.
> +    - Checks AttributesSetting has no bits set beyond bit2.
> +**/
> +
> +EFI_STATUS
> +BBTestGetPackageInfoFunctionTestCheckpoint1 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL          *StandardLib,
> +  IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL            *FirmwareManagement
> +  )
> +{
> +  EFI_STATUS                                     Status;
> +  EFI_TEST_ASSERTION                             AssertionType;
> +  EFI_GUID                                       TestGuid;
> +  CHAR16                                         *ResultMessageLabel
> ;
> +  CHAR16                                         *ResultMessageData;
> +
> +  UINT32                                         PackageVersion;
> +  CHAR16                                         *PackageVersionName
> ;
> +  UINT32                                         PackageVersionNameM
> axLen;
> +  UINT64                                         AttributesSupported
> ;
> +  UINT64                                         AttributesSetting;
> +
> +  CHAR16*                                        Attribute[3];
> +
> +#if (DEBUG_ALL || DEBUG_GET_PACKAGE_INFO)
> +
> +  CHAR16                                         *BitField;
> +  CHAR16                                         *BitSetting;
> +
> +  UINT64                                         j;
> +  UINTN                                          k;
> +
> +#endif
> +
> +  //
> +  // Init
> +  //
> +
> +  Status = EFI_SUCCESS;
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  TestGuid = gFirmwareManagementBBTestFunctionAssertionGuid003;
> +  ResultMessageLabel = L"GetPackageInfo, function checkpoint #1";
> +
> +  PackageVersionName = NULL;
> +
> +  Attribute[0] = L"Version Updatable";
> +  Attribute[1] = L"Reset Required";
> +  Attribute[2] = L"Authentication Required";
> +
> +  //
> +  // Check the data returned by the function
> +  //
> +
> +  Status = FirmwareManagement->GetPackageInfo (
> +                                 FirmwareManagement,
> +                                 &PackageVersion,
> +                                 &PackageVersionName,
> +                                 &PackageVersionNameMaxLen,
> +                                 &AttributesSupported,
> +                                 &AttributesSetting
> +                                 );
> +
> +  if ((Status == EFI_SUCCESS) || (Status == EFI_UNSUPPORTED)) {
> +    AssertionType = EFI_TEST_ASSERTION_PASSED;
> +    ResultMessageData = L"correctly returned EFI_SUCCESS or
> EFI_UNSUPPORTED.";
> +  } else {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    ResultMessageData = L"failed to return EFI_SUCCESS or
> EFI_UNSUPPORTED.";
> +    goto Exit;
> +  }
> +
> +#if (DEBUG_ALL || DEBUG_GET_PACKAGE_INFO)
> +
> +  StandardLib->RecordMessage (
> +                 StandardLib,
> +                 EFI_VERBOSE_LEVEL_QUIET,
> +                 L"Firmware Package Info: \n"
> +                 L"  - *PackageVersion = %08x\n"
> +                 L"  - **PackageVersionName = %s\n"
> +                 L"  - *PackageVersionNameMaxLen = %08x",
> +                 PackageVersion,
> +                 PackageVersionName,
> +                 PackageVersionNameMaxLen
> +                );
> +  StandardLib->RecordMessage (
> +                 StandardLib,
> +                 EFI_VERBOSE_LEVEL_QUIET,
> +                 L"  - *AttributesSupported = %016x\n"
> +                 L"  - *AttributesSetting   = %016x",
> +                 AttributesSupported,
> +                 AttributesSetting
> +                 );
> +  for (j = 1, k = 0; j <= PACKAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED;
> j = SctLShiftU64(j, 1), k++) {
> +    BitField = Attribute[k];
> +    if ((AttributesSupported & j) != j) {
> +      BitSetting = L"Not Supported";
> +    } else if ((AttributesSetting & j) == j) {
> +      BitSetting = L"Yes";
> +    } else {
> +      BitSetting = L"No";
> +    }
> +    StandardLib->RecordMessage (
> +                   StandardLib,
> +                   EFI_VERBOSE_LEVEL_QUIET,
> +                   L"    - %s = %s",
> +                   BitField,
> +                   BitSetting
> +                   );
> +  }
> +
> +#endif
> +
> +  if ((AttributesSupported & 0xFFFFFFFFFFFFFFF8) != 0) {
> +    AssertionType = EFI_TEST_ASSERTION_WARNING;
> +    ResultMessageData = L"*AttributesSupported has bit(s) set beyond
> bit2.";
> +    goto Exit;
> +  }
> +
> +  if ((AttributesSetting & 0xFFFFFFFFFFFFFFF8) != 0) {
> +    AssertionType = EFI_TEST_ASSERTION_WARNING;
> +    ResultMessageData = L"*AttributesSetting has bit(s) set beyond
> bit2.";
> +    goto Exit;
> +  }
> +
> +  //
> +  // Report the checkpoint result
> +  //
> +
> +Exit:
> +  StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 TestGuid,
> +                 ResultMessageLabel,
> +                 L"Result - %s\n%a:%d: Status - %r",
> +                 ResultMessageData,
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );
> +
> +  if (PackageVersionName != NULL) {
> +    gtBS->FreePool (PackageVersionName);
> +  }
> +
> +  return EFI_SUCCESS;
> +}
> +
> diff --git a/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/FirmwareManagement/BlackBoxTest
> /FirmwareManagementBBTestMain.c b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/FirmwareManagement/BlackBoxTest
> /FirmwareManagementBBTestMain.c
> new file mode 100644
> index 00000000..3ce62795
> --- /dev/null
> +++ b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/FirmwareManagement/BlackBoxTest
> /FirmwareManagementBBTestMain.c
> @@ -0,0 +1,228 @@
> +/** @file
> +
> +  Copyright 2006 - 2017 Unified EFI, Inc.<BR>
> +  Copyright (c) 2010 - 2017, Dell Inc. All rights reserved.<BR>
> +  Copyright (c) 2019,Microchip Technology Inc.<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
> +  http://opensource.org/licenses/bsd-license.php
> +
> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
> BASIS,
> +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS
> OR IMPLIED.
> +
> +**/
> +/*++
> +
> +Module Name:
> +
> +  FirmwareManagementBBTestMain.c
> +
> +Abstract:
> +
> +  Firmware Management Protocol test driver.
> +
> +--*/
> +
> +#include "SctLib.h"
> +#include "FirmwareManagementBBTestMain.h"
> +
> +//
> *********************************************************************
> *******
> +//   Variables
> +//
> *********************************************************************
> *******
> +
> +EFI_HANDLE mImageHandle;
> +
> +EFI_BB_TEST_PROTOCOL *gBBTestProtocolInterface;
> +
> +EFI_BB_TEST_PROTOCOL_FIELD gBBTestProtocolField = {
> +  EFI_FIRMWARE_MANAGEMENT_PROTOCOL_TEST_REVISION,
> +  IHV_EFI_FIRMWARE_MANAGEMENT_PROTOCOL_GUID,
> +  L"Firmware Management Protocol Test",
> +  L"UEFI 2.3 Firmware Management Protocol Black-Box Test"
> +};
> +
> +EFI_GUID gSupportProtocolGuid[] = {
> +  EFI_STANDARD_TEST_LIBRARY_GUID,
> +  EFI_NULL_GUID
> +};
> +
> +EFI_BB_TEST_ENTRY_FIELD gBBTestEntryField[] = {

The below is commented out, which should be removed before upstream.
> +  /*
> +  //Use for unit test only
> +  {
> +    { 0x8cdda816, 0x3f97, 0x4155, { 0xa6, 0x73, 0x86, 0x93, 0x79,
> 0x8f, 0xb0, 0x6d } },
> +   L"Unit Test Only",
> +   L"Verify the Assistant Function",
> +    EFI_TEST_LEVEL_DEFAULT,
> +    gSupportProtocolGuid,
> +    EFI_TEST_CASE_AUTO,
> +    BBTestUnitTest
> +  },
> +  */


> +  {
> +    EFI_FIRMWARE_MANAGEMENT_PROTOCOL_TEST_ENTRY_GUID0101,
> +    L"Function_Test-GetImageInfo",
> +    L"Function auto test for Firmware Management Protocol
> GetImageInfo().",
> +    EFI_TEST_LEVEL_MINIMAL,
> +    gSupportProtocolGuid,
> +    EFI_TEST_CASE_AUTO,
> +    BBTestGetImageInfoFunctionTest
> +  },
> +  {
> +    EFI_FIRMWARE_MANAGEMENT_PROTOCOL_TEST_ENTRY_GUID0102,
> +    L"Function_Test-GetImage",
> +    L"Function auto test for Firmware Management Protocol
> GetImage().",
> +    EFI_TEST_LEVEL_MINIMAL,
> +    gSupportProtocolGuid,
> +    EFI_TEST_CASE_AUTO,
> +    BBTestGetImageFunctionTest
> +  },
> +/*++
> +  {
> +    EFI_FIRMWARE_MANAGEMENT_PROTOCOL_TEST_ENTRY_GUID0103,
> +    L"Function Test - SetImage",
> +    L"Function auto test for Firmware Management Protocol
> SetImage().",
> +    EFI_TEST_LEVEL_MINIMAL,
> +    gSupportProtocolGuid,
> +    EFI_TEST_CASE_AUTO,
> +    BBTestSetImageFunctionTest
> +  },
> +--*/
> +/*++
> +  {
> +    EFI_FIRMWARE_MANAGEMENT_PROTOCOL_TEST_ENTRY_GUID0104,
> +    L"Function Test - CheckImage",
> +    L"Function auto test for Firmware Management Protocol
> CheckImage().",
> +    EFI_TEST_LEVEL_MINIMAL,
> +    gSupportProtocolGuid,
> +    EFI_TEST_CASE_AUTO,
> +    BBTestCheckImageFunctionTest
> +  },
> +--*/
> +  {
> +    EFI_FIRMWARE_MANAGEMENT_PROTOCOL_TEST_ENTRY_GUID0105,
> +    L"Function_Test-GetPackageInfo",
> +    L"Function auto test for Firmware Management Protocol
> GetPackageInfo().",
> +    EFI_TEST_LEVEL_MINIMAL,
> +    gSupportProtocolGuid,
> +    EFI_TEST_CASE_AUTO,
> +    BBTestGetPackageInfoFunctionTest
> +  },
> +/*++
> +  {
> +    EFI_FIRMWARE_MANAGEMENT_PROTOCOL_TEST_ENTRY_GUID0106,
> +    L"Function Test - SetPackageInfo",
> +    L"Function auto test for Firmware Management Protocol
> SetPackageInfo().",
> +    EFI_TEST_LEVEL_MINIMAL,
> +    gSupportProtocolGuid,
> +    EFI_TEST_CASE_AUTO,
> +    BBTestSetPackageInfoFunctionTest
> +  },
> +--*/
> +  {
> +    EFI_FIRMWARE_MANAGEMENT_PROTOCOL_TEST_ENTRY_GUID0201,
> +    L"Conformance_Test-GetImageInfo",
> +    L"Conformance auto test for Firmware Management Protocol
> GetImageInfo().",
> +    EFI_TEST_LEVEL_MINIMAL,
> +    gSupportProtocolGuid,
> +    EFI_TEST_CASE_AUTO,
> +    BBTestGetImageInfoConformanceTest
> +  },
> +  {
> +    EFI_FIRMWARE_MANAGEMENT_PROTOCOL_TEST_ENTRY_GUID0202,
> +    L"Conformance_Test-GetImage",
> +    L"Conformance auto test for Firmware Management Protocol
> GetImage().",
> +    EFI_TEST_LEVEL_MINIMAL,
> +    gSupportProtocolGuid,
> +    EFI_TEST_CASE_AUTO,
> +    BBTestGetImageConformanceTest
> +  },
> +  {
> +    EFI_FIRMWARE_MANAGEMENT_PROTOCOL_TEST_ENTRY_GUID0203,
> +    L"Conformance_Test-SetImage",
> +    L"Conformance auto test for Firmware Management Protocol
> SetImage().",
> +    EFI_TEST_LEVEL_MINIMAL,
> +    gSupportProtocolGuid,
> +    EFI_TEST_CASE_AUTO,
> +    BBTestSetImageConformanceTest
> +  },
> +  {
> +    EFI_FIRMWARE_MANAGEMENT_PROTOCOL_TEST_ENTRY_GUID0204,
> +    L"Conformance_Test-CheckImage",
> +    L"Conformance auto test for Firmware Management Protocol
> CheckImage().",
> +    EFI_TEST_LEVEL_MINIMAL,
> +    gSupportProtocolGuid,
> +    EFI_TEST_CASE_AUTO,
> +    BBTestCheckImageConformanceTest
> +  },
> +/*++
> +  {
> +    EFI_FIRMWARE_MANAGEMENT_PROTOCOL_TEST_ENTRY_GUID0205,
> +    L"Conformance Test - GetPackageInfo",
> +    L"Conformance auto test for Firmware Management Protocol
> GetPackageInfo().",
> +    EFI_TEST_LEVEL_MINIMAL,
> +    gSupportProtocolGuid,
> +    EFI_TEST_CASE_AUTO,
> +    BBTestGetPackageInfoConformanceTest
> +  },
> +--*/
> +  {
> +    EFI_FIRMWARE_MANAGEMENT_PROTOCOL_TEST_ENTRY_GUID0206,
> +    L"Conformance_Test-SetPackageInfo",
> +    L"Conformance auto test for Firmware Management Protocol
> SetPackageInfo().",
> +    EFI_TEST_LEVEL_MINIMAL,
> +    gSupportProtocolGuid,
> +    EFI_TEST_CASE_AUTO,
> +    BBTestSetPackageInfoConformanceTest
> +  },
> +  0
> +};
> +
> +//
> *********************************************************************
> *******
> +//   Initialization and Unload functions
> +//
> *********************************************************************
> *******
> +
> +
> +EFI_STATUS
> +EFIAPI
> +InitializeFirmwareManagementBBTest (
> +  IN EFI_HANDLE                   ImageHandle,
> +  IN EFI_SYSTEM_TABLE             *SystemTable
> +  )
> +{
> +  EfiInitializeTestLib (ImageHandle, SystemTable);
> +
> +  //
> +  // initialize test utility lib
> +  //
> +
> +  SctInitializeLib (ImageHandle, SystemTable);
> +
> +  mImageHandle = ImageHandle;
> +
> +  return EfiInitAndInstallIHVBBTestInterface (
> +           &ImageHandle,
> +           &gBBTestProtocolField,
> +           gBBTestEntryField,
> +           UnloadFirmwareManagementBBTest,
> +           &gBBTestProtocolInterface
> +           );
> +}
> +
> +EFI_STATUS
> +EFIAPI
> +UnloadFirmwareManagementBBTest (
> +  IN EFI_HANDLE                   ImageHandle
> +  )
> +{
> +  return EfiUninstallAndFreeIHVBBTestInterface (
> +           ImageHandle,
> +           gBBTestProtocolInterface
> +           );
> +}
> +
> +//
> *********************************************************************
> *******
> +//   Support functions
> +//
> *********************************************************************
> *******
> +
> diff --git a/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/FirmwareManagement/BlackBoxTest
> /FirmwareManagementBBTestMain.h b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/FirmwareManagement/BlackBoxTest
> /FirmwareManagementBBTestMain.h
> new file mode 100644
> index 00000000..92ac3e45
> --- /dev/null
> +++ b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/FirmwareManagement/BlackBoxTest
> /FirmwareManagementBBTestMain.h
> @@ -0,0 +1,223 @@
> +/** @file
> +
> +  Copyright 2006 - 2017 Unified EFI, Inc.<BR>
> +  Copyright (c) 2010 - 2017, Dell Inc. All rights reserved.<BR>
> +  Copyright (c) 2019,Microchip Technology Inc.<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
> +  http://opensource.org/licenses/bsd-license.php
> +
> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
> BASIS,
> +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS
> OR IMPLIED.
> +
> +**/
> +/*++
> +
> +Module Name:
> +
> +  FirmwareManagementBBTestMain.h
> +
> +Abstract:
> +
> +  Header file for Firmware Management Protocol test driver.
> +
> +--*/
> +
> +#ifndef _FIRMWARE_MANAGEMENT_BB_TEST_MAIN
> +#define _FIRMWARE_MANAGEMENT_BB_TEST_MAIN
> +
> +#include "Efi.h"
> +#include "Guid.h"
> +#include <Library/EfiTestLib.h>
> +
> +#include <UEFI/Protocol/FirmwareManagement.h>
> +
> +#define EFI_FIRMWARE_MANAGEMENT_PROTOCOL_TEST_REVISION    0x00010000
> +
> +#define IHV_EFI_FIRMWARE_MANAGEMENT_PROTOCOL_GUID \
> +{ 0x941d02a8, 0x49ad, 0x4bda, { 0x9f, 0xae, 0x0a, 0x69, 0x24, 0x54,
> 0x1c, 0x88 } }
> +//
> *********************************************************************
> *******
> +//   Entry GUIDs for Function Test
> +//
> *********************************************************************
> *******
> +
> +#define EFI_FIRMWARE_MANAGEMENT_PROTOCOL_TEST_ENTRY_GUID0101 \
> +{ 0x7ddddd57, 0x68ff, 0x460e, { 0x90, 0xad, 0xa9, 0xd5, 0xf1, 0xf0,
> 0xa0, 0x87 } }
> +
> +#define EFI_FIRMWARE_MANAGEMENT_PROTOCOL_TEST_ENTRY_GUID0102 \
> +{ 0x5b4c24b2, 0x852d, 0x418a, { 0x82, 0x34, 0xc2, 0xc8, 0x63, 0x5e,
> 0x9a, 0x2a } }
> +
> +#define EFI_FIRMWARE_MANAGEMENT_PROTOCOL_TEST_ENTRY_GUID0103 \
> +{ 0x84062e44, 0xdaee, 0x41a5, { 0x94, 0xf8, 0x6d, 0xe0, 0x72, 0x9b,
> 0xfa, 0xb4 } }
> +
> +#define EFI_FIRMWARE_MANAGEMENT_PROTOCOL_TEST_ENTRY_GUID0104 \
> +{ 0xdeb26021, 0xca4e, 0x4876, { 0x90, 0x99, 0xca, 0x7d, 0x77, 0x2c,
> 0x90, 0x1d } }
> +
> +#define EFI_FIRMWARE_MANAGEMENT_PROTOCOL_TEST_ENTRY_GUID0105 \
> +{ 0xaa160ecc, 0xfc2f, 0x4f05, { 0xac, 0x20, 0x4c, 0xed, 0x45, 0xde,
> 0xda, 0xab } }
> +
> +#define EFI_FIRMWARE_MANAGEMENT_PROTOCOL_TEST_ENTRY_GUID0106 \
> +{ 0x7a9a2714, 0xf32b, 0x4083, { 0x90, 0xf2, 0x12, 0x51, 0x1a, 0x87,
> 0x48, 0x1a } }
> +
> +//
> *********************************************************************
> *******
> +//   Entry GUIDs for Conformance Test
> +//
> *********************************************************************
> *******
> +
> +#define EFI_FIRMWARE_MANAGEMENT_PROTOCOL_TEST_ENTRY_GUID0201 \
> +{ 0x54ee347c, 0x10a3, 0x4311, { 0x94, 0x27, 0xa8, 0x97, 0xbf, 0xdc,
> 0x98, 0x8 } }
> +
> +#define EFI_FIRMWARE_MANAGEMENT_PROTOCOL_TEST_ENTRY_GUID0202 \
> +{ 0x68aba93c, 0x1d0c, 0x412f, { 0xb1, 0xe, 0xe3, 0xa4, 0x6, 0xbc,
> 0x42, 0xcf } }
> +
> +#define EFI_FIRMWARE_MANAGEMENT_PROTOCOL_TEST_ENTRY_GUID0203 \
> +{ 0x12834a23, 0x6cef, 0x478e, { 0xaf, 0x48, 0x44, 0xe5, 0x93, 0x40,
> 0xab, 0xe8 } }
> +
> +#define EFI_FIRMWARE_MANAGEMENT_PROTOCOL_TEST_ENTRY_GUID0204 \
> +{ 0xc6dc94b1, 0xb81b, 0x4b85, { 0x8b, 0x7d, 0x8f, 0xbf, 0xa6, 0x8e,
> 0xf3, 0xe5 } }
> +
> +#define EFI_FIRMWARE_MANAGEMENT_PROTOCOL_TEST_ENTRY_GUID0205 \
> +{ 0x3d13f23d, 0x8306, 0x49d4, { 0xa0, 0xe0, 0x9a, 0x9b, 0xf6, 0x89,
> 0x40, 0x3c } }
> +
> +#define EFI_FIRMWARE_MANAGEMENT_PROTOCOL_TEST_ENTRY_GUID0206 \
> +{ 0x24cf9ac2, 0x9abc, 0x4f5c, { 0x9c, 0x7a, 0xbc, 0x22, 0x29, 0xc3,
> 0x2, 0x7f } }
> +
> +//
> *********************************************************************
> *******
> +//   Initializaiton and Unload functions
> +//
> *********************************************************************
> *******
> +
> +EFI_STATUS
> +EFIAPI
> +InitializeFirmwareManagementBBTest (
> +  IN EFI_HANDLE                   ImageHandle,
> +  IN EFI_SYSTEM_TABLE             *SystemTable
> +  );
> +
> +EFI_STATUS
> +EFIAPI
> +UnloadFirmwareManagementBBTest (
> +  IN EFI_HANDLE                   ImageHandle
> +  );
> +
> +//
> +// Test Cases - Unit Test
> +//
> +

The below is commented out, which should be removed before upstream.
> +/*
> +EFI_STATUS
> +BBTestUnitTest (
> +  IN EFI_BB_TEST_PROTOCOL       *This,
> +  IN VOID                       *ClientInterface,
> +  IN EFI_TEST_LEVEL             TestLevel,
> +  IN EFI_HANDLE                 SupportHandle
> +  );
> +*/


> +
> +//
> +// Test Cases - Function
> +//
> +
> +EFI_STATUS
> +BBTestGetImageInfoFunctionTest (
> +  IN EFI_BB_TEST_PROTOCOL       *This,
> +  IN VOID                       *ClientInterface,
> +  IN EFI_TEST_LEVEL             TestLevel,
> +  IN EFI_HANDLE                 SupportHandle
> +  );
> +
> +EFI_STATUS
> +BBTestGetImageFunctionTest (
> +  IN EFI_BB_TEST_PROTOCOL       *This,
> +  IN VOID                       *ClientInterface,
> +  IN EFI_TEST_LEVEL             TestLevel,
> +  IN EFI_HANDLE                 SupportHandle
> +  );
> +
> +EFI_STATUS
> +BBTestSetImageFunctionTest (
> +  IN EFI_BB_TEST_PROTOCOL       *This,
> +  IN VOID                       *ClientInterface,
> +  IN EFI_TEST_LEVEL             TestLevel,
> +  IN EFI_HANDLE                 SupportHandle
> +  );
> +
> +EFI_STATUS
> +BBTestCheckImageFunctionTest (
> +  IN EFI_BB_TEST_PROTOCOL       *This,
> +  IN VOID                       *ClientInterface,
> +  IN EFI_TEST_LEVEL             TestLevel,
> +  IN EFI_HANDLE                 SupportHandle
> +  );
> +
> +EFI_STATUS
> +BBTestGetPackageInfoFunctionTest (
> +  IN EFI_BB_TEST_PROTOCOL       *This,
> +  IN VOID                       *ClientInterface,
> +  IN EFI_TEST_LEVEL             TestLevel,
> +  IN EFI_HANDLE                 SupportHandle
> +  );
> +
> +EFI_STATUS
> +BBTestSetPackageInfoFunctionTest (
> +  IN EFI_BB_TEST_PROTOCOL       *This,
> +  IN VOID                       *ClientInterface,
> +  IN EFI_TEST_LEVEL             TestLevel,
> +  IN EFI_HANDLE                 SupportHandle
> +  );
> +
> +//
> +// Test Cases - Conformance
> +//
> +
> +EFI_STATUS
> +BBTestGetImageInfoConformanceTest (
> +  IN EFI_BB_TEST_PROTOCOL       *This,
> +  IN VOID                       *ClientInterface,
> +  IN EFI_TEST_LEVEL             TestLevel,
> +  IN EFI_HANDLE                 SupportHandle
> +  );
> +
> +EFI_STATUS
> +BBTestGetImageConformanceTest (
> +  IN EFI_BB_TEST_PROTOCOL       *This,
> +  IN VOID                       *ClientInterface,
> +  IN EFI_TEST_LEVEL             TestLevel,
> +  IN EFI_HANDLE                 SupportHandle
> +  );
> +
> +EFI_STATUS
> +BBTestSetImageConformanceTest (
> +  IN EFI_BB_TEST_PROTOCOL       *This,
> +  IN VOID                       *ClientInterface,
> +  IN EFI_TEST_LEVEL             TestLevel,
> +  IN EFI_HANDLE                 SupportHandle
> +  );
> +
> +EFI_STATUS
> +BBTestCheckImageConformanceTest (
> +  IN EFI_BB_TEST_PROTOCOL       *This,
> +  IN VOID                       *ClientInterface,
> +  IN EFI_TEST_LEVEL             TestLevel,
> +  IN EFI_HANDLE                 SupportHandle
> +  );
> +
> +EFI_STATUS
> +BBTestGetPackageInfoConformanceTest (
> +  IN EFI_BB_TEST_PROTOCOL       *This,
> +  IN VOID                       *ClientInterface,
> +  IN EFI_TEST_LEVEL             TestLevel,
> +  IN EFI_HANDLE                 SupportHandle
> +  );
> +
> +EFI_STATUS
> +BBTestSetPackageInfoConformanceTest (
> +  IN EFI_BB_TEST_PROTOCOL       *This,
> +  IN VOID                       *ClientInterface,
> +  IN EFI_TEST_LEVEL             TestLevel,
> +  IN EFI_HANDLE                 SupportHandle
> +  );
> +
> +//
> *********************************************************************
> *******
> +//   Support functions
> +//
> *********************************************************************
> *******
> +
> +#endif
> diff --git a/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/FirmwareManagement/BlackBoxTest
> /Guid.c b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/FirmwareManagement/BlackBoxTest
> /Guid.c
> new file mode 100644
> index 00000000..c33d5b79
> --- /dev/null
> +++ b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/FirmwareManagement/BlackBoxTest
> /Guid.c
> @@ -0,0 +1,63 @@
> +/** @file
> +
> +  Copyright 2006 - 2012 Unified EFI, Inc.<BR>
> +  Copyright (c) 2010 - 2012, Dell Inc. All rights reserved.<BR>
> +  Copyright (c) 2019,Microchip Technology Inc.<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
> +  http://opensource.org/licenses/bsd-license.php
> +
> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
> BASIS,
> +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS
> OR IMPLIED.
> +
> +**/
> +/*++
> +
> + Module Name:
> +
> +   Guid.c
> +
> + Abstract:
> +
> +   GUIDs auto-generated for EFI test assertion.
> +
> +--*/
> +
> +#include "Efi.h"
> +#include "Guid.h"
> +
> +//
> *********************************************************************
> *******
> +//   Function
> +//
> *********************************************************************
> *******
> +
> +EFI_GUID
> gFirmwareManagementBBTestFunctionAssertionGuid001=EFI_TEST_FIRMWAREMA
> NAGEMENTBBTESTFUNCTION_ASSERTION_001_GUID;
> +EFI_GUID
> gFirmwareManagementBBTestFunctionAssertionGuid002=EFI_TEST_FIRMWAREMA
> NAGEMENTBBTESTFUNCTION_ASSERTION_002_GUID;
> +EFI_GUID
> gFirmwareManagementBBTestFunctionAssertionGuid003=EFI_TEST_FIRMWAREMA
> NAGEMENTBBTESTFUNCTION_ASSERTION_003_GUID;
> +
> +//
> *********************************************************************
> *******
> +//   Conformance
> +//
> *********************************************************************
> *******
> +
> +EFI_GUID
> gFirmwareManagementBBTestConformanceSupportGuid001=EFI_TEST_FIRMWAREM
> ANAGEMENTBBTESTCONFORMANCE_SUPPORT_001_GUID;
> +EFI_GUID
> gFirmwareManagementBBTestConformanceSupportGuid002=EFI_TEST_FIRMWAREM
> ANAGEMENTBBTESTCONFORMANCE_SUPPORT_002_GUID;
> +EFI_GUID
> gFirmwareManagementBBTestConformanceSupportGuid003=EFI_TEST_FIRMWAREM
> ANAGEMENTBBTESTCONFORMANCE_SUPPORT_003_GUID;
> +EFI_GUID
> gFirmwareManagementBBTestConformanceSupportGuid004=EFI_TEST_FIRMWAREM
> ANAGEMENTBBTESTCONFORMANCE_SUPPORT_004_GUID;
> +
> +EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid001=EFI_TEST_FIRMWAR
> EMANAGEMENTBBTESTCONFORMANCE_ASSERTION_001_GUID;
> +EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid002=EFI_TEST_FIRMWAR
> EMANAGEMENTBBTESTCONFORMANCE_ASSERTION_002_GUID;
> +EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid003=EFI_TEST_FIRMWAR
> EMANAGEMENTBBTESTCONFORMANCE_ASSERTION_003_GUID;
> +EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid004=EFI_TEST_FIRMWAR
> EMANAGEMENTBBTESTCONFORMANCE_ASSERTION_004_GUID;
> +EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid005=EFI_TEST_FIRMWAR
> EMANAGEMENTBBTESTCONFORMANCE_ASSERTION_005_GUID;
> +EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid006=EFI_TEST_FIRMWAR
> EMANAGEMENTBBTESTCONFORMANCE_ASSERTION_006_GUID;
> +EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid007=EFI_TEST_FIRMWAR
> EMANAGEMENTBBTESTCONFORMANCE_ASSERTION_007_GUID;
> +EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid008=EFI_TEST_FIRMWAR
> EMANAGEMENTBBTESTCONFORMANCE_ASSERTION_008_GUID;
> +EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid009=EFI_TEST_FIRMWAR
> EMANAGEMENTBBTESTCONFORMANCE_ASSERTION_009_GUID;
> +EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid010=EFI_TEST_FIRMWAR
> EMANAGEMENTBBTESTCONFORMANCE_ASSERTION_010_GUID;
> +EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid011=EFI_TEST_FIRMWAR
> EMANAGEMENTBBTESTCONFORMANCE_ASSERTION_011_GUID;
> +EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid012=EFI_TEST_FIRMWAR
> EMANAGEMENTBBTESTCONFORMANCE_ASSERTION_012_GUID;
> +EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid013=EFI_TEST_FIRMWAR
> EMANAGEMENTBBTESTCONFORMANCE_ASSERTION_013_GUID;
> +EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid014=EFI_TEST_FIRMWAR
> EMANAGEMENTBBTESTCONFORMANCE_ASSERTION_014_GUID;
> +EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid015=EFI_TEST_FIRMWAR
> EMANAGEMENTBBTESTCONFORMANCE_ASSERTION_015_GUID;
> +EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid016=EFI_TEST_FIRMWAR
> EMANAGEMENTBBTESTCONFORMANCE_ASSERTION_016_GUID;
> +
> diff --git a/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/FirmwareManagement/BlackBoxTest
> /Guid.h b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/FirmwareManagement/BlackBoxTest
> /Guid.h
> new file mode 100644
> index 00000000..d2b2e51d
> --- /dev/null
> +++ b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/FirmwareManagement/BlackBoxTest
> /Guid.h
> @@ -0,0 +1,153 @@
> +/** @file
> +
> +  Copyright 2006 - 2010 Unified EFI, Inc.<BR>
> +  Copyright (c) 2010, Dell Inc. All rights reserved.<BR>
> +  Copyright (c) 2019,Microchip Technology Inc.<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
> +  http://opensource.org/licenses/bsd-license.php
> +
> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
> BASIS,
> +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS
> OR IMPLIED.
> +
> +**/
> +/*++
> +
> + Module Name:
> +
> +   Guid.h
> +
> + Abstract:
> +
> +   GUIDs auto-generated for EFI test assertion.
> +
> +--*/
> +
> +//
> *********************************************************************
> *******
> +//   Function
> +//
> *********************************************************************
> *******
> +
> +#define EFI_TEST_FIRMWAREMANAGEMENTBBTESTFUNCTION_ASSERTION_001_GUID
> \
> +{ 0xd02b40ae, 0x62f, 0x4155, { 0xbb, 0xdd, 0x4, 0x29, 0x18, 0x94,
> 0xea, 0x31 } }
> +
> +extern EFI_GUID gFirmwareManagementBBTestFunctionAssertionGuid001;
> +
> +#define EFI_TEST_FIRMWAREMANAGEMENTBBTESTFUNCTION_ASSERTION_002_GUID
> \
> +{ 0xff704c46, 0x3999, 0x4a28, { 0xa3, 0x6e, 0x76, 0x8a, 0xb6, 0xad,
> 0x89, 0xd8 } }
> +
> +extern EFI_GUID gFirmwareManagementBBTestFunctionAssertionGuid002;
> +
> +#define EFI_TEST_FIRMWAREMANAGEMENTBBTESTFUNCTION_ASSERTION_003_GUID
> \
> +{ 0x70884539, 0x9a34, 0x4146, { 0x83, 0x3a, 0x4d, 0x89, 0x8b, 0x9c,
> 0x7e, 0xa4 } }
> +
> +extern EFI_GUID gFirmwareManagementBBTestFunctionAssertionGuid003;
> +
> +//
> *********************************************************************
> *******
> +//   Conformance - Function Support Check
> +//
> *********************************************************************
> *******
> +
> +#define
> EFI_TEST_FIRMWAREMANAGEMENTBBTESTCONFORMANCE_SUPPORT_001_GUID \
> +{ 0xd9c7d018, 0x60ba, 0x448d, { 0xb1, 0x3b, 0x88, 0x8b, 0x41, 0xd9,
> 0xdc, 0x9 } };
> +
> +extern EFI_GUID gFirmwareManagementBBTestConformanceSupportGuid001;
> +
> +#define
> EFI_TEST_FIRMWAREMANAGEMENTBBTESTCONFORMANCE_SUPPORT_002_GUID \
> +{ 0x28310f16, 0x690e, 0x44a5, { 0x93, 0x98, 0xe1, 0xcd, 0x6a, 0xb3,
> 0xe1, 0x61 } };
> +
> +extern EFI_GUID gFirmwareManagementBBTestConformanceSupportGuid002;
> +
> +#define
> EFI_TEST_FIRMWAREMANAGEMENTBBTESTCONFORMANCE_SUPPORT_003_GUID \
> +{ 0x92cc940a, 0xdcf8, 0x42a0, { 0x81, 0xa1, 0xd7, 0xdd, 0x43, 0x87,
> 0xbf, 0x6d } };
> +
> +extern EFI_GUID gFirmwareManagementBBTestConformanceSupportGuid003;
> +
> +#define
> EFI_TEST_FIRMWAREMANAGEMENTBBTESTCONFORMANCE_SUPPORT_004_GUID \
> +{ 0x3f910041, 0xcd4d, 0x4b36, { 0xb2, 0x23, 0xfb, 0x16, 0x4e, 0x7e,
> 0x6a, 0x8c } };
> +
> +extern EFI_GUID gFirmwareManagementBBTestConformanceSupportGuid004;
> +
> +//
> *********************************************************************
> *******
> +//   Conformance - Assertion
> +//
> *********************************************************************
> *******
> +
> +#define
> EFI_TEST_FIRMWAREMANAGEMENTBBTESTCONFORMANCE_ASSERTION_001_GUID \
> +{ 0x3789b80e, 0xab70, 0x4dc9, { 0xbb, 0xbd, 0x70, 0x63, 0x76, 0x36,
> 0xab, 0x52 } }
> +
> +extern EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid001;
> +
> +#define
> EFI_TEST_FIRMWAREMANAGEMENTBBTESTCONFORMANCE_ASSERTION_002_GUID \
> +{ 0xca1d7706, 0x256b, 0x464e, { 0xb6, 0xee, 0x50, 0x34, 0x1e, 0xec,
> 0x3c, 0x83 } }
> +
> +extern EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid002;
> +
> +#define
> EFI_TEST_FIRMWAREMANAGEMENTBBTESTCONFORMANCE_ASSERTION_003_GUID \
> +{ 0x3c8d87b2, 0x6a89, 0x4a6c, { 0xbc, 0x75, 0xe6, 0x86, 0xa1, 0x49,
> 0x13, 0xf0 } }
> +
> +extern EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid003;
> +
> +#define
> EFI_TEST_FIRMWAREMANAGEMENTBBTESTCONFORMANCE_ASSERTION_004_GUID \
> +{ 0x88031c96, 0x99bf, 0x4d2c, { 0x9f, 0x57, 0xa7, 0x2, 0x6a, 0xbc,
> 0xd3, 0x51 } }
> +
> +extern EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid004;
> +
> +#define
> EFI_TEST_FIRMWAREMANAGEMENTBBTESTCONFORMANCE_ASSERTION_005_GUID \
> +{ 0x7a386361, 0x3a5d, 0x4e58, { 0x8a, 0x51, 0x4d, 0x93, 0xb6, 0x55,
> 0x95, 0xf4 } }
> +
> +extern EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid005;
> +
> +#define
> EFI_TEST_FIRMWAREMANAGEMENTBBTESTCONFORMANCE_ASSERTION_006_GUID \
> +{ 0xd6a77629, 0x5afd, 0x4854, { 0x87, 0xc8, 0xee, 0x9f, 0xc5, 0x3d,
> 0xbe, 0x3d } }
> +
> +extern EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid006;
> +
> +#define
> EFI_TEST_FIRMWAREMANAGEMENTBBTESTCONFORMANCE_ASSERTION_007_GUID \
> +{ 0x4ea24764, 0xa6b1, 0x43b5, { 0xb8, 0xa0, 0xd3, 0x3f, 0xdc, 0x8b,
> 0xc6, 0xe4 } }
> +
> +extern EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid007;
> +
> +#define
> EFI_TEST_FIRMWAREMANAGEMENTBBTESTCONFORMANCE_ASSERTION_008_GUID \
> +{ 0x712ce1e9, 0x80d1, 0x4168, { 0xb8, 0xd0, 0x74, 0xd1, 0x72, 0x7a,
> 0x2f, 0x25 } }
> +
> +extern EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid008;
> +
> +#define
> EFI_TEST_FIRMWAREMANAGEMENTBBTESTCONFORMANCE_ASSERTION_009_GUID \
> +{ 0xc82d1373, 0x1f87, 0x45f4, { 0xaf, 0xfc, 0x10, 0xa7, 0xf7, 0xb0,
> 0x9c, 0xb0 } }
> +
> +extern EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid009;
> +
> +#define
> EFI_TEST_FIRMWAREMANAGEMENTBBTESTCONFORMANCE_ASSERTION_010_GUID \
> +{ 0x2410a859, 0xdf6f, 0x4857, { 0x92, 0x4a, 0x26, 0x37, 0x7, 0x11,
> 0xf, 0x1c } }
> +
> +extern EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid010;
> +
> +#define
> EFI_TEST_FIRMWAREMANAGEMENTBBTESTCONFORMANCE_ASSERTION_011_GUID \
> +{ 0x3987172c, 0xe6a0, 0x4099, { 0xb1, 0x2b, 0xd8, 0xef, 0xf2, 0x62,
> 0x75, 0x93 } }
> +
> +extern EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid011;
> +
> +#define
> EFI_TEST_FIRMWAREMANAGEMENTBBTESTCONFORMANCE_ASSERTION_012_GUID \
> +{ 0xd6dad28e, 0x7f0f, 0x4f56, { 0x9a, 0x93, 0x14, 0x7d, 0xb3, 0x74,
> 0x0, 0xc9 } }
> +
> +extern EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid012;
> +
> +#define
> EFI_TEST_FIRMWAREMANAGEMENTBBTESTCONFORMANCE_ASSERTION_013_GUID \
> +{ 0xb5288fc3, 0xe906, 0x4468, { 0x83, 0x3d, 0xd4, 0xa6, 0x58, 0xa5,
> 0x4f, 0xbd } }
> +
> +extern EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid013;
> +
> +#define
> EFI_TEST_FIRMWAREMANAGEMENTBBTESTCONFORMANCE_ASSERTION_014_GUID \
> +{ 0x57355301, 0x1343, 0x497f, { 0xbe, 0xe0, 0x8e, 0x5c, 0x27, 0xd2,
> 0x40, 0x25 } }
> +
> +extern EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid014;
> +
> +#define
> EFI_TEST_FIRMWAREMANAGEMENTBBTESTCONFORMANCE_ASSERTION_015_GUID \
> +{ 0xadeab82d, 0x7592, 0x40fe, { 0x87, 0xa8, 0x93, 0x2b, 0xad, 0x97,
> 0xff, 0x5e } }
> +
> +extern EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid015;
> +
> +#define
> EFI_TEST_FIRMWAREMANAGEMENTBBTESTCONFORMANCE_ASSERTION_016_GUID \
> +{ 0x9be658d2, 0x1312, 0x4254, { 0x91, 0x10, 0x59, 0x0, 0xd5, 0xfd,
> 0x6c, 0x6c } }
> +
> +extern EFI_GUID
> gFirmwareManagementBBTestConformanceAssertionGuid016;
> +
> diff --git a/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/FirmwareManagement/BlackBoxTest
> /IhvFirmwareManagementBBTest.inf b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/FirmwareManagement/BlackBoxTest
> /IhvFirmwareManagementBBTest.inf
> new file mode 100644
> index 00000000..7566a044
> --- /dev/null
> +++ b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/FirmwareManagement/BlackBoxTest
> /IhvFirmwareManagementBBTest.inf
> @@ -0,0 +1,52 @@
> +## @file
> +#
> +#  Copyright 2006 - 2012 Unified EFI, Inc.<BR>
> +#  Copyright (c) 2010 - 2012, Dell Inc.  All rights reserved.<BR>
> +#  Copyright (c) 2019,Microchip Technology Inc.<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
> +#  http://opensource.org/licenses/bsd-license.php
> +#
> +#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
> BASIS,
> +#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS
> OR IMPLIED.
> +#
> +##
> +#/*++
> +#
> +# Module Name:
> +#
> +#   FirmwareManagementBBTest.inf
> +#
> +# Abstract:
> +#
> +#   Component description file for IHV Firmware Management Protocol
> Black-Box Test.
> +#
> +#--*/
> +
> +[defines]
> +  INF_VERSION          = 0x00010005
> +  BASE_NAME            = IhvFirmwareManagementBBTest
> +  FILE_GUID            = DB0E842F-201B-4D47-BA74-88602A41C9D2
> +  MODULE_TYPE          = UEFI_DRIVER
> +  COMPONENT_TYPE       = BS_DRIVER
> +  VERSION_STRING       = 1.0
> +  ENTRY_POINT          = InitializeFirmwareManagementBBTest
> +
> +[sources.common]
> +  FirmwareManagementBBTestConformance.c
> +  FirmwareManagementBBTestFunction.c
> +  FirmwareManagementBBTestMain.c
> +  Guid.c
> +
> +[Packages]
> +  MdePkg/MdePkg.dec
> +  SctPkg/SctPkg.dec
> +  SctPkg/UEFI/UEFI.dec
> +
> +[LibraryClasses]
> +  UefiDriverEntryPoint
> +  SctLib
> +  EfiTestLib
> +
> +[Protocols]
> --
> 2.22.0.windows.1
>
>

IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.

      parent reply	other threads:[~2019-08-05 21:08 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-01  7:03 [edk2-test][PATCH V2 1/3] Adding FMP to IHVSCT shrishail
2019-08-01  7:03 ` [edk2-test][PATCH V2 1/3] Adding HII Config Access Protocol shrishail
2019-08-05 21:15   ` Jeff Booher-Kaeding
2019-08-01  7:03 ` [edk2-test][PATCH V2 2/3] Adding FMP to IHVSCT shrishail
2019-08-05 21:23   ` Jeff Booher-Kaeding
2019-08-01  7:03 ` [edk2-test][PATCH V2 2/3] Adding HII " shrishail
2019-08-05 21:21   ` Jeff Booher-Kaeding
2019-08-01  7:03 ` [edk2-test][PATCH V2 3/3] Adding FMP " shrishail
2019-08-05 21:23   ` Jeff Booher-Kaeding
2019-08-01  7:03 ` [edk2-test][PATCH V2 3/3] Adding HII " shrishail
2019-08-05 21:19   ` Jeff Booher-Kaeding
2019-08-05 21:08 ` Jeff Booher-Kaeding [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5260170f0148b7043925454a1d7f6dfcd0e7f6de.camel@arm.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox