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()
3744 * Iterate over sense descriptors. Each descriptor is passed into iter_func().
3749 scsi_desc_iterate(struct scsi_sense_data_desc *sense, u_int sense_len, in scsi_desc_iterate() argument
3750 int (*iter_func)(struct scsi_sense_data_desc *sense, in scsi_desc_iterate() argument
3760 if (SSD_DESC_IS_PRESENT(sense, sense_len, extra_len) == 0) in scsi_desc_iterate()
3773 desc_len = MIN(desc_len, MIN(sense->extra_len, SSD_EXTRA_MAX)); in scsi_desc_iterate()
3787 &sense->sense_desc[cur_pos]; in scsi_desc_iterate()
3802 if (iter_func(sense, sense_len, header, arg) != 0) in scsi_desc_iterate()
3815 scsi_find_desc_func(struct scsi_sense_data_desc *sense, u_int sense_len, in scsi_find_desc_func() argument
3832 * Given a descriptor type, return a pointer to it if it is in the sense
3833 * data and not truncated. Avoiding truncating sense data will simplify
3837 scsi_find_desc(struct scsi_sense_data_desc *sense, u_int sense_len, in scsi_find_desc() argument
3845 scsi_desc_iterate(sense, sense_len, scsi_find_desc_func, &desc_info); in scsi_find_desc()
3851 * Fill in SCSI descriptor sense data with the specified parameters.
3858 struct scsi_sense_data_desc *sense; in scsi_set_sense_data_desc_va() local
3864 sense = (struct scsi_sense_data_desc *)sense_data; in scsi_set_sense_data_desc_va()
3866 sense->error_code = SSD_DESC_CURRENT_ERROR; in scsi_set_sense_data_desc_va()
3868 sense->error_code = SSD_DESC_DEFERRED_ERROR; in scsi_set_sense_data_desc_va()
3869 sense->sense_key = sense_key; in scsi_set_sense_data_desc_va()
3870 sense->add_sense_code = asc; in scsi_set_sense_data_desc_va()
3871 sense->add_sense_code_qual = ascq; in scsi_set_sense_data_desc_va()
3872 sense->flags = 0; in scsi_set_sense_data_desc_va()
3874 desc = &sense->sense_desc[0]; in scsi_set_sense_data_desc_va()
3879 printf("%s: invalid sense type %d\n", __func__, in scsi_set_sense_data_desc_va()
3891 sense->flags |= SSDD_SDAT_OVFL; in scsi_set_sense_data_desc_va()
3904 sense->flags |= SSDD_SDAT_OVFL; in scsi_set_sense_data_desc_va()
3921 sense->flags |= SSDD_SDAT_OVFL; in scsi_set_sense_data_desc_va()
3939 sense->flags |= SSDD_SDAT_OVFL; in scsi_set_sense_data_desc_va()
3957 sense->flags |= SSDD_SDAT_OVFL; in scsi_set_sense_data_desc_va()
3974 sense->flags |= SSDD_SDAT_OVFL; in scsi_set_sense_data_desc_va()
3993 sense->extra_len = desc - &sense->sense_desc[0]; in scsi_set_sense_data_desc_va()
3995 sense->extra_len; in scsi_set_sense_data_desc_va()
3999 * Fill in SCSI fixed sense data with the specified parameters.
4006 struct scsi_sense_data_fixed *sense; in scsi_set_sense_data_fixed_va() local
4012 sense = (struct scsi_sense_data_fixed *)sense_data; in scsi_set_sense_data_fixed_va()
4014 sense->error_code = SSD_CURRENT_ERROR; in scsi_set_sense_data_fixed_va()
4016 sense->error_code = SSD_DEFERRED_ERROR; in scsi_set_sense_data_fixed_va()
4017 sense->flags = sense_key & SSD_KEY; in scsi_set_sense_data_fixed_va()
4018 sense->extra_len = 0; in scsi_set_sense_data_fixed_va()
4020 sense->add_sense_code = asc; in scsi_set_sense_data_fixed_va()
4021 sense->extra_len = MAX(sense->extra_len, 5); in scsi_set_sense_data_fixed_va()
4023 sense->flags |= SSD_SDAT_OVFL; in scsi_set_sense_data_fixed_va()
4025 sense->add_sense_code_qual = ascq; in scsi_set_sense_data_fixed_va()
4026 sense->extra_len = MAX(sense->extra_len, 6); in scsi_set_sense_data_fixed_va()
4028 sense->flags |= SSD_SDAT_OVFL; in scsi_set_sense_data_fixed_va()
4033 printf("%s: invalid sense type %d\n", __func__, in scsi_set_sense_data_fixed_va()
4044 if (len > sizeof(sense->sense_key_spec)) in scsi_set_sense_data_fixed_va()
4047 sense->flags |= SSD_SDAT_OVFL; in scsi_set_sense_data_fixed_va()
4050 bcopy(data, &sense->sense_key_spec[0], len); in scsi_set_sense_data_fixed_va()
4051 sense->extra_len = MAX(sense->extra_len, 10); in scsi_set_sense_data_fixed_va()
4055 sense->flags |= SSD_SDAT_OVFL; in scsi_set_sense_data_fixed_va()
4058 if (len > sizeof(sense->cmd_spec_info)) { in scsi_set_sense_data_fixed_va()
4059 data += len - sizeof(sense->cmd_spec_info); in scsi_set_sense_data_fixed_va()
4060 len = sizeof(sense->cmd_spec_info); in scsi_set_sense_data_fixed_va()
4062 bcopy(data, &sense->cmd_spec_info[ in scsi_set_sense_data_fixed_va()
4063 sizeof(sense->cmd_spec_info) - len], len); in scsi_set_sense_data_fixed_va()
4064 sense->extra_len = MAX(sense->extra_len, 4); in scsi_set_sense_data_fixed_va()
4068 sense->error_code |= SSD_ERRCODE_VALID; in scsi_set_sense_data_fixed_va()
4069 while (len > sizeof(sense->info)) { in scsi_set_sense_data_fixed_va()
4071 sense->error_code &= ~SSD_ERRCODE_VALID; in scsi_set_sense_data_fixed_va()
4075 bcopy(data, &sense->info[sizeof(sense->info) - len], len); in scsi_set_sense_data_fixed_va()
4079 sense->flags |= SSD_SDAT_OVFL; in scsi_set_sense_data_fixed_va()
4082 sense->fru = *data; in scsi_set_sense_data_fixed_va()
4083 sense->extra_len = MAX(sense->extra_len, 7); in scsi_set_sense_data_fixed_va()
4086 sense->flags |= *data & in scsi_set_sense_data_fixed_va()
4098 sense->extra_len; in scsi_set_sense_data_fixed_va()
4102 * Fill in SCSI sense data with the specified parameters. This routine can
4103 * fill in either fixed or descriptor type sense data.
4149 * Get sense information for three similar sense data types.
4164 struct scsi_sense_data_desc *sense; in scsi_get_sense_info() local
4167 sense = (struct scsi_sense_data_desc *)sense_data; in scsi_get_sense_info()
4169 desc = scsi_find_desc(sense, sense_len, info_type); in scsi_get_sense_info()
4217 struct scsi_sense_data_fixed *sense; in scsi_get_sense_info() local
4219 sense = (struct scsi_sense_data_fixed *)sense_data; in scsi_get_sense_info()
4225 if ((sense->error_code & SSD_ERRCODE_VALID) == 0) in scsi_get_sense_info()
4228 if (SSD_FIXED_IS_PRESENT(sense, sense_len, info) == 0) in scsi_get_sense_info()
4231 info_val = scsi_4btoul(sense->info); in scsi_get_sense_info()
4241 if ((SSD_FIXED_IS_PRESENT(sense, sense_len, in scsi_get_sense_info()
4243 || (SSD_FIXED_IS_FILLED(sense, cmd_spec_info) == 0)) in scsi_get_sense_info()
4246 cmd_val = scsi_4btoul(sense->cmd_spec_info); in scsi_get_sense_info()
4256 if ((SSD_FIXED_IS_PRESENT(sense, sense_len, fru) == 0) in scsi_get_sense_info()
4257 || (SSD_FIXED_IS_FILLED(sense, fru) == 0)) in scsi_get_sense_info()
4260 if (sense->fru == 0) in scsi_get_sense_info()
4263 *info = sense->fru; in scsi_get_sense_info()
4265 *signed_info = (int8_t)sense->fru; in scsi_get_sense_info()
4295 struct scsi_sense_data_desc *sense; in scsi_get_sks() local
4298 sense = (struct scsi_sense_data_desc *)sense_data; in scsi_get_sks()
4300 desc = (struct scsi_sense_sks *)scsi_find_desc(sense, sense_len, in scsi_get_sks()
4312 struct scsi_sense_data_fixed *sense; in scsi_get_sks() local
4314 sense = (struct scsi_sense_data_fixed *)sense_data; in scsi_get_sks()
4316 if ((SSD_FIXED_IS_PRESENT(sense, sense_len, sense_key_spec)== 0) in scsi_get_sks()
4317 || (SSD_FIXED_IS_FILLED(sense, sense_key_spec) == 0)) in scsi_get_sks()
4320 if ((sense->sense_key_spec[0] & SSD_SCS_VALID) == 0) in scsi_get_sks()
4323 bcopy(sense->sense_key_spec, sks,sizeof(sense->sense_key_spec)); in scsi_get_sks()
4336 * Provide a common interface for fixed and descriptor sense to detect
4337 * whether we have block-specific sense information. It is clear by the
4363 struct scsi_sense_data_desc *sense; in scsi_get_block_info() local
4366 sense = (struct scsi_sense_data_desc *)sense_data; in scsi_get_block_info()
4368 block = (struct scsi_sense_block *)scsi_find_desc(sense, in scsi_get_block_info()
4377 struct scsi_sense_data_fixed *sense; in scsi_get_block_info() local
4379 sense = (struct scsi_sense_data_fixed *)sense_data; in scsi_get_block_info()
4381 if (SSD_FIXED_IS_PRESENT(sense, sense_len, flags) == 0) in scsi_get_block_info()
4384 *block_bits = sense->flags & SSD_ILI; in scsi_get_block_info()
4416 struct scsi_sense_data_desc *sense; in scsi_get_stream_info() local
4419 sense = (struct scsi_sense_data_desc *)sense_data; in scsi_get_stream_info()
4421 stream = (struct scsi_sense_stream *)scsi_find_desc(sense, in scsi_get_stream_info()
4430 struct scsi_sense_data_fixed *sense; in scsi_get_stream_info() local
4432 sense = (struct scsi_sense_data_fixed *)sense_data; in scsi_get_stream_info()
4434 if (SSD_FIXED_IS_PRESENT(sense, sense_len, flags) == 0) in scsi_get_stream_info()
4437 *stream_bits = sense->flags & (SSD_ILI|SSD_EOM|SSD_FILEMARK); in scsi_get_stream_info()
4558 sbuf_printf(sb, "Sense Key Specific: %#x,%#x", sks[0], in scsi_sks_sbuf()
4581 sbuf_cat(sb, "Stream Command Sense Data: "); in scsi_stream_sbuf()
4600 sbuf_cat(sb, "Block Command Sense Data: "); in scsi_block_sbuf()
4606 scsi_sense_info_sbuf(struct sbuf *sb, struct scsi_sense_data *sense, in scsi_sense_info_sbuf() argument
4622 scsi_sense_command_sbuf(struct sbuf *sb, struct scsi_sense_data *sense, in scsi_sense_command_sbuf() argument
4636 scsi_sense_sks_sbuf(struct sbuf *sb, struct scsi_sense_data *sense, in scsi_sense_sks_sbuf() argument
4649 scsi_extract_sense_len(sense, sense_len, &error_code, &sense_key, in scsi_sense_sks_sbuf()
4656 scsi_sense_fru_sbuf(struct sbuf *sb, struct scsi_sense_data *sense, in scsi_sense_fru_sbuf() argument
4672 scsi_sense_stream_sbuf(struct sbuf *sb, struct scsi_sense_data *sense, in scsi_sense_stream_sbuf() argument
4684 scsi_sense_block_sbuf(struct sbuf *sb, struct scsi_sense_data *sense, in scsi_sense_block_sbuf() argument
4696 scsi_sense_progress_sbuf(struct sbuf *sb, struct scsi_sense_data *sense, in scsi_sense_progress_sbuf() argument
4709 * Get descriptions for the sense key, ASC, and ASCQ in the in scsi_sense_progress_sbuf()
4711 * in the overall sense data. in scsi_sense_progress_sbuf()
4721 * sense key, ASC, and ASCQ in the descriptor. in scsi_sense_progress_sbuf()
4730 scsi_sense_ata_sbuf(struct sbuf *sb, struct scsi_sense_data *sense, in scsi_sense_ata_sbuf() argument
4777 scsi_sense_forwarded_sbuf(struct sbuf *sb, struct scsi_sense_data *sense, in scsi_sense_forwarded_sbuf() argument
4792 sbuf_printf(sb, "Forwarded sense: %s asc:%x,%x (%s): ", in scsi_sense_forwarded_sbuf()
4797 * Generic sense descriptor printing routine. This is used when we have
4801 scsi_sense_generic_sbuf(struct sbuf *sb, struct scsi_sense_data *sense, in scsi_sense_generic_sbuf() argument
4826 * Sense key specific descriptors need the sense key.
4828 * The sense, cdb, and inquiry data arguments may be NULL, but the
4831 void (*print_func)(struct sbuf *sb, struct scsi_sense_data *sense,
4848 scsi_sense_desc_sbuf(struct sbuf *sb, struct scsi_sense_data *sense, in scsi_sense_desc_sbuf() argument
4870 printer->print_func(sb, sense, sense_len, cdb, cdb_len, in scsi_sense_desc_sbuf()
4879 scsi_sense_generic_sbuf(sb, sense, sense_len, cdb, cdb_len, in scsi_sense_desc_sbuf()
4911 scsi_print_desc_func(struct scsi_sense_data_desc *sense, u_int sense_len, in scsi_print_desc_func() argument
4933 (struct scsi_sense_data *)sense, sense_len, in scsi_print_desc_func()
4949 scsi_sense_only_sbuf(struct scsi_sense_data *sense, u_int sense_len, in scsi_sense_only_sbuf() argument
4958 scsi_extract_sense_len(sense, sense_len, &error_code, &sense_key, in scsi_sense_only_sbuf()
4961 sbuf_cat(sb, "SCSI sense: "); in scsi_sense_only_sbuf()
4980 * Get descriptions for the sense key, ASC, and ASCQ. If in scsi_sense_only_sbuf()
4981 * these aren't present in the sense data (i.e. the sense in scsi_sense_only_sbuf()
4990 * We first print the sense key and ASC/ASCQ. in scsi_sense_only_sbuf()
4998 if (scsi_get_block_info(sense, sense_len, inq_data, in scsi_sense_only_sbuf()
5003 } else if (scsi_get_stream_info(sense, sense_len, inq_data, in scsi_sense_only_sbuf()
5013 if (scsi_get_sense_info(sense, sense_len, SSD_DESC_INFO, in scsi_sense_only_sbuf()
5023 if (scsi_get_sense_info(sense, sense_len, SSD_DESC_FRU, in scsi_sense_only_sbuf()
5033 if (scsi_get_sense_info(sense, sense_len, SSD_DESC_COMMAND, in scsi_sense_only_sbuf()
5041 * Print out any sense-key-specific information. in scsi_sense_only_sbuf()
5043 if (scsi_get_sks(sense, sense_len, sks) == 0) { in scsi_sense_only_sbuf()
5050 * If this is fixed sense, we're done. If we have in scsi_sense_only_sbuf()
5051 * descriptor sense, we might have more information in scsi_sense_only_sbuf()
5054 if (scsi_sense_type(sense) != SSD_TYPE_DESC) in scsi_sense_only_sbuf()
5057 desc_sense = (struct scsi_sense_data_desc *)sense; in scsi_sense_only_sbuf()
5066 * Print any sense descriptors that we have not already printed. in scsi_sense_only_sbuf()
5076 * sense data. This means that sense_len is 0. in scsi_sense_only_sbuf()
5078 sbuf_cat(sb, "No sense data present\n"); in scsi_sense_only_sbuf()
5082 if (sense->error_code & SSD_ERRCODE_VALID) { in scsi_sense_only_sbuf()
5085 fixed_sense = (struct scsi_sense_data_fixed *)sense; in scsi_sense_only_sbuf()
5115 struct scsi_sense_data *sense; in scsi_sense_sbuf() local
5168 sense = NULL; in scsi_sense_sbuf()
5182 * If the sense data is a physical pointer, forget it. in scsi_sense_sbuf()
5194 * ensure that the sense data is pointer aligned. in scsi_sense_sbuf()
5197 &sense, sizeof(struct scsi_sense_data *)); in scsi_sense_sbuf()
5201 * If the physical sense flag is set, but the sense pointer in scsi_sense_sbuf()
5214 sense = &csio->sense_data; in scsi_sense_sbuf()
5217 scsi_sense_only_sbuf(sense, csio->sense_len - csio->sense_resid, sb, in scsi_sense_sbuf()
5289 * Extract basic sense information. This is backward-compatible with the
5302 * Extract basic sense information from SCSI I/O CCB structure.
5310 /* Make sure there are some sense data we can access. */ in scsi_extract_sense_ccb()
5332 * Extract basic sense information. If show_errors is set, sense values
5341 * If we have no length, we have no sense. in scsi_extract_sense_len()
5363 struct scsi_sense_data_desc *sense; in scsi_extract_sense_len() local
5365 sense = (struct scsi_sense_data_desc *)sense_data; in scsi_extract_sense_len()
5367 if (SSD_DESC_IS_PRESENT(sense, sense_len, sense_key)) in scsi_extract_sense_len()
5368 *sense_key = sense->sense_key & SSD_KEY; in scsi_extract_sense_len()
5372 if (SSD_DESC_IS_PRESENT(sense, sense_len, add_sense_code)) in scsi_extract_sense_len()
5373 *asc = sense->add_sense_code; in scsi_extract_sense_len()
5377 if (SSD_DESC_IS_PRESENT(sense, sense_len, add_sense_code_qual)) in scsi_extract_sense_len()
5378 *ascq = sense->add_sense_code_qual; in scsi_extract_sense_len()
5386 struct scsi_sense_data_fixed *sense; in scsi_extract_sense_len() local
5388 sense = (struct scsi_sense_data_fixed *)sense_data; in scsi_extract_sense_len()
5390 if (SSD_FIXED_IS_PRESENT(sense, sense_len, flags)) in scsi_extract_sense_len()
5391 *sense_key = sense->flags & SSD_KEY; in scsi_extract_sense_len()
5395 if ((SSD_FIXED_IS_PRESENT(sense, sense_len, add_sense_code)) in scsi_extract_sense_len()
5396 && (SSD_FIXED_IS_FILLED(sense, add_sense_code))) in scsi_extract_sense_len()
5397 *asc = sense->add_sense_code; in scsi_extract_sense_len()
5401 if ((SSD_FIXED_IS_PRESENT(sense, sense_len,add_sense_code_qual)) in scsi_extract_sense_len()
5402 && (SSD_FIXED_IS_FILLED(sense, add_sense_code_qual))) in scsi_extract_sense_len()
5403 *ascq = sense->add_sense_code_qual; in scsi_extract_sense_len()
7190 * A field size of 0 doesn't make sense here. The device in scsi_attrib_vendser_sbuf()