Skip to content

Commit 5bdc738

Browse files
bwh-ctdavem330
authored andcommitted
mii: Handle link state changes for forced modes in mii_check_media()
mii_check_media() does not update the link (carrier) state or log link changes when the link mode is forced. Drivers using the mii library must do this themselves, but most of them do not. Instead of changing them all, provide a sensible default behaviour similar to mii_check_link() when the mode is forced. via-rhine depends on it being a no-op in this case, so make its call to mii_check_media() conditional. Signed-off-by: Ben Hutchings <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 8f1115b commit 5bdc738

File tree

3 files changed

+10
-7
lines changed

3 files changed

+10
-7
lines changed

drivers/net/ethernet/amd/pcnet32.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2806,7 +2806,7 @@ static void pcnet32_check_media(struct net_device *dev, int verbose)
28062806

28072807
/*
28082808
* Check for loss of link and link establishment.
2809-
* Can not use mii_check_media because it does nothing if mode is forced.
2809+
* Could possibly be changed to use mii_check_media instead.
28102810
*/
28112811

28122812
static void pcnet32_watchdog(struct net_device *dev)

drivers/net/ethernet/via/via-rhine.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1326,7 +1326,8 @@ static void rhine_check_media(struct net_device *dev, unsigned int init_media)
13261326
struct rhine_private *rp = netdev_priv(dev);
13271327
void __iomem *ioaddr = rp->base;
13281328

1329-
mii_check_media(&rp->mii_if, netif_msg_link(rp), init_media);
1329+
if (!rp->mii_if.force_media)
1330+
mii_check_media(&rp->mii_if, netif_msg_link(rp), init_media);
13301331

13311332
if (rp->mii_if.full_duplex)
13321333
iowrite8(ioread8(ioaddr + ChipCmd1) | Cmd1FDuplex,

drivers/net/mii.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ void mii_check_link (struct mii_if_info *mii)
302302
}
303303

304304
/**
305-
* mii_check_media - check the MII interface for a duplex change
305+
* mii_check_media - check the MII interface for a carrier/speed/duplex change
306306
* @mii: the MII interface
307307
* @ok_to_print: OK to print link up/down messages
308308
* @init_media: OK to save duplex mode in @mii
@@ -318,10 +318,6 @@ unsigned int mii_check_media (struct mii_if_info *mii,
318318
int advertise, lpa, media, duplex;
319319
int lpa2 = 0;
320320

321-
/* if forced media, go no further */
322-
if (mii->force_media)
323-
return 0; /* duplex did not change */
324-
325321
/* check current and old link status */
326322
old_carrier = netif_carrier_ok(mii->dev) ? 1 : 0;
327323
new_carrier = (unsigned int) mii_link_ok(mii);
@@ -345,6 +341,12 @@ unsigned int mii_check_media (struct mii_if_info *mii,
345341
*/
346342
netif_carrier_on(mii->dev);
347343

344+
if (mii->force_media) {
345+
if (ok_to_print)
346+
netdev_info(mii->dev, "link up\n");
347+
return 0; /* duplex did not change */
348+
}
349+
348350
/* get MII advertise and LPA values */
349351
if ((!init_media) && (mii->advertising))
350352
advertise = mii->advertising;

0 commit comments

Comments
 (0)