From 7613908cb95e7cdc357bf748ca8d409ae4925db6 Mon Sep 17 00:00:00 2001 From: Pratik Gandhi Date: Fri, 28 Jul 2017 19:18:02 +0530 Subject: [PATCH] qcacmn: SmartMesh add support for multi radio Add support for multi-radio to smart mesh feature Change-Id: I21f1a59be419cf68b3c038a08c58f17c82df33bb CRs-Fixed: 2017269 --- dp/wifi3.0/dp_rx.c | 4 ++-- dp/wifi3.0/dp_rx_err.c | 17 ++++++++++------- dp/wifi3.0/dp_types.h | 5 +++-- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/dp/wifi3.0/dp_rx.c b/dp/wifi3.0/dp_rx.c index 819b3293bdfb..8e988a294df2 100644 --- a/dp/wifi3.0/dp_rx.c +++ b/dp/wifi3.0/dp_rx.c @@ -646,8 +646,8 @@ uint8_t dp_rx_process_invalid_peer(struct dp_soc *soc, qdf_nbuf_t mpdu) vdev = dp_rx_nac_filter(pdev, rx_pkt_hdr); if (vdev) { dp_rx_mon_deliver(soc, i, - soc->invalid_peer_head_msdu, - soc->invalid_peer_tail_msdu); + pdev->invalid_peer_head_msdu, + pdev->invalid_peer_tail_msdu); return 0; } } diff --git a/dp/wifi3.0/dp_rx_err.c b/dp/wifi3.0/dp_rx_err.c index d3b57b1741fd..575610035de6 100644 --- a/dp/wifi3.0/dp_rx_err.c +++ b/dp/wifi3.0/dp_rx_err.c @@ -209,18 +209,18 @@ dp_rx_2k_jump_handle(struct dp_soc *soc, void *ring_desc, static bool dp_rx_chain_msdus(struct dp_soc *soc, qdf_nbuf_t nbuf, - struct dp_rx_desc *rx_desc) + struct dp_rx_desc *rx_desc, uint8_t mac_id) { bool mpdu_done = false; /* TODO: Currently only single radio is supported, hence * pdev hard coded to '0' index */ - struct dp_pdev *dp_pdev = soc->pdev_list[0]; + struct dp_pdev *dp_pdev = soc->pdev_list[mac_id]; if (hal_rx_msdu_end_first_msdu_get(rx_desc->rx_buf_start)) { qdf_nbuf_set_chfrag_start(rx_desc->nbuf, 1); - soc->invalid_peer_head_msdu = NULL; - soc->invalid_peer_tail_msdu = NULL; + dp_pdev->invalid_peer_head_msdu = NULL; + dp_pdev->invalid_peer_tail_msdu = NULL; hal_rx_mon_hw_desc_get_mpdu_status(rx_desc->rx_buf_start, &(dp_pdev->ppdu_info.rx_status)); @@ -232,8 +232,8 @@ dp_rx_chain_msdus(struct dp_soc *soc, qdf_nbuf_t nbuf, mpdu_done = true; } - DP_RX_LIST_APPEND(soc->invalid_peer_head_msdu, - soc->invalid_peer_tail_msdu, + DP_RX_LIST_APPEND(dp_pdev->invalid_peer_head_msdu, + dp_pdev->invalid_peer_tail_msdu, nbuf); return mpdu_done; @@ -277,6 +277,7 @@ dp_rx_null_q_desc_handle(struct dp_soc *soc, struct dp_rx_desc *rx_desc, struct dp_ast_entry *ase; uint16_t sa_idx; uint8_t *data; + uint8_t pool_id; rx_bufs_used++; @@ -287,6 +288,8 @@ dp_rx_null_q_desc_handle(struct dp_soc *soc, struct dp_rx_desc *rx_desc, rx_desc->rx_buf_start = qdf_nbuf_data(nbuf); + pool_id = rx_desc->pool_id; + l2_hdr_offset = hal_rx_msdu_end_l3_hdr_padding_get(rx_desc->rx_buf_start); @@ -319,7 +322,7 @@ dp_rx_null_q_desc_handle(struct dp_soc *soc, struct dp_rx_desc *rx_desc, QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, FL("peer is NULL")); - mpdu_done = dp_rx_chain_msdus(soc, nbuf, rx_desc); + mpdu_done = dp_rx_chain_msdus(soc, nbuf, rx_desc, pool_id); if (mpdu_done) dp_rx_process_invalid_peer(soc, nbuf); diff --git a/dp/wifi3.0/dp_types.h b/dp/wifi3.0/dp_types.h index e9a92f1ce637..f44c6eadb757 100644 --- a/dp/wifi3.0/dp_types.h +++ b/dp/wifi3.0/dp_types.h @@ -754,8 +754,6 @@ struct dp_soc { /* Obj Mgr SoC */ struct wlan_objmgr_psoc *psoc; - qdf_nbuf_t invalid_peer_head_msdu; - qdf_nbuf_t invalid_peer_tail_msdu; #ifdef QCA_SUPPORT_SON /* The timer to check station's inactivity status */ os_timer_t pdev_bs_inact_timer; @@ -966,6 +964,9 @@ struct dp_pdev { qdf_spinlock_t neighbour_peer_mutex; /* Neighnour peer list */ TAILQ_HEAD(, dp_neighbour_peer) neighbour_peers_list; + /* msdu chain head & tail */ + qdf_nbuf_t invalid_peer_head_msdu; + qdf_nbuf_t invalid_peer_tail_msdu; /* Band steering */ /* TBD */