Linux wifi driver hackery, yay

Since it's still a little too chilly outside for me to take apart my car to replace a defective seat belt buckle, it's time for a write up on what I've been up to with my WiFi driver hacking.

First, the ST-E CW1200 driver. For some reason, I keep being surprised at the amount of major surgery between the releases. Since my last posting to Linux-wireless, there's been a lot of work:

  • Completely rewrote BSS join logic -- IBSS now works!
  • Respect TKIP/CCMP group key rx sequence counter
  • Improved 802.11g (ERP) coexistence
  • Eliminated callback function pointer structures
  • Detect CW1160/CW1260 chips (fw load is different though)
  • Greatly simplified BSS loss detection
  • Fixed deadlocks and/or OOPSen when hot-unplugging non-idle devices
  • Pulled support for Sagrad SDIO modules into a separate module that provides the appropriate platform data
  • Simplified Beacon filter configuration
  • Many, many, many checkpatch-suggested cleanups

I'll probably prepare another upstream submission this weekend, seeing that the driver is now handling everything I'm throwing at it. Finishing CW1260 support needs to wait until I have hardware to test against.

Next, I've also spent time on the rt2800usb driver, adding the ability to write changes back to the EEPROM and embedded eFuses. This lets folks update the production data baked into the module at manufacture time, which is occasionally necessary when your module vendor sends you seven hundred modules with a single bit flipped that breaks a legacy product's driver. As an aside, Ralink's official drivers are... painful, to say the least. But kudos to Ralink for maintaining them!

Finally, I started adding support for my employer's STLC4560-based modules to the p54 driver. They come in both SPI and SDIO variants, and have an onboard EEPROM for storing the Production Data. The existing p54spi driver is hardwired to have the PDA loaded from user space, and there's no support for SDIO devices at all. This is a lower-priority project, but it is nice to be working with the venerable NWN/Intersil/GSV/Conexant/ST 'ARM MAC' again.