浏览代码

qcacmn: Featurize wlan repeater handling in multipass

Currently the packet tx handling for AP-multipass
assumes wlan repeater to be present. For targets like
qca6490, kiwi etc, wlan repeaters are not supported in
the network topology.

Hence to skip unwanted tx packet copy in per-pkt path,
move the code to handle packet tx to waln repeater in
multipass mode under a feature macro.

Change-Id: I8bb3fbc4f3de76c3ae04978d12d369fad5d2553f
CRs-Fixed: 3491508
Rakesh Pillai 2 年之前
父节点
当前提交
4bb252b2a3
共有 1 个文件被更改,包括 31 次插入21 次删除
  1. 31 21
      dp/wifi3.0/dp_tx.c

+ 31 - 21
dp/wifi3.0/dp_tx.c

@@ -6770,29 +6770,14 @@ uint8_t dp_tx_need_multipass_process(struct dp_soc *soc, struct dp_vdev *vdev,
 	return DP_VLAN_UNTAGGED;
 }
 
-bool dp_tx_multipass_process(struct dp_soc *soc, struct dp_vdev *vdev,
-			     qdf_nbuf_t nbuf,
-			     struct dp_tx_msdu_info_s *msdu_info)
+#ifndef WLAN_REPEATER_NOT_SUPPORTED
+static inline void
+dp_tx_multipass_send_pkt_to_repeater(struct dp_soc *soc, struct dp_vdev *vdev,
+				     qdf_nbuf_t nbuf,
+				     struct dp_tx_msdu_info_s *msdu_info)
 {
-	uint16_t vlan_id = 0;
-	uint16_t group_key = 0;
-	uint8_t is_spcl_peer = DP_VLAN_UNTAGGED;
 	qdf_nbuf_t nbuf_copy = NULL;
 
-	if (HTT_TX_MSDU_EXT2_DESC_FLAG_VALID_KEY_FLAGS_GET(msdu_info->meta_data[0]))
-		return true;
-
-	is_spcl_peer = dp_tx_need_multipass_process(soc, vdev, nbuf, &vlan_id);
-
-	if ((is_spcl_peer != DP_VLAN_TAGGED_MULTICAST) &&
-	    (is_spcl_peer != DP_VLAN_TAGGED_UNICAST))
-		return true;
-
-	if (is_spcl_peer == DP_VLAN_TAGGED_UNICAST) {
-		dp_tx_remove_vlan_tag(vdev, nbuf);
-		return true;
-	}
-
 	/* AP can have classic clients, special clients &
 	 * classic repeaters.
 	 * 1. Classic clients & special client:
@@ -6822,10 +6807,35 @@ bool dp_tx_multipass_process(struct dp_soc *soc, struct dp_vdev *vdev,
 						   HTT_INVALID_PEER, NULL);
 		if (nbuf_copy) {
 			qdf_nbuf_free(nbuf_copy);
-			qdf_err("nbuf_copy send failed");
+			dp_info_rl("nbuf_copy send failed");
 		}
 	}
+}
+#endif
+
+bool dp_tx_multipass_process(struct dp_soc *soc, struct dp_vdev *vdev,
+			     qdf_nbuf_t nbuf,
+			     struct dp_tx_msdu_info_s *msdu_info)
+{
+	uint16_t vlan_id = 0;
+	uint16_t group_key = 0;
+	uint8_t is_spcl_peer = DP_VLAN_UNTAGGED;
+
+	if (HTT_TX_MSDU_EXT2_DESC_FLAG_VALID_KEY_FLAGS_GET(msdu_info->meta_data[0]))
+		return true;
+
+	is_spcl_peer = dp_tx_need_multipass_process(soc, vdev, nbuf, &vlan_id);
+
+	if ((is_spcl_peer != DP_VLAN_TAGGED_MULTICAST) &&
+	    (is_spcl_peer != DP_VLAN_TAGGED_UNICAST))
+		return true;
+
+	if (is_spcl_peer == DP_VLAN_TAGGED_UNICAST) {
+		dp_tx_remove_vlan_tag(vdev, nbuf);
+		return true;
+	}
 
+	dp_tx_multipass_send_pkt_to_repeater(soc, vdev, nbuf, msdu_info);
 	group_key = vdev->iv_vlan_map[vlan_id];
 
 	/*