]> git.proxmox.com Git - mirror_edk2.git/blame - UefiCpuPkg/Library/BaseRiscV64CpuExceptionHandlerLib/CpuExceptionHandlerLib.h
UefiCpuPkg: Add BaseRiscV64CpuExceptionHandlerLib
[mirror_edk2.git] / UefiCpuPkg / Library / BaseRiscV64CpuExceptionHandlerLib / CpuExceptionHandlerLib.h
CommitLineData
cbac2c74
S
1/** @file\r
2\r
3 RISC-V Exception Handler library definition file.\r
4\r
5 Copyright (c) 2019-2022, Hewlett Packard Enterprise Development LP. All rights reserved.<BR>\r
6\r
7 SPDX-License-Identifier: BSD-2-Clause-Patent\r
8\r
9**/\r
10\r
11#ifndef RISCV_CPU_EXECPTION_HANDLER_LIB_H_\r
12#define RISCV_CPU_EXECPTION_HANDLER_LIB_H_\r
13\r
14#include <Register/RiscV64/RiscVImpl.h>\r
15\r
16/**\r
17 Trap Handler for S-mode\r
18\r
19**/\r
20VOID\r
21SupervisorModeTrap (\r
22 VOID\r
23 );\r
24\r
25//\r
26// Index of SMode trap register\r
27//\r
28#define SMODE_TRAP_REGS_zero 0\r
29#define SMODE_TRAP_REGS_ra 1\r
30#define SMODE_TRAP_REGS_sp 2\r
31#define SMODE_TRAP_REGS_gp 3\r
32#define SMODE_TRAP_REGS_tp 4\r
33#define SMODE_TRAP_REGS_t0 5\r
34#define SMODE_TRAP_REGS_t1 6\r
35#define SMODE_TRAP_REGS_t2 7\r
36#define SMODE_TRAP_REGS_s0 8\r
37#define SMODE_TRAP_REGS_s1 9\r
38#define SMODE_TRAP_REGS_a0 10\r
39#define SMODE_TRAP_REGS_a1 11\r
40#define SMODE_TRAP_REGS_a2 12\r
41#define SMODE_TRAP_REGS_a3 13\r
42#define SMODE_TRAP_REGS_a4 14\r
43#define SMODE_TRAP_REGS_a5 15\r
44#define SMODE_TRAP_REGS_a6 16\r
45#define SMODE_TRAP_REGS_a7 17\r
46#define SMODE_TRAP_REGS_s2 18\r
47#define SMODE_TRAP_REGS_s3 19\r
48#define SMODE_TRAP_REGS_s4 20\r
49#define SMODE_TRAP_REGS_s5 21\r
50#define SMODE_TRAP_REGS_s6 22\r
51#define SMODE_TRAP_REGS_s7 23\r
52#define SMODE_TRAP_REGS_s8 24\r
53#define SMODE_TRAP_REGS_s9 25\r
54#define SMODE_TRAP_REGS_s10 26\r
55#define SMODE_TRAP_REGS_s11 27\r
56#define SMODE_TRAP_REGS_t3 28\r
57#define SMODE_TRAP_REGS_t4 29\r
58#define SMODE_TRAP_REGS_t5 30\r
59#define SMODE_TRAP_REGS_t6 31\r
60#define SMODE_TRAP_REGS_sepc 32\r
61#define SMODE_TRAP_REGS_sstatus 33\r
62#define SMODE_TRAP_REGS_sie 34\r
63#define SMODE_TRAP_REGS_last 35\r
64\r
65#define SMODE_TRAP_REGS_OFFSET(x) ((SMODE_TRAP_REGS_##x) * __SIZEOF_POINTER__)\r
66#define SMODE_TRAP_REGS_SIZE SMODE_TRAP_REGS_OFFSET(last)\r
67\r
68#pragma pack(1)\r
69typedef struct {\r
70 //\r
71 // Below are follow the format of EFI_SYSTEM_CONTEXT\r
72 //\r
73 UINT64 zero;\r
74 UINT64 ra;\r
75 UINT64 sp;\r
76 UINT64 gp;\r
77 UINT64 tp;\r
78 UINT64 t0;\r
79 UINT64 t1;\r
80 UINT64 t2;\r
81 UINT64 s0;\r
82 UINT64 s1;\r
83 UINT64 a0;\r
84 UINT64 a1;\r
85 UINT64 a2;\r
86 UINT64 a3;\r
87 UINT64 a4;\r
88 UINT64 a5;\r
89 UINT64 a6;\r
90 UINT64 a7;\r
91 UINT64 s2;\r
92 UINT64 s3;\r
93 UINT64 s4;\r
94 UINT64 s5;\r
95 UINT64 s6;\r
96 UINT64 s7;\r
97 UINT64 s8;\r
98 UINT64 s9;\r
99 UINT64 s10;\r
100 UINT64 s11;\r
101 UINT64 t3;\r
102 UINT64 t4;\r
103 UINT64 t5;\r
104 UINT64 t6;\r
105 //\r
106 // Below are the additional information to\r
107 // EFI_SYSTEM_CONTEXT, private to supervisor mode trap\r
108 // and not public to EFI environment.\r
109 //\r
110 UINT64 sepc;\r
111 UINT64 sstatus;\r
112 UINT64 sie;\r
113} SMODE_TRAP_REGISTERS;\r
114#pragma pack()\r
115\r
116#endif\r