REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3837

RISC-V platforms need to support new RISCV_EFI_BOOT_PROTOCOL
to communicate the boot hart ID to the operating system. Add
the required test cases for this protocol.

The specification of the protocol is maintained at:
https://github.com/riscv-non-isa/riscv-uefi

The test case specification is attached in the Bugzilla.

Cc: G Edhaya Chandran <edhaya.chand...@arm.com>
Cc: Barton Gao <gao...@byosoft.com.cn>
Cc: Carolyn Gjertsen <carolyn.gjert...@amd.com>
Cc: Samer El-Haj-Mahmoud <samer.el-haj-mahm...@arm.com>
Cc: Eric Jin <eric....@intel.com>
Cc: Arvin Chen <arvinx.c...@intel.com>
Cc: Supreeth Venkatesh <supreeth.venkat...@amd.com>
Cc: Ard Biesheuvel <a...@kernel.org>
Cc: Heinrich Schuchardt <heinrich.schucha...@canonical.com>
Cc: Abner Chang <abner.ch...@hpe.com>

Signed-off-by: Sunil V L <suni...@ventanamicro.com>
Reviewed-by: Heinrich Schuchardt <heinrich.schucha...@canonical.com>
Tested-by: Heinrich Schuchardt <heinrich.schucha...@canonical.com>
---
 .../EFI/Protocol/RiscV/BlackBoxTest/Guid.c    |  38 ++++
 .../EFI/Protocol/RiscV/BlackBoxTest/Guid.h    |  50 +++++
 .../BlackBoxTest/RiscVBootProtocolBBTest.inf  |  50 +++++
 .../RiscVBootProtocolBBTestConformance.c      | 171 ++++++++++++++++++
 .../RiscVBootProtocolBBTestFunction.c         | 124 +++++++++++++
 .../RiscVBootProtocolBBTestMain.c             | 122 +++++++++++++
 .../RiscVBootProtocolBBTestMain.h             | 112 ++++++++++++
 7 files changed, 667 insertions(+)
 create mode 100644 
uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/RiscV/BlackBoxTest/Guid.c
 create mode 100644 
uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/RiscV/BlackBoxTest/Guid.h
 create mode 100644 
uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/RiscV/BlackBoxTest/RiscVBootProtocolBBTest.inf
 create mode 100644 
uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/RiscV/BlackBoxTest/RiscVBootProtocolBBTestConformance.c
 create mode 100644 
uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/RiscV/BlackBoxTest/RiscVBootProtocolBBTestFunction.c
 create mode 100644 
uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/RiscV/BlackBoxTest/RiscVBootProtocolBBTestMain.c
 create mode 100644 
uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/RiscV/BlackBoxTest/RiscVBootProtocolBBTestMain.h

diff --git 
a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/RiscV/BlackBoxTest/Guid.c 
b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/RiscV/BlackBoxTest/Guid.c
new file mode 100644
index 00000000..693f5a9f
--- /dev/null
+++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/RiscV/BlackBoxTest/Guid.c
@@ -0,0 +1,38 @@
+/** @file
+
+  Copyright (c) 2022, Ventana Micro Systems Inc. All rights reserved.<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"
+
+
+EFI_GUID gGetBootHartIdBBTestConformanceAssertionGuid001 = 
EFI_TEST_RISCV_BOOT_PROTOCOL_BBTESTCONFORMANCE_ASSERTION_001_GUID;
+
+EFI_GUID gGetBootHartIdBBTestConformanceAssertionGuid002 = 
EFI_TEST_RISCV_BOOT_PROTOCOL_BBTESTCONFORMANCE_ASSERTION_002_GUID;
+
+EFI_GUID gGetBootHartIdBBTestConformanceAssertionGuid003 = 
EFI_TEST_RISCV_BOOT_PROTOCOL_BBTESTCONFORMANCE_ASSERTION_003_GUID;
+
+EFI_GUID gGetBootHartIdBBTestFunctionAssertionGuid001 = 
EFI_TEST_RISCV_BOOT_PROTOCOL_BBTESTFUNCTION_ASSERTION_001_GUID;
+
+EFI_GUID gGetBootHartIdBBTestFunctionAssertionGuid002 = 
EFI_TEST_RISCV_BOOT_PROTOCOL_BBTESTFUNCTION_ASSERTION_002_GUID;
diff --git 
a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/RiscV/BlackBoxTest/Guid.h 
b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/RiscV/BlackBoxTest/Guid.h
new file mode 100644
index 00000000..bf527072
--- /dev/null
+++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/RiscV/BlackBoxTest/Guid.h
@@ -0,0 +1,50 @@
+/** @file
+
+  Copyright (c) 2022, Ventana Micro Systems Inc. All rights reserved.<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.
+
+--*/
+
+
+#define EFI_TEST_RISCV_BOOT_PROTOCOL_BBTESTCONFORMANCE_ASSERTION_001_GUID \
+{ 0x5ccf7e22, 0x5ca1, 0x433c, { 0x97, 0xb4, 0xea, 0x3a, 0xb8, 0x49, 0xf7, 0x03 
} }
+
+extern EFI_GUID gGetBootHartIdBBTestConformanceAssertionGuid001;
+
+#define EFI_TEST_RISCV_BOOT_PROTOCOL_BBTESTCONFORMANCE_ASSERTION_002_GUID \
+{ 0xa07c08ba, 0x8581, 0x477a, { 0x85, 0xe2, 0x69, 0x88, 0xa5, 0xb3, 0xd4, 0xec 
} }
+
+extern EFI_GUID gGetBootHartIdBBTestConformanceAssertionGuid002;
+
+#define EFI_TEST_RISCV_BOOT_PROTOCOL_BBTESTCONFORMANCE_ASSERTION_003_GUID \
+{ 0x00b63b3a, 0xd91d, 0x4175, { 0x8c, 0xee, 0xf9, 0xca, 0x63, 0xf5, 0x84, 0x1c 
} }
+
+extern EFI_GUID gGetBootHartIdBBTestConformanceAssertionGuid003;
+
+#define EFI_TEST_RISCV_BOOT_PROTOCOL_BBTESTFUNCTION_ASSERTION_001_GUID \
+{ 0xe3a8b4a8, 0x866c, 0x4513, { 0x86, 0xb3, 0x61, 0x1d, 0x02, 0x52, 0x2f, 0x81 
} }
+
+extern EFI_GUID gGetBootHartIdBBTestFunctionAssertionGuid001;
+
+#define EFI_TEST_RISCV_BOOT_PROTOCOL_BBTESTFUNCTION_ASSERTION_002_GUID \
+{ 0x8fbbf9d8, 0x0ab2, 0x481d, { 0xb5, 0xe0, 0x5f, 0x29, 0x99, 0xd3, 0xcb, 0x34 
} }
+
+extern EFI_GUID gGetBootHartIdBBTestFunctionAssertionGuid002;
diff --git 
a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/RiscV/BlackBoxTest/RiscVBootProtocolBBTest.inf
 
b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/RiscV/BlackBoxTest/RiscVBootProtocolBBTest.inf
new file mode 100644
index 00000000..fc1f3aba
--- /dev/null
+++ 
b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/RiscV/BlackBoxTest/RiscVBootProtocolBBTest.inf
@@ -0,0 +1,50 @@
+## @file
+#
+#  Copyright (c) 2022, Ventana Micro Systems Inc. All rights reserved.<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:
+#
+#   RiscVBootProtocolBBTest.inf
+#
+# Abstract:
+#
+#   Component description file for RISC-V Boot Protocol Black-Box Test.
+#
+#--*/
+
+[defines]
+  INF_VERSION          = 0x00010005
+  BASE_NAME            = RiscVBootProtocolBBTest
+  FILE_GUID            = DC33F790-D1EE-41A7-A114-1DF84FF7110B
+  MODULE_TYPE          = UEFI_DRIVER
+  VERSION_STRING       = 1.0
+  ENTRY_POINT          = InitializeBBTestRiscVBootProtocol
+
+[sources.common]
+  RiscVBootProtocolBBTestConformance.c
+  RiscVBootProtocolBBTestFunction.c
+  RiscVBootProtocolBBTestMain.c
+  Guid.c
+
+[Packages]
+  MdePkg/MdePkg.dec
+  SctPkg/SctPkg.dec
+  SctPkg/UEFI/UEFI.dec
+
+[LibraryClasses]
+  UefiDriverEntryPoint
+  SctLib
+  EfiTestLib
+
+[Protocols]
diff --git 
a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/RiscV/BlackBoxTest/RiscVBootProtocolBBTestConformance.c
 
b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/RiscV/BlackBoxTest/RiscVBootProtocolBBTestConformance.c
new file mode 100644
index 00000000..a7d498a9
--- /dev/null
+++ 
b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/RiscV/BlackBoxTest/RiscVBootProtocolBBTestConformance.c
@@ -0,0 +1,171 @@
+/** @file
+
+  Copyright (c) 2022, Ventana Micro Systems Inc. All rights reserved.<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:
+    RiscVBootProtocolBBTestConformance.c
+
+Abstract:
+    for EFI Driver RISC-V Boot Protocol's Conformance Test
+
+--*/
+#include "SctLib.h"
+#include "RiscVBootProtocolBBTestMain.h"
+
+
+EFI_STATUS
+BBTestGetBootHartIdConformanceTest (
+  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;
+  RISCV_EFI_BOOT_PROTOCOL                      *RiscVBoot;
+
+  //
+  // init
+  //
+  RiscVBoot = (RISCV_EFI_BOOT_PROTOCOL*)ClientInterface;
+
+  //
+  // Get the Standard Library Interface
+  //
+  Status = gtBS->HandleProtocol (
+                   SupportHandle,
+                   &gEfiStandardTestLibraryGuid,
+                   (VOID **) &StandardLib
+                   );
+  if (EFI_ERROR(Status)) {
+    return Status;
+  }
+
+  BBTestGetBootHartIdConformanceTestCheckpoint1 (StandardLib, RiscVBoot);
+
+  BBTestGetBootHartIdConformanceTestCheckpoint2 (StandardLib, RiscVBoot);
+
+  BBTestGetBootHartIdConformanceTestCheckpoint3 (StandardLib, RiscVBoot);
+
+  return EFI_SUCCESS;
+}
+
+EFI_STATUS
+BBTestGetBootHartIdConformanceTestCheckpoint1 (
+  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL    *StandardLib,
+  IN RISCV_EFI_BOOT_PROTOCOL               *RiscVBoot
+  )
+{
+  EFI_STATUS                                  Status;
+  EFI_TEST_ASSERTION                          AssertionType;
+  UINTN                                       hartid;
+
+  //
+  // with "This" pointer being NULL.
+  //
+  Status = RiscVBoot->GetBootHartId (
+                        NULL,
+                        &hartid
+                        );
+  if (EFI_INVALID_PARAMETER == Status) {
+    AssertionType = EFI_TEST_ASSERTION_PASSED;
+  } else {
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+  StandardLib->RecordAssertion (
+                 StandardLib,
+                 AssertionType,
+                 gGetBootHartIdBBTestConformanceAssertionGuid001,
+                 L"RISCV_EFI_BOOT_PROTOCOL - GetBootHartId() returns 
EFI_INVALID_PARAMETER with This pointer as NULL.",
+                 L"%a:%d: Status - %r",
+                 __FILE__,
+                 (UINTN)__LINE__,
+                 Status
+                 );
+
+  return EFI_SUCCESS;
+}
+
+EFI_STATUS
+BBTestGetBootHartIdConformanceTestCheckpoint2 (
+  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL    *StandardLib,
+  IN RISCV_EFI_BOOT_PROTOCOL               *RiscVBoot
+  )
+{
+  EFI_STATUS                                  Status;
+  EFI_TEST_ASSERTION                          AssertionType;
+  UINTN                                       hartid;
+  RISCV_EFI_BOOT_PROTOCOL                     protocol;
+
+  //
+  // with "This" pointer being some thing other than located protocol.
+  //
+  Status = RiscVBoot->GetBootHartId (
+                        &protocol,
+                        &hartid
+                        );
+  if (EFI_INVALID_PARAMETER == Status) {
+    AssertionType = EFI_TEST_ASSERTION_PASSED;
+  } else {
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+  StandardLib->RecordAssertion (
+                 StandardLib,
+                 AssertionType,
+                 gGetBootHartIdBBTestConformanceAssertionGuid001,
+                 L"RISCV_EFI_BOOT_PROTOCOL - GetBootHartId() returns 
EFI_INVALID_PARAMETER with invalid This pointer.",
+                 L"%a:%d: Status - %r",
+                 __FILE__,
+                 (UINTN)__LINE__,
+                 Status
+                 );
+
+  return EFI_SUCCESS;
+}
+
+EFI_STATUS
+BBTestGetBootHartIdConformanceTestCheckpoint3 (
+  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL    *StandardLib,
+  IN RISCV_EFI_BOOT_PROTOCOL               *RiscVBoot
+  )
+{
+  EFI_STATUS                                  Status;
+  EFI_TEST_ASSERTION                          AssertionType;
+
+  //
+  // with BootHartId as NULL pointer.
+  //
+  Status = RiscVBoot->GetBootHartId (
+                        RiscVBoot,
+                        NULL
+                        );
+  if (EFI_INVALID_PARAMETER == Status) {
+    AssertionType = EFI_TEST_ASSERTION_PASSED;
+  } else {
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+  StandardLib->RecordAssertion (
+                 StandardLib,
+                 AssertionType,
+                 gGetBootHartIdBBTestConformanceAssertionGuid001,
+                 L"RISCV_EFI_BOOT_PROTOCOL - GetBootHartId() returns 
EFI_INVALID_PARAMETER with NULL BootHartId pointer.",
+                 L"%a:%d: Status - %r",
+                 __FILE__,
+                 (UINTN)__LINE__,
+                 Status
+                 );
+
+  return EFI_SUCCESS;
+}
diff --git 
a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/RiscV/BlackBoxTest/RiscVBootProtocolBBTestFunction.c
 
b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/RiscV/BlackBoxTest/RiscVBootProtocolBBTestFunction.c
new file mode 100644
index 00000000..c991223e
--- /dev/null
+++ 
b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/RiscV/BlackBoxTest/RiscVBootProtocolBBTestFunction.c
@@ -0,0 +1,124 @@
+/** @file
+
+  Copyright (c) 2022, Ventana Micro Systems Inc. All rights reserved.<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:
+    RiscVBootProtocolBBTestFunction.c
+
+Abstract:
+    for EFI Driver RISC-V Boot Protocol's function Test
+
+--*/
+#include "SctLib.h"
+#include "RiscVBootProtocolBBTestMain.h"
+
+EFI_STATUS
+BBTestGetBootHartIdFunctionTest (
+  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;
+  RISCV_EFI_BOOT_PROTOCOL               *RiscVBoot;
+
+  //
+  // init
+  //
+  RiscVBoot = (RISCV_EFI_BOOT_PROTOCOL*)ClientInterface;
+
+  //
+  // Get the Standard Library Interface
+  //
+  Status = gtBS->HandleProtocol (
+                   SupportHandle,
+                   &gEfiStandardTestLibraryGuid,
+                   (VOID **) &StandardLib
+                   );
+  if (EFI_ERROR(Status)) {
+    return Status;
+  }
+
+  BBTestGetBootHartIdFunctionTestCheckpoint1 (StandardLib, RiscVBoot);
+
+  return EFI_SUCCESS;
+}
+
+
+EFI_STATUS
+BBTestGetBootHartIdFunctionTestCheckpoint1 (
+  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL    *StandardLib,
+  IN RISCV_EFI_BOOT_PROTOCOL               *RiscVBoot
+  )
+{
+  EFI_STATUS                            Status;
+  EFI_TEST_ASSERTION                    AssertionType;
+  UINTN                                        hartid1 = 0xdead;
+  UINTN                                        hartid2 = 0xbeef;
+
+
+  //
+  // with correct This and BoothartId pointers.
+  //
+
+  Status = RiscVBoot->GetBootHartId (
+                        RiscVBoot,
+                        &hartid1
+                        );
+  if (EFI_SUCCESS == Status) {
+    AssertionType = EFI_TEST_ASSERTION_PASSED;
+  } else {
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+  StandardLib->RecordAssertion (
+                 StandardLib,
+                 AssertionType,
+                 gGetBootHartIdBBTestFunctionAssertionGuid001,
+                 L"RISCV_EFI_BOOT_PROTOCOL.GetBootHartId - GetBootHartId() 
returns EFI_SUCCESS with valid parameters.",
+                 L"%a:%d: Status - %r",
+                 __FILE__,
+                 (UINTN)__LINE__,
+                 Status
+                 );
+  //
+  // call again with correct This and BoothartId pointers to ensure hartid is 
not changed.
+  //
+
+  Status = RiscVBoot->GetBootHartId (
+                        RiscVBoot,
+                        &hartid2
+                        );
+  if (EFI_SUCCESS == Status) {
+    AssertionType = EFI_TEST_ASSERTION_PASSED;
+    if (hartid1 != hartid2) {
+      AssertionType = EFI_TEST_ASSERTION_FAILED;
+    }
+  } else {
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+  StandardLib->RecordAssertion (
+                 StandardLib,
+                 AssertionType,
+                 gGetBootHartIdBBTestFunctionAssertionGuid002,
+                 L"RISCV_EFI_BOOT_PROTOCOL.GetBootHartId - GetBootHartId() 
returned same hartid when called twice.",
+                 L"%a:%d: Status - %r",
+                 __FILE__,
+                 (UINTN)__LINE__,
+                 Status
+                 );
+  return EFI_SUCCESS;
+
+  }
diff --git 
a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/RiscV/BlackBoxTest/RiscVBootProtocolBBTestMain.c
 
b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/RiscV/BlackBoxTest/RiscVBootProtocolBBTestMain.c
new file mode 100644
index 00000000..f7ecf020
--- /dev/null
+++ 
b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/RiscV/BlackBoxTest/RiscVBootProtocolBBTestMain.c
@@ -0,0 +1,122 @@
+/** @file
+
+  Copyright (c) 2022, Ventana Micro Systems Inc. All rights reserved.<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:
+
+  RiscVBootBBTestMain.c
+
+Abstract:
+
+  Test Driver of RISC-V Boot Protocol
+
+--*/
+
+#include "SctLib.h"
+#include "RiscVBootProtocolBBTestMain.h"
+
+#define RISCV_EFI_BOOT_PROTOCOL_TEST_REVISION    0x00010000
+
+//
+// Global variables
+//
+
+EFI_HANDLE mImageHandle;
+
+
+EFI_BB_TEST_PROTOCOL_FIELD gBBTestProtocolField = {
+  RISCV_EFI_BOOT_PROTOCOL_TEST_REVISION,
+  RISCV_EFI_BOOT_PROTOCOL_GUID,
+  L"RISC-V Boot Protocol Test",
+  L"UEFI RISC-V Boot Protocol Black-Box Test"
+};
+
+EFI_GUID gSupportProtocolGuid[] = {
+  EFI_STANDARD_TEST_LIBRARY_GUID,
+  EFI_NULL_GUID
+};
+
+EFI_BB_TEST_ENTRY_FIELD gBBTestEntryField[] = {
+  {
+    RISCV_EFI_BOOT_PROTOCOL_TEST_ENTRY_GUID0101,
+    L"GetBootHartIdFunction",
+    L"Function test for RISC-V Boot Protocol GetBootHartId().",
+    EFI_TEST_LEVEL_MINIMAL,
+    gSupportProtocolGuid,
+    EFI_TEST_CASE_AUTO,
+    BBTestGetBootHartIdFunctionTest
+  },
+  {
+    RISCV_EFI_BOOT_PROTOCOL_TEST_ENTRY_GUID0201,
+    L"GetBootHartIdConformance",
+    L"Conformance test for RISC-V Boot Protocol GetBootHartId().",
+    EFI_TEST_LEVEL_MINIMAL,
+    gSupportProtocolGuid,
+    EFI_TEST_CASE_AUTO,
+    BBTestGetBootHartIdConformanceTest
+  },
+  0
+};
+
+EFI_BB_TEST_PROTOCOL                  *gBBTestProtocolInterface;
+
+//
+// Unload function
+//
+
+EFI_STATUS
+EFIAPI
+UnloadBBTestRiscVBootProtocol (
+  IN EFI_HANDLE                   ImageHandle
+  );
+
+
+EFI_STATUS
+EFIAPI
+InitializeBBTestRiscVBootProtocol (
+  IN EFI_HANDLE                   ImageHandle,
+  IN EFI_SYSTEM_TABLE             *SystemTable
+  )
+{
+  EfiInitializeTestLib (ImageHandle, SystemTable);
+
+  //
+  // initialize test utility lib
+  //
+
+  SctInitializeLib (ImageHandle, SystemTable);
+
+  mImageHandle = ImageHandle;
+
+  return EfiInitAndInstallBBTestInterface (
+           &ImageHandle,
+           &gBBTestProtocolField,
+           gBBTestEntryField,
+           UnloadBBTestRiscVBootProtocol,
+           &gBBTestProtocolInterface
+           );
+}
+
+
+EFI_STATUS
+EFIAPI
+UnloadBBTestRiscVBootProtocol (
+  IN EFI_HANDLE                   ImageHandle
+  )
+{
+  return EfiUninstallAndFreeBBTestInterface (
+           ImageHandle,
+           gBBTestProtocolInterface
+           );
+}
diff --git 
a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/RiscV/BlackBoxTest/RiscVBootProtocolBBTestMain.h
 
b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/RiscV/BlackBoxTest/RiscVBootProtocolBBTestMain.h
new file mode 100644
index 00000000..d9dc4018
--- /dev/null
+++ 
b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/RiscV/BlackBoxTest/RiscVBootProtocolBBTestMain.h
@@ -0,0 +1,112 @@
+/** @file
+
+  Copyright (c) 2022, Ventana Micro Systems Inc. All rights reserved.<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:
+
+  RiscVBootProtocolBBTestMain.h
+
+Abstract:
+
+  Test Driver of RISC-V Boot Protocol header file
+
+--*/
+
+#ifndef _RISCV_BOOT_PROTOCOL_BB_TEST_MAIN_H
+#define _RISCV_BOOT_PROTOCOL_BB_TEST_MAIN_H
+
+
+#include "Efi.h"
+#include <Library/EfiTestLib.h>
+#include <UEFI/Protocol/RiscVBoot.h>
+#include "Guid.h"
+
+
+//
+// One private signature
+//
+#define UEFI_SCTT_TABLE_SIGNATURE    EFI_SIGNATURE_32 ('S', 'C', 'T', 'T')
+
+//
+// Entry GUIDs for Func Test
+//
+#define RISCV_EFI_BOOT_PROTOCOL_TEST_ENTRY_GUID0101 \
+{0xa17fc0c9, 0x82d8, 0x499f, { 0x81, 0x03, 0xe1, 0x3c, 0x7d, 0x08, 0xed, 0x57 
} }
+
+//
+// Entry GUIDs for Conf Test
+//
+#define RISCV_EFI_BOOT_PROTOCOL_TEST_ENTRY_GUID0201 \
+{0x69378fba, 0x4f73, 0x4632, { 0xad, 0x1e, 0x5b, 0x1c, 0x18, 0x84, 0x99, 0x88 
} }
+
+
+
+EFI_STATUS
+EFIAPI
+InitializeBBTestRiscVBootProtocol (
+  IN EFI_HANDLE                   ImageHandle,
+  IN EFI_SYSTEM_TABLE             *SystemTable
+  );
+
+EFI_STATUS
+EFIAPI
+UnloadBBTestRiscVBootProtocol (
+  IN EFI_HANDLE                   ImageHandle
+  );
+
+//
+// Prototypes: Test Cases
+//
+
+EFI_STATUS
+BBTestGetBootHartIdConformanceTest (
+  IN EFI_BB_TEST_PROTOCOL       *This,
+  IN VOID                       *ClientInterface,
+  IN EFI_TEST_LEVEL             TestLevel,
+  IN EFI_HANDLE                 SupportHandle
+  );
+
+EFI_STATUS
+BBTestGetBootHartIdConformanceTestCheckpoint1 (
+  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL    *StandardLib,
+  IN RISCV_EFI_BOOT_PROTOCOL               *RiscVBoot
+  );
+
+EFI_STATUS
+BBTestGetBootHartIdConformanceTestCheckpoint2 (
+  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL    *StandardLib,
+  IN RISCV_EFI_BOOT_PROTOCOL               *RiscVBoot
+  );
+
+EFI_STATUS
+BBTestGetBootHartIdConformanceTestCheckpoint3 (
+  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL    *StandardLib,
+  IN RISCV_EFI_BOOT_PROTOCOL               *RiscVBoot
+  );
+
+EFI_STATUS
+BBTestGetBootHartIdFunctionTest (
+  IN EFI_BB_TEST_PROTOCOL       *This,
+  IN VOID                       *ClientInterface,
+  IN EFI_TEST_LEVEL             TestLevel,
+  IN EFI_HANDLE                 SupportHandle
+  );
+
+EFI_STATUS
+BBTestGetBootHartIdFunctionTestCheckpoint1 (
+  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL    *StandardLib,
+  IN RISCV_EFI_BOOT_PROTOCOL               *RiscVBoot
+  );
+
+#endif
-- 
2.25.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#90390): https://edk2.groups.io/g/devel/message/90390
Mute This Topic: https://groups.io/mt/91642396/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to