svn commit: r236790 - in stable/9/sys: cam/ata dev/ahci dev/ata
dev/mvs dev/siis
Alexander Motin
mav at FreeBSD.org
Sat Jun 9 07:53:58 UTC 2012
Author: mav
Date: Sat Jun 9 07:53:57 2012
New Revision: 236790
URL: http://svn.freebsd.org/changeset/base/236790
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/9/sys/cam/ata/ata_xpt.c
stable/9/sys/dev/ahci/ahci.c
stable/9/sys/dev/ata/ata-all.c
stable/9/sys/dev/mvs/mvs.c
stable/9/sys/dev/siis/siis.c
Directory Properties:
stable/9/sys/ (props changed)
stable/9/sys/dev/ (props changed)
Modified: stable/9/sys/cam/ata/ata_xpt.c
==============================================================================
--- stable/9/sys/cam/ata/ata_xpt.c Sat Jun 9 07:49:09 2012 (r236789)
+++ stable/9/sys/cam/ata/ata_xpt.c Sat Jun 9 07:53:57 2012 (r236790)
@@ -940,9 +940,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);
@@ -1119,6 +1119,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);
@@ -1195,6 +1198,9 @@ notsata:
path->device->flags |= CAM_DEV_IDENTIFY_DATA_VALID;
}
+ ata_device_transport(path);
+ if (changed)
+ proberequestdefaultnegotiation(periph);
if (periph->path->device->flags & CAM_DEV_UNCONFIGURED) {
path->device->flags &= ~CAM_DEV_UNCONFIGURED;
@@ -1773,6 +1779,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) {
@@ -1793,6 +1805,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/9/sys/dev/ahci/ahci.c
==============================================================================
--- stable/9/sys/dev/ahci/ahci.c Sat Jun 9 07:49:09 2012 (r236789)
+++ stable/9/sys/dev/ahci/ahci.c Sat Jun 9 07:53:57 2012 (r236790)
@@ -2881,7 +2881,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;
@@ -2967,7 +2967,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/9/sys/dev/ata/ata-all.c
==============================================================================
--- stable/9/sys/dev/ata/ata-all.c Sat Jun 9 07:49:09 2012 (r236789)
+++ stable/9/sys/dev/ata/ata-all.c Sat Jun 9 07:53:57 2012 (r236790)
@@ -1787,7 +1787,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;
@@ -1875,7 +1875,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;
if (device_get_devclass(device_get_parent(parent)) ==
Modified: stable/9/sys/dev/mvs/mvs.c
==============================================================================
--- stable/9/sys/dev/mvs/mvs.c Sat Jun 9 07:49:09 2012 (r236789)
+++ stable/9/sys/dev/mvs/mvs.c Sat Jun 9 07:53:57 2012 (r236790)
@@ -2301,7 +2301,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;
@@ -2385,7 +2385,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;
if ((ch->quirks & MVS_Q_SOC) == 0) {
Modified: stable/9/sys/dev/siis/siis.c
==============================================================================
--- stable/9/sys/dev/siis/siis.c Sat Jun 9 07:49:09 2012 (r236789)
+++ stable/9/sys/dev/siis/siis.c Sat Jun 9 07:53:57 2012 (r236790)
@@ -1884,7 +1884,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;
@@ -1960,7 +1960,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->maxio = MAXPHYS;
cpi->hba_vendor = pci_get_vendor(parent);
More information about the svn-src-all
mailing list