|
@@ -1453,67 +1453,6 @@ scsi_dump_sense_buffer(const unsigned char *sense_buffer, int sense_len)
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
-static void
|
|
|
-scsi_decode_sense_extras(const unsigned char *sense_buffer, int sense_len,
|
|
|
- struct scsi_sense_hdr *sshdr)
|
|
|
-{
|
|
|
- int k, num, res;
|
|
|
-
|
|
|
- if (sshdr->response_code < 0x72)
|
|
|
- {
|
|
|
- /* only decode extras for "fixed" format now */
|
|
|
- char buff[80];
|
|
|
- int blen, fixed_valid;
|
|
|
- unsigned int info;
|
|
|
-
|
|
|
- fixed_valid = sense_buffer[0] & 0x80;
|
|
|
- info = ((sense_buffer[3] << 24) | (sense_buffer[4] << 16) |
|
|
|
- (sense_buffer[5] << 8) | sense_buffer[6]);
|
|
|
- res = 0;
|
|
|
- memset(buff, 0, sizeof(buff));
|
|
|
- blen = sizeof(buff) - 1;
|
|
|
- if (fixed_valid)
|
|
|
- res += snprintf(buff + res, blen - res,
|
|
|
- "Info fld=0x%x", info);
|
|
|
- if (sense_buffer[2] & 0x80) {
|
|
|
- /* current command has read a filemark */
|
|
|
- if (res > 0)
|
|
|
- res += snprintf(buff + res, blen - res, ", ");
|
|
|
- res += snprintf(buff + res, blen - res, "FMK");
|
|
|
- }
|
|
|
- if (sense_buffer[2] & 0x40) {
|
|
|
- /* end-of-medium condition exists */
|
|
|
- if (res > 0)
|
|
|
- res += snprintf(buff + res, blen - res, ", ");
|
|
|
- res += snprintf(buff + res, blen - res, "EOM");
|
|
|
- }
|
|
|
- if (sense_buffer[2] & 0x20) {
|
|
|
- /* incorrect block length requested */
|
|
|
- if (res > 0)
|
|
|
- res += snprintf(buff + res, blen - res, ", ");
|
|
|
- res += snprintf(buff + res, blen - res, "ILI");
|
|
|
- }
|
|
|
- if (res > 0)
|
|
|
- printk("%s\n", buff);
|
|
|
- } else if (sshdr->additional_length > 0) {
|
|
|
- /* descriptor format with sense descriptors */
|
|
|
- num = 8 + sshdr->additional_length;
|
|
|
- num = (sense_len < num) ? sense_len : num;
|
|
|
- printk("Descriptor sense data with sense descriptors "
|
|
|
- "(in hex):");
|
|
|
- for (k = 0; k < num; ++k) {
|
|
|
- if (0 == (k % 16)) {
|
|
|
- printk("\n");
|
|
|
- printk(KERN_INFO " ");
|
|
|
- }
|
|
|
- printk("%02x ", sense_buffer[k]);
|
|
|
- }
|
|
|
-
|
|
|
- printk("\n");
|
|
|
- }
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
/* Normalize and print sense buffer with name prefix */
|
|
|
void __scsi_print_sense(const struct scsi_device *sdev, const char *name,
|
|
|
const unsigned char *sense_buffer, int sense_len)
|
|
@@ -1525,7 +1464,6 @@ void __scsi_print_sense(const struct scsi_device *sdev, const char *name,
|
|
|
return;
|
|
|
}
|
|
|
scsi_show_sense_hdr(sdev, name, &sshdr);
|
|
|
- scsi_decode_sense_extras(sense_buffer, sense_len, &sshdr);
|
|
|
scsi_show_extd_sense(sdev, name, sshdr.asc, sshdr.ascq);
|
|
|
}
|
|
|
EXPORT_SYMBOL(__scsi_print_sense);
|