|
@@ -1851,6 +1851,7 @@ mwl8k_txq_xmit(struct ieee80211_hw *hw,
|
|
|
bool start_ba_session = false;
|
|
|
bool mgmtframe = false;
|
|
|
struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)skb->data;
|
|
|
+ bool eapol_frame = false;
|
|
|
|
|
|
wh = (struct ieee80211_hdr *)skb->data;
|
|
|
if (ieee80211_is_data_qos(wh->frame_control))
|
|
@@ -1858,6 +1859,9 @@ mwl8k_txq_xmit(struct ieee80211_hw *hw,
|
|
|
else
|
|
|
qos = 0;
|
|
|
|
|
|
+ if (skb->protocol == cpu_to_be16(ETH_P_PAE))
|
|
|
+ eapol_frame = true;
|
|
|
+
|
|
|
if (ieee80211_is_mgmt(wh->frame_control))
|
|
|
mgmtframe = true;
|
|
|
|
|
@@ -1916,9 +1920,8 @@ mwl8k_txq_xmit(struct ieee80211_hw *hw,
|
|
|
|
|
|
txpriority = index;
|
|
|
|
|
|
- if (priv->ap_fw && sta && sta->ht_cap.ht_supported
|
|
|
- && skb->protocol != cpu_to_be16(ETH_P_PAE)
|
|
|
- && ieee80211_is_data_qos(wh->frame_control)) {
|
|
|
+ if (priv->ap_fw && sta && sta->ht_cap.ht_supported && !eapol_frame &&
|
|
|
+ ieee80211_is_data_qos(wh->frame_control)) {
|
|
|
tid = qos & 0xf;
|
|
|
mwl8k_tx_count_packet(sta, tid);
|
|
|
spin_lock(&priv->stream_lock);
|
|
@@ -2027,7 +2030,7 @@ mwl8k_txq_xmit(struct ieee80211_hw *hw,
|
|
|
else
|
|
|
tx->peer_id = 0;
|
|
|
|
|
|
- if (priv->ap_fw)
|
|
|
+ if (priv->ap_fw && ieee80211_is_data(wh->frame_control) && !eapol_frame)
|
|
|
tx->timestamp = cpu_to_le32(ioread32(priv->regs +
|
|
|
MWL8K_HW_TIMER_REGISTER));
|
|
|
|