static int fs_enet_open(struct net_device *dev) { struct fs_enet_private *fep = netdev_priv(dev); const struct fs_platform_info *fpi = fep->fpi; int r; /* Install our interrupt handler. */ r = fs_request_irq(dev, fep->interrupt, "fs_enet-mac", fs_enet_interrupt); if (r != 0) { printk(KERN_ERR DRV_MODULE_NAME ": %s Could not allocate FEC IRQ!", dev->name); return -EINVAL; } /* Install our phy interrupt handler */ if (fpi->phy_irq != -1) { r = fs_request_irq(dev, fpi->phy_irq, "fs_enet-phy", fs_mii_link_interrupt); if (r != 0) { printk(KERN_ERR DRV_MODULE_NAME ": %s Could not allocate PHY IRQ!", dev->name); fs_free_irq(dev, fep->interrupt); return -EINVAL; } } fs_mii_startup(dev); netif_carrier_off(dev); fs_mii_link_status_change_check(dev, 1); return 0; }
static int fs_enet_close(struct net_device *dev) { struct fs_enet_private *fep = netdev_priv(dev); const struct fs_platform_info *fpi = fep->fpi; unsigned long flags; netif_stop_queue(dev); netif_carrier_off(dev); fs_mii_shutdown(dev); spin_lock_irqsave(&fep->lock, flags); (*fep->ops->stop)(dev); spin_unlock_irqrestore(&fep->lock, flags); /* release any irqs */ if (fpi->phy_irq != -1) fs_free_irq(dev, fpi->phy_irq); fs_free_irq(dev, fep->interrupt); return 0; }
static int fs_enet_close(struct net_device *dev) { struct fs_enet_private *fep = netdev_priv(dev); unsigned long flags; netif_stop_queue(dev); netif_carrier_off(dev); phy_stop(fep->phydev); spin_lock_irqsave(&fep->lock, flags); (*fep->ops->stop)(dev); spin_unlock_irqrestore(&fep->lock, flags); /* release any irqs */ phy_disconnect(fep->phydev); fep->phydev = NULL; fs_free_irq(dev, fep->interrupt); return 0; }