diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1998-05-07 02:55:41 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 1998-05-07 02:55:41 +0000 |
commit | dcec8a13bf565e47942a1751a9cec21bec5648fe (patch) | |
tree | 548b69625b18cc2e88c3e68d0923be546c9ebb03 /drivers/scsi/NCR53c406a.c | |
parent | 2e0f55e79c49509b7ff70ff1a10e1e9e90a3dfd4 (diff) |
o Merge with Linux 2.1.99.
o Fix ancient bug in the ELF loader making ldd crash.
o Fix ancient bug in the keyboard code for SGI, SNI and Jazz.
Diffstat (limited to 'drivers/scsi/NCR53c406a.c')
-rw-r--r-- | drivers/scsi/NCR53c406a.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/drivers/scsi/NCR53c406a.c b/drivers/scsi/NCR53c406a.c index d2529b17e..a133a7d72 100644 --- a/drivers/scsi/NCR53c406a.c +++ b/drivers/scsi/NCR53c406a.c @@ -52,6 +52,7 @@ #include <asm/irq.h> #include <linux/blk.h> +#include <asm/spinlock.h> #include "scsi.h" #include "hosts.h" #include "sd.h" @@ -171,6 +172,7 @@ enum Phase { /* Static function prototypes */ static void NCR53c406a_intr(int, void *, struct pt_regs *); +static void do_NCR53c406a_intr(int, void *, struct pt_regs *); static void internal_done(Scsi_Cmnd *); static void wait_intr(void); static void chip_init(void); @@ -226,7 +228,8 @@ static void *addresses[] = { #endif USE_BIOS /* possible i/o port addresses */ -static unsigned short ports[] = { 0x230, 0x330 }; +static unsigned short ports[] = + { 0x230, 0x330, 0x280, 0x290, 0x330, 0x340, 0x300, 0x310, 0x348, 0x350 }; #define PORT_COUNT (sizeof( ports ) / sizeof( unsigned short )) /* possible interrupt channels */ @@ -538,7 +541,7 @@ NCR53c406a_detect(Scsi_Host_Template * tpnt)){ request_region(port_base, 0x10, "NCR53c406a"); if(irq_level > 0) { - if(request_irq(irq_level, NCR53c406a_intr, 0, "NCR53c406a", NULL)){ + if(request_irq(irq_level, do_NCR53c406a_intr, 0, "NCR53c406a", NULL)){ printk("NCR53c406a: unable to allocate IRQ %d\n", irq_level); return 0; } @@ -764,6 +767,15 @@ NCR53c406a_biosparm(Scsi_Disk *disk, kdev_t dev, int* info_array){ } static void +do_NCR53c406a_intr(int unused, void *dev_id, struct pt_regs *regs){ + unsigned long flags; + + spin_lock_irqsave(&io_request_lock, flags); + NCR53c406a_intr(0, dev_id, regs); + spin_unlock_irqrestore(&io_request_lock, flags); +} + + static void NCR53c406a_intr(int unused, void *dev_id, struct pt_regs *regs){ DEB(unsigned char fifo_size;) DEB(unsigned char seq_reg;) |