netxen: support for ethtool set ringparam

Add support for ethtool -G to tune rx and tx ring sizes
per interface basis.

This is only supported for NX3031 based cards.

Signed-off-by: Amit Kumar Salecha <amit@netxen.com>
Signed-off-by: Dhananjay Phadke <dhananjay@netxen.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Amit Kumar Salecha
2009-07-27 11:15:54 -07:00
committed by David S. Miller
parent 028afe7198
commit 7042cd8f14
3 changed files with 97 additions and 11 deletions

View File

@@ -910,6 +910,9 @@ netxen_nic_attach(struct netxen_adapter *adapter)
struct nx_host_rds_ring *rds_ring;
struct nx_host_tx_ring *tx_ring;
if (adapter->is_up == NETXEN_ADAPTER_UP_MAGIC)
return 0;
err = netxen_init_firmware(adapter);
if (err != 0) {
printk(KERN_ERR "Failed to init firmware\n");
@@ -973,6 +976,9 @@ err_out_free_sw:
static void
netxen_nic_detach(struct netxen_adapter *adapter)
{
if (adapter->is_up != NETXEN_ADAPTER_UP_MAGIC)
return;
netxen_free_hw_resources(adapter);
netxen_release_rx_buffers(adapter);
netxen_nic_free_irq(adapter);
@@ -981,6 +987,30 @@ netxen_nic_detach(struct netxen_adapter *adapter)
adapter->is_up = 0;
}
int
netxen_nic_reset_context(struct netxen_adapter *adapter)
{
int err = 0;
struct net_device *netdev = adapter->netdev;
if (adapter->is_up == NETXEN_ADAPTER_UP_MAGIC) {
if (netif_running(netdev))
netxen_nic_down(adapter, netdev);
netxen_nic_detach(adapter);
err = netxen_nic_attach(adapter);
if (err)
goto done;
if (netif_running(netdev))
err = netxen_nic_up(adapter, netdev);
}
done:
return err;
}
static int
netxen_setup_netdev(struct netxen_adapter *adapter,
struct net_device *netdev)
@@ -1202,9 +1232,7 @@ static void __devexit netxen_nic_remove(struct pci_dev *pdev)
unregister_netdev(netdev);
if (adapter->is_up == NETXEN_ADAPTER_UP_MAGIC) {
netxen_nic_detach(adapter);
}
netxen_nic_detach(adapter);
if (adapter->portnum == 0)
netxen_free_dummy_dma(adapter);
@@ -1236,8 +1264,7 @@ netxen_nic_suspend(struct pci_dev *pdev, pm_message_t state)
if (netif_running(netdev))
netxen_nic_down(adapter, netdev);
if (adapter->is_up == NETXEN_ADAPTER_UP_MAGIC)
netxen_nic_detach(adapter);
netxen_nic_detach(adapter);
pci_save_state(pdev);
@@ -1298,11 +1325,9 @@ static int netxen_nic_open(struct net_device *netdev)
if (adapter->driver_mismatch)
return -EIO;
if (adapter->is_up != NETXEN_ADAPTER_UP_MAGIC) {
err = netxen_nic_attach(adapter);
if (err)
return err;
}
err = netxen_nic_attach(adapter);
if (err)
return err;
err = netxen_nic_up(adapter, netdev);
if (err)