patch-2.4.0-test8 linux/drivers/scsi/sr_ioctl.c

Next file: linux/drivers/scsi/st.c
Previous file: linux/drivers/scsi/sr.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.0-test7/linux/drivers/scsi/sr_ioctl.c linux/drivers/scsi/sr_ioctl.c
@@ -284,6 +284,8 @@
 	int result, target = MINOR(cdi->dev);
 	unsigned char buffer[32];
 
+	memset(sr_cmd, 0, sizeof(sr_cmd));
+
 	switch (cmd) {
 	case CDROMREADTOCHDR:
 		{
@@ -292,10 +294,7 @@
 			sr_cmd[0] = GPCMD_READ_TOC_PMA_ATIP;
 			sr_cmd[1] = ((scsi_CDs[target].device->lun) << 5);
 			sr_cmd[2] = sr_cmd[3] = sr_cmd[4] = sr_cmd[5] = 0;
-			sr_cmd[6] = 0;
-			sr_cmd[7] = 0;	/* MSB of length (12) */
 			sr_cmd[8] = 12;		/* LSB of length */
-			sr_cmd[9] = 0;
 
 			result = sr_do_ioctl(target, sr_cmd, buffer, 12, 1, SCSI_DATA_READ);
 
@@ -314,9 +313,7 @@
 			    (tocentry->cdte_format == CDROM_MSF ? 0x02 : 0);
 			sr_cmd[2] = sr_cmd[3] = sr_cmd[4] = sr_cmd[5] = 0;
 			sr_cmd[6] = tocentry->cdte_track;
-			sr_cmd[7] = 0;	/* MSB of length (12)  */
 			sr_cmd[8] = 12;		/* LSB of length */
-			sr_cmd[9] = 0;
 
 			result = sr_do_ioctl(target, sr_cmd, buffer, 12, 0, SCSI_DATA_READ);
 
@@ -333,6 +330,20 @@
 
 			break;
 		}
+
+	case CDROMPLAYTRKIND: {
+		struct cdrom_ti* ti = (struct cdrom_ti*)arg;
+
+		sr_cmd[0] = GPCMD_PLAYAUDIO_TI;
+		sr_cmd[1] = scsi_CDs[target].device->lun << 5;
+		sr_cmd[4] = ti->cdti_trk0;
+		sr_cmd[5] = ti->cdti_ind0;
+		sr_cmd[7] = ti->cdti_trk1;
+		sr_cmd[8] = ti->cdti_ind1;
+
+		result = sr_do_ioctl(target, sr_cmd, NULL, 255, 0, SCSI_DATA_NONE);
+		break;
+	}
 
 	default:
 		return -EINVAL;

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)