1 /* 2 * SPDX-License-Identifier: BSD-2-Clause 3 * 4 * Copyright (c) 2019 Western Digital Corporation or its affiliates. 5 * 6 * Authors: 7 * Anup Patel <anup.patel@wdc.com> 8 */ 9 10 #ifndef __SBI_ECALL_H__ 11 #define __SBI_ECALL_H__ 12 13 #include <sbi/sbi_types.h> 14 #include <sbi/sbi_list.h> 15 16 #define SBI_ECALL_VERSION_MAJOR 0 17 #define SBI_ECALL_VERSION_MINOR 2 18 #define SBI_OPENSBI_IMPID 1 19 20 struct sbi_trap_regs; 21 struct sbi_trap_info; 22 struct sbi_scratch; 23 24 struct sbi_ecall_extension { 25 struct sbi_dlist head; 26 unsigned long extid_start; 27 unsigned long extid_end; 28 int (* probe)(struct sbi_scratch *scratch, 29 unsigned long extid, unsigned long *out_val); 30 int (* handle)(struct sbi_scratch *scratch, 31 unsigned long extid, unsigned long funcid, 32 unsigned long *args, unsigned long *out_val, 33 struct sbi_trap_info *out_trap); 34 }; 35 36 extern struct sbi_ecall_extension ecall_base; 37 extern struct sbi_ecall_extension ecall_legacy; 38 extern struct sbi_ecall_extension ecall_time; 39 extern struct sbi_ecall_extension ecall_rfence; 40 extern struct sbi_ecall_extension ecall_ipi; 41 extern struct sbi_ecall_extension ecall_vendor; 42 43 u16 sbi_ecall_version_major(void); 44 45 u16 sbi_ecall_version_minor(void); 46 47 struct sbi_ecall_extension *sbi_ecall_find_extension(unsigned long extid); 48 49 int sbi_ecall_register_extension(struct sbi_ecall_extension *ext); 50 51 void sbi_ecall_unregister_extension(struct sbi_ecall_extension *ext); 52 53 int sbi_ecall_handler(u32 hartid, ulong mcause, struct sbi_trap_regs *regs, 54 struct sbi_scratch *scratch); 55 56 int sbi_ecall_init(void); 57 58 #endif 59