[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