View | Details | Raw Unified | Return to bug 128485
Collapse All | Expand All

(-)umodem.c.without_debug 2008-10-30 19:04:44.000000000 +0200 (-12 / +35 lines)
Lines 69-74 Link Here
69
/*
69
/*
70
 * Comm Class spec:  http://www.usb.org/developers/devclass_docs/usbccs10.pdf
70
 * Comm Class spec:  http://www.usb.org/developers/devclass_docs/usbccs10.pdf
71
 *                   http://www.usb.org/developers/devclass_docs/usbcdc11.pdf
71
 *                   http://www.usb.org/developers/devclass_docs/usbcdc11.pdf
72
 *                   http://www.usb.org/developers/devclass_docs/cdc_wmc10.zip
72
 */
73
 */
73
/*
74
/*
Lines 127-132 Link Here
127
       { USB_VENDOR_KYOCERA, USB_PRODUCT_KYOCERA_AHK3001V, 0 },
128
       { USB_VENDOR_KYOCERA, USB_PRODUCT_KYOCERA_AHK3001V, 0 },
128
       { USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC5720, 0 },
129
       { USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC5720, 0 },
129
       { USB_VENDOR_CURITEL, USB_PRODUCT_CURITEL_PC5740, 0 },
130
       { USB_VENDOR_CURITEL, USB_PRODUCT_CURITEL_PC5740, 0 },
131
       { 0x0421, 0x0445, 0 },
130
       { 0, 0, 0 },
132
       { 0, 0, 0 },
131
};
133
};
Lines 179-185 Link Here
179
                                         usb_cdc_line_state_t *state);
181
                                         usb_cdc_line_state_t *state);
180
Static void    umodem_get_caps(usbd_device_handle, int *, int *);
182
Static void    umodem_get_caps(usbd_device_handle, int *, int *);
181
183
Static usb_cdc_union_descriptor_t  *
184
    umodem_get_union(usbd_device_handle dev, int iface_no);
182
Static void    umodem_get_status(void *, int portno, u_char *lsr, u_char *msr);
185
Static void    umodem_get_status(void *, int portno, u_char *lsr, u_char *msr);
183
Static void    umodem_set(void *, int, int, int);
186
Static void    umodem_set(void *, int, int, int);
184
Static void    umodem_dtr(struct umodem_softc *, int);
187
Static void    umodem_dtr(struct umodem_softc *, int);
Lines 269-275 Link Here
269
       return ret;
272
       return ret;
270
}
273
}
271
272
USB_ATTACH(umodem)
274
USB_ATTACH(umodem)
273
{
275
{
274
       USB_ATTACH_START(umodem, sc, uaa);
276
       USB_ATTACH_START(umodem, sc, uaa);
Lines 277-282 Link Here
277
       usb_interface_descriptor_t *id;
279
       usb_interface_descriptor_t *id;
278
       usb_endpoint_descriptor_t *ed;
280
       usb_endpoint_descriptor_t *ed;
279
       usb_cdc_cm_descriptor_t *cmd;
281
       usb_cdc_cm_descriptor_t *cmd;
282
        usb_cdc_union_descriptor_t *cud;
280
       char *devinfo = NULL;
283
       char *devinfo = NULL;
281
       const char *devname;
284
       const char *devname;
282
       usbd_status err;
285
       usbd_status err;
Lines 309-318 Link Here
309
       /* Get the data interface no. */
312
       /* Get the data interface no. */
310
       cmd = umodem_get_desc(dev, UDESC_CS_INTERFACE, UDESCSUB_CDC_CM);
313
       cmd = umodem_get_desc(dev, UDESC_CS_INTERFACE, UDESCSUB_CDC_CM);
311
       if (cmd == NULL) {
314
       if (cmd == NULL) {
312
               printf("%s: no CM descriptor\n", devname);
315
                cud = umodem_get_union(dev, sc->sc_ctl_iface_no);
316
                if (cud == NULL) {
317
                    printf("%s: no CM and Union descriptors\n", devname);
313
               goto bad;
318
               goto bad;
314
       }
319
                }else data_ifcno = cud->bSlaveInterface[0];
315
       sc->sc_data_iface_no = data_ifcno = cmd->bDataInterface;
320
        }else data_ifcno = cmd->bDataInterface;
321
        sc->sc_data_iface_no = data_ifcno;
316
       printf("%s: data interface %d, has %sCM over data, has %sbreak\n",
322
       printf("%s: data interface %d, has %sCM over data, has %sbreak\n",
317
              devname, data_ifcno,
323
              devname, data_ifcno,
Lines 558-576 Link Here
558
       *cm = *acm = 0;
564
       *cm = *acm = 0;
559
       cmd = umodem_get_desc(dev, UDESC_CS_INTERFACE, UDESCSUB_CDC_CM);
560
       if (cmd == NULL) {
561
               DPRINTF(("umodem_get_desc: no CM desc\n"));
562
               return;
563
       }
564
       *cm = cmd->bmCapabilities;
565
566
       cad = umodem_get_desc(dev, UDESC_CS_INTERFACE, UDESCSUB_CDC_ACM);
565
       cad = umodem_get_desc(dev, UDESC_CS_INTERFACE, UDESCSUB_CDC_ACM);
567
       if (cad == NULL) {
566
       if (cad == NULL) {
568
               DPRINTF(("umodem_get_desc: no ACM desc\n"));
567
               DPRINTF(("umodem_get_desc: no ACM desc\n"));
569
               return;
568
               return;
570
       }
569
       }
571
       *acm = cad->bmCapabilities;
570
       *acm = cad->bmCapabilities;
571
572
        cmd = umodem_get_desc(dev, UDESC_CS_INTERFACE, UDESCSUB_CDC_CM);
573
        if (cmd == NULL) {
574
                DPRINTF(("umodem_get_desc: no CM desc\n"));
575
                *cm = USB_CDC_CM_DOES_CM | USB_CDC_CM_OVER_DATA;
576
        }else *cm = cmd->bmCapabilities;
577
}
578
579
usb_cdc_union_descriptor_t  *
580
umodem_get_union(usbd_device_handle dev, int iface_no)
581
{
582
    usb_cdc_union_descriptor_t *desc;
583
    usb_config_descriptor_t *cd = usbd_get_config_descriptor(dev);
584
    uByte *p = (uByte *)cd;
585
    uByte *end = p + UGETW(cd->wTotalLength);
586
    while (p < end) {
587
        desc = (usb_cdc_union_descriptor_t *)p;
588
        if (desc->bDescriptorType ==  UDESC_CS_INTERFACE &&
589
                desc->bDescriptorSubtype == UDESCSUB_CDC_UNION &&
590
                desc->bMasterInterface == iface_no)
591
            return (desc);
592
        p += desc->bLength;
593
    }
594
    return (0);
572
}
595
}
573
void
596
void

Return to bug 128485