diff options
author | Jeff Garzik <jgarzik@pobox.com> | 2005-01-10 13:03:41 -0500 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2005-01-10 13:03:41 -0500 |
commit | 419210711fe5753c98bb2c5af6abe1265fe48cfd (patch) | |
tree | 20ce098a8cab0c791e7406bae3d7975b54927e75 /drivers | |
parent | 1cf65f548486b4263478f87190b84b1af883a544 (diff) | |
parent | 8333589ed91c1a73c7c71044bc8b8f1162da97bb (diff) | |
download | history-419210711fe5753c98bb2c5af6abe1265fe48cfd.tar.gz |
Merge pobox.com:/garz/repo/netdev-2.6/emac
into pobox.com:/garz/repo/net-drivers-2.6
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/ibm_emac/ibm_emac.h | 2 | ||||
-rw-r--r-- | drivers/net/ibm_emac/ibm_emac_core.c | 15 | ||||
-rw-r--r-- | drivers/net/ibm_emac/ibm_emac_phy.c | 19 |
3 files changed, 26 insertions, 10 deletions
diff --git a/drivers/net/ibm_emac/ibm_emac.h b/drivers/net/ibm_emac/ibm_emac.h index 7436af6055acdd..9d9b59e61351a8 100644 --- a/drivers/net/ibm_emac/ibm_emac.h +++ b/drivers/net/ibm_emac/ibm_emac.h @@ -98,7 +98,7 @@ typedef struct emac_regs { #endif /* CONFIG_IBM_EMAC4 */ #define EMAC_M1_BASE (EMAC_M1_TX_FIFO_2K | \ EMAC_M1_APP | \ - EMAC_M1_TR) + EMAC_M1_TR | EMAC_M1_VLE) /* Transmit Mode Register 0 */ #define EMAC_TMR0_GNP0 0x80000000 diff --git a/drivers/net/ibm_emac/ibm_emac_core.c b/drivers/net/ibm_emac/ibm_emac_core.c index 39c65064c04608..7346ab066dbcea 100644 --- a/drivers/net/ibm_emac/ibm_emac_core.c +++ b/drivers/net/ibm_emac/ibm_emac_core.c @@ -1363,6 +1363,9 @@ static void emac_reset_configure(struct ocp_enet_private *fep) /* set frame gap */ out_be32(&emacp->em0ipgvr, CONFIG_IBM_EMAC_FGAP); + + /* set VLAN Tag Protocol Identifier */ + out_be32(&emacp->em0vtpid, 0x8100); /* Init ring buffers */ emac_init_rings(fep->ndev); @@ -1700,6 +1703,15 @@ struct mal_commac_ops emac_commac_ops = { .rxde = &emac_rxde_dev, }; +#ifdef CONFIG_NET_POLL_CONTROLLER +static int emac_netpoll(struct net_device *ndev) +{ + emac_rxeob_dev((void *)ndev, 0); + emac_txeob_dev((void *)ndev, 0); + return 0; +} +#endif + static int emac_init_device(struct ocp_device *ocpdev, struct ibm_ocp_mal *mal) { int deferred_init = 0; @@ -1882,6 +1894,9 @@ static int emac_init_device(struct ocp_device *ocpdev, struct ibm_ocp_mal *mal) SET_ETHTOOL_OPS(ndev, &emac_ethtool_ops); if (emacdata->tah_idx >= 0) ndev->features = NETIF_F_IP_CSUM | NETIF_F_SG; +#ifdef CONFIG_NET_POLL_CONTROLLER + ndev->poll_controller = emac_netpoll; +#endif SET_MODULE_OWNER(ndev); diff --git a/drivers/net/ibm_emac/ibm_emac_phy.c b/drivers/net/ibm_emac/ibm_emac_phy.c index b439087df8ec28..14213f090e914b 100644 --- a/drivers/net/ibm_emac/ibm_emac_phy.c +++ b/drivers/net/ibm_emac/ibm_emac_phy.c @@ -191,17 +191,18 @@ static int genmii_read_link(struct mii_phy *phy) u16 lpa; if (phy->autoneg) { - lpa = phy_read(phy, MII_LPA); + lpa = phy_read(phy, MII_LPA) & phy_read(phy, MII_ADVERTISE); - if (lpa & (LPA_10FULL | LPA_100FULL)) - phy->duplex = DUPLEX_FULL; - else - phy->duplex = DUPLEX_HALF; - if (lpa & (LPA_100FULL | LPA_100HALF)) - phy->speed = SPEED_100; - else - phy->speed = SPEED_10; + phy->speed = SPEED_10; + phy->duplex = DUPLEX_HALF; phy->pause = 0; + + if (lpa & (LPA_100FULL | LPA_100HALF)) { + phy->speed = SPEED_100; + if (lpa & LPA_100FULL) + phy->duplex = DUPLEX_FULL; + } else if (lpa & LPA_10FULL) + phy->duplex = DUPLEX_FULL; } /* On non-aneg, we assume what we put in BMCR is the speed, * though magic-aneg shouldn't prevent this case from occurring |