#else
#define DRIVERNAPI "-NAPI"
#endif
-#define DRV_VERSION "5.5.4-k2"DRIVERNAPI;
+#define DRV_VERSION "5.3.19-k2"DRIVERNAPI
char e1000_driver_version[] = DRV_VERSION;
char e1000_copyright[] = "Copyright (c) 1999-2004 Intel Corporation.";
void
e1000_reset(struct e1000_adapter *adapter)
{
- uint32_t pba;
-
+ uint32_t pba, manc;
/* Repartition Pba for greater than 9k mtu
* To take effect CTRL.RST is required.
*/
e1000_reset_adaptive(&adapter->hw);
e1000_phy_get_info(&adapter->hw, &adapter->phy_info);
+
+ if(adapter->en_mng_pt) {
+ manc = E1000_READ_REG(&adapter->hw, MANC);
+ manc |= (E1000_MANC_ARP_EN | E1000_MANC_EN_MNG2HOST);
+ E1000_WRITE_REG(&adapter->hw, MANC, manc);
+ }
}
/**
adapter->hw.back = adapter;
adapter->msg_enable = (1 << debug) - 1;
+ rtnl_lock();
+ /* we need to set the name early for the DPRINTK macro */
+ if(dev_alloc_name(netdev, netdev->name) < 0)
+ goto err_free_unlock;
+
mmio_start = pci_resource_start(pdev, BAR_0);
mmio_len = pci_resource_len(pdev, BAR_0);
#ifdef CONFIG_NET_POLL_CONTROLLER
netdev->poll_controller = e1000_netpoll;
#endif
- strcpy(netdev->name, pci_name(pdev));
netdev->mem_start = mmio_start;
netdev->mem_end = mmio_start + mmio_len;
/* hard_start_xmit is safe against parallel locking */
netdev->features |= NETIF_F_LLTX;
+ adapter->en_mng_pt = e1000_enable_mng_pass_thru(&adapter->hw);
+
/* before reading the EEPROM, reset the controller to
* put the device in a known good starting state */
netif_carrier_off(netdev);
netif_stop_queue(netdev);
+ DPRINTK(PROBE, INFO, "Intel(R) PRO/1000 Network Connection\n");
e1000_check_options(adapter);
/* Initial Wake on LAN setting
/* reset the hardware with the new settings */
e1000_reset(adapter);
- strcpy(netdev->name, "eth%d");
- if((err = register_netdev(netdev)))
+ /* We're already holding the rtnl lock; call the no-lock version */
+ if((err = register_netdevice(netdev)))
goto err_register;
- DPRINTK(PROBE, INFO, "Intel(R) PRO/1000 Network Connection\n");
-
cards_found++;
+ rtnl_unlock();
return 0;
err_register:
err_eeprom:
iounmap(adapter->hw.hw_addr);
err_ioremap:
+err_free_unlock:
+ rtnl_unlock();
free_netdev(netdev);
err_alloc_etherdev:
pci_release_regions(pdev);
pci_release_regions(pdev);
free_netdev(netdev);
-
- pci_disable_device(pdev);
}
/**
if(unlikely(adapter->vlgrp &&
(rx_desc->status & E1000_RXD_STAT_VP))) {
vlan_hwaccel_receive_skb(skb, adapter->vlgrp,
- le16_to_cpu(rx_desc->special) &
- E1000_RXD_SPC_VLAN_MASK);
+ le16_to_cpu(rx_desc->special &
+ E1000_RXD_SPC_VLAN_MASK));
} else {
netif_receive_skb(skb);
}
if(unlikely(adapter->vlgrp &&
(rx_desc->status & E1000_RXD_STAT_VP))) {
vlan_hwaccel_rx(skb, adapter->vlgrp,
- le16_to_cpu(rx_desc->special) &
- E1000_RXD_SPC_VLAN_MASK);
+ le16_to_cpu(rx_desc->special &
+ E1000_RXD_SPC_VLAN_MASK));
} else {
netif_rx(skb);
}
pci_enable_wake(pdev, 4, 0); /* 4 == D3 cold */
}
- pci_save_state(pdev);
+ pci_save_state(pdev, adapter->pci_state);
if(adapter->hw.mac_type >= e1000_82540 &&
adapter->hw.media_type == e1000_media_type_copper) {
{
struct net_device *netdev = pci_get_drvdata(pdev);
struct e1000_adapter *adapter = netdev->priv;
- uint32_t manc, ret;
+ uint32_t manc;
+ pci_enable_device(pdev);
pci_set_power_state(pdev, 0);
- pci_restore_state(pdev);
- ret = pci_enable_device(pdev);
- if (pdev->is_busmaster)
- pci_set_master(pdev);
+ pci_restore_state(pdev, adapter->pci_state);
pci_enable_wake(pdev, 3, 0);
pci_enable_wake(pdev, 4, 0); /* 4 == D3 cold */