From: Jack Pham <quic_jackp@quicinc.com>
To: Greg KH <gregkh@linuxfoundation.org>,
Roger Quadros <rogerq@kernel.org>,
Alan Stern <stern@rowland.harvard.edu>,
Michal Nazarewicz <mina86@mina86.com>
Cc: <linux-usb@vger.kernel.org>
Subject: Re: [PATCH v3] usb: gadget: f_mass_storage: Make CD-ROM emulation work with Mac OS-X
Date: Mon, 24 Jan 2022 08:00:40 -0800 [thread overview]
Message-ID: <20220124160027.GG3221@jackp-linux.qualcomm.com> (raw)
In-Reply-To: <20220113175916.10090-1-quic_jackp@quicinc.com>
On Thu, Jan 13, 2022 at 09:59:16AM -0800, Jack Pham wrote:
> From: Roger Quadros <roger.quadros@nokia.com>
>
> Mac OS-X expects CD-ROM TOC in raw format (i.e. format:2). It also
> sends the READ_TOC CDB in old style SFF8020i format. i.e. 2 format bits
> are encoded in MSBs of CDB byte 9.
>
> This patch will enable CD-ROM emulation to work with Mac OS-X. Tested on
> Mac OS X v10.6.3.
>
> Signed-off-by: Roger Quadros <roger.quadros@nokia.com>
> Signed-off-by: Jack Pham <quic_jackp@quicinc.com>
> ---
> v3: Updated command mask to allow for non-zero byte 2
> v2: Removed Change-Id
> v1: Resurrected original change [1] and consolidated into single patch
>
> [1] https://lore.kernel.org/lkml/1302015569-9668-1-git-send-email-roger.quadros@nokia.com/T/#u
>
> drivers/usb/gadget/function/f_mass_storage.c | 73 ++++++++++++++++----
> 1 file changed, 61 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/usb/gadget/function/f_mass_storage.c b/drivers/usb/gadget/function/f_mass_storage.c
> index 752439690fda..d08463756eb0 100644
> --- a/drivers/usb/gadget/function/f_mass_storage.c
> +++ b/drivers/usb/gadget/function/f_mass_storage.c
> @@ -1188,6 +1188,8 @@ static int do_read_toc(struct fsg_common *common, struct fsg_buffhd *bh)
> int msf = common->cmnd[1] & 0x02;
> int start_track = common->cmnd[6];
> u8 *buf = (u8 *)bh->buf;
> + u8 format;
> + int i, len;
>
> if ((common->cmnd[1] & ~0x02) != 0 || /* Mask away MSF */
> start_track > 1) {
> @@ -1195,18 +1197,65 @@ static int do_read_toc(struct fsg_common *common, struct fsg_buffhd *bh)
> return -EINVAL;
> }
>
> - memset(buf, 0, 20);
> - buf[1] = (20-2); /* TOC data length */
> - 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);
> + format = common->cmnd[2] & 0xf;
> + /*
> + * Check if CDB is old style SFF-8020i
> + * i.e. format is in 2 MSBs of byte 9
> + * Mac OS-X host sends us this.
> + */
> + if (format == 0)
> + format = (common->cmnd[9] >> 6) & 0x3;
> +
> + 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 */
Length is now decremented to 18...
> + buf[1] = len; /* TOC data length */
> + 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;
... which is returned here. This should be returning 20, not 18.
Indeed it's the same mistake as was pointed out in the original patch
series https://lore.kernel.org/lkml/4D876ECA.4010503@nokia.com/ so I
must have inadvertently applied the wrong version of the patch.
> +
> + 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 */
Same here.
Will send out v4 with this corrected.
prev parent reply other threads:[~2022-01-24 16:00 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-13 17:59 [PATCH v3] usb: gadget: f_mass_storage: Make CD-ROM emulation work with Mac OS-X Jack Pham
2022-01-13 20:47 ` Alan Stern
2022-01-24 16:00 ` Jack Pham [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=20220124160027.GG3221@jackp-linux.qualcomm.com \
--to=quic_jackp@quicinc.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-usb@vger.kernel.org \
--cc=mina86@mina86.com \
--cc=rogerq@kernel.org \
--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.