Module Name:    src
Committed By:   nonaka
Date:           Sat Mar 11 07:21:10 UTC 2017

Modified Files:
        src/sys/arch/amd64/amd64: bios32.c
        src/sys/arch/i386/i386: bios32.c
        src/sys/arch/x86/include: efi.h smbiosvar.h
        src/sys/arch/x86/x86: efi.c

Log Message:
search SMBIOS from UEFI configuration table when boot with UEFI.


To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 src/sys/arch/amd64/amd64/bios32.c
cvs rdiff -u -r1.29 -r1.30 src/sys/arch/i386/i386/bios32.c
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/x86/include/efi.h
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/x86/include/smbiosvar.h
cvs rdiff -u -r1.10 -r1.11 src/sys/arch/x86/x86/efi.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/amd64/amd64/bios32.c
diff -u src/sys/arch/amd64/amd64/bios32.c:1.21 src/sys/arch/amd64/amd64/bios32.c:1.22
--- src/sys/arch/amd64/amd64/bios32.c:1.21	Sun Nov 22 13:41:24 2015
+++ src/sys/arch/amd64/amd64/bios32.c	Sat Mar 11 07:21:10 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: bios32.c,v 1.21 2015/11/22 13:41:24 maxv Exp $	*/
+/*	$NetBSD: bios32.c,v 1.22 2017/03/11 07:21:10 nonaka Exp $	*/
 
 /*-
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -60,7 +60,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bios32.c,v 1.21 2015/11/22 13:41:24 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bios32.c,v 1.22 2017/03/11 07:21:10 nonaka Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -72,6 +72,7 @@ __KERNEL_RCSID(0, "$NetBSD: bios32.c,v 1
 #include <machine/segments.h>
 #include <machine/bios32.h>
 #include <x86/smbiosvar.h>
+#include <x86/efi.h>
 
 #include <uvm/uvm.h>
 
@@ -85,6 +86,11 @@ __KERNEL_RCSID(0, "$NetBSD: bios32.c,v 1
 struct bios32_entry bios32_entry;
 struct smbios_entry smbios_entry;
 
+static int smbios2_check_header(const uint8_t *);
+static void smbios2_map_kva(const uint8_t *);
+static int smbios3_check_header(const uint8_t *);
+static void smbios3_map_kva(const uint8_t *);
+
 /*
  * Initialize the BIOS32 interface.
  */
@@ -132,59 +138,147 @@ bios32_init(void)
 	}
 #endif
 	uint8_t *p;
-	int i;
 
 	/* see if we have SMBIOS extentions */
+#ifndef XEN
+	if (efi_probe()) {
+		p = efi_getcfgtbl(&EFI_UUID_SMBIOS3);
+		if (p != NULL && smbios3_check_header(p)) {
+			smbios3_map_kva(p);
+			return;
+		}
+		p = efi_getcfgtbl(&EFI_UUID_SMBIOS);
+		if (p != NULL && smbios2_check_header(p)) {
+			smbios2_map_kva(p);
+			return;
+		}
+	}
+#endif
 	for (p = ISA_HOLE_VADDR(SMBIOS_START);
 	    p < (uint8_t *)ISA_HOLE_VADDR(SMBIOS_END); p+= 16) {
-		struct smbhdr * sh = (struct smbhdr *)p;
-		uint8_t chksum;
-		vaddr_t eva;
-		paddr_t pa, end;
+		if (smbios3_check_header(p)) {
+			smbios3_map_kva(p);
+			return;
+		}
+		if (smbios2_check_header(p)) {
+			smbios2_map_kva(p);
+			return;
+		}
+	}
+}
 
-		if (sh->sig != BIOS32_MAKESIG('_', 'S', 'M', '_'))
-			continue;
-		i = sh->len;
-		for (chksum = 0; i--; )
-			chksum += p[i];
-		if (chksum != 0)
-			continue;
-		p += 0x10;
-		if (p[0] != '_' && p[1] != 'D' && p[2] != 'M' &&
-		    p[3] != 'I' && p[4] != '_')
-			continue;
-		for (chksum = 0, i = 0xf; i--; )
-			chksum += p[i];
-		if (chksum != 0)
-			continue;
+static int
+smbios2_check_header(const uint8_t *p)
+{
+	const struct smbhdr *sh = (const struct smbhdr *)p;
+	uint8_t chksum;
+	int i;
 
-		pa = trunc_page(sh->addr);
-		end = round_page(sh->addr + sh->size);
-		eva = uvm_km_alloc(kernel_map, end - pa, 0, UVM_KMF_VAONLY);
-		if (eva == 0)
-			break;
+	if (sh->sig != BIOS32_MAKESIG('_', 'S', 'M', '_'))
+		return 0;
+	i = sh->len;
+	for (chksum = 0; i--; )
+		chksum += p[i];
+	if (chksum != 0)
+		return 0;
+	p += 0x10;
+	if (p[0] != '_' || p[1] != 'D' || p[2] != 'M' ||
+	    p[3] != 'I' || p[4] != '_')
+		return 0;
+	for (chksum = 0, i = 0xf; i--; )
+		chksum += p[i];
+	if (chksum != 0)
+		return 0;
 
-		smbios_entry.addr = (uint8_t *)(eva +
-		    (sh->addr & PGOFSET));
-		smbios_entry.len = sh->size;
-		smbios_entry.mjr = sh->majrev;
-		smbios_entry.min = sh->minrev;
-		smbios_entry.count = sh->count;
+	return 1;
+}
 
-		for (; pa < end; pa+= NBPG, eva+= NBPG)
+static void
+smbios2_map_kva(const uint8_t *p)
+{
+	const struct smbhdr *sh = (const struct smbhdr *)p;
+	paddr_t pa, end;
+	vaddr_t eva;
+
+	pa = trunc_page(sh->addr);
+	end = round_page(sh->addr + sh->size);
+	eva = uvm_km_alloc(kernel_map, end - pa, 0, UVM_KMF_VAONLY);
+	if (eva == 0)
+		return;
+
+	smbios_entry.addr = (uint8_t *)(eva + (sh->addr & PGOFSET));
+	smbios_entry.len = sh->size;
+	smbios_entry.rev = 0;
+	smbios_entry.mjr = sh->majrev;
+	smbios_entry.min = sh->minrev;
+	smbios_entry.doc = 0;
+	smbios_entry.count = sh->count;
+
+	for (; pa < end; pa+= NBPG, eva+= NBPG)
 #ifdef XEN
-			pmap_kenter_ma(eva, pa, VM_PROT_READ, 0);
+		pmap_kenter_ma(eva, pa, VM_PROT_READ, 0);
 #else
-			pmap_kenter_pa(eva, pa, VM_PROT_READ, 0);
+		pmap_kenter_pa(eva, pa, VM_PROT_READ, 0);
 #endif
-		pmap_update(pmap_kernel());
+	pmap_update(pmap_kernel());
 
-		aprint_debug("SMBIOS rev. %d.%d @ 0x%lx (%d entries)\n",
-			    sh->majrev, sh->minrev, (u_long)sh->addr,
-			    sh->count);
+	aprint_debug("SMBIOS rev. %d.%d @ 0x%lx (%d entries)\n",
+		    sh->majrev, sh->minrev, (u_long)sh->addr,
+		    sh->count);
+}
 
-		break;
-	}
+static int
+smbios3_check_header(const uint8_t *p)
+{
+	const struct smb3hdr *sh = (const struct smb3hdr *)p;
+	uint8_t chksum;
+	int i;
+
+	if (p[0] != '_' || p[1] != 'S' || p[2] != 'M' ||
+	    p[3] != '3' || p[4] != '_')
+		return 0;
+	i = sh->len;
+	for (chksum = 0; i--; )
+		chksum += p[i];
+	if (chksum != 0)
+		return 0;
+	if (sh->eprev != SMBIOS3_EPREV_3_0)
+		return 0;
+
+	return 1;
+}
+
+static void
+smbios3_map_kva(const uint8_t *p)
+{
+	const struct smb3hdr *sh = (const struct smb3hdr *)p;
+	paddr_t pa, end;
+	vaddr_t eva;
+
+	pa = trunc_page(sh->addr);
+	end = round_page(sh->addr + sh->size);
+	eva = uvm_km_alloc(kernel_map, end - pa, 0, UVM_KMF_VAONLY);
+	if (eva == 0)
+		return;
+
+	smbios_entry.addr = (uint8_t *)(eva + (sh->addr & PGOFSET));
+	smbios_entry.len = sh->size;
+	smbios_entry.rev = sh->eprev;
+	smbios_entry.mjr = sh->majrev;
+	smbios_entry.min = sh->minrev;
+	smbios_entry.doc = sh->docrev;
+	smbios_entry.count = UINT16_MAX;
+
+	for (; pa < end; pa += NBPG, eva += NBPG)
+#ifdef XEN
+		pmap_kenter_ma(eva, pa, VM_PROT_READ, 0);
+#else
+		pmap_kenter_pa(eva, pa, VM_PROT_READ, 0);
+#endif
+	pmap_update(pmap_kernel());
+
+	aprint_debug("SMBIOS rev. %d.%d.%d @ 0x%lx\n",
+		    sh->majrev, sh->minrev, sh->docrev, (u_long)sh->addr);
 }
 
 /*

Index: src/sys/arch/i386/i386/bios32.c
diff -u src/sys/arch/i386/i386/bios32.c:1.29 src/sys/arch/i386/i386/bios32.c:1.30
--- src/sys/arch/i386/i386/bios32.c:1.29	Fri Jun 15 23:01:16 2012
+++ src/sys/arch/i386/i386/bios32.c	Sat Mar 11 07:21:10 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: bios32.c,v 1.29 2012/06/15 23:01:16 joerg Exp $	*/
+/*	$NetBSD: bios32.c,v 1.30 2017/03/11 07:21:10 nonaka Exp $	*/
 
 /*-
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -86,7 +86,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bios32.c,v 1.29 2012/06/15 23:01:16 joerg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bios32.c,v 1.30 2017/03/11 07:21:10 nonaka Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -99,6 +99,7 @@ __KERNEL_RCSID(0, "$NetBSD: bios32.c,v 1
 #include <machine/segments.h>
 #include <machine/bios32.h>
 #include <x86/smbiosvar.h>
+#include <x86/efi.h>
 
 #include <uvm/uvm.h>
 
@@ -112,6 +113,11 @@ __KERNEL_RCSID(0, "$NetBSD: bios32.c,v 1
 struct bios32_entry bios32_entry;
 struct smbios_entry smbios_entry;
 
+static int smbios2_check_header(const uint8_t *);
+static void smbios2_map_kva(const uint8_t *);
+static int smbios3_check_header(const uint8_t *);
+static void smbios3_map_kva(const uint8_t *);
+
 /*
  * Initialize the BIOS32 interface.
  */
@@ -156,57 +162,153 @@ bios32_init(void)
 		bios32_entry.offset = (void *)ISA_HOLE_VADDR(entry);
 		bios32_entry.segment = GSEL(GCODE_SEL, SEL_KPL);
 	}
+
 	/* see if we have SMBIOS extensions */
+#ifndef XEN
+	if (efi_probe()) {
+		p = efi_getcfgtbl(&EFI_UUID_SMBIOS3);
+		if (p != NULL && smbios3_check_header(p)) {
+			smbios3_map_kva(p);
+			goto out;
+		}
+		p = efi_getcfgtbl(&EFI_UUID_SMBIOS);
+		if (p != NULL && smbios2_check_header(p)) {
+			smbios2_map_kva(p);
+			goto out;
+		}
+	}
+#endif
 	for (p = ISA_HOLE_VADDR(SMBIOS_START);
 	    p < (char *)ISA_HOLE_VADDR(SMBIOS_END); p+= 16) {
-		struct smbhdr * sh = (struct smbhdr *)p;
-		uint8_t chksum;
-		vaddr_t eva;
-		paddr_t pa, end;
+		if (smbios3_check_header(p)) {
+			smbios3_map_kva(p);
+			goto out;
+		} else if (smbios2_check_header(p)) {
+			smbios2_map_kva(p);
+			goto out;
+		}
+	}
+#ifndef XEN
+out:
+#endif
+	pmap_update(pmap_kernel());
+}
 
-		if (sh->sig != BIOS32_MAKESIG('_', 'S', 'M', '_'))
-			continue;
-		i = sh->len;
-		for (chksum = 0; i--; chksum += p[i])
-			;
-		if (chksum != 0)
-			continue;
-		p += 0x10;
-		if (p[0] != '_' && p[1] != 'D' && p[2] != 'M' &&
-		    p[3] != 'I' && p[4] != '_')
-			continue;
-		for (chksum = 0, i = 0xf; i--;)
-			chksum += p[i];
-		if (chksum != 0)
-			continue;
+static int
+smbios2_check_header(const uint8_t *p)
+{
+	const struct smbhdr *sh = (const struct smbhdr *)p;
+	uint8_t chksum;
+	int i;
 
-		pa = trunc_page(sh->addr);
-		end = round_page(sh->addr + sh->size);
-		eva = uvm_km_alloc(kernel_map, end - pa, 0, UVM_KMF_VAONLY);
-		if (eva == 0)
-			break;
+	if (sh->sig != BIOS32_MAKESIG('_', 'S', 'M', '_'))
+		return 0;
+	i = sh->len;
+	for (chksum = 0; i--; )
+		chksum += p[i];
+	if (chksum != 0)
+		return 0;
+	p += 0x10;
+	if (p[0] != '_' || p[1] != 'D' || p[2] != 'M' ||
+	    p[3] != 'I' || p[4] != '_')
+		return 0;
+	for (chksum = 0, i = 0xf; i--; )
+		chksum += p[i];
+	if (chksum != 0)
+		return 0;
 
-		smbios_entry.addr = (uint8_t *)(eva +
-		    (sh->addr & PGOFSET));
-		smbios_entry.len = sh->size;
-		smbios_entry.mjr = sh->majrev;
-		smbios_entry.min = sh->minrev;
-		smbios_entry.count = sh->count;
+	return 1;
+}
+
+static void
+smbios2_map_kva(const uint8_t *p)
+{
+	const struct smbhdr *sh = (const struct smbhdr *)p;
+	paddr_t pa, end;
+	vaddr_t eva;
+
+	pa = trunc_page(sh->addr);
+	end = round_page(sh->addr + sh->size);
+	eva = uvm_km_alloc(kernel_map, end - pa, 0, UVM_KMF_VAONLY);
+	if (eva == 0)
+		return;
+
+	smbios_entry.addr = (uint8_t *)(eva + (sh->addr & PGOFSET));
+	smbios_entry.len = sh->size;
+	smbios_entry.rev = 0;
+	smbios_entry.mjr = sh->majrev;
+	smbios_entry.min = sh->minrev;
+	smbios_entry.doc = 0;
+	smbios_entry.count = sh->count;
 
-    		for (; pa < end; pa+= NBPG, eva+= NBPG)
+	for (; pa < end; pa+= NBPG, eva+= NBPG)
 #ifdef XEN
-			pmap_kenter_ma(eva, pa, VM_PROT_READ, 0);
+		pmap_kenter_ma(eva, pa, VM_PROT_READ, 0);
 #else
-			pmap_kenter_pa(eva, pa, VM_PROT_READ, 0);
+		pmap_kenter_pa(eva, pa, VM_PROT_READ, 0);
 #endif
 
-		aprint_debug("SMBIOS rev. %d.%d @ 0x%lx (%d entries)\n",
+	aprint_debug("SMBIOS rev. %d.%d @ 0x%lx (%d entries)\n",
 		    sh->majrev, sh->minrev, (u_long)sh->addr,
 		    sh->count);
+}
 
-		break;
+static int
+smbios3_check_header(const uint8_t *p)
+{
+	const struct smb3hdr *sh = (const struct smb3hdr *)p;
+	uint8_t chksum;
+	int i;
+
+	if (p[0] != '_' || p[1] != 'S' || p[2] != 'M' ||
+	    p[3] != '3' || p[4] != '_')
+		return 0;
+	i = sh->len;
+	for (chksum = 0; i--; )
+		chksum += p[i];
+	if (chksum != 0)
+		return 0;
+	if (sh->eprev != SMBIOS3_EPREV_3_0)
+		return 0;
+	if (sh->addr & 0xffffffff00000000ULL) {
+		aprint_error("Unable to access SMBIOS3 address: "
+		    "0x%" PRIx64 "\n", sh->addr);
+		return 0;
 	}
-	pmap_update(pmap_kernel());
+
+	return 1;
+}
+
+static void
+smbios3_map_kva(const uint8_t *p)
+{
+	const struct smb3hdr *sh = (const struct smb3hdr *)p;
+	paddr_t pa, end;
+	vaddr_t eva;
+
+	pa = trunc_page(sh->addr);
+	end = round_page(sh->addr + sh->size);
+	eva = uvm_km_alloc(kernel_map, end - pa, 0, UVM_KMF_VAONLY);
+	if (eva == 0)
+		return;
+
+	smbios_entry.addr = (uint8_t *)(eva + ((vaddr_t)sh->addr & PGOFSET));
+	smbios_entry.len = sh->size;
+	smbios_entry.rev = sh->eprev;
+	smbios_entry.mjr = sh->majrev;
+	smbios_entry.min = sh->minrev;
+	smbios_entry.doc = sh->docrev;
+	smbios_entry.count = UINT16_MAX;
+
+	for (; pa < end; pa += NBPG, eva += NBPG)
+#ifdef XEN
+		pmap_kenter_ma(eva, pa, VM_PROT_READ, 0);
+#else
+		pmap_kenter_pa(eva, pa, VM_PROT_READ, 0);
+#endif
+
+	aprint_debug("SMBIOS rev. %d.%d.%d @ 0x%lx\n",
+		    sh->majrev, sh->minrev, sh->docrev, (u_long)sh->addr);
 }
 
 /*

Index: src/sys/arch/x86/include/efi.h
diff -u src/sys/arch/x86/include/efi.h:1.6 src/sys/arch/x86/include/efi.h:1.7
--- src/sys/arch/x86/include/efi.h:1.6	Thu Feb 23 12:17:36 2017
+++ src/sys/arch/x86/include/efi.h	Sat Mar 11 07:21:10 2017
@@ -1,4 +1,4 @@
-/*     $NetBSD: efi.h,v 1.6 2017/02/23 12:17:36 nonaka Exp $   */
+/*     $NetBSD: efi.h,v 1.7 2017/03/11 07:21:10 nonaka Exp $   */
 
 /*-
  * Copyright (c) 2004 Marcel Moolenaar
@@ -39,8 +39,19 @@
 #define        EFI_PAGE_SIZE           (1 << EFI_PAGE_SHIFT)
 #define        EFI_PAGE_MASK           (EFI_PAGE_SIZE - 1)
 
+#define	EFI_TABLE_ACPI20						\
+	{0x8868e871,0xe4f1,0x11d3,0xbc,0x22,{0x00,0x80,0xc7,0x3c,0x88,0x81}}
+#define	EFI_TABLE_ACPI10						\
+	{0xeb9d2d30,0x2d88,0x11d3,0x9a,0x16,{0x00,0x90,0x27,0x3f,0xc1,0x4d}}
+#define	EFI_TABLE_SMBIOS						\
+	{0xeb9d2d31,0x2d88,0x11d3,0x9a,0x16,{0x00,0x90,0x27,0x3f,0xc1,0x4d}}
+#define	EFI_TABLE_SMBIOS3						\
+	{0xf2fd1544,0x9794,0x4a2c,0x99,0x2e,{0xe5,0xbb,0xcf,0x20,0xe3,0x94}}
+
 extern const struct uuid EFI_UUID_ACPI20;
 extern const struct uuid EFI_UUID_ACPI10;
+extern const struct uuid EFI_UUID_SMBIOS;
+extern const struct uuid EFI_UUID_SMBIOS3;
 
 enum efi_reset {
        EFI_RESET_COLD,

Index: src/sys/arch/x86/include/smbiosvar.h
diff -u src/sys/arch/x86/include/smbiosvar.h:1.3 src/sys/arch/x86/include/smbiosvar.h:1.4
--- src/sys/arch/x86/include/smbiosvar.h:1.3	Wed Apr 16 16:06:51 2008
+++ src/sys/arch/x86/include/smbiosvar.h	Sat Mar 11 07:21:10 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbiosvar.h,v 1.3 2008/04/16 16:06:51 cegger Exp $ */
+/*	$NetBSD: smbiosvar.h,v 1.4 2017/03/11 07:21:10 nonaka Exp $ */
 /*
  * Copyright (c) 2006 Gordon Willem Klok <[email protected]>
  * Copyright (c) 2005 Jordan Hargrave
@@ -43,10 +43,12 @@
 #define SMBIOS_UUID_REPLEN 37 /* 16 zero padded values, 4 hyphens, 1 null */
 
 struct smbios_entry {
-	uint8_t	mjr;
-	uint8_t	min;
-	uint8_t	*addr;
-	uint16_t	len;
+	uint8_t 	rev;
+	uint8_t 	mjr;
+	uint8_t 	min;
+	uint8_t 	doc;
+	uint8_t 	*addr;
+	uint32_t	len;
 	uint16_t	count;
 };
 
@@ -54,17 +56,32 @@ struct smbhdr {
 	uint32_t	sig;		/* "_SM_" */
 	uint8_t 	checksum;	/* Entry point checksum */
 	uint8_t 	len;		/* Entry point structure length */
-	uint8_t	majrev;		/* Specification major revision */
-	uint8_t	minrev;		/* Specification minor revision */
+	uint8_t 	majrev;		/* Specification major revision */
+	uint8_t 	minrev;		/* Specification minor revision */
 	uint16_t	mss;		/* Maximum Structure Size */
 	uint8_t 	epr;		/* Entry Point Revision */
 	uint8_t 	fa[5];		/* value determined by EPR */
-	uint8_t	sasig[5];  	/* Secondary Anchor "_DMI_" */
-	uint8_t	sachecksum;	/* Secondary Checksum */
-	uint16_t	size;   	/* Length of structure table in bytes */
-	uint32_t	addr;	  	/* Structure table address */
+	uint8_t 	sasig[5];	/* Secondary Anchor "_DMI_" */
+	uint8_t 	sachecksum;	/* Secondary Checksum */
+	uint16_t	size;		/* Length of structure table in bytes */
+	uint32_t	addr;		/* Structure table address */
 	uint16_t	count;		/* Number of SMBIOS structures */
-	uint8_t	rev;  		/* BCD revision */
+	uint8_t 	rev;		/* BCD revision */
+} __packed;
+
+struct smb3hdr {
+	uint8_t 	sig[5];		/* "_SM3_" */
+	uint8_t 	checksum;	/* Entry point structure checksum */
+	uint8_t 	len;		/* Entry point structure length */
+	uint8_t 	majrev;		/* Specification major revision */
+	uint8_t 	minrev;		/* Specification minor revision */
+	uint8_t 	docrev;		/* docrec of Specification */
+	uint8_t 	eprev;		/* Entry point structure revision */
+#define	SMBIOS3_EPREV_RESERVED	0
+#define	SMBIOS3_EPREV_3_0	1	/* SMBIOS 3.0 */
+	uint8_t 	reverved;
+	uint32_t	size;		/* Length of structure table in bytes */
+	uint64_t	addr;		/* Structure table address */
 } __packed;
 
 struct smbtblhdr {

Index: src/sys/arch/x86/x86/efi.c
diff -u src/sys/arch/x86/x86/efi.c:1.10 src/sys/arch/x86/x86/efi.c:1.11
--- src/sys/arch/x86/x86/efi.c:1.10	Thu Feb 23 12:17:36 2017
+++ src/sys/arch/x86/x86/efi.c	Sat Mar 11 07:21:10 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: efi.c,v 1.10 2017/02/23 12:17:36 nonaka Exp $	*/
+/*	$NetBSD: efi.c,v 1.11 2017/03/11 07:21:10 nonaka Exp $	*/
 
 /*-
  * Copyright (c) 2016 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: efi.c,v 1.10 2017/02/23 12:17:36 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: efi.c,v 1.11 2017/03/11 07:21:10 nonaka Exp $");
 
 #include <sys/kmem.h>
 #include <sys/param.h>
@@ -41,22 +41,10 @@ __KERNEL_RCSID(0, "$NetBSD: efi.c,v 1.10
 
 #include <dev/mm.h>
 
-const struct uuid EFI_UUID_ACPI20 = {
-	.time_low = 0x8868e871,
-	.time_mid = 0xe4f1,
-	.time_hi_and_version = 0x11d3,
-	.clock_seq_hi_and_reserved = 0xbc,
-	.clock_seq_low = 0x22,
-	.node = {0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81}
-};
-const struct uuid EFI_UUID_ACPI10 = {
-	.time_low = 0xeb9d2d30,
-	.time_mid = 0x2d88,
-	.time_hi_and_version = 0x11d3,
-	.clock_seq_hi_and_reserved = 0x9a,
-	.clock_seq_low = 0x16,
-	.node = {0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d}
-};
+const struct uuid EFI_UUID_ACPI20 = EFI_TABLE_ACPI20;
+const struct uuid EFI_UUID_ACPI10 = EFI_TABLE_ACPI10;
+const struct uuid EFI_UUID_SMBIOS = EFI_TABLE_SMBIOS;
+const struct uuid EFI_UUID_SMBIOS3 = EFI_TABLE_SMBIOS3;
 
 vaddr_t 	efi_getva(paddr_t);
 void 		efi_relva(vaddr_t);
@@ -143,6 +131,10 @@ efi_aprintuuid(const struct uuid * uuid)
 		aprint_debug(" ACPI 2.0");
 	} else if (efi_uuideq(uuid, &EFI_UUID_ACPI10)) {
 		aprint_debug(" ACPI 1.0");
+	} else if (efi_uuideq(uuid, &EFI_UUID_SMBIOS)) {
+		aprint_debug(" SMBIOS");
+	} else if (efi_uuideq(uuid, &EFI_UUID_SMBIOS3)) {
+		aprint_debug(" SMBIOS3");
 	}
 }
 

Reply via email to