diff options
Diffstat (limited to 'drivers/scsi/gdth.c')
-rw-r--r-- | drivers/scsi/gdth.c | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/drivers/scsi/gdth.c b/drivers/scsi/gdth.c index b253b8c718d3..c82523908c2e 100644 --- a/drivers/scsi/gdth.c +++ b/drivers/scsi/gdth.c | |||
@@ -141,7 +141,7 @@ | |||
141 | static void gdth_delay(int milliseconds); | 141 | static void gdth_delay(int milliseconds); |
142 | static void gdth_eval_mapping(ulong32 size, ulong32 *cyls, int *heads, int *secs); | 142 | static void gdth_eval_mapping(ulong32 size, ulong32 *cyls, int *heads, int *secs); |
143 | static irqreturn_t gdth_interrupt(int irq, void *dev_id); | 143 | static irqreturn_t gdth_interrupt(int irq, void *dev_id); |
144 | static irqreturn_t __gdth_interrupt(gdth_ha_str *ha, int irq, | 144 | static irqreturn_t __gdth_interrupt(gdth_ha_str *ha, |
145 | int gdth_from_wait, int* pIndex); | 145 | int gdth_from_wait, int* pIndex); |
146 | static int gdth_sync_event(gdth_ha_str *ha, int service, unchar index, | 146 | static int gdth_sync_event(gdth_ha_str *ha, int service, unchar index, |
147 | Scsi_Cmnd *scp); | 147 | Scsi_Cmnd *scp); |
@@ -165,7 +165,6 @@ static int gdth_internal_cache_cmd(gdth_ha_str *ha, Scsi_Cmnd *scp); | |||
165 | static int gdth_fill_cache_cmd(gdth_ha_str *ha, Scsi_Cmnd *scp, ushort hdrive); | 165 | static int gdth_fill_cache_cmd(gdth_ha_str *ha, Scsi_Cmnd *scp, ushort hdrive); |
166 | 166 | ||
167 | static void gdth_enable_int(gdth_ha_str *ha); | 167 | static void gdth_enable_int(gdth_ha_str *ha); |
168 | static unchar gdth_get_status(gdth_ha_str *ha, int irq); | ||
169 | static int gdth_test_busy(gdth_ha_str *ha); | 168 | static int gdth_test_busy(gdth_ha_str *ha); |
170 | static int gdth_get_cmd_index(gdth_ha_str *ha); | 169 | static int gdth_get_cmd_index(gdth_ha_str *ha); |
171 | static void gdth_release_event(gdth_ha_str *ha); | 170 | static void gdth_release_event(gdth_ha_str *ha); |
@@ -1334,14 +1333,12 @@ static void __init gdth_enable_int(gdth_ha_str *ha) | |||
1334 | } | 1333 | } |
1335 | 1334 | ||
1336 | /* return IStatus if interrupt was from this card else 0 */ | 1335 | /* return IStatus if interrupt was from this card else 0 */ |
1337 | static unchar gdth_get_status(gdth_ha_str *ha, int irq) | 1336 | static unchar gdth_get_status(gdth_ha_str *ha) |
1338 | { | 1337 | { |
1339 | unchar IStatus = 0; | 1338 | unchar IStatus = 0; |
1340 | 1339 | ||
1341 | TRACE(("gdth_get_status() irq %d ctr_count %d\n", irq, gdth_ctr_count)); | 1340 | TRACE(("gdth_get_status() irq %d ctr_count %d\n", ha->irq, gdth_ctr_count)); |
1342 | 1341 | ||
1343 | if (ha->irq != (unchar)irq) /* check IRQ */ | ||
1344 | return false; | ||
1345 | if (ha->type == GDT_EISA) | 1342 | if (ha->type == GDT_EISA) |
1346 | IStatus = inb((ushort)ha->bmic + EDOORREG); | 1343 | IStatus = inb((ushort)ha->bmic + EDOORREG); |
1347 | else if (ha->type == GDT_ISA) | 1344 | else if (ha->type == GDT_ISA) |
@@ -1523,7 +1520,7 @@ static int gdth_wait(gdth_ha_str *ha, int index, ulong32 time) | |||
1523 | return 1; /* no wait required */ | 1520 | return 1; /* no wait required */ |
1524 | 1521 | ||
1525 | do { | 1522 | do { |
1526 | __gdth_interrupt(ha, (int)ha->irq, true, &wait_index); | 1523 | __gdth_interrupt(ha, true, &wait_index); |
1527 | if (wait_index == index) { | 1524 | if (wait_index == index) { |
1528 | answer_found = TRUE; | 1525 | answer_found = TRUE; |
1529 | break; | 1526 | break; |
@@ -3036,7 +3033,7 @@ static void gdth_clear_events(void) | |||
3036 | 3033 | ||
3037 | /* SCSI interface functions */ | 3034 | /* SCSI interface functions */ |
3038 | 3035 | ||
3039 | static irqreturn_t __gdth_interrupt(gdth_ha_str *ha, int irq, | 3036 | static irqreturn_t __gdth_interrupt(gdth_ha_str *ha, |
3040 | int gdth_from_wait, int* pIndex) | 3037 | int gdth_from_wait, int* pIndex) |
3041 | { | 3038 | { |
3042 | gdt6m_dpram_str __iomem *dp6m_ptr = NULL; | 3039 | gdt6m_dpram_str __iomem *dp6m_ptr = NULL; |
@@ -3054,7 +3051,7 @@ static irqreturn_t __gdth_interrupt(gdth_ha_str *ha, int irq, | |||
3054 | int act_int_coal = 0; | 3051 | int act_int_coal = 0; |
3055 | #endif | 3052 | #endif |
3056 | 3053 | ||
3057 | TRACE(("gdth_interrupt() IRQ %d\n",irq)); | 3054 | TRACE(("gdth_interrupt() IRQ %d\n", ha->irq)); |
3058 | 3055 | ||
3059 | /* if polling and not from gdth_wait() -> return */ | 3056 | /* if polling and not from gdth_wait() -> return */ |
3060 | if (gdth_polling) { | 3057 | if (gdth_polling) { |
@@ -3067,7 +3064,8 @@ static irqreturn_t __gdth_interrupt(gdth_ha_str *ha, int irq, | |||
3067 | spin_lock_irqsave(&ha->smp_lock, flags); | 3064 | spin_lock_irqsave(&ha->smp_lock, flags); |
3068 | 3065 | ||
3069 | /* search controller */ | 3066 | /* search controller */ |
3070 | if (0 == (IStatus = gdth_get_status(ha, irq))) { | 3067 | IStatus = gdth_get_status(ha); |
3068 | if (IStatus == 0) { | ||
3071 | /* spurious interrupt */ | 3069 | /* spurious interrupt */ |
3072 | if (!gdth_polling) | 3070 | if (!gdth_polling) |
3073 | spin_unlock_irqrestore(&ha->smp_lock, flags); | 3071 | spin_unlock_irqrestore(&ha->smp_lock, flags); |
@@ -3294,9 +3292,9 @@ static irqreturn_t __gdth_interrupt(gdth_ha_str *ha, int irq, | |||
3294 | 3292 | ||
3295 | static irqreturn_t gdth_interrupt(int irq, void *dev_id) | 3293 | static irqreturn_t gdth_interrupt(int irq, void *dev_id) |
3296 | { | 3294 | { |
3297 | gdth_ha_str *ha = (gdth_ha_str *)dev_id; | 3295 | gdth_ha_str *ha = dev_id; |
3298 | 3296 | ||
3299 | return __gdth_interrupt(ha, irq, false, NULL); | 3297 | return __gdth_interrupt(ha, false, NULL); |
3300 | } | 3298 | } |
3301 | 3299 | ||
3302 | static int gdth_sync_event(gdth_ha_str *ha, int service, unchar index, | 3300 | static int gdth_sync_event(gdth_ha_str *ha, int service, unchar index, |