> -----Original Message-----
> From: David Brownell [mailto:[EMAIL PROTECTED]
> Sent: Saturday, March 17, 2007 6:38 AM
> To: linux-usb-devel@lists.sourceforge.net
> Cc: Li Yang-r58472; [EMAIL PROTECTED]
> Subject: Re: [linux-usb-devel] [PATCH] Fix gadget serial response on
> USB_CDC_REQ_SET_LINE_CODING
> 
> On Wednesday 14 March 2007 5:18 am, Li Yang wrote:
> > Apparently this gadget doesn't support setting usb_cdc_line_coding.
> 
> It does support it ... but that support is buggy.  It should be
issuing
> a read request before doing the memcpy(); instead, it wrongly assumes
> that something else already issued the read.

Memcpy() the line_coding from host to the private port_line_coding
structure doesn't mean the port is really changed.  Port_line_coding
structure isn't used anywhere in the driver accept it fools around the
next USB_CDC_REQ_GET_LINE_CODING request from host.

> 
> Plus, it doesn't correctly test for some error cases:  port is null,
> there's not enough incoming data.
> 
> 
> > But the code pretends that it supports, and queues a zero length
> > request for the DATA phase.  That will cause overflow for udc in
> > processing the DATA transaction.  The patch make it return
-EOPNOTSUPP
> > and stall cleanly.
> 
> So, a workaround for the bug.  Did you notice how the other SET
> request has the same bug?
> 
> If you're not going to really fix this, please update the patch
> to address the same bug in the other path; and its description
> to say that you're replacing buggy code with an explicit failure.
> 
> Best of course would be to fix the underlying bugs, since you
> clearly have a test setup and the fixes should be trivial, more or
> less
> 
>       if (wLength == right length) {
>               update req->complete
>               ret = right length
>       }
> 
> and providing new completion handlers which copy the data.

I knew it was not a complete fix.  But I didn't have the time and
knowledge to add support to this function.  Moreover, this is an
optional function for CDC class, so it is all right to leave it
unsupported.

> 
> - Dave
> 
> 
> > Signed-off-by: Li Yang <[EMAIL PROTECTED]>
> > ---
> >
> > diff --git a/drivers/usb/gadget/serial.c
b/drivers/usb/gadget/serial.c
> > index e552668..0911bc4 100644
> > --- a/drivers/usb/gadget/serial.c
> > +++ b/drivers/usb/gadget/serial.c
> > @@ -1692,14 +1692,7 @@ static int gs_setup_class(struct usb_gadget
*gadget,
> >
> >     switch (ctrl->bRequest) {
> >     case USB_CDC_REQ_SET_LINE_CODING:
> > -           ret = min(wLength,
> > -                   (u16)sizeof(struct usb_cdc_line_coding));
> > -           if (port) {
> > -                   spin_lock(&port->port_lock);
> > -                   memcpy(&port->port_line_coding, req->buf, ret);
> > -                   spin_unlock(&port->port_lock);
> > -           }
> > -           ret = 0;
> > +           /* FIXME: We don't support set line coding */
> >             break;
> >
> >     case USB_CDC_REQ_GET_LINE_CODING:
> >
> >
> >
------------------------------------------------------------------------
-
> > Take Surveys. Earn Cash. Influence the Future of IT
> > Join SourceForge.net's Techsay panel and you'll get the chance to
share your
> > opinions on IT & business topics through brief surveys-and earn cash
> >
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDE
V
> > _______________________________________________
> > linux-usb-devel@lists.sourceforge.net
> > To unsubscribe, use the last form field at:
> > https://lists.sourceforge.net/lists/listinfo/linux-usb-devel
> >

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to