Deleted Added
full compact
sio.c (32089) sio.c (32332)
1/*-
2 * Copyright (c) 1991 The Regents of the University of California.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 17 unchanged lines hidden (view full) ---

26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 *
33 * from: @(#)com.c 7.5 (Berkeley) 5/16/91
1/*-
2 * Copyright (c) 1991 The Regents of the University of California.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 17 unchanged lines hidden (view full) ---

26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 *
33 * from: @(#)com.c 7.5 (Berkeley) 5/16/91
34 * $Id: sio.c,v 1.45 1997/12/16 17:40:39 eivind Exp $
34 * $Id: sio.c,v 1.46 1997/12/29 16:08:48 kato Exp $
35 */
36
37#include "opt_comconsole.h"
38#include "opt_compat.h"
39#include "opt_ddb.h"
40#include "opt_sio.h"
41#include "sio.h"
42#include "pnp.h"

--- 173 unchanged lines hidden (view full) ---

216#define COM_CONSOLE(dev) ((dev)->id_flags & 0x10)
217#define COM_FORCECONSOLE(dev) ((dev)->id_flags & 0x20)
218#define COM_LLCONSOLE(dev) ((dev)->id_flags & 0x40)
219#define COM_LOSESOUTINTS(dev) ((dev)->id_flags & 0x08)
220#define COM_NOFIFO(dev) ((dev)->id_flags & 0x02)
221#define COM_VERBOSE(dev) ((dev)->id_flags & 0x80)
222#define COM_NOTST3(dev) ((dev)->id_flags & 0x10000)
223#define COM_ST16650A(dev) ((dev)->id_flags & 0x20000)
35 */
36
37#include "opt_comconsole.h"
38#include "opt_compat.h"
39#include "opt_ddb.h"
40#include "opt_sio.h"
41#include "sio.h"
42#include "pnp.h"

--- 173 unchanged lines hidden (view full) ---

216#define COM_CONSOLE(dev) ((dev)->id_flags & 0x10)
217#define COM_FORCECONSOLE(dev) ((dev)->id_flags & 0x20)
218#define COM_LLCONSOLE(dev) ((dev)->id_flags & 0x40)
219#define COM_LOSESOUTINTS(dev) ((dev)->id_flags & 0x08)
220#define COM_NOFIFO(dev) ((dev)->id_flags & 0x02)
221#define COM_VERBOSE(dev) ((dev)->id_flags & 0x80)
222#define COM_NOTST3(dev) ((dev)->id_flags & 0x10000)
223#define COM_ST16650A(dev) ((dev)->id_flags & 0x20000)
224#define COM_C_NOPROBE (0x40000)
225#define COM_NOPROBE(dev) ((dev)->id_flags & COM_C_NOPROBE)
226#define COM_C_IIR_TXRDYBUG (0x80000)
227#define COM_IIR_TXRDYBUG(dev) ((dev)->id_flags & COM_C_IIR_TXRDYBUG)
224#define COM_FIFOSIZE(dev) (((dev)->id_flags & 0xff000000) >> 24)
225
226#ifndef PC98
227#define com_scr 7 /* scratch register for 16450-16550 (R/W) */
228#endif /* !PC98 */
229
230/*
231 * Input buffer watermarks.

--- 54 unchanged lines hidden (view full) ---

286 u_char *l_head; /* next char to process */
287 u_char *l_tail; /* one past the last char to process */
288 struct lbq *l_next; /* next in queue */
289 bool_t l_queued; /* nonzero if queued */
290};
291
292/* com device structure */
293struct com_s {
228#define COM_FIFOSIZE(dev) (((dev)->id_flags & 0xff000000) >> 24)
229
230#ifndef PC98
231#define com_scr 7 /* scratch register for 16450-16550 (R/W) */
232#endif /* !PC98 */
233
234/*
235 * Input buffer watermarks.

--- 54 unchanged lines hidden (view full) ---

290 u_char *l_head; /* next char to process */
291 u_char *l_tail; /* one past the last char to process */
292 struct lbq *l_next; /* next in queue */
293 bool_t l_queued; /* nonzero if queued */
294};
295
296/* com device structure */
297struct com_s {
298 u_int id_flags; /* Copy isa device falgas */
294 u_char state; /* miscellaneous flag bits */
295 bool_t active_out; /* nonzero if the callout device is open */
296 u_char cfcr_image; /* copy of value written to CFCR */
297#ifdef COM_ESP
298 bool_t esp; /* is this unit a hayes esp board? */
299#endif
300 u_char extra_state; /* more flag bits, separate for order trick */
301 u_char fifo_image; /* copy of value written to FIFO */

--- 49 unchanged lines hidden (view full) ---

351#ifdef COM_ESP
352 Port_t esp_port;
353#endif
354 Port_t int_id_port;
355 Port_t iobase;
356 Port_t modem_ctl_port;
357 Port_t line_status_port;
358 Port_t modem_status_port;
299 u_char state; /* miscellaneous flag bits */
300 bool_t active_out; /* nonzero if the callout device is open */
301 u_char cfcr_image; /* copy of value written to CFCR */
302#ifdef COM_ESP
303 bool_t esp; /* is this unit a hayes esp board? */
304#endif
305 u_char extra_state; /* more flag bits, separate for order trick */
306 u_char fifo_image; /* copy of value written to FIFO */

--- 49 unchanged lines hidden (view full) ---

356#ifdef COM_ESP
357 Port_t esp_port;
358#endif
359 Port_t int_id_port;
360 Port_t iobase;
361 Port_t modem_ctl_port;
362 Port_t line_status_port;
363 Port_t modem_status_port;
364 Port_t intr_ctl_port; /* Ports of IIR register */
359
360 struct tty *tp; /* cross reference */
361
362 /* Initial state. */
363 struct termios it_in; /* should be in struct tty */
364 struct termios it_out;
365
366 /* Lock state. */

--- 364 unchanged lines hidden (view full) ---

731{
732
733 /* validate unit number. */
734 if (devi->isahd.id_unit >= (NSIOTOT))
735 return(ENODEV);
736 /* Make sure it isn't already probed. */
737 if (com_addr(devi->isahd.id_unit))
738 return(EBUSY);
365
366 struct tty *tp; /* cross reference */
367
368 /* Initial state. */
369 struct termios it_in; /* should be in struct tty */
370 struct termios it_out;
371
372 /* Lock state. */

--- 364 unchanged lines hidden (view full) ---

737{
738
739 /* validate unit number. */
740 if (devi->isahd.id_unit >= (NSIOTOT))
741 return(ENODEV);
742 /* Make sure it isn't already probed. */
743 if (com_addr(devi->isahd.id_unit))
744 return(EBUSY);
745
746 /* It's already probed as serial by Upper */
747 devi->isahd.id_flags |= COM_C_NOPROBE;
748
739 /*
740 * Probe the device. If a value is returned, the
741 * device was found at the location.
742 */
743 if (sioprobe(&devi->isahd) == 0)
744 return(ENXIO);
745 if (sioattach(&devi->isahd) == 0)
746 return(ENXIO);

--- 259 unchanged lines hidden (view full) ---

1006 * (MCR_IENABLE was hidden). This should leave the device driving
1007 * an interrupt line high. It doesn't matter if the interrupt
1008 * line oscillates while we are not looking at it, since interrupts
1009 * are disabled.
1010 */
1011/* EXTRA DELAY? */
1012 outb(iobase + com_mcr, mcr_image);
1013
749 /*
750 * Probe the device. If a value is returned, the
751 * device was found at the location.
752 */
753 if (sioprobe(&devi->isahd) == 0)
754 return(ENXIO);
755 if (sioattach(&devi->isahd) == 0)
756 return(ENXIO);

--- 259 unchanged lines hidden (view full) ---

1016 * (MCR_IENABLE was hidden). This should leave the device driving
1017 * an interrupt line high. It doesn't matter if the interrupt
1018 * line oscillates while we are not looking at it, since interrupts
1019 * are disabled.
1020 */
1021/* EXTRA DELAY? */
1022 outb(iobase + com_mcr, mcr_image);
1023
1024 /*
1025 * It's a definitly Serial PCMCIA(16550A), but still be required
1026 * for IIR_TXRDY implementation ( Palido 321s, DC-1S... )
1027 */
1028 if ( COM_NOPROBE(dev) ) {
1029 /* Reading IIR register twice */
1030 for ( fn = 0; fn < 2; fn ++ ) {
1031 DELAY(10000);
1032 failures[6] = inb(iobase + com_iir);
1033 }
1034 /* Check IIR_TXRDY clear ? */
1035 result = IO_COMSIZE;
1036 if ( failures[6] & IIR_TXRDY ) {
1037 /* Nop, Double check with clearing IER */
1038 outb(iobase + com_ier, 0);
1039 if ( inb(iobase + com_iir) & IIR_NOPEND ) {
1040 /* Ok. we're familia this gang */
1041 dev->id_flags |= COM_C_IIR_TXRDYBUG; /* Set IIR_TXRDYBUG */
1042 } else {
1043 /* Unknow, Just omit this chip.. XXX*/
1044 result = 0;
1045 }
1046 } else {
1047 /* OK. this is well-known guys */
1048 dev->id_flags &= ~COM_C_IIR_TXRDYBUG; /*Clear IIR_TXRDYBUG*/
1049 }
1050 outb(iobase + com_cfcr, CFCR_8BITS);
1051 enable_intr();
1052 return( result );
1053 }
1054
1014 /*
1015 * Check that
1016 * o the CFCR, IER and MCR in UART hold the values written to them
1017 * (the values happen to be all distinct - this is good for
1018 * avoiding false positive tests from bus echoes).
1019 * o an output interrupt is generated and its vector is correct.
1020 * o the interrupt goes away when the IIR in the UART is read.
1021 */

--- 158 unchanged lines hidden (view full) ---

1180 if((iobase & 0x0f0) == 0xd0) {
1181 com->pc98_if_type = MC16550;
1182 com->data_port = iobase + com_data;
1183 com->int_id_port = iobase + com_iir;
1184 com->modem_ctl_port = iobase + com_mcr;
1185 com->mcr_image = inb(com->modem_ctl_port);
1186 com->line_status_port = iobase + com_lsr;
1187 com->modem_status_port = iobase + com_msr;
1055 /*
1056 * Check that
1057 * o the CFCR, IER and MCR in UART hold the values written to them
1058 * (the values happen to be all distinct - this is good for
1059 * avoiding false positive tests from bus echoes).
1060 * o an output interrupt is generated and its vector is correct.
1061 * o the interrupt goes away when the IIR in the UART is read.
1062 */

--- 158 unchanged lines hidden (view full) ---

1221 if((iobase & 0x0f0) == 0xd0) {
1222 com->pc98_if_type = MC16550;
1223 com->data_port = iobase + com_data;
1224 com->int_id_port = iobase + com_iir;
1225 com->modem_ctl_port = iobase + com_mcr;
1226 com->mcr_image = inb(com->modem_ctl_port);
1227 com->line_status_port = iobase + com_lsr;
1228 com->modem_status_port = iobase + com_msr;
1229 com->intr_ctl_port = iobase + com_ier;
1188 }
1189#else /* not PC98 */
1190 com->data_port = iobase + com_data;
1191 com->int_id_port = iobase + com_iir;
1192 com->modem_ctl_port = iobase + com_mcr;
1193 com->mcr_image = inb(com->modem_ctl_port);
1194 com->line_status_port = iobase + com_lsr;
1195 com->modem_status_port = iobase + com_msr;
1230 }
1231#else /* not PC98 */
1232 com->data_port = iobase + com_data;
1233 com->int_id_port = iobase + com_iir;
1234 com->modem_ctl_port = iobase + com_mcr;
1235 com->mcr_image = inb(com->modem_ctl_port);
1236 com->line_status_port = iobase + com_lsr;
1237 com->modem_status_port = iobase + com_msr;
1238 com->intr_ctl_port = iobase + com_ier;
1196#endif
1197
1198 /*
1199 * We don't use all the flags from <sys/ttydefaults.h> since they
1200 * are only relevant for logins. It's important to have echo off
1201 * initially so that the line doesn't start blathering before the
1202 * echo flag can be turned off.
1203 */

--- 26 unchanged lines hidden (view full) ---

1230 if((inb(iobase+7) ^ inb(iobase+7)) & 0x80) {
1231 printf(" Digicom Systems, Inc. SoftModem");
1232 goto determined_type;
1233 }
1234#endif /* DSI_SOFT_MODEM */
1235
1236#ifndef PC98
1237#ifdef COM_MULTIPORT
1239#endif
1240
1241 /*
1242 * We don't use all the flags from <sys/ttydefaults.h> since they
1243 * are only relevant for logins. It's important to have echo off
1244 * initially so that the line doesn't start blathering before the
1245 * echo flag can be turned off.
1246 */

--- 26 unchanged lines hidden (view full) ---

1273 if((inb(iobase+7) ^ inb(iobase+7)) & 0x80) {
1274 printf(" Digicom Systems, Inc. SoftModem");
1275 goto determined_type;
1276 }
1277#endif /* DSI_SOFT_MODEM */
1278
1279#ifndef PC98
1280#ifdef COM_MULTIPORT
1238 if (!COM_ISMULTIPORT(isdp))
1281 if (!COM_ISMULTIPORT(isdp) && !COM_IIR_TXRDYBUG(isdp))
1282#else
1283 if (!COM_IIR_TXRDYBUG(isdp))
1239#endif
1240 {
1241 u_char scr;
1242 u_char scr1;
1243 u_char scr2;
1244
1245 scr = inb(iobase + com_scr);
1246 outb(iobase + com_scr, 0xa5);

--- 120 unchanged lines hidden (view full) ---

1367 COM_MPMASTER(isdp))->id_irq == 0;
1368 }
1369#endif /* COM_MULTIPORT */
1370#ifdef PC98
1371 }
1372#endif
1373 if (unit == comconsole)
1374 printf(", console");
1284#endif
1285 {
1286 u_char scr;
1287 u_char scr1;
1288 u_char scr2;
1289
1290 scr = inb(iobase + com_scr);
1291 outb(iobase + com_scr, 0xa5);

--- 120 unchanged lines hidden (view full) ---

1412 COM_MPMASTER(isdp))->id_irq == 0;
1413 }
1414#endif /* COM_MULTIPORT */
1415#ifdef PC98
1416 }
1417#endif
1418 if (unit == comconsole)
1419 printf(", console");
1420 if ( COM_IIR_TXRDYBUG(isdp) )
1421 printf(" with a bogus IIR_TXRDY register");
1375 printf("\n");
1376
1377 s = spltty();
1378 com_addr(unit) = com;
1379 splx(s);
1380
1381 dev = makedev(CDEV_MAJOR, 0);
1382 cdevsw_add(&dev, &sio_cdevsw, NULL);

--- 12 unchanged lines hidden (view full) ---

1395 UID_UUCP, GID_DIALER, 0660, "cuaa%n", unit);
1396 com->devfs_token_cuai = devfs_add_devswf(&sio_cdevsw,
1397 unit | CALLOUT_MASK | CONTROL_INIT_STATE, DV_CHR,
1398 UID_UUCP, GID_DIALER, 0660, "cuaia%n", unit);
1399 com->devfs_token_cual = devfs_add_devswf(&sio_cdevsw,
1400 unit | CALLOUT_MASK | CONTROL_LOCK_STATE, DV_CHR,
1401 UID_UUCP, GID_DIALER, 0660, "cuala%n", unit);
1402#endif
1422 printf("\n");
1423
1424 s = spltty();
1425 com_addr(unit) = com;
1426 splx(s);
1427
1428 dev = makedev(CDEV_MAJOR, 0);
1429 cdevsw_add(&dev, &sio_cdevsw, NULL);

--- 12 unchanged lines hidden (view full) ---

1442 UID_UUCP, GID_DIALER, 0660, "cuaa%n", unit);
1443 com->devfs_token_cuai = devfs_add_devswf(&sio_cdevsw,
1444 unit | CALLOUT_MASK | CONTROL_INIT_STATE, DV_CHR,
1445 UID_UUCP, GID_DIALER, 0660, "cuaia%n", unit);
1446 com->devfs_token_cual = devfs_add_devswf(&sio_cdevsw,
1447 unit | CALLOUT_MASK | CONTROL_LOCK_STATE, DV_CHR,
1448 UID_UUCP, GID_DIALER, 0660, "cuala%n", unit);
1449#endif
1450 com->id_flags = isdp->id_flags; /* Heritate id_flags for later */
1403 return (1);
1404}
1405
1406static int
1407sioopen(dev, flag, mode, p)
1408 dev_t dev;
1409 int flag;
1410 int mode;

--- 140 unchanged lines hidden (view full) ---

1551 pc98_get_modem_status(com);
1552 com_int_Rx_enable(com);
1553 } else {
1554#endif
1555 (void) inb(com->line_status_port);
1556 (void) inb(com->data_port);
1557 com->prev_modem_status = com->last_modem_status
1558 = inb(com->modem_status_port);
1451 return (1);
1452}
1453
1454static int
1455sioopen(dev, flag, mode, p)
1456 dev_t dev;
1457 int flag;
1458 int mode;

--- 140 unchanged lines hidden (view full) ---

1599 pc98_get_modem_status(com);
1600 com_int_Rx_enable(com);
1601 } else {
1602#endif
1603 (void) inb(com->line_status_port);
1604 (void) inb(com->data_port);
1605 com->prev_modem_status = com->last_modem_status
1606 = inb(com->modem_status_port);
1559 outb(iobase + com_ier, IER_ERXRDY | IER_ETXRDY | IER_ERLS
1560 | IER_EMSC);
1607 if (COM_IIR_TXRDYBUG(com)) {
1608 outb(com->intr_ctl_port, IER_ERXRDY | IER_ERLS
1609 | IER_EMSC);
1610 } else {
1611 outb(com->intr_ctl_port, IER_ERXRDY | IER_ETXRDY
1612 | IER_ERLS | IER_EMSC);
1613 }
1561#ifdef PC98
1562 }
1563#endif
1564 enable_intr();
1565 /*
1566 * Handle initial DCD. Callout devices get a fake initial
1567 * DCD (trapdoor DCD). If we are callout, then any sleeping
1568 * callin opens get woken up and resume sleeping on "siobi"

--- 318 unchanged lines hidden (view full) ---

1887static void
1888siointr1(com)
1889 struct com_s *com;
1890{
1891 u_char line_status;
1892 u_char modem_status;
1893 u_char *ioptr;
1894 u_char recv_data;
1614#ifdef PC98
1615 }
1616#endif
1617 enable_intr();
1618 /*
1619 * Handle initial DCD. Callout devices get a fake initial
1620 * DCD (trapdoor DCD). If we are callout, then any sleeping
1621 * callin opens get woken up and resume sleeping on "siobi"

--- 318 unchanged lines hidden (view full) ---

1940static void
1941siointr1(com)
1942 struct com_s *com;
1943{
1944 u_char line_status;
1945 u_char modem_status;
1946 u_char *ioptr;
1947 u_char recv_data;
1948 u_char int_ident;
1949 u_char int_ctl;
1950 u_char int_ctl_new;
1951
1895#ifdef PC98
1896 u_char tmp=0;
1897recv_data=0;
1898#endif /* PC98 */
1899
1952#ifdef PC98
1953 u_char tmp=0;
1954recv_data=0;
1955#endif /* PC98 */
1956
1957 int_ctl = inb(com->intr_ctl_port);
1958 int_ctl_new = int_ctl;
1959
1900 while (TRUE) {
1901#ifdef PC98
1902status_read:;
1903 if (IS_8251(com->pc98_if_type)) {
1904 tmp = inb(com->sts_port);
1905more_intr:
1906 line_status = 0;
1907 if (tmp & STS8251_TxRDY) line_status |= LSR_TXRDY;

--- 158 unchanged lines hidden (view full) ---

2066 ++com->bytes_out;
2067 }
2068#ifdef PC98
2069 if(IS_8251(com->pc98_if_type))
2070 if ( !(pc98_check_i8251_interrupt(com) & IEN_TxFLAG) )
2071 com_int_Tx_enable(com);
2072#endif
2073 com->obufq.l_head = ioptr;
1960 while (TRUE) {
1961#ifdef PC98
1962status_read:;
1963 if (IS_8251(com->pc98_if_type)) {
1964 tmp = inb(com->sts_port);
1965more_intr:
1966 line_status = 0;
1967 if (tmp & STS8251_TxRDY) line_status |= LSR_TXRDY;

--- 158 unchanged lines hidden (view full) ---

2126 ++com->bytes_out;
2127 }
2128#ifdef PC98
2129 if(IS_8251(com->pc98_if_type))
2130 if ( !(pc98_check_i8251_interrupt(com) & IEN_TxFLAG) )
2131 com_int_Tx_enable(com);
2132#endif
2133 com->obufq.l_head = ioptr;
2134 if (COM_IIR_TXRDYBUG(com)) {
2135 int_ctl_new = int_ctl | IER_ETXRDY;
2136 }
2074 if (ioptr >= com->obufq.l_tail) {
2075 struct lbq *qp;
2076
2077 qp = com->obufq.l_next;
2078 qp->l_queued = FALSE;
2079 qp = qp->l_next;
2080 if (qp != NULL) {
2081 com->obufq.l_head = qp->l_head;
2082 com->obufq.l_tail = qp->l_tail;
2083 com->obufq.l_next = qp;
2084 } else {
2085 /* output just completed */
2137 if (ioptr >= com->obufq.l_tail) {
2138 struct lbq *qp;
2139
2140 qp = com->obufq.l_next;
2141 qp->l_queued = FALSE;
2142 qp = qp->l_next;
2143 if (qp != NULL) {
2144 com->obufq.l_head = qp->l_head;
2145 com->obufq.l_tail = qp->l_tail;
2146 com->obufq.l_next = qp;
2147 } else {
2148 /* output just completed */
2149 if ( COM_IIR_TXRDYBUG(com) ) {
2150 int_ctl_new = int_ctl & ~IER_ETXRDY;
2151 }
2086 com->state &= ~CS_BUSY;
2087#if defined(PC98)
2088 if(IS_8251(com->pc98_if_type))
2089 if ( pc98_check_i8251_interrupt(com) & IEN_TxFLAG )
2090 com_int_Tx_disable(com);
2091#endif
2092 }
2093 if (!(com->state & CS_ODONE)) {
2094 com_events += LOTS_OF_EVENTS;
2095 com->state |= CS_ODONE;
2096 setsofttty(); /* handle at high level ASAP */
2097 }
2098 }
2152 com->state &= ~CS_BUSY;
2153#if defined(PC98)
2154 if(IS_8251(com->pc98_if_type))
2155 if ( pc98_check_i8251_interrupt(com) & IEN_TxFLAG )
2156 com_int_Tx_disable(com);
2157#endif
2158 }
2159 if (!(com->state & CS_ODONE)) {
2160 com_events += LOTS_OF_EVENTS;
2161 com->state |= CS_ODONE;
2162 setsofttty(); /* handle at high level ASAP */
2163 }
2164 }
2165 if ( COM_IIR_TXRDYBUG(com) && (int_ctl != int_ctl_new)) {
2166 outb(com->intr_ctl_port, int_ctl_new);
2167 }
2099 }
2100#ifdef PC98
2101 else if (line_status & LSR_TXRDY) {
2102 if(IS_8251(com->pc98_if_type))
2103 if ( pc98_check_i8251_interrupt(com) & IEN_TxFLAG )
2104 com_int_Tx_disable(com);
2105 }
2106 if(IS_8251(com->pc98_if_type))

--- 2143 unchanged lines hidden ---
2168 }
2169#ifdef PC98
2170 else if (line_status & LSR_TXRDY) {
2171 if(IS_8251(com->pc98_if_type))
2172 if ( pc98_check_i8251_interrupt(com) & IEN_TxFLAG )
2173 com_int_Tx_disable(com);
2174 }
2175 if(IS_8251(com->pc98_if_type))

--- 2143 unchanged lines hidden ---