aboutsummaryrefslogtreecommitdiff
path: root/src/main.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.zig')
-rw-r--r--src/main.zig44
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)});