Message ID | 1475002825-18132-3-git-send-email-linux@rainbow-software.org (mailing list archive) |
---|---|
State | Accepted, archived |
Headers | show |
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 --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; } /**
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(-)