Browse Source

qcacmn: SmartMesh add support for multi radio

Add support for multi-radio  to smart mesh feature

Change-Id: I21f1a59be419cf68b3c038a08c58f17c82df33bb
CRs-Fixed: 2017269
Pratik Gandhi 7 years ago
parent
commit
7613908cb9
3 changed files with 15 additions and 11 deletions
  1. 2 2
      dp/wifi3.0/dp_rx.c
  2. 10 7
      dp/wifi3.0/dp_rx_err.c
  3. 3 2
      dp/wifi3.0/dp_types.h

+ 2 - 2
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;
 			}
 		}

+ 10 - 7
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);
 

+ 3 - 2
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 */