svn commit: r311444 - stable/10/sys/cam/scsi
Alexander Motin
mav at FreeBSD.org
Thu Jan 5 13:29:59 UTC 2017
Author: mav
Date: Thu Jan 5 13:29:57 2017
New Revision: 311444
URL: https://svnweb.freebsd.org/changeset/base/311444
Log:
MFC r305591: Decode ATA Status Return descriptor.
Modified:
stable/10/sys/cam/scsi/scsi_all.c
stable/10/sys/cam/scsi/scsi_all.h
Modified: stable/10/sys/cam/scsi/scsi_all.c
==============================================================================
--- stable/10/sys/cam/scsi/scsi_all.c Thu Jan 5 12:56:41 2017 (r311443)
+++ stable/10/sys/cam/scsi/scsi_all.c Thu Jan 5 13:29:57 2017 (r311444)
@@ -4622,6 +4622,53 @@ scsi_sense_progress_sbuf(struct sbuf *sb
}
void
+scsi_sense_ata_sbuf(struct sbuf *sb, struct scsi_sense_data *sense,
+ u_int sense_len, uint8_t *cdb, int cdb_len,
+ struct scsi_inquiry_data *inq_data,
+ struct scsi_sense_desc_header *header)
+{
+ struct scsi_sense_ata_ret_desc *res;
+
+ res = (struct scsi_sense_ata_ret_desc *)header;
+
+ sbuf_printf(sb, "ATA status: %02x (%s%s%s%s%s%s%s%s), ",
+ res->status,
+ (res->status & 0x80) ? "BSY " : "",
+ (res->status & 0x40) ? "DRDY " : "",
+ (res->status & 0x20) ? "DF " : "",
+ (res->status & 0x10) ? "SERV " : "",
+ (res->status & 0x08) ? "DRQ " : "",
+ (res->status & 0x04) ? "CORR " : "",
+ (res->status & 0x02) ? "IDX " : "",
+ (res->status & 0x01) ? "ERR" : "");
+ if (res->status & 1) {
+ sbuf_printf(sb, "error: %02x (%s%s%s%s%s%s%s%s), ",
+ res->error,
+ (res->error & 0x80) ? "ICRC " : "",
+ (res->error & 0x40) ? "UNC " : "",
+ (res->error & 0x20) ? "MC " : "",
+ (res->error & 0x10) ? "IDNF " : "",
+ (res->error & 0x08) ? "MCR " : "",
+ (res->error & 0x04) ? "ABRT " : "",
+ (res->error & 0x02) ? "NM " : "",
+ (res->error & 0x01) ? "ILI" : "");
+ }
+
+ if (res->flags & SSD_DESC_ATA_FLAG_EXTEND) {
+ sbuf_printf(sb, "count: %02x%02x, ",
+ res->count_15_8, res->count_7_0);
+ sbuf_printf(sb, "LBA: %02x%02x%02x%02x%02x%02x, ",
+ res->lba_47_40, res->lba_39_32, res->lba_31_24,
+ res->lba_23_16, res->lba_15_8, res->lba_7_0);
+ } else {
+ sbuf_printf(sb, "count: %02x, ", res->count_7_0);
+ sbuf_printf(sb, "LBA: %02x%02x%02x, ",
+ res->lba_23_16, res->lba_15_8, res->lba_7_0);
+ }
+ sbuf_printf(sb, "device: %02x, ", res->device);
+}
+
+void
scsi_sense_forwarded_sbuf(struct sbuf *sb, struct scsi_sense_data *sense,
u_int sense_len, uint8_t *cdb, int cdb_len,
struct scsi_inquiry_data *inq_data,
@@ -4687,6 +4734,7 @@ struct scsi_sense_desc_printer {
{SSD_DESC_FRU, scsi_sense_fru_sbuf},
{SSD_DESC_STREAM, scsi_sense_stream_sbuf},
{SSD_DESC_BLOCK, scsi_sense_block_sbuf},
+ {SSD_DESC_ATA, scsi_sense_ata_sbuf},
{SSD_DESC_PROGRESS, scsi_sense_progress_sbuf},
{SSD_DESC_FORWARDED, scsi_sense_forwarded_sbuf}
};
Modified: stable/10/sys/cam/scsi/scsi_all.h
==============================================================================
--- stable/10/sys/cam/scsi/scsi_all.h Thu Jan 5 12:56:41 2017 (r311443)
+++ stable/10/sys/cam/scsi/scsi_all.h Thu Jan 5 13:29:57 2017 (r311444)
@@ -3399,6 +3399,29 @@ struct scsi_sense_osd_attr_id
};
/*
+ * ATA Return descriptor, used for the SCSI ATA PASS-THROUGH(12), (16) and
+ * (32) commands. Described in SAT-4r05.
+ */
+struct scsi_sense_ata_ret_desc
+{
+ uint8_t desc_type;
+#define SSD_DESC_ATA 0x09
+ uint8_t length;
+ uint8_t flags;
+#define SSD_DESC_ATA_FLAG_EXTEND 0x01
+ uint8_t error;
+ uint8_t count_15_8;
+ uint8_t count_7_0;
+ uint8_t lba_31_24;
+ uint8_t lba_7_0;
+ uint8_t lba_39_32;
+ uint8_t lba_15_8;
+ uint8_t lba_47_40;
+ uint8_t lba_23_16;
+ uint8_t device;
+ uint8_t status;
+};
+/*
* Used with Sense keys No Sense (0x00) and Not Ready (0x02).
*
* Maximum descriptors allowed: 32 (as of SPC-4)
@@ -3663,6 +3686,10 @@ void scsi_sense_progress_sbuf(struct sbu
u_int sense_len, uint8_t *cdb, int cdb_len,
struct scsi_inquiry_data *inq_data,
struct scsi_sense_desc_header *header);
+void scsi_sense_ata_sbuf(struct sbuf *sb, struct scsi_sense_data *sense,
+ u_int sense_len, uint8_t *cdb, int cdb_len,
+ struct scsi_inquiry_data *inq_data,
+ struct scsi_sense_desc_header *header);
void scsi_sense_forwarded_sbuf(struct sbuf *sb, struct scsi_sense_data *sense,
u_int sense_len, uint8_t *cdb, int cdb_len,
struct scsi_inquiry_data *inq_data,
More information about the svn-src-all
mailing list