const std = @import("std"); pub const ke = @import("kern/root.zig"); pub const ex = @import("ex/root.zig"); pub const pl = @import("platform/root.zig"); pub const rtl = @import("rtl"); pub const ksyms = @import("ksyms"); pub const arch = @import("arch"); pub const mm = @import("mm/root.zig"); pub const ps = @import("proc/root.zig"); pub const BootInfo = @import("loader/info.zig"); pub const tests = @import("tests/root.zig"); pub const rcu = @import("rcu/root.zig"); pub const bv = @import("bootvid/bootvid.zig"); const config = @import("config"); pub const init = ".text.init"; pub const percpu_init_set = rtl.LinkerSetType("percpu_init", *const fn () void); pub const percpu = ".data.percpu"; pub const VAddr = usize; pub const PAddr = usize; pub var kernel_heap_base: usize = 0; pub var kernel_pfndb_base: usize = 0; pub var boot_info: *BootInfo = undefined; pub inline fn mmio_read(comptime T: type, addr: usize) T { return @as(*volatile T, @ptrFromInt(addr)).*; } pub inline fn mmio_write(comptime T: type, addr: usize, value: T) void { @as(*volatile T, @ptrFromInt(addr)).* = value; } /// Return N kibibytes in bytes. pub fn kib(comptime N: u32) usize { return N * 1024; } /// Return N mebibytes in bytes. pub fn mib(comptime N: u32) usize { return kib(N) * 1024; } /// Return N gibibytes in bytes. pub fn gib(comptime N: u32) usize { return mib(N) * 1024; } /// Return N tibibytes in bytes. pub fn tib(comptime N: u32) usize { return gib(N) * 1024; } pub const std_options = std.Options{ .logFn = ke.log.log, }; pub const panic = std.debug.FullPanic(ke.panic); comptime { // Ensure the entry point is linked in. _ = @import("kern/init.zig"); }