svn commit: r215777 - stable/8/sys/dev/ata
Alexander Motin
mav at FreeBSD.org
Tue Nov 23 21:42:27 UTC 2010
Author: mav
Date: Tue Nov 23 21:42:26 2010
New Revision: 215777
URL: http://svn.freebsd.org/changeset/base/215777
Log:
MFC r215468:
Make ATA_CAM wrapper to report SATA power management capabilities to CAM to
make it configure device to initiate transitions if controller configured
to accept them. This makes hint.ata.X.pm_level=1 mode working.
Modified:
stable/8/sys/dev/ata/ata-all.c
stable/8/sys/dev/ata/ata-all.h
Directory Properties:
stable/8/sys/ (props changed)
stable/8/sys/amd64/include/xen/ (props changed)
stable/8/sys/cddl/contrib/opensolaris/ (props changed)
stable/8/sys/contrib/dev/acpica/ (props changed)
stable/8/sys/contrib/pf/ (props changed)
stable/8/sys/dev/xen/xenpci/ (props changed)
Modified: stable/8/sys/dev/ata/ata-all.c
==============================================================================
--- stable/8/sys/dev/ata/ata-all.c Tue Nov 23 21:40:21 2010 (r215776)
+++ stable/8/sys/dev/ata/ata-all.c Tue Nov 23 21:42:26 2010 (r215777)
@@ -170,7 +170,12 @@ ata_attach(device_t dev)
ch->user[i].bytecount = 8192;
else
ch->user[i].bytecount = MAXPHYS;
+ ch->user[i].caps = 0;
ch->curr[i] = ch->user[i];
+ if (ch->pm_level > 0)
+ ch->user[i].caps |= CTS_SATA_CAPS_H_PMREQ;
+ if (ch->pm_level > 1)
+ ch->user[i].caps |= CTS_SATA_CAPS_D_PMREQ;
}
#endif
callout_init(&ch->poll_callout, 1);
@@ -1626,6 +1631,8 @@ ataaction(struct cam_sim *sim, union ccb
d->bytecount = min(8192, cts->xport_specific.sata.bytecount);
if (cts->xport_specific.sata.valid & CTS_SATA_VALID_ATAPI)
d->atapi = cts->xport_specific.sata.atapi;
+ if (cts->xport_specific.sata.valid & CTS_SATA_VALID_CAPS)
+ d->caps = cts->xport_specific.sata.caps;
} else {
if (cts->xport_specific.ata.valid & CTS_ATA_VALID_MODE) {
if (cts->type == CTS_TYPE_CURRENT_SETTINGS) {
@@ -1671,9 +1678,21 @@ ataaction(struct cam_sim *sim, union ccb
cts->xport_specific.sata.valid |=
CTS_SATA_VALID_REVISION;
}
+ cts->xport_specific.sata.caps =
+ d->caps & CTS_SATA_CAPS_D;
+ if (ch->pm_level) {
+ cts->xport_specific.sata.caps |=
+ CTS_SATA_CAPS_H_PMREQ;
+ }
+ cts->xport_specific.sata.caps &=
+ ch->user[ccb->ccb_h.target_id].caps;
+ cts->xport_specific.sata.valid |=
+ CTS_SATA_VALID_CAPS;
} else {
cts->xport_specific.sata.revision = d->revision;
cts->xport_specific.sata.valid |= CTS_SATA_VALID_REVISION;
+ cts->xport_specific.sata.caps = d->caps;
+ cts->xport_specific.sata.valid |= CTS_SATA_VALID_CAPS;
}
cts->xport_specific.sata.atapi = d->atapi;
cts->xport_specific.sata.valid |= CTS_SATA_VALID_ATAPI;
Modified: stable/8/sys/dev/ata/ata-all.h
==============================================================================
--- stable/8/sys/dev/ata/ata-all.h Tue Nov 23 21:40:21 2010 (r215776)
+++ stable/8/sys/dev/ata/ata-all.h Tue Nov 23 21:42:26 2010 (r215777)
@@ -535,6 +535,7 @@ struct ata_cam_device {
int mode;
u_int bytecount;
u_int atapi;
+ u_int caps;
};
#endif
More information about the svn-src-stable-8
mailing list