diff options
author | kato <kato@FreeBSD.org> | 1997-06-02 10:51:34 +0000 |
---|---|---|
committer | kato <kato@FreeBSD.org> | 1997-06-02 10:51:34 +0000 |
commit | 7c03b342f2dab7a26c21fab4aa1cfa45c89d0b96 (patch) | |
tree | db4f69a514db1696f887e7e19828a3777a516f09 /sys/pc98/cbus/sio.c | |
parent | 4e283cd7c2c75d7af0c11324296da67d108e5d01 (diff) | |
download | FreeBSD-src-7c03b342f2dab7a26c21fab4aa1cfa45c89d0b96.zip FreeBSD-src-7c03b342f2dab7a26c21fab4aa1cfa45c89d0b96.tar.gz |
Synchronize with sys/i386/isa/sio.c revision 1.169.
Diffstat (limited to 'sys/pc98/cbus/sio.c')
-rw-r--r-- | sys/pc98/cbus/sio.c | 83 |
1 files changed, 15 insertions, 68 deletions
diff --git a/sys/pc98/cbus/sio.c b/sys/pc98/cbus/sio.c index 1ad88c8..c7823d5 100644 --- a/sys/pc98/cbus/sio.c +++ b/sys/pc98/cbus/sio.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * from: @(#)com.c 7.5 (Berkeley) 5/16/91 - * $Id: sio.c,v 1.24 1997/05/19 12:39:42 kato Exp $ + * $Id: sio.c,v 1.25 1997/05/30 09:57:09 kato Exp $ */ #include "opt_comconsole.h" @@ -198,6 +198,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_FIFOSIZE(dev) (((dev)->id_flags & 0xff000000) >> 24) #ifndef PC98 #define com_scr 7 /* scratch register for 16450-16550 (R/W) */ @@ -1238,79 +1239,25 @@ sioattach(isdp) if (COM_NOFIFO(isdp)) { printf(" 16550A fifo disabled"); } 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); - - /* 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); - - /* Put data into transmit FIFO and wait until overrun. */ - for (i=n=0; i<20000; ++i) { - 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_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"); - } -#ifdef COM_ESP - for (espp = likely_esp_ports; *espp != 0; espp++) - if (espattach(isdp, com, *espp)) { - com->tx_fifo_size = 1024; - break; - } -#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"); + com->tx_fifo_size = COM_FIFOSIZE(isdp); } +#ifdef COM_ESP + for (espp = likely_esp_ports; *espp != 0; espp++) + if (espattach(isdp, com, *espp)) { + com->tx_fifo_size = 1024; + break; + } #endif + if (!com->tx_fifo_size) + com->tx_fifo_size = 16; + else + printf(" lookalike with %d bytes FIFO", + com->tx_fifo_size); break; } + #ifdef COM_ESP if (com->esp) { /* |