-#if NVBSC > 0
- /*
- * Check for change in DSR for BISYNC port.
- */
- if (bscport[vx*16+port]&BISYNC) {
- if (kp->v_ustat&DSR_CHG) {
- register struct vx_softc *xp;
- register struct bsc *bp;
- extern struct bsc bsc[];
-
- vs = (struct vx_softc *)tp->t_addr;
- bp = &bsc[minor(tp->t_dev)] ;
- bp->b_hlflgs &= ~BSC_DSR ;
- if (kp->v_ustat & DSR_ON)
- bp->b_hlflgs |= BSC_DSR ;
- printf("BSC DSR Chg: %x\n", kp->v_ustat&DSR_CHG);/*XXX*/
- }
- return;
- }
-#endif
- if ((kp->v_ustat&DCD_ON) && ((tp->t_state&TS_CARR_ON) == 0)) {
- tp->t_state |= TS_CARR_ON;
- wakeup((caddr_t)&tp->t_canq);
- return;
- }
- if ((kp->v_ustat&DCD_OFF) && (tp->t_state&TS_CARR_ON)) {
- tp->t_state &= ~TS_CARR_ON;
- if (tp->t_state&TS_ISOPEN) {
- register struct vx_softc *vs;
- register struct vcmds *cp;
- register struct vxcmd *cmdp;
-
- ttyflush(tp, FREAD|FWRITE);
- /* clear all pending trnansmits */
- vs = &vx_softc[vx];
- if (tp->t_state&(TS_BUSY|TS_FLUSH) &&
- vs->vs_vers == VXV_NEW) {
- int i, cmdfound = 0;
-
- cp = &vs->vs_cmds;
- for (i = cp->v_empty; i != cp->v_fill; ) {
- cmdp = (struct vxcmd *)((long *)cp->cmdbuf[i]-1);
- if ((cmdp->cmd == VXC_XMITDTA ||
- cmdp->cmd == VXC_XMITIMM) &&
- ((struct vxmit *)cmdp->par)->line == port) {
- cmdfound++;
- cmdp->cmd = VXC_FDTATOX;
- cmdp->par[1] = port;
- }
- if (++i >= VC_CMDBUFL)
- i = 0;
- }
- if (cmdfound)
- tp->t_state &= ~(TS_BUSY|TS_FLUSH);
- /* cmd is already in vioc, have to flush it */
- else {
- cmdp = vobtain(vs);
+
+ if (kp->v_ustat & DCD_ON)
+ (void)(*linesw[tp->t_line].l_modem)(tp, 1);
+ else if ((kp->v_ustat & DCD_OFF) &&
+ ((vs->vs_softCAR & (1 << port))) == 0 &&
+ (*linesw[tp->t_line].l_modem)(tp, 0) == 0) {
+ register struct vcmds *cp;
+ register struct vxcmd *cmdp;
+
+ /* clear all pending transmits */
+ if (tp->t_state&(TS_BUSY|TS_FLUSH) &&
+ vs->vs_vers == VXV_NEW) {
+ int i, cmdfound = 0;
+
+ cp = &vs->vs_cmds;
+ for (i = cp->v_empty; i != cp->v_fill; ) {
+ cmdp = (struct vxcmd *)((long *)cp->cmdbuf[i]-1);
+ if ((cmdp->cmd == VXC_XMITDTA ||
+ cmdp->cmd == VXC_XMITIMM) &&
+ ((struct vxmit *)cmdp->par)->line == port) {
+ cmdfound++;