diff options
author | James Bottomley <James.Bottomley@steeleye.com> | 2006-09-06 20:28:07 -0400 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.il.steeleye.com> | 2006-09-07 16:20:23 -0400 |
commit | a01e70e570a72b8a8c9a58062e4f5bdcd3986222 (patch) | |
tree | d2b8b5e0e69d14805ac98033561597de6e24d5c6 /drivers/scsi/libsas/sas_phy.c | |
parent | d24e1eeb3a16e4944288c2f3bf082e1513f4b425 (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.c | 15 |
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); |