September 21, 1999

Copyright (c) 1998  Corey Thomas (corey@world.std.com)

This file is the documentation for the Raylink Wireless LAN card driver for
Linux.  The Raylink wireless LAN card is a PCMCIA card which provides IEEE
802.11 compatible wireless network connectivity at 1 and 2 megabits/second.
See http://www.raytheon.com/micro/raylink/ for more information on the Raylink
card.  This driver is in early development and does have bugs.  See the known
bugs and limitations at the end of this document for more information.
This driver also works with WebGear's Aviator 2.4 and Aviator Pro
wireless LAN cards.

As of kernel 2.3.18, the ray_cs driver is part of the Linux kernel
source.  My web page for the development of ray_cs is at
http://world.std.com/~corey/raylink.html and I can be emailed at
corey@world.std.com

The kernel driver is based on ray_cs-1.62.tgz

The driver at my web page is intended to be used as an add on to
David Hinds pcmcia package.  All the command line parameters are
available when compiled as a module.  When built into the kernel, only
the essid= string parameter is available via the kernel command line.
This will change after the method of sorting out parameters for all
the PCMCIA drivers is agreed upon.  If you must have a built in driver
with nondefault parameters, they can be edited in
/usr/src/linux/drivers/net/pcmcia/ray_cs.c.  Searching for MODULE_PARM
will find them all.

Information on card services is available at:
	ftp://hyper.stanford.edu/pub/pcmcia/doc
        http://hyper.stanford.edu/HyperNews/get/pcmcia/home.html


Card services user programs are still required for PCMCIA devices.
pcmcia-cs-3.1.1 or greater is required for the kernel version of
the driver.

Currently, ray_cs is not part of David Hinds card services package,
so the following magic is required.

At the end of the /etc/pcmcia/config.opts file, add the line: 
source ./ray_cs.opts 
This will make card services read the ray_cs.opts file
when starting.  Create the file /etc/pcmcia/ray_cs.opts containing the
following:

#### start of /etc/pcmcia/ray_cs.opts ###################
# Configuration options for Raylink Wireless LAN PCMCIA card
device "ray_cs"
  class "network" module "misc/ray_cs"

card "RayLink PC Card WLAN Adapter"
  manfid 0x01a6, 0x0000
  bind "ray_cs"

module "misc/ray_cs" opts ""
#### end of /etc/pcmcia/ray_cs.opts #####################


To join an existing network with
different parameters, contact the network administrator for the 
configuration information, and edit /etc/pcmcia/ray_cs.opts.
Add the parameters below between the empty quotes.

Parameters for ray_cs driver which may be specified in ray_cs.opts:

bc              integer         0 = normal mode (802.11 timing)
                                1 = slow down inter frame timing to allow
                                    operation with older breezecom access
                                    points.

beacon_period	integer         beacon period in Kilo-microseconds
				legal values = must be integer multiple 
                                               of hop dwell
                                default = 256

country         integer         1 = USA (default)
                                2 = Europe
                                3 = Japan
                                4 = Korea
                                5 = Spain
                                6 = France
                                7 = Israel
                                8 = Australia

essid		string		ESS ID - network name to join
				string with maximum length of 32 chars
				default value = "ADHOC_ESSID"

hop_dwell	integer         hop dwell time in Kilo-microseconds 
				legal values = 16,32,64,128(default),256

irq_mask	integer         linux standard 16 bit value 1bit/IRQ
				lsb is IRQ 0, bit 1 is IRQ 1 etc.
				Used to restrict choice of IRQ's to use.
                                Recommended method for controlling
                                interrupts is in /etc/pcmcia/config.opts

net_type	integer		0 (default) = adhoc network, 
				1 = infrastructure

phy_addr	string          string containing new MAC address in
				hex, must start with x eg
				x00008f123456

psm		integer         0 = continuously active
				1 = power save mode (not useful yet)

pc_debug	integer		(0-5) larger values for more verbose
				logging.  Replaces ray_debug.

ray_debug	integer		Replaced with pc_debug

ray_mem_speed   integer         defaults to 500

sniffer         integer         0 = not sniffer (default)
                                1 = sniffer which can be used to record all
                                    network traffic using tcpdump or similar, 
                                    but no normal network use is allowed.

translate	integer		0 = no translation (encapsulate frames)
				1 = translation    (RFC1042/802.1)


More on sniffer mode:

tcpdump does not understand 802.11 headers, so it can't
interpret the contents, but it can record to a file.  This is only
useful for debugging 802.11 lowlevel protocols that are not visible to
linux.  If you want to watch ftp xfers, or do similar things, you
don't need to use sniffer mode.  Also, some packet types are never
sent up by the card, so you will never see them (ack, rts, cts, probe
etc.)  There is a simple program (showcap) included in the ray_cs
package which parses the 802.11 headers.

Known Problems and missing features

        Does not work with non x86

	Does not work with SMP

	Support for defragmenting frames is not yet debugged, and in
	fact is known to not work.  I have never encountered a net set
	up to fragment, but still, it should be fixed.

	The ioctl support is incomplete.  The hardware address cannot be set
	using ifconfig yet.  If a different hardware address is needed, it may
	be set using the phy_addr parameter in ray_cs.opts.  This requires
	a card insertion to take effect.
