[SCSI] aic7xxx: cap maxsync according to correct card limits
Not doing this can cause cards less than u160 capable to send out PPR offers to devices they can't then deliver on ... causing some devices to get a bit confused. Fix by capping the start syncrate at the appropriate level according to the card capabilities. Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
Родитель
28f85009e0
Коммит
142009a3df
|
@ -1701,7 +1701,16 @@ ahc_find_syncrate(struct ahc_softc *ahc, u_int *period,
|
|||
if ((*ppr_options & MSG_EXT_PPR_DT_REQ) == 0
|
||||
&& maxsync < AHC_SYNCRATE_ULTRA2)
|
||||
maxsync = AHC_SYNCRATE_ULTRA2;
|
||||
|
||||
|
||||
/* Now set the maxsync based on the card capabilities
|
||||
* DT is already done above */
|
||||
if ((ahc->features & (AHC_DT | AHC_ULTRA2)) == 0
|
||||
&& maxsync < AHC_SYNCRATE_ULTRA)
|
||||
maxsync = AHC_SYNCRATE_ULTRA;
|
||||
if ((ahc->features & (AHC_DT | AHC_ULTRA2 | AHC_ULTRA)) == 0
|
||||
&& maxsync < AHC_SYNCRATE_FAST)
|
||||
maxsync = AHC_SYNCRATE_FAST;
|
||||
|
||||
for (syncrate = &ahc_syncrates[maxsync];
|
||||
syncrate->rate != NULL;
|
||||
syncrate++) {
|
||||
|
@ -1765,6 +1774,17 @@ ahc_find_period(struct ahc_softc *ahc, u_int scsirate, u_int maxsync)
|
|||
else
|
||||
scsirate &= SXFR;
|
||||
|
||||
/* now set maxsync based on card capabilities */
|
||||
if ((ahc->features & AHC_DT) == 0 && maxsync < AHC_SYNCRATE_ULTRA2)
|
||||
maxsync = AHC_SYNCRATE_ULTRA2;
|
||||
if ((ahc->features & (AHC_DT | AHC_ULTRA2)) == 0
|
||||
&& maxsync < AHC_SYNCRATE_ULTRA)
|
||||
maxsync = AHC_SYNCRATE_ULTRA;
|
||||
if ((ahc->features & (AHC_DT | AHC_ULTRA2 | AHC_ULTRA)) == 0
|
||||
&& maxsync < AHC_SYNCRATE_FAST)
|
||||
maxsync = AHC_SYNCRATE_FAST;
|
||||
|
||||
|
||||
syncrate = &ahc_syncrates[maxsync];
|
||||
while (syncrate->rate != NULL) {
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче