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 ---