PERFORCE change 171011 for review

Alexander Motin mav at FreeBSD.org
Wed Nov 25 13:48:28 UTC 2009


http://p4web.freebsd.org/chv.cgi?CH=171011

Change 171011 by mav at mav_mavbook on 2009/11/25 13:47:41

	Report SATA controllers as such to CAM and report current SATA speed.

Affected files ...

.. //depot/projects/scottl-camlock/src/sys/dev/ata/ata-all.c#39 edit

Differences ...

==== //depot/projects/scottl-camlock/src/sys/dev/ata/ata-all.c#39 (text+ko) ====

@@ -1474,18 +1474,31 @@
 			d = &ch->curr[ccb->ccb_h.target_id];
 		else
 			d = &ch->user[ccb->ccb_h.target_id];
-//		if (cts->xport_specific.sata.valid & CTS_SATA_VALID_REVISION)
-//			d->revision = cts->xport_specific.sata.revision;
-		if (cts->xport_specific.ata.valid & CTS_ATA_VALID_MODE) {
-			if (cts->type == CTS_TYPE_CURRENT_SETTINGS) {
-				d->mode = ATA_SETMODE(ch->dev,
-				    ccb->ccb_h.target_id,
-				    cts->xport_specific.ata.mode);
-			} else
-				d->mode = cts->xport_specific.ata.mode;
+		if ((ch->flags & ATA_SATA) && (ch->flags & ATA_NO_SLAVE)) {
+			if (cts->xport_specific.sata.valid & CTS_SATA_VALID_REVISION)
+				d->revision = cts->xport_specific.sata.revision;
+			if (cts->xport_specific.ata.valid & CTS_SATA_VALID_MODE) {
+				if (cts->type == CTS_TYPE_CURRENT_SETTINGS) {
+					d->mode = ATA_SETMODE(ch->dev,
+					    ccb->ccb_h.target_id,
+					    cts->xport_specific.sata.mode);
+				} else
+					d->mode = cts->xport_specific.sata.mode;
+			}
+			if (cts->xport_specific.ata.valid & CTS_SATA_VALID_BYTECOUNT)
+				d->bytecount = min(8192, cts->xport_specific.sata.bytecount);
+		} else {
+			if (cts->xport_specific.ata.valid & CTS_ATA_VALID_MODE) {
+				if (cts->type == CTS_TYPE_CURRENT_SETTINGS) {
+					d->mode = ATA_SETMODE(ch->dev,
+					    ccb->ccb_h.target_id,
+					    cts->xport_specific.ata.mode);
+				} else
+					d->mode = cts->xport_specific.ata.mode;
+			}
+			if (cts->xport_specific.ata.valid & CTS_ATA_VALID_BYTECOUNT)
+				d->bytecount = min(8192, cts->xport_specific.ata.bytecount);
 		}
-		if (cts->xport_specific.ata.valid & CTS_ATA_VALID_BYTECOUNT)
-			d->bytecount = min(8192, cts->xport_specific.ata.bytecount);
 		ccb->ccb_h.status = CAM_REQ_CMP;
 		xpt_done(ccb);
 		break;
@@ -1501,12 +1514,27 @@
 			d = &ch->user[ccb->ccb_h.target_id];
 		cts->protocol = PROTO_ATA;
 		cts->protocol_version = PROTO_VERSION_UNSPECIFIED;
-		cts->transport = XPORT_ATA;
-		cts->transport_version = XPORT_VERSION_UNSPECIFIED;
-		cts->xport_specific.ata.mode = d->mode;
-		cts->xport_specific.ata.valid |= CTS_ATA_VALID_MODE;
-		cts->xport_specific.ata.bytecount = d->bytecount;
-		cts->xport_specific.ata.valid |= CTS_ATA_VALID_BYTECOUNT;
+		if ((ch->flags & ATA_SATA) && (ch->flags & ATA_NO_SLAVE)) {
+			cts->transport = XPORT_SATA;
+			cts->transport_version = XPORT_VERSION_UNSPECIFIED;
+			cts->xport_specific.sata.mode = d->mode;
+			cts->xport_specific.sata.valid |= CTS_SATA_VALID_MODE;
+			cts->xport_specific.sata.bytecount = d->bytecount;
+			cts->xport_specific.sata.valid |= CTS_SATA_VALID_BYTECOUNT;
+			if (cts->type == CTS_TYPE_CURRENT_SETTINGS) {
+				cts->xport_specific.sata.revision =
+				    ATA_GETREV(dev, ccb->ccb_h.target_id);
+			} else
+				cts->xport_specific.sata.revision = d->revision;
+			cts->xport_specific.sata.valid |= CTS_SATA_VALID_REVISION;
+		} else {
+			cts->transport = XPORT_ATA;
+			cts->transport_version = XPORT_VERSION_UNSPECIFIED;
+			cts->xport_specific.ata.mode = d->mode;
+			cts->xport_specific.ata.valid |= CTS_ATA_VALID_MODE;
+			cts->xport_specific.ata.bytecount = d->bytecount;
+			cts->xport_specific.ata.valid |= CTS_ATA_VALID_BYTECOUNT;
+		}
 		ccb->ccb_h.status = CAM_REQ_CMP;
 		xpt_done(ccb);
 		break;
@@ -1560,7 +1588,10 @@
 		cpi->target_sprt = 0;
 		cpi->hba_misc = PIM_SEQSCAN;
 		cpi->hba_eng_cnt = 0;
-		cpi->max_target = 1;
+		if (ch->flags & ATA_NO_SLAVE)
+			cpi->max_target = 0;
+		else
+			cpi->max_target = 1;
 		cpi->max_lun = 0;
 		cpi->initiator_id = 0;
 		cpi->bus_id = cam_sim_bus(sim);
@@ -1569,7 +1600,10 @@
 		strncpy(cpi->hba_vid, "ATA", HBA_IDLEN);
 		strncpy(cpi->dev_name, cam_sim_name(sim), DEV_IDLEN);
 		cpi->unit_number = cam_sim_unit(sim);
-		cpi->transport = XPORT_ATA;
+		if ((ch->flags & ATA_SATA) && (ch->flags & ATA_NO_SLAVE))
+			cpi->transport = XPORT_SATA;
+		else
+			cpi->transport = XPORT_ATA;
 		cpi->transport_version = XPORT_VERSION_UNSPECIFIED;
 		cpi->protocol = PROTO_ATA;
 		cpi->protocol_version = PROTO_VERSION_UNSPECIFIED;


More information about the p4-projects mailing list