4587 np->tx_skb = (struct nv_skb_map*)tx_skbuff;
4588 np->ring_addr = ring_addr;
4589
4590 memset(np->rx_skb, 0, sizeof(struct nv_skb_map) * np->rx_ring_size);
4591 memset(np->tx_skb, 0, sizeof(struct nv_skb_map) * np->tx_ring_size);
4592
4593 if (netif_running(dev)) {
4594
4595 set_bufsize(dev);
4596 if (nv_init_ring(dev)) {
4597 if (!np->in_shutdown)
4598 mod_timer(&np->oom_kick, jiffies + OOM_REFILL);
4599 }
4600
4601
4602 writel(np->rx_buf_sz, base + NvRegOffloadConfig);
4603 setup_hw_rings(dev, NV_SETUP_RX_RING | NV_SETUP_TX_RING);
4604 writel( ((np->rx_ring_size-1) << NVREG_RINGSZ_RXSHIFT) + ((np->tx_ring_size-1) << NVREG_RINGSZ_TXSHIFT),
4605 base + NvRegRingSizes);
4606 pci_push(base);
4607 writel(NVREG_TXRXCTL_KICK|np->txrxctl_bits, get_hwbase(dev) + NvRegTxRxControl);
4608 pci_push(base);
4609
4610
4611 nv_start_rxtx(dev);
4612 spin_unlock(&np->lock);
4613 netif_addr_unlock(dev);
4614 netif_tx_unlock_bh(dev);
4615 nv_enable_irq(dev);
4616 }
4617 return 0;
4618exit:
4619 return -ENOMEM;
4620}
4621
4622static void nv_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam* pause)
4623{
4624 struct fe_priv *np = netdev_priv(dev);
4625
4626 pause->autoneg = (np->pause_flags & NV_PAUSEFRAME_AUTONEG) != 0;
4627 pause->rx_pause = (np->pause_flags & NV_PAUSEFRAME_RX_ENABLE) != 0;