qcacmn: Save Rx TLV offset info so as to recover in FISA

Packets delivered to FISA via exception err path doesnot have TLVs.
FISA handling requires additional TLVs. dp rx core handling
skips TLVs, save TLV length info in nbuf->cb so that TLVs
are recovered back in FISA.

Change-Id: I53fab2e19abcbf82697ea6f53a4ddf3ea0dd0699
CRs-Fixed: 2620844
This commit is contained in:
Manjunathappa Prakash
2020-02-10 19:35:18 -08:00
committed by nshrivas
parent ff26d1c783
commit c4667b8b12
5 changed files with 26 additions and 21 deletions

View File

@@ -2084,4 +2084,12 @@ void dp_set_max_page_size(struct qdf_mem_multi_page_t *pages,
} }
#endif /* MAX_ALLOC_PAGE_SIZE */ #endif /* MAX_ALLOC_PAGE_SIZE */
/**
* dp_rx_skip_tlvs() - Skip TLVs len + L2 hdr_offset, save in nbuf->cb
* @nbuf: nbuf cb to be updated
* @l2_hdr_offset: l2_hdr_offset
*
* Return: None
*/
void dp_rx_skip_tlvs(qdf_nbuf_t nbuf, uint32_t l3_padding);
#endif /* #ifndef _DP_INTERNAL_H_ */ #endif /* #ifndef _DP_INTERNAL_H_ */

View File

@@ -1746,26 +1746,18 @@ uint32_t dp_rx_srng_get_num_pending(hal_soc_handle_t hal_soc,
} }
#ifdef WLAN_SUPPORT_RX_FISA #ifdef WLAN_SUPPORT_RX_FISA
/* void dp_rx_skip_tlvs(qdf_nbuf_t nbuf, uint32_t l3_padding)
* dp_rx_skip_tlvs() - Skip TLVs only if FISA is not enabled
* @vdev: DP vdev context
* @nbuf: nbuf whose data pointer is adjusted
* @size: size to be adjusted
*
* Return: None
*/
static void dp_rx_skip_tlvs(struct dp_vdev *vdev, qdf_nbuf_t nbuf, int size)
{ {
/* TLVs include FISA info do not skip them yet */ QDF_NBUF_CB_RX_PACKET_L3_HDR_PAD(nbuf) = l3_padding;
if (!vdev->osif_fisa_rx) qdf_nbuf_pull_head(nbuf, l3_padding + RX_PKT_TLVS_LEN);
qdf_nbuf_pull_head(nbuf, size);
} }
#else /* !WLAN_SUPPORT_RX_FISA */ #else
static void dp_rx_skip_tlvs(struct dp_vdev *vdev, qdf_nbuf_t nbuf, int size) void dp_rx_skip_tlvs(qdf_nbuf_t nbuf, uint32_t l3_padding)
{ {
qdf_nbuf_pull_head(nbuf, size); qdf_nbuf_pull_head(nbuf, l3_padding + RX_PKT_TLVS_LEN);
} }
#endif /* !WLAN_SUPPORT_RX_FISA */ #endif
/** /**
* dp_rx_process() - Brain of the Rx processing functionality * dp_rx_process() - Brain of the Rx processing functionality
@@ -2213,8 +2205,7 @@ done:
RX_PKT_TLVS_LEN; RX_PKT_TLVS_LEN;
qdf_nbuf_set_pktlen(nbuf, pkt_len); qdf_nbuf_set_pktlen(nbuf, pkt_len);
dp_rx_skip_tlvs(vdev, nbuf, RX_PKT_TLVS_LEN + dp_rx_skip_tlvs(nbuf, msdu_metadata.l3_hdr_pad);
msdu_metadata.l3_hdr_pad);
} }
/* /*

View File

@@ -995,7 +995,7 @@ dp_rx_process_rxdma_err(struct dp_soc *soc, qdf_nbuf_t nbuf,
* Advance the packet start pointer by total size of * Advance the packet start pointer by total size of
* pre-header TLV's * pre-header TLV's
*/ */
qdf_nbuf_pull_head(nbuf, l2_hdr_offset + RX_PKT_TLVS_LEN); dp_rx_skip_tlvs(nbuf, l2_hdr_offset);
if (err_code == HAL_RXDMA_ERR_WIFI_PARSE) { if (err_code == HAL_RXDMA_ERR_WIFI_PARSE) {
uint8_t *pkt_type; uint8_t *pkt_type;

View File

@@ -107,6 +107,7 @@ typedef union {
* @rx.dev.priv_cb_m.peer_cached_buf_frm: peer cached buffer * @rx.dev.priv_cb_m.peer_cached_buf_frm: peer cached buffer
* @rx.dev.priv_cb_m.flush_ind: flush indication * @rx.dev.priv_cb_m.flush_ind: flush indication
* @rx.dev.priv_cb_m.packet_buf_pool: packet buff bool * @rx.dev.priv_cb_m.packet_buf_pool: packet buff bool
* @rx.dev.priv_cb_m.l3_hdr_pad: L3 header padding offset
* @rx.dev.priv_cb_m.tcp_seq_num: TCP sequence number * @rx.dev.priv_cb_m.tcp_seq_num: TCP sequence number
* @rx.dev.priv_cb_m.tcp_ack_num: TCP ACK number * @rx.dev.priv_cb_m.tcp_ack_num: TCP ACK number
* @rx.dev.priv_cb_m.lro_ctx: LRO context * @rx.dev.priv_cb_m.lro_ctx: LRO context
@@ -222,7 +223,8 @@ struct qdf_nbuf_cb {
peer_cached_buf_frm:1, peer_cached_buf_frm:1,
flush_ind:1, flush_ind:1,
packet_buf_pool:1, packet_buf_pool:1,
reserved:12, l3_hdr_pad:3,
reserved:9,
reserved1:16; reserved1:16;
uint32_t tcp_seq_num; uint32_t tcp_seq_num;
uint32_t tcp_ack_num; uint32_t tcp_ack_num;

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2014-2019 The Linux Foundation. All rights reserved. * Copyright (c) 2014-2020 The Linux Foundation. All rights reserved.
* *
* Permission to use, copy, modify, and/or distribute this software for * Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the * any purpose with or without fee is hereby granted, provided that the
@@ -69,6 +69,10 @@
(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.dev.priv_cb_m. \ (((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.dev.priv_cb_m. \
packet_buf_pool) packet_buf_pool)
#define QDF_NBUF_CB_RX_PACKET_L3_HDR_PAD(skb) \
(((struct qdf_nbuf_cb *)((skb)->cb))->u.rx.dev.priv_cb_m. \
l3_hdr_pad)
#define __qdf_nbuf_ipa_owned_get(skb) \ #define __qdf_nbuf_ipa_owned_get(skb) \
QDF_NBUF_CB_TX_IPA_OWNED(skb) QDF_NBUF_CB_TX_IPA_OWNED(skb)