Module Name:    src
Committed By:   martin
Date:           Sun Jan 14 15:46:00 UTC 2024

Modified Files:
        src/sys/arch/i386/stand/efiboot [netbsd-10]: efidisk.c efidisk.h
        src/sys/arch/i386/stand/lib [netbsd-10]: biosdisk.c exec.c

Log Message:
Pull up following revision(s) (requested by mlelstv in ticket #548):

        sys/arch/i386/stand/efiboot/efidisk.h: revision 1.4
        sys/arch/i386/stand/lib/exec.c: revision 1.80
        sys/arch/i386/stand/efiboot/efidisk.c: revision 1.11
        sys/arch/i386/stand/lib/biosdisk.c: revision 1.61

In efiboot
- create bootinfo information only once.
- add fake biosgeom entries so that the kernel can distinguish between
  hard drives (with geom) and CD-ROM (without).


To generate a diff of this commit:
cvs rdiff -u -r1.9.26.1 -r1.9.26.2 src/sys/arch/i386/stand/efiboot/efidisk.c
cvs rdiff -u -r1.3 -r1.3.32.1 src/sys/arch/i386/stand/efiboot/efidisk.h
cvs rdiff -u -r1.58.4.1 -r1.58.4.2 src/sys/arch/i386/stand/lib/biosdisk.c
cvs rdiff -u -r1.78.4.1 -r1.78.4.2 src/sys/arch/i386/stand/lib/exec.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/i386/stand/efiboot/efidisk.c
diff -u src/sys/arch/i386/stand/efiboot/efidisk.c:1.9.26.1 src/sys/arch/i386/stand/efiboot/efidisk.c:1.9.26.2
--- src/sys/arch/i386/stand/efiboot/efidisk.c:1.9.26.1	Fri Nov  3 10:01:13 2023
+++ src/sys/arch/i386/stand/efiboot/efidisk.c	Sun Jan 14 15:46:00 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: efidisk.c,v 1.9.26.1 2023/11/03 10:01:13 martin Exp $	*/
+/*	$NetBSD: efidisk.c,v 1.9.26.2 2024/01/14 15:46:00 martin Exp $	*/
 
 /*-
  * Copyright (c) 2016 Kimihiro Nonaka <non...@netbsd.org>
@@ -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: src/sys/arch/i386/stand/efiboot/efidisk.h
diff -u src/sys/arch/i386/stand/efiboot/efidisk.h:1.3 src/sys/arch/i386/stand/efiboot/efidisk.h:1.3.32.1
--- src/sys/arch/i386/stand/efiboot/efidisk.h:1.3	Mon Apr  2 09:44:18 2018
+++ src/sys/arch/i386/stand/efiboot/efidisk.h	Sun Jan 14 15:46:00 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: efidisk.h,v 1.3 2018/04/02 09:44:18 nonaka Exp $	*/
+/*	$NetBSD: efidisk.h,v 1.3.32.1 2024/01/14 15:46:00 martin Exp $	*/
 
 /*-
  * Copyright (c) 2016 Kimihiro Nonaka <non...@netbsd.org>
@@ -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: src/sys/arch/i386/stand/lib/biosdisk.c
diff -u src/sys/arch/i386/stand/lib/biosdisk.c:1.58.4.1 src/sys/arch/i386/stand/lib/biosdisk.c:1.58.4.2
--- src/sys/arch/i386/stand/lib/biosdisk.c:1.58.4.1	Wed Oct 18 11:44:22 2023
+++ src/sys/arch/i386/stand/lib/biosdisk.c	Sun Jan 14 15:46:00 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: biosdisk.c,v 1.58.4.1 2023/10/18 11:44:22 martin Exp $	*/
+/*	$NetBSD: biosdisk.c,v 1.58.4.2 2024/01/14 15:46:00 martin Exp $	*/
 
 /*
  * Copyright (c) 1996, 1998
@@ -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: src/sys/arch/i386/stand/lib/exec.c
diff -u src/sys/arch/i386/stand/lib/exec.c:1.78.4.1 src/sys/arch/i386/stand/lib/exec.c:1.78.4.2
--- src/sys/arch/i386/stand/lib/exec.c:1.78.4.1	Sat May 13 13:26:57 2023
+++ src/sys/arch/i386/stand/lib/exec.c	Sun Jan 14 15:46:00 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: exec.c,v 1.78.4.1 2023/05/13 13:26:57 martin Exp $	 */
+/*	$NetBSD: exec.c,v 1.78.4.2 2024/01/14 15:46:00 martin Exp $	 */
 
 /*
  * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -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 */

Reply via email to