Author: thompsa
Date: Sun Nov 28 07:28:10 2010
New Revision: 215986
URL: http://svn.freebsd.org/changeset/base/215986

Log:
  MFC r213872
  
   Fix forwarding of Line Register Status changes to TTY layer.
  
  PR: usb/149675

Modified:
  stable/8/sys/dev/usb/serial/usb_serial.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)

Modified: stable/8/sys/dev/usb/serial/usb_serial.c
==============================================================================
--- stable/8/sys/dev/usb/serial/usb_serial.c    Sun Nov 28 07:23:05 2010        
(r215985)
+++ stable/8/sys/dev/usb/serial/usb_serial.c    Sun Nov 28 07:28:10 2010        
(r215986)
@@ -942,6 +942,7 @@ ucom_cfg_status_change(struct usb_proc_m
        uint8_t new_msr;
        uint8_t new_lsr;
        uint8_t onoff;
+       uint8_t lsr_delta;
 
        tp = sc->sc_tty;
 
@@ -965,6 +966,7 @@ ucom_cfg_status_change(struct usb_proc_m
                return;
        }
        onoff = ((sc->sc_msr ^ new_msr) & SER_DCD);
+       lsr_delta = (sc->sc_lsr ^ new_lsr);
 
        sc->sc_msr = new_msr;
        sc->sc_lsr = new_lsr;
@@ -977,6 +979,30 @@ ucom_cfg_status_change(struct usb_proc_m
 
                ttydisc_modem(tp, onoff);
        }
+
+       if ((lsr_delta & ULSR_BI) && (sc->sc_lsr & ULSR_BI)) {
+
+               DPRINTF("BREAK detected\n");
+
+               ttydisc_rint(tp, 0, TRE_BREAK);
+               ttydisc_rint_done(tp);
+       }
+
+       if ((lsr_delta & ULSR_FE) && (sc->sc_lsr & ULSR_FE)) {
+
+               DPRINTF("Frame error detected\n");
+
+               ttydisc_rint(tp, 0, TRE_FRAMING);
+               ttydisc_rint_done(tp);
+       }
+
+       if ((lsr_delta & ULSR_PE) && (sc->sc_lsr & ULSR_PE)) {
+
+               DPRINTF("Parity error detected\n");
+
+               ttydisc_rint(tp, 0, TRE_PARITY);
+               ttydisc_rint_done(tp);
+       }
 }
 
 void
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to