Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/i386/stand/efiboot efiboot: pass memory map after E...
details: https://anonhg.NetBSD.org/src/rev/22a6f6c26ec8
branches: trunk
changeset: 351373:22a6f6c26ec8
user: nonaka <nonaka%NetBSD.org@localhost>
date: Sat Feb 11 10:13:46 2017 +0000
description:
efiboot: pass memory map after ExitBootService is called to kernel.
diffstat:
sys/arch/i386/stand/efiboot/Makefile.efiboot | 3 +-
sys/arch/i386/stand/efiboot/efiboot.c | 21 ++++++++++---
sys/arch/i386/stand/efiboot/efiboot.h | 4 +-
sys/arch/i386/stand/efiboot/efimemory.c | 44 +++++----------------------
4 files changed, 29 insertions(+), 43 deletions(-)
diffs (184 lines):
diff -r c71ded98845c -r 22a6f6c26ec8 sys/arch/i386/stand/efiboot/Makefile.efiboot
--- a/sys/arch/i386/stand/efiboot/Makefile.efiboot Sat Feb 11 09:15:38 2017 +0000
+++ b/sys/arch/i386/stand/efiboot/Makefile.efiboot Sat Feb 11 10:13:46 2017 +0000
@@ -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_DOSFS
CPPFLAGS+= -DSUPPORT_EXT2FS
CPPFLAGS+= -DPASS_BIOSGEOM
-CPPFLAGS+= -DPASS_MEMMAP
CPPFLAGS+= -DLIBSA_ENABLE_LS_OP
EFIDIR= ${S}/external/bsd/gnu-efi/dist
diff -r c71ded98845c -r 22a6f6c26ec8 sys/arch/i386/stand/efiboot/efiboot.c
--- a/sys/arch/i386/stand/efiboot/efiboot.c Sat Feb 11 09:15:38 2017 +0000
+++ b/sys/arch/i386/stand/efiboot/efiboot.c Sat Feb 11 10:13:46 2017 +0000
@@ -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 <nonaka%netbsd.org@localhost>
@@ -97,6 +97,8 @@
EFI_MEMORY_DESCRIPTOR *desc;
UINTN NoEntries, MapKey, DescriptorSize;
UINT32 DescriptorVersion;
+ struct btinfo_efimemmap *bim;
+ size_t allocsz;
clearit();
@@ -108,17 +110,26 @@
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
diff -r c71ded98845c -r 22a6f6c26ec8 sys/arch/i386/stand/efiboot/efiboot.h
--- a/sys/arch/i386/stand/efiboot/efiboot.h Sat Feb 11 09:15:38 2017 +0000
+++ b/sys/arch/i386/stand/efiboot/efiboot.h Sat Feb 11 10:13:46 2017 +0000
@@ -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 <nonaka%netbsd.org@localhost>
@@ -61,6 +61,8 @@
/* 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 *, ...);
diff -r c71ded98845c -r 22a6f6c26ec8 sys/arch/i386/stand/efiboot/efimemory.c
--- a/sys/arch/i386/stand/efiboot/efimemory.c Sat Feb 11 09:15:38 2017 +0000
+++ b/sys/arch/i386/stand/efiboot/efimemory.c Sat Feb 11 10:13:46 2017 +0000
@@ -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 <nonaka%netbsd.org@localhost>
@@ -87,9 +87,9 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
}
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);
Home |
Main Index |
Thread Index |
Old Index