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>