Author: rpokala
Date: Sun Mar  6 02:33:02 2016
New Revision: 296421
URL: https://svnweb.freebsd.org/changeset/base/296421

Log:
  MFC r295276: 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.
  
  Sponsored by: Panasas, Inc.

Modified:
  stable/10/sys/cam/ata/ata_all.c
  stable/10/sys/dev/ata/ata-all.c
  stable/10/sys/sys/ata.h
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/cam/ata/ata_all.c
==============================================================================
--- stable/10/sys/cam/ata/ata_all.c     Sun Mar  6 01:21:56 2016        
(r296420)
+++ stable/10/sys/cam/ata/ata_all.c     Sun Mar  6 02:33:02 2016        
(r296421)
@@ -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: stable/10/sys/dev/ata/ata-all.c
==============================================================================
--- stable/10/sys/dev/ata/ata-all.c     Sun Mar  6 01:21:56 2016        
(r296420)
+++ stable/10/sys/dev/ata/ata-all.c     Sun Mar  6 02:33:02 2016        
(r296421)
@@ -497,7 +497,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");
@@ -505,18 +516,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");
@@ -524,22 +582,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: stable/10/sys/sys/ata.h
==============================================================================
--- stable/10/sys/sys/ata.h     Sun Mar  6 01:21:56 2016        (r296420)
+++ stable/10/sys/sys/ata.h     Sun Mar  6 02:33:02 2016        (r296421)
@@ -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 */
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to