ide: add ->read_altstatus method
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Wed, 23 Jul 2008 17:55:52 +0000 (19:55 +0200)
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Wed, 23 Jul 2008 17:55:52 +0000 (19:55 +0200)
* 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>
drivers/ide/ide-iops.c
drivers/ide/ide-probe.c
drivers/ide/pci/scc_pata.c
include/linux/ide.h

index 086eceaeeafdc8cf8cb7faa82457c5968a1e8292..e106954e13f92b139cc2a2f2681a69d50f6d8720 100644 (file)
@@ -119,6 +119,14 @@ static u8 ide_read_status(ide_hwif_t *hwif)
                return inb(hwif->io_ports.status_addr);
 }
 
+static u8 ide_read_altstatus(ide_hwif_t *hwif)
+{
+       if (hwif->host_flags & IDE_HFLAG_MMIO)
+               return readb((void __iomem *)hwif->io_ports.ctl_addr);
+       else
+               return inb(hwif->io_ports.ctl_addr);
+}
+
 static u8 ide_read_sff_dma_status(ide_hwif_t *hwif)
 {
        if (hwif->host_flags & IDE_HFLAG_MMIO)
@@ -349,6 +357,7 @@ void default_hwif_transport(ide_hwif_t *hwif)
 {
        hwif->exec_command        = ide_exec_command;
        hwif->read_status         = ide_read_status;
+       hwif->read_altstatus      = ide_read_altstatus;
        hwif->read_sff_dma_status = ide_read_sff_dma_status;
 
        hwif->tf_load     = ide_tf_load;
@@ -511,7 +520,7 @@ int drive_is_ready (ide_drive_t *drive)
         * about possible isa-pnp and pci-pnp issues yet.
         */
        if (hwif->io_ports.ctl_addr)
-               stat = ide_read_altstatus(drive);
+               stat = hwif->read_altstatus(hwif);
        else
                /* Note: this may clear a pending IRQ!! */
                stat = hwif->read_status(hwif);
@@ -724,7 +733,7 @@ int ide_driveid_update(ide_drive_t *drive)
                }
 
                msleep(50);     /* give drive a breather */
-               stat = ide_read_altstatus(drive);
+               stat = hwif->read_altstatus(hwif);
        } while (stat & BUSY_STAT);
 
        msleep(50);     /* wait for IRQ and DRQ_STAT */
index c42fcfedcbf683cbd64c48e19f8353afaf7d9626..fe14d576ef0169b3ecec41181d75987f21fbff3f 100644 (file)
@@ -275,7 +275,7 @@ static int actual_try_to_identify (ide_drive_t *drive, u8 cmd)
        msleep(50);
 
        if (io_ports->ctl_addr) {
-               a = ide_read_altstatus(drive);
+               a = hwif->read_altstatus(hwif);
                s = hwif->read_status(hwif);
                if ((a ^ s) & ~INDEX_STAT)
                        /* ancient Seagate drives, broken interfaces */
@@ -306,7 +306,7 @@ static int actual_try_to_identify (ide_drive_t *drive, u8 cmd)
                }
                /* give drive a breather */
                msleep(50);
-               s = use_altstatus ? ide_read_altstatus(drive)
+               s = use_altstatus ? hwif->read_altstatus(hwif)
                                  : hwif->read_status(hwif);
        } while (s & BUSY_STAT);
 
index 3d72a5e03f3d94b3379272a8fa58b0fb11be10a4..a89dc4780786a9a47f160c42ca691e3a9a3ad42b 100644 (file)
@@ -139,6 +139,11 @@ static u8 scc_read_status(ide_hwif_t *hwif)
        return (u8)in_be32((void *)hwif->io_ports.status_addr);
 }
 
+static u8 scc_read_altstatus(ide_hwif_t *hwif)
+{
+       return (u8)in_be32((void *)hwif->io_ports.ctl_addr);
+}
+
 static u8 scc_read_sff_dma_status(ide_hwif_t *hwif)
 {
        return (u8)in_be32((void *)(hwif->dma_base + 4));
@@ -794,6 +799,7 @@ static void __devinit init_mmio_iops_scc(ide_hwif_t *hwif)
 
        hwif->exec_command        = scc_exec_command;
        hwif->read_status         = scc_read_status;
+       hwif->read_altstatus      = scc_read_altstatus;
        hwif->read_sff_dma_status = scc_read_sff_dma_status;
 
        hwif->tf_load = scc_tf_load;
index a23ae25d7da8863b0e4527c930bee4114fa7ea72..e5fa5e868d67d4952d25b15301144cfe71069289 100644 (file)
@@ -491,6 +491,7 @@ typedef struct hwif_s {
 
        void    (*exec_command)(struct hwif_s *, u8);
        u8      (*read_status)(struct hwif_s *);
+       u8      (*read_altstatus)(struct hwif_s *);
        u8      (*read_sff_dma_status)(struct hwif_s *);
 
        void (*tf_load)(ide_drive_t *, struct ide_task_s *);
@@ -1363,13 +1364,6 @@ static inline void ide_set_irq(ide_drive_t *drive, int on)
                       hwif->io_ports.ctl_addr);
 }
 
-static inline u8 ide_read_altstatus(ide_drive_t *drive)
-{
-       ide_hwif_t *hwif = drive->hwif;
-
-       return hwif->INB(hwif->io_ports.ctl_addr);
-}
-
 static inline u8 ide_read_error(ide_drive_t *drive)
 {
        ide_hwif_t *hwif = drive->hwif;