Date: Mon, 18 Dec 1995 01:05:23 +0100 (MET) From: Ollivier Robert <roberto@keltia.freenix.fr> To: bde@zeta.org.au (Bruce Evans) Cc: freebsd-current@FreeBSD.org Subject: Re: Mouse not working for two days Message-ID: <199512180005.BAA00293@keltia.freenix.fr> In-Reply-To: <199512162032.HAA09302@godzilla.zeta.org.au> from "Bruce Evans" at Dec 17, 95 07:32:16 am
next in thread | previous in thread | raw e-mail | index | archive | help
It seems that Bruce Evans said:
> It breaks COM_NOFIFO() for at least 16650's and stops the output fifo
> being used at speeds <= 4800. These bugs shouldn't matter for mouses.
> Perhaps the second bug interferes with the SMC bugfix (what happens
> when the fifos are reset while the fifos are not enabled?).
Here is the patch I made to restore most of the 1.126 sio.c code, changing
the constants FIFO_TRIGGER_* into the new FIFO_RX_*. The new 16650
detection code is between STARTECH_PROBE (from a patch Peter sent me).
I don't know if all of what I inserted back is useful but as it is needed
for the last part of the patch which is the *culprit* in my problem !
I found that because it would not work till I inserted the lines back...
Index: sio.c
===================================================================
RCS file: /spare/FreeBSD-current/src/sys/i386/isa/sio.c,v
retrieving revision 1.129
diff -u -2 -r1.129 sio.c
--- sio.c 1995/12/10 20:54:38 1.129
+++ sio.c 1995/12/17 23:57:24
@@ -174,4 +174,6 @@
u_char cfcr_image; /* copy of value written to CFCR */
u_char ftl; /* current rx fifo trigger level */
+ u_char ftl_init; /* ftl_max for next open */
+ u_char ftl_max; /* maximum ftl for current open */
bool_t hasfifo; /* nonzero for 16550 UARTs */
bool_t loses_outints; /* nonzero if device loses output interrupts */
@@ -835,8 +837,12 @@
} else {
com->hasfifo = TRUE;
+ com->ftl_init = FIFO_RX_HIGH;
com->tx_fifo_size = 16;
kdc_sio[unit].kdc_description =
"Serial port: National 16550A or compatible";
}
+#ifndef STARTECH_PROBE
+ printf(" 16550A");
+#else
/*
* Check for the Startech ST16C650 chip.
@@ -861,7 +867,10 @@
"Serial port: Startech 16C650 or similar";
}
+#endif
if (!com->tx_fifo_size)
printf(" fifo disabled");
+#ifdef STARTECH_PROBE
}
+#endif
break;
}
@@ -1036,4 +1045,5 @@
? com->it_out : com->it_in;
(void)commctl(com, TIOCM_DTR | TIOCM_RTS, DMSET);
+ com->ftl_max = com->ftl_init;
com->poll = com->no_irq;
com->poll_output = com->loses_outints;
@@ -1062,5 +1072,6 @@
while (TRUE) {
outb(iobase + com_fifo,
- FIFO_RCV_RST | FIFO_XMT_RST | com->ftl);
+ FIFO_RCV_RST | FIFO_XMT_RST
+ | FIFO_ENABLE | com->ftl);
DELAY(100);
if (!(inb(com->line_status_port) & LSR_RXRDY))
@@ -1898,6 +1909,8 @@
*/
com->ftl = t->c_ospeed <= 4800
- ? 0 : FIFO_ENABLE | FIFO_RX_HIGH;
- outb(iobase + com_fifo, com->ftl);
+ ? FIFO_RX_LOW : FIFO_RX_HIGH;
+ if (com->ftl > com->ftl_max)
+ com->ftl = com->ftl_max;
+ outb(iobase + com_fifo, FIFO_ENABLE | com->ftl);
}
--
Ollivier ROBERT -=- The daemon is FREE! -=- roberto@keltia.frmug.fr.net
FreeBSD keltia.freenix.fr 2.2-CURRENT #4: Fri Dec 15 19:22:25 MET 1995
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199512180005.BAA00293>
