Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=baa8f3e94bc7a7ba3650d80b67d54c3e08365dee
Commit:     baa8f3e94bc7a7ba3650d80b67d54c3e08365dee
Parent:     8447d9d52adbe4c653482bd0d5ccb9b5d26f9c9d
Author:     Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
AuthorDate: Sat Oct 20 00:32:31 2007 +0200
Committer:  Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
CommitDate: Sat Oct 20 00:32:31 2007 +0200

    ide: add ide_find_port() helper
    
    * Add ide_find_port() helper.
    
    * Convert icside, rapide and ide_platform host drivers to use it.
    
    Signed-off-by: Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
---
 drivers/ide/arm/icside.c          |   24 +-----------------------
 drivers/ide/arm/rapide.c          |   25 +++++--------------------
 drivers/ide/ide.c                 |   24 ++++++++++++++++++++++++
 drivers/ide/legacy/ide_platform.c |   25 ++++++-------------------
 include/linux/ide.h               |    2 ++
 5 files changed, 38 insertions(+), 62 deletions(-)

diff --git a/drivers/ide/arm/icside.c b/drivers/ide/arm/icside.c
index 6298932..fda3f87 100644
--- a/drivers/ide/arm/icside.c
+++ b/drivers/ide/arm/icside.c
@@ -438,35 +438,13 @@ static void icside_dma_init(ide_hwif_t *hwif)
 #define icside_dma_init(hwif)  (0)
 #endif
 
-static ide_hwif_t *icside_find_hwif(unsigned long dataport)
-{
-       ide_hwif_t *hwif;
-       int index;
-
-       for (index = 0; index < MAX_HWIFS; ++index) {
-               hwif = &ide_hwifs[index];
-               if (hwif->io_ports[IDE_DATA_OFFSET] == dataport)
-                       goto found;
-       }
-
-       for (index = 0; index < MAX_HWIFS; ++index) {
-               hwif = &ide_hwifs[index];
-               if (!hwif->io_ports[IDE_DATA_OFFSET])
-                       goto found;
-       }
-
-       hwif = NULL;
-found:
-       return hwif;
-}
-
 static ide_hwif_t *
 icside_setup(void __iomem *base, struct cardinfo *info, struct expansion_card 
*ec)
 {
        unsigned long port = (unsigned long)base + info->dataoffset;
        ide_hwif_t *hwif;
 
-       hwif = icside_find_hwif(port);
+       hwif = ide_find_port(port);
        if (hwif) {
                int i;
 
diff --git a/drivers/ide/arm/rapide.c b/drivers/ide/arm/rapide.c
index 6d2fe21..96cd3f5 100644
--- a/drivers/ide/arm/rapide.c
+++ b/drivers/ide/arm/rapide.c
@@ -13,31 +13,16 @@
 
 #include <asm/ecard.h>
 
-/*
- * Something like this really should be in generic code, but isn't.
- */
 static ide_hwif_t *
 rapide_locate_hwif(void __iomem *base, void __iomem *ctrl, unsigned int sz, 
int irq)
 {
        unsigned long port = (unsigned long)base;
-       ide_hwif_t *hwif;
-       int index, i;
-
-       for (index = 0; index < MAX_HWIFS; ++index) {
-               hwif = ide_hwifs + index;
-               if (hwif->io_ports[IDE_DATA_OFFSET] == port)
-                       goto found;
-       }
+       ide_hwif_t *hwif = ide_find_port(port);
+       int i;
 
-       for (index = 0; index < MAX_HWIFS; ++index) {
-               hwif = ide_hwifs + index;
-               if (hwif->io_ports[IDE_DATA_OFFSET] == 0)
-                       goto found;
-       }
-
-       return NULL;
+       if (hwif == NULL)
+               goto out;
 
- found:
        for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) {
                hwif->hw.io_ports[i] = port;
                hwif->io_ports[i] = port;
@@ -48,7 +33,7 @@ rapide_locate_hwif(void __iomem *base, void __iomem *ctrl, 
unsigned int sz, int
        hwif->hw.irq = hwif->irq = irq;
        hwif->mmio = 1;
        default_hwif_mmiops(hwif);
-
+out:
        return hwif;
 }
 
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c
index 1574136..ce6644f 100644
--- a/drivers/ide/ide.c
+++ b/drivers/ide/ide.c
@@ -265,6 +265,30 @@ static int ide_system_bus_speed(void)
        return system_bus_speed;
 }
 
+ide_hwif_t * ide_find_port(unsigned long base)
+{
+       ide_hwif_t *hwif;
+       int i;
+
+       for (i = 0; i < MAX_HWIFS; i++) {
+               hwif = &ide_hwifs[i];
+               if (hwif->io_ports[IDE_DATA_OFFSET] == base)
+                       goto found;
+       }
+
+       for (i = 0; i < MAX_HWIFS; i++) {
+               hwif = &ide_hwifs[i];
+               if (hwif->io_ports[IDE_DATA_OFFSET] == 0)
+                       goto found;
+       }
+
+       hwif = NULL;
+found:
+       return hwif;
+}
+
+EXPORT_SYMBOL_GPL(ide_find_port);
+
 static struct resource* hwif_request_region(ide_hwif_t *hwif,
                                            unsigned long addr, int num)
 {
diff --git a/drivers/ide/legacy/ide_platform.c 
b/drivers/ide/legacy/ide_platform.c
index 9a15391..d1e76fa 100644
--- a/drivers/ide/legacy/ide_platform.c
+++ b/drivers/ide/legacy/ide_platform.c
@@ -33,24 +33,11 @@ static ide_hwif_t *__devinit plat_ide_locate_hwif(void 
__iomem *base,
            int mmio)
 {
        unsigned long port = (unsigned long)base;
-       ide_hwif_t *hwif;
-       int index, i;
-
-       for (index = 0; index < MAX_HWIFS; ++index) {
-               hwif = ide_hwifs + index;
-               if (hwif->io_ports[IDE_DATA_OFFSET] == port)
-                       goto found;
-       }
-
-       for (index = 0; index < MAX_HWIFS; ++index) {
-               hwif = ide_hwifs + index;
-               if (hwif->io_ports[IDE_DATA_OFFSET] == 0)
-                       goto found;
-       }
+       ide_hwif_t *hwif = ide_find_port(port);
+       int i;
 
-       return NULL;
-
-found:
+       if (hwif == NULL)
+               goto out;
 
        hwif->hw.io_ports[IDE_DATA_OFFSET] = port;
 
@@ -73,8 +60,8 @@ found:
        }
 
        hwif_prop.hwif = hwif;
-       hwif_prop.index = index;
-
+       hwif_prop.index = hwif->index;
+out:
        return hwif;
 }
 
diff --git a/include/linux/ide.h b/include/linux/ide.h
index 7212fe4..9e1cf75 100644
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -223,6 +223,8 @@ typedef struct hw_regs_s {
        struct device   *dev;
 } hw_regs_t;
 
+struct hwif_s * ide_find_port(unsigned long);
+
 int ide_register_hw(hw_regs_t *, void (*)(struct hwif_s *), int,
                    struct hwif_s **);
 
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to