Lines Matching refs:SC
213 static void scn_setchip(struct scn_softc *sc);
407 scn_setchip(struct scn_softc *sc)
413 if (sc->sc_tty && (sc->sc_tty->t_state & TS_BUSY)) {
414 sc->sc_heldchanges = 1;
418 chan = sc->sc_channel;
419 dp = sc->sc_duart;
450 sc->sc_chbase[CH_CR] = CR_CMD_MR0;
455 sc->sc_chbase[CH_CR] = CR_CMD_MR0;
457 sc->sc_chbase[CH_MR] = dp->chan[chan].mr0;
461 sc->sc_chbase[CH_CR] = CR_CMD_MR1;
465 mr1 = sc->sc_chbase[CH_MR];
466 mr2 = sc->sc_chbase[CH_MR];
469 sc->sc_chbase[CH_CR] = CR_CMD_MR1;
471 sc->sc_chbase[CH_MR] = dp->chan[chan].new_mr1;
472 sc->sc_chbase[CH_MR] = dp->chan[chan].new_mr2;
480 if (sc->sc_chbase[CH_CSR] != csr) {
481 sc->sc_chbase[CH_CSR] = csr;
526 sc->sc_heldchanges = 0;
608 struct scn_softc *sc;
623 sc = SOFTC(unit);
624 chan = sc->sc_channel;
626 dp = sc->sc_duart;
738 scn_setchip(sc); /* set chip now, if possible */
760 scn_rxenable(struct scn_softc *sc)
765 dp = sc->sc_duart;
766 channel = sc->sc_channel;
774 dp->imr |= sc->sc_rx_int;
779 scn_rxdisable(struct scn_softc *sc)
784 dp = sc->sc_duart;
785 channel = sc->sc_channel;
793 dp->imr &= ~sc->sc_rx_int;
801 struct scn_softc *sc;
820 sc = device_private(self);
831 duart = sc->sc_duart = &scn_duart[duartno];
832 duart->chan[channel].sc = sc;
836 sc->sc_isconsole = 1;
837 sc->sc_swflags |= SCN_SW_SOFTCAR; /* ignore carrier */
922 sc->sc_channel = channel;
923 sc->sc_chbase = ch_base;
927 sc->sc_op_rts = OP_RTSA;
928 sc->sc_op_dtr = OP_DTRA;
929 sc->sc_ip_cts = IP_CTSA;
930 sc->sc_ip_dcd = IP_DCDA;
932 sc->sc_tx_int = INT_TXA;
933 sc->sc_rx_int = INT_RXA;
935 sc->sc_op_rts = OP_RTSB;
936 sc->sc_op_dtr = OP_DTRB;
937 sc->sc_ip_cts = IP_CTSB;
938 sc->sc_ip_dcd = IP_DCDB;
940 sc->sc_tx_int = INT_TXB;
941 sc->sc_rx_int = INT_RXB;
945 sc->sc_framing_errors = 0;
946 sc->sc_fifo_overruns = 0;
947 sc->sc_parity_errors = 0;
948 sc->sc_breaks = 0;
963 SCN_OP_BIC(sc, sc->sc_op_rts); /* "istop" */
1039 scn_rxdisable(sc);
1042 if (sc->sc_swflags) {
1043 printf("%c flags %d", delim, sc->sc_swflags);
1055 scn_rxenable(sc);
1076 struct scn_softc *sc;
1081 sc = SOFTC(unit);
1082 if (!sc)
1085 tp = sc->sc_tty;
1088 sc->sc_tty = sc->sc_duart->chan[sc->sc_channel].tty = tp;
1108 sc->sc_rx_blocked = 0;
1110 if (sc->sc_swflags & SCN_SW_CLOCAL)
1112 if (sc->sc_swflags & SCN_SW_CRTSCTS)
1115 if (sc->sc_isconsole)
1123 SCN_OP_BIS(sc, sc->sc_op_rts | sc->sc_op_dtr);
1126 scn_rxenable(sc);
1129 if ((sc->sc_swflags & SCN_SW_SOFTCAR) || /* check ttyflags */
1130 SCN_DCD(sc) || /* check h/w */
1139 error = ttyopen(tp, SCN_DIALOUT(sc), flags & O_NONBLOCK);
1153 scn_rxdisable(sc);
1154 SCN_OP_BIC(sc, sc->sc_op_rts | sc->sc_op_dtr);
1166 struct scn_softc *sc = SOFTC(unit);
1167 struct tty *tp = sc->sc_tty;
1184 scn_rxdisable(sc);
1186 if ((tp->t_cflag & HUPCL) && (sc->sc_swflags & SCN_SW_SOFTCAR) == 0) {
1187 SCN_OP_BIC(sc, sc->sc_op_dtr);
1189 tsleep(sc, TTIPRI, ttclos, hz);
1191 SCN_CLRDIALOUT(sc);
1197 sc->sc_tty = (struct tty *) NULL;
1207 struct scn_softc *sc = SOFTC(DEV_UNIT(dev));
1208 struct tty *tp = sc->sc_tty;
1216 struct scn_softc *sc = SOFTC(DEV_UNIT(dev));
1217 struct tty *tp = sc->sc_tty;
1225 struct scn_softc *sc = SOFTC(DEV_UNIT(dev));
1226 struct tty *tp = sc->sc_tty;
1234 struct scn_softc *sc = SOFTC(DEV_UNIT(dev));
1236 return sc->sc_tty;
1241 dcd_int(struct scn_softc *sc, struct tty *tp, u_char new)
1244 if (sc->sc_swflags & SCN_SW_SOFTCAR)
1249 sc->unit,
1250 sc->sc_duart->base[DU_IP],
1251 SCN_DCD(sc),
1253 sc->sc_duart->base[DU_IPCR]
1259 SCN_OP_BIC(sc, sc->sc_op_rts | sc->sc_op_dtr);
1286 struct scn_softc *sc = SOFTC(unit);
1291 if (sc->sc_rbput - sc->sc_rbget - 1) {
1303 struct scn_softc *sc0 = duart->chan[0].sc;
1304 struct scn_softc *sc1 = duart->chan[1].sc;
1389 scn_rxintr(struct scn_softc *sc)
1396 i = sc->sc_rbput;
1398 #define SCN_GETCH(SC) \
1399 sr = (SC)->sc_chbase[CH_SR]; \
1405 (SC)->sc_rbuf[i++ & SCN_RING_MASK] = (SC)->sc_chbase[CH_DAT]
1407 SCN_GETCH(sc); SCN_GETCH(sc); SCN_GETCH(sc);
1412 if (sc->sc_isconsole && (sr & SR_BREAK)) {
1414 sr = sc->sc_chbase[CH_SR];
1418 if (sc->sc_iskgdb && (sr & SR_RX_RDY)) {
1420 sr = sc->sc_chbase[CH_SR];
1424 sc->sc_rbuf[i++ & SCN_RING_MASK] = (sr << 8) | sc->sc_chbase[CH_DAT];
1425 sc->sc_chbase[CH_CR] = CR_CMD_RESET_ERR; /* resets break? */
1431 n = i - sc->sc_rbget;
1432 if (sc->sc_rbhiwat && (n > sc->sc_rbhiwat)) {
1437 SCN_OP_BIC(sc, sc->sc_op_rts);
1438 sc->sc_rx_blocked = 1;
1440 sc->sc_rbput = i;
1451 if (duart->chan[0].sc != NULL)
1452 work += scn_rxintr(duart->chan[0].sc);
1453 if (duart->chan[1].sc != NULL)
1454 work += scn_rxintr(duart->chan[1].sc);
1499 struct scn_softc *sc;
1503 sc = SOFTC(unit);
1504 if (sc == NULL) {
1507 tp = sc->sc_tty;
1510 sc->sc_rbget = sc->sc_rbput;
1519 get = sc->sc_rbget;
1522 while (get != (n = sc->sc_rbput)) {
1534 scnoverrun(unit, &sc->sc_rotime, "ring");
1537 sc->sc_ring_overruns++;
1543 sc->sc_rbget = get;
1547 c = sc->sc_rbuf[get++ & SCN_RING_MASK];
1553 scnoverrun(unit, &sc->sc_fotime, "fifo");
1554 sc->sc_fifo_overruns++;
1558 sc->sc_parity_errors++;
1562 sc->sc_framing_errors++;
1570 if (sc->sc_isconsole)
1574 sc->sc_breaks++;
1579 if (sc->sc_rx_blocked && n < SCN_RING_THRESH) {
1581 sc->sc_rx_blocked = 0;
1582 SCN_OP_BIS(sc, sc->sc_op_rts);
1587 sc->sc_rbget = get;
1595 opbits(struct scn_softc *sc, int tioc_bits)
1598 return ((((tioc_bits) & TIOCM_DTR) ? sc->sc_op_dtr : 0) |
1599 (((tioc_bits) & TIOCM_RTS) ? sc->sc_op_rts : 0));
1606 struct scn_softc *sc = SOFTC(unit);
1607 struct tty *tp = sc->sc_tty;
1620 sc->sc_chbase[CH_CR] = CR_CMD_START_BRK;
1624 sc->sc_chbase[CH_CR] = CR_CMD_STOP_BRK;
1628 SCN_OP_BIS(sc, sc->sc_op_dtr | sc->sc_op_rts);
1632 SCN_OP_BIC(sc, sc->sc_op_dtr | sc->sc_op_rts);
1640 sbits = opbits(sc, *(int *) data);
1643 cbits = ~sbits & (sc->sc_op_dtr | sc->sc_op_rts);
1647 SCN_OP_BIS(sc, sbits);
1650 SCN_OP_BIC(sc, cbits);
1657 SCN_OP_BIS(sc, opbits(sc, *(int *) data));
1661 SCN_OP_BIC(sc, opbits(sc, *(int *) data));
1669 ip = sc->sc_duart->base[DU_IP];
1673 if (ip & sc->sc_ip_dcd)
1675 if (ip & sc->sc_ip_cts)
1684 if (op & sc->sc_op_dtr)
1686 if (op & sc->sc_op_rts)
1697 if (sc->sc_swflags & SCN_SW_SOFTCAR)
1699 if (sc->sc_swflags & SCN_SW_CLOCAL)
1701 if (sc->sc_swflags & SCN_SW_CRTSCTS)
1703 if (sc->sc_swflags & SCN_SW_MDMBUF)
1727 sc->sc_swflags = driverbits;
1745 struct scn_softc *sc = SOFTC(unit);
1749 SCN_OP_BIC(sc, sc->sc_op_dtr);
1792 sc->sc_rbhiwat = SCN_RING_HIWAT;
1794 sc->sc_rbhiwat = 0;
1797 error = scn_config(unit, sc->sc_channel, t->c_ispeed,
1817 struct scn_softc *sc = SOFTC(unit);
1827 while (sc->sc_chbase[CH_SR] & SR_TX_RDY) {
1830 sc->sc_chbase[CH_DAT] = c;
1832 sc->sc_duart->imr |= (sc->sc_tx_int | sc->sc_rx_int);
1833 sc->sc_duart->base[DU_IMR] = sc->sc_duart->imr;