static void ramips_eth_uninit(struct net_device *dev) { struct raeth_priv *re = netdev_priv(dev); ramips_phy_disconnect(re); ramips_mdio_cleanup(re); }
static void ramips_eth_uninit(struct net_device *dev) { struct raeth_priv *re = netdev_priv(dev); raeth_debugfs_exit(re); ramips_phy_disconnect(re); ramips_mdio_cleanup(re); ramips_fe_twr(0, RAETH_REG_FE_INT_ENABLE); free_irq(dev->irq, dev); tasklet_kill(&re->tx_housekeeping_tasklet); tasklet_kill(&re->rx_tasklet); ramips_ring_cleanup(re); ramips_ring_free(re); }
static int __init ramips_eth_probe(struct net_device *dev) { struct raeth_priv *re = netdev_priv(dev); int err; BUG_ON(!re->plat->reset_fe); re->plat->reset_fe(); net_srandom(jiffies); memcpy(dev->dev_addr, re->plat->mac, ETH_ALEN); ether_setup(dev); dev->mtu = 1500; dev->watchdog_timeo = TX_TIMEOUT; spin_lock_init(&re->page_lock); spin_lock_init(&re->phy_lock); err = ramips_mdio_init(re); if (err) return err; err = ramips_phy_connect(re); if (err) goto err_mdio_cleanup; err = raeth_debugfs_init(re); if (err) goto err_phy_disconnect; err = ramips_eth_hw_init(dev); if (err) goto err_debugfs; return 0; err_debugfs: raeth_debugfs_exit(re); err_phy_disconnect: ramips_phy_disconnect(re); err_mdio_cleanup: ramips_mdio_cleanup(re); return err; }