forked from Minki/linux
[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:
parent
28f85009e0
commit
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) {
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user