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 23 struct sbi_ecall_extension { 24 struct sbi_dlist head; 25 unsigned long extid_start; 26 unsigned long extid_end; 27 int (* probe)(unsigned long extid, unsigned long *out_val); 28 int (* handle)(unsigned long extid, unsigned long funcid, 29 unsigned long *args, unsigned long *out_val, 30 struct sbi_trap_info *out_trap); 31 }; 32 33 extern struct sbi_ecall_extension ecall_base; 34 extern struct sbi_ecall_extension ecall_legacy; 35 extern struct sbi_ecall_extension ecall_time; 36 extern struct sbi_ecall_extension ecall_rfence; 37 extern struct sbi_ecall_extension ecall_ipi; 38 extern struct sbi_ecall_extension ecall_vendor; 39 extern struct sbi_ecall_extension ecall_hsm; 40 41 u16 sbi_ecall_version_major(void); 42 43 u16 sbi_ecall_version_minor(void); 44 45 unsigned long sbi_ecall_get_impid(void); 46 47 void sbi_ecall_set_impid(unsigned long impid); 48 49 struct sbi_ecall_extension *sbi_ecall_find_extension(unsigned long extid); 50 51 int sbi_ecall_register_extension(struct sbi_ecall_extension *ext); 52 53 void sbi_ecall_unregister_extension(struct sbi_ecall_extension *ext); 54 55 int sbi_ecall_handler(struct sbi_trap_regs *regs); 56 57 int sbi_ecall_init(void); 58 59 #endif 60