[edk2-devel] [edk2-test PATCH v1 2/2] SctPkg: Enable RISCV64 support using AARCH64 sources

Leif Lindholm leif at nuviainc.com
Wed Dec 2 12:04:36 UTC 2020


On Wed, Dec 02, 2020 at 00:17:52 +0800, Daniel Schaefer wrote:
> REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3042
> 
> TODO: Need to check whether we can avoid copying Aarch64 sources.
> 
> Cc: Leif Lindholm <leif at nuviainc.com>
> Cc: Heinrich Schuchardt <xypron.glpk at gmx.de>
> Cc: Abner Chang <abner.chang at hpe.com>
> Cc: Gilbert Chen <gilbert.chen at hpe.com>
> Cc: Eric Jin <eric.jin at intel.com>
> Cc: G Edhaya Chandran <Edhaya.Chandran at arm.com>
> Cc: Barton Gao <gaojie at byosoft.com.cn>
> Cc: Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud at arm.com>
> Signed-off-by: Daniel Schaefer <daniel.schaefer at hpe.com>
> ---
>  uefi-sct/SctPkg/Library/SctLib/Riscv64/SctLibPlat.h                                                                        |  32 +++
>  uefi-sct/SctPkg/Library/SctLib/Riscv64/initplat.c                                                                          |  45 ++++
>  uefi-sct/SctPkg/SCRT/SCRTApp/Riscv64/GoVirtual.S                                                                           |  45 ++++
>  uefi-sct/SctPkg/SCRT/SCRTApp/Riscv64/VirtualMemory.c                                                                       | 182 +++++++++++++
>  uefi-sct/SctPkg/SCRT/SCRTDriver/Riscv64/Debug.c                                                                            |  88 +++++++
>  uefi-sct/SctPkg/SCRT/SCRTDriver/Riscv64/Dump.c                                                                             |  68 +++++
>  uefi-sct/SctPkg/SCRT/SCRTDriver/Riscv64/Io.c                                                                               | 134 ++++++++++
>  uefi-sct/SctPkg/SCRT/SCRTDriver/Riscv64/Io.h                                                                               |  48 ++++
>  uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Riscv64/DebugSupportBBTestCacheFunction.c             | 137 ++++++++++
>  uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Riscv64/DebugSupportBBTestExceptionCallbackFunction.c | 276 ++++++++++++++++++++
>  uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Riscv64/PlatformIsa.c                                 |  30 +++
>  uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/UsbHc/BlackBoxTest/Riscv64/TimerInterrupt.c                                     |  51 ++++
>  uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/Riscv64/EntsLibPlat.h                                         |  55 ++++
>  uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/Riscv64/InitPlat.c                                            |  55 ++++
>  14 files changed, 1246 insertions(+)
> 
> diff --git a/uefi-sct/SctPkg/Library/SctLib/Riscv64/SctLibPlat.h b/uefi-sct/SctPkg/Library/SctLib/Riscv64/SctLibPlat.h
> new file mode 100644
> index 00000000..ee7c656b
> --- /dev/null
> +++ b/uefi-sct/SctPkg/Library/SctLib/Riscv64/SctLibPlat.h
> @@ -0,0 +1,32 @@
> +/** @file
> +
> +  Copyright 2006 - 2012 Unified EFI, Inc.<BR>
> +  Copyright (c) 2011 - 2012, ARM Ltd. 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:
> +
> +  SctLibPlat.h
> +
> +Abstract:
> +
> +  AArch64 specific defines

*cough*

> +
> +--*/
> +
> +#ifndef _EFI_LIB_PLAT_H_
> +#define _EFI_LIB_PLAT_H_

No leading _ in macros.

> +
> +#define MIN_ALIGNMENT_SIZE  8
> +
> +#endif
> diff --git a/uefi-sct/SctPkg/Library/SctLib/Riscv64/initplat.c b/uefi-sct/SctPkg/Library/SctLib/Riscv64/initplat.c
> new file mode 100644
> index 00000000..a48bb2f3
> --- /dev/null
> +++ b/uefi-sct/SctPkg/Library/SctLib/Riscv64/initplat.c
> @@ -0,0 +1,45 @@
> +/** @file
> +
> +  Copyright 2006 - 2012 Unified EFI, Inc.<BR>
> +  Copyright (c) 2011 - 2012, ARM Ltd. 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:
> +
> +  initplat.c
> +
> +Abstract:
> +
> +  Math routines for compatibility with native EFI library routines.
> +
> +--*/
> +
> +#include "SctLibInternal.h"
> +
> +VOID
> +InitializeLibPlatform (
> +    IN EFI_HANDLE           ImageHandle,
> +    IN EFI_SYSTEM_TABLE     *SystemTable
> +    )
> +
> +{
> +  // No platform-specific initializations
> +}
> +
> +UINT64
> +SctReadTsc (
> +  VOID
> +  )
> +{
> +  return 0;
> +}
> diff --git a/uefi-sct/SctPkg/SCRT/SCRTApp/Riscv64/GoVirtual.S b/uefi-sct/SctPkg/SCRT/SCRTApp/Riscv64/GoVirtual.S
> new file mode 100644
> index 00000000..8bc2c624
> --- /dev/null
> +++ b/uefi-sct/SctPkg/SCRT/SCRTApp/Riscv64/GoVirtual.S
> @@ -0,0 +1,45 @@
> +## @file
> +#
> +#  Copyright 2010 - 2012 Unified EFI, Inc.<BR>
> +#  Copyright (c) 2012, ARM Ltd. All rights reserved.<BR>
> +#  Copyright (c) 2020, Hewlett Packard Enterprise Development LP.<BR>
> +#
> +#  This program and the accompanying materials
> +#  are licensed and made available under the terms and conditions of the BSD License
> +#  which accompanies this distribution.  The full text of the license may be found at 
> +#  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:
> +#
> +#  GoVirtual.S
> +#
> +#--*/
> +#start of the code section
> +.text
> +/* FIXME: Should alignment be different on Aarch64? */

1) FIXME
2) Aarch64.

> +.align 3
> +
> +.global JumpToTestFunc
> +.type JumpToTestFunc, %function
> +
> +#------------------------------------------------------------------------------
> +# VOID
> +# JumpToTestFunc (
> +#   IN  UINTN  FuncPointer,
> +#   IN  UNITN  ConfigInfo
> +#   )
> +# TODO: Make sure this code is correct

No TODO.
Should this set really be called an RFC?

> +JumpToTestFunc:
> +	mv x2, x0
> +	mv x0, x1
> +
> +	// Jump to Virtual function
> +	jalr x2
> diff --git a/uefi-sct/SctPkg/SCRT/SCRTApp/Riscv64/VirtualMemory.c b/uefi-sct/SctPkg/SCRT/SCRTApp/Riscv64/VirtualMemory.c
> new file mode 100644
> index 00000000..397b3514
> --- /dev/null
> +++ b/uefi-sct/SctPkg/SCRT/SCRTApp/Riscv64/VirtualMemory.c
> @@ -0,0 +1,182 @@
> +/** @file
> +
> +  Copyright 2006 - 2012 Unified EFI, Inc.<BR>
> +  Copyright (c) 2012, ARM Ltd. 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:
> +
> +  VirtualMemory.c
> +
> +--*/
> +
> +#include "SCRTApp.h"
> +
> +#define VIRT_TO_PHYS_OFFSET       (0x80000000)     //2G
> +
> +BOOLEAN     HighAddress = FALSE;
> +UINTN       PageTable   = 0;
> +
> +
> +VOID
> +ConvertRuntimeFuncPtr (
> +  IN OUT UINTN      *VirtualFunc
> +  )
> +/*++
> +
> +Routine Description:
> +
> +  Change RuntimeTestFunc physical address to virtual address
> +
> +Arguments:
> +
> +  VirtualFunc  - On input, RuntimeTestFunc physical address.
> +                 On output, RuntimeTest virtual address.
> +
> +Returns:
> +
> +  NONE
> +
> +--*/
> +{
> +	/*Note: It is presumed that on ARM v5, V6 and V7 architectures
> +	 * the MMU is configured and enabled in PEI phase. As VirtualFunc
> +	 * is already mapped to virtual memory, don't have to do anything here.
> +	 */
> +  /* FIXME: Is it the same on ARM v8? */

FIXME?
(Even if it's copied, it's wrong :)
ARM in general.

> +}
> +
> +
> +EFI_STATUS
> +DoMemoryAllocation (
> +  IN UINTN PhysicalFunc
> +  )
> +/*++
> +
> +Routine Description:
> +
> +  Allocate memory and create the PageTable to set up physical-virtual map.
> +
> +Arguments:
> +
> +  PhysicalFunc  - Physical address where RuntimeTestFunc locates.
> +
> +Returns:
> +
> +  EFI_STATUS
> +
> +--*/
> +{
> +  EFI_STATUS                  Status;
> +  EFI_PHYSICAL_ADDRESS        AllocateMemory;
> +
> +  //create new page tables or use existing page tables.
> +  //
> +  // Allocate PageTable memory close to this Application image location in
> +  // the system memory. In this way, it is safe for page table memory.
> +  //
> +  AllocateMemory = PhysicalFunc;
> +
> +  Status = tBS->AllocatePages (
> +                  AllocateMaxAddress,
> +                  EfiRuntimeServicesData,
> +                  1,
> +                  &AllocateMemory
> +                  );
> +
> +  if (EFI_ERROR(Status)) {
> +    return Status;
> +  }
> +
> +  PageTable = (UINTN)AllocateMemory;
> +  return EFI_SUCCESS;
> +}
> +
> +
> +VOID
> +PrepareVirtualAddressMap (
> +  IN UINTN                       MemoryMapSize,
> +  IN UINTN                       DescriptorSize,
> +  IN EFI_MEMORY_DESCRIPTOR       *MemoryMap,
> +  IN EFI_MEMORY_DESCRIPTOR       *VirtualMemoryMap,
> +  IN OUT UINTN                   *VirtualMapSize
> +  )
> +/*++
> +
> +Routine Description:
> +
> +  Construct VirtualAddressMap from physical address to virtual address
> +
> +Arguments:
> +
> +  MemoryMapSize     - The size, in bytes, of the MemoryMap buffer
> +  DescriptorSize    - The size, in bytes, of an individual EFI_MEMORY_DESCRIPTOR
> +  MemoryMap         - A pointer to the current memory map
> +  VirtualMemoryMap  - A pointer to the modified virtual memory map
> +  VirtualMapSize    - A pointer to the size, in bytes, of the VirtualMemoryMap buffer
> +
> +Returns:
> +
> +  NONE
> +
> +--*/
> +{
> +  UINTN    Index;
> +  *VirtualMapSize        = 0;
> +
> +  //
> +  // Copy entries that need runtime mapping to construct virtualMemoryMap
> +  //
> +  for (Index = 0; Index < (MemoryMapSize / DescriptorSize); Index++) {
> +    if ((MemoryMap->Attribute & EFI_MEMORY_RUNTIME) == EFI_MEMORY_RUNTIME) {
> +      SctCopyMem ((VOID *) VirtualMemoryMap, (VOID *) MemoryMap, DescriptorSize);
> +      VirtualMemoryMap->VirtualStart  = VirtualMemoryMap->PhysicalStart;
> +      *VirtualMapSize += DescriptorSize;
> +      VirtualMemoryMap = NextMemoryDescriptor (VirtualMemoryMap, DescriptorSize);
> +    }
> +
> +    MemoryMap = NextMemoryDescriptor (MemoryMap, DescriptorSize);
> +  }
> +}
> +
> +
> +
> +VOID
> +JumpVirtualMode(
> +  IN UINTN VirtualFunc,
> +  IN UINTN HandOffAddr
> +  )
> +/*++
> +
> +Routine Description:
> +
> +  Enable virtual addressing mode, and jump to RuntimeTestFunc in virtual address
> +
> +Arguments:
> +
> +  VirtualFunc  - RuntimeTestFunc virtual address
> +  HandOffAddr  - Configuration Data Address
> +
> +Returns:
> +
> +  NONE
> +
> +--*/
> +{
> +  //
> +  // Note: It is assumed that the MMU and page tables are configured on ARM platforms
> +  // based on ARM v5 v6 and v7 architecture.
> +  //
> +  /* FIXME: Is it the same on ARM v8? */
> +	JumpToTestFunc(VirtualFunc, HandOffAddr);

Again.

> +}
> diff --git a/uefi-sct/SctPkg/SCRT/SCRTDriver/Riscv64/Debug.c b/uefi-sct/SctPkg/SCRT/SCRTDriver/Riscv64/Debug.c
> new file mode 100644
> index 00000000..6161d596
> --- /dev/null
> +++ b/uefi-sct/SctPkg/SCRT/SCRTDriver/Riscv64/Debug.c
> @@ -0,0 +1,88 @@
> +/** @file
> +
> +  Copyright 2006 - 2012 Unified EFI, Inc.<BR>
> +  Copyright (c) 2011 - 2012 ARM Ltd. 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:
> +
> +  Debug.c
> +
> +--*/
> +
> +#include "SCRTDriver.h"
> +
> +UINTN                 mHandOffPtr        =  0;
> +EFI_PHYSICAL_ADDRESS  mIoPortSpaceAddress = 0;
> +
> +
> +EFI_STATUS
> +ConsumeHandOff (
> +  IN  UINTN         HandOffAddr,
> +  OUT CONF_INFO     *ConfigData
> +  )
> +{
> +   RUNTIME_HANDOFF   *HandOffPtr;
> +   //
> +   // First fix the memory address of hand off data.
> +   //
> +   FixAddress(&HandOffAddr);
> +   mHandOffPtr = HandOffAddr;
> +   HandOffPtr  = (RUNTIME_HANDOFF*)mHandOffPtr;
> +   *ConfigData =  HandOffPtr->ConfigureInfo;
> +
> +   if (!HandOffPtr->DebuggerInfo.MmioFlag){
> +     //
> +     // If debug port is I/O mapped, fix IoBase Address.
> +     //
> +     FixAddress(&HandOffPtr->DebuggerInfo.IoBase);
> +     mIoPortSpaceAddress = HandOffPtr->DebuggerInfo.IoBase;

Looks redundant on !x86

> +   } else {
> +     //
> +     // If debug port is MMIO, fix MmioBase Address.
> +     //
> +     FixAddress(&HandOffPtr->DebuggerInfo.MmioBase);
> +   }
> +
> +   return EFI_SUCCESS;
> +}
> +
> +
> +EFI_STATUS
> +Send2UART (
> +  CHAR8                *String
> +  )
> +{
> +  //
> +  // TODO: On ARM platforms use platform specific functions to
> +  // write the data to UART.
> +  //

Ye gods...

> +  return EFI_SUCCESS;
> +}
> +
> +
> +
> +EFI_STATUS
> +DebugWorker (
> +  IN CHAR8    *String
> +  )
> +{
> +  EFI_STATUS    Status;
> +
> +  //
> +  // Send text message to registered UART.
> +  //
> +  Status = Send2UART(String);
> +  return Status;
> +}
> diff --git a/uefi-sct/SctPkg/SCRT/SCRTDriver/Riscv64/Dump.c b/uefi-sct/SctPkg/SCRT/SCRTDriver/Riscv64/Dump.c
> new file mode 100644
> index 00000000..cc8d9869
> --- /dev/null
> +++ b/uefi-sct/SctPkg/SCRT/SCRTDriver/Riscv64/Dump.c
> @@ -0,0 +1,68 @@
> +/** @file
> +
> +  Copyright 2006 - 2012 Unified EFI, Inc.<BR>
> +  Copyright (c) 2011 - 2012 ARM Ltd. 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:
> +
> +  Dump.c
> +
> +--*/
> +
> +#include "SCRTDriver.h"
> +
> +VOID
> +DumpRuntimeTable()
> +{
> +  SctAPrint ("\n================Dump Runtime Table===============\n");
> +  SctAPrint ("Header Signature = 0x%x\n", VRT->Hdr.Signature);
> +
> +  SctAPrint ("\n================GetTime Service==============\n");
> +  SctAPrint ("GetTime @ 0x%x\n", VRT->GetTime);
> +
> +  SctAPrint ("\n================SetTime Service==============\n");
> +  SctAPrint ("SetTime @ 0x%x\n", VRT->SetTime);
> +
> +  SctAPrint ("\n================GetWakeupTime Service==============\n");
> +  SctAPrint ("GetWakeupTime @ 0x%x\n", VRT->GetWakeupTime);
> +
> +  SctAPrint ("\n================SetWakeupTime Service==============\n");
> +  SctAPrint ("SetWakeupTime @ 0x%x\n", VRT->SetWakeupTime);
> +
> +  SctAPrint ("\n================GetVariable Service==============\n");
> +  SctAPrint ("GetVariable @ 0x%x\n", VRT->GetVariable);
> +
> +  SctAPrint ("\n================GetNextVariableName Service==============\n");
> +  SctAPrint ("GetNextVariableName @ 0x%x\n", VRT->GetNextVariableName);
> +
> +  SctAPrint ("\n================SetVariable Service==============\n");
> +  SctAPrint ("SetVariable @ 0x%x\n", VRT->SetVariable);
> +
> +  SctAPrint ("\n================GetNextHighMonotonicCount Service==============\n");
> +  SctAPrint ("GetNextHighMonotonicCount @ 0x%x\n", VRT->GetNextHighMonotonicCount);
> +
> +  SctAPrint ("\n================ResetSystem Service==============\n");
> +  SctAPrint ("ResetSystem @ 0x%x\n", VRT->ResetSystem);
> +#if 0

Better to delete if not usable, but why disabled for AArch64 in the
first place?

> +  SctAPrint ("\n================UpdateCapsule Service==============\n");
> +  SctAPrint ("UpdateCapsule @ 0x%x\n", VRT->UpdateCapsule);
> +
> +  SctAPrint ("\n================QueryCapsuleCapabilities Service==============\n");
> +  SctAPrint ("QueryCapsuleCapabilities @ 0x%x\n", VRT->QueryCapsuleCapabilities);
> +
> +  SctAPrint ("\n================QueryVariableInfo Service==============\n");
> +  SctAPrint ("QueryVariableInfo @ 0x%x\n", VRT->QueryVariableInfo);
> +#endif
> +}
> diff --git a/uefi-sct/SctPkg/SCRT/SCRTDriver/Riscv64/Io.c b/uefi-sct/SctPkg/SCRT/SCRTDriver/Riscv64/Io.c
> new file mode 100644
> index 00000000..b925e151
> --- /dev/null
> +++ b/uefi-sct/SctPkg/SCRT/SCRTDriver/Riscv64/Io.c
> @@ -0,0 +1,134 @@
> +/** @file
> +
> +  Copyright 2006 - 2012 Unified EFI, Inc.<BR>
> +  Copyright (c) 2011 - 2012 ARM Ltd. All rights reserved.<BR>   

More trailing spaces than usual in line above.
(The below block has 3 of them in every copy.)

> +
> +  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:
> +
> +  Io.c
> +
> +--*/
> +
> +#include "Io.h"
> +
> +EFI_STATUS
> +EFIAPI
> +CpuIoServiceWrite (
> +  IN EFI_PEI_CPU_IO_PPI_WIDTH  Width,
> +  IN UINT64                     UserAddress,
> +  IN UINTN                      Count,
> +  IN VOID                       *UserBuffer
> +  )
> +/*++
> +
> +Routine Description:
> +
> +  Perform the port I/O write service
> +
> +Arguments:
> +
> +  Width   - Width of the port I/O operation
> +  Address - Base address of the port I/O operation
> +  Count   - Count of the number of accesses to perform
> +  Buffer  - Pointer to the source buffer from which to write data
> +
> +Returns:
> +
> +  EFI_SUCCESS           - The data was written.
> +  EFI_INVALID_PARAMETER - Width is invalid.
> +  EFI_INVALID_PARAMETER - Buffer is NULL.
> +  EFI_UNSUPPORTED       - The Buffer is not aligned for the given Width.
> +  EFI_UNSUPPORTED       - The address range specified by Address, Width,
> +                          and Count is not valid.
> +
> +--*/
> +{
> +  return EFI_UNSUPPORTED;
> +}
> +
> +
> +EFI_STATUS
> +EfiIoWrite (
> +  IN     EFI_PEI_CPU_IO_PPI_WIDTH  Width,
> +  IN     UINT64                     Address,
> +  IN     UINTN                      Count,
> +  IN OUT VOID                       *Buffer
> +  )
> +/*++
> +
> +Routine Description:
> +  Perform an IO write into Buffer.
> +
> +Arguments:
> +  Width   - Width of write transaction, and repeat operation to use
> +  Address - IO address to write
> +  Count   - Number of times to write the IO address.
> +  Buffer  - Buffer to write data from. size is Width * Count
> +
> +Returns:
> +  Status code
> +
> +--*/
> +{
> +  return CpuIoServiceWrite(Width, Address, Count, Buffer);
> +}
> +
> +
> +EFI_STATUS
> +EfiIoRead (
> +  IN     EFI_PEI_CPU_IO_PPI_WIDTH  Width,
> +  IN     UINT64                     Address,
> +  IN     UINTN                      Count,
> +  IN OUT VOID                       *Buffer
> +  )
> +/*++
> +
> +Routine Description:
> +  Perform an IO read into Buffer.
> +
> +Arguments:
> +  Width   - Width of read transaction, and repeat operation to use
> +  Address - IO address to read
> +  Count   - Number of times to read the IO address.
> +  Buffer  - Buffer to read data into. size is Width * Count
> +
> +Returns:
> +  Status code
> +
> +--*/
> +{
> +  return EFI_UNSUPPORTED;
> +}
> +
> +
> +VOID
> +FixAddress (
> +  IN UINTN     *PhyAddress
> +  )
> +{
> +		//
> +		//Note: On ARM platforms don't have to do this as all the functions are virtually mapped.
> +		//

ARM

> +}
> +
> +// Quick port to ARM
> +
> +VOID
> +Port80 (
> +  UINT8 Number
> +  )
> +{
> +  //EFI_SCT_DEBUG ((EFI_SCT_D_ERROR, L"Port80 %02x", Number));

Eew.

> +}
> diff --git a/uefi-sct/SctPkg/SCRT/SCRTDriver/Riscv64/Io.h b/uefi-sct/SctPkg/SCRT/SCRTDriver/Riscv64/Io.h
> new file mode 100644
> index 00000000..1e78b3e4
> --- /dev/null
> +++ b/uefi-sct/SctPkg/SCRT/SCRTDriver/Riscv64/Io.h
> @@ -0,0 +1,48 @@
> +/** @file
> +
> +  Copyright 2006 - 2012 Unified EFI, Inc.<BR>
> +  Copyright (c) 2011 - 2012 ARM Ltd. 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.
> + 

Trailing spaces.

> +**/
> +
> +/*++
> +
> +Module Name:
> +
> +  Debug.h
> +
> +--*/
> +
> +#ifndef _IA32_IO_ACCESS_H
> +#define _IA32_IO_ACCESS_H

Srsly?

> +
> +#include "SCRTDriver.h"
> +
> +#define IA32_MAX_IO_ADDRESS   0xFFFF
> +
> +#define IA32API
> +
> +
> +typedef union {
> +  UINT8  VOLATILE  *buf;
> +  UINT8  VOLATILE  *ui8;
> +  UINT16 VOLATILE  *ui16;
> +  UINT32 VOLATILE  *ui32;
> +  UINT64 VOLATILE  *ui64;
> +  UINTN  VOLATILE  ui;
> +} PTR;
> +
> +// This address is assuming a pure PC architecture. Not required?
> +#define   VIRT_TO_PHYS_OFFSET            (0x80000000)     //2G
> +
> +
> +
> +#endif
> diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Riscv64/DebugSupportBBTestCacheFunction.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Riscv64/DebugSupportBBTestCacheFunction.c
> new file mode 100644
> index 00000000..96ee7b57
> --- /dev/null
> +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Riscv64/DebugSupportBBTestCacheFunction.c
> @@ -0,0 +1,137 @@
> +/** @file
> +
> +  Copyright 2006 - 2016 Unified EFI, Inc.<BR>
> +  Copyright (c) 2011 - 2016, ARM Ltd. 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:
> +
> +  DebugSupportBBTestCacheFunction.c
> +
> +Abstract:
> +
> +  Interface Function Test Cases of Debug Support Protocol
> +
> +--*/
> +
> +
> +#include "DebugSupportBBTestMain.h"
> +
> +/**
> + *  Entrypoint for EFI_DEBUG_SUPPORT_PROTOCOL.InvalidateInstructionCache() Function Test.
> + *  @param This a pointer of EFI_BB_TEST_PROTOCOL.
> + *  @param ClientInterface a pointer to the interface to be tested.
> + *  @param TestLevel test "thoroughness" control.
> + *  @param SupportHandle a handle containing protocols required.
> + *  @return EFI_SUCCESS Finish the test successfully.
> + */
> +//
> +// TDS 3.5
> +//
> +EFI_STATUS
> +BBTestInvalidateInstructionCacheFunctionAutoTest (
> +  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_DEBUG_SUPPORT_PROTOCOL           *DebugSupport;
> +  EFI_TEST_ASSERTION                   AssertionType;
> +  UINT64                               Start;
> +  UINT64                               Length;
> +  UINTN                                MaxProcessorIndex;
> +  UINTN                                ProcessorIndex;
> +
> +  //
> +  // Get the Standard Library Interface
> +  //
> +  Status = gtBS->HandleProtocol (
> +                   SupportHandle,
> +                   &gEfiStandardTestLibraryGuid,
> +                   (VOID **) &StandardLib
> +                   );
> +
> +  if (EFI_ERROR(Status)) {
> +    StandardLib->RecordAssertion (
> +                   StandardLib,
> +                   EFI_TEST_ASSERTION_FAILED,
> +                   gTestGenericFailureGuid,
> +                   L"BS.HandleProtocol - Handle standard test library",
> +                   L"%a:%d:Status - %r",
> +                   __FILE__,
> +                   (UINTN)__LINE__,
> +                   Status
> +                   );
> +    return Status;
> +  }
> +
> +  DebugSupport = (EFI_DEBUG_SUPPORT_PROTOCOL *)ClientInterface;
> +
> +  if (DebugSupport->Isa != PlatformIsa) {
> +    return EFI_SUCCESS;
> +  }
> +
> +  Status = DebugSupport->GetMaximumProcessorIndex (DebugSupport, &MaxProcessorIndex);
> +  if (EFI_ERROR(Status)) {
> +    StandardLib->RecordAssertion (
> +                   StandardLib,
> +                   EFI_TEST_ASSERTION_FAILED,
> +                   gTestGenericFailureGuid,
> +                   L"EFI_DEBUG_SUPPORT_PROTOCOL.GetMaximumProcessorIndex",
> +                   L"%a:%d:Status - %r",
> +                   __FILE__,
> +                   (UINTN)__LINE__,
> +                   Status
> +                   );
> +    return Status;
> +  }
> +
> +  for (ProcessorIndex = 0; ProcessorIndex <= MaxProcessorIndex; ProcessorIndex++) {
> +
> +    //
> +    // Assertion Point 3.5.2.1
> +    // Invoke InvalidateInstructionCache and verify interface correctness.
> +    //
> +
> +    // The Physical base of the memory range to be invalidated.
> +    Start  = 0x0;
> +
> +    // The minimum number of bytes in the processor's instruction cache to be invalidated.
> +    Length = 0x0;
> +
> +    Status = DebugSupport->InvalidateInstructionCache (DebugSupport, ProcessorIndex, (VOID*)&Start, Length);
> +
> +    if (EFI_ERROR(Status)) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +    } else {
> +      AssertionType = EFI_TEST_ASSERTION_PASSED;
> +    }
> +
> +    StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 gDebugSupportBBTestFunctionAssertionGuid015,
> +                 L"EFI_DEBUG_SUPPORT_PROTOCOL.InvalidateInstructionCache - Invoke this function and verify interface correctness",
> +                 L"%a:%d:Status - %r",
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );
> +  }
> +
> +  return EFI_SUCCESS;
> +}
> +
> diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Riscv64/DebugSupportBBTestExceptionCallbackFunction.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Riscv64/DebugSupportBBTestExceptionCallbackFunction.c
> new file mode 100644
> index 00000000..c27c0c0c
> --- /dev/null
> +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Riscv64/DebugSupportBBTestExceptionCallbackFunction.c
> @@ -0,0 +1,276 @@
> +/** @file
> +
> +  Copyright 2006 - 2016 Unified EFI, Inc.<BR>
> +  Copyright (c) 2011 - 2016, ARM Ltd. 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:
> +
> +  DebugSupportBBExceptionCallbackFunction.c
> +
> +Abstract:
> +
> +  Interface Function Test Cases of Debug Support Protocol
> +
> +--*/
> +
> +
> +#include "DebugSupportBBTestMain.h"
> +
> +extern volatile  UINTN InvokedExceptionCallback;
> +extern volatile  UINTN InvokedPeriodicCallback;
> +
> +extern EFI_INSTRUCTION_SET_ARCHITECTURE PlatformIsa;
> +
> +void
> +SoftwareBreak (
> +  void
> +  )
> +{
> +  // Not ported to ARM yet

Eew.

> +  ASSERT (FALSE);
> +}
> +
> +/**
> + *  Entrypoint for EFI_DEBUG_SUPPORT_PROTOCOL.RegisterExceptionCallback() Function Test.
> + *  @param This a pointer of EFI_BB_TEST_PROTOCOL.
> + *  @param ClientInterface a pointer to the interface to be tested.
> + *  @param TestLevel test "thoroughness" control.
> + *  @param SupportHandle a handle containing protocols required.
> + *  @return EFI_SUCCESS Finish the test successfully.
> + */
> +//
> +// TDS 3.4
> +//
> +EFI_STATUS
> +BBTestRegisterExceptionCallbackFunctionManualTest (
> +  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_DEBUG_SUPPORT_PROTOCOL           *DebugSupport;
> +  EFI_TEST_ASSERTION                   AssertionType;
> +
> +  DebugSupport = (EFI_DEBUG_SUPPORT_PROTOCOL *)ClientInterface;
> +
> +  if (DebugSupport->Isa != PlatformIsa) {
> +    return EFI_SUCCESS;
> +  }
> +
> +  //
> +  // Get the Standard Library Interface
> +  //
> +  Status = gtBS->HandleProtocol (
> +                   SupportHandle,
> +                   &gEfiStandardTestLibraryGuid,
> +                   (VOID **) &StandardLib
> +                   );
> +
> +  if (EFI_ERROR(Status)) {
> +    StandardLib->RecordAssertion (
> +                   StandardLib,
> +                   EFI_TEST_ASSERTION_FAILED,
> +                   gTestGenericFailureGuid,
> +                   L"BS.HandleProtocol - Handle standard test library",
> +                   L"%a:%d:Status - %r",
> +                   __FILE__,
> +                   (UINTN)__LINE__,
> +                   Status
> +                   );
> +    return Status;
> +  }
> +
> +  //
> +  // Assertion Point 3.4.2.1
> +  // Invoke RegisterExceptionCallback() to install an interrupt handler function.
> +  //
> +  InvokedExceptionCallback = FALSE;
> +  // FIXME: Is it normal that we use EXCEPT_IA32_BREAKPOINT here?
> +  // Shouldn't we define proper constants for ARM exceptions in DebugSupportProtocol.h file?
> +  Status = DebugSupport->RegisterExceptionCallback (DebugSupport, 0, ExceptionCallback, EXCEPT_IA32_BREAKPOINT);
> +
> +  if ((Status == EFI_SUCCESS) || (Status == EFI_ALREADY_STARTED)) {
> +    AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  } else {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +  }
> +
> +  StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 gDebugSupportBBTestFunctionAssertionGuid009,
> +                 L"EFI_DEBUG_SUPPORT_PROTOCOL.RegisterExceptionCallback - Invoke this function and verify interface correctness",
> +                 L"%a:%d:Status - %r",
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );
> +
> +  //
> +  // If the callback function is already registed, return
> +  //
> +  if (EFI_ERROR(Status)) {
> +    return EFI_SUCCESS;
> +  }
> +
> +  //
> +  // Test the callback function registed.
> +  //
> +
> +  //
> +  // Call SoftwareBreak to invoke the interrupt handler function.
> +  //
> +  SoftwareBreak ();
> +
> +  if (InvokedExceptionCallback == FALSE) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +  } else {
> +    AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  }
> +
> +  StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 gDebugSupportBBTestFunctionAssertionGuid010,
> +                 L"EFI_DEBUG_SUPPORT_PROTOCOL.RegisterExceptionCallback - Verify the callback function was invoked.",
> +                 L"%a:%d:Status - %r",
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );
> +
> +  //
> +  // Assertion Point 3.4.2.2
> +  // Invoke RegisterPeriodicCallback() to install the Periodic interrupt handler function.
> +  // Verify the two callback functions can be both invoked.
> +  //
> +  InvokedExceptionCallback = FALSE;
> +  InvokedPeriodicCallback  = FALSE;
> +
> +  Status = DebugSupport->RegisterPeriodicCallback (DebugSupport, 0, PeriodicCallback);
> +  if (EFI_ERROR(Status)) {
> +    return Status;
> +  }
> +
> +  //
> +  // Wait the PeriodicCallback to be invoked.
> +  //
> +  gtBS->Stall (500000);
> +
> +  //
> +  // Call SoftwareBreak to invoke the interrupt handler function.
> +  //
> +  SoftwareBreak ();
> +
> +  if ((InvokedExceptionCallback == TRUE) && (InvokedPeriodicCallback == TRUE)) {
> +    AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  } else {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +  }
> +
> +  StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 gDebugSupportBBTestFunctionAssertionGuid011,
> +                 L"EFI_DEBUG_SUPPORT_PROTOCOL.RegisterExceptionCallback - Verify the two callback functions can be both invoked.",
> +                 L"%a:%d:Status - %r",
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );
> +
> +  //
> +  // Uninstall the Periodic callback function.
> +  //
> +  Status = DebugSupport->RegisterPeriodicCallback (DebugSupport, 0, NULL);
> +  if (EFI_ERROR(Status)) {
> +    return Status;
> +  }
> +
> +  //
> +  // Assertion Point 3.4.2.3
> +  // Invoke RegisterExceptionCallback() to install another interrupt handler function.
> +  //
> +  Status = DebugSupport->RegisterExceptionCallback (DebugSupport, 0, ExceptionCallback1, EXCEPT_IA32_BREAKPOINT);
> +
> +  if (Status != EFI_ALREADY_STARTED) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +  } else {
> +    AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  }
> +
> +  StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 gDebugSupportBBTestFunctionAssertionGuid012,
> +                 L"EFI_DEBUG_SUPPORT_PROTOCOL.RegisterExceptionCallback - Register another callback function.",
> +                 L"%a:%d:Status - %r",
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );
> +
> +  //
> +  // Assertion Point 3.4.2.4
> +  // Invoke RegisterExceptionCallback() to unstall the interrupt handler function.
> +  //
> +  Status = DebugSupport->RegisterExceptionCallback (DebugSupport, 0, NULL, EXCEPT_IA32_BREAKPOINT);
> +
> +  if (EFI_ERROR(Status)) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +  } else {
> +    AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  }
> +
> +  StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 gDebugSupportBBTestFunctionAssertionGuid013,
> +                 L"EFI_DEBUG_SUPPORT_PROTOCOL.RegisterExceptionCallback - Invoke this function to uninstall the interrupt handler function",
> +                 L"%a:%d:Status - %r",
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );
> +
> +  InvokedExceptionCallback = FALSE;
> +
> +  //
> +  // Call SoftwareBreak to invoke the interrupt handler function.
> +  //
> +  SoftwareBreak ();
> +
> +  if (InvokedExceptionCallback != FALSE) {
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +  } else {
> +    AssertionType = EFI_TEST_ASSERTION_PASSED;
> +  }
> +
> +  StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 gDebugSupportBBTestFunctionAssertionGuid014,
> +                 L"EFI_DEBUG_SUPPORT_PROTOCOL.RegisterExceptionCallback - Verify the callback function wasn't invoked",
> +                 L"%a:%d:Status - %r",
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );
> +
> +  return EFI_SUCCESS;
> +}
> +
> diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Riscv64/PlatformIsa.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Riscv64/PlatformIsa.c
> new file mode 100644
> index 00000000..8334f601
> --- /dev/null
> +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Riscv64/PlatformIsa.c
> @@ -0,0 +1,30 @@
> +/** @file
> +
> +  Copyright 2006 - 2012 Unified EFI, Inc.<BR>
> +  Copyright (c) 2011 - 2012, ARM Ltd. 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:
> +
> +  PlatformIsa.c
> +
> +Abstract:
> +
> +  Platform related Isa definition.
> +
> +--*/
> +
> +#include "DebugSupportBBTestMain.h"
> +
> +EFI_INSTRUCTION_SET_ARCHITECTURE PlatformIsa = IsaAArch64;
> +
> diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/UsbHc/BlackBoxTest/Riscv64/TimerInterrupt.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/UsbHc/BlackBoxTest/Riscv64/TimerInterrupt.c
> new file mode 100644
> index 00000000..1c1940e5
> --- /dev/null
> +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/UsbHc/BlackBoxTest/Riscv64/TimerInterrupt.c
> @@ -0,0 +1,51 @@
> +/** @file
> +
> +  Copyright 2006 - 2010 Unified EFI, Inc.<BR>
> +  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
> +
> +  This program and the accompanying materials
> +  are licensed and made available under the terms and conditions of the BSD License
> +  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.
> + 
> +**/
> +/**
> + *  Ipf Source file for Mask/Unmask TimerInterrupt.
> + */
> +/*++
> +
> +Module Name:
> +  TimerInterrupt.c
> +
> +Abstract:
> +  Ipf Source file for Mask/Unmask TimerInterrupt.
> +
> +Author(s):
> +
> +
> +References:
> +  EFI Specification 1.10
> +  EFI/Tiano DXE Test Case Writer's Guide
> +
> +Revision History:
> +  Initial 10-20-2002
> +  Version 0.01
> +
> +--*/
> +
> +#include "UsbHcTest.h"
> +
> +VOID MaskTimerInterrupt()
> +{
> +  // TBD
> +  return;
> +}
> +
> +VOID UnmaskTimerInterrupt()
> +{
> +  // TBD
> +  return;
> +}
> diff --git a/uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/Riscv64/EntsLibPlat.h b/uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/Riscv64/EntsLibPlat.h
> new file mode 100644
> index 00000000..ff781aee
> --- /dev/null
> +++ b/uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/Riscv64/EntsLibPlat.h
> @@ -0,0 +1,55 @@
> +/** @file
> +
> +  Copyright 2006 - 2012 Unified EFI, Inc.<BR>
> +  Copyright (c) 2010 - 2012, ARM Ltd. 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:
> +
> +  EntsLibPlat.h
> +
> +Abstract:
> +
> +  AArch64 specific defines
> +
> +--*/
> +
> +#ifndef _EFI_LIB_PLAT_H_
> +#define _EFI_LIB_PLAT_H_

No leading _.

/
    Leif

> +
> +#define MIN_ALIGNMENT_SIZE  8
> +
> +VOID
> +EntsInitializeLibPlatform (
> +  IN EFI_HANDLE           ImageHandle,
> +  IN EFI_SYSTEM_TABLE     *SystemTable
> +  )
> +/*++
> +
> +Routine Description:
> +
> +  Initialize platform.
> +
> +Arguments:
> +
> +  ImageHandle           - The image handle.
> +  SystemTable           - The system table.
> +
> +Returns:
> +
> +  None.
> +
> +--*/
> +;
> +
> +#endif
> diff --git a/uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/Riscv64/InitPlat.c b/uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/Riscv64/InitPlat.c
> new file mode 100644
> index 00000000..70a509a4
> --- /dev/null
> +++ b/uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/Riscv64/InitPlat.c
> @@ -0,0 +1,55 @@
> +/** @file
> +
> +  Copyright 2006 - 2012 Unified EFI, Inc.<BR>
> +  Copyright (c) 2010 - 2012, ARM Ltd. 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:
> +
> +  InitPlat.c
> +
> +Abstract:
> +
> +  Math routines for compatibility with native EFI library routines.
> +
> +--*/
> +
> +#include "Efi.h"
> +#include "EntsLibPlat.h"
> +
> +VOID
> +EntsInitializeLibPlatform (
> +  IN EFI_HANDLE           ImageHandle,
> +  IN EFI_SYSTEM_TABLE     *SystemTable
> +  )
> +/*++
> +
> +Routine Description:
> +
> +  Initialize platform.
> +
> +Arguments:
> +
> +  ImageHandle           - The image handle.
> +  SystemTable           - The system table.
> +
> +Returns:
> +
> +  None.
> +
> +--*/
> +{
> +  //
> +  // No platform-specific initializations
> +  //
> +}
> -- 
> 2.28.0
> 
> 
> 
> 
> 
> 


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#68174): https://edk2.groups.io/g/devel/message/68174
Mute This Topic: https://groups.io/mt/78637307/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-





More information about the edk2-devel-archive mailing list