diff options
Diffstat (limited to 'drivers/net/wireless/intel/iwlwifi/mvm/ops.c')
| -rw-r--r-- | drivers/net/wireless/intel/iwlwifi/mvm/ops.c | 18 | 
1 files changed, 16 insertions, 2 deletions
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/ops.c b/drivers/net/wireless/intel/iwlwifi/mvm/ops.c index 224bfa1bcf53..ff1e518096c5 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/ops.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/ops.c @@ -250,6 +250,9 @@ static const struct iwl_rx_handlers iwl_mvm_rx_handlers[] = {  	RX_HANDLER(TX_CMD, iwl_mvm_rx_tx_cmd, RX_HANDLER_SYNC),  	RX_HANDLER(BA_NOTIF, iwl_mvm_rx_ba_notif, RX_HANDLER_SYNC), +	RX_HANDLER_GRP(DATA_PATH_GROUP, TLC_MNG_UPDATE_NOTIF, +		       iwl_mvm_tlc_update_notif, RX_HANDLER_SYNC), +  	RX_HANDLER(BT_PROFILE_NOTIFICATION, iwl_mvm_rx_bt_coex_notif,  		   RX_HANDLER_ASYNC_LOCKED),  	RX_HANDLER(BEACON_NOTIFICATION, iwl_mvm_rx_beacon_notif, @@ -667,6 +670,12 @@ iwl_op_mode_mvm_start(struct iwl_trans *trans, const struct iwl_cfg *cfg,  	SET_IEEE80211_DEV(mvm->hw, mvm->trans->dev); +	spin_lock_init(&mvm->tcm.lock); +	INIT_DELAYED_WORK(&mvm->tcm.work, iwl_mvm_tcm_work); +	mvm->tcm.ts = jiffies; +	mvm->tcm.ll_ts = jiffies; +	mvm->tcm.uapsd_nonagg_ts = jiffies; +  	INIT_DELAYED_WORK(&mvm->cs_tx_unblock_dwork, iwl_mvm_tx_unblock_dwork);  	/* @@ -730,6 +739,9 @@ iwl_op_mode_mvm_start(struct iwl_trans *trans, const struct iwl_cfg *cfg,  	       sizeof(trans->dbg_conf_tlv));  	trans->dbg_trigger_tlv = mvm->fw->dbg_trigger_tlv; +	trans->iml = mvm->fw->iml; +	trans->iml_len = mvm->fw->iml_len; +  	/* set up notification wait support */  	iwl_notification_wait_init(&mvm->notif_wait); @@ -859,6 +871,8 @@ static void iwl_op_mode_mvm_stop(struct iwl_op_mode *op_mode)  	for (i = 0; i < NVM_MAX_NUM_SECTIONS; i++)  		kfree(mvm->nvm_sections[i].data); +	cancel_delayed_work_sync(&mvm->tcm.work); +  	iwl_mvm_tof_clean(mvm);  	mutex_destroy(&mvm->mutex); @@ -1026,8 +1040,6 @@ static void iwl_mvm_rx_mq(struct iwl_op_mode *op_mode,  		iwl_mvm_rx_queue_notif(mvm, rxb, 0);  	else if (cmd == WIDE_ID(LEGACY_GROUP, FRAME_RELEASE))  		iwl_mvm_rx_frame_release(mvm, napi, rxb, 0); -	else if (cmd == WIDE_ID(DATA_PATH_GROUP, TLC_MNG_UPDATE_NOTIF)) -		iwl_mvm_tlc_update_notif(mvm, pkt);  	else  		iwl_mvm_rx_common(mvm, rxb, pkt);  } @@ -1432,6 +1444,7 @@ int iwl_mvm_enter_d0i3(struct iwl_op_mode *op_mode)  		mvm->d0i3_offloading = false;  	} +	iwl_mvm_pause_tcm(mvm, true);  	/* make sure we have no running tx while configuring the seqno */  	synchronize_net(); @@ -1615,6 +1628,7 @@ out:  	/* the FW might have updated the regdomain */  	iwl_mvm_update_changed_regdom(mvm); +	iwl_mvm_resume_tcm(mvm);  	iwl_mvm_unref(mvm, IWL_MVM_REF_EXIT_WORK);  	mutex_unlock(&mvm->mutex);  }  |