ThinkPad 11a/b/g/n Wireless LAN Mini Express Adapter
To determine the chipset your card uses, issue the following commands:
# update-pciids # lspci | egrep -i 'network|atheros|wireless' 03:00.0 Network controller: Atheros Communications, Inc. AR5418 802.11a/b/g/n Wireless PCI Express Adapter (rev 01)
If you get a different something different than above despite having the most current PCI IDs, please report it here!
Linux WiFi driver
For native Linux support, the "madwifi" driver can be used. Here's the latest word regarding work on supporting the ar5008/ar5418 chipset:
* milestone changed from version 0.9.x - progressive release candidate phase to version 0.9.4. FYI: the madwifi-hal-0.9.30.13 branch has been merged to trunk (and the branch has been removed). If you don't want to wait until the next release (v0.9.4), you could go with a snapshot or checkout from trunk - just make sure that your code is >= r2360.
There is a howto, which describes the procedure for getting the snapshot to work.
There is an old ticket for this card at madwifi, #1001.
There is an new ticket for this card at madwifi-branch, #1243.
Using the Windows Driver in Linux
If you have a weak stomach for pre-release software, you can always use "ndiswrapper" (>= 1.29) to wrap the Windows driver supplied by Lenovo. This isn't as bad as you think. It does work like a charm, but you may have problems if you're using a 64 bit kernel since it's not clear that a 64 bit windows driver exists. Here's the Howto.
Draft n support in Linux
Once you have your shiny new wireless card working, you can give yourself a pat on the back for a job well done. However, if your are a perfectionist and enough of a sucker to go for a pricey draft n router, your job is not done. Well actually maybe it is and mayhap you shouldn't go for that router either. Though the card can indeed be made to work under Linux, it is not clear if it will operate under the draft n protocol.
Tests with the DLink DIR-655, which has the same AR5008 chipset, proved discouraging. The first test using the windows driver natively in windows does indeed work. The connection should be listed as 300Mbit/s and should connect in the router's "802.11ng only" mode. Not having access to any linux benchmarking tools, there was only ssh which gave transfer speeds of ~3.5MByte/s. Not exactly the 10x as promised by the box even when accounting for ssh overhead, but a decent improvement to 11g speeds.
As for Linux, things get a little dicey. Using no authentication/encryption, wpa_supplicant (with -D wext) and the ndiswrapper driver, the card is only able to connect if the router is set to "802.11g only" mode. In "Mixed 802.11ng, 802.11g and 802.11b" mode, there is only a brief period of connectivity where no ip address is assigned and then the connection is dropped. In "802.11ng only" mode, no connection at all.
Using the madwifi driver (and giving wpa_supplicant the appropriate -D madwifi option, rather than -D wext) is more promising, but the result is still the same: no 11n connection. Using the router's "Mixed 802.11ng, 802.11g and 802.11b" mode does work, but only provides (admittedly solid) 11g speeds of 20*10^6bits/sec using the TCP_STREAM benchmark in the netperf suite. Again, however "802.11ng only" mode doesn't work. A connection seems to happen and will sit there for some time while no ip address is assigned even by invoking dhclient manually.
The following may provide some clue as to the problem as well as some hope for the future:
$modprobe ath_pci $dmesg . . . [28696.420000] ath_hal: 0.9.30.13 (AR5210, AR5211, AR5212, AR5416, RF5111, RF5112, RF2413, RF5413, RF2133) [28696.430000] wlan: 0.8.4.2 (svn r2708) [28696.430000] ath_pci: 0.9.4.5 (svn r2708) [28696.430000] ACPI: PCI Interrupt 0000:03:00.0[A] -> GSI 17 (level, low) -> IRQ 21 [28696.430000] PCI: Setting latency timer of device 0000:03:00.0 to 64 [28696.570000] ath_pci: switching rfkill capability off [28696.580000] ath_rate_sample: 1.2 (svn r2708) [28696.580000] ath_pci: switching per-packet transmit power control off [28696.580000] wifi0: 11a rates: 6Mbps 9Mbps 12Mbps 18Mbps 24Mbps 36Mbps 48Mbps 54Mbps [28696.580000] wifi0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps [28696.580000] wifi0: 11g rates: 1Mbps 2Mbps 5.5Mbps 11Mbps 6Mbps 9Mbps 12Mbps 18Mbps 24Mbps 36Mbps 48Mbps 54Mbps [28696.580000] wifi0: turboA rates: 6Mbps 9Mbps 12Mbps 18Mbps 24Mbps 36Mbps 48Mbps 54Mbps [28696.580000] wifi0: turboG rates: 6Mbps 9Mbps 12Mbps 18Mbps 24Mbps 36Mbps 48Mbps 54Mbps [28696.580000] wifi0: H/W encryption support: WEP AES AES_CCM TKIP [28696.580000] wifi0: mac 12.10 phy 8.1 radio 12.0 [28696.580000] wifi0: Use hw queue 1 for WME_AC_BE traffic [28696.580000] wifi0: Use hw queue 0 for WME_AC_BK traffic [28696.580000] wifi0: Use hw queue 2 for WME_AC_VI traffic [28696.580000] wifi0: Use hw queue 3 for WME_AC_VO traffic [28696.580000] wifi0: Use hw queue 8 for CAB traffic [28696.580000] wifi0: Use hw queue 9 for beacons [28696.580000] wifi0: Atheros 5418: mem=0xedf00000, irq=21 [28696.590000] udev: renamed network interface ath0 to wlan0
Note that there is no 11n rates message with corresponding 300Mbps. Perhaps the madwifi driver doesn't even support them yet. Will it in the actual release?
Non-Maskable Interrupt with madwifi
A number of folks have reported getting errors while using the experimental madwifi driver with the AR5418. After hours of flawless operation, the Kernel sometimes throws an NMI after which, the wifi dies. Sometimes removal and re-probing of the module is sufficient to recover. Sometimes, it seems the only solution is (cover your ears) a reboot of the entire kernel.
Uhhuh. NMI received for unknown reason b0 on CPU 0. You have some hardware problem, likely on the PCI bus. Dazed and confused, but trying to continue
wifi0: rx FIFO overrun; resetting wifi0: rx FIFO overrun; resetting wifi0: rx FIFO overrun; resetting
Some ThinkPads have a hardware switch that must be in the on position for the radio to work, regardless of driver state:
In addition to hard-switching the wireless card, the switch also generates an acpi event on transition from hi->lo and vice versa. It is however the same event in both directions.