|
@@ -141,7 +141,7 @@
|
|
|
static void gdth_delay(int milliseconds);
|
|
|
static void gdth_eval_mapping(ulong32 size, ulong32 *cyls, int *heads, int *secs);
|
|
|
static irqreturn_t gdth_interrupt(int irq, void *dev_id);
|
|
|
-static irqreturn_t __gdth_interrupt(gdth_ha_str *ha, int irq,
|
|
|
+static irqreturn_t __gdth_interrupt(gdth_ha_str *ha,
|
|
|
int gdth_from_wait, int* pIndex);
|
|
|
static int gdth_sync_event(gdth_ha_str *ha, int service, unchar index,
|
|
|
Scsi_Cmnd *scp);
|
|
@@ -165,7 +165,6 @@ static int gdth_internal_cache_cmd(gdth_ha_str *ha, Scsi_Cmnd *scp);
|
|
|
static int gdth_fill_cache_cmd(gdth_ha_str *ha, Scsi_Cmnd *scp, ushort hdrive);
|
|
|
|
|
|
static void gdth_enable_int(gdth_ha_str *ha);
|
|
|
-static unchar gdth_get_status(gdth_ha_str *ha, int irq);
|
|
|
static int gdth_test_busy(gdth_ha_str *ha);
|
|
|
static int gdth_get_cmd_index(gdth_ha_str *ha);
|
|
|
static void gdth_release_event(gdth_ha_str *ha);
|
|
@@ -1334,14 +1333,12 @@ static void __init gdth_enable_int(gdth_ha_str *ha)
|
|
|
}
|
|
|
|
|
|
/* return IStatus if interrupt was from this card else 0 */
|
|
|
-static unchar gdth_get_status(gdth_ha_str *ha, int irq)
|
|
|
+static unchar gdth_get_status(gdth_ha_str *ha)
|
|
|
{
|
|
|
unchar IStatus = 0;
|
|
|
|
|
|
- TRACE(("gdth_get_status() irq %d ctr_count %d\n", irq, gdth_ctr_count));
|
|
|
+ TRACE(("gdth_get_status() irq %d ctr_count %d\n", ha->irq, gdth_ctr_count));
|
|
|
|
|
|
- if (ha->irq != (unchar)irq) /* check IRQ */
|
|
|
- return false;
|
|
|
if (ha->type == GDT_EISA)
|
|
|
IStatus = inb((ushort)ha->bmic + EDOORREG);
|
|
|
else if (ha->type == GDT_ISA)
|
|
@@ -1523,7 +1520,7 @@ static int gdth_wait(gdth_ha_str *ha, int index, ulong32 time)
|
|
|
return 1; /* no wait required */
|
|
|
|
|
|
do {
|
|
|
- __gdth_interrupt(ha, (int)ha->irq, true, &wait_index);
|
|
|
+ __gdth_interrupt(ha, true, &wait_index);
|
|
|
if (wait_index == index) {
|
|
|
answer_found = TRUE;
|
|
|
break;
|
|
@@ -3036,7 +3033,7 @@ static void gdth_clear_events(void)
|
|
|
|
|
|
/* SCSI interface functions */
|
|
|
|
|
|
-static irqreturn_t __gdth_interrupt(gdth_ha_str *ha, int irq,
|
|
|
+static irqreturn_t __gdth_interrupt(gdth_ha_str *ha,
|
|
|
int gdth_from_wait, int* pIndex)
|
|
|
{
|
|
|
gdt6m_dpram_str __iomem *dp6m_ptr = NULL;
|
|
@@ -3054,7 +3051,7 @@ static irqreturn_t __gdth_interrupt(gdth_ha_str *ha, int irq,
|
|
|
int act_int_coal = 0;
|
|
|
#endif
|
|
|
|
|
|
- TRACE(("gdth_interrupt() IRQ %d\n",irq));
|
|
|
+ TRACE(("gdth_interrupt() IRQ %d\n", ha->irq));
|
|
|
|
|
|
/* if polling and not from gdth_wait() -> return */
|
|
|
if (gdth_polling) {
|
|
@@ -3067,7 +3064,8 @@ static irqreturn_t __gdth_interrupt(gdth_ha_str *ha, int irq,
|
|
|
spin_lock_irqsave(&ha->smp_lock, flags);
|
|
|
|
|
|
/* search controller */
|
|
|
- if (0 == (IStatus = gdth_get_status(ha, irq))) {
|
|
|
+ IStatus = gdth_get_status(ha);
|
|
|
+ if (IStatus == 0) {
|
|
|
/* spurious interrupt */
|
|
|
if (!gdth_polling)
|
|
|
spin_unlock_irqrestore(&ha->smp_lock, flags);
|
|
@@ -3294,9 +3292,9 @@ static irqreturn_t __gdth_interrupt(gdth_ha_str *ha, int irq,
|
|
|
|
|
|
static irqreturn_t gdth_interrupt(int irq, void *dev_id)
|
|
|
{
|
|
|
- gdth_ha_str *ha = (gdth_ha_str *)dev_id;
|
|
|
+ gdth_ha_str *ha = dev_id;
|
|
|
|
|
|
- return __gdth_interrupt(ha, irq, false, NULL);
|
|
|
+ return __gdth_interrupt(ha, false, NULL);
|
|
|
}
|
|
|
|
|
|
static int gdth_sync_event(gdth_ha_str *ha, int service, unchar index,
|