RiscVImpl.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /** @file
  2. RISC-V package definitions.
  3. Copyright (c) 2016 - 2022, Hewlett Packard Enterprise Development LP. All rights reserved.<BR>
  4. SPDX-License-Identifier: BSD-2-Clause-Patent
  5. **/
  6. #ifndef RISCV_H_
  7. #define RISCV_H_
  8. #include <Uefi.h>
  9. #include <IndustryStandard/RiscV.h>
  10. #define _ASM_FUNC(Name, Section) \
  11. .global Name ; \
  12. .section #Section, "ax" ; \
  13. .type Name, %function ; \
  14. .p2align 2 ; \
  15. Name:
  16. #define ASM_FUNC(Name) _ASM_FUNC(ASM_PFX(Name), .text. ## Name)
  17. #if defined (MDE_CPU_RISCV64)
  18. typedef UINT64 RISC_V_REGS_PROTOTYPE;
  19. #else
  20. #endif
  21. //
  22. // Structure for 128-bit value
  23. //
  24. typedef struct {
  25. UINT64 Value64_L;
  26. UINT64 Value64_H;
  27. } RISCV_UINT128;
  28. #define RISCV_MACHINE_CONTEXT_SIZE 0x1000
  29. typedef struct _RISCV_MACHINE_MODE_CONTEXT RISCV_MACHINE_MODE_CONTEXT;
  30. ///
  31. /// Exception handlers in context.
  32. ///
  33. typedef struct _EXCEPTION_HANDLER_CONTEXT {
  34. EFI_PHYSICAL_ADDRESS InstAddressMisalignedHander;
  35. EFI_PHYSICAL_ADDRESS InstAccessFaultHander;
  36. EFI_PHYSICAL_ADDRESS IllegalInstHander;
  37. EFI_PHYSICAL_ADDRESS BreakpointHander;
  38. EFI_PHYSICAL_ADDRESS LoadAddrMisalignedHander;
  39. EFI_PHYSICAL_ADDRESS LoadAccessFaultHander;
  40. EFI_PHYSICAL_ADDRESS StoreAmoAddrMisalignedHander;
  41. EFI_PHYSICAL_ADDRESS StoreAmoAccessFaultHander;
  42. EFI_PHYSICAL_ADDRESS EnvCallFromUModeHander;
  43. EFI_PHYSICAL_ADDRESS EnvCallFromSModeHander;
  44. EFI_PHYSICAL_ADDRESS EnvCallFromHModeHander;
  45. EFI_PHYSICAL_ADDRESS EnvCallFromMModeHander;
  46. } EXCEPTION_HANDLER_CONTEXT;
  47. ///
  48. /// Exception handlers in context.
  49. ///
  50. typedef struct _INTERRUPT_HANDLER_CONTEXT {
  51. EFI_PHYSICAL_ADDRESS SoftwareIntHandler;
  52. EFI_PHYSICAL_ADDRESS TimerIntHandler;
  53. } INTERRUPT_HANDLER_CONTEXT;
  54. ///
  55. /// Interrupt handlers in context.
  56. ///
  57. typedef struct _TRAP_HANDLER_CONTEXT {
  58. EXCEPTION_HANDLER_CONTEXT ExceptionHandlerContext;
  59. INTERRUPT_HANDLER_CONTEXT IntHandlerContext;
  60. } TRAP_HANDLER_CONTEXT;
  61. ///
  62. /// Machine mode context used for saveing hart-local context.
  63. ///
  64. typedef struct _RISCV_MACHINE_MODE_CONTEXT {
  65. EFI_PHYSICAL_ADDRESS PeiService; /// PEI service.
  66. EFI_PHYSICAL_ADDRESS MachineModeTrapHandler; /// Machine mode trap handler.
  67. EFI_PHYSICAL_ADDRESS HypervisorModeTrapHandler; /// Hypervisor mode trap handler.
  68. EFI_PHYSICAL_ADDRESS SupervisorModeTrapHandler; /// Supervisor mode trap handler.
  69. EFI_PHYSICAL_ADDRESS UserModeTrapHandler; /// USer mode trap handler.
  70. TRAP_HANDLER_CONTEXT MModeHandler; /// Handler for machine mode.
  71. } RISCV_MACHINE_MODE_CONTEXT;
  72. #endif