smsc95xx.c (e558bdc21ae1f0db520eccd84015e17d8a589973) | smsc95xx.c (9c0827317f235865ae421293f8aecf6cb327a63e) |
---|---|
1 /*************************************************************************** 2 * 3 * Copyright (C) 2007-2008 SMSC 4 * 5 * This program is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU General Public License 7 * as published by the Free Software Foundation; either version 2 8 * of the License, or (at your option) any later version. --- 512 unchanged lines hidden (view full) --- 521 ret = smsc95xx_write_reg_async(dev, MAC_CR, pdata->mac_cr); 522 if (ret < 0) 523 netdev_warn(dev->net, "failed to initiate async write to MAC_CR\n"); 524} 525 526static int smsc95xx_phy_update_flowcontrol(struct usbnet *dev, u8 duplex, 527 u16 lcladv, u16 rmtadv) 528{ | 1 /*************************************************************************** 2 * 3 * Copyright (C) 2007-2008 SMSC 4 * 5 * This program is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU General Public License 7 * as published by the Free Software Foundation; either version 2 8 * of the License, or (at your option) any later version. --- 512 unchanged lines hidden (view full) --- 521 ret = smsc95xx_write_reg_async(dev, MAC_CR, pdata->mac_cr); 522 if (ret < 0) 523 netdev_warn(dev->net, "failed to initiate async write to MAC_CR\n"); 524} 525 526static int smsc95xx_phy_update_flowcontrol(struct usbnet *dev, u8 duplex, 527 u16 lcladv, u16 rmtadv) 528{ |
529 u32 flow, afc_cfg = 0; | 529 u32 flow = 0, afc_cfg; |
530 531 int ret = smsc95xx_read_reg(dev, AFC_CFG, &afc_cfg); 532 if (ret < 0) 533 return ret; 534 535 if (duplex == DUPLEX_FULL) { 536 u8 cap = mii_resolve_flowctrl_fdx(lcladv, rmtadv); 537 538 if (cap & FLOW_CTRL_RX) 539 flow = 0xFFFF0002; | 530 531 int ret = smsc95xx_read_reg(dev, AFC_CFG, &afc_cfg); 532 if (ret < 0) 533 return ret; 534 535 if (duplex == DUPLEX_FULL) { 536 u8 cap = mii_resolve_flowctrl_fdx(lcladv, rmtadv); 537 538 if (cap & FLOW_CTRL_RX) 539 flow = 0xFFFF0002; |
540 else 541 flow = 0; | |
542 | 540 |
543 if (cap & FLOW_CTRL_TX) | 541 if (cap & FLOW_CTRL_TX) { |
544 afc_cfg |= 0xF; | 542 afc_cfg |= 0xF; |
545 else | 543 flow |= 0xFFFF0000; 544 } else { |
546 afc_cfg &= ~0xF; | 545 afc_cfg &= ~0xF; |
546 } |
|
547 548 netif_dbg(dev, link, dev->net, "rx pause %s, tx pause %s\n", 549 cap & FLOW_CTRL_RX ? "enabled" : "disabled", 550 cap & FLOW_CTRL_TX ? "enabled" : "disabled"); 551 } else { 552 netif_dbg(dev, link, dev->net, "half duplex\n"); | 547 548 netif_dbg(dev, link, dev->net, "rx pause %s, tx pause %s\n", 549 cap & FLOW_CTRL_RX ? "enabled" : "disabled", 550 cap & FLOW_CTRL_TX ? "enabled" : "disabled"); 551 } else { 552 netif_dbg(dev, link, dev->net, "half duplex\n"); |
553 flow = 0; | |
554 afc_cfg |= 0xF; 555 } 556 557 ret = smsc95xx_write_reg(dev, FLOW, flow); 558 if (ret < 0) 559 return ret; 560 561 return smsc95xx_write_reg(dev, AFC_CFG, afc_cfg); --- 1641 unchanged lines hidden --- | 553 afc_cfg |= 0xF; 554 } 555 556 ret = smsc95xx_write_reg(dev, FLOW, flow); 557 if (ret < 0) 558 return ret; 559 560 return smsc95xx_write_reg(dev, AFC_CFG, afc_cfg); --- 1641 unchanged lines hidden --- |