
===========================
Intel(R) PRO/Wireless 2100 Network Connection Driver for Linux
README.ipw2100

March 14, 2005

===========================
Index
---------------------------
0. Introduction
1. Release 1.1.0 Current Features
2. Command Line Parameters
3. Sysfs Helper Files
4. Radio Kill Switch
5. Dynamic Firmware
6. Power Management
7. Support
8. License


===========================
0. Introduction
------------ -----   -----       ----       ---       --         -     

This document provides a brief overview of the features supported by the 
IPW2100 driver project.  The main project website, where the latest 
development version of the driver can be found, is:

	http://ipw2100.sourceforge.net

There you can find the not only the latest releases, but also information about
potential fixes and patches, as well as links to the development mailing list
for the driver project.


===========================
1. Release 1.1.0 Current Supported Features
---------------------------     
- Managed (BSS) and Ad-Hoc (IBSS)
- WEP (shared key and open)
- Wireless Tools support 
- 802.1x (tested with XSupplicant 1.0.1)

Enabled (but not supported) features:
- Monitor/RFMon mode
- WPA/WPA2

The distinction between officially supported and enabled is a reflection
on the amount of validation and interoperability testing that has been
performed on a given feature.


===========================
2. 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 ipw2100 [<option>=<VAL1><,VAL2>...]

For example, to disable the radio on driver loading, enter:

	modprobe ipw2100 disable=1

The ipw2100 driver supports the following module parameters:

Name		Value		Example:
debug		0x0-0xffffffff	debug=1024
mode		0,1,2		mode=1   /* AdHoc */
channel		int		channel=3 /* Only valid in AdHoc or Monitor */
associate	boolean		associate=0 /* Do NOT auto associate */
disable		boolean		disable=1 /* Do not power the HW */


===========================
3. Sysfs Helper Files
---------------------------     

There are several ways to control the behavior of the driver.  Many of the 
general capabilities are exposed through the Wireless Tools (iwconfig).  There
are a few capabilities that are exposed through entries in the Linux Sysfs.


----- Driver Level ------
For the driver level files, look in /sys/bus/pci/drivers/ipw2100/

  debug_level  
	
	This controls the same global as the 'debug' module parameter.  For 
        information on the various debugging levels available, run the 'dvals'
	script found in the driver source directory.

	NOTE:  'debug_level' is only enabled if CONFIG_IPW2100_DEBUG is turn
	       on.

----- Device Level ------
For the device level files look in
	
	/sys/bus/pci/drivers/ipw2100/{PCI-ID}/

For example:
	/sys/bus/pci/drivers/ipw2100/0000:02:01.0

For the device level files, see /sys/bus/pci/drivers/ipw2100:

  rf_kill
	read - 
	0 = RF kill not enabled (radio on)
	1 = SW based RF kill active (radio off)
	2 = HW based RF kill active (radio off)
	3 = Both HW and SW RF kill active (radio off)
	write -
	0 = If SW based RF kill active, turn the radio back on
	1 = If radio is on, activate SW based RF kill

	NOTE: If you enable the SW based RF kill and then toggle the HW
  	based RF kill from ON -> OFF -> ON, the radio will NOT come back on


===========================
4. Radio Kill Switch
---------------------------
Most laptops provide the ability for the user to physically disable the radio.
Some vendors have implemented this as a physical switch that requires no
software to turn the radio off and on.  On other laptops, however, the switch
is controlled through a button being pressed and a software driver then making
calls to turn the radio off and on.  This is referred to as a "software based
RF kill switch"

See the Sysfs helper file 'rf_kill' for determining the state of the RF switch
on your system.


===========================
5. Dynamic Firmware
---------------------------     
As the firmware is licensed under a restricted use license, it can not be 
included within the kernel sources.  To enable the IPW2100 you will need a 
firmware image to load into the wireless NIC's processors.

You can obtain these images from <http://ipw2100.sf.net/firmware.php>.

See INSTALL for instructions on installing the firmware.


===========================
6. Power Management
---------------------------     
The IPW2100 supports the configuration of the Power Save Protocol 
through a private wireless extension interface.  The IPW2100 supports 
the following different modes:

	off	No power management.  Radio is always on.
	on	Automatic power management
	1-5	Different levels of power management.  The higher the 
		number the greater the power savings, but with an impact to 
		packet latencies. 

Power management works by powering down the radio after a certain 
interval of time has passed where no packets are passed through the 
radio.  Once powered down, the radio remains in that state for a given 
period of time.  For higher power savings, the interval between last 
packet processed to sleep is shorter and the sleep period is longer.

When the radio is asleep, the access point sending data to the station 
must buffer packets at the AP until the station wakes up and requests 
any buffered packets.  If you have an AP that does not correctly support 
the PSP protocol you may experience packet loss or very poor performance 
while power management is enabled.  If this is the case, you will need 
to try and find a firmware update for your AP, or disable power 
management (via `iwconfig eth1 power off`)

To configure the power level on the IPW2100 you use a combination of 
iwconfig and iwpriv.  iwconfig is used to turn power management on, off, 
and set it to auto.

	iwconfig eth1 power off    Disables radio power down
	iwconfig eth1 power on     Enables radio power management to 
				   last set level (defaults to AUTO)
	iwpriv eth1 set_power 0    Sets power level to AUTO and enables 
				   power management if not previously 
				   enabled.
	iwpriv eth1 set_power 1-5  Set the power level as specified, 
				   enabling power management if not 
				   previously enabled.

You can view the current power level setting via:
	
	iwpriv eth1 get_power

It will return the current period or timeout that is configured as a string
in the form of xxxx/yyyy (z) where xxxx is the timeout interval (amount of
time after packet processing), yyyy is the period to sleep (amount of time to 
wait before powering the radio and querying the access point for buffered
packets), and z is the 'power level'.  If power management is turned off the
xxxx/yyyy will be replaced with 'off' -- the level reported will be the active
level if `iwconfig eth1 power on` is invoked.


===========================
7. Support
---------------------------     

For general development information and support,
go to:
	
    http://ipw2100.sf.net/

The ipw2100 1.1.0 driver and firmware can be downloaded from:  

    http://support.intel.com

For installation support on the ipw2100 1.1.0 driver on Linux kernels 
2.6.8 or greater, email support is available from:  

    http://supportmail.intel.com

===========================
8. License
---------------------------     

  Copyright(c) 2003 - 2005 Intel Corporation. All rights reserved.

  This program is free software; you can redistribute it and/or modify it 
  under the terms of the GNU General Public License (version 2) as 
  published by the Free Software Foundation.
  
  This program is distributed in the hope that 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., 59 
  Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  
  The full GNU General Public License is included in this distribution in the
  file called LICENSE.
  
  License Contact Information:
  James P. Ketrenos <ipw2100-admin@linux.intel.com>
  Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497

