Re: [PATCH 1/16] gdth: split out isa probing
Rolf Eike Beer wrote: What we have here is cleanly not PCI memory as it's ISA initialisation. And for making things obvious passing NULL as first argument of dma_alloc_consistent() is IMHO the better way. While this is true, this is largely a code movement patch. It's up to Boaz/Christoph whether they want to include another cleanup in this patch, or move that to separate patch that switches the driver to dma_xxx Jeff - To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 1/16] gdth: split out isa probing
Boaz Harrosh wrote: > (note: this is ontop of Jeff's pci cleanup patch) > > Split out isa probing into a helper of it's own. Error handling is > cleaned up, but errors are not propagated yet. Also enclose the isa > probe under the proper CONFIG_ISA symbol instead of the !IA64 hack. > > Signed-off-by: Christoph Hellwig <[EMAIL PROTECTED]> > @@ -4277,6 +4280,7 @@ int __init option_setup(char *str) > return 1; > } > > + > #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) > static int __init gdth_detect(struct scsi_host_template *shtp) > #else Extra newline for nothing? > @@ -5668,6 +5552,149 @@ static Scsi_Host_Template driver_template = { > #endif > }; > > +#ifdef CONFIG_ISA > +static int gdth_isa_probe_one(struct scsi_host_template *shtp, ulong32 > isa_bios) +{ > + struct Scsi_Host *shp; > + gdth_ha_str *ha; > + dma_addr_t scratch_dma_handle = 0; > + int error, hanum, i; > + u8 b; > + > + if (!gdth_search_isa(isa_bios)) > + return -ENXIO; > + > + shp = scsi_register(shtp, sizeof(gdth_ext_str)); > + if (!shp) > + return -ENOMEM; > + ha = HADATA(shp); > + > + error = -ENODEV; > + if (!gdth_init_isa(isa_bios,ha)) > + goto out_host_put; > + > + /* controller found and initialized */ > + printk("Configuring GDT-ISA HA at BIOS 0x%05X IRQ %u DRQ %u\n", > + isa_bios, ha->irq, ha->drq); > + > + error = request_irq(ha->irq, gdth_interrupt, IRQF_DISABLED, "gdth", ha); > + if (error) { > + printk("GDT-ISA: Unable to allocate IRQ\n"); > + goto out_host_put; > + } > + > + error = request_dma(ha->drq, "gdth"); > + if (error) { > + printk("GDT-ISA: Unable to allocate DMA channel\n"); > + goto out_free_irq; > + } > + > + set_dma_mode(ha->drq,DMA_MODE_CASCADE); > + enable_dma(ha->drq); > + shp->unchecked_isa_dma = 1; > + shp->irq = ha->irq; > + shp->dma_channel = ha->drq; > + hanum = gdth_ctr_count; > + gdth_ctr_tab[gdth_ctr_count++] = shp; > + gdth_ctr_vtab[gdth_ctr_vcount++] = shp; > + > + NUMDATA(shp)->hanum = (ushort)hanum; > + NUMDATA(shp)->busnum= 0; > + > + ha->pccb = CMDDATA(shp); > + ha->ccb_phys = 0L; > + ha->pdev = NULL; > + > + error = -ENOMEM; > + > + ha->pscratch = pci_alloc_consistent(ha->pdev, GDTH_SCRATCH, > + &scratch_dma_handle); > + if (!ha->pscratch) > + goto out_dec_counters; > + ha->scratch_phys = scratch_dma_handle; > + > + ha->pmsg = pci_alloc_consistent(ha->pdev, sizeof(gdth_msg_str), > + &scratch_dma_handle); > + if (!ha->pmsg) > + goto out_free_pscratch; > + ha->msg_phys = scratch_dma_handle; > + > +#ifdef INT_COAL > + ha->coal_stat = pci_alloc_consistent(ha->pdev, > + sizeof(gdth_coal_status) * MAXOFFSETS, > + &scratch_dma_handle); > + if (!ha->coal_stat) > + goto out_free_pmsg; > + ha->coal_stat_phys = scratch_dma_handle; > +#endif What we have here is cleanly not PCI memory as it's ISA initialisation. And for making things obvious passing NULL as first argument of dma_alloc_consistent() is IMHO the better way. Greetings, Eike signature.asc Description: This is a digitally signed message part.
[PATCH 1/16] gdth: split out isa probing
(note: this is ontop of Jeff's pci cleanup patch) Split out isa probing into a helper of it's own. Error handling is cleaned up, but errors are not propagated yet. Also enclose the isa probe under the proper CONFIG_ISA symbol instead of the !IA64 hack. Signed-off-by: Christoph Hellwig <[EMAIL PROTECTED]> --- drivers/scsi/gdth.c | 281 --- 1 files changed, 154 insertions(+), 127 deletions(-) diff --git a/drivers/scsi/gdth.c b/drivers/scsi/gdth.c index b20c188..9f82c01 100644 --- a/drivers/scsi/gdth.c +++ b/drivers/scsi/gdth.c @@ -476,6 +476,9 @@ static void gdth_flush(int hanum); static int gdth_halt(struct notifier_block *nb, ulong event, void *buf); static int gdth_queuecommand(Scsi_Cmnd *scp,void (*done)(Scsi_Cmnd *)); static void gdth_scsi_done(struct scsi_cmnd *scp); +#ifdef CONFIG_ISA +static int gdth_isa_probe_one(struct scsi_host_template *, ulong32); +#endif #ifdef DEBUG_GDTH static unchar DebugState = DEBUG_GDTH; @@ -4277,6 +4280,7 @@ int __init option_setup(char *str) return 1; } + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) static int __init gdth_detect(struct scsi_host_template *shtp) #else @@ -4323,135 +4327,15 @@ static int __init gdth_detect(Scsi_Host_Template *shtp) /* As default we do not probe for EISA or ISA controllers */ if (probe_eisa_isa) { /* scanning for controllers, at first: ISA controller */ -for (isa_bios=0xc8000UL; isa_bios<=0xd8000UL; isa_bios+=0x8000UL) { -dma_addr_t scratch_dma_handle; -scratch_dma_handle = 0; - -if (gdth_ctr_count >= MAXHA) -break; -if (gdth_search_isa(isa_bios)) {/* controller found */ -shp = scsi_register(shtp,sizeof(gdth_ext_str)); -if (shp == NULL) -continue; - -ha = HADATA(shp); -if (!gdth_init_isa(isa_bios,ha)) { -scsi_unregister(shp); -continue; -} -#ifdef __ia64__ +#ifdef CONFIG_ISA +for (isa_bios = 0xc8000UL; isa_bios <= 0xd8000UL; + isa_bios += 0x8000UL) { +if (gdth_ctr_count >= MAXHA) break; -#else -/* controller found and initialized */ -printk("Configuring GDT-ISA HA at BIOS 0x%05X IRQ %u DRQ %u\n", - isa_bios,ha->irq,ha->drq); - -if (request_irq(ha->irq,gdth_interrupt,IRQF_DISABLED,"gdth",ha)) { -printk("GDT-ISA: Unable to allocate IRQ\n"); -scsi_unregister(shp); -continue; -} -if (request_dma(ha->drq,"gdth")) { -printk("GDT-ISA: Unable to allocate DMA channel\n"); -free_irq(ha->irq,ha); -scsi_unregister(shp); -continue; -} -set_dma_mode(ha->drq,DMA_MODE_CASCADE); -enable_dma(ha->drq); -shp->unchecked_isa_dma = 1; -shp->irq = ha->irq; -shp->dma_channel = ha->drq; -hanum = gdth_ctr_count; -gdth_ctr_tab[gdth_ctr_count++] = shp; -gdth_ctr_vtab[gdth_ctr_vcount++] = shp; - -NUMDATA(shp)->hanum = (ushort)hanum; -NUMDATA(shp)->busnum= 0; - -ha->pccb = CMDDATA(shp); -ha->ccb_phys = 0L; -ha->pdev = NULL; -ha->pscratch = pci_alloc_consistent(ha->pdev, GDTH_SCRATCH, -&scratch_dma_handle); -ha->scratch_phys = scratch_dma_handle; -ha->pmsg = pci_alloc_consistent(ha->pdev, sizeof(gdth_msg_str), -&scratch_dma_handle); -ha->msg_phys = scratch_dma_handle; -#ifdef INT_COAL -ha->coal_stat = (gdth_coal_status *) -pci_alloc_consistent(ha->pdev, sizeof(gdth_coal_status) * -MAXOFFSETS, &scratch_dma_handle); -ha->coal_stat_phys = scratch_dma_handle; -#endif - -ha->scratch_busy = FALSE; -ha->req_first = NULL; -ha->tid_cnt = MAX_HDRIVES; -if (max_ids > 0 && max_ids < ha->tid_cnt) -ha->tid_cnt = max_ids; -for (i=0; icmd_tab[i].cmnd = UNUSED_CMND; -ha->scan_mode = rescan ? 0x10 : 0; - -if (ha->pscratch == NULL || ha->pmsg == NULL || -!gdth_search_drives(hanum)) { -printk("GDT-ISA: Error during device scan\n"); ---gdth_ctr_count; ---gdth_ctr_vcount; - -#ifdef INT_COAL -if (ha->coal_stat) -pci_free_consistent(ha->pdev, sizeof(gdth_coal_status) *