From: "Heinrich Schuchardt" <xypron.glpk@gmx.de>
To: Daniel Schaefer <daniel.schaefer@hpe.com>,
Leif Lindholm <leif@nuviainc.com>,
devel@edk2.groups.io
Cc: Abner Chang <abner.chang@hpe.com>,
Gilbert Chen <gilbert.chen@hpe.com>,
Eric Jin <eric.jin@intel.com>,
G Edhaya Chandran <Edhaya.Chandran@arm.com>,
Barton Gao <gaojie@byosoft.com.cn>,
Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com>
Subject: Re: [edk2-devel] [edk2-test PATCH v1 2/2] SctPkg: Enable RISCV64 support using AARCH64 sources
Date: Mon, 8 Feb 2021 18:04:45 +0100 [thread overview]
Message-ID: <7741f08d-efeb-e959-7118-fb74474e3424@gmx.de> (raw)
In-Reply-To: <a155349b-a845-2d56-9568-b70fcbe3def4@hpe.com>
On 08.02.21 16:09, Daniel Schaefer wrote:
> Hi Leif,
>
> thanks very much for the review!
> I've cleaned up the patchset and addressed the issues. I'll send out
> another set soon.
> See comments below.
>
> Thanks,
> Daniel
>
> On 12/2/20 8:04 PM, Leif Lindholm wrote:
>> 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@nuviainc.com>
>>> Cc: Heinrich Schuchardt <xypron.glpk@gmx.de>
>>> Cc: Abner Chang <abner.chang@hpe.com>
>>> Cc: Gilbert Chen <gilbert.chen@hpe.com>
>>> Cc: Eric Jin <eric.jin@intel.com>
>>> Cc: G Edhaya Chandran <Edhaya.Chandran@arm.com>
>>> Cc: Barton Gao <gaojie@byosoft.com.cn>
>>> Cc: Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com>
>>> Signed-off-by: Daniel Schaefer <daniel.schaefer@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*
>
> For the next patch series I went through everything and made sure that
> there's no Aarch64 or ARM anymore.
>
>>> +
>>> +--*/
>>> +
>>> +#ifndef _EFI_LIB_PLAT_H_
>>> +#define _EFI_LIB_PLAT_H_
>>
>> No leading _ in macros.
>
> This is a common pattern in the code. Even in EDK2.
>
>>> +
>>> +#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.
>
> I have no idea why the alignment would be 3 on other platforms, so I
> don't know how to fix it.
> If anyone knows more, please let me know. I'll just change the comment
> to say Riscv64.
>
>>> +.align 3
Both on Aarch64 and on RISC-V an odd alignment value makes no sense.
.align 8 should do no harm. But is it needed?
Best regards
Heinrich
>>> +
>>> +.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?
>
> Yes, sorry, it's more of an RFC. I wanted to get it out before
> Heinrich's talk at OSFC, so he could mention it.
> The code works as confirmed by Heinrich, I just hadn't cleaned it up yet.
>
>>> +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.
>
> Fixed. Even in Riscv64 we enabled identity mapped MMU before PEI.
>
>>> +}
>>> +
>>> +
>>> +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.
>
> Same.
>
>>> +}
>>> 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...
>
> Reminder that this is copied from the ARM sources.
> In this case I'll just replace ARM by RISC-V.
>
>>> + 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?
>
> Not sure. It's also commented out in the X86 and IPF source files.
> I'll keep it. I think it would be more confusing if RISC-V was the only
> platform
> that didn't have this.
>
>>> + 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 pattern is present in almost all files in the repo.
> Should we follow up with a second patch series to fix that?
> In this repo there are tons of things to clean up...
> Some files have CRLF and an additional LF at the end of every line.
>
>>> +
>>> + 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.
>
> That function is used in some tests, that's why it's here and in both ARMs.
>
>>> +}
>>> 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?
>
> Reminder again, that this is a file that I copied ;)
> This header wasn't necessary so I removed in in my next patch series.
>
>>> +
>>> +#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
>>>
>>>
>>>
>>>
>>>
>>>
next prev parent reply other threads:[~2021-02-08 17:05 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-01 16:17 [edk2-test PATCH v1 0/2] Add RISCV64 support to SctPkg Daniel Schaefer
2020-12-01 16:17 ` [edk2-test PATCH v1 1/2] SctPkg: Add RISCV64 support Daniel Schaefer
2020-12-02 11:44 ` [edk2-devel] " Leif Lindholm
2021-02-08 15:09 ` Daniel Schaefer
2020-12-01 16:17 ` [edk2-test PATCH v1 2/2] SctPkg: Enable RISCV64 support using AARCH64 sources Daniel Schaefer
2020-12-02 12:04 ` [edk2-devel] " Leif Lindholm
2021-02-08 15:09 ` Daniel Schaefer
2021-02-08 17:04 ` Heinrich Schuchardt [this message]
2021-02-09 12:42 ` Leif Lindholm
2021-02-09 13:47 ` Heinrich Schuchardt
2021-02-09 14:58 ` Leif Lindholm
2021-02-09 15:11 ` Daniel Schaefer
2020-12-01 16:59 ` [edk2-test PATCH v1 0/2] Add RISCV64 support to SctPkg Heinrich Schuchardt
2020-12-01 17:11 ` Daniel Schaefer
2020-12-01 17:37 ` Heinrich Schuchardt
2021-02-08 14:30 ` Daniel Schaefer
2021-02-08 15:50 ` Heinrich Schuchardt
2020-12-02 12:07 ` Leif Lindholm
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=7741f08d-efeb-e959-7118-fb74474e3424@gmx.de \
--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