aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/libsas/sas_phy.c
diff options
context:
space:
mode:
authorJames Bottomley <James.Bottomley@steeleye.com>2006-09-06 20:28:07 -0400
committerJames Bottomley <jejb@mulgrave.il.steeleye.com>2006-09-07 16:20:23 -0400
commita01e70e570a72b8a8c9a58062e4f5bdcd3986222 (patch)
treed2b8b5e0e69d14805ac98033561597de6e24d5c6 /drivers/scsi/libsas/sas_phy.c
parentd24e1eeb3a16e4944288c2f3bf082e1513f4b425 (diff)
[SCSI] aci94xx: implement link rate setting
This patch implements the ability to set the minimum and maximum linkrates for both libsas (for expanders) and aic94xx (for the host phys). It also tidies up the setting of the hardware min and max to make sure they're updated when the expander emits a change broadcast. Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi/libsas/sas_phy.c')
-rw-r--r--drivers/scsi/libsas/sas_phy.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/drivers/scsi/libsas/sas_phy.c b/drivers/scsi/libsas/sas_phy.c
index 024ab00e70d2..9340cdbae4a3 100644
--- a/drivers/scsi/libsas/sas_phy.c
+++ b/drivers/scsi/libsas/sas_phy.c
@@ -67,13 +67,14 @@ static void sas_phye_oob_error(void *data)
67 switch (phy->error) { 67 switch (phy->error) {
68 case 1: 68 case 1:
69 case 2: 69 case 2:
70 i->dft->lldd_control_phy(phy, PHY_FUNC_HARD_RESET); 70 i->dft->lldd_control_phy(phy, PHY_FUNC_HARD_RESET,
71 NULL);
71 break; 72 break;
72 case 3: 73 case 3:
73 default: 74 default:
74 phy->error = 0; 75 phy->error = 0;
75 phy->enabled = 0; 76 phy->enabled = 0;
76 i->dft->lldd_control_phy(phy, PHY_FUNC_DISABLE); 77 i->dft->lldd_control_phy(phy, PHY_FUNC_DISABLE, NULL);
77 break; 78 break;
78 } 79 }
79 } 80 }
@@ -90,7 +91,7 @@ static void sas_phye_spinup_hold(void *data)
90 &phy->phy_events_pending); 91 &phy->phy_events_pending);
91 92
92 phy->error = 0; 93 phy->error = 0;
93 i->dft->lldd_control_phy(phy, PHY_FUNC_RELEASE_SPINUP_HOLD); 94 i->dft->lldd_control_phy(phy, PHY_FUNC_RELEASE_SPINUP_HOLD, NULL);
94} 95}
95 96
96/* ---------- Phy class registration ---------- */ 97/* ---------- Phy class registration ---------- */
@@ -144,10 +145,10 @@ int sas_register_phys(struct sas_ha_struct *sas_ha)
144 phy->phy->identify.target_port_protocols = phy->tproto; 145 phy->phy->identify.target_port_protocols = phy->tproto;
145 phy->phy->identify.sas_address = SAS_ADDR(sas_ha->sas_addr); 146 phy->phy->identify.sas_address = SAS_ADDR(sas_ha->sas_addr);
146 phy->phy->identify.phy_identifier = i; 147 phy->phy->identify.phy_identifier = i;
147 phy->phy->minimum_linkrate_hw = SAS_LINK_RATE_1_5_GBPS; 148 phy->phy->minimum_linkrate_hw = SAS_LINK_RATE_UNKNOWN;
148 phy->phy->maximum_linkrate_hw = SAS_LINK_RATE_3_0_GBPS; 149 phy->phy->maximum_linkrate_hw = SAS_LINK_RATE_UNKNOWN;
149 phy->phy->minimum_linkrate = SAS_LINK_RATE_1_5_GBPS; 150 phy->phy->minimum_linkrate = SAS_LINK_RATE_UNKNOWN;
150 phy->phy->maximum_linkrate = SAS_LINK_RATE_3_0_GBPS; 151 phy->phy->maximum_linkrate = SAS_LINK_RATE_UNKNOWN;
151 phy->phy->negotiated_linkrate = SAS_LINK_RATE_UNKNOWN; 152 phy->phy->negotiated_linkrate = SAS_LINK_RATE_UNKNOWN;
152 153
153 sas_phy_add(phy->phy); 154 sas_phy_add(phy->phy);