Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

b43: N-PHY: report signal to mac80211

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>

authored by

Rafał Miłecki and committed by
John W. Linville
207ae4a3 5b346f3e

+21 -7
+12 -6
drivers/net/wireless/b43/xmit.c
··· 735 735 } 736 736 737 737 /* Link quality statistics */ 738 - if ((chanstat & B43_RX_CHAN_PHYTYPE) == B43_PHYTYPE_N) { 739 - // s8 rssi = max(rxhdr->power0, rxhdr->power1); 740 - //TODO: Find out what the rssi value is (dBm or percentage?) 741 - // and also find out what the maximum possible value is. 742 - // Fill status.ssi and status.signal fields. 743 - } else { 738 + switch (chanstat & B43_RX_CHAN_PHYTYPE) { 739 + case B43_PHYTYPE_N: 740 + if (rxhdr->power0 == 16 || rxhdr->power0 == 32) 741 + status.signal = max(rxhdr->power1, rxhdr->power2); 742 + else 743 + status.signal = max(rxhdr->power0, rxhdr->power1); 744 + break; 745 + case B43_PHYTYPE_A: 746 + case B43_PHYTYPE_B: 747 + case B43_PHYTYPE_G: 748 + case B43_PHYTYPE_LP: 744 749 status.signal = b43_rssi_postprocess(dev, rxhdr->jssi, 745 750 (phystat0 & B43_RX_PHYST0_OFDM), 746 751 (phystat0 & B43_RX_PHYST0_GAINCTL), 747 752 (phystat3 & B43_RX_PHYST3_TRSTATE)); 753 + break; 748 754 } 749 755 750 756 if (phystat0 & B43_RX_PHYST0_OFDM)
+9 -1
drivers/net/wireless/b43/xmit.h
··· 248 248 __s8 power1; /* PHY RX Status 1: Power 1 */ 249 249 } __packed; 250 250 } __packed; 251 - __le16 phy_status2; /* PHY RX Status 2 */ 251 + union { 252 + /* RSSI for N-PHYs */ 253 + struct { 254 + __s8 power2; 255 + PAD_BYTES(1); 256 + } __packed; 257 + 258 + __le16 phy_status2; /* PHY RX Status 2 */ 259 + } __packed; 252 260 __le16 phy_status3; /* PHY RX Status 3 */ 253 261 union { 254 262 /* Tested with 598.314, 644.1001 and 666.2 */