svn commit: r186091 - head/sys/dev/usb
Poul-Henning Kamp
phk at FreeBSD.org
Sun Dec 14 20:03:47 UTC 2008
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);
More information about the svn-src-head
mailing list