diff options
| author | Nathan Lee <me@nwlee.tech> | 2026-09-26 23:11:30 -0500 |
|---|---|---|
| committer | Nathan Lee <me@nwlee.tech> | 2026-09-26 23:11:30 -0500 |
| commit | a9fb6013db52e231fa2446fd8c512f5e5e92e4d3 (patch) | |
| tree | 189e260a2b6c557abea7822fd834e02dcec73355 /website-kernel | |
| parent | 976de377d14aa69f74cd9856b58d6491c7dae0af (diff) | |
Diffstat (limited to 'website-kernel')
| -rw-r--r-- | website-kernel/arch/kernel.c | 35 | ||||
| -rw-r--r-- | website-kernel/arch/linker.ld | 2 | ||||
| -rw-r--r-- | website-kernel/arch/start.S | 4 |
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 |
