summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2003-11-24 01:19:35 -0500
committerJeff Garzik <jgarzik@redhat.com>2003-11-24 01:19:35 -0500
commitb503ce39099aaf26e74a31644368d97c519f5a22 (patch)
treefdb6db32ef2950259e94bf28ccad8ad35b4ca143 /include/linux
parent2cb1b24d954be850cbbb41dccfd68819c893142d (diff)
[libata] Fix flush of Device Control register to device
Also add some ServerWorks-specific tweaks.
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/libata.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/include/linux/libata.h b/include/linux/libata.h
index e34b31950dd6..feabeae1cfc0 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -310,6 +310,7 @@ struct ata_port {
struct ata_ioports ioaddr; /* ATA cmd/ctl/dma register blocks */
u8 ctl; /* cache of ATA control register */
+ u8 last_ctl; /* Cache last written value */
unsigned int bus_state;
unsigned int port_state;
unsigned int pio_mask;
@@ -522,12 +523,12 @@ static inline u8 ata_irq_on(struct ata_port *ap)
struct ata_ioports *ioaddr = &ap->ioaddr;
ap->ctl &= ~ATA_NIEN;
+ ap->last_ctl = ap->ctl;
if (ap->flags & ATA_FLAG_MMIO)
writeb(ap->ctl, ioaddr->ctl_addr);
else
outb(ap->ctl, ioaddr->ctl_addr);
-
return ata_wait_idle(ap);
}