aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/libata.h
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2006-05-15 07:58:02 -0400
committerTejun Heo <htejun@gmail.com>2006-05-15 07:58:02 -0400
commit2ab7db1ff1d64a2ba389d0692d532f42a15f1f72 (patch)
treec676e2796896e6856fda6cc6598d5670d06b5c1c /include/linux/libata.h
parentdc2b3515868a254b3d653d77844bff93c5d4c095 (diff)
[PATCH] libata-eh-fw: use special reserved tag and qc for internal commands
New EH may issue internal commands to recover from error while failed qc's are still hanging around. To allow such usage, reserve tag ATA_MAX_QUEUE-1 for internal command. This also makes it easy to tell whether a qc is for internal command or not. ata_tag_internal() test implements this test. To avoid breaking existing drivers, ata_exec_internal() uses ATA_TAG_INTERNAL only for drivers which implement ->error_handler. For drivers using old EH, tag 0 is used. Note that this makes ata_tag_internal() test valid only when ->error_handler is implemented. This is okay as drivers on old EH should not and does not have any reason to use ata_tag_internal(). Signed-off-by: Tejun Heo <htejun@gmail.com>
Diffstat (limited to 'include/linux/libata.h')
-rw-r--r--include/linux/libata.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/include/linux/libata.h b/include/linux/libata.h
index e5d6d7f8e6dc..5a403e434ff8 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -108,7 +108,9 @@ enum {
108 LIBATA_MAX_PRD = ATA_MAX_PRD / 2, 108 LIBATA_MAX_PRD = ATA_MAX_PRD / 2,
109 ATA_MAX_PORTS = 8, 109 ATA_MAX_PORTS = 8,
110 ATA_DEF_QUEUE = 1, 110 ATA_DEF_QUEUE = 1,
111 ATA_MAX_QUEUE = 1, 111 /* tag ATA_MAX_QUEUE - 1 is reserved for internal commands */
112 ATA_MAX_QUEUE = 2,
113 ATA_TAG_INTERNAL = ATA_MAX_QUEUE - 1,
112 ATA_MAX_SECTORS = 200, /* FIXME */ 114 ATA_MAX_SECTORS = 200, /* FIXME */
113 ATA_MAX_BUS = 2, 115 ATA_MAX_BUS = 2,
114 ATA_DEF_BUSY_WAIT = 10000, 116 ATA_DEF_BUSY_WAIT = 10000,
@@ -717,6 +719,11 @@ static inline unsigned int ata_tag_valid(unsigned int tag)
717 return (tag < ATA_MAX_QUEUE) ? 1 : 0; 719 return (tag < ATA_MAX_QUEUE) ? 1 : 0;
718} 720}
719 721
722static inline unsigned int ata_tag_internal(unsigned int tag)
723{
724 return tag == ATA_MAX_QUEUE - 1;
725}
726
720static inline unsigned int ata_class_enabled(unsigned int class) 727static inline unsigned int ata_class_enabled(unsigned int class)
721{ 728{
722 return class == ATA_DEV_ATA || class == ATA_DEV_ATAPI; 729 return class == ATA_DEV_ATA || class == ATA_DEV_ATAPI;