Commit 0bb78c37 authored by Jeff Garzik's avatar Jeff Garzik

Merge branch 'upstream-fixes' of...

Merge branch 'upstream-fixes' of git://lost.foo-projects.org/~ahkok/git/netdev-2.6 into upstream-fixes
parents 291b58d6 824545e7
...@@ -2719,7 +2719,10 @@ static int e100_suspend(struct pci_dev *pdev, pm_message_t state) ...@@ -2719,7 +2719,10 @@ static int e100_suspend(struct pci_dev *pdev, pm_message_t state)
struct net_device *netdev = pci_get_drvdata(pdev); struct net_device *netdev = pci_get_drvdata(pdev);
struct nic *nic = netdev_priv(netdev); struct nic *nic = netdev_priv(netdev);
netif_poll_disable(nic->netdev); #ifdef CONFIG_E100_NAPI
if (netif_running(netdev))
netif_poll_disable(nic->netdev);
#endif
del_timer_sync(&nic->watchdog); del_timer_sync(&nic->watchdog);
netif_carrier_off(nic->netdev); netif_carrier_off(nic->netdev);
...@@ -2763,7 +2766,10 @@ static void e100_shutdown(struct pci_dev *pdev) ...@@ -2763,7 +2766,10 @@ static void e100_shutdown(struct pci_dev *pdev)
struct net_device *netdev = pci_get_drvdata(pdev); struct net_device *netdev = pci_get_drvdata(pdev);
struct nic *nic = netdev_priv(netdev); struct nic *nic = netdev_priv(netdev);
netif_poll_disable(nic->netdev); #ifdef CONFIG_E100_NAPI
if (netif_running(netdev))
netif_poll_disable(nic->netdev);
#endif
del_timer_sync(&nic->watchdog); del_timer_sync(&nic->watchdog);
netif_carrier_off(nic->netdev); netif_carrier_off(nic->netdev);
......
...@@ -461,7 +461,8 @@ e1000_get_regs(struct net_device *netdev, ...@@ -461,7 +461,8 @@ e1000_get_regs(struct net_device *netdev,
regs_buff[24] = (uint32_t)phy_data; /* phy local receiver status */ regs_buff[24] = (uint32_t)phy_data; /* phy local receiver status */
regs_buff[25] = regs_buff[24]; /* phy remote receiver status */ regs_buff[25] = regs_buff[24]; /* phy remote receiver status */
if (hw->mac_type >= e1000_82540 && if (hw->mac_type >= e1000_82540 &&
hw->media_type == e1000_media_type_copper) { hw->mac_type < e1000_82571 &&
hw->media_type == e1000_media_type_copper) {
regs_buff[26] = E1000_READ_REG(hw, MANC); regs_buff[26] = E1000_READ_REG(hw, MANC);
} }
} }
...@@ -1690,6 +1691,7 @@ static int e1000_wol_exclusion(struct e1000_adapter *adapter, struct ethtool_wol ...@@ -1690,6 +1691,7 @@ static int e1000_wol_exclusion(struct e1000_adapter *adapter, struct ethtool_wol
int retval = 1; /* fail by default */ int retval = 1; /* fail by default */
switch (hw->device_id) { switch (hw->device_id) {
case E1000_DEV_ID_82542:
case E1000_DEV_ID_82543GC_FIBER: case E1000_DEV_ID_82543GC_FIBER:
case E1000_DEV_ID_82543GC_COPPER: case E1000_DEV_ID_82543GC_COPPER:
case E1000_DEV_ID_82544EI_FIBER: case E1000_DEV_ID_82544EI_FIBER:
......
...@@ -1961,9 +1961,9 @@ struct e1000_hw { ...@@ -1961,9 +1961,9 @@ struct e1000_hw {
#define E1000_RXDCTL_GRAN 0x01000000 /* RXDCTL Granularity */ #define E1000_RXDCTL_GRAN 0x01000000 /* RXDCTL Granularity */
/* Transmit Descriptor Control */ /* Transmit Descriptor Control */
#define E1000_TXDCTL_PTHRESH 0x000000FF /* TXDCTL Prefetch Threshold */ #define E1000_TXDCTL_PTHRESH 0x0000003F /* TXDCTL Prefetch Threshold */
#define E1000_TXDCTL_HTHRESH 0x0000FF00 /* TXDCTL Host Threshold */ #define E1000_TXDCTL_HTHRESH 0x00003F00 /* TXDCTL Host Threshold */
#define E1000_TXDCTL_WTHRESH 0x00FF0000 /* TXDCTL Writeback Threshold */ #define E1000_TXDCTL_WTHRESH 0x003F0000 /* TXDCTL Writeback Threshold */
#define E1000_TXDCTL_GRAN 0x01000000 /* TXDCTL Granularity */ #define E1000_TXDCTL_GRAN 0x01000000 /* TXDCTL Granularity */
#define E1000_TXDCTL_LWTHRESH 0xFE000000 /* TXDCTL Low Threshold */ #define E1000_TXDCTL_LWTHRESH 0xFE000000 /* TXDCTL Low Threshold */
#define E1000_TXDCTL_FULL_TX_DESC_WB 0x01010000 /* GRAN=1, WTHRESH=1 */ #define E1000_TXDCTL_FULL_TX_DESC_WB 0x01010000 /* GRAN=1, WTHRESH=1 */
......
...@@ -35,7 +35,7 @@ static char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver"; ...@@ -35,7 +35,7 @@ static char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver";
#else #else
#define DRIVERNAPI "-NAPI" #define DRIVERNAPI "-NAPI"
#endif #endif
#define DRV_VERSION "7.2.9-k2"DRIVERNAPI #define DRV_VERSION "7.2.9-k4"DRIVERNAPI
char e1000_driver_version[] = DRV_VERSION; char e1000_driver_version[] = DRV_VERSION;
static char e1000_copyright[] = "Copyright (c) 1999-2006 Intel Corporation."; static char e1000_copyright[] = "Copyright (c) 1999-2006 Intel Corporation.";
...@@ -699,7 +699,10 @@ e1000_reset(struct e1000_adapter *adapter) ...@@ -699,7 +699,10 @@ e1000_reset(struct e1000_adapter *adapter)
phy_data); phy_data);
} }
if ((adapter->en_mng_pt) && (adapter->hw.mac_type < e1000_82571)) { if ((adapter->en_mng_pt) &&
(adapter->hw.mac_type >= e1000_82540) &&
(adapter->hw.mac_type < e1000_82571) &&
(adapter->hw.media_type == e1000_media_type_copper)) {
manc = E1000_READ_REG(&adapter->hw, MANC); manc = E1000_READ_REG(&adapter->hw, MANC);
manc |= (E1000_MANC_ARP_EN | E1000_MANC_EN_MNG2HOST); manc |= (E1000_MANC_ARP_EN | E1000_MANC_EN_MNG2HOST);
E1000_WRITE_REG(&adapter->hw, MANC, manc); E1000_WRITE_REG(&adapter->hw, MANC, manc);
...@@ -1076,8 +1079,9 @@ e1000_remove(struct pci_dev *pdev) ...@@ -1076,8 +1079,9 @@ e1000_remove(struct pci_dev *pdev)
flush_scheduled_work(); flush_scheduled_work();
if (adapter->hw.mac_type < e1000_82571 && if (adapter->hw.mac_type >= e1000_82540 &&
adapter->hw.media_type == e1000_media_type_copper) { adapter->hw.mac_type < e1000_82571 &&
adapter->hw.media_type == e1000_media_type_copper) {
manc = E1000_READ_REG(&adapter->hw, MANC); manc = E1000_READ_REG(&adapter->hw, MANC);
if (manc & E1000_MANC_SMBUS_EN) { if (manc & E1000_MANC_SMBUS_EN) {
manc |= E1000_MANC_ARP_EN; manc |= E1000_MANC_ARP_EN;
...@@ -1804,9 +1808,11 @@ e1000_setup_rctl(struct e1000_adapter *adapter) ...@@ -1804,9 +1808,11 @@ e1000_setup_rctl(struct e1000_adapter *adapter)
* followed by the page buffers. Therefore, skb->data is * followed by the page buffers. Therefore, skb->data is
* sized to hold the largest protocol header. * sized to hold the largest protocol header.
*/ */
/* allocations using alloc_page take too long for regular MTU
* so only enable packet split for jumbo frames */
pages = PAGE_USE_COUNT(adapter->netdev->mtu); pages = PAGE_USE_COUNT(adapter->netdev->mtu);
if ((adapter->hw.mac_type > e1000_82547_rev_2) && (pages <= 3) && if ((adapter->hw.mac_type >= e1000_82571) && (pages <= 3) &&
PAGE_SIZE <= 16384) PAGE_SIZE <= 16384 && (rctl & E1000_RCTL_LPE))
adapter->rx_ps_pages = pages; adapter->rx_ps_pages = pages;
else else
adapter->rx_ps_pages = 0; adapter->rx_ps_pages = 0;
...@@ -2986,6 +2992,11 @@ e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev) ...@@ -2986,6 +2992,11 @@ e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
return NETDEV_TX_OK; return NETDEV_TX_OK;
} }
/* 82571 and newer doesn't need the workaround that limited descriptor
* length to 4kB */
if (adapter->hw.mac_type >= e1000_82571)
max_per_txd = 8192;
#ifdef NETIF_F_TSO #ifdef NETIF_F_TSO
mss = skb_shinfo(skb)->gso_size; mss = skb_shinfo(skb)->gso_size;
/* The controller does a simple calculation to /* The controller does a simple calculation to
...@@ -3775,9 +3786,6 @@ e1000_clean_rx_irq(struct e1000_adapter *adapter, ...@@ -3775,9 +3786,6 @@ e1000_clean_rx_irq(struct e1000_adapter *adapter,
length = le16_to_cpu(rx_desc->length); length = le16_to_cpu(rx_desc->length);
/* adjust length to remove Ethernet CRC */
length -= 4;
if (unlikely(!(status & E1000_RXD_STAT_EOP))) { if (unlikely(!(status & E1000_RXD_STAT_EOP))) {
/* All receives must fit into a single buffer */ /* All receives must fit into a single buffer */
E1000_DBG("%s: Receive packet consumed multiple" E1000_DBG("%s: Receive packet consumed multiple"
...@@ -3805,6 +3813,10 @@ e1000_clean_rx_irq(struct e1000_adapter *adapter, ...@@ -3805,6 +3813,10 @@ e1000_clean_rx_irq(struct e1000_adapter *adapter,
} }
} }
/* adjust length to remove Ethernet CRC, this must be
* done after the TBI_ACCEPT workaround above */
length -= 4;
/* code added for copybreak, this should improve /* code added for copybreak, this should improve
* performance for small packets with large amounts * performance for small packets with large amounts
* of reassembly being done in the stack */ * of reassembly being done in the stack */
...@@ -4773,8 +4785,9 @@ e1000_suspend(struct pci_dev *pdev, pm_message_t state) ...@@ -4773,8 +4785,9 @@ e1000_suspend(struct pci_dev *pdev, pm_message_t state)
pci_enable_wake(pdev, PCI_D3cold, 0); pci_enable_wake(pdev, PCI_D3cold, 0);
} }
if (adapter->hw.mac_type < e1000_82571 && if (adapter->hw.mac_type >= e1000_82540 &&
adapter->hw.media_type == e1000_media_type_copper) { adapter->hw.mac_type < e1000_82571 &&
adapter->hw.media_type == e1000_media_type_copper) {
manc = E1000_READ_REG(&adapter->hw, MANC); manc = E1000_READ_REG(&adapter->hw, MANC);
if (manc & E1000_MANC_SMBUS_EN) { if (manc & E1000_MANC_SMBUS_EN) {
manc |= E1000_MANC_ARP_EN; manc |= E1000_MANC_ARP_EN;
...@@ -4825,8 +4838,9 @@ e1000_resume(struct pci_dev *pdev) ...@@ -4825,8 +4838,9 @@ e1000_resume(struct pci_dev *pdev)
netif_device_attach(netdev); netif_device_attach(netdev);
if (adapter->hw.mac_type < e1000_82571 && if (adapter->hw.mac_type >= e1000_82540 &&
adapter->hw.media_type == e1000_media_type_copper) { adapter->hw.mac_type < e1000_82571 &&
adapter->hw.media_type == e1000_media_type_copper) {
manc = E1000_READ_REG(&adapter->hw, MANC); manc = E1000_READ_REG(&adapter->hw, MANC);
manc &= ~(E1000_MANC_ARP_EN); manc &= ~(E1000_MANC_ARP_EN);
E1000_WRITE_REG(&adapter->hw, MANC, manc); E1000_WRITE_REG(&adapter->hw, MANC, manc);
...@@ -4944,6 +4958,7 @@ static void e1000_io_resume(struct pci_dev *pdev) ...@@ -4944,6 +4958,7 @@ static void e1000_io_resume(struct pci_dev *pdev)
netif_device_attach(netdev); netif_device_attach(netdev);
if (adapter->hw.mac_type >= e1000_82540 && if (adapter->hw.mac_type >= e1000_82540 &&
adapter->hw.mac_type < e1000_82571 &&
adapter->hw.media_type == e1000_media_type_copper) { adapter->hw.media_type == e1000_media_type_copper) {
manc = E1000_READ_REG(&adapter->hw, MANC); manc = E1000_READ_REG(&adapter->hw, MANC);
manc &= ~(E1000_MANC_ARP_EN); manc &= ~(E1000_MANC_ARP_EN);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment