Lines Matching +full:max +full:- +full:bitrate
1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
3 * Copyright (C) 2024-2025 Intel Corporation
20 if (vif->type != NL80211_IFTYPE_STATION) in iwl_mld_vif_ps_iterator()
23 *ps_enable &= !mld_vif->ps_disabled; in iwl_mld_vif_ps_iterator()
37 ieee80211_iterate_active_interfaces_mtx(mld->hw, in iwl_mld_update_device_power()
68 if (ieee80211_vif_type_p2p(link_conf->vif) != NL80211_IFTYPE_STATION) in iwl_mld_enable_beacon_filter()
72 if (iwl_mld_vif_from_mac80211(link_conf->vif)->disable_bf) in iwl_mld_enable_beacon_filter()
76 if (link_conf->cqm_rssi_thold) { in iwl_mld_enable_beacon_filter()
78 cpu_to_le32(link_conf->cqm_rssi_hyst); in iwl_mld_enable_beacon_filter()
81 cpu_to_le32(-link_conf->cqm_rssi_thold); in iwl_mld_enable_beacon_filter()
108 chanctx_conf = wiphy_dereference(mld->wiphy, link_conf->chanctx_conf); in iwl_mld_power_is_radar()
113 return chanctx_conf->def.chan->flags & IEEE80211_CHAN_RADAR; in iwl_mld_power_is_radar()
123 cmd->rx_data_timeout_uapsd = in iwl_mld_power_configure_uapsd()
125 cmd->tx_data_timeout_uapsd = in iwl_mld_power_configure_uapsd()
128 /* set advanced pm flag with no uapsd ACs to enable ps-poll */ in iwl_mld_power_configure_uapsd()
130 cmd->flags |= cpu_to_le16(POWER_FLAGS_ADVANCE_PM_ENA_MSK); in iwl_mld_power_configure_uapsd()
137 if (!link->queue_params[ac].uapsd) in iwl_mld_power_configure_uapsd()
140 cmd->flags |= in iwl_mld_power_configure_uapsd()
144 cmd->uapsd_ac_flags |= BIT(ac); in iwl_mld_power_configure_uapsd()
146 /* QNDP TID - the highest TID with no admission control */ in iwl_mld_power_configure_uapsd()
147 if (!tid_found && !link->queue_params[ac].acm) { in iwl_mld_power_configure_uapsd()
151 cmd->qndp_tid = 6; in iwl_mld_power_configure_uapsd()
154 cmd->qndp_tid = 5; in iwl_mld_power_configure_uapsd()
157 cmd->qndp_tid = 0; in iwl_mld_power_configure_uapsd()
160 cmd->qndp_tid = 1; in iwl_mld_power_configure_uapsd()
166 if (cmd->uapsd_ac_flags == (BIT(IEEE80211_AC_VO) | in iwl_mld_power_configure_uapsd()
170 cmd->flags |= cpu_to_le16(POWER_FLAGS_SNOOZE_ENA_MSK); in iwl_mld_power_configure_uapsd()
171 cmd->snooze_interval = cpu_to_le16(IWL_MLD_PS_SNOOZE_INTERVAL); in iwl_mld_power_configure_uapsd()
172 cmd->snooze_window = cpu_to_le16(IWL_MLD_PS_SNOOZE_WINDOW); in iwl_mld_power_configure_uapsd()
175 cmd->uapsd_max_sp = mld->hw->uapsd_max_sp_len; in iwl_mld_power_configure_uapsd()
187 dtimper = link_conf->dtim_period ?: 1; in iwl_mld_power_config_skip_dtim()
188 dtimper_tu = dtimper * link_conf->beacon_int; in iwl_mld_power_config_skip_dtim()
199 cmd->skip_dtim_periods = skip; in iwl_mld_power_config_skip_dtim()
200 cmd->flags |= cpu_to_le16(POWER_FLAGS_SKIP_OVER_DTIM_MSK); in iwl_mld_power_config_skip_dtim()
212 struct ieee80211_bss_conf *link_conf = &vif->bss_conf; in iwl_mld_power_build_cmd()
213 struct iwl_mld_link *link = &mld_vif->deflink; in iwl_mld_power_build_cmd()
216 cmd->id_and_color = cpu_to_le32(mld_vif->fw_id); in iwl_mld_power_build_cmd()
221 if (WARN_ON(!vif->active_links)) in iwl_mld_power_build_cmd()
228 link_id = __ffs(vif->active_links); in iwl_mld_power_build_cmd()
235 dtimper = link_conf->dtim_period; in iwl_mld_power_build_cmd()
236 bi = link_conf->beacon_int; in iwl_mld_power_build_cmd()
245 keep_alive = max(keep_alive, POWER_KEEP_ALIVE_PERIOD_SEC); in iwl_mld_power_build_cmd()
246 cmd->keep_alive_seconds = cpu_to_le16(keep_alive); in iwl_mld_power_build_cmd()
249 cmd->flags |= cpu_to_le16(POWER_FLAGS_POWER_SAVE_ENA_MSK); in iwl_mld_power_build_cmd()
251 if (!vif->cfg.ps || iwl_mld_tdls_sta_count(mld) > 0) in iwl_mld_power_build_cmd()
254 cmd->flags |= cpu_to_le16(POWER_FLAGS_POWER_MANAGEMENT_ENA_MSK); in iwl_mld_power_build_cmd()
256 if (iwl_fw_lookup_cmd_ver(mld->fw, MAC_PM_POWER_TABLE, 0) >= 2) in iwl_mld_power_build_cmd()
257 cmd->flags |= cpu_to_le16(POWER_FLAGS_ENABLE_SMPS_MSK); in iwl_mld_power_build_cmd()
260 if (link_conf->beacon_rate && in iwl_mld_power_build_cmd()
261 (link_conf->beacon_rate->bitrate == 10 || in iwl_mld_power_build_cmd()
262 link_conf->beacon_rate->bitrate == 60)) { in iwl_mld_power_build_cmd()
263 cmd->flags |= cpu_to_le16(POWER_FLAGS_LPRX_ENA_MSK); in iwl_mld_power_build_cmd()
264 cmd->lprx_rssi_threshold = POWER_LPRX_RSSI_THRESHOLD; in iwl_mld_power_build_cmd()
269 cmd->rx_data_timeout = in iwl_mld_power_build_cmd()
271 cmd->tx_data_timeout = in iwl_mld_power_build_cmd()
273 } else if (iwl_mld_vif_low_latency(mld_vif) && vif->p2p) { in iwl_mld_power_build_cmd()
274 cmd->tx_data_timeout = in iwl_mld_power_build_cmd()
276 cmd->rx_data_timeout = in iwl_mld_power_build_cmd()
279 cmd->rx_data_timeout = in iwl_mld_power_build_cmd()
281 cmd->tx_data_timeout = in iwl_mld_power_build_cmd()
290 ps_poll = mld_vif->use_ps_poll; in iwl_mld_power_build_cmd()
315 BUILD_BUG_ON(ARRAY_SIZE(cmd->psd_pwr) != in iwl_mld_tpe_sta_cmd_data()
316 ARRAY_SIZE(link->tpe.psd_local[0].power)); in iwl_mld_tpe_sta_cmd_data()
318 /* if not valid, mac80211 puts default (max value) */ in iwl_mld_tpe_sta_cmd_data()
319 for (i = 0; i < ARRAY_SIZE(cmd->psd_pwr); i++) in iwl_mld_tpe_sta_cmd_data()
320 cmd->psd_pwr[i] = min(link->tpe.psd_local[0].power[i], in iwl_mld_tpe_sta_cmd_data()
321 link->tpe.psd_reg_client[0].power[i]); in iwl_mld_tpe_sta_cmd_data()
323 BUILD_BUG_ON(ARRAY_SIZE(cmd->eirp_pwr) != in iwl_mld_tpe_sta_cmd_data()
324 ARRAY_SIZE(link->tpe.max_local[0].power)); in iwl_mld_tpe_sta_cmd_data()
326 for (i = 0; i < ARRAY_SIZE(cmd->eirp_pwr); i++) in iwl_mld_tpe_sta_cmd_data()
327 cmd->eirp_pwr[i] = min(link->tpe.max_local[0].power[i], in iwl_mld_tpe_sta_cmd_data()
328 link->tpe.max_reg_client[0].power[i]); in iwl_mld_tpe_sta_cmd_data()
340 lockdep_assert_wiphy(mld->wiphy); in iwl_mld_send_ap_tx_power_constraint_cmd()
342 if (!mld_link->active) in iwl_mld_send_ap_tx_power_constraint_cmd()
345 if (link->chanreq.oper.chan->band != NL80211_BAND_6GHZ) in iwl_mld_send_ap_tx_power_constraint_cmd()
348 cmd.link_id = cpu_to_le16(mld_link->fw_id); in iwl_mld_send_ap_tx_power_constraint_cmd()
352 if (vif->type == NL80211_IFTYPE_AP) { in iwl_mld_send_ap_tx_power_constraint_cmd()
354 } else if (link->power_type == IEEE80211_REG_UNSET_AP) { in iwl_mld_send_ap_tx_power_constraint_cmd()
357 cmd.ap_type = cpu_to_le16(link->power_type - 1); in iwl_mld_send_ap_tx_power_constraint_cmd()
386 return -ENODEV; in iwl_mld_set_tx_power()
388 cmd.common.link_id = cpu_to_le32(mld_link->fw_id); in iwl_mld_set_tx_power()