Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 337988 | Differences between
and this patch

Collapse All | Expand All

(-)hw/usb.h.orig (+5 lines)
Lines 113-118 Link Here
113
#define USB_DT_INTERFACE		0x04
113
#define USB_DT_INTERFACE		0x04
114
#define USB_DT_ENDPOINT			0x05
114
#define USB_DT_ENDPOINT			0x05
115
115
116
#define USB_DT_DEVICE_LEN		18
117
#define USB_DT_CONFIG_LEN		9
118
#define USB_DT_INTERFACE_LEN		9
119
#define USB_DT_ENDPOINT_LEN		7
120
116
#define USB_ENDPOINT_XFER_CONTROL	0
121
#define USB_ENDPOINT_XFER_CONTROL	0
117
#define USB_ENDPOINT_XFER_ISOC		1
122
#define USB_ENDPOINT_XFER_ISOC		1
118
#define USB_ENDPOINT_XFER_BULK		2
123
#define USB_ENDPOINT_XFER_BULK		2
(-)usb-linux.c.orig (-15 / +23 lines)
Lines 286-292 Link Here
286
286
287
static int usb_host_claim_interfaces(USBHostDevice *dev, int configuration)
287
static int usb_host_claim_interfaces(USBHostDevice *dev, int configuration)
288
{
288
{
289
    int dev_descr_len, config_descr_len;
289
    int dev_descr_len, config_descr_total_len;
290
    int interface, nb_interfaces, nb_configurations;
290
    int interface, nb_interfaces, nb_configurations;
291
    int ret, i;
291
    int ret, i;
292
292
Lines 295-325 Link Here
295
295
296
    dprintf("husb: claiming interfaces. config %d\n", configuration);
296
    dprintf("husb: claiming interfaces. config %d\n", configuration);
297
297
298
    i = 0;
299
    dev_descr_len = dev->descr[0];
298
    dev_descr_len = dev->descr[0];
300
    if (dev_descr_len > dev->descr_len)
299
    if (dev_descr_len == 0x18 && dev->descr[ 8] == 0x47 && dev->descr[ 9] == 0x46
300
                              && dev->descr[10] == 0x00 && dev->descr[11] == 0x30)
301
        dev_descr_len = USB_DT_DEVICE_LEN; /* for buggy MX-950 remote reporting len in hex */
302
303
    if (dev_descr_len > dev->descr_len || dev_descr_len < USB_DT_DEVICE_LEN || dev->descr[1] != USB_DT_DEVICE) {
304
        fprintf(stderr, "husb: invalid device descriptor\n");
301
        goto fail;
305
        goto fail;
306
    }
302
    nb_configurations = dev->descr[17];
307
    nb_configurations = dev->descr[17];
303
308
304
    i += dev_descr_len;
309
    for (i = dev_descr_len; i < dev->descr_len; ) {
305
    while (i < dev->descr_len) {
306
        dprintf("husb: i is %d, descr_len is %d, dl %d, dt %d\n", i, dev->descr_len,
310
        dprintf("husb: i is %d, descr_len is %d, dl %d, dt %d\n", i, dev->descr_len,
307
               dev->descr[i], dev->descr[i+1]);
311
               dev->descr[i], dev->descr[i+1]);
308
312
309
        if (dev->descr[i+1] != USB_DT_CONFIG) {
313
        if (dev->descr[i] < 2) {
310
            i += dev->descr[i];
314
            fprintf(stderr, "husb: invalid descriptor\n");
311
            continue;
315
            goto fail;
312
        }
316
        }
313
        config_descr_len = dev->descr[i];
317
        if (dev->descr[i+1] == USB_DT_CONFIG) {
318
            config_descr_total_len = dev->descr[i+2] + (dev->descr[i+3] << 8);
314
319
315
	printf("husb: config #%d need %d\n", dev->descr[i + 5], configuration); 
320
            printf("husb: config #%d need %d\n", dev->descr[i + 5], configuration); 
316
321
317
        if (configuration < 0 || configuration == dev->descr[i + 5]) {
322
            if (configuration < 0 || configuration == dev->descr[i + 5]) {
318
            configuration = dev->descr[i + 5];
323
                configuration = dev->descr[i + 5];
319
            break;
324
                break;
320
        }
325
            }
321
326
322
        i += config_descr_len;
327
            i += config_descr_total_len;
328
        }
329
        else
330
            i += dev->descr[i];
323
    }
331
    }
324
332
325
    if (i >= dev->descr_len) {
333
    if (i >= dev->descr_len) {

Return to bug 337988