X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fscsi%2Fsym53c416.c;h=8640253d6215051c16d5603d9c818f079f8de621;hb=43bc926fffd92024b46cafaf7350d669ba9ca884;hp=de5cc59120e96cb2376969c166842cf761e4c034;hpb=9bf4aaab3e101692164d49b7ca357651eb691cb6;p=linux-2.6.git diff --git a/drivers/scsi/sym53c416.c b/drivers/scsi/sym53c416.c index de5cc5912..8640253d6 100644 --- a/drivers/scsi/sym53c416.c +++ b/drivers/scsi/sym53c416.c @@ -239,7 +239,7 @@ static void sym53c416_set_transfer_counter(int base, unsigned int len) outb((len & 0xFF0000) >> 16, base + TC_HIGH); } -static spinlock_t sym53c416_lock = SPIN_LOCK_UNLOCKED; +static DEFINE_SPINLOCK(sym53c416_lock); /* Returns the number of bytes read */ static __inline__ unsigned int sym53c416_read(int base, unsigned char *buffer, unsigned int len) @@ -616,7 +616,7 @@ static struct isapnp_device_id id_table[] __devinitdata = { MODULE_DEVICE_TABLE(isapnp, id_table); -void sym53c416_probe(void) +static void sym53c416_probe(void) { int *base = probeaddrs; int ints[2]; @@ -633,7 +633,7 @@ void sym53c416_probe(void) } } -int __init sym53c416_detect(Scsi_Host_Template *tpnt) +int __init sym53c416_detect(struct scsi_host_template *tpnt) { unsigned long flags; struct Scsi_Host * shpnt = NULL; @@ -773,7 +773,7 @@ int sym53c416_queuecommand(Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *)) current_command->SCp.Message = 0; spin_lock_irqsave(&sym53c416_lock, flags); - outb(SCpnt->device->id, base + DEST_BUS_ID); /* Set scsi id target */ + outb(scmd_id(SCpnt), base + DEST_BUS_ID); /* Set scsi id target */ outb(FLUSH_FIFO, base + COMMAND_REG); /* Flush SCSI and PIO FIFO's */ /* Write SCSI command into the SCSI fifo */ for(i = 0; i < SCpnt->cmd_len; i++) @@ -785,37 +785,27 @@ int sym53c416_queuecommand(Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *)) return 0; } -static int sym53c416_abort(Scsi_Cmnd *SCpnt) -{ - return FAILED; -} - -static int sym53c416_bus_reset(Scsi_Cmnd *SCpnt) -{ - return FAILED; -} - -static int sym53c416_device_reset(Scsi_Cmnd *SCpnt) -{ - return FAILED; -} - static int sym53c416_host_reset(Scsi_Cmnd *SCpnt) { int base; int scsi_id = -1; int i; + unsigned long flags; + + spin_lock_irqsave(&sym53c416_lock, flags); /* printk("sym53c416_reset\n"); */ base = SCpnt->device->host->io_port; /* search scsi_id - fixme, we shouldnt need to iterate for this! */ - for(i = 0; i < host_index && scsi_id != -1; i++) + for(i = 0; i < host_index && scsi_id == -1; i++) if(hosts[i].base == base) scsi_id = hosts[i].scsi_id; outb(RESET_CHIP, base + COMMAND_REG); outb(NOOP | PIO_MODE, base + COMMAND_REG); outb(RESET_SCSI_BUS, base + COMMAND_REG); sym53c416_init(base, scsi_id); + + spin_unlock_irqrestore(&sym53c416_lock, flags); return SUCCESS; } @@ -852,23 +842,20 @@ static int sym53c416_bios_param(struct scsi_device *sdev, MODULE_AUTHOR("Lieven Willems"); MODULE_LICENSE("GPL"); -MODULE_PARM(sym53c416, "1-2i"); -MODULE_PARM(sym53c416_1, "1-2i"); -MODULE_PARM(sym53c416_2, "1-2i"); -MODULE_PARM(sym53c416_3, "1-2i"); +module_param_array(sym53c416, uint, NULL, 0); +module_param_array(sym53c416_1, uint, NULL, 0); +module_param_array(sym53c416_2, uint, NULL, 0); +module_param_array(sym53c416_3, uint, NULL, 0); #endif -static Scsi_Host_Template driver_template = { +static struct scsi_host_template driver_template = { .proc_name = "sym53c416", .name = "Symbios Logic 53c416", .detect = sym53c416_detect, .info = sym53c416_info, .queuecommand = sym53c416_queuecommand, - .eh_abort_handler = sym53c416_abort, .eh_host_reset_handler =sym53c416_host_reset, - .eh_bus_reset_handler = sym53c416_bus_reset, - .eh_device_reset_handler =sym53c416_device_reset, .release = sym53c416_release, .bios_param = sym53c416_bios_param, .can_queue = 1,