Author: phk
Date: Sun Dec 14 20:03:46 2008
New Revision: 186091
URL: http://svn.freebsd.org/changeset/base/186091

Log:
  Move the code that injects received characters into the tty system into
  a separate public function ucomrxchars(), to avoid requirement of
  simple metadata prefixing on the USB data stream.

Modified:
  head/sys/dev/usb/ucom.c
  head/sys/dev/usb/ucomvar.h

Modified: head/sys/dev/usb/ucom.c
==============================================================================
--- head/sys/dev/usb/ucom.c     Sun Dec 14 19:39:53 2008        (r186090)
+++ head/sys/dev/usb/ucom.c     Sun Dec 14 20:03:46 2008        (r186091)
@@ -700,11 +700,30 @@ ucomstartread(struct ucom_softc *sc)
        return (USBD_NORMAL_COMPLETION);
 }
 
+void
+ucomrxchars(struct ucom_softc *sc, u_char *cp, u_int32_t cc)
+{
+       struct tty *tp = sc->sc_tty;
+
+       /* Give characters to tty layer. */
+       while (cc > 0) {
+               DPRINTFN(7, ("ucomreadcb: char = 0x%02x\n", *cp));
+               if (ttydisc_rint(tp, *cp, 0) == -1) {
+                       /* XXX what should we do? */
+                       printf("%s: lost %d chars\n",
+                              device_get_nameunit(sc->sc_dev), cc);
+                       break;
+               }
+               cc--;
+               cp++;
+       }
+       ttydisc_rint_done(tp);
+}
+
 static void
 ucomreadcb(usbd_xfer_handle xfer, usbd_private_handle p, usbd_status status)
 {
        struct ucom_softc *sc = (struct ucom_softc *)p;
-       struct tty *tp = sc->sc_tty;
        usbd_status err;
        u_int32_t cc;
        u_char *cp;
@@ -737,22 +756,8 @@ ucomreadcb(usbd_xfer_handle xfer, usbd_p
                       device_get_nameunit(sc->sc_dev), cc);
                goto resubmit;
        }
-       if (cc < 1)
-               goto resubmit;
-       
-       /* Give characters to tty layer. */
-       while (cc > 0) {
-               DPRINTFN(7, ("ucomreadcb: char = 0x%02x\n", *cp));
-               if (ttydisc_rint(tp, *cp, 0) == -1) {
-                       /* XXX what should we do? */
-                       printf("%s: lost %d chars\n",
-                              device_get_nameunit(sc->sc_dev), cc);
-                       break;
-               }
-               cc--;
-               cp++;
-       }
-       ttydisc_rint_done(tp);
+       if (cc > 0)
+               ucomrxchars(sc, cp, cc);
 
     resubmit:
        err = ucomstartread(sc);

Modified: head/sys/dev/usb/ucomvar.h
==============================================================================
--- head/sys/dev/usb/ucomvar.h  Sun Dec 14 19:39:53 2008        (r186090)
+++ head/sys/dev/usb/ucomvar.h  Sun Dec 14 20:03:46 2008        (r186091)
@@ -166,3 +166,4 @@ void ucom_attach_tty(struct ucom_softc *
 int ucom_attach(struct ucom_softc *);
 int ucom_detach(struct ucom_softc *);
 void ucom_status_change(struct ucom_softc *);
+void ucomrxchars(struct ucom_softc *sc, u_char *cp, u_int32_t cc);
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to