diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-07-23 13:55:52 -0400 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-07-23 13:55:52 -0400 |
commit | 1f6d8a0fd8f6cc5ee2219a8cf9b2da16dfd67397 (patch) | |
tree | 4a858f4525ea67cd325ec370f4823adc1f7c0450 /drivers/ide/ide-iops.c | |
parent | b73c7ee25da6133f97f47ffd3557288417da7c76 (diff) |
ide: add ->read_altstatus method
* Remove ide_read_altstatus() inline helper.
* Add ->read_altstatus method for reading ATA Alternate Status
register and use it instead of ->INB.
There should be no functional changes caused by this patch.
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers/ide/ide-iops.c')
-rw-r--r-- | drivers/ide/ide-iops.c | 13 |
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 | ||
122 | static 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 | |||
122 | static u8 ide_read_sff_dma_status(ide_hwif_t *hwif) | 130 | static 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 */ |