Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 4 Feb 2016 19:53:54 +0000 (UTC)
From:      Ravi Pokala <rpokala@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r295276 - in head/sys: cam/ata dev/ata sys
Message-ID:  <201602041953.u14Jrslb001947@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: rpokala
Date: Thu Feb  4 19:53:54 2016
New Revision: 295276
URL: https://svnweb.freebsd.org/changeset/base/295276

Log:
  Add defines for WRITE_UNCORRECTABLE ATA command, and improve command logging
  
  Add #defines for ATA_WRITE_UNCORRECTABLE48 and its features. Update the
  decoding in ATACAM to recognize the new values. Also improve command
  decoding for a few other commands (SMART, NOP, SET_FEATURES). Bring the
  decoding in ata(4) up to parity with ATACAM.
  
  Reviewed by:	mav, imp
  MFC after:	1 month
  Sponsored by:	Panasas, Inc.
  Differential Revision:	https://reviews.freebsd.org/D5181

Modified:
  head/sys/cam/ata/ata_all.c
  head/sys/dev/ata/ata-all.c
  head/sys/sys/ata.h

Modified: head/sys/cam/ata/ata_all.c
==============================================================================
--- head/sys/cam/ata/ata_all.c	Thu Feb  4 19:30:24 2016	(r295275)
+++ head/sys/cam/ata/ata_all.c	Thu Feb  4 19:53:54 2016	(r295276)
@@ -75,13 +75,18 @@ ata_op_string(struct ata_cmd *cmd)
 	if (cmd->control & 0x04)
 		return ("SOFT_RESET");
 	switch (cmd->command) {
-	case 0x00: return ("NOP");
+	case 0x00:
+		switch (cmd->features) {
+		case 0x00: return ("NOP FLUSHQUEUE");
+		case 0x01: return ("NOP AUTOPOLL");
+		}
+		return ("NOP");
 	case 0x03: return ("CFA_REQUEST_EXTENDED_ERROR");
 	case 0x06:
 		switch (cmd->features) {
-	        case 0x01: return ("DSM TRIM");
-	        }
-	        return "DSM";
+		case 0x01: return ("DSM TRIM");
+		}
+		return "DSM";
 	case 0x08: return ("DEVICE_RESET");
 	case 0x20: return ("READ");
 	case 0x24: return ("READ48");
@@ -105,6 +110,12 @@ ata_op_string(struct ata_cmd *cmd)
 	case 0x3f: return ("WRITE_LOG_EXT");
 	case 0x40: return ("READ_VERIFY");
 	case 0x42: return ("READ_VERIFY48");
+	case 0x45:
+		switch (cmd->features) {
+		case 0x55: return ("WRITE_UNCORRECTABLE48 PSEUDO");
+		case 0xaa: return ("WRITE_UNCORRECTABLE48 FLAGGED");
+		}
+		return "WRITE_UNCORRECTABLE48";
 	case 0x51: return ("CONFIGURE_STREAM");
 	case 0x60: return ("READ_FPDMA_QUEUED");
 	case 0x61: return ("WRITE_FPDMA_QUEUED");
@@ -128,7 +139,18 @@ ata_op_string(struct ata_cmd *cmd)
 	case 0xa0: return ("PACKET");
 	case 0xa1: return ("ATAPI_IDENTIFY");
 	case 0xa2: return ("SERVICE");
-	case 0xb0: return ("SMART");
+	case 0xb0:
+		switch(cmd->features) {
+		case 0xd0: return ("SMART READ ATTR VALUES");
+		case 0xd1: return ("SMART READ ATTR THRESHOLDS");
+		case 0xd3: return ("SMART SAVE ATTR VALUES");
+		case 0xd4: return ("SMART EXECUTE OFFLINE IMMEDIATE");
+		case 0xd5: return ("SMART READ LOG DATA");
+		case 0xd8: return ("SMART ENABLE OPERATION");
+		case 0xd9: return ("SMART DISABLE OPERATION");
+		case 0xda: return ("SMART RETURN STATUS");
+		}
+		return ("SMART");
 	case 0xb1: return ("DEVICE CONFIGURATION");
 	case 0xc0: return ("CFA_ERASE");
 	case 0xc4: return ("READ_MUL");
@@ -158,18 +180,22 @@ ata_op_string(struct ata_cmd *cmd)
 	case 0xed: return ("MEDIA_EJECT");
 	case 0xef:
 		switch (cmd->features) {
-	        case 0x03: return ("SETFEATURES SET TRANSFER MODE");
-	        case 0x02: return ("SETFEATURES ENABLE WCACHE");
-	        case 0x82: return ("SETFEATURES DISABLE WCACHE");
-	        case 0x06: return ("SETFEATURES ENABLE PUIS");
-	        case 0x86: return ("SETFEATURES DISABLE PUIS");
-	        case 0x07: return ("SETFEATURES SPIN-UP");
-	        case 0x10: return ("SETFEATURES ENABLE SATA FEATURE");
-	        case 0x90: return ("SETFEATURES DISABLE SATA FEATURE");
-	        case 0xaa: return ("SETFEATURES ENABLE RCACHE");
-	        case 0x55: return ("SETFEATURES DISABLE RCACHE");
-	        }
-	        return "SETFEATURES";
+		case 0x03: return ("SETFEATURES SET TRANSFER MODE");
+		case 0x02: return ("SETFEATURES ENABLE WCACHE");
+		case 0x82: return ("SETFEATURES DISABLE WCACHE");
+		case 0x06: return ("SETFEATURES ENABLE PUIS");
+		case 0x86: return ("SETFEATURES DISABLE PUIS");
+		case 0x07: return ("SETFEATURES SPIN-UP");
+		case 0x10: return ("SETFEATURES ENABLE SATA FEATURE");
+		case 0x90: return ("SETFEATURES DISABLE SATA FEATURE");
+		case 0xaa: return ("SETFEATURES ENABLE RCACHE");
+		case 0x55: return ("SETFEATURES DISABLE RCACHE");
+		case 0x5d: return ("SETFEATURES ENABLE RELIRQ");
+		case 0xdd: return ("SETFEATURES DISABLE RELIRQ");
+		case 0x5e: return ("SETFEATURES ENABLE SRVIRQ");
+		case 0xde: return ("SETFEATURES DISABLE SRVIRQ");
+		}
+		return "SETFEATURES";
 	case 0xf1: return ("SECURITY_SET_PASSWORD");
 	case 0xf2: return ("SECURITY_UNLOCK");
 	case 0xf3: return ("SECURITY_ERASE_PREPARE");

Modified: head/sys/dev/ata/ata-all.c
==============================================================================
--- head/sys/dev/ata/ata-all.c	Thu Feb  4 19:30:24 2016	(r295275)
+++ head/sys/dev/ata/ata-all.c	Thu Feb  4 19:53:54 2016	(r295276)
@@ -496,7 +496,18 @@ ata_cmd2str(struct ata_request *request)
 		}
 	} else {
 		switch (request->u.ata.command) {
-		case 0x00: return ("NOP");
+		case 0x00:
+			switch (request->u.ata.feature) {
+			case 0x00: return ("NOP FLUSHQUEUE");
+			case 0x01: return ("NOP AUTOPOLL");
+			}
+			return ("NOP");
+		case 0x03: return ("CFA_REQUEST_EXTENDED_ERROR");
+		case 0x06:
+			switch (request->u.ata.feature) {
+			case 0x01: return ("DSM TRIM");
+			}
+			return "DSM";
 		case 0x08: return ("DEVICE_RESET");
 		case 0x20: return ("READ");
 		case 0x24: return ("READ48");
@@ -504,18 +515,65 @@ ata_cmd2str(struct ata_request *request)
 		case 0x26: return ("READ_DMA_QUEUED48");
 		case 0x27: return ("READ_NATIVE_MAX_ADDRESS48");
 		case 0x29: return ("READ_MUL48");
+		case 0x2a: return ("READ_STREAM_DMA48");
+		case 0x2b: return ("READ_STREAM48");
+		case 0x2f: return ("READ_LOG_EXT");
 		case 0x30: return ("WRITE");
 		case 0x34: return ("WRITE48");
 		case 0x35: return ("WRITE_DMA48");
 		case 0x36: return ("WRITE_DMA_QUEUED48");
 		case 0x37: return ("SET_MAX_ADDRESS48");
 		case 0x39: return ("WRITE_MUL48");
+		case 0x3a: return ("WRITE_STREAM_DMA48");
+		case 0x3b: return ("WRITE_STREAM48");
+		case 0x3d: return ("WRITE_DMA_FUA48");
+		case 0x3e: return ("WRITE_DMA_QUEUED_FUA48");
+		case 0x3f: return ("WRITE_LOG_EXT");
+		case 0x40: return ("READ_VERIFY");
+		case 0x42: return ("READ_VERIFY48");
+		case 0x45:
+			switch (request->u.ata.feature) {
+			case 0x55: return ("WRITE_UNCORRECTABLE48 PSEUDO");
+			case 0xaa: return ("WRITE_UNCORRECTABLE48 FLAGGED");
+			}
+			return "WRITE_UNCORRECTABLE48";
+		case 0x51: return ("CONFIGURE_STREAM");
+		case 0x60: return ("READ_FPDMA_QUEUED");
+		case 0x61: return ("WRITE_FPDMA_QUEUED");
+		case 0x63: return ("NCQ_NON_DATA");
+		case 0x64: return ("SEND_FPDMA_QUEUED");
+		case 0x65: return ("RECEIVE_FPDMA_QUEUED");
+		case 0x67:
+			if (request->u.ata.feature == 0xec)
+				return ("SEP_ATTN IDENTIFY");
+			switch (request->u.ata.lba) {
+			case 0x00: return ("SEP_ATTN READ BUFFER");
+			case 0x02: return ("SEP_ATTN RECEIVE DIAGNOSTIC RESULTS");
+			case 0x80: return ("SEP_ATTN WRITE BUFFER");
+			case 0x82: return ("SEP_ATTN SEND DIAGNOSTIC");
+			}
+			return ("SEP_ATTN");
 		case 0x70: return ("SEEK");
-		case 0xa0: return ("PACKET_CMD");
+		case 0x87: return ("CFA_TRANSLATE_SECTOR");
+		case 0x90: return ("EXECUTE_DEVICE_DIAGNOSTIC");
+		case 0x92: return ("DOWNLOAD_MICROCODE");
+		case 0xa0: return ("PACKET");
 		case 0xa1: return ("ATAPI_IDENTIFY");
 		case 0xa2: return ("SERVICE");
-		case 0xb0: return ("SMART");
-		case 0xc0: return ("CFA ERASE");
+		case 0xb0:
+			switch(request->u.ata.feature) {
+			case 0xd0: return ("SMART READ ATTR VALUES");
+			case 0xd1: return ("SMART READ ATTR THRESHOLDS");
+			case 0xd3: return ("SMART SAVE ATTR VALUES");
+			case 0xd4: return ("SMART EXECUTE OFFLINE IMMEDIATE");
+			case 0xd5: return ("SMART READ LOG DATA");
+			case 0xd8: return ("SMART ENABLE OPERATION");
+			case 0xd9: return ("SMART DISABLE OPERATION");
+			case 0xda: return ("SMART RETURN STATUS");
+			}
+			return ("SMART");
+		case 0xb1: return ("DEVICE CONFIGURATION");
+		case 0xc0: return ("CFA_ERASE");
 		case 0xc4: return ("READ_MUL");
 		case 0xc5: return ("WRITE_MUL");
 		case 0xc6: return ("SET_MULTI");
@@ -523,22 +581,48 @@ ata_cmd2str(struct ata_request *request)
 		case 0xc8: return ("READ_DMA");
 		case 0xca: return ("WRITE_DMA");
 		case 0xcc: return ("WRITE_DMA_QUEUED");
+		case 0xcd: return ("CFA_WRITE_MULTIPLE_WITHOUT_ERASE");
+		case 0xce: return ("WRITE_MUL_FUA48");
+		case 0xd1: return ("CHECK_MEDIA_CARD_TYPE");
+		case 0xda: return ("GET_MEDIA_STATUS");
+		case 0xde: return ("MEDIA_LOCK");
+		case 0xdf: return ("MEDIA_UNLOCK");
+		case 0xe0: return ("STANDBY_IMMEDIATE");
+		case 0xe1: return ("IDLE_IMMEDIATE");
+		case 0xe2: return ("STANDBY");
+		case 0xe3: return ("IDLE");
+		case 0xe4: return ("READ_BUFFER/PM");
+		case 0xe5: return ("CHECK_POWER_MODE");
 		case 0xe6: return ("SLEEP");
 		case 0xe7: return ("FLUSHCACHE");
+		case 0xe8: return ("WRITE_PM");
 		case 0xea: return ("FLUSHCACHE48");
 		case 0xec: return ("ATA_IDENTIFY");
+		case 0xed: return ("MEDIA_EJECT");
 		case 0xef:
 			switch (request->u.ata.feature) {
 			case 0x03: return ("SETFEATURES SET TRANSFER MODE");
 			case 0x02: return ("SETFEATURES ENABLE WCACHE");
 			case 0x82: return ("SETFEATURES DISABLE WCACHE");
+			case 0x06: return ("SETFEATURES ENABLE PUIS");
+			case 0x86: return ("SETFEATURES DISABLE PUIS");
+			case 0x07: return ("SETFEATURES SPIN-UP");
+			case 0x10: return ("SETFEATURES ENABLE SATA FEATURE");
+			case 0x90: return ("SETFEATURES DISABLE SATA FEATURE");
 			case 0xaa: return ("SETFEATURES ENABLE RCACHE");
 			case 0x55: return ("SETFEATURES DISABLE RCACHE");
+			case 0x5d: return ("SETFEATURES ENABLE RELIRQ");
+			case 0xdd: return ("SETFEATURES DISABLE RELIRQ");
+			case 0x5e: return ("SETFEATURES ENABLE SRVIRQ");
+			case 0xde: return ("SETFEATURES DISABLE SRVIRQ");
 			}
-			sprintf(buffer, "SETFEATURES 0x%02x",
-			    request->u.ata.feature);
-			return (buffer);
-		case 0xf5: return ("SECURITY_FREE_LOCK");
+			return "SETFEATURES";
+		case 0xf1: return ("SECURITY_SET_PASSWORD");
+		case 0xf2: return ("SECURITY_UNLOCK");
+		case 0xf3: return ("SECURITY_ERASE_PREPARE");
+		case 0xf4: return ("SECURITY_ERASE_UNIT");
+		case 0xf5: return ("SECURITY_FREEZE_LOCK");
+		case 0xf6: return ("SECURITY_DISABLE_PASSWORD");
 		case 0xf8: return ("READ_NATIVE_MAX_ADDRESS");
 		case 0xf9: return ("SET_MAX_ADDRESS");
 		}

Modified: head/sys/sys/ata.h
==============================================================================
--- head/sys/sys/ata.h	Thu Feb  4 19:30:24 2016	(r295275)
+++ head/sys/sys/ata.h	Thu Feb  4 19:53:54 2016	(r295276)
@@ -368,6 +368,9 @@ struct ata_params {
 #define ATA_WRITE_LOG_EXT               0x3f
 #define ATA_READ_VERIFY                 0x40
 #define ATA_READ_VERIFY48               0x42
+#define ATA_WRITE_UNCORRECTABLE48       0x45    /* write uncorrectable 48bit LBA */
+#define         ATA_WU_PSEUDO           0x55    /* pseudo-uncorrectable error */
+#define         ATA_WU_FLAGGED          0xaa    /* flagged-uncorrectable error */
 #define ATA_READ_LOG_DMA_EXT            0x47    /* read log DMA ext - PIO Data-In */
 #define ATA_READ_FPDMA_QUEUED           0x60    /* read DMA NCQ */
 #define ATA_WRITE_FPDMA_QUEUED          0x61    /* write DMA NCQ */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201602041953.u14Jrslb001947>