Ver código fonte

qcacmn: avoid wds source port learning for STA in HKV2

Changes to avoid WDS source port learning in STA mode
if ast override feature is supported by HW

Change-Id: I248c8815429e7417dcf3f451912ee5f037af9c25
Chaithanya Garrepalli 6 anos atrás
pai
commit
2467ed1445
5 arquivos alterados com 35 adições e 2 exclusões
  1. 7 1
      dp/wifi3.0/dp_main.c
  2. 6 0
      dp/wifi3.0/dp_rx.h
  3. 11 1
      dp/wifi3.0/dp_tx.c
  4. 7 0
      dp/wifi3.0/dp_types.h
  5. 4 0
      hal/wifi3.0/hal_tx.h

+ 7 - 1
dp/wifi3.0/dp_main.c

@@ -8129,13 +8129,18 @@ void *dp_soc_attach_wifi3(void *ctrl_psoc, void *hif_handle,
 	target_type = hal_get_target_type(soc->hal_soc);
 	switch (target_type) {
 	case TARGET_TYPE_QCA6290:
+		wlan_cfg_set_reo_dst_ring_size(soc->wlan_cfg_ctx,
+					       REO_DST_RING_SIZE_QCA6290);
+		soc->ast_override_support = 1;
+		break;
 #ifdef QCA_WIFI_QCA6390
 	case TARGET_TYPE_QCA6390:
-#endif
 		wlan_cfg_set_reo_dst_ring_size(soc->wlan_cfg_ctx,
 					       REO_DST_RING_SIZE_QCA6290);
 		wlan_cfg_set_raw_mode_war(soc->wlan_cfg_ctx, true);
+		soc->ast_override_support = 1;
 		break;
+#endif
 	case TARGET_TYPE_QCA8074:
 		wlan_cfg_set_reo_dst_ring_size(soc->wlan_cfg_ctx,
 					       REO_DST_RING_SIZE_QCA8074);
@@ -8147,6 +8152,7 @@ void *dp_soc_attach_wifi3(void *ctrl_psoc, void *hif_handle,
 					       REO_DST_RING_SIZE_QCA8074);
 		wlan_cfg_set_raw_mode_war(soc->wlan_cfg_ctx, false);
 		soc->hw_nac_monitor_support = 1;
+		soc->ast_override_support = 1;
 		break;
 	default:
 		qdf_print("%s: Unknown tgt type %d\n", __func__, target_type);

+ 6 - 0
dp/wifi3.0/dp_rx.h

@@ -416,6 +416,12 @@ dp_rx_wds_srcport_learn(struct dp_soc *soc,
 		if (!(qdf_nbuf_is_rx_chfrag_start(nbuf) &&
 		      hal_rx_get_mpdu_mac_ad4_valid(rx_tlv_hdr)))
 			return;
+	} else {
+		/* For HKv2 Source port learing is not needed in STA mode
+		 * as we have support in HW
+		 */
+		if (soc->ast_override_support)
+			return;
 	}
 
 	memcpy(wds_src_mac, (qdf_nbuf_data(nbuf) + IEEE80211_ADDR_LEN),

+ 11 - 1
dp/wifi3.0/dp_tx.c

@@ -923,7 +923,12 @@ static QDF_STATUS dp_tx_hw_enqueue(struct dp_soc *soc, struct dp_vdev *vdev,
 	hal_tx_desc_set_buf_offset(hal_tx_desc_cached, tx_desc->pkt_offset);
 	hal_tx_desc_set_encap_type(hal_tx_desc_cached, tx_desc->tx_encap_type);
 	hal_tx_desc_set_lmac_id(soc->hal_soc, hal_tx_desc_cached,
-				HAL_TX_DESC_DEFAULT_LMAC_ID);
+				vdev->pdev->pdev_id);
+
+	hal_tx_desc_set_search_type(soc->hal_soc, hal_tx_desc_cached,
+				    vdev->search_type);
+	hal_tx_desc_set_search_index(soc->hal_soc, hal_tx_desc_cached,
+				     vdev->bss_ast_hash);
 	hal_tx_desc_set_dscp_tid_table_id(soc->hal_soc, hal_tx_desc_cached,
 					  vdev->dscp_tid_map_id);
 	hal_tx_desc_set_encrypt_type(hal_tx_desc_cached,
@@ -3214,6 +3219,11 @@ void dp_tx_vdev_update_search_flags(struct dp_vdev *vdev)
 		vdev->hal_desc_addr_search_flags = HAL_TX_DESC_ADDRY_EN;
 	else
 		vdev->hal_desc_addr_search_flags = HAL_TX_DESC_ADDRX_EN;
+
+	if (vdev->opmode == wlan_op_mode_sta)
+		vdev->search_type = HAL_TX_ADDR_INDEX_SEARCH;
+	else
+		vdev->search_type = HAL_TX_ADDR_SEARCH_DEFAULT;
 }
 
 #ifdef QCA_LL_TX_FLOW_CONTROL_V2

+ 7 - 0
dp/wifi3.0/dp_types.h

@@ -688,6 +688,9 @@ struct dp_soc {
 	/*cce disable*/
 	bool cce_disable;
 
+	/*ast override support in HW*/
+	bool ast_override_support;
+
 	/* Link descriptor memory banks */
 	struct {
 		void *base_vaddr_unaligned;
@@ -1407,6 +1410,10 @@ struct dp_vdev {
 
 	/* SWAR for HW: Enable WEP bit in the AMSDU frames for RAW mode */
 	bool raw_mode_war;
+
+	/* Address search type to be set in TX descriptor */
+	uint8_t search_type;
+
 	/* AST hash value for BSS peer in HW valid for STA VAP*/
 	uint16_t bss_ast_hash;
 };

+ 4 - 0
hal/wifi3.0/hal_tx.h

@@ -116,6 +116,10 @@ do {                                            \
 #define HAL_TX_DESC_ADDRY_EN 0x2
 #define HAL_TX_DESC_DEFAULT_LMAC_ID 0x3
 
+#define HAL_TX_ADDR_SEARCH_DEFAULT 0x0
+#define HAL_TX_ADDR_INDEX_SEARCH 0x1
+#define HAL_TX_FLOW_INDEX_SEARCH 0x2
+
 enum hal_tx_ret_buf_manager {
 	HAL_WBM_SW0_BM_ID = 3,
 	HAL_WBM_SW1_BM_ID = 4,