aboutsummaryrefslogtreecommitdiff
path: root/mirai/kernel/boot.zig
diff options
context:
space:
mode:
authorBobby <[email protected]>2026-02-24 09:29:01 +0530
committerBobby <[email protected]>2026-02-24 09:29:01 +0530
commitf3513909b8c02cd2d9723c4e908abedefb54d1fd (patch)
tree87daac051c2dcf4d6dbe10f16c38957d9b8f6a57 /mirai/kernel/boot.zig
parent60f4c2824c63cef87fea0227ed7229268d1b2931 (diff)
downloadakiba-f3513909b8c02cd2d9723c4e908abedefb54d1fd.tar.xz
akiba-f3513909b8c02cd2d9723c4e908abedefb54d1fd.zip
feat: Implement Mirai kernel with boot parameter handling and framebuffer support
Diffstat (limited to 'mirai/kernel/boot.zig')
-rw-r--r--mirai/kernel/boot.zig92
1 files changed, 92 insertions, 0 deletions
diff --git a/mirai/kernel/boot.zig b/mirai/kernel/boot.zig
new file mode 100644
index 0000000..8d46901
--- /dev/null
+++ b/mirai/kernel/boot.zig
@@ -0,0 +1,92 @@
+//! Mirai Boot Parameters
+//!
+//! This structure matches what Hikari bootloader passes to the kernel.
+
+pub const boot_params_magic: u64 = 0x494152494D424B41; // "AKBMIRAI"
+pub const boot_params_version: u32 = 1;
+
+pub const BootParams = extern struct {
+ magic: u64,
+ version: u32,
+ size: u32,
+
+ framebuffer: FramebufferInfo,
+ memory_map: MemoryMapInfo,
+ kernel: KernelInfo,
+ acpi: AcpiInfo,
+ boot_time: u64,
+
+ reserved: [256]u8,
+
+ pub fn is_valid(self: *const BootParams) bool {
+ return self.magic == boot_params_magic and
+ self.version == boot_params_version;
+ }
+};
+
+pub const FramebufferInfo = extern struct {
+ base: u64,
+ size: u64,
+ width: u32,
+ height: u32,
+ stride: u32,
+ pixel_format: PixelFormat,
+ red_mask_size: u8,
+ red_mask_shift: u8,
+ green_mask_size: u8,
+ green_mask_shift: u8,
+ blue_mask_size: u8,
+ blue_mask_shift: u8,
+ reserved: [2]u8,
+};
+
+pub const PixelFormat = enum(u32) {
+ rgb = 0,
+ bgr = 1,
+ bitmask = 2,
+ unknown = 255,
+};
+
+pub const MemoryMapInfo = extern struct {
+ entries: u64,
+ entry_count: u32,
+ entry_size: u32,
+ descriptor_version: u32,
+ reserved: u32,
+};
+
+pub const MemoryRegion = extern struct {
+ base: u64,
+ size: u64,
+ region_type: MemoryType,
+ attributes: u64,
+};
+
+pub const MemoryType = enum(u32) {
+ usable = 0,
+ reserved = 1,
+ acpi_reclaimable = 2,
+ acpi_nvs = 3,
+ bad_memory = 4,
+ bootloader_reclaimable = 5,
+ kernel = 6,
+ framebuffer = 7,
+};
+
+pub const KernelInfo = extern struct {
+ physical_base: u64,
+ virtual_base: u64,
+ size: u64,
+ entry_point: u64,
+ pml4_address: u64,
+ physmap_base: u64,
+ physmap_size: u64,
+ stack_top: u64,
+ stack_size: u64,
+};
+
+pub const AcpiInfo = extern struct {
+ rsdp_address: u64,
+ rsdp_version: u32,
+ reserved: u32,
+};