diff options
Diffstat (limited to 'src/main.zig')
-rw-r--r-- | src/main.zig | 44 |
1 files changed, 34 insertions, 10 deletions
diff --git a/src/main.zig b/src/main.zig index 540e8f8..75573d6 100644 --- a/src/main.zig +++ b/src/main.zig @@ -14,6 +14,8 @@ const pci = @import("pci.zig"); const plic = @import("plic.zig"); const process = @import("process.zig"); +const legacy = @import("sbi/legacy.zig"); + const Error = error{ HartIdOutOfRange, SuspiciousFdtAddr, @@ -42,6 +44,11 @@ pub fn panic(msg: []const u8, error_return_trace: ?*std.builtin.StackTrace, ret_ export fn _start() callconv(.Naked) noreturn { // Stack grows down, use (exclusive) end instead of start. asm volatile ( + \\ .option push + \\ .option norelax + \\ la gp, _global_pointer + \\ .option pop + \\ \\ la sp, _stack_end \\ call %[function] : @@ -70,10 +77,10 @@ fn run(hart_id: usize, fdt_blob: *fdt.RawHeader) !noreturn { fdt.default = try dt_header.parseTree(allocator); - try Console.init(kmem, &fdt.default, allocator); + //try Console.init(kmem, &fdt.default, allocator); - const console = Console.autoChoose() orelse while (true) asm volatile ("wfi"); - const w = console.writer(); + var console = Console.autoChoose() orelse while (true) asm volatile ("wfi"); + var w = console.writer(); try w.print("\r\n", .{}); try w.print("Console init\r\n", .{}); @@ -84,12 +91,12 @@ fn run(hart_id: usize, fdt_blob: *fdt.RawHeader) !noreturn { try w.print("\r\n", .{}); try w.print("===================== Kernel Page Table =====================\r\n", .{}); - try w.print("MMIO: 0x{x:0>8} - 0x{x:0>8} -> identity mapped (rw-)\r\n", .{ paging.mmio_start, paging.mmio_end }); - try w.print("\r\n", .{}); try w.print(".text: 0x{x:0>8} - 0x{x:0>8} -> identity mapped (r-x)\r\n", .{ @intFromPtr(paging.text_start), @intFromPtr(paging.text_end) }); try w.print(".rodata: 0x{x:0>8} - 0x{x:0>8} -> identity mapped (r--)\r\n", .{ @intFromPtr(paging.rodata_start), @intFromPtr(paging.rodata_end) }); try w.print(".data: 0x{x:0>8} - 0x{x:0>8} -> identity mapped (rw-)\r\n", .{ @intFromPtr(paging.data_start), @intFromPtr(paging.data_end) }); + try w.print(".sdata: 0x{x:0>8} - 0x{x:0>8} -> identity mapped (rw-)\r\n", .{ @intFromPtr(paging.sdata_start), @intFromPtr(paging.sdata_end) }); try w.print(".bss: 0x{x:0>8} - 0x{x:0>8} -> identity mapped (rw-)\r\n", .{ @intFromPtr(paging.bss_start), @intFromPtr(paging.bss_end) }); + try w.print(".sbss: 0x{x:0>8} - 0x{x:0>8} -> identity mapped (rw-)\r\n", .{ @intFromPtr(paging.sbss_start), @intFromPtr(paging.sbss_end) }); try w.print("Stack: 0x{x:0>8} - 0x{x:0>8} -> identity mapped (rw-)\r\n", .{ @intFromPtr(paging.stack_start), @intFromPtr(paging.stack_end) }); try w.print("Trap Stack: 0x{x:0>8} - 0x{x:0>8} -> identity mapped (rw-)\r\n", .{ @intFromPtr(paging.stvec_stack_start), @intFromPtr(paging.stvec_stack_end) }); try w.print("\r\n", .{}); @@ -99,15 +106,32 @@ fn run(hart_id: usize, fdt_blob: *fdt.RawHeader) !noreturn { try w.print("=============================================================\r\n", .{}); try w.print("\r\n", .{}); - instructions.setSatp(kmem.satp(0)); - - try w.print("Paging : Sv39\r\n", .{}); - interrupts.init(); interrupts.setEnabled(interrupts.Enable.all); try w.print("Interrupts : All\r\n", .{}); - try w.print("\r\n", .{}); + instructions.setSatp(kmem.satp(0)); + const console2 = Console.autoChoose() orelse while (true) asm volatile ("wfi"); + const w2 = console2.writer(); + try w2.print("Paging : Sv39\r\n", .{}); + + try w2.print("\r\n", .{}); + + //instructions.setSatp(.{ + // .ppn = 0, + // .asid = 0, + // .mode = .bare, + //}); + try w2.print("SP = 0x{x:0>16}\r\n", .{instructions.stackPointer()}); + try w2.print("trans 0x{?x:0>16}\r\n", .{kmem.translate(instructions.stackPointer())}); + const fp = asm volatile ("" + : [fp] "={fp}" (-> usize), + ); + try w2.print("FP = 0x{x:0>16}\r\n", .{fp}); + const ra = asm volatile ("" + : [ra] "={ra}" (-> usize), + ); + try w2.print("RA = 0x{x:0>16}\r\n", .{ra}); try w.print("Timer : {d} Hz\r\n", .{1 / (@as(f64, process.schedule_interval_millis) / 1000)}); |