Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 159211
b: refs/heads/master
c: f17443f
h: refs/heads/master
i:
  159209: 42421ec
  159207: c8c3ae2
v: v3
  • Loading branch information
Dhananjay Phadke authored and David S. Miller committed Jul 27, 2009
1 parent 3866a46 commit 87438a8
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 64 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 4f96b988e8d404b8b32aefed27503b4538949a3c
refs/heads/master: f17443f4b01659a5c44d5fc6f5c502c39c293959
138 changes: 75 additions & 63 deletions trunk/drivers/net/netxen/netxen_nic_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ static int netxen_nic_open(struct net_device *netdev);
static int netxen_nic_close(struct net_device *netdev);
static int netxen_nic_xmit_frame(struct sk_buff *, struct net_device *);
static void netxen_tx_timeout(struct net_device *netdev);
static void netxen_tx_timeout_task(struct work_struct *work);
static void netxen_reset_task(struct work_struct *work);
static void netxen_watchdog(unsigned long);
static int netxen_nic_poll(struct napi_struct *napi, int budget);
#ifdef CONFIG_NET_POLL_CONTROLLER
Expand Down Expand Up @@ -182,7 +182,7 @@ netxen_napi_add(struct netxen_adapter *adapter, struct net_device *netdev)
struct netxen_recv_context *recv_ctx = &adapter->recv_ctx;

if (netxen_alloc_sds_rings(recv_ctx, adapter->max_sds_rings))
return 1;
return -ENOMEM;

for (ring = 0; ring < adapter->max_sds_rings; ring++) {
sds_ring = &recv_ctx->sds_rings[ring];
Expand Down Expand Up @@ -981,6 +981,68 @@ netxen_nic_detach(struct netxen_adapter *adapter)
adapter->is_up = 0;
}

static int
netxen_setup_netdev(struct netxen_adapter *adapter,
struct net_device *netdev)
{
int err = 0;
struct pci_dev *pdev = adapter->pdev;

adapter->rx_csum = 1;
adapter->mc_enabled = 0;
if (NX_IS_REVISION_P3(adapter->ahw.revision_id))
adapter->max_mc_count = 38;
else
adapter->max_mc_count = 16;

netdev->netdev_ops = &netxen_netdev_ops;
netdev->watchdog_timeo = 2*HZ;

netxen_nic_change_mtu(netdev, netdev->mtu);

SET_ETHTOOL_OPS(netdev, &netxen_nic_ethtool_ops);

netdev->features |= (NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO);
netdev->features |= (NETIF_F_GRO);
netdev->vlan_features |= (NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO);

if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) {
netdev->features |= (NETIF_F_IPV6_CSUM | NETIF_F_TSO6);
netdev->vlan_features |= (NETIF_F_IPV6_CSUM | NETIF_F_TSO6);
}

if (adapter->pci_using_dac) {
netdev->features |= NETIF_F_HIGHDMA;
netdev->vlan_features |= NETIF_F_HIGHDMA;
}

netdev->irq = adapter->msix_entries[0].vector;

err = netxen_napi_add(adapter, netdev);
if (err)
return err;

init_timer(&adapter->watchdog_timer);
adapter->watchdog_timer.function = &netxen_watchdog;
adapter->watchdog_timer.data = (unsigned long)adapter;
INIT_WORK(&adapter->watchdog_task, netxen_watchdog_task);
INIT_WORK(&adapter->tx_timeout_task, netxen_reset_task);

if (netxen_read_mac_addr(adapter))
dev_warn(&pdev->dev, "failed to read mac addr\n");

netif_carrier_off(netdev);
netif_stop_queue(netdev);

err = register_netdev(netdev);
if (err) {
dev_err(&pdev->dev, "failed to register net device\n");
return err;
}

return 0;
}

static int __devinit
netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
{
Expand Down Expand Up @@ -1018,9 +1080,8 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)

netdev = alloc_etherdev(sizeof(struct netxen_adapter));
if(!netdev) {
printk(KERN_ERR"%s: Failed to allocate memory for the "
"device block.Check system memory resource"
" usage.\n", netxen_nic_driver_name);
dev_err(&pdev->dev, "failed to allocate net_device\n");
err = -ENOMEM;
goto err_out_free_res;
}

Expand Down Expand Up @@ -1048,38 +1109,10 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)

/* This will be reset for mezz cards */
adapter->portnum = pci_func_id;
adapter->rx_csum = 1;
adapter->mc_enabled = 0;
if (NX_IS_REVISION_P3(revision_id))
adapter->max_mc_count = 38;
else
adapter->max_mc_count = 16;

netdev->netdev_ops = &netxen_netdev_ops;
netdev->watchdog_timeo = 2*HZ;

netxen_nic_change_mtu(netdev, netdev->mtu);

SET_ETHTOOL_OPS(netdev, &netxen_nic_ethtool_ops);

netdev->features |= (NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO);
netdev->features |= (NETIF_F_GRO);
netdev->vlan_features |= (NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO);

if (NX_IS_REVISION_P3(revision_id)) {
netdev->features |= (NETIF_F_IPV6_CSUM | NETIF_F_TSO6);
netdev->vlan_features |= (NETIF_F_IPV6_CSUM | NETIF_F_TSO6);
}

if (adapter->pci_using_dac) {
netdev->features |= NETIF_F_HIGHDMA;
netdev->vlan_features |= NETIF_F_HIGHDMA;
}

if (netxen_nic_get_board_info(adapter) != 0) {
printk("%s: Error getting board config info.\n",
netxen_nic_driver_name);
err = -EIO;
err = netxen_nic_get_board_info(adapter);
if (err) {
dev_err(&pdev->dev, "Error getting board config info.\n");
goto err_out_iounmap;
}

Expand All @@ -1099,6 +1132,7 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
err = netxen_start_firmware(adapter, 1);
if (err)
goto err_out_iounmap;

/*
* See if the firmware gave us a virtual-physical port mapping.
*/
Expand All @@ -1113,31 +1147,9 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)

netxen_setup_intr(adapter);

netdev->irq = adapter->msix_entries[0].vector;

if (netxen_napi_add(adapter, netdev))
goto err_out_disable_msi;

init_timer(&adapter->watchdog_timer);
adapter->watchdog_timer.function = &netxen_watchdog;
adapter->watchdog_timer.data = (unsigned long)adapter;
INIT_WORK(&adapter->watchdog_task, netxen_watchdog_task);
INIT_WORK(&adapter->tx_timeout_task, netxen_tx_timeout_task);

err = netxen_read_mac_addr(adapter);
err = netxen_setup_netdev(adapter, netdev);
if (err)
dev_warn(&pdev->dev, "failed to read mac addr\n");

netif_carrier_off(netdev);
netif_stop_queue(netdev);

if ((err = register_netdev(netdev))) {
printk(KERN_ERR "%s: register_netdev failed port #%d"
" aborting\n", netxen_nic_driver_name,
adapter->portnum);
err = -EIO;
goto err_out_disable_msi;
}

pci_set_drvdata(pdev, adapter);

Expand Down Expand Up @@ -1656,20 +1668,20 @@ static void netxen_tx_timeout(struct net_device *netdev)
{
struct netxen_adapter *adapter = (struct netxen_adapter *)
netdev_priv(netdev);

dev_err(&netdev->dev, "transmit timeout, resetting.\n");

SCHEDULE_WORK(&adapter->tx_timeout_task);
}

static void netxen_tx_timeout_task(struct work_struct *work)
static void netxen_reset_task(struct work_struct *work)
{
struct netxen_adapter *adapter =
container_of(work, struct netxen_adapter, tx_timeout_task);

if (!netif_running(adapter->netdev))
return;

printk(KERN_ERR "%s %s: transmit timeout, resetting.\n",
netxen_nic_driver_name, adapter->netdev->name);

netxen_napi_disable(adapter);

adapter->netdev->trans_start = jiffies;
Expand Down

0 comments on commit 87438a8

Please sign in to comment.