mac80211: save transmit power envelope element and power constraint
This is to save the transmit power envelope element and power constraint in struct ieee80211_bss_conf for 6 GHz. Lower driver will use this info to calculate the power limit. Signed-off-by: Wen Gong <wgong@codeaurora.org> Link: https://lore.kernel.org/r/20210924100052.32029-7-wgong@codeaurora.org Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
cb751b7a57
commit
63214f02cf
|
@ -633,6 +633,9 @@ struct ieee80211_fils_discovery {
|
|||
* @beacon_tx_rate: The configured beacon transmit rate that needs to be passed
|
||||
* to driver when rate control is offloaded to firmware.
|
||||
* @power_type: power type of BSS for 6 GHz
|
||||
* @tx_pwr_env: transmit power envelope array of BSS.
|
||||
* @tx_pwr_env_num: number of @tx_pwr_env.
|
||||
* @pwr_reduction: power constraint of BSS.
|
||||
*/
|
||||
struct ieee80211_bss_conf {
|
||||
const u8 *bssid;
|
||||
|
@ -704,6 +707,9 @@ struct ieee80211_bss_conf {
|
|||
bool s1g;
|
||||
struct cfg80211_bitrate_mask beacon_tx_rate;
|
||||
enum ieee80211_ap_reg_power power_type;
|
||||
struct ieee80211_tx_pwr_env tx_pwr_env[IEEE80211_TPE_MAX_IE_COUNT];
|
||||
u8 tx_pwr_env_num;
|
||||
u8 pwr_reduction;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -2258,6 +2258,7 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,
|
|||
{
|
||||
struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
|
||||
struct ieee80211_local *local = sdata->local;
|
||||
struct ieee80211_bss_conf *bss_conf = &sdata->vif.bss_conf;
|
||||
u32 changed = 0;
|
||||
struct ieee80211_prep_tx_info info = {
|
||||
.subtype = stype,
|
||||
|
@ -2407,6 +2408,10 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,
|
|||
cancel_delayed_work_sync(&ifmgd->tx_tspec_wk);
|
||||
|
||||
sdata->encrypt_headroom = IEEE80211_ENCRYPT_HEADROOM;
|
||||
|
||||
bss_conf->pwr_reduction = 0;
|
||||
bss_conf->tx_pwr_env_num = 0;
|
||||
memset(bss_conf->tx_pwr_env, 0, sizeof(bss_conf->tx_pwr_env));
|
||||
}
|
||||
|
||||
static void ieee80211_reset_ap_probe(struct ieee80211_sub_if_data *sdata)
|
||||
|
@ -5066,6 +5071,30 @@ static int ieee80211_prep_channel(struct ieee80211_sub_if_data *sdata,
|
|||
if (!(ifmgd->flags & IEEE80211_STA_DISABLE_HE)) {
|
||||
he_oper = elems->he_operation;
|
||||
|
||||
if (is_6ghz) {
|
||||
struct ieee80211_bss_conf *bss_conf;
|
||||
u8 i, j = 0;
|
||||
|
||||
bss_conf = &sdata->vif.bss_conf;
|
||||
|
||||
if (elems->pwr_constr_elem)
|
||||
bss_conf->pwr_reduction = *elems->pwr_constr_elem;
|
||||
|
||||
BUILD_BUG_ON(ARRAY_SIZE(bss_conf->tx_pwr_env) !=
|
||||
ARRAY_SIZE(elems->tx_pwr_env));
|
||||
|
||||
for (i = 0; i < elems->tx_pwr_env_num; i++) {
|
||||
if (elems->tx_pwr_env_len[i] >
|
||||
sizeof(bss_conf->tx_pwr_env[j]))
|
||||
continue;
|
||||
|
||||
bss_conf->tx_pwr_env_num++;
|
||||
memcpy(&bss_conf->tx_pwr_env[j], elems->tx_pwr_env[i],
|
||||
elems->tx_pwr_env_len[i]);
|
||||
j++;
|
||||
}
|
||||
}
|
||||
|
||||
if (!ieee80211_verify_sta_he_mcs_support(sdata, sband, he_oper))
|
||||
ifmgd->flags |= IEEE80211_STA_DISABLE_HE;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue