mirror of
https://github.com/limine-bootloader/limine
synced 2024-12-11 17:24:08 +03:00
Tidy up stage 3 entry
This commit is contained in:
parent
deac1d7fd1
commit
c478e57adb
@ -21,7 +21,7 @@
|
|||||||
#include <pxe/tftp.h>
|
#include <pxe/tftp.h>
|
||||||
#include <drivers/disk.h>
|
#include <drivers/disk.h>
|
||||||
|
|
||||||
void stage3_common(void);
|
void stage3_common(struct volume *boot_volume);
|
||||||
|
|
||||||
#if defined (uefi)
|
#if defined (uefi)
|
||||||
EFI_STATUS EFIAPI efi_main(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) {
|
EFI_STATUS EFIAPI efi_main(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) {
|
||||||
@ -44,49 +44,7 @@ EFI_STATUS EFIAPI efi_main(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable
|
|||||||
panic("Can't determine boot disk");
|
panic("Can't determine boot disk");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (boot_volume->backing_dev != NULL) {
|
stage3_common(boot_volume);
|
||||||
boot_volume = boot_volume->backing_dev;
|
|
||||||
|
|
||||||
int part_cnt = 0;
|
|
||||||
for (size_t i = 0; ; i++) {
|
|
||||||
if (part_cnt > boot_volume->max_partition)
|
|
||||||
break;
|
|
||||||
|
|
||||||
struct volume *volume = volume_get_by_coord(boot_volume->drive, i);
|
|
||||||
if (volume == NULL)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
part_cnt++;
|
|
||||||
|
|
||||||
if (!init_config_disk(volume)) {
|
|
||||||
print("Config file found and loaded.\n");
|
|
||||||
boot_partition = i;
|
|
||||||
boot_drive = boot_volume->drive;
|
|
||||||
goto config_loaded;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
panic("Config file not found.");
|
|
||||||
} else {
|
|
||||||
struct volume *volume = volume_get_by_coord(boot_volume->drive, -1);
|
|
||||||
if (volume == NULL)
|
|
||||||
panic("Config file not found.");
|
|
||||||
|
|
||||||
if (!init_config_disk(volume)) {
|
|
||||||
print("Config file found and loaded.\n");
|
|
||||||
boot_partition = -1;
|
|
||||||
boot_drive = boot_volume->drive;
|
|
||||||
goto config_loaded;
|
|
||||||
}
|
|
||||||
|
|
||||||
panic("Config file not found.");
|
|
||||||
}
|
|
||||||
|
|
||||||
config_loaded:
|
|
||||||
print("Boot drive: %x\n", boot_drive);
|
|
||||||
print("Boot partition: %d\n", boot_partition);
|
|
||||||
|
|
||||||
stage3_common();
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -99,25 +57,33 @@ __attribute__((section(".stage3_entry")))
|
|||||||
void stage3_entry(int boot_from) {
|
void stage3_entry(int boot_from) {
|
||||||
(void)boot_from;
|
(void)boot_from;
|
||||||
|
|
||||||
mtrr_save();
|
|
||||||
|
|
||||||
struct volume *boot_volume = volume_get_by_coord(boot_drive, -1);
|
struct volume *boot_volume = volume_get_by_coord(boot_drive, -1);
|
||||||
|
|
||||||
|
stage3_common(boot_volume);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
__attribute__((noreturn))
|
||||||
|
void stage3_common(struct volume *boot_volume) {
|
||||||
|
bool got_config = false;
|
||||||
volume_iterate_parts(boot_volume,
|
volume_iterate_parts(boot_volume,
|
||||||
if (!init_config_disk(_PART)) {
|
if (!init_config_disk(_PART)) {
|
||||||
print("Config file found and loaded.\n");
|
print("Config file found and loaded.\n");
|
||||||
boot_partition = _PARTNO;
|
boot_partition = _PARTNO;
|
||||||
boot_drive = _PART->drive;
|
boot_drive = _PART->drive;
|
||||||
|
got_config = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
stage3_common();
|
if (!got_config)
|
||||||
}
|
panic("Config file not found.");
|
||||||
#endif
|
|
||||||
|
print("Boot drive: %x\n", boot_drive);
|
||||||
|
print("Boot partition: %d\n", boot_partition);
|
||||||
|
|
||||||
|
mtrr_save();
|
||||||
|
|
||||||
__attribute__((noreturn))
|
|
||||||
void stage3_common(void) {
|
|
||||||
char *cmdline;
|
char *cmdline;
|
||||||
char *config = menu(&cmdline);
|
char *config = menu(&cmdline);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user