static int ag71xx_open(struct net_device *dev) { struct ag71xx *ag = netdev_priv(dev); int ret; ret = ag71xx_rings_init(ag); if (ret) goto err; napi_enable(&ag->napi); netif_carrier_off(dev); ag71xx_phy_start(ag); ag71xx_wr(ag, AG71XX_REG_TX_DESC, ag->tx_ring.descs_dma); ag71xx_wr(ag, AG71XX_REG_RX_DESC, ag->rx_ring.descs_dma); ag71xx_hw_set_macaddr(ag, dev->dev_addr); ag71xx_hw_start(ag); netif_start_queue(dev); return 0; err: ag71xx_rings_cleanup(ag); return ret; }
static int ag71xx_stop(struct net_device *dev) { struct ag71xx *ag = netdev_priv(dev); unsigned long flags; spin_lock_irqsave(&ag->lock, flags); netif_stop_queue(dev); ag71xx_hw_stop(ag); netif_carrier_off(dev); ag71xx_phy_stop(ag); napi_disable(&ag->napi); spin_unlock_irqrestore(&ag->lock, flags); ag71xx_rings_cleanup(ag); return 0; }