diff options
Diffstat (limited to 'drivers/net/wireless/mwifiex/uap_txrx.c')
-rw-r--r-- | drivers/net/wireless/mwifiex/uap_txrx.c | 11 |
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 |