/** @file RISC-V package definitions. Copyright (c) 2016 - 2019, Hewlett Packard Enterprise Development LP. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef RISCV_H_ #define RISCV_H_ #include #include #define _ASM_FUNC(Name, Section) \ .global Name ; \ .section #Section, "ax" ; \ .type Name, %function ; \ .p2align 2 ; \ Name: #define ASM_FUNC(Name) _ASM_FUNC(ASM_PFX(Name), .text. ## Name) #if defined (MDE_CPU_RISCV64) typedef UINT64 RISC_V_REGS_PROTOTYPE; #else #endif // // Structure for 128-bit value // typedef struct { UINT64 Value64_L; UINT64 Value64_H; } RISCV_UINT128; #define RISCV_MACHINE_CONTEXT_SIZE 0x1000 typedef struct _RISCV_MACHINE_MODE_CONTEXT RISCV_MACHINE_MODE_CONTEXT; /// /// Exception handlers in context. /// typedef struct _EXCEPTION_HANDLER_CONTEXT { EFI_PHYSICAL_ADDRESS InstAddressMisalignedHander; EFI_PHYSICAL_ADDRESS InstAccessFaultHander; EFI_PHYSICAL_ADDRESS IllegalInstHander; EFI_PHYSICAL_ADDRESS BreakpointHander; EFI_PHYSICAL_ADDRESS LoadAddrMisalignedHander; EFI_PHYSICAL_ADDRESS LoadAccessFaultHander; EFI_PHYSICAL_ADDRESS StoreAmoAddrMisalignedHander; EFI_PHYSICAL_ADDRESS StoreAmoAccessFaultHander; EFI_PHYSICAL_ADDRESS EnvCallFromUModeHander; EFI_PHYSICAL_ADDRESS EnvCallFromSModeHander; EFI_PHYSICAL_ADDRESS EnvCallFromHModeHander; EFI_PHYSICAL_ADDRESS EnvCallFromMModeHander; } EXCEPTION_HANDLER_CONTEXT; /// /// Exception handlers in context. /// typedef struct _INTERRUPT_HANDLER_CONTEXT { EFI_PHYSICAL_ADDRESS SoftwareIntHandler; EFI_PHYSICAL_ADDRESS TimerIntHandler; } INTERRUPT_HANDLER_CONTEXT; /// /// Interrupt handlers in context. /// typedef struct _TRAP_HANDLER_CONTEXT { EXCEPTION_HANDLER_CONTEXT ExceptionHandlerContext; INTERRUPT_HANDLER_CONTEXT IntHandlerContext; } TRAP_HANDLER_CONTEXT; /// /// Machine mode context used for saveing hart-local context. /// typedef struct _RISCV_MACHINE_MODE_CONTEXT { EFI_PHYSICAL_ADDRESS PeiService; /// PEI service. EFI_PHYSICAL_ADDRESS MachineModeTrapHandler; /// Machine mode trap handler. EFI_PHYSICAL_ADDRESS HypervisorModeTrapHandler; /// Hypervisor mode trap handler. EFI_PHYSICAL_ADDRESS SupervisorModeTrapHandler; /// Supervisor mode trap handler. EFI_PHYSICAL_ADDRESS UserModeTrapHandler; /// USer mode trap handler. TRAP_HANDLER_CONTEXT MModeHandler; /// Handler for machine mode. } RISCV_MACHINE_MODE_CONTEXT; #endif