From 25108684fe235d4296c3cbc480298df209682586 Mon Sep 17 00:00:00 2001
From: stefan <stefan@s00.xyz>
Date: Tue, 4 Apr 2023 06:01:50 +0000
Subject: build system and some other stuff

---
 sys/dev/sbi.c | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)
 create mode 100644 sys/dev/sbi.c

(limited to 'sys/dev')

diff --git a/sys/dev/sbi.c b/sys/dev/sbi.c
new file mode 100644
index 0000000..0c9e3f2
--- /dev/null
+++ b/sys/dev/sbi.c
@@ -0,0 +1,39 @@
+#include <sbi.h>
+
+struct sbiret 
+sbi_ecall(int ext, int fid, unsigned long arg0,
+                        unsigned long arg1, unsigned long arg2,
+                        unsigned long arg3, unsigned long arg4,
+                        unsigned long arg5)
+{
+        struct sbiret ret;
+
+        register unsigned long a0 asm ("a0") = (unsigned long)(arg0);
+        register unsigned long a1 asm ("a1") = (unsigned long)(arg1);
+        register unsigned long a2 asm ("a2") = (unsigned long)(arg2);
+        register unsigned long a3 asm ("a3") = (unsigned long)(arg3);
+        register unsigned long a4 asm ("a4") = (unsigned long)(arg4);
+        register unsigned long a5 asm ("a5") = (unsigned long)(arg5);
+        register unsigned long a6 asm ("a6") = (unsigned long)(fid);
+        register unsigned long a7 asm ("a7") = (unsigned long)(ext);
+        asm volatile ("ecall"
+                      : "+r" (a0), "+r" (a1)
+                      : "r" (a2), "r" (a3), "r" (a4), "r" (a5), "r" (a6), "r" (a7)
+                      : "memory");
+        ret.err = a0;
+        ret.val = a1;
+
+        return ret;
+}
+
+void
+sbi_console_putchar(int c)
+{
+	sbi_ecall(1, 0, c, 0, 0, 0, 0, 0);
+}
+
+void
+sbi_shutdown(void)
+{
+	sbi_ecall(8, 0, 0, 0, 0, 0, 0, 0);
+}
-- 
cgit v1.2.3