]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Include/Library/BaseRiscVSbiLib.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / MdePkg / Include / Library / BaseRiscVSbiLib.h
CommitLineData
76e95654
S
1/** @file\r
2 Library to call the RISC-V SBI ecalls\r
3\r
4 Copyright (c) 2021-2022, Hewlett Packard Development LP. All rights reserved.<BR>\r
5\r
6 SPDX-License-Identifier: BSD-2-Clause-Patent\r
7\r
8 @par Glossary:\r
9 - Hart - Hardware Thread, similar to a CPU core\r
10\r
11 Currently, EDK2 needs to call SBI only to set the time and to do system reset.\r
12\r
13**/\r
14\r
15#ifndef RISCV_SBI_LIB_H_\r
16#define RISCV_SBI_LIB_H_\r
17\r
18#include <Uefi.h>\r
19\r
20/* SBI Extension IDs */\r
21#define SBI_EXT_TIME 0x54494D45\r
22#define SBI_EXT_SRST 0x53525354\r
23\r
24/* SBI function IDs for TIME extension*/\r
25#define SBI_EXT_TIME_SET_TIMER 0x0\r
26\r
27/* SBI function IDs for SRST extension */\r
28#define SBI_EXT_SRST_RESET 0x0\r
29\r
30#define SBI_SRST_RESET_TYPE_SHUTDOWN 0x0\r
31#define SBI_SRST_RESET_TYPE_COLD_REBOOT 0x1\r
32#define SBI_SRST_RESET_TYPE_WARM_REBOOT 0x2\r
33\r
34#define SBI_SRST_RESET_REASON_NONE 0x0\r
35#define SBI_SRST_RESET_REASON_SYSFAIL 0x1\r
36\r
37/* SBI return error codes */\r
38#define SBI_SUCCESS 0\r
39#define SBI_ERR_FAILED -1\r
40#define SBI_ERR_NOT_SUPPORTED -2\r
41#define SBI_ERR_INVALID_PARAM -3\r
42#define SBI_ERR_DENIED -4\r
43#define SBI_ERR_INVALID_ADDRESS -5\r
44#define SBI_ERR_ALREADY_AVAILABLE -6\r
45#define SBI_ERR_ALREADY_STARTED -7\r
46#define SBI_ERR_ALREADY_STOPPED -8\r
47\r
48#define SBI_LAST_ERR SBI_ERR_ALREADY_STOPPED\r
49\r
50typedef struct {\r
51 UINT64 BootHartId;\r
52 VOID *PeiServiceTable; // PEI Service table\r
53 VOID *PrePiHobList; // Pre PI Hob List\r
54 UINT64 FlattenedDeviceTree; // Pointer to Flattened Device tree\r
55} EFI_RISCV_FIRMWARE_CONTEXT;\r
56\r
57//\r
58// EDK2 OpenSBI firmware extension return status.\r
59//\r
60typedef struct {\r
61 UINTN Error; ///< SBI status code\r
62 UINTN Value; ///< Value returned\r
63} SBI_RET;\r
64\r
65VOID\r
66EFIAPI\r
67SbiSetTimer (\r
68 IN UINT64 Time\r
69 );\r
70\r
71EFI_STATUS\r
72EFIAPI\r
73SbiSystemReset (\r
74 IN UINTN ResetType,\r
75 IN UINTN ResetReason\r
76 );\r
77\r
78/**\r
79 Get firmware context of the calling hart.\r
80\r
81 @param[out] FirmwareContext The firmware context pointer.\r
82**/\r
83VOID\r
84EFIAPI\r
85GetFirmwareContext (\r
86 OUT EFI_RISCV_FIRMWARE_CONTEXT **FirmwareContext\r
87 );\r
88\r
89/**\r
90 Set firmware context of the calling hart.\r
91\r
92 @param[in] FirmwareContext The firmware context pointer.\r
93**/\r
94VOID\r
95EFIAPI\r
96SetFirmwareContext (\r
97 IN EFI_RISCV_FIRMWARE_CONTEXT *FirmwareContext\r
98 );\r
99\r
100/**\r
101 Get pointer to OpenSBI Firmware Context\r
102\r
103 Get the pointer of firmware context.\r
104\r
105 @param FirmwareContextPtr Pointer to retrieve pointer to the\r
106 Firmware Context.\r
107**/\r
108VOID\r
109EFIAPI\r
110GetFirmwareContextPointer (\r
111 IN OUT EFI_RISCV_FIRMWARE_CONTEXT **FirmwareContextPtr\r
112 );\r
113\r
114/**\r
115 Set pointer to OpenSBI Firmware Context\r
116\r
117 Set the pointer of firmware context.\r
118\r
119 @param FirmwareContextPtr Pointer to Firmware Context.\r
120**/\r
121VOID\r
122EFIAPI\r
123SetFirmwareContextPointer (\r
124 IN EFI_RISCV_FIRMWARE_CONTEXT *FirmwareContextPtr\r
125 );\r
126\r
127/**\r
128 Make ECALL in assembly\r
129\r
130 Switch to M-mode\r
131\r
132 @param[in,out] Arg0\r
133 @param[in,out] Arg1\r
134 @param[in] Arg2\r
135 @param[in] Arg3\r
136 @param[in] Arg4\r
137 @param[in] Arg5\r
138 @param[in] FID\r
139 @param[in] EXT\r
140**/\r
141VOID\r
142EFIAPI\r
143RiscVSbiEcall (\r
144 IN OUT UINTN *Arg0,\r
145 IN OUT UINTN *Arg1,\r
146 IN UINTN Arg2,\r
147 IN UINTN Arg3,\r
148 IN UINTN Arg4,\r
149 IN UINTN Arg5,\r
150 IN UINTN Fid,\r
151 IN UINTN Ext\r
152 );\r
153\r
154#endif\r