Kaynağa Gözat

qcacmn: Handle the HTT message for SAWF peer AST update

When a new MSDUQ is instantiated for a peer, additional
dynamic AST indices are allocated.The new AST indices
should be used in subsequent MSDUs.

Handle the HTT message to update the dynamically allocated
AST indices.

Change-Id: Iea24e1f3523006f40c781abdc3c176ba25ecd5a5
CRs-Fixed: 3449259
Vivek 2 yıl önce
ebeveyn
işleme
7c844f2d3f
2 değiştirilmiş dosya ile 31 ekleme ve 5 silme
  1. 24 1
      dp/wifi3.0/dp_htt.c
  2. 7 4
      dp/wifi3.0/li/dp_li_tx.c

+ 24 - 1
dp/wifi3.0/dp_htt.c

@@ -409,7 +409,7 @@ static int dp_htt_h2t_add_tcl_metadata_ver_v2(struct htt_soc *soc,
 	HTT_OPTION_TLV_TAG_SET(*msg_word, HTT_OPTION_TLV_TAG_TCL_METADATA_VER);
 	HTT_OPTION_TLV_LENGTH_SET(*msg_word, HTT_TCL_METADATA_VER_SZ);
 	HTT_OPTION_TLV_TCL_METADATA_VER_SET(*msg_word,
-					    HTT_OPTION_TLV_TCL_METADATA_V2);
+					    HTT_OPTION_TLV_TCL_METADATA_V21);
 
 	return QDF_STATUS_SUCCESS;
 }
@@ -2720,6 +2720,21 @@ static void dp_sawf_msduq_map(struct htt_soc *soc, uint32_t *msg_word,
 	dp_htt_sawf_msduq_map(soc, msg_word, htt_t2h_msg);
 }
 
+/**
+ * dp_sawf_dynamic_ast_update() - Dynamic AST index update for SAWF peer
+ * from target
+ * @soc: soc handle.
+ * @msg_word: Pointer to htt msg word.
+ * @htt_t2h_msg: HTT message nbuf
+ *
+ * Return: void
+ */
+static void dp_sawf_dynamic_ast_update(struct htt_soc *soc, uint32_t *msg_word,
+				       qdf_nbuf_t htt_t2h_msg)
+{
+	dp_htt_sawf_dynamic_ast_update(soc, msg_word, htt_t2h_msg);
+}
+
 /**
  * dp_sawf_mpdu_stats_handler() - HTT message handler for MPDU stats
  * @soc: soc handle.
@@ -2740,6 +2755,9 @@ static void dp_sawf_msduq_map(struct htt_soc *soc, uint32_t *msg_word,
 static void dp_sawf_mpdu_stats_handler(struct htt_soc *soc,
 				       qdf_nbuf_t htt_t2h_msg)
 {}
+static void dp_sawf_dynamic_ast_update(struct htt_soc *soc, uint32_t *msg_word,
+				       qdf_nbuf_t htt_t2h_msg)
+{}
 #endif
 
 /**
@@ -4076,6 +4094,11 @@ void dp_htt_t2h_msg_handler(void *context, HTC_PACKET *pkt)
 		dp_sawf_msduq_map(soc, msg_word, htt_t2h_msg);
 		break;
 	}
+	case HTT_T2H_MSG_TYPE_PEER_AST_OVERRIDE_INDEX_IND:
+	{
+		dp_sawf_dynamic_ast_update(soc, msg_word, htt_t2h_msg);
+		break;
+	}
 	case HTT_T2H_MSG_TYPE_STREAMING_STATS_IND:
 	{
 		dp_sawf_mpdu_stats_handler(soc, htt_t2h_msg);

+ 7 - 4
dp/wifi3.0/li/dp_li_tx.c

@@ -387,7 +387,7 @@ void dp_sawf_config_li(struct dp_soc *soc, uint32_t *hal_tx_desc_cached,
 		       qdf_nbuf_t nbuf, struct dp_tx_msdu_info_s *msdu_info)
 {
 	uint8_t q_id = 0;
-	uint32_t search_index;
+	uint32_t flow_idx = 0;
 
 	if (!wlan_cfg_get_sawf_config(soc->wlan_cfg_ctx))
 		return;
@@ -406,12 +406,15 @@ void dp_sawf_config_li(struct dp_soc *soc, uint32_t *hal_tx_desc_cached,
 
 	dp_sawf_tcl_cmd(fw_metadata, nbuf);
 
-	search_index = dp_sawf_get_search_index(soc, nbuf, vdev_id,
-						q_id);
+	/* For SAWF, q_id starts from DP_SAWF_Q_MAX */
+	if (!dp_sawf_get_search_index(soc, nbuf, vdev_id,
+				      q_id, &flow_idx))
+		hal_tx_desc_set_to_fw(hal_tx_desc_cached, true);
+
 	hal_tx_desc_set_search_type_li(soc->hal_soc, hal_tx_desc_cached,
 				       HAL_TX_ADDR_INDEX_SEARCH);
 	hal_tx_desc_set_search_index_li(soc->hal_soc, hal_tx_desc_cached,
-					search_index);
+					flow_idx);
 }
 #else
 static inline