Page MenuHomeFreeBSD

D36391.diff
No OneTemporary

D36391.diff

diff --git a/sys/dev/usb/serial/umodem.c b/sys/dev/usb/serial/umodem.c
--- a/sys/dev/usb/serial/umodem.c
+++ b/sys/dev/usb/serial/umodem.c
@@ -218,6 +218,7 @@
uint8_t *);
static int umodem_pre_param(struct ucom_softc *, struct termios *);
static void umodem_cfg_param(struct ucom_softc *, struct termios *);
+static void umodem_cfg_open(struct ucom_softc *);
static int umodem_ioctl(struct ucom_softc *, uint32_t, caddr_t, int,
struct thread *);
static void umodem_cfg_set_dtr(struct ucom_softc *, uint8_t);
@@ -283,6 +284,7 @@
.ucom_cfg_set_break = &umodem_cfg_set_break,
.ucom_cfg_param = &umodem_cfg_param,
.ucom_pre_param = &umodem_pre_param,
+ .ucom_cfg_open = &umodem_cfg_open,
.ucom_ioctl = &umodem_ioctl,
.ucom_start_read = &umodem_start_read,
.ucom_stop_read = &umodem_stop_read,
@@ -447,14 +449,6 @@
goto detach;
}
- /* clear stall at first run, if USB host mode */
- if (uaa->usb_mode == USB_MODE_HOST) {
- mtx_lock(&sc->sc_mtx);
- usbd_xfer_set_stall(sc->sc_xfer[UMODEM_BULK_WR]);
- usbd_xfer_set_stall(sc->sc_xfer[UMODEM_BULK_RD]);
- mtx_unlock(&sc->sc_mtx);
- }
-
ucom_set_usb_mode(&sc->sc_super_ucom, uaa->usb_mode);
error = ucom_attach(&sc->sc_super_ucom, &sc->sc_ucom, 1, sc,
@@ -633,6 +627,18 @@
&req, &ls, 0, 1000);
}
+static void
+umodem_cfg_open(struct ucom_softc *ucom)
+{
+ struct umodem_softc *sc = ucom->sc_parent;
+
+ /* clear stall, if in USB host mode */
+ if ((sc->sc_super_ucom.sc_flag & UCOM_FLAG_DEVICE_MODE) == 0) {
+ usbd_xfer_set_stall(sc->sc_xfer[UMODEM_BULK_WR]);
+ usbd_xfer_set_stall(sc->sc_xfer[UMODEM_BULK_RD]);
+ }
+}
+
static int
umodem_ioctl(struct ucom_softc *ucom, uint32_t cmd, caddr_t data,
int flag, struct thread *td)

File Metadata

Mime Type
text/plain
Expires
Tue, Jun 16, 11:51 AM (12 h, 35 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33986860
Default Alt Text
D36391.diff (1 KB)

Event Timeline