Re: usb : mass storage : short_not_ok for non usb3 udc

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi

On Wed, Jul 25, 2012 at 6:33 PM, Michal Nazarewicz <mina86@xxxxxxxxxx> wrote:
> On Wed, 25 Jul 2012 14:53:00 +0200, Rajaram REGUPATHY
> <ragupathy.rajaram@xxxxxxxxxxxxxx> wrote:
>>
>> The short_not_ok field is used by class drivers to indicate udc whether
>> short packet is expected during a particular transfer.
>> In case of mass storage, during command and status phase this field is set
>> as false and set to true during data phase.
>> musb driver uses this field to decide whether to program DMA for mode1.
>> This code is essential for musb driver to program DMA.
>
>
> There's one thing I don't get.  The message talks about musb but the code
> checks for non Super Speed devices.  So maybe the code is correct, maybe
> it's not, but the message does not really explain it (at least to me).
>
Please let me know if this thread sets the context ?

http://www.spinics.net/lists/linux-usb/msg64938.html

> (Also, you probably should wrap the message before 80th column.)
>
>
>> Signed-off-by: Balakumar Rajendran <balakumar.rajendran@xxxxxxxxxxxxxx>
>> Signed-off-by: Rajaram R <ragupathy.rajaram@xxxxxxxxxxxxxx>
>> ---
>>  drivers/usb/gadget/f_mass_storage.c |    9 +++++++++
>>  1 files changed, 9 insertions(+), 0 deletions(-)
>>
>> diff --git a/drivers/usb/gadget/f_mass_storage.c
>> b/drivers/usb/gadget/f_mass_storage.c
>> index f67b453..db8bf4a 100644
>> --- a/drivers/usb/gadget/f_mass_storage.c
>> +++ b/drivers/usb/gadget/f_mass_storage.c
>> @@ -878,6 +878,7 @@ static int do_write(struct fsg_common *common)
>>         unsigned int            amount;
>>         ssize_t                 nwritten;
>>         int                     rc;
>> +       struct usb_gadget *gadget = common->cdev->gadget;
>>         if (curlun->ro) {
>>                 curlun->sense_data = SS_WRITE_PROTECTED; @@ -960,6 +961,8
>> @@ static int do_write(struct fsg_common *common)
>>                          * the bulk-out maxpacket size.
>>                          */
>>                         set_bulk_out_req_length(common, bh, amount);
>> +                       if (!gadget_is_superspeed(gadget))
>> +                               bh->outreq->short_not_ok = 1;
>>                         if (!start_out_transfer(common, bh))
>>                                 /* Dunno what to do if common->fsg is NULL
>> */
>>                                 return -EIO;
>> @@ -1584,6 +1587,7 @@ static int throw_away_data(struct fsg_common
>> *common)
>>         struct fsg_buffhd       *bh;
>>         u32                     amount;
>>         int                     rc;
>> +       struct usb_gadget *gadget = common->cdev->gadget;
>>         for (bh = common->next_buffhd_to_drain;
>>              bh->state != BUF_STATE_EMPTY || common->usb_amount_left > 0;
>> @@ -1617,6 +1621,8 @@ static int throw_away_data(struct fsg_common *common)
>>                          * the bulk-out maxpacket size.
>>                          */
>>                         set_bulk_out_req_length(common, bh, amount);
>> +                       if (!gadget_is_superspeed(gadget))
>> +                               bh->outreq->short_not_ok = 1;
>>                         if (!start_out_transfer(common, bh))
>>                                 /* Dunno what to do if common->fsg is NULL
>> */
>>                                 return -EIO;
>> @@ -2292,6 +2298,7 @@ static int get_next_command(struct fsg_common
>> *common)  {
>>         struct fsg_buffhd       *bh;
>>         int                     rc = 0;
>> +       struct usb_gadget *gadget = common->cdev->gadget;
>>         /* Wait for the next buffer to become available */
>>         bh = common->next_buffhd_to_fill;
>> @@ -2303,6 +2310,8 @@ static int get_next_command(struct fsg_common
>> *common)
>>         /* Queue a request to read a Bulk-only CBW */
>>         set_bulk_out_req_length(common, bh, US_BULK_CB_WRAP_LEN);
>> +       if (!gadget_is_superspeed(gadget))
>> +               bh->outreq->short_not_ok = 0;
>>         if (!start_out_transfer(common, bh))
>>                 /* Don't know what to do if common->fsg is NULL */
>>                 return -EIO;
>
>
> --
> Best regards,                                         _     _
> .o. | Liege of Serenely Enlightened Majesty of      o' \,=./ `o
> ..o | Computer Science,  Michał “mina86” Nazarewicz    (o o)
> ooo +----<email/xmpp: mpn@xxxxxxxxxx>--------------ooO--(_)--Ooo--
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-usb" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux