static void ath9k_htc_update_rate(struct ath9k_htc_priv *priv, struct ieee80211_vif *vif, struct ieee80211_bss_conf *bss_conf) { struct ath_common *common = ath9k_hw_common(priv->ah); struct ath9k_htc_target_rate trate; struct ieee80211_sta *sta; int ret; memset(&trate, 0, sizeof(struct ath9k_htc_target_rate)); rcu_read_lock(); sta = ieee80211_find_sta(vif, bss_conf->bssid); if (!sta) { rcu_read_unlock(); return; } ath9k_htc_setup_rate(priv, sta, &trate); rcu_read_unlock(); ret = ath9k_htc_send_rate_cmd(priv, &trate); if (!ret) ath_dbg(common, CONFIG, "Updated target sta: %pM, rate caps: 0x%X\n", bss_conf->bssid, be32_to_cpu(trate.capflags)); }
static void ath9k_htc_sta_rc_update_work(struct work_struct *work) { struct ath9k_htc_sta *ista = container_of(work, struct ath9k_htc_sta, rc_update_work); struct ieee80211_sta *sta = container_of((void *)ista, struct ieee80211_sta, drv_priv); struct ath9k_htc_priv *priv = ista->htc_priv; struct ath_common *common = ath9k_hw_common(priv->ah); struct ath9k_htc_target_rate trate; mutex_lock(&priv->mutex); ath9k_htc_ps_wakeup(priv); memset(&trate, 0, sizeof(struct ath9k_htc_target_rate)); ath9k_htc_setup_rate(priv, sta, &trate); if (!ath9k_htc_send_rate_cmd(priv, &trate)) ath_dbg(common, CONFIG, "Supported rates for sta: %pM updated, rate caps: 0x%X\n", sta->addr, be32_to_cpu(trate.capflags)); else ath_dbg(common, CONFIG, "Unable to update supported rates for sta: %pM\n", sta->addr); ath9k_htc_ps_restore(priv); mutex_unlock(&priv->mutex); }
static void ath9k_htc_sta_rc_update(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_sta *sta, u32 changed) { struct ath9k_htc_priv *priv = hw->priv; struct ath_common *common = ath9k_hw_common(priv->ah); struct ath9k_htc_target_rate trate; mutex_lock(&priv->mutex); ath9k_htc_ps_wakeup(priv); if (changed & IEEE80211_RC_SUPP_RATES_CHANGED) { memset(&trate, 0, sizeof(struct ath9k_htc_target_rate)); ath9k_htc_setup_rate(priv, sta, &trate); if (!ath9k_htc_send_rate_cmd(priv, &trate)) ath_dbg(common, CONFIG, "Supported rates for sta: %pM updated, rate caps: 0x%X\n", sta->addr, be32_to_cpu(trate.capflags)); else ath_dbg(common, CONFIG, "Unable to update supported rates for sta: %pM\n", sta->addr); } ath9k_htc_ps_restore(priv); mutex_unlock(&priv->mutex); }
static void ath9k_htc_init_rate(struct ath9k_htc_priv *priv, struct ieee80211_sta *sta) { struct ath_common *common = ath9k_hw_common(priv->ah); struct ath9k_htc_target_rate trate; int ret; memset(&trate, 0, sizeof(struct ath9k_htc_target_rate)); ath9k_htc_setup_rate(priv, sta, &trate); ret = ath9k_htc_send_rate_cmd(priv, &trate); if (!ret) ath_dbg(common, CONFIG, "Updated target sta: %pM, rate caps: 0x%X\n", sta->addr, be32_to_cpu(trate.capflags)); }