Lines Matching +full:tx +full:- +full:atten
1 // SPDX-License-Identifier: BSD-3-Clause-Clear
3 * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
4 * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
27 return ab->hw_params.hw_ops->rx_desc_get_hdr_status(desc); in ath11k_dp_rx_h_80211_hdr()
34 if (!ab->hw_params.hw_ops->rx_desc_encrypt_valid(desc)) in ath11k_dp_rx_h_mpdu_start_enctype()
37 return ab->hw_params.hw_ops->rx_desc_get_encrypt_type(desc); in ath11k_dp_rx_h_mpdu_start_enctype()
43 return ab->hw_params.hw_ops->rx_desc_get_decap_type(desc); in ath11k_dp_rx_h_msdu_start_decap_type()
50 return ab->hw_params.hw_ops->rx_desc_get_ldpc_support(desc); in ath11k_dp_rx_h_msdu_start_ldpc_support()
57 return ab->hw_params.hw_ops->rx_desc_get_mesh_ctl(desc); in ath11k_dp_rx_h_msdu_start_mesh_ctl_present()
64 return ab->hw_params.hw_ops->rx_desc_get_mpdu_seq_ctl_vld(desc); in ath11k_dp_rx_h_mpdu_start_seq_ctrl_valid()
70 return ab->hw_params.hw_ops->rx_desc_get_mpdu_fc_valid(desc); in ath11k_dp_rx_h_mpdu_start_fc_valid()
78 hdr = (struct ieee80211_hdr *)(skb->data + ab->hw_params.hal_desc_sz); in ath11k_dp_rx_h_mpdu_start_more_frags()
79 return ieee80211_has_morefrags(hdr->frame_control); in ath11k_dp_rx_h_mpdu_start_more_frags()
87 hdr = (struct ieee80211_hdr *)(skb->data + ab->hw_params.hal_desc_sz); in ath11k_dp_rx_h_mpdu_start_frag_no()
88 return le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_FRAG; in ath11k_dp_rx_h_mpdu_start_frag_no()
94 return ab->hw_params.hw_ops->rx_desc_get_mpdu_start_seq_no(desc); in ath11k_dp_rx_h_mpdu_start_seq_no()
100 return ab->hw_params.hw_ops->rx_desc_get_attention(desc); in ath11k_dp_rx_get_attention()
106 __le32_to_cpu(attn->info2)); in ath11k_dp_rx_h_attn_msdu_done()
112 __le32_to_cpu(attn->info1)); in ath11k_dp_rx_h_attn_l4_cksum_fail()
118 __le32_to_cpu(attn->info1)); in ath11k_dp_rx_h_attn_ip_cksum_fail()
124 __le32_to_cpu(attn->info2)) == in ath11k_dp_rx_h_attn_is_decrypted()
130 u32 info = __le32_to_cpu(attn->info1); in ath11k_dp_rx_h_attn_mpdu_err()
172 return ab->hw_params.hw_ops->rx_desc_get_msdu_len(desc); in ath11k_dp_rx_h_msdu_start_msdu_len()
178 return ab->hw_params.hw_ops->rx_desc_get_msdu_sgi(desc); in ath11k_dp_rx_h_msdu_start_sgi()
184 return ab->hw_params.hw_ops->rx_desc_get_msdu_rate_mcs(desc); in ath11k_dp_rx_h_msdu_start_rate_mcs()
190 return ab->hw_params.hw_ops->rx_desc_get_msdu_rx_bw(desc); in ath11k_dp_rx_h_msdu_start_rx_bw()
196 return ab->hw_params.hw_ops->rx_desc_get_msdu_freq(desc); in ath11k_dp_rx_h_msdu_start_freq()
202 return ab->hw_params.hw_ops->rx_desc_get_msdu_pkt_type(desc); in ath11k_dp_rx_h_msdu_start_pkt_type()
208 return hweight8(ab->hw_params.hw_ops->rx_desc_get_msdu_nss(desc)); in ath11k_dp_rx_h_msdu_start_nss()
214 return ab->hw_params.hw_ops->rx_desc_get_mpdu_tid(desc); in ath11k_dp_rx_h_mpdu_start_tid()
220 return ab->hw_params.hw_ops->rx_desc_get_mpdu_peer_id(desc); in ath11k_dp_rx_h_mpdu_start_peer_id()
226 return ab->hw_params.hw_ops->rx_desc_get_l3_pad_bytes(desc); in ath11k_dp_rx_h_msdu_end_l3pad()
232 return ab->hw_params.hw_ops->rx_desc_get_first_msdu(desc); in ath11k_dp_rx_h_msdu_end_first_msdu()
238 return ab->hw_params.hw_ops->rx_desc_get_last_msdu(desc); in ath11k_dp_rx_h_msdu_end_last_msdu()
245 ab->hw_params.hw_ops->rx_desc_copy_attn_end_tlv(fdesc, ldesc); in ath11k_dp_rx_desc_end_tlv_copy()
251 __le32_to_cpu(attn->info1)); in ath11k_dp_rxdesc_get_mpdulen_err()
259 rx_pkt_hdr = ab->hw_params.hw_ops->rx_desc_get_msdu_payload(rx_desc); in ath11k_dp_rxdesc_get_80211hdr()
269 tlv_tag = ab->hw_params.hw_ops->rx_desc_get_mpdu_start_tag(rx_desc); in ath11k_dp_rxdesc_mpdu_valid()
277 return ab->hw_params.hw_ops->rx_desc_get_mpdu_ppdu_id(rx_desc); in ath11k_dp_rxdesc_get_ppduid()
284 ab->hw_params.hw_ops->rx_desc_set_msdu_len(desc, len); in ath11k_dp_rxdesc_set_msdu_len()
294 __le32_to_cpu(attn->info1))); in ath11k_dp_rx_h_attn_is_mcbc()
300 return ab->hw_params.hw_ops->rx_desc_mac_addr2_valid(desc); in ath11k_dp_rxdesc_mac_addr2_valid()
306 return ab->hw_params.hw_ops->rx_desc_mpdu_start_addr2(desc); in ath11k_dp_rxdesc_mpdu_start_addr2()
314 for (i = 0; i < ab->hw_params.num_rxmda_per_pdev; i++) in ath11k_dp_service_mon_ring()
317 mod_timer(&ab->mon_reap_timer, jiffies + in ath11k_dp_service_mon_ring()
327 for (i = 0; i < ab->hw_params.num_rxmda_per_pdev; i++) in ath11k_dp_purge_mon_ring()
340 return -ETIMEDOUT; in ath11k_dp_purge_mon_ring()
358 req_entries = min(req_entries, rx_ring->bufs_max); in ath11k_dp_rxbufs_replenish()
360 srng = &ab->hal.srng_list[rx_ring->refill_buf_ring.ring_id]; in ath11k_dp_rxbufs_replenish()
362 spin_lock_bh(&srng->lock); in ath11k_dp_rxbufs_replenish()
367 if (!req_entries && (num_free > (rx_ring->bufs_max * 3) / 4)) in ath11k_dp_rxbufs_replenish()
379 if (!IS_ALIGNED((unsigned long)skb->data, in ath11k_dp_rxbufs_replenish()
382 PTR_ALIGN(skb->data, DP_RX_BUFFER_ALIGN_SIZE) - in ath11k_dp_rxbufs_replenish()
383 skb->data); in ath11k_dp_rxbufs_replenish()
386 paddr = dma_map_single(ab->dev, skb->data, in ath11k_dp_rxbufs_replenish()
387 skb->len + skb_tailroom(skb), in ath11k_dp_rxbufs_replenish()
389 if (dma_mapping_error(ab->dev, paddr)) in ath11k_dp_rxbufs_replenish()
392 spin_lock_bh(&rx_ring->idr_lock); in ath11k_dp_rxbufs_replenish()
393 buf_id = idr_alloc(&rx_ring->bufs_idr, skb, 1, in ath11k_dp_rxbufs_replenish()
394 (rx_ring->bufs_max * 3) + 1, GFP_ATOMIC); in ath11k_dp_rxbufs_replenish()
395 spin_unlock_bh(&rx_ring->idr_lock); in ath11k_dp_rxbufs_replenish()
403 ATH11K_SKB_RXCB(skb)->paddr = paddr; in ath11k_dp_rxbufs_replenish()
408 num_remain--; in ath11k_dp_rxbufs_replenish()
415 spin_unlock_bh(&srng->lock); in ath11k_dp_rxbufs_replenish()
417 return req_entries - num_remain; in ath11k_dp_rxbufs_replenish()
420 spin_lock_bh(&rx_ring->idr_lock); in ath11k_dp_rxbufs_replenish()
421 idr_remove(&rx_ring->bufs_idr, buf_id); in ath11k_dp_rxbufs_replenish()
422 spin_unlock_bh(&rx_ring->idr_lock); in ath11k_dp_rxbufs_replenish()
424 dma_unmap_single(ab->dev, paddr, skb->len + skb_tailroom(skb), in ath11k_dp_rxbufs_replenish()
431 spin_unlock_bh(&srng->lock); in ath11k_dp_rxbufs_replenish()
433 return req_entries - num_remain; in ath11k_dp_rxbufs_replenish()
442 spin_lock_bh(&rx_ring->idr_lock); in ath11k_dp_rxdma_buf_ring_free()
443 idr_for_each_entry(&rx_ring->bufs_idr, skb, buf_id) { in ath11k_dp_rxdma_buf_ring_free()
444 idr_remove(&rx_ring->bufs_idr, buf_id); in ath11k_dp_rxdma_buf_ring_free()
448 dma_unmap_single(ar->ab->dev, ATH11K_SKB_RXCB(skb)->paddr, in ath11k_dp_rxdma_buf_ring_free()
449 skb->len + skb_tailroom(skb), DMA_FROM_DEVICE); in ath11k_dp_rxdma_buf_ring_free()
453 idr_destroy(&rx_ring->bufs_idr); in ath11k_dp_rxdma_buf_ring_free()
454 spin_unlock_bh(&rx_ring->idr_lock); in ath11k_dp_rxdma_buf_ring_free()
461 struct ath11k_pdev_dp *dp = &ar->dp; in ath11k_dp_rxdma_pdev_buf_free()
462 struct ath11k_base *ab = ar->ab; in ath11k_dp_rxdma_pdev_buf_free()
463 struct dp_rxdma_ring *rx_ring = &dp->rx_refill_buf_ring; in ath11k_dp_rxdma_pdev_buf_free()
468 rx_ring = &dp->rxdma_mon_buf_ring; in ath11k_dp_rxdma_pdev_buf_free()
471 for (i = 0; i < ab->hw_params.num_rxmda_per_pdev; i++) { in ath11k_dp_rxdma_pdev_buf_free()
472 rx_ring = &dp->rx_mon_status_refill_ring[i]; in ath11k_dp_rxdma_pdev_buf_free()
483 struct ath11k_pdev_dp *dp = &ar->dp; in ath11k_dp_rxdma_ring_buf_setup()
486 num_entries = rx_ring->refill_buf_ring.size / in ath11k_dp_rxdma_ring_buf_setup()
487 ath11k_hal_srng_get_entrysize(ar->ab, ringtype); in ath11k_dp_rxdma_ring_buf_setup()
489 rx_ring->bufs_max = num_entries; in ath11k_dp_rxdma_ring_buf_setup()
490 ath11k_dp_rxbufs_replenish(ar->ab, dp->mac_id, rx_ring, num_entries, in ath11k_dp_rxdma_ring_buf_setup()
491 ar->ab->hw_params.hal_params->rx_buf_rbm); in ath11k_dp_rxdma_ring_buf_setup()
497 struct ath11k_pdev_dp *dp = &ar->dp; in ath11k_dp_rxdma_pdev_buf_setup()
498 struct ath11k_base *ab = ar->ab; in ath11k_dp_rxdma_pdev_buf_setup()
499 struct dp_rxdma_ring *rx_ring = &dp->rx_refill_buf_ring; in ath11k_dp_rxdma_pdev_buf_setup()
504 if (ar->ab->hw_params.rxdma1_enable) { in ath11k_dp_rxdma_pdev_buf_setup()
505 rx_ring = &dp->rxdma_mon_buf_ring; in ath11k_dp_rxdma_pdev_buf_setup()
509 for (i = 0; i < ab->hw_params.num_rxmda_per_pdev; i++) { in ath11k_dp_rxdma_pdev_buf_setup()
510 rx_ring = &dp->rx_mon_status_refill_ring[i]; in ath11k_dp_rxdma_pdev_buf_setup()
519 struct ath11k_pdev_dp *dp = &ar->dp; in ath11k_dp_rx_pdev_srng_free()
520 struct ath11k_base *ab = ar->ab; in ath11k_dp_rx_pdev_srng_free()
523 ath11k_dp_srng_cleanup(ab, &dp->rx_refill_buf_ring.refill_buf_ring); in ath11k_dp_rx_pdev_srng_free()
525 for (i = 0; i < ab->hw_params.num_rxmda_per_pdev; i++) { in ath11k_dp_rx_pdev_srng_free()
526 if (ab->hw_params.rx_mac_buf_ring) in ath11k_dp_rx_pdev_srng_free()
527 ath11k_dp_srng_cleanup(ab, &dp->rx_mac_buf_ring[i]); in ath11k_dp_rx_pdev_srng_free()
529 ath11k_dp_srng_cleanup(ab, &dp->rxdma_err_dst_ring[i]); in ath11k_dp_rx_pdev_srng_free()
531 &dp->rx_mon_status_refill_ring[i].refill_buf_ring); in ath11k_dp_rx_pdev_srng_free()
534 ath11k_dp_srng_cleanup(ab, &dp->rxdma_mon_buf_ring.refill_buf_ring); in ath11k_dp_rx_pdev_srng_free()
539 struct ath11k_dp *dp = &ab->dp; in ath11k_dp_pdev_reo_cleanup()
543 ath11k_dp_srng_cleanup(ab, &dp->reo_dst_ring[i]); in ath11k_dp_pdev_reo_cleanup()
548 struct ath11k_dp *dp = &ab->dp; in ath11k_dp_pdev_reo_setup()
553 ret = ath11k_dp_srng_setup(ab, &dp->reo_dst_ring[i], in ath11k_dp_pdev_reo_setup()
572 struct ath11k_pdev_dp *dp = &ar->dp; in ath11k_dp_rx_pdev_srng_alloc()
573 struct ath11k_base *ab = ar->ab; in ath11k_dp_rx_pdev_srng_alloc()
578 ret = ath11k_dp_srng_setup(ar->ab, in ath11k_dp_rx_pdev_srng_alloc()
579 &dp->rx_refill_buf_ring.refill_buf_ring, in ath11k_dp_rx_pdev_srng_alloc()
581 dp->mac_id, DP_RXDMA_BUF_RING_SIZE); in ath11k_dp_rx_pdev_srng_alloc()
583 ath11k_warn(ar->ab, "failed to setup rx_refill_buf_ring\n"); in ath11k_dp_rx_pdev_srng_alloc()
587 if (ar->ab->hw_params.rx_mac_buf_ring) { in ath11k_dp_rx_pdev_srng_alloc()
588 for (i = 0; i < ab->hw_params.num_rxmda_per_pdev; i++) { in ath11k_dp_rx_pdev_srng_alloc()
589 ret = ath11k_dp_srng_setup(ar->ab, in ath11k_dp_rx_pdev_srng_alloc()
590 &dp->rx_mac_buf_ring[i], in ath11k_dp_rx_pdev_srng_alloc()
592 dp->mac_id + i, 1024); in ath11k_dp_rx_pdev_srng_alloc()
594 ath11k_warn(ar->ab, "failed to setup rx_mac_buf_ring %d\n", in ath11k_dp_rx_pdev_srng_alloc()
601 for (i = 0; i < ab->hw_params.num_rxmda_per_pdev; i++) { in ath11k_dp_rx_pdev_srng_alloc()
602 ret = ath11k_dp_srng_setup(ar->ab, &dp->rxdma_err_dst_ring[i], in ath11k_dp_rx_pdev_srng_alloc()
603 HAL_RXDMA_DST, 0, dp->mac_id + i, in ath11k_dp_rx_pdev_srng_alloc()
606 ath11k_warn(ar->ab, "failed to setup rxdma_err_dst_ring %d\n", i); in ath11k_dp_rx_pdev_srng_alloc()
611 for (i = 0; i < ab->hw_params.num_rxmda_per_pdev; i++) { in ath11k_dp_rx_pdev_srng_alloc()
612 srng = &dp->rx_mon_status_refill_ring[i].refill_buf_ring; in ath11k_dp_rx_pdev_srng_alloc()
613 ret = ath11k_dp_srng_setup(ar->ab, in ath11k_dp_rx_pdev_srng_alloc()
615 HAL_RXDMA_MONITOR_STATUS, 0, dp->mac_id + i, in ath11k_dp_rx_pdev_srng_alloc()
618 ath11k_warn(ar->ab, in ath11k_dp_rx_pdev_srng_alloc()
629 if (!ar->ab->hw_params.rxdma1_enable) { in ath11k_dp_rx_pdev_srng_alloc()
631 timer_setup(&ar->ab->mon_reap_timer, in ath11k_dp_rx_pdev_srng_alloc()
636 ret = ath11k_dp_srng_setup(ar->ab, in ath11k_dp_rx_pdev_srng_alloc()
637 &dp->rxdma_mon_buf_ring.refill_buf_ring, in ath11k_dp_rx_pdev_srng_alloc()
638 HAL_RXDMA_MONITOR_BUF, 0, dp->mac_id, in ath11k_dp_rx_pdev_srng_alloc()
641 ath11k_warn(ar->ab, in ath11k_dp_rx_pdev_srng_alloc()
646 ret = ath11k_dp_srng_setup(ar->ab, &dp->rxdma_mon_dst_ring, in ath11k_dp_rx_pdev_srng_alloc()
647 HAL_RXDMA_MONITOR_DST, 0, dp->mac_id, in ath11k_dp_rx_pdev_srng_alloc()
650 ath11k_warn(ar->ab, in ath11k_dp_rx_pdev_srng_alloc()
655 ret = ath11k_dp_srng_setup(ar->ab, &dp->rxdma_mon_desc_ring, in ath11k_dp_rx_pdev_srng_alloc()
656 HAL_RXDMA_MONITOR_DESC, 0, dp->mac_id, in ath11k_dp_rx_pdev_srng_alloc()
659 ath11k_warn(ar->ab, in ath11k_dp_rx_pdev_srng_alloc()
669 struct ath11k_dp *dp = &ab->dp; in ath11k_dp_reo_cmd_list_cleanup()
674 spin_lock_bh(&dp->reo_cmd_lock); in ath11k_dp_reo_cmd_list_cleanup()
675 list_for_each_entry_safe(cmd, tmp, &dp->reo_cmd_list, list) { in ath11k_dp_reo_cmd_list_cleanup()
676 list_del(&cmd->list); in ath11k_dp_reo_cmd_list_cleanup()
677 rx_tid = &cmd->data; in ath11k_dp_reo_cmd_list_cleanup()
678 if (rx_tid->vaddr) { in ath11k_dp_reo_cmd_list_cleanup()
679 dma_unmap_single(ab->dev, rx_tid->paddr, in ath11k_dp_reo_cmd_list_cleanup()
680 rx_tid->size, DMA_BIDIRECTIONAL); in ath11k_dp_reo_cmd_list_cleanup()
681 kfree(rx_tid->vaddr); in ath11k_dp_reo_cmd_list_cleanup()
682 rx_tid->vaddr = NULL; in ath11k_dp_reo_cmd_list_cleanup()
688 &dp->reo_cmd_cache_flush_list, list) { in ath11k_dp_reo_cmd_list_cleanup()
689 list_del(&cmd_cache->list); in ath11k_dp_reo_cmd_list_cleanup()
690 dp->reo_cmd_cache_flush_count--; in ath11k_dp_reo_cmd_list_cleanup()
691 rx_tid = &cmd_cache->data; in ath11k_dp_reo_cmd_list_cleanup()
692 if (rx_tid->vaddr) { in ath11k_dp_reo_cmd_list_cleanup()
693 dma_unmap_single(ab->dev, rx_tid->paddr, in ath11k_dp_reo_cmd_list_cleanup()
694 rx_tid->size, DMA_BIDIRECTIONAL); in ath11k_dp_reo_cmd_list_cleanup()
695 kfree(rx_tid->vaddr); in ath11k_dp_reo_cmd_list_cleanup()
696 rx_tid->vaddr = NULL; in ath11k_dp_reo_cmd_list_cleanup()
700 spin_unlock_bh(&dp->reo_cmd_lock); in ath11k_dp_reo_cmd_list_cleanup()
709 ath11k_warn(dp->ab, "failed to flush rx tid hw desc, tid %d status %d\n", in ath11k_dp_reo_cmd_free()
710 rx_tid->tid, status); in ath11k_dp_reo_cmd_free()
711 if (rx_tid->vaddr) { in ath11k_dp_reo_cmd_free()
712 dma_unmap_single(dp->ab->dev, rx_tid->paddr, rx_tid->size, in ath11k_dp_reo_cmd_free()
714 kfree(rx_tid->vaddr); in ath11k_dp_reo_cmd_free()
715 rx_tid->vaddr = NULL; in ath11k_dp_reo_cmd_free()
726 tot_desc_sz = rx_tid->size; in ath11k_dp_reo_cache_flush()
730 tot_desc_sz -= desc_sz; in ath11k_dp_reo_cache_flush()
731 cmd.addr_lo = lower_32_bits(rx_tid->paddr + tot_desc_sz); in ath11k_dp_reo_cache_flush()
732 cmd.addr_hi = upper_32_bits(rx_tid->paddr); in ath11k_dp_reo_cache_flush()
739 rx_tid->tid, ret); in ath11k_dp_reo_cache_flush()
743 cmd.addr_lo = lower_32_bits(rx_tid->paddr); in ath11k_dp_reo_cache_flush()
744 cmd.addr_hi = upper_32_bits(rx_tid->paddr); in ath11k_dp_reo_cache_flush()
751 rx_tid->tid, ret); in ath11k_dp_reo_cache_flush()
752 dma_unmap_single(ab->dev, rx_tid->paddr, rx_tid->size, in ath11k_dp_reo_cache_flush()
754 kfree(rx_tid->vaddr); in ath11k_dp_reo_cache_flush()
755 rx_tid->vaddr = NULL; in ath11k_dp_reo_cache_flush()
762 struct ath11k_base *ab = dp->ab; in ath11k_dp_rx_tid_del_func()
771 rx_tid->tid, status); in ath11k_dp_rx_tid_del_func()
779 elem->ts = jiffies; in ath11k_dp_rx_tid_del_func()
780 memcpy(&elem->data, rx_tid, sizeof(*rx_tid)); in ath11k_dp_rx_tid_del_func()
782 spin_lock_bh(&dp->reo_cmd_lock); in ath11k_dp_rx_tid_del_func()
783 list_add_tail(&elem->list, &dp->reo_cmd_cache_flush_list); in ath11k_dp_rx_tid_del_func()
784 dp->reo_cmd_cache_flush_count++; in ath11k_dp_rx_tid_del_func()
787 list_for_each_entry_safe(elem, tmp, &dp->reo_cmd_cache_flush_list, in ath11k_dp_rx_tid_del_func()
789 if (dp->reo_cmd_cache_flush_count > DP_REO_DESC_FREE_THRESHOLD || in ath11k_dp_rx_tid_del_func()
790 time_after(jiffies, elem->ts + in ath11k_dp_rx_tid_del_func()
792 list_del(&elem->list); in ath11k_dp_rx_tid_del_func()
793 dp->reo_cmd_cache_flush_count--; in ath11k_dp_rx_tid_del_func()
794 spin_unlock_bh(&dp->reo_cmd_lock); in ath11k_dp_rx_tid_del_func()
796 ath11k_dp_reo_cache_flush(ab, &elem->data); in ath11k_dp_rx_tid_del_func()
798 spin_lock_bh(&dp->reo_cmd_lock); in ath11k_dp_rx_tid_del_func()
801 spin_unlock_bh(&dp->reo_cmd_lock); in ath11k_dp_rx_tid_del_func()
805 dma_unmap_single(ab->dev, rx_tid->paddr, rx_tid->size, in ath11k_dp_rx_tid_del_func()
807 kfree(rx_tid->vaddr); in ath11k_dp_rx_tid_del_func()
808 rx_tid->vaddr = NULL; in ath11k_dp_rx_tid_del_func()
815 struct dp_rx_tid *rx_tid = &peer->rx_tid[tid]; in ath11k_peer_rx_tid_delete()
818 if (!rx_tid->active) in ath11k_peer_rx_tid_delete()
821 rx_tid->active = false; in ath11k_peer_rx_tid_delete()
824 cmd.addr_lo = lower_32_bits(rx_tid->paddr); in ath11k_peer_rx_tid_delete()
825 cmd.addr_hi = upper_32_bits(rx_tid->paddr); in ath11k_peer_rx_tid_delete()
827 ret = ath11k_dp_tx_send_reo_cmd(ar->ab, rx_tid, in ath11k_peer_rx_tid_delete()
831 if (ret != -ESHUTDOWN) in ath11k_peer_rx_tid_delete()
832 ath11k_err(ar->ab, "failed to send HAL_REO_CMD_UPDATE_RX_QUEUE cmd, tid %d (%d)\n", in ath11k_peer_rx_tid_delete()
834 dma_unmap_single(ar->ab->dev, rx_tid->paddr, rx_tid->size, in ath11k_peer_rx_tid_delete()
836 kfree(rx_tid->vaddr); in ath11k_peer_rx_tid_delete()
837 rx_tid->vaddr = NULL; in ath11k_peer_rx_tid_delete()
840 rx_tid->paddr = 0; in ath11k_peer_rx_tid_delete()
841 rx_tid->size = 0; in ath11k_peer_rx_tid_delete()
848 struct ath11k_dp *dp = &ab->dp; in ath11k_dp_rx_link_desc_return()
853 srng = &ab->hal.srng_list[dp->wbm_desc_rel_ring.ring_id]; in ath11k_dp_rx_link_desc_return()
855 spin_lock_bh(&srng->lock); in ath11k_dp_rx_link_desc_return()
861 ret = -ENOBUFS; in ath11k_dp_rx_link_desc_return()
871 spin_unlock_bh(&srng->lock); in ath11k_dp_rx_link_desc_return()
878 struct ath11k_base *ab = rx_tid->ab; in ath11k_dp_rx_frags_cleanup()
880 lockdep_assert_held(&ab->base_lock); in ath11k_dp_rx_frags_cleanup()
882 if (rx_tid->dst_ring_desc) { in ath11k_dp_rx_frags_cleanup()
884 ath11k_dp_rx_link_desc_return(ab, (u32 *)rx_tid->dst_ring_desc, in ath11k_dp_rx_frags_cleanup()
886 kfree(rx_tid->dst_ring_desc); in ath11k_dp_rx_frags_cleanup()
887 rx_tid->dst_ring_desc = NULL; in ath11k_dp_rx_frags_cleanup()
890 rx_tid->cur_sn = 0; in ath11k_dp_rx_frags_cleanup()
891 rx_tid->last_frag_no = 0; in ath11k_dp_rx_frags_cleanup()
892 rx_tid->rx_frag_bitmap = 0; in ath11k_dp_rx_frags_cleanup()
893 __skb_queue_purge(&rx_tid->rx_frags); in ath11k_dp_rx_frags_cleanup()
901 lockdep_assert_held(&ar->ab->base_lock); in ath11k_peer_frags_flush()
904 rx_tid = &peer->rx_tid[i]; in ath11k_peer_frags_flush()
906 spin_unlock_bh(&ar->ab->base_lock); in ath11k_peer_frags_flush()
907 del_timer_sync(&rx_tid->frag_timer); in ath11k_peer_frags_flush()
908 spin_lock_bh(&ar->ab->base_lock); in ath11k_peer_frags_flush()
919 lockdep_assert_held(&ar->ab->base_lock); in ath11k_peer_rx_tid_cleanup()
922 rx_tid = &peer->rx_tid[i]; in ath11k_peer_rx_tid_cleanup()
927 spin_unlock_bh(&ar->ab->base_lock); in ath11k_peer_rx_tid_cleanup()
928 del_timer_sync(&rx_tid->frag_timer); in ath11k_peer_rx_tid_cleanup()
929 spin_lock_bh(&ar->ab->base_lock); in ath11k_peer_rx_tid_cleanup()
942 cmd.addr_lo = lower_32_bits(rx_tid->paddr); in ath11k_peer_rx_tid_reo_update()
943 cmd.addr_hi = upper_32_bits(rx_tid->paddr); in ath11k_peer_rx_tid_reo_update()
953 ret = ath11k_dp_tx_send_reo_cmd(ar->ab, rx_tid, in ath11k_peer_rx_tid_reo_update()
957 ath11k_warn(ar->ab, "failed to update rx tid queue, tid %d (%d)\n", in ath11k_peer_rx_tid_reo_update()
958 rx_tid->tid, ret); in ath11k_peer_rx_tid_reo_update()
962 rx_tid->ba_win_sz = ba_win_sz; in ath11k_peer_rx_tid_reo_update()
973 spin_lock_bh(&ab->base_lock); in ath11k_dp_rx_tid_mem_free()
981 rx_tid = &peer->rx_tid[tid]; in ath11k_dp_rx_tid_mem_free()
982 if (!rx_tid->active) in ath11k_dp_rx_tid_mem_free()
985 dma_unmap_single(ab->dev, rx_tid->paddr, rx_tid->size, in ath11k_dp_rx_tid_mem_free()
987 kfree(rx_tid->vaddr); in ath11k_dp_rx_tid_mem_free()
988 rx_tid->vaddr = NULL; in ath11k_dp_rx_tid_mem_free()
990 rx_tid->active = false; in ath11k_dp_rx_tid_mem_free()
993 spin_unlock_bh(&ab->base_lock); in ath11k_dp_rx_tid_mem_free()
1000 struct ath11k_base *ab = ar->ab; in ath11k_peer_rx_tid_setup()
1009 spin_lock_bh(&ab->base_lock); in ath11k_peer_rx_tid_setup()
1015 spin_unlock_bh(&ab->base_lock); in ath11k_peer_rx_tid_setup()
1016 return -ENOENT; in ath11k_peer_rx_tid_setup()
1019 rx_tid = &peer->rx_tid[tid]; in ath11k_peer_rx_tid_setup()
1021 if (rx_tid->active) { in ath11k_peer_rx_tid_setup()
1022 paddr = rx_tid->paddr; in ath11k_peer_rx_tid_setup()
1025 spin_unlock_bh(&ab->base_lock); in ath11k_peer_rx_tid_setup()
1041 rx_tid->tid = tid; in ath11k_peer_rx_tid_setup()
1043 rx_tid->ba_win_sz = ba_win_sz; in ath11k_peer_rx_tid_setup()
1053 vaddr = kzalloc(hw_desc_sz + HAL_LINK_DESC_ALIGN - 1, GFP_ATOMIC); in ath11k_peer_rx_tid_setup()
1055 spin_unlock_bh(&ab->base_lock); in ath11k_peer_rx_tid_setup()
1056 return -ENOMEM; in ath11k_peer_rx_tid_setup()
1064 paddr = dma_map_single(ab->dev, addr_aligned, hw_desc_sz, in ath11k_peer_rx_tid_setup()
1067 ret = dma_mapping_error(ab->dev, paddr); in ath11k_peer_rx_tid_setup()
1069 spin_unlock_bh(&ab->base_lock); in ath11k_peer_rx_tid_setup()
1075 rx_tid->vaddr = vaddr; in ath11k_peer_rx_tid_setup()
1076 rx_tid->paddr = paddr; in ath11k_peer_rx_tid_setup()
1077 rx_tid->size = hw_desc_sz; in ath11k_peer_rx_tid_setup()
1078 rx_tid->active = true; in ath11k_peer_rx_tid_setup()
1080 spin_unlock_bh(&ab->base_lock); in ath11k_peer_rx_tid_setup()
1085 ath11k_warn(ar->ab, "failed to setup rx reorder queue for peer %pM tid %d: %d\n", in ath11k_peer_rx_tid_setup()
1093 kfree(rx_tid->vaddr); in ath11k_peer_rx_tid_setup()
1094 rx_tid->vaddr = NULL; in ath11k_peer_rx_tid_setup()
1102 struct ath11k_base *ab = ar->ab; in ath11k_dp_rx_ampdu_start()
1103 struct ath11k_sta *arsta = (void *)params->sta->drv_priv; in ath11k_dp_rx_ampdu_start()
1104 int vdev_id = arsta->arvif->vdev_id; in ath11k_dp_rx_ampdu_start()
1107 ret = ath11k_peer_rx_tid_setup(ar, params->sta->addr, vdev_id, in ath11k_dp_rx_ampdu_start()
1108 params->tid, params->buf_size, in ath11k_dp_rx_ampdu_start()
1109 params->ssn, arsta->pn_type); in ath11k_dp_rx_ampdu_start()
1119 struct ath11k_base *ab = ar->ab; in ath11k_dp_rx_ampdu_stop()
1121 struct ath11k_sta *arsta = (void *)params->sta->drv_priv; in ath11k_dp_rx_ampdu_stop()
1122 int vdev_id = arsta->arvif->vdev_id; in ath11k_dp_rx_ampdu_stop()
1127 spin_lock_bh(&ab->base_lock); in ath11k_dp_rx_ampdu_stop()
1129 peer = ath11k_peer_find(ab, vdev_id, params->sta->addr); in ath11k_dp_rx_ampdu_stop()
1132 spin_unlock_bh(&ab->base_lock); in ath11k_dp_rx_ampdu_stop()
1133 return -ENOENT; in ath11k_dp_rx_ampdu_stop()
1136 paddr = peer->rx_tid[params->tid].paddr; in ath11k_dp_rx_ampdu_stop()
1137 active = peer->rx_tid[params->tid].active; in ath11k_dp_rx_ampdu_stop()
1140 spin_unlock_bh(&ab->base_lock); in ath11k_dp_rx_ampdu_stop()
1144 ret = ath11k_peer_rx_tid_reo_update(ar, peer, peer->rx_tid, 1, 0, false); in ath11k_dp_rx_ampdu_stop()
1145 spin_unlock_bh(&ab->base_lock); in ath11k_dp_rx_ampdu_stop()
1148 params->tid, ret); in ath11k_dp_rx_ampdu_stop()
1153 params->sta->addr, paddr, in ath11k_dp_rx_ampdu_stop()
1154 params->tid, 1, 1); in ath11k_dp_rx_ampdu_stop()
1167 struct ath11k *ar = arvif->ar; in ath11k_dp_peer_rx_pn_replay_config()
1168 struct ath11k_base *ab = ar->ab; in ath11k_dp_peer_rx_pn_replay_config()
1179 if (!(key->flags & IEEE80211_KEY_FLAG_PAIRWISE)) in ath11k_dp_peer_rx_pn_replay_config()
1189 switch (key->cipher) { in ath11k_dp_peer_rx_pn_replay_config()
1204 spin_lock_bh(&ab->base_lock); in ath11k_dp_peer_rx_pn_replay_config()
1206 peer = ath11k_peer_find(ab, arvif->vdev_id, peer_addr); in ath11k_dp_peer_rx_pn_replay_config()
1209 spin_unlock_bh(&ab->base_lock); in ath11k_dp_peer_rx_pn_replay_config()
1210 return -ENOENT; in ath11k_dp_peer_rx_pn_replay_config()
1214 rx_tid = &peer->rx_tid[tid]; in ath11k_dp_peer_rx_pn_replay_config()
1215 if (!rx_tid->active) in ath11k_dp_peer_rx_pn_replay_config()
1217 cmd.addr_lo = lower_32_bits(rx_tid->paddr); in ath11k_dp_peer_rx_pn_replay_config()
1218 cmd.addr_hi = upper_32_bits(rx_tid->paddr); in ath11k_dp_peer_rx_pn_replay_config()
1229 spin_unlock_bh(&ab->base_lock); in ath11k_dp_peer_rx_pn_replay_config()
1239 for (i = 0; i < HTT_PPDU_STATS_MAX_USERS - 1; i++) { in ath11k_get_ppdu_user_index()
1240 if (ppdu_stats->user_stats[i].is_valid_peer_id) { in ath11k_get_ppdu_user_index()
1241 if (peer_id == ppdu_stats->user_stats[i].peer_id) in ath11k_get_ppdu_user_index()
1248 return -EINVAL; in ath11k_get_ppdu_user_index()
1267 return -EINVAL; in ath11k_htt_tlv_ppdu_stats_parse()
1269 memcpy((void *)&ppdu_info->ppdu_stats.common, ptr, in ath11k_htt_tlv_ppdu_stats_parse()
1276 return -EINVAL; in ath11k_htt_tlv_ppdu_stats_parse()
1279 peer_id = ((struct htt_ppdu_stats_user_rate *)ptr)->sw_peer_id; in ath11k_htt_tlv_ppdu_stats_parse()
1280 cur_user = ath11k_get_ppdu_user_index(&ppdu_info->ppdu_stats, in ath11k_htt_tlv_ppdu_stats_parse()
1283 return -EINVAL; in ath11k_htt_tlv_ppdu_stats_parse()
1284 user_stats = &ppdu_info->ppdu_stats.user_stats[cur_user]; in ath11k_htt_tlv_ppdu_stats_parse()
1285 user_stats->peer_id = peer_id; in ath11k_htt_tlv_ppdu_stats_parse()
1286 user_stats->is_valid_peer_id = true; in ath11k_htt_tlv_ppdu_stats_parse()
1287 memcpy((void *)&user_stats->rate, ptr, in ath11k_htt_tlv_ppdu_stats_parse()
1289 user_stats->tlv_flags |= BIT(tag); in ath11k_htt_tlv_ppdu_stats_parse()
1295 return -EINVAL; in ath11k_htt_tlv_ppdu_stats_parse()
1298 peer_id = ((struct htt_ppdu_stats_usr_cmpltn_cmn *)ptr)->sw_peer_id; in ath11k_htt_tlv_ppdu_stats_parse()
1299 cur_user = ath11k_get_ppdu_user_index(&ppdu_info->ppdu_stats, in ath11k_htt_tlv_ppdu_stats_parse()
1302 return -EINVAL; in ath11k_htt_tlv_ppdu_stats_parse()
1303 user_stats = &ppdu_info->ppdu_stats.user_stats[cur_user]; in ath11k_htt_tlv_ppdu_stats_parse()
1304 user_stats->peer_id = peer_id; in ath11k_htt_tlv_ppdu_stats_parse()
1305 user_stats->is_valid_peer_id = true; in ath11k_htt_tlv_ppdu_stats_parse()
1306 memcpy((void *)&user_stats->cmpltn_cmn, ptr, in ath11k_htt_tlv_ppdu_stats_parse()
1308 user_stats->tlv_flags |= BIT(tag); in ath11k_htt_tlv_ppdu_stats_parse()
1315 return -EINVAL; in ath11k_htt_tlv_ppdu_stats_parse()
1319 ((struct htt_ppdu_stats_usr_cmpltn_ack_ba_status *)ptr)->sw_peer_id; in ath11k_htt_tlv_ppdu_stats_parse()
1320 cur_user = ath11k_get_ppdu_user_index(&ppdu_info->ppdu_stats, in ath11k_htt_tlv_ppdu_stats_parse()
1323 return -EINVAL; in ath11k_htt_tlv_ppdu_stats_parse()
1324 user_stats = &ppdu_info->ppdu_stats.user_stats[cur_user]; in ath11k_htt_tlv_ppdu_stats_parse()
1325 user_stats->peer_id = peer_id; in ath11k_htt_tlv_ppdu_stats_parse()
1326 user_stats->is_valid_peer_id = true; in ath11k_htt_tlv_ppdu_stats_parse()
1327 memcpy((void *)&user_stats->ack_ba, ptr, in ath11k_htt_tlv_ppdu_stats_parse()
1329 user_stats->tlv_flags |= BIT(tag); in ath11k_htt_tlv_ppdu_stats_parse()
1343 int ret = -EINVAL; in ath11k_dp_htt_tlv_iter()
1348 ptr - begin, len, sizeof(*tlv)); in ath11k_dp_htt_tlv_iter()
1349 return -EINVAL; in ath11k_dp_htt_tlv_iter()
1352 tlv_tag = FIELD_GET(HTT_TLV_TAG, tlv->header); in ath11k_dp_htt_tlv_iter()
1353 tlv_len = FIELD_GET(HTT_TLV_LEN, tlv->header); in ath11k_dp_htt_tlv_iter()
1355 len -= sizeof(*tlv); in ath11k_dp_htt_tlv_iter()
1359 tlv_tag, ptr - begin, len, tlv_len); in ath11k_dp_htt_tlv_iter()
1360 return -EINVAL; in ath11k_dp_htt_tlv_iter()
1363 if (ret == -ENOMEM) in ath11k_dp_htt_tlv_iter()
1367 len -= tlv_len; in ath11k_dp_htt_tlv_iter()
1376 struct ath11k_base *ab = ar->ab; in ath11k_update_per_peer_tx_stats()
1381 struct ath11k_per_peer_tx_stats *peer_stats = &ar->peer_tx_stats; in ath11k_update_per_peer_tx_stats()
1382 struct htt_ppdu_user_stats *usr_stats = &ppdu_stats->user_stats[user]; in ath11k_update_per_peer_tx_stats()
1383 struct htt_ppdu_stats_common *common = &ppdu_stats->common; in ath11k_update_per_peer_tx_stats()
1395 if (!(usr_stats->tlv_flags & BIT(HTT_PPDU_STATS_TAG_USR_RATE))) in ath11k_update_per_peer_tx_stats()
1398 if (usr_stats->tlv_flags & BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_COMMON)) in ath11k_update_per_peer_tx_stats()
1400 HTT_USR_CMPLTN_IS_AMPDU(usr_stats->cmpltn_cmn.flags); in ath11k_update_per_peer_tx_stats()
1402 if (usr_stats->tlv_flags & in ath11k_update_per_peer_tx_stats()
1404 succ_bytes = usr_stats->ack_ba.success_bytes; in ath11k_update_per_peer_tx_stats()
1406 usr_stats->ack_ba.info); in ath11k_update_per_peer_tx_stats()
1408 usr_stats->ack_ba.info); in ath11k_update_per_peer_tx_stats()
1411 if (common->fes_duration_us) in ath11k_update_per_peer_tx_stats()
1412 tx_duration = common->fes_duration_us; in ath11k_update_per_peer_tx_stats()
1414 user_rate = &usr_stats->rate; in ath11k_update_per_peer_tx_stats()
1415 flags = HTT_USR_RATE_PREAMBLE(user_rate->rate_flags); in ath11k_update_per_peer_tx_stats()
1416 bw = HTT_USR_RATE_BW(user_rate->rate_flags) - 2; in ath11k_update_per_peer_tx_stats()
1417 nss = HTT_USR_RATE_NSS(user_rate->rate_flags) + 1; in ath11k_update_per_peer_tx_stats()
1418 mcs = HTT_USR_RATE_MCS(user_rate->rate_flags); in ath11k_update_per_peer_tx_stats()
1419 sgi = HTT_USR_RATE_GI(user_rate->rate_flags); in ath11k_update_per_peer_tx_stats()
1420 dcm = HTT_USR_RATE_DCM(user_rate->rate_flags); in ath11k_update_per_peer_tx_stats()
1453 spin_lock_bh(&ab->base_lock); in ath11k_update_per_peer_tx_stats()
1454 peer = ath11k_peer_find_by_id(ab, usr_stats->peer_id); in ath11k_update_per_peer_tx_stats()
1456 if (!peer || !peer->sta) { in ath11k_update_per_peer_tx_stats()
1457 spin_unlock_bh(&ab->base_lock); in ath11k_update_per_peer_tx_stats()
1462 sta = peer->sta; in ath11k_update_per_peer_tx_stats()
1463 arsta = (struct ath11k_sta *)sta->drv_priv; in ath11k_update_per_peer_tx_stats()
1465 memset(&arsta->txrate, 0, sizeof(arsta->txrate)); in ath11k_update_per_peer_tx_stats()
1469 arsta->txrate.legacy = rate; in ath11k_update_per_peer_tx_stats()
1472 arsta->txrate.legacy = rate; in ath11k_update_per_peer_tx_stats()
1475 arsta->txrate.mcs = mcs + 8 * (nss - 1); in ath11k_update_per_peer_tx_stats()
1476 arsta->txrate.flags = RATE_INFO_FLAGS_MCS; in ath11k_update_per_peer_tx_stats()
1478 arsta->txrate.flags |= RATE_INFO_FLAGS_SHORT_GI; in ath11k_update_per_peer_tx_stats()
1481 arsta->txrate.mcs = mcs; in ath11k_update_per_peer_tx_stats()
1482 arsta->txrate.flags = RATE_INFO_FLAGS_VHT_MCS; in ath11k_update_per_peer_tx_stats()
1484 arsta->txrate.flags |= RATE_INFO_FLAGS_SHORT_GI; in ath11k_update_per_peer_tx_stats()
1487 arsta->txrate.mcs = mcs; in ath11k_update_per_peer_tx_stats()
1488 arsta->txrate.flags = RATE_INFO_FLAGS_HE_MCS; in ath11k_update_per_peer_tx_stats()
1489 arsta->txrate.he_dcm = dcm; in ath11k_update_per_peer_tx_stats()
1490 arsta->txrate.he_gi = ath11k_mac_he_gi_to_nl80211_he_gi(sgi); in ath11k_update_per_peer_tx_stats()
1491 arsta->txrate.he_ru_alloc = ath11k_mac_phy_he_ru_to_nl80211_he_ru_alloc in ath11k_update_per_peer_tx_stats()
1492 ((user_rate->ru_end - in ath11k_update_per_peer_tx_stats()
1493 user_rate->ru_start) + 1); in ath11k_update_per_peer_tx_stats()
1497 arsta->txrate.nss = nss; in ath11k_update_per_peer_tx_stats()
1499 arsta->txrate.bw = ath11k_mac_bw_to_mac80211_bw(bw); in ath11k_update_per_peer_tx_stats()
1500 arsta->tx_duration += tx_duration; in ath11k_update_per_peer_tx_stats()
1501 memcpy(&arsta->last_txrate, &arsta->txrate, sizeof(struct rate_info)); in ath11k_update_per_peer_tx_stats()
1503 /* PPDU stats reported for mgmt packet doesn't have valid tx bytes. in ath11k_update_per_peer_tx_stats()
1508 peer_stats->succ_pkts = succ_pkts; in ath11k_update_per_peer_tx_stats()
1509 peer_stats->succ_bytes = succ_bytes; in ath11k_update_per_peer_tx_stats()
1510 peer_stats->is_ampdu = is_ampdu; in ath11k_update_per_peer_tx_stats()
1511 peer_stats->duration = tx_duration; in ath11k_update_per_peer_tx_stats()
1512 peer_stats->ba_fails = in ath11k_update_per_peer_tx_stats()
1513 HTT_USR_CMPLTN_LONG_RETRY(usr_stats->cmpltn_cmn.flags) + in ath11k_update_per_peer_tx_stats()
1514 HTT_USR_CMPLTN_SHORT_RETRY(usr_stats->cmpltn_cmn.flags); in ath11k_update_per_peer_tx_stats()
1520 spin_unlock_bh(&ab->base_lock); in ath11k_update_per_peer_tx_stats()
1529 for (user = 0; user < HTT_PPDU_STATS_MAX_USERS - 1; user++) in ath11k_htt_update_ppdu_stats()
1539 lockdep_assert_held(&ar->data_lock); in ath11k_dp_htt_get_ppdu_desc()
1541 if (!list_empty(&ar->ppdu_stats_info)) { in ath11k_dp_htt_get_ppdu_desc()
1542 list_for_each_entry(ppdu_info, &ar->ppdu_stats_info, list) { in ath11k_dp_htt_get_ppdu_desc()
1543 if (ppdu_info->ppdu_id == ppdu_id) in ath11k_dp_htt_get_ppdu_desc()
1547 if (ar->ppdu_stat_list_depth > HTT_PPDU_DESC_MAX_DEPTH) { in ath11k_dp_htt_get_ppdu_desc()
1548 ppdu_info = list_first_entry(&ar->ppdu_stats_info, in ath11k_dp_htt_get_ppdu_desc()
1550 list_del(&ppdu_info->list); in ath11k_dp_htt_get_ppdu_desc()
1551 ar->ppdu_stat_list_depth--; in ath11k_dp_htt_get_ppdu_desc()
1552 ath11k_htt_update_ppdu_stats(ar, &ppdu_info->ppdu_stats); in ath11k_dp_htt_get_ppdu_desc()
1561 list_add_tail(&ppdu_info->list, &ar->ppdu_stats_info); in ath11k_dp_htt_get_ppdu_desc()
1562 ar->ppdu_stat_list_depth++; in ath11k_dp_htt_get_ppdu_desc()
1577 msg = (struct ath11k_htt_ppdu_stats_msg *)skb->data; in ath11k_htt_pull_ppdu_stats()
1578 len = FIELD_GET(HTT_T2H_PPDU_STATS_INFO_PAYLOAD_SIZE, msg->info); in ath11k_htt_pull_ppdu_stats()
1579 pdev_id = FIELD_GET(HTT_T2H_PPDU_STATS_INFO_PDEV_ID, msg->info); in ath11k_htt_pull_ppdu_stats()
1580 ppdu_id = msg->ppdu_id; in ath11k_htt_pull_ppdu_stats()
1585 ret = -EINVAL; in ath11k_htt_pull_ppdu_stats()
1590 trace_ath11k_htt_ppdu_stats(ar, skb->data, len); in ath11k_htt_pull_ppdu_stats()
1592 spin_lock_bh(&ar->data_lock); in ath11k_htt_pull_ppdu_stats()
1595 ret = -EINVAL; in ath11k_htt_pull_ppdu_stats()
1599 ppdu_info->ppdu_id = ppdu_id; in ath11k_htt_pull_ppdu_stats()
1600 ret = ath11k_dp_htt_tlv_iter(ab, msg->data, len, in ath11k_htt_pull_ppdu_stats()
1609 spin_unlock_bh(&ar->data_lock); in ath11k_htt_pull_ppdu_stats()
1619 struct htt_pktlog_msg *data = (struct htt_pktlog_msg *)skb->data; in ath11k_htt_pktlog()
1624 pdev_id = FIELD_GET(HTT_T2H_PPDU_STATS_INFO_PDEV_ID, data->hdr); in ath11k_htt_pktlog()
1634 trace_ath11k_htt_pktlog(ar, data->payload, hdr->size, in ath11k_htt_pktlog()
1635 ar->ab->pktlog_defs_checksum); in ath11k_htt_pktlog()
1644 u32 *data = (u32 *)skb->data; in ath11k_htt_backpressure_event_handler()
1668 bp_stats = &ab->soc_stats.bp_stats.umac_ring_bp_stats[ring_id]; in ath11k_htt_backpressure_event_handler()
1675 bp_stats = &ab->soc_stats.bp_stats.lmac_ring_bp_stats[ring_id][pdev_idx]; in ath11k_htt_backpressure_event_handler()
1682 spin_lock_bh(&ab->base_lock); in ath11k_htt_backpressure_event_handler()
1683 bp_stats->hp = hp; in ath11k_htt_backpressure_event_handler()
1684 bp_stats->tp = tp; in ath11k_htt_backpressure_event_handler()
1685 bp_stats->count++; in ath11k_htt_backpressure_event_handler()
1686 bp_stats->jiffies = jiffies; in ath11k_htt_backpressure_event_handler()
1687 spin_unlock_bh(&ab->base_lock); in ath11k_htt_backpressure_event_handler()
1693 struct ath11k_dp *dp = &ab->dp; in ath11k_dp_htt_htc_t2h_msg_handler()
1694 struct htt_resp_msg *resp = (struct htt_resp_msg *)skb->data; in ath11k_dp_htt_htc_t2h_msg_handler()
1707 dp->htt_tgt_ver_major = FIELD_GET(HTT_T2H_VERSION_CONF_MAJOR, in ath11k_dp_htt_htc_t2h_msg_handler()
1708 resp->version_msg.version); in ath11k_dp_htt_htc_t2h_msg_handler()
1709 dp->htt_tgt_ver_minor = FIELD_GET(HTT_T2H_VERSION_CONF_MINOR, in ath11k_dp_htt_htc_t2h_msg_handler()
1710 resp->version_msg.version); in ath11k_dp_htt_htc_t2h_msg_handler()
1711 complete(&dp->htt_tgt_version_received); in ath11k_dp_htt_htc_t2h_msg_handler()
1715 resp->peer_map_ev.info); in ath11k_dp_htt_htc_t2h_msg_handler()
1717 resp->peer_map_ev.info); in ath11k_dp_htt_htc_t2h_msg_handler()
1719 resp->peer_map_ev.info1); in ath11k_dp_htt_htc_t2h_msg_handler()
1720 ath11k_dp_get_mac_addr(resp->peer_map_ev.mac_addr_l32, in ath11k_dp_htt_htc_t2h_msg_handler()
1726 resp->peer_map_ev.info); in ath11k_dp_htt_htc_t2h_msg_handler()
1728 resp->peer_map_ev.info); in ath11k_dp_htt_htc_t2h_msg_handler()
1730 resp->peer_map_ev.info1); in ath11k_dp_htt_htc_t2h_msg_handler()
1731 ath11k_dp_get_mac_addr(resp->peer_map_ev.mac_addr_l32, in ath11k_dp_htt_htc_t2h_msg_handler()
1734 resp->peer_map_ev.info2); in ath11k_dp_htt_htc_t2h_msg_handler()
1736 resp->peer_map_ev.info1); in ath11k_dp_htt_htc_t2h_msg_handler()
1743 resp->peer_unmap_ev.info); in ath11k_dp_htt_htc_t2h_msg_handler()
1771 struct ath11k_base *ab = ar->ab; in ath11k_dp_rx_msdu_coalesce()
1777 u32 hal_rx_desc_sz = ar->ab->hw_params.hal_desc_sz; in ath11k_dp_rx_msdu_coalesce()
1784 buf_first_len = DP_RX_BUFFER_SIZE - buf_first_hdr_len; in ath11k_dp_rx_msdu_coalesce()
1792 ldesc = (struct hal_rx_desc *)last->data; in ath11k_dp_rx_msdu_coalesce()
1793 rxcb->is_first_msdu = ath11k_dp_rx_h_msdu_end_first_msdu(ab, ldesc); in ath11k_dp_rx_msdu_coalesce()
1794 rxcb->is_last_msdu = ath11k_dp_rx_h_msdu_end_last_msdu(ab, ldesc); in ath11k_dp_rx_msdu_coalesce()
1797 * exceeds DP_RX_BUFFER_SIZE - HAL_RX_DESC_SIZE. So assume the data in ath11k_dp_rx_msdu_coalesce()
1798 * in the first buf is of length DP_RX_BUFFER_SIZE - HAL_RX_DESC_SIZE. in ath11k_dp_rx_msdu_coalesce()
1806 ath11k_dp_rx_desc_end_tlv_copy(ab, rxcb->rx_desc, ldesc); in ath11k_dp_rx_msdu_coalesce()
1808 space_extra = msdu_len - (buf_first_len + skb_tailroom(first)); in ath11k_dp_rx_msdu_coalesce()
1814 if (!rxcb->is_continuation) { in ath11k_dp_rx_msdu_coalesce()
1820 return -ENOMEM; in ath11k_dp_rx_msdu_coalesce()
1823 rem_len = msdu_len - buf_first_len; in ath11k_dp_rx_msdu_coalesce()
1826 if (rxcb->is_continuation) in ath11k_dp_rx_msdu_coalesce()
1827 buf_len = DP_RX_BUFFER_SIZE - hal_rx_desc_sz; in ath11k_dp_rx_msdu_coalesce()
1831 if (buf_len > (DP_RX_BUFFER_SIZE - hal_rx_desc_sz)) { in ath11k_dp_rx_msdu_coalesce()
1834 return -EINVAL; in ath11k_dp_rx_msdu_coalesce()
1843 rem_len -= buf_len; in ath11k_dp_rx_msdu_coalesce()
1844 if (!rxcb->is_continuation) in ath11k_dp_rx_msdu_coalesce()
1857 if (!rxcb->is_continuation) in ath11k_dp_rx_get_msdu_last_buf()
1862 if (!rxcb->is_continuation) in ath11k_dp_rx_get_msdu_last_buf()
1875 rx_attention = ath11k_dp_rx_get_attention(ar->ab, rxcb->rx_desc); in ath11k_dp_rx_h_csum_offload()
1879 msdu->ip_summed = (ip_csum_fail || l4_csum_fail) ? in ath11k_dp_rx_h_csum_offload()
1905 ath11k_warn(ar->ab, "unsupported encryption type %d for mic len\n", enctype); in ath11k_dp_rx_crypto_mic_len()
1933 ath11k_warn(ar->ab, "unsupported encryption type %d\n", enctype); in ath11k_dp_rx_crypto_param_len()
1958 ath11k_warn(ar->ab, "unsupported encryption type %d\n", enctype); in ath11k_dp_rx_crypto_icv_len()
1978 hdr = (struct ieee80211_hdr *)msdu->data; in ath11k_dp_rx_h_undecap_nwifi()
1979 hdr_len = ieee80211_hdrlen(hdr->frame_control); in ath11k_dp_rx_h_undecap_nwifi()
1982 skb_pull(msdu, ieee80211_hdrlen(hdr->frame_control)); in ath11k_dp_rx_h_undecap_nwifi()
1984 if (rxcb->is_first_msdu) { in ath11k_dp_rx_h_undecap_nwifi()
1989 hdr_len = ieee80211_hdrlen(hdr->frame_control); in ath11k_dp_rx_h_undecap_nwifi()
1991 /* Each A-MSDU subframe will be reported as a separate MSDU, in ath11k_dp_rx_h_undecap_nwifi()
1992 * so strip the A-MSDU bit from QoS Ctl. in ath11k_dp_rx_h_undecap_nwifi()
1994 if (ieee80211_is_data_qos(hdr->frame_control)) { in ath11k_dp_rx_h_undecap_nwifi()
2000 hdr->frame_control |= __cpu_to_le16(IEEE80211_STYPE_QOS_DATA); in ath11k_dp_rx_h_undecap_nwifi()
2003 hdr->frame_control &= ~(__cpu_to_le16(IEEE80211_FCTL_ORDER)); in ath11k_dp_rx_h_undecap_nwifi()
2005 qos_ctl = rxcb->tid; in ath11k_dp_rx_h_undecap_nwifi()
2007 if (ath11k_dp_rx_h_msdu_start_mesh_ctl_present(ar->ab, rxcb->rx_desc)) in ath11k_dp_rx_h_undecap_nwifi()
2016 if (!(status->flag & RX_FLAG_IV_STRIPPED)) { in ath11k_dp_rx_h_undecap_nwifi()
2023 if (!rxcb->is_first_msdu) { in ath11k_dp_rx_h_undecap_nwifi()
2036 hdr = (struct ieee80211_hdr *)msdu->data; in ath11k_dp_rx_h_undecap_nwifi()
2051 if (!rxcb->is_first_msdu || in ath11k_dp_rx_h_undecap_raw()
2052 !(rxcb->is_first_msdu && rxcb->is_last_msdu)) { in ath11k_dp_rx_h_undecap_raw()
2057 skb_trim(msdu, msdu->len - FCS_LEN); in ath11k_dp_rx_h_undecap_raw()
2062 hdr = (void *)msdu->data; in ath11k_dp_rx_h_undecap_raw()
2065 if (status->flag & RX_FLAG_IV_STRIPPED) { in ath11k_dp_rx_h_undecap_raw()
2066 skb_trim(msdu, msdu->len - in ath11k_dp_rx_h_undecap_raw()
2069 skb_trim(msdu, msdu->len - in ath11k_dp_rx_h_undecap_raw()
2073 if (status->flag & RX_FLAG_MIC_STRIPPED) in ath11k_dp_rx_h_undecap_raw()
2074 skb_trim(msdu, msdu->len - in ath11k_dp_rx_h_undecap_raw()
2078 if (status->flag & RX_FLAG_ICV_STRIPPED) in ath11k_dp_rx_h_undecap_raw()
2079 skb_trim(msdu, msdu->len - in ath11k_dp_rx_h_undecap_raw()
2084 if ((status->flag & RX_FLAG_MMIC_STRIPPED) && in ath11k_dp_rx_h_undecap_raw()
2085 !ieee80211_has_morefrags(hdr->frame_control) && in ath11k_dp_rx_h_undecap_raw()
2087 skb_trim(msdu, msdu->len - IEEE80211_CCMP_MIC_LEN); in ath11k_dp_rx_h_undecap_raw()
2090 if (status->flag & RX_FLAG_IV_STRIPPED) { in ath11k_dp_rx_h_undecap_raw()
2091 hdr_len = ieee80211_hdrlen(hdr->frame_control); in ath11k_dp_rx_h_undecap_raw()
2094 memmove((void *)msdu->data + crypto_len, in ath11k_dp_rx_h_undecap_raw()
2095 (void *)msdu->data, hdr_len); in ath11k_dp_rx_h_undecap_raw()
2110 is_amsdu = !(rxcb->is_first_msdu && rxcb->is_last_msdu); in ath11k_dp_rx_h_find_rfc1042()
2111 hdr = (struct ieee80211_hdr *)ath11k_dp_rx_h_80211_hdr(ar->ab, rxcb->rx_desc); in ath11k_dp_rx_h_find_rfc1042()
2114 if (rxcb->is_first_msdu) { in ath11k_dp_rx_h_find_rfc1042()
2115 hdr_len = ieee80211_hdrlen(hdr->frame_control); in ath11k_dp_rx_h_find_rfc1042()
2145 eth = (struct ethhdr *)msdu->data; in ath11k_dp_rx_h_undecap_eth()
2146 ether_addr_copy(da, eth->h_dest); in ath11k_dp_rx_h_undecap_eth()
2147 ether_addr_copy(sa, eth->h_source); in ath11k_dp_rx_h_undecap_eth()
2156 hdr_len = ieee80211_hdrlen(hdr->frame_control); in ath11k_dp_rx_h_undecap_eth()
2158 if (!(status->flag & RX_FLAG_IV_STRIPPED)) { in ath11k_dp_rx_h_undecap_eth()
2170 hdr = (struct ieee80211_hdr *)msdu->data; in ath11k_dp_rx_h_undecap_eth()
2185 first_hdr = ath11k_dp_rx_h_80211_hdr(ar->ab, rx_desc); in ath11k_dp_rx_h_undecap()
2186 decap = ath11k_dp_rx_h_msdu_start_decap_type(ar->ab, rx_desc); in ath11k_dp_rx_h_undecap()
2198 ehdr = (struct ethhdr *)msdu->data; in ath11k_dp_rx_h_undecap()
2201 if (ehdr->h_proto == cpu_to_be16(ETH_P_PAE)) { in ath11k_dp_rx_h_undecap()
2202 ATH11K_SKB_RXCB(msdu)->is_eapol = true; in ath11k_dp_rx_h_undecap()
2211 if (ATH11K_SKB_RXCB(msdu)->is_mcbc && decrypted) in ath11k_dp_rx_h_undecap()
2225 struct hal_rx_desc *rx_desc = rxcb->rx_desc; in ath11k_dp_rx_h_find_peer()
2228 lockdep_assert_held(&ab->base_lock); in ath11k_dp_rx_h_find_peer()
2230 if (rxcb->peer_id) in ath11k_dp_rx_h_find_peer()
2231 peer = ath11k_peer_find_by_id(ab, rxcb->peer_id); in ath11k_dp_rx_h_find_peer()
2260 fill_crypto_hdr = ath11k_dp_rx_h_attn_is_mcbc(ar->ab, rx_desc); in ath11k_dp_rx_h_mpdu()
2261 rxcb->is_mcbc = fill_crypto_hdr; in ath11k_dp_rx_h_mpdu()
2263 if (rxcb->is_mcbc) { in ath11k_dp_rx_h_mpdu()
2264 rxcb->peer_id = ath11k_dp_rx_h_mpdu_start_peer_id(ar->ab, rx_desc); in ath11k_dp_rx_h_mpdu()
2265 rxcb->seq_no = ath11k_dp_rx_h_mpdu_start_seq_no(ar->ab, rx_desc); in ath11k_dp_rx_h_mpdu()
2268 spin_lock_bh(&ar->ab->base_lock); in ath11k_dp_rx_h_mpdu()
2269 peer = ath11k_dp_rx_h_find_peer(ar->ab, msdu); in ath11k_dp_rx_h_mpdu()
2271 if (rxcb->is_mcbc) in ath11k_dp_rx_h_mpdu()
2272 enctype = peer->sec_type_grp; in ath11k_dp_rx_h_mpdu()
2274 enctype = peer->sec_type; in ath11k_dp_rx_h_mpdu()
2276 enctype = ath11k_dp_rx_h_mpdu_start_enctype(ar->ab, rx_desc); in ath11k_dp_rx_h_mpdu()
2278 spin_unlock_bh(&ar->ab->base_lock); in ath11k_dp_rx_h_mpdu()
2280 rx_attention = ath11k_dp_rx_get_attention(ar->ab, rx_desc); in ath11k_dp_rx_h_mpdu()
2285 /* Clear per-MPDU flags while leaving per-PPDU flags intact */ in ath11k_dp_rx_h_mpdu()
2286 rx_status->flag &= ~(RX_FLAG_FAILED_FCS_CRC | in ath11k_dp_rx_h_mpdu()
2293 rx_status->flag |= RX_FLAG_FAILED_FCS_CRC; in ath11k_dp_rx_h_mpdu()
2295 rx_status->flag |= RX_FLAG_MMIC_ERROR; in ath11k_dp_rx_h_mpdu()
2298 rx_status->flag |= RX_FLAG_DECRYPTED | RX_FLAG_MMIC_STRIPPED; in ath11k_dp_rx_h_mpdu()
2301 rx_status->flag |= RX_FLAG_MIC_STRIPPED | in ath11k_dp_rx_h_mpdu()
2304 rx_status->flag |= RX_FLAG_IV_STRIPPED | in ath11k_dp_rx_h_mpdu()
2315 if (ath11k_dp_rx_h_msdu_start_decap_type(ar->ab, rx_desc) != in ath11k_dp_rx_h_mpdu()
2317 hdr = (void *)msdu->data; in ath11k_dp_rx_h_mpdu()
2318 hdr->frame_control &= ~__cpu_to_le16(IEEE80211_FCTL_PROTECTED); in ath11k_dp_rx_h_mpdu()
2332 pkt_type = ath11k_dp_rx_h_msdu_start_pkt_type(ar->ab, rx_desc); in ath11k_dp_rx_h_rate()
2333 bw = ath11k_dp_rx_h_msdu_start_rx_bw(ar->ab, rx_desc); in ath11k_dp_rx_h_rate()
2334 rate_mcs = ath11k_dp_rx_h_msdu_start_rate_mcs(ar->ab, rx_desc); in ath11k_dp_rx_h_rate()
2335 nss = ath11k_dp_rx_h_msdu_start_nss(ar->ab, rx_desc); in ath11k_dp_rx_h_rate()
2336 sgi = ath11k_dp_rx_h_msdu_start_sgi(ar->ab, rx_desc); in ath11k_dp_rx_h_rate()
2342 sband = &ar->mac.sbands[rx_status->band]; in ath11k_dp_rx_h_rate()
2343 rx_status->rate_idx = ath11k_mac_hw_rate_to_idx(sband, rate_mcs, in ath11k_dp_rx_h_rate()
2347 rx_status->encoding = RX_ENC_HT; in ath11k_dp_rx_h_rate()
2349 ath11k_warn(ar->ab, in ath11k_dp_rx_h_rate()
2354 rx_status->rate_idx = rate_mcs + (8 * (nss - 1)); in ath11k_dp_rx_h_rate()
2356 rx_status->enc_flags |= RX_ENC_FLAG_SHORT_GI; in ath11k_dp_rx_h_rate()
2357 rx_status->bw = ath11k_mac_bw_to_mac80211_bw(bw); in ath11k_dp_rx_h_rate()
2360 rx_status->encoding = RX_ENC_VHT; in ath11k_dp_rx_h_rate()
2361 rx_status->rate_idx = rate_mcs; in ath11k_dp_rx_h_rate()
2363 ath11k_warn(ar->ab, in ath11k_dp_rx_h_rate()
2368 rx_status->nss = nss; in ath11k_dp_rx_h_rate()
2370 rx_status->enc_flags |= RX_ENC_FLAG_SHORT_GI; in ath11k_dp_rx_h_rate()
2371 rx_status->bw = ath11k_mac_bw_to_mac80211_bw(bw); in ath11k_dp_rx_h_rate()
2372 is_ldpc = ath11k_dp_rx_h_msdu_start_ldpc_support(ar->ab, rx_desc); in ath11k_dp_rx_h_rate()
2374 rx_status->enc_flags |= RX_ENC_FLAG_LDPC; in ath11k_dp_rx_h_rate()
2377 rx_status->rate_idx = rate_mcs; in ath11k_dp_rx_h_rate()
2379 ath11k_warn(ar->ab, in ath11k_dp_rx_h_rate()
2384 rx_status->encoding = RX_ENC_HE; in ath11k_dp_rx_h_rate()
2385 rx_status->nss = nss; in ath11k_dp_rx_h_rate()
2386 rx_status->he_gi = ath11k_mac_he_gi_to_nl80211_he_gi(sgi); in ath11k_dp_rx_h_rate()
2387 rx_status->bw = ath11k_mac_bw_to_mac80211_bw(bw); in ath11k_dp_rx_h_rate()
2399 rx_status->freq = 0; in ath11k_dp_rx_h_ppdu()
2400 rx_status->rate_idx = 0; in ath11k_dp_rx_h_ppdu()
2401 rx_status->nss = 0; in ath11k_dp_rx_h_ppdu()
2402 rx_status->encoding = RX_ENC_LEGACY; in ath11k_dp_rx_h_ppdu()
2403 rx_status->bw = RATE_INFO_BW_20; in ath11k_dp_rx_h_ppdu()
2405 rx_status->flag |= RX_FLAG_NO_SIGNAL_VAL; in ath11k_dp_rx_h_ppdu()
2407 meta_data = ath11k_dp_rx_h_msdu_start_freq(ar->ab, rx_desc); in ath11k_dp_rx_h_ppdu()
2413 rx_status->band = NL80211_BAND_6GHZ; in ath11k_dp_rx_h_ppdu()
2414 rx_status->freq = center_freq; in ath11k_dp_rx_h_ppdu()
2416 rx_status->band = NL80211_BAND_2GHZ; in ath11k_dp_rx_h_ppdu()
2418 rx_status->band = NL80211_BAND_5GHZ; in ath11k_dp_rx_h_ppdu()
2420 spin_lock_bh(&ar->data_lock); in ath11k_dp_rx_h_ppdu()
2421 channel = ar->rx_channel; in ath11k_dp_rx_h_ppdu()
2423 rx_status->band = channel->band; in ath11k_dp_rx_h_ppdu()
2425 ieee80211_frequency_to_channel(channel->center_freq); in ath11k_dp_rx_h_ppdu()
2427 spin_unlock_bh(&ar->data_lock); in ath11k_dp_rx_h_ppdu()
2428 ath11k_dbg_dump(ar->ab, ATH11K_DBG_DATA, NULL, "rx_desc: ", in ath11k_dp_rx_h_ppdu()
2432 if (rx_status->band != NL80211_BAND_6GHZ) in ath11k_dp_rx_h_ppdu()
2433 rx_status->freq = ieee80211_channel_to_frequency(channel_num, in ath11k_dp_rx_h_ppdu()
2434 rx_status->band); in ath11k_dp_rx_h_ppdu()
2454 bool is_mcbc = rxcb->is_mcbc; in ath11k_dp_rx_deliver_msdu()
2455 bool is_eapol = rxcb->is_eapol; in ath11k_dp_rx_deliver_msdu()
2457 if (status->encoding == RX_ENC_HE && in ath11k_dp_rx_deliver_msdu()
2458 !(status->flag & RX_FLAG_RADIOTAP_HE) && in ath11k_dp_rx_deliver_msdu()
2459 !(status->flag & RX_FLAG_SKIP_MONITOR)) { in ath11k_dp_rx_deliver_msdu()
2462 status->flag |= RX_FLAG_RADIOTAP_HE; in ath11k_dp_rx_deliver_msdu()
2465 if (!(status->flag & RX_FLAG_ONLY_MONITOR)) in ath11k_dp_rx_deliver_msdu()
2466 decap = ath11k_dp_rx_h_msdu_start_decap_type(ar->ab, rxcb->rx_desc); in ath11k_dp_rx_deliver_msdu()
2468 spin_lock_bh(&ar->ab->base_lock); in ath11k_dp_rx_deliver_msdu()
2469 peer = ath11k_dp_rx_h_find_peer(ar->ab, msdu); in ath11k_dp_rx_deliver_msdu()
2470 if (peer && peer->sta) in ath11k_dp_rx_deliver_msdu()
2471 pubsta = peer->sta; in ath11k_dp_rx_deliver_msdu()
2472 spin_unlock_bh(&ar->ab->base_lock); in ath11k_dp_rx_deliver_msdu()
2474 ath11k_dbg(ar->ab, ATH11K_DBG_DATA, in ath11k_dp_rx_deliver_msdu()
2475 …s%s%s%s%s %srate_idx %u vht_nss %u freq %u band %u flag 0x%x fcs-err %i mic-err %i amsdu-more %i\n… in ath11k_dp_rx_deliver_msdu()
2477 msdu->len, in ath11k_dp_rx_deliver_msdu()
2478 peer ? peer->addr : NULL, in ath11k_dp_rx_deliver_msdu()
2479 rxcb->tid, in ath11k_dp_rx_deliver_msdu()
2481 rxcb->seq_no, in ath11k_dp_rx_deliver_msdu()
2482 (status->encoding == RX_ENC_LEGACY) ? "legacy" : "", in ath11k_dp_rx_deliver_msdu()
2483 (status->encoding == RX_ENC_HT) ? "ht" : "", in ath11k_dp_rx_deliver_msdu()
2484 (status->encoding == RX_ENC_VHT) ? "vht" : "", in ath11k_dp_rx_deliver_msdu()
2485 (status->encoding == RX_ENC_HE) ? "he" : "", in ath11k_dp_rx_deliver_msdu()
2486 (status->bw == RATE_INFO_BW_40) ? "40" : "", in ath11k_dp_rx_deliver_msdu()
2487 (status->bw == RATE_INFO_BW_80) ? "80" : "", in ath11k_dp_rx_deliver_msdu()
2488 (status->bw == RATE_INFO_BW_160) ? "160" : "", in ath11k_dp_rx_deliver_msdu()
2489 status->enc_flags & RX_ENC_FLAG_SHORT_GI ? "sgi " : "", in ath11k_dp_rx_deliver_msdu()
2490 status->rate_idx, in ath11k_dp_rx_deliver_msdu()
2491 status->nss, in ath11k_dp_rx_deliver_msdu()
2492 status->freq, in ath11k_dp_rx_deliver_msdu()
2493 status->band, status->flag, in ath11k_dp_rx_deliver_msdu()
2494 !!(status->flag & RX_FLAG_FAILED_FCS_CRC), in ath11k_dp_rx_deliver_msdu()
2495 !!(status->flag & RX_FLAG_MMIC_ERROR), in ath11k_dp_rx_deliver_msdu()
2496 !!(status->flag & RX_FLAG_AMSDU_MORE)); in ath11k_dp_rx_deliver_msdu()
2498 ath11k_dbg_dump(ar->ab, ATH11K_DBG_DP_RX, NULL, "dp rx msdu: ", in ath11k_dp_rx_deliver_msdu()
2499 msdu->data, msdu->len); in ath11k_dp_rx_deliver_msdu()
2512 !(is_mcbc && rx_status->flag & RX_FLAG_DECRYPTED)) in ath11k_dp_rx_deliver_msdu()
2513 rx_status->flag |= RX_FLAG_8023; in ath11k_dp_rx_deliver_msdu()
2515 ieee80211_rx_napi(ar->hw, pubsta, msdu, napi); in ath11k_dp_rx_deliver_msdu()
2523 struct ath11k_base *ab = ar->ab; in ath11k_dp_rx_process_msdu()
2532 u32 hal_rx_desc_sz = ar->ab->hw_params.hal_desc_sz; in ath11k_dp_rx_process_msdu()
2537 "No valid Rx buffer to access Atten/MSDU_END/MPDU_END tlvs\n"); in ath11k_dp_rx_process_msdu()
2538 ret = -EIO; in ath11k_dp_rx_process_msdu()
2542 rx_desc = (struct hal_rx_desc *)msdu->data; in ath11k_dp_rx_process_msdu()
2544 ath11k_warn(ar->ab, "msdu len not valid\n"); in ath11k_dp_rx_process_msdu()
2545 ret = -EIO; in ath11k_dp_rx_process_msdu()
2549 lrx_desc = (struct hal_rx_desc *)last_buf->data; in ath11k_dp_rx_process_msdu()
2553 ret = -EIO; in ath11k_dp_rx_process_msdu()
2558 rxcb->rx_desc = rx_desc; in ath11k_dp_rx_process_msdu()
2562 if (rxcb->is_frag) { in ath11k_dp_rx_process_msdu()
2564 } else if (!rxcb->is_continuation) { in ath11k_dp_rx_process_msdu()
2567 ret = -EINVAL; in ath11k_dp_rx_process_msdu()
2591 rx_status->flag |= RX_FLAG_SKIP_MONITOR | RX_FLAG_DUP_VALIDATED; in ath11k_dp_rx_process_msdu()
2612 if (unlikely(!rcu_access_pointer(ab->pdevs_active[mac_id]))) { in ath11k_dp_rx_process_received_packets()
2617 ar = ab->pdevs[mac_id].ar; in ath11k_dp_rx_process_received_packets()
2618 if (unlikely(test_bit(ATH11K_CAC_RUNNING, &ar->dev_flags))) { in ath11k_dp_rx_process_received_packets()
2639 struct ath11k_dp *dp = &ab->dp; in ath11k_dp_process_rx()
2658 srng = &ab->hal.srng_list[dp->reo_dst_ring[ring_id].ring_id]; in ath11k_dp_process_rx()
2660 spin_lock_bh(&srng->lock); in ath11k_dp_process_rx()
2672 READ_ONCE(desc->buf_addr_info.info1)); in ath11k_dp_process_rx()
2680 ar = ab->pdevs[mac_id].ar; in ath11k_dp_process_rx()
2681 rx_ring = &ar->dp.rx_refill_buf_ring; in ath11k_dp_process_rx()
2682 spin_lock_bh(&rx_ring->idr_lock); in ath11k_dp_process_rx()
2683 msdu = idr_find(&rx_ring->bufs_idr, buf_id); in ath11k_dp_process_rx()
2687 spin_unlock_bh(&rx_ring->idr_lock); in ath11k_dp_process_rx()
2691 idr_remove(&rx_ring->bufs_idr, buf_id); in ath11k_dp_process_rx()
2692 spin_unlock_bh(&rx_ring->idr_lock); in ath11k_dp_process_rx()
2695 dma_unmap_single(ab->dev, rxcb->paddr, in ath11k_dp_process_rx()
2696 msdu->len + skb_tailroom(msdu), in ath11k_dp_process_rx()
2701 info0 = READ_ONCE(desc->info0); in ath11k_dp_process_rx()
2707 ab->soc_stats.hal_reo_error[ring_id]++; in ath11k_dp_process_rx()
2711 rx_msdu_info0 = READ_ONCE(desc->rx_msdu_info.info0); in ath11k_dp_process_rx()
2712 rx_mpdu_info0 = READ_ONCE(desc->rx_mpdu_info.info0); in ath11k_dp_process_rx()
2714 rxcb->is_first_msdu = !!(rx_msdu_info0 & in ath11k_dp_process_rx()
2716 rxcb->is_last_msdu = !!(rx_msdu_info0 & in ath11k_dp_process_rx()
2718 rxcb->is_continuation = !!(rx_msdu_info0 & in ath11k_dp_process_rx()
2720 rxcb->peer_id = FIELD_GET(RX_MPDU_DESC_META_DATA_PEER_ID, in ath11k_dp_process_rx()
2721 READ_ONCE(desc->rx_mpdu_info.meta_data)); in ath11k_dp_process_rx()
2722 rxcb->seq_no = FIELD_GET(RX_MPDU_DESC_INFO0_SEQ_NUM, in ath11k_dp_process_rx()
2724 rxcb->tid = FIELD_GET(HAL_REO_DEST_RING_INFO0_RX_QUEUE_NUM, in ath11k_dp_process_rx()
2727 rxcb->mac_id = mac_id; in ath11k_dp_process_rx()
2730 if (rxcb->is_continuation) { in ath11k_dp_process_rx()
2754 spin_unlock_bh(&srng->lock); in ath11k_dp_process_rx()
2759 for (i = 0; i < ab->num_radios; i++) { in ath11k_dp_process_rx()
2765 ar = ab->pdevs[i].ar; in ath11k_dp_process_rx()
2766 rx_ring = &ar->dp.rx_refill_buf_ring; in ath11k_dp_process_rx()
2769 ab->hw_params.hal_params->rx_buf_rbm); in ath11k_dp_process_rx()
2778 struct ath11k_rx_peer_stats *rx_stats = arsta->rx_stats; in ath11k_dp_rx_update_peer_stats()
2785 arsta->rssi_comb = ppdu_info->rssi_comb; in ath11k_dp_rx_update_peer_stats()
2786 ewma_avg_rssi_add(&arsta->avg_rssi, ppdu_info->rssi_comb); in ath11k_dp_rx_update_peer_stats()
2788 num_msdu = ppdu_info->tcp_msdu_count + ppdu_info->tcp_ack_msdu_count + in ath11k_dp_rx_update_peer_stats()
2789 ppdu_info->udp_msdu_count + ppdu_info->other_msdu_count; in ath11k_dp_rx_update_peer_stats()
2791 rx_stats->num_msdu += num_msdu; in ath11k_dp_rx_update_peer_stats()
2792 rx_stats->tcp_msdu_count += ppdu_info->tcp_msdu_count + in ath11k_dp_rx_update_peer_stats()
2793 ppdu_info->tcp_ack_msdu_count; in ath11k_dp_rx_update_peer_stats()
2794 rx_stats->udp_msdu_count += ppdu_info->udp_msdu_count; in ath11k_dp_rx_update_peer_stats()
2795 rx_stats->other_msdu_count += ppdu_info->other_msdu_count; in ath11k_dp_rx_update_peer_stats()
2797 if (ppdu_info->preamble_type == HAL_RX_PREAMBLE_11A || in ath11k_dp_rx_update_peer_stats()
2798 ppdu_info->preamble_type == HAL_RX_PREAMBLE_11B) { in ath11k_dp_rx_update_peer_stats()
2799 ppdu_info->nss = 1; in ath11k_dp_rx_update_peer_stats()
2800 ppdu_info->mcs = HAL_RX_MAX_MCS; in ath11k_dp_rx_update_peer_stats()
2801 ppdu_info->tid = IEEE80211_NUM_TIDS; in ath11k_dp_rx_update_peer_stats()
2804 if (ppdu_info->nss > 0 && ppdu_info->nss <= HAL_RX_MAX_NSS) in ath11k_dp_rx_update_peer_stats()
2805 rx_stats->nss_count[ppdu_info->nss - 1] += num_msdu; in ath11k_dp_rx_update_peer_stats()
2807 if (ppdu_info->mcs <= HAL_RX_MAX_MCS) in ath11k_dp_rx_update_peer_stats()
2808 rx_stats->mcs_count[ppdu_info->mcs] += num_msdu; in ath11k_dp_rx_update_peer_stats()
2810 if (ppdu_info->gi < HAL_RX_GI_MAX) in ath11k_dp_rx_update_peer_stats()
2811 rx_stats->gi_count[ppdu_info->gi] += num_msdu; in ath11k_dp_rx_update_peer_stats()
2813 if (ppdu_info->bw < HAL_RX_BW_MAX) in ath11k_dp_rx_update_peer_stats()
2814 rx_stats->bw_count[ppdu_info->bw] += num_msdu; in ath11k_dp_rx_update_peer_stats()
2816 if (ppdu_info->ldpc < HAL_RX_SU_MU_CODING_MAX) in ath11k_dp_rx_update_peer_stats()
2817 rx_stats->coding_count[ppdu_info->ldpc] += num_msdu; in ath11k_dp_rx_update_peer_stats()
2819 if (ppdu_info->tid <= IEEE80211_NUM_TIDS) in ath11k_dp_rx_update_peer_stats()
2820 rx_stats->tid_count[ppdu_info->tid] += num_msdu; in ath11k_dp_rx_update_peer_stats()
2822 if (ppdu_info->preamble_type < HAL_RX_PREAMBLE_MAX) in ath11k_dp_rx_update_peer_stats()
2823 rx_stats->pream_cnt[ppdu_info->preamble_type] += num_msdu; in ath11k_dp_rx_update_peer_stats()
2825 if (ppdu_info->reception_type < HAL_RX_RECEPTION_TYPE_MAX) in ath11k_dp_rx_update_peer_stats()
2826 rx_stats->reception_type[ppdu_info->reception_type] += num_msdu; in ath11k_dp_rx_update_peer_stats()
2828 if (ppdu_info->is_stbc) in ath11k_dp_rx_update_peer_stats()
2829 rx_stats->stbc_count += num_msdu; in ath11k_dp_rx_update_peer_stats()
2831 if (ppdu_info->beamformed) in ath11k_dp_rx_update_peer_stats()
2832 rx_stats->beamformed_count += num_msdu; in ath11k_dp_rx_update_peer_stats()
2834 if (ppdu_info->num_mpdu_fcs_ok > 1) in ath11k_dp_rx_update_peer_stats()
2835 rx_stats->ampdu_msdu_count += num_msdu; in ath11k_dp_rx_update_peer_stats()
2837 rx_stats->non_ampdu_msdu_count += num_msdu; in ath11k_dp_rx_update_peer_stats()
2839 rx_stats->num_mpdu_fcs_ok += ppdu_info->num_mpdu_fcs_ok; in ath11k_dp_rx_update_peer_stats()
2840 rx_stats->num_mpdu_fcs_err += ppdu_info->num_mpdu_fcs_err; in ath11k_dp_rx_update_peer_stats()
2841 rx_stats->dcm_count += ppdu_info->dcm; in ath11k_dp_rx_update_peer_stats()
2842 rx_stats->ru_alloc_cnt[ppdu_info->ru_alloc] += num_msdu; in ath11k_dp_rx_update_peer_stats()
2844 arsta->rssi_comb = ppdu_info->rssi_comb; in ath11k_dp_rx_update_peer_stats()
2846 BUILD_BUG_ON(ARRAY_SIZE(arsta->chain_signal) > in ath11k_dp_rx_update_peer_stats()
2847 ARRAY_SIZE(ppdu_info->rssi_chain_pri20)); in ath11k_dp_rx_update_peer_stats()
2849 for (i = 0; i < ARRAY_SIZE(arsta->chain_signal); i++) in ath11k_dp_rx_update_peer_stats()
2850 arsta->chain_signal[i] = ppdu_info->rssi_chain_pri20[i]; in ath11k_dp_rx_update_peer_stats()
2852 rx_stats->rx_duration += ppdu_info->rx_duration; in ath11k_dp_rx_update_peer_stats()
2853 arsta->rx_duration = rx_stats->rx_duration; in ath11k_dp_rx_update_peer_stats()
2869 if (!IS_ALIGNED((unsigned long)skb->data, in ath11k_dp_rx_alloc_mon_status_buf()
2871 skb_pull(skb, PTR_ALIGN(skb->data, DP_RX_BUFFER_ALIGN_SIZE) - in ath11k_dp_rx_alloc_mon_status_buf()
2872 skb->data); in ath11k_dp_rx_alloc_mon_status_buf()
2875 paddr = dma_map_single(ab->dev, skb->data, in ath11k_dp_rx_alloc_mon_status_buf()
2876 skb->len + skb_tailroom(skb), in ath11k_dp_rx_alloc_mon_status_buf()
2878 if (unlikely(dma_mapping_error(ab->dev, paddr))) in ath11k_dp_rx_alloc_mon_status_buf()
2881 spin_lock_bh(&rx_ring->idr_lock); in ath11k_dp_rx_alloc_mon_status_buf()
2882 *buf_id = idr_alloc(&rx_ring->bufs_idr, skb, 0, in ath11k_dp_rx_alloc_mon_status_buf()
2883 rx_ring->bufs_max, GFP_ATOMIC); in ath11k_dp_rx_alloc_mon_status_buf()
2884 spin_unlock_bh(&rx_ring->idr_lock); in ath11k_dp_rx_alloc_mon_status_buf()
2888 ATH11K_SKB_RXCB(skb)->paddr = paddr; in ath11k_dp_rx_alloc_mon_status_buf()
2892 dma_unmap_single(ab->dev, paddr, skb->len + skb_tailroom(skb), in ath11k_dp_rx_alloc_mon_status_buf()
2914 req_entries = min(req_entries, rx_ring->bufs_max); in ath11k_dp_rx_mon_status_bufs_replenish()
2916 srng = &ab->hal.srng_list[rx_ring->refill_buf_ring.ring_id]; in ath11k_dp_rx_mon_status_bufs_replenish()
2918 spin_lock_bh(&srng->lock); in ath11k_dp_rx_mon_status_bufs_replenish()
2932 paddr = ATH11K_SKB_RXCB(skb)->paddr; in ath11k_dp_rx_mon_status_bufs_replenish()
2941 num_remain--; in ath11k_dp_rx_mon_status_bufs_replenish()
2948 spin_unlock_bh(&srng->lock); in ath11k_dp_rx_mon_status_bufs_replenish()
2950 return req_entries - num_remain; in ath11k_dp_rx_mon_status_bufs_replenish()
2953 spin_lock_bh(&rx_ring->idr_lock); in ath11k_dp_rx_mon_status_bufs_replenish()
2954 idr_remove(&rx_ring->bufs_idr, buf_id); in ath11k_dp_rx_mon_status_bufs_replenish()
2955 spin_unlock_bh(&rx_ring->idr_lock); in ath11k_dp_rx_mon_status_bufs_replenish()
2956 dma_unmap_single(ab->dev, paddr, skb->len + skb_tailroom(skb), in ath11k_dp_rx_mon_status_bufs_replenish()
2960 spin_unlock_bh(&srng->lock); in ath11k_dp_rx_mon_status_bufs_replenish()
2962 return req_entries - num_remain; in ath11k_dp_rx_mon_status_bufs_replenish()
2976 tlv_len = FIELD_GET(HAL_TLV_HDR_LEN, tlv->tl); in ath11k_dp_rx_mon_update_status_buf_state()
2981 if (FIELD_GET(HAL_TLV_HDR_TAG, tlv->tl) != HAL_RX_PPDU_START) in ath11k_dp_rx_mon_update_status_buf_state()
2987 __le32_to_cpu(ppdu_start->info0)); in ath11k_dp_rx_mon_update_status_buf_state()
2989 if (pmon->sw_mon_entries.ppdu_id < ppdu_id) { in ath11k_dp_rx_mon_update_status_buf_state()
2990 pmon->buf_state = DP_MON_STATUS_LEAD; in ath11k_dp_rx_mon_update_status_buf_state()
2991 ppdu_id_diff = ppdu_id - pmon->sw_mon_entries.ppdu_id; in ath11k_dp_rx_mon_update_status_buf_state()
2993 pmon->buf_state = DP_MON_STATUS_LAG; in ath11k_dp_rx_mon_update_status_buf_state()
2994 } else if (pmon->sw_mon_entries.ppdu_id > ppdu_id) { in ath11k_dp_rx_mon_update_status_buf_state()
2995 pmon->buf_state = DP_MON_STATUS_LAG; in ath11k_dp_rx_mon_update_status_buf_state()
2996 ppdu_id_diff = pmon->sw_mon_entries.ppdu_id - ppdu_id; in ath11k_dp_rx_mon_update_status_buf_state()
2998 pmon->buf_state = DP_MON_STATUS_LEAD; in ath11k_dp_rx_mon_update_status_buf_state()
3021 ar = ab->pdevs[ath11k_hw_mac_id_to_pdev_id(&ab->hw_params, mac_id)].ar; in ath11k_dp_rx_reap_mon_status_ring()
3022 dp = &ar->dp; in ath11k_dp_rx_reap_mon_status_ring()
3023 pmon = &dp->mon_data; in ath11k_dp_rx_reap_mon_status_ring()
3024 srng_id = ath11k_hw_mac_id_to_srng_id(&ab->hw_params, mac_id); in ath11k_dp_rx_reap_mon_status_ring()
3025 rx_ring = &dp->rx_mon_status_refill_ring[srng_id]; in ath11k_dp_rx_reap_mon_status_ring()
3027 srng = &ab->hal.srng_list[rx_ring->refill_buf_ring.ring_id]; in ath11k_dp_rx_reap_mon_status_ring()
3029 spin_lock_bh(&srng->lock); in ath11k_dp_rx_reap_mon_status_ring()
3033 *budget -= 1; in ath11k_dp_rx_reap_mon_status_ring()
3037 pmon->buf_state = DP_MON_STATUS_REPLINISH; in ath11k_dp_rx_reap_mon_status_ring()
3046 spin_lock_bh(&rx_ring->idr_lock); in ath11k_dp_rx_reap_mon_status_ring()
3047 skb = idr_find(&rx_ring->bufs_idr, buf_id); in ath11k_dp_rx_reap_mon_status_ring()
3048 spin_unlock_bh(&rx_ring->idr_lock); in ath11k_dp_rx_reap_mon_status_ring()
3053 pmon->buf_state = DP_MON_STATUS_REPLINISH; in ath11k_dp_rx_reap_mon_status_ring()
3059 dma_sync_single_for_cpu(ab->dev, rxcb->paddr, in ath11k_dp_rx_reap_mon_status_ring()
3060 skb->len + skb_tailroom(skb), in ath11k_dp_rx_reap_mon_status_ring()
3063 tlv = (struct hal_tlv_hdr *)skb->data; in ath11k_dp_rx_reap_mon_status_ring()
3064 if (FIELD_GET(HAL_TLV_HDR_TAG, tlv->tl) != in ath11k_dp_rx_reap_mon_status_ring()
3068 tlv->tl), buf_id); in ath11k_dp_rx_reap_mon_status_ring()
3076 pmon->buf_state = DP_MON_STATUS_NO_DMA; in ath11k_dp_rx_reap_mon_status_ring()
3080 spin_lock_bh(&rx_ring->idr_lock); in ath11k_dp_rx_reap_mon_status_ring()
3081 idr_remove(&rx_ring->bufs_idr, buf_id); in ath11k_dp_rx_reap_mon_status_ring()
3082 spin_unlock_bh(&rx_ring->idr_lock); in ath11k_dp_rx_reap_mon_status_ring()
3083 if (ab->hw_params.full_monitor_mode) { in ath11k_dp_rx_reap_mon_status_ring()
3085 if (paddr == pmon->mon_status_paddr) in ath11k_dp_rx_reap_mon_status_ring()
3086 pmon->buf_state = DP_MON_STATUS_MATCH; in ath11k_dp_rx_reap_mon_status_ring()
3089 dma_unmap_single(ab->dev, rxcb->paddr, in ath11k_dp_rx_reap_mon_status_ring()
3090 skb->len + skb_tailroom(skb), in ath11k_dp_rx_reap_mon_status_ring()
3095 pmon->buf_state = DP_MON_STATUS_REPLINISH; in ath11k_dp_rx_reap_mon_status_ring()
3102 hal_params = ab->hw_params.hal_params; in ath11k_dp_rx_reap_mon_status_ring()
3104 hal_params->rx_buf_rbm); in ath11k_dp_rx_reap_mon_status_ring()
3113 ath11k_hal_rx_buf_addr_info_set(rx_mon_status_desc, rxcb->paddr, in ath11k_dp_rx_reap_mon_status_ring()
3115 ab->hw_params.hal_params->rx_buf_rbm); in ath11k_dp_rx_reap_mon_status_ring()
3120 spin_unlock_bh(&srng->lock); in ath11k_dp_rx_reap_mon_status_ring()
3129 spin_lock_bh(&rx_tid->ab->base_lock); in ath11k_dp_rx_frag_timer()
3130 if (rx_tid->last_frag_no && in ath11k_dp_rx_frag_timer()
3131 rx_tid->rx_frag_bitmap == GENMASK(rx_tid->last_frag_no, 0)) { in ath11k_dp_rx_frag_timer()
3132 spin_unlock_bh(&rx_tid->ab->base_lock); in ath11k_dp_rx_frag_timer()
3136 spin_unlock_bh(&rx_tid->ab->base_lock); in ath11k_dp_rx_frag_timer()
3141 struct ath11k_base *ab = ar->ab; in ath11k_peer_rx_frag_setup()
3154 spin_lock_bh(&ab->base_lock); in ath11k_peer_rx_frag_setup()
3159 spin_unlock_bh(&ab->base_lock); in ath11k_peer_rx_frag_setup()
3161 return -ENOENT; in ath11k_peer_rx_frag_setup()
3165 rx_tid = &peer->rx_tid[i]; in ath11k_peer_rx_frag_setup()
3166 rx_tid->ab = ab; in ath11k_peer_rx_frag_setup()
3167 timer_setup(&rx_tid->frag_timer, ath11k_dp_rx_frag_timer, 0); in ath11k_peer_rx_frag_setup()
3168 skb_queue_head_init(&rx_tid->rx_frags); in ath11k_peer_rx_frag_setup()
3171 peer->tfm_mmic = tfm; in ath11k_peer_rx_frag_setup()
3172 peer->dp_setup_done = true; in ath11k_peer_rx_frag_setup()
3173 spin_unlock_bh(&ab->base_lock); in ath11k_peer_rx_frag_setup()
3188 return -EINVAL; in ath11k_dp_rx_h_michael_mic()
3190 desc->tfm = tfm; in ath11k_dp_rx_h_michael_mic()
3203 if (ieee80211_is_data_qos(hdr->frame_control)) in ath11k_dp_rx_h_michael_mic()
3222 struct hal_rx_desc *rx_desc = (struct hal_rx_desc *)msdu->data; in ath11k_dp_rx_h_verify_tkip_mic()
3229 u32 hdr_len, hal_rx_desc_sz = ar->ab->hw_params.hal_desc_sz; in ath11k_dp_rx_h_verify_tkip_mic()
3233 if (ath11k_dp_rx_h_mpdu_start_enctype(ar->ab, rx_desc) != in ath11k_dp_rx_h_verify_tkip_mic()
3237 hdr = (struct ieee80211_hdr *)(msdu->data + hal_rx_desc_sz); in ath11k_dp_rx_h_verify_tkip_mic()
3238 hdr_len = ieee80211_hdrlen(hdr->frame_control); in ath11k_dp_rx_h_verify_tkip_mic()
3242 if (!is_multicast_ether_addr(hdr->addr1)) in ath11k_dp_rx_h_verify_tkip_mic()
3243 key_idx = peer->ucast_keyidx; in ath11k_dp_rx_h_verify_tkip_mic()
3245 key_idx = peer->mcast_keyidx; in ath11k_dp_rx_h_verify_tkip_mic()
3247 key_conf = peer->keys[key_idx]; in ath11k_dp_rx_h_verify_tkip_mic()
3249 data = msdu->data + head_len; in ath11k_dp_rx_h_verify_tkip_mic()
3250 data_len = msdu->len - head_len - tail_len; in ath11k_dp_rx_h_verify_tkip_mic()
3251 key = &key_conf->key[NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY]; in ath11k_dp_rx_h_verify_tkip_mic()
3253 ret = ath11k_dp_rx_h_michael_mic(peer->tfm_mmic, key, hdr, data, data_len, mic); in ath11k_dp_rx_h_verify_tkip_mic()
3260 (ATH11K_SKB_RXCB(msdu))->is_first_msdu = true; in ath11k_dp_rx_h_verify_tkip_mic()
3261 (ATH11K_SKB_RXCB(msdu))->is_last_msdu = true; in ath11k_dp_rx_h_verify_tkip_mic()
3263 rxs->flag |= RX_FLAG_MMIC_ERROR | RX_FLAG_MMIC_STRIPPED | in ath11k_dp_rx_h_verify_tkip_mic()
3270 ieee80211_rx(ar->hw, msdu); in ath11k_dp_rx_h_verify_tkip_mic()
3271 return -EINVAL; in ath11k_dp_rx_h_verify_tkip_mic()
3280 u32 hal_rx_desc_sz = ar->ab->hw_params.hal_desc_sz; in ath11k_dp_rx_h_undecap_frag()
3285 hdr = (struct ieee80211_hdr *)(msdu->data + hal_rx_desc_sz); in ath11k_dp_rx_h_undecap_frag()
3288 skb_trim(msdu, msdu->len - in ath11k_dp_rx_h_undecap_frag()
3292 skb_trim(msdu, msdu->len - in ath11k_dp_rx_h_undecap_frag()
3296 hdr_len = ieee80211_hdrlen(hdr->frame_control); in ath11k_dp_rx_h_undecap_frag()
3299 memmove((void *)msdu->data + hal_rx_desc_sz + crypto_len, in ath11k_dp_rx_h_undecap_frag()
3300 (void *)msdu->data + hal_rx_desc_sz, hdr_len); in ath11k_dp_rx_h_undecap_frag()
3318 u32 flags, hal_rx_desc_sz = ar->ab->hw_params.hal_desc_sz; in ath11k_dp_rx_h_defrag()
3320 first_frag = skb_peek(&rx_tid->rx_frags); in ath11k_dp_rx_h_defrag()
3321 last_frag = skb_peek_tail(&rx_tid->rx_frags); in ath11k_dp_rx_h_defrag()
3323 skb_queue_walk(&rx_tid->rx_frags, skb) { in ath11k_dp_rx_h_defrag()
3325 rx_desc = (struct hal_rx_desc *)skb->data; in ath11k_dp_rx_h_defrag()
3326 hdr = (struct ieee80211_hdr *)(skb->data + hal_rx_desc_sz); in ath11k_dp_rx_h_defrag()
3328 enctype = ath11k_dp_rx_h_mpdu_start_enctype(ar->ab, rx_desc); in ath11k_dp_rx_h_defrag()
3330 rx_attention = ath11k_dp_rx_get_attention(ar->ab, rx_desc); in ath11k_dp_rx_h_defrag()
3344 skb_trim(skb, skb->len - FCS_LEN); in ath11k_dp_rx_h_defrag()
3349 ieee80211_hdrlen(hdr->frame_control)); in ath11k_dp_rx_h_defrag()
3350 msdu_len += skb->len; in ath11k_dp_rx_h_defrag()
3353 extra_space = msdu_len - (DP_RX_BUFFER_SIZE + skb_tailroom(first_frag)); in ath11k_dp_rx_h_defrag()
3356 return -ENOMEM; in ath11k_dp_rx_h_defrag()
3358 __skb_unlink(first_frag, &rx_tid->rx_frags); in ath11k_dp_rx_h_defrag()
3359 while ((skb = __skb_dequeue(&rx_tid->rx_frags))) { in ath11k_dp_rx_h_defrag()
3360 skb_put_data(first_frag, skb->data, skb->len); in ath11k_dp_rx_h_defrag()
3364 hdr = (struct ieee80211_hdr *)(first_frag->data + hal_rx_desc_sz); in ath11k_dp_rx_h_defrag()
3365 hdr->frame_control &= ~__cpu_to_le16(IEEE80211_FCTL_MOREFRAGS); in ath11k_dp_rx_h_defrag()
3366 ATH11K_SKB_RXCB(first_frag)->is_frag = 1; in ath11k_dp_rx_h_defrag()
3378 struct ath11k_base *ab = ar->ab; in ath11k_dp_rx_h_defrag_reo_reinject()
3379 struct ath11k_pdev_dp *dp = &ar->dp; in ath11k_dp_rx_h_defrag_reo_reinject()
3380 struct dp_rxdma_ring *rx_refill_ring = &dp->rx_refill_buf_ring; in ath11k_dp_rx_h_defrag_reo_reinject()
3381 struct hal_rx_desc *rx_desc = (struct hal_rx_desc *)defrag_skb->data; in ath11k_dp_rx_h_defrag_reo_reinject()
3393 hal_rx_desc_sz = ab->hw_params.hal_desc_sz; in ath11k_dp_rx_h_defrag_reo_reinject()
3394 link_desc_banks = ab->dp.link_desc_banks; in ath11k_dp_rx_h_defrag_reo_reinject()
3395 reo_dest_ring = rx_tid->dst_ring_desc; in ath11k_dp_rx_h_defrag_reo_reinject()
3399 (paddr - link_desc_banks[desc_bank].paddr)); in ath11k_dp_rx_h_defrag_reo_reinject()
3400 msdu0 = &msdu_link->msdu_link[0]; in ath11k_dp_rx_h_defrag_reo_reinject()
3401 dst_idx = FIELD_GET(RX_MSDU_DESC_INFO0_REO_DEST_IND, msdu0->rx_msdu_info.info0); in ath11k_dp_rx_h_defrag_reo_reinject()
3408 defrag_skb->len - hal_rx_desc_sz) | in ath11k_dp_rx_h_defrag_reo_reinject()
3412 msdu0->rx_msdu_info.info0 = msdu_info; in ath11k_dp_rx_h_defrag_reo_reinject()
3415 ath11k_dp_rxdesc_set_msdu_len(ab, rx_desc, defrag_skb->len - hal_rx_desc_sz); in ath11k_dp_rx_h_defrag_reo_reinject()
3417 paddr = dma_map_single(ab->dev, defrag_skb->data, in ath11k_dp_rx_h_defrag_reo_reinject()
3418 defrag_skb->len + skb_tailroom(defrag_skb), in ath11k_dp_rx_h_defrag_reo_reinject()
3420 if (dma_mapping_error(ab->dev, paddr)) in ath11k_dp_rx_h_defrag_reo_reinject()
3421 return -ENOMEM; in ath11k_dp_rx_h_defrag_reo_reinject()
3423 spin_lock_bh(&rx_refill_ring->idr_lock); in ath11k_dp_rx_h_defrag_reo_reinject()
3424 buf_id = idr_alloc(&rx_refill_ring->bufs_idr, defrag_skb, 0, in ath11k_dp_rx_h_defrag_reo_reinject()
3425 rx_refill_ring->bufs_max * 3, GFP_ATOMIC); in ath11k_dp_rx_h_defrag_reo_reinject()
3426 spin_unlock_bh(&rx_refill_ring->idr_lock); in ath11k_dp_rx_h_defrag_reo_reinject()
3428 ret = -ENOMEM; in ath11k_dp_rx_h_defrag_reo_reinject()
3432 ATH11K_SKB_RXCB(defrag_skb)->paddr = paddr; in ath11k_dp_rx_h_defrag_reo_reinject()
3433 cookie = FIELD_PREP(DP_RXDMA_BUF_COOKIE_PDEV_ID, dp->mac_id) | in ath11k_dp_rx_h_defrag_reo_reinject()
3437 ab->hw_params.hal_params->rx_buf_rbm); in ath11k_dp_rx_h_defrag_reo_reinject()
3440 srng = &ab->hal.srng_list[ab->dp.reo_reinject_ring.ring_id]; in ath11k_dp_rx_h_defrag_reo_reinject()
3442 spin_lock_bh(&srng->lock); in ath11k_dp_rx_h_defrag_reo_reinject()
3449 spin_unlock_bh(&srng->lock); in ath11k_dp_rx_h_defrag_reo_reinject()
3450 ret = -ENOSPC; in ath11k_dp_rx_h_defrag_reo_reinject()
3460 FIELD_PREP(RX_MPDU_DESC_INFO0_SEQ_NUM, rx_tid->cur_sn) | in ath11k_dp_rx_h_defrag_reo_reinject()
3467 reo_ent_ring->rx_mpdu_info.info0 = mpdu_info; in ath11k_dp_rx_h_defrag_reo_reinject()
3468 reo_ent_ring->rx_mpdu_info.meta_data = reo_dest_ring->rx_mpdu_info.meta_data; in ath11k_dp_rx_h_defrag_reo_reinject()
3469 reo_ent_ring->queue_addr_lo = reo_dest_ring->queue_addr_lo; in ath11k_dp_rx_h_defrag_reo_reinject()
3470 reo_ent_ring->info0 = FIELD_PREP(HAL_REO_ENTR_RING_INFO0_QUEUE_ADDR_HI, in ath11k_dp_rx_h_defrag_reo_reinject()
3472 reo_dest_ring->info0)) | in ath11k_dp_rx_h_defrag_reo_reinject()
3475 spin_unlock_bh(&srng->lock); in ath11k_dp_rx_h_defrag_reo_reinject()
3480 spin_lock_bh(&rx_refill_ring->idr_lock); in ath11k_dp_rx_h_defrag_reo_reinject()
3481 idr_remove(&rx_refill_ring->bufs_idr, buf_id); in ath11k_dp_rx_h_defrag_reo_reinject()
3482 spin_unlock_bh(&rx_refill_ring->idr_lock); in ath11k_dp_rx_h_defrag_reo_reinject()
3484 dma_unmap_single(ab->dev, paddr, defrag_skb->len + skb_tailroom(defrag_skb), in ath11k_dp_rx_h_defrag_reo_reinject()
3494 frag1 = ath11k_dp_rx_h_mpdu_start_frag_no(ar->ab, a); in ath11k_dp_rx_h_cmp_frags()
3495 frag2 = ath11k_dp_rx_h_mpdu_start_frag_no(ar->ab, b); in ath11k_dp_rx_h_cmp_frags()
3497 return frag1 - frag2; in ath11k_dp_rx_h_cmp_frags()
3522 u32 hal_rx_desc_sz = ar->ab->hw_params.hal_desc_sz; in ath11k_dp_rx_h_get_pn()
3524 hdr = (struct ieee80211_hdr *)(skb->data + hal_rx_desc_sz); in ath11k_dp_rx_h_get_pn()
3525 ehdr = skb->data + hal_rx_desc_sz + ieee80211_hdrlen(hdr->frame_control); in ath11k_dp_rx_h_get_pn()
3546 first_frag = skb_peek(&rx_tid->rx_frags); in ath11k_dp_rx_h_defrag_validate_incr_pn()
3547 desc = (struct hal_rx_desc *)first_frag->data; in ath11k_dp_rx_h_defrag_validate_incr_pn()
3549 encrypt_type = ath11k_dp_rx_h_mpdu_start_enctype(ar->ab, desc); in ath11k_dp_rx_h_defrag_validate_incr_pn()
3557 skb_queue_walk(&rx_tid->rx_frags, skb) { in ath11k_dp_rx_h_defrag_validate_incr_pn()
3573 struct ath11k_base *ab = ar->ab; in ath11k_dp_rx_frag_h_mpdu()
3585 rx_desc = (struct hal_rx_desc *)msdu->data; in ath11k_dp_rx_frag_h_mpdu()
3586 peer_id = ath11k_dp_rx_h_mpdu_start_peer_id(ar->ab, rx_desc); in ath11k_dp_rx_frag_h_mpdu()
3587 tid = ath11k_dp_rx_h_mpdu_start_tid(ar->ab, rx_desc); in ath11k_dp_rx_frag_h_mpdu()
3588 seqno = ath11k_dp_rx_h_mpdu_start_seq_no(ar->ab, rx_desc); in ath11k_dp_rx_frag_h_mpdu()
3589 frag_no = ath11k_dp_rx_h_mpdu_start_frag_no(ar->ab, msdu); in ath11k_dp_rx_frag_h_mpdu()
3590 more_frags = ath11k_dp_rx_h_mpdu_start_more_frags(ar->ab, msdu); in ath11k_dp_rx_frag_h_mpdu()
3591 is_mcbc = ath11k_dp_rx_h_attn_is_mcbc(ar->ab, rx_desc); in ath11k_dp_rx_frag_h_mpdu()
3595 return -EINVAL; in ath11k_dp_rx_frag_h_mpdu()
3597 if (!ath11k_dp_rx_h_mpdu_start_seq_ctrl_valid(ar->ab, rx_desc) || in ath11k_dp_rx_frag_h_mpdu()
3598 !ath11k_dp_rx_h_mpdu_start_fc_valid(ar->ab, rx_desc) || in ath11k_dp_rx_frag_h_mpdu()
3600 return -EINVAL; in ath11k_dp_rx_frag_h_mpdu()
3608 return -EINVAL; in ath11k_dp_rx_frag_h_mpdu()
3610 spin_lock_bh(&ab->base_lock); in ath11k_dp_rx_frag_h_mpdu()
3613 ath11k_warn(ab, "failed to find the peer to de-fragment received fragment peer_id %d\n", in ath11k_dp_rx_frag_h_mpdu()
3615 ret = -ENOENT; in ath11k_dp_rx_frag_h_mpdu()
3618 if (!peer->dp_setup_done) { in ath11k_dp_rx_frag_h_mpdu()
3620 peer->addr, peer_id); in ath11k_dp_rx_frag_h_mpdu()
3621 ret = -ENOENT; in ath11k_dp_rx_frag_h_mpdu()
3625 rx_tid = &peer->rx_tid[tid]; in ath11k_dp_rx_frag_h_mpdu()
3627 if ((!skb_queue_empty(&rx_tid->rx_frags) && seqno != rx_tid->cur_sn) || in ath11k_dp_rx_frag_h_mpdu()
3628 skb_queue_empty(&rx_tid->rx_frags)) { in ath11k_dp_rx_frag_h_mpdu()
3631 rx_tid->cur_sn = seqno; in ath11k_dp_rx_frag_h_mpdu()
3634 if (rx_tid->rx_frag_bitmap & BIT(frag_no)) { in ath11k_dp_rx_frag_h_mpdu()
3636 ret = -EINVAL; in ath11k_dp_rx_frag_h_mpdu()
3640 if (!rx_tid->rx_frag_bitmap || (frag_no > __fls(rx_tid->rx_frag_bitmap))) in ath11k_dp_rx_frag_h_mpdu()
3641 __skb_queue_tail(&rx_tid->rx_frags, msdu); in ath11k_dp_rx_frag_h_mpdu()
3643 ath11k_dp_rx_h_sort_frags(ar, &rx_tid->rx_frags, msdu); in ath11k_dp_rx_frag_h_mpdu()
3645 rx_tid->rx_frag_bitmap |= BIT(frag_no); in ath11k_dp_rx_frag_h_mpdu()
3647 rx_tid->last_frag_no = frag_no; in ath11k_dp_rx_frag_h_mpdu()
3650 rx_tid->dst_ring_desc = kmemdup(ring_desc, in ath11k_dp_rx_frag_h_mpdu()
3651 sizeof(*rx_tid->dst_ring_desc), in ath11k_dp_rx_frag_h_mpdu()
3653 if (!rx_tid->dst_ring_desc) { in ath11k_dp_rx_frag_h_mpdu()
3654 ret = -ENOMEM; in ath11k_dp_rx_frag_h_mpdu()
3662 if (!rx_tid->last_frag_no || in ath11k_dp_rx_frag_h_mpdu()
3663 rx_tid->rx_frag_bitmap != GENMASK(rx_tid->last_frag_no, 0)) { in ath11k_dp_rx_frag_h_mpdu()
3664 mod_timer(&rx_tid->frag_timer, jiffies + in ath11k_dp_rx_frag_h_mpdu()
3669 spin_unlock_bh(&ab->base_lock); in ath11k_dp_rx_frag_h_mpdu()
3670 del_timer_sync(&rx_tid->frag_timer); in ath11k_dp_rx_frag_h_mpdu()
3671 spin_lock_bh(&ab->base_lock); in ath11k_dp_rx_frag_h_mpdu()
3696 spin_unlock_bh(&ab->base_lock); in ath11k_dp_rx_frag_h_mpdu()
3703 struct ath11k_pdev_dp *dp = &ar->dp; in ath11k_dp_process_rx_err_buf()
3704 struct dp_rxdma_ring *rx_ring = &dp->rx_refill_buf_ring; in ath11k_dp_process_rx_err_buf()
3710 u32 hal_rx_desc_sz = ar->ab->hw_params.hal_desc_sz; in ath11k_dp_process_rx_err_buf()
3712 spin_lock_bh(&rx_ring->idr_lock); in ath11k_dp_process_rx_err_buf()
3713 msdu = idr_find(&rx_ring->bufs_idr, buf_id); in ath11k_dp_process_rx_err_buf()
3715 ath11k_warn(ar->ab, "rx err buf with invalid buf_id %d\n", in ath11k_dp_process_rx_err_buf()
3717 spin_unlock_bh(&rx_ring->idr_lock); in ath11k_dp_process_rx_err_buf()
3718 return -EINVAL; in ath11k_dp_process_rx_err_buf()
3721 idr_remove(&rx_ring->bufs_idr, buf_id); in ath11k_dp_process_rx_err_buf()
3722 spin_unlock_bh(&rx_ring->idr_lock); in ath11k_dp_process_rx_err_buf()
3725 dma_unmap_single(ar->ab->dev, rxcb->paddr, in ath11k_dp_process_rx_err_buf()
3726 msdu->len + skb_tailroom(msdu), in ath11k_dp_process_rx_err_buf()
3735 if (!rcu_dereference(ar->ab->pdevs_active[ar->pdev_idx])) { in ath11k_dp_process_rx_err_buf()
3740 if (test_bit(ATH11K_CAC_RUNNING, &ar->dev_flags)) { in ath11k_dp_process_rx_err_buf()
3745 rx_desc = (struct hal_rx_desc *)msdu->data; in ath11k_dp_process_rx_err_buf()
3746 msdu_len = ath11k_dp_rx_h_msdu_start_msdu_len(ar->ab, rx_desc); in ath11k_dp_process_rx_err_buf()
3748 hdr_status = ath11k_dp_rx_h_80211_hdr(ar->ab, rx_desc); in ath11k_dp_process_rx_err_buf()
3749 ath11k_warn(ar->ab, "invalid msdu leng %u", msdu_len); in ath11k_dp_process_rx_err_buf()
3750 ath11k_dbg_dump(ar->ab, ATH11K_DBG_DATA, NULL, "", hdr_status, in ath11k_dp_process_rx_err_buf()
3752 ath11k_dbg_dump(ar->ab, ATH11K_DBG_DATA, NULL, "", rx_desc, in ath11k_dp_process_rx_err_buf()
3762 ath11k_dp_rx_link_desc_return(ar->ab, ring_desc, in ath11k_dp_process_rx_err_buf()
3794 dp = &ab->dp; in ath11k_dp_process_rx_err()
3795 reo_except = &dp->reo_except_ring; in ath11k_dp_process_rx_err()
3796 link_desc_banks = dp->link_desc_banks; in ath11k_dp_process_rx_err()
3798 srng = &ab->hal.srng_list[reo_except->ring_id]; in ath11k_dp_process_rx_err()
3800 spin_lock_bh(&srng->lock); in ath11k_dp_process_rx_err()
3808 ab->soc_stats.err_ring_pkts++; in ath11k_dp_process_rx_err()
3817 (paddr - link_desc_banks[desc_bank].paddr); in ath11k_dp_process_rx_err()
3823 ab->soc_stats.invalid_rbm++; in ath11k_dp_process_rx_err()
3830 is_frag = !!(reo_desc->rx_mpdu_info.info0 & RX_MPDU_DESC_INFO0_FRAG_FLAG); in ath11k_dp_process_rx_err()
3849 ar = ab->pdevs[mac_id].ar; in ath11k_dp_process_rx_err()
3862 budget = quota - tot_n_bufs_reaped; in ath11k_dp_process_rx_err()
3868 spin_unlock_bh(&srng->lock); in ath11k_dp_process_rx_err()
3870 for (i = 0; i < ab->num_radios; i++) { in ath11k_dp_process_rx_err()
3874 ar = ab->pdevs[i].ar; in ath11k_dp_process_rx_err()
3875 rx_ring = &ar->dp.rx_refill_buf_ring; in ath11k_dp_process_rx_err()
3878 ab->hw_params.hal_params->rx_buf_rbm); in ath11k_dp_process_rx_err()
3893 (DP_RX_BUFFER_SIZE - ar->ab->hw_params.hal_desc_sz)); in ath11k_dp_rx_null_q_desc_sg_drop()
3897 if (rxcb->err_rel_src == HAL_WBM_REL_SRC_MODULE_REO && in ath11k_dp_rx_null_q_desc_sg_drop()
3898 rxcb->err_code == HAL_REO_DEST_RING_ERROR_CODE_DESC_ADDR_ZERO) { in ath11k_dp_rx_null_q_desc_sg_drop()
3903 n_buffs--; in ath11k_dp_rx_null_q_desc_sg_drop()
3913 struct hal_rx_desc *desc = (struct hal_rx_desc *)msdu->data; in ath11k_dp_rx_h_null_q_desc()
3917 u32 hal_rx_desc_sz = ar->ab->hw_params.hal_desc_sz; in ath11k_dp_rx_h_null_q_desc()
3919 msdu_len = ath11k_dp_rx_h_msdu_start_msdu_len(ar->ab, desc); in ath11k_dp_rx_h_null_q_desc()
3921 if (!rxcb->is_frag && ((msdu_len + hal_rx_desc_sz) > DP_RX_BUFFER_SIZE)) { in ath11k_dp_rx_h_null_q_desc()
3923 msdu_len = msdu_len - (DP_RX_BUFFER_SIZE - hal_rx_desc_sz); in ath11k_dp_rx_h_null_q_desc()
3925 return -EINVAL; in ath11k_dp_rx_h_null_q_desc()
3928 rx_attention = ath11k_dp_rx_get_attention(ar->ab, desc); in ath11k_dp_rx_h_null_q_desc()
3930 ath11k_warn(ar->ab, in ath11k_dp_rx_h_null_q_desc()
3933 return -EIO; in ath11k_dp_rx_h_null_q_desc()
3941 * non-QOS TID queue, in the absence of any other default TID queue. in ath11k_dp_rx_h_null_q_desc()
3945 rxcb->is_first_msdu = ath11k_dp_rx_h_msdu_end_first_msdu(ar->ab, desc); in ath11k_dp_rx_h_null_q_desc()
3946 rxcb->is_last_msdu = ath11k_dp_rx_h_msdu_end_last_msdu(ar->ab, desc); in ath11k_dp_rx_h_null_q_desc()
3948 if (rxcb->is_frag) { in ath11k_dp_rx_h_null_q_desc()
3951 l3pad_bytes = ath11k_dp_rx_h_msdu_end_l3pad(ar->ab, desc); in ath11k_dp_rx_h_null_q_desc()
3954 return -EINVAL; in ath11k_dp_rx_h_null_q_desc()
3963 rxcb->tid = ath11k_dp_rx_h_mpdu_start_tid(ar->ab, desc); in ath11k_dp_rx_h_null_q_desc()
3979 ar->ab->soc_stats.reo_error[rxcb->err_code]++; in ath11k_dp_rx_h_reo_err()
3981 switch (rxcb->err_code) { in ath11k_dp_rx_h_reo_err()
4007 struct hal_rx_desc *desc = (struct hal_rx_desc *)msdu->data; in ath11k_dp_rx_h_tkip_mic_err()
4010 u32 hal_rx_desc_sz = ar->ab->hw_params.hal_desc_sz; in ath11k_dp_rx_h_tkip_mic_err()
4012 rxcb->is_first_msdu = ath11k_dp_rx_h_msdu_end_first_msdu(ar->ab, desc); in ath11k_dp_rx_h_tkip_mic_err()
4013 rxcb->is_last_msdu = ath11k_dp_rx_h_msdu_end_last_msdu(ar->ab, desc); in ath11k_dp_rx_h_tkip_mic_err()
4015 l3pad_bytes = ath11k_dp_rx_h_msdu_end_l3pad(ar->ab, desc); in ath11k_dp_rx_h_tkip_mic_err()
4016 msdu_len = ath11k_dp_rx_h_msdu_start_msdu_len(ar->ab, desc); in ath11k_dp_rx_h_tkip_mic_err()
4022 status->flag |= (RX_FLAG_MMIC_STRIPPED | RX_FLAG_MMIC_ERROR | in ath11k_dp_rx_h_tkip_mic_err()
4035 ar->ab->soc_stats.rxdma_error[rxcb->err_code]++; in ath11k_dp_rx_h_rxdma_err()
4037 switch (rxcb->err_code) { in ath11k_dp_rx_h_rxdma_err()
4061 switch (rxcb->err_rel_src) { in ath11k_dp_rx_wbm_err()
4085 struct ath11k_dp *dp = &ab->dp; in ath11k_dp_rx_process_wbm_err()
4098 for (i = 0; i < ab->num_radios; i++) in ath11k_dp_rx_process_wbm_err()
4101 srng = &ab->hal.srng_list[dp->rx_rel_ring.ring_id]; in ath11k_dp_rx_process_wbm_err()
4103 spin_lock_bh(&srng->lock); in ath11k_dp_rx_process_wbm_err()
4123 ar = ab->pdevs[mac_id].ar; in ath11k_dp_rx_process_wbm_err()
4124 rx_ring = &ar->dp.rx_refill_buf_ring; in ath11k_dp_rx_process_wbm_err()
4126 spin_lock_bh(&rx_ring->idr_lock); in ath11k_dp_rx_process_wbm_err()
4127 msdu = idr_find(&rx_ring->bufs_idr, buf_id); in ath11k_dp_rx_process_wbm_err()
4131 spin_unlock_bh(&rx_ring->idr_lock); in ath11k_dp_rx_process_wbm_err()
4135 idr_remove(&rx_ring->bufs_idr, buf_id); in ath11k_dp_rx_process_wbm_err()
4136 spin_unlock_bh(&rx_ring->idr_lock); in ath11k_dp_rx_process_wbm_err()
4139 dma_unmap_single(ab->dev, rxcb->paddr, in ath11k_dp_rx_process_wbm_err()
4140 msdu->len + skb_tailroom(msdu), in ath11k_dp_rx_process_wbm_err()
4145 budget--; in ath11k_dp_rx_process_wbm_err()
4153 rxcb->err_rel_src = err_info.err_rel_src; in ath11k_dp_rx_process_wbm_err()
4154 rxcb->err_code = err_info.err_code; in ath11k_dp_rx_process_wbm_err()
4155 rxcb->rx_desc = (struct hal_rx_desc *)msdu->data; in ath11k_dp_rx_process_wbm_err()
4161 spin_unlock_bh(&srng->lock); in ath11k_dp_rx_process_wbm_err()
4166 for (i = 0; i < ab->num_radios; i++) { in ath11k_dp_rx_process_wbm_err()
4170 ar = ab->pdevs[i].ar; in ath11k_dp_rx_process_wbm_err()
4171 rx_ring = &ar->dp.rx_refill_buf_ring; in ath11k_dp_rx_process_wbm_err()
4174 ab->hw_params.hal_params->rx_buf_rbm); in ath11k_dp_rx_process_wbm_err()
4178 for (i = 0; i < ab->num_radios; i++) { in ath11k_dp_rx_process_wbm_err()
4179 if (!rcu_dereference(ab->pdevs_active[i])) { in ath11k_dp_rx_process_wbm_err()
4184 ar = ab->pdevs[i].ar; in ath11k_dp_rx_process_wbm_err()
4186 if (test_bit(ATH11K_CAC_RUNNING, &ar->dev_flags)) { in ath11k_dp_rx_process_wbm_err()
4204 struct dp_link_desc_bank *link_desc_banks = ab->dp.link_desc_banks; in ath11k_dp_process_rxdma_err()
4222 ar = ab->pdevs[ath11k_hw_mac_id_to_pdev_id(&ab->hw_params, mac_id)].ar; in ath11k_dp_process_rxdma_err()
4223 err_ring = &ar->dp.rxdma_err_dst_ring[ath11k_hw_mac_id_to_srng_id(&ab->hw_params, in ath11k_dp_process_rxdma_err()
4225 rx_ring = &ar->dp.rx_refill_buf_ring; in ath11k_dp_process_rxdma_err()
4227 srng = &ab->hal.srng_list[err_ring->ring_id]; in ath11k_dp_process_rxdma_err()
4229 spin_lock_bh(&srng->lock); in ath11k_dp_process_rxdma_err()
4233 while (quota-- && in ath11k_dp_process_rxdma_err()
4240 entr_ring->info1); in ath11k_dp_process_rxdma_err()
4241 ab->soc_stats.rxdma_error[rxdma_err_code]++; in ath11k_dp_process_rxdma_err()
4244 (paddr - link_desc_banks[desc_bank].paddr); in ath11k_dp_process_rxdma_err()
4252 spin_lock_bh(&rx_ring->idr_lock); in ath11k_dp_process_rxdma_err()
4253 skb = idr_find(&rx_ring->bufs_idr, buf_id); in ath11k_dp_process_rxdma_err()
4257 spin_unlock_bh(&rx_ring->idr_lock); in ath11k_dp_process_rxdma_err()
4261 idr_remove(&rx_ring->bufs_idr, buf_id); in ath11k_dp_process_rxdma_err()
4262 spin_unlock_bh(&rx_ring->idr_lock); in ath11k_dp_process_rxdma_err()
4265 dma_unmap_single(ab->dev, rxcb->paddr, in ath11k_dp_process_rxdma_err()
4266 skb->len + skb_tailroom(skb), in ath11k_dp_process_rxdma_err()
4279 spin_unlock_bh(&srng->lock); in ath11k_dp_process_rxdma_err()
4283 ab->hw_params.hal_params->rx_buf_rbm); in ath11k_dp_process_rxdma_err()
4285 return budget - quota; in ath11k_dp_process_rxdma_err()
4290 struct ath11k_dp *dp = &ab->dp; in ath11k_dp_process_reo_status()
4298 srng = &ab->hal.srng_list[dp->reo_status_ring.ring_id]; in ath11k_dp_process_reo_status()
4302 spin_lock_bh(&srng->lock); in ath11k_dp_process_reo_status()
4343 spin_lock_bh(&dp->reo_cmd_lock); in ath11k_dp_process_reo_status()
4344 list_for_each_entry_safe(cmd, tmp, &dp->reo_cmd_list, list) { in ath11k_dp_process_reo_status()
4345 if (reo_status.uniform_hdr.cmd_num == cmd->cmd_num) { in ath11k_dp_process_reo_status()
4347 list_del(&cmd->list); in ath11k_dp_process_reo_status()
4351 spin_unlock_bh(&dp->reo_cmd_lock); in ath11k_dp_process_reo_status()
4354 cmd->handler(dp, (void *)&cmd->data, in ath11k_dp_process_reo_status()
4364 spin_unlock_bh(&srng->lock); in ath11k_dp_process_reo_status()
4369 struct ath11k *ar = ab->pdevs[mac_id].ar; in ath11k_dp_rx_pdev_free()
4377 struct ath11k *ar = ab->pdevs[mac_id].ar; in ath11k_dp_rx_pdev_alloc()
4378 struct ath11k_pdev_dp *dp = &ar->dp; in ath11k_dp_rx_pdev_alloc()
4395 ring_id = dp->rx_refill_buf_ring.refill_buf_ring.ring_id; in ath11k_dp_rx_pdev_alloc()
4403 if (ab->hw_params.rx_mac_buf_ring) { in ath11k_dp_rx_pdev_alloc()
4404 for (i = 0; i < ab->hw_params.num_rxmda_per_pdev; i++) { in ath11k_dp_rx_pdev_alloc()
4405 ring_id = dp->rx_mac_buf_ring[i].ring_id; in ath11k_dp_rx_pdev_alloc()
4416 for (i = 0; i < ab->hw_params.num_rxmda_per_pdev; i++) { in ath11k_dp_rx_pdev_alloc()
4417 ring_id = dp->rxdma_err_dst_ring[i].ring_id; in ath11k_dp_rx_pdev_alloc()
4427 if (!ab->hw_params.rxdma1_enable) in ath11k_dp_rx_pdev_alloc()
4430 ring_id = dp->rxdma_mon_buf_ring.refill_buf_ring.ring_id; in ath11k_dp_rx_pdev_alloc()
4439 dp->rxdma_mon_dst_ring.ring_id, in ath11k_dp_rx_pdev_alloc()
4447 dp->rxdma_mon_desc_ring.ring_id, in ath11k_dp_rx_pdev_alloc()
4456 for (i = 0; i < ab->hw_params.num_rxmda_per_pdev; i++) { in ath11k_dp_rx_pdev_alloc()
4457 ring_id = dp->rx_mon_status_refill_ring[i].refill_buf_ring.ring_id; in ath11k_dp_rx_pdev_alloc()
4473 if (*total_len >= (DP_RX_BUFFER_SIZE - sizeof(struct hal_rx_desc))) { in ath11k_dp_mon_set_frag_len()
4474 *frag_len = DP_RX_BUFFER_SIZE - sizeof(struct hal_rx_desc); in ath11k_dp_mon_set_frag_len()
4475 *total_len -= *frag_len; in ath11k_dp_mon_set_frag_len()
4487 struct ath11k_pdev_dp *dp = &ar->dp; in ath11k_dp_rx_monitor_link_desc_return()
4493 if (ar->ab->hw_params.rxdma1_enable) { in ath11k_dp_rx_monitor_link_desc_return()
4494 dp_srng = &dp->rxdma_mon_desc_ring; in ath11k_dp_rx_monitor_link_desc_return()
4495 hal_srng = &ar->ab->hal.srng_list[dp_srng->ring_id]; in ath11k_dp_rx_monitor_link_desc_return()
4497 dp_srng = &ar->ab->dp.wbm_desc_rel_ring; in ath11k_dp_rx_monitor_link_desc_return()
4498 hal_srng = &ar->ab->hal.srng_list[dp_srng->ring_id]; in ath11k_dp_rx_monitor_link_desc_return()
4501 ath11k_hal_srng_access_begin(ar->ab, hal_srng); in ath11k_dp_rx_monitor_link_desc_return()
4503 src_srng_desc = ath11k_hal_srng_src_get_next_entry(ar->ab, hal_srng); in ath11k_dp_rx_monitor_link_desc_return()
4511 ath11k_dbg(ar->ab, ATH11K_DBG_DATA, in ath11k_dp_rx_monitor_link_desc_return()
4513 ret = -ENOMEM; in ath11k_dp_rx_monitor_link_desc_return()
4516 ath11k_hal_srng_access_end(ar->ab, hal_srng); in ath11k_dp_rx_monitor_link_desc_return()
4530 buf_addr_info = (struct ath11k_buffer_addr *)&msdu_link->buf_addr_info; in ath11k_dp_rx_mon_next_link_desc_get()
4539 if (skb->len > len) { in ath11k_dp_pkt_set_pktlen()
4542 if (skb_tailroom(skb) < len - skb->len) { in ath11k_dp_pkt_set_pktlen()
4544 len - skb->len - skb_tailroom(skb), in ath11k_dp_pkt_set_pktlen()
4547 return -ENOMEM; in ath11k_dp_pkt_set_pktlen()
4550 skb_put(skb, (len - skb->len)); in ath11k_dp_pkt_set_pktlen()
4569 msdu_details = &msdu_link->msdu_link[0]; in ath11k_hal_rx_msdu_list_get()
4574 msdu_desc_info = &msdu_details[i - 1].rx_msdu_info; in ath11k_hal_rx_msdu_list_get()
4575 msdu_desc_info->info0 |= last; in ath11k_hal_rx_msdu_list_get()
4582 msdu_desc_info->info0 |= first; in ath11k_hal_rx_msdu_list_get()
4583 else if (i == (HAL_RX_NUM_MSDU_DESC - 1)) in ath11k_hal_rx_msdu_list_get()
4584 msdu_desc_info->info0 |= last; in ath11k_hal_rx_msdu_list_get()
4585 msdu_list->msdu_info[i].msdu_flags = msdu_desc_info->info0; in ath11k_hal_rx_msdu_list_get()
4586 msdu_list->msdu_info[i].msdu_len = in ath11k_hal_rx_msdu_list_get()
4587 HAL_RX_MSDU_PKT_LENGTH_GET(msdu_desc_info->info0); in ath11k_hal_rx_msdu_list_get()
4588 msdu_list->sw_cookie[i] = in ath11k_hal_rx_msdu_list_get()
4593 msdu_list->rbm[i] = tmp; in ath11k_hal_rx_msdu_list_get()
4604 ((msdu_ppdu_id - *ppdu_id) < DP_NOT_PPDU_ID_WRAP_AROUND)) { in ath11k_dp_rx_mon_comp_ppduid()
4608 ((*ppdu_id - msdu_ppdu_id) > DP_NOT_PPDU_ID_WRAP_AROUND)) { in ath11k_dp_rx_mon_comp_ppduid()
4623 if (info->msdu_flags & RX_MSDU_DESC_INFO0_MSDU_CONTINUATION) { in ath11k_dp_mon_get_buf_len()
4625 *total_len = info->msdu_len; in ath11k_dp_mon_get_buf_len()
4635 *frag_len = info->msdu_len; in ath11k_dp_mon_get_buf_len()
4638 *msdu_cnt -= 1; in ath11k_dp_mon_get_buf_len()
4648 struct ath11k_pdev_dp *dp = &ar->dp; in ath11k_dp_rx_mon_mpdu_pop()
4649 struct ath11k_mon_data *pmon = (struct ath11k_mon_data *)&dp->mon_data; in ath11k_dp_rx_mon_mpdu_pop()
4650 struct dp_rxdma_ring *rx_ring = &dp->rxdma_mon_buf_ring; in ath11k_dp_rx_mon_mpdu_pop()
4671 if (!ar->ab->hw_params.rxdma1_enable) in ath11k_dp_rx_mon_mpdu_pop()
4672 rx_ring = &dp->rx_refill_buf_ring; in ath11k_dp_rx_mon_mpdu_pop()
4680 ent_desc->info1) == in ath11k_dp_rx_mon_mpdu_pop()
4684 ent_desc->info1); in ath11k_dp_rx_mon_mpdu_pop()
4689 pmon->rx_mon_stats.dest_mpdu_drop++; in ath11k_dp_rx_mon_mpdu_pop()
4697 if (pmon->mon_last_linkdesc_paddr == paddr) { in ath11k_dp_rx_mon_mpdu_pop()
4698 pmon->rx_mon_stats.dup_mon_linkdesc_cnt++; in ath11k_dp_rx_mon_mpdu_pop()
4702 if (ar->ab->hw_params.rxdma1_enable) in ath11k_dp_rx_mon_mpdu_pop()
4704 (void *)pmon->link_desc_banks[sw_cookie].vaddr + in ath11k_dp_rx_mon_mpdu_pop()
4705 (paddr - pmon->link_desc_banks[sw_cookie].paddr); in ath11k_dp_rx_mon_mpdu_pop()
4708 (void *)ar->ab->dp.link_desc_banks[sw_cookie].vaddr + in ath11k_dp_rx_mon_mpdu_pop()
4709 (paddr - ar->ab->dp.link_desc_banks[sw_cookie].paddr); in ath11k_dp_rx_mon_mpdu_pop()
4717 if (pmon->mon_last_buf_cookie == msdu_list.sw_cookie[i]) { in ath11k_dp_rx_mon_mpdu_pop()
4718 ath11k_dbg(ar->ab, ATH11K_DBG_DATA, in ath11k_dp_rx_mon_mpdu_pop()
4720 i, pmon->mon_last_buf_cookie); in ath11k_dp_rx_mon_mpdu_pop()
4722 pmon->rx_mon_stats.dup_mon_buf_cnt++; in ath11k_dp_rx_mon_mpdu_pop()
4728 spin_lock_bh(&rx_ring->idr_lock); in ath11k_dp_rx_mon_mpdu_pop()
4729 msdu = idr_find(&rx_ring->bufs_idr, buf_id); in ath11k_dp_rx_mon_mpdu_pop()
4730 spin_unlock_bh(&rx_ring->idr_lock); in ath11k_dp_rx_mon_mpdu_pop()
4732 ath11k_dbg(ar->ab, ATH11K_DBG_DATA, in ath11k_dp_rx_mon_mpdu_pop()
4737 if (!rxcb->unmapped) { in ath11k_dp_rx_mon_mpdu_pop()
4738 dma_unmap_single(ar->ab->dev, rxcb->paddr, in ath11k_dp_rx_mon_mpdu_pop()
4739 msdu->len + in ath11k_dp_rx_mon_mpdu_pop()
4742 rxcb->unmapped = 1; in ath11k_dp_rx_mon_mpdu_pop()
4745 ath11k_dbg(ar->ab, ATH11K_DBG_DATA, in ath11k_dp_rx_mon_mpdu_pop()
4753 rx_desc = (struct hal_rx_desc *)msdu->data; in ath11k_dp_rx_mon_mpdu_pop()
4756 l2_hdr_offset = ath11k_dp_rx_h_msdu_end_l3pad(ar->ab, rx_desc); in ath11k_dp_rx_mon_mpdu_pop()
4759 if (!ath11k_dp_rxdesc_mpdu_valid(ar->ab, rx_desc)) { in ath11k_dp_rx_mon_mpdu_pop()
4763 pmon->mon_last_linkdesc_paddr = paddr; in ath11k_dp_rx_mon_mpdu_pop()
4768 ath11k_dp_rxdesc_get_ppduid(ar->ab, rx_desc); in ath11k_dp_rx_mon_mpdu_pop()
4781 pmon->mon_last_linkdesc_paddr = paddr; in ath11k_dp_rx_mon_mpdu_pop()
4794 last->next = msdu; in ath11k_dp_rx_mon_mpdu_pop()
4798 pmon->mon_last_buf_cookie = msdu_list.sw_cookie[i]; in ath11k_dp_rx_mon_mpdu_pop()
4800 spin_lock_bh(&rx_ring->idr_lock); in ath11k_dp_rx_mon_mpdu_pop()
4801 idr_remove(&rx_ring->bufs_idr, buf_id); in ath11k_dp_rx_mon_mpdu_pop()
4802 spin_unlock_bh(&rx_ring->idr_lock); in ath11k_dp_rx_mon_mpdu_pop()
4811 if (ar->ab->hw_params.rxdma1_enable) { in ath11k_dp_rx_mon_mpdu_pop()
4814 dp->mac_id)) in ath11k_dp_rx_mon_mpdu_pop()
4815 ath11k_dbg(ar->ab, ATH11K_DBG_DATA, in ath11k_dp_rx_mon_mpdu_pop()
4818 ath11k_dp_rx_link_desc_return(ar->ab, rx_link_buf_info, in ath11k_dp_rx_mon_mpdu_pop()
4827 last->next = NULL; in ath11k_dp_rx_mon_mpdu_pop()
4841 rx_pkt_offset = ar->ab->hw_params.hal_desc_sz; in ath11k_dp_rx_msdus_set_payload()
4842 l2_hdr_offset = ath11k_dp_rx_h_msdu_end_l3pad(ar->ab, in ath11k_dp_rx_msdus_set_payload()
4843 (struct hal_rx_desc *)msdu->data); in ath11k_dp_rx_msdus_set_payload()
4853 struct ath11k_base *ab = ar->ab; in ath11k_dp_rx_mon_merg_msdus()
4865 rx_desc = (struct hal_rx_desc *)head_msdu->data; in ath11k_dp_rx_mon_merg_msdus()
4883 msdu = head_msdu->next; in ath11k_dp_rx_mon_merg_msdus()
4889 msdu = msdu->next; in ath11k_dp_rx_mon_merg_msdus()
4892 prev_buf->next = NULL; in ath11k_dp_rx_mon_merg_msdus()
4894 skb_trim(prev_buf, prev_buf->len - HAL_RX_FCS_LEN); in ath11k_dp_rx_mon_merg_msdus()
4898 rx_desc = (struct hal_rx_desc *)head_msdu->data; in ath11k_dp_rx_mon_merg_msdus()
4904 if (ieee80211_is_data_qos(wh->frame_control)) in ath11k_dp_rx_mon_merg_msdus()
4918 msdu = msdu->next; in ath11k_dp_rx_mon_merg_msdus()
4925 "mpdu_buf %p mpdu_buf->len %u", in ath11k_dp_rx_mon_merg_msdus()
4926 prev_buf, prev_buf->len); in ath11k_dp_rx_mon_merg_msdus()
4946 put_unaligned_le16(rx_status->he_data1, &rtap_buf[rtap_len]); in ath11k_dp_rx_update_radiotap_he()
4949 put_unaligned_le16(rx_status->he_data2, &rtap_buf[rtap_len]); in ath11k_dp_rx_update_radiotap_he()
4952 put_unaligned_le16(rx_status->he_data3, &rtap_buf[rtap_len]); in ath11k_dp_rx_update_radiotap_he()
4955 put_unaligned_le16(rx_status->he_data4, &rtap_buf[rtap_len]); in ath11k_dp_rx_update_radiotap_he()
4958 put_unaligned_le16(rx_status->he_data5, &rtap_buf[rtap_len]); in ath11k_dp_rx_update_radiotap_he()
4961 put_unaligned_le16(rx_status->he_data6, &rtap_buf[rtap_len]); in ath11k_dp_rx_update_radiotap_he()
4970 put_unaligned_le16(rx_status->he_flags1, &rtap_buf[rtap_len]); in ath11k_dp_rx_update_radiotap_he_mu()
4973 put_unaligned_le16(rx_status->he_flags2, &rtap_buf[rtap_len]); in ath11k_dp_rx_update_radiotap_he_mu()
4976 rtap_buf[rtap_len] = rx_status->he_RU[0]; in ath11k_dp_rx_update_radiotap_he_mu()
4979 rtap_buf[rtap_len] = rx_status->he_RU[1]; in ath11k_dp_rx_update_radiotap_he_mu()
4982 rtap_buf[rtap_len] = rx_status->he_RU[2]; in ath11k_dp_rx_update_radiotap_he_mu()
4985 rtap_buf[rtap_len] = rx_status->he_RU[3]; in ath11k_dp_rx_update_radiotap_he_mu()
4996 rxs->flag |= RX_FLAG_MACTIME_START; in ath11k_update_radiotap()
4997 rxs->signal = ppduinfo->rssi_comb + ATH11K_DEFAULT_NOISE_FLOOR; in ath11k_update_radiotap()
4999 if (ppduinfo->nss) in ath11k_update_radiotap()
5000 rxs->nss = ppduinfo->nss; in ath11k_update_radiotap()
5002 if (ppduinfo->he_mu_flags) { in ath11k_update_radiotap()
5003 rxs->flag |= RX_FLAG_RADIOTAP_HE_MU; in ath11k_update_radiotap()
5004 rxs->encoding = RX_ENC_HE; in ath11k_update_radiotap()
5007 } else if (ppduinfo->he_flags) { in ath11k_update_radiotap()
5008 rxs->flag |= RX_FLAG_RADIOTAP_HE; in ath11k_update_radiotap()
5009 rxs->encoding = RX_ENC_HE; in ath11k_update_radiotap()
5012 rxs->rate_idx = ppduinfo->rate; in ath11k_update_radiotap()
5013 } else if (ppduinfo->vht_flags) { in ath11k_update_radiotap()
5014 rxs->encoding = RX_ENC_VHT; in ath11k_update_radiotap()
5015 rxs->rate_idx = ppduinfo->rate; in ath11k_update_radiotap()
5016 } else if (ppduinfo->ht_flags) { in ath11k_update_radiotap()
5017 rxs->encoding = RX_ENC_HT; in ath11k_update_radiotap()
5018 rxs->rate_idx = ppduinfo->rate; in ath11k_update_radiotap()
5020 rxs->encoding = RX_ENC_LEGACY; in ath11k_update_radiotap()
5021 sband = &ar->mac.sbands[rxs->band]; in ath11k_update_radiotap()
5022 rxs->rate_idx = ath11k_mac_hw_rate_to_idx(sband, ppduinfo->rate, in ath11k_update_radiotap()
5023 ppduinfo->cck_flag); in ath11k_update_radiotap()
5026 rxs->mactime = ppduinfo->tsft; in ath11k_update_radiotap()
5035 struct ath11k_pdev_dp *dp = &ar->dp; in ath11k_dp_rx_mon_deliver()
5037 struct ieee80211_rx_status *rxs = &dp->rx_status; in ath11k_dp_rx_mon_deliver()
5048 rxs->flag = 0; in ath11k_dp_rx_mon_deliver()
5051 rxs->flag = RX_FLAG_FAILED_FCS_CRC; in ath11k_dp_rx_mon_deliver()
5054 skb_next = mon_skb->next; in ath11k_dp_rx_mon_deliver()
5056 rxs->flag &= ~RX_FLAG_AMSDU_MORE; in ath11k_dp_rx_mon_deliver()
5058 rxs->flag |= RX_FLAG_AMSDU_MORE; in ath11k_dp_rx_mon_deliver()
5062 rxs->flag &= ~RX_FLAG_ALLOW_SAME_PN; in ath11k_dp_rx_mon_deliver()
5064 rxs->flag |= RX_FLAG_ALLOW_SAME_PN; in ath11k_dp_rx_mon_deliver()
5066 rxs->flag |= RX_FLAG_ONLY_MONITOR; in ath11k_dp_rx_mon_deliver()
5072 rxs->flag = 0; in ath11k_dp_rx_mon_deliver()
5079 skb_next = mon_skb->next; in ath11k_dp_rx_mon_deliver()
5083 return -EINVAL; in ath11k_dp_rx_mon_deliver()
5095 struct ath11k_pdev_dp *dp = &ar->dp; in ath11k_dp_rx_mon_dest_process()
5096 struct ath11k_mon_data *pmon = (struct ath11k_mon_data *)&dp->mon_data; in ath11k_dp_rx_mon_dest_process()
5107 if (ar->ab->hw_params.rxdma1_enable) in ath11k_dp_rx_mon_dest_process()
5108 ring_id = dp->rxdma_mon_dst_ring.ring_id; in ath11k_dp_rx_mon_dest_process()
5110 ring_id = dp->rxdma_err_dst_ring[mac_id].ring_id; in ath11k_dp_rx_mon_dest_process()
5112 mon_dst_srng = &ar->ab->hal.srng_list[ring_id]; in ath11k_dp_rx_mon_dest_process()
5115 ath11k_warn(ar->ab, in ath11k_dp_rx_mon_dest_process()
5116 "HAL Monitor Destination Ring Init Failed -- %p", in ath11k_dp_rx_mon_dest_process()
5121 spin_lock_bh(&pmon->mon_lock); in ath11k_dp_rx_mon_dest_process()
5123 ath11k_hal_srng_access_begin(ar->ab, mon_dst_srng); in ath11k_dp_rx_mon_dest_process()
5125 ppdu_id = pmon->mon_ppdu_info.ppdu_id; in ath11k_dp_rx_mon_dest_process()
5127 rx_mon_stats = &pmon->rx_mon_stats; in ath11k_dp_rx_mon_dest_process()
5129 while ((ring_entry = ath11k_hal_srng_dst_peek(ar->ab, mon_dst_srng))) { in ath11k_dp_rx_mon_dest_process()
5143 dp->mon_dest_ring_stuck_cnt = 0; in ath11k_dp_rx_mon_dest_process()
5145 dp->mon_dest_ring_stuck_cnt++; in ath11k_dp_rx_mon_dest_process()
5146 rx_mon_stats->dest_mon_not_reaped++; in ath11k_dp_rx_mon_dest_process()
5149 if (dp->mon_dest_ring_stuck_cnt > MON_DEST_RING_STUCK_MAX_CNT) { in ath11k_dp_rx_mon_dest_process()
5150 rx_mon_stats->dest_mon_stuck++; in ath11k_dp_rx_mon_dest_process()
5151 ath11k_dbg(ar->ab, ATH11K_DBG_DATA, in ath11k_dp_rx_mon_dest_process()
5153 pmon->mon_ppdu_info.ppdu_id, ppdu_id, in ath11k_dp_rx_mon_dest_process()
5154 dp->mon_dest_ring_stuck_cnt, in ath11k_dp_rx_mon_dest_process()
5155 rx_mon_stats->dest_mon_not_reaped, in ath11k_dp_rx_mon_dest_process()
5156 rx_mon_stats->dest_mon_stuck); in ath11k_dp_rx_mon_dest_process()
5157 pmon->mon_ppdu_info.ppdu_id = ppdu_id; in ath11k_dp_rx_mon_dest_process()
5161 if (ppdu_id != pmon->mon_ppdu_info.ppdu_id) { in ath11k_dp_rx_mon_dest_process()
5162 pmon->mon_ppdu_status = DP_PPDU_STATUS_START; in ath11k_dp_rx_mon_dest_process()
5163 ath11k_dbg(ar->ab, ATH11K_DBG_DATA, in ath11k_dp_rx_mon_dest_process()
5165 ppdu_id, pmon->mon_ppdu_info.ppdu_id, in ath11k_dp_rx_mon_dest_process()
5166 rx_mon_stats->dest_mon_not_reaped, in ath11k_dp_rx_mon_dest_process()
5167 rx_mon_stats->dest_mon_stuck); in ath11k_dp_rx_mon_dest_process()
5171 ath11k_dp_rx_mon_deliver(ar, dp->mac_id, head_msdu, in ath11k_dp_rx_mon_dest_process()
5172 &pmon->mon_ppdu_info, in ath11k_dp_rx_mon_dest_process()
5174 rx_mon_stats->dest_mpdu_done++; in ath11k_dp_rx_mon_dest_process()
5177 ring_entry = ath11k_hal_srng_dst_get_next_entry(ar->ab, in ath11k_dp_rx_mon_dest_process()
5180 ath11k_hal_srng_access_end(ar->ab, mon_dst_srng); in ath11k_dp_rx_mon_dest_process()
5182 spin_unlock_bh(&pmon->mon_lock); in ath11k_dp_rx_mon_dest_process()
5185 rx_mon_stats->dest_ppdu_done++; in ath11k_dp_rx_mon_dest_process()
5186 hal_params = ar->ab->hw_params.hal_params; in ath11k_dp_rx_mon_dest_process()
5188 if (ar->ab->hw_params.rxdma1_enable) in ath11k_dp_rx_mon_dest_process()
5189 ath11k_dp_rxbufs_replenish(ar->ab, dp->mac_id, in ath11k_dp_rx_mon_dest_process()
5190 &dp->rxdma_mon_buf_ring, in ath11k_dp_rx_mon_dest_process()
5192 hal_params->rx_buf_rbm); in ath11k_dp_rx_mon_dest_process()
5194 ath11k_dp_rxbufs_replenish(ar->ab, dp->mac_id, in ath11k_dp_rx_mon_dest_process()
5195 &dp->rx_refill_buf_ring, in ath11k_dp_rx_mon_dest_process()
5197 hal_params->rx_buf_rbm); in ath11k_dp_rx_mon_dest_process()
5213 struct ath11k_mon_data *pmon = (struct ath11k_mon_data *)&ar->dp.mon_data; in ath11k_dp_rx_process_mon_status()
5214 struct ath11k_pdev_mon_stats *rx_mon_stats = &pmon->rx_mon_stats; in ath11k_dp_rx_process_mon_status()
5215 struct hal_rx_mon_ppdu_info *ppdu_info = &pmon->mon_ppdu_info; in ath11k_dp_rx_process_mon_status()
5225 ppdu_info->peer_id = HAL_INVALID_PEERID; in ath11k_dp_rx_process_mon_status()
5240 trace_ath11k_htt_rxdesc(ar, skb->data, log_type, rx_buf_sz); in ath11k_dp_rx_process_mon_status()
5243 ppdu_info->peer_id = HAL_INVALID_PEERID; in ath11k_dp_rx_process_mon_status()
5246 if (test_bit(ATH11K_FLAG_MONITOR_STARTED, &ar->monitor_flags) && in ath11k_dp_rx_process_mon_status()
5247 pmon->mon_ppdu_status == DP_PPDU_STATUS_START && in ath11k_dp_rx_process_mon_status()
5249 rx_mon_stats->status_ppdu_done++; in ath11k_dp_rx_process_mon_status()
5250 pmon->mon_ppdu_status = DP_PPDU_STATUS_DONE; in ath11k_dp_rx_process_mon_status()
5251 if (!ab->hw_params.full_monitor_mode) { in ath11k_dp_rx_process_mon_status()
5254 pmon->mon_ppdu_status = DP_PPDU_STATUS_START; in ath11k_dp_rx_process_mon_status()
5258 if (ppdu_info->peer_id == HAL_INVALID_PEERID || in ath11k_dp_rx_process_mon_status()
5265 spin_lock_bh(&ab->base_lock); in ath11k_dp_rx_process_mon_status()
5266 peer = ath11k_peer_find_by_id(ab, ppdu_info->peer_id); in ath11k_dp_rx_process_mon_status()
5268 if (!peer || !peer->sta) { in ath11k_dp_rx_process_mon_status()
5271 ppdu_info->peer_id); in ath11k_dp_rx_process_mon_status()
5275 arsta = (struct ath11k_sta *)peer->sta->drv_priv; in ath11k_dp_rx_process_mon_status()
5278 if (ath11k_debugfs_is_pktlog_peer_valid(ar, peer->addr)) in ath11k_dp_rx_process_mon_status()
5279 trace_ath11k_htt_rxdesc(ar, skb->data, log_type, rx_buf_sz); in ath11k_dp_rx_process_mon_status()
5282 spin_unlock_bh(&ab->base_lock); in ath11k_dp_rx_process_mon_status()
5287 ppdu_info->peer_id = HAL_INVALID_PEERID; in ath11k_dp_rx_process_mon_status()
5299 struct ath11k_pdev_dp *dp = &ar->dp; in ath11k_dp_rx_full_mon_mpdu_pop()
5300 struct ath11k_mon_data *pmon = &dp->mon_data; in ath11k_dp_rx_full_mon_mpdu_pop()
5301 struct dp_rxdma_ring *rx_ring = &dp->rxdma_mon_buf_ring; in ath11k_dp_rx_full_mon_mpdu_pop()
5320 sw_cookie = sw_mon_entries->mon_dst_sw_cookie; in ath11k_dp_rx_full_mon_mpdu_pop()
5321 sw_mon_entries->end_of_ppdu = false; in ath11k_dp_rx_full_mon_mpdu_pop()
5322 sw_mon_entries->drop_ppdu = false; in ath11k_dp_rx_full_mon_mpdu_pop()
5323 p_last_buf_addr_info = sw_mon_entries->dst_buf_addr_info; in ath11k_dp_rx_full_mon_mpdu_pop()
5324 msdu_cnt = sw_mon_entries->msdu_cnt; in ath11k_dp_rx_full_mon_mpdu_pop()
5326 sw_mon_entries->end_of_ppdu = in ath11k_dp_rx_full_mon_mpdu_pop()
5327 FIELD_GET(HAL_SW_MON_RING_INFO0_END_OF_PPDU, sw_desc->info0); in ath11k_dp_rx_full_mon_mpdu_pop()
5328 if (sw_mon_entries->end_of_ppdu) in ath11k_dp_rx_full_mon_mpdu_pop()
5332 sw_desc->info0) == in ath11k_dp_rx_full_mon_mpdu_pop()
5336 sw_desc->info0); in ath11k_dp_rx_full_mon_mpdu_pop()
5340 pmon->rx_mon_stats.dest_mpdu_drop++; in ath11k_dp_rx_full_mon_mpdu_pop()
5350 (u8 *)pmon->link_desc_banks[sw_cookie].vaddr + in ath11k_dp_rx_full_mon_mpdu_pop()
5351 (sw_mon_entries->mon_dst_paddr - in ath11k_dp_rx_full_mon_mpdu_pop()
5352 pmon->link_desc_banks[sw_cookie].paddr); in ath11k_dp_rx_full_mon_mpdu_pop()
5361 spin_lock_bh(&rx_ring->idr_lock); in ath11k_dp_rx_full_mon_mpdu_pop()
5362 msdu = idr_find(&rx_ring->bufs_idr, buf_id); in ath11k_dp_rx_full_mon_mpdu_pop()
5364 ath11k_dbg(ar->ab, ATH11K_DBG_DATA, in ath11k_dp_rx_full_mon_mpdu_pop()
5367 spin_unlock_bh(&rx_ring->idr_lock); in ath11k_dp_rx_full_mon_mpdu_pop()
5370 idr_remove(&rx_ring->bufs_idr, buf_id); in ath11k_dp_rx_full_mon_mpdu_pop()
5371 spin_unlock_bh(&rx_ring->idr_lock); in ath11k_dp_rx_full_mon_mpdu_pop()
5374 if (!rxcb->unmapped) { in ath11k_dp_rx_full_mon_mpdu_pop()
5375 dma_unmap_single(ar->ab->dev, rxcb->paddr, in ath11k_dp_rx_full_mon_mpdu_pop()
5376 msdu->len + in ath11k_dp_rx_full_mon_mpdu_pop()
5379 rxcb->unmapped = 1; in ath11k_dp_rx_full_mon_mpdu_pop()
5382 ath11k_dbg(ar->ab, ATH11K_DBG_DATA, in ath11k_dp_rx_full_mon_mpdu_pop()
5384 i, msdu, sw_mon_entries->ppdu_id); in ath11k_dp_rx_full_mon_mpdu_pop()
5386 msdu_cnt--; in ath11k_dp_rx_full_mon_mpdu_pop()
5390 rx_desc = (struct hal_rx_desc *)msdu->data; in ath11k_dp_rx_full_mon_mpdu_pop()
5393 l2_hdr_offset = ath11k_dp_rx_h_msdu_end_l3pad(ar->ab, rx_desc); in ath11k_dp_rx_full_mon_mpdu_pop()
5396 if (!ath11k_dp_rxdesc_mpdu_valid(ar->ab, rx_desc)) { in ath11k_dp_rx_full_mon_mpdu_pop()
5416 last->next = msdu; in ath11k_dp_rx_full_mon_mpdu_pop()
5424 &sw_mon_entries->mon_dst_paddr, in ath11k_dp_rx_full_mon_mpdu_pop()
5425 &sw_mon_entries->mon_dst_sw_cookie, in ath11k_dp_rx_full_mon_mpdu_pop()
5431 dp->mac_id)) in ath11k_dp_rx_full_mon_mpdu_pop()
5432 ath11k_dbg(ar->ab, ATH11K_DBG_DATA, in ath11k_dp_rx_full_mon_mpdu_pop()
5437 } while (sw_mon_entries->mon_dst_paddr && msdu_cnt); in ath11k_dp_rx_full_mon_mpdu_pop()
5440 last->next = NULL; in ath11k_dp_rx_full_mon_mpdu_pop()
5454 return -ENOMEM; in ath11k_dp_rx_full_mon_prepare_mpdu()
5456 list_add_tail(&mon_mpdu->list, &dp->dp_full_mon_mpdu_list); in ath11k_dp_rx_full_mon_prepare_mpdu()
5457 mon_mpdu->head = head; in ath11k_dp_rx_full_mon_prepare_mpdu()
5458 mon_mpdu->tail = tail; in ath11k_dp_rx_full_mon_prepare_mpdu()
5469 if (list_empty(&dp->dp_full_mon_mpdu_list)) in ath11k_dp_rx_full_mon_drop_ppdu()
5472 list_for_each_entry_safe(mon_mpdu, tmp, &dp->dp_full_mon_mpdu_list, list) { in ath11k_dp_rx_full_mon_drop_ppdu()
5473 list_del(&mon_mpdu->list); in ath11k_dp_rx_full_mon_drop_ppdu()
5475 tmp_msdu = mon_mpdu->head; in ath11k_dp_rx_full_mon_drop_ppdu()
5477 skb_next = tmp_msdu->next; in ath11k_dp_rx_full_mon_drop_ppdu()
5493 struct dp_full_mon_mpdu *mon_mpdu = pmon->mon_mpdu; in ath11k_dp_rx_full_mon_deliver_ppdu()
5495 struct ath11k_base *ab = ar->ab; in ath11k_dp_rx_full_mon_deliver_ppdu()
5496 struct ath11k_dp *dp = &ab->dp; in ath11k_dp_rx_full_mon_deliver_ppdu()
5499 rx_mon_stats = &pmon->rx_mon_stats; in ath11k_dp_rx_full_mon_deliver_ppdu()
5501 list_for_each_entry_safe(mon_mpdu, tmp, &dp->dp_full_mon_mpdu_list, list) { in ath11k_dp_rx_full_mon_deliver_ppdu()
5502 list_del(&mon_mpdu->list); in ath11k_dp_rx_full_mon_deliver_ppdu()
5503 head_msdu = mon_mpdu->head; in ath11k_dp_rx_full_mon_deliver_ppdu()
5504 tail_msdu = mon_mpdu->tail; in ath11k_dp_rx_full_mon_deliver_ppdu()
5507 &pmon->mon_ppdu_info, in ath11k_dp_rx_full_mon_deliver_ppdu()
5509 rx_mon_stats->dest_mpdu_done++; in ath11k_dp_rx_full_mon_deliver_ppdu()
5510 ath11k_dbg(ar->ab, ATH11K_DBG_DATA, "full mon: deliver ppdu\n"); in ath11k_dp_rx_full_mon_deliver_ppdu()
5522 struct ath11k *ar = ab->pdevs[mac_id].ar; in ath11k_dp_rx_process_full_mon_status_ring()
5523 struct ath11k_pdev_dp *dp = &ar->dp; in ath11k_dp_rx_process_full_mon_status_ring()
5524 struct ath11k_mon_data *pmon = &dp->mon_data; in ath11k_dp_rx_process_full_mon_status_ring()
5528 sw_mon_entries = &pmon->sw_mon_entries; in ath11k_dp_rx_process_full_mon_status_ring()
5530 while (pmon->hold_mon_dst_ring) { in ath11k_dp_rx_process_full_mon_status_ring()
5533 if (pmon->buf_state == DP_MON_STATUS_MATCH) { in ath11k_dp_rx_process_full_mon_status_ring()
5534 count = sw_mon_entries->status_buf_count; in ath11k_dp_rx_process_full_mon_status_ring()
5540 ath11k_dp_rx_full_mon_deliver_ppdu(ar, dp->mac_id, in ath11k_dp_rx_process_full_mon_status_ring()
5542 pmon->hold_mon_dst_ring = false; in ath11k_dp_rx_process_full_mon_status_ring()
5543 } else if (!pmon->mon_status_paddr || in ath11k_dp_rx_process_full_mon_status_ring()
5544 pmon->buf_state == DP_MON_STATUS_LEAD) { in ath11k_dp_rx_process_full_mon_status_ring()
5545 sw_mon_entries->drop_ppdu = true; in ath11k_dp_rx_process_full_mon_status_ring()
5546 pmon->hold_mon_dst_ring = false; in ath11k_dp_rx_process_full_mon_status_ring()
5555 if (sw_mon_entries->drop_ppdu) in ath11k_dp_rx_process_full_mon_status_ring()
5556 ath11k_dp_rx_full_mon_drop_ppdu(&ab->dp, pmon->mon_mpdu); in ath11k_dp_rx_process_full_mon_status_ring()
5564 struct ath11k *ar = ab->pdevs[mac_id].ar; in ath11k_dp_full_mon_process_rx()
5565 struct ath11k_pdev_dp *dp = &ar->dp; in ath11k_dp_full_mon_process_rx()
5566 struct ath11k_mon_data *pmon = &dp->mon_data; in ath11k_dp_full_mon_process_rx()
5570 void *mon_dst_srng = &ar->ab->hal.srng_list[dp->rxdma_mon_dst_ring.ring_id]; in ath11k_dp_full_mon_process_rx()
5576 spin_lock_bh(&pmon->mon_lock); in ath11k_dp_full_mon_process_rx()
5578 sw_mon_entries = &pmon->sw_mon_entries; in ath11k_dp_full_mon_process_rx()
5579 rx_mon_stats = &pmon->rx_mon_stats; in ath11k_dp_full_mon_process_rx()
5581 if (pmon->hold_mon_dst_ring) { in ath11k_dp_full_mon_process_rx()
5582 spin_unlock_bh(&pmon->mon_lock); in ath11k_dp_full_mon_process_rx()
5586 ath11k_hal_srng_access_begin(ar->ab, mon_dst_srng); in ath11k_dp_full_mon_process_rx()
5587 while ((ring_entry = ath11k_hal_srng_dst_peek(ar->ab, mon_dst_srng))) { in ath11k_dp_full_mon_process_rx()
5597 if (!sw_mon_entries->end_of_ppdu) { in ath11k_dp_full_mon_process_rx()
5599 ret = ath11k_dp_rx_full_mon_prepare_mpdu(&ab->dp, in ath11k_dp_full_mon_process_rx()
5600 pmon->mon_mpdu, in ath11k_dp_full_mon_process_rx()
5609 if (!sw_mon_entries->ppdu_id && in ath11k_dp_full_mon_process_rx()
5610 !sw_mon_entries->mon_status_paddr) { in ath11k_dp_full_mon_process_rx()
5616 rx_mon_stats->dest_ppdu_done++; in ath11k_dp_full_mon_process_rx()
5617 pmon->mon_ppdu_status = DP_PPDU_STATUS_START; in ath11k_dp_full_mon_process_rx()
5618 pmon->buf_state = DP_MON_STATUS_LAG; in ath11k_dp_full_mon_process_rx()
5619 pmon->mon_status_paddr = sw_mon_entries->mon_status_paddr; in ath11k_dp_full_mon_process_rx()
5620 pmon->hold_mon_dst_ring = true; in ath11k_dp_full_mon_process_rx()
5622 ring_entry = ath11k_hal_srng_dst_get_next_entry(ar->ab, in ath11k_dp_full_mon_process_rx()
5628 ath11k_hal_srng_access_end(ar->ab, mon_dst_srng); in ath11k_dp_full_mon_process_rx()
5629 spin_unlock_bh(&pmon->mon_lock); in ath11k_dp_full_mon_process_rx()
5632 ath11k_dp_rxbufs_replenish(ar->ab, dp->mac_id, in ath11k_dp_full_mon_process_rx()
5633 &dp->rxdma_mon_buf_ring, in ath11k_dp_full_mon_process_rx()
5651 if (test_bit(ATH11K_FLAG_MONITOR_STARTED, &ar->monitor_flags) && in ath11k_dp_rx_process_mon_rings()
5652 ab->hw_params.full_monitor_mode) in ath11k_dp_rx_process_mon_rings()
5662 struct ath11k_pdev_dp *dp = &ar->dp; in ath11k_dp_rx_pdev_mon_status_attach()
5663 struct ath11k_mon_data *pmon = (struct ath11k_mon_data *)&dp->mon_data; in ath11k_dp_rx_pdev_mon_status_attach()
5665 skb_queue_head_init(&pmon->rx_status_q); in ath11k_dp_rx_pdev_mon_status_attach()
5667 pmon->mon_ppdu_status = DP_PPDU_STATUS_START; in ath11k_dp_rx_pdev_mon_status_attach()
5669 memset(&pmon->rx_mon_stats, 0, in ath11k_dp_rx_pdev_mon_status_attach()
5670 sizeof(pmon->rx_mon_stats)); in ath11k_dp_rx_pdev_mon_status_attach()
5676 struct ath11k_pdev_dp *dp = &ar->dp; in ath11k_dp_rx_pdev_mon_attach()
5677 struct ath11k_mon_data *pmon = &dp->mon_data; in ath11k_dp_rx_pdev_mon_attach()
5685 ath11k_warn(ar->ab, "pdev_mon_status_attach() failed"); in ath11k_dp_rx_pdev_mon_attach()
5692 if (!ar->ab->hw_params.rxdma1_enable) in ath11k_dp_rx_pdev_mon_attach()
5695 dp_srng = &dp->rxdma_mon_desc_ring; in ath11k_dp_rx_pdev_mon_attach()
5696 n_link_desc = dp_srng->size / in ath11k_dp_rx_pdev_mon_attach()
5697 ath11k_hal_srng_get_entrysize(ar->ab, HAL_RXDMA_MONITOR_DESC); in ath11k_dp_rx_pdev_mon_attach()
5699 &ar->ab->hal.srng_list[dp->rxdma_mon_desc_ring.ring_id]; in ath11k_dp_rx_pdev_mon_attach()
5701 ret = ath11k_dp_link_desc_setup(ar->ab, pmon->link_desc_banks, in ath11k_dp_rx_pdev_mon_attach()
5705 ath11k_warn(ar->ab, "mon_link_desc_pool_setup() failed"); in ath11k_dp_rx_pdev_mon_attach()
5708 pmon->mon_last_linkdesc_paddr = 0; in ath11k_dp_rx_pdev_mon_attach()
5709 pmon->mon_last_buf_cookie = DP_RX_DESC_COOKIE_MAX + 1; in ath11k_dp_rx_pdev_mon_attach()
5710 spin_lock_init(&pmon->mon_lock); in ath11k_dp_rx_pdev_mon_attach()
5717 struct ath11k_pdev_dp *dp = &ar->dp; in ath11k_dp_mon_link_free()
5718 struct ath11k_mon_data *pmon = &dp->mon_data; in ath11k_dp_mon_link_free()
5720 ath11k_dp_link_desc_cleanup(ar->ab, pmon->link_desc_banks, in ath11k_dp_mon_link_free()
5722 &dp->rxdma_mon_desc_ring); in ath11k_dp_mon_link_free()
5735 mod_timer(&ab->mon_reap_timer, in ath11k_dp_rx_pktlog_start()
5746 del_timer_sync(&ab->mon_reap_timer); in ath11k_dp_rx_pktlog_stop()