================================================================================
			README for Libertas

 (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 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 precede 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 precede 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.

hostsleep
	This command is used to enable/disable host sleep.
	Note: Host sleep parameters should be configured using
	"ethtool -s ethX wol X" command before enabling host sleep.

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

	Usage:
		cat hostsleep: reads the current hostsleep state
		echo "1" > hostsleep : enable host sleep.
		echo "0" > hostsleep : disable host sleep

