aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/sata_promise.c
diff options
context:
space:
mode:
authorAlbert Lee <albertcc@tw.ibm.com>2005-09-27 05:39:50 -0400
committerJeff Garzik <jgarzik@pobox.com>2005-09-28 12:07:13 -0400
commite50362eccd8809a224cda5f71714a088ba37b2ab (patch)
tree762b753691ef8c4645efaa677b32c57fd33ecbc0 /drivers/scsi/sata_promise.c
parent312f7da2824c82800ee78d6190f12854456957af (diff)
[PATCH] libata: interrupt driven pio for LLD
libata.h: libata-core: Add ATA_FLAG_PIO_POLLING flag for LLDs that expect interrupt for command completion only. sata_nv.c: sata_vsc.c: irq handler is wrapper around ata_host_intr(), can handle PIO interrupts. sata_promise.c: sata_sx4.c: sata_qstor.c: sata_mv.c: Private irq handler. Polling mode ATA_FLAG_PIO_POLLING used for compatibility. Signed-off-by: Albert Lee <albertcc@tw.ibm.com> Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
Diffstat (limited to 'drivers/scsi/sata_promise.c')
-rw-r--r--drivers/scsi/sata_promise.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/drivers/scsi/sata_promise.c b/drivers/scsi/sata_promise.c
index def7e0d9dacb..f67deb0a55c9 100644
--- a/drivers/scsi/sata_promise.c
+++ b/drivers/scsi/sata_promise.c
@@ -162,7 +162,8 @@ static struct ata_port_info pdc_port_info[] = {
162 { 162 {
163 .sht = &pdc_ata_sht, 163 .sht = &pdc_ata_sht,
164 .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | 164 .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
165 ATA_FLAG_SRST | ATA_FLAG_MMIO, 165 ATA_FLAG_SRST | ATA_FLAG_MMIO |
166 ATA_FLAG_PIO_POLLING,
166 .pio_mask = 0x1f, /* pio0-4 */ 167 .pio_mask = 0x1f, /* pio0-4 */
167 .mwdma_mask = 0x07, /* mwdma0-2 */ 168 .mwdma_mask = 0x07, /* mwdma0-2 */
168 .udma_mask = 0x7f, /* udma0-6 ; FIXME */ 169 .udma_mask = 0x7f, /* udma0-6 ; FIXME */
@@ -173,7 +174,8 @@ static struct ata_port_info pdc_port_info[] = {
173 { 174 {
174 .sht = &pdc_ata_sht, 175 .sht = &pdc_ata_sht,
175 .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | 176 .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
176 ATA_FLAG_SRST | ATA_FLAG_MMIO, 177 ATA_FLAG_SRST | ATA_FLAG_MMIO |
178 ATA_FLAG_PIO_POLLING,
177 .pio_mask = 0x1f, /* pio0-4 */ 179 .pio_mask = 0x1f, /* pio0-4 */
178 .mwdma_mask = 0x07, /* mwdma0-2 */ 180 .mwdma_mask = 0x07, /* mwdma0-2 */
179 .udma_mask = 0x7f, /* udma0-6 ; FIXME */ 181 .udma_mask = 0x7f, /* udma0-6 ; FIXME */
@@ -184,7 +186,8 @@ static struct ata_port_info pdc_port_info[] = {
184 { 186 {
185 .sht = &pdc_ata_sht, 187 .sht = &pdc_ata_sht,
186 .host_flags = ATA_FLAG_NO_LEGACY | ATA_FLAG_SRST | 188 .host_flags = ATA_FLAG_NO_LEGACY | ATA_FLAG_SRST |
187 ATA_FLAG_MMIO | ATA_FLAG_SLAVE_POSS, 189 ATA_FLAG_MMIO | ATA_FLAG_SLAVE_POSS |
190 ATA_FLAG_PIO_POLLING,
188 .pio_mask = 0x1f, /* pio0-4 */ 191 .pio_mask = 0x1f, /* pio0-4 */
189 .mwdma_mask = 0x07, /* mwdma0-2 */ 192 .mwdma_mask = 0x07, /* mwdma0-2 */
190 .udma_mask = 0x7f, /* udma0-6 ; FIXME */ 193 .udma_mask = 0x7f, /* udma0-6 ; FIXME */
@@ -493,11 +496,11 @@ static irqreturn_t pdc_interrupt (int irq, void *dev_instance, struct pt_regs *r
493 ap = host_set->ports[i]; 496 ap = host_set->ports[i];
494 tmp = mask & (1 << (i + 1)); 497 tmp = mask & (1 << (i + 1));
495 if (tmp && ap && 498 if (tmp && ap &&
496 !(ap->flags & (ATA_FLAG_PORT_DISABLED | ATA_FLAG_NOINTR))) { 499 !(ap->flags & ATA_FLAG_PORT_DISABLED)) {
497 struct ata_queued_cmd *qc; 500 struct ata_queued_cmd *qc;
498 501
499 qc = ata_qc_from_tag(ap, ap->active_tag); 502 qc = ata_qc_from_tag(ap, ap->active_tag);
500 if (qc && (!(qc->tf.ctl & ATA_NIEN))) 503 if (qc && (!(qc->tf.flags & ATA_TFLAG_POLLING)))
501 handled += pdc_host_intr(ap, qc); 504 handled += pdc_host_intr(ap, qc);
502 } 505 }
503 } 506 }