Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 2 Nov 2006 23:07:50 GMT
From:      Matt Jacob <mjacob@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 109076 for review
Message-ID:  <200611022307.kA2N7oPe087925@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=109076

Change 109076 by mjacob@newisp on 2006/11/02 23:07:36

	Fix some negotiation issues (like not being able to negotiate async)

Affected files ...

.. //depot/projects/newisp/dev/mpt/mpt_cam.c#8 edit

Differences ...

==== //depot/projects/newisp/dev/mpt/mpt_cam.c#8 (text+ko) ====

@@ -3021,12 +3021,25 @@
 			    DP_WIDE : DP_NARROW;
 		}
 
-		if ((spi->valid & CTS_SPI_VALID_SYNC_OFFSET) &&
-		    (spi->valid & CTS_SPI_VALID_SYNC_RATE) &&
-		    (spi->sync_period && spi->sync_offset)) {
+		if (spi->valid & CTS_SPI_VALID_SYNC_OFFSET) {
+			dval |= DP_SYNC;
+			offset = spi->sync_offset;
+		} else {
+			PTR_CONFIG_PAGE_SCSI_DEVICE_1 ptr =
+			    &mpt->mpt_dev_page1[tgt];
+			offset = ptr->RequestedParameters;
+			offset &= MPI_SCSIDEVPAGE1_RP_MAX_SYNC_OFFSET_MASK;
+	    		offset >>= MPI_SCSIDEVPAGE1_RP_SHIFT_MAX_SYNC_OFFSET;
+		}
+		if (spi->valid & CTS_SPI_VALID_SYNC_RATE) {
 			dval |= DP_SYNC;
 			period = spi->sync_period;
-			offset = spi->sync_offset;
+		} else {
+			PTR_CONFIG_PAGE_SCSI_DEVICE_1 ptr =
+			    &mpt->mpt_dev_page1[tgt];
+			period = ptr->RequestedParameters;
+			period &= MPI_SCSIDEVPAGE1_RP_MIN_SYNC_PERIOD_MASK;
+	    		period >>= MPI_SCSIDEVPAGE1_RP_SHIFT_MIN_SYNC_PERIOD;
 		}
 		CAMLOCK_2_MPTLOCK(mpt);
 		if (dval & DP_DISC_ENABLE) {
@@ -3045,6 +3058,12 @@
 		if (dval & DP_SYNC) {
 			mpt_setsync(mpt, tgt, period, offset);
 		}
+		if (dval == 0) {
+			MPTLOCK_2_CAMLOCK(mpt);
+			mpt_set_ccb_status(ccb, CAM_REQ_CMP);
+			break;
+		}
+			
 		mpt_lprt(mpt, MPT_PRT_NEGOTIATION,
 		    "Set Settings[%d]: 0x%x period 0x%x offset %d\n", tgt,
 		    dval, period , offset);
@@ -3373,7 +3392,13 @@
 	ptr->RequestedParameters &= ~MPI_SCSIDEVPAGE1_RP_DT;
 	ptr->RequestedParameters &= ~MPI_SCSIDEVPAGE1_RP_QAS;
 	ptr->RequestedParameters &= ~MPI_SCSIDEVPAGE1_RP_IU;
-	ptr->RequestedParameters |= (period << 8) | (offset << 16);
+	if (period == 0) {
+		return;
+	}
+	ptr->RequestedParameters |=
+	    period << MPI_SCSIDEVPAGE1_RP_SHIFT_MIN_SYNC_PERIOD;
+	ptr->RequestedParameters |=
+	    offset << MPI_SCSIDEVPAGE1_RP_SHIFT_MAX_SYNC_OFFSET;
 	if (period < 0xa) {
 		ptr->RequestedParameters |= MPI_SCSIDEVPAGE1_RP_DT;
 	}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200611022307.kA2N7oPe087925>