aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/mwifiex/uap_txrx.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/mwifiex/uap_txrx.c')
-rw-r--r--drivers/net/wireless/mwifiex/uap_txrx.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/net/wireless/mwifiex/uap_txrx.c b/drivers/net/wireless/mwifiex/uap_txrx.c
index ec7309d096ab..be3a203a529b 100644
--- a/drivers/net/wireless/mwifiex/uap_txrx.c
+++ b/drivers/net/wireless/mwifiex/uap_txrx.c
@@ -266,6 +266,7 @@ int mwifiex_process_uap_rx_packet(struct mwifiex_private *priv,
266 struct rx_packet_hdr *rx_pkt_hdr; 266 struct rx_packet_hdr *rx_pkt_hdr;
267 u16 rx_pkt_type; 267 u16 rx_pkt_type;
268 u8 ta[ETH_ALEN], pkt_type; 268 u8 ta[ETH_ALEN], pkt_type;
269 unsigned long flags;
269 struct mwifiex_sta_node *node; 270 struct mwifiex_sta_node *node;
270 271
271 uap_rx_pd = (struct uap_rxpd *)(skb->data); 272 uap_rx_pd = (struct uap_rxpd *)(skb->data);
@@ -294,10 +295,12 @@ int mwifiex_process_uap_rx_packet(struct mwifiex_private *priv,
294 memcpy(ta, rx_pkt_hdr->eth803_hdr.h_source, ETH_ALEN); 295 memcpy(ta, rx_pkt_hdr->eth803_hdr.h_source, ETH_ALEN);
295 296
296 if (rx_pkt_type != PKT_TYPE_BAR && uap_rx_pd->priority < MAX_NUM_TID) { 297 if (rx_pkt_type != PKT_TYPE_BAR && uap_rx_pd->priority < MAX_NUM_TID) {
298 spin_lock_irqsave(&priv->sta_list_spinlock, flags);
297 node = mwifiex_get_sta_entry(priv, ta); 299 node = mwifiex_get_sta_entry(priv, ta);
298 if (node) 300 if (node)
299 node->rx_seq[uap_rx_pd->priority] = 301 node->rx_seq[uap_rx_pd->priority] =
300 le16_to_cpu(uap_rx_pd->seq_num); 302 le16_to_cpu(uap_rx_pd->seq_num);
303 spin_unlock_irqrestore(&priv->sta_list_spinlock, flags);
301 } 304 }
302 305
303 if (!priv->ap_11n_enabled || 306 if (!priv->ap_11n_enabled ||
@@ -370,10 +373,16 @@ void *mwifiex_process_uap_txpd(struct mwifiex_private *priv,
370 txpd->bss_num = priv->bss_num; 373 txpd->bss_num = priv->bss_num;
371 txpd->bss_type = priv->bss_type; 374 txpd->bss_type = priv->bss_type;
372 txpd->tx_pkt_length = cpu_to_le16((u16)(skb->len - len)); 375 txpd->tx_pkt_length = cpu_to_le16((u16)(skb->len - len));
373
374 txpd->priority = (u8)skb->priority; 376 txpd->priority = (u8)skb->priority;
377
375 txpd->pkt_delay_2ms = mwifiex_wmm_compute_drv_pkt_delay(priv, skb); 378 txpd->pkt_delay_2ms = mwifiex_wmm_compute_drv_pkt_delay(priv, skb);
376 379
380 if (tx_info->flags & MWIFIEX_BUF_FLAG_EAPOL_TX_STATUS ||
381 tx_info->flags & MWIFIEX_BUF_FLAG_ACTION_TX_STATUS) {
382 txpd->tx_token_id = tx_info->ack_frame_id;
383 txpd->flags |= MWIFIEX_TXPD_FLAGS_REQ_TX_STATUS;
384 }
385
377 if (txpd->priority < ARRAY_SIZE(priv->wmm.user_pri_pkt_tx_ctrl)) 386 if (txpd->priority < ARRAY_SIZE(priv->wmm.user_pri_pkt_tx_ctrl))
378 /* 387 /*
379 * Set the priority specific tx_control field, setting of 0 will 388 * Set the priority specific tx_control field, setting of 0 will