summaryrefslogtreecommitdiffstats
path: root/sys/dev/usb
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2008-12-14 20:03:46 +0000
committerphk <phk@FreeBSD.org>2008-12-14 20:03:46 +0000
commitecf077f4c49030fc94b87f4ac80573fa5be82e48 (patch)
tree8a5f84a74e23f04302d88ec9780ff23c8fd94fce /sys/dev/usb
parent5981f7a689e7291656f30b6c8e94a05339c101b0 (diff)
downloadFreeBSD-src-ecf077f4c49030fc94b87f4ac80573fa5be82e48.zip
FreeBSD-src-ecf077f4c49030fc94b87f4ac80573fa5be82e48.tar.gz
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.
Diffstat (limited to 'sys/dev/usb')
-rw-r--r--sys/dev/usb/ucom.c39
-rw-r--r--sys/dev/usb/ucomvar.h1
2 files changed, 23 insertions, 17 deletions
diff --git a/sys/dev/usb/ucom.c b/sys/dev/usb/ucom.c
index 7496d40..3a283d8 100644
--- a/sys/dev/usb/ucom.c
+++ b/sys/dev/usb/ucom.c
@@ -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_private_handle p, usbd_status status)
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);
diff --git a/sys/dev/usb/ucomvar.h b/sys/dev/usb/ucomvar.h
index 0fcd7f3..4433a1a 100644
--- a/sys/dev/usb/ucomvar.h
+++ b/sys/dev/usb/ucomvar.h
@@ -166,3 +166,4 @@ void ucom_attach_tty(struct ucom_softc *, char*, int);
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);
OpenPOWER on IntegriCloud