123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- /** @file
- Library to call the RISC-V SBI ecalls
- Copyright (c) 2021-2022, Hewlett Packard Development LP. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
- @par Glossary:
- - Hart - Hardware Thread, similar to a CPU core
- Currently, EDK2 needs to call SBI only to set the time and to do system reset.
- **/
- #ifndef RISCV_SBI_LIB_H_
- #define RISCV_SBI_LIB_H_
- #include <Uefi.h>
- /* SBI Extension IDs */
- #define SBI_EXT_TIME 0x54494D45
- #define SBI_EXT_SRST 0x53525354
- /* SBI function IDs for TIME extension*/
- #define SBI_EXT_TIME_SET_TIMER 0x0
- /* SBI function IDs for SRST extension */
- #define SBI_EXT_SRST_RESET 0x0
- #define SBI_SRST_RESET_TYPE_SHUTDOWN 0x0
- #define SBI_SRST_RESET_TYPE_COLD_REBOOT 0x1
- #define SBI_SRST_RESET_TYPE_WARM_REBOOT 0x2
- #define SBI_SRST_RESET_REASON_NONE 0x0
- #define SBI_SRST_RESET_REASON_SYSFAIL 0x1
- /* SBI return error codes */
- #define SBI_SUCCESS 0
- #define SBI_ERR_FAILED -1
- #define SBI_ERR_NOT_SUPPORTED -2
- #define SBI_ERR_INVALID_PARAM -3
- #define SBI_ERR_DENIED -4
- #define SBI_ERR_INVALID_ADDRESS -5
- #define SBI_ERR_ALREADY_AVAILABLE -6
- #define SBI_ERR_ALREADY_STARTED -7
- #define SBI_ERR_ALREADY_STOPPED -8
- #define SBI_LAST_ERR SBI_ERR_ALREADY_STOPPED
- typedef struct {
- UINT64 BootHartId;
- VOID *PeiServiceTable; // PEI Service table
- VOID *PrePiHobList; // Pre PI Hob List
- UINT64 FlattenedDeviceTree; // Pointer to Flattened Device tree
- } EFI_RISCV_FIRMWARE_CONTEXT;
- //
- // EDK2 OpenSBI firmware extension return status.
- //
- typedef struct {
- UINTN Error; ///< SBI status code
- UINTN Value; ///< Value returned
- } SBI_RET;
- VOID
- EFIAPI
- SbiSetTimer (
- IN UINT64 Time
- );
- EFI_STATUS
- EFIAPI
- SbiSystemReset (
- IN UINTN ResetType,
- IN UINTN ResetReason
- );
- /**
- Get firmware context of the calling hart.
- @param[out] FirmwareContext The firmware context pointer.
- **/
- VOID
- EFIAPI
- GetFirmwareContext (
- OUT EFI_RISCV_FIRMWARE_CONTEXT **FirmwareContext
- );
- /**
- Set firmware context of the calling hart.
- @param[in] FirmwareContext The firmware context pointer.
- **/
- VOID
- EFIAPI
- SetFirmwareContext (
- IN EFI_RISCV_FIRMWARE_CONTEXT *FirmwareContext
- );
- /**
- Get pointer to OpenSBI Firmware Context
- Get the pointer of firmware context.
- @param FirmwareContextPtr Pointer to retrieve pointer to the
- Firmware Context.
- **/
- VOID
- EFIAPI
- GetFirmwareContextPointer (
- IN OUT EFI_RISCV_FIRMWARE_CONTEXT **FirmwareContextPtr
- );
- /**
- Set pointer to OpenSBI Firmware Context
- Set the pointer of firmware context.
- @param FirmwareContextPtr Pointer to Firmware Context.
- **/
- VOID
- EFIAPI
- SetFirmwareContextPointer (
- IN EFI_RISCV_FIRMWARE_CONTEXT *FirmwareContextPtr
- );
- /**
- Make ECALL in assembly
- Switch to M-mode
- @param[in,out] Arg0
- @param[in,out] Arg1
- @param[in] Arg2
- @param[in] Arg3
- @param[in] Arg4
- @param[in] Arg5
- @param[in] FID
- @param[in] EXT
- **/
- VOID
- EFIAPI
- RiscVSbiEcall (
- IN OUT UINTN *Arg0,
- IN OUT UINTN *Arg1,
- IN UINTN Arg2,
- IN UINTN Arg3,
- IN UINTN Arg4,
- IN UINTN Arg5,
- IN UINTN Fid,
- IN UINTN Ext
- );
- #endif
|