Lines Matching defs:sip

53 #define	scsi_set_errno(sip, errno)	(ds_set_errno((sip)->si_dsp, (errno)))
146 scsi_mode_select(ds_scsi_info_t *sip, uchar_t page_code, int options,
155 assert(sip->si_cdblen == MODE_CMD_LEN_6 ||
156 sip->si_cdblen == MODE_CMD_LEN_10);
157 assert(headers->ms_length == sip->si_cdblen);
168 if (sip->si_cdblen == MODE_CMD_LEN_6) {
173 if (sip->si_sim)
174 result = simscsi_mode_select(sip->si_sim,
178 result = uscsi_mode_select(sip->si_dsp->ds_fd,
186 if (sip->si_sim)
187 result = simscsi_mode_select_10(sip->si_sim,
191 result = uscsi_mode_select_10(sip->si_dsp->ds_fd,
203 scsi_mode_sense(ds_scsi_info_t *sip, uchar_t page_code, uchar_t pc,
211 assert(sip->si_cdblen == MODE_CMD_LEN_6 ||
212 sip->si_cdblen == MODE_CMD_LEN_10);
217 headers->ms_length = sip->si_cdblen;
219 if (sip->si_cdblen == MODE_CMD_LEN_6) {
220 if (sip->si_sim)
221 result = simscsi_mode_sense(sip->si_sim,
225 result = uscsi_mode_sense(sip->si_dsp->ds_fd, page_code,
229 if (sip->si_sim)
230 result = simscsi_mode_sense_10(sip->si_sim,
234 result = uscsi_mode_sense_10(sip->si_dsp->ds_fd,
246 scsi_request_sense(ds_scsi_info_t *sip, uint_t *skp, uint_t *ascp,
257 if (sip->si_sim)
258 result = simscsi_request_sense(sip->si_sim,
261 result = uscsi_request_sense(sip->si_dsp->ds_fd,
273 scsi_log_sense(ds_scsi_info_t *sip, int page_code, int page_control,
280 if (sip->si_sim)
281 result = simscsi_log_sense(sip->si_sim,
285 result = uscsi_log_sense(sip->si_dsp->ds_fd,
331 load_modepages(ds_scsi_info_t *sip)
345 return (scsi_set_errno(sip, EDS_NOMEM));
359 sip->si_cdblen = MODE_CMD_LEN_6;
360 if ((result = scsi_mode_sense(sip, MODEPAGE_ALLPAGES, PC_CURRENT,
391 sip->si_cdblen = MODE_CMD_LEN_10;
392 result = scsi_mode_sense(sip, MODEPAGE_ALLPAGES,
406 if (nvlist_add_int8(sip->si_dsp->ds_state, "command-length",
407 sip->si_cdblen == MODE_CMD_LEN_6 ? 6 : 10) != 0) {
409 return (scsi_set_errno(sip, EDS_NOMEM));
414 nvlist_add_nvlist(sip->si_dsp->ds_state, "modepages",
418 return (scsi_set_errno(sip, EDS_NOMEM));
422 result = nvlist_lookup_nvlist(sip->si_dsp->ds_state,
423 "modepages", &sip->si_state_modepage);
436 (sip->si_dsp->ds_test_mask & SMART_TEST)) {
439 nvlist_add_nvlist(sip->si_state_modepage,
443 return (scsi_set_errno(sip, EDS_NOMEM));
446 sip->si_supp_mode |= MODEPAGE_SUPP_IEC;
447 result = nvlist_lookup_nvlist(sip->si_state_modepage,
448 "informational-exceptions", &sip->si_state_iec);
465 result = scsi_set_errno(sip, EDS_NO_TRANSPORT);
477 verify_logpage(ds_scsi_info_t *sip, logpage_validation_entry_t *lp)
489 return (scsi_set_errno(sip, EDS_NOMEM));
494 nvlist_add_nvlist(sip->si_state_logpage, lp->ve_desc, nvl) != 0) {
497 return (scsi_set_errno(sip, EDS_NOMEM));
500 result = nvlist_lookup_nvlist(sip->si_state_logpage, lp->ve_desc, &nvl);
503 result = scsi_log_sense(sip, lp->ve_code,
510 return (scsi_set_errno(sip, EDS_NOMEM));
513 if (lp->ve_validate(sip, (scsi_log_parameter_header_t *)
532 load_logpages(ds_scsi_info_t *sip)
541 int tmask = sip->si_dsp->ds_test_mask;
546 return (scsi_set_errno(sip, EDS_NOMEM));
550 if ((result = scsi_log_sense(sip, LOGPAGE_SUPP_LIST,
566 sip->si_supp_log |=
576 nvlist_add_nvlist(sip->si_dsp->ds_state, "logpages",
579 return (scsi_set_errno(sip, EDS_NOMEM));
583 result = nvlist_lookup_nvlist(sip->si_dsp->ds_state,
584 "logpages", &sip->si_state_logpage);
591 if ((sip->si_supp_log &
599 if (verify_logpage(sip, &log_validation[i]) != 0)
622 logpage_ie_verify(ds_scsi_info_t *sip, scsi_log_parameter_header_t *lphp,
636 return (scsi_set_errno(sip, EDS_NOMEM));
641 return (scsi_set_errno(sip, EDS_NOMEM));
653 sip->si_supp_log &= ~LOGPAGE_SUPP_IE;
668 logpage_temp_verify(ds_scsi_info_t *sip,
684 return (scsi_set_errno(sip, EDS_NOMEM));
688 return (scsi_set_errno(sip, EDS_NOMEM));
696 return (scsi_set_errno(sip, EDS_NOMEM));
700 return (scsi_set_errno(sip, EDS_NOMEM));
712 sip->si_supp_log &= ~LOGPAGE_SUPP_TEMP;
728 logpage_selftest_verify(ds_scsi_info_t *sip,
744 return (scsi_set_errno(sip, EDS_NOMEM));
752 return (scsi_set_errno(sip, EDS_NOMEM));
763 sip->si_supp_log &= ~LOGPAGE_SUPP_SELFTEST;
774 load_ie_modepage(ds_scsi_info_t *sip)
780 if (!(sip->si_supp_mode & MODEPAGE_SUPP_IEC))
783 bzero(&sip->si_iec_current, sizeof (sip->si_iec_current));
784 bzero(&sip->si_iec_changeable, sizeof (sip->si_iec_changeable));
786 if ((result = scsi_mode_sense(sip,
787 MODEPAGE_INFO_EXCPT, PC_CURRENT, &sip->si_iec_current,
788 MODEPAGE_INFO_EXCPT_LEN, &sip->si_hdrs, &skey, &asc,
790 result = scsi_mode_sense(sip,
792 &sip->si_iec_changeable,
799 sip->si_supp_mode &= ~MODEPAGE_SUPP_IEC;
801 if (nvlist_add_boolean_value(sip->si_state_iec,
802 "dexcpt", sip->si_iec_current.ie_dexcpt) != 0 ||
803 nvlist_add_boolean_value(sip->si_state_iec,
804 "logerr", sip->si_iec_current.ie_logerr) != 0 ||
805 nvlist_add_uint8(sip->si_state_iec,
806 "mrie", sip->si_iec_current.ie_mrie) != 0 ||
807 nvlist_add_boolean_value(sip->si_state_iec,
808 "test", sip->si_iec_current.ie_test) != 0 ||
809 nvlist_add_boolean_value(sip->si_state_iec,
810 "ewasc", sip->si_iec_current.ie_ewasc) != 0 ||
811 nvlist_add_boolean_value(sip->si_state_iec,
812 "perf", sip->si_iec_current.ie_perf) != 0 ||
813 nvlist_add_boolean_value(sip->si_state_iec,
814 "ebf", sip->si_iec_current.ie_ebf) != 0 ||
815 nvlist_add_uint32(sip->si_state_iec,
817 BE_32(sip->si_iec_current.ie_interval_timer)) != 0 ||
818 nvlist_add_uint32(sip->si_state_iec,
820 BE_32(sip->si_iec_current.ie_report_count)) != 0)
821 return (scsi_set_errno(sip, EDS_NOMEM));
842 scsi_enable_ie(ds_scsi_info_t *sip, boolean_t *changed)
848 if (!(sip->si_supp_mode & MODEPAGE_SUPP_IEC))
852 if (sip->si_dsp->ds_skip_update == B_TRUE) {
859 (void) memcpy(&new_iec_page, &sip->si_iec_current,
862 if (IEC_IE_CHANGEABLE(sip->si_iec_changeable))
865 if (IEC_MRIE_CHANGEABLE(sip->si_iec_changeable))
873 if (IEC_EWASC_CHANGEABLE(sip->si_iec_changeable)) {
880 if (IEC_RPTCNT_CHANGEABLE(sip->si_iec_changeable))
883 if (IEC_LOGERR_CHANGEABLE(sip->si_iec_changeable))
890 if (memcmp(&new_iec_page, &sip->si_iec_current,
894 (void) memcpy(&hdrs, &sip->si_hdrs, sizeof (sip->si_hdrs));
896 if (scsi_mode_select(sip,
905 sip->si_dsp->ds_skip_update = B_TRUE;
909 if (nvlist_add_boolean_value(sip->si_state_iec, "changed",
911 return (scsi_set_errno(sip, EDS_NOMEM));
921 clear_gltsd(ds_scsi_info_t *sip)
932 result = scsi_mode_sense(sip,
942 } else if ((result = scsi_mode_sense(sip,
950 if (nvlist_add_boolean_value(sip->si_dsp->ds_state,
952 return (scsi_set_errno(sip, EDS_NOMEM));
955 result = scsi_mode_select(sip,
961 if (nvlist_add_boolean_value(sip->si_dsp->ds_state,
963 return (scsi_set_errno(sip, EDS_NOMEM));
975 analyze_one_logpage(ds_scsi_info_t *sip, logpage_validation_entry_t *entry)
986 return (scsi_set_errno(sip, EDS_NOMEM));
988 result = scsi_log_sense(sip, entry->ve_code,
996 result = entry->ve_analyze(sip, lphp, log_length);
998 result = scsi_set_errno(sip, EDS_IO);
1010 logpage_ie_analyze(ds_scsi_info_t *sip, scsi_log_parameter_header_t *lphp,
1017 assert(sip->si_dsp->ds_predfail == NULL);
1018 if (nvlist_alloc(&sip->si_dsp->ds_predfail, NV_UNIQUE_NAME, 0) != 0)
1019 return (scsi_set_errno(sip, EDS_NOMEM));
1020 nvl = sip->si_dsp->ds_predfail;
1035 return (scsi_set_errno(sip, EDS_NOMEM));
1038 sip->si_dsp->ds_faults |=
1050 logpage_temp_analyze(ds_scsi_info_t *sip, scsi_log_parameter_header_t *lphp,
1059 assert(sip->si_dsp->ds_overtemp == NULL);
1060 if (nvlist_alloc(&sip->si_dsp->ds_overtemp, NV_UNIQUE_NAME, 0) != 0)
1061 return (scsi_set_errno(sip, EDS_NOMEM));
1062 nvl = sip->si_dsp->ds_overtemp;
1078 return (scsi_set_errno(sip, EDS_NOMEM));
1089 return (scsi_set_errno(sip, EDS_NOMEM));
1100 sip->si_dsp->ds_faults |= DS_FAULT_OVERTEMP;
1106 logpage_selftest_analyze(ds_scsi_info_t *sip, scsi_log_parameter_header_t *lphp,
1115 assert(sip->si_dsp->ds_testfail == NULL);
1116 if (nvlist_alloc(&sip->si_dsp->ds_testfail, NV_UNIQUE_NAME, 0) != 0)
1117 return (scsi_set_errno(sip, EDS_NOMEM));
1118 nvl = sip->si_dsp->ds_testfail;
1146 return (scsi_set_errno(sip,
1151 sip->si_dsp->ds_faults |=
1170 analyze_ie_sense(ds_scsi_info_t *sip)
1178 if (sip->si_iec_current.ie_mrie != IE_REPORT_ON_REQUEST)
1181 if (scsi_request_sense(sip, &skey, &asc, &ascq) != 0) {
1184 return (scsi_set_errno(sip, EDS_IO));
1186 assert(sip->si_dsp->ds_predfail == NULL);
1187 if (nvlist_alloc(&sip->si_dsp->ds_predfail,
1189 return (scsi_set_errno(sip, EDS_NOMEM));
1190 nvl = sip->si_dsp->ds_predfail;
1197 return (scsi_set_errno(sip, EDS_NOMEM));
1201 sip->si_dsp->ds_faults |= DS_FAULT_PREDFAIL;
1213 ds_scsi_info_t *sip = arg;
1214 if (sip->si_sim)
1215 (void) dlclose(sip->si_sim);
1217 free(sip);
1252 ds_scsi_open_common(disk_status_t *dsp, ds_scsi_info_t *sip)
1256 sip->si_dsp = dsp;
1259 if (load_modepages(sip) != 0) {
1260 ds_scsi_close(sip);
1265 if (load_logpages(sip) != 0) {
1266 ds_scsi_close(sip);
1275 if (!(sip->si_supp_log & LOGPAGE_SUPP_IE)) {
1276 if (load_ie_modepage(sip) != 0 ||
1277 scsi_enable_ie(sip, &changed) != 0 ||
1278 (changed && load_ie_modepage(sip) != 0)) {
1279 ds_scsi_close(sip);
1285 if (sip->si_supp_log != 0 && clear_gltsd(sip) != 0) {
1286 ds_scsi_close(sip);
1290 return (sip);
1296 ds_scsi_info_t *sip;
1298 if ((sip = calloc(sizeof (ds_scsi_info_t), 1)) == NULL) {
1303 return (ds_scsi_open_common(dsp, sip));
1309 ds_scsi_info_t *sip;
1311 if ((sip = calloc(sizeof (ds_scsi_info_t), 1)) == NULL) {
1316 if ((sip->si_sim = dlopen(dsp->ds_path, RTLD_LAZY)) == NULL) {
1318 free(sip);
1322 return (ds_scsi_open_common(dsp, sip));
1347 ds_scsi_info_t *sip = arg;
1351 if ((sip->si_supp_log & log_validation[i].ve_supported) == 0)
1354 if (analyze_one_logpage(sip, &log_validation[i]) != 0)
1358 if (!(sip->si_supp_log & LOGPAGE_SUPP_IE) &&
1359 (sip->si_supp_mode & MODEPAGE_SUPP_IEC) &&
1360 analyze_ie_sense(sip) != 0)