rtw89: 8852c: fill freq and band of RX status by PPDU report
authorPing-Ke Shih <pkshih@realtek.com>
Thu, 21 Apr 2022 12:09:02 +0000 (20:09 +0800)
committerKalle Valo <kvalo@kernel.org>
Sun, 24 Apr 2022 11:30:36 +0000 (14:30 +0300)
Hardware reports PPDU status containing encoded channel index to driver,
so we decode it and then fill freq and band.

Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20220421120903.73715-14-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/rtw8852c.c

index daf467eaef665c27914117f6345e63da3d6ee62c..f66e4e091e439e668e0cdde3a993c0b38ce68405 100644 (file)
@@ -2440,6 +2440,38 @@ static void rtw8852c_btc_init_cfg(struct rtw89_dev *rtwdev)
        btc->cx.wl.status.map.init_ok = true;
 }
 
+static void rtw8852c_fill_freq_with_ppdu(struct rtw89_dev *rtwdev,
+                                        struct rtw89_rx_phy_ppdu *phy_ppdu,
+                                        struct ieee80211_rx_status *status)
+{
+       u8 chan_idx = phy_ppdu->chan_idx;
+       enum nl80211_band band;
+       u8 ch;
+
+       if (chan_idx == 0)
+               return;
+
+       rtw8852c_decode_chan_idx(rtwdev, chan_idx, &ch, &band);
+       status->freq = ieee80211_channel_to_frequency(ch, band);
+       status->band = band;
+}
+
+static void rtw8852c_query_ppdu(struct rtw89_dev *rtwdev,
+                               struct rtw89_rx_phy_ppdu *phy_ppdu,
+                               struct ieee80211_rx_status *status)
+{
+       u8 path;
+       s8 *rx_power = phy_ppdu->rssi;
+
+       status->signal = max_t(s8, rx_power[RF_PATH_A], rx_power[RF_PATH_B]);
+       for (path = 0; path < rtwdev->chip->rf_path_num; path++) {
+               status->chains |= BIT(path);
+               status->chain_signal[path] = rx_power[path];
+       }
+       if (phy_ppdu->valid)
+               rtw8852c_fill_freq_with_ppdu(rtwdev, phy_ppdu, status);
+}
+
 static int rtw8852c_mac_enable_bb_rf(struct rtw89_dev *rtwdev)
 {
        int ret;
@@ -2499,6 +2531,7 @@ static const struct rtw89_chip_ops rtw8852c_chip_ops = {
        .set_txpwr_ctrl         = rtw8852c_set_txpwr_ctrl,
        .init_txpwr_unit        = rtw8852c_init_txpwr_unit,
        .get_thermal            = rtw8852c_get_thermal,
+       .query_ppdu             = rtw8852c_query_ppdu,
        .read_rf                = rtw89_phy_read_rf_v1,
        .write_rf               = rtw89_phy_write_rf_v1,
        .set_txpwr_ul_tb_offset = rtw8852c_set_txpwr_ul_tb_offset,