X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fscsi%2Fsim710.c;h=551baccec5230c57ec2fb3bcdf714d7969fe1fab;hb=refs%2Fheads%2Fvserver;hp=f73bf835d145b82c7595275d7e5cbd050c5e4cc2;hpb=9bf4aaab3e101692164d49b7ca357651eb691cb6;p=linux-2.6.git diff --git a/drivers/scsi/sim710.c b/drivers/scsi/sim710.c index f73bf835d..551baccec 100644 --- a/drivers/scsi/sim710.c +++ b/drivers/scsi/sim710.c @@ -26,7 +26,6 @@ * */ -#include #include #include @@ -36,6 +35,9 @@ #include #include #include +#include +#include +#include #include "53c700.h" @@ -44,13 +46,13 @@ #define MAX_SLOTS 8 static __u8 __initdata id_array[MAX_SLOTS] = { [0 ... MAX_SLOTS-1] = 7 }; -char *sim710; /* command line passed by insmod */ +static char *sim710; /* command line passed by insmod */ MODULE_AUTHOR("Richard Hirst"); MODULE_DESCRIPTION("Simple NCR53C710 driver"); MODULE_LICENSE("GPL"); -MODULE_PARM(sim710, "s"); +module_param(sim710, charp, 0); #ifdef MODULE #define ARG_SEP ' ' @@ -58,7 +60,7 @@ MODULE_PARM(sim710, "s"); #define ARG_SEP ',' #endif -__init int +static __init int param_setup(char *str) { char *pos = str, *next; @@ -72,7 +74,7 @@ param_setup(char *str) else if(!strncmp(pos, "id:", 3)) { if(slot == -1) { printk(KERN_WARNING "sim710: Must specify slot for id parameter\n"); - } else if(slot > MAX_SLOTS) { + } else if(slot >= MAX_SLOTS) { printk(KERN_WARNING "sim710: Illegal slot %d for id %d\n", slot, val); } else { id_array[slot] = val; @@ -117,37 +119,33 @@ sim710_probe_common(struct device *dev, unsigned long base_addr, } /* Fill in the three required pieces of hostdata */ - hostdata->base = base_addr; + hostdata->base = ioport_map(base_addr, 64); hostdata->differential = differential; hostdata->clock = clock; hostdata->chip710 = 1; - NCR_700_set_io_mapped(hostdata); /* and register the chip */ - if((host = NCR_700_detect(&sim710_driver_template, hostdata)) == NULL) { + if((host = NCR_700_detect(&sim710_driver_template, hostdata, dev)) + == NULL) { printk(KERN_ERR "sim710: No host detected; card configuration problem?\n"); goto out_release; } - - host->irq = irq; host->this_id = scsi_id; - - if(request_irq(irq, NCR_700_intr, SA_SHIRQ, "sim710", host)) { - printk(KERN_ERR "sim710: irq problem with %d, detaching\n", - irq); - goto out_unregister; + host->base = base_addr; + host->irq = irq; + if (request_irq(irq, NCR_700_intr, IRQF_SHARED, "sim710", host)) { + printk(KERN_ERR "sim710: request_irq failed\n"); + goto out_put_host; } - scsi_add_host(host, dev); /* XXX handle failure */ scsi_scan_host(host); - hostdata->dev = dev; return 0; - out_unregister: + out_put_host: scsi_host_put(host); out_release: - release_region(host->base, 64); + release_region(base_addr, 64); out_free: kfree(hostdata); out: @@ -165,6 +163,7 @@ sim710_device_remove(struct device *dev) NCR_700_release(host); kfree(hostdata); free_irq(host->irq, host); + release_region(host->base, 64); return 0; } @@ -283,6 +282,7 @@ static struct eisa_device_id sim710_eisa_ids[] = { { "HWP0C80" }, { "" } }; +MODULE_DEVICE_TABLE(eisa, sim710_eisa_ids); static __init int sim710_eisa_probe(struct device *dev) @@ -323,7 +323,7 @@ sim710_eisa_probe(struct device *dev) differential, scsi_id); } -struct eisa_driver sim710_eisa_driver = { +static struct eisa_driver sim710_eisa_driver = { .id_table = sim710_eisa_ids, .driver = { .name = "sim710",