Print this page
8074 need to add FMA event for SSD wearout

Split Close
Expand all
Collapse all
          --- old/usr/src/lib/fm/libdiskstatus/common/ds_scsi.h
          +++ new/usr/src/lib/fm/libdiskstatus/common/ds_scsi.h
↓ open down ↓ 13 lines elided ↑ open up ↑
  14   14   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15   15   * If applicable, add the following below this CDDL HEADER, with the
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  /*
  22   22   * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
  23   23   * Use is subject to license terms.
       24 + * Copyright 2016 Nexenta Systems, Inc.  All rights reserved.
  24   25   */
  25   26  
  26   27  #ifndef _DS_SCSI_H
  27   28  #define _DS_SCSI_H
  28   29  
  29      -#pragma ident   "%Z%%M% %I%     %E% SMI"
  30      -
  31   30  #include <sys/types.h>
  32   31  #include <sys/byteorder.h>
  33   32  #include <sys/scsi/scsi.h>
  34   33  
  35   34  #include "ds_impl.h"
  36   35  
  37   36  #ifdef  __cplusplus
  38   37  extern "C" {
  39   38  #endif
  40   39  
↓ open down ↓ 2 lines elided ↑ open up ↑
  43   42  #endif
  44   43  
  45   44  /*
  46   45   * Log page structures
  47   46   */
  48   47  #pragma pack(1)
  49   48  
  50   49  typedef struct scsi_log_header {
  51   50  #if defined(_BIT_FIELDS_LTOH)
  52   51          uint8_t         lh_code : 6,
  53      -                        __reserved : 2;
       52 +                        lh_spf : 1,
       53 +                        lh_ds : 1;
  54   54  #else
  55      -        uint8_t         __reserved : 2,
       55 +        uint8_t         lh_ds : 1,
       56 +                        lh_spf : 1,
  56   57                          lh_code : 6;
  57   58  #endif
  58      -        uint8_t         __reserved2;
       59 +        uint8_t         lh_subpage;
  59   60          uint16_t        lh_length;
  60   61  } scsi_log_header_t;
  61   62  
  62   63  typedef struct scsi_log_parameter_header {
  63   64          uint16_t        lph_param;
  64   65  #if defined(_BIT_FIELDS_LTOH)
  65   66          uint8_t         lph_lp  : 1,
  66   67                          lph_lbin : 1,
  67   68                          lph_tmc : 2,
  68   69                          lph_etc : 1,
↓ open down ↓ 82 lines elided ↑ open up ↑
 151  152          ((code) <= SELFTEST_FAILURE_SEG_OTHER)))
 152  153  
 153  154  #define LOGPARAM_TEMP_CURTEMP           0x0000
 154  155  #define LOGPARAM_TEMP_REFTEMP           0x0001
 155  156  
 156  157  #define LOGPARAM_TEMP_LEN       \
 157  158          (sizeof (scsi_temp_log_param_t) - \
 158  159              sizeof (scsi_log_parameter_header_t))
 159  160  
 160  161  /*
      162 + * Described in SBC3
      163 + */
      164 +typedef struct scsi_ssm_log_param {
      165 +        scsi_log_parameter_header_t ssm_hdr;
      166 +        uint16_t                __reserved2;
      167 +        uint8_t                 __reserved1;
      168 +        uchar_t                 ssm_prcnt_used;
      169 +} scsi_ssm_log_param_t;
      170 +
      171 +#define LOGPARAM_PRCNT_USED             0x0001
      172 +#define LOGPARAM_PRCNT_USED_PARAM_LEN   0x04
      173 +#define PRCNT_USED_FAULT_THRSH          90
      174 +
      175 +/*
 161  176   * Mode sense/select page header information
 162  177   */
 163  178  typedef struct scsi_ms_header {
 164  179          struct mode_header      ms_header;
 165  180          struct block_descriptor ms_descriptor;
 166  181  } scsi_ms_header_t;
 167  182  
 168  183  typedef struct scsi_ms_header_g1 {
 169  184          struct mode_header_g1   ms_header;
 170  185          struct block_descriptor ms_descriptor;
↓ open down ↓ 100 lines elided ↑ open up ↑
 271  286   */
 272  287  #define PC_CUMULATIVE           (1 << 6)
 273  288  
 274  289  /*
 275  290   * LOG page codes
 276  291   */
 277  292  #define LOGPAGE_SUPP_LIST       0x00
 278  293  #define LOGPAGE_TEMP            0x0d
 279  294  #define LOGPAGE_SELFTEST        0x10
 280  295  #define LOGPAGE_IE              0x2f
      296 +/* Solid State Media log page code */
      297 +#define LOGPAGE_SSM             0x11
 281  298  
 282  299  /* ASC constants */
 283  300  #define ASC_INVALID_OPCODE                              0x20
 284  301  #define ASC_INVALID_CDB_FIELD                           0x24
 285  302  #define ASC_FAILURE_PREDICTION_THRESHOLD_EXCEEDED       0x5d
 286  303  
 287  304  /* ASCQ constants */
 288  305  #define ASCQ_INVALID_OPCODE     0
 289  306  
 290  307  /* Error tests */
↓ open down ↓ 9 lines elided ↑ open up ↑
 300  317  #define MODE_CMD_LEN_6                  1
 301  318  #define MODE_CMD_LEN_10                 2
 302  319  
 303  320  /* supported modepages bitmask */
 304  321  #define MODEPAGE_SUPP_IEC               0x1
 305  322  
 306  323  /* supported logpages bitmask */
 307  324  #define LOGPAGE_SUPP_IE                 0x1
 308  325  #define LOGPAGE_SUPP_TEMP               0x2
 309  326  #define LOGPAGE_SUPP_SELFTEST           0x4
      327 +#define LOGPAGE_SUPP_SSM                0x8
 310  328  
 311  329  #define MSG_BUFLEN      256
 312  330  
 313  331  /*
 314  332   * For SCSI commands which want to accept arbitrary length responses, we need to
 315  333   * allocate an appropriate sized buffer.  The maximum length is USHRT_MAX,
 316  334   * because some devices return nothing if the buffer length is too big.
 317  335   */
 318  336  #define MAX_BUFLEN(type)        (USHRT_MAX - sizeof (type))
 319  337  
 320  338  extern ds_transport_t ds_scsi_uscsi_transport;
 321  339  extern ds_transport_t ds_scsi_sim_transport;
 322  340  
 323  341  #ifdef  __cplusplus
 324  342  }
 325  343  #endif
 326  344  
 327  345  #endif  /* _DS_SCSI_H */
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX