blob: 2500455dd58db0279d94c60a3d1b4062727bc3e5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
//! Boot Sequence
const asm_cpu = @import("../../asm/cpu/cpu.zig");
const serial = @import("../../drivers/serial/serial.zig");
pub const constants = @import("constants/constants.zig");
pub const types = @import("types/types.zig");
pub const phases = @import("phases/phases.zig");
pub const message = @import("message/message.zig");
pub const state = @import("state.zig");
pub const Phase = constants.Phase;
pub const BootInfo = types.BootInfo;
pub fn execute(boot_info: *const BootInfo) bool {
state.set_boot_info(boot_info);
if (!serial.initialize_default()) {
return false;
}
message.print_banner();
serial.printf("Starting Akiba boot sequence\n", .{});
serial.printf("Powered by the Mirai kernel\n\n", .{});
state.set_current_phase(Phase.cpu);
if (!phases.execute_cpu()) {
serial.printf("\nCPU initialization failed, cannot continue\n", .{});
return false;
}
state.advance_phase();
serial.printf("\n", .{});
state.set_current_phase(Phase.memory);
if (!phases.execute_memory(boot_info)) {
serial.printf("\nMemory initialization failed, cannot continue\n", .{});
return false;
}
state.advance_phase();
serial.printf("\nBoot sequence complete, Akiba is ready\n", .{});
state.set_current_phase(Phase.complete);
return true;
}
pub fn halt_on_failure() noreturn {
serial.printf("\nSystem halted due to unrecoverable error\n", .{});
asm_cpu.halt_loop();
}
pub fn get_current_phase() Phase {
return state.get_current_phase();
}
pub fn get_boot_info() ?*const BootInfo {
return state.get_boot_info();
}
pub fn is_complete() bool {
return state.is_complete();
}
|