Swallow 550 & 1100 Linux drivers


My work with the Swallow 550 & 1100

I've been working on the swallow_cs driver for about 9 months now. In that time, I've managed to implement most things that I want: There are a couple of other things I also want to implement:

News

(01/02/2001) I was contacted by No Wires Needed with the request to write the driver for the Swallow 1148 type cards. I should be getting the card and specifications today, and will start working on implementing support for it. This will take some time, but could be finished in a month or so.
(04/02/2001) First incantation of the support for the new 11Mbps Wireless LAN PC Card is finished. I've got it working, but the speed isn't too good (30 - 45 Kbps). This can reasonably easy be fixed, but it will need some rewriting of the transmit code.
(05/02/2001) Some minor tweaking resulted in a massive increase in performance. I now get 600+ kB/s with the driver. Check out poldhu-0.1.0.tar.gz below.
(06/03/2001) Split the SNWNMP support into a seperate file. Both swallow_cs and poldhu_cs use the same code in regards to SNWNMP. I see a rather nasty bug when changing policy (cardctl scheme bla), that hangs my box after a minute or two. So at this time, please remove card, change scheme, insert card. This issue is being worked on.
(06/04/2001) The scheme changing bug is still present. I'm not sure exactly WHAT triggers it, but if you change scheme's while the card is plugged in, after a couple of seconds the box will hang. Period. The only thing that I think could be the problem is my device_event handler, but that doesn't do all that much itself. Bugger. Released poldhu_cs v0.1.2. It's got a somewhat better integration with the pcmcia-cs package, so this should be able to compile in both kernel and pcmcia-cs.
(01/06/2001) The scheme changing bug is squashed. It's generally a good idea to enable interrupts somewhere if you disable them in your close function. Since I didn't do that, I got hangs in all kinds of interesting places. At this time interrupts keep coming if the device is down. I may change this, but I don't think so. Released poldhu_cs v0.1.3. Same as v0.1.2, except the scheme changing bug is gone... :)
(01/07/2001) 3Com is sending me two of their new 3Com 11Mbps Wireless LAN PC Cards. I'll be adding support for 128bit encryption and Ad-Hoc modus (which the No Wires Needed card does not support currently).

Thanks 3Com!
(11/07/2001) Releasing poldhu_cs v0.2.0. This includes support for the 3Com 3CRWE62092A Wireless LAN PC Card. 128bit encryption and Ad-Hoc mode will have to wait until the next release. Expect that in a week or so.
(24/07/2001) Releasing poldhu_cs v0.2.2. This includes support for 128 bit encryption in Infrastructure mode, Ad-Hoc mode with and without 40 bit encryption, and some more wireless extensions support. The driver now correctly initializes the card all the time. Expect me to add more Wireless Extension settings, and if/when 3Com supports 128 bit encryption in Ad-Hoc, I'll add that as well.
(09/10/2001) Releasing poldhu_cs v0.2.4. I'm skipping 0.2.3. This release changes to a completely interrupt driven design. This fixes some deadlocks in the code, which (in my experience) greatly adds to the stability and cpu usage of the driver. I'm working with someone on making it behave on an iPaq, but that isn't finished yet.
(27/02/2002) Releasing poldhu_cs v0.2.5. I've still got some bugs in my interrupt driven design. I've fixed one oops on shutdown, and will start working on adding a ring buffer to the driver. This should make the interrupt driven part behave better.
(03/03/2002) Releasing poldhu_cs v0.2.6. I've implemented a tx ring buffer, which ought to fix the duplicate frames I've been seeing. It also means that snwnmp messages are sent directly, and only passed through the linux stack if the ring buffer is full.
(21/03/2002) Releasing poldhu_cs v0.2.8. Refined the ring buffer, and made the interrupt handler behave a little better. It still looses interrupts, but at least it can now sustain bandwith > 300 kb/sec.
(29/03/2002) Releasing poldhu_cs v0.2.9. Some more tweaks to the ring buffer usage. Add some 3Com specific workarounds for hardware reset. Add handling of the "Any" SSID to the code. Use "Any" as SSID, and get the first one the card finds. Great fun... ;)
(08/04/2002) Releasing poldhu_cs v0.2.10. Fixed 128 bit support for the No Wires Need 11 Mbps Wireless LAN Card. At this point you cannot mix 40 bit keys with 128 bit keys, but that may be fixed in the next revision.
(11/04/2002) Releasing poldhu_cs v0.2.11. Fixed the 128 bit support for the 3Com XJack cards.
(22/04/2002) Releasing poldhu_cs v0.2.12. Including fixes from Rui Oliveira, which stamp out a race in my state machine. Thanks for the patches!
(28/10/2002) Releasing poldhu_cs v0.2.13. Adds support for Active Probing, which is needed for some access points. (21/12/2003) Releasing poldhu_cs v0.3.1. Adds support for the Linux kernel version 2.6.0 and up.

creepy crawlers through the code

The driver still has a couple of bugs (that I know of):

Support

No Wires Needed provides no technical support for the driver. If you run into any problems or bugs, you can contact me at swallow@blackstar.nl. If you have any comments on the documentation, find any errors in the installation procedure, contact me at the address mentioned above.

Licensing

in principle, the driver is licensed under the GNU General Public License. If the need should arise, you can contact me at swallow@blackstar.nl to get a different license. I'll license the code under a BSD license, other licenses will be considered.

Download

If the above hasn't scared you away yet, here's the actual driver to try.
Version Description
0.3.4 Driver for kernel 2.2.14 and up. The driver needs Wireless Extensions v9+ to work correctly.
0.3.5 Driver for kernel 2.2.14 and up. This fixes a race condition that caused timeouts in the reception code. The driver needs Wireless Extensions v9+ to work correctly.
0.3.6 Driver for kernel 2.2.16 and up. General updates, and minor fixes. Since I mostly work with 2.4.0-test at the moment, this needs some verification. Any feedback is appreciated.
0.4.0 Driver for kernel 2.2.16 and up. Added full SNWNMP read for the Swallow 550, and implemented the roaming tables. Since I mostly work with 2.4.0-test at the moment, this needs some verification. Any feedback is appreciated.
0.5.4 Driver for kernel 2.3.39 and up. Will probably also work with the (future) 2.4 kernel. The driver needs Wireless Extensions v9+ to work correctly.
0.5.5 Driver for kernel 2.3.43 and up. This fixes a race condition that caused timeouts in the reception code. The driver needs Wireless Extensions v9+ to work correctly.
0.5.6 Driver for kernel 2.4.0-test10 and up. This adds some SNWNMP read support for the Swallow 550.
0.6.0 Driver for kernel 2.4.0-test10 and up. This adds complete SNWNMP read support for the Swallow 550, a /proc/driver/swallow/eth? for roaming table information, and lots of other things.
0.6.1 Driver for kernel 2.4.0-test10 and up. This adds complete SNWNMP read support for the Swallow 550, a /proc/driver/swallow/eth? for roaming table information, and some minor updates over 0.6.0.
0.6.2 Driver for kernel 2.4.0 and up. This implements some more SNWNMP commands for the Swallow 550. Incidently, this also tickles something in the Swallow 550 support that breaks it. (eg, don't use with a Swallow 550. Swallow 1100 support is 100% stable)
0.7.0 Driver for kernel 2.4.0 and up. This implements some more SNWNMP commands for the Swallow 550. Split the SNWNMP support into a seperate file, so it can be shared with the poldhu driver. Swallow 550 seems to work again. Feedback on whether Swallow 550 works for you as well is appreciated
Version Description
poldhu-0.0.1 Poldhu family driver for kernel 2.4.0 and up. Full support for Wireless extensions, SNWNMP, Roaming tables etc. Uses the codebase from the swallow-0.6.2. drivers.
poldhu-0.1.0 Poldhu family driver for kernel 2.4.0 and up. Full support for Wireless extensions, SNWNMP, Roaming tables etc. Uses the codebase from the swallow-0.6.2 drivers. Some minor tweaks to the transmit code resulted in a massive improvement. (600+ kB/s with ftp).
poldhu-0.1.1 Poldhu family driver for kernel 2.4.0 and up. Full support for Wireless extensions, SNWNMP, Roaming tables etc. Uses the codebase from the swallow-0.7.0 drivers. SNWNMP support split off in a seperate file. Stable, but does NOT support live changing of the scheme. (i.e. cardctl scheme something doesn't work).
poldhu-0.1.2 Poldhu family driver for kernel 2.4.0 and up. Full support for Wireless extensions, SNWNMP, roaming tables etc. Still doesn't support live changing of schemes. Should now work with 2.2.x as well, as long as you use a recent pcmcia-cs.
poldhu-0.1.3 Poldhu family driver for kernel 2.4.0 and up. Full support for Wireless extensions, SNWNMP, roaming tables etc. Now supports live changing of schemes. Should now work with 2.2.x as well, as long as you use a recent pcmcia-cs.
poldhu-0.2.0 Poldhu familiy driver for kernel 2.4.0 and up. Supports Wireless extensions, SNWNMP, roaming tables etc. Added support for 3Com 11 Mbps Wireless LAN PC Card.
poldhu-0.2.2 Poldhu familiy driver for kernel 2.4.0 and up. Supports Wireless extensions, SNWNMP, roaming tables etc. Added support for 3Com 11 Mbps Wireless LAN PC Card, in Ad-Hoc (40 bit WEP) and 128 bit Infrastructure modes.
poldhu-0.2.4 Poldhu familiy driver for kernel 2.4.0 and up. Supports Wireless extensions, SNWNMP, roaming tables etc. Added support for 3Com 11 Mbps Wireless LAN PC Card, in Ad-Hoc (40 bit WEP) and 128 bit Infrastructure modes. Fixes some minor bugs.
poldhu-0.2.5 Poldhu familiy driver for kernel 2.4.0 and up. Supports Wireless extensions, SNWNMP, roaming tables etc. Added support for 3Com 11 Mbps Wireless LAN PC Card, in Ad-Hoc (40 bit WEP) and 128 bit Infrastructure modes. Fixes an oops on shutdown.
poldhu-0.2.6 Poldhu family driver for kernel 2.4.0 and up. Supports Wireless extensions, SNWNMP, roaming tables, etc. Implements a ring buffer for tx purposes, which improves stability.
poldhu-0.2.7 Poldhu family driver for kernel 2.4.0 and up. Supports Wireless extensions, SNWNMP, roaming tables, etc. Rearranged the interrupt handler, and modified the interrupt behaviour, so we don't loose interrupts any more. This should solve the timeouts I've been seeing.
poldhu-0.2.8 Poldhu family driver for kernel 2.4.0 and up. Supports Wireless extensions, SNWNMP, roaming tables, etc. Made it compile in SMP mode as well.
poldhu-0.2.9 Poldhu family driver for kernel 2.4.0 and up. Supports Wireless extensions, SNWNMP, roaming tables, etc.
poldhu-0.2.10 Poldhu family driver for kernel 2.4.0 and up. Supports Wireless extensions, SNWNMP, roaming tables, etc. Adds support for 128 bit encryption on the No Wires Needed 1148 family.
poldhu-0.2.11 Poldhu family driver for kernel 2.4.0 and up. Supports Wireless extensions, SNWNMP, roaming tables, etc. Fixes 128 bit WEP support for the 3Com XJack cards.
poldhu-0.2.12 Poldhu family driver for kernel 2.4.0 and up. Supports Wireless extensions, SNWNMP, roaming tables, etc. Fixes a race in my state machine. This should take care of most if not all TRANSMIT TIMEOUT messages.
poldhu-0.2.13 Poldhu family driver for kernel 2.4.0 and up. Supports Wireless extensions, SNWNMP, roaming tables, etc. Adds support for Active Probing.
poldhu-0.3.1 Poldhu family driver for kernel 2.6.0 and up. Supports Wireless extensions, SNWNMP, roaming tables, etc. Adds support for Active Probing.

Other resources

Wireless Tools Jean Tourrilhes Wireless Tools. You need these to change the essid and/or turn encryption on or off.
pcmcia-cs David Hinds' pcmcia-cs package. You definately need to read his PCMCIA-HOWTO, and you will also need his excellent software to use this driver.