Prechádzať zdrojové kódy

qcacmn: Remove tags from the tlvs and support NO_RX_PKT_HDR_TLV

Remove the tags from the tlvs and support NO_RX_PKT_HDR_TLV
for Beryllium

Change-Id: Ie759582b67a1ae78cddc0402916f9a39e0023009
CRs-Fixed: 3137156
Pavankumar Nandeshwar 3 rokov pred
rodič
commit
e57b5cfe7b
2 zmenil súbory, kde vykonal 124 pridanie a 10 odobranie
  1. 95 0
      dp/wifi3.0/be/dp_be.c
  2. 29 10
      hal/wifi3.0/be/hal_be_rx_tlv.h

+ 95 - 0
dp/wifi3.0/be/dp_be.c

@@ -618,6 +618,100 @@ qdf_size_t dp_get_soc_context_size_be(void)
 	return sizeof(struct dp_soc_be);
 	return sizeof(struct dp_soc_be);
 }
 }
 
 
+#ifdef NO_RX_PKT_HDR_TLV
+/**
+ * dp_rxdma_ring_sel_cfg_be() - Setup RXDMA ring config
+ * @soc: Common DP soc handle
+ *
+ * Return: QDF_STATUS
+ */
+static QDF_STATUS
+dp_rxdma_ring_sel_cfg_be(struct dp_soc *soc)
+{
+	int i;
+	int mac_id;
+	struct htt_rx_ring_tlv_filter htt_tlv_filter = {0};
+	struct dp_srng *rx_mac_srng;
+	QDF_STATUS status = QDF_STATUS_SUCCESS;
+
+	/*
+	 * In Beryllium chipset msdu_start, mpdu_end
+	 * and rx_attn are part of msdu_end/mpdu_start
+	 */
+	htt_tlv_filter.msdu_start = 0;
+	htt_tlv_filter.mpdu_end = 0;
+	htt_tlv_filter.attention = 0;
+	htt_tlv_filter.mpdu_start = 1;
+	htt_tlv_filter.msdu_end = 1;
+	htt_tlv_filter.packet = 1;
+	htt_tlv_filter.packet_header = 1;
+
+	htt_tlv_filter.ppdu_start = 0;
+	htt_tlv_filter.ppdu_end = 0;
+	htt_tlv_filter.ppdu_end_user_stats = 0;
+	htt_tlv_filter.ppdu_end_user_stats_ext = 0;
+	htt_tlv_filter.ppdu_end_status_done = 0;
+	htt_tlv_filter.enable_fp = 1;
+	htt_tlv_filter.enable_md = 0;
+	htt_tlv_filter.enable_md = 0;
+	htt_tlv_filter.enable_mo = 0;
+
+	htt_tlv_filter.fp_mgmt_filter = 0;
+	htt_tlv_filter.fp_ctrl_filter = FILTER_CTRL_BA_REQ;
+	htt_tlv_filter.fp_data_filter = (FILTER_DATA_UCAST |
+					 FILTER_DATA_MCAST |
+					 FILTER_DATA_DATA);
+	htt_tlv_filter.mo_mgmt_filter = 0;
+	htt_tlv_filter.mo_ctrl_filter = 0;
+	htt_tlv_filter.mo_data_filter = 0;
+	htt_tlv_filter.md_data_filter = 0;
+
+	htt_tlv_filter.offset_valid = true;
+
+	/* Not subscribing to mpdu_end, msdu_start and rx_attn */
+	htt_tlv_filter.rx_mpdu_end_offset = 0;
+	htt_tlv_filter.rx_msdu_start_offset = 0;
+	htt_tlv_filter.rx_attn_offset = 0;
+
+	htt_tlv_filter.rx_packet_offset = soc->rx_pkt_tlv_size;
+	/*Not subscribing rx_pkt_header*/
+	htt_tlv_filter.rx_header_offset = 0;
+	htt_tlv_filter.rx_mpdu_start_offset =
+				hal_rx_mpdu_start_offset_get(soc->hal_soc);
+	htt_tlv_filter.rx_msdu_end_offset =
+				hal_rx_msdu_end_offset_get(soc->hal_soc);
+
+	for (i = 0; i < MAX_PDEV_CNT; i++) {
+		struct dp_pdev *pdev = soc->pdev_list[i];
+
+		if (!pdev)
+			continue;
+
+		for (mac_id = 0; mac_id < NUM_RXDMA_RINGS_PER_PDEV; mac_id++) {
+			int mac_for_pdev =
+				dp_get_mac_id_for_pdev(mac_id, pdev->pdev_id);
+			/*
+			 * Obtain lmac id from pdev to access the LMAC ring
+			 * in soc context
+			 */
+			int lmac_id =
+				dp_get_lmac_id_for_pdev_id(soc, mac_id,
+							   pdev->pdev_id);
+
+			rx_mac_srng = dp_get_rxdma_ring(pdev, lmac_id);
+
+			if (!rx_mac_srng->hal_srng)
+				continue;
+
+			htt_h2t_rx_ring_cfg(soc->htt_handle, mac_for_pdev,
+					    rx_mac_srng->hal_srng,
+					    RXDMA_BUF, RX_DATA_BUFFER_SIZE,
+					    &htt_tlv_filter);
+		}
+	}
+	return status;
+}
+#else
 /**
 /**
  * dp_rxdma_ring_sel_cfg_be() - Setup RXDMA ring config
  * dp_rxdma_ring_sel_cfg_be() - Setup RXDMA ring config
  * @soc: Common DP soc handle
  * @soc: Common DP soc handle
@@ -732,6 +826,7 @@ dp_rxdma_ring_sel_cfg_be(struct dp_soc *soc)
 	return status;
 	return status;
 
 
 }
 }
+#endif
 
 
 #ifdef WLAN_FEATURE_NEAR_FULL_IRQ
 #ifdef WLAN_FEATURE_NEAR_FULL_IRQ
 /**
 /**

+ 29 - 10
hal/wifi3.0/be/hal_be_rx_tlv.h

@@ -34,35 +34,54 @@ typedef struct rx_mpdu_start hal_rx_mpdu_start_t;
 typedef struct rx_msdu_end hal_rx_msdu_end_t;
 typedef struct rx_msdu_end hal_rx_msdu_end_t;
 #endif
 #endif
 
 
+#define RX_BE_PADDING0_BYTES 8
 /*
 /*
  * Each RX descriptor TLV is preceded by 1 QWORD "tag"
  * Each RX descriptor TLV is preceded by 1 QWORD "tag"
  */
  */
 
 
+struct rx_pkt_hdr_tlv {
+	uint64_t tag;					/* 8 B */
+	uint64_t phy_ppdu_id;				/* 8 B */
+	char rx_pkt_hdr[HAL_RX_BE_PKT_HDR_TLV_LEN];		/* 112 B */
+};
+
+#ifndef CONFIG_NO_TLV_TAGS
 struct rx_mpdu_start_tlv {
 struct rx_mpdu_start_tlv {
-	uint64_t tag;
+	uint64_t tag;					/* 8 B */
 	hal_rx_mpdu_start_t rx_mpdu_start;
 	hal_rx_mpdu_start_t rx_mpdu_start;
 };
 };
 
 
 struct rx_msdu_end_tlv {
 struct rx_msdu_end_tlv {
-	uint64_t tag;
+	uint64_t tag;					/* 8 B */
 	hal_rx_msdu_end_t rx_msdu_end;
 	hal_rx_msdu_end_t rx_msdu_end;
 };
 };
 
 
-struct rx_pkt_hdr_tlv {
-	uint64_t tag;					/* 8 B */
-	uint64_t phy_ppdu_id;				/* 8 B */
-	char rx_pkt_hdr[HAL_RX_BE_PKT_HDR_TLV_LEN];		/* 112 B */
+struct rx_pkt_tlvs {
+	struct rx_msdu_end_tlv   msdu_end_tlv;	/*  120 bytes */
+	uint8_t rx_padding0[RX_BE_PADDING0_BYTES];	/*  8 bytes */
+	struct rx_mpdu_start_tlv mpdu_start_tlv;	/*  120 bytes */
+#ifndef NO_RX_PKT_HDR_TLV
+	struct rx_pkt_hdr_tlv	pkt_hdr_tlv;		/* 128 bytes */
+#endif
+};
+#else
+struct rx_mpdu_start_tlv {
+	hal_rx_mpdu_start_t rx_mpdu_start;
 };
 };
 
 
-#define RX_BE_PADDING0_BYTES 8
-#define RX_BE_PADDING1_BYTES 8
+struct rx_msdu_end_tlv {
+	hal_rx_msdu_end_t rx_msdu_end;
+};
 
 
 struct rx_pkt_tlvs {
 struct rx_pkt_tlvs {
-	struct rx_msdu_end_tlv   msdu_end_tlv;	/*  120 bytes */
-	uint8_t rx_padding0[RX_BE_PADDING0_BYTES];	/*  8 bytes */
+	struct rx_msdu_end_tlv   msdu_end_tlv;	/*  128 bytes */
 	struct rx_mpdu_start_tlv mpdu_start_tlv;	/*  120 bytes */
 	struct rx_mpdu_start_tlv mpdu_start_tlv;	/*  120 bytes */
+	uint8_t rx_padding0[RX_BE_PADDING0_BYTES];	/*  8 bytes */
+#ifndef NO_RX_PKT_HDR_TLV
 	struct rx_pkt_hdr_tlv	 pkt_hdr_tlv;		/* 128 bytes */
 	struct rx_pkt_hdr_tlv	 pkt_hdr_tlv;		/* 128 bytes */
+#endif
 };
 };
+#endif
 
 
 #define SIZE_OF_DATA_RX_TLV sizeof(struct rx_pkt_tlvs)
 #define SIZE_OF_DATA_RX_TLV sizeof(struct rx_pkt_tlvs)