فهرست منبع

qcacmn: Add initial support for word mask compaction

Add initial support for word mask compaction.

Change-Id: Ife05e355395fbc6c6804c34f62954a2b04a2cd03
CRs-Fixed: 3398292
nobelj 2 سال پیش
والد
کامیت
20db7b641f
3فایلهای تغییر یافته به همراه55 افزوده شده و 23 حذف شده
  1. 15 7
      dp/wifi3.0/dp_htt.h
  2. 38 14
      dp/wifi3.0/monitor/2.0/dp_mon_filter_2.0.c
  3. 2 2
      dp/wifi3.0/monitor/2.0/dp_mon_filter_2.0.h

+ 15 - 7
dp/wifi3.0/dp_htt.h

@@ -512,22 +512,28 @@ struct dp_tx_mon_upstream_tlv_config {
 
 /**
  * struct dp_tx_mon_wordmask_config - Tx monitor word mask
- * @tx_fes_setup: TX_FES_SETUP TLV word mask
+ * @pcu_ppdu_setup_init: PCU_PPDU_SETUP TLV word mask
  * @tx_peer_entry: TX_PEER_ENTRY TLV word mask
  * @tx_queue_ext: TX_QUEUE_EXTENSION TLV word mask
+ * @tx_fes_status_end: TX_FES_STATUS_END TLV word mask
+ * @response_end_status: RESPONSE_END_STATUS TLV word mask
+ * @tx_fes_status_prot: TX_FES_STATUS_PROT TLV word mask
+ * @tx_fes_setup: TX_FES_SETUP TLV word mask
  * @tx_msdu_start: TX_MSDU_START TLV word mask
  * @tx_mpdu_start: TX_MPDU_START TLV word mask
- * @pcu_ppdu_setup_init: PCU_PPDU_SETUP TLV word mask
  * @rxpcu_user_setup: RXPCU_USER_SETUP TLV word mask
  */
 struct dp_tx_mon_wordmask_config {
-	uint16_t tx_fes_setup;
+	uint32_t pcu_ppdu_setup_init;
 	uint16_t tx_peer_entry;
 	uint16_t tx_queue_ext;
-	uint16_t tx_msdu_start;
-	uint16_t tx_mpdu_start;
-	uint32_t pcu_ppdu_setup_init;
-	uint16_t rxpcu_user_setup;
+	uint16_t tx_fes_status_end;
+	uint16_t response_end_status;
+	uint16_t tx_fes_status_prot;
+	uint8_t tx_fes_setup;
+	uint8_t tx_msdu_start;
+	uint8_t tx_mpdu_start;
+	uint8_t rxpcu_user_setup;
 };
 
 /**
@@ -536,6 +542,7 @@ struct dp_tx_mon_wordmask_config {
  * @dtlvs: enable/disable downstream TLVs
  * @utlvs: enable/disable upstream TLVs
  * @wmask: enable/disable word mask subscription
+ * @compaction_enable: word mask compaction enable
  * @mgmt_filter: enable/disable mgmt packets
  * @data_filter: enable/disable data packets
  * @ctrl_filter: enable/disable ctrl packets
@@ -565,6 +572,7 @@ struct htt_tx_ring_tlv_filter {
 	struct dp_tx_mon_downstream_tlv_config dtlvs;
 	struct dp_tx_mon_upstream_tlv_config utlvs;
 	struct dp_tx_mon_wordmask_config wmask;
+	uint8_t compaction_enable;
 	uint16_t mgmt_filter;
 	uint16_t data_filter;
 	uint16_t ctrl_filter;

+ 38 - 14
dp/wifi3.0/monitor/2.0/dp_mon_filter_2.0.c

@@ -1398,17 +1398,6 @@ void dp_tx_mon_filter_set_upstream_tlvs(struct htt_tx_ring_tlv_filter *filter)
 	filter->utlvs.eht_sig_usr_ofdma = 1;
 }
 
-void dp_tx_mon_filter_set_word_mask(struct htt_tx_ring_tlv_filter *filter)
-{
-	filter->wmask.tx_fes_setup = 1;
-	filter->wmask.tx_peer_entry = 1;
-	filter->wmask.tx_queue_ext = 1;
-	filter->wmask.tx_msdu_start = 1;
-	filter->wmask.tx_mpdu_start = 1;
-	filter->wmask.pcu_ppdu_setup_init = 1;
-	filter->wmask.rxpcu_user_setup = 1;
-}
-
 void dp_tx_mon_filter_set_all(struct dp_mon_pdev_be *mon_pdev_be,
 			      struct htt_tx_ring_tlv_filter *filter)
 {
@@ -1421,7 +1410,6 @@ void dp_tx_mon_filter_set_all(struct dp_mon_pdev_be *mon_pdev_be,
 
 	dp_tx_mon_filter_set_downstream_tlvs(filter);
 	dp_tx_mon_filter_set_upstream_tlvs(filter);
-	dp_tx_mon_filter_set_word_mask(filter);
 
 	filter->mgmt_filter = 0x1;
 	filter->data_filter = 0x1;
@@ -1448,6 +1436,26 @@ void dp_tx_mon_filter_set_all(struct dp_mon_pdev_be *mon_pdev_be,
 	filter->data_dma_length = mon_pdev_be->tx_mon_filter_length;
 }
 
+void dp_tx_mon_filter_set_word_mask(struct dp_pdev *pdev,
+				    struct htt_tx_ring_tlv_filter *filter)
+{
+	/* invoke hal api to get the word mask */
+
+	filter->wmask.pcu_ppdu_setup_init = 0xFFFFFFFF;
+	filter->wmask.tx_peer_entry = 0xFFFF;
+	filter->wmask.tx_queue_ext = 0xFFFF;
+	filter->wmask.tx_fes_status_end = 0xFFFF;
+	filter->wmask.response_end_status = 0xFFFF;
+	filter->wmask.tx_fes_status_prot = 0xFFFF;
+	filter->wmask.tx_fes_setup = 0xFF;
+	filter->wmask.tx_msdu_start = 0xFF;
+	filter->wmask.tx_mpdu_start = 0xFF;
+	filter->wmask.rxpcu_user_setup = 0xFF;
+
+	/* compaction is disable */
+	filter->compaction_enable = 0;
+}
+
 void dp_mon_filter_setup_tx_mon_mode_2_0(struct dp_pdev *pdev)
 {
 	struct dp_mon_filter_be filter = {0};
@@ -1479,6 +1487,7 @@ void dp_mon_filter_setup_tx_mon_mode_2_0(struct dp_pdev *pdev)
 
 	filter.tx_valid = !!mon_pdev_be->tx_mon_mode;
 	dp_tx_mon_filter_set_all(mon_pdev_be, &filter.tx_tlv_filter);
+	dp_tx_mon_filter_set_word_mask(pdev, &filter.tx_tlv_filter);
 	dp_mon_filter_show_tx_filter_be(mode, &filter);
 	mon_pdev_be->filter_be[mode][srng_type] = filter;
 }
@@ -3156,8 +3165,10 @@ dp_mon_filter_reset_tx_lite_mon(struct dp_mon_pdev_be *be_mon_pdev)
 }
 
 void
-dp_mon_filter_setup_tx_lite_mon(struct dp_mon_pdev_be *be_mon_pdev)
+dp_mon_filter_setup_tx_lite_mon(struct dp_pdev *pdev)
 {
+	struct dp_mon_pdev *mon_pdev = NULL;
+	struct dp_mon_pdev_be *be_mon_pdev = NULL;
 	struct dp_mon_filter_be filter = {0};
 	enum dp_mon_filter_mode mode = DP_MON_FILTER_LITE_MON_MODE;
 	enum dp_mon_filter_srng_type srng_type =
@@ -3165,6 +3176,19 @@ dp_mon_filter_setup_tx_lite_mon(struct dp_mon_pdev_be *be_mon_pdev)
 	struct htt_tx_ring_tlv_filter *tx_tlv_filter = &filter.tx_tlv_filter;
 	struct dp_lite_mon_tx_config *config = NULL;
 
+	if (!pdev) {
+		dp_mon_filter_err("Pdev context is null");
+		return;
+	}
+
+	mon_pdev = pdev->monitor_pdev;
+	if (!mon_pdev) {
+		dp_mon_filter_err("Monitor pdev context is null");
+		return;
+	}
+
+	be_mon_pdev = dp_get_be_mon_pdev_from_dp_mon_pdev(mon_pdev);
+
 	config = be_mon_pdev->lite_mon_tx_config;
 	if (!config)
 		return;
@@ -3182,7 +3206,7 @@ dp_mon_filter_setup_tx_lite_mon(struct dp_mon_pdev_be *be_mon_pdev)
 
 	dp_tx_mon_filter_set_downstream_tlvs(tx_tlv_filter);
 	dp_tx_mon_filter_set_upstream_tlvs(tx_tlv_filter);
-	dp_tx_mon_filter_set_word_mask(tx_tlv_filter);
+	dp_tx_mon_filter_set_word_mask(pdev, tx_tlv_filter);
 
 	/* configure mgmt filters */
 	if (config->tx_config.mgmt_filter[DP_MON_FRM_FILTER_MODE_FP]) {

+ 2 - 2
dp/wifi3.0/monitor/2.0/dp_mon_filter_2.0.h

@@ -318,10 +318,10 @@ void dp_mon_filter_reset_tx_lite_mon(struct dp_mon_pdev_be *be_mon_pdev);
 
 /**
  * dp_mon_filter_setup_tx_lite_mon() - Setup tx lite monitor filter
- * @be_mon_pdev: physical mon device handle
+ * @pdev: physical device handle
  *
  * Return: Null
  */
-void dp_mon_filter_setup_tx_lite_mon(struct dp_mon_pdev_be *be_mon_pdev);
+void dp_mon_filter_setup_tx_lite_mon(struct dp_pdev *pdev);
 #endif
 #endif /* _DP_MON_FILTER_2_0_H_ */