#include "mvm.h"
#include "time-event.h"
#define HANDLE_ESR_REASONS(HOW) …
static const char *const iwl_mvm_esr_states_names[] = …;
const char *iwl_get_esr_state_string(enum iwl_mvm_esr_state state)
{ … }
static void iwl_mvm_print_esr_state(struct iwl_mvm *mvm, u32 mask)
{ … }
static u32 iwl_mvm_get_free_fw_link_id(struct iwl_mvm *mvm,
struct iwl_mvm_vif *mvm_vif)
{ … }
static int iwl_mvm_link_cmd_send(struct iwl_mvm *mvm,
struct iwl_link_config_cmd *cmd,
enum iwl_ctxt_action action)
{ … }
int iwl_mvm_set_link_mapping(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
struct ieee80211_bss_conf *link_conf)
{ … }
int iwl_mvm_add_link(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
struct ieee80211_bss_conf *link_conf)
{ … }
struct iwl_mvm_esr_iter_data { … };
static void iwl_mvm_esr_vif_iterator(void *_data, u8 *mac,
struct ieee80211_vif *vif)
{ … }
int iwl_mvm_esr_non_bss_link(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
unsigned int link_id, bool active)
{ … }
int iwl_mvm_link_changed(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
struct ieee80211_bss_conf *link_conf,
u32 changes, bool active)
{ … }
int iwl_mvm_unset_link_mapping(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
struct ieee80211_bss_conf *link_conf)
{ … }
int iwl_mvm_remove_link(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
struct ieee80211_bss_conf *link_conf)
{ … }
int iwl_mvm_disable_link(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
struct ieee80211_bss_conf *link_conf)
{ … }
struct iwl_mvm_rssi_to_grade { … };
#define RSSI_TO_GRADE_LINE(_lb, _hb_uhb, _grade) …
static const struct iwl_mvm_rssi_to_grade rssi_to_grade_map[] = …;
#define MAX_GRADE …
#define DEFAULT_CHAN_LOAD_LB …
#define DEFAULT_CHAN_LOAD_HB …
#define DEFAULT_CHAN_LOAD_UHB …
#define SCALE_FACTOR …
#define NORMALIZE_PERCENT_TO_255(percentage) …
static unsigned int
iwl_mvm_get_puncturing_factor(const struct ieee80211_bss_conf *link_conf)
{ … }
static unsigned int
iwl_mvm_get_chan_load(struct ieee80211_bss_conf *link_conf)
{ … }
static unsigned int
iwl_mvm_get_chan_load_factor(struct ieee80211_bss_conf *link_conf)
{ … }
VISIBLE_IF_IWLWIFI_KUNIT
unsigned int iwl_mvm_get_link_grade(struct ieee80211_bss_conf *link_conf)
{ … }
EXPORT_SYMBOL_IF_IWLWIFI_KUNIT(…);
static
u8 iwl_mvm_set_link_selection_data(struct ieee80211_vif *vif,
struct iwl_mvm_link_sel_data *data,
unsigned long usable_links,
u8 *best_link_idx)
{ … }
struct iwl_mvm_bw_to_rssi_threshs { … };
#define BW_TO_RSSI_THRESHOLDS(_bw) …
s8 iwl_mvm_get_esr_rssi_thresh(struct iwl_mvm *mvm,
const struct cfg80211_chan_def *chandef,
bool low)
{ … }
static u32
iwl_mvm_esr_disallowed_with_link(struct iwl_mvm *mvm,
struct ieee80211_vif *vif,
const struct iwl_mvm_link_sel_data *link,
bool primary)
{ … }
VISIBLE_IF_IWLWIFI_KUNIT
bool iwl_mvm_mld_valid_link_pair(struct ieee80211_vif *vif,
const struct iwl_mvm_link_sel_data *a,
const struct iwl_mvm_link_sel_data *b)
{ … }
EXPORT_SYMBOL_IF_IWLWIFI_KUNIT(…);
static
unsigned int iwl_mvm_get_esr_grade(struct ieee80211_vif *vif,
const struct iwl_mvm_link_sel_data *a,
const struct iwl_mvm_link_sel_data *b,
u8 *primary_id)
{ … }
void iwl_mvm_select_links(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
{ … }
u8 iwl_mvm_get_primary_link(struct ieee80211_vif *vif)
{ … }
u8 iwl_mvm_get_other_link(struct ieee80211_vif *vif, u8 link_id)
{ … }
#define IWL_MVM_ESR_PREVENT_REASONS …
#define IWL_MVM_PREVENT_ESR_TIMEOUT …
#define IWL_MVM_ESR_PREVENT_SHORT …
#define IWL_MVM_ESR_PREVENT_LONG …
static bool iwl_mvm_check_esr_prevention(struct iwl_mvm *mvm,
struct iwl_mvm_vif *mvmvif,
enum iwl_mvm_esr_state reason)
{ … }
#define IWL_MVM_TRIGGER_LINK_SEL_TIME …
void iwl_mvm_exit_esr(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
enum iwl_mvm_esr_state reason,
u8 link_to_keep)
{ … }
void iwl_mvm_block_esr(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
enum iwl_mvm_esr_state reason,
u8 link_to_keep)
{ … }
int iwl_mvm_block_esr_sync(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
enum iwl_mvm_esr_state reason)
{ … }
static void iwl_mvm_esr_unblocked(struct iwl_mvm *mvm,
struct ieee80211_vif *vif)
{ … }
void iwl_mvm_unblock_esr(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
enum iwl_mvm_esr_state reason)
{ … }