Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 41505
b: refs/heads/master
c: 6b65552
h: refs/heads/master
i:
  41503: 17f2ad4
v: v3
  • Loading branch information
Andy Fleming authored and Jeff Garzik committed Dec 2, 2006
1 parent a93758f commit 4635342
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 43 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 2109f89f3483ff5a05899385ee3fb04d779e9cce
refs/heads/master: 6b655529c3d817ed1b69cf2dd29e2c3ce5148a2b
81 changes: 39 additions & 42 deletions trunk/drivers/net/phy/phy.c
Original file line number Diff line number Diff line change
Expand Up @@ -713,60 +713,57 @@ static void phy_timer(unsigned long data)

break;
case PHY_AN:
err = phy_read_status(phydev);

if (err < 0)
break;

/* If the link is down, give up on
* negotiation for now */
if (!phydev->link) {
phydev->state = PHY_NOLINK;
netif_carrier_off(phydev->attached_dev);
phydev->adjust_link(phydev->attached_dev);
break;
}

/* Check if negotiation is done. Break
* if there's an error */
err = phy_aneg_done(phydev);
if (err < 0)
break;

/* If auto-negotiation is done, we change to
* either RUNNING, or NOLINK */
/* If AN is done, we're running */
if (err > 0) {
err = phy_read_status(phydev);
phydev->state = PHY_RUNNING;
netif_carrier_on(phydev->attached_dev);
phydev->adjust_link(phydev->attached_dev);

} else if (0 == phydev->link_timeout--) {
int idx;

if (err)
needs_aneg = 1;
/* If we have the magic_aneg bit,
* we try again */
if (phydev->drv->flags & PHY_HAS_MAGICANEG)
break;

if (phydev->link) {
phydev->state = PHY_RUNNING;
netif_carrier_on(phydev->attached_dev);
} else {
phydev->state = PHY_NOLINK;
netif_carrier_off(phydev->attached_dev);
}
/* The timer expired, and we still
* don't have a setting, so we try
* forcing it until we find one that
* works, starting from the fastest speed,
* and working our way down */
idx = phy_find_valid(0, phydev->supported);

phydev->adjust_link(phydev->attached_dev);
phydev->speed = settings[idx].speed;
phydev->duplex = settings[idx].duplex;

} else if (0 == phydev->link_timeout--) {
/* The counter expired, so either we
* switch to forced mode, or the
* magic_aneg bit exists, and we try aneg
* again */
if (!(phydev->drv->flags & PHY_HAS_MAGICANEG)) {
int idx;

/* We'll start from the
* fastest speed, and work
* our way down */
idx = phy_find_valid(0,
phydev->supported);

phydev->speed = settings[idx].speed;
phydev->duplex = settings[idx].duplex;

phydev->autoneg = AUTONEG_DISABLE;
phydev->state = PHY_FORCING;
phydev->link_timeout =
PHY_FORCE_TIMEOUT;

pr_info("Trying %d/%s\n",
phydev->speed,
DUPLEX_FULL ==
phydev->duplex ?
"FULL" : "HALF");
}
phydev->autoneg = AUTONEG_DISABLE;

needs_aneg = 1;
pr_info("Trying %d/%s\n", phydev->speed,
DUPLEX_FULL ==
phydev->duplex ?
"FULL" : "HALF");
}
break;
case PHY_NOLINK:
Expand All @@ -782,7 +779,7 @@ static void phy_timer(unsigned long data)
}
break;
case PHY_FORCING:
err = phy_read_status(phydev);
err = genphy_update_link(phydev);

if (err)
break;
Expand Down
1 change: 1 addition & 0 deletions trunk/drivers/net/phy/phy_device.c
Original file line number Diff line number Diff line change
Expand Up @@ -427,6 +427,7 @@ int genphy_update_link(struct phy_device *phydev)

return 0;
}
EXPORT_SYMBOL(genphy_update_link);

/* genphy_read_status
*
Expand Down

0 comments on commit 4635342

Please sign in to comment.