Lines Matching full:sense
203 /* 03 MMMMMMMMMMOMMM REQUEST SENSE */
204 { 0x03, ALL, "REQUEST SENSE" },
271 /* 1A OMO O OOOO OO MODE SENSE(6) */
272 { 0x1A, ALL & ~(P | R | B | F), "MODE SENSE(6)" },
403 /* 4D OOOOO OOOO OMO LOG SENSE */
404 { 0x4D, ALL & ~(R | B), "LOG SENSE" },
437 /* 5A OOO OMOOOOMOMO MODE SENSE(10) */
438 { 0x5A, ALL & ~(P), "MODE SENSE(10)" },
726 { SSD_KEY_NO_SENSE, SS_NOP, "NO SENSE" },
929 /*sense key entries*/NULL,
940 /*sense key entries*/NULL,
950 /*sense key entries*/NULL,
960 /*sense key entries*/NULL,
999 "No additional sense information") },
2036 "Descriptor format sense data required") },
2231 "Failed to sense top-of-form") },
2234 "Failed to sense bottom-of-form") },
2381 "Inspect referrals sense descriptors") },
3467 *sense_key_desc = "Invalid Sense Key"; in scsi_sense_desc()
3480 * Given sense and device type information, return the appropriate action.
3482 * pair, fall back on the more generic actions derived from the sense key.
3501 * with this request sense. A deferred error is an error in scsi_error_action()
3519 * sense handler or punted back up to a user mode daemon in scsi_error_action()
3529 * Override the 'No additional Sense' entry (0,0) in scsi_error_action()
3530 * with the error action of the sense key. in scsi_error_action()
3740 * Iterate over sense descriptors. Each descriptor is passed into iter_func().
3745 scsi_desc_iterate(struct scsi_sense_data_desc *sense, u_int sense_len, in scsi_desc_iterate() argument
3746 int (*iter_func)(struct scsi_sense_data_desc *sense, in scsi_desc_iterate() argument
3756 if (SSD_DESC_IS_PRESENT(sense, sense_len, extra_len) == 0) in scsi_desc_iterate()
3769 desc_len = MIN(desc_len, MIN(sense->extra_len, SSD_EXTRA_MAX)); in scsi_desc_iterate()
3783 &sense->sense_desc[cur_pos]; in scsi_desc_iterate()
3798 if (iter_func(sense, sense_len, header, arg) != 0) in scsi_desc_iterate()
3811 scsi_find_desc_func(struct scsi_sense_data_desc *sense, u_int sense_len, in scsi_find_desc_func() argument
3828 * Given a descriptor type, return a pointer to it if it is in the sense
3829 * data and not truncated. Avoiding truncating sense data will simplify
3833 scsi_find_desc(struct scsi_sense_data_desc *sense, u_int sense_len, in scsi_find_desc() argument
3841 scsi_desc_iterate(sense, sense_len, scsi_find_desc_func, &desc_info); in scsi_find_desc()
3847 * Fill in SCSI descriptor sense data with the specified parameters.
3854 struct scsi_sense_data_desc *sense; in scsi_set_sense_data_desc_va() local
3860 sense = (struct scsi_sense_data_desc *)sense_data; in scsi_set_sense_data_desc_va()
3862 sense->error_code = SSD_DESC_CURRENT_ERROR; in scsi_set_sense_data_desc_va()
3864 sense->error_code = SSD_DESC_DEFERRED_ERROR; in scsi_set_sense_data_desc_va()
3865 sense->sense_key = sense_key; in scsi_set_sense_data_desc_va()
3866 sense->add_sense_code = asc; in scsi_set_sense_data_desc_va()
3867 sense->add_sense_code_qual = ascq; in scsi_set_sense_data_desc_va()
3868 sense->flags = 0; in scsi_set_sense_data_desc_va()
3870 desc = &sense->sense_desc[0]; in scsi_set_sense_data_desc_va()
3875 printf("%s: invalid sense type %d\n", __func__, in scsi_set_sense_data_desc_va()
3887 sense->flags |= SSDD_SDAT_OVFL; in scsi_set_sense_data_desc_va()
3900 sense->flags |= SSDD_SDAT_OVFL; in scsi_set_sense_data_desc_va()
3917 sense->flags |= SSDD_SDAT_OVFL; in scsi_set_sense_data_desc_va()
3935 sense->flags |= SSDD_SDAT_OVFL; in scsi_set_sense_data_desc_va()
3953 sense->flags |= SSDD_SDAT_OVFL; in scsi_set_sense_data_desc_va()
3970 sense->flags |= SSDD_SDAT_OVFL; in scsi_set_sense_data_desc_va()
3989 sense->extra_len = desc - &sense->sense_desc[0]; in scsi_set_sense_data_desc_va()
3991 sense->extra_len; in scsi_set_sense_data_desc_va()
3995 * Fill in SCSI fixed sense data with the specified parameters.
4002 struct scsi_sense_data_fixed *sense; in scsi_set_sense_data_fixed_va() local
4008 sense = (struct scsi_sense_data_fixed *)sense_data; in scsi_set_sense_data_fixed_va()
4010 sense->error_code = SSD_CURRENT_ERROR; in scsi_set_sense_data_fixed_va()
4012 sense->error_code = SSD_DEFERRED_ERROR; in scsi_set_sense_data_fixed_va()
4013 sense->flags = sense_key & SSD_KEY; in scsi_set_sense_data_fixed_va()
4014 sense->extra_len = 0; in scsi_set_sense_data_fixed_va()
4016 sense->add_sense_code = asc; in scsi_set_sense_data_fixed_va()
4017 sense->extra_len = MAX(sense->extra_len, 5); in scsi_set_sense_data_fixed_va()
4019 sense->flags |= SSD_SDAT_OVFL; in scsi_set_sense_data_fixed_va()
4021 sense->add_sense_code_qual = ascq; in scsi_set_sense_data_fixed_va()
4022 sense->extra_len = MAX(sense->extra_len, 6); in scsi_set_sense_data_fixed_va()
4024 sense->flags |= SSD_SDAT_OVFL; in scsi_set_sense_data_fixed_va()
4029 printf("%s: invalid sense type %d\n", __func__, in scsi_set_sense_data_fixed_va()
4040 if (len > sizeof(sense->sense_key_spec)) in scsi_set_sense_data_fixed_va()
4043 sense->flags |= SSD_SDAT_OVFL; in scsi_set_sense_data_fixed_va()
4046 bcopy(data, &sense->sense_key_spec[0], len); in scsi_set_sense_data_fixed_va()
4047 sense->extra_len = MAX(sense->extra_len, 10); in scsi_set_sense_data_fixed_va()
4051 sense->flags |= SSD_SDAT_OVFL; in scsi_set_sense_data_fixed_va()
4054 if (len > sizeof(sense->cmd_spec_info)) { in scsi_set_sense_data_fixed_va()
4055 data += len - sizeof(sense->cmd_spec_info); in scsi_set_sense_data_fixed_va()
4056 len = sizeof(sense->cmd_spec_info); in scsi_set_sense_data_fixed_va()
4058 bcopy(data, &sense->cmd_spec_info[ in scsi_set_sense_data_fixed_va()
4059 sizeof(sense->cmd_spec_info) - len], len); in scsi_set_sense_data_fixed_va()
4060 sense->extra_len = MAX(sense->extra_len, 4); in scsi_set_sense_data_fixed_va()
4064 sense->error_code |= SSD_ERRCODE_VALID; in scsi_set_sense_data_fixed_va()
4065 while (len > sizeof(sense->info)) { in scsi_set_sense_data_fixed_va()
4067 sense->error_code &= ~SSD_ERRCODE_VALID; in scsi_set_sense_data_fixed_va()
4071 bcopy(data, &sense->info[sizeof(sense->info) - len], len); in scsi_set_sense_data_fixed_va()
4075 sense->flags |= SSD_SDAT_OVFL; in scsi_set_sense_data_fixed_va()
4078 sense->fru = *data; in scsi_set_sense_data_fixed_va()
4079 sense->extra_len = MAX(sense->extra_len, 7); in scsi_set_sense_data_fixed_va()
4082 sense->flags |= *data & in scsi_set_sense_data_fixed_va()
4094 sense->extra_len; in scsi_set_sense_data_fixed_va()
4098 * Fill in SCSI sense data with the specified parameters. This routine can
4099 * fill in either fixed or descriptor type sense data.
4145 * Get sense information for three similar sense data types.
4160 struct scsi_sense_data_desc *sense; in scsi_get_sense_info() local
4163 sense = (struct scsi_sense_data_desc *)sense_data; in scsi_get_sense_info()
4165 desc = scsi_find_desc(sense, sense_len, info_type); in scsi_get_sense_info()
4213 struct scsi_sense_data_fixed *sense; in scsi_get_sense_info() local
4215 sense = (struct scsi_sense_data_fixed *)sense_data; in scsi_get_sense_info()
4221 if ((sense->error_code & SSD_ERRCODE_VALID) == 0) in scsi_get_sense_info()
4224 if (SSD_FIXED_IS_PRESENT(sense, sense_len, info) == 0) in scsi_get_sense_info()
4227 info_val = scsi_4btoul(sense->info); in scsi_get_sense_info()
4237 if ((SSD_FIXED_IS_PRESENT(sense, sense_len, in scsi_get_sense_info()
4239 || (SSD_FIXED_IS_FILLED(sense, cmd_spec_info) == 0)) in scsi_get_sense_info()
4242 cmd_val = scsi_4btoul(sense->cmd_spec_info); in scsi_get_sense_info()
4252 if ((SSD_FIXED_IS_PRESENT(sense, sense_len, fru) == 0) in scsi_get_sense_info()
4253 || (SSD_FIXED_IS_FILLED(sense, fru) == 0)) in scsi_get_sense_info()
4256 if (sense->fru == 0) in scsi_get_sense_info()
4259 *info = sense->fru; in scsi_get_sense_info()
4261 *signed_info = (int8_t)sense->fru; in scsi_get_sense_info()
4291 struct scsi_sense_data_desc *sense; in scsi_get_sks() local
4294 sense = (struct scsi_sense_data_desc *)sense_data; in scsi_get_sks()
4296 desc = (struct scsi_sense_sks *)scsi_find_desc(sense, sense_len, in scsi_get_sks()
4308 struct scsi_sense_data_fixed *sense; in scsi_get_sks() local
4310 sense = (struct scsi_sense_data_fixed *)sense_data; in scsi_get_sks()
4312 if ((SSD_FIXED_IS_PRESENT(sense, sense_len, sense_key_spec)== 0) in scsi_get_sks()
4313 || (SSD_FIXED_IS_FILLED(sense, sense_key_spec) == 0)) in scsi_get_sks()
4316 if ((sense->sense_key_spec[0] & SSD_SCS_VALID) == 0) in scsi_get_sks()
4319 bcopy(sense->sense_key_spec, sks,sizeof(sense->sense_key_spec)); in scsi_get_sks()
4332 * Provide a common interface for fixed and descriptor sense to detect
4333 * whether we have block-specific sense information. It is clear by the
4359 struct scsi_sense_data_desc *sense; in scsi_get_block_info() local
4362 sense = (struct scsi_sense_data_desc *)sense_data; in scsi_get_block_info()
4364 block = (struct scsi_sense_block *)scsi_find_desc(sense, in scsi_get_block_info()
4373 struct scsi_sense_data_fixed *sense; in scsi_get_block_info() local
4375 sense = (struct scsi_sense_data_fixed *)sense_data; in scsi_get_block_info()
4377 if (SSD_FIXED_IS_PRESENT(sense, sense_len, flags) == 0) in scsi_get_block_info()
4380 *block_bits = sense->flags & SSD_ILI; in scsi_get_block_info()
4412 struct scsi_sense_data_desc *sense; in scsi_get_stream_info() local
4415 sense = (struct scsi_sense_data_desc *)sense_data; in scsi_get_stream_info()
4417 stream = (struct scsi_sense_stream *)scsi_find_desc(sense, in scsi_get_stream_info()
4426 struct scsi_sense_data_fixed *sense; in scsi_get_stream_info() local
4428 sense = (struct scsi_sense_data_fixed *)sense_data; in scsi_get_stream_info()
4430 if (SSD_FIXED_IS_PRESENT(sense, sense_len, flags) == 0) in scsi_get_stream_info()
4433 *stream_bits = sense->flags & (SSD_ILI|SSD_EOM|SSD_FILEMARK); in scsi_get_stream_info()
4554 sbuf_printf(sb, "Sense Key Specific: %#x,%#x", sks[0], in scsi_sks_sbuf()
4577 sbuf_cat(sb, "Stream Command Sense Data: "); in scsi_stream_sbuf()
4596 sbuf_cat(sb, "Block Command Sense Data: "); in scsi_block_sbuf()
4602 scsi_sense_info_sbuf(struct sbuf *sb, struct scsi_sense_data *sense, in scsi_sense_info_sbuf() argument
4618 scsi_sense_command_sbuf(struct sbuf *sb, struct scsi_sense_data *sense, in scsi_sense_command_sbuf() argument
4632 scsi_sense_sks_sbuf(struct sbuf *sb, struct scsi_sense_data *sense, in scsi_sense_sks_sbuf() argument
4645 scsi_extract_sense_len(sense, sense_len, &error_code, &sense_key, in scsi_sense_sks_sbuf()
4652 scsi_sense_fru_sbuf(struct sbuf *sb, struct scsi_sense_data *sense, in scsi_sense_fru_sbuf() argument
4668 scsi_sense_stream_sbuf(struct sbuf *sb, struct scsi_sense_data *sense, in scsi_sense_stream_sbuf() argument
4680 scsi_sense_block_sbuf(struct sbuf *sb, struct scsi_sense_data *sense, in scsi_sense_block_sbuf() argument
4692 scsi_sense_progress_sbuf(struct sbuf *sb, struct scsi_sense_data *sense, in scsi_sense_progress_sbuf() argument
4705 * Get descriptions for the sense key, ASC, and ASCQ in the in scsi_sense_progress_sbuf()
4707 * in the overall sense data. in scsi_sense_progress_sbuf()
4717 * sense key, ASC, and ASCQ in the descriptor. in scsi_sense_progress_sbuf()
4726 scsi_sense_ata_sbuf(struct sbuf *sb, struct scsi_sense_data *sense, in scsi_sense_ata_sbuf() argument
4773 scsi_sense_forwarded_sbuf(struct sbuf *sb, struct scsi_sense_data *sense, in scsi_sense_forwarded_sbuf() argument
4788 sbuf_printf(sb, "Forwarded sense: %s asc:%x,%x (%s): ", in scsi_sense_forwarded_sbuf()
4793 * Generic sense descriptor printing routine. This is used when we have
4797 scsi_sense_generic_sbuf(struct sbuf *sb, struct scsi_sense_data *sense, in scsi_sense_generic_sbuf() argument
4822 * Sense key specific descriptors need the sense key.
4824 * The sense, cdb, and inquiry data arguments may be NULL, but the
4827 void (*print_func)(struct sbuf *sb, struct scsi_sense_data *sense,
4844 scsi_sense_desc_sbuf(struct sbuf *sb, struct scsi_sense_data *sense, in scsi_sense_desc_sbuf() argument
4866 printer->print_func(sb, sense, sense_len, cdb, cdb_len, in scsi_sense_desc_sbuf()
4875 scsi_sense_generic_sbuf(sb, sense, sense_len, cdb, cdb_len, in scsi_sense_desc_sbuf()
4907 scsi_print_desc_func(struct scsi_sense_data_desc *sense, u_int sense_len, in scsi_print_desc_func() argument
4929 (struct scsi_sense_data *)sense, sense_len, in scsi_print_desc_func()
4945 scsi_sense_only_sbuf(struct scsi_sense_data *sense, u_int sense_len, in scsi_sense_only_sbuf() argument
4954 scsi_extract_sense_len(sense, sense_len, &error_code, &sense_key, in scsi_sense_only_sbuf()
4957 sbuf_cat(sb, "SCSI sense: "); in scsi_sense_only_sbuf()
4976 * Get descriptions for the sense key, ASC, and ASCQ. If in scsi_sense_only_sbuf()
4977 * these aren't present in the sense data (i.e. the sense in scsi_sense_only_sbuf()
4986 * We first print the sense key and ASC/ASCQ. in scsi_sense_only_sbuf()
4994 if (scsi_get_block_info(sense, sense_len, inq_data, in scsi_sense_only_sbuf()
4999 } else if (scsi_get_stream_info(sense, sense_len, inq_data, in scsi_sense_only_sbuf()
5009 if (scsi_get_sense_info(sense, sense_len, SSD_DESC_INFO, in scsi_sense_only_sbuf()
5019 if (scsi_get_sense_info(sense, sense_len, SSD_DESC_FRU, in scsi_sense_only_sbuf()
5029 if (scsi_get_sense_info(sense, sense_len, SSD_DESC_COMMAND, in scsi_sense_only_sbuf()
5037 * Print out any sense-key-specific information. in scsi_sense_only_sbuf()
5039 if (scsi_get_sks(sense, sense_len, sks) == 0) { in scsi_sense_only_sbuf()
5046 * If this is fixed sense, we're done. If we have in scsi_sense_only_sbuf()
5047 * descriptor sense, we might have more information in scsi_sense_only_sbuf()
5050 if (scsi_sense_type(sense) != SSD_TYPE_DESC) in scsi_sense_only_sbuf()
5053 desc_sense = (struct scsi_sense_data_desc *)sense; in scsi_sense_only_sbuf()
5062 * Print any sense descriptors that we have not already printed. in scsi_sense_only_sbuf()
5072 * sense data. This means that sense_len is 0. in scsi_sense_only_sbuf()
5074 sbuf_cat(sb, "No sense data present\n"); in scsi_sense_only_sbuf()
5078 if (sense->error_code & SSD_ERRCODE_VALID) { in scsi_sense_only_sbuf()
5081 fixed_sense = (struct scsi_sense_data_fixed *)sense; in scsi_sense_only_sbuf()
5111 struct scsi_sense_data *sense; in scsi_sense_sbuf() local
5160 sense = NULL; in scsi_sense_sbuf()
5174 * If the sense data is a physical pointer, forget it. in scsi_sense_sbuf()
5186 * ensure that the sense data is pointer aligned. in scsi_sense_sbuf()
5189 &sense, sizeof(struct scsi_sense_data *)); in scsi_sense_sbuf()
5193 * If the physical sense flag is set, but the sense pointer in scsi_sense_sbuf()
5206 sense = &csio->sense_data; in scsi_sense_sbuf()
5209 scsi_sense_only_sbuf(sense, csio->sense_len - csio->sense_resid, sb, in scsi_sense_sbuf()
5281 * Extract basic sense information. This is backward-compatible with the
5294 * Extract basic sense information from SCSI I/O CCB structure.
5302 /* Make sure there are some sense data we can access. */ in scsi_extract_sense_ccb()
5324 * Extract basic sense information. If show_errors is set, sense values
5333 * If we have no length, we have no sense. in scsi_extract_sense_len()
5355 struct scsi_sense_data_desc *sense; in scsi_extract_sense_len() local
5357 sense = (struct scsi_sense_data_desc *)sense_data; in scsi_extract_sense_len()
5359 if (SSD_DESC_IS_PRESENT(sense, sense_len, sense_key)) in scsi_extract_sense_len()
5360 *sense_key = sense->sense_key & SSD_KEY; in scsi_extract_sense_len()
5364 if (SSD_DESC_IS_PRESENT(sense, sense_len, add_sense_code)) in scsi_extract_sense_len()
5365 *asc = sense->add_sense_code; in scsi_extract_sense_len()
5369 if (SSD_DESC_IS_PRESENT(sense, sense_len, add_sense_code_qual)) in scsi_extract_sense_len()
5370 *ascq = sense->add_sense_code_qual; in scsi_extract_sense_len()
5378 struct scsi_sense_data_fixed *sense; in scsi_extract_sense_len() local
5380 sense = (struct scsi_sense_data_fixed *)sense_data; in scsi_extract_sense_len()
5382 if (SSD_FIXED_IS_PRESENT(sense, sense_len, flags)) in scsi_extract_sense_len()
5383 *sense_key = sense->flags & SSD_KEY; in scsi_extract_sense_len()
5387 if ((SSD_FIXED_IS_PRESENT(sense, sense_len, add_sense_code)) in scsi_extract_sense_len()
5388 && (SSD_FIXED_IS_FILLED(sense, add_sense_code))) in scsi_extract_sense_len()
5389 *asc = sense->add_sense_code; in scsi_extract_sense_len()
5393 if ((SSD_FIXED_IS_PRESENT(sense, sense_len,add_sense_code_qual)) in scsi_extract_sense_len()
5394 && (SSD_FIXED_IS_FILLED(sense, add_sense_code_qual))) in scsi_extract_sense_len()
5395 *ascq = sense->add_sense_code_qual; in scsi_extract_sense_len()
7182 * A field size of 0 doesn't make sense here. The device in scsi_attrib_vendser_sbuf()