ide: add ide_find_port() helper
PATCH 1/3 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(-)
drivers/ide/arm/icside.c +1 -23
@@ -438,35 +438,13 @@ static void icside_dma_init(ide_hwif_t *#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;
drivers/ide/arm/rapide.c +5 -20
@@ -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, v hwif->hw.irq = hwif->irq = irq; hwif->mmio =1 ;default_hwif_mmiops (hwif); - +out:return hwif; }
drivers/ide/ide.c +24 -0
@@ -267,6 +267,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) {
drivers/ide/legacy/ide_platform.c +6 -19
@@ -33,24 +33,11 @@ static ide_hwif_t *__devinit plat_ide_lo 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; }
include/linux/ide.h +2 -0
@@ -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 **);