[PATCH v3 6/7] wifi: ath12k: Avoid packet offset and FCS length from Rx TLV

Vasanthakumar Thiagarajan quic_vthiagar at quicinc.com
Tue Jan 28 22:09:06 PST 2025



On 1/27/2025 5:10 PM, Karthikeyan Periyasamy wrote:
> From: P Praneesh <quic_ppranees at quicinc.com>
> 
> Currently, the packet offset and FCS length are fetched from the MSDU Rx
> TLV data, a logic inherited from ath11k. However, for ath12k 802.11be
> hardware, the Rx TLV will not be present in the MSDU data. Instead, this
> information is constant. Therefore, remove the existing FCS trim and the
> packet offset fetch code. Handle the packet offset with the constant in
> the merge MSDU procedure.
> 
> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1
> Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3
> 
> Signed-off-by: P Praneesh <quic_ppranees at quicinc.com>
> Signed-off-by: Karthikeyan Periyasamy <quic_periyasa at quicinc.com>
> Tested-by: Nicolas Escande <nico.escande at gmail.com>
> ---
>   drivers/net/wireless/ath/ath12k/dp_mon.c | 23 +++++------------------
>   drivers/net/wireless/ath/ath12k/dp_mon.h |  1 +
>   2 files changed, 6 insertions(+), 18 deletions(-)
> 
> diff --git a/drivers/net/wireless/ath/ath12k/dp_mon.c b/drivers/net/wireless/ath/ath12k/dp_mon.c
> index 778866628a8d..b92de0f9aeda 100644
> --- a/drivers/net/wireless/ath/ath12k/dp_mon.c
> +++ b/drivers/net/wireless/ath/ath12k/dp_mon.c
> @@ -1719,18 +1719,6 @@ ath12k_dp_mon_rx_parse_status_tlv(struct ath12k *ar,
>   	return HAL_RX_MON_STATUS_PPDU_NOT_DONE;
>   }
>   
> -static void ath12k_dp_mon_rx_msdus_set_payload(struct ath12k *ar,
> -					       struct sk_buff *head_msdu,
> -					       struct sk_buff *tail_msdu)
> -{
> -	u32 rx_pkt_offset, l2_hdr_offset;
> -
> -	rx_pkt_offset = ar->ab->hal.hal_desc_sz;
> -	l2_hdr_offset =
> -		ath12k_dp_rx_h_l3pad(ar->ab, (struct hal_rx_desc *)tail_msdu->data);
> -	skb_pull(head_msdu, rx_pkt_offset + l2_hdr_offset);
> -}
> -
>   static void
>   ath12k_dp_mon_fill_rx_stats_info(struct ath12k *ar,
>   				 struct hal_rx_mon_ppdu_info *ppdu_info,
> @@ -1846,7 +1834,7 @@ ath12k_dp_mon_rx_merg_msdus(struct ath12k *ar,
>   {
>   	struct ath12k_base *ab = ar->ab;
>   	struct sk_buff *msdu, *mpdu_buf, *prev_buf, *head_frag_list;
> -	struct sk_buff *head_msdu, *tail_msdu;
> +	struct sk_buff *head_msdu;
>   	struct hal_rx_desc *rx_desc;
>   	u8 *hdr_desc, *dest, decap_format = mon_mpdu->decap_format;
>   	struct ieee80211_hdr_3addr *wh;
> @@ -1856,7 +1844,6 @@ ath12k_dp_mon_rx_merg_msdus(struct ath12k *ar,
>   
>   	mpdu_buf = NULL;
>   	head_msdu = mon_mpdu->head;
> -	tail_msdu = mon_mpdu->tail;
>   
>   	if (!head_msdu)
>   		goto err_merge_fail;
> @@ -1886,14 +1873,14 @@ ath12k_dp_mon_rx_merg_msdus(struct ath12k *ar,
>   	ath12k_dp_mon_fill_rx_rate(ar, ppdu_info, rxs);
>   
>   	if (decap_format == DP_RX_DECAP_TYPE_RAW) {
> -		ath12k_dp_mon_rx_msdus_set_payload(ar, head_msdu, tail_msdu);
> +		skb_pull(head_msdu, ATH12K_MON_RX_PKT_OFFSET);
>   
>   		prev_buf = head_msdu;
>   		msdu = head_msdu->next;
>   		head_frag_list = NULL;
>   
>   		while (msdu) {
> -			ath12k_dp_mon_rx_msdus_set_payload(ar, msdu, tail_msdu);
> +			skb_pull(msdu, ATH12K_MON_RX_PKT_OFFSET);
>   
>   			if (!head_frag_list)
>   				head_frag_list = msdu;
> @@ -1905,7 +1892,7 @@ ath12k_dp_mon_rx_merg_msdus(struct ath12k *ar,
>   
>   		prev_buf->next = NULL;
>   
> -		skb_trim(prev_buf, prev_buf->len - HAL_RX_FCS_LEN);
> +		skb_trim(prev_buf, prev_buf->len);
>   		if (head_frag_list) {
>   			skb_shinfo(head_msdu)->frag_list = head_frag_list;
>   			head_msdu->data_len = frag_list_sum_len;
> @@ -1928,7 +1915,7 @@ ath12k_dp_mon_rx_merg_msdus(struct ath12k *ar,
>   		msdu = head_msdu;
>   
>   		while (msdu) {
> -			ath12k_dp_mon_rx_msdus_set_payload(ar, msdu, tail_msdu);
> +			skb_pull(msdu, ATH12K_MON_RX_PKT_OFFSET);
>   			if (qos_pkt) {
>   				dest = skb_push(msdu, sizeof(__le16));
>   				if (!dest)
> diff --git a/drivers/net/wireless/ath/ath12k/dp_mon.h b/drivers/net/wireless/ath/ath12k/dp_mon.h
> index b039f6b9277c..9f3adee51cb2 100644
> --- a/drivers/net/wireless/ath/ath12k/dp_mon.h
> +++ b/drivers/net/wireless/ath/ath12k/dp_mon.h
> @@ -10,6 +10,7 @@
>   #include "core.h"
>   
>   #define ATH12K_MON_RX_DOT11_OFFSET	5
> +#define ATH12K_MON_RX_PKT_OFFSET	8
>   
>   enum dp_monitor_mode {
>   	ATH12K_DP_TX_MONITOR_MODE,

Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan at oss.qualcomm.com>



More information about the ath12k mailing list