summaryrefslogtreecommitdiff
path: root/website-kernel/arch
diff options
context:
space:
mode:
Diffstat (limited to 'website-kernel/arch')
-rw-r--r--website-kernel/arch/kernel.c35
-rw-r--r--website-kernel/arch/linker.ld2
-rw-r--r--website-kernel/arch/start.S4
3 files changed, 37 insertions, 4 deletions
diff --git a/website-kernel/arch/kernel.c b/website-kernel/arch/kernel.c
index fe771ec..32d9dbd 100644
--- a/website-kernel/arch/kernel.c
+++ b/website-kernel/arch/kernel.c
@@ -4,12 +4,45 @@
#define SERIAL_PORT 0x70000000
+#define DRAM_DEVICE 0
+#define UART_DEVICE 1
+
void serial_write(char value) {
*(char *)SERIAL_PORT = value;
}
-void kernel_main() {
+void kernel_main(int hart, struct boot_args *args) {
+ if (hart != 0) {
+ return;
+ }
register_console_callback(serial_write);
printk("webkernel version %s (Compiler %s, Linker %s) on %s\n", VERSION, COMPILER_NAME, LINKER_NAME, ARCH_NAME);
+ printk("Command line: %s\n", args->cmd_line);
+
+ printk("BIOS provided device map:\n");
+ struct device *root = args->devices;
+
+ while (root != NULL) {
+ printk("....Device at 0x%x to 0x%x is ",
+ (uintptr_t)root->start,
+ (uintptr_t)root->start + root->size
+ );
+ switch(root->device_type) {
+ case DRAM_DEVICE:
+ printk("generic DRAM device, usable\n");
+ break;
+ case UART_DEVICE:
+ printk("Web OS UART character device, not ns16550a compatible, MMIO device\n");
+ break;
+ default:
+ printk("unknown\n");
+
+ }
+ root = root->next;
+ }
+}
+
+void panic(char *cause) {
+ printk("PANIC: %s\n", cause);
}
diff --git a/website-kernel/arch/linker.ld b/website-kernel/arch/linker.ld
index 52a3a05..ce8b9c6 100644
--- a/website-kernel/arch/linker.ld
+++ b/website-kernel/arch/linker.ld
@@ -4,7 +4,7 @@ ENTRY(_start)
MEMORY
{
ROM (rx) : ORIGIN = 0x80000000, LENGTH = 1M
- RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 4M
+ RAM (rwx) : ORIGIN = 0x80100000, LENGTH = 1M
}
SECTIONS
diff --git a/website-kernel/arch/start.S b/website-kernel/arch/start.S
index 8248ab9..3bb704c 100644
--- a/website-kernel/arch/start.S
+++ b/website-kernel/arch/start.S
@@ -5,8 +5,8 @@
.extern user_regs
_start:
- csrw sstatus, zero
- csrw sie, zero
+ csrw mstatus, zero
+ csrw mie, zero
la sp, __stack_top