aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/natsemi.c65
1 files changed, 37 insertions, 28 deletions
diff --git a/drivers/net/natsemi.c b/drivers/net/natsemi.c
index 2e4ecedba057..5dc41462fa01 100644
--- a/drivers/net/natsemi.c
+++ b/drivers/net/natsemi.c
@@ -813,6 +813,42 @@ static void move_int_phy(struct net_device *dev, int addr)
813 udelay(1); 813 udelay(1);
814} 814}
815 815
816static void __devinit natsemi_init_media (struct net_device *dev)
817{
818 struct netdev_private *np = netdev_priv(dev);
819 u32 tmp;
820
821 netif_carrier_off(dev);
822
823 /* get the initial settings from hardware */
824 tmp = mdio_read(dev, MII_BMCR);
825 np->speed = (tmp & BMCR_SPEED100)? SPEED_100 : SPEED_10;
826 np->duplex = (tmp & BMCR_FULLDPLX)? DUPLEX_FULL : DUPLEX_HALF;
827 np->autoneg = (tmp & BMCR_ANENABLE)? AUTONEG_ENABLE: AUTONEG_DISABLE;
828 np->advertising= mdio_read(dev, MII_ADVERTISE);
829
830 if ((np->advertising & ADVERTISE_ALL) != ADVERTISE_ALL
831 && netif_msg_probe(np)) {
832 printk(KERN_INFO "natsemi %s: Transceiver default autonegotiation %s "
833 "10%s %s duplex.\n",
834 pci_name(np->pci_dev),
835 (mdio_read(dev, MII_BMCR) & BMCR_ANENABLE)?
836 "enabled, advertise" : "disabled, force",
837 (np->advertising &
838 (ADVERTISE_100FULL|ADVERTISE_100HALF))?
839 "0" : "",
840 (np->advertising &
841 (ADVERTISE_100FULL|ADVERTISE_10FULL))?
842 "full" : "half");
843 }
844 if (netif_msg_probe(np))
845 printk(KERN_INFO
846 "natsemi %s: Transceiver status %#04x advertising %#04x.\n",
847 pci_name(np->pci_dev), mdio_read(dev, MII_BMSR),
848 np->advertising);
849
850}
851
816static int __devinit natsemi_probe1 (struct pci_dev *pdev, 852static int __devinit natsemi_probe1 (struct pci_dev *pdev,
817 const struct pci_device_id *ent) 853 const struct pci_device_id *ent)
818{ 854{
@@ -957,34 +993,7 @@ static int __devinit natsemi_probe1 (struct pci_dev *pdev,
957 if (mtu) 993 if (mtu)
958 dev->mtu = mtu; 994 dev->mtu = mtu;
959 995
960 netif_carrier_off(dev); 996 natsemi_init_media(dev);
961
962 /* get the initial settings from hardware */
963 tmp = mdio_read(dev, MII_BMCR);
964 np->speed = (tmp & BMCR_SPEED100)? SPEED_100 : SPEED_10;
965 np->duplex = (tmp & BMCR_FULLDPLX)? DUPLEX_FULL : DUPLEX_HALF;
966 np->autoneg = (tmp & BMCR_ANENABLE)? AUTONEG_ENABLE: AUTONEG_DISABLE;
967 np->advertising= mdio_read(dev, MII_ADVERTISE);
968
969 if ((np->advertising & ADVERTISE_ALL) != ADVERTISE_ALL
970 && netif_msg_probe(np)) {
971 printk(KERN_INFO "natsemi %s: Transceiver default autonegotiation %s "
972 "10%s %s duplex.\n",
973 pci_name(np->pci_dev),
974 (mdio_read(dev, MII_BMCR) & BMCR_ANENABLE)?
975 "enabled, advertise" : "disabled, force",
976 (np->advertising &
977 (ADVERTISE_100FULL|ADVERTISE_100HALF))?
978 "0" : "",
979 (np->advertising &
980 (ADVERTISE_100FULL|ADVERTISE_10FULL))?
981 "full" : "half");
982 }
983 if (netif_msg_probe(np))
984 printk(KERN_INFO
985 "natsemi %s: Transceiver status %#04x advertising %#04x.\n",
986 pci_name(np->pci_dev), mdio_read(dev, MII_BMSR),
987 np->advertising);
988 997
989 /* save the silicon revision for later querying */ 998 /* save the silicon revision for later querying */
990 np->srr = readl(ioaddr + SiliconRev); 999 np->srr = readl(ioaddr + SiliconRev);