Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/stand/efiboot Load boot.cfg from the EFI system partitio...



details:   https://anonhg.NetBSD.org/src/rev/d3a189ef378b
branches:  trunk
changeset: 935216:d3a189ef378b
user:      jmcneill <jmcneill%NetBSD.org@localhost>
date:      Sat Jun 27 17:23:08 2020 +0000

description:
Load boot.cfg from the EFI system partition instead of the first FFS
partition on that device.

diffstat:

 sys/stand/efiboot/boot.c    |  10 +++++++---
 sys/stand/efiboot/efifile.c |  21 ++++++++++++++++++++-
 sys/stand/efiboot/efifile.h |   4 +++-
 3 files changed, 30 insertions(+), 5 deletions(-)

diffs (89 lines):

diff -r d91ced198f49 -r d3a189ef378b sys/stand/efiboot/boot.c
--- a/sys/stand/efiboot/boot.c  Sat Jun 27 17:22:12 2020 +0000
+++ b/sys/stand/efiboot/boot.c  Sat Jun 27 17:23:08 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: boot.c,v 1.24 2020/06/26 03:23:04 thorpej Exp $        */
+/*     $NetBSD: boot.c,v 1.25 2020/06/27 17:23:08 jmcneill Exp $       */
 
 /*-
  * Copyright (c) 2016 Kimihiro Nonaka <nonaka%netbsd.org@localhost>
@@ -29,6 +29,7 @@
 
 #include "efiboot.h"
 #include "efiblock.h"
+#include "efifile.h"
 #include "efifdt.h"
 #include "efiacpi.h"
 #include "efienv.h"
@@ -539,11 +540,15 @@
 void
 boot(void)
 {
+       char pathbuf[80];
        int currname, c;
 
        read_env();
 
-       parsebootconf(BOOTCFG_FILENAME);
+       if (efi_bootdp != NULL && efi_file_path(efi_bootdp, BOOTCFG_FILENAME, pathbuf, sizeof(pathbuf)) == 0) {
+               twiddle_toggle = 1;
+               parsebootconf(pathbuf);
+       }
 
        if (bootcfg_info.clear)
                uefi_call_wrapper(ST->ConOut->ClearScreen, 1, ST->ConOut);
@@ -551,7 +556,6 @@
        print_banner();
 
        /* Display menu if configured */
-       twiddle_toggle = 1;
        if (bootcfg_info.nummenu > 0) {
                doboottypemenu();       /* No return */
        }
diff -r d91ced198f49 -r d3a189ef378b sys/stand/efiboot/efifile.c
--- a/sys/stand/efiboot/efifile.c       Sat Jun 27 17:22:12 2020 +0000
+++ b/sys/stand/efiboot/efifile.c       Sat Jun 27 17:23:08 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: efifile.c,v 1.3 2018/08/26 21:28:18 jmcneill Exp $ */
+/* $NetBSD: efifile.c,v 1.4 2020/06/27 17:23:08 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill <jmcneill%invisible.ca@localhost>
@@ -146,3 +146,22 @@
 
        return 0;
 }
+
+int
+efi_file_path(EFI_DEVICE_PATH *dp, const char *fname, char *buf, size_t buflen)
+{
+       UINTN vol;
+       int depth;
+
+       depth = efi_device_path_depth(dp, END_DEVICE_PATH_TYPE);
+
+       for (vol = 0; vol < efi_nvol; vol++) {
+               if (efi_device_path_ncmp(dp, DevicePathFromHandle(efi_vol[vol]), depth) == 0)
+                       break;
+       }
+       if (vol == efi_nvol)
+               return ENOENT;
+
+       snprintf(buf, buflen, "fs%u:%s", (u_int)vol, fname);
+       return 0;
+}
diff -r d91ced198f49 -r d3a189ef378b sys/stand/efiboot/efifile.h
--- a/sys/stand/efiboot/efifile.h       Sat Jun 27 17:22:12 2020 +0000
+++ b/sys/stand/efiboot/efifile.h       Sat Jun 27 17:23:08 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: efifile.h,v 1.1 2018/08/24 02:01:06 jmcneill Exp $ */
+/* $NetBSD: efifile.h,v 1.2 2020/06/27 17:23:08 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill <jmcneill%invisible.ca@localhost>
@@ -31,3 +31,5 @@
 int efi_file_open(struct open_file *, ...);
 int efi_file_close(struct open_file *);
 int efi_file_strategy(void *, int, daddr_t, size_t, void *, size_t *);
+int efi_file_path(EFI_DEVICE_PATH *, const char *, char *, size_t);
+



Home | Main Index | Thread Index | Old Index