- wakeup((caddr_t)&tp->t_rawq);
- if ((tp->t_state&TS_WOPEN) == 0 &&
- (tp->t_flags & MDMBUF)) {
- if (addr->dmlstat & DML_CAR) {
- tp->t_state &= ~TS_TTSTOP;
- ttstart(tp);
- } else if ((tp->t_state&TS_TTSTOP) == 0) {
- tp->t_state |= TS_TTSTOP;
- dhstop(tp, 0);
- }
- } else if ((addr->dmlstat & DML_CAR)==0) {
- if ((tp->t_state & TS_CARR_ON) &&
- (tp->t_flags & NOHANG) == 0 &&
- (dhsoftCAR[dm] & (1<<unit)) == 0) {
- if (tp->t_state & TS_ISOPEN) {
- gsignal(tp->t_pgrp, SIGHUP);
- gsignal(tp->t_pgrp, SIGCONT);
- addr->dmlstat = 0;
- ttyflush(tp, FREAD|FWRITE);
- }
- tp->t_state &= ~TS_CARR_ON;
- }
- } else
- tp->t_state |= TS_CARR_ON;
+ if (addr->dmlstat & DML_CAR)
+ (void)(*linesw[tp->t_line].l_modem)(tp, 1);
+ else if ((dhsoftCAR[dm] & (1<<unit)) == 0 &&
+ (*linesw[tp->t_line].l_modem)(tp, 0) == 0)
+ addr->dmlstat = 0;