| From | Sent On | Attachments |
|---|---|---|
| Eugene Grosbein | Sep 25, 2007 11:19 am | |
| Eugene Grosbein | Sep 25, 2007 11:19 am | |
| Eugene Grosbein | Sep 25, 2007 11:22 am | |
| Eugene Grosbein | Sep 25, 2007 11:22 am | |
| Warner Losh | Sep 25, 2007 11:53 am | |
| Eugene Grosbein | Sep 25, 2007 9:52 pm | |
| M. Warner Losh | Sep 25, 2007 10:11 pm | |
| M. Warner Losh | Sep 25, 2007 10:17 pm | |
| Eugene Grosbein | Sep 26, 2007 4:39 am | |
| Eugene Grosbein | Sep 26, 2007 7:30 am | |
| M. Warner Losh | Sep 26, 2007 7:39 am | |
| M. Warner Losh | Sep 26, 2007 7:39 am | |
| Eugene Grosbein | Sep 26, 2007 7:52 am | |
| Eugene Grosbein | Sep 26, 2007 9:44 am | |
| Hans Petter Selasky | Sep 26, 2007 9:55 am | |
| Eugene Grosbein | Sep 27, 2007 6:37 am | |
| Eugene Grosbein | Sep 27, 2007 9:43 am | |
| Eugene Grosbein | Sep 28, 2007 6:25 am | |
| Eugene Grosbein | Sep 28, 2007 6:29 am |
| Subject: | usb/91546: [umodem] [patch] Nokia 6630 mobile phone does not work | |
|---|---|---|
| From: | Eugene Grosbein (eug...@kuzbass.ru) | |
| Date: | Sep 25, 2007 11:19:51 am | |
| List: | org.freebsd.freebsd-usb | |
The following reply was made to PR usb/91546; it has been noted by GNATS.
From: Eugene Grosbein <eug...@kuzbass.ru> To: bug-...@freebsd.org Cc: Alexey Illarionov <litt...@rambler.ru>, us...@freebsd.org Subject: Re: usb/91546: [umodem] [patch] Nokia 6630 mobile phone does not work Date: Wed, 26 Sep 2007 02:11:26 +0800
Hi!
Oops, forgot to attach the patch.
--- sys/dev/usb/umodem.c.orig 2006-08-05 22:21:42.000000000 +0800 +++ sys/dev/usb/umodem.c 2007-09-26 01:56:35.000000000 +0800 @@ -178,7 +178,7 @@ Static usbd_status umodem_set_line_coding(struct umodem_softc *sc, usb_cdc_line_state_t *state);
-Static void umodem_get_caps(usbd_device_handle, int *, int *); +Static int umodem_get_caps(usbd_device_handle, int *, int *);
Static void umodem_get_status(void *, int portno, u_char *lsr, u_char *msr); Static void umodem_set(void *, int, int, int); @@ -261,10 +261,7 @@ if (ret == UMATCH_NONE) return (ret);
- umodem_get_caps(uaa->device, &cm, &acm); - if (!(cm & USB_CDC_CM_DOES_CM) || - !(cm & USB_CDC_CM_OVER_DATA) || - !(acm & USB_CDC_ACM_HAS_LINE)) + if (umodem_get_caps(uaa->device, &cm, &acm) == -1) return (UMATCH_NONE);
return ret; @@ -276,7 +273,6 @@ usbd_device_handle dev = uaa->device; usb_interface_descriptor_t *id; usb_endpoint_descriptor_t *ed; - usb_cdc_cm_descriptor_t *cmd; char *devinfo = NULL; const char *devname; usbd_status err; @@ -304,15 +300,15 @@ id->bInterfaceClass, id->bInterfaceSubClass); sc->sc_ctl_iface_no = id->bInterfaceNumber;
- umodem_get_caps(dev, &sc->sc_cm_cap, &sc->sc_acm_cap); - /* Get the data interface no. */ - cmd = umodem_get_desc(dev, UDESC_CS_INTERFACE, UDESCSUB_CDC_CM); - if (cmd == NULL) { - printf("%s: no CM descriptor\n", devname); + sc->sc_data_iface_no = data_ifcno = + umodem_get_caps(dev, &sc->sc_cm_cap, &sc->sc_acm_cap); + + if (data_ifcno == -1) { + printf("%s: no pointer to data interface\n", + USBDEVNAME(sc->sc_dev)); goto bad; } - sc->sc_data_iface_no = data_ifcno = cmd->bDataInterface;
printf("%s: data interface %d, has %sCM over data, has %sbreak\n", devname, data_ifcno, @@ -550,27 +546,35 @@ ucom_status_change(&sc->sc_ucom); }
-void +int umodem_get_caps(usbd_device_handle dev, int *cm, int *acm) { usb_cdc_cm_descriptor_t *cmd; usb_cdc_acm_descriptor_t *cad; + usb_cdc_union_descriptor_t *cud;
*cm = *acm = 0;
cmd = umodem_get_desc(dev, UDESC_CS_INTERFACE, UDESCSUB_CDC_CM); if (cmd == NULL) { DPRINTF(("umodem_get_desc: no CM desc\n")); - return; + } else { + *cm = cmd->bmCapabilities; } - *cm = cmd->bmCapabilities;
cad = umodem_get_desc(dev, UDESC_CS_INTERFACE, UDESCSUB_CDC_ACM); if (cad == NULL) { DPRINTF(("umodem_get_desc: no ACM desc\n")); - return; + } else { + *acm = cad->bmCapabilities; + } + + cud = umodem_get_desc(dev, UDESC_CS_INTERFACE, UDESCSUB_CDC_UNION); + if (cud == NULL) { + DPRINTF(("umodem_get_desc: no UNION desc\n")); } - *acm = cad->bmCapabilities; + + return cmd ? cmd->bDataInterface : cud ? cud->bSlaveInterface[0] : -1; }
void





