|
@@ -80,25 +80,25 @@ u8 ata_dummy_irq_on (struct ata_port *ap) { return 0; }
|
|
|
u8 ata_irq_ack(struct ata_port *ap, unsigned int chk_drq)
|
|
|
{
|
|
|
unsigned int bits = chk_drq ? ATA_BUSY | ATA_DRQ : ATA_BUSY;
|
|
|
- u8 host_stat, post_stat, status;
|
|
|
+ u8 host_stat = 0, post_stat = 0, status;
|
|
|
|
|
|
status = ata_busy_wait(ap, bits, 1000);
|
|
|
if (status & bits)
|
|
|
if (ata_msg_err(ap))
|
|
|
printk(KERN_ERR "abnormal status 0x%X\n", status);
|
|
|
|
|
|
- /* get controller status; clear intr, err bits */
|
|
|
- host_stat = ioread8(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
|
|
|
- iowrite8(host_stat | ATA_DMA_INTR | ATA_DMA_ERR,
|
|
|
- ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
|
|
|
-
|
|
|
- post_stat = ioread8(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
|
|
|
+ if (ap->ioaddr.bmdma_addr) {
|
|
|
+ /* get controller status; clear intr, err bits */
|
|
|
+ host_stat = ioread8(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
|
|
|
+ iowrite8(host_stat | ATA_DMA_INTR | ATA_DMA_ERR,
|
|
|
+ ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
|
|
|
|
|
|
+ post_stat = ioread8(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
|
|
|
+ }
|
|
|
if (ata_msg_intr(ap))
|
|
|
printk(KERN_INFO "%s: irq ack: host_stat 0x%X, new host_stat 0x%X, drv_stat 0x%X\n",
|
|
|
__FUNCTION__,
|
|
|
host_stat, post_stat, status);
|
|
|
-
|
|
|
return status;
|
|
|
}
|
|
|
|
|
@@ -516,6 +516,27 @@ void ata_bmdma_post_internal_cmd(struct ata_queued_cmd *qc)
|
|
|
ata_bmdma_stop(qc);
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * ata_sff_port_start - Set port up for dma.
|
|
|
+ * @ap: Port to initialize
|
|
|
+ *
|
|
|
+ * Called just after data structures for each port are
|
|
|
+ * initialized. Allocates space for PRD table if the device
|
|
|
+ * is DMA capable SFF.
|
|
|
+ *
|
|
|
+ * May be used as the port_start() entry in ata_port_operations.
|
|
|
+ *
|
|
|
+ * LOCKING:
|
|
|
+ * Inherited from caller.
|
|
|
+ */
|
|
|
+
|
|
|
+int ata_sff_port_start(struct ata_port *ap)
|
|
|
+{
|
|
|
+ if (ap->ioaddr.bmdma_addr)
|
|
|
+ return ata_port_start(ap);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
#ifdef CONFIG_PCI
|
|
|
|
|
|
static int ata_resources_present(struct pci_dev *pdev, int port)
|