All of lore.kernel.org
 help / color / mirror / Atom feed
From: Roger Quadros <roger.quadros@nokia.com>
To: ext Alan Stern <stern@rowland.harvard.edu>
Cc: <gregkh@suse.de>, <sshtylyov@mvista.com>,
	<linux-usb@vger.kernel.org>, <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v2 1/3] usb: gadget: storage: Add fsg_get_toc helper
Date: Mon, 21 Mar 2011 17:29:14 +0200	[thread overview]
Message-ID: <4D876ECA.4010503@nokia.com> (raw)
In-Reply-To: <Pine.LNX.4.44L0.1103211017240.1978-100000@iolanthe.rowland.org>

On 03/21/2011 04:20 PM, ext Alan Stern wrote:
> On Mon, 21 Mar 2011, Roger Quadros wrote:
>
>> From: Roger Quadros<roger.quadros@nokia.com>
>>
>> fsg_get_toc can be used by both storage gadgets to build a CD-ROM
>> Table of Contents which can be used as data for READ_TOC command.
>> Currently fsg_get_toc supports two TOC formats, i.e.
>> format 0: Formatted TOC and format 2: Raw TOC.
>>
>> Raw TOC is required for CD-ROM emulation to work with Mac OS-X.
>>
>> Signed-off-by: Roger Quadros<roger.quadros@nokia.com>
>> ---
>>   drivers/usb/gadget/storage_common.c |   68 +++++++++++++++++++++++++++++++++++
>>   1 files changed, 68 insertions(+), 0 deletions(-)
>>
>> diff --git a/drivers/usb/gadget/storage_common.c b/drivers/usb/gadget/storage_common.c
>> index b015561..d47f148 100644
>> --- a/drivers/usb/gadget/storage_common.c
>> +++ b/drivers/usb/gadget/storage_common.c
>> @@ -655,6 +655,74 @@ static void store_cdrom_address(u8 *dest, int msf, u32 addr)
>>   	}
>>   }
>>
>> +/**
>> + * fsg_get_toc() - Builds a TOC with required format @format.
>> + * @curlun: The LUN for which the TOC has to be built
>> + * @msf: Min Sec Frame format or LBA format for address
>> + * @format: TOC format code
>> + * @buf: The buffer into which the TOC is built
>> + *
>> + * Builds a Table of Content which can be used as data for READ_TOC command.
>> + * The TOC simulates a single session, single track CD-ROM mode 1 disc.
>> + *
>> + * Returns number of bytes written to @buf, -EINVAL if format not supported.
>> + */
>> +static int fsg_get_toc(struct fsg_lun *curlun, int msf, int format, u8 *buf)
>> +{
>> +	int i, len;
>> +	switch (format) {
>> +	case 0:
>> +		/* Formatted TOC */
>> +		len = 4 + 2*8;		/* 4 byte header + 2 descriptors */
>> +		memset(buf, 0, len);
>> +		len -= 2;		/* TOC Length excludes length field */
>> +		buf[1] = len;		/* TOC data length */
>
> These two lines are wrong.  You should do:
>
> 		buf[1] = len - 2;	/* TOC data length excludes header */
>
> The way it is now, the function ends up returning 18 instead of 20,
> causing the wrong amount of data to be transmitted.

Yes indeed.

>
>> +		buf[2] = 1;		/* First track number */
>> +		buf[3] = 1;		/* Last track number */
>> +		buf[5] = 0x16;		/* Data track, copying allowed */
>> +		buf[6] = 0x01;		/* Only track is number 1 */
>> +		store_cdrom_address(&buf[8], msf, 0);
>> +
>> +		buf[13] = 0x16;		/* Lead-out track is data */
>> +		buf[14] = 0xAA;		/* Lead-out track number */
>> +		store_cdrom_address(&buf[16], msf, curlun->num_sectors);
>> +		return len;
>> +		break;
>> +
>> +	case 2:
>> +		/* Raw TOC */
>> +		len = 4 + 3*11;		/* 4 byte header + 3 descriptors */
>> +		memset(buf, 0, len);	/* Header + A0, A1&  A2 descriptors */
>> +		len -= 2;		/* TOC Length excludes length field */
>> +		buf[1] = len;		/* TOC data length */
>
> Same thing here.  I'm surprised it worked during testing.  Did you
> really check to see that the correct data was being sent?

I too am surprised. I tried playing a few videos without problems.
After you pointed out the problem I ran a checksum on the files and they match!!

But thanks for pointing out, I'll send a new patch.

-- 
regards,
-roger

      reply	other threads:[~2011-03-21 15:26 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-21 10:59 [PATCH v2 0/3] usb: gadget: storage: Make CD-ROM emulation work with Mac OS-X Roger Quadros
2011-03-21 10:59 ` [PATCH v2 1/3] usb: gadget: storage: Add fsg_get_toc helper Roger Quadros
2011-03-21 10:59   ` [PATCH v2 2/3] usb: gadget: file_storage: Make CD-ROM emulation work with Mac OS-X Roger Quadros
2011-03-21 10:59     ` [PATCH v2 3/3] usb: gadget: f_mass_storage: " Roger Quadros
2011-03-22 14:17     ` [PATCH v2 2/3] usb: gadget: file_storage: " Roger Quadros
2011-03-22 14:26       ` Alan Stern
2011-03-22 14:39         ` Roger Quadros
2011-03-22 15:13           ` Alan Stern
2011-03-23  8:20             ` Roger Quadros
2011-03-23 15:17               ` Alan Stern
2011-03-23 16:14                 ` Michal Nazarewicz
2011-03-21 14:20   ` [PATCH v2 1/3] usb: gadget: storage: Add fsg_get_toc helper Alan Stern
2011-03-21 15:29     ` Roger Quadros [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4D876ECA.4010503@nokia.com \
    --to=roger.quadros@nokia.com \
    --cc=gregkh@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=sshtylyov@mvista.com \
    --cc=stern@rowland.harvard.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.