Lines Matching refs:sip
56 #define scsi_set_errno(sip, errno) (ds_set_errno((sip)->si_dsp, (errno)))
149 scsi_mode_select(ds_scsi_info_t *sip, uchar_t page_code, int options,
158 assert(sip->si_cdblen == MODE_CMD_LEN_6 ||
159 sip->si_cdblen == MODE_CMD_LEN_10);
160 assert(headers->ms_length == sip->si_cdblen);
171 if (sip->si_cdblen == MODE_CMD_LEN_6) {
176 if (sip->si_sim)
177 result = simscsi_mode_select(sip->si_sim,
181 result = uscsi_mode_select(sip->si_dsp->ds_fd,
189 if (sip->si_sim)
190 result = simscsi_mode_select_10(sip->si_sim,
194 result = uscsi_mode_select_10(sip->si_dsp->ds_fd,
206 scsi_mode_sense(ds_scsi_info_t *sip, uchar_t page_code, uchar_t pc,
214 assert(sip->si_cdblen == MODE_CMD_LEN_6 ||
215 sip->si_cdblen == MODE_CMD_LEN_10);
220 headers->ms_length = sip->si_cdblen;
222 if (sip->si_cdblen == MODE_CMD_LEN_6) {
223 if (sip->si_sim)
224 result = simscsi_mode_sense(sip->si_sim,
228 result = uscsi_mode_sense(sip->si_dsp->ds_fd, page_code,
232 if (sip->si_sim)
233 result = simscsi_mode_sense_10(sip->si_sim,
237 result = uscsi_mode_sense_10(sip->si_dsp->ds_fd,
249 scsi_request_sense(ds_scsi_info_t *sip, uint_t *skp, uint_t *ascp,
260 if (sip->si_sim)
261 result = simscsi_request_sense(sip->si_sim,
264 result = uscsi_request_sense(sip->si_dsp->ds_fd,
276 scsi_log_sense(ds_scsi_info_t *sip, int page_code, int page_control,
283 if (sip->si_sim)
284 result = simscsi_log_sense(sip->si_sim,
288 result = uscsi_log_sense(sip->si_dsp->ds_fd,
334 load_modepages(ds_scsi_info_t *sip)
348 return (scsi_set_errno(sip, EDS_NOMEM));
362 sip->si_cdblen = MODE_CMD_LEN_6;
363 if ((result = scsi_mode_sense(sip, MODEPAGE_ALLPAGES, PC_CURRENT,
394 sip->si_cdblen = MODE_CMD_LEN_10;
395 result = scsi_mode_sense(sip, MODEPAGE_ALLPAGES,
409 if (nvlist_add_int8(sip->si_dsp->ds_state, "command-length",
410 sip->si_cdblen == MODE_CMD_LEN_6 ? 6 : 10) != 0) {
412 return (scsi_set_errno(sip, EDS_NOMEM));
417 nvlist_add_nvlist(sip->si_dsp->ds_state, "modepages",
421 return (scsi_set_errno(sip, EDS_NOMEM));
425 result = nvlist_lookup_nvlist(sip->si_dsp->ds_state,
426 "modepages", &sip->si_state_modepage);
438 nvlist_add_nvlist(sip->si_state_modepage,
442 return (scsi_set_errno(sip, EDS_NOMEM));
445 sip->si_supp_mode |= MODEPAGE_SUPP_IEC;
446 result = nvlist_lookup_nvlist(sip->si_state_modepage,
447 "informational-exceptions", &sip->si_state_iec);
464 result = scsi_set_errno(sip, EDS_NO_TRANSPORT);
476 verify_logpage(ds_scsi_info_t *sip, logpage_validation_entry_t *lp)
488 return (scsi_set_errno(sip, EDS_NOMEM));
493 nvlist_add_nvlist(sip->si_state_logpage, lp->ve_desc, nvl) != 0) {
496 return (scsi_set_errno(sip, EDS_NOMEM));
499 result = nvlist_lookup_nvlist(sip->si_state_logpage, lp->ve_desc, &nvl);
502 result = scsi_log_sense(sip, lp->ve_code,
509 return (scsi_set_errno(sip, EDS_NOMEM));
512 if (lp->ve_validate(sip, (scsi_log_parameter_header_t *)
531 load_logpages(ds_scsi_info_t *sip)
543 return (scsi_set_errno(sip, EDS_NOMEM));
547 if ((result = scsi_log_sense(sip, LOGPAGE_SUPP_LIST,
555 sip->si_supp_log |=
565 nvlist_add_nvlist(sip->si_dsp->ds_state, "logpages",
568 return (scsi_set_errno(sip, EDS_NOMEM));
572 result = nvlist_lookup_nvlist(sip->si_dsp->ds_state,
573 "logpages", &sip->si_state_logpage);
580 if ((sip->si_supp_log &
588 if (verify_logpage(sip, &log_validation[i]) != 0)
611 logpage_ie_verify(ds_scsi_info_t *sip, scsi_log_parameter_header_t *lphp,
625 return (scsi_set_errno(sip, EDS_NOMEM));
630 return (scsi_set_errno(sip, EDS_NOMEM));
642 sip->si_supp_log &= ~LOGPAGE_SUPP_IE;
657 logpage_temp_verify(ds_scsi_info_t *sip,
673 return (scsi_set_errno(sip, EDS_NOMEM));
677 return (scsi_set_errno(sip, EDS_NOMEM));
685 return (scsi_set_errno(sip, EDS_NOMEM));
689 return (scsi_set_errno(sip, EDS_NOMEM));
701 sip->si_supp_log &= ~LOGPAGE_SUPP_TEMP;
717 logpage_selftest_verify(ds_scsi_info_t *sip,
733 return (scsi_set_errno(sip, EDS_NOMEM));
741 return (scsi_set_errno(sip, EDS_NOMEM));
752 sip->si_supp_log &= ~LOGPAGE_SUPP_SELFTEST;
763 load_ie_modepage(ds_scsi_info_t *sip)
769 if (!(sip->si_supp_mode & MODEPAGE_SUPP_IEC))
772 bzero(&sip->si_iec_current, sizeof (sip->si_iec_current));
773 bzero(&sip->si_iec_changeable, sizeof (sip->si_iec_changeable));
775 if ((result = scsi_mode_sense(sip,
776 MODEPAGE_INFO_EXCPT, PC_CURRENT, &sip->si_iec_current,
777 MODEPAGE_INFO_EXCPT_LEN, &sip->si_hdrs, &skey, &asc,
779 result = scsi_mode_sense(sip,
781 &sip->si_iec_changeable,
788 sip->si_supp_mode &= ~MODEPAGE_SUPP_IEC;
790 if (nvlist_add_boolean_value(sip->si_state_iec,
791 "dexcpt", sip->si_iec_current.ie_dexcpt) != 0 ||
792 nvlist_add_boolean_value(sip->si_state_iec,
793 "logerr", sip->si_iec_current.ie_logerr) != 0 ||
794 nvlist_add_uint8(sip->si_state_iec,
795 "mrie", sip->si_iec_current.ie_mrie) != 0 ||
796 nvlist_add_boolean_value(sip->si_state_iec,
797 "test", sip->si_iec_current.ie_test) != 0 ||
798 nvlist_add_boolean_value(sip->si_state_iec,
799 "ewasc", sip->si_iec_current.ie_ewasc) != 0 ||
800 nvlist_add_boolean_value(sip->si_state_iec,
801 "perf", sip->si_iec_current.ie_perf) != 0 ||
802 nvlist_add_boolean_value(sip->si_state_iec,
803 "ebf", sip->si_iec_current.ie_ebf) != 0 ||
804 nvlist_add_uint32(sip->si_state_iec,
806 BE_32(sip->si_iec_current.ie_interval_timer)) != 0 ||
807 nvlist_add_uint32(sip->si_state_iec,
809 BE_32(sip->si_iec_current.ie_report_count)) != 0)
810 return (scsi_set_errno(sip, EDS_NOMEM));
831 scsi_enable_ie(ds_scsi_info_t *sip, boolean_t *changed)
837 if (!(sip->si_supp_mode & MODEPAGE_SUPP_IEC))
843 (void) memcpy(&new_iec_page, &sip->si_iec_current,
846 if (IEC_IE_CHANGEABLE(sip->si_iec_changeable))
849 if (IEC_MRIE_CHANGEABLE(sip->si_iec_changeable))
857 if (IEC_EWASC_CHANGEABLE(sip->si_iec_changeable)) {
864 if (IEC_RPTCNT_CHANGEABLE(sip->si_iec_changeable))
867 if (IEC_LOGERR_CHANGEABLE(sip->si_iec_changeable))
874 if (memcmp(&new_iec_page, &sip->si_iec_current,
878 (void) memcpy(&hdrs, &sip->si_hdrs, sizeof (sip->si_hdrs));
880 if (scsi_mode_select(sip,
891 if (nvlist_add_boolean_value(sip->si_state_iec, "changed",
893 return (scsi_set_errno(sip, EDS_NOMEM));
903 clear_gltsd(ds_scsi_info_t *sip)
914 result = scsi_mode_sense(sip,
924 } else if ((result = scsi_mode_sense(sip,
932 if (nvlist_add_boolean_value(sip->si_dsp->ds_state,
934 return (scsi_set_errno(sip, EDS_NOMEM));
937 result = scsi_mode_select(sip,
943 if (nvlist_add_boolean_value(sip->si_dsp->ds_state,
945 return (scsi_set_errno(sip, EDS_NOMEM));
957 analyze_one_logpage(ds_scsi_info_t *sip, logpage_validation_entry_t *entry)
968 return (scsi_set_errno(sip, EDS_NOMEM));
970 result = scsi_log_sense(sip, entry->ve_code,
978 result = entry->ve_analyze(sip, lphp, log_length);
980 result = scsi_set_errno(sip, EDS_IO);
992 logpage_ie_analyze(ds_scsi_info_t *sip, scsi_log_parameter_header_t *lphp,
999 assert(sip->si_dsp->ds_predfail == NULL);
1000 if (nvlist_alloc(&sip->si_dsp->ds_predfail, NV_UNIQUE_NAME, 0) != 0)
1001 return (scsi_set_errno(sip, EDS_NOMEM));
1002 nvl = sip->si_dsp->ds_predfail;
1017 return (scsi_set_errno(sip, EDS_NOMEM));
1020 sip->si_dsp->ds_faults |=
1032 logpage_temp_analyze(ds_scsi_info_t *sip, scsi_log_parameter_header_t *lphp,
1041 assert(sip->si_dsp->ds_overtemp == NULL);
1042 if (nvlist_alloc(&sip->si_dsp->ds_overtemp, NV_UNIQUE_NAME, 0) != 0)
1043 return (scsi_set_errno(sip, EDS_NOMEM));
1044 nvl = sip->si_dsp->ds_overtemp;
1060 return (scsi_set_errno(sip, EDS_NOMEM));
1071 return (scsi_set_errno(sip, EDS_NOMEM));
1082 sip->si_dsp->ds_faults |= DS_FAULT_OVERTEMP;
1088 logpage_selftest_analyze(ds_scsi_info_t *sip, scsi_log_parameter_header_t *lphp,
1097 assert(sip->si_dsp->ds_testfail == NULL);
1098 if (nvlist_alloc(&sip->si_dsp->ds_testfail, NV_UNIQUE_NAME, 0) != 0)
1099 return (scsi_set_errno(sip, EDS_NOMEM));
1100 nvl = sip->si_dsp->ds_testfail;
1128 return (scsi_set_errno(sip,
1133 sip->si_dsp->ds_faults |=
1152 analyze_ie_sense(ds_scsi_info_t *sip)
1160 if (sip->si_iec_current.ie_mrie != IE_REPORT_ON_REQUEST)
1163 if (scsi_request_sense(sip, &skey, &asc, &ascq) != 0) {
1166 return (scsi_set_errno(sip, EDS_IO));
1168 assert(sip->si_dsp->ds_predfail == NULL);
1169 if (nvlist_alloc(&sip->si_dsp->ds_predfail,
1171 return (scsi_set_errno(sip, EDS_NOMEM));
1172 nvl = sip->si_dsp->ds_predfail;
1179 return (scsi_set_errno(sip, EDS_NOMEM));
1183 sip->si_dsp->ds_faults |= DS_FAULT_PREDFAIL;
1195 ds_scsi_info_t *sip = arg;
1196 if (sip->si_sim)
1197 (void) dlclose(sip->si_sim);
1199 free(sip);
1234 ds_scsi_open_common(disk_status_t *dsp, ds_scsi_info_t *sip)
1238 sip->si_dsp = dsp;
1241 if (load_modepages(sip) != 0) {
1242 ds_scsi_close(sip);
1247 if (load_logpages(sip) != 0) {
1248 ds_scsi_close(sip);
1253 if (load_ie_modepage(sip) != 0 ||
1254 scsi_enable_ie(sip, &changed) != 0 ||
1255 (changed && load_ie_modepage(sip) != 0)) {
1256 ds_scsi_close(sip);
1261 if (sip->si_supp_log != 0 && clear_gltsd(sip) != 0) {
1262 ds_scsi_close(sip);
1266 return (sip);
1272 ds_scsi_info_t *sip;
1274 if ((sip = calloc(sizeof (ds_scsi_info_t), 1)) == NULL) {
1279 return (ds_scsi_open_common(dsp, sip));
1285 ds_scsi_info_t *sip;
1287 if ((sip = calloc(sizeof (ds_scsi_info_t), 1)) == NULL) {
1292 if ((sip->si_sim = dlopen(dsp->ds_path, RTLD_LAZY)) == NULL) {
1294 free(sip);
1298 return (ds_scsi_open_common(dsp, sip));
1323 ds_scsi_info_t *sip = arg;
1327 if ((sip->si_supp_log & log_validation[i].ve_supported) == 0)
1330 if (analyze_one_logpage(sip, &log_validation[i]) != 0)
1334 if (!(sip->si_supp_log & LOGPAGE_SUPP_IE) &&
1335 (sip->si_supp_mode & MODEPAGE_SUPP_IEC) &&
1336 analyze_ie_sense(sip) != 0)