summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKumar Anand <kumaranand@google.com>2019-03-29 18:41:41 +0000
committerAndroid Partner Code Review <android-gerrit-partner@google.com>2019-03-29 18:41:41 +0000
commitd6273aad77569b2678a82c678df5e103b3dc52a7 (patch)
treecf175ea6e2e097dba0ab374ad826474a37218b4d
parent7f05e5396c089c9fbdb5171feb23a355eeddfa52 (diff)
parent51239b5b5ebfe62ebad31e9097fcf70ace6b4723 (diff)
downloadqcacld-d6273aad77569b2678a82c678df5e103b3dc52a7.tar.gz
Merge "qcacld-3.0: Do rx inorder replenish for fragmented packets" into android-msm-bluecross-4.9
-rw-r--r--core/dp/ol/inc/ol_htt_rx_api.h6
-rw-r--r--core/dp/txrx/ol_rx_defrag.c29
2 files changed, 34 insertions, 1 deletions
diff --git a/core/dp/ol/inc/ol_htt_rx_api.h b/core/dp/ol/inc/ol_htt_rx_api.h
index 950751aa9f..85dd80954b 100644
--- a/core/dp/ol/inc/ol_htt_rx_api.h
+++ b/core/dp/ol/inc/ol_htt_rx_api.h
@@ -815,6 +815,12 @@ void htt_rx_msdu_buff_replenish(htt_pdev_handle pdev);
* Return: number of buffers actually replenished
*/
int htt_rx_msdu_buff_in_order_replenish(htt_pdev_handle pdev, uint32_t num);
+#else
+static inline
+int htt_rx_msdu_buff_in_order_replenish(htt_pdev_handle pdev, uint32_t num)
+{
+ return 0;
+}
#endif
/**
diff --git a/core/dp/txrx/ol_rx_defrag.c b/core/dp/txrx/ol_rx_defrag.c
index 4496b21eab..60ec626246 100644
--- a/core/dp/txrx/ol_rx_defrag.c
+++ b/core/dp/txrx/ol_rx_defrag.c
@@ -316,6 +316,26 @@ void ol_rx_frag_send_pktlog_event(struct ol_txrx_pdev_t *pdev,
#endif
+#ifndef CONFIG_HL_SUPPORT
+static int ol_rx_frag_get_inord_msdu_cnt(qdf_nbuf_t rx_ind_msg)
+{
+ uint32_t *msg_word;
+ uint8_t *rx_ind_data;
+ uint32_t msdu_cnt;
+
+ rx_ind_data = qdf_nbuf_data(rx_ind_msg);
+ msg_word = (uint32_t *)rx_ind_data;
+ msdu_cnt = HTT_RX_IN_ORD_PADDR_IND_MSDU_CNT_GET(*(msg_word + 1));
+
+ return msdu_cnt;
+}
+#else
+static int ol_rx_frag_get_inord_msdu_cnt(qdf_nbuf_t rx_ind_msg)
+{
+ return 0;
+}
+#endif
+
/*
* Process incoming fragments
*/
@@ -353,7 +373,10 @@ ol_rx_frag_indication_handler(ol_txrx_pdev_handle pdev,
* separate from normal frames
*/
ol_rx_reorder_flush_frag(htt_pdev, peer, tid, seq_num_start);
+ } else {
+ msdu_count = ol_rx_frag_get_inord_msdu_cnt(rx_frag_ind_msg);
}
+
pktlog_bit =
(htt_rx_amsdu_rx_in_order_get_pktlog(rx_frag_ind_msg) == 0x01);
ret = htt_rx_frag_pop(htt_pdev, rx_frag_ind_msg, &head_msdu,
@@ -389,7 +412,11 @@ ol_rx_frag_indication_handler(ol_txrx_pdev_handle pdev,
htt_rx_desc_frame_free(htt_pdev, head_msdu);
}
/* request HTT to provide new rx MSDU buffers for the target to fill. */
- htt_rx_msdu_buff_replenish(htt_pdev);
+ if (ol_cfg_is_full_reorder_offload(pdev->ctrl_pdev) &&
+ !pdev->cfg.is_high_latency)
+ htt_rx_msdu_buff_in_order_replenish(htt_pdev, msdu_count);
+ else
+ htt_rx_msdu_buff_replenish(htt_pdev);
}
/*