mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 10:33:41 +02:00
wifi: rtw89: sar: introduce structure to wrap query parameters
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
This commit is contained in:
parent
4cecf99124
commit
1e262fc8df
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -10,17 +10,22 @@
|
|||
#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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user