using System.Runtime.InteropServices; namespace XFESystem.Kernel; /// Small, allocation-free firmware-framebuffer diagnostics until desktop ownership. internal static class NativeBootProgress { private static bool visible; private static string stage = "A00"; internal static int StageCount { get; private set; } internal static bool IsVisible => visible; [DllImport("*", EntryPoint = "XfeBootConsoleSetEnabled")] [SuppressGCTransition] private static extern void SetEnabled(int enabled); [DllImport("*", EntryPoint = "XfeBootConsoleWriteChar")] [SuppressGCTransition] private static extern void WriteChar(int character); [DllImport("*", EntryPoint = "XfeRuntimeSerialAbsentCount")] [SuppressGCTransition] internal static extern ulong SerialAbsentCount(); [DllImport("*", EntryPoint = "XfeRuntimeSerialTimeoutCount")] [SuppressGCTransition] internal static extern ulong SerialTimeoutCount(); [DllImport("*", EntryPoint = "XfeRuntimeSerialDroppedCount")] [SuppressGCTransition] internal static extern ulong SerialDroppedCount(); [DllImport("*", EntryPoint = "XfeRuntimePhysicalCpuCount")] [SuppressGCTransition] internal static extern uint PhysicalCpuCount(); [DllImport("*", EntryPoint = "XfeRuntimeSchedulerCpuCount")] [SuppressGCTransition] internal static extern uint SchedulerCpuCount(); internal static void Begin() { SetEnabled(1); visible = true; StageCount = 0; Write("\nXFESystem startup diagnostics\n"); Stage("A00", "Kernel lifecycle entered"); } internal static void Resume(string code, string description) { // The base lifecycle disables its early mirror after OnBoot. SetEnabled(1); visible = true; Stage(code, description); } internal static void Stage(string code, string description) { stage = code; StageCount++; Write("[XFE "); Write(code); Write("] "); Write(description); Write("\n"); } internal static void Failed(string reason) { if (!visible) { SetEnabled(1); visible = true; } Write("\n[XFE BOOT FAILED] Stage "); Write(stage); Write("\n"); Write(reason); Write("\nPlease photograph this screen. No disk install was performed.\n"); } internal static void DesktopOwnsDisplay() { // Disable the early mirror before the first desktop presentation so // runtime logging can never paint over a completed desktop frame. SetEnabled(0); visible = false; } private static void Write(string text) { if (!visible) return; foreach (char character in text) WriteChar(character); } }