public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] cdrom: support read sub-channel command in LBA format
@ 2016-07-11  6:49 Veeraiyan Chidambaram (RBEI/ECF32)
  2016-07-12 15:26 ` Jens Axboe
  0 siblings, 1 reply; 2+ messages in thread
From: Veeraiyan Chidambaram (RBEI/ECF32) @ 2016-07-11  6:49 UTC (permalink / raw)
  To: Jens Axboe, Jonathan Corbet, Channaiah Vanitha (RBEI/ECF31),
	Mahendran Kuppusamy (RBEI/ECF31), linux-doc@vger.kernel.org,
	linux-kernel@vger.kernel.org

[-- Attachment #1: Type: text/plain, Size: 619 bytes --]

Hello Jens,

 In CDROM Linux driver code, "Read Sub channel" format is hard coded with CDROM_MSF format only in the function cdrom_read_subchannel() and mmc_ioctl_cdrom_subchannel() in cdrom.c.
 Hence, irrespective of "Read Sub channel" command with CDROM_LBA/CDROM_MSF format, the reported Response which is in MSF format was considered as LBA in user space application.

Now the behavior is changed in such way that  IOCTL returns either CDROM_MSF or CDROM_LBA format per user request.

Please find the fix patch attached. 


Best regards

Veeraiyan Chidambaram
RBEI/ECF  

Tel. +91(422)676-4495 



[-- Attachment #2: 0001-cdrom-support-read-sub-channel-command-in-LBA-format.patch --]
[-- Type: application/octet-stream, Size: 3660 bytes --]

From 58e16e2180923e3fdd8d62285539abacc08c59c7 Mon Sep 17 00:00:00 2001
From: vchannaiah <vanitha.channaiah@in.bosch.com>
Date: Wed, 29 Jun 2016 08:18:25 -0400
Subject: [PATCH] cdrom: support read sub-channel command in LBA format

userspace application can send READ_SUB_CHANNEL command with time bit
enabled and disabled. The time bit allows selection of address reporting
format. If the time bit is disabled the response is in logical block
address(CDROM_LBA) format, represented as a 32-bit integer with ms-byte
first. If the time bit is enabled the response is in time format i.e.,
minutes, second, frame (CDROM_MSF) format.

Signed-off-by: vchannaiah <vanitha.channaiah@in.bosch.com>
Signed-off-by: Mahendran Kuppusamy <mahendran.kuppusamy@in.bosch.com>
[veeraiyan.chidambaram@in.bosch.com: updated Documentation/ioctl/cdrom.txt]
Signed-off-by: Veeraiyan Chidambaram <veeraiyan.chidambaram@in.bosch.com>
---
 Documentation/ioctl/cdrom.txt |    3 ++-
 drivers/cdrom/cdrom.c         |   28 +++++++++++++++++++---------
 2 files changed, 21 insertions(+), 10 deletions(-)

diff --git a/Documentation/ioctl/cdrom.txt b/Documentation/ioctl/cdrom.txt
index 59df81c..a4d62a9 100644
--- a/Documentation/ioctl/cdrom.txt
+++ b/Documentation/ioctl/cdrom.txt
@@ -340,7 +340,8 @@ CDROMSUBCHNL			Read subchannel data (struct cdrom_subchnl)
 	  EINVAL	format not CDROM_MSF or CDROM_LBA
 
 	notes:
-	  Format is converted to CDROM_MSF on return
+	  Format is converted to CDROM_MSF or CDROM_LBA
+	  as per user request on return
 
 
 
diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c
index 1b257ea..5d475b3 100644
--- a/drivers/cdrom/cdrom.c
+++ b/drivers/cdrom/cdrom.c
@@ -2032,7 +2032,7 @@ static int cdrom_read_subchannel(struct cdrom_device_info *cdi,
 
 	init_cdrom_command(&cgc, buffer, 16, CGC_DATA_READ);
 	cgc.cmd[0] = GPCMD_READ_SUBCHANNEL;
-	cgc.cmd[1] = 2;     /* MSF addressing */
+	cgc.cmd[1] = subchnl->cdsc_format;/* MSF or LBA addressing */
 	cgc.cmd[2] = 0x40;  /* request subQ data */
 	cgc.cmd[3] = mcn ? 2 : 1;
 	cgc.cmd[8] = 16;
@@ -2041,17 +2041,27 @@ static int cdrom_read_subchannel(struct cdrom_device_info *cdi,
 		return ret;
 
 	subchnl->cdsc_audiostatus = cgc.buffer[1];
-	subchnl->cdsc_format = CDROM_MSF;
 	subchnl->cdsc_ctrl = cgc.buffer[5] & 0xf;
 	subchnl->cdsc_trk = cgc.buffer[6];
 	subchnl->cdsc_ind = cgc.buffer[7];
 
-	subchnl->cdsc_reladdr.msf.minute = cgc.buffer[13];
-	subchnl->cdsc_reladdr.msf.second = cgc.buffer[14];
-	subchnl->cdsc_reladdr.msf.frame = cgc.buffer[15];
-	subchnl->cdsc_absaddr.msf.minute = cgc.buffer[9];
-	subchnl->cdsc_absaddr.msf.second = cgc.buffer[10];
-	subchnl->cdsc_absaddr.msf.frame = cgc.buffer[11];
+	if (subchnl->cdsc_format == CDROM_LBA) {
+		subchnl->cdsc_absaddr.lba = ((cgc.buffer[8] << 24) |
+						(cgc.buffer[9] << 16) |
+						(cgc.buffer[10] << 8) |
+						(cgc.buffer[11]));
+		subchnl->cdsc_reladdr.lba = ((cgc.buffer[12] << 24) |
+						(cgc.buffer[13] << 16) |
+						(cgc.buffer[14] << 8) |
+						(cgc.buffer[15]));
+	} else {
+		subchnl->cdsc_reladdr.msf.minute = cgc.buffer[13];
+		subchnl->cdsc_reladdr.msf.second = cgc.buffer[14];
+		subchnl->cdsc_reladdr.msf.frame = cgc.buffer[15];
+		subchnl->cdsc_absaddr.msf.minute = cgc.buffer[9];
+		subchnl->cdsc_absaddr.msf.second = cgc.buffer[10];
+		subchnl->cdsc_absaddr.msf.frame = cgc.buffer[11];
+	}
 
 	return 0;
 }
@@ -3022,7 +3032,7 @@ static noinline int mmc_ioctl_cdrom_subchannel(struct cdrom_device_info *cdi,
 	if (!((requested == CDROM_MSF) ||
 	      (requested == CDROM_LBA)))
 		return -EINVAL;
-	q.cdsc_format = CDROM_MSF;
+
 	ret = cdrom_read_subchannel(cdi, &q, 0);
 	if (ret)
 		return ret;
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] cdrom: support read sub-channel command in LBA format
  2016-07-11  6:49 [PATCH] cdrom: support read sub-channel command in LBA format Veeraiyan Chidambaram (RBEI/ECF32)
@ 2016-07-12 15:26 ` Jens Axboe
  0 siblings, 0 replies; 2+ messages in thread
From: Jens Axboe @ 2016-07-12 15:26 UTC (permalink / raw)
  To: Veeraiyan Chidambaram (RBEI/ECF32), Jonathan Corbet,
	Channaiah Vanitha (RBEI/ECF31), Mahendran Kuppusamy (RBEI/ECF31),
	linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org

On 07/10/2016 11:49 PM, Veeraiyan Chidambaram (RBEI/ECF32) wrote:
> Hello Jens,
>
> In CDROM Linux driver code, "Read Sub channel" format is hard coded
> with CDROM_MSF format only in the function cdrom_read_subchannel() and
> mmc_ioctl_cdrom_subchannel() in cdrom.c.  Hence, irrespective of
> "Read Sub channel" command with CDROM_LBA/CDROM_MSF format, the
> reported Response which is in MSF format was considered as LBA in user
> space application.  Now the behavior is changed in such way that
> IOCTL returns either CDROM_MSF or CDROM_LBA format per user request.
> Please find the fix patch attached.

Applied for 4.8, thanks.

-- 
Jens Axboe

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2016-07-12 15:26 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-07-11  6:49 [PATCH] cdrom: support read sub-channel command in LBA format Veeraiyan Chidambaram (RBEI/ECF32)
2016-07-12 15:26 ` Jens Axboe

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox