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

November 17, 2004


Contents
========

- In This Release
- Identifying Your Adapter
- Driver Configuration Parameters
- Additional Configurations
- Support


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

This file describes the Linux* Base Driver for the Intel(R) PRO/100 Family of
Adapters, version 3.3.x.  This driver supports 2.4.x and 2.6.x kernels. 

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/network/adapter/pro100/21397.htm

For the latest Intel network drivers for Linux, refer to the following 
website. In the search field, enter your adapter name or type, or use the 
networking link on the left to search for your adapter:

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

Driver Configuration Parameters
===============================

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

Rx Descriptors: Number of receive descriptors. A receive descriptor is a data 
   structure that describes a receive buffer and its attributes to the network 
   controller. The data in the descriptor is used by the controller to write 
   data from the controller to host memory. In the 3.0.x driver the valid
   range for this parameter is 64-256. The default value is 64. This parameter 
   can be changed using the command 
 
   ethtool -G eth? rx n, where n is the number of desired rx descriptors.

Tx Descriptors: Number of transmit descriptors. A transmit descriptor is a
   data structure that describes a transmit buffer and its attributes to the
   network controller. The data in the descriptor is used by the controller to 
   read data from the host memory to the controller. In the 3.0.x driver the 
   valid range for this parameter is 64-256. The default value is 64. This 
   parameter can be changed using the command 

   ethtool -G eth? tx n, where n is the number of desired tx descriptors.

Speed/Duplex: The driver auto-negotiates the link speed and duplex settings by 
   default. Ethtool can be used as follows to force speed/duplex. 

   ethtool -s eth?  autoneg off speed {10|100} duplex {full|half}

   NOTE: setting the speed/duplex to incorrect values will cause the link to
   fail.

Event Log Message Level:  The driver uses the message level flag to log events 
   to syslog. The message level can be set at driver load time. It can also be 
   set using the command

   ethtool -s eth? msglvl n

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 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 Intel PRO/100 Family of 
  Adapters is e100.

  As an example, if you install the e100 driver for two PRO/100 adapters 
  (eth0 and eth1), add the following to modules.conf:

       alias eth0 e100
       alias eth1 e100

  Viewing Link Messages
  ---------------------
  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 before loading the e100 driver: 

       dmesg -n 8

  If you wish to see all messages issued by the driver, including debug 
  messages, set the dmesg level to eight.

  NOTE: This setting is not saved across reboots.

  Ethtool
  -------

  The driver utilizes the ethtool interface for driver configuration and
  diagnostics, as well as displaying statistical information.  Ethtool
  version 1.6 or later is required for this functionality.

  The latest release of ethtool can be found at:
  http://sf.net/projects/gkernel.  

  NOTE: This driver uses mii support from the kernel. As a result, when 
  there is no link, ethtool will report speed/duplex to be 10/half.

  NOTE: Ethtool 1.6 only supports a limited set of ethtool options. Support 
  for a more complete ethtool feature set can be enabled by upgrading 
  ethtool to ethtool-1.8.1. 

  Enabling Wake on LAN* (WoL)
  ---------------------------
  WoL is provided through the Ethtool* utility. Ethtool is included with Red 
  Hat* 8.0. For other Linux distributions, download and install Ethtool from 
  the following website: http://sourceforge.net/projects/gkernel. 

  For instructions on enabling WoL with Ethtool, refer to the Ethtool man
  page.

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

  NAPI
  ----

  NAPI (Rx polling mode) is supported in the e100 driver.

  See www.cyberus.ca/~hadi/usenix-paper.tgz for more information on NAPI.

Support
=======

For general information, 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
=======

This software program is released under the terms of a license agreement 
between you ('Licensee') and Intel. Do not use or load this software or any 
associated materials (collectively, the 'Software') until you have carefully 
read the full terms and conditions of the LICENSE located in this software 
package. By loading or using the Software, you agree to the terms of this 
Agreement. If you do not agree with the terms of this Agreement, do not 
install or use the Software.

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