wifi: rtw89: use struct to access RA report
authorPing-Ke Shih <pkshih@realtek.com>
Fri, 28 Jul 2023 07:02:49 +0000 (15:02 +0800)
committerKalle Valo <kvalo@kernel.org>
Tue, 1 Aug 2023 14:44:36 +0000 (17:44 +0300)
RA (rate adaptive), a mechanism to select proper rate, is implemented in
firmware, and this report is used to tell driver TX rate it is currently
using. Use struct to access this report, and doesn't change logic at all.

Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20230728070252.66525-8-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/fw.h
drivers/net/wireless/realtek/rtw89/phy.c

index becd8ac..586f970 100644 (file)
@@ -3160,18 +3160,18 @@ struct rtw89_c2h_mac_bcnfltr_rpt {
 #define RTW89_C2H_MAC_BCNFLTR_RPT_W2_EVENT GENMASK(11, 10)
 #define RTW89_C2H_MAC_BCNFLTR_RPT_W2_MA GENMASK(23, 16)
 
-#define RTW89_GET_PHY_C2H_RA_RPT_MACID(c2h) \
-       le32_get_bits(*((const __le32 *)(c2h) + 2), GENMASK(15, 0))
-#define RTW89_GET_PHY_C2H_RA_RPT_RETRY_RATIO(c2h) \
-       le32_get_bits(*((const __le32 *)(c2h) + 2), GENMASK(23, 16))
-#define RTW89_GET_PHY_C2H_RA_RPT_MCSNSS(c2h) \
-       le32_get_bits(*((const __le32 *)(c2h) + 3), GENMASK(6, 0))
-#define RTW89_GET_PHY_C2H_RA_RPT_MD_SEL(c2h) \
-       le32_get_bits(*((const __le32 *)(c2h) + 3), GENMASK(9, 8))
-#define RTW89_GET_PHY_C2H_RA_RPT_GILTF(c2h) \
-       le32_get_bits(*((const __le32 *)(c2h) + 3), GENMASK(12, 10))
-#define RTW89_GET_PHY_C2H_RA_RPT_BW(c2h) \
-       le32_get_bits(*((const __le32 *)(c2h) + 3), GENMASK(14, 13))
+struct rtw89_c2h_ra_rpt {
+       struct rtw89_c2h_hdr hdr;
+       __le32 w2;
+       __le32 w3;
+} __packed;
+
+#define RTW89_C2H_RA_RPT_W2_MACID GENMASK(15, 0)
+#define RTW89_C2H_RA_RPT_W2_RETRY_RATIO GENMASK(23, 16)
+#define RTW89_C2H_RA_RPT_W3_MCSNSS GENMASK(6, 0)
+#define RTW89_C2H_RA_RPT_W3_MD_SEL GENMASK(9, 8)
+#define RTW89_C2H_RA_RPT_W3_GILTF GENMASK(12, 10)
+#define RTW89_C2H_RA_RPT_W3_BW GENMASK(14, 13)
 
 /* VHT, HE, HT-old: [6:4]: NSS, [3:0]: MCS
  * HT-new: [6:5]: NA, [4:0]: MCS
index e0d4b97..19a0c7c 100644 (file)
@@ -2244,21 +2244,22 @@ static void rtw89_phy_c2h_ra_rpt_iter(void *data, struct ieee80211_sta *sta)
        struct rtw89_phy_iter_ra_data *ra_data = (struct rtw89_phy_iter_ra_data *)data;
        struct rtw89_dev *rtwdev = ra_data->rtwdev;
        struct rtw89_sta *rtwsta = (struct rtw89_sta *)sta->drv_priv;
+       const struct rtw89_c2h_ra_rpt *c2h =
+               (const struct rtw89_c2h_ra_rpt *)ra_data->c2h->data;
        struct rtw89_ra_report *ra_report = &rtwsta->ra_report;
-       struct sk_buff *c2h = ra_data->c2h;
        u8 mode, rate, bw, giltf, mac_id;
        u16 legacy_bitrate;
        bool valid;
        u8 mcs = 0;
 
-       mac_id = RTW89_GET_PHY_C2H_RA_RPT_MACID(c2h->data);
+       mac_id = le32_get_bits(c2h->w2, RTW89_C2H_RA_RPT_W2_MACID);
        if (mac_id != rtwsta->mac_id)
                return;
 
-       rate = RTW89_GET_PHY_C2H_RA_RPT_MCSNSS(c2h->data);
-       bw = RTW89_GET_PHY_C2H_RA_RPT_BW(c2h->data);
-       giltf = RTW89_GET_PHY_C2H_RA_RPT_GILTF(c2h->data);
-       mode = RTW89_GET_PHY_C2H_RA_RPT_MD_SEL(c2h->data);
+       rate = le32_get_bits(c2h->w3, RTW89_C2H_RA_RPT_W3_MCSNSS);
+       bw = le32_get_bits(c2h->w3, RTW89_C2H_RA_RPT_W3_BW);
+       giltf = le32_get_bits(c2h->w3, RTW89_C2H_RA_RPT_W3_GILTF);
+       mode = le32_get_bits(c2h->w3, RTW89_C2H_RA_RPT_W3_MD_SEL);
 
        if (mode == RTW89_RA_RPT_MODE_LEGACY) {
                valid = rtw89_ra_report_to_bitrate(rtwdev, rate, &legacy_bitrate);