Commit cc0680a5 authored by Tejun Heo's avatar Tejun Heo Committed by Jeff Garzik

libata-link: linkify reset

Make reset methods and related functions deal with ata_link instead of
ata_port.

* ata_do_reset()
* ata_eh_reset()
* all prereset/reset/postreset methods and related functions

This patch introduces no behavior change.
Signed-off-by: default avatarTejun Heo <htejun@gmail.com>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent 955e57df
...@@ -1042,9 +1042,10 @@ static int ahci_exec_polled_cmd(struct ata_port *ap, int pmp, ...@@ -1042,9 +1042,10 @@ static int ahci_exec_polled_cmd(struct ata_port *ap, int pmp,
return 0; return 0;
} }
static int ahci_do_softreset(struct ata_port *ap, unsigned int *class, static int ahci_do_softreset(struct ata_link *link, unsigned int *class,
int pmp, unsigned long deadline) int pmp, unsigned long deadline)
{ {
struct ata_port *ap = link->ap;
const char *reason = NULL; const char *reason = NULL;
unsigned long now, msecs; unsigned long now, msecs;
struct ata_taskfile tf; struct ata_taskfile tf;
...@@ -1052,7 +1053,7 @@ static int ahci_do_softreset(struct ata_port *ap, unsigned int *class, ...@@ -1052,7 +1053,7 @@ static int ahci_do_softreset(struct ata_port *ap, unsigned int *class,
DPRINTK("ENTER\n"); DPRINTK("ENTER\n");
if (ata_link_offline(&ap->link)) { if (ata_link_offline(link)) {
DPRINTK("PHY reports no device\n"); DPRINTK("PHY reports no device\n");
*class = ATA_DEV_NONE; *class = ATA_DEV_NONE;
return 0; return 0;
...@@ -1061,10 +1062,10 @@ static int ahci_do_softreset(struct ata_port *ap, unsigned int *class, ...@@ -1061,10 +1062,10 @@ static int ahci_do_softreset(struct ata_port *ap, unsigned int *class,
/* prepare for SRST (AHCI-1.1 10.4.1) */ /* prepare for SRST (AHCI-1.1 10.4.1) */
rc = ahci_kick_engine(ap, 1); rc = ahci_kick_engine(ap, 1);
if (rc) if (rc)
ata_port_printk(ap, KERN_WARNING, ata_link_printk(link, KERN_WARNING,
"failed to reset engine (errno=%d)", rc); "failed to reset engine (errno=%d)", rc);
ata_tf_init(ap->link.device, &tf); ata_tf_init(link->device, &tf);
/* issue the first D2H Register FIS */ /* issue the first D2H Register FIS */
msecs = 0; msecs = 0;
...@@ -1109,19 +1110,20 @@ static int ahci_do_softreset(struct ata_port *ap, unsigned int *class, ...@@ -1109,19 +1110,20 @@ static int ahci_do_softreset(struct ata_port *ap, unsigned int *class,
return 0; return 0;
fail: fail:
ata_port_printk(ap, KERN_ERR, "softreset failed (%s)\n", reason); ata_link_printk(link, KERN_ERR, "softreset failed (%s)\n", reason);
return rc; return rc;
} }
static int ahci_softreset(struct ata_port *ap, unsigned int *class, static int ahci_softreset(struct ata_link *link, unsigned int *class,
unsigned long deadline) unsigned long deadline)
{ {
return ahci_do_softreset(ap, class, 0, deadline); return ahci_do_softreset(link, class, 0, deadline);
} }
static int ahci_hardreset(struct ata_port *ap, unsigned int *class, static int ahci_hardreset(struct ata_link *link, unsigned int *class,
unsigned long deadline) unsigned long deadline)
{ {
struct ata_port *ap = link->ap;
struct ahci_port_priv *pp = ap->private_data; struct ahci_port_priv *pp = ap->private_data;
u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG; u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG;
struct ata_taskfile tf; struct ata_taskfile tf;
...@@ -1132,15 +1134,15 @@ static int ahci_hardreset(struct ata_port *ap, unsigned int *class, ...@@ -1132,15 +1134,15 @@ static int ahci_hardreset(struct ata_port *ap, unsigned int *class,
ahci_stop_engine(ap); ahci_stop_engine(ap);
/* clear D2H reception area to properly wait for D2H FIS */ /* clear D2H reception area to properly wait for D2H FIS */
ata_tf_init(ap->link.device, &tf); ata_tf_init(link->device, &tf);
tf.command = 0x80; tf.command = 0x80;
ata_tf_to_fis(&tf, 0, 0, d2h_fis); ata_tf_to_fis(&tf, 0, 0, d2h_fis);
rc = sata_std_hardreset(ap, class, deadline); rc = sata_std_hardreset(link, class, deadline);
ahci_start_engine(ap); ahci_start_engine(ap);
if (rc == 0 && ata_link_online(&ap->link)) if (rc == 0 && ata_link_online(link))
*class = ahci_dev_classify(ap); *class = ahci_dev_classify(ap);
if (*class == ATA_DEV_UNKNOWN) if (*class == ATA_DEV_UNKNOWN)
*class = ATA_DEV_NONE; *class = ATA_DEV_NONE;
...@@ -1149,9 +1151,10 @@ static int ahci_hardreset(struct ata_port *ap, unsigned int *class, ...@@ -1149,9 +1151,10 @@ static int ahci_hardreset(struct ata_port *ap, unsigned int *class,
return rc; return rc;
} }
static int ahci_vt8251_hardreset(struct ata_port *ap, unsigned int *class, static int ahci_vt8251_hardreset(struct ata_link *link, unsigned int *class,
unsigned long deadline) unsigned long deadline)
{ {
struct ata_port *ap = link->ap;
u32 serror; u32 serror;
int rc; int rc;
...@@ -1159,7 +1162,7 @@ static int ahci_vt8251_hardreset(struct ata_port *ap, unsigned int *class, ...@@ -1159,7 +1162,7 @@ static int ahci_vt8251_hardreset(struct ata_port *ap, unsigned int *class,
ahci_stop_engine(ap); ahci_stop_engine(ap);
rc = sata_port_hardreset(ap, sata_ehc_deb_timing(&ap->link.eh_context), rc = sata_link_hardreset(link, sata_ehc_deb_timing(&link->eh_context),
deadline); deadline);
/* vt8251 needs SError cleared for the port to operate */ /* vt8251 needs SError cleared for the port to operate */
...@@ -1176,12 +1179,13 @@ static int ahci_vt8251_hardreset(struct ata_port *ap, unsigned int *class, ...@@ -1176,12 +1179,13 @@ static int ahci_vt8251_hardreset(struct ata_port *ap, unsigned int *class,
return rc ?: -EAGAIN; return rc ?: -EAGAIN;
} }
static void ahci_postreset(struct ata_port *ap, unsigned int *class) static void ahci_postreset(struct ata_link *link, unsigned int *class)
{ {
struct ata_port *ap = link->ap;
void __iomem *port_mmio = ahci_port_base(ap); void __iomem *port_mmio = ahci_port_base(ap);
u32 new_tmp, tmp; u32 new_tmp, tmp;
ata_std_postreset(ap, class); ata_std_postreset(link, class);
/* Make sure port's ATAPI bit is set appropriately */ /* Make sure port's ATAPI bit is set appropriately */
new_tmp = tmp = readl(port_mmio + PORT_CMD); new_tmp = tmp = readl(port_mmio + PORT_CMD);
......
...@@ -657,19 +657,20 @@ static int ich_pata_cable_detect(struct ata_port *ap) ...@@ -657,19 +657,20 @@ static int ich_pata_cable_detect(struct ata_port *ap)
/** /**
* piix_pata_prereset - prereset for PATA host controller * piix_pata_prereset - prereset for PATA host controller
* @ap: Target port * @link: Target link
* @deadline: deadline jiffies for the operation * @deadline: deadline jiffies for the operation
* *
* LOCKING: * LOCKING:
* None (inherited from caller). * None (inherited from caller).
*/ */
static int piix_pata_prereset(struct ata_port *ap, unsigned long deadline) static int piix_pata_prereset(struct ata_link *link, unsigned long deadline)
{ {
struct ata_port *ap = link->ap;
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
if (!pci_test_config_bits(pdev, &piix_enable_bits[ap->port_no])) if (!pci_test_config_bits(pdev, &piix_enable_bits[ap->port_no]))
return -ENOENT; return -ENOENT;
return ata_std_prereset(ap, deadline); return ata_std_prereset(link, deadline);
} }
static void piix_pata_error_handler(struct ata_port *ap) static void piix_pata_error_handler(struct ata_port *ap)
......
...@@ -3306,10 +3306,10 @@ int sata_link_resume(struct ata_link *link, const unsigned long *params, ...@@ -3306,10 +3306,10 @@ int sata_link_resume(struct ata_link *link, const unsigned long *params,
/** /**
* ata_std_prereset - prepare for reset * ata_std_prereset - prepare for reset
* @ap: ATA port to be reset * @link: ATA link to be reset
* @deadline: deadline jiffies for the operation * @deadline: deadline jiffies for the operation
* *
* @ap is about to be reset. Initialize it. Failure from * @link is about to be reset. Initialize it. Failure from
* prereset makes libata abort whole reset sequence and give up * prereset makes libata abort whole reset sequence and give up
* that port, so prereset should be best-effort. It does its * that port, so prereset should be best-effort. It does its
* best to prepare for reset sequence but if things go wrong, it * best to prepare for reset sequence but if things go wrong, it
...@@ -3321,9 +3321,9 @@ int sata_link_resume(struct ata_link *link, const unsigned long *params, ...@@ -3321,9 +3321,9 @@ int sata_link_resume(struct ata_link *link, const unsigned long *params,
* RETURNS: * RETURNS:
* 0 on success, -errno otherwise. * 0 on success, -errno otherwise.
*/ */
int ata_std_prereset(struct ata_port *ap, unsigned long deadline) int ata_std_prereset(struct ata_link *link, unsigned long deadline)
{ {
struct ata_link *link = &ap->link; struct ata_port *ap = link->ap;
struct ata_eh_context *ehc = &link->eh_context; struct ata_eh_context *ehc = &link->eh_context;
const unsigned long *timing = sata_ehc_deb_timing(ehc); const unsigned long *timing = sata_ehc_deb_timing(ehc);
int rc; int rc;
...@@ -3342,7 +3342,7 @@ int ata_std_prereset(struct ata_port *ap, unsigned long deadline) ...@@ -3342,7 +3342,7 @@ int ata_std_prereset(struct ata_port *ap, unsigned long deadline)
rc = sata_link_resume(link, timing, deadline); rc = sata_link_resume(link, timing, deadline);
/* whine about phy resume failure but proceed */ /* whine about phy resume failure but proceed */
if (rc && rc != -EOPNOTSUPP) if (rc && rc != -EOPNOTSUPP)
ata_port_printk(ap, KERN_WARNING, "failed to resume " ata_link_printk(link, KERN_WARNING, "failed to resume "
"link for reset (errno=%d)\n", rc); "link for reset (errno=%d)\n", rc);
} }
...@@ -3352,7 +3352,7 @@ int ata_std_prereset(struct ata_port *ap, unsigned long deadline) ...@@ -3352,7 +3352,7 @@ int ata_std_prereset(struct ata_port *ap, unsigned long deadline)
if (!(ap->flags & ATA_FLAG_SKIP_D2H_BSY) && !ata_link_offline(link)) { if (!(ap->flags & ATA_FLAG_SKIP_D2H_BSY) && !ata_link_offline(link)) {
rc = ata_wait_ready(ap, deadline); rc = ata_wait_ready(ap, deadline);
if (rc && rc != -ENODEV) { if (rc && rc != -ENODEV) {
ata_port_printk(ap, KERN_WARNING, "device not ready " ata_link_printk(link, KERN_WARNING, "device not ready "
"(errno=%d), forcing hardreset\n", rc); "(errno=%d), forcing hardreset\n", rc);
ehc->i.action |= ATA_EH_HARDRESET; ehc->i.action |= ATA_EH_HARDRESET;
} }
...@@ -3363,7 +3363,7 @@ int ata_std_prereset(struct ata_port *ap, unsigned long deadline) ...@@ -3363,7 +3363,7 @@ int ata_std_prereset(struct ata_port *ap, unsigned long deadline)
/** /**
* ata_std_softreset - reset host port via ATA SRST * ata_std_softreset - reset host port via ATA SRST
* @ap: port to reset * @link: ATA link to reset
* @classes: resulting classes of attached devices * @classes: resulting classes of attached devices
* @deadline: deadline jiffies for the operation * @deadline: deadline jiffies for the operation
* *
...@@ -3375,10 +3375,10 @@ int ata_std_prereset(struct ata_port *ap, unsigned long deadline) ...@@ -3375,10 +3375,10 @@ int ata_std_prereset(struct ata_port *ap, unsigned long deadline)
* RETURNS: * RETURNS:
* 0 on success, -errno otherwise. * 0 on success, -errno otherwise.
*/ */
int ata_std_softreset(struct ata_port *ap, unsigned int *classes, int ata_std_softreset(struct ata_link *link, unsigned int *classes,
unsigned long deadline) unsigned long deadline)
{ {
struct ata_link *link = &ap->link; struct ata_port *ap = link->ap;
unsigned int slave_possible = ap->flags & ATA_FLAG_SLAVE_POSS; unsigned int slave_possible = ap->flags & ATA_FLAG_SLAVE_POSS;
unsigned int devmask = 0; unsigned int devmask = 0;
int rc; int rc;
...@@ -3405,7 +3405,7 @@ int ata_std_softreset(struct ata_port *ap, unsigned int *classes, ...@@ -3405,7 +3405,7 @@ int ata_std_softreset(struct ata_port *ap, unsigned int *classes,
rc = ata_bus_softreset(ap, devmask, deadline); rc = ata_bus_softreset(ap, devmask, deadline);
/* if link is occupied, -ENODEV too is an error */ /* if link is occupied, -ENODEV too is an error */
if (rc && (rc != -ENODEV || sata_scr_valid(link))) { if (rc && (rc != -ENODEV || sata_scr_valid(link))) {
ata_port_printk(ap, KERN_ERR, "SRST failed (errno=%d)\n", rc); ata_link_printk(link, KERN_ERR, "SRST failed (errno=%d)\n", rc);
return rc; return rc;
} }
...@@ -3420,12 +3420,12 @@ int ata_std_softreset(struct ata_port *ap, unsigned int *classes, ...@@ -3420,12 +3420,12 @@ int ata_std_softreset(struct ata_port *ap, unsigned int *classes,
} }
/** /**
* sata_port_hardreset - reset port via SATA phy reset * sata_link_hardreset - reset link via SATA phy reset
* @ap: port to reset * @link: link to reset
* @timing: timing parameters { interval, duratinon, timeout } in msec * @timing: timing parameters { interval, duratinon, timeout } in msec
* @deadline: deadline jiffies for the operation * @deadline: deadline jiffies for the operation
* *
* SATA phy-reset host port using DET bits of SControl register. * SATA phy-reset @link using DET bits of SControl register.
* *
* LOCKING: * LOCKING:
* Kernel thread context (may sleep) * Kernel thread context (may sleep)
...@@ -3433,10 +3433,9 @@ int ata_std_softreset(struct ata_port *ap, unsigned int *classes, ...@@ -3433,10 +3433,9 @@ int ata_std_softreset(struct ata_port *ap, unsigned int *classes,
* RETURNS: * RETURNS:
* 0 on success, -errno otherwise. * 0 on success, -errno otherwise.
*/ */
int sata_port_hardreset(struct ata_port *ap, const unsigned long *timing, int sata_link_hardreset(struct ata_link *link, const unsigned long *timing,
unsigned long deadline) unsigned long deadline)
{ {
struct ata_link *link = &ap->link;
u32 scontrol; u32 scontrol;
int rc; int rc;
...@@ -3482,7 +3481,7 @@ int sata_port_hardreset(struct ata_port *ap, const unsigned long *timing, ...@@ -3482,7 +3481,7 @@ int sata_port_hardreset(struct ata_port *ap, const unsigned long *timing,
/** /**
* sata_std_hardreset - reset host port via SATA phy reset * sata_std_hardreset - reset host port via SATA phy reset
* @ap: port to reset * @link: link to reset
* @class: resulting class of attached device * @class: resulting class of attached device
* @deadline: deadline jiffies for the operation * @deadline: deadline jiffies for the operation
* *
...@@ -3495,19 +3494,19 @@ int sata_port_hardreset(struct ata_port *ap, const unsigned long *timing, ...@@ -3495,19 +3494,19 @@ int sata_port_hardreset(struct ata_port *ap, const unsigned long *timing,
* RETURNS: * RETURNS:
* 0 on success, -errno otherwise. * 0 on success, -errno otherwise.
*/ */
int sata_std_hardreset(struct ata_port *ap, unsigned int *class, int sata_std_hardreset(struct ata_link *link, unsigned int *class,
unsigned long deadline) unsigned long deadline)
{ {
struct ata_link *link = &ap->link; struct ata_port *ap = link->ap;
const unsigned long *timing = sata_ehc_deb_timing(&link->eh_context); const unsigned long *timing = sata_ehc_deb_timing(&link->eh_context);
int rc; int rc;
DPRINTK("ENTER\n"); DPRINTK("ENTER\n");
/* do hardreset */ /* do hardreset */
rc = sata_port_hardreset(ap, timing, deadline); rc = sata_link_hardreset(link, timing, deadline);
if (rc) { if (rc) {
ata_port_printk(ap, KERN_ERR, ata_link_printk(link, KERN_ERR,
"COMRESET failed (errno=%d)\n", rc); "COMRESET failed (errno=%d)\n", rc);
return rc; return rc;
} }
...@@ -3525,7 +3524,7 @@ int sata_std_hardreset(struct ata_port *ap, unsigned int *class, ...@@ -3525,7 +3524,7 @@ int sata_std_hardreset(struct ata_port *ap, unsigned int *class,
rc = ata_wait_ready(ap, deadline); rc = ata_wait_ready(ap, deadline);
/* link occupied, -ENODEV too is an error */ /* link occupied, -ENODEV too is an error */
if (rc) { if (rc) {
ata_port_printk(ap, KERN_ERR, ata_link_printk(link, KERN_ERR,
"COMRESET failed (errno=%d)\n", rc); "COMRESET failed (errno=%d)\n", rc);
return rc; return rc;
} }
...@@ -3540,7 +3539,7 @@ int sata_std_hardreset(struct ata_port *ap, unsigned int *class, ...@@ -3540,7 +3539,7 @@ int sata_std_hardreset(struct ata_port *ap, unsigned int *class,
/** /**
* ata_std_postreset - standard postreset callback * ata_std_postreset - standard postreset callback
* @ap: the target ata_port * @link: the target ata_link
* @classes: classes of attached devices * @classes: classes of attached devices
* *
* This function is invoked after a successful reset. Note that * This function is invoked after a successful reset. Note that
...@@ -3550,9 +3549,9 @@ int sata_std_hardreset(struct ata_port *ap, unsigned int *class, ...@@ -3550,9 +3549,9 @@ int sata_std_hardreset(struct ata_port *ap, unsigned int *class,
* LOCKING: * LOCKING:
* Kernel thread context (may sleep) * Kernel thread context (may sleep)
*/ */
void ata_std_postreset(struct ata_port *ap, unsigned int *classes) void ata_std_postreset(struct ata_link *link, unsigned int *classes)
{ {
struct ata_link *link = &ap->link; struct ata_port *ap = link->ap;
u32 serror; u32 serror;
DPRINTK("ENTER\n"); DPRINTK("ENTER\n");
...@@ -6946,7 +6945,7 @@ EXPORT_SYMBOL_GPL(__sata_phy_reset); ...@@ -6946,7 +6945,7 @@ EXPORT_SYMBOL_GPL(__sata_phy_reset);
EXPORT_SYMBOL_GPL(ata_bus_reset); EXPORT_SYMBOL_GPL(ata_bus_reset);
EXPORT_SYMBOL_GPL(ata_std_prereset); EXPORT_SYMBOL_GPL(ata_std_prereset);
EXPORT_SYMBOL_GPL(ata_std_softreset); EXPORT_SYMBOL_GPL(ata_std_softreset);
EXPORT_SYMBOL_GPL(sata_port_hardreset); EXPORT_SYMBOL_GPL(sata_link_hardreset);
EXPORT_SYMBOL_GPL(sata_std_hardreset); EXPORT_SYMBOL_GPL(sata_std_hardreset);
EXPORT_SYMBOL_GPL(ata_std_postreset); EXPORT_SYMBOL_GPL(ata_std_postreset);
EXPORT_SYMBOL_GPL(ata_dev_classify); EXPORT_SYMBOL_GPL(ata_dev_classify);
......
...@@ -1737,16 +1737,16 @@ static void ata_eh_report(struct ata_port *ap) ...@@ -1737,16 +1737,16 @@ static void ata_eh_report(struct ata_port *ap)
} }
} }
static int ata_do_reset(struct ata_port *ap, ata_reset_fn_t reset, static int ata_do_reset(struct ata_link *link, ata_reset_fn_t reset,
unsigned int *classes, unsigned long deadline) unsigned int *classes, unsigned long deadline)
{ {
struct ata_device *dev; struct ata_device *dev;
int rc; int rc;
ata_link_for_each_dev(dev, &ap->link) ata_link_for_each_dev(dev, link)
classes[dev->devno] = ATA_DEV_UNKNOWN; classes[dev->devno] = ATA_DEV_UNKNOWN;
rc = reset(ap, classes, deadline); rc = reset(link, classes, deadline);
if (rc) if (rc)
return rc; return rc;
...@@ -1754,12 +1754,12 @@ static int ata_do_reset(struct ata_port *ap, ata_reset_fn_t reset, ...@@ -1754,12 +1754,12 @@ static int ata_do_reset(struct ata_port *ap, ata_reset_fn_t reset,
* is complete and convert all ATA_DEV_UNKNOWN to * is complete and convert all ATA_DEV_UNKNOWN to
* ATA_DEV_NONE. * ATA_DEV_NONE.
*/ */
ata_link_for_each_dev(dev, &ap->link) ata_link_for_each_dev(dev, link)
if (classes[dev->devno] != ATA_DEV_UNKNOWN) if (classes[dev->devno] != ATA_DEV_UNKNOWN)
break; break;
if (dev) { if (dev) {
ata_link_for_each_dev(dev, &ap->link) { ata_link_for_each_dev(dev, link) {
if (classes[dev->devno] == ATA_DEV_UNKNOWN) if (classes[dev->devno] == ATA_DEV_UNKNOWN)
classes[dev->devno] = ATA_DEV_NONE; classes[dev->devno] = ATA_DEV_NONE;
} }
...@@ -1780,11 +1780,10 @@ static int ata_eh_followup_srst_needed(int rc, int classify, ...@@ -1780,11 +1780,10 @@ static int ata_eh_followup_srst_needed(int rc, int classify,
return 0; return 0;
} }
static int ata_eh_reset(struct ata_port *ap, int classify, static int ata_eh_reset(struct ata_link *link, int classify,
ata_prereset_fn_t prereset, ata_reset_fn_t softreset, ata_prereset_fn_t prereset, ata_reset_fn_t softreset,
ata_reset_fn_t hardreset, ata_postreset_fn_t postreset) ata_reset_fn_t hardreset, ata_postreset_fn_t postreset)
{ {
struct ata_link *link = &ap->link;
struct ata_eh_context *ehc = &link->eh_context; struct ata_eh_context *ehc = &link->eh_context;
unsigned int *classes = ehc->classes; unsigned int *classes = ehc->classes;
int verbose = !(ehc->i.flags & ATA_EHI_QUIET); int verbose = !(ehc->i.flags & ATA_EHI_QUIET);
...@@ -1810,10 +1809,10 @@ static int ata_eh_reset(struct ata_port *ap, int classify, ...@@ -1810,10 +1809,10 @@ static int ata_eh_reset(struct ata_port *ap, int classify,
ehc->i.action |= ATA_EH_HARDRESET; ehc->i.action |= ATA_EH_HARDRESET;
if (prereset) { if (prereset) {
rc = prereset(ap, jiffies + ATA_EH_PRERESET_TIMEOUT); rc = prereset(link, jiffies + ATA_EH_PRERESET_TIMEOUT);
if (rc) { if (rc) {
if (rc == -ENOENT) { if (rc == -ENOENT) {
ata_port_printk(ap, KERN_DEBUG, ata_link_printk(link, KERN_DEBUG,
"port disabled. ignoring.\n"); "port disabled. ignoring.\n");
ehc->i.action &= ~ATA_EH_RESET_MASK; ehc->i.action &= ~ATA_EH_RESET_MASK;
...@@ -1822,7 +1821,7 @@ static int ata_eh_reset(struct ata_port *ap, int classify, ...@@ -1822,7 +1821,7 @@ static int ata_eh_reset(struct ata_port *ap, int classify,
rc = 0; rc = 0;
} else } else
ata_port_printk(ap, KERN_ERR, ata_link_printk(link, KERN_ERR,
"prereset failed (errno=%d)\n", rc); "prereset failed (errno=%d)\n", rc);
goto out; goto out;
} }
...@@ -1854,7 +1853,7 @@ static int ata_eh_reset(struct ata_port *ap, int classify, ...@@ -1854,7 +1853,7 @@ static int ata_eh_reset(struct ata_port *ap, int classify,
/* shut up during boot probing */ /* shut up during boot probing */
if (verbose) if (verbose)
ata_port_printk(ap, KERN_INFO, "%s resetting port\n", ata_link_printk(link, KERN_INFO, "%s resetting link\n",
reset == softreset ? "soft" : "hard"); reset == softreset ? "soft" : "hard");
/* mark that this EH session started with reset */ /* mark that this EH session started with reset */
...@@ -1863,7 +1862,7 @@ static int ata_eh_reset(struct ata_port *ap, int classify, ...@@ -1863,7 +1862,7 @@ static int ata_eh_reset(struct ata_port *ap, int classify,
else else
ehc->i.flags |= ATA_EHI_DID_SOFTRESET; ehc->i.flags |= ATA_EHI_DID_SOFTRESET;
rc = ata_do_reset(ap, reset, classes, deadline); rc = ata_do_reset(link, reset, classes, deadline);
if (reset == hardreset && if (reset == hardreset &&
ata_eh_followup_srst_needed(rc, classify, classes)) { ata_eh_followup_srst_needed(rc, classify, classes)) {
...@@ -1871,7 +1870,7 @@ static int ata_eh_reset(struct ata_port *ap, int classify, ...@@ -1871,7 +1870,7 @@ static int ata_eh_reset(struct ata_port *ap, int classify,
reset = softreset; reset = softreset;
if (!reset) { if (!reset) {
ata_port_printk(ap, KERN_ERR, ata_link_printk(link, KERN_ERR,
"follow-up softreset required " "follow-up softreset required "
"but no softreset avaliable\n"); "but no softreset avaliable\n");
rc = -EINVAL; rc = -EINVAL;
...@@ -1879,11 +1878,11 @@ static int ata_eh_reset(struct ata_port *ap, int classify, ...@@ -1879,11 +1878,11 @@ static int ata_eh_reset(struct ata_port *ap, int classify,
} }
ata_eh_about_to_do(link, NULL, ATA_EH_RESET_MASK); ata_eh_about_to_do(link, NULL, ATA_EH_RESET_MASK);
rc = ata_do_reset(ap, reset, classes, deadline); rc = ata_do_reset(link, reset, classes, deadline);
if (rc == 0 && classify && if (rc == 0 && classify &&
classes[0] == ATA_DEV_UNKNOWN) { classes[0] == ATA_DEV_UNKNOWN) {
ata_port_printk(ap, KERN_ERR, ata_link_printk(link, KERN_ERR,
"classification failed\n"); "classification failed\n");
rc = -EINVAL; rc = -EINVAL;
goto out; goto out;
...@@ -1896,7 +1895,7 @@ static int ata_eh_reset(struct ata_port *ap, int classify, ...@@ -1896,7 +1895,7 @@ static int ata_eh_reset(struct ata_port *ap, int classify,
if (time_before(now, deadline)) { if (time_before(now, deadline)) {
unsigned long delta = deadline - jiffies; unsigned long delta = deadline - jiffies;
ata_port_printk(ap, KERN_WARNING, "reset failed " ata_link_printk(link, KERN_WARNING, "reset failed "
"(errno=%d), retrying in %u secs\n", "(errno=%d), retrying in %u secs\n",
rc, (jiffies_to_msecs(delta) + 999) / 1000); rc, (jiffies_to_msecs(delta) + 999) / 1000);
...@@ -1925,7 +1924,7 @@ static int ata_eh_reset(struct ata_port *ap, int classify, ...@@ -1925,7 +1924,7 @@ static int ata_eh_reset(struct ata_port *ap, int classify,
link->sata_spd = (sstatus >> 4) & 0xf; link->sata_spd = (sstatus >> 4) & 0xf;
if (postreset) if (postreset)
postreset(ap, classes); postreset(link, classes);
/* reset successful, schedule revalidation */ /* reset successful, schedule revalidation */
ata_eh_done(link, NULL, ehc->i.action & ATA_EH_RESET_MASK); ata_eh_done(link, NULL, ehc->i.action & ATA_EH_RESET_MASK);
...@@ -2202,7 +2201,7 @@ static int ata_eh_recover(struct ata_port *ap, ata_prereset_fn_t prereset, ...@@ -2202,7 +2201,7 @@ static int ata_eh_recover(struct ata_port *ap, ata_prereset_fn_t prereset,
if (ehc->i.action & ATA_EH_RESET_MASK) { if (ehc->i.action & ATA_EH_RESET_MASK) {
ata_eh_freeze_port(ap); ata_eh_freeze_port(ap);
rc = ata_eh_reset(ap, ata_port_nr_vacant(ap), prereset, rc = ata_eh_reset(&ap->link, ata_port_nr_vacant(ap), prereset,
softreset, hardreset, postreset); softreset, hardreset, postreset);
if (rc) { if (rc) {
ata_port_printk(ap, KERN_ERR, ata_port_printk(ap, KERN_ERR,
......
...@@ -119,27 +119,28 @@ static void timing_setup(struct ata_port *ap, struct ata_device *adev, int offse ...@@ -119,27 +119,28 @@ static void timing_setup(struct ata_port *ap, struct ata_device *adev, int offse
} }
/** /**
* amd_probe_init - perform reset handling * amd_pre_reset - perform reset handling
* @ap: ATA port * @link: ATA link
* @deadline: deadline jiffies for the operation * @deadline: deadline jiffies for the operation
* *
* Reset sequence checking enable bits to see which ports are * Reset sequence checking enable bits to see which ports are
* active. * active.
*/ */
static int amd_pre_reset(struct ata_port *ap, unsigned long deadline) static int amd_pre_reset(struct ata_link *link, unsigned long deadline)
{ {
static const struct pci_bits amd_enable_bits[] = { static const struct pci_bits amd_enable_bits[] = {
{ 0x40, 1, 0x02, 0x02 }, { 0x40, 1, 0x02, 0x02 },
{ 0x40, 1, 0x01, 0x01 } { 0x40, 1, 0x01, 0x01 }
}; };
struct ata_port *ap = link->ap;
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
if (!pci_test_config_bits(pdev, &amd_enable_bits[ap->port_no])) if (!pci_test_config_bits(pdev, &amd_enable_bits[ap->port_no]))
return -ENOENT; return -ENOENT;
return ata_std_prereset(ap, deadline); return ata_std_prereset(link, deadline);
} }
static void amd_error_handler(struct ata_port *ap) static void amd_error_handler(struct ata_port *ap)
...@@ -221,25 +222,26 @@ static void amd133_set_dmamode(struct ata_port *ap, struct ata_device *adev) ...@@ -221,25 +222,26 @@ static void amd133_set_dmamode(struct ata_port *ap, struct ata_device *adev)
/** /**
* nv_probe_init - cable detection * nv_probe_init - cable detection
* @ap: ATA port * @lin: ATA link
* *
* Perform cable detection. The BIOS stores this in PCI config * Perform cable detection. The BIOS stores this in PCI config
* space for us. * space for us.
*/ */
static int nv_pre_reset(struct ata_port *ap, unsigned long deadline) static int nv_pre_reset(struct ata_link *link, unsigned long deadline)
{ {
static const struct pci_bits nv_enable_bits[] = { static const struct pci_bits nv_enable_bits[] = {
{ 0x50, 1, 0x02, 0x02 }, { 0x50, 1, 0x02, 0x02 },
{ 0x50, 1, 0x01, 0x01 } { 0x50, 1, 0x01, 0x01 }
}; };
struct ata_port *ap = link->ap;
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
if (!pci_test_config_bits(pdev, &nv_enable_bits[ap->port_no])) if (!pci_test_config_bits(pdev, &nv_enable_bits[ap->port_no]))
return -ENOENT; return -ENOENT;
return ata_std_prereset(ap, deadline); return ata_std_prereset(link, deadline);
} }
static void nv_error_handler(struct ata_port *ap) static void nv_error_handler(struct ata_port *ap)
......
...@@ -40,8 +40,9 @@ ...@@ -40,8 +40,9 @@
static int clock = 0; static int clock = 0;
static int artop6210_pre_reset(struct ata_port *ap, unsigned long deadline) static int artop6210_pre_reset(struct ata_link *link, unsigned long deadline)
{ {
struct ata_port *ap = link->ap;
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
const struct pci_bits artop_enable_bits[] = { const struct pci_bits artop_enable_bits[] = {
{ 0x4AU, 1U, 0x02UL, 0x02UL }, /* port 0 */ { 0x4AU, 1U, 0x02UL, 0x02UL }, /* port 0 */
...@@ -51,7 +52,7 @@ static int artop6210_pre_reset(struct ata_port *ap, unsigned long deadline) ...@@ -51,7 +52,7 @@ static int artop6210_pre_reset(struct ata_port *ap, unsigned long deadline)
if (!pci_test_config_bits(pdev, &artop_enable_bits[ap->port_no])) if (!pci_test_config_bits(pdev, &artop_enable_bits[ap->port_no]))
return -ENOENT; return -ENOENT;
return ata_std_prereset(ap, deadline); return ata_std_prereset(link, deadline);
} }
/** /**
...@@ -71,27 +72,28 @@ static void artop6210_error_handler(struct ata_port *ap) ...@@ -71,27 +72,28 @@ static void artop6210_error_handler(struct ata_port *ap)
/** /**
* artop6260_pre_reset - check for 40/80 pin * artop6260_pre_reset - check for 40/80 pin
* @ap: Port * @link: link
* @deadline: deadline jiffies for the operation * @deadline: deadline jiffies for the operation
* *
* The ARTOP hardware reports the cable detect bits in register 0x49. * The ARTOP hardware reports the cable detect bits in register 0x49.
* Nothing complicated needed here. * Nothing complicated needed here.
*/ */
static int artop6260_pre_reset(struct ata_port *ap, unsigned long deadline) static int artop6260_pre_reset(struct ata_link *link, unsigned long deadline)
{ {
static const struct pci_bits artop_enable_bits[] = { static const struct pci_bits artop_enable_bits[] = {
{ 0x4AU, 1U, 0x02UL, 0x02UL }, /* port 0 */ { 0x4AU, 1U, 0x02UL, 0x02UL }, /* port 0 */
{ 0x4AU, 1U, 0x04UL, 0x04UL }, /* port 1 */ { 0x4AU, 1U, 0x04UL, 0x04UL }, /* port 1 */
}; };
struct ata_port *ap = link->ap;
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
/* Odd numbered device ids are the units with enable bits (the -R cards) */ /* Odd numbered device ids are the units with enable bits (the -R cards) */
if (pdev->device % 1 && !pci_test_config_bits(pdev, &artop_enable_bits[ap->port_no])) if (pdev->device % 1 && !pci_test_config_bits(pdev, &artop_enable_bits[ap->port_no]))
return -ENOENT; return -ENOENT;
return ata_std_prereset(ap, deadline); return ata_std_prereset(link, deadline);
} }
/** /**
......
...@@ -33,8 +33,9 @@ enum { ...@@ -33,8 +33,9 @@ enum {
ATIIXP_IDE_UDMA_MODE = 0x56 ATIIXP_IDE_UDMA_MODE = 0x56
}; };
static int atiixp_pre_reset(struct ata_port *ap, unsigned long deadline) static int atiixp_pre_reset(struct ata_link *link, unsigned long deadline)
{ {
struct ata_port *ap = link->ap;
static const struct pci_bits atiixp_enable_bits[] = { static const struct pci_bits atiixp_enable_bits[] = {
{ 0x48, 1, 0x01, 0x00 }, { 0x48, 1, 0x01, 0x00 },
{ 0x48, 1, 0x08, 0x00 } { 0x48, 1, 0x08, 0x00 }
...@@ -44,7 +45,7 @@ static int atiixp_pre_reset(struct ata_port *ap, unsigned long deadline) ...@@ -44,7 +45,7 @@ static int atiixp_pre_reset(struct ata_port *ap, unsigned long deadline)
if (!pci_test_config_bits(pdev, &atiixp_enable_bits[ap->port_no])) if (!pci_test_config_bits(pdev, &atiixp_enable_bits[ap->port_no]))
return -ENOENT; return -ENOENT;
return ata_std_prereset(ap, deadline); return ata_std_prereset(link, deadline);
} }
static void atiixp_error_handler(struct ata_port *ap) static void atiixp_error_handler(struct ata_port *ap)
......
...@@ -26,25 +26,26 @@ ...@@ -26,25 +26,26 @@
/** /**
* efar_pre_reset - Enable bits * efar_pre_reset - Enable bits
* @ap: Port * @link: ATA link
* @deadline: deadline jiffies for the operation * @deadline: deadline jiffies for the operation
* *
* Perform cable detection for the EFAR ATA interface. This is * Perform cable detection for the EFAR ATA interface. This is
* different to the PIIX arrangement * different to the PIIX arrangement
*/ */
static int efar_pre_reset(struct ata_port *ap, unsigned long deadline) static int efar_pre_reset(struct ata_link *link, unsigned long deadline)
{ {
static const struct pci_bits efar_enable_bits[] = { static const struct pci_bits efar_enable_bits[] = {
{ 0x41U, 1U, 0x80UL, 0x80UL }, /* port 0 */ { 0x41U, 1U, 0x80UL, 0x80UL }, /* port 0 */
{ 0x43U, 1U, 0x80UL, 0x80UL }, /* port 1 */ { 0x43U, 1U, 0x80UL, 0x80UL }, /* port 1 */
}; };
struct ata_port *ap = link->ap;
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
if (!pci_test_config_bits(pdev, &efar_enable_bits[ap->port_no])) if (!pci_test_config_bits(pdev, &efar_enable_bits[ap->port_no]))
return -ENOENT; return -ENOENT;
return ata_std_prereset(ap, deadline); return ata_std_prereset(link, deadline);
} }
/** /**
......
...@@ -304,15 +304,16 @@ static unsigned long hpt370a_filter(struct ata_device *adev, unsigned long mask) ...@@ -304,15 +304,16 @@ static unsigned long hpt370a_filter(struct ata_device *adev, unsigned long mask)
/** /**
* hpt37x_pre_reset - reset the hpt37x bus * hpt37x_pre_reset - reset the hpt37x bus
* @ap: ATA port to reset * @link: ATA link to reset
* @deadline: deadline jiffies for the operation * @deadline: deadline jiffies for the operation
* *
* Perform the initial reset handling for the 370/372 and 374 func 0 * Perform the initial reset handling for the 370/372 and 374 func 0
*/ */
static int hpt37x_pre_reset(struct ata_port *ap, unsigned long deadline) static int hpt37x_pre_reset(struct ata_link *link, unsigned long deadline)
{ {
u8 scr2, ata66; u8 scr2, ata66;
struct ata_port *ap = link->ap;
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
static const struct pci_bits hpt37x_enable_bits[] = { static const struct pci_bits hpt37x_enable_bits[] = {
{ 0x50, 1, 0x04, 0x04 }, { 0x50, 1, 0x04, 0x04 },
...@@ -337,7 +338,7 @@ static int hpt37x_pre_reset(struct ata_port *ap, unsigned long deadline) ...@@ -337,7 +338,7 @@ static int hpt37x_pre_reset(struct ata_port *ap, unsigned long deadline)
pci_write_config_byte(pdev, 0x50 + 4 * ap->port_no, 0x37); pci_write_config_byte(pdev, 0x50 + 4 * ap->port_no, 0x37);
udelay(100); udelay(100);
return ata_std_prereset(ap, deadline); return ata_std_prereset(link, deadline);
} }
/** /**
...@@ -352,7 +353,7 @@ static void hpt37x_error_handler(struct ata_port *ap) ...@@ -352,7 +353,7 @@ static void hpt37x_error_handler(struct ata_port *ap)
ata_bmdma_drive_eh(ap, hpt37x_pre_reset, ata_std_softreset, NULL, ata_std_postreset); ata_bmdma_drive_eh(ap, hpt37x_pre_reset, ata_std_softreset, NULL, ata_std_postreset);
} }
static int hpt374_pre_reset(struct ata_port *ap, unsigned long deadline) static int hpt374_pre_reset(struct ata_link *link, unsigned long deadline)
{ {
static const struct pci_bits hpt37x_enable_bits[] = { static const struct pci_bits hpt37x_enable_bits[] = {
{ 0x50, 1, 0x04, 0x04 }, { 0x50, 1, 0x04, 0x04 },
...@@ -360,6 +361,7 @@ static int hpt374_pre_reset(struct ata_port *ap, unsigned long deadline) ...@@ -360,6 +361,7 @@ static int hpt374_pre_reset(struct ata_port *ap, unsigned long deadline)
}; };
u16 mcr3, mcr6; u16 mcr3, mcr6;
u8 ata66; u8 ata66;
struct ata_port *ap = link->ap;
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
if (!pci_test_config_bits(pdev, &hpt37x_enable_bits[ap->port_no])) if (!pci_test_config_bits(pdev, &hpt37x_enable_bits[ap->port_no]))
...@@ -387,7 +389,7 @@ static int hpt374_pre_reset(struct ata_port *ap, unsigned long deadline) ...@@ -387,7 +389,7 @@ static int hpt374_pre_reset(struct ata_port *ap, unsigned long deadline)
pci_write_config_byte(pdev, 0x50 + 4 * ap->port_no, 0x37); pci_write_config_byte(pdev, 0x50 + 4 * ap->port_no, 0x37);
udelay(100); udelay(100);
return ata_std_prereset(ap, deadline); return ata_std_prereset(link, deadline);
} }
/** /**
......
...@@ -141,21 +141,22 @@ static int hpt3x2n_cable_detect(struct ata_port *ap) ...@@ -141,21 +141,22 @@ static int hpt3x2n_cable_detect(struct ata_port *ap)
/** /**
* hpt3x2n_pre_reset - reset the hpt3x2n bus * hpt3x2n_pre_reset - reset the hpt3x2n bus
* @ap: ATA port to reset * @link: ATA link to reset
* @deadline: deadline jiffies for the operation * @deadline: deadline jiffies for the operation
* *
* Perform the initial reset handling for the 3x2n series controllers. * Perform the initial reset handling for the 3x2n series controllers.
* Reset the hardware and state machine, * Reset the hardware and state machine,
*/ */
static int hpt3xn_pre_reset(struct ata_port *ap, unsigned long deadline) static int hpt3xn_pre_reset(struct ata_link *link, unsigned long deadline)
{ {
struct ata_port *ap = link->ap;
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
/* Reset the state machine */ /* Reset the state machine */
pci_write_config_byte(pdev, 0x50 + 4 * ap->port_no, 0x37); pci_write_config_byte(pdev, 0x50 + 4 * ap->port_no, 0x37);
udelay(100); udelay(100);
return ata_std_prereset(ap, deadline); return ata_std_prereset(link, deadline);
} }
/** /**
......
...@@ -23,23 +23,24 @@ ...@@ -23,23 +23,24 @@
/** /**
* it8213_pre_reset - check for 40/80 pin * it8213_pre_reset - check for 40/80 pin
* @ap: Port * @link: link
* @deadline: deadline jiffies for the operation * @deadline: deadline jiffies for the operation
* *
* Filter out ports by the enable bits before doing the normal reset * Filter out ports by the enable bits before doing the normal reset
* and probe. * and probe.
*/ */
static int it8213_pre_reset(struct ata_port *ap, unsigned long deadline) static int it8213_pre_reset(struct ata_link *link, unsigned long deadline)
{ {
static const struct pci_bits it8213_enable_bits[] = { static const struct pci_bits it8213_enable_bits[] = {
{ 0x41U, 1U, 0x80UL, 0x80UL }, /* port 0 */ { 0x41U, 1U, 0x80UL, 0x80UL }, /* port 0 */
}; };
struct ata_port *ap = link->ap;
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
if (!pci_test_config_bits(pdev, &it8213_enable_bits[ap->port_no])) if (!pci_test_config_bits(pdev, &it8213_enable_bits[ap->port_no]))
return -ENOENT; return -ENOENT;
return ata_std_prereset(ap, deadline); return ata_std_prereset(link, deadline);
} }
/** /**
......
...@@ -29,7 +29,7 @@ typedef enum { ...@@ -29,7 +29,7 @@ typedef enum {
/** /**
* jmicron_pre_reset - check for 40/80 pin * jmicron_pre_reset - check for 40/80 pin
* @ap: Port * @link: ATA link
* @deadline: deadline jiffies for the operation * @deadline: deadline jiffies for the operation
* *
* Perform the PATA port setup we need. * Perform the PATA port setup we need.
...@@ -39,9 +39,9 @@ typedef enum { ...@@ -39,9 +39,9 @@ typedef enum {
* and setup here. We assume that has been done by init_one and the * and setup here. We assume that has been done by init_one and the
* BIOS. * BIOS.
*/ */
static int jmicron_pre_reset(struct ata_link *link, unsigned long deadline)
static int jmicron_pre_reset(struct ata_port *ap, unsigned long deadline)
{ {
struct ata_port *ap = link->ap;
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
u32 control; u32 control;
u32 control5; u32 control5;
...@@ -103,7 +103,7 @@ static int jmicron_pre_reset(struct ata_port *ap, unsigned long deadline) ...@@ -103,7 +103,7 @@ static int jmicron_pre_reset(struct ata_port *ap, unsigned long deadline)
ap->cbl = ATA_CBL_SATA; ap->cbl = ATA_CBL_SATA;
break; break;
} }
return ata_std_prereset(ap, deadline); return ata_std_prereset(link, deadline);
} }
/** /**
......
...@@ -24,14 +24,15 @@ ...@@ -24,14 +24,15 @@
/** /**
* marvell_pre_reset - check for 40/80 pin * marvell_pre_reset - check for 40/80 pin
* @ap: Port * @link: link
* @deadline: deadline jiffies for the operation * @deadline: deadline jiffies for the operation
* *
* Perform the PATA port setup we need. * Perform the PATA port setup we need.
*/ */
static int marvell_pre_reset(struct ata_port *ap, unsigned long deadline) static int marvell_pre_reset(struct ata_link *link, unsigned long deadline)
{ {
struct ata_port *ap = link->ap;
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
u32 devices; u32 devices;
void __iomem *barp; void __iomem *barp;
...@@ -54,7 +55,7 @@ static int marvell_pre_reset(struct ata_port *ap, unsigned long deadline) ...@@ -54,7 +55,7 @@ static int marvell_pre_reset(struct ata_port *ap, unsigned long deadline)
(!(devices & 0x10))) /* PATA enable ? */ (!(devices & 0x10))) /* PATA enable ? */
return -ENOENT; return -ENOENT;
return ata_std_prereset(ap, deadline); return ata_std_prereset(link, deadline);
} }
static int marvell_cable_detect(struct ata_port *ap) static int marvell_cable_detect(struct ata_port *ap)
......
...@@ -46,15 +46,16 @@ enum { ...@@ -46,15 +46,16 @@ enum {
SECONDARY = (1 << 14) SECONDARY = (1 << 14)
}; };
static int mpiix_pre_reset(struct ata_port *ap, unsigned long deadline) static int mpiix_pre_reset(struct ata_link *link, unsigned long deadline)
{ {
struct ata_port *ap = link->ap;
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
static const struct pci_bits mpiix_enable_bits = { 0x6D, 1, 0x80, 0x80 }; static const struct pci_bits mpiix_enable_bits = { 0x6D, 1, 0x80, 0x80 };
if (!pci_test_config_bits(pdev, &mpiix_enable_bits)) if (!pci_test_config_bits(pdev, &mpiix_enable_bits))
return -ENOENT; return -ENOENT;
return ata_std_prereset(ap, deadline); return ata_std_prereset(link, deadline);
} }
/** /**
......
...@@ -32,14 +32,15 @@ ...@@ -32,14 +32,15 @@
/** /**
* ns87410_pre_reset - probe begin * ns87410_pre_reset - probe begin
* @ap: ATA port * @link: ATA link
* @deadline: deadline jiffies for the operation * @deadline: deadline jiffies for the operation
* *
* Check enabled ports * Check enabled ports
*/ */
static int ns87410_pre_reset(struct ata_port *ap, unsigned long deadline) static int ns87410_pre_reset(struct ata_link *link, unsigned long deadline)
{ {
struct ata_port *ap = link->ap;
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
static const struct pci_bits ns87410_enable_bits[] = { static const struct pci_bits ns87410_enable_bits[] = {
{ 0x43, 1, 0x08, 0x08 }, { 0x43, 1, 0x08, 0x08 },
...@@ -49,7 +50,7 @@ static int ns87410_pre_reset(struct ata_port *ap, unsigned long deadline) ...@@ -49,7 +50,7 @@ static int ns87410_pre_reset(struct ata_port *ap, unsigned long deadline)
if (!pci_test_config_bits(pdev, &ns87410_enable_bits[ap->port_no])) if (!pci_test_config_bits(pdev, &ns87410_enable_bits[ap->port_no]))
return -ENOENT; return -ENOENT;
return ata_std_prereset(ap, deadline); return ata_std_prereset(link, deadline);
} }
/** /**
......
...@@ -29,14 +29,15 @@ ...@@ -29,14 +29,15 @@
/** /**
* oldpiix_pre_reset - probe begin * oldpiix_pre_reset - probe begin
* @ap: ATA port * @link: ATA link
* @deadline: deadline jiffies for the operation * @deadline: deadline jiffies for the operation
* *
* Set up cable type and use generic probe init * Set up cable type and use generic probe init
*/ */
static int oldpiix_pre_reset(struct ata_port *ap, unsigned long deadline) static int oldpiix_pre_reset(struct ata_link *link, unsigned long deadline)
{ {
struct ata_port *ap = link->ap;
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
static const struct pci_bits oldpiix_enable_bits[] = { static const struct pci_bits oldpiix_enable_bits[] = {
{ 0x41U, 1U, 0x80UL, 0x80UL }, /* port 0 */ { 0x41U, 1U, 0x80UL, 0x80UL }, /* port 0 */
...@@ -46,7 +47,7 @@ static int oldpiix_pre_reset(struct ata_port *ap, unsigned long deadline) ...@@ -46,7 +47,7 @@ static int oldpiix_pre_reset(struct ata_port *ap, unsigned long deadline)
if (!pci_test_config_bits(pdev, &oldpiix_enable_bits[ap->port_no])) if (!pci_test_config_bits(pdev, &oldpiix_enable_bits[ap->port_no]))
return -ENOENT; return -ENOENT;
return ata_std_prereset(ap, deadline); return ata_std_prereset(link, deadline);
} }
/** /**
......
...@@ -46,14 +46,15 @@ enum { ...@@ -46,14 +46,15 @@ enum {
/** /**
* opti_pre_reset - probe begin * opti_pre_reset - probe begin
* @ap: ATA port * @link: ATA link
* @deadline: deadline jiffies for the operation * @deadline: deadline jiffies for the operation
* *
* Set up cable type and use generic probe init * Set up cable type and use generic probe init
*/ */
static int opti_pre_reset(struct ata_port *ap, unsigned long deadline) static int opti_pre_reset(struct ata_link *link, unsigned long deadline)
{ {
struct ata_port *ap = link->ap;
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
static const struct pci_bits opti_enable_bits[] = { static const struct pci_bits opti_enable_bits[] = {
{ 0x45, 1, 0x80, 0x00 }, { 0x45, 1, 0x80, 0x00 },
...@@ -63,7 +64,7 @@ static int opti_pre_reset(struct ata_port *ap, unsigned long deadline) ...@@ -63,7 +64,7 @@ static int opti_pre_reset(struct ata_port *ap, unsigned long deadline)
if (!pci_test_config_bits(pdev, &opti_enable_bits[ap->port_no])) if (!pci_test_config_bits(pdev, &opti_enable_bits[ap->port_no]))
return -ENOENT; return -ENOENT;
return ata_std_prereset(ap, deadline); return ata_std_prereset(link, deadline);
} }
/** /**
......
...@@ -47,14 +47,15 @@ static int pci_clock; /* 0 = 33 1 = 25 */ ...@@ -47,14 +47,15 @@ static int pci_clock; /* 0 = 33 1 = 25 */
/** /**
* optidma_pre_reset - probe begin * optidma_pre_reset - probe begin
* @ap: ATA port * @link: ATA link
* @deadline: deadline jiffies for the operation * @deadline: deadline jiffies for the operation
* *
* Set up cable type and use generic probe init * Set up cable type and use generic probe init
*/ */
static int optidma_pre_reset(struct ata_port *ap, unsigned long deadline) static int optidma_pre_reset(struct ata_link *link, unsigned long deadline)
{ {
struct ata_port *ap = link->ap;
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
static const struct pci_bits optidma_enable_bits = { static const struct pci_bits optidma_enable_bits = {
0x40, 1, 0x08, 0x00 0x40, 1, 0x08, 0x00
...@@ -63,7 +64,7 @@ static int optidma_pre_reset(struct ata_port *ap, unsigned long deadline) ...@@ -63,7 +64,7 @@ static int optidma_pre_reset(struct ata_port *ap, unsigned long deadline)
if (ap->port_no && !pci_test_config_bits(pdev, &optidma_enable_bits)) if (ap->port_no && !pci_test_config_bits(pdev, &optidma_enable_bits))
return -ENOENT; return -ENOENT;
return ata_std_prereset(ap, deadline); return ata_std_prereset(link, deadline);
} }
/** /**
......
...@@ -300,7 +300,7 @@ static inline int pdc2027x_port_enabled(struct ata_port *ap) ...@@ -300,7 +300,7 @@ static inline int pdc2027x_port_enabled(struct ata_port *ap)
/** /**
* pdc2027x_prereset - prereset for PATA host controller * pdc2027x_prereset - prereset for PATA host controller
* @ap: Target port * @link: Target link
* @deadline: deadline jiffies for the operation * @deadline: deadline jiffies for the operation
* *
* Probeinit including cable detection. * Probeinit including cable detection.
...@@ -309,12 +309,12 @@ static inline int pdc2027x_port_enabled(struct ata_port *ap) ...@@ -309,12 +309,12 @@ static inline int pdc2027x_port_enabled(struct ata_port *ap)
* None (inherited from caller). * None (inherited from caller).
*/ */
static int pdc2027x_prereset(struct ata_port *ap, unsigned long deadline) static int pdc2027x_prereset(struct ata_link *link, unsigned long deadline)
{ {
/* Check whether port enabled */ /* Check whether port enabled */
if (!pdc2027x_port_enabled(ap)) if (!pdc2027x_port_enabled(link->ap))
return -ENOENT; return -ENOENT;
return ata_std_prereset(ap, deadline); return ata_std_prereset(link, deadline);
} }
/** /**
......
...@@ -95,15 +95,16 @@ static int sil680_cable_detect(struct ata_port *ap) { ...@@ -95,15 +95,16 @@ static int sil680_cable_detect(struct ata_port *ap) {
/** /**
* sil680_bus_reset - reset the SIL680 bus * sil680_bus_reset - reset the SIL680 bus
* @ap: ATA port to reset * @link: ATA link to reset
* @deadline: deadline jiffies for the operation * @deadline: deadline jiffies for the operation
* *
* Perform the SIL680 housekeeping when doing an ATA bus reset * Perform the SIL680 housekeeping when doing an ATA bus reset
*/ */
static int sil680_bus_reset(struct ata_port *ap,unsigned int *classes, static int sil680_bus_reset(struct ata_link *link, unsigned int *classes,
unsigned long deadline) unsigned long deadline)
{ {
struct ata_port *ap = link->ap;
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
unsigned long addr = sil680_selreg(ap, 0); unsigned long addr = sil680_selreg(ap, 0);
u8 reset; u8 reset;
...@@ -112,7 +113,7 @@ static int sil680_bus_reset(struct ata_port *ap,unsigned int *classes, ...@@ -112,7 +113,7 @@ static int sil680_bus_reset(struct ata_port *ap,unsigned int *classes,
pci_write_config_byte(pdev, addr, reset | 0x03); pci_write_config_byte(pdev, addr, reset | 0x03);
udelay(25); udelay(25);
pci_write_config_byte(pdev, addr, reset); pci_write_config_byte(pdev, addr, reset);
return ata_std_softreset(ap, classes, deadline); return ata_std_softreset(link, classes, deadline);
} }
static void sil680_error_handler(struct ata_port *ap) static void sil680_error_handler(struct ata_port *ap)
......
...@@ -133,19 +133,20 @@ static int sis_66_cable_detect(struct ata_port *ap) ...@@ -133,19 +133,20 @@ static int sis_66_cable_detect(struct ata_port *ap)
/** /**
* sis_pre_reset - probe begin * sis_pre_reset - probe begin
* @ap: ATA port * @link: ATA link
* @deadline: deadline jiffies for the operation * @deadline: deadline jiffies for the operation
* *
* Set up cable type and use generic probe init * Set up cable type and use generic probe init
*/ */
static int sis_pre_reset(struct ata_port *ap, unsigned long deadline) static int sis_pre_reset(struct ata_link *link, unsigned long deadline)
{ {
static const struct pci_bits sis_enable_bits[] = { static const struct pci_bits sis_enable_bits[] = {
{ 0x4aU, 1U, 0x02UL, 0x02UL }, /* port 0 */ { 0x4aU, 1U, 0x02UL, 0x02UL }, /* port 0 */
{ 0x4aU, 1U, 0x04UL, 0x04UL }, /* port 1 */ { 0x4aU, 1U, 0x04UL, 0x04UL }, /* port 1 */
}; };
struct ata_port *ap = link->ap;
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
if (!pci_test_config_bits(pdev, &sis_enable_bits[ap->port_no])) if (!pci_test_config_bits(pdev, &sis_enable_bits[ap->port_no]))
...@@ -154,7 +155,7 @@ static int sis_pre_reset(struct ata_port *ap, unsigned long deadline) ...@@ -154,7 +155,7 @@ static int sis_pre_reset(struct ata_port *ap, unsigned long deadline)
/* Clear the FIFO settings. We can't enable the FIFO until /* Clear the FIFO settings. We can't enable the FIFO until
we know we are poking at a disk */ we know we are poking at a disk */
pci_write_config_byte(pdev, 0x4B, 0); pci_write_config_byte(pdev, 0x4B, 0);
return ata_std_prereset(ap, deadline); return ata_std_prereset(link, deadline);
} }
......
...@@ -43,23 +43,24 @@ enum { ...@@ -43,23 +43,24 @@ enum {
/** /**
* sl82c105_pre_reset - probe begin * sl82c105_pre_reset - probe begin
* @ap: ATA port * @link: ATA link
* @deadline: deadline jiffies for the operation * @deadline: deadline jiffies for the operation
* *
* Set up cable type and use generic probe init * Set up cable type and use generic probe init
*/ */
static int sl82c105_pre_reset(struct ata_port *ap, unsigned long deadline) static int sl82c105_pre_reset(struct ata_link *link, unsigned long deadline)
{ {
static const struct pci_bits sl82c105_enable_bits[] = { static const struct pci_bits sl82c105_enable_bits[] = {
{ 0x40, 1, 0x01, 0x01 }, { 0x40, 1, 0x01, 0x01 },
{ 0x40, 1, 0x10, 0x10 } { 0x40, 1, 0x10, 0x10 }
}; };
struct ata_port *ap = link->ap;
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
if (ap->port_no && !pci_test_config_bits(pdev, &sl82c105_enable_bits[ap->port_no])) if (ap->port_no && !pci_test_config_bits(pdev, &sl82c105_enable_bits[ap->port_no]))
return -ENOENT; return -ENOENT;
return ata_std_prereset(ap, deadline); return ata_std_prereset(link, deadline);
} }
......
...@@ -47,25 +47,26 @@ ...@@ -47,25 +47,26 @@
/** /**
* triflex_prereset - probe begin * triflex_prereset - probe begin
* @ap: ATA port * @link: ATA link
* @deadline: deadline jiffies for the operation * @deadline: deadline jiffies for the operation
* *
* Set up cable type and use generic probe init * Set up cable type and use generic probe init
*/ */
static int triflex_prereset(struct ata_port *ap, unsigned long deadline) static int triflex_prereset(struct ata_link *link, unsigned long deadline)
{ {
static const struct pci_bits triflex_enable_bits[] = { static const struct pci_bits triflex_enable_bits[] = {
{ 0x80, 1, 0x01, 0x01 }, { 0x80, 1, 0x01, 0x01 },
{ 0x80, 1, 0x02, 0x02 } { 0x80, 1, 0x02, 0x02 }
}; };
struct ata_port *ap = link->ap;
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
if (!pci_test_config_bits(pdev, &triflex_enable_bits[ap->port_no])) if (!pci_test_config_bits(pdev, &triflex_enable_bits[ap->port_no]))
return -ENOENT; return -ENOENT;
return ata_std_prereset(ap, deadline); return ata_std_prereset(link, deadline);
} }
......
...@@ -187,8 +187,9 @@ static int via_cable_detect(struct ata_port *ap) { ...@@ -187,8 +187,9 @@ static int via_cable_detect(struct ata_port *ap) {
return ATA_CBL_PATA40; return ATA_CBL_PATA40;
} }
static int via_pre_reset(struct ata_port *ap, unsigned long deadline) static int via_pre_reset(struct ata_link *link, unsigned long deadline)
{ {
struct ata_port *ap = link->ap;
const struct via_isa_bridge *config = ap->host->private_data; const struct via_isa_bridge *config = ap->host->private_data;
if (!(config->flags & VIA_NO_ENABLES)) { if (!(config->flags & VIA_NO_ENABLES)) {
...@@ -201,7 +202,7 @@ static int via_pre_reset(struct ata_port *ap, unsigned long deadline) ...@@ -201,7 +202,7 @@ static int via_pre_reset(struct ata_port *ap, unsigned long deadline)
return -ENOENT; return -ENOENT;
} }
return ata_std_prereset(ap, deadline); return ata_std_prereset(link, deadline);
} }
......
...@@ -417,12 +417,13 @@ static void inic_thaw(struct ata_port *ap) ...@@ -417,12 +417,13 @@ static void inic_thaw(struct ata_port *ap)
* SRST and SControl hardreset don't give valid signature on this * SRST and SControl hardreset don't give valid signature on this
* controller. Only controller specific hardreset mechanism works. * controller. Only controller specific hardreset mechanism works.
*/ */
static int inic_hardreset(struct ata_port *ap, unsigned int *class, static int inic_hardreset(struct ata_link *link, unsigned int *class,
unsigned long deadline) unsigned long deadline)
{ {
struct ata_port *ap = link->ap;
void __iomem *port_base = inic_port_base(ap); void __iomem *port_base = inic_port_base(ap);
void __iomem *idma_ctl = port_base + PORT_IDMA_CTL; void __iomem *idma_ctl = port_base + PORT_IDMA_CTL;
const unsigned long *timing = sata_ehc_deb_timing(&ap->link.eh_context); const unsigned long *timing = sata_ehc_deb_timing(&link->eh_context);
u16 val; u16 val;
int rc; int rc;
...@@ -435,15 +436,15 @@ static int inic_hardreset(struct ata_port *ap, unsigned int *class, ...@@ -435,15 +436,15 @@ static int inic_hardreset(struct ata_port *ap, unsigned int *class,
msleep(1); msleep(1);
writew(val & ~IDMA_CTL_RST_ATA, idma_ctl); writew(val & ~IDMA_CTL_RST_ATA, idma_ctl);
rc = sata_link_resume(&ap->link, timing, deadline); rc = sata_link_resume(link, timing, deadline);
if (rc) { if (rc) {
ata_port_printk(ap, KERN_WARNING, "failed to resume " ata_link_printk(link, KERN_WARNING, "failed to resume "
"link after reset (errno=%d)\n", rc); "link after reset (errno=%d)\n", rc);
return rc; return rc;
} }
*class = ATA_DEV_NONE; *class = ATA_DEV_NONE;
if (ata_link_online(&ap->link)) { if (ata_link_online(link)) {
struct ata_taskfile tf; struct ata_taskfile tf;
/* wait a while before checking status */ /* wait a while before checking status */
...@@ -452,7 +453,7 @@ static int inic_hardreset(struct ata_port *ap, unsigned int *class, ...@@ -452,7 +453,7 @@ static int inic_hardreset(struct ata_port *ap, unsigned int *class,
rc = ata_wait_ready(ap, deadline); rc = ata_wait_ready(ap, deadline);
/* link occupied, -ENODEV too is an error */ /* link occupied, -ENODEV too is an error */
if (rc) { if (rc) {
ata_port_printk(ap, KERN_WARNING, "device not ready " ata_link_printk(link, KERN_WARNING, "device not ready "
"after hardreset (errno=%d)\n", rc); "after hardreset (errno=%d)\n", rc);
return rc; return rc;
} }
......
...@@ -2266,10 +2266,11 @@ static void mv_phy_reset(struct ata_port *ap, unsigned int *class, ...@@ -2266,10 +2266,11 @@ static void mv_phy_reset(struct ata_port *ap, unsigned int *class,
VPRINTK("EXIT\n"); VPRINTK("EXIT\n");
} }
static int mv_prereset(struct ata_port *ap, unsigned long deadline) static int mv_prereset(struct ata_link *link, unsigned long deadline)
{ {
struct ata_port *ap = link->ap;
struct mv_port_priv *pp = ap->private_data; struct mv_port_priv *pp = ap->private_data;
struct ata_eh_context *ehc = &ap->link.eh_context; struct ata_eh_context *ehc = &link->eh_context;
int rc; int rc;
rc = mv_stop_dma(ap); rc = mv_stop_dma(ap);
...@@ -2285,7 +2286,7 @@ static int mv_prereset(struct ata_port *ap, unsigned long deadline) ...@@ -2285,7 +2286,7 @@ static int mv_prereset(struct ata_port *ap, unsigned long deadline)
if (ehc->i.action & ATA_EH_HARDRESET) if (ehc->i.action & ATA_EH_HARDRESET)
return 0; return 0;
if (ata_link_online(&ap->link)) if (ata_link_online(link))
rc = ata_wait_ready(ap, deadline); rc = ata_wait_ready(ap, deadline);
else else
rc = -ENODEV; rc = -ENODEV;
...@@ -2293,9 +2294,10 @@ static int mv_prereset(struct ata_port *ap, unsigned long deadline) ...@@ -2293,9 +2294,10 @@ static int mv_prereset(struct ata_port *ap, unsigned long deadline)
return rc; return rc;
} }
static int mv_hardreset(struct ata_port *ap, unsigned int *class, static int mv_hardreset(struct ata_link *link, unsigned int *class,
unsigned long deadline) unsigned long deadline)
{ {
struct ata_port *ap = link->ap;
struct mv_host_priv *hpriv = ap->host->private_data; struct mv_host_priv *hpriv = ap->host->private_data;
void __iomem *mmio = ap->host->iomap[MV_PRIMARY_BAR]; void __iomem *mmio = ap->host->iomap[MV_PRIMARY_BAR];
...@@ -2308,16 +2310,17 @@ static int mv_hardreset(struct ata_port *ap, unsigned int *class, ...@@ -2308,16 +2310,17 @@ static int mv_hardreset(struct ata_port *ap, unsigned int *class,
return 0; return 0;
} }
static void mv_postreset(struct ata_port *ap, unsigned int *classes) static void mv_postreset(struct ata_link *link, unsigned int *classes)
{ {
struct ata_port *ap = link->ap;
u32 serr; u32 serr;
/* print link status */ /* print link status */
sata_print_link_status(&ap->link); sata_print_link_status(link);
/* clear SError */ /* clear SError */
sata_scr_read(&ap->link, SCR_ERROR, &serr); sata_scr_read(link, SCR_ERROR, &serr);
sata_scr_write_flush(&ap->link, SCR_ERROR, serr); sata_scr_write_flush(link, SCR_ERROR, serr);
/* bail out if no device is present */ /* bail out if no device is present */
if (classes[0] == ATA_DEV_NONE && classes[1] == ATA_DEV_NONE) { if (classes[0] == ATA_DEV_NONE && classes[1] == ATA_DEV_NONE) {
......
...@@ -1459,7 +1459,7 @@ static void nv_ck804_thaw(struct ata_port *ap) ...@@ -1459,7 +1459,7 @@ static void nv_ck804_thaw(struct ata_port *ap)
writeb(mask, mmio_base + NV_INT_ENABLE_CK804); writeb(mask, mmio_base + NV_INT_ENABLE_CK804);
} }
static int nv_hardreset(struct ata_port *ap, unsigned int *class, static int nv_hardreset(struct ata_link *link, unsigned int *class,
unsigned long deadline) unsigned long deadline)
{ {
unsigned int dummy; unsigned int dummy;
...@@ -1468,7 +1468,7 @@ static int nv_hardreset(struct ata_port *ap, unsigned int *class, ...@@ -1468,7 +1468,7 @@ static int nv_hardreset(struct ata_port *ap, unsigned int *class,
* some controllers. Don't classify on hardreset. For more * some controllers. Don't classify on hardreset. For more
* info, see http://bugme.osdl.org/show_bug.cgi?id=3352 * info, see http://bugme.osdl.org/show_bug.cgi?id=3352
*/ */
return sata_std_hardreset(ap, &dummy, deadline); return sata_std_hardreset(link, &dummy, deadline);
} }
static void nv_error_handler(struct ata_port *ap) static void nv_error_handler(struct ata_port *ap)
......
...@@ -583,9 +583,10 @@ static int sil24_exec_polled_cmd(struct ata_port *ap, int pmp, ...@@ -583,9 +583,10 @@ static int sil24_exec_polled_cmd(struct ata_port *ap, int pmp,
return rc; return rc;
} }
static int sil24_do_softreset(struct ata_port *ap, unsigned int *class, static int sil24_do_softreset(struct ata_link *link, unsigned int *class,
int pmp, unsigned long deadline) int pmp, unsigned long deadline)
{ {
struct ata_port *ap = link->ap;
unsigned long timeout_msec = 0; unsigned long timeout_msec = 0;
struct ata_taskfile tf; struct ata_taskfile tf;
const char *reason; const char *reason;
...@@ -593,7 +594,7 @@ static int sil24_do_softreset(struct ata_port *ap, unsigned int *class, ...@@ -593,7 +594,7 @@ static int sil24_do_softreset(struct ata_port *ap, unsigned int *class,
DPRINTK("ENTER\n"); DPRINTK("ENTER\n");
if (ata_link_offline(&ap->link)) { if (ata_link_offline(link)) {
DPRINTK("PHY reports no device\n"); DPRINTK("PHY reports no device\n");
*class = ATA_DEV_NONE; *class = ATA_DEV_NONE;
goto out; goto out;
...@@ -609,7 +610,7 @@ static int sil24_do_softreset(struct ata_port *ap, unsigned int *class, ...@@ -609,7 +610,7 @@ static int sil24_do_softreset(struct ata_port *ap, unsigned int *class,
if (time_after(deadline, jiffies)) if (time_after(deadline, jiffies))
timeout_msec = jiffies_to_msecs(deadline - jiffies); timeout_msec = jiffies_to_msecs(deadline - jiffies);
ata_tf_init(ap->link.device, &tf); /* doesn't really matter */ ata_tf_init(link->device, &tf); /* doesn't really matter */
rc = sil24_exec_polled_cmd(ap, pmp, &tf, 0, PRB_CTRL_SRST, rc = sil24_exec_polled_cmd(ap, pmp, &tf, 0, PRB_CTRL_SRST,
timeout_msec); timeout_msec);
if (rc == -EBUSY) { if (rc == -EBUSY) {
...@@ -631,29 +632,30 @@ static int sil24_do_softreset(struct ata_port *ap, unsigned int *class, ...@@ -631,29 +632,30 @@ static int sil24_do_softreset(struct ata_port *ap, unsigned int *class,
return 0; return 0;
err: err:
ata_port_printk(ap, KERN_ERR, "softreset failed (%s)\n", reason); ata_link_printk(link, KERN_ERR, "softreset failed (%s)\n", reason);
return -EIO; return -EIO;
} }
static int sil24_softreset(struct ata_port *ap, unsigned int *class, static int sil24_softreset(struct ata_link *link, unsigned int *class,
unsigned long deadline) unsigned long deadline)
{ {
return sil24_do_softreset(ap, class, 0, deadline); return sil24_do_softreset(link, class, 0, deadline);
} }
static int sil24_hardreset(struct ata_port *ap, unsigned int *class, static int sil24_hardreset(struct ata_link *link, unsigned int *class,
unsigned long deadline) unsigned long deadline)
{ {
struct ata_port *ap = link->ap;
void __iomem *port = ap->ioaddr.cmd_addr; void __iomem *port = ap->ioaddr.cmd_addr;
const char *reason; const char *reason;
int tout_msec, rc; int tout_msec, rc;
u32 tmp; u32 tmp;
/* sil24 does the right thing(tm) without any protection */ /* sil24 does the right thing(tm) without any protection */
sata_set_spd(&ap->link); sata_set_spd(link);
tout_msec = 100; tout_msec = 100;
if (ata_link_online(&ap->link)) if (ata_link_online(link))
tout_msec = 5000; tout_msec = 5000;
writel(PORT_CS_DEV_RST, port + PORT_CTRL_STAT); writel(PORT_CS_DEV_RST, port + PORT_CTRL_STAT);
...@@ -663,14 +665,14 @@ static int sil24_hardreset(struct ata_port *ap, unsigned int *class, ...@@ -663,14 +665,14 @@ static int sil24_hardreset(struct ata_port *ap, unsigned int *class,
/* SStatus oscillates between zero and valid status after /* SStatus oscillates between zero and valid status after
* DEV_RST, debounce it. * DEV_RST, debounce it.
*/ */
rc = sata_link_debounce(&ap->link, sata_deb_timing_long, deadline); rc = sata_link_debounce(link, sata_deb_timing_long, deadline);
if (rc) { if (rc) {
reason = "PHY debouncing failed"; reason = "PHY debouncing failed";
goto err; goto err;
} }
if (tmp & PORT_CS_DEV_RST) { if (tmp & PORT_CS_DEV_RST) {
if (ata_link_offline(&ap->link)) if (ata_link_offline(link))
return 0; return 0;
reason = "link not ready"; reason = "link not ready";
goto err; goto err;
...@@ -685,7 +687,7 @@ static int sil24_hardreset(struct ata_port *ap, unsigned int *class, ...@@ -685,7 +687,7 @@ static int sil24_hardreset(struct ata_port *ap, unsigned int *class,
return -EAGAIN; return -EAGAIN;
err: err:
ata_port_printk(ap, KERN_ERR, "hardreset failed (%s)\n", reason); ata_link_printk(link, KERN_ERR, "hardreset failed (%s)\n", reason);
return -EIO; return -EIO;
} }
......
...@@ -276,7 +276,7 @@ static void svia_noop_freeze(struct ata_port *ap) ...@@ -276,7 +276,7 @@ static void svia_noop_freeze(struct ata_port *ap)
/** /**
* vt6420_prereset - prereset for vt6420 * vt6420_prereset - prereset for vt6420
* @ap: target ATA port * @link: target ATA link
* @deadline: deadline jiffies for the operation * @deadline: deadline jiffies for the operation
* *
* SCR registers on vt6420 are pieces of shit and may hang the * SCR registers on vt6420 are pieces of shit and may hang the
...@@ -294,8 +294,9 @@ static void svia_noop_freeze(struct ata_port *ap) ...@@ -294,8 +294,9 @@ static void svia_noop_freeze(struct ata_port *ap)
* RETURNS: * RETURNS:
* 0 on success, -errno otherwise. * 0 on success, -errno otherwise.
*/ */
static int vt6420_prereset(struct ata_port *ap, unsigned long deadline) static int vt6420_prereset(struct ata_link *link, unsigned long deadline)
{ {
struct ata_port *ap = link->ap;
struct ata_eh_context *ehc = &ap->link.eh_context; struct ata_eh_context *ehc = &ap->link.eh_context;
unsigned long timeout = jiffies + (HZ * 5); unsigned long timeout = jiffies + (HZ * 5);
u32 sstatus, scontrol; u32 sstatus, scontrol;
......
...@@ -3829,18 +3829,18 @@ static int ipr_device_reset(struct ipr_ioa_cfg *ioa_cfg, ...@@ -3829,18 +3829,18 @@ static int ipr_device_reset(struct ipr_ioa_cfg *ioa_cfg,
/** /**
* ipr_sata_reset - Reset the SATA port * ipr_sata_reset - Reset the SATA port
* @ap: SATA port to reset * @link: SATA link to reset
* @classes: class of the attached device * @classes: class of the attached device
* *
* This function issues a SATA phy reset to the affected ATA port. * This function issues a SATA phy reset to the affected ATA link.
* *
* Return value: * Return value:
* 0 on success / non-zero on failure * 0 on success / non-zero on failure
**/ **/
static int ipr_sata_reset(struct ata_port *ap, unsigned int *classes, static int ipr_sata_reset(struct ata_link *link, unsigned int *classes,
unsigned long deadline) unsigned long deadline)
{ {
struct ipr_sata_port *sata_port = ap->private_data; struct ipr_sata_port *sata_port = link->ap->private_data;
struct ipr_ioa_cfg *ioa_cfg = sata_port->ioa_cfg; struct ipr_ioa_cfg *ioa_cfg = sata_port->ioa_cfg;
struct ipr_resource_entry *res; struct ipr_resource_entry *res;
unsigned long lock_flags = 0; unsigned long lock_flags = 0;
......
...@@ -333,14 +333,15 @@ enum ata_completion_errors { ...@@ -333,14 +333,15 @@ enum ata_completion_errors {
struct scsi_device; struct scsi_device;
struct ata_port_operations; struct ata_port_operations;
struct ata_port; struct ata_port;
struct ata_link;
struct ata_queued_cmd; struct ata_queued_cmd;
/* typedefs */ /* typedefs */
typedef void (*ata_qc_cb_t) (struct ata_queued_cmd *qc); typedef void (*ata_qc_cb_t) (struct ata_queued_cmd *qc);
typedef int (*ata_prereset_fn_t)(struct ata_port *ap, unsigned long deadline); typedef int (*ata_prereset_fn_t)(struct ata_link *link, unsigned long deadline);
typedef int (*ata_reset_fn_t)(struct ata_port *ap, unsigned int *classes, typedef int (*ata_reset_fn_t)(struct ata_link *link, unsigned int *classes,
unsigned long deadline); unsigned long deadline);
typedef void (*ata_postreset_fn_t)(struct ata_port *ap, unsigned int *classes); typedef void (*ata_postreset_fn_t)(struct ata_link *link, unsigned int *classes);
struct ata_ioports { struct ata_ioports {
void __iomem *cmd_addr; void __iomem *cmd_addr;
...@@ -706,14 +707,14 @@ extern int sata_link_debounce(struct ata_link *link, ...@@ -706,14 +707,14 @@ extern int sata_link_debounce(struct ata_link *link,
const unsigned long *params, unsigned long deadline); const unsigned long *params, unsigned long deadline);
extern int sata_link_resume(struct ata_link *link, const unsigned long *params, extern int sata_link_resume(struct ata_link *link, const unsigned long *params,
unsigned long deadline); unsigned long deadline);
extern int ata_std_prereset(struct ata_port *ap, unsigned long deadline); extern int ata_std_prereset(struct ata_link *link, unsigned long deadline);
extern int ata_std_softreset(struct ata_port *ap, unsigned int *classes, extern int ata_std_softreset(struct ata_link *link, unsigned int *classes,
unsigned long deadline); unsigned long deadline);
extern int sata_port_hardreset(struct ata_port *ap, const unsigned long *timing, extern int sata_link_hardreset(struct ata_link *link,
unsigned long deadline); const unsigned long *timing, unsigned long deadline);
extern int sata_std_hardreset(struct ata_port *ap, unsigned int *class, extern int sata_std_hardreset(struct ata_link *link, unsigned int *class,
unsigned long deadline); unsigned long deadline);
extern void ata_std_postreset(struct ata_port *ap, unsigned int *classes); extern void ata_std_postreset(struct ata_link *link, unsigned int *classes);
extern void ata_port_disable(struct ata_port *); extern void ata_port_disable(struct ata_port *);
extern void ata_std_ports(struct ata_ioports *ioaddr); extern void ata_std_ports(struct ata_ioports *ioaddr);
#ifdef CONFIG_PCI #ifdef CONFIG_PCI
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment