Skip to content

Commit

Permalink
[SCSI] aic7xxx: fix bug in DT handing
Browse files Browse the repository at this point in the history
Basically DT isn't reported or handled at all.  The problem is that
lines of code like this:

spi_dt(starget) = tinfo->curr.ppr_options & MSG_EXT_PPR_DT_REQ;

don't do what you think they do when spi_dt is a single bit variable.

Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
  • Loading branch information
James Bottomley authored and James Bottomley committed Jul 30, 2005
1 parent e572f7c commit f7ff898
Showing 1 changed file with 6 additions and 4 deletions.
10 changes: 6 additions & 4 deletions drivers/scsi/aic7xxx/aic7xxx_osm.c
Original file line number Diff line number Diff line change
Expand Up @@ -1635,9 +1635,9 @@ ahc_send_async(struct ahc_softc *ahc, char channel,
spi_period(starget) = tinfo->curr.period;
spi_width(starget) = tinfo->curr.width;
spi_offset(starget) = tinfo->curr.offset;
spi_dt(starget) = tinfo->curr.ppr_options & MSG_EXT_PPR_DT_REQ;
spi_qas(starget) = tinfo->curr.ppr_options & MSG_EXT_PPR_QAS_REQ;
spi_iu(starget) = tinfo->curr.ppr_options & MSG_EXT_PPR_IU_REQ;
spi_dt(starget) = tinfo->curr.ppr_options & MSG_EXT_PPR_DT_REQ ? 1 : 0;
spi_qas(starget) = tinfo->curr.ppr_options & MSG_EXT_PPR_QAS_REQ ? 1 : 0;
spi_iu(starget) = tinfo->curr.ppr_options & MSG_EXT_PPR_IU_REQ ? 1 : 0;
spi_display_xfer_agreement(starget);
break;
}
Expand Down Expand Up @@ -2435,8 +2435,10 @@ static void ahc_linux_set_dt(struct scsi_target *starget, int dt)
if (dt) {
period = 9; /* 12.5ns is the only period valid for DT */
ppr_options |= MSG_EXT_PPR_DT_REQ;
} else if (period == 9)
} else if (period == 9) {
period = 10; /* if resetting DT, period must be >= 25ns */
ppr_options &= ~MSG_EXT_PPR_DT_REQ;
}

ahc_compile_devinfo(&devinfo, shost->this_id, starget->id, 0,
starget->channel + 'A', ROLE_INITIATOR);
Expand Down

0 comments on commit f7ff898

Please sign in to comment.