svn commit: r288359 - head/sys/cam/ctl

Alexander Motin mav at FreeBSD.org
Tue Sep 29 10:44:39 UTC 2015


Author: mav
Date: Tue Sep 29 10:44:37 2015
New Revision: 288359
URL: https://svnweb.freebsd.org/changeset/base/288359

Log:
  Report that we can read all flavours of DVD.  Why not?

Modified:
  head/sys/cam/ctl/ctl.c

Modified: head/sys/cam/ctl/ctl.c
==============================================================================
--- head/sys/cam/ctl/ctl.c	Tue Sep 29 09:09:37 2015	(r288358)
+++ head/sys/cam/ctl/ctl.c	Tue Sep 29 10:44:37 2015	(r288359)
@@ -10271,6 +10271,10 @@ ctl_get_config(struct ctl_scsiio *ctsio)
 	    sizeof(struct scsi_get_config_feature) + 8 +
 	    sizeof(struct scsi_get_config_feature) +
 	    sizeof(struct scsi_get_config_feature) + 4 +
+	    sizeof(struct scsi_get_config_feature) + 4 +
+	    sizeof(struct scsi_get_config_feature) + 4 +
+	    sizeof(struct scsi_get_config_feature) + 4 +
+	    sizeof(struct scsi_get_config_feature) + 4 +
 	    sizeof(struct scsi_get_config_feature) + 4;
 	ctsio->kern_data_ptr = malloc(data_len, M_CTL, M_WAITOK | M_ZERO);
 	ctsio->kern_sg_entries = 0;
@@ -10284,8 +10288,16 @@ ctl_get_config(struct ctl_scsiio *ctsio)
 		scsi_ulto2b(0x0010, hdr->current_profile);
 	feature = (struct scsi_get_config_feature *)(hdr + 1);
 
-	if (starting > 0x001f)
+	if (starting > 0x003b)
 		goto done;
+	if (starting > 0x003a)
+		goto f3b;
+	if (starting > 0x002b)
+		goto f3a;
+	if (starting > 0x002a)
+		goto f2b;
+	if (starting > 0x001f)
+		goto f2a;
 	if (starting > 0x001e)
 		goto f1f;
 	if (starting > 0x001d)
@@ -10382,6 +10394,48 @@ f1f:	/* DVD Read */
 	feature = (struct scsi_get_config_feature *)
 	    &feature->feature_data[feature->add_length];
 
+f2a:	/* DVD+RW */
+	scsi_ulto2b(0x002A, feature->feature_code);
+	feature->flags = 0x04;
+	if ((lun->flags & CTL_LUN_NO_MEDIA) == 0)
+		feature->flags |= SGC_F_CURRENT;
+	feature->add_length = 4;
+	feature->feature_data[0] = 0x00;
+	feature->feature_data[1] = 0x00;
+	feature = (struct scsi_get_config_feature *)
+	    &feature->feature_data[feature->add_length];
+
+f2b:	/* DVD+R */
+	scsi_ulto2b(0x002B, feature->feature_code);
+	feature->flags = 0x00;
+	if ((lun->flags & CTL_LUN_NO_MEDIA) == 0)
+		feature->flags |= SGC_F_CURRENT;
+	feature->add_length = 4;
+	feature->feature_data[0] = 0x00;
+	feature = (struct scsi_get_config_feature *)
+	    &feature->feature_data[feature->add_length];
+
+f3a:	/* DVD+RW Dual Layer */
+	scsi_ulto2b(0x003A, feature->feature_code);
+	feature->flags = 0x00;
+	if ((lun->flags & CTL_LUN_NO_MEDIA) == 0)
+		feature->flags |= SGC_F_CURRENT;
+	feature->add_length = 4;
+	feature->feature_data[0] = 0x00;
+	feature->feature_data[1] = 0x00;
+	feature = (struct scsi_get_config_feature *)
+	    &feature->feature_data[feature->add_length];
+
+f3b:	/* DVD+R Dual Layer */
+	scsi_ulto2b(0x003B, feature->feature_code);
+	feature->flags = 0x00;
+	if ((lun->flags & CTL_LUN_NO_MEDIA) == 0)
+		feature->flags |= SGC_F_CURRENT;
+	feature->add_length = 4;
+	feature->feature_data[0] = 0x00;
+	feature = (struct scsi_get_config_feature *)
+	    &feature->feature_data[feature->add_length];
+
 done:
 	data_len = (uint8_t *)feature - (uint8_t *)hdr;
 	if (rt == SGC_RT_SPECIFIC && data_len > 4) {


More information about the svn-src-all mailing list