Print this page
    
usr/src/common/zfs/zprop_common.c
    
      
        | Split | 
	Close | 
      
      | Expand all | 
      | Collapse all | 
    
    
          --- old/usr/src/uts/common/sys/scsi/targets/sddef.h
          +++ new/usr/src/uts/common/sys/scsi/targets/sddef.h
   1    1  /*
   2    2   * CDDL HEADER START
   3    3   *
   4    4   * The contents of this file are subject to the terms of the
   5    5   * Common Development and Distribution License (the "License").
   6    6   * You may not use this file except in compliance with the License.
   7    7   *
   8    8   * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9    9   * or http://www.opensolaris.org/os/licensing.
  10   10   * See the License for the specific language governing permissions
  
    | 
      ↓ open down ↓ | 
    10 lines elided | 
    
      ↑ open up ↑ | 
  
  11   11   * and limitations under the License.
  12   12   *
  13   13   * When distributing Covered Code, include this CDDL HEADER in each
  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   23   * Copyright (c) 1990, 2010, Oracle and/or its affiliates. All rights reserved.
  23   24   */
       25 +
  24   26  /*
  25   27   * Copyright 2011 cyril.galibern@opensvc.com
  26      - * Copyright 2015 Nexenta Systems, Inc.  All rights reserved.
       28 + * Copyright 2019 Nexenta Systems, Inc.
  27   29   */
  28   30  
  29   31  #ifndef _SYS_SCSI_TARGETS_SDDEF_H
  30   32  #define _SYS_SCSI_TARGETS_SDDEF_H
  31   33  
  32   34  #include <sys/dktp/fdisk.h>
  33   35  #include <sys/note.h>
  34   36  #include <sys/mhd.h>
  35   37  #include <sys/cmlb.h>
  36   38  
  37   39  #ifdef  __cplusplus
  38   40  extern "C" {
  39   41  #endif
  40   42  
  41      -
  42   43  #if defined(_KERNEL) || defined(_KMEMUSER)
  43   44  
  44      -
  45   45  #define SD_SUCCESS              0
  46   46  #define SD_FAILURE              (-1)
  47   47  
  48   48  #if defined(TRUE)
  49   49  #undef TRUE
  50   50  #endif
  51   51  
  52   52  #if defined(FALSE)
  53   53  #undef FALSE
  54   54  #endif
  55   55  
  56   56  #define TRUE                    1
  57   57  #define FALSE                   0
  58   58  
  59      -#if defined(VERBOSE)
  60      -#undef VERBOSE
  61      -#endif
  62      -
  63      -#if defined(SILENT)
  64      -#undef SILENT
  65      -#endif
  66      -
  67      -
  68   59  /*
  69      - *  Fault Injection Flag for Inclusion of Code
  70      - *
  71      - *  This should only be defined when SDDEBUG is defined
  72      - * #if DEBUG || lint
  73      - * #define      SD_FAULT_INJECTION
  74      - * #endif
       60 + * Fault Injection Flag for Inclusion of Code
  75   61   */
  76      -
  77   62  #if DEBUG || lint
  78   63  #define SD_FAULT_INJECTION
  79   64  #endif
  80      -#define VERBOSE                 1
  81      -#define SILENT                  0
  82   65  
  83   66  /*
  84   67   * Structures for recording whether a device is fully open or closed.
  85   68   * Assumptions:
  86   69   *
  87      - *      + There are only 8 (sparc) or 16 (x86) disk slices possible.
       70 + *      + There are only 16 disk slices possible.
  88   71   *      + BLK, MNT, CHR, SWP don't change in some future release!
  89   72   */
  90   73  
  91   74  #if defined(_SUNOS_VTOC_8)
  92   75  
  93   76  #define SDUNIT_SHIFT    3
  94   77  #define SDPART_MASK     7
  95   78  #define NSDMAP          NDKMAP
  96   79  
  97   80  #elif defined(_SUNOS_VTOC_16)
  98   81  
  99   82  /*
 100   83   * XXX - NSDMAP has multiple definitions, one more in cmlb_impl.h
 101   84   * If they are coalesced into one, this definition will follow suit.
 102   85   * FDISK partitions - 4 primary and MAX_EXT_PARTS number of Extended
 103   86   * Partitions.
 104   87   */
  
    | 
      ↓ open down ↓ | 
    7 lines elided | 
    
      ↑ open up ↑ | 
  
 105   88  #define FDISK_PARTS             (FD_NUMPART + MAX_EXT_PARTS)
 106   89  
 107   90  #define SDUNIT_SHIFT    6
 108   91  #define SDPART_MASK     63
 109   92  #define NSDMAP          (NDKMAP + FDISK_PARTS + 1)
 110   93  
 111   94  #else
 112   95  #error "No VTOC format defined."
 113   96  #endif
 114   97  
       98 +#define P0_RAW_DISK     (NDKMAP)
       99 +#define FDISK_P1        (NDKMAP+1)
      100 +#define FDISK_P2        (NDKMAP+2)
      101 +#define FDISK_P3        (NDKMAP+3)
      102 +#define FDISK_P4        (NDKMAP+4)
 115  103  
 116  104  #define SDUNIT(dev)     (getminor((dev)) >> SDUNIT_SHIFT)
 117  105  #define SDPART(dev)     (getminor((dev)) &  SDPART_MASK)
 118  106  
 119  107  /*
 120  108   * maximum number of partitions the driver keeps track of; with
 121  109   * EFI this can be larger than the number of partitions accessible
 122  110   * through the minor nodes.  It won't be used for keeping track
 123  111   * of open counts, partition kstats, etc.
 124  112   */
 125  113  #define MAXPART         (NSDMAP + 1)
 126  114  
 127  115  /*
 128  116   * Macro to retrieve the DDI instance number from the given buf struct.
 129  117   * The instance number is encoded in the minor device number.
 130  118   */
 131  119  #define SD_GET_INSTANCE_FROM_BUF(bp)                            \
 132  120          (getminor((bp)->b_edev) >> SDUNIT_SHIFT)
 133  121  
 134      -
 135      -
 136  122  struct ocinfo {
 137  123          /*
 138  124           * Types BLK, MNT, CHR, SWP,
 139  125           * assumed to be types 0-3.
 140  126           */
 141  127          uint64_t  lyr_open[NSDMAP];
 142  128          uint64_t  reg_open[OTYPCNT - 1];
 143  129  };
 144  130  
 145  131  #define OCSIZE  sizeof (struct ocinfo)
 146  132  
 147  133  union ocmap {
 148  134          uchar_t chkd[OCSIZE];
 149  135          struct ocinfo rinfo;
 150  136  };
 151  137  
 152  138  #define lyropen rinfo.lyr_open
 153  139  #define regopen rinfo.reg_open
 154  140  
 155      -
 156  141  #define SD_CDB_GROUP0           0
 157  142  #define SD_CDB_GROUP1           1
 158  143  #define SD_CDB_GROUP5           2
 159  144  #define SD_CDB_GROUP4           3
 160  145  
 161  146  struct sd_cdbinfo {
 162  147          uchar_t  sc_grpcode;    /* CDB group code */
 163  148          uchar_t  sc_grpmask;    /* CDB group code mask (for cmd opcode) */
 164  149          uint64_t sc_maxlba;     /* Maximum logical block addr. supported */
 165  150          uint32_t sc_maxlen;     /* Maximum transfer length supported */
 166  151  };
 167  152  
 168      -
 169      -
 170  153  /*
 171  154   * The following declaration are for Non-512 byte block support for the
 172  155   * removable devices. (ex - DVD RAM, MO).
 173  156   * wm_state: This is an enumeration for the different states for
 174  157   * manipalating write range list during the read-modify-write-operation.
 175  158   */
 176  159  typedef enum {
 177  160          SD_WM_CHK_LIST,         /* Check list for overlapping writes */
 178  161          SD_WM_WAIT_MAP,         /* Wait for an overlapping I/O to complete */
 179  162          SD_WM_LOCK_RANGE,       /* Lock the range of lba to be written */
 180  163          SD_WM_DONE              /* I/O complete */
 181  164  } wm_state;
 182  165  
 183  166  /*
 184  167   * sd_w_map: Every write I/O will get one w_map allocated for it which will tell
 185  168   * the range on the media which is being written for that request.
 186  169   */
 187  170  struct sd_w_map {
 188  171          uint_t          wm_start;       /* Write start location */
  
    | 
      ↓ open down ↓ | 
    9 lines elided | 
    
      ↑ open up ↑ | 
  
 189  172          uint_t          wm_end;         /* Write end location */
 190  173          ushort_t        wm_flags;       /* State of the wmap */
 191  174          ushort_t        wm_wanted_count; /* # of threads waiting for region */
 192  175          void            *wm_private;    /* Used to store bp->b_private */
 193  176          struct buf      *wm_bufp;       /* to store buf pointer */
 194  177          struct sd_w_map *wm_next;       /* Forward pointed to sd_w_map */
 195  178          struct sd_w_map *wm_prev;       /* Back pointer to sd_w_map */
 196  179          kcondvar_t      wm_avail;       /* Sleep on this, while not available */
 197  180  };
 198  181  
 199      -_NOTE(MUTEX_PROTECTS_DATA(scsi_device::sd_mutex, sd_w_map::wm_flags))
 200      -
 201      -
 202  182  /*
 203  183   * This is the struct for the layer-private data area for the
 204  184   * mapblocksize layer.
 205  185   */
 206  186  
 207  187  struct sd_mapblocksize_info {
 208  188          void            *mbs_oprivate;  /* saved value of xb_private */
 209  189          struct buf      *mbs_orig_bp;   /* ptr to original bp */
 210  190          struct sd_w_map *mbs_wmp;       /* ptr to write-map struct for RMW */
 211  191          ssize_t         mbs_copy_offset;
 212  192          int             mbs_layer_index;        /* chain index for RMW */
 213  193  };
 214  194  
 215      -_NOTE(SCHEME_PROTECTS_DATA("unshared data", sd_mapblocksize_info))
      195 +/*
      196 + * Latency is tracked in usec and is quantized by power of two starting at
      197 + * offset SD_LAT_MIN_USEC_SHIFT. Values below that offset will go in the first
      198 + * (0th) bucket. Similar, values above SD_LAT_MAX_USEC_SHIFT go in the
      199 + * (SD_LAT_MAX_USEC_SHIFT - 1) bucket.
      200 + *
      201 + * From observations, using SAS SSDs and rotational drives these values are
      202 + * sufficient for now.
      203 + */
 216  204  
      205 +#define SD_LAT_MIN_USEC_SHIFT 4
      206 +#define SD_LAT_MAX_USEC_SHIFT 24
      207 +#define SD_LAT_BUCKET_MAX (SD_LAT_MAX_USEC_SHIFT - SD_LAT_MIN_USEC_SHIFT)
 217  208  
      209 +typedef struct un_lat_stat {
      210 +        hrtime_t l_sum;                                 /* total latency  */
      211 +        uint64_t l_nrequest;                            /* number of requests */
      212 +        uint64_t l_histogram[SD_LAT_BUCKET_MAX];        /* latency histogram */
      213 +} un_lat_stat_t;
      214 +
      215 +/* Thin-provisioning (UNMAP) flags for un_thin_flags. */
      216 +enum {
      217 +        SD_THIN_PROV_ENABLED =          1 << 0, /* UNMAP available */
      218 +        SD_THIN_PROV_READ_ZEROS =       1 << 1  /* unmapped blk = zeros */
      219 +};
      220 +
 218  221  /*
      222 + * Device limits as read from the Block Limits VPD page (0xB0). If the page
      223 + * is unavailable, will be filled with some defaults.
      224 + */
      225 +typedef struct sd_blk_limits_s {
      226 +        uint16_t        lim_opt_xfer_len_gran;
      227 +        uint32_t        lim_max_xfer_len;
      228 +        uint32_t        lim_opt_xfer_len;
      229 +        uint32_t        lim_max_pfetch_len;
      230 +        uint32_t        lim_max_unmap_lba_cnt;
      231 +        uint32_t        lim_max_unmap_descr_cnt;
      232 +        uint32_t        lim_opt_unmap_gran;
      233 +        uint32_t        lim_unmap_gran_align;
      234 +        uint64_t        lim_max_write_same_len;
      235 +} sd_blk_limits_t;
      236 +
      237 +typedef struct sd_unmapstats {
      238 +        kstat_named_t   us_cmds;
      239 +        kstat_named_t   us_errs;
      240 +        kstat_named_t   us_extents;
      241 +        kstat_named_t   us_bytes;
      242 +} sd_unmapstats_t;
      243 +
      244 +/*
 219  245   * sd_lun: The main data structure for a scsi logical unit.
 220  246   * Stored as the softstate structure for each device.
 221  247   */
 222  248  
 223  249  struct sd_lun {
 224  250  
 225  251          /* Back ptr to the SCSA scsi_device struct for this LUN */
 226  252          struct scsi_device      *un_sd;
 227  253  
 228  254          /*
 229  255           * Support for Auto-Request sense capability
 230  256           */
 231  257          struct buf      *un_rqs_bp;     /* ptr to request sense bp */
 232  258          struct scsi_pkt *un_rqs_pktp;   /* ptr to request sense scsi_pkt */
 233  259          int     un_sense_isbusy;        /* Busy flag for RQS buf */
 234  260  
 235  261          /*
 236  262           * These specify the layering chains to use with this instance. These
 237  263           * are initialized according to the values in the sd_chain_index_map[]
 238  264           * array. See the description of sd_chain_index_map[] for details.
 239  265           */
 240  266          int un_buf_chain_type;
 241  267          int un_uscsi_chain_type;
 242  268          int un_direct_chain_type;
 243  269          int un_priority_chain_type;
 244  270  
 245  271          /* Head & tail ptrs to the queue of bufs awaiting transport */
 246  272          struct buf      *un_waitq_headp;
 247  273          struct buf      *un_waitq_tailp;
 248  274  
 249  275          /* Ptr to the buf currently being retried (NULL if none) */
 250  276          struct buf      *un_retry_bp;
 251  277  
 252  278          /* This tracks the last kstat update for the un_retry_bp buf */
 253  279          void            (*un_retry_statp)(kstat_io_t *);
 254  280  
 255  281          void            *un_xbuf_attr;  /* xbuf attribute struct */
 256  282  
 257  283  
 258  284          /* System logical block size, in bytes. (defaults to DEV_BSIZE.) */
 259  285          uint32_t        un_sys_blocksize;
 260  286  
 261  287          /* The size of a logical block on the target, in bytes. */
 262  288          uint32_t        un_tgt_blocksize;
 263  289  
 264  290          /* The size of a physical block on the target, in bytes. */
 265  291          uint32_t        un_phy_blocksize;
 266  292  
 267  293          /*
  
    | 
      ↓ open down ↓ | 
    39 lines elided | 
    
      ↑ open up ↑ | 
  
 268  294           * The number of logical blocks on the target. This is adjusted
 269  295           * to be in terms of the block size specified by un_sys_blocksize
 270  296           * (ie, the system block size).
 271  297           */
 272  298          uint64_t        un_blockcount;
 273  299  
 274  300          /*
 275  301           * Various configuration data
 276  302           */
 277  303          uchar_t un_ctype;               /* Controller type */
 278      -        char    *un_node_type;          /* minor node type */
      304 +        char    *un_node_type;          /* minor node type */
 279  305          uchar_t un_interconnect_type;   /* Interconnect for underlying HBA */
 280  306  
 281  307          uint_t  un_notready_retry_count; /* Per disk notready retry count */
 282  308          uint_t  un_busy_retry_count;    /* Per disk BUSY retry count */
 283  309  
 284  310          uint_t  un_retry_count;         /* Per disk retry count */
 285  311          uint_t  un_victim_retry_count;  /* Per disk victim retry count */
 286  312  
 287      -        /* (4356701, 4367306) */
 288  313          uint_t  un_reset_retry_count; /* max io retries before issuing reset */
 289  314          ushort_t un_reserve_release_time; /* reservation release timeout */
 290  315  
 291  316          uchar_t un_reservation_type;    /* SCSI-3 or SCSI-2 */
 292  317          uint_t  un_max_xfer_size;       /* Maximum DMA transfer size */
 293  318          int     un_partial_dma_supported;
 294  319          int     un_buf_breakup_supported;
 295  320  
 296  321          int     un_mincdb;              /* Smallest CDB to use */
 297  322          int     un_maxcdb;              /* Largest CDB to use */
 298  323          int     un_max_hba_cdb;         /* Largest CDB supported by HBA */
 299  324          int     un_status_len;
 300  325          int     un_pkt_flags;
 301  326  
 302  327          /*
 303  328           * Note: un_uscsi_timeout is a "mirror" of un_cmd_timeout, adjusted
 304  329           * for ISCD().  Any updates to un_cmd_timeout MUST be reflected
 305  330           * in un_uscsi_timeout as well!
 306  331           */
 307  332          ushort_t un_cmd_timeout;        /* Timeout for completion */
 308  333          ushort_t un_uscsi_timeout;      /* Timeout for USCSI completion */
 309  334          ushort_t un_busy_timeout;       /* Timeout for busy retry */
 310  335  
 311  336          /*
 312  337           * Info on current states, statuses, etc. (Updated frequently)
 313  338           */
 314  339          uchar_t un_state;               /* current state */
 315  340          uchar_t un_last_state;          /* last state */
 316  341          uchar_t un_last_pkt_reason;     /* used to suppress multiple msgs */
 317  342          int     un_tagflags;            /* Pkt Flags for Tagged Queueing  */
 318  343          short   un_resvd_status;        /* Reservation Status */
 319  344          ulong_t un_detach_count;        /* !0 if executing detach routine */
 320  345          ulong_t un_layer_count;         /* Current total # of layered opens */
 321  346          ulong_t un_opens_in_progress;   /* Current # of threads in sdopen */
 322  347  
 323  348          ksema_t un_semoclose;           /* serialize opens/closes */
 324  349  
 325  350          /*
 326  351           * Control & status info for command throttling
 327  352           */
 328  353          long    un_ncmds_in_driver;     /* number of cmds in driver */
 329  354          short   un_ncmds_in_transport;  /* number of cmds in transport */
 330  355          short   un_throttle;            /* max #cmds allowed in transport */
 331  356          short   un_saved_throttle;      /* saved value of un_throttle */
 332  357          short   un_busy_throttle;       /* saved un_throttle for BUSY */
 333  358          short   un_min_throttle;        /* min value of un_throttle */
 334  359          timeout_id_t    un_reset_throttle_timeid; /* timeout(9F) handle */
 335  360  
 336  361          /*
 337  362           * Multi-host (clustering) support
 338  363           */
 339  364          opaque_t        un_mhd_token;           /* scsi watch request */
 340  365          timeout_id_t    un_resvd_timeid;        /* for resvd recover */
 341  366  
 342  367          /* Event callback resources (photon) */
 343  368          ddi_eventcookie_t un_insert_event;      /* insert event */
 344  369          ddi_callback_id_t un_insert_cb_id;      /* insert callback */
 345  370          ddi_eventcookie_t un_remove_event;      /* remove event */
 346  371          ddi_callback_id_t un_remove_cb_id;      /* remove callback */
 347  372  
 348  373          uint_t          un_start_stop_cycle_page;       /* Saves start/stop */
  
    | 
      ↓ open down ↓ | 
    51 lines elided | 
    
      ↑ open up ↑ | 
  
 349  374                                                          /* cycle page */
 350  375          timeout_id_t    un_dcvb_timeid;         /* dlyd cv broadcast */
 351  376  
 352  377          /*
 353  378           * Data structures for open counts, partition info, VTOC,
 354  379           * stats, and other such bookkeeping info.
 355  380           */
 356  381          union   ocmap   un_ocmap;               /* open partition map */
 357  382          struct  kstat   *un_pstats[NSDMAP];     /* partition statistics */
 358  383          struct  kstat   *un_stats;              /* disk statistics */
      384 +        sd_unmapstats_t *un_unmapstats;         /* UNMAP stats structure */
      385 +        struct  kstat   *un_unmapstats_ks;      /* UNMAP kstat */
 359  386          kstat_t         *un_errstats;           /* for error statistics */
      387 +        kstat_t         *un_lat_ksp;            /* pointer to the raw kstat */
      388 +        un_lat_stat_t   *un_lat_stats;          /* data from the above kstat */
 360  389          uint64_t        un_exclopen;            /* exclusive open bitmask */
 361  390          ddi_devid_t     un_devid;               /* device id */
 362  391          uint_t          un_vpd_page_mask;       /* Supported VPD pages */
 363  392  
 364  393          /*
 365  394           * Bit fields for various configuration/state/status info.
 366  395           * Comments indicate the condition if the value of the
 367  396           * variable is TRUE (nonzero).
 368  397           */
 369  398          uint32_t
 370  399              un_f_arq_enabled            :1,     /* Auto request sense is */
 371  400                                                  /* currently enabled */
 372  401              un_f_blockcount_is_valid    :1,     /* The un_blockcount */
 373  402                                                  /* value is currently valid */
 374  403              un_f_tgt_blocksize_is_valid :1,     /* The un_tgt_blocksize */
 375  404                                                  /* value is currently valid */
 376  405              un_f_allow_bus_device_reset :1,     /* Driver may issue a BDR as */
 377  406                                                  /* a part of error recovery. */
 378  407              un_f_is_fibre               :1,     /* The device supports fibre */
 379  408                                                  /* channel */
 380  409              un_f_sync_cache_supported   :1,     /* sync cache cmd supported */
 381  410                                                  /* supported */
 382  411              un_f_format_in_progress     :1,     /* The device is currently */
 383  412                                                  /* executing a FORMAT cmd. */
 384  413              un_f_opt_queueing           :1,     /* Enable Command Queuing to */
 385  414                                                  /* Host Adapter */
 386  415              un_f_opt_fab_devid          :1,     /* Disk has no valid/unique */
 387  416                                                  /* serial number.  */
 388  417              un_f_opt_disable_cache      :1,     /* Read/Write disk cache is */
 389  418                                                  /* disabled.  */
 390  419              un_f_cfg_is_atapi           :1,     /* This is an ATAPI device.  */
 391  420              un_f_write_cache_enabled    :1,     /* device return success on */
 392  421                                                  /* writes before transfer to */
 393  422                                                  /* physical media complete */
 394  423              un_f_cfg_playmsf_bcd        :1,     /* Play Audio, BCD params. */
  
    | 
      ↓ open down ↓ | 
    25 lines elided | 
    
      ↑ open up ↑ | 
  
 395  424              un_f_cfg_readsub_bcd        :1,     /* READ SUBCHANNEL BCD resp. */
 396  425              un_f_cfg_read_toc_trk_bcd   :1,     /* track # is BCD */
 397  426              un_f_cfg_read_toc_addr_bcd  :1,     /* address is BCD */
 398  427              un_f_cfg_no_read_header     :1,     /* READ HEADER not supported */
 399  428              un_f_cfg_read_cd_xd4        :1,     /* READ CD opcode is 0xd4 */
 400  429              un_f_mmc_cap                :1,     /* Device is MMC compliant */
 401  430              un_f_mmc_writable_media     :1,     /* writable media in device */
 402  431              un_f_dvdram_writable_device :1,     /* DVDRAM device is writable */
 403  432              un_f_cfg_cdda               :1,     /* READ CDDA supported */
 404  433              un_f_cfg_tur_check          :1,     /* verify un_ncmds before tur */
 405      -
 406  434              un_f_use_adaptive_throttle  :1,     /* enable/disable adaptive */
 407  435                                                  /* throttling */
 408  436              un_f_pm_is_enabled          :1,     /* PM is enabled on this */
 409  437                                                  /* instance */
 410  438              un_f_watcht_stopped         :1,     /* media watch thread flag */
 411  439              un_f_pkstats_enabled        :1,     /* Flag to determine if */
 412  440                                                  /* partition kstats are */
 413  441                                                  /* enabled. */
 414  442              un_f_disksort_disabled      :1,     /* Flag to disable disksort */
 415  443              un_f_lun_reset_enabled      :1,     /* Set if target supports */
 416  444                                                  /* SCSI Logical Unit Reset */
 417  445              un_f_doorlock_supported     :1,     /* Device supports Doorlock */
 418  446              un_f_start_stop_supported   :1,     /* device has motor */
 419      -            un_f_reserved1              :1;
      447 +            un_f_sdconf_phy_blocksize   :1;     /* take pbs from sd.conf */
 420  448  
 421  449          uint32_t
 422  450              un_f_mboot_supported        :1,     /* mboot supported */
 423  451              un_f_is_hotpluggable        :1,     /* hotpluggable */
 424  452              un_f_has_removable_media    :1,     /* has removable media */
 425  453              un_f_non_devbsize_supported :1,     /* non-512 blocksize */
 426  454              un_f_devid_supported        :1,     /* device ID supported */
 427  455              un_f_eject_media_supported  :1,     /* media can be ejected */
 428  456              un_f_chk_wp_open            :1,     /* check if write-protected */
 429  457                                                  /* when being opened */
 430  458              un_f_descr_format_supported :1,     /* support descriptor format */
  
    | 
      ↓ open down ↓ | 
    1 lines elided | 
    
      ↑ open up ↑ | 
  
 431  459                                                  /* for sense data */
 432  460              un_f_check_start_stop       :1,     /* needs to check if */
 433  461                                                  /* START-STOP command is */
 434  462                                                  /* supported by hardware */
 435  463                                                  /* before issuing it */
 436  464              un_f_monitor_media_state    :1,     /* need a watch thread to */
 437  465                                                  /* monitor device state */
 438  466              un_f_attach_spinup          :1,     /* spin up once the */
 439  467                                                  /* device is attached */
 440  468              un_f_log_sense_supported    :1,     /* support log sense */
 441      -            un_f_pm_supported           :1,     /* support power-management */
      469 +            un_f_pm_supported           :1,     /* support power-management */
 442  470              un_f_cfg_is_lsi             :1,     /* Is LSI device, */
 443  471                                                  /* default to NO */
 444  472              un_f_wcc_inprog             :1,     /* write cache change in */
 445  473                                                  /* progress */
 446  474              un_f_ejecting               :1,     /* media is ejecting */
 447  475              un_f_suppress_cache_flush   :1,     /* supress flush on */
 448  476                                                  /* write cache */
 449  477              un_f_sync_nv_supported      :1,     /* SYNC_NV */
 450  478                                                  /* bit is supported */
 451  479              un_f_sync_cache_required    :1,     /* flag to check if */
 452  480                                                  /* SYNC CACHE needs to be */
 453  481                                                  /* sent in sdclose */
 454  482              un_f_devid_transport_defined :1,    /* devid defined by transport */
 455  483              un_f_rmw_type                :2,    /* RMW type */
 456  484              un_f_power_condition_disabled :1,   /* power condition disabled */
 457  485                                                  /* through sd configuration */
 458  486              un_f_power_condition_supported :1,  /* support power condition */
  
    | 
      ↓ open down ↓ | 
    7 lines elided | 
    
      ↑ open up ↑ | 
  
 459  487                                                  /* field by hardware */
 460  488              un_f_pm_log_sense_smart     :1,     /* log sense support SMART */
 461  489                                                  /* feature attribute */
 462  490              un_f_is_solid_state         :1,     /* has solid state media */
 463  491              un_f_is_rotational          :1,     /* spinning rust */
 464  492              un_f_mmc_gesn_polling       :1,     /* use GET EVENT STATUS */
 465  493                                                  /* NOTIFICATION for polling */
 466  494              un_f_enable_rmw             :1,     /* Force RMW in sd driver */
 467  495              un_f_expnevent              :1,
 468  496              un_f_cache_mode_changeable  :1,     /* can change cache mode */
 469      -            un_f_reserved               :1;
      497 +            un_f_detach_waiting         :1;
 470  498  
 471  499          /* Ptr to table of strings for ASC/ASCQ error message printing */
 472  500          struct scsi_asq_key_strings     *un_additional_codes;
 473  501  
      502 +        kcondvar_t      un_detach_cv;
 474  503          /*
 475  504           * Power Management support.
 476  505           *
 477  506           * un_pm_mutex protects, un_pm_count, un_pm_timeid, un_pm_busy,
 478  507           * un_pm_busy_cv, and un_pm_idle_timeid.
 479  508           * It's not required that SD_MUTEX be acquired before acquiring
 480  509           * un_pm_mutex, however if they must both be held
 481  510           * then acquire SD_MUTEX first.
 482  511           *
 483  512           * un_pm_count is used to indicate PM state as follows:
 484  513           *      less than 0 the device is powered down,
 485  514           *      transition from 0 ==> 1, mark the device as busy via DDI
 486  515           *      transition from 1 ==> 0, mark the device as idle via DDI
 487  516           */
 488  517          kmutex_t        un_pm_mutex;
 489  518          int             un_pm_count;            /* indicates pm state */
 490  519          timeout_id_t    un_pm_timeid;           /* timeout id for pm */
 491  520          uint_t          un_pm_busy;
 492  521          kcondvar_t      un_pm_busy_cv;
 493  522          short           un_power_level;         /* Power Level */
 494  523          uchar_t         un_save_state;
 495  524          kcondvar_t      un_suspend_cv;          /* power management */
 496  525          kcondvar_t      un_disk_busy_cv;        /* wait for IO completion */
 497  526  
 498  527          /* Resources used for media change callback support */
 499  528          kcondvar_t      un_state_cv;            /* Cond Var on mediastate */
 500  529          enum dkio_state un_mediastate;          /* current media state */
  
    | 
      ↓ open down ↓ | 
    17 lines elided | 
    
      ↑ open up ↑ | 
  
 501  530          enum dkio_state un_specified_mediastate; /* expected state */
 502  531          opaque_t        un_swr_token;           /* scsi_watch request token */
 503  532  
 504  533          /* Non-512 byte block support */
 505  534          struct kmem_cache *un_wm_cache; /* fast alloc in non-512 write case */
 506  535          uint_t          un_rmw_count;   /* count of read-modify-writes */
 507  536          struct sd_w_map *un_wm;         /* head of sd_w_map chain */
 508  537          uint64_t        un_rmw_incre_count;     /* count I/O */
 509  538          timeout_id_t    un_rmw_msg_timeid;      /* for RMW message control */
 510  539  
      540 +        /* Thin provisioning support (see SD_THIN_PROV_*) */
      541 +        uint64_t        un_thin_flags;
      542 +
      543 +        /* Block limits (0xB0 VPD page) */
      544 +        sd_blk_limits_t un_blk_lim;
      545 +
 511  546          /* For timeout callback to issue a START STOP UNIT command */
 512  547          timeout_id_t    un_startstop_timeid;
 513  548  
 514  549          /* Timeout callback handle for SD_PATH_DIRECT_PRIORITY cmd restarts */
 515  550          timeout_id_t    un_direct_priority_timeid;
 516  551  
 517  552          /* TRAN_FATAL_ERROR count. Cleared by TRAN_ACCEPT from scsi_transport */
 518  553          ulong_t         un_tran_fatal_count;
 519  554  
 520  555          timeout_id_t    un_retry_timeid;
 521  556  
  
    | 
      ↓ open down ↓ | 
    1 lines elided | 
    
      ↑ open up ↑ | 
  
 522  557          hrtime_t        un_pm_idle_time;
 523  558          timeout_id_t    un_pm_idle_timeid;
 524  559  
 525  560          /*
 526  561           * Count to determine if a Sonoma controller is in the process of
 527  562           * failing over, and how many I/O's are failed with the 05/94/01
 528  563           * sense code.
 529  564           */
 530  565          uint_t          un_sonoma_failure_count;
 531  566  
      567 +        int             un_io_time;
      568 +        hrtime_t        un_slow_io_threshold;
      569 +
 532  570          /*
 533  571           * Support for failfast operation.
 534  572           */
 535  573          struct buf      *un_failfast_bp;
 536  574          struct buf      *un_failfast_headp;
 537  575          struct buf      *un_failfast_tailp;
 538  576          uint32_t        un_failfast_state;
 539  577          /* Callback routine active counter */
 540  578          short           un_in_callback;
 541  579  
 542  580          kcondvar_t      un_wcc_cv;      /* synchronize changes to */
 543  581                                          /* un_f_write_cache_enabled */
 544  582  
 545  583  #ifdef SD_FAULT_INJECTION
 546      -        /* SD Fault Injection */
 547  584  #define SD_FI_MAX_BUF 65536
 548  585  #define SD_FI_MAX_ERROR 1024
 549  586          kmutex_t                        un_fi_mutex;
 550  587          uint_t                          sd_fi_buf_len;
 551  588          char                            sd_fi_log[SD_FI_MAX_BUF];
 552  589          struct sd_fi_pkt        *sd_fi_fifo_pkt[SD_FI_MAX_ERROR];
 553  590          struct sd_fi_xb         *sd_fi_fifo_xb[SD_FI_MAX_ERROR];
 554  591          struct sd_fi_un         *sd_fi_fifo_un[SD_FI_MAX_ERROR];
 555  592          struct sd_fi_arq        *sd_fi_fifo_arq[SD_FI_MAX_ERROR];
      593 +        struct sd_fi_tran       *sd_fi_fifo_tran[SD_FI_MAX_ERROR];
 556  594          uint_t                          sd_fi_fifo_start;
 557  595          uint_t                          sd_fi_fifo_end;
 558  596          uint_t                          sd_injection_mask;
 559      -
 560  597  #endif
 561  598  
 562  599          cmlb_handle_t   un_cmlbhandle;
 563  600  
 564  601          /*
 565  602           * Pointer to internal struct sd_fm_internal in which
 566  603           * will pass necessary information for FMA ereport posting.
 567  604           */
 568  605          void            *un_fm_private;
 569  606  };
 570  607  
 571  608  #define SD_IS_VALID_LABEL(un)  (cmlb_is_valid(un->un_cmlbhandle))
 572  609  
 573  610  /*
 574  611   * Macros for conversions between "target" and "system" block sizes, and
 575  612   * for conversion between block counts and byte counts.  As used here,
 576  613   * "system" block size refers to the block size used by the kernel/
 577  614   * filesystem (this includes the disk label). The "target" block size
 578  615   * is the block size returned by the SCSI READ CAPACITY command.
 579  616   *
 580  617   * Note: These macros will round up to the next largest blocksize to accomodate
 581  618   * the number of blocks specified.
 582  619   */
 583  620  
 584  621  /* Convert a byte count to a number of target blocks */
 585  622  #define SD_BYTES2TGTBLOCKS(un, bytecount)                               \
 586  623          ((bytecount + (un->un_tgt_blocksize - 1))/un->un_tgt_blocksize)
 587  624  
 588  625  /* Convert a byte count to a number of physical blocks */
 589  626  #define SD_BYTES2PHYBLOCKS(un, bytecount)                               \
 590  627          ((bytecount + (un->un_phy_blocksize - 1))/un->un_phy_blocksize)
 591  628  
 592  629  /* Convert a target block count to a number of bytes */
 593  630  #define SD_TGTBLOCKS2BYTES(un, blockcount)                              \
 594  631          (blockcount * (un)->un_tgt_blocksize)
 595  632  
 596  633  /* Convert a byte count to a number of system blocks */
 597  634  #define SD_BYTES2SYSBLOCKS(bytecount)                           \
 598  635          ((bytecount + (DEV_BSIZE - 1))/DEV_BSIZE)
 599  636  
 600  637  /* Convert a system block count to a number of bytes */
 601  638  #define SD_SYSBLOCKS2BYTES(blockcount)                          \
 602  639          (blockcount * DEV_BSIZE)
 603  640  
 604  641  /*
 605  642   * Calculate the number of bytes needed to hold the requested number of bytes
 606  643   * based upon the native target sector/block size
 607  644   */
 608  645  #define SD_REQBYTES2TGTBYTES(un, bytecount)                             \
 609  646          (SD_BYTES2TGTBLOCKS(un, bytecount) * (un)->un_tgt_blocksize)
 610  647  
 611  648  /*
 612  649   * Calculate the byte offset from the beginning of the target block
 613  650   * to the system block location.
 614  651   */
 615  652  #define SD_TGTBYTEOFFSET(un, sysblk, tgtblk)                            \
 616  653          (SD_SYSBLOCKS2BYTES(sysblk) - SD_TGTBLOCKS2BYTES(un, tgtblk))
 617  654  
 618  655  /*
 619  656   * Calculate the target block location from the system block location
 620  657   */
 621  658  #define SD_SYS2TGTBLOCK(un, blockcnt)                                   \
 622  659          (blockcnt / ((un)->un_tgt_blocksize / DEV_BSIZE))
 623  660  
 624  661  /*
  
    | 
      ↓ open down ↓ | 
    55 lines elided | 
    
      ↑ open up ↑ | 
  
 625  662   * Calculate the target block location from the system block location
 626  663   */
 627  664  #define SD_TGT2SYSBLOCK(un, blockcnt)                                   \
 628  665          (blockcnt * ((un)->un_tgt_blocksize / DEV_BSIZE))
 629  666  
 630  667  /*
 631  668   * SD_DEFAULT_MAX_XFER_SIZE is the default value to bound the max xfer
 632  669   * for physio, for devices without tagged queuing enabled.
 633  670   * The default for devices with tagged queuing enabled is SD_MAX_XFER_SIZE
 634  671   */
 635      -#if defined(__i386) || defined(__amd64)
 636  672  #define SD_DEFAULT_MAX_XFER_SIZE        (256 * 1024)
 637      -#endif
 638  673  #define SD_MAX_XFER_SIZE                (1024 * 1024)
 639  674  
 640  675  /*
 641      - * Warlock annotations
 642      - */
 643      -_NOTE(MUTEX_PROTECTS_DATA(scsi_device::sd_mutex, sd_lun))
 644      -_NOTE(READ_ONLY_DATA(sd_lun::un_sd))
 645      -_NOTE(DATA_READABLE_WITHOUT_LOCK(sd_lun::un_reservation_type))
 646      -_NOTE(DATA_READABLE_WITHOUT_LOCK(sd_lun::un_mincdb))
 647      -_NOTE(DATA_READABLE_WITHOUT_LOCK(sd_lun::un_maxcdb))
 648      -_NOTE(DATA_READABLE_WITHOUT_LOCK(sd_lun::un_max_hba_cdb))
 649      -_NOTE(DATA_READABLE_WITHOUT_LOCK(sd_lun::un_status_len))
 650      -_NOTE(DATA_READABLE_WITHOUT_LOCK(sd_lun::un_f_arq_enabled))
 651      -_NOTE(DATA_READABLE_WITHOUT_LOCK(sd_lun::un_ctype))
 652      -_NOTE(DATA_READABLE_WITHOUT_LOCK(sd_lun::un_cmlbhandle))
 653      -_NOTE(DATA_READABLE_WITHOUT_LOCK(sd_lun::un_fm_private))
 654      -
 655      -
 656      -_NOTE(SCHEME_PROTECTS_DATA("safe sharing",
 657      -        sd_lun::un_mhd_token
 658      -        sd_lun::un_state
 659      -        sd_lun::un_tagflags
 660      -        sd_lun::un_f_format_in_progress
 661      -        sd_lun::un_resvd_timeid
 662      -        sd_lun::un_reset_throttle_timeid
 663      -        sd_lun::un_startstop_timeid
 664      -        sd_lun::un_dcvb_timeid
 665      -        sd_lun::un_f_allow_bus_device_reset
 666      -        sd_lun::un_sys_blocksize
 667      -        sd_lun::un_tgt_blocksize
 668      -        sd_lun::un_phy_blocksize
 669      -        sd_lun::un_additional_codes))
 670      -
 671      -_NOTE(SCHEME_PROTECTS_DATA("stable data",
 672      -        sd_lun::un_reserve_release_time
 673      -        sd_lun::un_max_xfer_size
 674      -        sd_lun::un_partial_dma_supported
 675      -        sd_lun::un_buf_breakup_supported
 676      -        sd_lun::un_f_is_fibre
 677      -        sd_lun::un_node_type
 678      -        sd_lun::un_buf_chain_type
 679      -        sd_lun::un_uscsi_chain_type
 680      -        sd_lun::un_direct_chain_type
 681      -        sd_lun::un_priority_chain_type
 682      -        sd_lun::un_xbuf_attr
 683      -        sd_lun::un_cmd_timeout
 684      -        sd_lun::un_pkt_flags))
 685      -
 686      -_NOTE(SCHEME_PROTECTS_DATA("Unshared data",
 687      -        block_descriptor
 688      -        buf
 689      -        cdrom_subchnl
 690      -        cdrom_tocentry
 691      -        cdrom_tochdr
 692      -        cdrom_read
 693      -        dk_cinfo
 694      -        dk_devid
 695      -        dk_label
 696      -        dk_map
 697      -        dk_temperature
 698      -        mhioc_inkeys
 699      -        mhioc_inresvs
 700      -        mode_caching
 701      -        mode_header
 702      -        mode_speed
 703      -        scsi_cdb
 704      -        scsi_arq_status
 705      -        scsi_extended_sense
 706      -        scsi_inquiry
 707      -        scsi_pkt
 708      -        uio
 709      -        uscsi_cmd))
 710      -
 711      -
 712      -_NOTE(SCHEME_PROTECTS_DATA("stable data", scsi_device dk_cinfo))
 713      -_NOTE(SCHEME_PROTECTS_DATA("unique per pkt", scsi_status scsi_cdb))
 714      -
 715      -_NOTE(MUTEX_PROTECTS_DATA(sd_lun::un_pm_mutex, sd_lun::un_pm_count
 716      -        sd_lun::un_pm_timeid sd_lun::un_pm_busy sd_lun::un_pm_busy_cv
 717      -        sd_lun::un_pm_idle_timeid))
 718      -
 719      -#ifdef SD_FAULT_INJECTION
 720      -_NOTE(MUTEX_PROTECTS_DATA(sd_lun::un_fi_mutex,
 721      -        sd_lun::sd_fi_buf_len sd_lun::sd_fi_log))
 722      -#endif
 723      -
 724      -/* _NOTE(LOCK_ORDER(sd_lun::un_sd.sd_mutex sd_lun::un_pm_mutex)) */
 725      -
 726      -
 727      -
 728      -/*
 729  676   * Referenced for frequently-accessed members of the unit structure
 730  677   */
 731  678  #define SD_SCSI_DEVP(un)        ((un)->un_sd)
 732  679  #define SD_DEVINFO(un)          ((un)->un_sd->sd_dev)
 733  680  #define SD_INQUIRY(un)          ((un)->un_sd->sd_inq)
 734  681  #define SD_MUTEX(un)            (&((un)->un_sd->sd_mutex))
 735  682  #define SD_ADDRESS(un)          (&((un)->un_sd->sd_address))
 736  683  #define SD_GET_DEV(un)          (sd_make_device(SD_DEVINFO(un)))
 737  684  #define SD_FM_LOG(un)           (((struct sd_fm_internal *)\
 738  685                                  ((un)->un_fm_private))->fm_log_level)
 739  686  
 740      -
 741  687  /*
 742  688   * Values for un_ctype
 743  689   */
 744  690  #define CTYPE_CDROM             0
 745  691  #define CTYPE_MD21              1       /* Obsolete! */
 746  692  #define CTYPE_CCS               2
 747  693  #define CTYPE_ROD               3
 748  694  #define CTYPE_PXRE              4       /* Obsolete! */
 749  695  
 750  696  #define ISCD(un)                ((un)->un_ctype == CTYPE_CDROM)
 751  697  #define ISROD(un)               ((un)->un_ctype == CTYPE_ROD)
 752  698  #define ISPXRE(un)              ((un)->un_ctype == CTYPE_PXRE)
 753  699  
 754  700  /*
 755  701   * This macro checks the vendor of the device to see if it is LSI. Because
 756  702   * LSI has some devices out there that return 'Symbios' or 'SYMBIOS', we
 757  703   * need to check for those also.
 758  704   *
 759  705   * This is used in some vendor specific checks.
 760  706   */
 761  707  #define SD_IS_LSI(un)   ((un)->un_f_cfg_is_lsi == TRUE)
 762  708  
 763  709  /*
 764  710   * Macros to check if the lun is a Sun T3 or a T4
 765  711   */
 766  712  #define SD_IS_T3(un) \
 767  713          ((bcmp(SD_INQUIRY(un)->inq_vid, "SUN", 3) == 0) && \
 768  714          (bcmp(SD_INQUIRY(un)->inq_pid, "T3", 2) == 0))
 769  715  
 770  716  #define SD_IS_T4(un) \
 771  717          ((bcmp(SD_INQUIRY(un)->inq_vid, "SUN", 3) == 0) && \
 772  718          (bcmp(SD_INQUIRY(un)->inq_pid, "T4", 2) == 0))
 773  719  
 774  720  /*
 775  721   * Macros for non-512 byte writes to removable devices.
 776  722   */
 777  723  #define NOT_DEVBSIZE(un)        \
 778  724          ((un)->un_tgt_blocksize != (un)->un_sys_blocksize)
 779  725  
 780  726  /*
 781  727   * Check that a write map, used for locking lba ranges for writes, is in
 782  728   * the linked list.
 783  729   */
 784  730  #define ONLIST(un, wmp)         \
 785  731          (((un)->un_wm == (wmp)) || ((wmp)->wm_prev != NULL))
 786  732  
 787  733  /*
 788  734   * Free a write map which is on list. Basically make sure that nobody is
 789  735   * sleeping on it before freeing it.
 790  736   */
 791  737  #define FREE_ONLIST_WMAP(un, wmp)                               \
 792  738          if (!(wmp)->wm_wanted_count) {                          \
 793  739                  sd_free_inlist_wmap((un), (wmp));               \
 794  740                  (wmp) = NULL;                                   \
 795  741          }
 796  742  
 797  743  #define CHK_N_FREEWMP(un, wmp)                                  \
 798  744          if (!ONLIST((un), (wmp))) {                             \
 799  745                  kmem_cache_free((un)->un_wm_cache, (wmp));      \
  
    | 
      ↓ open down ↓ | 
    49 lines elided | 
    
      ↑ open up ↑ | 
  
 800  746                  (wmp) = NULL;                                   \
 801  747          } else {                                                \
 802  748                  FREE_ONLIST_WMAP((un), (wmp));                  \
 803  749          }
 804  750  
 805  751  /*
 806  752   * Values used to in wm_flags field of sd_w_map.
 807  753   */
 808  754  #define SD_WTYPE_SIMPLE 0x001   /* Write aligned at blksize boundary */
 809  755  #define SD_WTYPE_RMW    0x002   /* Write requires read-modify-write */
 810      -#define SD_WM_BUSY              0x100   /* write-map is busy */
      756 +#define SD_WM_BUSY      0x100   /* write-map is busy */
 811  757  
 812  758  /*
 813  759   * RMW type
 814  760   */
 815  761  #define SD_RMW_TYPE_DEFAULT     0       /* do rmw with warning message */
 816  762  #define SD_RMW_TYPE_NO_WARNING  1       /* do rmw without warning message */
 817      -#define SD_RMW_TYPE_RETURN_ERROR        2       /* rmw disabled */
      763 +#define SD_RMW_TYPE_RETURN_ERROR 2      /* rmw disabled */
 818  764  
 819  765  /* Device error kstats */
 820  766  struct sd_errstats {
 821  767          struct kstat_named      sd_softerrs;
 822  768          struct kstat_named      sd_harderrs;
 823  769          struct kstat_named      sd_transerrs;
 824  770          struct kstat_named      sd_vid;
 825  771          struct kstat_named      sd_pid;
 826  772          struct kstat_named      sd_revision;
 827  773          struct kstat_named      sd_serial;
 828  774          struct kstat_named      sd_capacity;
 829  775          struct kstat_named      sd_rq_media_err;
 830  776          struct kstat_named      sd_rq_ntrdy_err;
 831  777          struct kstat_named      sd_rq_nodev_err;
 832  778          struct kstat_named      sd_rq_recov_err;
 833  779          struct kstat_named      sd_rq_illrq_err;
 834  780          struct kstat_named      sd_rq_pfa_err;
 835  781  };
 836  782  
 837  783  
 838  784  /*
 839  785   * Structs and definitions for SCSI-3 Persistent Reservation
 840  786   */
 841  787  typedef struct sd_prin_readkeys {
 842  788          uint32_t        generation;
 843  789          uint32_t        len;
 844  790          mhioc_resv_key_t *keylist;
 845  791  } sd_prin_readkeys_t;
 846  792  
 847  793  typedef struct sd_readresv_desc {
 848  794          mhioc_resv_key_t        resvkey;
 849  795          uint32_t                scope_specific_addr;
 850  796          uint8_t                 reserved_1;
 851  797  #if defined(_BIT_FIELDS_LTOH)
 852  798          uint8_t                 type:4,
 853  799                                  scope:4;
 854  800  #elif defined(_BIT_FIELDS_HTOL)
 855  801          uint8_t                 scope:4,
 856  802                                  type:4;
 857  803  #else
 858  804  #error  One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined
 859  805  #endif  /* _BIT_FIELDS_LTOH */
 860  806          uint8_t                 reserved_2;
 861  807          uint8_t                 reserved_3;
 862  808  } sd_readresv_desc_t;
 863  809  
 864  810  typedef struct sd_prin_readresv {
 865  811          uint32_t                generation;
 866  812          uint32_t                len;
 867  813          sd_readresv_desc_t      *readresv_desc;
 868  814  } sd_prin_readresv_t;
 869  815  
 870  816  typedef struct sd_prout {
 871  817          uchar_t         res_key[MHIOC_RESV_KEY_SIZE];
 872  818          uchar_t         service_key[MHIOC_RESV_KEY_SIZE];
 873  819          uint32_t        scope_address;
 874  820  #if defined(_BIT_FIELDS_LTOH)
 875  821          uchar_t         aptpl:1,
 876  822                          reserved:7;
 877  823  #elif defined(_BIT_FIELDS_HTOL)
 878  824          uchar_t         reserved:7,
 879  825                          aptpl:1;
 880  826  #else
 881  827  #error  One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined
 882  828  #endif  /* _BIT_FIELDS_LTOH */
 883  829          uchar_t         reserved_1;
 884  830          uint16_t        ext_len;
 885  831  } sd_prout_t;
 886  832  
 887  833  #define SD_READ_KEYS                    0x00
 888  834  #define SD_READ_RESV                    0x01
 889  835  
 890  836  #define SD_SCSI3_REGISTER               0x00
 891  837  #define SD_SCSI3_RESERVE                0x01
 892  838  #define SD_SCSI3_RELEASE                0x02
 893  839  #define SD_SCSI3_CLEAR                  0x03
 894  840  #define SD_SCSI3_PREEMPTANDABORT        0x05
 895  841  #define SD_SCSI3_REGISTERANDIGNOREKEY   0x06
 896  842  
 897  843  /*
 898  844   * Note: The default init of un_reservation_type is to the value of '0'
 899  845   * (from the ddi_softs_state_zalloc) which means it is defaulting to SCSI-3
 900  846   * reservation type. This is ok because during attach we use a SCSI-3
 901  847   * PRIORITY RESERVE IN command to determine the reservation type, and set
 902  848   * un_reservation_type for all cases.
 903  849   */
 904  850  #define SD_SCSI3_RESERVATION            0x0
 905  851  #define SD_SCSI2_RESERVATION            0x1
 906  852  #define SCSI3_RESV_DESC_LEN             16
 907  853  
 908  854  /*
 909  855   * Reservation Status's
 910  856   */
 911  857  #define SD_RELEASE                      0x0000
 912  858  #define SD_RESERVE                      0x0001
 913  859  #define SD_TKOWN                        0x0002
 914  860  #define SD_LOST_RESERVE                 0x0004
 915  861  #define SD_FAILFAST                     0x0080
 916  862  #define SD_WANT_RESERVE                 0x0100
 917  863  #define SD_RESERVATION_CONFLICT         0x0200
 918  864  #define SD_PRIORITY_RESERVE             0x0400
 919  865  
 920  866  #define SD_TARGET_IS_UNRESERVED         0
 921  867  #define SD_TARGET_IS_RESERVED           1
 922  868  
 923  869  /*
 924  870   * Save page in mode_select
 925  871   */
 926  872  #define SD_DONTSAVE_PAGE                0
 927  873  #define SD_SAVE_PAGE                    1
 928  874  
 929  875  /*
 930  876   * Delay before reclaiming reservation is 6 seconds, in units of micro seconds
 931  877   */
 932  878  #define SD_REINSTATE_RESV_DELAY         6000000
 933  879  
 934  880  #define SD_MODE2_BLKSIZE                2336    /* bytes */
 935  881  
 936  882  /*
 937  883   * Solid State Drive default sector size
 938  884   */
 939  885  #define SSD_SECSIZE                     4096
 940  886  
 941  887  /*
 942  888   * Resource type definitions for multi host control operations. Specifically,
 943  889   * queue and request definitions for reservation request handling between the
 944  890   * scsi facility callback function (sd_mhd_watch_cb) and the reservation
 945  891   * reclaim thread (sd_resv_reclaim_thread)
 946  892   */
 947  893  struct sd_thr_request {
 948  894          dev_t   dev;
 949  895          struct  sd_thr_request  *sd_thr_req_next;
 950  896  };
  
    | 
      ↓ open down ↓ | 
    123 lines elided | 
    
      ↑ open up ↑ | 
  
 951  897  
 952  898  struct sd_resv_reclaim_request {
 953  899          kthread_t               *srq_resv_reclaim_thread;
 954  900          struct  sd_thr_request  *srq_thr_req_head;
 955  901          struct  sd_thr_request  *srq_thr_cur_req;
 956  902          kcondvar_t              srq_inprocess_cv;
 957  903          kmutex_t                srq_resv_reclaim_mutex;
 958  904          kcondvar_t              srq_resv_reclaim_cv;
 959  905  };
 960  906  
 961      -_NOTE(MUTEX_PROTECTS_DATA(sd_resv_reclaim_request::srq_resv_reclaim_mutex,
 962      -    sd_resv_reclaim_request))
 963      -_NOTE(SCHEME_PROTECTS_DATA("unshared data", sd_thr_request))
 964      -_NOTE(SCHEME_PROTECTS_DATA("Unshared data", sd_prout))
 965      -
 966      -
 967      -
 968  907  /*
 969  908   * Driver Logging Components
 970  909   *
 971  910   * These components cover the functional entry points and areas of the
 972  911   * driver.  A component value is used for the entry point and utility
 973  912   * functions used by the entry point. The common component value is used
 974  913   * in those routines that are called from many areas of the driver.
 975  914   *
 976  915   * This can be done by adding the following two lines to /etc/system:
 977  916   * set sd:sd_component_mask=0x00080000
 978  917   * set sd:sd_level_mask=0x00000008
 979  918   */
 980  919  #define SD_LOG_PROBE                    0x00000001
 981  920  #define SD_LOG_ATTACH_DETACH            0x00000002
 982  921  #define SD_LOG_OPEN_CLOSE               0x00000004
 983  922  #define SD_LOG_READ_WRITE               0x00000008
 984  923  #define SD_LOG_POWER                    0x00000010
 985  924  #define SD_LOG_IOCTL                    0x00000020
 986  925  #define SD_LOG_IOCTL_MHD                0x00000040
 987  926  #define SD_LOG_IOCTL_RMMEDIA            0x00000080
 988  927  #define SD_LOG_IOCTL_DKIO               0x00000100
 989  928  #define SD_LOG_IO                       0x00000200
 990  929  #define SD_LOG_IO_CORE                  0x00000400
 991  930  #define SD_LOG_IO_DISKSORT              0x00000800
 992  931  #define SD_LOG_IO_PARTITION             0x00001000
 993  932  #define SD_LOG_IO_RMMEDIA               0x00002000
 994  933  #define SD_LOG_IO_CHKSUM                0x00004000
 995  934  #define SD_LOG_IO_SDIOCTL               0x00008000
 996  935  #define SD_LOG_IO_PM                    0x00010000
 997  936  #define SD_LOG_ERROR                    0x00020000
 998  937  #define SD_LOG_DUMP                     0x00040000
 999  938  #define SD_LOG_COMMON                   0x00080000
1000  939  #define SD_LOG_SDTEST                   0x00100000
1001  940  #define SD_LOG_IOERR                    0x00200000
1002  941  #define SD_LOG_IO_FAILFAST              0x00400000
1003  942  
1004  943  /* Driver Logging Levels */
1005  944  #define SD_LOGMASK_ERROR                0x00000001
1006  945  #define SD_LOGMASK_DUMP_MEM             0x00000002
1007  946  #define SD_LOGMASK_INFO                 0x00000004
1008  947  #define SD_LOGMASK_TRACE                0x00000008
1009  948  #define SD_LOGMASK_DIAG                 0x00000010
1010  949  
1011  950  /* Driver Logging Formats */
1012  951  #define SD_LOG_HEX                      0x00000001
1013  952  #define SD_LOG_CHAR                     0x00000002
1014  953  
1015  954  /*
1016  955   * The following macros should be used to log driver debug information
1017  956   * only. The output is filtered according to the component and level mask
1018  957   * values. Non-debug information, such as driver warnings intended for
1019  958   * the user should be logged via the scsi_log facility to ensure that
1020  959   * they are not filtered.
1021  960   */
1022  961  #if DEBUG || lint
1023  962  #define SDDEBUG
1024  963  
1025  964  /* SD_ERROR is called to log driver error conditions */
1026  965  #define SD_ERROR        sd_log_err
1027  966  
1028  967  /* SD_TRACE is called to log driver trace conditions (function entry/exit) */
1029  968  #define SD_TRACE        sd_log_trace
1030  969  
1031  970  /* SD_INFO is called to log general purpose driver info */
1032  971  #define SD_INFO         sd_log_info
1033  972  
1034  973  /* SD_DUMP_MEMORY is called to dump a data buffer to the log */
1035  974  #define SD_DUMP_MEMORY  sd_dump_memory
1036  975  
1037  976  /* RESET/ABORTS testing ioctls */
1038  977  #define DKIOCRESET      (DKIOC|14)
1039  978  #define DKIOCABORT      (DKIOC|15)
1040  979  
1041  980  #ifdef SD_FAULT_INJECTION
  
    | 
      ↓ open down ↓ | 
    64 lines elided | 
    
      ↑ open up ↑ | 
  
1042  981  /*
1043  982   * sd_fi_pkt replicates the variables that are exposed through pkt
1044  983   *
1045  984   * sd_fi_xb replicates the variables that are exposed through xb
1046  985   *
1047  986   * sd_fi_un replicates the variables that are exposed through un
1048  987   *
1049  988   * sd_fi_arq replicates the variables that are
1050  989   *           exposed for Auto-Reqeust-Sense
1051  990   *
      991 + * sd_fi_tran HBA-level fault injection.
      992 + *
1052  993   */
1053  994  struct sd_fi_pkt {
1054  995          uint_t  pkt_flags;                      /* flags */
1055  996          uchar_t pkt_scbp;                       /* pointer to status block */
1056  997          uchar_t pkt_cdbp;                       /* pointer to command block */
1057  998          uint_t  pkt_state;                      /* state of command */
1058  999          uint_t  pkt_statistics;         /* statistics */
1059 1000          uchar_t pkt_reason;                     /* reason completion called */
1060 1001  };
1061 1002  
1062 1003  struct sd_fi_xb {
1063 1004          daddr_t xb_blkno;
1064 1005          ssize_t xb_dma_resid;
1065 1006          short   xb_retry_count;
1066 1007          short   xb_victim_retry_count;
1067 1008          uchar_t xb_sense_status;
1068 1009          uint_t  xb_sense_state;
1069 1010          ssize_t xb_sense_resid;
1070 1011          uchar_t xb_sense_data[SENSE_LENGTH];
1071 1012          uchar_t es_code;
1072 1013          uchar_t es_key;
1073 1014          uchar_t es_add_code;
1074 1015          uchar_t es_qual_code;
1075 1016  };
1076 1017  
1077 1018  struct sd_fi_un {
1078 1019          uchar_t inq_rmb;
1079 1020          uchar_t un_ctype;
1080 1021          uint_t  un_notready_retry_count;
1081 1022          uint_t  un_reset_retry_count;
1082 1023          uchar_t un_reservation_type;
1083 1024          ushort_t un_notrdy_delay;
1084 1025          short   un_resvd_status;
1085 1026          uint32_t
1086 1027                  un_f_arq_enabled,
1087 1028                  un_f_allow_bus_device_reset,
1088 1029                  un_f_opt_queueing;
1089 1030          timeout_id_t    un_restart_timeid;
1090 1031  };
1091 1032  
  
    | 
      ↓ open down ↓ | 
    30 lines elided | 
    
      ↑ open up ↑ | 
  
1092 1033  struct sd_fi_arq {
1093 1034          struct scsi_status      sts_status;
1094 1035          struct scsi_status      sts_rqpkt_status;
1095 1036          uchar_t                         sts_rqpkt_reason;
1096 1037          uchar_t                         sts_rqpkt_resid;
1097 1038          uint_t                          sts_rqpkt_state;
1098 1039          uint_t                          sts_rqpkt_statistics;
1099 1040          struct scsi_extended_sense      sts_sensedata;
1100 1041  };
1101 1042  
     1043 +enum sd_fi_tran_cmd {
     1044 +        SD_FLTINJ_CMD_BUSY, /* Reject command instead of sending it to HW */
     1045 +        SD_FLTINJ_CMD_TIMEOUT /* Time-out command. */
     1046 +};
     1047 +
     1048 +struct sd_fi_tran {
     1049 +        enum sd_fi_tran_cmd tran_cmd;
     1050 +};
     1051 +
1102 1052  /*
1103 1053   * Conditional set def
1104 1054   */
1105 1055  #define SD_CONDSET(a, b, c, d)                  \
1106 1056          { \
1107 1057          a->c = ((fi_ ## b)->c);                 \
1108 1058          SD_INFO(SD_LOG_IOERR, un,               \
1109 1059                          "sd_fault_injection:"   \
1110 1060                          "setting %s to %d\n",   \
1111 1061                          d, ((fi_ ## b)->c));    \
1112 1062          }
1113 1063  
1114 1064  /* SD FaultInjection ioctls */
1115      -#define SDIOC                   ('T'<<8)
1116      -#define SDIOCSTART              (SDIOC|1)
1117      -#define SDIOCSTOP               (SDIOC|2)
     1065 +#define SDIOC           ('T'<<8)
     1066 +#define SDIOCSTART      (SDIOC|1)
     1067 +#define SDIOCSTOP       (SDIOC|2)
1118 1068  #define SDIOCINSERTPKT  (SDIOC|3)
1119 1069  #define SDIOCINSERTXB   (SDIOC|4)
1120 1070  #define SDIOCINSERTUN   (SDIOC|5)
1121 1071  #define SDIOCINSERTARQ  (SDIOC|6)
1122      -#define SDIOCPUSH               (SDIOC|7)
     1072 +#define SDIOCPUSH       (SDIOC|7)
1123 1073  #define SDIOCRETRIEVE   (SDIOC|8)
1124      -#define SDIOCRUN                (SDIOC|9)
     1074 +#define SDIOCRUN        (SDIOC|9)
     1075 +#define SDIOCINSERTTRAN (SDIOC|0xA)
1125 1076  #endif
1126 1077  
1127 1078  #else
1128 1079  
1129 1080  #undef  SDDEBUG
1130 1081  #define SD_ERROR        { if (0) sd_log_err; }
1131 1082  #define SD_TRACE        { if (0) sd_log_trace; }
1132 1083  #define SD_INFO         { if (0) sd_log_info; }
1133 1084  #define SD_DUMP_MEMORY  { if (0) sd_dump_memory; }
1134 1085  #endif
1135 1086  
1136 1087  
1137 1088  /*
1138 1089   * Miscellaneous macros
1139 1090   */
1140 1091  
1141 1092  #define SD_USECTOHZ(x)                  (drv_usectohz((x)*1000000))
1142 1093  #define SD_GET_PKT_STATUS(pktp)         ((*(pktp)->pkt_scbp) & STATUS_MASK)
1143 1094  
1144 1095  #define SD_BIOERROR(bp, errcode)                                        \
1145 1096          if ((bp)->b_resid == 0) {                                       \
1146 1097                  (bp)->b_resid = (bp)->b_bcount;                         \
1147 1098          }                                                               \
1148 1099          if ((bp)->b_error == 0) {                                       \
1149 1100                  bioerror(bp, errcode);                                  \
1150 1101          }                                                               \
1151 1102          (bp)->b_flags |= B_ERROR;
1152 1103  
1153 1104  #define SD_FILL_SCSI1_LUN_CDB(lunp, cdbp)                               \
1154 1105          if (! (lunp)->un_f_is_fibre &&                                  \
1155 1106              SD_INQUIRY((lunp))->inq_ansi == 0x01) {                     \
1156 1107                  int _lun = ddi_prop_get_int(DDI_DEV_T_ANY,              \
1157 1108                      SD_DEVINFO((lunp)), DDI_PROP_DONTPASS,              \
1158 1109                      SCSI_ADDR_PROP_LUN, 0);                             \
1159 1110                  if (_lun > 0) {                                         \
1160 1111                          (cdbp)->scc_lun = _lun;                         \
1161 1112                  }                                                       \
1162 1113          }
1163 1114  
1164 1115  #define SD_FILL_SCSI1_LUN(lunp, pktp)                                   \
1165 1116          SD_FILL_SCSI1_LUN_CDB((lunp), (union scsi_cdb *)(pktp)->pkt_cdbp)
1166 1117  
  
    | 
      ↓ open down ↓ | 
    32 lines elided | 
    
      ↑ open up ↑ | 
  
1167 1118  /*
1168 1119   * Disk driver states
1169 1120   */
1170 1121  
1171 1122  #define SD_STATE_NORMAL         0
1172 1123  #define SD_STATE_OFFLINE        1
1173 1124  #define SD_STATE_RWAIT          2
1174 1125  #define SD_STATE_DUMPING        3
1175 1126  #define SD_STATE_SUSPENDED      4
1176 1127  #define SD_STATE_PM_CHANGING    5
     1128 +#define SD_STATE_ATTACHING      6
     1129 +#define SD_STATE_ATTACH_FAILED  7
1177 1130  
1178 1131  /*
1179 1132   * The table is to be interpreted as follows: The rows lists all the states
1180 1133   * and each column is a state that a state in each row *can* reach. The entries
1181 1134   * in the table list the event that cause that transition to take place.
1182 1135   * For e.g.: To go from state RWAIT to SUSPENDED, event (d)-- which is the
1183 1136   * invocation of DDI_SUSPEND-- has to take place. Note the same event could
1184 1137   * cause the transition from one state to two different states. e.g., from
1185 1138   * state SUSPENDED, when we get a DDI_RESUME, we just go back to the *last
1186 1139   * state* whatever that might be. (NORMAL or OFFLINE).
1187 1140   *
1188 1141   *
1189 1142   * State Transition Table:
1190 1143   *
1191 1144   *                    NORMAL  OFFLINE  RWAIT  DUMPING  SUSPENDED  PM_SUSPENDED
1192 1145   *
1193 1146   *   NORMAL              -      (a)      (b)     (c)      (d)       (h)
1194 1147   *
1195 1148   *   OFFLINE            (e)      -       (e)     (c)      (d)       NP
1196 1149   *
1197 1150   *   RWAIT              (f)     NP        -      (c)      (d)       (h)
1198 1151   *
1199 1152   *   DUMPING            NP      NP        NP      -        NP       NP
1200 1153   *
1201 1154   *   SUSPENDED          (g)     (g)       (b)     NP*      -        NP
1202 1155   *
1203 1156   *   PM_SUSPENDED       (i)     NP        (b)    (c)      (d)       -
1204 1157   *
1205 1158   *   NP :       Not Possible.
1206 1159   *   (a):       Disk does not respond.
1207 1160   *   (b):       Packet Allocation Fails
1208 1161   *   (c):       Panic - Crash dump
1209 1162   *   (d):       DDI_SUSPEND is called.
1210 1163   *   (e):       Disk has a successful I/O completed.
1211 1164   *   (f):       sdrunout() calls sdstart() which sets it NORMAL
1212 1165   *   (g):       DDI_RESUME is called.
1213 1166   *   (h):       Device threshold exceeded pm framework called power
1214 1167   *              entry point or pm_lower_power called in detach.
1215 1168   *   (i):       When new I/O come in.
1216 1169   *    * :       When suspended, we dont change state during panic dump
1217 1170   */
1218 1171  
1219 1172  
1220 1173  #define SD_MAX_THROTTLE         256
  
    | 
      ↓ open down ↓ | 
    34 lines elided | 
    
      ↑ open up ↑ | 
  
1221 1174  #define SD_MIN_THROTTLE         8
1222 1175  /*
1223 1176   * Lowest valid max. and min. throttle value.
1224 1177   * This is set to 2 because if un_min_throttle were allowed to be 1 then
1225 1178   * un_throttle would never get set to a value less than un_min_throttle
1226 1179   * (0 is a special case) which means it would never get set back to
1227 1180   * un_saved_throttle in routine sd_restore_throttle().
1228 1181   */
1229 1182  #define SD_LOWEST_VALID_THROTTLE        2
1230 1183  
1231      -
1232      -
1233 1184  /* Return codes for sd_send_polled_cmd() and sd_scsi_poll() */
1234 1185  #define SD_CMD_SUCCESS                  0
1235 1186  #define SD_CMD_FAILURE                  1
1236 1187  #define SD_CMD_RESERVATION_CONFLICT     2
1237 1188  #define SD_CMD_ILLEGAL_REQUEST          3
1238 1189  #define SD_CMD_BECOMING_READY           4
1239 1190  #define SD_CMD_CHECK_CONDITION          5
1240 1191  
1241 1192  /* Return codes for sd_ready_and_valid */
1242 1193  #define SD_READY_VALID                  0
1243 1194  #define SD_NOT_READY_VALID              1
1244 1195  #define SD_RESERVED_BY_OTHERS           2
1245 1196  
1246 1197  #define SD_PATH_STANDARD                0
1247 1198  #define SD_PATH_DIRECT                  1
1248 1199  #define SD_PATH_DIRECT_PRIORITY         2
1249 1200  
1250 1201  #define SD_UNIT_ATTENTION_RETRY         40
1251 1202  
1252 1203  /*
1253 1204   * The following three are bit flags passed into sd_send_scsi_TEST_UNIT_READY
1254 1205   * to control specific behavior.
1255 1206   */
1256 1207  #define SD_CHECK_FOR_MEDIA              0x01
1257 1208  #define SD_DONT_RETRY_TUR               0x02
1258 1209  #define SD_BYPASS_PM                    0x04
1259 1210  
1260 1211  #define SD_GROUP0_MAX_ADDRESS   (0x1fffff)
1261 1212  #define SD_GROUP0_MAXCOUNT      (0xff)
1262 1213  #define SD_GROUP1_MAX_ADDRESS   (0xffffffff)
1263 1214  #define SD_GROUP1_MAXCOUNT      (0xffff)
1264 1215  
1265 1216  #define SD_BECOMING_ACTIVE      0x01
1266 1217  #define SD_REMOVAL_ALLOW        0
1267 1218  #define SD_REMOVAL_PREVENT      1
1268 1219  
1269 1220  #define SD_GET_PKT_OPCODE(pktp) \
1270 1221          (((union scsi_cdb *)((pktp)->pkt_cdbp))->cdb_un.cmd)
1271 1222  
1272 1223  
1273 1224  #define SD_NO_RETRY_ISSUED              0
1274 1225  #define SD_DELAYED_RETRY_ISSUED         1
1275 1226  #define SD_IMMEDIATE_RETRY_ISSUED       2
1276 1227  
1277 1228  #if defined(__i386) || defined(__amd64)
1278 1229  #define SD_UPDATE_B_RESID(bp, pktp)     \
1279 1230          ((bp)->b_resid += (pktp)->pkt_resid + (SD_GET_XBUF(bp)->xb_dma_resid))
1280 1231  #else
1281 1232  #define SD_UPDATE_B_RESID(bp, pktp)     \
1282 1233          ((bp)->b_resid += (pktp)->pkt_resid)
1283 1234  #endif
1284 1235  
1285 1236  
1286 1237  #define SD_RETRIES_MASK         0x00FF
1287 1238  #define SD_RETRIES_NOCHECK      0x0000
1288 1239  #define SD_RETRIES_STANDARD     0x0001
1289 1240  #define SD_RETRIES_VICTIM       0x0002
1290 1241  #define SD_RETRIES_BUSY         0x0003
1291 1242  #define SD_RETRIES_UA           0x0004
1292 1243  #define SD_RETRIES_ISOLATE      0x8000
1293 1244  #define SD_RETRIES_FAILFAST     0x4000
1294 1245  
1295 1246  #define SD_UPDATE_RESERVATION_STATUS(un, pktp)                          \
1296 1247  if (((pktp)->pkt_reason == CMD_RESET) ||                                \
1297 1248          ((pktp)->pkt_statistics & (STAT_BUS_RESET | STAT_DEV_RESET))) { \
1298 1249          if (((un)->un_resvd_status & SD_RESERVE) == SD_RESERVE) {       \
1299 1250                  (un)->un_resvd_status |=                                \
1300 1251                      (SD_LOST_RESERVE | SD_WANT_RESERVE);                \
1301 1252          }                                                               \
1302 1253  }
1303 1254  
1304 1255  #define SD_SENSE_DATA_IS_VALID          0
1305 1256  #define SD_SENSE_DATA_IS_INVALID        1
1306 1257  
1307 1258  /*
1308 1259   * Delay (in seconds) before restoring the "throttle limit" back
1309 1260   * to its maximum value.
1310 1261   * 60 seconds is what we will wait for to reset the
1311 1262   * throttle back to it SD_MAX_THROTTLE for TRAN_BUSY.
1312 1263   * 10 seconds for STATUS_QFULL because QFULL will incrementally
1313 1264   * increase the throttle limit until it reaches max value.
1314 1265   */
1315 1266  #define SD_RESET_THROTTLE_TIMEOUT       60
1316 1267  #define SD_QFULL_THROTTLE_TIMEOUT       10
1317 1268  
1318 1269  #define SD_THROTTLE_TRAN_BUSY           0
1319 1270  #define SD_THROTTLE_QFULL               1
1320 1271  
1321 1272  #define SD_THROTTLE_RESET_INTERVAL      \
1322 1273          (sd_reset_throttle_timeout * drv_usectohz(1000000))
1323 1274  
1324 1275  #define SD_QFULL_THROTTLE_RESET_INTERVAL        \
1325 1276          (sd_qfull_throttle_timeout * drv_usectohz(1000000))
1326 1277  
1327 1278  
1328 1279  /*
1329 1280   * xb_pkt_flags defines
1330 1281   * SD_XB_DMA_FREED indicates the scsi_pkt has had its DMA resources freed
1331 1282   * by a call to scsi_dmafree(9F). The resources must be reallocated before
1332 1283   *   before a call to scsi_transport can be made again.
1333 1284   * SD_XB_USCSICMD indicates the scsi request is a uscsi request
1334 1285   * SD_XB_INITPKT_MASK: since this field is also used to store flags for
1335 1286   *   a scsi_init_pkt(9F) call, we need a mask to make sure that we don't
1336 1287   *   pass any unintended bits to scsi_init_pkt(9F) (ugly hack).
1337 1288   */
1338 1289  #define SD_XB_DMA_FREED         0x20000000
1339 1290  #define SD_XB_USCSICMD          0x40000000
1340 1291  #define SD_XB_INITPKT_MASK      (PKT_CONSISTENT | PKT_DMA_PARTIAL)
1341 1292  
1342 1293  /*
1343 1294   * Extension for the buf(9s) struct that we receive from a higher
1344 1295   * layer. Located by b_private in the buf(9S).  (The previous contents
1345 1296   * of b_private are saved & restored before calling biodone(9F).)
1346 1297   */
1347 1298  struct sd_xbuf {
1348 1299  
1349 1300          struct sd_lun   *xb_un;         /* Ptr to associated sd_lun */
1350 1301          struct scsi_pkt *xb_pktp;       /* Ptr to associated scsi_pkt */
1351 1302  
1352 1303          /*
1353 1304           * xb_pktinfo points to any optional data that may be needed
1354 1305           * by the initpkt and/or destroypkt functions.  Typical
1355 1306           * use might be to point to a struct uscsi_cmd.
1356 1307           */
1357 1308          void    *xb_pktinfo;
1358 1309  
1359 1310          /*
1360 1311           * Layer-private data area. This may be used by any layer to store
1361 1312           * layer-specific data on a per-IO basis. Typical usage is for an
1362 1313           * iostart routine to save some info here for later use by its
1363 1314           * partner iodone routine.  This area may be used to hold data or
1364 1315           * a pointer to a data block that is allocated/freed by the layer's
1365 1316           * iostart/iodone routines. Allocation & management policy for the
1366 1317           * layer-private area is defined & implemented by each specific
1367 1318           * layer as required.
1368 1319           *
1369 1320           * IMPORTANT: Since a higher layer may depend on the value in the
1370 1321           * xb_private field, each layer must ensure that it returns the
1371 1322           * buf/xbuf to the next higher layer (via SD_NEXT_IODONE()) with
1372 1323           * the SAME VALUE in xb_private as when the buf/xbuf was first
1373 1324           * received by the layer's iostart routine. Typically this is done
1374 1325           * by the iostart routine saving the contents of xb_private into
1375 1326           * a place in the layer-private data area, and the iodone routine
1376 1327           * restoring the value of xb_private before deallocating the
1377 1328           * layer-private data block and calling SD_NEXT_IODONE(). Of course,
1378 1329           * if a layer never modifies xb_private in a buf/xbuf from a higher
1379 1330           * layer, there will be no need to restore the value.
1380 1331           *
1381 1332           * Note that in the case where a layer _creates_ a buf/xbuf (such as
1382 1333           * by calling sd_shadow_buf_alloc()) to pass to a lower layer, it is
1383 1334           * not necessary to preserve the contents of xb_private as there is
1384 1335           * no higher layer dependency on the value of xb_private. Such a
1385 1336           * buf/xbuf must be deallocated by the layer that allocated it and
1386 1337           * must *NEVER* be passed up to a higher layer.
1387 1338           */
1388 1339          void    *xb_private;    /* Layer-private data block */
1389 1340  
1390 1341          /*
1391 1342           * We do not use the b_blkno provided in the buf(9S), as we need to
1392 1343           * make adjustments to it in the driver, but it is not a field that
1393 1344           * the driver owns or is free to modify.
1394 1345           */
1395 1346          daddr_t xb_blkno;               /* Absolute block # on target */
1396 1347          uint64_t xb_ena;                /* ena for a specific SCSI command */
1397 1348  
1398 1349          int     xb_chain_iostart;       /* iostart side index */
1399 1350          int     xb_chain_iodone;        /* iodone side index */
1400 1351          int     xb_pkt_flags;           /* Flags for scsi_init_pkt() */
1401 1352          ssize_t xb_dma_resid;
1402 1353          short   xb_retry_count;
1403 1354          short   xb_victim_retry_count;
1404 1355          short   xb_ua_retry_count;      /* unit_attention retry counter */
1405 1356          short   xb_nr_retry_count;      /* not ready retry counter */
1406 1357  
1407 1358          /*
1408 1359           * Various status and data used when a RQS command is run on
1409 1360           * the behalf of this command.
1410 1361           */
1411 1362          struct buf      *xb_sense_bp;   /* back ptr to buf, for RQS */
1412 1363          uint_t  xb_sense_state;         /* scsi_pkt state of RQS command */
  
    | 
      ↓ open down ↓ | 
    170 lines elided | 
    
      ↑ open up ↑ | 
  
1413 1364          ssize_t xb_sense_resid;         /* residual of RQS command */
1414 1365          uchar_t xb_sense_status;        /* scsi status byte of RQS command */
1415 1366          uchar_t xb_sense_data[SENSE_LENGTH];    /* sense data from RQS cmd */
1416 1367          /*
1417 1368           * Extra sense larger than SENSE_LENGTH will be allocated
1418 1369           * right after xb_sense_data[SENSE_LENGTH]. Please do not
1419 1370           * add any new field after it.
1420 1371           */
1421 1372  };
1422 1373  
1423      -_NOTE(SCHEME_PROTECTS_DATA("unique per pkt", sd_xbuf))
1424      -
1425 1374  #define SD_PKT_ALLOC_SUCCESS                    0
1426 1375  #define SD_PKT_ALLOC_FAILURE                    1
1427 1376  #define SD_PKT_ALLOC_FAILURE_NO_DMA             2
1428 1377  #define SD_PKT_ALLOC_FAILURE_PKT_TOO_SMALL      3
1429 1378  #define SD_PKT_ALLOC_FAILURE_CDB_TOO_SMALL      4
1430 1379  
1431 1380  #define SD_GET_XBUF(bp)         ((struct sd_xbuf *)((bp)->b_private))
1432 1381  #define SD_GET_UN(bp)           ((SD_GET_XBUF(bp))->xb_un)
1433 1382  #define SD_GET_PKTP(bp)         ((SD_GET_XBUF(bp))->xb_pktp)
1434 1383  #define SD_GET_BLKNO(bp)        ((SD_GET_XBUF(bp))->xb_blkno)
1435 1384  
1436 1385  /*
1437 1386   * Special-purpose struct for sd_send_scsi_cmd() to pass command-specific
1438 1387   * data through the layering chains to sd_initpkt_for_uscsi().
1439 1388   */
1440 1389  struct sd_uscsi_info {
1441 1390          int                     ui_flags;
1442 1391          struct uscsi_cmd        *ui_cmdp;
1443 1392          /*
1444 1393           * ui_dkc is used by sd_send_scsi_SYNCHRONIZE_CACHE() to allow
1445 1394           * for async completion notification.
1446 1395           */
1447 1396          struct dk_callback      ui_dkc;
  
    | 
      ↓ open down ↓ | 
    13 lines elided | 
    
      ↑ open up ↑ | 
  
1448 1397          /*
1449 1398           * The following fields are to be used for FMA ereport generation.
1450 1399           */
1451 1400          uchar_t                 ui_pkt_reason;
1452 1401          uint32_t                ui_pkt_state;
1453 1402          uint32_t                ui_pkt_statistics;
1454 1403          uint64_t                ui_lba;
1455 1404          uint64_t                ui_ena;
1456 1405  };
1457 1406  
1458      -_NOTE(SCHEME_PROTECTS_DATA("Unshared data", sd_uscsi_info))
1459      -
1460 1407  /*
1461 1408   * This structure is used to issue 'internal' command sequences from the
1462 1409   * driver's attach(9E)/open(9E)/etc entry points. It provides a common context
1463 1410   * for issuing command sequences, with the ability to issue a command
1464 1411   * and provide expected/unexpected assessment of results at any code
1465 1412   * level within the sd_ssc_t scope and preserve the information needed
1466 1413   * produce telemetry for the problem, when needed, from a single
1467 1414   * outer-most-scope point.
1468 1415   *
1469 1416   * The sd_ssc_t abstraction should result in well-structured code where
1470 1417   * the basic code structure is not jeprodized by future localized improvement.
1471 1418   *
1472 1419   *   o  Scope for a sequence of commands.
1473 1420   *   o  Within a scoped sequence of commands, provides a single top-level
1474 1421   *      location for initiating telementry generation from captured data.
1475 1422   *   o  Provide a common place to capture command execution data and driver
1476 1423   *      assessment information for delivery to telemetry generation point.
1477 1424   *   o  Mechanism to get device-as-detector (dad) and transport telemetry
1478 1425   *      information from interrupt context (sdintr) back to the internal
1479 1426   *      command 'driver-assessment' code.
1480 1427   *   o  Ability to record assessment, and return information back to
1481 1428   *      top-level telemetry generation code when an unexpected condition
1482 1429   *      occurs.
1483 1430   *   o  For code paths were an command itself was successful but
1484 1431   *      the data returned looks suspect, the ability to record
1485 1432   *      'unexpected data' conditions.
1486 1433   *   o  Record assessment of issuing the command and interpreting
1487 1434   *      the returned data for consumption by top-level ereport telemetry
1488 1435   *      generation code.
1489 1436   *   o  All data required to produce telemetry available off single data
  
    | 
      ↓ open down ↓ | 
    20 lines elided | 
    
      ↑ open up ↑ | 
  
1490 1437   *      structure.
1491 1438   */
1492 1439  typedef struct {
1493 1440          struct sd_lun           *ssc_un;
1494 1441          struct uscsi_cmd        *ssc_uscsi_cmd;
1495 1442          struct sd_uscsi_info    *ssc_uscsi_info;
1496 1443          int                     ssc_flags; /* Bits for flags */
1497 1444          char                    ssc_info[1024]; /* Buffer holding for info */
1498 1445  } sd_ssc_t;
1499 1446  
1500      -_NOTE(SCHEME_PROTECTS_DATA("Unshared data", sd_ssc_t))
1501      -
1502 1447  /*
1503 1448   * This struct switch different 'type-of-assessment'
1504 1449   * as an input argument for sd_ssc_assessment
1505 1450   *
1506 1451   *
1507 1452   * in sd_send_scsi_XXX or upper-level
1508 1453   *
1509 1454   * - SD_FMT_IGNORE
1510 1455   *   when send uscsi command failed, and
1511 1456   *   the following code check sense data properly.
1512 1457   *   we use 'ignore' to let sd_ssc_assessment
1513 1458   *   trust current and do not do additional
1514 1459   *   checking for the uscsi command.
1515 1460   *
1516 1461   * - SD_FMT_IGNORE_COMPROMISE
1517 1462   *   when send uscsi command failed, and
1518 1463   *   the code does not check sense data or we don't
1519 1464   *   think the checking is 100% coverage. We mark it
1520 1465   *   as 'compromise' to indicate that we need to
1521 1466   *   enhance current code in the future.
1522 1467   *
1523 1468   * - SD_FMT_STATUS_CHECK
1524 1469   *   when send uscsi command failed and cause sd entries
1525 1470   *   failed finally, we need to send out real reason against
1526 1471   *   status of uscsi command no matter if there is sense back
1527 1472   *   or not.
1528 1473   *
1529 1474   * - SD_FMT_STANDARD
1530 1475   *   when send uscsi command succeeded, and
1531 1476   *   the code does not check sense data, we need to check
1532 1477   *   it to make sure there is no 'fault'.
1533 1478   */
1534 1479  enum sd_type_assessment {
1535 1480          SD_FMT_IGNORE = 0,
1536 1481          SD_FMT_IGNORE_COMPROMISE,
1537 1482          SD_FMT_STATUS_CHECK,
1538 1483          SD_FMT_STANDARD
1539 1484  };
1540 1485  
1541 1486  /*
1542 1487   * The following declaration are used as hints of severities when posting
1543 1488   * SCSI FMA ereport.
1544 1489   * - SD_FM_DRV_FATAL
1545 1490   *   When posting ereport with SD_FM_DRV_FATAL, the payload
1546 1491   *   "driver-assessment" will be "fail" or "fatal" depending on the
1547 1492   *   sense-key value. If driver-assessment is "fail", it will be
1548 1493   *   propagated to an upset, otherwise, a fault will be propagated.
1549 1494   * - SD_FM_DRV_RETRY
1550 1495   *   When posting ereport with SD_FM_DRV_RETRY, the payload
1551 1496   *   "driver-assessment" will be "retry", and it will be propagated to an
1552 1497   *   upset.
1553 1498   * - SD_FM_DRV_RECOVERY
1554 1499   *   When posting ereport with SD_FM_DRV_RECOVERY, the payload
1555 1500   *   "driver-assessment" will be "recovered", and it will be propagated to
1556 1501   *   an upset.
1557 1502   * - SD_FM_DRV_NOTICE
1558 1503   *   When posting ereport with SD_FM_DRV_NOTICE, the payload
1559 1504   *   "driver-assessment" will be "info", and it will be propagated to an
1560 1505   *   upset.
1561 1506   */
1562 1507  enum sd_driver_assessment {
1563 1508          SD_FM_DRV_FATAL = 0,
1564 1509          SD_FM_DRV_RETRY,
1565 1510          SD_FM_DRV_RECOVERY,
1566 1511          SD_FM_DRV_NOTICE
1567 1512  };
1568 1513  
1569 1514  /*
1570 1515   * The following structure is used as a buffer when posting SCSI FMA
1571 1516   * ereport for raw i/o. It will be allocated per sd_lun when entering
1572 1517   * sd_unit_attach and will be deallocated when entering sd_unit_detach.
1573 1518   */
1574 1519  struct sd_fm_internal {
1575 1520          sd_ssc_t fm_ssc;
1576 1521          struct uscsi_cmd fm_ucmd;
1577 1522          struct sd_uscsi_info fm_uinfo;
1578 1523          int fm_log_level;
1579 1524  };
1580 1525  
1581 1526  /*
1582 1527   * Bits in ssc_flags
1583 1528   * sd_ssc_init will mark ssc_flags = SSC_FLAGS_UNKNOWN
1584 1529   * sd_ssc_send will mark ssc_flags = SSC_FLAGS_CMD_ISSUED &
1585 1530   *                                   SSC_FLAGS_NEED_ASSESSMENT
1586 1531   * sd_ssc_assessment will clear SSC_FLAGS_CMD_ISSUED and
1587 1532   * SSC_FLAGS_NEED_ASSESSMENT bits of ssc_flags.
1588 1533   * SSC_FLAGS_CMD_ISSUED is to indicate whether the SCSI command has been
1589 1534   * sent out.
1590 1535   * SSC_FLAGS_NEED_ASSESSMENT is to guarantee we will not miss any
1591 1536   * assessment point.
1592 1537   */
1593 1538  #define         SSC_FLAGS_UNKNOWN               0x00000000
1594 1539  #define         SSC_FLAGS_CMD_ISSUED            0x00000001
1595 1540  #define         SSC_FLAGS_NEED_ASSESSMENT       0x00000002
1596 1541  #define         SSC_FLAGS_TRAN_ABORT            0x00000004
1597 1542  
1598 1543  /*
1599 1544   * The following bits in ssc_flags are for detecting unexpected data.
1600 1545   */
1601 1546  #define         SSC_FLAGS_INVALID_PKT_REASON    0x00000010
1602 1547  #define         SSC_FLAGS_INVALID_STATUS        0x00000020
1603 1548  #define         SSC_FLAGS_INVALID_SENSE         0x00000040
1604 1549  #define         SSC_FLAGS_INVALID_DATA          0x00000080
1605 1550  
1606 1551  /*
1607 1552   * The following are the values available for sd_fm_internal::fm_log_level.
1608 1553   * SD_FM_LOG_NSUP       The driver will log things in traditional way as if
1609 1554   *                      the SCSI FMA feature is unavailable.
1610 1555   * SD_FM_LOG_SILENT     The driver will not print out syslog for FMA error
1611 1556   *                      telemetry, all the error telemetries will go into
1612 1557   *                      FMA error log.
1613 1558   * SD_FM_LOG_EREPORT    The driver will both print the FMA error telemetry
1614 1559   *                      and post the error report, but the traditional
1615 1560   *                      syslog for error telemetry will be suppressed.
1616 1561   */
1617 1562  #define         SD_FM_LOG_NSUP          0
1618 1563  #define         SD_FM_LOG_SILENT        1
1619 1564  #define         SD_FM_LOG_EREPORT       2
1620 1565  
1621 1566  /*
1622 1567   * Macros and definitions for driver kstats and errstats
1623 1568   *
1624 1569   * Some third-party layered drivers (they know who they are) do not maintain
1625 1570   * their open/close counts correctly which causes our kstat reporting to get
1626 1571   * messed up & results in panics. These macros will update the driver kstats
1627 1572   * only if the counts are valid.
1628 1573   */
1629 1574  #define SD_UPDATE_COMMON_KSTATS(kstat_function, kstatp)                 \
1630 1575          if ((kstat_function)  == kstat_runq_exit ||                     \
1631 1576              ((kstat_function) == kstat_runq_back_to_waitq)) {           \
1632 1577                  if (((kstat_io_t *)(kstatp))->rcnt) {                   \
1633 1578                          kstat_function((kstatp));                       \
1634 1579                  } else {                                                \
1635 1580                          cmn_err(CE_WARN,                                \
1636 1581                  "kstat rcnt == 0 when exiting runq, please check\n");   \
1637 1582                  }                                                       \
1638 1583          } else if ((kstat_function) == kstat_waitq_exit ||              \
1639 1584              ((kstat_function) == kstat_waitq_to_runq)) {                \
1640 1585                  if (((kstat_io_t *)(kstatp))->wcnt) {                   \
1641 1586                          kstat_function(kstatp);                         \
1642 1587                  } else {                                                \
1643 1588                          cmn_err(CE_WARN,                                \
1644 1589                  "kstat wcnt == 0 when exiting waitq, please check\n");  \
1645 1590                  }                                                       \
1646 1591          } else {                                                        \
1647 1592                  kstat_function(kstatp);                                 \
1648 1593          }
1649 1594  
1650 1595  #define SD_UPDATE_KSTATS(un, kstat_function, bp)                        \
1651 1596          ASSERT(SD_GET_XBUF(bp) != NULL);                                \
1652 1597          if (SD_IS_BUFIO(SD_GET_XBUF(bp))) {                             \
1653 1598                  struct kstat *pksp =                                    \
1654 1599                          (un)->un_pstats[SDPART((bp)->b_edev)];          \
1655 1600                  ASSERT(mutex_owned(SD_MUTEX(un)));                      \
1656 1601                  if ((un)->un_stats != NULL) {                           \
1657 1602                          kstat_io_t *kip = KSTAT_IO_PTR((un)->un_stats); \
1658 1603                          SD_UPDATE_COMMON_KSTATS(kstat_function, kip);   \
1659 1604                  }                                                       \
1660 1605                  if (pksp != NULL) {                                     \
1661 1606                          kstat_io_t *kip = KSTAT_IO_PTR(pksp);           \
1662 1607                          SD_UPDATE_COMMON_KSTATS(kstat_function, kip);   \
1663 1608                  }                                                       \
1664 1609          }
1665 1610  
1666 1611  #define SD_UPDATE_ERRSTATS(un, x)                                       \
1667 1612          if ((un)->un_errstats != NULL) {                                \
1668 1613                  struct sd_errstats *stp;                                \
1669 1614                  ASSERT(mutex_owned(SD_MUTEX(un)));                      \
1670 1615                  stp = (struct sd_errstats *)(un)->un_errstats->ks_data; \
1671 1616                  stp->x.value.ui32++;                                    \
1672 1617          }
1673 1618  
1674 1619  #define SD_UPDATE_RDWR_STATS(un, bp)                                    \
1675 1620          if ((un)->un_stats != NULL) {                                   \
1676 1621                  kstat_io_t *kip = KSTAT_IO_PTR((un)->un_stats);         \
1677 1622                  size_t n_done = (bp)->b_bcount - (bp)->b_resid;         \
1678 1623                  if ((bp)->b_flags & B_READ) {                           \
1679 1624                          kip->reads++;                                   \
1680 1625                          kip->nread += n_done;                           \
1681 1626                  } else {                                                \
1682 1627                          kip->writes++;                                  \
1683 1628                          kip->nwritten += n_done;                        \
1684 1629                  }                                                       \
1685 1630          }
1686 1631  
1687 1632  #define SD_UPDATE_PARTITION_STATS(un, bp)                               \
1688 1633  {                                                                       \
1689 1634          struct kstat *pksp = (un)->un_pstats[SDPART((bp)->b_edev)];     \
1690 1635          if (pksp != NULL) {                                             \
1691 1636                  kstat_io_t *kip = KSTAT_IO_PTR(pksp);                   \
1692 1637                  size_t n_done = (bp)->b_bcount - (bp)->b_resid;         \
1693 1638                  if ((bp)->b_flags & B_READ) {                           \
1694 1639                          kip->reads++;                                   \
1695 1640                          kip->nread += n_done;                           \
1696 1641                  } else {                                                \
1697 1642                          kip->writes++;                                  \
  
    | 
      ↓ open down ↓ | 
    186 lines elided | 
    
      ↑ open up ↑ | 
  
1698 1643                          kip->nwritten += n_done;                        \
1699 1644                  }                                                       \
1700 1645          }                                                               \
1701 1646  }
1702 1647  
1703 1648  
1704 1649  #endif  /* defined(_KERNEL) || defined(_KMEMUSER) */
1705 1650  
1706 1651  
1707 1652  /*
1708      - * 60 seconds is a *very* reasonable amount of time for most slow CD
1709      - * operations.
     1653 + * 15 seconds is a *very* reasonable amount of time for any device with retries.
     1654 + * Doubled for slow CD operations.
1710 1655   */
1711      -#define SD_IO_TIME                      60
     1656 +#define SD_IO_TIME                      15
1712 1657  
1713 1658  /*
1714 1659   * 2 hours is an excessively reasonable amount of time for format operations.
1715 1660   */
1716 1661  #define SD_FMT_TIME                     (120 * 60)
1717 1662  
1718 1663  /*
1719 1664   * 5 seconds is what we'll wait if we get a Busy Status back
1720 1665   */
1721 1666  #define SD_BSY_TIMEOUT                  (drv_usectohz(5 * 1000000))
1722 1667  
1723 1668  /*
1724 1669   * 100 msec. is what we'll wait if we get Unit Attention.
1725 1670   */
1726 1671  #define SD_UA_RETRY_DELAY               (drv_usectohz((clock_t)100000))
1727 1672  
1728 1673  /*
1729 1674   * 100 msec. is what we'll wait for restarted commands.
1730 1675   */
1731 1676  #define SD_RESTART_TIMEOUT              (drv_usectohz((clock_t)100000))
  
    | 
      ↓ open down ↓ | 
    10 lines elided | 
    
      ↑ open up ↑ | 
  
1732 1677  
1733 1678  /*
1734 1679   * 10s misaligned I/O warning message interval
1735 1680   */
1736 1681  #define SD_RMW_MSG_PRINT_TIMEOUT        (drv_usectohz((clock_t)10000000))
1737 1682  
1738 1683  /*
1739 1684   * 100 msec. is what we'll wait for certain retries for fibre channel
1740 1685   * targets, 0 msec for parallel SCSI.
1741 1686   */
1742      -#if defined(__fibre)
1743      -#define SD_RETRY_DELAY                  (drv_usectohz(100000))
1744      -#else
1745 1687  #define SD_RETRY_DELAY                  ((clock_t)0)
1746      -#endif
1747 1688  
1748 1689  /*
1749 1690   * Number of times we'll retry a normal operation.
1750 1691   *
1751 1692   * This includes retries due to transport failure
1752 1693   * (need to distinguish between Target and Transport failure)
1753 1694   *
1754 1695   */
1755      -#if defined(__fibre)
1756      -#define SD_RETRY_COUNT                  3
1757      -#else
1758 1696  #define SD_RETRY_COUNT                  5
1759      -#endif
1760 1697  
1761 1698  /*
1762 1699   * Number of times we will retry for unit attention.
1763 1700   */
1764      -#define SD_UA_RETRY_COUNT               600
     1701 +#define SD_UA_RETRY_COUNT               25
1765 1702  
1766 1703  #define SD_VICTIM_RETRY_COUNT(un)       (un->un_victim_retry_count)
1767 1704  #define CD_NOT_READY_RETRY_COUNT(un)    (un->un_retry_count * 2)
1768 1705  #define DISK_NOT_READY_RETRY_COUNT(un)  (un->un_retry_count / 2)
1769 1706  
1770 1707  
1771 1708  /*
1772 1709   * Maximum number of units we can support
1773 1710   * (controlled by room in minor device byte)
1774 1711   *
1775 1712   * Note: this value is out of date.
1776 1713   */
1777 1714  #define SD_MAXUNIT                      32
1778 1715  
1779 1716  /*
1780 1717   * 30 seconds is what we will wait for the IO to finish
1781 1718   * before we fail the DDI_SUSPEND
1782 1719   */
1783 1720  #define SD_WAIT_CMDS_COMPLETE           30
1784 1721  
1785 1722  /*
1786 1723   * Prevent/allow media removal flags
1787 1724   */
1788 1725  #define SD_REMOVAL_ALLOW                0
1789 1726  #define SD_REMOVAL_PREVENT              1
1790 1727  
1791 1728  
1792 1729  /*
1793 1730   * Drive Types (and characteristics)
1794 1731   */
1795 1732  #define VIDMAX                          8
1796 1733  #define PIDMAX                          16
1797 1734  
1798 1735  
1799 1736  /*
1800 1737   * The following #defines and type definitions for the property
1801 1738   * processing component of the sd driver.
1802 1739   */
1803 1740  
1804 1741  
1805 1742  /* Miscellaneous Definitions */
1806 1743  #define SD_CONF_VERSION_1               1
1807 1744  #define SD_CONF_NOT_USED                32
1808 1745  
1809 1746  /*
1810 1747   * "pm-capable" property values and macros
1811 1748   */
1812 1749  #define SD_PM_CAPABLE_UNDEFINED         -1
1813 1750  
1814 1751  #define SD_PM_CAPABLE_IS_UNDEFINED(pm_cap)      \
1815 1752          (pm_cap == SD_PM_CAPABLE_UNDEFINED)
1816 1753  
1817 1754  #define SD_PM_CAPABLE_IS_FALSE(pm_cap)  \
1818 1755          ((pm_cap & PM_CAPABLE_PM_MASK) == 0)
1819 1756  
1820 1757  #define SD_PM_CAPABLE_IS_TRUE(pm_cap)   \
1821 1758          (!SD_PM_CAPABLE_IS_UNDEFINED(pm_cap) && \
1822 1759              ((pm_cap & PM_CAPABLE_PM_MASK) > 0))
1823 1760  
1824 1761  #define SD_PM_CAPABLE_IS_SPC_4(pm_cap)  \
1825 1762          ((pm_cap & PM_CAPABLE_PM_MASK) == PM_CAPABLE_SPC4)
1826 1763  
1827 1764  #define SD_PM_CAP_LOG_SUPPORTED(pm_cap) \
1828 1765          ((pm_cap & PM_CAPABLE_LOG_SUPPORTED) ? TRUE : FALSE)
1829 1766  
1830 1767  #define SD_PM_CAP_SMART_LOG(pm_cap)     \
1831 1768          ((pm_cap & PM_CAPABLE_SMART_LOG) ? TRUE : FALSE)
1832 1769  
1833 1770  /*
1834 1771   * Property data values used in static configuration table
1835 1772   * These are all based on device characteristics.
1836 1773   * For fibre channel devices, the throttle value is usually
1837 1774   * derived from the devices cmd Q depth divided by the number
1838 1775   * of supported initiators.
1839 1776   */
1840 1777  #define ELITE_THROTTLE_VALUE            10
1841 1778  #define SEAGATE_THROTTLE_VALUE          15
1842 1779  #define IBM_THROTTLE_VALUE              15
1843 1780  #define ST31200N_THROTTLE_VALUE         8
1844 1781  #define FUJITSU_THROTTLE_VALUE          15
1845 1782  #define SYMBIOS_THROTTLE_VALUE          16
1846 1783  #define SYMBIOS_NOTREADY_RETRIES        24
1847 1784  #define LSI_THROTTLE_VALUE              16
1848 1785  #define LSI_NOTREADY_RETRIES            24
1849 1786  #define LSI_OEM_NOTREADY_RETRIES        36
1850 1787  #define PURPLE_THROTTLE_VALUE           64
1851 1788  #define PURPLE_BUSY_RETRIES             60
1852 1789  #define PURPLE_RESET_RETRY_COUNT        36
1853 1790  #define PURPLE_RESERVE_RELEASE_TIME     60
1854 1791  #define SVE_BUSY_RETRIES                60
1855 1792  #define SVE_RESET_RETRY_COUNT           36
1856 1793  #define SVE_RESERVE_RELEASE_TIME        60
1857 1794  #define SVE_THROTTLE_VALUE              10
1858 1795  #define SVE_MIN_THROTTLE_VALUE          2
1859 1796  #define SVE_DISKSORT_DISABLED_FLAG      1
1860 1797  #define MASERATI_DISKSORT_DISABLED_FLAG 1
1861 1798  #define MASERATI_LUN_RESET_ENABLED_FLAG 1
  
    | 
      ↓ open down ↓ | 
    87 lines elided | 
    
      ↑ open up ↑ | 
  
1862 1799  #define PIRUS_THROTTLE_VALUE            64
1863 1800  #define PIRUS_NRR_COUNT                 60
1864 1801  #define PIRUS_BUSY_RETRIES              60
1865 1802  #define PIRUS_RESET_RETRY_COUNT         36
1866 1803  #define PIRUS_MIN_THROTTLE_VALUE        16
1867 1804  #define PIRUS_DISKSORT_DISABLED_FLAG    0
1868 1805  #define PIRUS_LUN_RESET_ENABLED_FLAG    1
1869 1806  
1870 1807  /*
1871 1808   * Driver Property Bit Flag definitions
1872      - *
1873      - * Unfortunately, for historical reasons, the bit-flag definitions are
1874      - * different on SPARC, INTEL, & FIBRE platforms.
1875 1809   */
1876 1810  
1877 1811  /*
1878 1812   * Bit flag telling driver to set throttle from sd.conf sd-config-list
1879 1813   * and driver table.
1880 1814   *
1881 1815   * The max throttle (q-depth) property implementation is for support of
1882 1816   * fibre channel devices that can drop an i/o request when a queue fills
1883 1817   * up. The number of commands sent to the disk from this driver is
1884 1818   * regulated such that queue overflows are avoided.
1885 1819   */
1886 1820  #define SD_CONF_SET_THROTTLE            0
1887 1821  #define SD_CONF_BSET_THROTTLE           (1 << SD_CONF_SET_THROTTLE)
1888 1822  
1889 1823  /*
1890 1824   * Bit flag telling driver to set the controller type from sd.conf
1891 1825   * sd-config-list and driver table.
1892 1826   */
1893      -#if defined(__i386) || defined(__amd64)
1894 1827  #define SD_CONF_SET_CTYPE               1
1895      -#elif defined(__fibre)
1896      -#define SD_CONF_SET_CTYPE               5
1897      -#else
1898      -#define SD_CONF_SET_CTYPE               1
1899      -#endif
1900 1828  #define SD_CONF_BSET_CTYPE              (1 << SD_CONF_SET_CTYPE)
1901 1829  
1902 1830  /*
1903 1831   * Bit flag telling driver to set the not ready retry count for a device from
1904 1832   * sd.conf sd-config-list and driver table.
1905 1833   */
1906      -#if defined(__i386) || defined(__amd64)
1907 1834  #define SD_CONF_SET_NOTREADY_RETRIES    10
1908      -#elif defined(__fibre)
1909      -#define SD_CONF_SET_NOTREADY_RETRIES    1
1910      -#else
1911      -#define SD_CONF_SET_NOTREADY_RETRIES    2
1912      -#endif
1913 1835  #define SD_CONF_BSET_NRR_COUNT          (1 << SD_CONF_SET_NOTREADY_RETRIES)
1914 1836  
1915 1837  /*
1916 1838   * Bit flag telling driver to set SCSI status BUSY Retries from sd.conf
1917 1839   * sd-config-list and driver table.
1918 1840   */
1919      -#if defined(__i386) || defined(__amd64)
1920 1841  #define SD_CONF_SET_BUSY_RETRIES        11
1921      -#elif defined(__fibre)
1922      -#define SD_CONF_SET_BUSY_RETRIES        2
1923      -#else
1924      -#define SD_CONF_SET_BUSY_RETRIES        5
1925      -#endif
1926 1842  #define SD_CONF_BSET_BSY_RETRY_COUNT    (1 << SD_CONF_SET_BUSY_RETRIES)
1927 1843  
1928 1844  /*
1929 1845   * Bit flag telling driver that device does not have a valid/unique serial
1930 1846   * number.
1931 1847   */
1932      -#if defined(__i386) || defined(__amd64)
1933 1848  #define SD_CONF_SET_FAB_DEVID           2
1934      -#else
1935      -#define SD_CONF_SET_FAB_DEVID           3
1936      -#endif
1937 1849  #define SD_CONF_BSET_FAB_DEVID          (1 << SD_CONF_SET_FAB_DEVID)
1938 1850  
1939 1851  /*
1940 1852   * Bit flag telling driver to disable all caching for disk device.
1941 1853   */
1942      -#if defined(__i386) || defined(__amd64)
1943 1854  #define SD_CONF_SET_NOCACHE             3
1944      -#else
1945      -#define SD_CONF_SET_NOCACHE             4
1946      -#endif
1947 1855  #define SD_CONF_BSET_NOCACHE            (1 << SD_CONF_SET_NOCACHE)
1948 1856  
1949 1857  /*
1950 1858   * Bit flag telling driver that the PLAY AUDIO command requires parms in BCD
1951 1859   * format rather than binary.
1952 1860   */
1953      -#if defined(__i386) || defined(__amd64)
1954 1861  #define SD_CONF_SET_PLAYMSF_BCD         4
1955      -#else
1956      -#define SD_CONF_SET_PLAYMSF_BCD         6
1957      -#endif
1958 1862  #define SD_CONF_BSET_PLAYMSF_BCD        (1 << SD_CONF_SET_PLAYMSF_BCD)
1959 1863  
1960 1864  /*
1961 1865   * Bit flag telling driver that the response from the READ SUBCHANNEL command
1962 1866   * has BCD fields rather than binary.
1963 1867   */
1964      -#if defined(__i386) || defined(__amd64)
1965 1868  #define SD_CONF_SET_READSUB_BCD         5
1966      -#else
1967      -#define SD_CONF_SET_READSUB_BCD         7
1968      -#endif
1969 1869  #define SD_CONF_BSET_READSUB_BCD        (1 << SD_CONF_SET_READSUB_BCD)
1970 1870  
1971 1871  /*
1972 1872   * Bit in flags telling driver that the track number fields in the READ TOC
1973 1873   * request and respone are in BCD rather than binary.
1974 1874   */
1975      -#if defined(__i386) || defined(__amd64)
1976 1875  #define SD_CONF_SET_READ_TOC_TRK_BCD    6
1977      -#else
1978      -#define SD_CONF_SET_READ_TOC_TRK_BCD    8
1979      -#endif
1980 1876  #define SD_CONF_BSET_READ_TOC_TRK_BCD   (1 << SD_CONF_SET_READ_TOC_TRK_BCD)
1981 1877  
1982 1878  /*
1983 1879   * Bit flag telling driver that the address fields in the READ TOC request and
1984 1880   * respone are in BCD rather than binary.
1985 1881   */
1986      -#if defined(__i386) || defined(__amd64)
1987 1882  #define SD_CONF_SET_READ_TOC_ADDR_BCD   7
1988      -#else
1989      -#define SD_CONF_SET_READ_TOC_ADDR_BCD   9
1990      -#endif
1991 1883  #define SD_CONF_BSET_READ_TOC_ADDR_BCD  (1 << SD_CONF_SET_READ_TOC_ADDR_BCD)
1992 1884  
1993 1885  /*
1994 1886   * Bit flag telling the driver that the device doesn't support the READ HEADER
1995 1887   * command.
1996 1888   */
1997      -#if defined(__i386) || defined(__amd64)
1998 1889  #define SD_CONF_SET_NO_READ_HEADER      8
1999      -#else
2000      -#define SD_CONF_SET_NO_READ_HEADER      10
2001      -#endif
2002 1890  #define SD_CONF_BSET_NO_READ_HEADER     (1 << SD_CONF_SET_NO_READ_HEADER)
2003 1891  
2004 1892  /*
2005 1893   * Bit flag telling the driver that for the READ CD command the device uses
2006 1894   * opcode 0xd4 rather than 0xbe.
2007 1895   */
2008      -#if defined(__i386) || defined(__amd64)
2009 1896  #define SD_CONF_SET_READ_CD_XD4         9
2010      -#else
2011      -#define SD_CONF_SET_READ_CD_XD4         11
2012      -#endif
2013 1897  #define SD_CONF_BSET_READ_CD_XD4        (1 << SD_CONF_SET_READ_CD_XD4)
2014 1898  
2015 1899  /*
2016 1900   * Bit flag telling the driver to set SCSI status Reset Retries
2017 1901   * (un_reset_retry_count) from sd.conf sd-config-list and driver table (4356701)
2018 1902   */
2019 1903  #define SD_CONF_SET_RST_RETRIES         12
2020 1904  #define SD_CONF_BSET_RST_RETRIES        (1 << SD_CONF_SET_RST_RETRIES)
2021 1905  
2022 1906  /*
2023 1907   * Bit flag telling the driver to set the reservation release timeout value
2024 1908   * from sd.conf sd-config-list and driver table. (4367306)
2025 1909   */
2026 1910  #define SD_CONF_SET_RSV_REL_TIME        13
2027 1911  #define SD_CONF_BSET_RSV_REL_TIME       (1 << SD_CONF_SET_RSV_REL_TIME)
  
    | 
      ↓ open down ↓ | 
    5 lines elided | 
    
      ↑ open up ↑ | 
  
2028 1912  
2029 1913  /*
2030 1914   * Bit flag telling the driver to verify that no commands are pending for a
2031 1915   * device before issuing a Test Unit Ready. This is a fw workaround for Seagate
2032 1916   * eliteI drives. (4392016)
2033 1917   */
2034 1918  #define SD_CONF_SET_TUR_CHECK           14
2035 1919  #define SD_CONF_BSET_TUR_CHECK          (1 << SD_CONF_SET_TUR_CHECK)
2036 1920  
2037 1921  /*
2038      - * Bit in flags telling driver to set min. throttle from ssd.conf
2039      - * ssd-config-list and driver table.
     1922 + * Bit in flags telling driver to set min. throttle from sd.conf
     1923 + * sd-config-list and driver table.
2040 1924   */
2041 1925  #define SD_CONF_SET_MIN_THROTTLE        15
2042 1926  #define SD_CONF_BSET_MIN_THROTTLE       (1 << SD_CONF_SET_MIN_THROTTLE)
2043 1927  
2044 1928  /*
2045      - * Bit in flags telling driver to set disksort disable flag from ssd.conf
2046      - * ssd-config-list and driver table.
     1929 + * Bit in flags telling driver to set disksort disable flag from sd.conf
     1930 + * sd-config-list and driver table.
2047 1931   */
2048 1932  #define SD_CONF_SET_DISKSORT_DISABLED   16
2049 1933  #define SD_CONF_BSET_DISKSORT_DISABLED  (1 << SD_CONF_SET_DISKSORT_DISABLED)
2050 1934  
2051 1935  /*
2052      - * Bit in flags telling driver to set LUN Reset enable flag from [s]sd.conf
2053      - * [s]sd-config-list and driver table.
     1936 + * Bit in flags telling driver to set LUN Reset enable flag from sd.conf
     1937 + * sd-config-list and driver table.
2054 1938   */
2055 1939  #define SD_CONF_SET_LUN_RESET_ENABLED   17
2056 1940  #define SD_CONF_BSET_LUN_RESET_ENABLED  (1 << SD_CONF_SET_LUN_RESET_ENABLED)
2057 1941  
2058 1942  /*
2059 1943   * Bit in flags telling driver that the write cache on the device is
2060 1944   * non-volatile.
2061 1945   */
2062      -#define SD_CONF_SET_CACHE_IS_NV 18
     1946 +#define SD_CONF_SET_CACHE_IS_NV         18
2063 1947  #define SD_CONF_BSET_CACHE_IS_NV        (1 << SD_CONF_SET_CACHE_IS_NV)
2064 1948  
2065 1949  /*
2066      - * Bit in flags telling driver that the power condition flag from [s]sd.conf
2067      - * [s]sd-config-list and driver table.
     1950 + * Bit in flags telling driver that the power condition flag from sd.conf
     1951 + * sd-config-list and driver table.
2068 1952   */
2069      -#define SD_CONF_SET_PC_DISABLED 19
     1953 +#define SD_CONF_SET_PC_DISABLED         19
2070 1954  #define SD_CONF_BSET_PC_DISABLED        (1 << SD_CONF_SET_PC_DISABLED)
2071 1955  
2072 1956  /*
2073 1957   * This is the number of items currently settable in the sd.conf
2074 1958   * sd-config-list.  The mask value is defined for parameter checking. The
2075 1959   * item count and mask should be updated when new properties are added.
2076 1960   */
2077 1961  #define SD_CONF_MAX_ITEMS               19
2078 1962  #define SD_CONF_BIT_MASK                0x0007FFFF
2079 1963  
2080 1964  typedef struct {
2081 1965          int sdt_throttle;
2082 1966          int sdt_ctype;
2083 1967          int sdt_not_rdy_retries;
2084 1968          int sdt_busy_retries;
2085 1969          int sdt_reset_retries;
2086 1970          int sdt_reserv_rel_time;
2087 1971          int sdt_min_throttle;
2088 1972          int sdt_disk_sort_dis;
2089 1973          int sdt_lun_reset_enable;
2090 1974          int sdt_suppress_cache_flush;
2091 1975          int sdt_power_condition_dis;
2092 1976  } sd_tunables;
2093 1977  
2094 1978  /* Type definition for static configuration table entries */
2095 1979  typedef struct sd_disk_config {
2096 1980          char    device_id[25];
2097 1981          uint_t  flags;
2098 1982          sd_tunables *properties;
2099 1983  } sd_disk_config_t;
2100 1984  
2101 1985  /*
2102 1986   * first 2 bits of byte 4 options for 1bh command
2103 1987   */
2104 1988  #define SD_TARGET_STOP                  0x00
2105 1989  #define SD_TARGET_START                 0x01
2106 1990  #define SD_TARGET_EJECT                 0x02
2107 1991  #define SD_TARGET_CLOSE                 0x03
2108 1992  
2109 1993  /*
2110 1994   * power condition of byte 4 for 1bh command
2111 1995   */
2112 1996  #define SD_TARGET_START_VALID           0x00
2113 1997  #define SD_TARGET_ACTIVE                0x01
2114 1998  #define SD_TARGET_IDLE                  0x02
2115 1999  #define SD_TARGET_STANDBY               0x03
2116 2000  
2117 2001  
2118 2002  #define SD_MODE_SENSE_PAGE3_CODE        0x03
2119 2003  #define SD_MODE_SENSE_PAGE4_CODE        0x04
2120 2004  
2121 2005  #define SD_MODE_SENSE_PAGE3_LENGTH                                      \
2122 2006          (sizeof (struct mode_format) + MODE_PARAM_LENGTH)
2123 2007  #define SD_MODE_SENSE_PAGE4_LENGTH                                      \
2124 2008          (sizeof (struct mode_geometry) + MODE_PARAM_LENGTH)
2125 2009  
2126 2010  /*
2127 2011   * These command codes need to be moved to sys/scsi/generic/commands.h
2128 2012   */
2129 2013  
2130 2014  /* Both versions of the Read CD command */
2131 2015  
2132 2016  /* the official SCMD_READ_CD now comes from cdio.h */
2133 2017  #define SCMD_READ_CDD4          0xd4    /* the one used by some first */
2134 2018                                          /* generation ATAPI CD drives */
2135 2019  
2136 2020  /* expected sector type filter values for Play and Read CD CDBs */
2137 2021  #define CDROM_SECTOR_TYPE_CDDA          (1<<2)  /* IEC 908:1987 (CDDA) */
2138 2022  #define CDROM_SECTOR_TYPE_MODE1         (2<<2)  /* Yellow book 2048 bytes */
2139 2023  #define CDROM_SECTOR_TYPE_MODE2         (3<<2)  /* Yellow book 2335 bytes */
2140 2024  #define CDROM_SECTOR_TYPE_MODE2_FORM1   (4<<2)  /* 2048 bytes */
2141 2025  #define CDROM_SECTOR_TYPE_MODE2_FORM2   (5<<2)  /* 2324 bytes */
2142 2026  
2143 2027  /* READ CD filter bits (cdb[9]) */
2144 2028  #define CDROM_READ_CD_SYNC      0x80    /* read sync field */
2145 2029  #define CDROM_READ_CD_HDR       0x20    /* read four byte header */
2146 2030  #define CDROM_READ_CD_SUBHDR    0x40    /* read sub-header */
2147 2031  #define CDROM_READ_CD_ALLHDRS   0x60    /* read header and sub-header */
2148 2032  #define CDROM_READ_CD_USERDATA  0x10    /* read user data */
2149 2033  #define CDROM_READ_CD_EDC_ECC   0x08    /* read EDC and ECC field */
2150 2034  #define CDROM_READ_CD_C2        0x02    /* read C2 error data */
2151 2035  #define CDROM_READ_CD_C2_BEB    0x04    /* read C2 and Block Error Bits */
2152 2036  
2153 2037  
2154 2038  /*
2155 2039   * These belong in sys/scsi/generic/mode.h
2156 2040   */
2157 2041  
2158 2042  /*
2159 2043   * Mode Sense/Select Header response for Group 2 CDB.
2160 2044   */
2161 2045  
2162 2046  struct mode_header_grp2 {
  
    | 
      ↓ open down ↓ | 
    83 lines elided | 
    
      ↑ open up ↑ | 
  
2163 2047          uchar_t length_msb;             /* MSB - number of bytes following */
2164 2048          uchar_t length_lsb;
2165 2049          uchar_t medium_type;            /* device specific */
2166 2050          uchar_t device_specific;        /* device specfic parameters */
2167 2051          uchar_t resv[2];                /* reserved */
2168 2052          uchar_t bdesc_length_hi;        /* length of block descriptor(s) */
2169 2053                                          /* (if any) */
2170 2054          uchar_t bdesc_length_lo;
2171 2055  };
2172 2056  
2173      -_NOTE(SCHEME_PROTECTS_DATA("Unshared data", mode_header_grp2))
2174      -
2175 2057  /*
2176 2058   * Length of the Mode Parameter Header for the Group 2 Mode Select command
2177 2059   */
2178 2060  #define MODE_HEADER_LENGTH_GRP2 (sizeof (struct mode_header_grp2))
2179 2061  #define MODE_PARAM_LENGTH_GRP2 (MODE_HEADER_LENGTH_GRP2 + MODE_BLK_DESC_LENGTH)
2180 2062  
2181 2063  /*
2182 2064   * Mode Page 1 - Error Recovery Page
2183 2065   */
2184 2066  #define MODEPAGE_ERR_RECOVER            1
2185 2067  
2186 2068  /*
2187 2069   * The following buffer length define is 8 bytes for the Group 2 mode page
2188 2070   * header, 8 bytes for the block descriptor and 26 bytes for the cdrom
2189 2071   * capabilities page (per MMC-2)
2190 2072   */
2191 2073  #define MODEPAGE_CDROM_CAP              0x2A
2192 2074  #define MODEPAGE_CDROM_CAP_LEN          26
2193 2075  #define BUFLEN_MODE_CDROM_CAP           (MODEPAGE_CDROM_CAP_LEN + \
2194 2076          MODE_HEADER_LENGTH_GRP2 + MODE_BLK_DESC_LENGTH)
2195 2077  
2196 2078  
2197 2079  /*
2198 2080   * Power management defines
2199 2081   */
2200 2082  #define SD_SPINDLE_UNINIT       (-1)
2201 2083  #define SD_SPINDLE_OFF          0
2202 2084  #define SD_SPINDLE_ON           1
2203 2085  #define SD_SPINDLE_STOPPED      0
2204 2086  #define SD_SPINDLE_STANDBY      1
2205 2087  #define SD_SPINDLE_IDLE         2
2206 2088  #define SD_SPINDLE_ACTIVE       3
2207 2089  #define SD_PM_NOT_SUPPORTED     4
2208 2090  
2209 2091  /*
2210 2092   * Power method flag
2211 2093   */
2212 2094  #define SD_START_STOP           0
2213 2095  #define SD_POWER_CONDITION      1
2214 2096  
2215 2097  
2216 2098  /*
2217 2099   * Number of power level for start stop or power condition
2218 2100   */
2219 2101  #define SD_PM_NUM_LEVEL_SSU_SS  2
2220 2102  #define SD_PM_NUM_LEVEL_SSU_PC  4
2221 2103  
2222 2104  /*
2223 2105   * SD internal power state change flag
2224 2106   */
2225 2107  #define SD_PM_STATE_CHANGE      0
2226 2108  #define SD_PM_STATE_ROLLBACK    1
2227 2109  
2228 2110  /*
2229 2111   * Power attribute table
2230 2112   */
2231 2113  typedef struct disk_power_attr_ss {
2232 2114          char *pm_comp[SD_PM_NUM_LEVEL_SSU_SS + 2];      /* pm component */
2233 2115          int ran_perf[SD_PM_NUM_LEVEL_SSU_SS];           /* random performance */
2234 2116          int pwr_saving[SD_PM_NUM_LEVEL_SSU_SS];         /* power saving */
2235 2117          int latency[SD_PM_NUM_LEVEL_SSU_SS];            /* latency */
2236 2118  }sd_power_attr_ss;
2237 2119  
2238 2120  typedef struct disk_power_attr_pc {
2239 2121          char *pm_comp[SD_PM_NUM_LEVEL_SSU_PC + 2];      /* pm component */
2240 2122          int ran_perf[SD_PM_NUM_LEVEL_SSU_PC];           /* random performance */
2241 2123          int pwr_saving[SD_PM_NUM_LEVEL_SSU_PC];         /* power saving */
2242 2124          int latency[SD_PM_NUM_LEVEL_SSU_PC];            /* latency */
2243 2125  }sd_power_attr_pc;
2244 2126  
2245 2127  
2246 2128  /*
2247 2129   * No Need to resume if already in PM_SUSPEND state because the thread
2248 2130   * was suspended in sdpower. It will be resumed when sdpower is invoked to make
2249 2131   * the device active.
2250 2132   * When the thread is suspended, the watch thread is terminated and
2251 2133   * the token is NULLed so check for this condition.
2252 2134   * If there's a thread that can be resumed, ie. token is not NULL, then
2253 2135   * it can be resumed.
2254 2136   */
2255 2137  #define SD_OK_TO_RESUME_SCSI_WATCHER(un)        (un->un_swr_token != NULL)
2256 2138  /*
2257 2139   * No Need to resume if already in PM_SUSPEND state because the thread
2258 2140   * was suspended in sdpower. It will be resumed when sdpower is invoked to make
2259 2141   * the device active.
2260 2142   * When the thread is suspended, the watch thread is terminated and
2261 2143   * the token is NULLed so check for this condition.
2262 2144   */
2263 2145  #define SD_OK_TO_SUSPEND_SCSI_WATCHER(un)       (un->un_swr_token != NULL)
2264 2146  #define SD_DEVICE_IS_IN_LOW_POWER(un)           ((un->un_f_pm_is_enabled) && \
2265 2147                                                      (un->un_pm_count < 0))
2266 2148  #define SD_PM_STATE_ACTIVE(un)                          \
2267 2149                  (un->un_f_power_condition_supported ?   \
2268 2150                  SD_SPINDLE_ACTIVE : SD_SPINDLE_ON)
2269 2151  #define SD_PM_STATE_STOPPED(un)                         \
2270 2152                  (un->un_f_power_condition_supported ?   \
2271 2153                  SD_SPINDLE_STOPPED : SD_SPINDLE_OFF)
2272 2154  #define SD_PM_IS_LEVEL_VALID(un, level)                 \
2273 2155                  ((un->un_f_power_condition_supported && \
2274 2156                  level >= SD_SPINDLE_STOPPED &&          \
2275 2157                  level <= SD_SPINDLE_ACTIVE) ||          \
2276 2158                  (!un->un_f_power_condition_supported && \
2277 2159                  level >= SD_SPINDLE_OFF &&              \
2278 2160                  level <= SD_SPINDLE_ON))
2279 2161  #define SD_PM_IS_IO_CAPABLE(un, level)                  \
2280 2162                  ((un->un_f_power_condition_supported && \
2281 2163                  sd_pwr_pc.ran_perf[level] > 0) ||       \
2282 2164                  (!un->un_f_power_condition_supported && \
2283 2165                  sd_pwr_ss.ran_perf[level] > 0))
2284 2166  #define SD_PM_STOP_MOTOR_NEEDED(un, level)              \
2285 2167                  ((un->un_f_power_condition_supported && \
2286 2168                  level <= SD_SPINDLE_STANDBY) ||         \
2287 2169                  (!un->un_f_power_condition_supported && \
2288 2170                  level == SD_SPINDLE_OFF))
2289 2171  
2290 2172  /*
2291 2173   * Could move this define to some thing like log sense.h in SCSA headers
2292 2174   * But for now let it live here.
2293 2175   */
2294 2176  #define START_STOP_CYCLE_COUNTER_PAGE_SIZE      0x28
2295 2177  #define START_STOP_CYCLE_PAGE                   0x0E
2296 2178  #define START_STOP_CYCLE_VU_PAGE                0x31
2297 2179  
2298 2180  /* CD-ROM Error Recovery Parameters page (0x01) */
2299 2181  #define MODEPAGE_ERR_RECOV      0x1
2300 2182  #define BUFLEN_CHG_BLK_MODE     MODE_HEADER_LENGTH + MODE_BLK_DESC_LENGTH
2301 2183  
2302 2184  /*
2303 2185   * Vendor Specific (Toshiba) CD-ROM Speed page (0x31)
2304 2186   *
2305 2187   * The following buffer length define is 4 bytes for the Group 0 mode page
2306 2188   * header, 8 bytes for the block descriptor and 4 bytes for the mode speed page.
2307 2189   */
2308 2190  #define MODEPAGE_CDROM_SPEED_LEN        4
2309 2191  #define BUFLEN_MODE_CDROM_SPEED         MODEPAGE_CDROM_SPEED_LEN +\
2310 2192                                          MODE_HEADER_LENGTH +\
2311 2193                                          MODE_BLK_DESC_LENGTH
2312 2194  #define SD_SPEED_1X                     176
2313 2195  
2314 2196  /* CD-ROM Audio Control Parameters page (0x0E) */
2315 2197  #define MODEPAGE_AUDIO_CTRL             0x0E
2316 2198  #define MODEPAGE_AUDIO_CTRL_LEN         16
2317 2199  
2318 2200  /* CD-ROM Sony Read Offset Defines */
2319 2201  #define SONY_SESSION_OFFSET_LEN         12
2320 2202  #define SONY_SESSION_OFFSET_KEY         0x40
2321 2203  #define SONY_SESSION_OFFSET_VALID       0x0a
2322 2204  
2323 2205  /*
2324 2206   * CD-ROM Write Protect Defines
2325 2207   *
2326 2208   * Bit 7 of the device specific field of the mode page header is the write
2327 2209   * protect bit.
2328 2210   */
2329 2211  #define WRITE_PROTECT 0x80
2330 2212  
2331 2213  /*
2332 2214   * Define for the length of a profile header returned in response to the
2333 2215   * GET CONFIGURATION command
2334 2216   */
2335 2217  #define SD_PROFILE_HEADER_LEN           8       /* bytes */
2336 2218  
2337 2219  /*
2338 2220   * Define the length of the data in response to the GET CONFIGURATION
2339 2221   * command.  The 3rd byte of the feature descriptor contains the
2340 2222   * current feature field that is of interest.  This field begins
2341 2223   * after the feature header which is 8 bytes.  This variable length
2342 2224   * was increased in size from 11 to 24 because some devices became
2343 2225   * unresponsive with the smaller size.
2344 2226   */
2345 2227  #define SD_CURRENT_FEATURE_LEN          24      /* bytes */
2346 2228  
2347 2229  /*
2348 2230   * Feature codes associated with GET CONFIGURATION command for supported
2349 2231   * devices.
2350 2232   */
2351 2233  #define RANDOM_WRITABLE                 0x20
2352 2234  #define HARDWARE_DEFECT_MANAGEMENT      0x24
2353 2235  
2354 2236  /*
2355 2237   * Could move this define to some thing like log sense.h in SCSA headers
2356 2238   * But for now let it live here.
2357 2239   */
2358 2240  #define TEMPERATURE_PAGE                        0x0D
2359 2241  #define TEMPERATURE_PAGE_SIZE                   16      /* bytes */
2360 2242  
2361 2243  /* delay time used for sd_media_watch_cb delayed cv broadcast */
2362 2244  #define MEDIA_ACCESS_DELAY 2000000
2363 2245  
2364 2246  
2365 2247  /* SCSI power on or bus device reset additional sense code */
2366 2248  #define SD_SCSI_RESET_SENSE_CODE        0x29
2367 2249  
  
    | 
      ↓ open down ↓ | 
    183 lines elided | 
    
      ↑ open up ↑ | 
  
2368 2250  /*
2369 2251   * These defines are for the Vital Product Data Pages in the inquiry command.
2370 2252   * They are the bits in the un_vpd_page mask, telling the supported pages.
2371 2253   */
2372 2254  #define SD_VPD_SUPPORTED_PG     0x01    /* 0x00 - Supported VPD pages */
2373 2255  #define SD_VPD_UNIT_SERIAL_PG   0x02    /* 0x80 - Unit Serial Number */
2374 2256  #define SD_VPD_OPERATING_PG     0x04    /* 0x81 - Implemented Op Defs */
2375 2257  #define SD_VPD_ASCII_OP_PG      0x08    /* 0x82 - ASCII Op Defs */
2376 2258  #define SD_VPD_DEVID_WWN_PG     0x10    /* 0x83 - Device Identification */
2377 2259  #define SD_VPD_EXTENDED_DATA_PG 0x80    /* 0x86 - Extended data about the lun */
2378      -#define SD_VPD_DEV_CHARACTER_PG 0x400   /* 0xB1 - Device Characteristics */
     2260 +#define SD_VPD_BLK_LIMITS_PG    0x400   /* 0xB0 - Block Limits */
     2261 +#define SD_VPD_DEV_CHARACTER_PG 0x800   /* 0xB1 - Device Characteristics */
2379 2262  
2380 2263  /*
2381 2264   * Non-volatile cache support
2382 2265   *
2383 2266   * Bit 1 of the byte 6 in the Extended INQUIRY data VPD page
2384 2267   * is NV_SUP bit: An NV_SUP bit set to one indicates that
2385 2268   * the device server supports a non-volatile cache.  An
2386 2269   * NV_SUP bit set to zero indicates that the device
2387 2270   * server may or may not support a non-volatile cache.
2388 2271   *
2389 2272   * Bit 2 of the byte 1 in the SYNC CACHE command is SYNC_NV
2390 2273   * bit: The SYNC_NV bit specifies whether the device server
2391 2274   * is required to synchronize volatile and non-volatile
2392 2275   * caches.
2393 2276   */
2394 2277  #define SD_VPD_NV_SUP   0x02
2395 2278  #define SD_SYNC_NV_BIT 0x04
2396 2279  
2397      -/*
2398      - * Addition from sddef.intel.h
2399      - */
2400      -#if defined(__i386) || defined(__amd64)
2401      -
2402      -#define P0_RAW_DISK     (NDKMAP)
2403      -#define FDISK_P1        (NDKMAP+1)
2404      -#define FDISK_P2        (NDKMAP+2)
2405      -#define FDISK_P3        (NDKMAP+3)
2406      -#define FDISK_P4        (NDKMAP+4)
2407      -
2408      -#endif  /* __i386 || __amd64 */
2409      -
2410 2280  #ifdef  __cplusplus
2411 2281  }
2412 2282  #endif
2413 2283  
2414 2284  
2415 2285  #endif  /* _SYS_SCSI_TARGETS_SDDEF_H */
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX