From: Sergei Shtylyov <sshtylyov@mvista.com>
To: Roger Quadros <roger.quadros@nokia.com>
Cc: gregkh@suse.de, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/3] usb: gadget: storage: Add fsg_get_toc helper
Date: Wed, 09 Mar 2011 16:41:01 +0300 [thread overview]
Message-ID: <4D77836D.30009@ru.mvista.com> (raw)
In-Reply-To: <1299673300-16726-2-git-send-email-roger.quadros@nokia.com>
Hello.
On 09-03-2011 15:21, Roger Quadros wrote:
> 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 | 79 +++++++++++++++++++++++++++++++++++
> 1 files changed, 79 insertions(+), 0 deletions(-)
> diff --git a/drivers/usb/gadget/storage_common.c b/drivers/usb/gadget/storage_common.c
> index b015561..ffad1d9 100644
> --- a/drivers/usb/gadget/storage_common.c
> +++ b/drivers/usb/gadget/storage_common.c
> @@ -655,6 +655,85 @@ static void store_cdrom_address(u8 *dest, int msf, u32 addr)
> }
> }
>
> +/*
The kerneldoc comments should start with "/**".
> + * put_toc() - Builds a TOC with required format @format.
The function is called gsg_get_toc, isn't it?
> + * @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)
> +{
> + switch (format) {
> + case 0:
> + /* Formatted TOC */
> + memset(buf, 0, 20);
> + buf[1] = (20-2); /* TOC data length */
Parens not needed here. And kernel style assumes putting spacves around
operators.
> + 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 20;
> + break;
> +
> + case 2:
> + /* Raw TOC */
> + memset(buf, 0, 37); /* Header + A0, A1& A2 descriptors */
> + buf[1] = 37; /* 4 + 3*11 */
> + buf[2] = 1; /* First complete session */
> + buf[3] = 2; /* Last complete session */
> +
> + buf += 4;
> + /* A0 point */
> + buf[0] = 1; /* Session number */
> + buf[1] = 0x16; /* Data track, copying alowed */
> + /* 2 - Track number 0 -> TOC */
> + buf[3] = 0xA0; /* Point A0 */
> + /* 4, 5, 6 - Min, sec, frame is zero */
> + /* 7 - zero */
> + buf[8] = 1; /* Pmin: 1st track number */
> + /* 9 - disc type 0: CD-ROM/DA with 1st track in mode 1 */
> + /* 10 - pframe 0 */
> +
> + buf += 11;
> + /* A1 point*/
> + buf[0] = 1; /* Session number */
> + buf[1] = 0x16; /* Data track, copying alowed */
> + /* 2 - Track number 0 -> TOC */
> + buf[3] = 0xA1; /* Point A1 */
> + /* 4, 5, 6 - Min, sec, frame is zero */
> + /* 7, zero */
> + buf[8] = 1; /* Pmin: last track number */
> + /* 9, 10 - pmin and pframe are 0 */
The above code is repetitive -- might be worth factoring out into a function.
> +
> + buf += 11;
> + /* A2 point*/
> + buf[0] = 1; /* Session number */
> + buf[1] = 0x16; /* Data track, copying alowed */
> + /* 2 - Track number 0 -> TOC */
> + buf[3] = 0xA2; /* Point A2 */
> + /* 4, 5, 6 - Min, sec, frame is zero */
> + /* 7, 8, 9, 10 - zero, Pmin, Psec, Pframe of Lead out */
> + store_cdrom_address(&buf[7], msf, curlun->num_sectors);
> + return 37;
> + break;
> + default:
> + /* Multi-session, PMA, ATIP, CD-TEXT not supported/required */
> + return -EINVAL;
> + break;
> + }
> +}
> +
OK, but where this function is called from?
WBR, Sergei
next prev parent reply other threads:[~2011-03-09 13:42 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-09 12:21 [PATCH 0/3] usb: gadget: storage: Make CD-ROM emulation work with Mac OS-X Roger Quadros
2011-03-09 12:21 ` [PATCH 1/3] usb: gadget: storage: Add fsg_get_toc helper Roger Quadros
2011-03-09 12:21 ` [PATCH 2/3] usb: gadget: file_storage: Make CD-ROM emulation work with Mac OS-X Roger Quadros
2011-03-09 12:21 ` [PATCH 3/3] usb: gadget: f_mass_storage: " Roger Quadros
2011-03-09 13:41 ` Sergei Shtylyov [this message]
2011-03-09 14:08 ` [PATCH 1/3] usb: gadget: storage: Add fsg_get_toc helper Roger Quadros
2011-03-09 15:10 ` Alan Stern
2011-03-09 15:37 ` Roger Quadros
2011-03-09 16:07 ` Alan Stern
2011-03-10 14:54 ` Roger Quadros
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=4D77836D.30009@ru.mvista.com \
--to=sshtylyov@mvista.com \
--cc=gregkh@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=roger.quadros@nokia.com \
/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.