Quellcode durchsuchen

qcacmn: Enable ADFS 320 MHz capability bit

A new capability bit from FW is introduced that provides
ADFS 320 MHz support information. supports_adfs_320 signifies
chainmask capability service bit if FW supports ADFS on 320 MHz
channel width. Add this capability bit(supports_adfs_320) in host.

Change-Id: I09c689658ef495d8a8707425ecc9ba922fce4d41
CRs-Fixed: 3317795
Divya R vor 2 Jahren
Ursprung
Commit
2c0d802926

+ 5 - 1
target_if/init_deinit/inc/service_ready_param.h

@@ -354,6 +354,7 @@ struct wlan_psoc_host_spectral_scaling_params {
  * @supports_aSpectral: Agile Spectral support for this chain mask.
  * @supports_aSpectral_160: Agile Spectral support in 160 MHz.
  * @supports_aDFS_160: Agile DFS support in 160 MHz for this chain mask.
+ * @supports_aDFS_320: Agile DFS support in 320 MHz for this chain mask.
  * @chain_mask_2G: 2G support for this chain mask.
  * @chain_mask_5G: 5G support for this chain mask.
  * @chain_mask_tx: Tx support for this chain mask.
@@ -373,7 +374,10 @@ struct wlan_psoc_host_chainmask_capabilities {
 		 supports_aSpectral:1,
 		 supports_aSpectral_160:1,
 		 supports_aDFS_160:1,
-		 reserved:19,
+#ifdef WLAN_FEATURE_11BE
+		 supports_aDFS_320:1,
+#endif
+		 reserved:17,
 		 chain_mask_2G:1,
 		 chain_mask_5G:1,
 		 chain_mask_tx:1,

+ 6 - 0
umac/dfs/core/src/dfs.h

@@ -410,6 +410,7 @@
  *                 Agile detector in true 160MHz supported devices).
  * @DETECTOR_ID_2: Detector ID 2 (Agile detector in 80p80MHZ supported devices).
  * @AGILE_DETECTOR_ID_TRUE_160MHZ:  Agile detector ID in true 160MHz devices.
+ * @AGILE_DETECTOR_11BE:  Agile detector ID in true 320 MHz devices.
  * @AGILE_DETECTOR_ID_80p80: Agile detector ID in 80p80MHz supported devices.
  * @INVALID_DETECTOR_ID: Invalid detector id.
  */
@@ -418,6 +419,7 @@ enum detector_id {
 	DETECTOR_ID_1,
 	DETECTOR_ID_2,
 	AGILE_DETECTOR_ID_TRUE_160MHZ = DETECTOR_ID_1,
+	AGILE_DETECTOR_11BE = DETECTOR_ID_1,
 	AGILE_DETECTOR_ID_80P80 = DETECTOR_ID_2,
 	INVALID_DETECTOR_ID,
 };
@@ -1125,6 +1127,7 @@ struct dfs_rcac_params {
  * @dfs_use_puncture:                User configured value for enabling or
  *                                   disabling DFS puncturing feature.
  * @dfs_agile_rcac_ucfg:             User configuration for Rolling CAC.
+ * @dfs_fw_adfs_support_320:         Target Agile DFS support for 320 BW.
  * @dfs_fw_adfs_support_non_160:     Target Agile DFS support for non-160 BWs.
  * @dfs_fw_adfs_support_160:         Target Agile DFS support for 160 BW.
  * @dfs_allow_hw_pulses:             Allow/Block HW pulses. When synthetic
@@ -1304,6 +1307,9 @@ struct wlan_dfs {
 	uint8_t        dfs_agile_precac_ucfg:1,
 #if defined(QCA_SUPPORT_ADFS_RCAC)
 		       dfs_agile_rcac_ucfg:1,
+#endif
+#ifdef WLAN_FEATURE_11BE
+		       dfs_fw_adfs_support_320:1,
 #endif
 		       dfs_fw_adfs_support_non_160:1,
 		       dfs_fw_adfs_support_160:1;

+ 41 - 3
umac/dfs/core/src/dfs_zero_cac.h

@@ -394,7 +394,7 @@ dfs_decide_precac_preferred_chan_for_freq(struct wlan_dfs *dfs,
 uint16_t dfs_get_ieeechan_for_precac_for_freq(struct wlan_dfs *dfs,
 					      uint16_t exclude_pri_chan_freq,
 					      uint16_t exclude_sec_chan_freq,
-					      uint8_t bandwidth);
+					      uint16_t bandwidth);
 #endif
 
 /**
@@ -480,6 +480,18 @@ void dfs_set_agilecac_chan_for_freq(struct wlan_dfs *dfs,
 				    uint16_t sec_chan_freq);
 #endif
 
+/**
+ * dfs_compute_agile_and_curchan_width() - Compute the agile/current channel
+ * width from dfs structure.
+ * @dfs: Pointer to wlan_dfs structure.
+ * @agile_ch_width: Agile channel width.
+ * @cur_ch_width: Current home channel width.
+ */
+void
+dfs_compute_agile_and_curchan_width(struct wlan_dfs *dfs,
+				    enum phy_ch_width *agile_ch_width,
+				    enum phy_ch_width *cur_ch_width);
+
 /**
  * dfs_agile_precac_start() - Start agile precac.
  * @dfs: Pointer to wlan_dfs structure.
@@ -506,12 +518,14 @@ void dfs_start_agile_precac_timer(struct wlan_dfs *dfs,
  * @dfs: Pointer to wlan_dfs structure.
  * @fw_adfs_support_160: aDFS enabled when pdev is on 160/80P80MHz.
  * @fw_adfs_support_non_160: aDFS enabled when pdev is on 20/40/80MHz.
+ * @fw_adfs_support_320: aDFS enabled when pdev is on 320 MHz.
  *
  * Return: void.
  */
 void dfs_set_fw_adfs_support(struct wlan_dfs *dfs,
 			     bool fw_adfs_support_160,
-			     bool fw_adfs_support_non_160);
+			     bool fw_adfs_support_non_160,
+			     bool fw_adfs_support_320);
 #else
 static inline void dfs_find_pdev_for_agile_precac(struct wlan_objmgr_pdev *pdev,
 						  uint8_t *cur_agile_dfs_index)
@@ -542,6 +556,13 @@ dfs_set_agilecac_chan_for_freq(struct wlan_dfs *dfs,
 }
 #endif
 
+static inline void
+dfs_compute_agile_and_curchan_width(struct wlan_dfs *dfs,
+				    enum phy_ch_width *agile_ch_width,
+				    enum phy_ch_width *cur_ch_width)
+{
+}
+
 static inline void dfs_agile_precac_start(struct wlan_dfs *dfs)
 {
 }
@@ -556,7 +577,8 @@ dfs_start_agile_precac_timer(struct wlan_dfs *dfs,
 static inline void
 dfs_set_fw_adfs_support(struct wlan_dfs *dfs,
 			bool fw_adfs_support_160,
-			bool fw_adfs_support_non_160)
+			bool fw_adfs_support_non_160,
+			bool fw_adfs_support_320)
 {
 }
 #endif
@@ -1041,6 +1063,16 @@ QDF_STATUS dfs_agile_sm_destroy(struct dfs_soc_priv_obj *dfs_soc_obj);
  */
 bool dfs_is_agile_cac_enabled(struct wlan_dfs *dfs);
 
+/* dfs_translate_chwidth_enum2val() - Translate the given channel width enum
+ *                                    to it's value.
+ * @dfs:     Pointer to WLAN DFS structure.
+ * @chwidth: Channel width enum of the pdev's current channel.
+ *
+ * Return: The Bandwidth value for the given channel width enum.
+ */
+uint16_t
+dfs_translate_chwidth_enum2val(struct wlan_dfs *dfs,
+			       enum phy_ch_width chwidth);
 #else
 
 static inline
@@ -1068,6 +1100,12 @@ static inline bool dfs_is_agile_cac_enabled(struct wlan_dfs *dfs)
 {
 	return false;
 }
+
+static inline uint16_t dfs_translate_chwidth_enum2val(struct wlan_dfs *dfs,
+						      enum phy_ch_width chwidth)
+{
+	return false;
+}
 #endif /* QCA_SUPPORT_AGILE_DFS */
 
 #ifdef QCA_SUPPORT_ADFS_RCAC

+ 5 - 2
umac/dfs/dispatcher/inc/wlan_dfs_tgt_api.h

@@ -554,17 +554,20 @@ tgt_dfs_send_subchan_marking(struct wlan_objmgr_pdev *pdev, bool subchanmark)
  * @pdev: Pointer to pdev object.
  * @fw_adfs_support_160: aDFS enabled when pdev is on 160/80P80MHz.
  * @fw_adfs_support_non_160: aDFS enabled when pdev is on 20/40/80MHz.
+ * @fw_adfs_support_320: aDFS enabled when pdev is on 320 MHz.
  *
  * Return: void.
  */
 void tgt_dfs_set_fw_adfs_support(struct wlan_objmgr_pdev *pdev,
 				 bool fw_adfs_support_160,
-				 bool fw_adfs_support_non_160);
+				 bool fw_adfs_support_non_160,
+				 bool fw_adfs_support_320);
 #else
 static inline
 void tgt_dfs_set_fw_adfs_support(struct wlan_objmgr_pdev *pdev,
 				 bool fw_adfs_support_160,
-				 bool fw_adfs_support_non_160)
+				 bool fw_adfs_support_non_160,
+				 bool fw_adfs_support_320)
 {
 }
 #endif

+ 4 - 2
umac/dfs/dispatcher/src/wlan_dfs_tgt_api.c

@@ -789,7 +789,8 @@ qdf_export_symbol(tgt_dfs_send_subchan_marking);
 #ifdef QCA_SUPPORT_AGILE_DFS
 void tgt_dfs_set_fw_adfs_support(struct wlan_objmgr_pdev *pdev,
 				 bool fw_adfs_support_160,
-				 bool fw_adfs_support_non_160)
+				 bool fw_adfs_support_non_160,
+				 bool fw_adfs_support_320)
 {
 	struct wlan_dfs *dfs;
 
@@ -801,7 +802,8 @@ void tgt_dfs_set_fw_adfs_support(struct wlan_objmgr_pdev *pdev,
 
 	dfs_set_fw_adfs_support(dfs,
 				fw_adfs_support_160,
-				fw_adfs_support_non_160);
+				fw_adfs_support_non_160,
+				fw_adfs_support_320);
 }
 
 qdf_export_symbol(tgt_dfs_set_fw_adfs_support);

+ 2 - 1
umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h

@@ -2263,7 +2263,8 @@ struct wlan_lmac_if_dfs_rx_ops {
 	bool (*dfs_is_hw_pulses_allowed)(struct wlan_objmgr_pdev *pdev);
 	void (*dfs_set_fw_adfs_support)(struct wlan_objmgr_pdev *pdev,
 					bool fw_adfs_support_160,
-					bool fw_adfs_support_non_160);
+					bool fw_adfs_support_non_160,
+					bool fw_adfs_support_320);
 	void (*dfs_reset_dfs_prevchan)(struct wlan_objmgr_pdev *pdev);
 	void (*dfs_init_tmp_psoc_nol)(struct wlan_objmgr_pdev *pdev,
 				      uint8_t num_radios);