Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 9 Jun 2012 07:57:52 +0000 (UTC)
From:      Alexander Motin <mav@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org
Subject:   svn commit: r236791 - in stable/8/sys: cam/ata dev/ahci dev/ata dev/mvs dev/siis
Message-ID:  <201206090757.q597vqec015833@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mav
Date: Sat Jun  9 07:57:52 2012
New Revision: 236791
URL: http://svn.freebsd.org/changeset/base/236791

Log:
  r236666:
  ATA/SATA controllers have no idea about protocol of the connected device
  until transport will do some probe actions (at least soft reset).
  Make ATA/SATA SIMs to not report bogus and confusing PROTO_ATA protocol.
  Make ATA/SATA transport to fill that gap by reporting protocol to SIM with
  XPT_SET_TRAN_SETTINGS and patching XPT_GET_TRAN_SETTINGS results if needed.

Modified:
  stable/8/sys/cam/ata/ata_xpt.c
  stable/8/sys/dev/ahci/ahci.c
  stable/8/sys/dev/ata/ata-all.c
  stable/8/sys/dev/mvs/mvs.c
  stable/8/sys/dev/siis/siis.c
Directory Properties:
  stable/8/sys/   (props changed)

Modified: stable/8/sys/cam/ata/ata_xpt.c
==============================================================================
--- stable/8/sys/cam/ata/ata_xpt.c	Sat Jun  9 07:53:57 2012	(r236790)
+++ stable/8/sys/cam/ata/ata_xpt.c	Sat Jun  9 07:57:52 2012	(r236791)
@@ -873,9 +873,9 @@ noerror:
 				xpt_action((union ccb *)&cts);
 			}
 		}
+		ata_device_transport(path);
 		if (changed)
 			proberequestdefaultnegotiation(periph);
-		ata_device_transport(path);
 		PROBE_SET_ACTION(softc, PROBE_SETMODE);
 		xpt_release_ccb(done_ccb);
 		xpt_schedule(periph, priority);
@@ -1054,6 +1054,9 @@ notsata:
 		snprintf(ident_buf->revision, sizeof(ident_buf->revision),
 		    "%04x", softc->pm_prv);
 		path->device->flags |= CAM_DEV_IDENTIFY_DATA_VALID;
+		ata_device_transport(path);
+		if (periph->path->device->flags & CAM_DEV_UNCONFIGURED)
+			proberequestdefaultnegotiation(periph);
 		/* Set supported bits. */
 		bzero(&cts, sizeof(cts));
 		xpt_setup_ccb(&cts.ccb_h, path, CAM_PRIORITY_NONE);
@@ -1585,6 +1588,12 @@ ata_get_transfer_settings(struct ccb_tra
 	sim = cts->ccb_h.path->bus->sim;
 	(*(sim->sim_action))(sim, (union ccb *)cts);
 
+	if (cts->protocol == PROTO_UNKNOWN ||
+	    cts->protocol == PROTO_UNSPECIFIED) {
+		cts->protocol = device->protocol;
+		cts->protocol_version = device->protocol_version;
+	}
+
 	if (cts->protocol == PROTO_ATA) {
 		ata = &cts->proto_specific.ata;
 		if ((ata->valid & CTS_ATA_VALID_TQ) == 0) {
@@ -1605,6 +1614,12 @@ ata_get_transfer_settings(struct ccb_tra
 				scsi->flags |= CTS_SCSI_FLAGS_TAG_ENB;
 		}
 	}
+
+	if (cts->transport == XPORT_UNKNOWN ||
+	    cts->transport == XPORT_UNSPECIFIED) {
+		cts->transport = device->transport;
+		cts->transport_version = device->transport_version;
+	}
 }
 
 static void

Modified: stable/8/sys/dev/ahci/ahci.c
==============================================================================
--- stable/8/sys/dev/ahci/ahci.c	Sat Jun  9 07:53:57 2012	(r236790)
+++ stable/8/sys/dev/ahci/ahci.c	Sat Jun  9 07:57:52 2012	(r236791)
@@ -2878,7 +2878,7 @@ ahciaction(struct cam_sim *sim, union cc
 			d = &ch->curr[ccb->ccb_h.target_id];
 		else
 			d = &ch->user[ccb->ccb_h.target_id];
-		cts->protocol = PROTO_ATA;
+		cts->protocol = PROTO_UNSPECIFIED;
 		cts->protocol_version = PROTO_VERSION_UNSPECIFIED;
 		cts->transport = XPORT_SATA;
 		cts->transport_version = XPORT_VERSION_UNSPECIFIED;
@@ -2963,7 +2963,7 @@ ahciaction(struct cam_sim *sim, union cc
 		cpi->unit_number = cam_sim_unit(sim);
 		cpi->transport = XPORT_SATA;
 		cpi->transport_version = XPORT_VERSION_UNSPECIFIED;
-		cpi->protocol = PROTO_ATA;
+		cpi->protocol = PROTO_UNSPECIFIED;
 		cpi->protocol_version = PROTO_VERSION_UNSPECIFIED;
 		cpi->maxio = MAXPHYS;
 		/* ATI SB600 can't handle 256 sectors with FPDMA (NCQ). */

Modified: stable/8/sys/dev/ata/ata-all.c
==============================================================================
--- stable/8/sys/dev/ata/ata-all.c	Sat Jun  9 07:53:57 2012	(r236790)
+++ stable/8/sys/dev/ata/ata-all.c	Sat Jun  9 07:57:52 2012	(r236791)
@@ -1786,7 +1786,7 @@ ataaction(struct cam_sim *sim, union ccb
 			d = &ch->curr[ccb->ccb_h.target_id];
 		else
 			d = &ch->user[ccb->ccb_h.target_id];
-		cts->protocol = PROTO_ATA;
+		cts->protocol = PROTO_UNSPECIFIED;
 		cts->protocol_version = PROTO_VERSION_UNSPECIFIED;
 		if (ch->flags & ATA_SATA) {
 			cts->transport = XPORT_SATA;
@@ -1873,7 +1873,7 @@ ataaction(struct cam_sim *sim, union ccb
 		else
 			cpi->transport = XPORT_ATA;
 		cpi->transport_version = XPORT_VERSION_UNSPECIFIED;
-		cpi->protocol = PROTO_ATA;
+		cpi->protocol = PROTO_UNSPECIFIED;
 		cpi->protocol_version = PROTO_VERSION_UNSPECIFIED;
 		cpi->maxio = ch->dma.max_iosize ? ch->dma.max_iosize : DFLTPHYS;
 		cpi->ccb_h.status = CAM_REQ_CMP;

Modified: stable/8/sys/dev/mvs/mvs.c
==============================================================================
--- stable/8/sys/dev/mvs/mvs.c	Sat Jun  9 07:53:57 2012	(r236790)
+++ stable/8/sys/dev/mvs/mvs.c	Sat Jun  9 07:57:52 2012	(r236791)
@@ -2300,7 +2300,7 @@ mvsaction(struct cam_sim *sim, union ccb
 			d = &ch->curr[ccb->ccb_h.target_id];
 		else
 			d = &ch->user[ccb->ccb_h.target_id];
-		cts->protocol = PROTO_ATA;
+		cts->protocol = PROTO_UNSPECIFIED;
 		cts->protocol_version = PROTO_VERSION_UNSPECIFIED;
 		cts->transport = XPORT_SATA;
 		cts->transport_version = XPORT_VERSION_UNSPECIFIED;
@@ -2383,7 +2383,7 @@ mvsaction(struct cam_sim *sim, union ccb
 		cpi->unit_number = cam_sim_unit(sim);
 		cpi->transport = XPORT_SATA;
 		cpi->transport_version = XPORT_VERSION_UNSPECIFIED;
-		cpi->protocol = PROTO_ATA;
+		cpi->protocol = PROTO_UNSPECIFIED;
 		cpi->protocol_version = PROTO_VERSION_UNSPECIFIED;
 		cpi->maxio = MAXPHYS;
 		cpi->ccb_h.status = CAM_REQ_CMP;

Modified: stable/8/sys/dev/siis/siis.c
==============================================================================
--- stable/8/sys/dev/siis/siis.c	Sat Jun  9 07:53:57 2012	(r236790)
+++ stable/8/sys/dev/siis/siis.c	Sat Jun  9 07:57:52 2012	(r236791)
@@ -1889,7 +1889,7 @@ siisaction(struct cam_sim *sim, union cc
 			d = &ch->curr[ccb->ccb_h.target_id];
 		else
 			d = &ch->user[ccb->ccb_h.target_id];
-		cts->protocol = PROTO_ATA;
+		cts->protocol = PROTO_UNSPECIFIED;
 		cts->protocol_version = PROTO_VERSION_UNSPECIFIED;
 		cts->transport = XPORT_SATA;
 		cts->transport_version = XPORT_VERSION_UNSPECIFIED;
@@ -1964,7 +1964,7 @@ siisaction(struct cam_sim *sim, union cc
 		cpi->unit_number = cam_sim_unit(sim);
 		cpi->transport = XPORT_SATA;
 		cpi->transport_version = XPORT_VERSION_UNSPECIFIED;
-		cpi->protocol = PROTO_ATA;
+		cpi->protocol = PROTO_UNSPECIFIED;
 		cpi->protocol_version = PROTO_VERSION_UNSPECIFIED;
 		cpi->ccb_h.status = CAM_REQ_CMP;
 		cpi->maxio = MAXPHYS;



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