Date: Tue, 20 May 1997 08:37:31 +0200 From: Poul-Henning Kamp <phk@dk.tfs.com> To: dmaddox@scsn.net Cc: current@freebsd.org Subject: Re: Problems with sio.c v.1.167 Message-ID: <225.864110251@critter> In-Reply-To: Your message of "Mon, 19 May 1997 16:50:39 EDT." <19970519165039.24661@cola94.scsn.net>
next in thread | previous in thread | raw e-mail | index | archive | help
In message <19970519165039.24661@cola94.scsn.net>, "Donald J. Maddox" writes:
> Since building a new kernel including sio.c,v1.167, my internal Motorola
>ModemSurfer modem will no longer connect, and I am seeing a lot of the
>following:
Please try this patch.
Please try and report results & dmesg for sio3 both with and without
flags 0x20000 on sio3.
Index: sio.c
===================================================================
RCS file: /home/ncvs/src/sys/i386/isa/sio.c,v
retrieving revision 1.167
diff -u -r1.167 sio.c
--- sio.c 1997/05/18 21:22:11 1.167
+++ sio.c 1997/05/20 06:26:56
@@ -121,6 +121,7 @@
#define COM_NOFIFO(dev) ((dev)->id_flags & 0x02)
#define COM_VERBOSE(dev) ((dev)->id_flags & 0x80)
#define COM_NOTST3(dev) ((dev)->id_flags & 0x10000)
+#define COM_BIGFIFO(dev) ((dev)->id_flags & 0x20000)
#define com_scr 7 /* scratch register for 16450-16550 (R/W) */
@@ -884,45 +885,39 @@
case FIFO_RX_HIGH:
if (COM_NOFIFO(isdp)) {
printf(" 16550A fifo disabled");
+ } else if (!COM_BIGFIFO(isdp)) {
+ printf(" 16550A");
} else {
/* Detect the fifo size. */
int i, n;
/* Enable and reset the FIFO. */
- outb (iobase+com_fifo, FIFO_ENABLE | FIFO_RCV_RST | FIFO_XMT_RST);
+ outb(iobase+com_fifo, FIFO_ENABLE | FIFO_RCV_RST | FIFO_XMT_RST);
/* Set the loopback mode, 57600 baud. */
- outb (iobase+com_cfcr, CFCR_DLAB);
- outb (iobase+com_dlbh, 0);
- outb (iobase+com_dlbl, 2);
- outb (iobase+com_cfcr, CFCR_8BITS);
- outb (iobase+com_mcr, MCR_LOOPBACK);
- inb (iobase+com_lsr);
+ outb(iobase+com_cfcr, CFCR_DLAB);
+ outb(iobase+com_dlbh, 0);
+ outb(iobase+com_dlbl, 2);
+ outb(iobase+com_cfcr, CFCR_8BITS);
+ outb(iobase+com_mcr, MCR_LOOPBACK);
+ inb(iobase+com_lsr);
/* Put data into transmit FIFO and wait until overrun. */
for (i=n=0; i<20000; ++i) {
- unsigned char lsr = inb (iobase+com_lsr);
+ unsigned char lsr = inb(iobase+com_lsr);
if (lsr & LSR_OE)
break;
if (lsr & LSR_TXRDY) {
- outb (iobase+com_data, 0x5A);
- ++n;
+ outb(iobase+com_data, 0x5A);
+ n++;
}
}
- outb (iobase+com_mcr, 0);
- outb (iobase+com_fifo, 0);
+ outb(iobase+com_mcr, 0);
+ outb(iobase+com_fifo, 0);
com->hasfifo = TRUE;
- if (n > 40) {
- com->tx_fifo_size = 64;
- printf(" 16750");
- } else if (n > 24) {
- com->tx_fifo_size = 32;
- printf(" 16650");
- } else {
- com->tx_fifo_size = 16;
- printf(" 16550A");
- }
+ com->tx_fifo_size = n;
+ printf(" 16550A lookalike with %d bytes xmit-FIFO",n);
#ifdef COM_ESP
for (espp = likely_esp_ports; *espp != 0; espp++)
if (espattach(isdp, com, *espp)) {
@@ -931,31 +926,6 @@
}
#endif
}
-#if 0
- /*
- * Check for the Startech ST16C650 chip.
- * it has a shadow register under the com_iir,
- * which can only be accessed when cfcr == 0xff
- */
- {
- u_char i, j;
-
- i = inb(iobase + com_iir);
- outb(iobase + com_cfcr, 0xff);
- outb(iobase + com_iir, 0x0);
- outb(iobase + com_cfcr, CFCR_8BITS);
- j = inb(iobase + com_iir);
- outb(iobase + com_iir, i);
- if (i != j) {
- printf(" 16550A");
- } else {
- com->tx_fifo_size = 32;
- printf(" 16650");
- }
- if (!com->tx_fifo_size)
- printf(" fifo disabled");
- }
-#endif
break;
}
#ifdef COM_ESP
--
Poul-Henning Kamp | phk@FreeBSD.ORG FreeBSD Core-team.
http://www.freebsd.org/~phk | phk@login.dknet.dk Private mailbox.
whois: [PHK] | phk@tfs.com TRW Financial Systems, Inc.
Power and ignorance is a disgusting cocktail.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?225.864110251>
