Deleted Added
full compact
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 ---