|
@@ -2664,8 +2664,7 @@ void ata_bus_reset(struct ata_port *ap)
|
|
ap->device[1].class = ata_dev_try_classify(ap, 1, &err);
|
|
ap->device[1].class = ata_dev_try_classify(ap, 1, &err);
|
|
|
|
|
|
/* re-enable interrupts */
|
|
/* re-enable interrupts */
|
|
- if (ap->ioaddr.ctl_addr) /* FIXME: hack. create a hook instead */
|
|
|
|
- ata_irq_on(ap);
|
|
|
|
|
|
+ ap->ops->irq_on(ap);
|
|
|
|
|
|
/* is double-select really necessary? */
|
|
/* is double-select really necessary? */
|
|
if (ap->device[1].class != ATA_DEV_NONE)
|
|
if (ap->device[1].class != ATA_DEV_NONE)
|
|
@@ -3054,11 +3053,8 @@ void ata_std_postreset(struct ata_port *ap, unsigned int *classes)
|
|
sata_scr_write(ap, SCR_ERROR, serror);
|
|
sata_scr_write(ap, SCR_ERROR, serror);
|
|
|
|
|
|
/* re-enable interrupts */
|
|
/* re-enable interrupts */
|
|
- if (!ap->ops->error_handler) {
|
|
|
|
- /* FIXME: hack. create a hook instead */
|
|
|
|
- if (ap->ioaddr.ctl_addr)
|
|
|
|
- ata_irq_on(ap);
|
|
|
|
- }
|
|
|
|
|
|
+ if (!ap->ops->error_handler)
|
|
|
|
+ ap->ops->irq_on(ap);
|
|
|
|
|
|
/* is double-select really necessary? */
|
|
/* is double-select really necessary? */
|
|
if (classes[0] != ATA_DEV_NONE)
|
|
if (classes[0] != ATA_DEV_NONE)
|
|
@@ -4169,7 +4165,7 @@ static void ata_hsm_qc_complete(struct ata_queued_cmd *qc, int in_wq)
|
|
qc = ata_qc_from_tag(ap, qc->tag);
|
|
qc = ata_qc_from_tag(ap, qc->tag);
|
|
if (qc) {
|
|
if (qc) {
|
|
if (likely(!(qc->err_mask & AC_ERR_HSM))) {
|
|
if (likely(!(qc->err_mask & AC_ERR_HSM))) {
|
|
- ata_irq_on(ap);
|
|
|
|
|
|
+ ap->ops->irq_on(ap);
|
|
ata_qc_complete(qc);
|
|
ata_qc_complete(qc);
|
|
} else
|
|
} else
|
|
ata_port_freeze(ap);
|
|
ata_port_freeze(ap);
|
|
@@ -4185,7 +4181,7 @@ static void ata_hsm_qc_complete(struct ata_queued_cmd *qc, int in_wq)
|
|
} else {
|
|
} else {
|
|
if (in_wq) {
|
|
if (in_wq) {
|
|
spin_lock_irqsave(ap->lock, flags);
|
|
spin_lock_irqsave(ap->lock, flags);
|
|
- ata_irq_on(ap);
|
|
|
|
|
|
+ ap->ops->irq_on(ap);
|
|
ata_qc_complete(qc);
|
|
ata_qc_complete(qc);
|
|
spin_unlock_irqrestore(ap->lock, flags);
|
|
spin_unlock_irqrestore(ap->lock, flags);
|
|
} else
|
|
} else
|
|
@@ -5010,7 +5006,7 @@ idle_irq:
|
|
|
|
|
|
#ifdef ATA_IRQ_TRAP
|
|
#ifdef ATA_IRQ_TRAP
|
|
if ((ap->stats.idle_irq % 1000) == 0) {
|
|
if ((ap->stats.idle_irq % 1000) == 0) {
|
|
- ata_irq_ack(ap, 0); /* debug trap */
|
|
|
|
|
|
+ ap->ops->irq_ack(ap, 0); /* debug trap */
|
|
ata_port_printk(ap, KERN_WARNING, "irq trap\n");
|
|
ata_port_printk(ap, KERN_WARNING, "irq trap\n");
|
|
return 1;
|
|
return 1;
|
|
}
|
|
}
|
|
@@ -6271,3 +6267,7 @@ EXPORT_SYMBOL_GPL(ata_eh_thaw_port);
|
|
EXPORT_SYMBOL_GPL(ata_eh_qc_complete);
|
|
EXPORT_SYMBOL_GPL(ata_eh_qc_complete);
|
|
EXPORT_SYMBOL_GPL(ata_eh_qc_retry);
|
|
EXPORT_SYMBOL_GPL(ata_eh_qc_retry);
|
|
EXPORT_SYMBOL_GPL(ata_do_eh);
|
|
EXPORT_SYMBOL_GPL(ata_do_eh);
|
|
|
|
+EXPORT_SYMBOL_GPL(ata_irq_on);
|
|
|
|
+EXPORT_SYMBOL_GPL(ata_dummy_irq_on);
|
|
|
|
+EXPORT_SYMBOL_GPL(ata_irq_ack);
|
|
|
|
+EXPORT_SYMBOL_GPL(ata_dummy_irq_ack);
|