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 <hch@xxxxxx> > @@ -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
Attachment:
signature.asc
Description: This is a digitally signed message part.