|
@@ -3122,32 +3122,6 @@ void ath10k_mac_handle_tx_pause_vdev(struct ath10k *ar, u32 vdev_id,
|
|
|
spin_unlock_bh(&ar->htt.tx_lock);
|
|
|
}
|
|
|
|
|
|
-static u8 ath10k_tx_h_get_tid(struct ieee80211_hdr *hdr)
|
|
|
-{
|
|
|
- if (ieee80211_is_mgmt(hdr->frame_control))
|
|
|
- return HTT_DATA_TX_EXT_TID_MGMT;
|
|
|
-
|
|
|
- if (!ieee80211_is_data_qos(hdr->frame_control))
|
|
|
- return HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST;
|
|
|
-
|
|
|
- if (!is_unicast_ether_addr(ieee80211_get_DA(hdr)))
|
|
|
- return HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST;
|
|
|
-
|
|
|
- return ieee80211_get_qos_ctl(hdr)[0] & IEEE80211_QOS_CTL_TID_MASK;
|
|
|
-}
|
|
|
-
|
|
|
-static u8 ath10k_tx_h_get_vdev_id(struct ath10k *ar, struct ieee80211_vif *vif)
|
|
|
-{
|
|
|
- if (vif)
|
|
|
- return ath10k_vif_to_arvif(vif)->vdev_id;
|
|
|
-
|
|
|
- if (ar->monitor_started)
|
|
|
- return ar->monitor_vdev_id;
|
|
|
-
|
|
|
- ath10k_warn(ar, "failed to resolve vdev id\n");
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
static enum ath10k_hw_txrx_mode
|
|
|
ath10k_mac_tx_h_get_txmode(struct ath10k *ar,
|
|
|
struct ieee80211_vif *vif,
|
|
@@ -3244,7 +3218,7 @@ static void ath10k_tx_h_nwifi(struct ieee80211_hw *hw, struct sk_buff *skb)
|
|
|
*/
|
|
|
hdr = (void *)skb->data;
|
|
|
if (ieee80211_is_qos_nullfunc(hdr->frame_control))
|
|
|
- cb->htt.tid = HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST;
|
|
|
+ cb->flags &= ~ATH10K_SKB_F_QOS;
|
|
|
|
|
|
hdr->frame_control &= ~__cpu_to_le16(IEEE80211_STYPE_QOS_DATA);
|
|
|
}
|
|
@@ -3413,9 +3387,9 @@ void ath10k_offchan_tx_work(struct work_struct *work)
|
|
|
|
|
|
hdr = (struct ieee80211_hdr *)skb->data;
|
|
|
peer_addr = ieee80211_get_DA(hdr);
|
|
|
- vdev_id = ATH10K_SKB_CB(skb)->vdev_id;
|
|
|
|
|
|
spin_lock_bh(&ar->data_lock);
|
|
|
+ vdev_id = ar->scan.vdev_id;
|
|
|
peer = ath10k_peer_find(ar, vdev_id, peer_addr);
|
|
|
spin_unlock_bh(&ar->data_lock);
|
|
|
|
|
@@ -3692,8 +3666,10 @@ static void ath10k_tx(struct ieee80211_hw *hw,
|
|
|
if (ieee80211_is_mgmt(hdr->frame_control))
|
|
|
skb_cb->flags |= ATH10K_SKB_F_MGMT;
|
|
|
|
|
|
- skb_cb->htt.tid = ath10k_tx_h_get_tid(hdr);
|
|
|
- skb_cb->vdev_id = ath10k_tx_h_get_vdev_id(ar, vif);
|
|
|
+ if (ieee80211_is_data_qos(hdr->frame_control))
|
|
|
+ skb_cb->flags |= ATH10K_SKB_F_QOS;
|
|
|
+
|
|
|
+ skb_cb->vif = vif;
|
|
|
|
|
|
switch (txmode) {
|
|
|
case ATH10K_HW_TXRX_MGMT:
|
|
@@ -3714,10 +3690,6 @@ static void ath10k_tx(struct ieee80211_hw *hw,
|
|
|
}
|
|
|
|
|
|
if (info->flags & IEEE80211_TX_CTL_TX_OFFCHAN) {
|
|
|
- spin_lock_bh(&ar->data_lock);
|
|
|
- ATH10K_SKB_CB(skb)->vdev_id = ar->scan.vdev_id;
|
|
|
- spin_unlock_bh(&ar->data_lock);
|
|
|
-
|
|
|
if (!ath10k_mac_tx_frm_has_freq(ar)) {
|
|
|
ath10k_dbg(ar, ATH10K_DBG_MAC, "queued offchannel skb %p\n",
|
|
|
skb);
|