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
↓ 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)
↓ 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 */
↓ 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          /*
↓ 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 */
↓ 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
↓ 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 */
↓ 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 */
↓ 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:
↓ 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;
↓ 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  };
↓ 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)
↓ 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;
↓ 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
↓ 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  
↓ 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
↓ 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).
↓ 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
↓ 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)
↓ 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
↓ 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.
↓ 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))
↓ 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   *
↓ 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  /*
↓ 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  
↓ 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
↓ 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