#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void entry(uint8_t _boot_drive) { boot_drive = _boot_drive; mtrr_save(); term_textmode(); print("Limine " LIMINE_VERSION "\n\n"); if (!a20_enable()) panic("Could not enable A20 line"); print("Boot drive: %x\n", boot_drive); // Look for config file. print("Searching for config file...\n"); struct part parts[4]; for (int i = 0; ; i++) { if (i == 4) { panic("Config file not found."); } print("Checking partition %d...\n", i); int ret = get_part(&parts[i], boot_drive, i); if (ret) { print("Partition not found.\n"); } else { print("Partition found.\n"); if (!init_config(boot_drive, i)) { print("Config file found and loaded.\n"); break; } } } init_e820(); init_memmap(); char *cmdline = menu(boot_drive); char proto[32]; if (!config_get_value(proto, 0, 32, "KERNEL_PROTO")) { if (!config_get_value(proto, 0, 32, "PROTOCOL")) { panic("PROTOCOL not specified"); } } if (!strcmp(proto, "stivale")) { stivale_load(cmdline); } else if (!strcmp(proto, "stivale2")) { stivale2_load(cmdline); } else if (!strcmp(proto, "linux")) { linux_load(cmdline); } else if (!strcmp(proto, "chainload")) { chainload(); } else { panic("Invalid protocol specified"); } }