A lot of people are trying to help me fix this problem, I thank all of them.
Currently, the problem seems to be an IRQ not reveive when a device attempts
to reconnect.
An ugly work around, is to disallow disconnection. I've no BIOS option to
change this behavior.
Egbert Eich has already a better solution where timers are involved. He is
looking for his old sources to send me the patch.
Meanwhile, is it possible to integrate the following diff into seagate.c.
The patch is safe since it only modifies the source when PROHIBIT_DISCONNECT
is defined. At least, one other driver has the same problem (see
AM53C974.c).
The other modification, is to allow the automatic detection of my board from
its BIOS identifier. (Dell are not uncommon computers after all).
Ideally, PROHIBIT_DISCONNECT could be a kernel building option for seagate.c
(the one you can select when you customize your own kernel).
Here is the segate.c patch for latest 2.3.31 kernel.
*** seagate.c Sat Dec 11 11:55:00 1999
--- seagate.new Sat Dec 11 11:52:54 1999
***************
*** 18,23
*
* 1998-jul-29 - created DPRINTK macros and made it work under
* linux 2.1.112, simplified some #defines etc. <[EMAIL PROTECTED]>
*/
/*
--- 18,27 -----
*
* 1998-jul-29 - created DPRINTK macros and made it work under
* linux 2.1.112, simplified some #defines etc. <[EMAIL PROTECTED]>
+ *
+ * 1999-dec-11 - Add PROHIBIT_DISCONNECT flag to fix broken driver for
+ * some TMC 950/9C50 by Christian Jullien.
+ * Works on linux 2.3.31 <[EMAIL PROTECTED]>
*/
/*
***************
*** 71,76
* 'messed' with. It makes the following two options
* obsolete. To reenable the old sceme define this.
*
* The following to options are patches from the SCSI.HOWTO
*
* -DSWAPSTAT This will swap the definitions for STAT_MSG and STAT_CD.
--- 75,87 -----
* 'messed' with. It makes the following two options
* obsolete. To reenable the old sceme define this.
*
+ * -DPROHIBIT_DISCONNECT
+ * Some TMC cards (at least a TMC 9C50 on Dell advanced port
+ * replicator) are not notified by an IRQ to allow
+ * reconnection. This flag prohibits disconnection. PLEASE NOTE
+ * that this workaround will be a real problem when more than
+ * one device is connected to the board.
+ *
* The following to options are patches from the SCSI.HOWTO
*
* -DSWAPSTAT This will swap the definitions for STAT_MSG and STAT_CD.
***************
*** 308,313
{"FUTURE DOMAIN CORP. (C) 1992 V8.00.004/02/92", 5, 44, FD},
{"IBM F1 BIOS V1.1004/30/92", 5, 25, FD},
{"FUTURE DOMAIN TMC-950", 5, 21, FD},
};
#define NUM_SIGNATURES (sizeof(signatures) / sizeof(Signature))
--- 319,325 -----
{"FUTURE DOMAIN CORP. (C) 1992 V8.00.004/02/92", 5, 44, FD},
{"IBM F1 BIOS V1.1004/30/92", 5, 25, FD},
{"FUTURE DOMAIN TMC-950", 5, 21, FD},
+ {"Future Domain Corp. V1.0008/18/93", 5, 33, FD},
};
#define NUM_SIGNATURES (sizeof(signatures) / sizeof(Signature))
***************
*** 529,534
#ifdef SWAPCNTDATA
" SWAPCNTDATA"
#endif
"\n", tpnt->name);
return 1;
}
--- 541,549 -----
#ifdef SWAPCNTDATA
" SWAPCNTDATA"
#endif
+ #ifdef PROHIBIT_DISCONNECT
+ " PROHIBIT_DISCONNECT"
+ #endif
"\n", tpnt->name);
return 1;
}
***************
*** 1478,1485
switch (reselect)
{
case CAN_RECONNECT:
! WRITE_DATA (IDENTIFY (1, lun));
!
DPRINTK (PHASE_RESELECT | PHASE_MSGOUT, "scsi%d : sent
IDENTIFY message.\n", hostno);
break;
#ifdef LINKED
--- 1493,1503 -----
switch (reselect)
{
case CAN_RECONNECT:
! #ifdef PROHIBIT_DISCONNECT
! WRITE_DATA (IDENTIFY ((0, lun)));
! #else
! WRITE_DATA (IDENTIFY ((1, lun)));
! #endif
DPRINTK (PHASE_RESELECT | PHASE_MSGOUT, "scsi%d : sent
IDENTIFY message.\n", hostno);
break;
#ifdef LINKED
-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [EMAIL PROTECTED]