Skip to contentSkip to conversation

b43: Add lpphy_clear_tx_power_offsets to improve TX Power handling

PATCH In review Thomas Ilnseher 3 participants 6 messages Sep 16, 2009 Networking drivers (wireless)

lore
Share & tools
lore
#0 lore raw

PATCH 2/2 b43: Add lpphy_clear_tx_power_offsets to improve TX Power handling

This patch adds the lpphy_clear_tx_power_offsets to b43.

---

drivers/net/wireless/b43/phy_lp.c +13 -1
diff -uNr a/drivers/net/wireless/b43/phy_lp.c b/drivers/net/wireless/b43/phy_lp.c
@@ -1125,6 +1125,18 @@
 	dev->phy.lp->tssi_idx = (b43_phy_read(dev, B43_LPPHY_TX_PWR_CTL_STAT) & 0x7F00) >> 8;
 }
 
+static void lpphy_clear_tx_power_offsets(struct b43_wldev *dev)
+{
+	int i;
+	int id = 7;
+	if (dev->phy.rev < 2)
+		id = 10;
+	for (i = 0; i < 12; i++)
+		b43_lptab_write(dev, B43_LPTAB32(id, 0x40 + i), 0);
+	for (i = 0; i < 64; i++)
+		b43_lptab_write(dev, B43_LPTAB32(id, 0x80 + i), 0);
+}
+
 static void lpphy_set_tx_power_control(struct b43_wldev *dev,
 				       enum b43_lpphy_txpctl_mode mode)
 {
@@ -1139,7 +1151,7 @@
 
 	if (oldmode == B43_LPPHY_TXPCTL_HW) {
 		lpphy_update_tx_power_npt(dev);
-		//TODO Clear all TX Power offsets
+		lpphy_clear_tx_power_offsets(dev);
 	} else {
 		if (mode == B43_LPPHY_TXPCTL_HW) {
 			//TODO Recalculate target TX power
#1 lore raw

You are essentially implementing dead code at this point - this will only ever be called if hardware-accelerated TX power control is enabled - and HW TX power control is unsupported, even for G-PHYs.

Quoted 38 lines · Thomas Ilnseher

This patch adds the lpphy_clear_tx_power_offsets to b43.

---
diff -uNr a/drivers/net/wireless/b43/phy_lp.c b/drivers/net/wireless/b43/phy_lp.c

drivers/net/wireless/b43/phy_lp.c 2009-09-16 20:53:36.593319452 +0200 renamed from drivers/net/wireless/b43/phy_lp.c 2009-09-16 20:52:17.501318374 +0200 +13 -1
@@ -1125,6 +1125,18 @@
        dev->phy.lp->tssi_idx = (b43_phy_read(dev, B43_LPPHY_TX_PWR_CTL_STAT) & 0x7F00) >> 8;
  }
 
+static void lpphy_clear_tx_power_offsets(struct b43_wldev *dev)
+{
+       int i;
+       int id = 7;
+       if (dev->phy.rev < 2)
+               id = 10;
+       for (i = 0; i < 12; i++)
+               b43_lptab_write(dev, B43_LPTAB32(id, 0x40 + i), 0);
+       for (i = 0; i < 64; i++)
+               b43_lptab_write(dev, B43_LPTAB32(id, 0x80 + i), 0);
+}
+
  static void lpphy_set_tx_power_control(struct b43_wldev *dev,
                                       enum b43_lpphy_txpctl_mode mode)
  {
@@ -1139,7 +1151,7 @@
 
        if (oldmode == B43_LPPHY_TXPCTL_HW) {
                lpphy_update_tx_power_npt(dev);
-               //TODO Clear all TX Power offsets
+               lpphy_clear_tx_power_offsets(dev);
        } else {
                if (mode == B43_LPPHY_TXPCTL_HW) {
                        //TODO Recalculate target TX power
Signature · 1 line
Vista: [V]iruses, [I]ntruders, [S]pyware, [T]rojans and [A]dware. :-)
#2 lore raw

Am Mittwoch, den 16.09.2009, 21:40 +0200 schrieb Gábor Stefanik:

Quoted 3 lines

You are essentially implementing dead code at this point - this will only ever be called if hardware-accelerated TX power control is enabled - and HW TX power control is unsupported, even for G-PHYs.

Then the question remains, why this brings my device to 54 MBit/s ?

I did double check again with the old driver:

wlan0 IEEE 802.11bg ESSID:"tommy"
Mode:Managed Frequency:2.412 GHz Access Point:
Bit Rate=9 Mb/s Tx-Power=20 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
Link Quality=70/70 Signal level=5 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0

Patched driver:

wlan0 IEEE 802.11bg ESSID:"tommy"
Mode:Managed Frequency:2.412 GHz Access Point: XXX
Bit Rate=54 Mb/s Tx-Power=20 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
Link Quality=70/70 Signal level=10 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0

Quoted 39 lines
Quoted 36 lines

---
diff -uNr a/drivers/net/wireless/b43/phy_lp.c b/drivers/net/wireless/b43/phy_lp.c

drivers/net/wireless/b43/phy_lp.c 2009-09-16 20:53:36.593319452 +0200 renamed from drivers/net/wireless/b43/phy_lp.c 2009-09-16 20:52:17.501318374 +0200 +13 -1
@@ -1125,6 +1125,18 @@
       dev->phy.lp->tssi_idx = (b43_phy_read(dev, B43_LPPHY_TX_PWR_CTL_STAT) & 0x7F00) >> 8;
 }
 
+static void lpphy_clear_tx_power_offsets(struct b43_wldev *dev)
+{
+       int i;
+       int id = 7;
+       if (dev->phy.rev < 2)
+               id = 10;
+       for (i = 0; i < 12; i++)
+               b43_lptab_write(dev, B43_LPTAB32(id, 0x40 + i), 0);
+       for (i = 0; i < 64; i++)
+               b43_lptab_write(dev, B43_LPTAB32(id, 0x80 + i), 0);
+}
+
 static void lpphy_set_tx_power_control(struct b43_wldev *dev,
                                      enum b43_lpphy_txpctl_mode mode)
 {
@@ -1139,7 +1151,7 @@
 
       if (oldmode == B43_LPPHY_TXPCTL_HW) {
               lpphy_update_tx_power_npt(dev);
-               //TODO Clear all TX Power offsets
+               lpphy_clear_tx_power_offsets(dev);
       } else {
               if (mode == B43_LPPHY_TXPCTL_HW) {
                       //TODO Recalculate target TX power
#3 lore raw

2009/9/16 Thomas Ilnseher <[email protected]>:

Quoted 59 lines

Am Mittwoch, den 16.09.2009, 21:40 +0200 schrieb Gábor Stefanik:

Quoted 3 lines

You are essentially implementing dead code at this point - this will only ever be called if hardware-accelerated TX power control is enabled - and HW TX power control is unsupported, even for G-PHYs.

Then the question remains, why this brings my device to 54 MBit/s ?

I did double check again with the old driver:

wlan0     IEEE 802.11bg  ESSID:"tommy"
         Mode:Managed  Frequency:2.412 GHz  Access Point:
         Bit Rate=9 Mb/s   Tx-Power=20 dBm
         Retry  long limit:7   RTS thr:off   Fragment thr:off Encryption key:off
         Power Management:off
         Link Quality=70/70  Signal level=5 dBm
         Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0 Tx excessive retries:0  Invalid misc:0   Missed beacon:0

Patched driver:

wlan0     IEEE 802.11bg  ESSID:"tommy"
         Mode:Managed  Frequency:2.412 GHz  Access Point: XXX Bit Rate=54 Mb/s   Tx-Power=20 dBm
         Retry  long limit:7   RTS thr:off   Fragment thr:off Encryption key:off
         Power Management:off
         Link Quality=70/70  Signal level=10 dBm
         Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0 Tx excessive retries:0  Invalid misc:0   Missed beacon:0

Quoted 27 lines
Quoted 27 lines

---
diff -uNr a/drivers/net/wireless/b43/phy_lp.c b/drivers/net/wireless/b43/phy_lp.c

drivers/net/wireless/b43/phy_lp.c 2009-09-16 20:53:36.593319452 +0200 renamed from drivers/net/wireless/b43/phy_lp.c 2009-09-16 20:52:17.501318374 +0200 +12 -0
@@ -1125,6 +1125,18 @@
        dev->phy.lp->tssi_idx = (b43_phy_read(dev, B43_LPPHY_TX_PWR_CTL_STAT) & 0x7F00) >> 8;
  }
 
+static void lpphy_clear_tx_power_offsets(struct b43_wldev *dev)
+{
+       int i;
+       int id = 7;
+       if (dev->phy.rev < 2)
+               id = 10;
+       for (i = 0; i < 12; i++)
+               b43_lptab_write(dev, B43_LPTAB32(id, 0x40 + i), 0);
+       for (i = 0; i < 64; i++)
+               b43_lptab_write(dev, B43_LPTAB32(id, 0x80 + i), 0);
+}
+
  static void lpphy_set_tx_power_control(struct b43_wldev *dev,
                                       enum b43_lpphy_txpctl_mode mode)
  {
@@ -1139,7 +1151,7 @@
 
Quoted 4 lines
Quoted 4 lines

drivers/net/wireless/b43/phy_lp.c 2009-09-16 20:53:36.593319452 +0200 line 1154

Quoted 4 lines
drivers/net/wireless/b43/phy_lp.c 2009-09-16 20:53:36.593319452 +0200 renamed from drivers/net/wireless/b43/phy_lp.c 2009-09-16 20:52:17.501318374 +0200 +1 -1
        if (oldmode == B43_LPPHY_TXPCTL_HW) {
                lpphy_update_tx_power_npt(dev);
-               //TODO Clear all TX Power offsets
+               lpphy_clear_tx_power_offsets(dev);

Put a printk here to see if this branch is getting hit.

(BTW, are you loading b43 with the "hwpctl" modparam? That enables experimental HW TX power control support, which might explain what you were seeing.)

Quoted 10 lines
Quoted 8 lines
Quoted 5 lines
drivers/net/wireless/b43/phy_lp.c 2009-09-16 20:53:36.593319452 +0200 renamed from drivers/net/wireless/b43/phy_lp.c 2009-09-16 20:52:17.501318374 +0200 +0 -0
        } else {
                if (mode == B43_LPPHY_TXPCTL_HW) {
                        //TODO Recalculate target TX power
Signature · 1 line
Vista: [V]iruses, [I]ntruders, [S]pyware, [T]rojans and [A]dware. :-)
#4 lore raw
Quoted 7 lines

Put a printk here to see if this branch is getting hit.

(BTW, are you loading b43 with the "hwpctl" modparam? That enables experimental HW TX power control support, which might explain what you were seeing.)

Hi Gabor,

I'm stupid.

I applied 3 Patches, the analog switch patch, and the other two patches. The analog switch patch did it.

Quoted 7 lines
Quoted 4 lines
Quoted 2 lines
#5 lore raw
In reply to Thomas Ilnseher
Quoted 20 lines · On Wednesday 16 September 2009 22:17:55 Thomas Ilnseher wrote:

Am Mittwoch, den 16.09.2009, 21:40 +0200 schrieb Gábor Stefanik:

Quoted 3 lines

You are essentially implementing dead code at this point - this will only ever be called if hardware-accelerated TX power control is enabled - and HW TX power control is unsupported, even for G-PHYs.

Then the question remains, why this brings my device to 54 MBit/s ?

I did double check again with the old driver:

wlan0 IEEE 802.11bg ESSID:"tommy"
Mode:Managed Frequency:2.412 GHz Access Point:
Bit Rate=9 Mb/s Tx-Power=20 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
Link Quality=70/70 Signal level=5 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0

Patched driver:

Quoted 9 lines

wlan0 IEEE 802.11bg ESSID:"tommy"
Mode:Managed Frequency:2.412 GHz Access Point: XXX
Bit Rate=54 Mb/s Tx-Power=20 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
Link Quality=70/70 Signal level=10 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0

The iwconfig output doesn't tell you anything about the actual net TX rate. Please benchmark it with iperf.

Signature · 1 line
Greetings, Michael.