Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 12 Mar 2020 06:45:08 +0000 (UTC)
From:      Toomas Soome <tsoome@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r358906 - head/stand/i386/libi386
Message-ID:  <202003120645.02C6j8Yj068980@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: tsoome
Date: Thu Mar 12 06:45:08 2020
New Revision: 358906
URL: https://svnweb.freebsd.org/changeset/base/358906

Log:
  test if port does exist via using scratch register
  
  The SCR, scratch register was not present on the 8250 and 8250B UART, so we
  can use to test if we actually do have serial port.
  
  We need this test because some systems will get long delays while attempting
  to write to non-existing port and this will slow down the console IO
  to extreme.
  
  MFC after:	1 week

Modified:
  head/stand/i386/libi386/comconsole.c

Modified: head/stand/i386/libi386/comconsole.c
==============================================================================
--- head/stand/i386/libi386/comconsole.c	Thu Mar 12 03:59:51 2020	(r358905)
+++ head/stand/i386/libi386/comconsole.c	Thu Mar 12 06:45:08 2020	(r358906)
@@ -330,6 +330,16 @@ comc_setup(int speed, int port)
 	if ((comconsole.c_flags & (C_ACTIVEIN | C_ACTIVEOUT)) == 0)
 		return;
 
+#define	COMC_TEST	0xbb
+	/*
+	 * Write byte to scratch register and read it out.
+	 */
+	outb(comc_port + com_scr, COMC_TEST);
+	if (inb(comc_port + com_scr) != COMC_TEST) {
+		comconsole.c_flags &= ~(C_PRESENTIN | C_PRESENTOUT);
+		return;
+	}
+
 	outb(comc_port + com_cfcr, CFCR_DLAB | COMC_FMT);
 	outb(comc_port + com_dlbl, COMC_BPS(speed) & 0xff);
 	outb(comc_port + com_dlbh, COMC_BPS(speed) >> 8);



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