Xenon/src/kernel.zig

44 lines
1.3 KiB
Zig

const builtin = @import("builtin");
const std = @import("std");
const assert = std.debug.assert;
const bootboot = @import("bootboot.zig");
const cpio = @import("formats/cpio.zig");
const cpu = @import("cpu.zig");
const global = @import("global.zig");
const logger = @import("logger.zig");
const log = logger.log;
const microcode = @import("microcode.zig");
const types = @import("types.zig");
pub fn main() noreturn {
log(.Info, "Entering Xenon ({} {} {})", .{ builtin.arch, builtin.mode, builtin.code_model });
{ // CPU information
log(.Info, "CPU vendor {}", .{cpu.CpuId.vendor()});
const sign = cpu.CpuId.signature();
log(.Info, "CPU {}", .{sign});
log(.Info, "CPU microcode patchlevel {x}", .{microcode.patchlevel()});
}
var initrd = cpio.Cpio.init(global.initrd.?);
if (microcode.update_cpio(initrd)) {
log(.Info, "Updated microcode to patchlevel {x}", .{microcode.patchlevel()});
// Update capabilities after microcode update
global.cpu_capabilities.initialize();
}
log(.Info, "CPU capabilities: {}", .{global.cpu_capabilities});
@panic("Kernel is about to return");
}
pub fn main_ap() noreturn {
while (true) {
cpu.hlt();
}
@panic("AP is about to return");
}