summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnup Patel <[email protected]>2018-12-26 09:42:26 +0530
committerAnup Patel <[email protected]>2018-12-27 09:29:29 +0530
commitb46970b47e63dce030ef6d4196f7c395a9ea23c1 (patch)
treef2c483d2d5e0b9daa5763fe7aa3317b9eaa83e89
parentb5ae8e8a650d8cb0134f03f53472fb026d2ee6e6 (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.h39
-rw-r--r--lib/sbi_ecall.c11
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;