// Public NTLite boot info ABI declarations shared between the bootloader and kernel. #pragma once #include #include #include // Encodes the ASCII tag 'BOOTINFO'. #define BOOT_INFO_MAGIC 0x424F4F54494E464FULL #define BOOT_INFO_VERSION 4u #define BOOT_FILE_NAME_MAX 64u #define BOOT_TIME_FLAG_VALID 0x0001u #define BOOT_TIME_FLAG_TZ_KNOWN 0x0002u #define BOOT_TIME_FLAG_UEFI 0x0004u #define BOOT_TIME_FLAG_FALLBACK 0x0008u #define BOOT_TIME_FLAG_RTC 0x0010u #define BOOT_TIME_UNSPECIFIED_TZ 2047 typedef struct BOOT_TIME { uint16_t Year; uint8_t Month; uint8_t Day; uint8_t Hour; uint8_t Minute; uint8_t Second; uint8_t Daylight; uint32_t Nanosecond; int16_t TimeZoneMinutes; uint16_t Flags; uint32_t Reserved; } BOOT_TIME; // Describes a page-backed raw file that remains owned by the boot handoff. typedef struct BOOT_BLOB { uintptr_t PhysicalBase; uint32_t Length; uint32_t PageCount; } BOOT_BLOB; // Describes a boot driver raw file passed to the kernel without mapping it as an image. typedef struct BOOT_FILE { char DriverId[BOOT_FILE_NAME_MAX]; char Image[BOOT_FILE_NAME_MAX]; uintptr_t PhysicalBase; uint32_t Length; uint32_t PageCount; } BOOT_FILE; // Describes the page-backed, identified boot-driver array. typedef struct BOOT_FILE_LIST { uintptr_t FilesPhysical; uint32_t Count; uint32_t PageCount; } BOOT_FILE_LIST; // Describes one fixed-base PE image materialized by the bootloader. typedef struct BOOT_IMAGE { uintptr_t VirtualBase; uintptr_t PhysicalBase; uint32_t ImageSize; uint32_t PageCount; uint32_t EntryRva; uint32_t Reserved; } BOOT_IMAGE; typedef struct BOOT_INFO { uint64_t Magic; uint32_t Size; uint32_t Version; // Physical memory translated from the final firmware memory map. MEMORY_MAP MemoryMap; // GOP framebuffer. uintptr_t FramebufferBase; uint32_t FramebufferWidth; uint32_t FramebufferHeight; uint32_t FramebufferStride; uint32_t Reserved0; // Fixed core images and raw boot inputs. BOOT_IMAGE KernelImage; BOOT_IMAGE HalImage; BOOT_BLOB BootIni; BOOT_BLOB DriversIni; BOOT_FILE_LIST BootDrivers; // ACPI RSDP physical address. uintptr_t RsdpPhysical; // Direct physical window base - always 0xFFFF880000000000. uintptr_t PhysicalMapBase; // Reserved low-memory page for the AP startup trampoline, or zero. uintptr_t ApTrampolinePhys; // Firmware wall-clock snapshot taken before ExitBootServices. BOOT_TIME BootTime; } BOOT_INFO; // BOOT_INFO is an x64 firmware-to-kernel binary handoff, not a private C structure. _Static_assert(sizeof(uintptr_t) == 8u, "BOOT_INFO requires x64 pointers"); _Static_assert(sizeof(BOOT_TIME) == 20u, "BOOT_TIME ABI size changed"); _Static_assert(sizeof(BOOT_BLOB) == 16u, "BOOT_BLOB ABI size changed"); _Static_assert(sizeof(BOOT_FILE) == 144u, "BOOT_FILE ABI size changed"); _Static_assert(sizeof(BOOT_FILE_LIST) == 16u, "BOOT_FILE_LIST ABI size changed"); _Static_assert(sizeof(BOOT_IMAGE) == 32u, "BOOT_IMAGE ABI size changed"); _Static_assert(offsetof(BOOT_INFO, MemoryMap) == 16u, "BOOT_INFO MemoryMap offset changed"); _Static_assert(offsetof(BOOT_INFO, KernelImage) == 6200u, "BOOT_INFO KernelImage offset changed"); _Static_assert(offsetof(BOOT_INFO, BootDrivers) == 6296u, "BOOT_INFO BootDrivers offset changed"); _Static_assert(offsetof(BOOT_INFO, BootTime) == 6336u, "BOOT_INFO BootTime offset changed"); _Static_assert(sizeof(BOOT_INFO) == 6360u, "BOOT_INFO ABI size changed");