Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit baa8f3e9 authored by Bartlomiej Zolnierkiewicz's avatar Bartlomiej Zolnierkiewicz
Browse files

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: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent 8447d9d5
Loading
Loading
Loading
Loading
+1 −23
Original line number Diff line number Diff line
@@ -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;

+5 −20
Original line number Diff line number Diff line
@@ -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;
}

+24 −0
Original line number Diff line number Diff line
@@ -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)
{
+6 −19
Original line number Diff line number Diff line
@@ -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 @@ static ide_hwif_t *__devinit plat_ide_locate_hwif(void __iomem *base,
	}

	hwif_prop.hwif = hwif;
	hwif_prop.index = index;

	hwif_prop.index = hwif->index;
out:
	return hwif;
}

+2 −0
Original line number Diff line number Diff line
@@ -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 **);