Print this page
usr/src/common/zfs/zprop_common.c

*** 16,31 **** * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright (c) 1990, 2010, Oracle and/or its affiliates. All rights reserved. */ /* * Copyright 2011 cyril.galibern@opensvc.com ! * Copyright 2015 Nexenta Systems, Inc. All rights reserved. */ #ifndef _SYS_SCSI_TARGETS_SDDEF_H #define _SYS_SCSI_TARGETS_SDDEF_H --- 16,33 ---- * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ + /* * Copyright (c) 1990, 2010, Oracle and/or its affiliates. All rights reserved. */ + /* * Copyright 2011 cyril.galibern@opensvc.com ! * Copyright 2019 Nexenta Systems, Inc. */ #ifndef _SYS_SCSI_TARGETS_SDDEF_H #define _SYS_SCSI_TARGETS_SDDEF_H
*** 36,49 **** #ifdef __cplusplus extern "C" { #endif - #if defined(_KERNEL) || defined(_KMEMUSER) - #define SD_SUCCESS 0 #define SD_FAILURE (-1) #if defined(TRUE) #undef TRUE --- 38,49 ----
*** 54,92 **** #endif #define TRUE 1 #define FALSE 0 - #if defined(VERBOSE) - #undef VERBOSE - #endif - - #if defined(SILENT) - #undef SILENT - #endif - - /* * Fault Injection Flag for Inclusion of Code - * - * This should only be defined when SDDEBUG is defined - * #if DEBUG || lint - * #define SD_FAULT_INJECTION - * #endif */ - #if DEBUG || lint #define SD_FAULT_INJECTION #endif - #define VERBOSE 1 - #define SILENT 0 /* * Structures for recording whether a device is fully open or closed. * Assumptions: * ! * + There are only 8 (sparc) or 16 (x86) disk slices possible. * + BLK, MNT, CHR, SWP don't change in some future release! */ #if defined(_SUNOS_VTOC_8) --- 54,75 ---- #endif #define TRUE 1 #define FALSE 0 /* * Fault Injection Flag for Inclusion of Code */ #if DEBUG || lint #define SD_FAULT_INJECTION #endif /* * Structures for recording whether a device is fully open or closed. * Assumptions: * ! * + There are only 16 disk slices possible. * + BLK, MNT, CHR, SWP don't change in some future release! */ #if defined(_SUNOS_VTOC_8)
*** 110,119 **** --- 93,107 ---- #else #error "No VTOC format defined." #endif + #define P0_RAW_DISK (NDKMAP) + #define FDISK_P1 (NDKMAP+1) + #define FDISK_P2 (NDKMAP+2) + #define FDISK_P3 (NDKMAP+3) + #define FDISK_P4 (NDKMAP+4) #define SDUNIT(dev) (getminor((dev)) >> SDUNIT_SHIFT) #define SDPART(dev) (getminor((dev)) & SDPART_MASK) /*
*** 129,140 **** * The instance number is encoded in the minor device number. */ #define SD_GET_INSTANCE_FROM_BUF(bp) \ (getminor((bp)->b_edev) >> SDUNIT_SHIFT) - - struct ocinfo { /* * Types BLK, MNT, CHR, SWP, * assumed to be types 0-3. */ --- 117,126 ----
*** 150,160 **** }; #define lyropen rinfo.lyr_open #define regopen rinfo.reg_open - #define SD_CDB_GROUP0 0 #define SD_CDB_GROUP1 1 #define SD_CDB_GROUP5 2 #define SD_CDB_GROUP4 3 --- 136,145 ----
*** 163,174 **** uchar_t sc_grpmask; /* CDB group code mask (for cmd opcode) */ uint64_t sc_maxlba; /* Maximum logical block addr. supported */ uint32_t sc_maxlen; /* Maximum transfer length supported */ }; - - /* * The following declaration are for Non-512 byte block support for the * removable devices. (ex - DVD RAM, MO). * wm_state: This is an enumeration for the different states for * manipalating write range list during the read-modify-write-operation. --- 148,157 ----
*** 194,206 **** struct sd_w_map *wm_next; /* Forward pointed to sd_w_map */ struct sd_w_map *wm_prev; /* Back pointer to sd_w_map */ kcondvar_t wm_avail; /* Sleep on this, while not available */ }; - _NOTE(MUTEX_PROTECTS_DATA(scsi_device::sd_mutex, sd_w_map::wm_flags)) - - /* * This is the struct for the layer-private data area for the * mapblocksize layer. */ --- 177,186 ----
*** 210,223 **** struct sd_w_map *mbs_wmp; /* ptr to write-map struct for RMW */ ssize_t mbs_copy_offset; int mbs_layer_index; /* chain index for RMW */ }; ! _NOTE(SCHEME_PROTECTS_DATA("unshared data", sd_mapblocksize_info)) /* * sd_lun: The main data structure for a scsi logical unit. * Stored as the softstate structure for each device. */ struct sd_lun { --- 190,249 ---- struct sd_w_map *mbs_wmp; /* ptr to write-map struct for RMW */ ssize_t mbs_copy_offset; int mbs_layer_index; /* chain index for RMW */ }; ! /* ! * Latency is tracked in usec and is quantized by power of two starting at ! * offset SD_LAT_MIN_USEC_SHIFT. Values below that offset will go in the first ! * (0th) bucket. Similar, values above SD_LAT_MAX_USEC_SHIFT go in the ! * (SD_LAT_MAX_USEC_SHIFT - 1) bucket. ! * ! * From observations, using SAS SSDs and rotational drives these values are ! * sufficient for now. ! */ + #define SD_LAT_MIN_USEC_SHIFT 4 + #define SD_LAT_MAX_USEC_SHIFT 24 + #define SD_LAT_BUCKET_MAX (SD_LAT_MAX_USEC_SHIFT - SD_LAT_MIN_USEC_SHIFT) + typedef struct un_lat_stat { + hrtime_t l_sum; /* total latency */ + uint64_t l_nrequest; /* number of requests */ + uint64_t l_histogram[SD_LAT_BUCKET_MAX]; /* latency histogram */ + } un_lat_stat_t; + + /* Thin-provisioning (UNMAP) flags for un_thin_flags. */ + enum { + SD_THIN_PROV_ENABLED = 1 << 0, /* UNMAP available */ + SD_THIN_PROV_READ_ZEROS = 1 << 1 /* unmapped blk = zeros */ + }; + /* + * Device limits as read from the Block Limits VPD page (0xB0). If the page + * is unavailable, will be filled with some defaults. + */ + typedef struct sd_blk_limits_s { + uint16_t lim_opt_xfer_len_gran; + uint32_t lim_max_xfer_len; + uint32_t lim_opt_xfer_len; + uint32_t lim_max_pfetch_len; + uint32_t lim_max_unmap_lba_cnt; + uint32_t lim_max_unmap_descr_cnt; + uint32_t lim_opt_unmap_gran; + uint32_t lim_unmap_gran_align; + uint64_t lim_max_write_same_len; + } sd_blk_limits_t; + + typedef struct sd_unmapstats { + kstat_named_t us_cmds; + kstat_named_t us_errs; + kstat_named_t us_extents; + kstat_named_t us_bytes; + } sd_unmapstats_t; + + /* * sd_lun: The main data structure for a scsi logical unit. * Stored as the softstate structure for each device. */ struct sd_lun {
*** 282,292 **** uint_t un_busy_retry_count; /* Per disk BUSY retry count */ uint_t un_retry_count; /* Per disk retry count */ uint_t un_victim_retry_count; /* Per disk victim retry count */ - /* (4356701, 4367306) */ uint_t un_reset_retry_count; /* max io retries before issuing reset */ ushort_t un_reserve_release_time; /* reservation release timeout */ uchar_t un_reservation_type; /* SCSI-3 or SCSI-2 */ uint_t un_max_xfer_size; /* Maximum DMA transfer size */ --- 308,317 ----
*** 354,364 **** --- 379,393 ---- * stats, and other such bookkeeping info. */ union ocmap un_ocmap; /* open partition map */ struct kstat *un_pstats[NSDMAP]; /* partition statistics */ struct kstat *un_stats; /* disk statistics */ + sd_unmapstats_t *un_unmapstats; /* UNMAP stats structure */ + struct kstat *un_unmapstats_ks; /* UNMAP kstat */ kstat_t *un_errstats; /* for error statistics */ + kstat_t *un_lat_ksp; /* pointer to the raw kstat */ + un_lat_stat_t *un_lat_stats; /* data from the above kstat */ uint64_t un_exclopen; /* exclusive open bitmask */ ddi_devid_t un_devid; /* device id */ uint_t un_vpd_page_mask; /* Supported VPD pages */ /*
*** 400,410 **** un_f_mmc_cap :1, /* Device is MMC compliant */ un_f_mmc_writable_media :1, /* writable media in device */ un_f_dvdram_writable_device :1, /* DVDRAM device is writable */ un_f_cfg_cdda :1, /* READ CDDA supported */ un_f_cfg_tur_check :1, /* verify un_ncmds before tur */ - un_f_use_adaptive_throttle :1, /* enable/disable adaptive */ /* throttling */ un_f_pm_is_enabled :1, /* PM is enabled on this */ /* instance */ un_f_watcht_stopped :1, /* media watch thread flag */ --- 429,438 ----
*** 414,424 **** un_f_disksort_disabled :1, /* Flag to disable disksort */ un_f_lun_reset_enabled :1, /* Set if target supports */ /* SCSI Logical Unit Reset */ un_f_doorlock_supported :1, /* Device supports Doorlock */ un_f_start_stop_supported :1, /* device has motor */ ! un_f_reserved1 :1; uint32_t un_f_mboot_supported :1, /* mboot supported */ un_f_is_hotpluggable :1, /* hotpluggable */ un_f_has_removable_media :1, /* has removable media */ --- 442,452 ---- un_f_disksort_disabled :1, /* Flag to disable disksort */ un_f_lun_reset_enabled :1, /* Set if target supports */ /* SCSI Logical Unit Reset */ un_f_doorlock_supported :1, /* Device supports Doorlock */ un_f_start_stop_supported :1, /* device has motor */ ! un_f_sdconf_phy_blocksize :1; /* take pbs from sd.conf */ uint32_t un_f_mboot_supported :1, /* mboot supported */ un_f_is_hotpluggable :1, /* hotpluggable */ un_f_has_removable_media :1, /* has removable media */
*** 464,478 **** un_f_mmc_gesn_polling :1, /* use GET EVENT STATUS */ /* NOTIFICATION for polling */ un_f_enable_rmw :1, /* Force RMW in sd driver */ un_f_expnevent :1, un_f_cache_mode_changeable :1, /* can change cache mode */ ! un_f_reserved :1; /* Ptr to table of strings for ASC/ASCQ error message printing */ struct scsi_asq_key_strings *un_additional_codes; /* * Power Management support. * * un_pm_mutex protects, un_pm_count, un_pm_timeid, un_pm_busy, * un_pm_busy_cv, and un_pm_idle_timeid. --- 492,507 ---- un_f_mmc_gesn_polling :1, /* use GET EVENT STATUS */ /* NOTIFICATION for polling */ un_f_enable_rmw :1, /* Force RMW in sd driver */ un_f_expnevent :1, un_f_cache_mode_changeable :1, /* can change cache mode */ ! un_f_detach_waiting :1; /* Ptr to table of strings for ASC/ASCQ error message printing */ struct scsi_asq_key_strings *un_additional_codes; + kcondvar_t un_detach_cv; /* * Power Management support. * * un_pm_mutex protects, un_pm_count, un_pm_timeid, un_pm_busy, * un_pm_busy_cv, and un_pm_idle_timeid.
*** 506,515 **** --- 535,550 ---- uint_t un_rmw_count; /* count of read-modify-writes */ struct sd_w_map *un_wm; /* head of sd_w_map chain */ uint64_t un_rmw_incre_count; /* count I/O */ timeout_id_t un_rmw_msg_timeid; /* for RMW message control */ + /* Thin provisioning support (see SD_THIN_PROV_*) */ + uint64_t un_thin_flags; + + /* Block limits (0xB0 VPD page) */ + sd_blk_limits_t un_blk_lim; + /* For timeout callback to issue a START STOP UNIT command */ timeout_id_t un_startstop_timeid; /* Timeout callback handle for SD_PATH_DIRECT_PRIORITY cmd restarts */ timeout_id_t un_direct_priority_timeid;
*** 527,536 **** --- 562,574 ---- * failing over, and how many I/O's are failed with the 05/94/01 * sense code. */ uint_t un_sonoma_failure_count; + int un_io_time; + hrtime_t un_slow_io_threshold; + /* * Support for failfast operation. */ struct buf *un_failfast_bp; struct buf *un_failfast_headp;
*** 541,564 **** kcondvar_t un_wcc_cv; /* synchronize changes to */ /* un_f_write_cache_enabled */ #ifdef SD_FAULT_INJECTION - /* SD Fault Injection */ #define SD_FI_MAX_BUF 65536 #define SD_FI_MAX_ERROR 1024 kmutex_t un_fi_mutex; uint_t sd_fi_buf_len; char sd_fi_log[SD_FI_MAX_BUF]; struct sd_fi_pkt *sd_fi_fifo_pkt[SD_FI_MAX_ERROR]; struct sd_fi_xb *sd_fi_fifo_xb[SD_FI_MAX_ERROR]; struct sd_fi_un *sd_fi_fifo_un[SD_FI_MAX_ERROR]; struct sd_fi_arq *sd_fi_fifo_arq[SD_FI_MAX_ERROR]; uint_t sd_fi_fifo_start; uint_t sd_fi_fifo_end; uint_t sd_injection_mask; - #endif cmlb_handle_t un_cmlbhandle; /* --- 579,601 ---- kcondvar_t un_wcc_cv; /* synchronize changes to */ /* un_f_write_cache_enabled */ #ifdef SD_FAULT_INJECTION #define SD_FI_MAX_BUF 65536 #define SD_FI_MAX_ERROR 1024 kmutex_t un_fi_mutex; uint_t sd_fi_buf_len; char sd_fi_log[SD_FI_MAX_BUF]; struct sd_fi_pkt *sd_fi_fifo_pkt[SD_FI_MAX_ERROR]; struct sd_fi_xb *sd_fi_fifo_xb[SD_FI_MAX_ERROR]; struct sd_fi_un *sd_fi_fifo_un[SD_FI_MAX_ERROR]; struct sd_fi_arq *sd_fi_fifo_arq[SD_FI_MAX_ERROR]; + struct sd_fi_tran *sd_fi_fifo_tran[SD_FI_MAX_ERROR]; uint_t sd_fi_fifo_start; uint_t sd_fi_fifo_end; uint_t sd_injection_mask; #endif cmlb_handle_t un_cmlbhandle; /*
*** 630,733 **** /* * SD_DEFAULT_MAX_XFER_SIZE is the default value to bound the max xfer * for physio, for devices without tagged queuing enabled. * The default for devices with tagged queuing enabled is SD_MAX_XFER_SIZE */ - #if defined(__i386) || defined(__amd64) #define SD_DEFAULT_MAX_XFER_SIZE (256 * 1024) - #endif #define SD_MAX_XFER_SIZE (1024 * 1024) /* - * Warlock annotations - */ - _NOTE(MUTEX_PROTECTS_DATA(scsi_device::sd_mutex, sd_lun)) - _NOTE(READ_ONLY_DATA(sd_lun::un_sd)) - _NOTE(DATA_READABLE_WITHOUT_LOCK(sd_lun::un_reservation_type)) - _NOTE(DATA_READABLE_WITHOUT_LOCK(sd_lun::un_mincdb)) - _NOTE(DATA_READABLE_WITHOUT_LOCK(sd_lun::un_maxcdb)) - _NOTE(DATA_READABLE_WITHOUT_LOCK(sd_lun::un_max_hba_cdb)) - _NOTE(DATA_READABLE_WITHOUT_LOCK(sd_lun::un_status_len)) - _NOTE(DATA_READABLE_WITHOUT_LOCK(sd_lun::un_f_arq_enabled)) - _NOTE(DATA_READABLE_WITHOUT_LOCK(sd_lun::un_ctype)) - _NOTE(DATA_READABLE_WITHOUT_LOCK(sd_lun::un_cmlbhandle)) - _NOTE(DATA_READABLE_WITHOUT_LOCK(sd_lun::un_fm_private)) - - - _NOTE(SCHEME_PROTECTS_DATA("safe sharing", - sd_lun::un_mhd_token - sd_lun::un_state - sd_lun::un_tagflags - sd_lun::un_f_format_in_progress - sd_lun::un_resvd_timeid - sd_lun::un_reset_throttle_timeid - sd_lun::un_startstop_timeid - sd_lun::un_dcvb_timeid - sd_lun::un_f_allow_bus_device_reset - sd_lun::un_sys_blocksize - sd_lun::un_tgt_blocksize - sd_lun::un_phy_blocksize - sd_lun::un_additional_codes)) - - _NOTE(SCHEME_PROTECTS_DATA("stable data", - sd_lun::un_reserve_release_time - sd_lun::un_max_xfer_size - sd_lun::un_partial_dma_supported - sd_lun::un_buf_breakup_supported - sd_lun::un_f_is_fibre - sd_lun::un_node_type - sd_lun::un_buf_chain_type - sd_lun::un_uscsi_chain_type - sd_lun::un_direct_chain_type - sd_lun::un_priority_chain_type - sd_lun::un_xbuf_attr - sd_lun::un_cmd_timeout - sd_lun::un_pkt_flags)) - - _NOTE(SCHEME_PROTECTS_DATA("Unshared data", - block_descriptor - buf - cdrom_subchnl - cdrom_tocentry - cdrom_tochdr - cdrom_read - dk_cinfo - dk_devid - dk_label - dk_map - dk_temperature - mhioc_inkeys - mhioc_inresvs - mode_caching - mode_header - mode_speed - scsi_cdb - scsi_arq_status - scsi_extended_sense - scsi_inquiry - scsi_pkt - uio - uscsi_cmd)) - - - _NOTE(SCHEME_PROTECTS_DATA("stable data", scsi_device dk_cinfo)) - _NOTE(SCHEME_PROTECTS_DATA("unique per pkt", scsi_status scsi_cdb)) - - _NOTE(MUTEX_PROTECTS_DATA(sd_lun::un_pm_mutex, sd_lun::un_pm_count - sd_lun::un_pm_timeid sd_lun::un_pm_busy sd_lun::un_pm_busy_cv - sd_lun::un_pm_idle_timeid)) - - #ifdef SD_FAULT_INJECTION - _NOTE(MUTEX_PROTECTS_DATA(sd_lun::un_fi_mutex, - sd_lun::sd_fi_buf_len sd_lun::sd_fi_log)) - #endif - - /* _NOTE(LOCK_ORDER(sd_lun::un_sd.sd_mutex sd_lun::un_pm_mutex)) */ - - - - /* * Referenced for frequently-accessed members of the unit structure */ #define SD_SCSI_DEVP(un) ((un)->un_sd) #define SD_DEVINFO(un) ((un)->un_sd->sd_dev) #define SD_INQUIRY(un) ((un)->un_sd->sd_inq) --- 667,680 ----
*** 735,745 **** #define SD_ADDRESS(un) (&((un)->un_sd->sd_address)) #define SD_GET_DEV(un) (sd_make_device(SD_DEVINFO(un))) #define SD_FM_LOG(un) (((struct sd_fm_internal *)\ ((un)->un_fm_private))->fm_log_level) - /* * Values for un_ctype */ #define CTYPE_CDROM 0 #define CTYPE_MD21 1 /* Obsolete! */ --- 682,691 ----
*** 956,972 **** kcondvar_t srq_inprocess_cv; kmutex_t srq_resv_reclaim_mutex; kcondvar_t srq_resv_reclaim_cv; }; - _NOTE(MUTEX_PROTECTS_DATA(sd_resv_reclaim_request::srq_resv_reclaim_mutex, - sd_resv_reclaim_request)) - _NOTE(SCHEME_PROTECTS_DATA("unshared data", sd_thr_request)) - _NOTE(SCHEME_PROTECTS_DATA("Unshared data", sd_prout)) - - - /* * Driver Logging Components * * These components cover the functional entry points and areas of the * driver. A component value is used for the entry point and utility --- 902,911 ----
*** 1047,1056 **** --- 986,997 ---- * sd_fi_un replicates the variables that are exposed through un * * sd_fi_arq replicates the variables that are * exposed for Auto-Reqeust-Sense * + * sd_fi_tran HBA-level fault injection. + * */ struct sd_fi_pkt { uint_t pkt_flags; /* flags */ uchar_t pkt_scbp; /* pointer to status block */ uchar_t pkt_cdbp; /* pointer to command block */
*** 1097,1106 **** --- 1038,1056 ---- uint_t sts_rqpkt_state; uint_t sts_rqpkt_statistics; struct scsi_extended_sense sts_sensedata; }; + enum sd_fi_tran_cmd { + SD_FLTINJ_CMD_BUSY, /* Reject command instead of sending it to HW */ + SD_FLTINJ_CMD_TIMEOUT /* Time-out command. */ + }; + + struct sd_fi_tran { + enum sd_fi_tran_cmd tran_cmd; + }; + /* * Conditional set def */ #define SD_CONDSET(a, b, c, d) \ { \
*** 1120,1129 **** --- 1070,1080 ---- #define SDIOCINSERTUN (SDIOC|5) #define SDIOCINSERTARQ (SDIOC|6) #define SDIOCPUSH (SDIOC|7) #define SDIOCRETRIEVE (SDIOC|8) #define SDIOCRUN (SDIOC|9) + #define SDIOCINSERTTRAN (SDIOC|0xA) #endif #else #undef SDDEBUG
*** 1172,1181 **** --- 1123,1134 ---- #define SD_STATE_OFFLINE 1 #define SD_STATE_RWAIT 2 #define SD_STATE_DUMPING 3 #define SD_STATE_SUSPENDED 4 #define SD_STATE_PM_CHANGING 5 + #define SD_STATE_ATTACHING 6 + #define SD_STATE_ATTACH_FAILED 7 /* * The table is to be interpreted as follows: The rows lists all the states * and each column is a state that a state in each row *can* reach. The entries * in the table list the event that cause that transition to take place.
*** 1226,1237 **** * (0 is a special case) which means it would never get set back to * un_saved_throttle in routine sd_restore_throttle(). */ #define SD_LOWEST_VALID_THROTTLE 2 - - /* Return codes for sd_send_polled_cmd() and sd_scsi_poll() */ #define SD_CMD_SUCCESS 0 #define SD_CMD_FAILURE 1 #define SD_CMD_RESERVATION_CONFLICT 2 #define SD_CMD_ILLEGAL_REQUEST 3 --- 1179,1188 ----
*** 1418,1429 **** * right after xb_sense_data[SENSE_LENGTH]. Please do not * add any new field after it. */ }; - _NOTE(SCHEME_PROTECTS_DATA("unique per pkt", sd_xbuf)) - #define SD_PKT_ALLOC_SUCCESS 0 #define SD_PKT_ALLOC_FAILURE 1 #define SD_PKT_ALLOC_FAILURE_NO_DMA 2 #define SD_PKT_ALLOC_FAILURE_PKT_TOO_SMALL 3 #define SD_PKT_ALLOC_FAILURE_CDB_TOO_SMALL 4 --- 1369,1378 ----
*** 1453,1464 **** uint32_t ui_pkt_statistics; uint64_t ui_lba; uint64_t ui_ena; }; - _NOTE(SCHEME_PROTECTS_DATA("Unshared data", sd_uscsi_info)) - /* * This structure is used to issue 'internal' command sequences from the * driver's attach(9E)/open(9E)/etc entry points. It provides a common context * for issuing command sequences, with the ability to issue a command * and provide expected/unexpected assessment of results at any code --- 1402,1411 ----
*** 1495,1506 **** struct sd_uscsi_info *ssc_uscsi_info; int ssc_flags; /* Bits for flags */ char ssc_info[1024]; /* Buffer holding for info */ } sd_ssc_t; - _NOTE(SCHEME_PROTECTS_DATA("Unshared data", sd_ssc_t)) - /* * This struct switch different 'type-of-assessment' * as an input argument for sd_ssc_assessment * * --- 1442,1451 ----
*** 1703,1716 **** #endif /* defined(_KERNEL) || defined(_KMEMUSER) */ /* ! * 60 seconds is a *very* reasonable amount of time for most slow CD ! * operations. */ ! #define SD_IO_TIME 60 /* * 2 hours is an excessively reasonable amount of time for format operations. */ #define SD_FMT_TIME (120 * 60) --- 1648,1661 ---- #endif /* defined(_KERNEL) || defined(_KMEMUSER) */ /* ! * 15 seconds is a *very* reasonable amount of time for any device with retries. ! * Doubled for slow CD operations. */ ! #define SD_IO_TIME 15 /* * 2 hours is an excessively reasonable amount of time for format operations. */ #define SD_FMT_TIME (120 * 60)
*** 1737,1769 **** /* * 100 msec. is what we'll wait for certain retries for fibre channel * targets, 0 msec for parallel SCSI. */ - #if defined(__fibre) - #define SD_RETRY_DELAY (drv_usectohz(100000)) - #else #define SD_RETRY_DELAY ((clock_t)0) - #endif /* * Number of times we'll retry a normal operation. * * This includes retries due to transport failure * (need to distinguish between Target and Transport failure) * */ - #if defined(__fibre) - #define SD_RETRY_COUNT 3 - #else #define SD_RETRY_COUNT 5 - #endif /* * Number of times we will retry for unit attention. */ ! #define SD_UA_RETRY_COUNT 600 #define SD_VICTIM_RETRY_COUNT(un) (un->un_victim_retry_count) #define CD_NOT_READY_RETRY_COUNT(un) (un->un_retry_count * 2) #define DISK_NOT_READY_RETRY_COUNT(un) (un->un_retry_count / 2) --- 1682,1706 ---- /* * 100 msec. is what we'll wait for certain retries for fibre channel * targets, 0 msec for parallel SCSI. */ #define SD_RETRY_DELAY ((clock_t)0) /* * Number of times we'll retry a normal operation. * * This includes retries due to transport failure * (need to distinguish between Target and Transport failure) * */ #define SD_RETRY_COUNT 5 /* * Number of times we will retry for unit attention. */ ! #define SD_UA_RETRY_COUNT 25 #define SD_VICTIM_RETRY_COUNT(un) (un->un_victim_retry_count) #define CD_NOT_READY_RETRY_COUNT(un) (un->un_retry_count * 2) #define DISK_NOT_READY_RETRY_COUNT(un) (un->un_retry_count / 2)
*** 1867,1879 **** #define PIRUS_DISKSORT_DISABLED_FLAG 0 #define PIRUS_LUN_RESET_ENABLED_FLAG 1 /* * Driver Property Bit Flag definitions - * - * Unfortunately, for historical reasons, the bit-flag definitions are - * different on SPARC, INTEL, & FIBRE platforms. */ /* * Bit flag telling driver to set throttle from sd.conf sd-config-list * and driver table. --- 1804,1813 ----
*** 1888,2017 **** /* * Bit flag telling driver to set the controller type from sd.conf * sd-config-list and driver table. */ - #if defined(__i386) || defined(__amd64) #define SD_CONF_SET_CTYPE 1 - #elif defined(__fibre) - #define SD_CONF_SET_CTYPE 5 - #else - #define SD_CONF_SET_CTYPE 1 - #endif #define SD_CONF_BSET_CTYPE (1 << SD_CONF_SET_CTYPE) /* * Bit flag telling driver to set the not ready retry count for a device from * sd.conf sd-config-list and driver table. */ - #if defined(__i386) || defined(__amd64) #define SD_CONF_SET_NOTREADY_RETRIES 10 - #elif defined(__fibre) - #define SD_CONF_SET_NOTREADY_RETRIES 1 - #else - #define SD_CONF_SET_NOTREADY_RETRIES 2 - #endif #define SD_CONF_BSET_NRR_COUNT (1 << SD_CONF_SET_NOTREADY_RETRIES) /* * Bit flag telling driver to set SCSI status BUSY Retries from sd.conf * sd-config-list and driver table. */ - #if defined(__i386) || defined(__amd64) #define SD_CONF_SET_BUSY_RETRIES 11 - #elif defined(__fibre) - #define SD_CONF_SET_BUSY_RETRIES 2 - #else - #define SD_CONF_SET_BUSY_RETRIES 5 - #endif #define SD_CONF_BSET_BSY_RETRY_COUNT (1 << SD_CONF_SET_BUSY_RETRIES) /* * Bit flag telling driver that device does not have a valid/unique serial * number. */ - #if defined(__i386) || defined(__amd64) #define SD_CONF_SET_FAB_DEVID 2 - #else - #define SD_CONF_SET_FAB_DEVID 3 - #endif #define SD_CONF_BSET_FAB_DEVID (1 << SD_CONF_SET_FAB_DEVID) /* * Bit flag telling driver to disable all caching for disk device. */ - #if defined(__i386) || defined(__amd64) #define SD_CONF_SET_NOCACHE 3 - #else - #define SD_CONF_SET_NOCACHE 4 - #endif #define SD_CONF_BSET_NOCACHE (1 << SD_CONF_SET_NOCACHE) /* * Bit flag telling driver that the PLAY AUDIO command requires parms in BCD * format rather than binary. */ - #if defined(__i386) || defined(__amd64) #define SD_CONF_SET_PLAYMSF_BCD 4 - #else - #define SD_CONF_SET_PLAYMSF_BCD 6 - #endif #define SD_CONF_BSET_PLAYMSF_BCD (1 << SD_CONF_SET_PLAYMSF_BCD) /* * Bit flag telling driver that the response from the READ SUBCHANNEL command * has BCD fields rather than binary. */ - #if defined(__i386) || defined(__amd64) #define SD_CONF_SET_READSUB_BCD 5 - #else - #define SD_CONF_SET_READSUB_BCD 7 - #endif #define SD_CONF_BSET_READSUB_BCD (1 << SD_CONF_SET_READSUB_BCD) /* * Bit in flags telling driver that the track number fields in the READ TOC * request and respone are in BCD rather than binary. */ - #if defined(__i386) || defined(__amd64) #define SD_CONF_SET_READ_TOC_TRK_BCD 6 - #else - #define SD_CONF_SET_READ_TOC_TRK_BCD 8 - #endif #define SD_CONF_BSET_READ_TOC_TRK_BCD (1 << SD_CONF_SET_READ_TOC_TRK_BCD) /* * Bit flag telling driver that the address fields in the READ TOC request and * respone are in BCD rather than binary. */ - #if defined(__i386) || defined(__amd64) #define SD_CONF_SET_READ_TOC_ADDR_BCD 7 - #else - #define SD_CONF_SET_READ_TOC_ADDR_BCD 9 - #endif #define SD_CONF_BSET_READ_TOC_ADDR_BCD (1 << SD_CONF_SET_READ_TOC_ADDR_BCD) /* * Bit flag telling the driver that the device doesn't support the READ HEADER * command. */ - #if defined(__i386) || defined(__amd64) #define SD_CONF_SET_NO_READ_HEADER 8 - #else - #define SD_CONF_SET_NO_READ_HEADER 10 - #endif #define SD_CONF_BSET_NO_READ_HEADER (1 << SD_CONF_SET_NO_READ_HEADER) /* * Bit flag telling the driver that for the READ CD command the device uses * opcode 0xd4 rather than 0xbe. */ - #if defined(__i386) || defined(__amd64) #define SD_CONF_SET_READ_CD_XD4 9 - #else - #define SD_CONF_SET_READ_CD_XD4 11 - #endif #define SD_CONF_BSET_READ_CD_XD4 (1 << SD_CONF_SET_READ_CD_XD4) /* * Bit flag telling the driver to set SCSI status Reset Retries * (un_reset_retry_count) from sd.conf sd-config-list and driver table (4356701) --- 1822,1901 ----
*** 2033,2058 **** */ #define SD_CONF_SET_TUR_CHECK 14 #define SD_CONF_BSET_TUR_CHECK (1 << SD_CONF_SET_TUR_CHECK) /* ! * Bit in flags telling driver to set min. throttle from ssd.conf ! * ssd-config-list and driver table. */ #define SD_CONF_SET_MIN_THROTTLE 15 #define SD_CONF_BSET_MIN_THROTTLE (1 << SD_CONF_SET_MIN_THROTTLE) /* ! * Bit in flags telling driver to set disksort disable flag from ssd.conf ! * ssd-config-list and driver table. */ #define SD_CONF_SET_DISKSORT_DISABLED 16 #define SD_CONF_BSET_DISKSORT_DISABLED (1 << SD_CONF_SET_DISKSORT_DISABLED) /* ! * Bit in flags telling driver to set LUN Reset enable flag from [s]sd.conf ! * [s]sd-config-list and driver table. */ #define SD_CONF_SET_LUN_RESET_ENABLED 17 #define SD_CONF_BSET_LUN_RESET_ENABLED (1 << SD_CONF_SET_LUN_RESET_ENABLED) /* --- 1917,1942 ---- */ #define SD_CONF_SET_TUR_CHECK 14 #define SD_CONF_BSET_TUR_CHECK (1 << SD_CONF_SET_TUR_CHECK) /* ! * Bit in flags telling driver to set min. throttle from sd.conf ! * sd-config-list and driver table. */ #define SD_CONF_SET_MIN_THROTTLE 15 #define SD_CONF_BSET_MIN_THROTTLE (1 << SD_CONF_SET_MIN_THROTTLE) /* ! * Bit in flags telling driver to set disksort disable flag from sd.conf ! * sd-config-list and driver table. */ #define SD_CONF_SET_DISKSORT_DISABLED 16 #define SD_CONF_BSET_DISKSORT_DISABLED (1 << SD_CONF_SET_DISKSORT_DISABLED) /* ! * Bit in flags telling driver to set LUN Reset enable flag from sd.conf ! * sd-config-list and driver table. */ #define SD_CONF_SET_LUN_RESET_ENABLED 17 #define SD_CONF_BSET_LUN_RESET_ENABLED (1 << SD_CONF_SET_LUN_RESET_ENABLED) /*
*** 2061,2072 **** */ #define SD_CONF_SET_CACHE_IS_NV 18 #define SD_CONF_BSET_CACHE_IS_NV (1 << SD_CONF_SET_CACHE_IS_NV) /* ! * Bit in flags telling driver that the power condition flag from [s]sd.conf ! * [s]sd-config-list and driver table. */ #define SD_CONF_SET_PC_DISABLED 19 #define SD_CONF_BSET_PC_DISABLED (1 << SD_CONF_SET_PC_DISABLED) /* --- 1945,1956 ---- */ #define SD_CONF_SET_CACHE_IS_NV 18 #define SD_CONF_BSET_CACHE_IS_NV (1 << SD_CONF_SET_CACHE_IS_NV) /* ! * Bit in flags telling driver that the power condition flag from sd.conf ! * sd-config-list and driver table. */ #define SD_CONF_SET_PC_DISABLED 19 #define SD_CONF_BSET_PC_DISABLED (1 << SD_CONF_SET_PC_DISABLED) /*
*** 2168,2179 **** uchar_t bdesc_length_hi; /* length of block descriptor(s) */ /* (if any) */ uchar_t bdesc_length_lo; }; - _NOTE(SCHEME_PROTECTS_DATA("Unshared data", mode_header_grp2)) - /* * Length of the Mode Parameter Header for the Group 2 Mode Select command */ #define MODE_HEADER_LENGTH_GRP2 (sizeof (struct mode_header_grp2)) #define MODE_PARAM_LENGTH_GRP2 (MODE_HEADER_LENGTH_GRP2 + MODE_BLK_DESC_LENGTH) --- 2052,2061 ----
*** 2373,2383 **** #define SD_VPD_UNIT_SERIAL_PG 0x02 /* 0x80 - Unit Serial Number */ #define SD_VPD_OPERATING_PG 0x04 /* 0x81 - Implemented Op Defs */ #define SD_VPD_ASCII_OP_PG 0x08 /* 0x82 - ASCII Op Defs */ #define SD_VPD_DEVID_WWN_PG 0x10 /* 0x83 - Device Identification */ #define SD_VPD_EXTENDED_DATA_PG 0x80 /* 0x86 - Extended data about the lun */ ! #define SD_VPD_DEV_CHARACTER_PG 0x400 /* 0xB1 - Device Characteristics */ /* * Non-volatile cache support * * Bit 1 of the byte 6 in the Extended INQUIRY data VPD page --- 2255,2266 ---- #define SD_VPD_UNIT_SERIAL_PG 0x02 /* 0x80 - Unit Serial Number */ #define SD_VPD_OPERATING_PG 0x04 /* 0x81 - Implemented Op Defs */ #define SD_VPD_ASCII_OP_PG 0x08 /* 0x82 - ASCII Op Defs */ #define SD_VPD_DEVID_WWN_PG 0x10 /* 0x83 - Device Identification */ #define SD_VPD_EXTENDED_DATA_PG 0x80 /* 0x86 - Extended data about the lun */ ! #define SD_VPD_BLK_LIMITS_PG 0x400 /* 0xB0 - Block Limits */ ! #define SD_VPD_DEV_CHARACTER_PG 0x800 /* 0xB1 - Device Characteristics */ /* * Non-volatile cache support * * Bit 1 of the byte 6 in the Extended INQUIRY data VPD page
*** 2392,2414 **** * caches. */ #define SD_VPD_NV_SUP 0x02 #define SD_SYNC_NV_BIT 0x04 - /* - * Addition from sddef.intel.h - */ - #if defined(__i386) || defined(__amd64) - - #define P0_RAW_DISK (NDKMAP) - #define FDISK_P1 (NDKMAP+1) - #define FDISK_P2 (NDKMAP+2) - #define FDISK_P3 (NDKMAP+3) - #define FDISK_P4 (NDKMAP+4) - - #endif /* __i386 || __amd64 */ - #ifdef __cplusplus } #endif --- 2275,2284 ----