|
@@ -2848,6 +2848,7 @@ ieee80211_rx_h_action(struct ieee80211_rx_data *rx)
|
|
case WLAN_HT_ACTION_SMPS: {
|
|
case WLAN_HT_ACTION_SMPS: {
|
|
struct ieee80211_supported_band *sband;
|
|
struct ieee80211_supported_band *sband;
|
|
enum ieee80211_smps_mode smps_mode;
|
|
enum ieee80211_smps_mode smps_mode;
|
|
|
|
+ struct sta_opmode_info sta_opmode = {};
|
|
|
|
|
|
/* convert to HT capability */
|
|
/* convert to HT capability */
|
|
switch (mgmt->u.action.u.ht_smps.smps_control) {
|
|
switch (mgmt->u.action.u.ht_smps.smps_control) {
|
|
@@ -2868,17 +2869,24 @@ ieee80211_rx_h_action(struct ieee80211_rx_data *rx)
|
|
if (rx->sta->sta.smps_mode == smps_mode)
|
|
if (rx->sta->sta.smps_mode == smps_mode)
|
|
goto handled;
|
|
goto handled;
|
|
rx->sta->sta.smps_mode = smps_mode;
|
|
rx->sta->sta.smps_mode = smps_mode;
|
|
|
|
+ sta_opmode.smps_mode = smps_mode;
|
|
|
|
+ sta_opmode.changed = STA_OPMODE_SMPS_MODE_CHANGED;
|
|
|
|
|
|
sband = rx->local->hw.wiphy->bands[status->band];
|
|
sband = rx->local->hw.wiphy->bands[status->band];
|
|
|
|
|
|
rate_control_rate_update(local, sband, rx->sta,
|
|
rate_control_rate_update(local, sband, rx->sta,
|
|
IEEE80211_RC_SMPS_CHANGED);
|
|
IEEE80211_RC_SMPS_CHANGED);
|
|
|
|
+ cfg80211_sta_opmode_change_notify(sdata->dev,
|
|
|
|
+ rx->sta->addr,
|
|
|
|
+ &sta_opmode,
|
|
|
|
+ GFP_KERNEL);
|
|
goto handled;
|
|
goto handled;
|
|
}
|
|
}
|
|
case WLAN_HT_ACTION_NOTIFY_CHANWIDTH: {
|
|
case WLAN_HT_ACTION_NOTIFY_CHANWIDTH: {
|
|
struct ieee80211_supported_band *sband;
|
|
struct ieee80211_supported_band *sband;
|
|
u8 chanwidth = mgmt->u.action.u.ht_notify_cw.chanwidth;
|
|
u8 chanwidth = mgmt->u.action.u.ht_notify_cw.chanwidth;
|
|
enum ieee80211_sta_rx_bandwidth max_bw, new_bw;
|
|
enum ieee80211_sta_rx_bandwidth max_bw, new_bw;
|
|
|
|
+ struct sta_opmode_info sta_opmode = {};
|
|
|
|
|
|
/* If it doesn't support 40 MHz it can't change ... */
|
|
/* If it doesn't support 40 MHz it can't change ... */
|
|
if (!(rx->sta->sta.ht_cap.cap &
|
|
if (!(rx->sta->sta.ht_cap.cap &
|
|
@@ -2899,9 +2907,15 @@ ieee80211_rx_h_action(struct ieee80211_rx_data *rx)
|
|
|
|
|
|
rx->sta->sta.bandwidth = new_bw;
|
|
rx->sta->sta.bandwidth = new_bw;
|
|
sband = rx->local->hw.wiphy->bands[status->band];
|
|
sband = rx->local->hw.wiphy->bands[status->band];
|
|
|
|
+ sta_opmode.bw = new_bw;
|
|
|
|
+ sta_opmode.changed = STA_OPMODE_MAX_BW_CHANGED;
|
|
|
|
|
|
rate_control_rate_update(local, sband, rx->sta,
|
|
rate_control_rate_update(local, sband, rx->sta,
|
|
IEEE80211_RC_BW_CHANGED);
|
|
IEEE80211_RC_BW_CHANGED);
|
|
|
|
+ cfg80211_sta_opmode_change_notify(sdata->dev,
|
|
|
|
+ rx->sta->addr,
|
|
|
|
+ &sta_opmode,
|
|
|
|
+ GFP_KERNEL);
|
|
goto handled;
|
|
goto handled;
|
|
}
|
|
}
|
|
default:
|
|
default:
|