iwlwifi: mvm: Enabling Aux Queue
authorAriej Marjieh <ariej.marjieh@intel.com>
Mon, 7 Jul 2014 09:09:40 +0000 (12:09 +0300)
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Mon, 21 Jul 2014 07:43:14 +0000 (10:43 +0300)
Enabling the Aux queue and mapping it to FIFO 5.
Defining the Aux queue for the Aux station.

Signed-off-by: Ariej Marjieh <ariej.marjieh@intel.com>
Reviewed-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
drivers/net/wireless/iwlwifi/mvm/sta.c
drivers/net/wireless/iwlwifi/mvm/tx.c

index 5445934..7635488 100644 (file)
@@ -526,8 +526,12 @@ int iwl_mvm_add_aux_sta(struct iwl_mvm *mvm)
 
        lockdep_assert_held(&mvm->mutex);
 
-       /* Add the aux station, but without any queues */
-       ret = iwl_mvm_allocate_int_sta(mvm, &mvm->aux_sta, 0,
+       /* Map Aux queue to fifo - needs to happen before adding Aux station */
+       iwl_trans_ac_txq_enable(mvm->trans, mvm->aux_queue,
+                               IWL_MVM_TX_FIFO_MCAST);
+
+       /* Allocate aux station and assign to it the aux queue */
+       ret = iwl_mvm_allocate_int_sta(mvm, &mvm->aux_sta, BIT(mvm->aux_queue),
                                       NL80211_IFTYPE_UNSPECIFIED);
        if (ret)
                return ret;
index e9ff386..dbc8707 100644 (file)
@@ -310,6 +310,16 @@ int iwl_mvm_tx_skb_non_sta(struct iwl_mvm *mvm, struct sk_buff *skb)
                          info->hw_queue != info->control.vif->cab_queue)))
                return -1;
 
+       /*
+        * IWL_MVM_OFFCHANNEL_QUEUE is used for ROC packets that can be used
+        * in 2 different types of vifs, P2P & STATION. P2P uses the offchannel
+        * queue. STATION (HS2.0) uses the auxiliary context of the FW,
+        * and hence needs to be sent on the aux queue
+        */
+       if (IEEE80211_SKB_CB(skb)->hw_queue == IWL_MVM_OFFCHANNEL_QUEUE &&
+           info->control.vif->type == NL80211_IFTYPE_STATION)
+               IEEE80211_SKB_CB(skb)->hw_queue = mvm->aux_queue;
+
        /*
         * If the interface on which frame is sent is the P2P_DEVICE
         * or an AP/GO interface use the broadcast station associated