Index: sys/arch/i386/stand/efiboot/eficons.c =================================================================== RCS file: /cvsroot/src/sys/arch/i386/stand/efiboot/eficons.c,v retrieving revision 1.14 diff -p -u -r1.14 eficons.c --- sys/arch/i386/stand/efiboot/eficons.c 14 Sep 2023 03:05:15 -0000 1.14 +++ sys/arch/i386/stand/efiboot/eficons.c 6 Jan 2024 14:33:23 -0000 @@ -911,8 +911,10 @@ efi_com_getc(void) UINTN sz; u_char c; - if (!efi_valid_com(iodev)) - panic("Invalid serial port: iodev=%d", iodev); + if (!efi_valid_com(iodev)) { + printf("Invalid serial port: iodev=%d", iodev); + return -1; + } if (serbuf_read != serbuf_write) { c = serbuf[serbuf_read]; @@ -962,8 +964,10 @@ efi_com_status(int intr) UINTN sz; u_char c; - if (!efi_valid_com(iodev)) - panic("Invalid serial port: iodev=%d", iodev); + if (!efi_valid_com(iodev)) { + printf("Invalid serial port: iodev=%d", iodev); + return 0; + } if (serbuf_read != serbuf_write) return 1; @@ -1016,7 +1020,7 @@ efi_com_waitforinputevent(uint64_t timeo uefi_call_wrapper(BS->CloseEvent, 1, timer); return EINVAL; } - status = WaitForSingleEvent(&timer, timeout); + status = WaitForSingleEvent(timer, timeout); uefi_call_wrapper(BS->SetTimer, 3, periodic, TimerCancel, 0); uefi_call_wrapper(BS->CloseEvent, 1, periodic); uefi_call_wrapper(BS->CloseEvent, 1, timer); Index: sys/arch/i386/stand/efiboot/efidisk.c =================================================================== RCS file: /cvsroot/src/sys/arch/i386/stand/efiboot/efidisk.c,v retrieving revision 1.10 diff -p -u -r1.10 efidisk.c --- sys/arch/i386/stand/efiboot/efidisk.c 14 May 2023 09:07:54 -0000 1.10 +++ sys/arch/i386/stand/efiboot/efidisk.c 6 Jan 2024 14:33:23 -0000 @@ -38,9 +38,12 @@ #include "biosdisk_ll.h" #include "devopen.h" #include "efidisk.h" +#include "bootinfo.h" static struct efidiskinfo_lh efi_disklist; static int nefidisks; +static struct btinfo_biosgeom *bibg; +static size_t bibg_len; #define MAXDEVNAME 39 /* "NAME=" + 34 char part_name */ @@ -158,6 +161,23 @@ next: if (edi->bootdev) boot_biosdev = edi->dev; } + + bibg_len = sizeof(*bibg) + nefidisks * sizeof(struct bi_biosgeom_entry); + bibg = alloc(bibg_len); + if (bibg == NULL) + return; + + bibg->num = nefidisks; + + i = 0; + TAILQ_FOREACH(edi, &efi_disklist, list) { + if (edi->type == BIOSDISK_TYPE_HD) { + memset(&bibg->disk[i], 0, sizeof(bibg->disk[i])); + bibg->disk[i].dev = edi->dev; + bibg->disk[i].flags = BI_GEOM_INVALID; + } + ++i; + } } static void @@ -383,3 +403,10 @@ efidisk_get_efi_system_partition(int dev *partition = i; return 0; } + +void +efidisk_getbiosgeom() +{ + BI_ADD(bibg, BTINFO_BIOSGEOM, bibg_len); +} + Index: sys/arch/i386/stand/efiboot/efidisk.h =================================================================== RCS file: /cvsroot/src/sys/arch/i386/stand/efiboot/efidisk.h,v retrieving revision 1.3 diff -p -u -r1.3 efidisk.h --- sys/arch/i386/stand/efiboot/efidisk.h 2 Apr 2018 09:44:18 -0000 1.3 +++ sys/arch/i386/stand/efiboot/efidisk.h 6 Jan 2024 14:33:23 -0000 @@ -41,3 +41,4 @@ TAILQ_HEAD(efidiskinfo_lh, efidiskinfo); const struct efidiskinfo *efidisk_getinfo(int); int efidisk_get_efi_system_partition(int, int *); +void efidisk_getbiosgeom(void); Index: sys/arch/i386/stand/lib/biosdisk.c =================================================================== RCS file: /cvsroot/src/sys/arch/i386/stand/lib/biosdisk.c,v retrieving revision 1.60 diff -p -u -r1.60 biosdisk.c --- sys/arch/i386/stand/lib/biosdisk.c 2 Oct 2023 00:02:33 -0000 1.60 +++ sys/arch/i386/stand/lib/biosdisk.c 6 Jan 2024 14:33:23 -0000 @@ -1198,11 +1198,13 @@ out: static void add_biosdisk_bootinfo(void) { +#ifndef EFIBOOT if (bootinfo == NULL) { return; } BI_ADD(&bi_disk, BTINFO_BOOTDISK, sizeof(bi_disk)); BI_ADD(&bi_wedge, BTINFO_BOOTWEDGE, sizeof(bi_wedge)); +#endif return; } #endif Index: sys/arch/i386/stand/lib/exec.c =================================================================== RCS file: /cvsroot/src/sys/arch/i386/stand/lib/exec.c,v retrieving revision 1.79 diff -p -u -r1.79 exec.c --- sys/arch/i386/stand/lib/exec.c 20 Apr 2023 00:42:24 -0000 1.79 +++ sys/arch/i386/stand/lib/exec.c 6 Jan 2024 14:33:23 -0000 @@ -108,6 +108,8 @@ #endif #ifdef EFIBOOT #include "efiboot.h" +#include "biosdisk.h" +#include "efidisk.h" #undef DEBUG /* XXX */ #endif @@ -498,6 +500,10 @@ exec_netbsd(const char *file, physaddr_t goto out; } #ifdef EFIBOOT + BI_ADD(&bi_disk, BTINFO_BOOTDISK, sizeof(bi_disk)); + BI_ADD(&bi_wedge, BTINFO_BOOTWEDGE, sizeof(bi_wedge)); + efidisk_getbiosgeom(); + efi_load_start = marks[MARK_START]; /* adjust to the real load address */