Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 49f71713 authored by Sara Sharon's avatar Sara Sharon Committed by Luca Coelho
Browse files

iwlwifi: mvm: don't assume static queue numbers



In a000 devices FW will assign the queue number. Prepare for
that by getting rid of static defines and store them in variables.
Enlarge to u16 since we may have up to 512 queues.

Signed-off-by: default avatarSara Sharon <sara.sharon@intel.com>
Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
parent 9c36fd71
Loading
Loading
Loading
Loading
+4 −1
Original line number Original line Diff line number Diff line
@@ -976,7 +976,10 @@ struct iwl_mvm {
#endif
#endif


	/* Tx queues */
	/* Tx queues */
	u8 aux_queue;
	u16 aux_queue;
	u16 probe_queue;
	u16 p2p_dev_queue;

	u8 first_agg_queue;
	u8 first_agg_queue;
	u8 last_agg_queue;
	u8 last_agg_queue;


+2 −0
Original line number Original line Diff line number Diff line
@@ -603,6 +603,8 @@ iwl_op_mode_mvm_start(struct iwl_trans *trans, const struct iwl_cfg *cfg,
		}
		}
	} else {
	} else {
		mvm->aux_queue = IWL_MVM_DQA_AUX_QUEUE;
		mvm->aux_queue = IWL_MVM_DQA_AUX_QUEUE;
		mvm->probe_queue = IWL_MVM_DQA_AP_PROBE_RESP_QUEUE;
		mvm->p2p_dev_queue = IWL_MVM_DQA_P2P_DEVICE_QUEUE;
		mvm->first_agg_queue = IWL_MVM_DQA_MIN_DATA_QUEUE;
		mvm->first_agg_queue = IWL_MVM_DQA_MIN_DATA_QUEUE;
		mvm->last_agg_queue = IWL_MVM_DQA_MAX_DATA_QUEUE;
		mvm->last_agg_queue = IWL_MVM_DQA_MAX_DATA_QUEUE;
	}
	}
+8 −14
Original line number Original line Diff line number Diff line
@@ -1806,9 +1806,9 @@ int iwl_mvm_send_add_bcast_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
		int queue;
		int queue;


		if (vif->type == NL80211_IFTYPE_AP)
		if (vif->type == NL80211_IFTYPE_AP)
			queue = IWL_MVM_DQA_AP_PROBE_RESP_QUEUE;
			queue = mvm->probe_queue;
		else if (vif->type == NL80211_IFTYPE_P2P_DEVICE)
		else if (vif->type == NL80211_IFTYPE_P2P_DEVICE)
			queue = IWL_MVM_DQA_P2P_DEVICE_QUEUE;
			queue = mvm->p2p_dev_queue;
		else if (WARN(1, "Missing required TXQ for adding bcast STA\n"))
		else if (WARN(1, "Missing required TXQ for adding bcast STA\n"))
			return -EINVAL;
			return -EINVAL;


@@ -1836,24 +1836,18 @@ static void iwl_mvm_free_bcast_sta_queues(struct iwl_mvm *mvm,


	lockdep_assert_held(&mvm->mutex);
	lockdep_assert_held(&mvm->mutex);


	if (mvmvif->bcast_sta.tfd_queue_msk &
	if (mvmvif->bcast_sta.tfd_queue_msk & BIT(mvm->probe_queue)) {
	    BIT(IWL_MVM_DQA_AP_PROBE_RESP_QUEUE)) {
		iwl_mvm_disable_txq(mvm, mvm->probe_queue,
		iwl_mvm_disable_txq(mvm,
				    IWL_MVM_DQA_AP_PROBE_RESP_QUEUE,
				    vif->hw_queue[0], IWL_MAX_TID_COUNT,
				    vif->hw_queue[0], IWL_MAX_TID_COUNT,
				    0);
				    0);
		mvmvif->bcast_sta.tfd_queue_msk &=
		mvmvif->bcast_sta.tfd_queue_msk &= ~BIT(mvm->probe_queue);
			~BIT(IWL_MVM_DQA_AP_PROBE_RESP_QUEUE);
	}
	}


	if (mvmvif->bcast_sta.tfd_queue_msk &
	if (mvmvif->bcast_sta.tfd_queue_msk & BIT(mvm->p2p_dev_queue)) {
	    BIT(IWL_MVM_DQA_P2P_DEVICE_QUEUE)) {
		iwl_mvm_disable_txq(mvm, mvm->p2p_dev_queue,
		iwl_mvm_disable_txq(mvm,
				    IWL_MVM_DQA_P2P_DEVICE_QUEUE,
				    vif->hw_queue[0], IWL_MAX_TID_COUNT,
				    vif->hw_queue[0], IWL_MAX_TID_COUNT,
				    0);
				    0);
		mvmvif->bcast_sta.tfd_queue_msk &=
		mvmvif->bcast_sta.tfd_queue_msk &= ~BIT(mvm->p2p_dev_queue);
			~BIT(IWL_MVM_DQA_P2P_DEVICE_QUEUE);
	}
	}
}
}


+4 −4
Original line number Original line Diff line number Diff line
@@ -513,20 +513,20 @@ static int iwl_mvm_get_ctrl_vif_queue(struct iwl_mvm *mvm,
		 */
		 */
		if (ieee80211_is_probe_resp(fc) || ieee80211_is_auth(fc) ||
		if (ieee80211_is_probe_resp(fc) || ieee80211_is_auth(fc) ||
		    ieee80211_is_deauth(fc))
		    ieee80211_is_deauth(fc))
			return IWL_MVM_DQA_AP_PROBE_RESP_QUEUE;
			return mvm->probe_queue;
		if (info->hw_queue == info->control.vif->cab_queue)
		if (info->hw_queue == info->control.vif->cab_queue)
			return info->hw_queue;
			return info->hw_queue;


		WARN_ONCE(1, "fc=0x%02x", le16_to_cpu(fc));
		WARN_ONCE(1, "fc=0x%02x", le16_to_cpu(fc));
		return IWL_MVM_DQA_AP_PROBE_RESP_QUEUE;
		return mvm->probe_queue;
	case NL80211_IFTYPE_P2P_DEVICE:
	case NL80211_IFTYPE_P2P_DEVICE:
		if (ieee80211_is_mgmt(fc))
		if (ieee80211_is_mgmt(fc))
			return IWL_MVM_DQA_P2P_DEVICE_QUEUE;
			return mvm->p2p_dev_queue;
		if (info->hw_queue == info->control.vif->cab_queue)
		if (info->hw_queue == info->control.vif->cab_queue)
			return info->hw_queue;
			return info->hw_queue;


		WARN_ON_ONCE(1);
		WARN_ON_ONCE(1);
		return IWL_MVM_DQA_P2P_DEVICE_QUEUE;
		return mvm->p2p_dev_queue;
	default:
	default:
		WARN_ONCE(1, "Not a ctrl vif, no available queue\n");
		WARN_ONCE(1, "Not a ctrl vif, no available queue\n");
		return -1;
		return -1;