diff options
| author | Anup Patel <[email protected]> | 2018-12-26 09:42:26 +0530 |
|---|---|---|
| committer | Anup Patel <[email protected]> | 2018-12-27 09:29:29 +0530 |
| commit | b46970b47e63dce030ef6d4196f7c395a9ea23c1 (patch) | |
| tree | f2c483d2d5e0b9daa5763fe7aa3317b9eaa83e89 | |
| parent | b5ae8e8a650d8cb0134f03f53472fb026d2ee6e6 (diff) | |
lib: Move ECALL defines to sbi_ecall_interface.h
This patch moves all ECALL defines to sbi_ecall_interface.h so
that it can be shared with firmware payloads.
Signed-off-by: Anup Patel <[email protected]>
| -rw-r--r-- | include/sbi/sbi_ecall_interface.h | 39 | ||||
| -rw-r--r-- | lib/sbi_ecall.c | 11 |
2 files changed, 40 insertions, 10 deletions
diff --git a/include/sbi/sbi_ecall_interface.h b/include/sbi/sbi_ecall_interface.h new file mode 100644 index 00000000..53de6a4d --- /dev/null +++ b/include/sbi/sbi_ecall_interface.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2018 Western Digital Corporation or its affiliates. + * + * Authors: + * Anup Patel <[email protected]> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#ifndef __SBI_ECALL_INTERFACE_H__ +#define __SBI_ECALL_INTERFACE_H__ + +#define SBI_ECALL_SET_TIMER 0 +#define SBI_ECALL_CONSOLE_PUTCHAR 1 +#define SBI_ECALL_CONSOLE_GETCHAR 2 +#define SBI_ECALL_CLEAR_IPI 3 +#define SBI_ECALL_SEND_IPI 4 +#define SBI_ECALL_REMOTE_FENCE_I 5 +#define SBI_ECALL_REMOTE_SFENCE_VMA 6 +#define SBI_ECALL_REMOTE_SFENCE_VMA_ASID 7 +#define SBI_ECALL_SHUTDOWN 8 + +#define SBI_ECALL(__num, __a0, __a1, __a2) ({ \ + register unsigned long a0 asm ("a0") = (unsigned long)(__a0); \ + register unsigned long a1 asm ("a1") = (unsigned long)(__a1); \ + register unsigned long a2 asm ("a2") = (unsigned long)(__a2); \ + register unsigned long a7 asm ("a7") = (unsigned long)(__num);\ + asm volatile ("ecall" \ + : "+r" (a0) \ + : "r" (a1), "r" (a2), "r" (a7) \ + : "memory"); \ + a0; \ +}) + +#define SBI_ECALL_0(__num) SBI_ECALL(__num, 0, 0, 0) +#define SBI_ECALL_1(__num, __a0) SBI_ECALL(__num, __a0, 0, 0) +#define SBI_ECALL_2(__num, __a0, __a1) SBI_ECALL(__num, __a0, __a1, 0) + +#endif diff --git a/lib/sbi_ecall.c b/lib/sbi_ecall.c index 928a8b75..731a6652 100644 --- a/lib/sbi_ecall.c +++ b/lib/sbi_ecall.c @@ -9,6 +9,7 @@ #include <sbi/sbi_console.h> #include <sbi/sbi_ecall.h> +#include <sbi/sbi_ecall_interface.h> #include <sbi/sbi_error.h> #include <sbi/sbi_ipi.h> #include <sbi/sbi_system.h> @@ -18,16 +19,6 @@ #define SBI_ECALL_VERSION_MAJOR 0 #define SBI_ECALL_VERSION_MINOR 1 -#define SBI_ECALL_SET_TIMER 0 -#define SBI_ECALL_CONSOLE_PUTCHAR 1 -#define SBI_ECALL_CONSOLE_GETCHAR 2 -#define SBI_ECALL_CLEAR_IPI 3 -#define SBI_ECALL_SEND_IPI 4 -#define SBI_ECALL_REMOTE_FENCE_I 5 -#define SBI_ECALL_REMOTE_SFENCE_VMA 6 -#define SBI_ECALL_REMOTE_SFENCE_VMA_ASID 7 -#define SBI_ECALL_SHUTDOWN 8 - u16 sbi_ecall_version_major(void) { return SBI_ECALL_VERSION_MAJOR; |
