svn commit: r303350 - head/sys/dev/usb/serial
Ian Lepore
ian at FreeBSD.org
Tue Jul 26 23:42:43 UTC 2016
Author: ian
Date: Tue Jul 26 23:42:42 2016
New Revision: 303350
URL: https://svnweb.freebsd.org/changeset/base/303350
Log:
Translate modem status reg bits from ns16550 to SER_* values used by the
tty layer.
Also annotate a switch case fall-through per style(9).
Modified:
head/sys/dev/usb/serial/umct.c
Modified: head/sys/dev/usb/serial/umct.c
==============================================================================
--- head/sys/dev/usb/serial/umct.c Tue Jul 26 23:40:25 2016 (r303349)
+++ head/sys/dev/usb/serial/umct.c Tue Jul 26 23:42:42 2016 (r303350)
@@ -86,6 +86,15 @@ __FBSDID("$FreeBSD$");
#define UMCT_SET_MCR 10 /* Set Modem Control Register */
#define UMCT_SET_MCR_SIZE 1
+#define UMCT_MSR_CTS_CHG 0x01
+#define UMCT_MSR_DSR_CHG 0x02
+#define UMCT_MSR_RI_CHG 0x04
+#define UMCT_MSR_CD_CHG 0x08
+#define UMCT_MSR_CTS 0x10
+#define UMCT_MSR_RTS 0x20
+#define UMCT_MSR_RI 0x40
+#define UMCT_MSR_CD 0x80
+
#define UMCT_INTR_INTERVAL 100
#define UMCT_IFACE_INDEX 0
#define UMCT_CONFIG_INDEX 0
@@ -384,11 +393,23 @@ umct_intr_callback_sub(struct usb_xfer *
pc = usbd_xfer_get_frame(xfer, 0);
usbd_copy_out(pc, 0, buf, sizeof(buf));
- sc->sc_msr = buf[0];
+ /*
+ * MSR bits need translation from ns16550 to SER_* values.
+ * LSR bits are ns16550 in hardware and ucom.
+ */
+ sc->sc_msr = 0;
+ if (buf[0] & UMCT_MSR_CTS)
+ sc->sc_msr |= SER_CTS;
+ if (buf[0] & UMCT_MSR_CD)
+ sc->sc_msr |= SER_DCD;
+ if (buf[0] & UMCT_MSR_RI)
+ sc->sc_msr |= SER_RI;
+ if (buf[0] & UMCT_MSR_RTS)
+ sc->sc_msr |= SER_DSR;
sc->sc_lsr = buf[1];
ucom_status_change(&sc->sc_ucom);
-
+ /* FALLTHROUGH */
case USB_ST_SETUP:
tr_setup:
usbd_xfer_set_frame_len(xfer, 0, usbd_xfer_max_len(xfer));
More information about the svn-src-all
mailing list