aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorMark Lord <liml@rtr.ca>2007-03-16 10:22:26 -0400
committerJeff Garzik <jeff@garzik.org>2007-04-28 14:16:01 -0400
commit5a5dbd18a7496ed403f6f54bb20c955c65482fa5 (patch)
tree031eec40ab42ac4ab04e59db539b8126ac31fb6d /include
parent1234010684bb9cde51125ec3d1c71054a9f24f47 (diff)
libata: add support for READ/WRITE LONG
The READ/WRITE LONG commands are theoretically obsolete, but the majority of drives in existance still implement them. The WRITE_LONG and WRITE_LONG_ONCE commands are of particular interest for fault injection testing -- eg. creating "media errors" at specific locations on a disk. The fussy bit is that these commands require a non-standard sector size, usually 520 bytes instead of 512. This patch adds support to libata for READ/WRITE LONG commands issued via SG_IO/ATA_16. Signed-off-by: Mark Lord <mlord@pobox.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'include')
-rw-r--r--include/linux/ata.h6
-rw-r--r--include/linux/libata.h2
2 files changed, 8 insertions, 0 deletions
diff --git a/include/linux/ata.h b/include/linux/ata.h
index 6caeb98e29dd..ffb6cdc5010d 100644
--- a/include/linux/ata.h
+++ b/include/linux/ata.h
@@ -164,6 +164,12 @@ enum {
164 /* READ_LOG_EXT pages */ 164 /* READ_LOG_EXT pages */
165 ATA_LOG_SATA_NCQ = 0x10, 165 ATA_LOG_SATA_NCQ = 0x10,
166 166
167 /* READ/WRITE LONG (obsolete) */
168 ATA_CMD_READ_LONG = 0x22,
169 ATA_CMD_READ_LONG_ONCE = 0x23,
170 ATA_CMD_WRITE_LONG = 0x32,
171 ATA_CMD_WRITE_LONG_ONCE = 0x33,
172
167 /* SETFEATURES stuff */ 173 /* SETFEATURES stuff */
168 SETFEATURES_XFER = 0x03, 174 SETFEATURES_XFER = 0x03,
169 XFER_UDMA_7 = 0x47, 175 XFER_UDMA_7 = 0x47,
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 5a40a8d95114..12237d4b9f9b 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -427,6 +427,7 @@ struct ata_queued_cmd {
427 int dma_dir; 427 int dma_dir;
428 428
429 unsigned int pad_len; 429 unsigned int pad_len;
430 unsigned int sect_size;
430 431
431 unsigned int nbytes; 432 unsigned int nbytes;
432 unsigned int curbytes; 433 unsigned int curbytes;
@@ -1182,6 +1183,7 @@ static inline void ata_qc_reinit(struct ata_queued_cmd *qc)
1182 qc->n_elem = 0; 1183 qc->n_elem = 0;
1183 qc->err_mask = 0; 1184 qc->err_mask = 0;
1184 qc->pad_len = 0; 1185 qc->pad_len = 0;
1186 qc->sect_size = ATA_SECT_SIZE;
1185 1187
1186 ata_tf_init(qc->dev, &qc->tf); 1188 ata_tf_init(qc->dev, &qc->tf);
1187 1189