Linux Driver for the Intel(R) PRO/100 Family of Adapters
========================================================

November 19, 2001


Contents
========

- In This Release
- Supported Adapters
- Building and Installation
- Command Line Parameters
- CPU Cycle Saver
- Hot Plug
- Additional Configurations
- Troubleshooting
- Support
- License


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

This file describes the Linux driver, version 1.6.x, for the Intel 
PRO/100 family of server and desktop adapters. This driver is known 
to build properly on 2.2.x kernels through 2.2.19 and on 2.4.x kernels 
through 2.4.7. Intel focused testing on PCs with Intel processors with
kernels 2.4.7 and 2.2.14. This driver includes support for Itanium(TM)-
based systems.

The Intel PRO/100 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 PRO/100 
adapter. All hardware requirements listed apply to use with Linux.

This release version includes support for the ethtool interface. A
third-party application can use the ethtool interface to get and set
driver settings such as speed and duplex.


Supported Adapters
==================

The following Intel network adapters are compatible with the drivers 
in this release:

  Adapter Name                            Board IDs
  ------------                            ---------

  PRO/100+ Server Adapter                 729757-xxx

  PRO/100+ PCI Adapter                    668081-xxx, 689661-xxx

  PRO/100+ Management Adapter             691334-xxx, 701738-xxx, 
                                          721383-xxx

  PRO/100 S Management Adapter            748566-xxx, 748564-xxx

  PRO/100 S Advanced Management Adapter   747842-xxx, 745171-xxx

  PRO/100+ Dual Port Server Adapter       714303-xxx, 711269-xxx,
                                          A28276-xxx

  PRO/100+ PCI Server Adapter             710550-xxx

  PRO/100 S Server Adapter                748568-xxx, 748565-xxx,
                                          A10563-xxx, A12171-xxx, 
                                          A12321-xxx, A12320-xxx, 
                                          A12170-xxx, 752438-xxx

  PRO/100 VE Desktop Adapter              A10386-xxx, A10725-xxx, 
                                          A23801-xxx

  PRO/100 VM Desktop Adapter              A14323-xxx, A19725-xxx, 
                                          A23801-xxx, A22220-xxx, 
                                          A23796-xxx

  PRO/100 S Desktop Adapter               748592-xxx, A12167-xxx, 
                                          A12318-xxx, A12317-xxx, 
                                          A12165-xxx, 751767-xxx

  PRO/100 S Dual Port Server Adapter      A56831-xxx


To verify your adapter is supported, find the board ID number on the 
adapter. Look for a label that has a barcode and a number in the format 
123456-001 (six digits hyphen three digits). Match this to the list of 
numbers above.

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

  http://support.intel.com/support/network/adapter/pro100/21397.htm

For the latest Intel network drivers for Linux, see:

  http://appsr.intel.com/scripts-df/support_intel.asp


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

NOTE: For the build to work properly it is important that the currently
      running kernel MATCH the version and configuration of the installed
      kernel source. Also, if you have just recompiled your kernel,
      reboot the system now.

      If you are building the e100 driver on a fresh install of Red Hat* 
      without recompiling the kernel, the build will generate warnings.
      This is normal and does not affect driver performance. If you have
      difficulties, remove the non-Intel eepro100 module.

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

2. Untar/unzip the archive:

     tar xfz e100-x.x.x.tar.gz

3. Change to the driver src directory:

     cd e100-x.x.x/src/	

4. Compile the driver module:

     make install

   The binary will be installed as: 
   
     For Linux 2.2.x systems:

        /lib/modules/[KERNEL_VERSION]/net/e100.o

     For Linux 2.4.x systems:

        /lib/modules/[KERNEL_VERSION]/kernel/drivers/net/e100.o

5. Install the module:

     insmod e100

   NOTE: If you are using Hot Plug, see the "Hot Plug" section below.
 
6. Assign an IP address to the interface by entering the following, where
   # is interface number:

     ifconfig eth# <IP_address>

7. Verify that the interface works:

     ping  <your_IP_address>	
	
To build a binary RPM* package of this driver run 'rpm -tb <filename.tar.gz>'.
Replace <filename.tar.gz> with the specific file name of the driver. 

NOTE: In order to see link messages and other Intel driver information on
      your console, you must set the dmesg level up to six. This can be
      done by entering the following on the command line:

        dmesg -n 6


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

The following parameters are used by entering them on the command line
with the modprobe (or insmod) command. For example, with two Intel 
PRO/100 PCI adapters, entering:
	
     modprobe e100 TxDescriptors=32,128

loads the e100 driver with 32 TX resources for the first adapter
and 128 TX resources for the second adapter. This configuration
favors the second adapter. The driver supports up to 16 network 
adapters concurrently.

NOTE: Giving any command line option the value "-1" means that the
      driver will use the appropriate default value for that option,
      as if no value was specified.


BundleMax
Valid Range: 0x1-0xFFFF
Default Value: 6
   This parameter holds the maximum number of packets in a bundle. 
   Reasonable values range from 2 to 10. See "CPU Cycle Saver."

e100_speed_duplex
Valid Range: 0-4 (1=10half;2=10full;3=100half;4=100full)
Default Value: 0
   The default value of 0 is set to auto-negotiate if the link partner 
   is set to auto-negotiate. If the link partner is forced, 
   e100_speed_duplex defaults to half duplex. Example usage: 
   insmod e100.o e100_speed_duplex=4,4 (for two adapters)

flow_control
Valid Range: 0-1 (0=off, 1=on)
Default Value: 0
  This parameter controls the automatic generation(Tx) and response(Rx)
  to Ethernet PAUSE frames.

IntDelay
Valid Range: 0-0xFFFF (0=off)
Default Value: 0 
   This parameter holds the number of time units (in adapter terminology)
   until the adapter generates an interrupt in case the bundle is not full.
   The recommended value for IntDelay is 0x600 (upon initialization). 
   Reasonable values range from 0x200h to 0x800. See "CPU Cycle Saver."

IFS
Valid Range: 0-1 (0=off, 1=on)
Default Value: 1
  Inter Frame Spacing (IFS) aims to reduce the number of Ethernet frame
  collisions by altering the time between frame transmissions. When IFS
  is enabled the driver tries to find an optimal IFS value. However, some
  switches function better when IFS is off.

RxDescriptors
Valid Range: 8-1024
Default Value: 64
   This parameter defines the number of receive descriptors allocated by 
   the driver. Increasing this value allows the driver to buffer more
   incoming packets before the driver is required to service an
   interrupt. The maximum value for Itanium(TM)-based systems is 64.

TxDescriptors
Valid Range: 17-1024
Default Value: 64
   This value is the number of transmit descriptors allocated by the
   driver. Increasing this value allows the protocol stack to 
   queue more transmits at the driver level. The maximum value for 
   Itanium(TM)-based systems is 64.

ucode
Valid Range: 0-1 (0=off, 1=on)
Default Value: 0
   On uploads the micro code to the adapter, which enables CPU Cycle 
   Saver. See the section "CPU Cycle Saver" below.
   Example usage: insmod e100.o ucode=0  (does not reduce CPU usage)

XsumRX  (Adapter dependent, Itanium(TM)-based systems with 82550-based 
	 adapters only)
Valid Range: 0-1 (0=off, 1=on)
Default Value: 1
   On allows Rx checksum offloading for TCP/UDP packets. Requires that
   the hardware support this feature.


CPU Cycle Saver
================

CPU Cycle Saver reduces CPU utilization by reducing the number of 
interrupts that the adapter generates. The default for this 
feature is off (IntDelay = 0).

When CPU Cycle Saver is turned off, the adapter generates one 
interrupt for every frame that is received. This means that the operating 
system stops what it is doing and switches to the network driver in 
order to process the receive.

When CPU Cycle Saver is on, the adapter does not generate an 
interrupt for every frame it receives. Instead, it waits until it 
receives several frames before generating an interrupt. This reduces the 
amount of time spent switching to and from the driver. 

CPU Cycle Saver consists of these arguments: IntDelay and BundleMax.
When IntDelay is increased, the adapter waits longer for frames to 
arrive before generating the interrupt. By increasing BundleMax, the network
adapter waits for the number of frames specified to arrive before generating
the interrupt.

For most users, it is recommended that CPU Cycle Saver be turned off. 
However, for servers or clients that are constantly receiving frames, it is 
recommended to turn on CPU Cycle Saver, using the values mentioned in 
"Command Line Parameters."


Hot Plug
========

Hot Plug affects the driver load state. Below are some commands to help
address the issues that might occur.
 
Disable Hot Plug until reboot:

     echo 0 > /proc/sys/kernel/hotplug/

Disable Hot Plug across reboots:

     rpm -e hotplug

Hot Plug script location:

     /etc/hotplug/*

Stop the network:
              
     service network stop
     ifconfig eth0 down
     rmmod e100


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

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 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 driver name for the Intel PRO/100 is 'e100'.


Troubleshooting
===============

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 doing a make include/linux/version.h.


Support
=======

For general information and support, go to the Intel support Website at:

    http://support.intel.com

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 linux.nics@intel.com.


License
=======

Recipient has requested a license and Intel Corporation ("Intel") is willing
to grant a license for the software entitled Linux Base Driver for the Intel(R)
PRO/100 Family of Adapters (e100) (the "Software") being provided by Intel
Corporation.

The following definitions apply to this License: 

"Licensed Patents" means patent claims licensable by Intel Corporation which 
are necessarily infringed by the use or sale of the Software alone or when 
combined with the operating system referred to below.
"Recipient" means the party to whom Intel delivers this Software.
"Licensee" means Recipient and those third parties that receive a license to 
any operating system available under the GNU Public License version 2.0 or 
later.

Copyright (c) 1996-2001 Intel Corporation 
All rights reserved. 

The license is provided to Recipient and Recipients Licensees under the 
following terms.  

Redistribution and use in source and binary forms of the Software, with or 
without modification, are permitted provided that the following conditions 
are met: 

Redistributions of source code of the Software may retain the above copyright 
notice, this list of conditions and the following disclaimer. 
Redistributions in binary form of the Software may reproduce the above copyright
notice, this list of conditions and the following disclaimer in the 
documentation and/or other materials provided with the distribution. 
Neither the name of Intel Corporation nor the names of its contributors shall 
be used to endorse or promote products derived from this Software without 
specific prior written permission.

Intel hereby grants Recipient and Licensees a non-exclusive, worldwide, 
royalty-free patent license under Licensed Patents to make, use, sell, offer to 
sell, import and otherwise transfer the Software, if any, in source code and 
object code form. This license shall include changes to the Software that are 
error corrections or other minor changes to the Software that do not add 
functionality  or features when the Software is incorporated in any version of 
a operating system that has been distributed under the GNU General Public 
License 2.0 or later.  This patent license shall apply to the combination of 
the Software and any operating system licensed under the GNU Public License 
version 2.0 or later if, at the time Intel provides the Software to Recipient, 
such addition of the Software to the then publicly available versions of such 
operating system available under the GNU Public License version 2.0 or later 
(whether in gold, beta or alpha form) causes such combination to be covered by 
the Licensed Patents. The patent license shall not apply to any other 
combinations which include the Software. No hardware per se is licensed 
hereunder. 
 
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS CONTRIBUTORS BE LIABLE FOR ANY 
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.