================================================================================
			README for USB8388

 (c) Copyright © 2003-2006, Marvell International Ltd.
 All Rights Reserved

 This software file (the "File") is distributed by Marvell International
 Ltd. under the terms of the GNU General Public License Version 2, June 1991
 (the "License").  You may use, redistribute and/or modify this File in
 accordance with the terms and conditions of the License, a copy of which
 is available along with the File in the license.txt file or by writing to
 the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
 02111-1307 or on the worldwide web at http://www.gnu.org/licenses/gpl.txt.

 THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
 IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
 ARE EXPRESSLY DISCLAIMED.  The License provides additional details about
 this warranty disclaimer.
================================================================================

=====================
DRIVER LOADING
=====================

	o. Copy the firmware image (e.g. usb8388.bin) to /lib/firmware/

	o. Load driver by using the following command:

		insmod usb8388.ko [fw_name=usb8388.bin]

=========================
ETHTOOL
=========================


Use the -i option to retrieve version information from the driver.

# ethtool -i eth0
driver: libertas
version: COMM-USB8388-318.p4
firmware-version: 5.110.7
bus-info:

Use the -e option to read the EEPROM contents of the card.

	Usage:
	ethtool -e ethX [raw on|off] [offset N] [length N]

       -e     retrieves and prints an EEPROM dump for the  specified  ethernet
              device.   When raw is enabled, then it dumps the raw EEPROM data
              to stdout. The length and offset parameters allow  dumping  cer-
              tain portions of the EEPROM.  Default is to dump the entire EEP-
              ROM.

# ethtool -e eth0 offset 0 length 16
Offset          Values
------          ------
0x0000          38 33 30 58 00 00 34 f4 00 00 10 00 00 c4 17 00

========================
DEBUGFS COMMANDS
========================

those commands are used via debugfs interface

===========
rdmac
rdbbp
rdrf
	These commands are used to read the MAC, BBP and RF registers from the
	card.  These commands take one parameter that specifies the offset
	location that is to be read.  This parameter must be specified in
	hexadecimal (its possible to preceed preceding the number with a "0x").

	Path: /sys/kernel/debug/libertas_wireless/ethX/registers/

	Usage:
		echo "0xa123" > rdmac ; cat rdmac
		echo "0xa123" > rdbbp ; cat rdbbp
		echo "0xa123" > rdrf ; cat rdrf
wrmac
wrbbp
wrrf
	These commands are used to write the MAC, BBP and RF registers in the
	card.  These commands take two parameters that specify the offset
	location and the value that is to be written. This parameters must
	be specified in hexadecimal (its possible to preceed the number
	with a "0x").

	Usage:
		echo "0xa123 0xaa" > wrmac
		echo "0xa123 0xaa" > wrbbp
		echo "0xa123 0xaa" > wrrf

sleepparams
	This command is used to set the sleepclock configurations

	Path: /sys/kernel/debug/libertas_wireless/ethX/

	Usage:
		cat sleepparams: reads the current sleepclock configuration

		echo "p1 p2 p3 p4 p5 p6" > sleepparams: writes the sleepclock configuration.

		where:
			p1 is Sleep clock error in ppm (0-65535)
			p2 is Wakeup offset in usec (0-65535)
			p3 is Clock stabilization time in usec (0-65535)
			p4 is Control periodic calibration (0-2)
			p5 is Control the use of external sleep clock (0-2)
			p6 is reserved for debug (0-65535)

subscribed_events

	The subscribed_events directory contains the interface for the
	subscribed events API.

	Path: /sys/kernel/debug/libertas_wireless/ethX/subscribed_events/

	Each event is represented by a filename. Each filename consists of the
	following three fields:
	Value Frequency Subscribed

	To read the current values for a given event, do:
		cat event
	To set the current values, do:
		echo "60 2 1" > event

	Frequency field specifies the reporting frequency for this event.
	If it is set to 0, then the event is reported only once, and then
	automatically unsubscribed. If it is set to 1, then the event is
	reported every time it occurs. If it is set to N, then the event is
	reported every Nth time it occurs.

	beacon_missed
	Value field specifies the number of consecutive missing beacons which
	triggers the LINK_LOSS event. This event is generated only once after
	which the firmware resets its state. At initialization, the LINK_LOSS
	event is subscribed by default. The default value of MissedBeacons is
	60.

	failure_count
	Value field specifies the consecutive failure count threshold which
	triggers the generation of the MAX_FAIL event. Once this event is
	generated, the consecutive failure count is reset to 0.
	At initialization, the MAX_FAIL event is NOT subscribed by
	default.

	high_rssi
	This event is generated when the average received RSSI in beacons goes
	above a threshold, specified by Value.

	low_rssi
	This event is generated when the average received RSSI in beacons goes
	below a threshold, specified by Value.

	high_snr
	This event is generated when the average received SNR in beacons goes
	above a threshold, specified by Value.

	low_snr
	This event is generated when the average received SNR in beacons goes
	below a threshold, specified by Value.

extscan
	This command is used to do a specific scan.

	Path: /sys/kernel/debug/libertas_wireless/ethX/

	Usage: echo "SSID" > extscan

	Example:
		echo "LINKSYS-AP" > extscan

	To see the results of use getscantable command.

getscantable

	Display the current contents of the driver scan table (ie. get the
	scan results).

	Path: /sys/kernel/debug/libertas_wireless/ethX/

	Usage:
		cat getscantable

setuserscan
	Initiate a customized scan and retrieve the results


	Path: /sys/kernel/debug/libertas_wireless/ethX/

    Usage:
       echo "[ARGS]" > setuserscan

         where [ARGS]:

      bssid=xx:xx:xx:xx:xx:xx  specify a BSSID filter for the scan
      ssid="[SSID]"            specify a SSID filter for the scan
      keep=[0 or 1]            keep the previous scan results (1), discard (0)
      dur=[scan time]          time to scan for each channel in milliseconds
      type=[1,2,3]             BSS type: 1 (Infra), 2(Adhoc), 3(Any)

    Any combination of the above arguments can be supplied on the command
    line. If dur tokens are absent, the driver default setting will be used.
    The bssid and ssid fields, if blank, will produce an unfiltered scan.
    The type field will default to 3 (Any) and the keep field will default
    to 0 (Discard).

    Examples:
    1) Perform a passive scan on all channels for 20 ms per channel:
            echo "dur=20" > setuserscan

    2) Perform an active scan for a specific SSID:
            echo "ssid="TestAP"" > setuserscan

    3) Scan all available channels (B/G, A bands) for a specific BSSID, keep
       the current scan table intact, update existing or append new scan data:
            echo "bssid=00:50:43:20:12:82 keep=1" > setuserscan

    4) Scan for all infrastructure networks.
       Keep the previous scan table intact. Update any duplicate BSSID/SSID
       matches with the new scan data:
            echo "type=1 keep=1" > setuserscan

    All entries in the scan table (not just the new scan data when keep=1)
    will be displayed upon completion by use of the getscantable ioctl.

==============================================================================
