Linux* Base Driver for Intel(R) Ethernet Network Connection
===========================================================

April 14, 2011

Contents
========

- In This Release
- Identifying Your Adapter
- Upgrading
- Building and Installation
- Command Line Parameters
- Speed and Duplex Configuration
- Additional Configurations
- Known Issues/Troubleshooting
- Support


In This Release
===============

This file describes the e1000 Linux* Base Driver for Intel Ethernet Network 
Connection.  This driver supports kernel versions 2.4.x and 2.6.x.  This driver
includes support for Itanium(R)2-based systems.

This driver is only supported as a loadable module at this time.  Intel is
not supplying patches against the kernel source to allow for static linking
of the driver.  For questions related to hardware requirements, refer to the
documentation supplied with your Intel Ethernet Gigabit adapter.  All 
hardware requirements listed apply to use with Linux.

The following features are now available in supported kernels:
 - Native VLANs
 - Channel Bonding (teaming)
 - SNMPDegradation in throughput performance may be observed in some Jumbo 
   frames environments. If this is observed, increasing the application's 
   socket buffer size and/or increasing the /proc/sys/net/ipv4/tcp_*mem entry 
   values may help. See the specific application manual and 
   /usr/src/linux*/Documentation/networking/ip-sysctl.txt for more details.

Channel Bonding documentation can be found in the Linux kernel source:
/Documentation/networking/bonding.txt

The driver information previously displayed in the /proc filesystem is not
supported in this release.  Alternatively, you can use ethtool (version 1.6
or later), lspci, and ifconfig to obtain the same information.

Instructions on updating ethtool can be found in the section "Additional
Configurations" later in this document.

NOTE: The Intel(R) 82562v 10/100 Network Connection only provides 10/100
support.


Identifying Your Adapter
========================

For more information on how to identify your adapter, go to the Adapter &
Driver ID Guide at:

    http://support.intel.com/support/go/network/adapter/idguide.htm

For the latest Intel network drivers for Linux, refer to the following
website.  Select the link for your adapter.

    http://support.intel.com/support/go/network/adapter/home.htm

Upgrading
=========

If you currently have the e1000 driver installed and need to install e1000e,
perform the following:

 - If your version of e1000 is 7.6.15.5 or less, upgrade to e1000 version 8.x,
   using the instructions in the Building and Installation section below. 
 - Install the e1000e driver using the instructions in the Building and 
   Installation section in the e1000e README.
 - Modify /etc/modprobe.conf to point your PCIe devices to use the new e1000e 
   driver using alias ethX e1000e, or use your distribution's specific method 
   for configuring network adapters like RedHat's setup/system-config-network
   or SuSE's yast2.

Building and Installation
=========================

To build a binary RPM* package of this driver, run 'rpmbuild -tb
<filename.tar.gz>'.  Replace <filename.tar.gz> with the specific filename
of the driver.

NOTE: For the build to work properly, the currently running kernel MUST
      match the version and configuration of the installed kernel sources.
      If you have just recompiled the kernel reboot the system now.

      RPM functionality has only been tested in Red Hat distributions.

1. Move the base driver tar file to the directory of your choice.  For
   example, use /home/username/e1000 or /usr/local/src/e1000.

2. Untar/unzip archive:

     tar zxf e1000-x.x.x.tar.gz

3. Change to the driver src directory:

     cd e1000-x.x.x/src/

4. Compile the driver module:

     make install

   The binary will be installed as:

     /lib/modules/<KERNEL VERSION>/kernel/drivers/net/e1000/e1000.[k]o

   The install locations listed above are the default locations.  They
   might not be correct for certain Linux distributions. 

5. Load the module using either the insmod or modprobe command:

     modprobe e1000

     insmod e1000

   Note that for 2.6 kernels the insmod command can be used if the full
   path to the driver module is specified.  For example:

     insmod /lib/modules/<KERNEL VERSION>/kernel/drivers/net/e1000/e1000.ko

   With 2.6 based kernels also make sure that older e1000 drivers are 
   removed from the kernel, before loading the new module:

     rmmod e1000; modprobe e1000


6. Assign an IP address to the interface by entering the following, where
   x is the interface number:

     ifconfig ethx <IP_address>

7. Verify that the interface works.  Enter the following, where <IP_address>
   is the IP address for another machine on the same subnet as the
   interface that is being tested:

     ping  <IP_address>


Command Line Parameters
=======================

If the driver is built as a module, the  following optional parameters
are used by entering them on the command line with the modprobe command
using this syntax:

     modprobe e1000 [<option>=<VAL1>,<VAL2>,...]

For example, with two Gigabit PCI adapters, entering:

     modprobe e1000 TxDescriptors=80,128

loads the e1000 driver with 80 TX descriptors for the first adapter and
128 TX descriptors for the second adapter.

The default value for each parameter is generally the recommended setting,
unless otherwise noted.

NOTES:  For more information about the AutoNeg, Duplex, and Speed
        parameters, see the "Speed and Duplex Configuration" section in
        this document.

        For more information about the InterruptThrottleRate,
        RxIntDelay, TxIntDelay, RxAbsIntDelay, and TxAbsIntDelay
        parameters, see the application note at:
        http://www.intel.com/design/network/applnots/ap450.htm

        A descriptor describes a data buffer and attributes related to
        the data buffer.  This information is accessed by the hardware.


AutoNeg
-------
(Supported only on adapters with copper connections)
Valid Range:   0x01-0x0F, 0x20-0x2F
Default Value: 0x2F

This parameter is a bit-mask that specifies the speed and duplex settings
advertised by the adapter.  When this parameter is used, the Speed and
Duplex parameters must not be specified.

NOTE:  Refer to the Speed and Duplex section of this readme for more
       information on the AutoNeg parameter.


Duplex
------
(Supported only on adapters with copper connections)
Valid Range:   0-2 (0=auto-negotiate, 1=half, 2=full)
Default Value: 0

This defines the direction in which data is allowed to flow.  Can be
either one or two-directional.  If both Duplex and the link partner are
set to auto-negotiate, the board auto-detects the correct duplex.  If the
link partner is forced (either full or half), Duplex defaults to half-
duplex.


FlowControl
-----------
Valid Range:   0-3 (0=none, 1=Rx only, 2=Tx only, 3=Rx&Tx)
Default Value: Reads flow control settings from the EEPROM

This parameter controls the automatic generation(Tx) and response(Rx)
to Ethernet PAUSE frames.


InterruptThrottleRate
---------------------
(not supported on Intel(R) 82542, 82543 or 82544-based adapters)
Valid Range:   0,1,3,4, 100-100000 (0=off, 1=dynamic, 3=dynamic conservative,
                                    4=simplified balancing)
Default Value: 3

The driver can limit the amount of interrupts per second that the adapter
will generate for incoming packets. It does this by writing a value to the 
adapter that is based on the maximum amount of interrupts that the adapter 
will generate per second.

Setting InterruptThrottleRate to a value greater or equal to 100
will program the adapter to send out a maximum of that many interrupts
per second, even if more packets have come in. This reduces interrupt
load on the system and can lower CPU utilization under heavy load,
but will increase latency as packets are not processed as quickly.

The default behaviour of the driver previously assumed a static 
InterruptThrottleRate value of 8000, providing a good fallback value for 
all traffic types,but lacking in small packet performance and latency. 
The hardware can handle many more small packets per second however, and 
for this reason an adaptive interrupt moderation algorithm was implemented.

Since 7.3.x, the driver has two adaptive modes (setting 1 or 3) in which
it dynamically adjusts the InterruptThrottleRate value based on the traffic 
that it receives. After determining the type of incoming traffic in the last
timeframe, it will adjust the InterruptThrottleRate to an appropriate value 
for that traffic.

The algorithm classifies the incoming traffic every interval into
classes.  Once the class is determined, the InterruptThrottleRate value is 
adjusted to suit that traffic type the best. There are three classes defined: 
"Bulk traffic", for large amounts of packets of normal size; "Low latency",
for small amounts of traffic and/or a significant percentage of small
packets; and "Lowest latency", for almost completely small packets or 
minimal traffic.

In dynamic conservative mode, the InterruptThrottleRate value is set to 4000 
for traffic that falls in class "Bulk traffic". If traffic falls in the "Low 
latency" or "Lowest latency" class, the InterruptThrottleRate is increased 
stepwise to 20000. This default mode is suitable for most applications.

For situations where low latency is vital such as cluster or
grid computing, the algorithm can reduce latency even more when
InterruptThrottleRate is set to mode 1. In this mode, which operates
the same as mode 3, the InterruptThrottleRate will be increased stepwise to 
70000 for traffic in class "Lowest latency".

In simplified mode the interrupt rate is based on the ratio of tx and
rx traffic.  If the bytes per second rate is approximately equal, the
interrupt rate will drop as low as 2000 interrupts per second.  If the
traffic is mostly transmit or mostly receive, the interrupt rate could
be as high as 8000.

Setting InterruptThrottleRate to 0 turns off any interrupt moderation
and may improve small packet latency, but is generally not suitable
for bulk throughput traffic.

NOTE:  InterruptThrottleRate takes precedence over the TxAbsIntDelay and
       RxAbsIntDelay parameters.  In other words, minimizing the receive
       and/or transmit absolute delays does not force the controller to
       generate more interrupts than what the Interrupt Throttle Rate
       allows.

CAUTION:  If you are using the Intel(R) PRO/1000 CT Network Connection
          (controller 82547), setting InterruptThrottleRate to a value
          greater than 75,000, may hang (stop transmitting) adapters
          under certain network conditions.  If this occurs a NETDEV
          WATCHDOG message is logged in the system event log.  In
          addition, the controller is automatically reset, restoring
          the network connection.  To eliminate the potential for the
          hang, ensure that InterruptThrottleRate is set no greater
          than 75,000 and is not set to 0.

NOTE:  When e1000 is loaded with default settings and multiple adapters
       are in use simultaneously, the CPU utilization may increase non-
       linearly.  In order to limit the CPU utilization without impacting
       the overall throughput, we recommend that you load the driver as
       follows:

           modprobe e1000 InterruptThrottleRate=3000,3000,3000

       This sets the InterruptThrottleRate to 3000 interrupts/sec for
       the first, second, and third instances of the driver.  The range
       of 2000 to 3000 interrupts per second works on a majority of
       systems and is a good starting point, but the optimal value will
       be platform-specific.  If CPU utilization is not a concern, use
       RX_POLLING (NAPI) and default driver settings.



RxDescriptors
-------------
Valid Range:   80-256 for 82542 and 82543-based adapters
               80-4096 for all other supported adapters
Default Value: 256

This value specifies the number of receive buffer descriptors allocated
by the driver.  Increasing this value allows the driver to buffer more
incoming packets, at the expense of increased system memory utilization.

Each descriptor is 16 bytes.  A receive buffer is also allocated for each
descriptor and can be either 2048, 4096, 8192, or 16384 bytes, depending 
on the MTU setting. The maximum MTU size is 16110.

NOTE:  MTU designates the frame size.  It only needs to be set for Jumbo 
       Frames.  Depending on the available system resources, the request 
       for a higher number of receive descriptors may be denied.  In this 
       case, use a lower number.


RxIntDelay
----------
Valid Range:   0-65535 (0=off)
Default Value: 0

This value delays the generation of receive interrupts in units of 1.024
microseconds.  Receive interrupt reduction can improve CPU efficiency if
properly tuned for specific network traffic.  Increasing this value adds
extra latency to frame reception and can end up decreasing the throughput
of TCP traffic.  If the system is reporting dropped receives, this value
may be set too high, causing the driver to run out of available receive
descriptors.

CAUTION:  When setting RxIntDelay to a value other than 0, adapters may
          hang (stop transmitting) under certain network conditions.  If
          this occurs a NETDEV WATCHDOG message is logged in the system
          event log.  In addition, the controller is automatically reset,
          restoring the network connection.  To eliminate the potential
          for the hang ensure that RxIntDelay is set to 0.


RxAbsIntDelay
-------------
(This parameter is supported only on 82540, 82545 and later adapters.)
Valid Range:   0-65535 (0=off)
Default Value: 8

This value, in units of 1.024 microseconds, limits the delay in which a
receive interrupt is generated.  Useful only if RxIntDelay is non-zero,
this value ensures that an interrupt is generated after the initial
packet is received within the set amount of time.  Proper tuning,
along with RxIntDelay, may improve traffic throughput in specific network
conditions.


Speed
-----
(This parameter is supported only on adapters with copper connections.)
Valid Settings: 0, 10, 100, 1000
Default Value:  0 (auto-negotiate at all supported speeds)

Speed forces the line speed to the specified value in megabits per second
(Mbps).  If this parameter is not specified or is set to 0 and the link
partner is set to auto-negotiate, the board will auto-detect the correct
speed.  Duplex should also be set when Speed is set to either 10 or 100.


TxDescriptors
-------------
Valid Range:   80-256 for 82542 and 82543-based adapters
               80-4096 for all other supported adapters
Default Value: 256

This value is the number of transmit descriptors allocated by the driver.
Increasing this value allows the driver to queue more transmits.  Each
descriptor is 16 bytes.

NOTE:  Depending on the available system resources, the request for a
       higher number of transmit descriptors may be denied.  In this case,
       use a lower number.


TxDescriptorStep
----------------
Valid Range:    1 (use every Tx Descriptor)
		4 (use every 4th Tx Descriptor)
    
Default Value:  1 (use every Tx Descriptor)

On certain non-Intel architectures, it has been observed that intense TX 
traffic bursts of short packets may result in an improper descriptor 
writeback. If this occurs, the driver will report a "TX Timeout" and reset 
the adapter, after which the transmit flow will restart, though data may 
have stalled for as much as 10 seconds before it resumes.

The improper writeback does not occur on the first descriptor in a system
memory cache-line, which is typically 32 bytes, or 4 descriptors long. 

Setting TxDescriptorStep to a value of 4 will ensure that all TX descriptors
are aligned to the start of a system memory cache line, and so this problem
will not occur. 

NOTES: Setting TxDescriptorStep to 4 effectively reduces the number of 
       TxDescriptors available for transmits to 1/4 of the normal allocation. 
       This has a possible negative performance impact, which may be 
       compensated for by allocating more descriptors using the TxDescriptors
       module parameter.

       There are other conditions which may result in "TX Timeout", which will 
       not be resolved by the use of the TxDescriptorStep parameter. As the 
       issue addressed by this parameter has never been observed on Intel 
       Architecture platforms, it should not be used on Intel platforms.


TxIntDelay
----------
Valid Range:   0-65535 (0=off)
Default Value: 8

This value delays the generation of transmit interrupts in units of
1.024 microseconds.  Transmit interrupt reduction can improve CPU
efficiency if properly tuned for specific network traffic.  If the
system is reporting dropped transmits, this value may be set too high
causing the driver to run out of available transmit descriptors.


TxAbsIntDelay
-------------
(This parameter is supported only on 82540, 82545 and later adapters.)
Valid Range:   0-65535 (0=off)
Default Value: 32

This value, in units of 1.024 microseconds, limits the delay in which a
transmit interrupt is generated.  Useful only if TxIntDelay is non-zero,
this value ensures that an interrupt is generated after the initial
packet is sent on the wire within the set amount of time.  Proper tuning,
along with TxIntDelay, may improve traffic throughput in specific
network conditions.


XsumRX
------
(This parameter is NOT supported on the 82542-based adapter.)
Valid Range:   0-1
Default Value: 1

A value of '1' indicates that the driver should enable IP checksum
offload for received packets (both UDP and TCP) to the adapter hardware.


Copybreak
---------
Valid Range:   0-xxxxxxx (0=off)
Default Value: 256
Usage: insmod e1000.ko copybreak=128

Driver copies all packets below or equaling this size to a fresh rx
buffer before handing it up the stack.

This parameter is different than other parameters, in that it is a
single (not 1,1,1 etc.) parameter applied to all driver instances and
it is also available during runtime at 
/sys/module/e1000/parameters/copybreak


SmartPowerDownEnable
--------------------
Valid Range: 0-1
Default Value:  0 (disabled)

Allows Phy to turn off in lower power states. The user can turn off
this parameter in supported chipsets.


KumeranLockLoss
---------------
Valid Range: 0-1
Default Value: 1 (enabled)

This workaround skips resetting the Phy at shutdown for the initial
silicon releases of ICH8 systems.


TxDescPower
-----------
Valid Range: 6-12
Default Value: 12

This value represents the size-order of each transmit descriptor.
The valid size for descriptors would be 2^6 (64) to 2^12 (4096) bytes
each.  As this value decreases one may want to consider increasing
the TxDescriptors value to maintain the same amount of frame memory.


ignore_64bit_dma
----------------
Valid Range:   0-xxxxxxx (0=off)
Default Value: 0
Usage: insmod e1000.ko ignore_64bit_dma=1

When non zero the driver will only request DMA mapping of host memory
in the lower 4GB region. This provides a workaround for users of AMD platforms
GA-MA78G-DS3H & SM4021M-T2R+ that have reported TXHangs on system that have
>4GB RAM, suspected caused by some (no deep root cause) issue in the Dual 
Address Cycle (DAC) DMA mechanism needed to access addresses above 4GB.
Setting ignore_64bit_dma to 1 activates the workaround.

This parameter is different than other parameters, in that it is a
single (not 1,1,1 etc.) parameter applied to all driver instances and
it is also available during runtime at 
/sys/module/e1000/parameters/ignore_64bit_dma


Speed and Duplex Configuration
==============================

Three keywords are used to control the speed and duplex configuration.
These keywords are Speed, Duplex, and AutoNeg.

If the board uses a fiber interface, these keywords are ignored, and the
fiber interface board only links at 1000 Mbps full-duplex.

For copper-based boards, the keywords interact as follows:

  The default operation is auto-negotiate.  The board advertises all
  supported speed and duplex combinations, and it links at the highest
  common speed and duplex mode IF the link partner is set to auto-negotiate.

  If Speed = 1000, limited auto-negotiation is enabled and only 1000 Mbps
  is advertised (The 1000BaseT spec requires auto-negotiation.)

  If Speed = 10 or 100, then both Speed and Duplex should be set.  Auto-
  negotiation is disabled, and the AutoNeg parameter is ignored.  Partner
  SHOULD also be forced.

The AutoNeg parameter is used when more control is required over the
auto-negotiation process.  It should be used when you wish to control which
speed and duplex combinations are advertised during the auto-negotiation
process.

The parameter may be specified as either a decimal or hexadecimal value as
determined by the bitmap below.

Bit position   7      6      5       4       3      2      1       0
Decimal Value  128    64     32      16      8      4      2       1
Hex value      80     40     20      10      8      4      2       1
Speed (Mbps)   N/A    N/A    1000    N/A     100    100    10      10
Duplex                       Full            Full   Half   Full    Half

Some examples of using AutoNeg:

  modprobe e1000 AutoNeg=0x01 (Restricts autonegotiation to 10 Half)
  modprobe e1000 AutoNeg=1 (Same as above)
  modprobe e1000 AutoNeg=0x02 (Restricts autonegotiation to 10 Full)
  modprobe e1000 AutoNeg=0x03 (Restricts autonegotiation to 10 Half or 10 Full)
  modprobe e1000 AutoNeg=0x04 (Restricts autonegotiation to 100 Half)
  modprobe e1000 AutoNeg=0x05 (Restricts autonegotiation to 10 Half or 100
  Half)
  modprobe e1000 AutoNeg=0x020 (Restricts autonegotiation to 1000 Full)
  modprobe e1000 AutoNeg=32 (Same as above)

Note that when this parameter is used, Speed and Duplex must not be specified.

If the link partner is forced to a specific speed and duplex, then this
parameter should not be used.  Instead, use the Speed and Duplex parameters
previously mentioned to force the adapter to the same speed and duplex.


Additional Configurations
=========================

  Configuring the Driver on Different Distributions
  -------------------------------------------------
  Configuring a network driver to load properly when the system is started
  is distribution dependent.  Typically, the configuration process involves
  adding an alias line to /etc/modules.conf or /etc/modprobe.conf as well
  as editing other system startup scripts and/or configuration files.  Many
  popular Linux distributions ship with tools to make these changes for you.
  To learn the proper way to configure a network device for your system,
  refer to your distribution documentation.  If during this process you are
  asked for the driver or module name, the name for the Linux Base Driver
  for the Gigabit Family of Adapters is e1000.

  As an example, if you install the e1000 driver for two Gigabit adapters
  (eth0 and eth1) and set the speed and duplex to 10full and 100half, add
  the following to modules.conf or or modprobe.conf:

       alias eth0 e1000
       alias eth1 e1000
       options e1000 Speed=10,100 Duplex=2,1

  Viewing Link Messages
  ---------------------
  Link messages will not be displayed to the console if the distribution is
  restricting system messages.  In order to see network driver link messages
  on your console, set dmesg to eight by entering the following:

       dmesg -n 8

  NOTE: This setting is not saved across reboots.

  Jumbo Frames
  ------------
  Jumbo Frames support is enabled by changing the MTU to a value larger than
  the default of 1500.  Use the ifconfig command to increase the MTU size.
  For example:

       ifconfig eth<x> mtu 9000 up

  This setting is not saved across reboots.  It can be made permanent if
  you add:

       MTU=9000

   to the file /etc/sysconfig/network-scripts/ifcfg-eth<x>.  This example
   applies to the Red Hat distributions; other distributions may store this
   setting in a different location.

  Notes:
  Degradation in throughput performance may be observed in some Jumbo frames 
  environments. If this is observed, increasing the application's socket buffer
  size and/or increasing the /proc/sys/net/ipv4/tcp_*mem entry values may help.
  See the specific application manual and 
  /usr/src/linux*/Documentation/networking/ip-sysctl.txt for more details.

  - To enable Jumbo Frames, increase the MTU size on the interface beyond
    1500.

  - The maximum MTU setting for Jumbo Frames is 16110.  This value coincides
    with the maximum Jumbo Frames size of 16128.

  - Using Jumbo frames at 10 or 100 Mbps is not supported and may result in
    poor performance or loss of link.

  - Some Intel gigabit adapters that support Jumbo Frames have a frame size
    limit of 9238 bytes, with a corresponding MTU size limit of 9216 bytes.
    The adapters with this limitation are based on the Intel(R) 82571EB,
    82572EI, 82573L, 82566, 82562, and 80003ES2LAN controller.  These 
    correspond to the following product names:
     Intel(R) PRO/1000 PT Server Adapter
     Intel(R) PRO/1000 PT Desktop Adapter
     Intel(R) PRO/1000 PT Network Connection
     Intel(R) PRO/1000 PT Dual Port Server Adapter
     Intel(R) PRO/1000 PT Dual Port Network Connection
     Intel(R) PRO/1000 PF Server Adapter
     Intel(R) PRO/1000 PF Network Connection
     Intel(R) PRO/1000 PF Dual Port Server Adapter
     Intel(R) PRO/1000 PB Server Connection
     Intel(R) PRO/1000 PL Network Connection
     Intel(R) PRO/1000 EB Network Connection with I/O Acceleration
     Intel(R) PRO/1000 EB Backplane Connection with I/O Acceleration
     Intel(R) PRO/1000 PT Quad Port Server Adapter
     Intel(R) PRO/1000 PF Quad Port Server Adapter
     Intel(R) 82566DM-2 Gigabit Network Connection
     Intel(R) Gigabit PT Quad Port Server ExpressModule
     
  - The following adapters do not support Jumbo Frames:
     Intel(R) PRO/1000 Gigabit Server Adapter
     Intel(R) PRO/1000 PM Network Connection
     Intel(R) 82562V 10/100 Network Connection
     Intel(R) 82566DM Gigabit Network Connection
     Intel(R) 82566DC Gigabit Network Connection
     Intel(R) 82566MM Gigabit Network Connection
     Intel(R) 82566MC Gigabit Network Connection
     Intel(R) 82562GT 10/100 Network Connection
     Intel(R) 82562G 10/100 Network Connection
     Intel(r) 82566DC-2 Gigabit Network Connection
     Intel(R) 82562V-2 10/100 Network Connection
     Intel(R) 82562G-2 10/100 Network Connection
     Intel(R) 82562GT-2 10/100 Network Connection

  ethtool
  -------
  The driver utilizes the ethtool interface for driver configuration and
  diagnostics, as well as displaying statistical information.  ethtool
  version 3.0 or later is required for this functionality, although we 
  strongly recommend downloading the latest version at:

  http://ftp.kernel.org/pub/software/network/ethtool/.


  Enabling Wake on LAN* (WoL)
  ---------------------------
  WoL is configured through the ethtool* utility.  ethtool is included with
  all versions of Red Hat after Red Hat 7.2.  For other Linux distributions,
  download and install ethtool from the following website:
  http://ftp.kernel.org/pub/software/network/ethtool/.

  For instructions on enabling WoL with ethtool, refer to the website listed
  above.

  WoL will be enabled on the system during the next shut down or reboot.
  For this driver version, in order to enable WoL, the e1000 driver must be
  loaded when shutting down or rebooting the system.

  Wake On LAN is only supported on port A for the following devices:
  Intel(R) PRO/1000 PT Dual Port Network Connection
  Intel(R) PRO/1000 PT Dual Port Server Connection
  Intel(R) PRO/1000 PT Dual Port Server Adapter
  Intel(R) PRO/1000 PF Dual Port Server Adapter
  Intel(R) PRO/1000 PT Quad Port Server Adapter
  Intel(R) Gigabit PT Quad Port Server ExpressModule 

  NAPI
  ----
  NAPI (Rx polling mode) is supported in the e1000 driver.  NAPI is enabled
  or disabled based on the configuration of the kernel.  To override
  the default, use the following compile-time flags.

  To enable NAPI, compile the driver module, passing in a configuration option:

       make CFLAGS_EXTRA=-DE1000_NAPI install

  To disable NAPI, compile the driver module, passing in a configuration option:

       make CFLAGS_EXTRA=-DE1000_NO_NAPI install

  See ftp://robur.slu.se/pub/Linux/net-development/NAPI/usenix-paper.tgz for 
  more information on NAPI.


Known Issues/Troubleshooting
============================

For known hardware and troubleshooting issues, refer to the following website.

    http://support.intel.com/support/go/network/adapter/home.htm

Either select the link for your adapter or perform a search for the adapter 
number. The adapter's page lists many issues. For a complete list of hardware
issues download your adapter's user guide and read the Release Notes. 

  NOTE: After installing the driver, if your Intel Ethernet Network Connection
  is not working, verify in the "In This Release" section of the readme that 
  you have installed the correct driver.

Intel(R) Active Management Technology 2.0, 2.1, 2.5 not supported in 
conjunction with Linux driver
---------------------------------------------------------------------

Detected Tx Unit Hang in Quad Port Adapters
-------------------------------------------
In some cases ports 3 and 4 don't pass traffic and report 'Detected Tx Unit
Hang' followed by 'NETDEV WATCHDOG: ethX: transmit timed out' errors. Ports 
1 and 2 don't show any errors and will pass traffic.

This issue MAY be resolved by updating to the latest kernel and BIOS. The 
user is encouraged to run an OS that fully supports MSI interrupts. You can 
check your system's BIOS by downloading the Linux Firmware Developer Kit 
that can be obtained at http://www.linuxfirmwarekit.org/

82573(V/L/E) TX Unit Hang Messages
----------------------------------
Several adapters with the 82573 chipset display "TX unit hang" messages 
during normal operation with the e1000 driver. The issue appears both with 
TSO enabled and disabled, and is caused by a power management function that 
is enabled in the EEPROM. Early releases of the chipsets to vendors had the 
EEPROM bit that enabled the feature. After the issue was discovered newer 
adapters were released with the feature disabled in the EEPROM. 

If you encounter the problem in an adapter, and the chipset is an 82573-based
one, you can verify that your adapter needs the fix by using ethtool: 

 # ethtool -e eth0
 Offset          Values
 ------          ------
 0x0000          00 12 34 56 fe dc 30 0d 46 f7 f4 00 ff ff ff ff
 0x0010          ff ff ff ff 6b 02 8c 10 d9 15 8c 10 86 80 de 83
                                                           ^^
The value at offset 0x001e (de) has bit 0 unset. This enables the problematic 
power saving feature. In this case, the EEPROM needs to read "df" at offset 
0x001e. 

A one-time EEPROM fix is available as a shell script. This script will verify 
that the adapter is applicable to the fix and if the fix is needed or not. If 
the fix is required, it applies the change to the EEPROM and updates the 
checksum. The user must reboot the system after applying the fix if changes 
were made to the EEPROM. 

Example output of the script: 

 # bash fixeep-82573-dspd.sh eth0
 eth0: is a "82573E Gigabit Ethernet Controller"
 This fixup is applicable to your hardware
 executing command: ethtool -E eth0 magic 0x109a8086 offset 0x1e value 0xdf
 Change made. You *MUST* reboot your machine before changes take effect!

The script can be downloaded at 
http://e1000.sourceforge.net/files/fixeep-82573-dspd.sh

Dropped Receive Packets on Half-duplex 10/100 Networks
------------------------------------------------------
If you have an Intel PCI Express adapter running at 10mbps or 100mbps, half-
duplex, you may observe occasional dropped receive packets.  There are no
workarounds for this problem in this network configuration.  The network must
be updated to operate in full-duplex, and/or 1000mbps only.

Driver Compilation
------------------
When trying to compile the driver by running make install, the following
error may occur:

    "Linux kernel source not configured - missing version.h"

To solve this issue, create the version.h file by going to the Linux source
tree and entering:

    make include/linux/version.h.

Performance Degradation with Jumbo Frames
-----------------------------------------
Degradation in throughput performance may be observed in some Jumbo frames
environments.  If this is observed, increasing the application's socket
buffer size and/or increasing the /proc/sys/net/ipv4/tcp_*mem entry values
may help.  See the specific application manual and
/usr/src/linux*/Documentation/
networking/ip-sysctl.txt for more details.

Jumbo Frames on Foundry BigIron 8000 switch
-------------------------------------------
There is a known issue using Jumbo frames when connected to a Foundry
BigIron 8000 switch.  This is a 3rd party limitation.  If you experience
loss of packets, lower the MTU size.

Allocating Rx Buffers when Using Jumbo Frames 
---------------------------------------------
Allocating Rx buffers when using Jumbo Frames on 2.6.x kernels may fail if 
the available memory is heavily fragmented. This issue may be seen with PCI-X 
adapters or with packet split disabled. This can be reduced or eliminated 
by changing the amount of available memory for receive buffer allocation, by
increasing /proc/sys/vm/min_free_kbytes. 

Multiple Interfaces on Same Ethernet Broadcast Network
------------------------------------------------------
Due to the default ARP behavior on Linux, it is not possible to have
one system on two IP networks in the same Ethernet broadcast domain
(non-partitioned switch) behave as expected.  All Ethernet interfaces
will respond to IP traffic for any IP address assigned to the system.
This results in unbalanced receive traffic.

If you have multiple interfaces in a server, either turn on ARP
filtering by entering:

    echo 1 > /proc/sys/net/ipv4/conf/all/arp_filter
(this only works if your kernel's version is higher than 2.4.5),

NOTE: This setting is not saved across reboots.  The configuration
change can be made permanent by adding the line:
    net.ipv4.conf.all.arp_filter = 1
to the file /etc/sysctl.conf

      or,

install the interfaces in separate broadcast domains (either in
different switches or in a switch partitioned to VLANs).

82541/82547 can't link or are slow to link with some link partners
-----------------------------------------------------------------
There is a known compatibility issue with 82541/82547 and some
low-end switches where the link will not be established, or will
be slow to establish.  In particular, these switches are known to
be incompatible with 82541/82547:

    Planex FXG-08TE
    I-O Data ETG-SH8

To workaround this issue, the driver can be compiled with an override
of the PHY's master/slave setting.  Forcing master or forcing slave
mode will improve time-to-link.

    # make CFLAGS_EXTRA=-DE1000_MASTER_SLAVE=<n>

Where <n> is:

    0 = Hardware default
    1 = Master mode
    2 = Slave mode
    3 = Auto master/slave

Disable rx flow control with ethtool
------------------------------------
In order to disable receive flow control using ethtool, you must turn
off auto-negotiation on the same command line.

For example:

   ethtool -A eth? autoneg off rx off

Unplugging network cable while ethtool -p is running
----------------------------------------------------
In kernel versions 2.5.50 and later (including 2.6 kernel), unplugging 
the network cable while ethtool -p is running will cause the system to 
become unresponsive to keyboard commands, except for control-alt-delete.  
Restarting the system appears to be the only remedy.


Support
=======

For general information, go to the Intel support website at:

    www.intel.com/support/ 

or the Intel Wired Networking project hosted by Sourceforge at:

    http://sourceforge.net/projects/e1000

If an issue is identified with the released source code on the supported
kernel with a supported adapter, email the specific information related
to the issue to e1000-devel@lists.sf.net



License
=======

Intel Gigabit Linux driver.
Copyright(c) 1999 - 2011 Intel Corporation.

This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
version 2, as published by the Free Software Foundation.

This program is distributed in the hope it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
more details.

You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.

The full GNU General Public License is included in this distribution in
the file called "COPYING".



Trademarks
==========

Intel, Itanium, and Pentium are trademarks or registered trademarks of
Intel Corporation or its subsidiaries in the United States and other
countries.

* Other names and brands may be claimed as the property of others.
