Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 28 Nov 2019 05:40:15 +0000 (UTC)
From:      Warner Losh <imp@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r355168 - head/stand/efi/libefi
Message-ID:  <201911280540.xAS5eFm3036789@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: imp
Date: Thu Nov 28 05:40:15 2019
New Revision: 355168
URL: https://svnweb.freebsd.org/changeset/base/355168

Log:
  Also turn of teken for RB_MULTIPLE
  
  RB_MULTIPLE without RB_SERIAL set is valid, and means 'Video first, then serial'
  to the kernel (so kernel messages go to both, but /etc/rc uses video console
  (this should be fixed, btw, but another day)). Check for RB_MULTIPLE as well as
  RB_SERIAL where we want to to serial things. This means we'll use the old code
  for emulation in these situations, which is likely best since we're outputing to
  both and the old code is ligher weight allowing both to keep up w/o weird
  scrolling things.

Modified:
  head/stand/efi/libefi/efi_console.c

Modified: head/stand/efi/libefi/efi_console.c
==============================================================================
--- head/stand/efi/libefi/efi_console.c	Thu Nov 28 05:40:10 2019	(r355167)
+++ head/stand/efi/libefi/efi_console.c	Thu Nov 28 05:40:15 2019	(r355168)
@@ -824,9 +824,13 @@ efi_cons_update_mode(void)
 	 * terminal emulator for efi text mode to support the menu.
 	 * While teken is too expensive to be used on serial console, the
 	 * pre-teken emulator is light enough to be used on serial console.
+	 *
+	 * When doing multiple consoles (both serial and video),
+	 * also just use the old emulator. RB_MULTIPLE also implies
+	 * we're using a serial console.
 	 */
 	mode = parse_uefi_con_out();
-	if ((mode & RB_SERIAL) == 0) {
+	if ((mode & (RB_SERIAL | RB_MULTIPLE)) == 0) {
 		if (buffer != NULL) {
 			if (tp.tp_row == rows && tp.tp_col == cols)
 				return (true);
@@ -998,7 +1002,11 @@ efi_cons_putchar(int c)
 {
 	unsigned char ch = c;
 
-	if ((mode & RB_SERIAL) != 0) {
+	/*
+	 * Don't use Teken when we're doing pure serial, or a multiple console
+	 * with video "primary" because that's also serial.
+	 */
+	if ((mode & (RB_SERIAL | RB_MULTIPLE)) != 0) {
 		input_byte(ch);
 		return;
 	}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201911280540.xAS5eFm3036789>