Author: mav
Date: Mon Oct  5 11:38:51 2015
New Revision: 288812
URL: https://svnweb.freebsd.org/changeset/base/288812

Log:
  MFC r288358: Add CD/DVD Capabilities and Mechanical Status Page.
  
  This page is obsolete since MMC-4, but still used by some software.
  
  approved by:

Modified:
  stable/10/sys/cam/ctl/ctl.c
  stable/10/sys/cam/ctl/ctl_private.h
  stable/10/sys/cam/scsi/scsi_cd.h
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/cam/ctl/ctl.c
==============================================================================
--- stable/10/sys/cam/ctl/ctl.c Mon Oct  5 11:31:24 2015        (r288811)
+++ stable/10/sys/cam/ctl/ctl.c Mon Oct  5 11:38:51 2015        (r288812)
@@ -354,6 +354,52 @@ const static struct ctl_logical_block_pr
        }
 };
 
+const static struct scsi_cddvd_capabilities_page cddvd_page_default = {
+       /*page_code*/SMS_CDDVD_CAPS_PAGE,
+       /*page_length*/sizeof(struct scsi_cddvd_capabilities_page) - 2,
+       /*caps1*/0x3f,
+       /*caps2*/0x00,
+       /*caps3*/0xf0,
+       /*caps4*/0x00,
+       /*caps5*/0x29,
+       /*caps6*/0x00,
+       /*obsolete*/{0, 0},
+       /*nvol_levels*/{0, 0},
+       /*buffer_size*/{8, 0},
+       /*obsolete2*/{0, 0},
+       /*reserved*/0,
+       /*digital*/0,
+       /*obsolete3*/0,
+       /*copy_management*/0,
+       /*reserved2*/0,
+       /*rotation_control*/0,
+       /*cur_write_speed*/0,
+       /*num_speed_descr*/0,
+};
+
+const static struct scsi_cddvd_capabilities_page cddvd_page_changeable = {
+       /*page_code*/SMS_CDDVD_CAPS_PAGE,
+       /*page_length*/sizeof(struct scsi_cddvd_capabilities_page) - 2,
+       /*caps1*/0,
+       /*caps2*/0,
+       /*caps3*/0,
+       /*caps4*/0,
+       /*caps5*/0,
+       /*caps6*/0,
+       /*obsolete*/{0, 0},
+       /*nvol_levels*/{0, 0},
+       /*buffer_size*/{0, 0},
+       /*obsolete2*/{0, 0},
+       /*reserved*/0,
+       /*digital*/0,
+       /*obsolete3*/0,
+       /*copy_management*/0,
+       /*reserved2*/0,
+       /*rotation_control*/0,
+       /*cur_write_speed*/0,
+       /*num_speed_descr*/0,
+};
+
 SYSCTL_NODE(_kern_cam, OID_AUTO, ctl, CTLFLAG_RD, 0, "CAM Target Layer");
 static int worker_threads = -1;
 TUNABLE_INT("kern.cam.ctl.worker_threads", &worker_threads);
@@ -4121,6 +4167,23 @@ ctl_init_page_index(struct ctl_lun *lun)
                        }}
                        break;
                }
+               case SMS_CDDVD_CAPS_PAGE:{
+                       memcpy(&lun->mode_pages.cddvd_page[CTL_PAGE_DEFAULT],
+                              &cddvd_page_default,
+                              sizeof(cddvd_page_default));
+                       memcpy(&lun->mode_pages.cddvd_page[
+                              CTL_PAGE_CHANGEABLE], &cddvd_page_changeable,
+                              sizeof(cddvd_page_changeable));
+                       memcpy(&lun->mode_pages.cddvd_page[CTL_PAGE_SAVED],
+                              &cddvd_page_default,
+                              sizeof(cddvd_page_default));
+                       memcpy(&lun->mode_pages.cddvd_page[CTL_PAGE_CURRENT],
+                              &lun->mode_pages.cddvd_page[CTL_PAGE_SAVED],
+                              sizeof(cddvd_page_default));
+                       page_index->page_data =
+                               (uint8_t *)lun->mode_pages.cddvd_page;
+                       break;
+               }
                case SMS_VENDOR_SPECIFIC_PAGE:{
                        switch (page_index->subpage) {
                        case DBGCNF_SUBPAGE_CODE: {

Modified: stable/10/sys/cam/ctl/ctl_private.h
==============================================================================
--- stable/10/sys/cam/ctl/ctl_private.h Mon Oct  5 11:31:24 2015        
(r288811)
+++ stable/10/sys/cam/ctl/ctl_private.h Mon Oct  5 11:38:51 2015        
(r288812)
@@ -40,6 +40,10 @@
 #ifndef        _CTL_PRIVATE_H_
 #define        _CTL_PRIVATE_H_
 
+#include <cam/scsi/scsi_all.h>
+#include <cam/scsi/scsi_cd.h>
+#include <cam/scsi/scsi_da.h>
+
 /*
  * SCSI vendor and product names.
  */
@@ -286,6 +290,9 @@ static const struct ctl_page_index page_
        {SMS_INFO_EXCEPTIONS_PAGE | SMPH_SPF, 0x02,
         sizeof(struct ctl_logical_block_provisioning_page), NULL,
         CTL_PAGE_FLAG_DIRECT, NULL, NULL},
+       {SMS_CDDVD_CAPS_PAGE, 0,
+        sizeof(struct scsi_cddvd_capabilities_page), NULL,
+        CTL_PAGE_FLAG_CDROM, NULL, NULL},
        {SMS_VENDOR_SPECIFIC_PAGE | SMPH_SPF, DBGCNF_SUBPAGE_CODE,
         sizeof(struct copan_debugconf_subpage), NULL, CTL_PAGE_FLAG_ALL,
         ctl_debugconf_sp_sense_handler, ctl_debugconf_sp_select_handler},
@@ -303,6 +310,7 @@ struct ctl_mode_pages {
        struct scsi_control_ext_page    control_ext_page[4];
        struct scsi_info_exceptions_page ie_page[4];
        struct ctl_logical_block_provisioning_page lbp_page[4];
+       struct scsi_cddvd_capabilities_page cddvd_page[4];
        struct copan_debugconf_subpage  debugconf_subpage[4];
        struct ctl_page_index           index[CTL_NUM_MODE_PAGES];
 };

Modified: stable/10/sys/cam/scsi/scsi_cd.h
==============================================================================
--- stable/10/sys/cam/scsi/scsi_cd.h    Mon Oct  5 11:31:24 2015        
(r288811)
+++ stable/10/sys/cam/scsi/scsi_cd.h    Mon Oct  5 11:38:51 2015        
(r288812)
@@ -783,6 +783,37 @@ struct cd_audio_page
 #define        RIGHT_PORT              1
 };
 
+struct scsi_cddvd_capabilities_page_sd {
+       uint8_t reserved;
+       uint8_t rotation_control;
+       uint8_t write_speed_supported[2];
+};
+
+struct scsi_cddvd_capabilities_page {
+       uint8_t page_code;
+#define        SMS_CDDVD_CAPS_PAGE             0x2a
+       uint8_t page_length;
+       uint8_t caps1;
+       uint8_t caps2;
+       uint8_t caps3;
+       uint8_t caps4;
+       uint8_t caps5;
+       uint8_t caps6;
+       uint8_t obsolete[2];
+       uint8_t nvol_levels[2];
+       uint8_t buffer_size[2];
+       uint8_t obsolete2[2];
+       uint8_t reserved;
+       uint8_t digital;
+       uint8_t obsolete3;
+       uint8_t copy_management;
+       uint8_t reserved2;
+       uint8_t rotation_control;
+       uint8_t cur_write_speed;
+       uint8_t num_speed_descr;
+       struct scsi_cddvd_capabilities_page_sd speed_descr[];
+};
+
 union cd_pages
 {
        struct cd_audio_page audio;
_______________________________________________
svn-src-stable-10@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-stable-10
To unsubscribe, send any mail to "svn-src-stable-10-unsubscr...@freebsd.org"

Reply via email to