···735735 }736736737737 /* Link quality statistics */738738- if ((chanstat & B43_RX_CHAN_PHYTYPE) == B43_PHYTYPE_N) {739739-// s8 rssi = max(rxhdr->power0, rxhdr->power1);740740- //TODO: Find out what the rssi value is (dBm or percentage?)741741- // and also find out what the maximum possible value is.742742- // Fill status.ssi and status.signal fields.743743- } else {738738+ switch (chanstat & B43_RX_CHAN_PHYTYPE) {739739+ case B43_PHYTYPE_N:740740+ if (rxhdr->power0 == 16 || rxhdr->power0 == 32)741741+ status.signal = max(rxhdr->power1, rxhdr->power2);742742+ else743743+ status.signal = max(rxhdr->power0, rxhdr->power1);744744+ break;745745+ case B43_PHYTYPE_A:746746+ case B43_PHYTYPE_B:747747+ case B43_PHYTYPE_G:748748+ case B43_PHYTYPE_LP:744749 status.signal = b43_rssi_postprocess(dev, rxhdr->jssi,745750 (phystat0 & B43_RX_PHYST0_OFDM),746751 (phystat0 & B43_RX_PHYST0_GAINCTL),747752 (phystat3 & B43_RX_PHYST3_TRSTATE));753753+ break;748754 }749755750756 if (phystat0 & B43_RX_PHYST0_OFDM)
+9-1
drivers/net/wireless/b43/xmit.h
···248248 __s8 power1; /* PHY RX Status 1: Power 1 */249249 } __packed;250250 } __packed;251251- __le16 phy_status2; /* PHY RX Status 2 */251251+ union {252252+ /* RSSI for N-PHYs */253253+ struct {254254+ __s8 power2;255255+ PAD_BYTES(1);256256+ } __packed;257257+258258+ __le16 phy_status2; /* PHY RX Status 2 */259259+ } __packed;252260 __le16 phy_status3; /* PHY RX Status 3 */253261 union {254262 /* Tested with 598.314, 644.1001 and 666.2 */