Browse Source

libata: ATA_12/16 doesn't fall into ATAPI_MISC

SAT passthrus don't really fit into ATAPI_MISC class.  SAT passthru
commands always transfer multiple of 512 bytes and variable length
response is not allowed.  This patch creates a separate category -
ATAPI_PASS_THRU - for these.

This fixes HSM violation on "hdparm -I".

Signed-off-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Tejun Heo 17 years ago
parent
commit
e52dcc4899
2 changed files with 7 additions and 1 deletions
  1. 5 0
      drivers/ata/libata-core.c
  2. 2 1
      include/linux/libata.h

+ 5 - 0
drivers/ata/libata-core.c

@@ -353,6 +353,11 @@ int atapi_cmd_type(u8 opcode)
 	case GPCMD_READ_CD_MSF:
 	case GPCMD_READ_CD_MSF:
 		return ATAPI_READ_CD;
 		return ATAPI_READ_CD;
 
 
+	case ATA_16:
+	case ATA_12:
+		if (atapi_passthru16)
+			return ATAPI_PASS_THRU;
+		/* fall thru */
 	default:
 	default:
 		return ATAPI_MISC;
 		return ATAPI_MISC;
 	}
 	}

+ 2 - 1
include/linux/libata.h

@@ -350,7 +350,8 @@ enum {
 	ATAPI_READ		= 0,		/* READs */
 	ATAPI_READ		= 0,		/* READs */
 	ATAPI_WRITE		= 1,		/* WRITEs */
 	ATAPI_WRITE		= 1,		/* WRITEs */
 	ATAPI_READ_CD		= 2,		/* READ CD [MSF] */
 	ATAPI_READ_CD		= 2,		/* READ CD [MSF] */
-	ATAPI_MISC		= 3,		/* the rest */
+	ATAPI_PASS_THRU		= 3,		/* SAT pass-thru */
+	ATAPI_MISC		= 4,		/* the rest */
 };
 };
 
 
 enum ata_xfer_mask {
 enum ata_xfer_mask {