diff mbox

[2/3] g_NCR5380: Reduce overrides[] from array to struct

Message ID 1475002825-18132-3-git-send-email-linux@rainbow-software.org (mailing list archive)
State Accepted, archived
Headers show

Commit Message

Ondrej Zary Sept. 27, 2016, 7 p.m. UTC
Remove compile-time card type definition GENERIC_NCR5380_OVERRIDE.
Then remove all code iterating the overrides[] array and reduce it to
struct card.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/g_NCR5380.c |  351 ++++++++++++++++++++++------------------------
 1 file changed, 167 insertions(+), 184 deletions(-)

Comments

Finn Thain Sept. 28, 2016, 10:57 p.m. UTC | #1
Acked-by: Finn Thain <fthain@telegraphics.com.au>

On Tue, 27 Sep 2016, Ondrej Zary wrote:

> Remove compile-time card type definition GENERIC_NCR5380_OVERRIDE.
> Then remove all code iterating the overrides[] array and reduce it to
> struct card.
> 
> Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
> ---
>  drivers/scsi/g_NCR5380.c |  351 ++++++++++++++++++++++------------------------
>  1 file changed, 167 insertions(+), 184 deletions(-)
> 
> diff --git a/drivers/scsi/g_NCR5380.c b/drivers/scsi/g_NCR5380.c
> index 7e50b44e..5162de6 100644
> --- a/drivers/scsi/g_NCR5380.c
> +++ b/drivers/scsi/g_NCR5380.c
> @@ -42,19 +42,12 @@ static int ncr_53c400a;
>  static int dtc_3181e;
>  static int hp_c2502;
>  
> -static struct override {
> +static struct card {
>  	NCR5380_map_type NCR5380_map_name;
>  	int irq;
>  	int dma;
>  	int board;		/* Use NCR53c400, Ricoh, etc. extensions ? */
> -} overrides
> -#ifdef GENERIC_NCR5380_OVERRIDE
> -[] __initdata = GENERIC_NCR5380_OVERRIDE;
> -#else
> -[1] __initdata = { { 0,},};
> -#endif
> -
> -#define NO_OVERRIDES ARRAY_SIZE(overrides)
> +} card;
>  
>  #ifndef SCSI_G_NCR5380_MEM
>  /*
> @@ -85,16 +78,13 @@ static void magic_configure(int idx, u8 irq, u8 magic[])
>   *	@tpnt: the scsi template
>   *
>   *	Scan for the present of NCR5380, NCR53C400, NCR53C400A, DTC3181E
> - *	and DTC436(ISAPnP) controllers. If overrides have been set we use
> - *	them.
> + *	and DTC436(ISAPnP) controllers.
>   *
>   *	Locks: none
>   */
>  
>  static int __init generic_NCR5380_detect(struct scsi_host_template *tpnt)
>  {
> -	static int current_override;
> -	int count;
>  	unsigned int *ports;
>  	u8 *magic = NULL;
>  #ifndef SCSI_G_NCR5380_MEM
> @@ -124,28 +114,25 @@ static int __init generic_NCR5380_detect(struct scsi_host_template *tpnt)
>  #endif
>  
>  	if (ncr_irq)
> -		overrides[0].irq = ncr_irq;
> +		card.irq = ncr_irq;
>  	if (ncr_dma)
> -		overrides[0].dma = ncr_dma;
> +		card.dma = ncr_dma;
>  	if (ncr_addr)
> -		overrides[0].NCR5380_map_name = (NCR5380_map_type) ncr_addr;
> +		card.NCR5380_map_name = (NCR5380_map_type) ncr_addr;
>  	if (ncr_5380)
> -		overrides[0].board = BOARD_NCR5380;
> +		card.board = BOARD_NCR5380;
>  	else if (ncr_53c400)
> -		overrides[0].board = BOARD_NCR53C400;
> +		card.board = BOARD_NCR53C400;
>  	else if (ncr_53c400a)
> -		overrides[0].board = BOARD_NCR53C400A;
> +		card.board = BOARD_NCR53C400A;
>  	else if (dtc_3181e)
> -		overrides[0].board = BOARD_DTC3181E;
> +		card.board = BOARD_DTC3181E;
>  	else if (hp_c2502)
> -		overrides[0].board = BOARD_HP_C2502;
> +		card.board = BOARD_HP_C2502;
>  #ifndef SCSI_G_NCR5380_MEM
> -	if (!current_override && isapnp_present()) {
> +	if (isapnp_present()) {
>  		struct pnp_dev *dev = NULL;
> -		count = 0;
>  		while ((dev = pnp_find_dev(NULL, ISAPNP_VENDOR('D', 'T', 'C'), ISAPNP_FUNCTION(0x436e), dev))) {
> -			if (count >= NO_OVERRIDES)
> -				break;
>  			if (pnp_device_attach(dev) < 0)
>  				continue;
>  			if (pnp_activate_dev(dev) < 0) {
> @@ -159,202 +146,198 @@ static int __init generic_NCR5380_detect(struct scsi_host_template *tpnt)
>  				continue;
>  			}
>  			if (pnp_irq_valid(dev, 0))
> -				overrides[count].irq = pnp_irq(dev, 0);
> +				card.irq = pnp_irq(dev, 0);
>  			else
> -				overrides[count].irq = NO_IRQ;
> +				card.irq = NO_IRQ;
>  			if (pnp_dma_valid(dev, 0))
> -				overrides[count].dma = pnp_dma(dev, 0);
> +				card.dma = pnp_dma(dev, 0);
>  			else
> -				overrides[count].dma = DMA_NONE;
> -			overrides[count].NCR5380_map_name = (NCR5380_map_type) pnp_port_start(dev, 0);
> -			overrides[count].board = BOARD_DTC3181E;
> -			count++;
> +				card.dma = DMA_NONE;
> +			card.NCR5380_map_name = (NCR5380_map_type) pnp_port_start(dev, 0);
> +			card.board = BOARD_DTC3181E;
> +			break;
>  		}
>  	}
>  #endif
>  
> -	for (count = 0; current_override < NO_OVERRIDES; ++current_override) {
> -		if (!(overrides[current_override].NCR5380_map_name))
> -			continue;
> +	if (!(card.NCR5380_map_name))
> +		return 0;
>  
> -		ports = NULL;
> -		flags = 0;
> -		switch (overrides[current_override].board) {
> -		case BOARD_NCR5380:
> -			flags = FLAG_NO_PSEUDO_DMA | FLAG_DMA_FIXUP;
> -			break;
> -		case BOARD_NCR53C400A:
> -			ports = ncr_53c400a_ports;
> -			magic = ncr_53c400a_magic;
> -			break;
> -		case BOARD_HP_C2502:
> -			ports = ncr_53c400a_ports;
> -			magic = hp_c2502_magic;
> -			break;
> -		case BOARD_DTC3181E:
> -			ports = dtc_3181e_ports;
> -			magic = ncr_53c400a_magic;
> -			break;
> -		}
> +	ports = NULL;
> +	flags = 0;
> +	switch (card.board) {
> +	case BOARD_NCR5380:
> +		flags = FLAG_NO_PSEUDO_DMA | FLAG_DMA_FIXUP;
> +		break;
> +	case BOARD_NCR53C400A:
> +		ports = ncr_53c400a_ports;
> +		magic = ncr_53c400a_magic;
> +		break;
> +	case BOARD_HP_C2502:
> +		ports = ncr_53c400a_ports;
> +		magic = hp_c2502_magic;
> +		break;
> +	case BOARD_DTC3181E:
> +		ports = dtc_3181e_ports;
> +		magic = ncr_53c400a_magic;
> +		break;
> +	}
>  
>  #ifndef SCSI_G_NCR5380_MEM
> -		if (ports && magic) {
> -			/* wakeup sequence for the NCR53C400A and DTC3181E */
> -
> -			/* Disable the adapter and look for a free io port */
> -			magic_configure(-1, 0, magic);
> -
> -			region_size = 16;
> -
> -			if (overrides[current_override].NCR5380_map_name != PORT_AUTO)
> -				for (i = 0; ports[i]; i++) {
> -					if (!request_region(ports[i], region_size, "ncr53c80"))
> -						continue;
> -					if (overrides[current_override].NCR5380_map_name == ports[i])
> -						break;
> -					release_region(ports[i], region_size);
> -			} else
> -				for (i = 0; ports[i]; i++) {
> -					if (!request_region(ports[i], region_size, "ncr53c80"))
> -						continue;
> -					if (inb(ports[i]) == 0xff)
> -						break;
> -					release_region(ports[i], region_size);
> -				}
> -			if (ports[i]) {
> -				/* At this point we have our region reserved */
> -				magic_configure(i, 0, magic); /* no IRQ yet */
> -				outb(0xc0, ports[i] + 9);
> -				if (inb(ports[i] + 9) != 0x80)
> +	if (ports && magic) {
> +		/* wakeup sequence for the NCR53C400A and DTC3181E */
> +
> +		/* Disable the adapter and look for a free io port */
> +		magic_configure(-1, 0, magic);
> +
> +		region_size = 16;
> +
> +		if (card.NCR5380_map_name != PORT_AUTO)
> +			for (i = 0; ports[i]; i++) {
> +				if (!request_region(ports[i], region_size, "ncr53c80"))
>  					continue;
> -				overrides[current_override].NCR5380_map_name = ports[i];
> -				port_idx = i;
> -			} else
> -				continue;
> -		}
> -		else
> -		{
> -			/* Not a 53C400A style setup - just grab */
> -			region_size = 8;
> -			if (!request_region(overrides[current_override].NCR5380_map_name,
> -			                    region_size, "ncr5380"))
> -				continue;
> -		}
> +				if (card.NCR5380_map_name == ports[i])
> +					break;
> +				release_region(ports[i], region_size);
> +		} else
> +			for (i = 0; ports[i]; i++) {
> +				if (!request_region(ports[i], region_size, "ncr53c80"))
> +					continue;
> +				if (inb(ports[i]) == 0xff)
> +					break;
> +				release_region(ports[i], region_size);
> +			}
> +		if (ports[i]) {
> +			/* At this point we have our region reserved */
> +			magic_configure(i, 0, magic); /* no IRQ yet */
> +			outb(0xc0, ports[i] + 9);
> +			if (inb(ports[i] + 9) != 0x80)
> +				return 0;
> +			card.NCR5380_map_name = ports[i];
> +			port_idx = i;
> +		} else
> +			return 0;
> +	}
> +	else
> +	{
> +		/* Not a 53C400A style setup - just grab */
> +		region_size = 8;
> +		if (!request_region(card.NCR5380_map_name,
> +		                    region_size, "ncr5380"))
> +			return 0;
> +	}
>  #else
> -		base = overrides[current_override].NCR5380_map_name;
> -		iomem_size = NCR53C400_region_size;
> -		if (!request_mem_region(base, iomem_size, "ncr5380"))
> -			continue;
> -		iomem = ioremap(base, iomem_size);
> -		if (!iomem) {
> -			release_mem_region(base, iomem_size);
> -			continue;
> -		}
> +	base = card.NCR5380_map_name;
> +	iomem_size = NCR53C400_region_size;
> +	if (!request_mem_region(base, iomem_size, "ncr5380"))
> +		return 0;
> +	iomem = ioremap(base, iomem_size);
> +	if (!iomem) {
> +		release_mem_region(base, iomem_size);
> +		return 0;
> +	}
>  #endif
> -		instance = scsi_register(tpnt, sizeof(struct NCR5380_hostdata));
> -		if (instance == NULL)
> -			goto out_release;
> -		hostdata = shost_priv(instance);
> +	instance = scsi_register(tpnt, sizeof(struct NCR5380_hostdata));
> +	if (instance == NULL)
> +		goto out_release;
> +	hostdata = shost_priv(instance);
>  
>  #ifndef SCSI_G_NCR5380_MEM
> -		instance->io_port = overrides[current_override].NCR5380_map_name;
> -		instance->n_io_port = region_size;
> -		hostdata->io_width = 1; /* 8-bit PDMA by default */
> -
> -		/*
> -		 * On NCR53C400 boards, NCR5380 registers are mapped 8 past
> -		 * the base address.
> -		 */
> -		switch (overrides[current_override].board) {
> -		case BOARD_NCR53C400:
> -			instance->io_port += 8;
> -			hostdata->c400_ctl_status = 0;
> -			hostdata->c400_blk_cnt = 1;
> -			hostdata->c400_host_buf = 4;
> -			break;
> -		case BOARD_DTC3181E:
> -			hostdata->io_width = 2;	/* 16-bit PDMA */
> -			/* fall through */
> -		case BOARD_NCR53C400A:
> -		case BOARD_HP_C2502:
> -			hostdata->c400_ctl_status = 9;
> -			hostdata->c400_blk_cnt = 10;
> -			hostdata->c400_host_buf = 8;
> -			break;
> -		}
> +	instance->io_port = card.NCR5380_map_name;
> +	instance->n_io_port = region_size;
> +	hostdata->io_width = 1; /* 8-bit PDMA by default */
> +
> +	/*
> +	 * On NCR53C400 boards, NCR5380 registers are mapped 8 past
> +	 * the base address.
> +	 */
> +	switch (card.board) {
> +	case BOARD_NCR53C400:
> +		instance->io_port += 8;
> +		hostdata->c400_ctl_status = 0;
> +		hostdata->c400_blk_cnt = 1;
> +		hostdata->c400_host_buf = 4;
> +		break;
> +	case BOARD_DTC3181E:
> +		hostdata->io_width = 2;	/* 16-bit PDMA */
> +		/* fall through */
> +	case BOARD_NCR53C400A:
> +	case BOARD_HP_C2502:
> +		hostdata->c400_ctl_status = 9;
> +		hostdata->c400_blk_cnt = 10;
> +		hostdata->c400_host_buf = 8;
> +		break;
> +	}
>  #else
> -		instance->base = overrides[current_override].NCR5380_map_name;
> -		hostdata->iomem = iomem;
> -		hostdata->iomem_size = iomem_size;
> -		switch (overrides[current_override].board) {
> -		case BOARD_NCR53C400:
> -			hostdata->c400_ctl_status = 0x100;
> -			hostdata->c400_blk_cnt = 0x101;
> -			hostdata->c400_host_buf = 0x104;
> -			break;
> -		case BOARD_DTC3181E:
> -		case BOARD_NCR53C400A:
> -		case BOARD_HP_C2502:
> -			pr_err(DRV_MODULE_NAME ": unknown register offsets\n");
> -			goto out_unregister;
> -		}
> +	instance->base = card.NCR5380_map_name;
> +	hostdata->iomem = iomem;
> +	hostdata->iomem_size = iomem_size;
> +	switch (card.board) {
> +	case BOARD_NCR53C400:
> +		hostdata->c400_ctl_status = 0x100;
> +		hostdata->c400_blk_cnt = 0x101;
> +		hostdata->c400_host_buf = 0x104;
> +		break;
> +	case BOARD_DTC3181E:
> +	case BOARD_NCR53C400A:
> +	case BOARD_HP_C2502:
> +		pr_err(DRV_MODULE_NAME ": unknown register offsets\n");
> +		goto out_unregister;
> +	}
>  #endif
>  
> -		if (NCR5380_init(instance, flags | FLAG_LATE_DMA_SETUP))
> -			goto out_unregister;
> +	if (NCR5380_init(instance, flags | FLAG_LATE_DMA_SETUP))
> +		goto out_unregister;
>  
> -		switch (overrides[current_override].board) {
> -		case BOARD_NCR53C400:
> -		case BOARD_DTC3181E:
> -		case BOARD_NCR53C400A:
> -		case BOARD_HP_C2502:
> -			NCR5380_write(hostdata->c400_ctl_status, CSR_BASE);
> -		}
> +	switch (card.board) {
> +	case BOARD_NCR53C400:
> +	case BOARD_DTC3181E:
> +	case BOARD_NCR53C400A:
> +	case BOARD_HP_C2502:
> +		NCR5380_write(hostdata->c400_ctl_status, CSR_BASE);
> +	}
>  
> -		NCR5380_maybe_reset_bus(instance);
> +	NCR5380_maybe_reset_bus(instance);
>  
> -		if (overrides[current_override].irq != IRQ_AUTO)
> -			instance->irq = overrides[current_override].irq;
> -		else
> -			instance->irq = NCR5380_probe_irq(instance, 0xffff);
> +	if (card.irq != IRQ_AUTO)
> +		instance->irq = card.irq;
> +	else
> +		instance->irq = NCR5380_probe_irq(instance, 0xffff);
>  
> -		/* Compatibility with documented NCR5380 kernel parameters */
> -		if (instance->irq == 255)
> -			instance->irq = NO_IRQ;
> +	/* Compatibility with documented NCR5380 kernel parameters */
> +	if (instance->irq == 255)
> +		instance->irq = NO_IRQ;
>  
> -		if (instance->irq != NO_IRQ) {
> +	if (instance->irq != NO_IRQ) {
>  #ifndef SCSI_G_NCR5380_MEM
> -			/* set IRQ for HP C2502 */
> -			if (overrides[current_override].board == BOARD_HP_C2502)
> -				magic_configure(port_idx, instance->irq, magic);
> +		/* set IRQ for HP C2502 */
> +		if (card.board == BOARD_HP_C2502)
> +			magic_configure(port_idx, instance->irq, magic);
>  #endif
> -			if (request_irq(instance->irq, generic_NCR5380_intr,
> -					0, "NCR5380", instance)) {
> -				printk(KERN_WARNING "scsi%d : IRQ%d not free, interrupts disabled\n", instance->host_no, instance->irq);
> -				instance->irq = NO_IRQ;
> -			}
> -		}
> -
> -		if (instance->irq == NO_IRQ) {
> -			printk(KERN_INFO "scsi%d : interrupts not enabled. for better interactive performance,\n", instance->host_no);
> -			printk(KERN_INFO "scsi%d : please jumper the board for a free IRQ.\n", instance->host_no);
> +		if (request_irq(instance->irq, generic_NCR5380_intr,
> +				0, "NCR5380", instance)) {
> +			printk(KERN_WARNING "scsi%d : IRQ%d not free, interrupts disabled\n", instance->host_no, instance->irq);
> +			instance->irq = NO_IRQ;
>  		}
> +	}
>  
> -		++current_override;
> -		++count;
> +	if (instance->irq == NO_IRQ) {
> +		printk(KERN_INFO "scsi%d : interrupts not enabled. for better interactive performance,\n", instance->host_no);
> +		printk(KERN_INFO "scsi%d : please jumper the board for a free IRQ.\n", instance->host_no);
>  	}
> -	return count;
> +
> +	return 1;
>  
>  out_unregister:
>  	scsi_unregister(instance);
>  out_release:
>  #ifndef SCSI_G_NCR5380_MEM
> -	release_region(overrides[current_override].NCR5380_map_name, region_size);
> +	release_region(card.NCR5380_map_name, region_size);
>  #else
>  	iounmap(iomem);
>  	release_mem_region(base, iomem_size);
>  #endif
> -	return count;
> +	return 0;
>  }
>  
>  /**
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/scsi/g_NCR5380.c b/drivers/scsi/g_NCR5380.c
index 7e50b44e..5162de6 100644
--- a/drivers/scsi/g_NCR5380.c
+++ b/drivers/scsi/g_NCR5380.c
@@ -42,19 +42,12 @@  static int ncr_53c400a;
 static int dtc_3181e;
 static int hp_c2502;
 
-static struct override {
+static struct card {
 	NCR5380_map_type NCR5380_map_name;
 	int irq;
 	int dma;
 	int board;		/* Use NCR53c400, Ricoh, etc. extensions ? */
-} overrides
-#ifdef GENERIC_NCR5380_OVERRIDE
-[] __initdata = GENERIC_NCR5380_OVERRIDE;
-#else
-[1] __initdata = { { 0,},};
-#endif
-
-#define NO_OVERRIDES ARRAY_SIZE(overrides)
+} card;
 
 #ifndef SCSI_G_NCR5380_MEM
 /*
@@ -85,16 +78,13 @@  static void magic_configure(int idx, u8 irq, u8 magic[])
  *	@tpnt: the scsi template
  *
  *	Scan for the present of NCR5380, NCR53C400, NCR53C400A, DTC3181E
- *	and DTC436(ISAPnP) controllers. If overrides have been set we use
- *	them.
+ *	and DTC436(ISAPnP) controllers.
  *
  *	Locks: none
  */
 
 static int __init generic_NCR5380_detect(struct scsi_host_template *tpnt)
 {
-	static int current_override;
-	int count;
 	unsigned int *ports;
 	u8 *magic = NULL;
 #ifndef SCSI_G_NCR5380_MEM
@@ -124,28 +114,25 @@  static int __init generic_NCR5380_detect(struct scsi_host_template *tpnt)
 #endif
 
 	if (ncr_irq)
-		overrides[0].irq = ncr_irq;
+		card.irq = ncr_irq;
 	if (ncr_dma)
-		overrides[0].dma = ncr_dma;
+		card.dma = ncr_dma;
 	if (ncr_addr)
-		overrides[0].NCR5380_map_name = (NCR5380_map_type) ncr_addr;
+		card.NCR5380_map_name = (NCR5380_map_type) ncr_addr;
 	if (ncr_5380)
-		overrides[0].board = BOARD_NCR5380;
+		card.board = BOARD_NCR5380;
 	else if (ncr_53c400)
-		overrides[0].board = BOARD_NCR53C400;
+		card.board = BOARD_NCR53C400;
 	else if (ncr_53c400a)
-		overrides[0].board = BOARD_NCR53C400A;
+		card.board = BOARD_NCR53C400A;
 	else if (dtc_3181e)
-		overrides[0].board = BOARD_DTC3181E;
+		card.board = BOARD_DTC3181E;
 	else if (hp_c2502)
-		overrides[0].board = BOARD_HP_C2502;
+		card.board = BOARD_HP_C2502;
 #ifndef SCSI_G_NCR5380_MEM
-	if (!current_override && isapnp_present()) {
+	if (isapnp_present()) {
 		struct pnp_dev *dev = NULL;
-		count = 0;
 		while ((dev = pnp_find_dev(NULL, ISAPNP_VENDOR('D', 'T', 'C'), ISAPNP_FUNCTION(0x436e), dev))) {
-			if (count >= NO_OVERRIDES)
-				break;
 			if (pnp_device_attach(dev) < 0)
 				continue;
 			if (pnp_activate_dev(dev) < 0) {
@@ -159,202 +146,198 @@  static int __init generic_NCR5380_detect(struct scsi_host_template *tpnt)
 				continue;
 			}
 			if (pnp_irq_valid(dev, 0))
-				overrides[count].irq = pnp_irq(dev, 0);
+				card.irq = pnp_irq(dev, 0);
 			else
-				overrides[count].irq = NO_IRQ;
+				card.irq = NO_IRQ;
 			if (pnp_dma_valid(dev, 0))
-				overrides[count].dma = pnp_dma(dev, 0);
+				card.dma = pnp_dma(dev, 0);
 			else
-				overrides[count].dma = DMA_NONE;
-			overrides[count].NCR5380_map_name = (NCR5380_map_type) pnp_port_start(dev, 0);
-			overrides[count].board = BOARD_DTC3181E;
-			count++;
+				card.dma = DMA_NONE;
+			card.NCR5380_map_name = (NCR5380_map_type) pnp_port_start(dev, 0);
+			card.board = BOARD_DTC3181E;
+			break;
 		}
 	}
 #endif
 
-	for (count = 0; current_override < NO_OVERRIDES; ++current_override) {
-		if (!(overrides[current_override].NCR5380_map_name))
-			continue;
+	if (!(card.NCR5380_map_name))
+		return 0;
 
-		ports = NULL;
-		flags = 0;
-		switch (overrides[current_override].board) {
-		case BOARD_NCR5380:
-			flags = FLAG_NO_PSEUDO_DMA | FLAG_DMA_FIXUP;
-			break;
-		case BOARD_NCR53C400A:
-			ports = ncr_53c400a_ports;
-			magic = ncr_53c400a_magic;
-			break;
-		case BOARD_HP_C2502:
-			ports = ncr_53c400a_ports;
-			magic = hp_c2502_magic;
-			break;
-		case BOARD_DTC3181E:
-			ports = dtc_3181e_ports;
-			magic = ncr_53c400a_magic;
-			break;
-		}
+	ports = NULL;
+	flags = 0;
+	switch (card.board) {
+	case BOARD_NCR5380:
+		flags = FLAG_NO_PSEUDO_DMA | FLAG_DMA_FIXUP;
+		break;
+	case BOARD_NCR53C400A:
+		ports = ncr_53c400a_ports;
+		magic = ncr_53c400a_magic;
+		break;
+	case BOARD_HP_C2502:
+		ports = ncr_53c400a_ports;
+		magic = hp_c2502_magic;
+		break;
+	case BOARD_DTC3181E:
+		ports = dtc_3181e_ports;
+		magic = ncr_53c400a_magic;
+		break;
+	}
 
 #ifndef SCSI_G_NCR5380_MEM
-		if (ports && magic) {
-			/* wakeup sequence for the NCR53C400A and DTC3181E */
-
-			/* Disable the adapter and look for a free io port */
-			magic_configure(-1, 0, magic);
-
-			region_size = 16;
-
-			if (overrides[current_override].NCR5380_map_name != PORT_AUTO)
-				for (i = 0; ports[i]; i++) {
-					if (!request_region(ports[i], region_size, "ncr53c80"))
-						continue;
-					if (overrides[current_override].NCR5380_map_name == ports[i])
-						break;
-					release_region(ports[i], region_size);
-			} else
-				for (i = 0; ports[i]; i++) {
-					if (!request_region(ports[i], region_size, "ncr53c80"))
-						continue;
-					if (inb(ports[i]) == 0xff)
-						break;
-					release_region(ports[i], region_size);
-				}
-			if (ports[i]) {
-				/* At this point we have our region reserved */
-				magic_configure(i, 0, magic); /* no IRQ yet */
-				outb(0xc0, ports[i] + 9);
-				if (inb(ports[i] + 9) != 0x80)
+	if (ports && magic) {
+		/* wakeup sequence for the NCR53C400A and DTC3181E */
+
+		/* Disable the adapter and look for a free io port */
+		magic_configure(-1, 0, magic);
+
+		region_size = 16;
+
+		if (card.NCR5380_map_name != PORT_AUTO)
+			for (i = 0; ports[i]; i++) {
+				if (!request_region(ports[i], region_size, "ncr53c80"))
 					continue;
-				overrides[current_override].NCR5380_map_name = ports[i];
-				port_idx = i;
-			} else
-				continue;
-		}
-		else
-		{
-			/* Not a 53C400A style setup - just grab */
-			region_size = 8;
-			if (!request_region(overrides[current_override].NCR5380_map_name,
-			                    region_size, "ncr5380"))
-				continue;
-		}
+				if (card.NCR5380_map_name == ports[i])
+					break;
+				release_region(ports[i], region_size);
+		} else
+			for (i = 0; ports[i]; i++) {
+				if (!request_region(ports[i], region_size, "ncr53c80"))
+					continue;
+				if (inb(ports[i]) == 0xff)
+					break;
+				release_region(ports[i], region_size);
+			}
+		if (ports[i]) {
+			/* At this point we have our region reserved */
+			magic_configure(i, 0, magic); /* no IRQ yet */
+			outb(0xc0, ports[i] + 9);
+			if (inb(ports[i] + 9) != 0x80)
+				return 0;
+			card.NCR5380_map_name = ports[i];
+			port_idx = i;
+		} else
+			return 0;
+	}
+	else
+	{
+		/* Not a 53C400A style setup - just grab */
+		region_size = 8;
+		if (!request_region(card.NCR5380_map_name,
+		                    region_size, "ncr5380"))
+			return 0;
+	}
 #else
-		base = overrides[current_override].NCR5380_map_name;
-		iomem_size = NCR53C400_region_size;
-		if (!request_mem_region(base, iomem_size, "ncr5380"))
-			continue;
-		iomem = ioremap(base, iomem_size);
-		if (!iomem) {
-			release_mem_region(base, iomem_size);
-			continue;
-		}
+	base = card.NCR5380_map_name;
+	iomem_size = NCR53C400_region_size;
+	if (!request_mem_region(base, iomem_size, "ncr5380"))
+		return 0;
+	iomem = ioremap(base, iomem_size);
+	if (!iomem) {
+		release_mem_region(base, iomem_size);
+		return 0;
+	}
 #endif
-		instance = scsi_register(tpnt, sizeof(struct NCR5380_hostdata));
-		if (instance == NULL)
-			goto out_release;
-		hostdata = shost_priv(instance);
+	instance = scsi_register(tpnt, sizeof(struct NCR5380_hostdata));
+	if (instance == NULL)
+		goto out_release;
+	hostdata = shost_priv(instance);
 
 #ifndef SCSI_G_NCR5380_MEM
-		instance->io_port = overrides[current_override].NCR5380_map_name;
-		instance->n_io_port = region_size;
-		hostdata->io_width = 1; /* 8-bit PDMA by default */
-
-		/*
-		 * On NCR53C400 boards, NCR5380 registers are mapped 8 past
-		 * the base address.
-		 */
-		switch (overrides[current_override].board) {
-		case BOARD_NCR53C400:
-			instance->io_port += 8;
-			hostdata->c400_ctl_status = 0;
-			hostdata->c400_blk_cnt = 1;
-			hostdata->c400_host_buf = 4;
-			break;
-		case BOARD_DTC3181E:
-			hostdata->io_width = 2;	/* 16-bit PDMA */
-			/* fall through */
-		case BOARD_NCR53C400A:
-		case BOARD_HP_C2502:
-			hostdata->c400_ctl_status = 9;
-			hostdata->c400_blk_cnt = 10;
-			hostdata->c400_host_buf = 8;
-			break;
-		}
+	instance->io_port = card.NCR5380_map_name;
+	instance->n_io_port = region_size;
+	hostdata->io_width = 1; /* 8-bit PDMA by default */
+
+	/*
+	 * On NCR53C400 boards, NCR5380 registers are mapped 8 past
+	 * the base address.
+	 */
+	switch (card.board) {
+	case BOARD_NCR53C400:
+		instance->io_port += 8;
+		hostdata->c400_ctl_status = 0;
+		hostdata->c400_blk_cnt = 1;
+		hostdata->c400_host_buf = 4;
+		break;
+	case BOARD_DTC3181E:
+		hostdata->io_width = 2;	/* 16-bit PDMA */
+		/* fall through */
+	case BOARD_NCR53C400A:
+	case BOARD_HP_C2502:
+		hostdata->c400_ctl_status = 9;
+		hostdata->c400_blk_cnt = 10;
+		hostdata->c400_host_buf = 8;
+		break;
+	}
 #else
-		instance->base = overrides[current_override].NCR5380_map_name;
-		hostdata->iomem = iomem;
-		hostdata->iomem_size = iomem_size;
-		switch (overrides[current_override].board) {
-		case BOARD_NCR53C400:
-			hostdata->c400_ctl_status = 0x100;
-			hostdata->c400_blk_cnt = 0x101;
-			hostdata->c400_host_buf = 0x104;
-			break;
-		case BOARD_DTC3181E:
-		case BOARD_NCR53C400A:
-		case BOARD_HP_C2502:
-			pr_err(DRV_MODULE_NAME ": unknown register offsets\n");
-			goto out_unregister;
-		}
+	instance->base = card.NCR5380_map_name;
+	hostdata->iomem = iomem;
+	hostdata->iomem_size = iomem_size;
+	switch (card.board) {
+	case BOARD_NCR53C400:
+		hostdata->c400_ctl_status = 0x100;
+		hostdata->c400_blk_cnt = 0x101;
+		hostdata->c400_host_buf = 0x104;
+		break;
+	case BOARD_DTC3181E:
+	case BOARD_NCR53C400A:
+	case BOARD_HP_C2502:
+		pr_err(DRV_MODULE_NAME ": unknown register offsets\n");
+		goto out_unregister;
+	}
 #endif
 
-		if (NCR5380_init(instance, flags | FLAG_LATE_DMA_SETUP))
-			goto out_unregister;
+	if (NCR5380_init(instance, flags | FLAG_LATE_DMA_SETUP))
+		goto out_unregister;
 
-		switch (overrides[current_override].board) {
-		case BOARD_NCR53C400:
-		case BOARD_DTC3181E:
-		case BOARD_NCR53C400A:
-		case BOARD_HP_C2502:
-			NCR5380_write(hostdata->c400_ctl_status, CSR_BASE);
-		}
+	switch (card.board) {
+	case BOARD_NCR53C400:
+	case BOARD_DTC3181E:
+	case BOARD_NCR53C400A:
+	case BOARD_HP_C2502:
+		NCR5380_write(hostdata->c400_ctl_status, CSR_BASE);
+	}
 
-		NCR5380_maybe_reset_bus(instance);
+	NCR5380_maybe_reset_bus(instance);
 
-		if (overrides[current_override].irq != IRQ_AUTO)
-			instance->irq = overrides[current_override].irq;
-		else
-			instance->irq = NCR5380_probe_irq(instance, 0xffff);
+	if (card.irq != IRQ_AUTO)
+		instance->irq = card.irq;
+	else
+		instance->irq = NCR5380_probe_irq(instance, 0xffff);
 
-		/* Compatibility with documented NCR5380 kernel parameters */
-		if (instance->irq == 255)
-			instance->irq = NO_IRQ;
+	/* Compatibility with documented NCR5380 kernel parameters */
+	if (instance->irq == 255)
+		instance->irq = NO_IRQ;
 
-		if (instance->irq != NO_IRQ) {
+	if (instance->irq != NO_IRQ) {
 #ifndef SCSI_G_NCR5380_MEM
-			/* set IRQ for HP C2502 */
-			if (overrides[current_override].board == BOARD_HP_C2502)
-				magic_configure(port_idx, instance->irq, magic);
+		/* set IRQ for HP C2502 */
+		if (card.board == BOARD_HP_C2502)
+			magic_configure(port_idx, instance->irq, magic);
 #endif
-			if (request_irq(instance->irq, generic_NCR5380_intr,
-					0, "NCR5380", instance)) {
-				printk(KERN_WARNING "scsi%d : IRQ%d not free, interrupts disabled\n", instance->host_no, instance->irq);
-				instance->irq = NO_IRQ;
-			}
-		}
-
-		if (instance->irq == NO_IRQ) {
-			printk(KERN_INFO "scsi%d : interrupts not enabled. for better interactive performance,\n", instance->host_no);
-			printk(KERN_INFO "scsi%d : please jumper the board for a free IRQ.\n", instance->host_no);
+		if (request_irq(instance->irq, generic_NCR5380_intr,
+				0, "NCR5380", instance)) {
+			printk(KERN_WARNING "scsi%d : IRQ%d not free, interrupts disabled\n", instance->host_no, instance->irq);
+			instance->irq = NO_IRQ;
 		}
+	}
 
-		++current_override;
-		++count;
+	if (instance->irq == NO_IRQ) {
+		printk(KERN_INFO "scsi%d : interrupts not enabled. for better interactive performance,\n", instance->host_no);
+		printk(KERN_INFO "scsi%d : please jumper the board for a free IRQ.\n", instance->host_no);
 	}
-	return count;
+
+	return 1;
 
 out_unregister:
 	scsi_unregister(instance);
 out_release:
 #ifndef SCSI_G_NCR5380_MEM
-	release_region(overrides[current_override].NCR5380_map_name, region_size);
+	release_region(card.NCR5380_map_name, region_size);
 #else
 	iounmap(iomem);
 	release_mem_region(base, iomem_size);
 #endif
-	return count;
+	return 0;
 }
 
 /**