]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
wifi: rtw89: sar: introduce structure to wrap query parameters
authorZong-Zhe Yang <kevin_yang@realtek.com>
Wed, 26 Mar 2025 02:06:34 +0000 (10:06 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Mon, 31 Mar 2025 06:21:27 +0000 (14:21 +0800)
The following implementations will support SAR source from ACPI/BIOS.
And when querying, it needs to take more parameters into account. To
avoid changing function prototype of querying SAR everytime when new
SAR source is introduced, wrap query parameters into a structure first.

Signed-off-by: Zong-Zhe Yang <kevin_yang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20250326020643.14487-4-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/debug.c
drivers/net/wireless/realtek/rtw89/phy.c
drivers/net/wireless/realtek/rtw89/sar.c
drivers/net/wireless/realtek/rtw89/sar.h

index 5105a192b15a8770781269cd867c3989bf8b2f0f..a7ef9cb9c6fe46adca23822f6b2d60fcfc440c6b 100644 (file)
@@ -922,6 +922,7 @@ ssize_t rtw89_debug_priv_txpwr_table_get(struct rtw89_dev *rtwdev,
                                         char *buf, size_t bufsz)
 {
        enum rtw89_chip_gen chip_gen = rtwdev->chip->chip_gen;
+       struct rtw89_sar_parm sar_parm = {};
        const struct dbgfs_txpwr_table *tbl;
        const struct rtw89_chan *chan;
        char *p = buf, *end = buf + bufsz;
@@ -931,11 +932,12 @@ ssize_t rtw89_debug_priv_txpwr_table_get(struct rtw89_dev *rtwdev,
 
        rtw89_leave_ps_mode(rtwdev);
        chan = rtw89_chan_get(rtwdev, RTW89_CHANCTX_0);
+       sar_parm.center_freq = chan->freq;
 
        p += rtw89_debug_priv_txpwr_table_get_regd(rtwdev, p, end - p, chan);
 
        p += scnprintf(p, end - p, "[SAR]\n");
-       p += rtw89_print_sar(rtwdev, p, end - p, chan->freq);
+       p += rtw89_print_sar(rtwdev, p, end - p, &sar_parm);
 
        p += scnprintf(p, end - p, "[TAS]\n");
        p += rtw89_print_tas(rtwdev, p, end - p);
index f4eee642e5ced512eb3c387f60f3930b4a721cd4..64eb4154a696a6f1efecb7eab5536eabd8a6fe16 100644 (file)
@@ -2264,6 +2264,9 @@ s8 rtw89_phy_read_txpwr_limit(struct rtw89_dev *rtwdev, u8 band,
        u8 ch_idx = rtw89_channel_to_idx(rtwdev, band, ch);
        u8 regd = rtw89_regd_get(rtwdev, band);
        u8 reg6 = regulatory->reg_6ghz_power;
+       struct rtw89_sar_parm sar_parm = {
+               .center_freq = freq,
+       };
        s8 lmt = 0, sar, offset;
        s8 cstr;
 
@@ -2298,7 +2301,7 @@ s8 rtw89_phy_read_txpwr_limit(struct rtw89_dev *rtwdev, u8 band,
 
        offset = rtw89_phy_ant_gain_offset(rtwdev, band, freq);
        lmt = rtw89_phy_txpwr_rf_to_mac(rtwdev, lmt + offset);
-       sar = rtw89_query_sar(rtwdev, freq);
+       sar = rtw89_query_sar(rtwdev, &sar_parm);
        cstr = rtw89_phy_get_tpe_constraint(rtwdev, band);
 
        return min3(lmt, sar, cstr);
@@ -2524,6 +2527,9 @@ s8 rtw89_phy_read_txpwr_limit_ru(struct rtw89_dev *rtwdev, u8 band,
        u8 ch_idx = rtw89_channel_to_idx(rtwdev, band, ch);
        u8 regd = rtw89_regd_get(rtwdev, band);
        u8 reg6 = regulatory->reg_6ghz_power;
+       struct rtw89_sar_parm sar_parm = {
+               .center_freq = freq,
+       };
        s8 lmt_ru = 0, sar, offset;
        s8 cstr;
 
@@ -2558,7 +2564,7 @@ s8 rtw89_phy_read_txpwr_limit_ru(struct rtw89_dev *rtwdev, u8 band,
 
        offset = rtw89_phy_ant_gain_offset(rtwdev, band, freq);
        lmt_ru = rtw89_phy_txpwr_rf_to_mac(rtwdev, lmt_ru + offset);
-       sar = rtw89_query_sar(rtwdev, freq);
+       sar = rtw89_query_sar(rtwdev, &sar_parm);
        cstr = rtw89_phy_get_tpe_constraint(rtwdev, band);
 
        return min3(lmt_ru, sar, cstr);
index 0b5af952870225fc9dba38ea2a32c54d31ca0461..95255e02f1bb6ab619bc4d4012921f0aec3c2f38 100644 (file)
@@ -57,10 +57,12 @@ static enum rtw89_sar_subband rtw89_sar_get_subband(struct rtw89_dev *rtwdev,
 }
 
 static int rtw89_query_sar_config_common(struct rtw89_dev *rtwdev,
-                                        u32 center_freq, s32 *cfg)
+                                        const struct rtw89_sar_parm *sar_parm,
+                                        s32 *cfg)
 {
        struct rtw89_sar_cfg_common *rtwsar = &rtwdev->sar.cfg_common;
        enum rtw89_sar_subband subband_l, subband_h;
+       u32 center_freq = sar_parm->center_freq;
        const struct rtw89_6ghz_span *span;
 
        span = rtw89_get_6ghz_span(rtwdev, center_freq);
@@ -175,7 +177,7 @@ static const char *rtw89_tas_state_str(enum rtw89_tas_state state)
        }
 }
 
-s8 rtw89_query_sar(struct rtw89_dev *rtwdev, u32 center_freq)
+s8 rtw89_query_sar(struct rtw89_dev *rtwdev, const struct rtw89_sar_parm *sar_parm)
 {
        const enum rtw89_sar_sources src = rtwdev->sar.src;
        /* its members are protected by rtw89_sar_set_src() */
@@ -191,7 +193,7 @@ s8 rtw89_query_sar(struct rtw89_dev *rtwdev, u32 center_freq)
        if (src == RTW89_SAR_SOURCE_NONE)
                return RTW89_SAR_TXPWR_MAC_MAX;
 
-       ret = sar_hdl->query_sar_config(rtwdev, center_freq, &cfg);
+       ret = sar_hdl->query_sar_config(rtwdev, sar_parm, &cfg);
        if (ret)
                return RTW89_SAR_TXPWR_MAC_MAX;
 
@@ -217,7 +219,7 @@ s8 rtw89_query_sar(struct rtw89_dev *rtwdev, u32 center_freq)
 }
 
 int rtw89_print_sar(struct rtw89_dev *rtwdev, char *buf, size_t bufsz,
-                   u32 center_freq)
+                   const struct rtw89_sar_parm *sar_parm)
 {
        const enum rtw89_sar_sources src = rtwdev->sar.src;
        /* its members are protected by rtw89_sar_set_src() */
@@ -238,7 +240,7 @@ int rtw89_print_sar(struct rtw89_dev *rtwdev, char *buf, size_t bufsz,
        p += scnprintf(p, end - p, "source: %d (%s)\n", src,
                       sar_hdl->descr_sar_source);
 
-       ret = sar_hdl->query_sar_config(rtwdev, center_freq, &cfg);
+       ret = sar_hdl->query_sar_config(rtwdev, sar_parm, &cfg);
        if (ret) {
                p += scnprintf(p, end - p, "config: return code: %d\n", ret);
                p += scnprintf(p, end - p,
@@ -369,12 +371,14 @@ static bool rtw89_tas_query_sar_config(struct rtw89_dev *rtwdev, s32 *cfg)
        const enum rtw89_sar_sources src = rtwdev->sar.src;
        /* its members are protected by rtw89_sar_set_src() */
        const struct rtw89_sar_handler *sar_hdl = &rtw89_sar_handlers[src];
+       struct rtw89_sar_parm sar_parm = {};
        int ret;
 
        if (src == RTW89_SAR_SOURCE_NONE)
                return false;
 
-       ret = sar_hdl->query_sar_config(rtwdev, chan->freq, cfg);
+       sar_parm.center_freq = chan->freq;
+       ret = sar_hdl->query_sar_config(rtwdev, &sar_parm, cfg);
        if (ret)
                return false;
 
index 0df1661db9a8038b5f227ce0c5846432a84ba4b9..3e4159c0840952e22a80116c27791d20efc66405 100644 (file)
 #define RTW89_SAR_TXPWR_MAC_MAX 63
 #define RTW89_SAR_TXPWR_MAC_MIN -64
 
+struct rtw89_sar_parm {
+       u32 center_freq;
+};
+
 struct rtw89_sar_handler {
        const char *descr_sar_source;
        u8 txpwr_factor_sar;
-       int (*query_sar_config)(struct rtw89_dev *rtwdev, u32 center_freq, s32 *cfg);
+       int (*query_sar_config)(struct rtw89_dev *rtwdev,
+                               const struct rtw89_sar_parm *sar_parm, s32 *cfg);
 };
 
 extern const struct cfg80211_sar_capa rtw89_sar_capa;
 
-s8 rtw89_query_sar(struct rtw89_dev *rtwdev, u32 center_freq);
+s8 rtw89_query_sar(struct rtw89_dev *rtwdev, const struct rtw89_sar_parm *sar_parm);
 int rtw89_print_sar(struct rtw89_dev *rtwdev, char *buf, size_t bufsz,
-                   u32 center_freq);
+                   const struct rtw89_sar_parm *sar_parm);
 int rtw89_print_tas(struct rtw89_dev *rtwdev, char *buf, size_t bufsz);
 int rtw89_ops_set_sar_specs(struct ieee80211_hw *hw,
                            const struct cfg80211_sar_specs *sar);