summaryrefslogtreecommitdiffstats
path: root/drivers/scsi/libata-eh.c
diff options
context:
space:
mode:
authorTejun Heo2006-05-31 11:28:24 +0200
committerTejun Heo2006-05-31 11:28:24 +0200
commitd87fa38e70853a9607dc34a02d15cf5f149f49f2 (patch)
tree6afc6f8b9ff9c2c441efd61829d5d6fa6eb5698d /drivers/scsi/libata-eh.c
parent[PATCH] libata-hp: killl ops->probe_reset (diff)
downloadkernel-qcow2-linux-d87fa38e70853a9607dc34a02d15cf5f149f49f2.tar.gz
kernel-qcow2-linux-d87fa38e70853a9607dc34a02d15cf5f149f49f2.tar.xz
kernel-qcow2-linux-d87fa38e70853a9607dc34a02d15cf5f149f49f2.zip
[PATCH] libata-hp: move ata_do_reset() to libata-eh.c
With ops->probe_init() gone, no user is left in libata-core.c. Move ata_do_reset() to libata-eh.c and make it static. Signed-off-by: Tejun Heo <htejun@gmail.com>
Diffstat (limited to 'drivers/scsi/libata-eh.c')
-rw-r--r--drivers/scsi/libata-eh.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/drivers/scsi/libata-eh.c b/drivers/scsi/libata-eh.c
index 30a83a57a12f..d4b80b64342c 100644
--- a/drivers/scsi/libata-eh.c
+++ b/drivers/scsi/libata-eh.c
@@ -1355,6 +1355,34 @@ static void ata_eh_report(struct ata_port *ap)
}
}
+static int ata_do_reset(struct ata_port *ap, ata_reset_fn_t reset,
+ unsigned int *classes)
+{
+ int i, rc;
+
+ for (i = 0; i < ATA_MAX_DEVICES; i++)
+ classes[i] = ATA_DEV_UNKNOWN;
+
+ rc = reset(ap, classes);
+ if (rc)
+ return rc;
+
+ /* If any class isn't ATA_DEV_UNKNOWN, consider classification
+ * is complete and convert all ATA_DEV_UNKNOWN to
+ * ATA_DEV_NONE.
+ */
+ for (i = 0; i < ATA_MAX_DEVICES; i++)
+ if (classes[i] != ATA_DEV_UNKNOWN)
+ break;
+
+ if (i < ATA_MAX_DEVICES)
+ for (i = 0; i < ATA_MAX_DEVICES; i++)
+ if (classes[i] == ATA_DEV_UNKNOWN)
+ classes[i] = ATA_DEV_NONE;
+
+ return 0;
+}
+
static int ata_eh_followup_srst_needed(int rc, int classify,
const unsigned int *classes)
{