svn commit: r264997 - head/sys/dev/vt/hw/vga

Nathan Whitehorn nwhitehorn at FreeBSD.org
Sun Apr 27 02:19:53 UTC 2014


Author: nwhitehorn
Date: Sun Apr 27 02:19:53 2014
New Revision: 264997
URL: http://svnweb.freebsd.org/changeset/base/264997

Log:
  Disable vga if EFI framebuffer present. vt(9) should handle this internally
  based on efifb's higher priority, but it doesn't, and this at least lets
  us build a kernel that boots on both BIOS and EFI systems for now.

Modified:
  head/sys/dev/vt/hw/vga/vga.c

Modified: head/sys/dev/vt/hw/vga/vga.c
==============================================================================
--- head/sys/dev/vt/hw/vga/vga.c	Sun Apr 27 01:15:10 2014	(r264996)
+++ head/sys/dev/vt/hw/vga/vga.c	Sun Apr 27 02:19:53 2014	(r264997)
@@ -45,8 +45,10 @@ __FBSDID("$FreeBSD$");
 #if defined(__amd64__) || defined(__i386__)
 #include <vm/vm.h>
 #include <vm/pmap.h>
+#include <machine/metadata.h>
 #include <machine/pmap.h>
 #include <machine/vmparam.h>
+#include <sys/linker.h>
 #endif /* __amd64__ || __i386__ */
 
 struct vga_softc {
@@ -637,6 +639,19 @@ vga_init(struct vt_device *vd)
 	int textmode = 0;
 
 #if defined(__amd64__) || defined(__i386__)
+	/* Disable if EFI framebuffer present. Should be handled by priority
+	 * logic in vt(9), but this will do for now. XXX */
+
+	caddr_t kmdp, efifb;
+	kmdp = preload_search_by_type("elf kernel");
+	if (kmdp == NULL)
+		kmdp = preload_search_by_type("elf64 kernel");
+	efifb = preload_search_info(kmdp, MODINFO_METADATA | MODINFOMD_EFI_FB);
+	if (efifb != NULL)
+		return (CN_DEAD);
+#endif
+
+#if defined(__amd64__) || defined(__i386__)
 	sc->vga_fb_tag = X86_BUS_SPACE_MEM;
 	sc->vga_fb_handle = KERNBASE + VGA_MEM_BASE;
 	sc->vga_reg_tag = X86_BUS_SPACE_IO;


More information about the svn-src-head mailing list