Module Name:    src
Committed By:   nonaka
Date:           Sat Feb 11 10:13:46 UTC 2017

Modified Files:
        src/sys/arch/i386/stand/efiboot: Makefile.efiboot efiboot.c efiboot.h
            efimemory.c

Log Message:
efiboot: pass memory map after ExitBootService is called to kernel.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/i386/stand/efiboot/Makefile.efiboot
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/i386/stand/efiboot/efiboot.c \
    src/sys/arch/i386/stand/efiboot/efiboot.h
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/i386/stand/efiboot/efimemory.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/Makefile.efiboot
diff -u src/sys/arch/i386/stand/efiboot/Makefile.efiboot:1.6 src/sys/arch/i386/stand/efiboot/Makefile.efiboot:1.7
--- src/sys/arch/i386/stand/efiboot/Makefile.efiboot:1.6	Mon Feb  6 10:32:35 2017
+++ src/sys/arch/i386/stand/efiboot/Makefile.efiboot	Sat Feb 11 10:13:46 2017
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile.efiboot,v 1.6 2017/02/06 10:32:35 nonaka Exp $
+# $NetBSD: Makefile.efiboot,v 1.7 2017/02/11 10:13:46 nonaka Exp $
 
 S=		${.CURDIR}/../../../../..
 
@@ -61,7 +61,6 @@ CPPFLAGS+= -DSUPPORT_CD9660
 CPPFLAGS+= -DSUPPORT_DOSFS
 CPPFLAGS+= -DSUPPORT_EXT2FS
 CPPFLAGS+= -DPASS_BIOSGEOM
-CPPFLAGS+= -DPASS_MEMMAP
 CPPFLAGS+= -DLIBSA_ENABLE_LS_OP
 
 EFIDIR= ${S}/external/bsd/gnu-efi/dist

Index: src/sys/arch/i386/stand/efiboot/efiboot.c
diff -u src/sys/arch/i386/stand/efiboot/efiboot.c:1.1 src/sys/arch/i386/stand/efiboot/efiboot.c:1.2
--- src/sys/arch/i386/stand/efiboot/efiboot.c:1.1	Tue Jan 24 11:09:14 2017
+++ src/sys/arch/i386/stand/efiboot/efiboot.c	Sat Feb 11 10:13:46 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: efiboot.c,v 1.1 2017/01/24 11:09:14 nonaka Exp $	*/
+/*	$NetBSD: efiboot.c,v 1.2 2017/02/11 10:13:46 nonaka Exp $	*/
 
 /*-
  * Copyright (c) 2016 Kimihiro Nonaka <non...@netbsd.org>
@@ -97,6 +97,8 @@ efi_cleanup(void)
 	EFI_MEMORY_DESCRIPTOR *desc;
 	UINTN NoEntries, MapKey, DescriptorSize;
 	UINT32 DescriptorVersion;
+	struct btinfo_efimemmap *bim;
+	size_t allocsz;
 
 	clearit();
 
@@ -108,17 +110,26 @@ efi_cleanup(void)
 	BI_ADD(&btinfo_efi, BTINFO_EFI, sizeof(btinfo_efi));
 
 	NoEntries = 0;
-	desc = LibMemoryMap(&NoEntries, &MapKey, &DescriptorSize,
-	    &DescriptorVersion);
+	desc = efi_memory_get_map(&NoEntries, &MapKey, &DescriptorSize,
+	    &DescriptorVersion, true);
 	status = uefi_call_wrapper(BS->ExitBootServices, 2, IH, MapKey);
 	if (EFI_ERROR(status)) {
 		FreePool(desc);
-		desc = LibMemoryMap(&NoEntries, &MapKey, &DescriptorSize,
-		    &DescriptorVersion);
+		desc = efi_memory_get_map(&NoEntries, &MapKey, &DescriptorSize,
+		    &DescriptorVersion, true);
 		status = uefi_call_wrapper(BS->ExitBootServices, 2, IH, MapKey);
 		if (EFI_ERROR(status))
 			Panic(L"ExitBootServices failed");
 	}
+
+	allocsz = sizeof(struct btinfo_efimemmap) - 1
+	    + NoEntries * DescriptorSize;
+	bim = alloc(allocsz);
+	bim->num = NoEntries;
+	bim->version = DescriptorVersion;
+	bim->size = DescriptorSize;
+	memcpy(bim->memmap, desc, NoEntries * DescriptorSize);
+	BI_ADD(bim, BTINFO_EFIMEMMAP, allocsz);
 }
 
 static void
Index: src/sys/arch/i386/stand/efiboot/efiboot.h
diff -u src/sys/arch/i386/stand/efiboot/efiboot.h:1.1 src/sys/arch/i386/stand/efiboot/efiboot.h:1.2
--- src/sys/arch/i386/stand/efiboot/efiboot.h:1.1	Tue Jan 24 11:09:14 2017
+++ src/sys/arch/i386/stand/efiboot/efiboot.h	Sat Feb 11 10:13:46 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: efiboot.h,v 1.1 2017/01/24 11:09:14 nonaka Exp $	*/
+/*	$NetBSD: efiboot.h,v 1.2 2017/02/11 10:13:46 nonaka Exp $	*/
 
 /*-
  * Copyright (c) 2016 Kimihiro Nonaka <non...@netbsd.org>
@@ -61,6 +61,8 @@ void efi_disk_probe(void);
 /* efimemory.c */
 void efi_memory_probe(void);
 void efi_memory_show_map(bool);
+EFI_MEMORY_DESCRIPTOR *efi_memory_get_map(UINTN *, UINTN *, UINTN *, UINT32 *,
+    bool);
 
 /* panic.c */
 __dead VOID Panic(IN CHAR16 *, ...);

Index: src/sys/arch/i386/stand/efiboot/efimemory.c
diff -u src/sys/arch/i386/stand/efiboot/efimemory.c:1.2 src/sys/arch/i386/stand/efiboot/efimemory.c:1.3
--- src/sys/arch/i386/stand/efiboot/efimemory.c:1.2	Fri Feb  3 16:42:26 2017
+++ src/sys/arch/i386/stand/efiboot/efimemory.c	Sat Feb 11 10:13:46 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: efimemory.c,v 1.2 2017/02/03 16:42:26 roy Exp $	*/
+/*	$NetBSD: efimemory.c,v 1.3 2017/02/11 10:13:46 nonaka Exp $	*/
 
 /*-
  * Copyright (c) 2016 Kimihiro Nonaka <non...@netbsd.org>
@@ -87,9 +87,9 @@ getmemtype(EFI_MEMORY_DESCRIPTOR *md)
 	return BIM_Reserved;
 }
 
-static EFI_MEMORY_DESCRIPTOR *
-GetMemoryMap(OUT UINTN *NoEntries, OUT UINTN *MapKey, OUT UINTN *DescriptorSize,
-    OUT UINT32 *DescriptorVersion, bool sorted)
+EFI_MEMORY_DESCRIPTOR *
+efi_memory_get_map(UINTN *NoEntries, UINTN *MapKey, UINTN *DescriptorSize,
+    UINT32 *DescriptorVersion, bool sorted)
 {
 	EFI_MEMORY_DESCRIPTOR *desc, *md, *next, *target, tmp;
 	UINTN i, j;
@@ -98,7 +98,7 @@ GetMemoryMap(OUT UINTN *NoEntries, OUT U
 	desc = LibMemoryMap(NoEntries, MapKey, DescriptorSize,
 	    DescriptorVersion);
 	if (desc == NULL)
-		Panic(L"LibMemoryMap failed");
+		Panic(L"efi_memory_get_map failed");
 
 	if (!sorted)
 		return desc;
@@ -128,7 +128,7 @@ getbasemem(void)
 	UINT32 DescriptorVersion;
 	EFI_PHYSICAL_ADDRESS basemem = 0, epa;
 
-	mdtop = GetMemoryMap(&NoEntries, &MapKey, &DescriptorSize,
+	mdtop = efi_memory_get_map(&NoEntries, &MapKey, &DescriptorSize,
 	    &DescriptorVersion, true);
 
 	for (i = 0, md = mdtop; i < NoEntries; i++, md = next) {
@@ -167,7 +167,7 @@ getextmemx(void)
 	bool first16m = true, first4g = true;
 	int extmem;
 
-	mdtop = GetMemoryMap(&NoEntries, &MapKey, &DescriptorSize,
+	mdtop = efi_memory_get_map(&NoEntries, &MapKey, &DescriptorSize,
 	    &DescriptorVersion, true);
 
 	for (i = 0, md = mdtop; i < NoEntries; i++, md = next) {
@@ -223,7 +223,7 @@ efi_memory_probe(void)
 	UINT32 DescriptorVersion;
 	int memtype;
 
-	mdtop = GetMemoryMap(&NoEntries, &MapKey, &DescriptorSize,
+	mdtop = efi_memory_get_map(&NoEntries, &MapKey, &DescriptorSize,
 	    &DescriptorVersion, false);
 
 	Print(L" mem[");
@@ -266,7 +266,7 @@ efi_memory_show_map(bool sorted)
 	else
 		rows -= 2;
 
-	mdtop = GetMemoryMap(&NoEntries, &MapKey, &DescriptorSize,
+	mdtop = efi_memory_get_map(&NoEntries, &MapKey, &DescriptorSize,
 	    &DescriptorVersion, sorted);
 
 	for (i = 0, md = mdtop; i < NoEntries; i++, md = next) {
@@ -300,32 +300,6 @@ efi_memory_show_map(bool sorted)
 }
 
 void
-bi_getmemmap(void)
-{
-	EFI_MEMORY_DESCRIPTOR *md;
-	UINTN NoEntries, MapKey, DescriptorSize;
-	UINT32 DescriptorVersion;
-	struct btinfo_efimemmap *bim;
-	size_t allocsz;
-
-	md = GetMemoryMap(&NoEntries, &MapKey, &DescriptorSize,
-	    &DescriptorVersion, true);
-
-	allocsz = sizeof(struct btinfo_efimemmap) - 1
-	    + NoEntries * DescriptorSize;
-	bim = alloc(allocsz);
-
-	bim->num = NoEntries;
-	bim->version = DescriptorVersion;
-	bim->size = DescriptorSize;
-	memcpy(bim->memmap, md, NoEntries * DescriptorSize);
-
-	FreePool(md);
-
-	BI_ADD(bim, BTINFO_EFIMEMMAP, allocsz);
-}
-
-void
 vpbcopy(const void *va, void *pa, size_t n)
 {
 	memmove(pa, va, n);

Reply via email to