summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sbin/atacontrol/atacontrol.c1
-rw-r--r--sbin/camcontrol/camcontrol.c2
-rw-r--r--sys/cam/cam_xpt.c2
-rw-r--r--sys/dev/ata/ata-all.c12
-rw-r--r--sys/dev/ata/ata-pci.c12
-rw-r--r--sys/dev/ata/ata-sata.c2
6 files changed, 24 insertions, 7 deletions
diff --git a/sbin/atacontrol/atacontrol.c b/sbin/atacontrol/atacontrol.c
index 29599eb..4354ddf 100644
--- a/sbin/atacontrol/atacontrol.c
+++ b/sbin/atacontrol/atacontrol.c
@@ -72,6 +72,7 @@ satarev2str(int mode)
case 1: return "SATA 1.5Gb/s";
case 2: return "SATA 3Gb/s";
case 3: return "SATA 6Gb/s";
+ case 0xff: return "SATA";
default: return "???";
}
}
diff --git a/sbin/camcontrol/camcontrol.c b/sbin/camcontrol/camcontrol.c
index 8a00f75..8e0605f 100644
--- a/sbin/camcontrol/camcontrol.c
+++ b/sbin/camcontrol/camcontrol.c
@@ -1022,6 +1022,8 @@ camxferrate(struct cam_device *device)
printf(" (");
if (sata->valid & CTS_SATA_VALID_REVISION)
printf("SATA %d.x, ", sata->revision);
+ else
+ printf("SATA, ");
if (sata->valid & CTS_SATA_VALID_MODE)
printf("%s, ", ata_mode2string(sata->mode));
if ((sata->valid & CTS_SATA_VALID_ATAPI) && sata->atapi != 0)
diff --git a/sys/cam/cam_xpt.c b/sys/cam/cam_xpt.c
index 9e79d02..ceaec99 100644
--- a/sys/cam/cam_xpt.c
+++ b/sys/cam/cam_xpt.c
@@ -1214,6 +1214,8 @@ xpt_announce_periph(struct cam_periph *periph, char *announce_string)
printf(" (");
if (sata->valid & CTS_SATA_VALID_REVISION)
printf("SATA %d.x, ", sata->revision);
+ else
+ printf("SATA, ");
if (sata->valid & CTS_SATA_VALID_MODE)
printf("%s, ", ata_mode2string(sata->mode));
if ((sata->valid & CTS_ATA_VALID_ATAPI) && sata->atapi != 0)
diff --git a/sys/dev/ata/ata-all.c b/sys/dev/ata/ata-all.c
index 6de8fda..0195781 100644
--- a/sys/dev/ata/ata-all.c
+++ b/sys/dev/ata/ata-all.c
@@ -1160,6 +1160,7 @@ ata_satarev2str(int rev)
case 1: return "SATA 1.5Gb/s";
case 2: return "SATA 3Gb/s";
case 3: return "SATA 6Gb/s";
+ case 0xff: return "SATA";
default: return "???";
}
}
@@ -1536,6 +1537,7 @@ ataaction(struct cam_sim *sim, union ccb *ccb)
if (ch->flags & ATA_SATA) {
cts->transport = XPORT_SATA;
cts->transport_version = XPORT_VERSION_UNSPECIFIED;
+ cts->xport_specific.sata.valid = 0;
cts->xport_specific.sata.mode = d->mode;
cts->xport_specific.sata.valid |= CTS_SATA_VALID_MODE;
cts->xport_specific.sata.bytecount = d->bytecount;
@@ -1543,14 +1545,20 @@ ataaction(struct cam_sim *sim, union ccb *ccb)
if (cts->type == CTS_TYPE_CURRENT_SETTINGS) {
cts->xport_specific.sata.revision =
ATA_GETREV(dev, ccb->ccb_h.target_id);
- } else
+ if (cts->xport_specific.sata.revision != 0xff) {
+ cts->xport_specific.sata.valid |=
+ CTS_SATA_VALID_REVISION;
+ }
+ } else {
cts->xport_specific.sata.revision = d->revision;
- cts->xport_specific.sata.valid |= CTS_SATA_VALID_REVISION;
+ cts->xport_specific.sata.valid |= CTS_SATA_VALID_REVISION;
+ }
cts->xport_specific.sata.atapi = d->atapi;
cts->xport_specific.sata.valid |= CTS_SATA_VALID_ATAPI;
} else {
cts->transport = XPORT_ATA;
cts->transport_version = XPORT_VERSION_UNSPECIFIED;
+ cts->xport_specific.ata.valid = 0;
cts->xport_specific.ata.mode = d->mode;
cts->xport_specific.ata.valid |= CTS_ATA_VALID_MODE;
cts->xport_specific.ata.bytecount = d->bytecount;
diff --git a/sys/dev/ata/ata-pci.c b/sys/dev/ata/ata-pci.c
index 8c4c01f..5271073 100644
--- a/sys/dev/ata/ata-pci.c
+++ b/sys/dev/ata/ata-pci.c
@@ -714,10 +714,14 @@ static int
ata_pcichannel_getrev(device_t dev, int target)
{
struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev));
-
- if (ctlr->getrev)
- return (ctlr->getrev(dev, target));
- else
+ struct ata_channel *ch = device_get_softc(dev);
+
+ if (ch->flags & ATA_SATA) {
+ if (ctlr->getrev)
+ return (ctlr->getrev(dev, target));
+ else
+ return (0xff);
+ } else
return (0);
}
diff --git a/sys/dev/ata/ata-sata.c b/sys/dev/ata/ata-sata.c
index 9e3f7e8..d4c52fd 100644
--- a/sys/dev/ata/ata-sata.c
+++ b/sys/dev/ata/ata-sata.c
@@ -223,7 +223,7 @@ ata_sata_getrev(device_t dev, int target)
if (ch->r_io[ATA_SSTATUS].res)
return ((ATA_IDX_INL(ch, ATA_SSTATUS) & 0x0f0) >> 4);
- return (0);
+ return (0xff);
}
int
OpenPOWER on IntegriCloud