Date: Wed, 14 Mar 2018 08:27:06 +0000 (UTC) From: Eitan Adler <eadler@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r330921 - stable/11/sys/dev/vt/hw/vga Message-ID: <201803140827.w2E8R6jq093161@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: eadler Date: Wed Mar 14 08:27:05 2018 New Revision: 330921 URL: https://svnweb.freebsd.org/changeset/base/330921 Log: MFC r330834: vt_vga: check if VGA is available from ACPI FADT table On x86 the IA-PC Boot Flags in the FADT can signal whether VGA is available or not. Modified: stable/11/sys/dev/vt/hw/vga/vt_vga.c Directory Properties: stable/11/ (props changed) Modified: stable/11/sys/dev/vt/hw/vga/vt_vga.c ============================================================================== --- stable/11/sys/dev/vt/hw/vga/vt_vga.c Wed Mar 14 08:15:26 2018 (r330920) +++ stable/11/sys/dev/vt/hw/vga/vt_vga.c Wed Mar 14 08:27:05 2018 (r330921) @@ -30,6 +30,8 @@ * SUCH DAMAGE. */ +#include "opt_acpi.h" + #include <sys/cdefs.h> __FBSDID("$FreeBSD$"); @@ -46,6 +48,10 @@ __FBSDID("$FreeBSD$"); #include <machine/bus.h> +#if ((defined(__amd64__) || defined(__i386__)) && defined(DEV_ACPI)) +#include <contrib/dev/acpica/include/acpi.h> +#endif + struct vga_softc { bus_space_tag_t vga_fb_tag; bus_space_handle_t vga_fb_handle; @@ -1196,11 +1202,39 @@ vga_initialize(struct vt_device *vd, int textmode) return (0); } +static bool +vga_acpi_disabled(void) +{ +#if ((defined(__amd64__) || defined(__i386__)) && defined(DEV_ACPI)) + ACPI_TABLE_FADT *fadt; + vm_paddr_t physaddr; + uint16_t flags; + + physaddr = acpi_find_table(ACPI_SIG_FADT); + if (physaddr == 0) + return (false); + + fadt = acpi_map_table(physaddr, ACPI_SIG_FADT); + if (fadt == NULL) { + printf("vt_vga: unable to map FADT ACPI table\n"); + return (false); + } + + flags = fadt->BootFlags; + acpi_unmap_table(fadt); + + if (flags & ACPI_FADT_NO_VGA) + return (true); +#endif + + return (false); +} + static int vga_probe(struct vt_device *vd) { - return (CN_INTERNAL); + return (vga_acpi_disabled() ? CN_DEAD : CN_INTERNAL); } static int
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201803140827.w2E8R6jq093161>