Loading drivers/net/wireless/ath/ar5523/ar5523.c +1 −1 Original line number Diff line number Diff line Loading @@ -1764,7 +1764,7 @@ static struct usb_device_id ar5523_id_table[] = { AR5523_DEVICE_UG(0x07d1, 0x3a07), /* D-Link / WUA-2340 rev A1 */ AR5523_DEVICE_UG(0x1690, 0x0712), /* Gigaset / AR5523 */ AR5523_DEVICE_UG(0x1690, 0x0710), /* Gigaset / SMCWUSBTG */ AR5523_DEVICE_UG(0x129b, 0x160c), /* Gigaset / USB stick 108 AR5523_DEVICE_UG(0x129b, 0x160b), /* Gigaset / USB stick 108 (CyberTAN Technology) */ AR5523_DEVICE_UG(0x16ab, 0x7801), /* Globalsun / AR5523_1 */ AR5523_DEVICE_UX(0x16ab, 0x7811), /* Globalsun / AR5523_2 */ Loading drivers/net/wireless/ath/ath9k/ar9003_eeprom.c +4 −0 Original line number Diff line number Diff line Loading @@ -5065,6 +5065,10 @@ static u16 ar9003_hw_get_max_edge_power(struct ar9300_eeprom *eep, break; } } if (is2GHz && !twiceMaxEdgePower) twiceMaxEdgePower = 60; return twiceMaxEdgePower; } Loading drivers/net/wireless/ath/ath9k/htc.h +2 −0 Original line number Diff line number Diff line Loading @@ -262,6 +262,8 @@ enum tid_aggr_state { struct ath9k_htc_sta { u8 index; enum tid_aggr_state tid_state[ATH9K_HTC_MAX_TID]; struct work_struct rc_update_work; struct ath9k_htc_priv *htc_priv; }; #define ATH9K_HTC_RXBUF 256 Loading drivers/net/wireless/ath/ath9k/htc_drv_init.c +7 −1 Original line number Diff line number Diff line Loading @@ -34,6 +34,10 @@ static int ath9k_htc_btcoex_enable; module_param_named(btcoex_enable, ath9k_htc_btcoex_enable, int, 0444); MODULE_PARM_DESC(btcoex_enable, "Enable wifi-BT coexistence"); static int ath9k_ps_enable; module_param_named(ps_enable, ath9k_ps_enable, int, 0444); MODULE_PARM_DESC(ps_enable, "Enable WLAN PowerSave"); #define CHAN2G(_freq, _idx) { \ .center_freq = (_freq), \ .hw_value = (_idx), \ Loading Loading @@ -726,12 +730,14 @@ static void ath9k_set_hw_capab(struct ath9k_htc_priv *priv, IEEE80211_HW_SPECTRUM_MGMT | IEEE80211_HW_HAS_RATE_CONTROL | IEEE80211_HW_RX_INCLUDES_FCS | IEEE80211_HW_SUPPORTS_PS | IEEE80211_HW_PS_NULLFUNC_STACK | IEEE80211_HW_REPORTS_TX_ACK_STATUS | IEEE80211_HW_MFP_CAPABLE | IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING; if (ath9k_ps_enable) hw->flags |= IEEE80211_HW_SUPPORTS_PS; hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) | BIT(NL80211_IFTYPE_ADHOC) | Loading drivers/net/wireless/ath/ath9k/htc_drv_main.c +40 −23 Original line number Diff line number Diff line Loading @@ -1270,18 +1270,50 @@ static void ath9k_htc_configure_filter(struct ieee80211_hw *hw, mutex_unlock(&priv->mutex); } 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 int ath9k_htc_sta_add(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_sta *sta) { struct ath9k_htc_priv *priv = hw->priv; struct ath9k_htc_sta *ista = (struct ath9k_htc_sta *) sta->drv_priv; int ret; mutex_lock(&priv->mutex); ath9k_htc_ps_wakeup(priv); ret = ath9k_htc_add_station(priv, vif, sta); if (!ret) if (!ret) { INIT_WORK(&ista->rc_update_work, ath9k_htc_sta_rc_update_work); ista->htc_priv = priv; ath9k_htc_init_rate(priv, sta); } ath9k_htc_ps_restore(priv); mutex_unlock(&priv->mutex); Loading @@ -1293,12 +1325,13 @@ static int ath9k_htc_sta_remove(struct ieee80211_hw *hw, struct ieee80211_sta *sta) { struct ath9k_htc_priv *priv = hw->priv; struct ath9k_htc_sta *ista; struct ath9k_htc_sta *ista = (struct ath9k_htc_sta *) sta->drv_priv; int ret; cancel_work_sync(&ista->rc_update_work); mutex_lock(&priv->mutex); ath9k_htc_ps_wakeup(priv); ista = (struct ath9k_htc_sta *) sta->drv_priv; htc_sta_drain(priv->htc, ista->index); ret = ath9k_htc_remove_station(priv, vif, sta); ath9k_htc_ps_restore(priv); Loading @@ -1311,28 +1344,12 @@ 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); struct ath9k_htc_sta *ista = (struct ath9k_htc_sta *) sta->drv_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); } if (!(changed & IEEE80211_RC_SUPP_RATES_CHANGED)) return; ath9k_htc_ps_restore(priv); mutex_unlock(&priv->mutex); schedule_work(&ista->rc_update_work); } static int ath9k_htc_conf_tx(struct ieee80211_hw *hw, Loading Loading
drivers/net/wireless/ath/ar5523/ar5523.c +1 −1 Original line number Diff line number Diff line Loading @@ -1764,7 +1764,7 @@ static struct usb_device_id ar5523_id_table[] = { AR5523_DEVICE_UG(0x07d1, 0x3a07), /* D-Link / WUA-2340 rev A1 */ AR5523_DEVICE_UG(0x1690, 0x0712), /* Gigaset / AR5523 */ AR5523_DEVICE_UG(0x1690, 0x0710), /* Gigaset / SMCWUSBTG */ AR5523_DEVICE_UG(0x129b, 0x160c), /* Gigaset / USB stick 108 AR5523_DEVICE_UG(0x129b, 0x160b), /* Gigaset / USB stick 108 (CyberTAN Technology) */ AR5523_DEVICE_UG(0x16ab, 0x7801), /* Globalsun / AR5523_1 */ AR5523_DEVICE_UX(0x16ab, 0x7811), /* Globalsun / AR5523_2 */ Loading
drivers/net/wireless/ath/ath9k/ar9003_eeprom.c +4 −0 Original line number Diff line number Diff line Loading @@ -5065,6 +5065,10 @@ static u16 ar9003_hw_get_max_edge_power(struct ar9300_eeprom *eep, break; } } if (is2GHz && !twiceMaxEdgePower) twiceMaxEdgePower = 60; return twiceMaxEdgePower; } Loading
drivers/net/wireless/ath/ath9k/htc.h +2 −0 Original line number Diff line number Diff line Loading @@ -262,6 +262,8 @@ enum tid_aggr_state { struct ath9k_htc_sta { u8 index; enum tid_aggr_state tid_state[ATH9K_HTC_MAX_TID]; struct work_struct rc_update_work; struct ath9k_htc_priv *htc_priv; }; #define ATH9K_HTC_RXBUF 256 Loading
drivers/net/wireless/ath/ath9k/htc_drv_init.c +7 −1 Original line number Diff line number Diff line Loading @@ -34,6 +34,10 @@ static int ath9k_htc_btcoex_enable; module_param_named(btcoex_enable, ath9k_htc_btcoex_enable, int, 0444); MODULE_PARM_DESC(btcoex_enable, "Enable wifi-BT coexistence"); static int ath9k_ps_enable; module_param_named(ps_enable, ath9k_ps_enable, int, 0444); MODULE_PARM_DESC(ps_enable, "Enable WLAN PowerSave"); #define CHAN2G(_freq, _idx) { \ .center_freq = (_freq), \ .hw_value = (_idx), \ Loading Loading @@ -726,12 +730,14 @@ static void ath9k_set_hw_capab(struct ath9k_htc_priv *priv, IEEE80211_HW_SPECTRUM_MGMT | IEEE80211_HW_HAS_RATE_CONTROL | IEEE80211_HW_RX_INCLUDES_FCS | IEEE80211_HW_SUPPORTS_PS | IEEE80211_HW_PS_NULLFUNC_STACK | IEEE80211_HW_REPORTS_TX_ACK_STATUS | IEEE80211_HW_MFP_CAPABLE | IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING; if (ath9k_ps_enable) hw->flags |= IEEE80211_HW_SUPPORTS_PS; hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) | BIT(NL80211_IFTYPE_ADHOC) | Loading
drivers/net/wireless/ath/ath9k/htc_drv_main.c +40 −23 Original line number Diff line number Diff line Loading @@ -1270,18 +1270,50 @@ static void ath9k_htc_configure_filter(struct ieee80211_hw *hw, mutex_unlock(&priv->mutex); } 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 int ath9k_htc_sta_add(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_sta *sta) { struct ath9k_htc_priv *priv = hw->priv; struct ath9k_htc_sta *ista = (struct ath9k_htc_sta *) sta->drv_priv; int ret; mutex_lock(&priv->mutex); ath9k_htc_ps_wakeup(priv); ret = ath9k_htc_add_station(priv, vif, sta); if (!ret) if (!ret) { INIT_WORK(&ista->rc_update_work, ath9k_htc_sta_rc_update_work); ista->htc_priv = priv; ath9k_htc_init_rate(priv, sta); } ath9k_htc_ps_restore(priv); mutex_unlock(&priv->mutex); Loading @@ -1293,12 +1325,13 @@ static int ath9k_htc_sta_remove(struct ieee80211_hw *hw, struct ieee80211_sta *sta) { struct ath9k_htc_priv *priv = hw->priv; struct ath9k_htc_sta *ista; struct ath9k_htc_sta *ista = (struct ath9k_htc_sta *) sta->drv_priv; int ret; cancel_work_sync(&ista->rc_update_work); mutex_lock(&priv->mutex); ath9k_htc_ps_wakeup(priv); ista = (struct ath9k_htc_sta *) sta->drv_priv; htc_sta_drain(priv->htc, ista->index); ret = ath9k_htc_remove_station(priv, vif, sta); ath9k_htc_ps_restore(priv); Loading @@ -1311,28 +1344,12 @@ 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); struct ath9k_htc_sta *ista = (struct ath9k_htc_sta *) sta->drv_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); } if (!(changed & IEEE80211_RC_SUPP_RATES_CHANGED)) return; ath9k_htc_ps_restore(priv); mutex_unlock(&priv->mutex); schedule_work(&ista->rc_update_work); } static int ath9k_htc_conf_tx(struct ieee80211_hw *hw, Loading