Author: mav
Date: Thu Jan  5 11:50:01 2017
New Revision: 311433
URL: https://svnweb.freebsd.org/changeset/base/311433

Log:
  MFC r310390: Add support for REPD bit in RSTMF command.
  
  We have no real timeout values to report there, but its better then error.

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

Modified: stable/10/sys/cam/ctl/ctl.c
==============================================================================
--- stable/10/sys/cam/ctl/ctl.c Thu Jan  5 11:49:07 2017        (r311432)
+++ stable/10/sys/cam/ctl/ctl.c Thu Jan  5 11:50:01 2017        (r311433)
@@ -7453,7 +7453,7 @@ int
 ctl_report_supported_tmf(struct ctl_scsiio *ctsio)
 {
        struct scsi_report_supported_tmf *cdb;
-       struct scsi_report_supported_tmf_data *data;
+       struct scsi_report_supported_tmf_ext_data *data;
        int retval;
        int alloc_len, total_len;
 
@@ -7463,7 +7463,10 @@ ctl_report_supported_tmf(struct ctl_scsi
 
        retval = CTL_RETVAL_COMPLETE;
 
-       total_len = sizeof(struct scsi_report_supported_tmf_data);
+       if (cdb->options & RST_REPD)
+               total_len = sizeof(struct scsi_report_supported_tmf_ext_data);
+       else
+               total_len = sizeof(struct scsi_report_supported_tmf_data);
        alloc_len = scsi_4btoul(cdb->length);
 
        ctsio->kern_data_ptr = malloc(total_len, M_CTL, M_WAITOK | M_ZERO);
@@ -7482,10 +7485,11 @@ ctl_report_supported_tmf(struct ctl_scsi
        ctsio->kern_data_resid = 0;
        ctsio->kern_rel_offset = 0;
 
-       data = (struct scsi_report_supported_tmf_data *)ctsio->kern_data_ptr;
+       data = (struct scsi_report_supported_tmf_ext_data 
*)ctsio->kern_data_ptr;
        data->byte1 |= RST_ATS | RST_ATSS | RST_CTSS | RST_LURS | RST_QTS |
            RST_TRS;
        data->byte2 |= RST_QAES | RST_QTSS | RST_ITNRS;
+       data->length = total_len - 4;
 
        ctl_set_success(ctsio);
        ctsio->io_hdr.flags |= CTL_FLAG_ALLOCATED;

Modified: stable/10/sys/cam/ctl/ctl_cmd_table.c
==============================================================================
--- stable/10/sys/cam/ctl/ctl_cmd_table.c       Thu Jan  5 11:49:07 2017        
(r311432)
+++ stable/10/sys/cam/ctl/ctl_cmd_table.c       Thu Jan  5 11:50:01 2017        
(r311433)
@@ -824,7 +824,7 @@ const struct ctl_cmd_entry ctl_cmd_table
                                           CTL_FLAG_DATA_IN |
                                           CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
  CTL_LUN_PAT_NONE,
- 12, {0x0d, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
+ 12, {0x0d, 0x80, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
 
 /* 0E */
 {NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},

Modified: stable/10/sys/cam/scsi/scsi_all.h
==============================================================================
--- stable/10/sys/cam/scsi/scsi_all.h   Thu Jan  5 11:49:07 2017        
(r311432)
+++ stable/10/sys/cam/scsi/scsi_all.h   Thu Jan  5 11:50:01 2017        
(r311433)
@@ -1479,6 +1479,10 @@ struct scsi_report_supported_opcodes_des
        uint8_t  flags;
 #define RSO_SERVACTV           0x01
 #define RSO_CTDP               0x02
+#define RSO_CDLP_MASK          0x0c
+#define RSO_CDLP_NO            0x00
+#define RSO_CDLP_A             0x04
+#define RSO_CDLP_B             0x08
        uint8_t  cdb_length[2];
        struct scsi_report_supported_opcodes_timeout timeout[0];
 };
@@ -1494,6 +1498,10 @@ struct scsi_report_supported_opcodes_one
        uint8_t  reserved;
        uint8_t  support;
 #define RSO_ONE_CTDP           0x80
+#define RSO_ONE_CDLP_MASK      0x18
+#define RSO_ONE_CDLP_NO                0x00
+#define RSO_ONE_CDLP_A         0x08
+#define RSO_ONE_CDLP_B         0x10
 #define RSO_ONE_SUP_MASK       0x07
 #define RSO_ONE_SUP_UNAVAIL    0x00
 #define RSO_ONE_SUP_NOT_SUP    0x01
@@ -1507,7 +1515,9 @@ struct scsi_report_supported_tmf
 {
        uint8_t  opcode;
        uint8_t  service_action;
-       uint8_t  reserved[4];
+       uint8_t  options;
+#define RST_REPD               0x80
+       uint8_t  reserved[3];
        uint8_t  length[4];
        uint8_t  reserved1;
        uint8_t  control;
@@ -1528,7 +1538,34 @@ struct scsi_report_supported_tmf_data
 #define RST_ITNRS              0x01
 #define RST_QTSS               0x02
 #define RST_QAES               0x04
-       uint8_t  reserved[2];
+       uint8_t  reserved;
+       uint8_t  length;
+};
+
+struct scsi_report_supported_tmf_ext_data
+{
+       uint8_t  byte1;
+       uint8_t  byte2;
+       uint8_t  reserved;
+       uint8_t  length;
+       uint8_t  byte5;
+#define RST_TMFTMOV            0x01
+       uint8_t  reserved2;
+       uint8_t  byte7;
+#define RST_WAKETS             0x01
+#define RST_TRTS               0x02
+#define RST_QTTS               0x04
+#define RST_LURTS              0x08
+#define RST_CTSTS              0x10
+#define RST_CACATS             0x20
+#define RST_ATSTS              0x40
+#define RST_ATTS               0x80
+       uint8_t  byte8;
+#define RST_ITNRTS             0x01
+#define RST_QTSTS              0x02
+#define RST_QAETS              0x04
+       uint8_t  long_timeout[4];
+       uint8_t  short_timeout[4];
 };
 
 struct scsi_report_timestamp
_______________________________________________
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