atom feed19 messages in org.freebsd.freebsd-usbusb/91546: [umodem] [patch] Nokia 663...
FromSent OnAttachments
Eugene GrosbeinSep 25, 2007 11:19 am 
Eugene GrosbeinSep 25, 2007 11:19 am 
Eugene GrosbeinSep 25, 2007 11:22 am 
Eugene GrosbeinSep 25, 2007 11:22 am 
Warner LoshSep 25, 2007 11:53 am 
Eugene GrosbeinSep 25, 2007 9:52 pm 
M. Warner LoshSep 25, 2007 10:11 pm 
M. Warner LoshSep 25, 2007 10:17 pm 
Eugene GrosbeinSep 26, 2007 4:39 am 
Eugene GrosbeinSep 26, 2007 7:30 am 
M. Warner LoshSep 26, 2007 7:39 am 
M. Warner LoshSep 26, 2007 7:39 am 
Eugene GrosbeinSep 26, 2007 7:52 am 
Eugene GrosbeinSep 26, 2007 9:44 am 
Hans Petter SelaskySep 26, 2007 9:55 am 
Eugene GrosbeinSep 27, 2007 6:37 am 
Eugene GrosbeinSep 27, 2007 9:43 am 
Eugene GrosbeinSep 28, 2007 6:25 am 
Eugene GrosbeinSep 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