diff --git a/src/ex/init.zig b/src/ex/init.zig index 0636529..c25e07e 100644 --- a/src/ex/init.zig +++ b/src/ex/init.zig @@ -11,7 +11,8 @@ const rtl = @import("rtl"); // XXX const fbconsole = @import("../dev/fbconsole.zig"); -pub fn init(boot_info: *r.BootInfo) void { +export fn kmain(boot_info: *r.BootInfo) callconv(.c) void { + ke.init(boot_info); mm.init(boot_info); ps.init(); diff --git a/src/kern/entry.zig b/src/kern/entry.zig deleted file mode 100644 index c6f2ca1..0000000 --- a/src/kern/entry.zig +++ /dev/null @@ -1,16 +0,0 @@ -const std = @import("std"); - -const r = @import("root"); - -const pl = r.pl; -const ke = r.ke; -const ki = ke.private; - -pub const std_options = r.std_options; -pub const panic = r.panic; - -export fn kmain(info: *r.BootInfo) callconv(.c) void { - ke.ncpus = 1; - - ki.init(info); -} diff --git a/src/kern/init.zig b/src/kern/init.zig index 2240628..fbf0c7f 100644 --- a/src/kern/init.zig +++ b/src/kern/init.zig @@ -10,6 +10,7 @@ var thread0: ke.Thread = undefined; var stack: [r.kib(16)]u8 align(16) = undefined; pub fn init(boot_info: *r.BootInfo) linksection(r.init) void { + ke.ncpus = 1; ki.impl.early_init(); ki.tunable.init(boot_info); std.log.info("Welcome to the machine", .{}); @@ -27,6 +28,4 @@ pub fn init(boot_info: *r.BootInfo) linksection(r.init) void { ki.sched.percpu.local().current_thread = &thread0; std.log.info("Zag for {s} ({s}), cmdline is \"{?s}\"", .{ pl.name, arch.name, boot_info.cmdline }); - - ex.private.init(boot_info); } diff --git a/src/kern/root.zig b/src/kern/root.zig index 0c21c7b..b2ffeb1 100644 --- a/src/kern/root.zig +++ b/src/kern/root.zig @@ -24,6 +24,7 @@ pub const Tunable = p.tunable.Tunable; // === Exported Interfaces === pub const panic = p.panic.panic; +pub const init = p.init; pub const ipl = struct { pub const raise = p.ipl.raise; diff --git a/src/loader/main.zig b/src/loader/main.zig index e92d4b2..6ea4e40 100644 --- a/src/loader/main.zig +++ b/src/loader/main.zig @@ -57,8 +57,8 @@ extern fn jump_to_kernel(loader_info: usize, stack: usize, entry: usize) void; pub fn loader_main(kernel: *anyopaque) void { r.mem.init(); const entry = load_kernel(kernel); - const stack = r.mem.alloc(1024 * 32); + const stack = r.mem.alloc(1024 * 16); std.log.info("jumping to {x} with stack {x}", .{ entry, stack }); - jump_to_kernel(@intFromPtr(&r.loader_info), stack + (1024 * 32), entry); + jump_to_kernel(@intFromPtr(&r.loader_info), stack + (1024 * 16), entry); } diff --git a/src/platform/pc/tsc.zig b/src/platform/pc/tsc.zig index 46952d9..881d1b3 100644 --- a/src/platform/pc/tsc.zig +++ b/src/platform/pc/tsc.zig @@ -17,9 +17,7 @@ pub var tsc_timer: ke.TimeCounter = .{ }; pub fn init() linksection(r.init) void { - const features = amd64.cpu_features; - - if (!features.invariant_tsc) { + if (!amd64.cpu_features.invariant_tsc) { log.info("invariant TSC not supported (get a new PC), using fallback", .{}); if (ke.time.best()) |best| { log.info("using {s} as timecounter source", .{best.name}); diff --git a/src/root.zig b/src/root.zig index 85593be..7186339 100644 --- a/src/root.zig +++ b/src/root.zig @@ -60,5 +60,5 @@ pub const panic = std.debug.FullPanic(ke.panic); comptime { // Ensure the entry point is linked in. - _ = @import("kern/entry.zig"); + _ = @import("ex/init.zig"); }