Tx-Power is now 10 dBm and there's no way to increase it

Live forum: http://rt2x00.serialmonkey.com/viewtopic.php?t=5100


27-11-2008 13:22:37

I'm using an Edimax PCI card (I remember it's called EW-7128g or so) with rt61 chipset. In ubuntu 8.10, with kernel 2.6.27, Tx-Power=10 dBm and cannot be changed back to 27 dBm with iwconfig. This results in about 10 times slower internet connection.

I have tested all new ubuntu kernels 2.6.27-7, -8 and -10, both 32 and 64-bit version, running from a disk and Live CD. The kernel driver from an elder distribution, 2.6.24-21, still works well.

Is there a way to set txpower to a proper value with existing driver, with no need for recompilation? Or maybe it's a bug and I have to wait for a newer driver, or rebuild it myself? Please tell me.


27-11-2008 19:05:36

What is the driver you are using? rt61 legacy or rt2x00?



28-11-2008 05:36:30

Well, I'm not pretty sure I understand the difference ;)
This is my lsmod | grep rt

rt61pci 29060 0
crc_itu_t 10112 1 rt61pci
rt2x00pci 15232 1 rt61pci
rt2x00lib 35968 2 rt61pci,rt2x00pci
rfkill 17176 2 rt2x00lib
led_class 12164 1 rt2x00lib
eeprom_93cx6 10240 1 rt61pci
lbm_cw_mac80211 216752 3 rt2x00pci,rt2x00lib,zd1211rw
lbm_cw_cfg80211 42260 3 rt2x00lib,zd1211rw,lbm_cw_mac80211

I have found files of such names under the rt2x00 source tree, so i guess it's rt2x00.

I have also investigated a diff of these drivers and the 10 dBm doesn't seem to be a new constant; so maybe it's a default hardware value that is read by the driver at startup, and treated mistakenly as the maximum?


28-11-2008 17:49:58

I'm not too sure what is happening, I have moved this thread in the appropriate section of the forum, so that someone can hopefully answer you.


29-11-2008 13:12:39

Thank you.

This is what dmesg | grep rt61 says

[ 19.604577] rt61pci 0000010a.0 PCI INT A -> Link[LNKC] -> GSI 17 (level, low) -> IRQ 17
[ 19.628956] Registered led device rt61pci-phy1radio
[ 19.628960] phy1 -> rt61pci_mcu_request Error - mcu request error. Request 0x50 failed for token 0xff.
[ 19.628990] Registered led device rt61pci-phy1assoc

Maybe the error affects Tx-Power? Anyway, is it possible to override the maximum Tx-Power setting, for example, in modprobe options?


30-11-2008 19:33:29

I inserted some printk calls in driver functions, each time tx-power is processed, in order to find out what happens.

This is a list of default tx-powers, which have been read from the EEPROM, right after the driver was loaded

[ 780.533420] rt61pci_probe_hw_mode 10
[ 780.533424] rt61pci_probe_hw_mode 10
[ 780.533426] rt61pci_probe_hw_mode 10
[ 780.533428] rt61pci_probe_hw_mode 10
[ 780.533429] rt61pci_probe_hw_mode 10
[ 780.533431] rt61pci_probe_hw_mode 11
[ 780.533432] rt61pci_probe_hw_mode 11
[ 780.533434] rt61pci_probe_hw_mode 11
[ 780.533436] rt61pci_probe_hw_mode 11
[ 780.533437] rt61pci_probe_hw_mode 11
[ 780.533439] rt61pci_probe_hw_mode 11
[ 780.533441] rt61pci_probe_hw_mode 11
[ 780.533442] rt61pci_probe_hw_mode 14
[ 780.533444] rt61pci_probe_hw_mode 14

The power values differ from one channel to another. As I have found, mac80211 takes these random values and treats them as maximum tx power for each channel. So when I try to set 27 dBm at channel 3, it is forced to be 10

[ 1177.594095] rt61pci_config_channel 10
[ 1177.600021] rt61pci_config_txpower 10
[ 1177.600026] rt61pci_config 10
[ 1177.600029] rt2x00lib_config 10

This does not apply to 9 dBm, which is passed correctly

[ 1188.724848] rt61pci_config_channel 9
[ 1188.732021] rt61pci_config_txpower 9
[ 1188.732026] rt61pci_config 9
[ 1188.732029] rt2x00lib_config 9

Consequently, I have changed rt61pci_probe_hw_mode() so that it returns fake 27 dBm tx power values, and - voila - it works evil

Solved. Thank you for your attention. Please feel free to use my results when it'll be time to fix this bug for real, not just by walking around it as I did.

Besides this and the fact that LED's no longer seem to work, the rt61pci driver is excellent - it is a sensitive and stable driver, suitable for use in hard conditions.


30-11-2008 19:41:41

mac80211 takes these random values and treats them as maximum tx power for each channel.[/quotepi7psifo]

The value is _not_ random, it is provided by the hardware manufacturer as the correct value for that particular channel.
Valid values depend on hardware capabilities and regulatory domain. Perhaps in the past the driver allowed invalid values to be configured, but it has become more strict since then.


30-11-2008 19:52:43

It's nice someone finally responded. Please note that I, being a regular user, don't care about the validity of these values - my wifi card [b2jbu4n8e]can operate at 27 dBm[/b2jbu4n8e] and it is the only reason I still keep it in my computer. I need that high tx-power and I'm glad I can use it.

Future versions of the driver should at least support manual override of the txpower value, with a modprobe parameter.


30-11-2008 19:55:57

Future versions of the driver should at least support manual override of the txpower value, with a modprobe parameter.[/quote2ivokerh]

No they should not. What rt2x00 could do at the most, is change the max TXpower value and let the regulatory domain daemon sort the maximum allowed value. But a driver should not enforce illegal actions.


30-11-2008 19:57:15

P.S. Some people are actually busy with work and personal life. So forum responses can sometimes take a few days.


30-11-2008 20:04:30

10 dBm limit is a severe limitation of this PCI card functionality, because in practice, it would no longer be used for long distance communication. So, I'm just looking for a good solution.

What is the regulatory domain daemon?

BTW. These 10 dBm don't seem to be correct values; we have measured my signal with my ISP and even at 27 dBm, he sees me at -82 dB, and I see him at -76. So, assuming we both have 27 dBm, his decibels seem to be better than mine ;)


30-11-2008 20:12:38

What is the regulatory domain daemon?[/quote2ztqvvzx]

The next kernel will have regulatory domain support to limit the allowed frequencies and txpower based on the current location. There will be a userspace side agent controlling the supported values.


16-07-2009 21:12:29

So how is the fixed 27dbm reporting done. You got a diff to share?


17-09-2009 17:57:41

This really is a BIG problem!
This guy is stuck on 10dBm, someone in another thread couldn't get above 7dBm & I'm stuck at 11dBm.
I looked at the regulatory domains & cannot see ANY frequencies(channels) that require this kind of throttling.
In fact the achievable levels seem to be around half that which the regulations require.
I really like the rt2x00 kernel drivers & I do not wish to resort to the legacy packages.
My rt73 windows drivers (Ralink) have their domain properly set but do not limit me to 11dBm, so it is not a regulatory domain issue.
We have plenty of wide open spaces here in Australia & I can use my rt73 across them with windows or linux legacy drivers, yet I have trouble in the room next to my AP with the current kernel drivers!
txpower=decent is all I want & maybe some rx tweaking too!!


05-10-2009 10:16:08

I worked around the problem with the following patch 20 seems to be the max tx power for rt73usb. I can hear it working as the proximity of wifi antenna inducts power in my speakers so I can literally hear as my card is working. ) The sound gets lauder on each higher setting of txpower. Thanks qduaty for the hint.
--- drivers/net/wireless/rt2x00/rt73usb.c.old 2009-10-05 01:16:39.000000000 +0200
+++ drivers/net/wireless/rt2x00/rt73usb.c 2009-10-05 01:18:43.000000000 +0200
@@ -2116,12 +2116,12 @@

tx_power = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_G_START);
for (i = 0; i < 14; i++)
- info[i].tx_power1 = TXPOWER_FROM_DEV(tx_power[i]);
+ info[i].tx_power1 = 20;//TXPOWER_FROM_DEV(tx_power[i]);

if (spec->num_channels > 14) {
tx_power = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_A_START);
for (i = 14; i < spec->num_channels; i++)
- info[i].tx_power1 = TXPOWER_FROM_DEV(tx_power[i]);
+ info[i].tx_power1 = 20;//TXPOWER_FROM_DEV(tx_power[i]);

return 0;


28-01-2010 23:15:26

Hello all,

I'm using a QCOM USB Wireless card with rt73 chipset and I can't change the Tx-Power to another value.
By default, the iwconfig command reports always the same value (11dbm) and I can change it to another value(iwconfig wlan0 txpower 1mw).
But, when I run a wireless scanner with another laptop, the RSSI still the same.

I'm using a 2.6.32 kernel version and I have already change the rt73usb.c file with RushPL patch, with the same results.

Can any one help me?

Best regards,