cxgb_ael1002.c (274443) | cxgb_ael1002.c (277343) |
---|---|
1/************************************************************************** 2 3Copyright (c) 2007-2009, Chelsio Inc. 4All rights reserved. 5 6Redistribution and use in source and binary forms, with or without 7modification, are permitted provided that the following conditions are met: 8 --- 14 unchanged lines hidden (view full) --- 23INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26POSSIBILITY OF SUCH DAMAGE. 27 28***************************************************************************/ 29 30#include <sys/cdefs.h> | 1/************************************************************************** 2 3Copyright (c) 2007-2009, Chelsio Inc. 4All rights reserved. 5 6Redistribution and use in source and binary forms, with or without 7modification, are permitted provided that the following conditions are met: 8 --- 14 unchanged lines hidden (view full) --- 23INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26POSSIBILITY OF SUCH DAMAGE. 27 28***************************************************************************/ 29 30#include <sys/cdefs.h> |
31__FBSDID("$FreeBSD: stable/10/sys/dev/cxgb/common/cxgb_ael1002.c 274443 2014-11-12 20:07:43Z np $"); | 31__FBSDID("$FreeBSD: stable/10/sys/dev/cxgb/common/cxgb_ael1002.c 277343 2015-01-18 20:38:38Z np $"); |
32 33#include <cxgb_include.h> 34 35#undef msleep 36#define msleep t3_os_sleep 37 38enum { 39 PMD_RSD = 10, /* PMA/PMD receive signal detect register */ --- 238 unchanged lines hidden (view full) --- 278static int ael1002_intr_noop(struct cphy *phy) 279{ 280 return 0; 281} 282 283/* 284 * Get link status for a 10GBASE-R device. 285 */ | 32 33#include <cxgb_include.h> 34 35#undef msleep 36#define msleep t3_os_sleep 37 38enum { 39 PMD_RSD = 10, /* PMA/PMD receive signal detect register */ --- 238 unchanged lines hidden (view full) --- 278static int ael1002_intr_noop(struct cphy *phy) 279{ 280 return 0; 281} 282 283/* 284 * Get link status for a 10GBASE-R device. 285 */ |
286static int get_link_status_r(struct cphy *phy, int *link_ok, int *speed, | 286static int get_link_status_r(struct cphy *phy, int *link_state, int *speed, |
287 int *duplex, int *fc) 288{ | 287 int *duplex, int *fc) 288{ |
289 if (link_ok) { | 289 if (link_state) { |
290 unsigned int stat0, stat1, stat2; 291 int err = mdio_read(phy, MDIO_DEV_PMA_PMD, PMD_RSD, &stat0); 292 293 if (!err) 294 err = mdio_read(phy, MDIO_DEV_PCS, PCS_STAT1_R, &stat1); 295 if (!err) 296 err = mdio_read(phy, MDIO_DEV_XGXS, XS_LN_STAT, &stat2); 297 if (err) 298 return err; | 290 unsigned int stat0, stat1, stat2; 291 int err = mdio_read(phy, MDIO_DEV_PMA_PMD, PMD_RSD, &stat0); 292 293 if (!err) 294 err = mdio_read(phy, MDIO_DEV_PCS, PCS_STAT1_R, &stat1); 295 if (!err) 296 err = mdio_read(phy, MDIO_DEV_XGXS, XS_LN_STAT, &stat2); 297 if (err) 298 return err; |
299 *link_ok = (stat0 & stat1 & (stat2 >> 12)) & 1; | |
300 | 299 |
301 if (*link_ok == 0) 302 return (0); | 300 stat0 &= 1; 301 stat1 &= 1; 302 stat2 = (stat2 >> 12) & 1; 303 if (stat0 & stat1 & stat2) 304 *link_state = PHY_LINK_UP; 305 else if (stat0 == 1 && stat1 == 0 && stat2 == 1) 306 *link_state = PHY_LINK_PARTIAL; 307 else 308 *link_state = PHY_LINK_DOWN; |
303 } 304 if (speed) 305 *speed = SPEED_10000; 306 if (duplex) 307 *duplex = DUPLEX_FULL; 308 return 0; 309} 310 --- 1029 unchanged lines hidden (view full) --- 1340 cause = cphy_cause_module_change; 1341 } 1342 1343 ret = t3_phy_lasi_intr_handler(phy); 1344 if (ret < 0) 1345 return ret; 1346 1347 ret |= cause; | 309 } 310 if (speed) 311 *speed = SPEED_10000; 312 if (duplex) 313 *duplex = DUPLEX_FULL; 314 return 0; 315} 316 --- 1029 unchanged lines hidden (view full) --- 1346 cause = cphy_cause_module_change; 1347 } 1348 1349 ret = t3_phy_lasi_intr_handler(phy); 1350 if (ret < 0) 1351 return ret; 1352 1353 ret |= cause; |
1348 if (!ret) { 1349 (void) ael2005_reset(phy, 0); | 1354 if (!ret) |
1350 ret |= cphy_cause_link_change; | 1355 ret |= cphy_cause_link_change; |
1351 } | |
1352 return ret; 1353} 1354 1355static struct cphy_ops ael2005_ops = { 1356#ifdef C99_NOT_SUPPORTED 1357 ael2005_reset, 1358 ael2005_intr_enable, 1359 ael2005_intr_disable, --- 791 unchanged lines hidden (view full) --- 2151 2152 ael_laser_down(phy, 0); 2153 return 0; 2154} 2155 2156/* 2157 * Get link status for a 10GBASE-X device. 2158 */ | 1356 return ret; 1357} 1358 1359static struct cphy_ops ael2005_ops = { 1360#ifdef C99_NOT_SUPPORTED 1361 ael2005_reset, 1362 ael2005_intr_enable, 1363 ael2005_intr_disable, --- 791 unchanged lines hidden (view full) --- 2155 2156 ael_laser_down(phy, 0); 2157 return 0; 2158} 2159 2160/* 2161 * Get link status for a 10GBASE-X device. 2162 */ |
2159static int get_link_status_x(struct cphy *phy, int *link_ok, int *speed, | 2163static int get_link_status_x(struct cphy *phy, int *link_state, int *speed, |
2160 int *duplex, int *fc) 2161{ | 2164 int *duplex, int *fc) 2165{ |
2162 if (link_ok) { | 2166 if (link_state) { |
2163 unsigned int stat0, stat1, stat2; 2164 int err = mdio_read(phy, MDIO_DEV_PMA_PMD, PMD_RSD, &stat0); 2165 2166 if (!err) 2167 err = mdio_read(phy, MDIO_DEV_PCS, PCS_STAT1_X, &stat1); 2168 if (!err) 2169 err = mdio_read(phy, MDIO_DEV_XGXS, XS_LN_STAT, &stat2); 2170 if (err) 2171 return err; | 2167 unsigned int stat0, stat1, stat2; 2168 int err = mdio_read(phy, MDIO_DEV_PMA_PMD, PMD_RSD, &stat0); 2169 2170 if (!err) 2171 err = mdio_read(phy, MDIO_DEV_PCS, PCS_STAT1_X, &stat1); 2172 if (!err) 2173 err = mdio_read(phy, MDIO_DEV_XGXS, XS_LN_STAT, &stat2); 2174 if (err) 2175 return err; |
2172 *link_ok = (stat0 & (stat1 >> 12) & (stat2 >> 12)) & 1; | 2176 if ((stat0 & (stat1 >> 12) & (stat2 >> 12)) & 1) 2177 *link_state = PHY_LINK_UP; 2178 else 2179 *link_state = PHY_LINK_DOWN; |
2173 } 2174 if (speed) 2175 *speed = SPEED_10000; 2176 if (duplex) 2177 *duplex = DUPLEX_FULL; 2178 return 0; 2179} 2180 --- 44 unchanged lines hidden (view full) --- 2225 return 0; 2226} 2227 2228static int xaui_direct_reset(struct cphy *phy, int wait) 2229{ 2230 return 0; 2231} 2232 | 2180 } 2181 if (speed) 2182 *speed = SPEED_10000; 2183 if (duplex) 2184 *duplex = DUPLEX_FULL; 2185 return 0; 2186} 2187 --- 44 unchanged lines hidden (view full) --- 2232 return 0; 2233} 2234 2235static int xaui_direct_reset(struct cphy *phy, int wait) 2236{ 2237 return 0; 2238} 2239 |
2233static int xaui_direct_get_link_status(struct cphy *phy, int *link_ok, | 2240static int xaui_direct_get_link_status(struct cphy *phy, int *link_state, |
2234 int *speed, int *duplex, int *fc) 2235{ | 2241 int *speed, int *duplex, int *fc) 2242{ |
2236 if (link_ok) { | 2243 if (link_state) { |
2237 unsigned int status; 2238 adapter_t *adapter = phy->adapter; 2239 2240 status = t3_read_reg(adapter, 2241 XGM_REG(A_XGM_SERDES_STAT0, phy->addr)) | 2242 t3_read_reg(adapter, 2243 XGM_REG(A_XGM_SERDES_STAT1, phy->addr)) | 2244 t3_read_reg(adapter, 2245 XGM_REG(A_XGM_SERDES_STAT2, phy->addr)) | 2246 t3_read_reg(adapter, 2247 XGM_REG(A_XGM_SERDES_STAT3, phy->addr)); | 2244 unsigned int status; 2245 adapter_t *adapter = phy->adapter; 2246 2247 status = t3_read_reg(adapter, 2248 XGM_REG(A_XGM_SERDES_STAT0, phy->addr)) | 2249 t3_read_reg(adapter, 2250 XGM_REG(A_XGM_SERDES_STAT1, phy->addr)) | 2251 t3_read_reg(adapter, 2252 XGM_REG(A_XGM_SERDES_STAT2, phy->addr)) | 2253 t3_read_reg(adapter, 2254 XGM_REG(A_XGM_SERDES_STAT3, phy->addr)); |
2248 *link_ok = !(status & F_LOWSIG0); | 2255 *link_state = status & F_LOWSIG0 ? PHY_LINK_DOWN : PHY_LINK_UP; |
2249 } 2250 if (speed) 2251 *speed = SPEED_10000; 2252 if (duplex) 2253 *duplex = DUPLEX_FULL; 2254 return 0; 2255} 2256 --- 40 unchanged lines hidden --- | 2256 } 2257 if (speed) 2258 *speed = SPEED_10000; 2259 if (duplex) 2260 *duplex = DUPLEX_FULL; 2261 return 0; 2262} 2263 --- 40 unchanged lines hidden --- |