diff options
author | Tejun Heo <htejun@gmail.com> | 2008-04-07 09:47:19 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@redhat.com> | 2008-04-17 15:44:23 -0400 |
commit | 57c9efdfb3cee5d4564fcb5f70555e2edb1bc52a (patch) | |
tree | c2289500f093736853a94d2d9577036658676498 /drivers/ata/ata_piix.c | |
parent | 9dadd45b24145d6aee2fabb28d7aef972301892b (diff) |
libata: implement and use sata_std_hardreset()
Implement sata_std_hardreset(), which simply wraps around
sata_link_hardreset(). sata_std_hardreset() becomes new standard
hardreset method for sata_port_ops and sata_sff_hardreset() moves from
ata_base_port_ops to ata_sff_port_ops, which is where it really
belongs.
ata_is_builtin_hardreset() is added so that both
ata_std_error_handler() and ata_sff_error_handler() skip both builtin
hardresets if SCR isn't accessible.
piix_sidpr_hardreset() in ata_piix.c is identical to
sata_std_hardreset() in functionality and got replaced with the
standard function.
Signed-off-by: Tejun Heo <htejun@gmail.com>
Diffstat (limited to 'drivers/ata/ata_piix.c')
-rw-r--r-- | drivers/ata/ata_piix.c | 27 |
1 files changed, 1 insertions, 26 deletions
diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c index f59a55bfade4..b7c38eeb498f 100644 --- a/drivers/ata/ata_piix.c +++ b/drivers/ata/ata_piix.c | |||
@@ -165,8 +165,6 @@ static void piix_set_dmamode(struct ata_port *ap, struct ata_device *adev); | |||
165 | static void ich_set_dmamode(struct ata_port *ap, struct ata_device *adev); | 165 | static void ich_set_dmamode(struct ata_port *ap, struct ata_device *adev); |
166 | static int ich_pata_cable_detect(struct ata_port *ap); | 166 | static int ich_pata_cable_detect(struct ata_port *ap); |
167 | static u8 piix_vmw_bmdma_status(struct ata_port *ap); | 167 | static u8 piix_vmw_bmdma_status(struct ata_port *ap); |
168 | static int piix_sidpr_hardreset(struct ata_link *link, unsigned int *class, | ||
169 | unsigned long deadline); | ||
170 | static int piix_sidpr_scr_read(struct ata_port *ap, unsigned int reg, u32 *val); | 168 | static int piix_sidpr_scr_read(struct ata_port *ap, unsigned int reg, u32 *val); |
171 | static int piix_sidpr_scr_write(struct ata_port *ap, unsigned int reg, u32 val); | 169 | static int piix_sidpr_scr_write(struct ata_port *ap, unsigned int reg, u32 val); |
172 | #ifdef CONFIG_PM | 170 | #ifdef CONFIG_PM |
@@ -319,7 +317,7 @@ static struct ata_port_operations piix_sata_ops = { | |||
319 | 317 | ||
320 | static struct ata_port_operations piix_sidpr_sata_ops = { | 318 | static struct ata_port_operations piix_sidpr_sata_ops = { |
321 | .inherits = &piix_sata_ops, | 319 | .inherits = &piix_sata_ops, |
322 | .hardreset = piix_sidpr_hardreset, | 320 | .hardreset = sata_std_hardreset, |
323 | .scr_read = piix_sidpr_scr_read, | 321 | .scr_read = piix_sidpr_scr_read, |
324 | .scr_write = piix_sidpr_scr_write, | 322 | .scr_write = piix_sidpr_scr_write, |
325 | }; | 323 | }; |
@@ -1015,29 +1013,6 @@ static int piix_sidpr_scr_write(struct ata_port *ap, unsigned int reg, u32 val) | |||
1015 | return 0; | 1013 | return 0; |
1016 | } | 1014 | } |
1017 | 1015 | ||
1018 | static int piix_sidpr_hardreset(struct ata_link *link, unsigned int *class, | ||
1019 | unsigned long deadline) | ||
1020 | { | ||
1021 | const unsigned long *timing = sata_ehc_deb_timing(&link->eh_context); | ||
1022 | int rc; | ||
1023 | |||
1024 | /* do hardreset */ | ||
1025 | rc = sata_link_hardreset(link, timing, deadline, NULL, NULL); | ||
1026 | if (rc) { | ||
1027 | ata_link_printk(link, KERN_ERR, | ||
1028 | "COMRESET failed (errno=%d)\n", rc); | ||
1029 | return rc; | ||
1030 | } | ||
1031 | |||
1032 | /* TODO: phy layer with polling, timeouts, etc. */ | ||
1033 | if (ata_link_offline(link)) { | ||
1034 | *class = ATA_DEV_NONE; | ||
1035 | return 0; | ||
1036 | } | ||
1037 | |||
1038 | return -EAGAIN; | ||
1039 | } | ||
1040 | |||
1041 | #ifdef CONFIG_PM | 1016 | #ifdef CONFIG_PM |
1042 | static int piix_broken_suspend(void) | 1017 | static int piix_broken_suspend(void) |
1043 | { | 1018 | { |