- /* only channel 2 has modem control (what about line 3?) */
- dcaddr = (dcregs *)dcpdma[i = 2].p_addr;
- tp = &dc_tty[i];
- bit = TCR_DTR2;
- if (dcsoftCAR[i >> 2] & bit)
- car = 1;
- else
- car = dcaddr->dc_msr & MSR_DSR2;
- if (car) {
- /* carrier present */
- if (!(tp->t_state & TS_CARR_ON))
- (void)(*linesw[tp->t_line].l_modem)(tp, 1);
- } else if ((tp->t_state & TS_CARR_ON) &&
- (*linesw[tp->t_line].l_modem)(tp, 0) == 0)
- dcaddr->dc_tcr &= ~bit;
+ for (unit = 2; unit <= limit; unit++, dtr >>= 2, dsr >>= 8) {
+ tp = &dc_tty[unit];
+ dcaddr = (dcregs *)dcpdma[unit].p_addr;
+ if (dcaddr->dc_msr & dsr) {
+ /* carrier present */
+ if (!(tp->t_state & TS_CARR_ON))
+ (void)(*linesw[tp->t_line].l_modem)(tp, 1);
+ } else if ((tp->t_state & TS_CARR_ON) &&
+ (*linesw[tp->t_line].l_modem)(tp, 0) == 0)
+ dcaddr->dc_tcr &= ~dtr;
+ /*
+ * If we are using hardware flow control and output is stopped,
+ * then resume transmit.
+ */
+ if ((tp->t_cflag & CCTS_OFLOW) && (tp->t_state & TS_TTSTOP) &&
+ pmax_boardtype != DS_PMAX) {
+ switch (unit) {
+ case DCCOMM_PORT:
+ if (dcaddr->dc_msr & MSR_CTS2)
+ break;
+ continue;
+
+ case DCPRINTER_PORT:
+ if (dcaddr->dc_msr & MSR_CTS3)
+ break;
+ continue;
+ }
+ tp->t_state &= ~TS_TTSTOP;
+ dcstart(tp);
+ }
+ }