On Thursday 08 February 2007 1:06 am, Oliver Neukum wrote:

> --- a/include/linux/usb/cdc.h 2007-02-06 14:11:50.000000000 +0100
> +++ b/include/linux/usb/cdc.h 2007-02-08 09:50:28.000000000 +0100
> @@ -73,6 +73,13 @@
>       __u8    bmCapabilities;
>  } __attribute__ ((packed));
>  
> +/* capabilities from 5.2.3.3 */
> +
> +#define ACM_CTRL_CAP_COMM_FTR        0x01
> +#define ACM_CTRL_CAP_LINE    0x02
> +#define ACM_CTRL_CAP_BRK     0x04
> +#define ACM_CTRL_CAP_NOTIFY  0x08

All other #defines in that code use USB_CDC_* prefixes;
could you make this match?

- Dave

> +
>  /* "Union Functional Descriptor" from CDC spec 5.2.3.8 */
>  struct usb_cdc_union_desc {
>       __u8    bLength;
> --- a/drivers/usb/class/cdc-acm.c     2007-02-06 14:14:48.000000000 +0100
> +++ b/drivers/usb/class/cdc-acm.c     2007-02-06 14:37:44.000000000 +0100
> @@ -326,10 +326,16 @@
>       struct tty_struct *tty = acm->tty;
>       struct acm_ru *rcv;
>       unsigned long flags;
> -     int i = 0;
> +     unsigned char throttled;
>       dbg("Entering acm_rx_tasklet");
>  
> -     if (!ACM_READY(acm) || acm->throttle)
> +     if (!ACM_READY(acm))
> +             return;
> +
> +     spin_lock(&acm->throttle_lock);
> +     throttled = acm->throttle;
> +     spin_unlock(&acm->throttle_lock);
> +     if (throttled)
>               return;
>  
>  next_buffer:
> @@ -346,22 +352,20 @@
>       dbg("acm_rx_tasklet: procesing buf 0x%p, size = %d", buf, buf->size);
>  
>       tty_buffer_request_room(tty, buf->size);
> -     if (!acm->throttle)
> +     spin_lock(&acm->throttle_lock);
> +     throttled = acm->throttle;
> +     spin_unlock(&acm->throttle_lock);
> +     if (!throttled)
>               tty_insert_flip_string(tty, buf->base, buf->size);
>       tty_flip_buffer_push(tty);
>  
> -     spin_lock(&acm->throttle_lock);
> -     if (acm->throttle) {
> -             dbg("Throtteling noticed");
> -             memmove(buf->base, buf->base + i, buf->size - i);
> -             buf->size -= i;
> -             spin_unlock(&acm->throttle_lock);
> +     if (throttled) {
> +             dbg("Throttling noticed");
>               spin_lock_irqsave(&acm->read_lock, flags);
>               list_add(&buf->list, &acm->filled_read_bufs);
>               spin_unlock_irqrestore(&acm->read_lock, flags);
>               return;
>       }
> -     spin_unlock(&acm->throttle_lock);
>  
>       spin_lock_irqsave(&acm->read_lock, flags);
>       list_add(&buf->list, &acm->spare_read_bufs);
> @@ -467,7 +471,8 @@
>               goto bail_out;
>       }
>  
> -     if (0 > acm_set_control(acm, acm->ctrlout = ACM_CTRL_DTR | 
> ACM_CTRL_RTS))
> +     if (0 > acm_set_control(acm, acm->ctrlout = ACM_CTRL_DTR | 
> ACM_CTRL_RTS) &&
> +         (acm->ctrl_caps & ACM_CTRL_CAP_LINE))
>               goto full_bailout;
>  
>       INIT_LIST_HEAD(&acm->spare_read_urbs);
> @@ -480,6 +485,8 @@
>               list_add(&(acm->rb[i].list), &acm->spare_read_bufs);
>       }
>  
> +     acm->throttle = 0;
> +
>       tasklet_schedule(&acm->urb_task);
>  
>  done:
> 

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to