PERFORCE change 151441 for review
Ed Schouten
ed at FreeBSD.org
Thu Oct 16 07:00:21 UTC 2008
http://perforce.freebsd.org/chv.cgi?CH=151441
Change 151441 by ed at ed_dull on 2008/10/16 06:59:38
Revert the ucom(4) changes. It seems the USB folks are already
taking care of ucom(4) again.
Affected files ...
.. //depot/projects/mpsafetty/sys/dev/usb/ucom.c#8 integrate
Differences ...
==== //depot/projects/mpsafetty/sys/dev/usb/ucom.c#8 (text+ko) ====
@@ -128,7 +128,6 @@
static tsw_open_t ucomtty_open;
static tsw_close_t ucomtty_close;
static tsw_outwakeup_t ucomtty_outwakeup;
-static tsw_inwakeup_t ucomtty_inwakeup;
static tsw_ioctl_t ucomtty_ioctl;
static tsw_param_t ucomtty_param;
static tsw_modem_t ucomtty_modem;
@@ -139,7 +138,6 @@
.tsw_open = ucomtty_open,
.tsw_close = ucomtty_close,
.tsw_outwakeup = ucomtty_outwakeup,
- .tsw_inwakeup = ucomtty_inwakeup,
.tsw_ioctl = ucomtty_ioctl,
.tsw_param = ucomtty_param,
.tsw_modem = ucomtty_modem,
@@ -499,6 +497,10 @@
return (error);
}
+#if 0
+ ttsetwater(tp);
+#endif
+
if (t->c_cflag & CRTS_IFLOW) {
sc->sc_state |= UCS_RTS_IFLOW;
} else if (sc->sc_state & UCS_RTS_IFLOW) {
@@ -506,6 +508,10 @@
(void)ucomtty_modem(tp, SER_RTS, 0);
}
+#if 0
+ ttyldoptim(tp);
+#endif
+
uerr = ucomstartread(sc);
if (uerr != USBD_NORMAL_COMPLETION)
return (EIO);
@@ -545,6 +551,24 @@
if (sc->sc_oxfer == NULL)
return;
+ /* XXX: hardware flow control. We should use inwakeup here. */
+#if 0
+ if (tp->t_state & TS_TBLOCK) {
+ if (ISSET(sc->sc_mcr, SER_RTS) &&
+ ISSET(sc->sc_state, UCS_RTS_IFLOW)) {
+ DPRINTF(("ucomtty_outwakeup: clear RTS\n"));
+ (void)ucomtty_modem(tp, 0, SER_RTS);
+ }
+ } else {
+ if (!ISSET(sc->sc_mcr, SER_RTS) &&
+ tp->t_rawq.c_cc <= tp->t_ilowat &&
+ ISSET(sc->sc_state, UCS_RTS_IFLOW)) {
+ DPRINTF(("ucomtty_outwakeup: set RTS\n"));
+ (void)ucomtty_modem(tp, SER_RTS, 0);
+ }
+ }
+#endif
+
if (sc->sc_state & UCS_TXBUSY)
return;
@@ -574,22 +598,35 @@
}
}
+#if 0
static void
-ucomtty_inwakeup(struct tty *tp)
+ucomstop(struct tty *tp, int flag)
{
struct ucom_softc *sc = tty_softc(tp);
+ int s;
- DPRINTF(("ucomtty_inwakeup: sc = %p\n", sc));
+ DPRINTF(("ucomstop: %d\n", flag));
- if (sc->sc_dying)
- return;
+ if ((flag & FREAD) && (sc->sc_state & UCS_RXSTOP) == 0) {
+ DPRINTF(("ucomstop: read\n"));
+ ucomstopread(sc);
+ ucomstartread(sc);
+ }
- if (!ISSET(sc->sc_mcr, SER_RTS) &&
- ISSET(sc->sc_state, UCS_RTS_IFLOW)) {
- DPRINTF(("ucomtty_outwakeup: set RTS\n"));
- (void)ucomtty_modem(tp, SER_RTS, 0);
+ if (flag & FWRITE) {
+ DPRINTF(("ucomstop: write\n"));
+ if (ISSET(tp->t_state, TS_BUSY)) {
+ /* XXX do what? */
+ if (!ISSET(tp->t_state, TS_TTSTOP))
+ SET(tp->t_state, TS_FLUSH);
+ }
}
+
+ ucomtty_outwakeup(tp);
+
+ DPRINTF(("ucomstop: done\n"));
}
+#endif
static void
ucomwritecb(usbd_xfer_handle xfer, usbd_private_handle p, usbd_status status)
@@ -627,6 +664,13 @@
cc, sc->sc_obufactive);
sc->sc_state &= ~UCS_TXBUSY;
+#if 0
+ CLR(tp->t_state, TS_BUSY);
+ if (ISSET(tp->t_state, TS_FLUSH))
+ CLR(tp->t_state, TS_FLUSH);
+ else
+ ndflush(&tp->t_outq, cc);
+#endif
ucomtty_outwakeup(tp);
}
@@ -701,11 +745,9 @@
while (cc > 0) {
DPRINTFN(7, ("ucomreadcb: char = 0x%02x\n", *cp));
if (ttydisc_rint(tp, *cp, 0) == -1) {
- if (ISSET(sc->sc_mcr, SER_RTS) &&
- ISSET(sc->sc_state, UCS_RTS_IFLOW)) {
- DPRINTF(("ucomtty_outwakeup: clear RTS\n"));
- (void)ucomtty_modem(tp, 0, SER_RTS);
- }
+ /* XXX what should we do? */
+ printf("%s: lost %d chars\n",
+ device_get_nameunit(sc->sc_dev), cc);
break;
}
cc--;
@@ -719,6 +761,12 @@
printf("%s: read start failed\n", device_get_nameunit(sc->sc_dev));
/* XXX what should we dow now? */
}
+
+#if 0
+ if ((sc->sc_state & UCS_RTS_IFLOW) && !ISSET(sc->sc_mcr, SER_RTS)
+ && !(tp->t_state & TS_TBLOCK))
+ ucomtty_modem(tp, SER_RTS, 0);
+#endif
}
static void
More information about the p4-projects
mailing list