summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/kernel.c21
-rw-r--r--kernel/mem.c32
2 files changed, 48 insertions, 5 deletions
diff --git a/kernel/kernel.c b/kernel/kernel.c
index 753f4a5..3dbf0d1 100644
--- a/kernel/kernel.c
+++ b/kernel/kernel.c
@@ -1,3 +1,5 @@
+#include <types.h>
+#include <wdt.h>
#define UART_BASE 0x10000000 // Example UART address
static inline void putchar(char c) {
@@ -11,10 +13,19 @@ static void print_string(const char *str) {
}
}
-void kernel_main(void) {
- print_string("Hello from RISC-V kernel!\n");
-
- while (1) {
- // Wait
+void kernel_main(void *wdt) {
+ struct wdt_root *root = wdt;
+ print_string("deserialized all!\n");
+ uint32_t count = root->count;
+ for (uint32_t i = 0; i < count; i++) {
+ print_string("deserializing wdt node!\n");
+ print_string("device type: ");
+ if (root->devices[i].type == 0) {
+ print_string("mem");
+ } else {
+ print_string("unknown");
+ }
+ print_string("\n");
}
+ while(1);
}
diff --git a/kernel/mem.c b/kernel/mem.c
new file mode 100644
index 0000000..531dd81
--- /dev/null
+++ b/kernel/mem.c
@@ -0,0 +1,32 @@
+#include <types.h>
+#include <mem.h>
+
+static char eheap[EHEAP_SIZE] = {0};
+static size_t eheap_off = 0;
+
+void* kmalloc(size_t size) {
+ return (void*)size;
+}
+
+void* kemalloc(size_t size) {
+ size = (size + 7) & ~7;
+
+ if (eheap_off + size > EHEAP_SIZE) {
+ return NULL;
+ }
+
+ void *ptr = &eheap[eheap_off];
+ eheap_off += size;
+ return ptr;
+}
+
+void* memcpy(void *to, const void *from, size_t size) {
+ char *dest = (char *)to;
+ const char *src = (const char *)from;
+
+ while (size--) {
+ *dest++ = *src++;
+ }
+
+ return dest;
+}