Super A/G

From ThinkWiki
Jump to: navigation, search

Atheros chipsets such as AR5001X+ found in IBM_11a/b/g_Wireless_LAN_Mini_PCI_Adapter and AR5004X found in IBM_11a/b/g_Wireless_LAN_Mini_PCI_Adapter_II support atheros Super A and Super G (also known as Turbo) modes. These allow using of two channels for transmition between two Atheros devices, allowing for speeds up to 108Mbit/s.

These modes are however sometimes turned off on the WiFi card's EEPROM. When using Madwifi drivers, you can check, whether it is turned on.

With turbo modes on, madwifi driver should say something like this upon load.

wifi0: 11a rates: 6Mbps 9Mbps 12Mbps 18Mbps 24Mbps 36Mbps 48Mbps 54Mbps

wifi0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps

wifi0: 11g rates: 1Mbps 2Mbps 5.5Mbps 11Mbps 6Mbps 9Mbps 12Mbps 18Mbps 24Mbps 36Mbps 48Mbps 54Mbps

wifi0: turboA rates: 6Mbps 9Mbps 12Mbps 18Mbps 24Mbps 36Mbps 48Mbps 54Mbps

wifi0: turboG rates: 6Mbps 12Mbps 18Mbps 24Mbps 36Mbps 48Mbps 54Mbps

If it states onle turboG rate, it may be a problem with countrycode/region domain. Search Madwifi mailinglists for solution. If the driver detects no turbo modes and setting region domain doesn't help, you may need to turn them on. This can probably be done using Microsoft Windows. See this thread.

If you really want to get this to work, and you don't have Windows, it is still possible, so read on.

Setting Turbo modes in Linux

TODO
If anybody knows how to do this in a cleaner or nicer way, please rewrite this.
ATTENTION!
Big Fat Warning 1: Don't continue reading, unless you really have no other choice. Doing this is dangerous, may and probably will render your wireless device nonfunctional and useless. You are doing it at your own responsibility!
ATTENTION!
Big Fat Warning 2: It is REQUIRED that you have some knowledge of C and and an idea how memory works. Withouth these, don't even bother.
ATTENTION!
Big Fat Warning 3: Proceed with doing this if and only if you at all points understand, what you are doing, and what do you need to do to reverse all changes you have done.

First of all, you need to get drivers from the ath-driver project to work. If these don't work (and they may not!), trying this unnecessarily dangerous, as any slip will render your card useless, as Madwifi closed HAL won't load and you won't be able to access the EEPROM to repair the damage.

Download [1], or find another ar5k modified to do something similar and modify it to do what you want.

The capability bits, located at 0x00c2 are described in eeprom.c of ath-driver. You need to set the "Disable turbo A" and "Disable turbo G" bits to 0. Doing this straight away will however violate checksum for EEPROM, which is done XORing subsequent 2-bytes. They should XOR up to 0xffff. Therefore, if you modify these two bits, you need to add 0x8008 (or whatever orig^new^0xffff gives) somewhere where the EEPROM is not used, or find out the bits which are actually used for this. For example bytes around 0x00cc seem to be empty (but may not be with your card! Check it!). mod2.c contains two commented-out parts. The first can be used for the actual rewriting, the second to dump the relevant parts of EEPROM, which are 0x00c0 to 0x00c0+832. If anything bad happens, source code for the ath-driver can be of great help.

Note: On some IBM Wireless LAN Mini PCI Adapters (e.g. FRU 39T0081) the EEPROM is write protected. There is now known way to alter the bits (neither with wbemtest nor with linux)