=======================================================================
WLAN driver for cards using the HERMES II and HERMES II.5 chipset

HERMES II Card

PCMCIA Info: "Agere Systems" "Wireless PC Card Model 0110"
             Manufacture ID: 0156,0003

HERMES II.5 Card

PCMCIA Info: "Linksys" "WCF54G_Wireless-G_CompactFlash_Card"
             Manufacture ID: 0156,0004

Based on Agere Systems Linux LKM Wireless Driver Source Code,
Version 7.22; complies with Open Source BSD License.
=======================================================================

DESCRIPTION

The software is a modified version of wl_lkm_722_abg.tar.gz from the
Agere Systems website, addapted for Ubuntu 9.04.

Modified for kernel 2.6 by Henk de Groot <pe1dnn@amsat.org>
Based on 7.18 version by Andrey Borzenkov <arvidjaar@mail.ru> $Revision: 39 $

INSTALLATION

Unpack in a new directory.

Open a terminal screen.

Change directory to the source directory

Type command

make

and wait until it is finshed. Now you have build the module
wlags49_h2_cs; this module is meant for a HERMES II card.

The driver is tested with a Thomson SpeedTouch 110 Wireless PC Card.
For the test Station mode was used with WEP. The driver is supposed
to support WAP and as accesspoint that is NOT tested.

If you have a card using the HERMES II.5 chip you have to make
changes to the Makefile and uncomment -DHERMES25. This will build
driver wlags49_h25_cs.

Note: You can detemine the type with command "pccardctrl info"
        MANIFID: 0156,0002 = HERMES - not supported by this driver
        MANIFID: 0156,0003 = HERMES II   (Wireless B)
        MANIFID: 0156,0004 = HERMES II.5 (Wireless B/G)

After succesfull compile type command

sudo make install

to install the module.

Now the card should be recognized. It should be able to configure
and use the card with NetworkManager. Wpa_supplicant also works, as does
manual configuration using the iwconfig/iwlist programs.

Note: I only tested Station mode with WEP but if I didn't break anything
WPA and AP mode should also work; note however that WPA was experimental
in the original Agere driver!

Note: to compile as AP change the makefile and remove the line
-DSTA_ONLY \

(or comment it, but in that case make sure to move it after all the
 flags you want to use)

CHANGES

The HCF functions to control the card are virtually unchanged, the only
changes are meant to fix compiler warnings. The only real change is in
HCF_WAIT_WHILE which now has a udelay(2) added to give a small delay.

The linux driver files (wl_xxxx.c) are changed in the following ways:
- Addaptations of Andrey Borzenkov applied to 7.22 source
- Alterations to avoid most HCF_ASSERTs
-- Switching interrupts off and on in the HCF
-- Bugfixes, things that were aparently wrong like reporting link status
   change which checked a variable that was not changed in HCF anymore.
-- Used on WEP but setting keys via SIOCSIWENCODEEXT was not supported
-- Recovery actions added

The major problem was the order in which calls can be made. The original
looks like a traditonal UNIX driver. To call an "ioctl" function you
have to "open" the device first to get a handle and after "close" no
"ioctl" function can be called anymore. With the 2.6 driver this all
changed; the former ioctl functions are now called before "open" and
after "close", which was not expected. One of the problems was enable/
disable of interrupts in the HCF. Interrupt handling starts at "open"
so if a former "ioctl" routinge is called before "open" or after "close"
then nothing should be done with interrupt switching in the HCF. Once
this was solved most HCF_ASSERTS went away.

The last point, recovery actions added, needs some clarification.
Starting the card works most of the time, but unfortunately not always.
At a few times recovery code was added; when the card starts to
misbehave or the communication between the HCF and the card is
out of sync and the HCF enters DEFUNCT mode everything is reset and
reinitialized. Note, hcf.c contains a lot of documentation. It takes
some time but slowly some things become clear. Also some unresolved
issues are mentioned in hcf.c, so there are still unknown bugs.

The card problems are almost in all cases when starting up and before
the first association with an AP, once the card is in operation it
seems to stay that way; when debugging no HCF_ASSERTS appear anymore.
Note: some HCF_ASSERTS still appear, in a number of cases it is a real
error, for example at card removal the missing card is detected.

LICENSE

The Agere Systems license applies. This is why I include the original
README.wlags49. The instructions in that file are bogus now. I also
include the man page. Eventhough setting parameters on the module
does not work anymore but it provides some information about all the
settings.

I have not have personal contact with Agere, but others have. Agere
agreed to make their software available under the BSD licence.
This driver is based on the 7.22 version.

The following was mailed by Agere to Andrey Borzenkov about this:

    --- Begin Message ---

        * From: TJ <tj@xxxxxxxxxxx>
        * Date: Mon, 05 Feb 2007 19:28:59 +0000

    Hi Andrey,

    I've got some good news for you/us/the world of Hermes :)

    I got a reply from the legal representative at Agere confirming that
    their source-code is BSD licensed, and I've included the contents of the
    email here.

    I hope this re-assures you so that your excellent work on the drivers
    can be made widely available for other hackers to work with.

    Regards,

    TJ.

    ---------
    On Mon, 2007-02-05 at 13:54 -0500, Pathare, Viren M (Viren) wrote:


    "I would like to confirm that the two drivers; Linux LKM Wireless Driver
    Source Code, Version 7.18 and Linux LKM Wireless Driver Source Code,
    Version 7.22 comply with Open Source BSD License. Therefore the source
    code can be distributed in unmodified or modified form consistent with
    the terms of the license.

    The Linux driver architecture was based on two modules, the MSF (Module
    specific functions) and the HCF (Hardware Control Functions). Included
    in the HCF is run-time firmware (binary format) which is downloaded into
    the RAM of the Hermes 1/2/2.5 WMAC.

    This hex coded firmware is not based on any open source software and
    hence it is not subject to any Open Source License. The firmware was
    developed by Agere and runs on the DISC processor embedded within the
    Hermes 1/2/2.5 Wireless MAC devices.

    Hope this helps.

    Sincerely,

    Viren Pathare
    Intellectual Property Licensing Manager
    Agere"



    --- End Message ---

