summaryrefslogtreecommitdiffstats
path: root/drivers/scsi/ultrastor.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/ultrastor.c')
-rw-r--r--drivers/scsi/ultrastor.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/drivers/scsi/ultrastor.c b/drivers/scsi/ultrastor.c
index 9d7dca68c..5f0b9bee2 100644
--- a/drivers/scsi/ultrastor.c
+++ b/drivers/scsi/ultrastor.c
@@ -283,18 +283,21 @@ static const unsigned short ultrastor_ports_14f[] = {
};
#endif
-static void ultrastor_interrupt(int cpl);
+static void ultrastor_interrupt(int, struct pt_regs *);
static inline void build_sg_list(struct mscp *, Scsi_Cmnd *SCpnt);
static inline int find_and_clear_bit_16(unsigned short *field)
{
int rv;
+ unsigned long flags;
+
+ save_flags(flags);
cli();
if (*field == 0) panic("No free mscp");
asm("xorl %0,%0\n0:\tbsfw %1,%w0\n\tbtr %0,%1\n\tjnc 0b"
: "=&r" (rv), "=m" (*field) : "1" (*field));
- sti();
+ restore_flags(flags);
return rv;
}
@@ -435,7 +438,8 @@ static int ultrastor_14f_detect(Scsi_Host_Template * tpnt)
/* All above tests passed, must be the right thing. Get some useful
info. */
- snarf_region(config.port_address, 0x0c); /* Register the I/O space that we use */
+ request_region(config.port_address, 0x0c,"ultrastor");
+ /* Register the I/O space that we use */
*(char *)&config_1 = inb(CONFIG(config.port_address + 0));
*(char *)&config_2 = inb(CONFIG(config.port_address + 1));
@@ -729,13 +733,13 @@ int ultrastor_queuecommand(Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *))
retry:
if (config.slot)
while (inb(config.ogm_address - 1) != 0 &&
- config.aborted[mscp_index] == 0xff);
+ config.aborted[mscp_index] == 0xff) barrier();
/* else??? */
while ((inb(LCL_DOORBELL_INTR(config.doorbell_address)) &
(config.slot ? 2 : 1))
- && config.aborted[mscp_index] == 0xff);
+ && config.aborted[mscp_index] == 0xff) barrier();
/* To avoid race conditions, make the code to write to the adapter
atomic. This simplifies the abort code. */
@@ -869,7 +873,7 @@ int ultrastor_abort(Scsi_Cmnd *SCpnt)
printk("Ux4F: abort while completed command pending\n");
restore_flags(flags);
cli();
- ultrastor_interrupt(0);
+ ultrastor_interrupt(0, NULL);
restore_flags(flags);
return SCSI_ABORT_SUCCESS; /* FIXME - is this correct? -ERY */
}
@@ -1010,7 +1014,7 @@ int ultrastor_biosparam(Disk * disk, int dev, int * dkinfo)
return 0;
}
-static void ultrastor_interrupt(int cpl)
+static void ultrastor_interrupt(int irq, struct pt_regs *regs)
{
unsigned int status;
#if ULTRASTOR_MAX_CMDS > 1