aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/ide-iops.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ide/ide-iops.c')
-rw-r--r--drivers/ide/ide-iops.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c
index 086eceaeeafd..e106954e13f9 100644
--- a/drivers/ide/ide-iops.c
+++ b/drivers/ide/ide-iops.c
@@ -119,6 +119,14 @@ static u8 ide_read_status(ide_hwif_t *hwif)
119 return inb(hwif->io_ports.status_addr); 119 return inb(hwif->io_ports.status_addr);
120} 120}
121 121
122static u8 ide_read_altstatus(ide_hwif_t *hwif)
123{
124 if (hwif->host_flags & IDE_HFLAG_MMIO)
125 return readb((void __iomem *)hwif->io_ports.ctl_addr);
126 else
127 return inb(hwif->io_ports.ctl_addr);
128}
129
122static u8 ide_read_sff_dma_status(ide_hwif_t *hwif) 130static u8 ide_read_sff_dma_status(ide_hwif_t *hwif)
123{ 131{
124 if (hwif->host_flags & IDE_HFLAG_MMIO) 132 if (hwif->host_flags & IDE_HFLAG_MMIO)
@@ -349,6 +357,7 @@ void default_hwif_transport(ide_hwif_t *hwif)
349{ 357{
350 hwif->exec_command = ide_exec_command; 358 hwif->exec_command = ide_exec_command;
351 hwif->read_status = ide_read_status; 359 hwif->read_status = ide_read_status;
360 hwif->read_altstatus = ide_read_altstatus;
352 hwif->read_sff_dma_status = ide_read_sff_dma_status; 361 hwif->read_sff_dma_status = ide_read_sff_dma_status;
353 362
354 hwif->tf_load = ide_tf_load; 363 hwif->tf_load = ide_tf_load;
@@ -511,7 +520,7 @@ int drive_is_ready (ide_drive_t *drive)
511 * about possible isa-pnp and pci-pnp issues yet. 520 * about possible isa-pnp and pci-pnp issues yet.
512 */ 521 */
513 if (hwif->io_ports.ctl_addr) 522 if (hwif->io_ports.ctl_addr)
514 stat = ide_read_altstatus(drive); 523 stat = hwif->read_altstatus(hwif);
515 else 524 else
516 /* Note: this may clear a pending IRQ!! */ 525 /* Note: this may clear a pending IRQ!! */
517 stat = hwif->read_status(hwif); 526 stat = hwif->read_status(hwif);
@@ -724,7 +733,7 @@ int ide_driveid_update(ide_drive_t *drive)
724 } 733 }
725 734
726 msleep(50); /* give drive a breather */ 735 msleep(50); /* give drive a breather */
727 stat = ide_read_altstatus(drive); 736 stat = hwif->read_altstatus(hwif);
728 } while (stat & BUSY_STAT); 737 } while (stat & BUSY_STAT);
729 738
730 msleep(50); /* wait for IRQ and DRQ_STAT */ 739 msleep(50); /* wait for IRQ and DRQ_STAT */