diff options
author | thompsa <thompsa@FreeBSD.org> | 2010-02-14 19:59:19 +0000 |
---|---|---|
committer | thompsa <thompsa@FreeBSD.org> | 2010-02-14 19:59:19 +0000 |
commit | adc6a97b0a915099ede3ee69a925119f58e41413 (patch) | |
tree | 471863356cb843b5c6d73f573020d5670533f88d | |
parent | 446bd534e931acc91d8374ff5de42e967079279f (diff) | |
download | FreeBSD-src-adc6a97b0a915099ede3ee69a925119f58e41413.zip FreeBSD-src-adc6a97b0a915099ede3ee69a925119f58e41413.tar.gz |
Make umodem more tolerant for devices which modem descriptors are misplaced.
Reported by: Erick Wales
Submitted by: Hans Petter Selasky
-rw-r--r-- | sys/dev/usb/serial/umodem.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/sys/dev/usb/serial/umodem.c b/sys/dev/usb/serial/umodem.c index 6945e79..39afdad 100644 --- a/sys/dev/usb/serial/umodem.c +++ b/sys/dev/usb/serial/umodem.c @@ -312,11 +312,16 @@ umodem_attach(device_t dev) 0 - 1, UDESCSUB_CDC_UNION, 0 - 1); if ((cud == NULL) || (cud->bLength < sizeof(*cud))) { - device_printf(dev, "no CM or union descriptor\n"); - goto detach; + device_printf(dev, "Missing descriptor. " + "Assuming data interface is next.\n"); + if (sc->sc_ctrl_iface_no == 0xFF) + goto detach; + else + sc->sc_data_iface_no = + sc->sc_ctrl_iface_no + 1; + } else { + sc->sc_data_iface_no = cud->bSlaveInterface[0]; } - - sc->sc_data_iface_no = cud->bSlaveInterface[0]; } else { sc->sc_data_iface_no = cmd->bDataInterface; } |