Commit bdad69b2 authored by Jeff Garzik's avatar Jeff Garzik

Merge branch 'e1000-7.0.38-k4' of git://lost.foo-projects.org/~ahkok/git/netdev-2.6 into upstream

parents 9528454f 440c052d
################################################################################ ################################################################################
# #
# #
# Copyright(c) 1999 - 2003 Intel Corporation. All rights reserved. # Copyright(c) 1999 - 2006 Intel Corporation. All rights reserved.
# #
# This program is free software; you can redistribute it and/or modify it # This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free # under the terms of the GNU General Public License as published by the Free
......
...@@ -865,15 +865,15 @@ static int ...@@ -865,15 +865,15 @@ static int
e1000_intr_test(struct e1000_adapter *adapter, uint64_t *data) e1000_intr_test(struct e1000_adapter *adapter, uint64_t *data)
{ {
struct net_device *netdev = adapter->netdev; struct net_device *netdev = adapter->netdev;
uint32_t mask, i=0, shared_int = TRUE; uint32_t mask, i=0, shared_int = TRUE;
uint32_t irq = adapter->pdev->irq; uint32_t irq = adapter->pdev->irq;
*data = 0; *data = 0;
/* Hook up test interrupt handler just for this test */ /* Hook up test interrupt handler just for this test */
if (!request_irq(irq, &e1000_test_intr, 0, netdev->name, netdev)) { if (!request_irq(irq, &e1000_test_intr, 0, netdev->name, netdev)) {
shared_int = FALSE; shared_int = FALSE;
} else if (request_irq(irq, &e1000_test_intr, SA_SHIRQ, } else if (request_irq(irq, &e1000_test_intr, SA_SHIRQ,
netdev->name, netdev)){ netdev->name, netdev)){
*data = 1; *data = 1;
return -1; return -1;
...@@ -889,22 +889,22 @@ e1000_intr_test(struct e1000_adapter *adapter, uint64_t *data) ...@@ -889,22 +889,22 @@ e1000_intr_test(struct e1000_adapter *adapter, uint64_t *data)
/* Interrupt to test */ /* Interrupt to test */
mask = 1 << i; mask = 1 << i;
if (!shared_int) { if (!shared_int) {
/* Disable the interrupt to be reported in /* Disable the interrupt to be reported in
* the cause register and then force the same * the cause register and then force the same
* interrupt and see if one gets posted. If * interrupt and see if one gets posted. If
* an interrupt was posted to the bus, the * an interrupt was posted to the bus, the
* test failed. * test failed.
*/ */
adapter->test_icr = 0; adapter->test_icr = 0;
E1000_WRITE_REG(&adapter->hw, IMC, mask); E1000_WRITE_REG(&adapter->hw, IMC, mask);
E1000_WRITE_REG(&adapter->hw, ICS, mask); E1000_WRITE_REG(&adapter->hw, ICS, mask);
msec_delay(10); msec_delay(10);
if (adapter->test_icr & mask) { if (adapter->test_icr & mask) {
*data = 3; *data = 3;
break; break;
} }
} }
/* Enable the interrupt to be reported in /* Enable the interrupt to be reported in
...@@ -923,7 +923,7 @@ e1000_intr_test(struct e1000_adapter *adapter, uint64_t *data) ...@@ -923,7 +923,7 @@ e1000_intr_test(struct e1000_adapter *adapter, uint64_t *data)
break; break;
} }
if (!shared_int) { if (!shared_int) {
/* Disable the other interrupts to be reported in /* Disable the other interrupts to be reported in
* the cause register and then force the other * the cause register and then force the other
* interrupts and see if any get posted. If * interrupts and see if any get posted. If
......
This diff is collapsed.
...@@ -375,7 +375,7 @@ struct e1000_host_mng_dhcp_cookie{ ...@@ -375,7 +375,7 @@ struct e1000_host_mng_dhcp_cookie{
}; };
#endif #endif
int32_t e1000_mng_write_dhcp_info(struct e1000_hw *hw, uint8_t *buffer, int32_t e1000_mng_write_dhcp_info(struct e1000_hw *hw, uint8_t *buffer,
uint16_t length); uint16_t length);
boolean_t e1000_check_mng_mode(struct e1000_hw *hw); boolean_t e1000_check_mng_mode(struct e1000_hw *hw);
boolean_t e1000_enable_tx_pkt_filtering(struct e1000_hw *hw); boolean_t e1000_enable_tx_pkt_filtering(struct e1000_hw *hw);
...@@ -1802,7 +1802,7 @@ struct e1000_hw { ...@@ -1802,7 +1802,7 @@ struct e1000_hw {
* value2 = [0..64512], default=4096 * value2 = [0..64512], default=4096
* value3 = [0..64512], default=0 * value3 = [0..64512], default=0
*/ */
#define E1000_PSRCTL_BSIZE0_MASK 0x0000007F #define E1000_PSRCTL_BSIZE0_MASK 0x0000007F
#define E1000_PSRCTL_BSIZE1_MASK 0x00003F00 #define E1000_PSRCTL_BSIZE1_MASK 0x00003F00
#define E1000_PSRCTL_BSIZE2_MASK 0x003F0000 #define E1000_PSRCTL_BSIZE2_MASK 0x003F0000
......
...@@ -29,45 +29,6 @@ ...@@ -29,45 +29,6 @@
#include "e1000.h" #include "e1000.h"
/* Change Log
* 7.0.33 3-Feb-2006
* o Added another fix for the pass false carrier bit
* 7.0.32 24-Jan-2006
* o Need to rebuild with noew version number for the pass false carrier
* fix in e1000_hw.c
* 7.0.30 18-Jan-2006
* o fixup for tso workaround to disable it for pci-x
* o fix mem leak on 82542
* o fixes for 10 Mb/s connections and incorrect stats
* 7.0.28 01/06/2006
* o hardware workaround to only set "speed mode" bit for 1G link.
* 7.0.26 12/23/2005
* o wake on lan support modified for device ID 10B5
* o fix dhcp + vlan issue not making it to the iAMT firmware
* 7.0.24 12/9/2005
* o New hardware support for the Gigabit NIC embedded in the south bridge
* o Fixes to the recycling logic (skb->tail) from IBM LTC
* 6.3.9 12/16/2005
* o incorporate fix for recycled skbs from IBM LTC
* 6.3.7 11/18/2005
* o Honor eeprom setting for enabling/disabling Wake On Lan
* 6.3.5 11/17/2005
* o Fix memory leak in rx ring handling for PCI Express adapters
* 6.3.4 11/8/05
* o Patch from Jesper Juhl to remove redundant NULL checks for kfree
* 6.3.2 9/20/05
* o Render logic that sets/resets DRV_LOAD as inline functions to
* avoid code replication. If f/w is AMT then set DRV_LOAD only when
* network interface is open.
* o Handle DRV_LOAD set/reset in cases where AMT uses VLANs.
* o Adjust PBA partioning for Jumbo frames using MTU size and not
* rx_buffer_len
* 6.3.1 9/19/05
* o Use adapter->tx_timeout_factor in Tx Hung Detect logic
* (e1000_clean_tx_irq)
* o Support for 8086:10B5 device (Quad Port)
*/
char e1000_driver_name[] = "e1000"; char e1000_driver_name[] = "e1000";
static char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver"; static char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver";
#ifndef CONFIG_E1000_NAPI #ifndef CONFIG_E1000_NAPI
...@@ -75,7 +36,7 @@ static char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver"; ...@@ -75,7 +36,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.0.38-k2"DRIVERNAPI #define DRV_VERSION "7.0.38-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.";
...@@ -221,6 +182,7 @@ static void e1000_restore_vlan(struct e1000_adapter *adapter); ...@@ -221,6 +182,7 @@ static void e1000_restore_vlan(struct e1000_adapter *adapter);
static int e1000_suspend(struct pci_dev *pdev, pm_message_t state); static int e1000_suspend(struct pci_dev *pdev, pm_message_t state);
static int e1000_resume(struct pci_dev *pdev); static int e1000_resume(struct pci_dev *pdev);
#endif #endif
static void e1000_shutdown(struct pci_dev *pdev);
#ifdef CONFIG_NET_POLL_CONTROLLER #ifdef CONFIG_NET_POLL_CONTROLLER
/* for netdump / net console */ /* for netdump / net console */
...@@ -236,8 +198,9 @@ static struct pci_driver e1000_driver = { ...@@ -236,8 +198,9 @@ static struct pci_driver e1000_driver = {
/* Power Managment Hooks */ /* Power Managment Hooks */
#ifdef CONFIG_PM #ifdef CONFIG_PM
.suspend = e1000_suspend, .suspend = e1000_suspend,
.resume = e1000_resume .resume = e1000_resume,
#endif #endif
.shutdown = e1000_shutdown
}; };
MODULE_AUTHOR("Intel Corporation, <linux.nics@intel.com>"); MODULE_AUTHOR("Intel Corporation, <linux.nics@intel.com>");
...@@ -347,7 +310,7 @@ e1000_update_mng_vlan(struct e1000_adapter *adapter) ...@@ -347,7 +310,7 @@ e1000_update_mng_vlan(struct e1000_adapter *adapter)
* For ASF and Pass Through versions of f/w this means that the * For ASF and Pass Through versions of f/w this means that the
* driver is no longer loaded. For AMT version (only with 82573) i * driver is no longer loaded. For AMT version (only with 82573) i
* of the f/w this means that the netowrk i/f is closed. * of the f/w this means that the netowrk i/f is closed.
* *
**/ **/
static void static void
...@@ -379,10 +342,10 @@ e1000_release_hw_control(struct e1000_adapter *adapter) ...@@ -379,10 +342,10 @@ e1000_release_hw_control(struct e1000_adapter *adapter)
* @adapter: address of board private structure * @adapter: address of board private structure
* *
* e1000_get_hw_control sets {CTRL_EXT|FWSM}:DRV_LOAD bit. * e1000_get_hw_control sets {CTRL_EXT|FWSM}:DRV_LOAD bit.
* For ASF and Pass Through versions of f/w this means that * For ASF and Pass Through versions of f/w this means that
* the driver is loaded. For AMT version (only with 82573) * the driver is loaded. For AMT version (only with 82573)
* of the f/w this means that the netowrk i/f is open. * of the f/w this means that the netowrk i/f is open.
* *
**/ **/
static void static void
...@@ -712,8 +675,8 @@ e1000_probe(struct pci_dev *pdev, ...@@ -712,8 +675,8 @@ e1000_probe(struct pci_dev *pdev,
DPRINTK(PROBE, INFO, "PHY reset is blocked due to SOL/IDER session.\n"); DPRINTK(PROBE, INFO, "PHY reset is blocked due to SOL/IDER session.\n");
/* if ksp3, indicate if it's port a being setup */ /* if ksp3, indicate if it's port a being setup */
if (pdev->device == E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3 && if (pdev->device == E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3 &&
e1000_ksp3_port_a == 0) e1000_ksp3_port_a == 0)
adapter->ksp3_port_a = 1; adapter->ksp3_port_a = 1;
e1000_ksp3_port_a++; e1000_ksp3_port_a++;
/* Reset for multiple KP3 adapters */ /* Reset for multiple KP3 adapters */
...@@ -741,9 +704,9 @@ e1000_probe(struct pci_dev *pdev, ...@@ -741,9 +704,9 @@ e1000_probe(struct pci_dev *pdev,
if (pci_using_dac) if (pci_using_dac)
netdev->features |= NETIF_F_HIGHDMA; netdev->features |= NETIF_F_HIGHDMA;
/* hard_start_xmit is safe against parallel locking */ /* hard_start_xmit is safe against parallel locking */
netdev->features |= NETIF_F_LLTX; netdev->features |= NETIF_F_LLTX;
adapter->en_mng_pt = e1000_enable_mng_pass_thru(&adapter->hw); adapter->en_mng_pt = e1000_enable_mng_pass_thru(&adapter->hw);
/* before reading the EEPROM, reset the controller to /* before reading the EEPROM, reset the controller to
...@@ -2771,7 +2734,7 @@ e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev) ...@@ -2771,7 +2734,7 @@ e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
unsigned int nr_frags = 0; unsigned int nr_frags = 0;
unsigned int mss = 0; unsigned int mss = 0;
int count = 0; int count = 0;
int tso; int tso;
unsigned int f; unsigned int f;
len -= skb->data_len; len -= skb->data_len;
...@@ -2784,7 +2747,7 @@ e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev) ...@@ -2784,7 +2747,7 @@ e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
#ifdef NETIF_F_TSO #ifdef NETIF_F_TSO
mss = skb_shinfo(skb)->tso_size; mss = skb_shinfo(skb)->tso_size;
/* The controller does a simple calculation to /* The controller does a simple calculation to
* make sure there is enough room in the FIFO before * make sure there is enough room in the FIFO before
* initiating the DMA for each buffer. The calc is: * initiating the DMA for each buffer. The calc is:
* 4 = ceil(buffer len/mss). To make sure we don't * 4 = ceil(buffer len/mss). To make sure we don't
...@@ -2807,7 +2770,7 @@ e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev) ...@@ -2807,7 +2770,7 @@ e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
case e1000_82573: case e1000_82573:
pull_size = min((unsigned int)4, skb->data_len); pull_size = min((unsigned int)4, skb->data_len);
if (!__pskb_pull_tail(skb, pull_size)) { if (!__pskb_pull_tail(skb, pull_size)) {
printk(KERN_ERR printk(KERN_ERR
"__pskb_pull_tail failed.\n"); "__pskb_pull_tail failed.\n");
dev_kfree_skb_any(skb); dev_kfree_skb_any(skb);
return NETDEV_TX_OK; return NETDEV_TX_OK;
...@@ -3753,7 +3716,7 @@ e1000_clean_rx_irq_ps(struct e1000_adapter *adapter, ...@@ -3753,7 +3716,7 @@ e1000_clean_rx_irq_ps(struct e1000_adapter *adapter,
* throughput, so unsplit small packets and save the alloc/put*/ * throughput, so unsplit small packets and save the alloc/put*/
if (l1 && ((length + l1) <= adapter->rx_ps_bsize0)) { if (l1 && ((length + l1) <= adapter->rx_ps_bsize0)) {
u8 *vaddr; u8 *vaddr;
/* there is no documentation about how to call /* there is no documentation about how to call
* kmap_atomic, so we can't hold the mapping * kmap_atomic, so we can't hold the mapping
* very long */ * very long */
pci_dma_sync_single_for_cpu(pdev, pci_dma_sync_single_for_cpu(pdev,
...@@ -4605,6 +4568,12 @@ e1000_resume(struct pci_dev *pdev) ...@@ -4605,6 +4568,12 @@ e1000_resume(struct pci_dev *pdev)
return 0; return 0;
} }
#endif #endif
static void e1000_shutdown(struct pci_dev *pdev)
{
e1000_suspend(pdev, PMSG_SUSPEND);
}
#ifdef CONFIG_NET_POLL_CONTROLLER #ifdef CONFIG_NET_POLL_CONTROLLER
/* /*
* Polling 'interrupt' - used by things like netconsole to send skbs * Polling 'interrupt' - used by things like netconsole to send skbs
......
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