Re: usb/162307: commit references a PR
The following reply was made to PR usb/162307; it has been noted by GNATS. From: dfil...@freebsd.org (dfilter service) To: bug-follo...@freebsd.org Cc: Subject: Re: usb/162307: commit references a PR Date: Sat, 3 Dec 2011 14:11:56 + (UTC) Author: hselasky Date: Sat Dec 3 14:11:47 2011 New Revision: 228226 URL: http://svn.freebsd.org/changeset/base/228226 Log: MFC r227108, r227383 and r227463: Add support for modem control lines and GPIO pins to USLCOM driver. PR: usb/162307 Modified: stable/8/sys/dev/usb/serial/uslcom.c stable/8/sys/dev/usb/usb_ioctl.h Directory Properties: stable/8/sys/ (props changed) stable/8/sys/amd64/include/xen/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) stable/8/sys/contrib/dev/acpica/ (props changed) stable/8/sys/contrib/pf/ (props changed) Modified: stable/8/sys/dev/usb/serial/uslcom.c == --- stable/8/sys/dev/usb/serial/uslcom.c Sat Dec 3 14:03:53 2011 (r228225) +++ stable/8/sys/dev/usb/serial/uslcom.c Sat Dec 3 14:11:47 2011 (r228226) @@ -41,6 +41,7 @@ __FBSDID($FreeBSD$); #include dev/usb/usb.h #include dev/usb/usbdi.h #include dev/usb/usbdi_util.h +#include dev/usb/usb_ioctl.h #include usbdevs.h #define USB_DEBUG_VAR uslcom_debug @@ -63,49 +64,72 @@ SYSCTL_INT(_hw_usb_uslcom, OID_AUTO, deb #define USLCOM_SET_DATA_BITS(x) ((x) 8) +/* Request types */ #define USLCOM_WRITE0x41 #define USLCOM_READ 0xc1 +/* Request codes */ #define USLCOM_UART 0x00 #define USLCOM_BAUD_RATE0x01 #define USLCOM_DATA 0x03 #define USLCOM_BREAK0x05 #define USLCOM_CTRL 0x07 +#define USLCOM_RCTRL0x08 +#define USLCOM_SET_FLOWCTRL 0x13 +#define USLCOM_VENDOR_SPECIFIC 0xff +/* USLCOM_UART values */ #define USLCOM_UART_DISABLE 0x00 #define USLCOM_UART_ENABLE 0x01 +/* USLCOM_CTRL/USLCOM_RCTRL values */ #define USLCOM_CTRL_DTR_ON 0x0001 #define USLCOM_CTRL_DTR_SET 0x0100 #define USLCOM_CTRL_RTS_ON 0x0002 #define USLCOM_CTRL_RTS_SET 0x0200 #define USLCOM_CTRL_CTS 0x0010 #define USLCOM_CTRL_DSR 0x0020 +#define USLCOM_CTRL_RI 0x0040 #define USLCOM_CTRL_DCD 0x0080 +/* USLCOM_BAUD_RATE values */ #define USLCOM_BAUD_REF 0x384000 +/* USLCOM_DATA values */ #define USLCOM_STOP_BITS_1 0x00 #define USLCOM_STOP_BITS_2 0x02 - #define USLCOM_PARITY_NONE 0x00 #define USLCOM_PARITY_ODD 0x10 #define USLCOM_PARITY_EVEN 0x20 -#define USLCOM_PORT_NO 0x /* XXX think this should be 0 --hps */ +#define USLCOM_PORT_NO 0x +/* USLCOM_BREAK values */ #define USLCOM_BREAK_OFF0x00 #define USLCOM_BREAK_ON 0x01 +/* USLCOM_SET_FLOWCTRL values - 1st word */ +#define USLCOM_FLOW_DTR_ON 0x0001 /* DTR static active */ +#define USLCOM_FLOW_CTS_HS 0x0008 /* CTS handshake */ +/* USLCOM_SET_FLOWCTRL values - 2nd word */ +#define USLCOM_FLOW_RTS_ON 0x0040 /* RTS static active */ +#define USLCOM_FLOW_RTS_HS 0x0080 /* RTS handshake */ + +/* USLCOM_VENDOR_SPECIFIC values */ +#define USLCOM_WRITE_LATCH 0x37E1 +#define USLCOM_READ_LATCH 0x00C2 + enum { USLCOM_BULK_DT_WR, USLCOM_BULK_DT_RD, + USLCOM_CTRL_DT_RD, USLCOM_N_TRANSFER, }; struct uslcom_softc { struct ucom_super_softc sc_super_ucom; struct ucom_softc sc_ucom; + struct usb_callout sc_watchdog; struct usb_xfer *sc_xfer[USLCOM_N_TRANSFER]; struct usb_device *sc_udev; @@ -121,12 +145,15 @@ static device_detach_t uslcom_detach; static usb_callback_t uslcom_write_callback; static usb_callback_t uslcom_read_callback; +static usb_callback_t uslcom_control_callback; static void uslcom_open(struct ucom_softc *); static void uslcom_close(struct ucom_softc *); static void uslcom_set_dtr(struct ucom_softc *, uint8_t); static void uslcom_set_rts(struct ucom_softc *, uint8_t); static void uslcom_set_break(struct ucom_softc *, uint8_t); +static int uslcom_ioctl(struct ucom_softc *, uint32_t, caddr_t, int, + struct thread *); static int uslcom_pre_param(struct ucom_softc *, struct termios *); static void uslcom_param(struct ucom_softc *, struct termios *); static void uslcom_get_status(struct ucom_softc *, uint8_t *, uint8_t *); @@ -143,7 +170,7 @@ static const struct usb_config uslcom_co .endpoint = UE_ADDR_ANY, .direction
Re: usb/162307: commit references a PR
The following reply was made to PR usb/162307; it has been noted by GNATS. From: dfil...@freebsd.org (dfilter service) To: bug-follo...@freebsd.org Cc: Subject: Re: usb/162307: commit references a PR Date: Wed, 9 Nov 2011 09:16:11 + (UTC) Author: hselasky Date: Wed Nov 9 09:15:57 2011 New Revision: 227383 URL: http://svn.freebsd.org/changeset/base/227383 Log: Some minor corrections to a modem driver. PR: usb/162307 MFC after: 3 days Modified: head/sys/dev/usb/serial/uslcom.c Modified: head/sys/dev/usb/serial/uslcom.c == --- head/sys/dev/usb/serial/uslcom.c Wed Nov 9 07:48:48 2011 (r227382) +++ head/sys/dev/usb/serial/uslcom.c Wed Nov 9 09:15:57 2011 (r227383) @@ -100,18 +100,17 @@ SYSCTL_INT(_hw_usb_uslcom, OID_AUTO, deb #define USLCOM_PARITY_ODD 0x10 #define USLCOM_PARITY_EVEN 0x20 -#define USLCOM_PORT_NO 0x /* XXX think this should be 0 --hps */ +#define USLCOM_PORT_NO 0x /* USLCOM_BREAK values */ #define USLCOM_BREAK_OFF0x00 #define USLCOM_BREAK_ON 0x01 /* USLCOM_SET_FLOWCTRL values - 1st word */ -#define USLCOM_FLOW_DTR_ON 0x0001 +#define USLCOM_FLOW_DTR_ON 0x0001 /* DTR static active */ #define USLCOM_FLOW_CTS_HS 0x0008 /* CTS handshake */ -#define USLCOM_FLOW_RESERVED0xFF80 /* USLCOM_SET_FLOWCTRL values - 2nd word */ -#define USLCOM_FLOW_RTS_ON 0x0040 +#define USLCOM_FLOW_RTS_ON 0x0040 /* RTS static active */ #define USLCOM_FLOW_RTS_HS 0x0080 /* RTS handshake */ enum { @@ -540,14 +539,12 @@ uslcom_param(struct ucom_softc *ucom, st } if (t-c_cflag CRTSCTS) { - flowctrl[0] = htole32(USLCOM_FLOW_RESERVED | - USLCOM_FLOW_DTR_ON | USLCOM_FLOW_CTS_HS); + flowctrl[0] = htole32(USLCOM_FLOW_DTR_ON | USLCOM_FLOW_CTS_HS); flowctrl[1] = htole32(USLCOM_FLOW_RTS_HS); flowctrl[2] = 0; flowctrl[3] = 0; } else { - flowctrl[0] = htole32(USLCOM_FLOW_RESERVED | - USLCOM_FLOW_DTR_ON); + flowctrl[0] = htole32(USLCOM_FLOW_DTR_ON); flowctrl[1] = htole32(USLCOM_FLOW_RTS_ON); flowctrl[2] = 0; flowctrl[3] = 0; @@ -692,7 +689,7 @@ tr_setup: req.bmRequestType = USLCOM_READ; req.bRequest = USLCOM_RCTRL; USETW(req.wValue, 0); - USETW(req.wIndex, 0); + USETW(req.wIndex, USLCOM_PORT_NO); USETW(req.wLength, sizeof(buf)); usbd_xfer_set_frames(xfer, 2); ___ svn-src-...@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 ___ freebsd-usb@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-usb To unsubscribe, send any mail to freebsd-usb-unsubscr...@freebsd.org
Re: usb/162307: commit references a PR
The following reply was made to PR usb/162307; it has been noted by GNATS. From: dfil...@freebsd.org (dfilter service) To: bug-follo...@freebsd.org Cc: Subject: Re: usb/162307: commit references a PR Date: Sat, 5 Nov 2011 12:02:09 + (UTC) Author: hselasky Date: Sat Nov 5 12:01:51 2011 New Revision: 227108 URL: http://svn.freebsd.org/changeset/base/227108 Log: Implement support for modem control lines. Don't short terminate transmitted BULK data. Assume that the chip reads one USB packet at a time. PR: usb/162307 MFC after: 3 days Modified: head/sys/dev/usb/serial/uslcom.c Modified: head/sys/dev/usb/serial/uslcom.c == --- head/sys/dev/usb/serial/uslcom.c Sat Nov 5 11:18:46 2011 (r227107) +++ head/sys/dev/usb/serial/uslcom.c Sat Nov 5 12:01:51 2011 (r227108) @@ -63,43 +63,61 @@ SYSCTL_INT(_hw_usb_uslcom, OID_AUTO, deb #define USLCOM_SET_DATA_BITS(x) ((x) 8) +/* Request types */ #define USLCOM_WRITE0x41 #define USLCOM_READ 0xc1 +/* Request codes */ #define USLCOM_UART 0x00 #define USLCOM_BAUD_RATE0x01 #define USLCOM_DATA 0x03 #define USLCOM_BREAK0x05 #define USLCOM_CTRL 0x07 +#define USLCOM_RCTRL0x08 +#define USLCOM_SET_FLOWCTRL 0x13 +/* USLCOM_UART values */ #define USLCOM_UART_DISABLE 0x00 #define USLCOM_UART_ENABLE 0x01 +/* USLCOM_CTRL/USLCOM_RCTRL values */ #define USLCOM_CTRL_DTR_ON 0x0001 #define USLCOM_CTRL_DTR_SET 0x0100 #define USLCOM_CTRL_RTS_ON 0x0002 #define USLCOM_CTRL_RTS_SET 0x0200 #define USLCOM_CTRL_CTS 0x0010 #define USLCOM_CTRL_DSR 0x0020 +#define USLCOM_CTRL_RI 0x0040 #define USLCOM_CTRL_DCD 0x0080 +/* USLCOM_BAUD_RATE values */ #define USLCOM_BAUD_REF 0x384000 +/* USLCOM_DATA values */ #define USLCOM_STOP_BITS_1 0x00 #define USLCOM_STOP_BITS_2 0x02 - #define USLCOM_PARITY_NONE 0x00 #define USLCOM_PARITY_ODD 0x10 #define USLCOM_PARITY_EVEN 0x20 #define USLCOM_PORT_NO 0x /* XXX think this should be 0 --hps */ +/* USLCOM_BREAK values */ #define USLCOM_BREAK_OFF0x00 #define USLCOM_BREAK_ON 0x01 +/* USLCOM_SET_FLOWCTRL values - 1st word */ +#define USLCOM_FLOW_DTR_ON 0x0001 +#define USLCOM_FLOW_CTS_HS 0x0008 /* CTS handshake */ +#define USLCOM_FLOW_RESERVED0xFF80 +/* USLCOM_SET_FLOWCTRL values - 2nd word */ +#define USLCOM_FLOW_RTS_ON 0x0040 +#define USLCOM_FLOW_RTS_HS 0x0080 /* RTS handshake */ + enum { USLCOM_BULK_DT_WR, USLCOM_BULK_DT_RD, + USLCOM_CTRL_DT_RD, USLCOM_N_TRANSFER, }; @@ -121,6 +139,7 @@ static device_detach_t uslcom_detach; static usb_callback_t uslcom_write_callback; static usb_callback_t uslcom_read_callback; +static usb_callback_t uslcom_control_callback; static void uslcom_open(struct ucom_softc *); static void uslcom_close(struct ucom_softc *); @@ -143,7 +162,7 @@ static const struct usb_config uslcom_co .endpoint = UE_ADDR_ANY, .direction = UE_DIR_OUT, .bufsize = USLCOM_BULK_BUF_SIZE, - .flags = {.pipe_bof = 1,.force_short_xfer = 1,}, + .flags = {.pipe_bof = 1,}, .callback = uslcom_write_callback, }, @@ -155,6 +174,16 @@ static const struct usb_config uslcom_co .flags = {.pipe_bof = 1,.short_xfer_ok = 1,}, .callback = uslcom_read_callback, }, + [USLCOM_CTRL_DT_RD] = { + .type = UE_CONTROL, + .endpoint = 0x00, + .direction = UE_DIR_ANY, + .interval = 150,/* poll status every 150 ms */ + .bufsize = sizeof(struct usb_device_request) + 8, + .flags = {.pipe_bof = 1,}, + .callback = uslcom_control_callback, + .timeout = 1000,/* 1 second timeout */ + }, }; static struct ucom_callback uslcom_callback = { @@ -371,6 +400,8 @@ uslcom_open(struct ucom_softc *ucom) req, NULL, 0, 1000)) { DPRINTF(UART enable failed (ignored)\n); } + /* Start polling status */ + usbd_transfer_start(sc-sc_xfer[USLCOM_CTRL_DT_RD]); } static void @@ -379,13 +410,16 @@ uslcom_close(struct ucom_softc *ucom) struct uslcom_softc *sc = ucom-sc_parent; struct usb_device_request req; + /* Stop polling status */ + usbd_transfer_stop(sc-sc_xfer[USLCOM_CTRL_DT_RD