aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/intel/iwlwifi
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2016-04-13 08:24:22 -0400
committerLuca Coelho <luciano.coelho@intel.com>2016-10-19 05:46:32 -0400
commit65e254821cee1a63f3f6d23270e90b33432b2bef (patch)
tree8d68b8a394094354bae156ddda2a75aa31d54871 /drivers/net/wireless/intel/iwlwifi
parentad5de73734031c07eb8c7cdb7c7d63d3630bb202 (diff)
iwlwifi: mvm: use firmware station PM notification for AP_LINK_PS
When using RSS on 9000 series devices, we can't rely on processing the received frames for station powersave handling, since they could be processed on different CPUs and out of order. In order to still manage the powersave of stations, the firmware sends a notification on sleep->wake, wake->sleep and - for U-APSD - frames received with PM while already sleeping (with the TID.) With this, the driver can set AP_LINK_PS, which is required for real parallel RX. In addition, this requires checking for PS-Poll frames and calling ieee80211_sta_pspoll() appropriately. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Diffstat (limited to 'drivers/net/wireless/intel/iwlwifi')
-rw-r--r--drivers/net/wireless/intel/iwlwifi/iwl-fw-file.h2
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/fw-api-rx.h26
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/fw-api-sta.h9
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/fw-api.h1
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c70
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/mvm.h1
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/ops.c3
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/sta.c13
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/sta.h1
9 files changed, 119 insertions, 7 deletions
diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-fw-file.h b/drivers/net/wireless/intel/iwlwifi/iwl-fw-file.h
index ceec5ca2b1ab..1ad0ec180d5d 100644
--- a/drivers/net/wireless/intel/iwlwifi/iwl-fw-file.h
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-fw-file.h
@@ -293,6 +293,7 @@ typedef unsigned int __bitwise__ iwl_ucode_tlv_capa_t;
293 * is supported. 293 * is supported.
294 * @IWL_UCODE_TLV_CAPA_BT_COEX_RRC: supports BT Coex RRC 294 * @IWL_UCODE_TLV_CAPA_BT_COEX_RRC: supports BT Coex RRC
295 * @IWL_UCODE_TLV_CAPA_GSCAN_SUPPORT: supports gscan 295 * @IWL_UCODE_TLV_CAPA_GSCAN_SUPPORT: supports gscan
296 * @IWL_UCODE_TLV_CAPA_STA_PM_NOTIF: firmware will send STA PM notification
296 * @IWL_UCODE_TLV_CAPA_EXTENDED_DTS_MEASURE: extended DTS measurement 297 * @IWL_UCODE_TLV_CAPA_EXTENDED_DTS_MEASURE: extended DTS measurement
297 * @IWL_UCODE_TLV_CAPA_SHORT_PM_TIMEOUTS: supports short PM timeouts 298 * @IWL_UCODE_TLV_CAPA_SHORT_PM_TIMEOUTS: supports short PM timeouts
298 * @IWL_UCODE_TLV_CAPA_BT_MPLUT_SUPPORT: supports bt-coex Multi-priority LUT 299 * @IWL_UCODE_TLV_CAPA_BT_MPLUT_SUPPORT: supports bt-coex Multi-priority LUT
@@ -342,6 +343,7 @@ enum iwl_ucode_tlv_capa {
342 IWL_UCODE_TLV_CAPA_LAR_MULTI_MCC = (__force iwl_ucode_tlv_capa_t)29, 343 IWL_UCODE_TLV_CAPA_LAR_MULTI_MCC = (__force iwl_ucode_tlv_capa_t)29,
343 IWL_UCODE_TLV_CAPA_BT_COEX_RRC = (__force iwl_ucode_tlv_capa_t)30, 344 IWL_UCODE_TLV_CAPA_BT_COEX_RRC = (__force iwl_ucode_tlv_capa_t)30,
344 IWL_UCODE_TLV_CAPA_GSCAN_SUPPORT = (__force iwl_ucode_tlv_capa_t)31, 345 IWL_UCODE_TLV_CAPA_GSCAN_SUPPORT = (__force iwl_ucode_tlv_capa_t)31,
346 IWL_UCODE_TLV_CAPA_STA_PM_NOTIF = (__force iwl_ucode_tlv_capa_t)38,
345 IWL_UCODE_TLV_CAPA_EXTENDED_DTS_MEASURE = (__force iwl_ucode_tlv_capa_t)64, 347 IWL_UCODE_TLV_CAPA_EXTENDED_DTS_MEASURE = (__force iwl_ucode_tlv_capa_t)64,
346 IWL_UCODE_TLV_CAPA_SHORT_PM_TIMEOUTS = (__force iwl_ucode_tlv_capa_t)65, 348 IWL_UCODE_TLV_CAPA_SHORT_PM_TIMEOUTS = (__force iwl_ucode_tlv_capa_t)65,
347 IWL_UCODE_TLV_CAPA_BT_MPLUT_SUPPORT = (__force iwl_ucode_tlv_capa_t)67, 349 IWL_UCODE_TLV_CAPA_BT_MPLUT_SUPPORT = (__force iwl_ucode_tlv_capa_t)67,
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/fw-api-rx.h b/drivers/net/wireless/intel/iwlwifi/mvm/fw-api-rx.h
index acc5cd53e4ba..b530fa47d68a 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/fw-api-rx.h
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/fw-api-rx.h
@@ -474,4 +474,30 @@ struct iwl_mvm_internal_rxq_notif {
474 u8 data[]; 474 u8 data[];
475} __packed; 475} __packed;
476 476
477/**
478 * enum iwl_mvm_pm_event - type of station PM event
479 * @IWL_MVM_PM_EVENT_AWAKE: station woke up
480 * @IWL_MVM_PM_EVENT_ASLEEP: station went to sleep
481 * @IWL_MVM_PM_EVENT_UAPSD: station sent uAPSD trigger
482 * @IWL_MVM_PM_EVENT_PS_POLL: station sent PS-Poll
483 */
484enum iwl_mvm_pm_event {
485 IWL_MVM_PM_EVENT_AWAKE,
486 IWL_MVM_PM_EVENT_ASLEEP,
487 IWL_MVM_PM_EVENT_UAPSD,
488 IWL_MVM_PM_EVENT_PS_POLL,
489}; /* PEER_PM_NTFY_API_E_VER_1 */
490
491/**
492 * struct iwl_mvm_pm_state_notification - station PM state notification
493 * @sta_id: station ID of the station changing state
494 * @type: the new powersave state, see IWL_MVM_PM_EVENT_ above
495 */
496struct iwl_mvm_pm_state_notification {
497 u8 sta_id;
498 u8 type;
499 /* private: */
500 u16 reserved;
501} __packed; /* PEER_PM_NTFY_API_S_VER_1 */
502
477#endif /* __fw_api_rx_h__ */ 503#endif /* __fw_api_rx_h__ */
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/fw-api-sta.h b/drivers/net/wireless/intel/iwlwifi/mvm/fw-api-sta.h
index 6c8e3ca79323..3b5150e9975d 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/fw-api-sta.h
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/fw-api-sta.h
@@ -179,7 +179,7 @@ enum iwl_sta_key_flag {
179 * enum iwl_sta_modify_flag - indicate to the fw what flag are being changed 179 * enum iwl_sta_modify_flag - indicate to the fw what flag are being changed
180 * @STA_MODIFY_QUEUE_REMOVAL: this command removes a queue 180 * @STA_MODIFY_QUEUE_REMOVAL: this command removes a queue
181 * @STA_MODIFY_TID_DISABLE_TX: this command modifies %tid_disable_tx 181 * @STA_MODIFY_TID_DISABLE_TX: this command modifies %tid_disable_tx
182 * @STA_MODIFY_TX_RATE: unused 182 * @STA_MODIFY_UAPSD_ACS: this command modifies %uapsd_trigger_acs
183 * @STA_MODIFY_ADD_BA_TID: this command modifies %add_immediate_ba_tid 183 * @STA_MODIFY_ADD_BA_TID: this command modifies %add_immediate_ba_tid
184 * @STA_MODIFY_REMOVE_BA_TID: this command modifies %remove_immediate_ba_tid 184 * @STA_MODIFY_REMOVE_BA_TID: this command modifies %remove_immediate_ba_tid
185 * @STA_MODIFY_SLEEPING_STA_TX_COUNT: this command modifies %sleep_tx_count 185 * @STA_MODIFY_SLEEPING_STA_TX_COUNT: this command modifies %sleep_tx_count
@@ -189,7 +189,7 @@ enum iwl_sta_key_flag {
189enum iwl_sta_modify_flag { 189enum iwl_sta_modify_flag {
190 STA_MODIFY_QUEUE_REMOVAL = BIT(0), 190 STA_MODIFY_QUEUE_REMOVAL = BIT(0),
191 STA_MODIFY_TID_DISABLE_TX = BIT(1), 191 STA_MODIFY_TID_DISABLE_TX = BIT(1),
192 STA_MODIFY_TX_RATE = BIT(2), 192 STA_MODIFY_UAPSD_ACS = BIT(2),
193 STA_MODIFY_ADD_BA_TID = BIT(3), 193 STA_MODIFY_ADD_BA_TID = BIT(3),
194 STA_MODIFY_REMOVE_BA_TID = BIT(4), 194 STA_MODIFY_REMOVE_BA_TID = BIT(4),
195 STA_MODIFY_SLEEPING_STA_TX_COUNT = BIT(5), 195 STA_MODIFY_SLEEPING_STA_TX_COUNT = BIT(5),
@@ -353,6 +353,8 @@ struct iwl_mvm_add_sta_cmd_v7 {
353 * @beamform_flags: beam forming controls 353 * @beamform_flags: beam forming controls
354 * @tfd_queue_msk: tfd queues used by this station 354 * @tfd_queue_msk: tfd queues used by this station
355 * @rx_ba_window: aggregation window size 355 * @rx_ba_window: aggregation window size
356 * @scd_queue_bank: queue bank in used. Each bank contains 32 queues. 0 means
357 * that the queues used by this station are in the first 32.
356 * 358 *
357 * The device contains an internal table of per-station information, with info 359 * The device contains an internal table of per-station information, with info
358 * on security keys, aggregation parameters, and Tx rates for initial Tx 360 * on security keys, aggregation parameters, and Tx rates for initial Tx
@@ -382,7 +384,8 @@ struct iwl_mvm_add_sta_cmd {
382 __le16 beamform_flags; 384 __le16 beamform_flags;
383 __le32 tfd_queue_msk; 385 __le32 tfd_queue_msk;
384 __le16 rx_ba_window; 386 __le16 rx_ba_window;
385 __le16 reserved; 387 u8 scd_queue_bank;
388 u8 uapsd_trigger_acs;
386} __packed; /* ADD_STA_CMD_API_S_VER_8 */ 389} __packed; /* ADD_STA_CMD_API_S_VER_8 */
387 390
388/** 391/**
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/fw-api.h b/drivers/net/wireless/intel/iwlwifi/mvm/fw-api.h
index 97633690f3d5..ae12badc0c2a 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/fw-api.h
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/fw-api.h
@@ -332,6 +332,7 @@ enum iwl_data_path_subcmd_ids {
332 DQA_ENABLE_CMD = 0x0, 332 DQA_ENABLE_CMD = 0x0,
333 UPDATE_MU_GROUPS_CMD = 0x1, 333 UPDATE_MU_GROUPS_CMD = 0x1,
334 TRIGGER_RX_QUEUES_NOTIF_CMD = 0x2, 334 TRIGGER_RX_QUEUES_NOTIF_CMD = 0x2,
335 STA_PM_NOTIF = 0xFD,
335 MU_GROUP_MGMT_NOTIF = 0xFE, 336 MU_GROUP_MGMT_NOTIF = 0xFE,
336 RX_QUEUES_NOTIFICATION = 0xFF, 337 RX_QUEUES_NOTIFICATION = 0xFF,
337}; 338};
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
index 318efd814037..9eeb2c36bbc1 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
@@ -445,6 +445,8 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
445 ieee80211_hw_set(hw, NEEDS_UNIQUE_STA_ADDR); 445 ieee80211_hw_set(hw, NEEDS_UNIQUE_STA_ADDR);
446 if (iwl_mvm_has_new_rx_api(mvm)) 446 if (iwl_mvm_has_new_rx_api(mvm))
447 ieee80211_hw_set(hw, SUPPORTS_REORDERING_BUFFER); 447 ieee80211_hw_set(hw, SUPPORTS_REORDERING_BUFFER);
448 if (fw_has_capa(&mvm->fw->ucode_capa, IWL_UCODE_TLV_CAPA_STA_PM_NOTIF))
449 ieee80211_hw_set(hw, AP_LINK_PS);
448 450
449 if (mvm->trans->num_rx_queues > 1) 451 if (mvm->trans->num_rx_queues > 1)
450 ieee80211_hw_set(hw, USES_RSS); 452 ieee80211_hw_set(hw, USES_RSS);
@@ -2318,10 +2320,9 @@ iwl_mvm_mac_release_buffered_frames(struct ieee80211_hw *hw,
2318 tids, more_data, true); 2320 tids, more_data, true);
2319} 2321}
2320 2322
2321static void iwl_mvm_mac_sta_notify(struct ieee80211_hw *hw, 2323static void __iwl_mvm_mac_sta_notify(struct ieee80211_hw *hw,
2322 struct ieee80211_vif *vif, 2324 enum sta_notify_cmd cmd,
2323 enum sta_notify_cmd cmd, 2325 struct ieee80211_sta *sta)
2324 struct ieee80211_sta *sta)
2325{ 2326{
2326 struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw); 2327 struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw);
2327 struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta); 2328 struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
@@ -2374,6 +2375,67 @@ static void iwl_mvm_mac_sta_notify(struct ieee80211_hw *hw,
2374 spin_unlock_bh(&mvmsta->lock); 2375 spin_unlock_bh(&mvmsta->lock);
2375} 2376}
2376 2377
2378static void iwl_mvm_mac_sta_notify(struct ieee80211_hw *hw,
2379 struct ieee80211_vif *vif,
2380 enum sta_notify_cmd cmd,
2381 struct ieee80211_sta *sta)
2382{
2383 __iwl_mvm_mac_sta_notify(hw, cmd, sta);
2384}
2385
2386void iwl_mvm_sta_pm_notif(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb)
2387{
2388 struct iwl_rx_packet *pkt = rxb_addr(rxb);
2389 struct iwl_mvm_pm_state_notification *notif = (void *)pkt->data;
2390 struct ieee80211_sta *sta;
2391 struct iwl_mvm_sta *mvmsta;
2392 bool sleeping = (notif->type != IWL_MVM_PM_EVENT_AWAKE);
2393
2394 if (WARN_ON(notif->sta_id >= ARRAY_SIZE(mvm->fw_id_to_mac_id)))
2395 return;
2396
2397 rcu_read_lock();
2398 sta = mvm->fw_id_to_mac_id[notif->sta_id];
2399 if (WARN_ON(IS_ERR_OR_NULL(sta))) {
2400 rcu_read_unlock();
2401 return;
2402 }
2403
2404 mvmsta = iwl_mvm_sta_from_mac80211(sta);
2405
2406 if (!mvmsta->vif ||
2407 mvmsta->vif->type != NL80211_IFTYPE_AP) {
2408 rcu_read_unlock();
2409 return;
2410 }
2411
2412 if (mvmsta->sleeping != sleeping) {
2413 mvmsta->sleeping = sleeping;
2414 __iwl_mvm_mac_sta_notify(mvm->hw,
2415 sleeping ? STA_NOTIFY_SLEEP : STA_NOTIFY_AWAKE,
2416 sta);
2417 ieee80211_sta_ps_transition(sta, sleeping);
2418 }
2419
2420 if (sleeping) {
2421 switch (notif->type) {
2422 case IWL_MVM_PM_EVENT_AWAKE:
2423 case IWL_MVM_PM_EVENT_ASLEEP:
2424 break;
2425 case IWL_MVM_PM_EVENT_UAPSD:
2426 ieee80211_sta_uapsd_trigger(sta, IEEE80211_NUM_TIDS);
2427 break;
2428 case IWL_MVM_PM_EVENT_PS_POLL:
2429 ieee80211_sta_pspoll(sta);
2430 break;
2431 default:
2432 break;
2433 }
2434 }
2435
2436 rcu_read_unlock();
2437}
2438
2377static void iwl_mvm_sta_pre_rcu_remove(struct ieee80211_hw *hw, 2439static void iwl_mvm_sta_pre_rcu_remove(struct ieee80211_hw *hw,
2378 struct ieee80211_vif *vif, 2440 struct ieee80211_vif *vif,
2379 struct ieee80211_sta *sta) 2441 struct ieee80211_sta *sta)
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
index d17cbf603f7c..726ba48da15d 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
@@ -1418,6 +1418,7 @@ void iwl_mvm_rx_stored_beacon_notif(struct iwl_mvm *mvm,
1418 struct iwl_rx_cmd_buffer *rxb); 1418 struct iwl_rx_cmd_buffer *rxb);
1419void iwl_mvm_mu_mimo_grp_notif(struct iwl_mvm *mvm, 1419void iwl_mvm_mu_mimo_grp_notif(struct iwl_mvm *mvm,
1420 struct iwl_rx_cmd_buffer *rxb); 1420 struct iwl_rx_cmd_buffer *rxb);
1421void iwl_mvm_sta_pm_notif(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb);
1421void iwl_mvm_window_status_notif(struct iwl_mvm *mvm, 1422void iwl_mvm_window_status_notif(struct iwl_mvm *mvm,
1422 struct iwl_rx_cmd_buffer *rxb); 1423 struct iwl_rx_cmd_buffer *rxb);
1423void iwl_mvm_mac_ctxt_recalc_tsf_id(struct iwl_mvm *mvm, 1424void iwl_mvm_mac_ctxt_recalc_tsf_id(struct iwl_mvm *mvm,
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/ops.c b/drivers/net/wireless/intel/iwlwifi/mvm/ops.c
index 05fe6dd1a2c8..e86986f5c40d 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/ops.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/ops.c
@@ -306,6 +306,8 @@ static const struct iwl_rx_handlers iwl_mvm_rx_handlers[] = {
306 iwl_mvm_rx_stored_beacon_notif, RX_HANDLER_SYNC), 306 iwl_mvm_rx_stored_beacon_notif, RX_HANDLER_SYNC),
307 RX_HANDLER_GRP(DATA_PATH_GROUP, MU_GROUP_MGMT_NOTIF, 307 RX_HANDLER_GRP(DATA_PATH_GROUP, MU_GROUP_MGMT_NOTIF,
308 iwl_mvm_mu_mimo_grp_notif, RX_HANDLER_SYNC), 308 iwl_mvm_mu_mimo_grp_notif, RX_HANDLER_SYNC),
309 RX_HANDLER_GRP(DATA_PATH_GROUP, STA_PM_NOTIF,
310 iwl_mvm_sta_pm_notif, RX_HANDLER_SYNC),
309}; 311};
310#undef RX_HANDLER 312#undef RX_HANDLER
311#undef RX_HANDLER_GRP 313#undef RX_HANDLER_GRP
@@ -452,6 +454,7 @@ static const struct iwl_hcmd_names iwl_mvm_phy_names[] = {
452static const struct iwl_hcmd_names iwl_mvm_data_path_names[] = { 454static const struct iwl_hcmd_names iwl_mvm_data_path_names[] = {
453 HCMD_NAME(UPDATE_MU_GROUPS_CMD), 455 HCMD_NAME(UPDATE_MU_GROUPS_CMD),
454 HCMD_NAME(TRIGGER_RX_QUEUES_NOTIF_CMD), 456 HCMD_NAME(TRIGGER_RX_QUEUES_NOTIF_CMD),
457 HCMD_NAME(STA_PM_NOTIF),
455 HCMD_NAME(MU_GROUP_MGMT_NOTIF), 458 HCMD_NAME(MU_GROUP_MGMT_NOTIF),
456 HCMD_NAME(RX_QUEUES_NOTIFICATION), 459 HCMD_NAME(RX_QUEUES_NOTIFICATION),
457}; 460};
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/sta.c b/drivers/net/wireless/intel/iwlwifi/mvm/sta.c
index 5ec1b96b9593..82ee786bba63 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/sta.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/sta.c
@@ -203,6 +203,19 @@ int iwl_mvm_sta_send_to_fw(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
203 add_sta_cmd.station_flags |= 203 add_sta_cmd.station_flags |=
204 cpu_to_le32(mpdu_dens << STA_FLG_AGG_MPDU_DENS_SHIFT); 204 cpu_to_le32(mpdu_dens << STA_FLG_AGG_MPDU_DENS_SHIFT);
205 205
206 if (sta->wme) {
207 add_sta_cmd.modify_mask |= STA_MODIFY_UAPSD_ACS;
208
209 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BK)
210 add_sta_cmd.uapsd_trigger_acs |= BIT(AC_BK);
211 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BE)
212 add_sta_cmd.uapsd_trigger_acs |= BIT(AC_BE);
213 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VI)
214 add_sta_cmd.uapsd_trigger_acs |= BIT(AC_VI);
215 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VO)
216 add_sta_cmd.uapsd_trigger_acs |= BIT(AC_VO);
217 }
218
206 status = ADD_STA_SUCCESS; 219 status = ADD_STA_SUCCESS;
207 ret = iwl_mvm_send_cmd_pdu_status(mvm, ADD_STA, 220 ret = iwl_mvm_send_cmd_pdu_status(mvm, ADD_STA,
208 iwl_mvm_add_sta_cmd_size(mvm), 221 iwl_mvm_add_sta_cmd_size(mvm),
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/sta.h b/drivers/net/wireless/intel/iwlwifi/mvm/sta.h
index e068d5355865..b45c7b9937c8 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/sta.h
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/sta.h
@@ -436,6 +436,7 @@ struct iwl_mvm_sta {
436 436
437 bool disable_tx; 437 bool disable_tx;
438 bool tlc_amsdu; 438 bool tlc_amsdu;
439 bool sleeping;
439 u8 agg_tids; 440 u8 agg_tids;
440 u8 sleep_tx_count; 441 u8 sleep_tx_count;
441 u8 avg_energy; 442 u8 avg_energy;