Message ID | 20250127114030.43479-7-quic_periyasa@quicinc.com |
---|---|
State | Superseded |
Headers | show |
Series | wifi: ath12k: Add monitor interface support on QCN9274 | expand |
On 1/27/2025 5:10 PM, Karthikeyan Periyasamy wrote: > From: P Praneesh <quic_ppranees@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@quicinc.com> > Signed-off-by: Karthikeyan Periyasamy <quic_periyasa@quicinc.com> > Tested-by: Nicolas Escande <nico.escande@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@oss.qualcomm.com>
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,