Prechádzať zdrojové kódy

Merge "qcacmn: Add frequency APIs in DFS Dispatcher"

Linux Build Service Account 5 rokov pred
rodič
commit
7288846971

+ 153 - 2
umac/dfs/dispatcher/inc/wlan_dfs_mlme_api.h

@@ -44,12 +44,29 @@ void dfs_mlme_start_rcsa(struct wlan_objmgr_pdev *pdev,
  * @vhtop_ch_freq_seg2: VHT80 Cfreq2.
  * @flags: channel flags.
  */
+#ifdef CONFIG_CHAN_NUM_API
 void dfs_mlme_mark_dfs(struct wlan_objmgr_pdev *pdev,
 			uint8_t ieee,
 			uint16_t freq,
 			uint8_t vhtop_ch_freq_seg2,
 			uint64_t flags);
+#endif
 
+/**
+ * dfs_mlme_mark_dfs_for_freq() - Mark the channel in the channel list.
+ * @pdev: Pointer to DFS pdev object.
+ * @ieee: Channel number.
+ * @freq: Channel frequency.
+ * @vhtop_ch_freq_seg2_mhz: VHT80 Cfreq2 in Mhz.
+ * @flags: channel flags.
+ */
+#ifdef CONFIG_CHAN_FREQ_API
+void dfs_mlme_mark_dfs_for_freq(struct wlan_objmgr_pdev *pdev,
+				uint8_t ieee,
+				uint16_t freq,
+				uint16_t vhtop_ch_freq_mhz_seg2,
+				uint64_t flags);
+#endif
 /**
  * dfs_mlme_start_csa() - Sends CSA in ieeeChan
  * @pdev: Pointer to DFS pdev object.
@@ -58,12 +75,29 @@ void dfs_mlme_mark_dfs(struct wlan_objmgr_pdev *pdev,
  * @cfreq2: HT80 cfreq2.
  * @flags: channel flags.
  */
+#ifdef CONFIG_CHAN_NUM_API
 void dfs_mlme_start_csa(struct wlan_objmgr_pdev *pdev,
 		uint8_t ieee_chan,
 		uint16_t freq,
 		uint8_t cfreq2,
 		uint64_t flags);
+#endif
 
+/**
+ * dfs_mlme_start_csa_for_freq() - Sends CSA in ieeeChan
+ * @pdev: Pointer to DFS pdev object.
+ * @ieee_chan: Channel number.
+ * @freq: Channel frequency.
+ * @cfreq2: HT80 cfreq2 in Mhz.
+ * @flags: channel flags.
+ */
+#ifdef CONFIG_CHAN_FREQ_API
+void dfs_mlme_start_csa_for_freq(struct wlan_objmgr_pdev *pdev,
+				 uint8_t ieee_chan,
+				 uint16_t freq,
+				 uint16_t cfreq2_mhz,
+				 uint64_t flags);
+#endif
 /**
  * dfs_mlme_proc_cac() - Process the CAC completion event.
  * @pdev: Pointer to DFS pdev object.
@@ -96,6 +130,7 @@ void dfs_mlme_get_dfs_ch_nchans(struct wlan_objmgr_pdev *pdev, int *nchans);
  * @dfs_ch_vhtop_ch_freq_seg2:  Channel Center frequency applicable for 80+80MHz
  *                          mode of operation.
  */
+#ifdef CONFIG_CHAN_NUM_API
 QDF_STATUS dfs_mlme_get_extchan(struct wlan_objmgr_pdev *pdev,
 		uint16_t *dfs_ch_freq,
 		uint64_t *dfs_ch_flags,
@@ -103,6 +138,34 @@ QDF_STATUS dfs_mlme_get_extchan(struct wlan_objmgr_pdev *pdev,
 		uint8_t *dfs_ch_ieee,
 		uint8_t *dfs_ch_vhtop_ch_freq_seg1,
 		uint8_t *dfs_ch_vhtop_ch_freq_seg2);
+#endif
+
+/**
+ * dfs_mlme_get_extchan() - Get extension channel.
+ * @pdev: Pointer to DFS pdev object.
+ * @dfs_chan_freq:                Frequency in Mhz.
+ * @dfs_chan_flags:               Channel flags.
+ * @dfs_chan_flagext:             Extended channel flags.
+ * @dfs_chan_ieee:                IEEE channel number.
+ * @dfs_chan_vhtop_ch_freq_seg1:  Channel Center IEEE.
+ * @dfs_chan_vhtop_ch_freq_seg2:  Channel Center IEEE applicable for 80+80MHz
+ *                                mode of operation.
+ * @dfs_chan_mhz_freq_seg1:       Primary channel center freq.
+ * @dfs_chan_mhz_freq_seg2:       Secondary channel center freq applicable for
+ *                                80+80 MHZ.
+ */
+
+#ifdef CONFIG_CHAN_FREQ_API
+QDF_STATUS dfs_mlme_get_extchan_for_freq(struct wlan_objmgr_pdev *pdev,
+					 uint16_t *dfs_chan_freq,
+					 uint64_t *dfs_chan_flags,
+					 uint16_t *dfs_chan_flagext,
+					 uint8_t *dfs_chan_ieee,
+					 uint8_t *dfs_chan_vhtop_ch_freq_seg1,
+					 uint8_t *dfs_chan_vhtop_ch_freq_seg2,
+					 uint16_t *dfs_chan_mhz_freq_seg1,
+					 uint16_t *dfs_chan_mhz_freq_seg2);
+#endif
 
 /**
  * dfs_mlme_set_no_chans_available() - Set no_chans_available flag.
@@ -140,6 +203,7 @@ int dfs_mlme_ieee2mhz(struct wlan_objmgr_pdev *pdev,
  * * QDF_STATUS_SUCCESS  : Channel found.
  * * QDF_STATUS_E_FAILURE: Channel not found.
  */
+#ifdef CONFIG_CHAN_NUM_API
 QDF_STATUS
 dfs_mlme_find_dot11_channel(struct wlan_objmgr_pdev *pdev,
 			    uint8_t ieee,
@@ -151,6 +215,46 @@ dfs_mlme_find_dot11_channel(struct wlan_objmgr_pdev *pdev,
 			    uint8_t *dfs_ch_ieee,
 			    uint8_t *dfs_ch_vhtop_ch_freq_seg1,
 			    uint8_t *dfs_ch_vhtop_ch_freq_seg2);
+#endif
+
+/**
+ * dfs_mlme_find_dot11_chan_for_freq() - Find a channel pointer given the mode,
+ * frequency and channel flags.
+ * @pdev: Pointer to DFS pdev object.
+ * @ch_freq: Channel frequency.
+ * @des_cfreq2_mhz: cfreq2 in MHZ.
+ * @mode: Phymode
+ * @dfs_chan_freq:                Frequency in Mhz.
+ * @dfs_chan_flags:               Channel flags.
+ * @dfs_chan_flagext:             Extended channel flags.
+ * @dfs_chan_ieee:                IEEE channel number.
+ * @dfs_chan_vhtop_ch_freq_seg1:  Channel Center IEEE for primary 80 segment.
+ * @dfs_chan_vhtop_ch_freq_seg2:  Channel Center frequency applicable for
+ *                                80+80MHz mode of operation.
+ * @dfs_chan_mhz_freq_seg1:       Channel center frequency of primary 80 segment.
+ * @dfs_chan_mhz_freq_seg2:       Channel center frequency for secondary 80
+ *                                segment applicable only for 80+80MHZ mode of
+ *                                operation.
+ *
+ * Return:
+ * * QDF_STATUS_SUCCESS  : Channel found.
+ * * QDF_STATUS_E_FAILURE: Channel not found.
+ */
+#ifdef CONFIG_CHAN_FREQ_API
+QDF_STATUS
+dfs_mlme_find_dot11_chan_for_freq(struct wlan_objmgr_pdev *pdev,
+				  uint16_t chan_freq,
+				  uint16_t des_cfreq2_mhz,
+				  int mode,
+				  uint16_t *dfs_chan_freq,
+				  uint64_t *dfs_chan_flags,
+				  uint16_t *dfs_chan_flagext,
+				  uint8_t *dfs_chan_ieee,
+				  uint8_t *dfs_chan_vhtop_ch_freq_seg1,
+				  uint8_t *dfs_chan_vhtop_ch_freq_seg2,
+				  uint16_t *dfs_chan_mhz_freq_seg1,
+				  uint16_t *dfs_chan_mhz_freq_seg2);
+#endif
 
 /**
  * dfs_mlme_get_dfs_ch_channels() - Get channel from channel list.
@@ -164,6 +268,7 @@ dfs_mlme_find_dot11_channel(struct wlan_objmgr_pdev *pdev,
  *                          mode of operation.
  * @index: Index into channel list.
  */
+#ifdef CONFIG_CHAN_NUM_API
 void dfs_mlme_get_dfs_ch_channels(struct wlan_objmgr_pdev *pdev,
 				  uint16_t *dfs_ch_freq,
 				  uint64_t *dfs_ch_flags,
@@ -172,6 +277,36 @@ void dfs_mlme_get_dfs_ch_channels(struct wlan_objmgr_pdev *pdev,
 				  uint8_t *dfs_ch_vhtop_ch_freq_seg1,
 				  uint8_t *dfs_ch_vhtop_ch_freq_seg2,
 				  int index);
+#endif
+
+/**
+ * dfs_mlme_get_dfs_channels_for_freq() - Get DFS channel from channel list.
+ * @pdev: Pointer to DFS pdev object.
+ * @dfs_chan_freq:                Frequency in Mhz.
+ * @dfs_chan_flags:               Channel flags.
+ * @dfs_chan_flagext:             Extended channel flags.
+ * @dfs_chan_ieee:                IEEE channel number.
+ * @dfs_chan_vhtop_ch_freq_seg1:  Channel Center IEEE number.
+ * @dfs_chan_vhtop_ch_freq_seg2:  Channel Center IEEE applicable for 80+80MHz
+ *                                mode of operation.
+ * @dfs_chan_mhz_freq_seg1 :      Primary 80 Channel Center frequency.
+ * @dfs_chan_mhz_freq_seg2 :      Channel center frequency applicable only for
+ *                                80+80 mode of operation.
+ * @index: Index into channel list.
+ */
+#ifdef CONFIG_CHAN_FREQ_API
+void
+dfs_mlme_get_dfs_channels_for_freq(struct wlan_objmgr_pdev *pdev,
+				   uint16_t *dfs_chan_freq,
+				   uint64_t *dfs_chan_flags,
+				   uint16_t *dfs_chan_flagext,
+				   uint8_t *dfs_chan_ieee,
+				   uint8_t *dfs_chan_vhtop_ch_freq_seg1,
+				   uint8_t *dfs_chan_vhtop_ch_freq_seg2,
+				   uint16_t *dfs_chan_mhz_freq_seg1,
+				   uint16_t *dfs_chan_mhz_freq_seg2,
+				   int index);
+#endif
 
 /**
  * dfs_mlme_dfs_ch_flags_ext() - Get extension channel flags.
@@ -209,11 +344,27 @@ void dfs_mlme_clist_update(struct wlan_objmgr_pdev *pdev,
  *                          mode of operation.
  * @dfs_ch_flags:               Channel flags.
  */
+#ifdef CONFIG_CHAN_NUM_API
 int dfs_mlme_get_cac_timeout(struct wlan_objmgr_pdev *pdev,
 		uint16_t dfs_ch_freq,
 		uint8_t dfs_ch_vhtop_ch_freq_seg2,
 		uint64_t dfs_ch_flags);
+#endif
 
+/**
+ * dfs_mlme_get_cac_timeout_for_freq() - Get cac_timeout.
+ * @pdev: Pointer to DFS pdev object.
+ * @dfs_chan_freq:                Frequency in Mhz.
+ * @dfs_chan_vhtop_freq_seg2:  Channel Center frequency applicable for 80+80MHz
+ *                              mode of operation.
+ * @dfs_chan_flags:               Channel flags.
+ */
+#ifdef CONFIG_CHAN_FREQ_API
+int dfs_mlme_get_cac_timeout_for_freq(struct wlan_objmgr_pdev *pdev,
+				      uint16_t dfs_chan_freq,
+				      uint16_t dfs_chan_vhtop_freq_seg2_mhz,
+				      uint64_t dfs_chan_flags);
+#endif
 /**
  * dfs_mlme_rebuild_chan_list_with_non_dfs_channels() - Rebuild the channel list
  * with only non DFS channels.
@@ -257,12 +408,12 @@ void dfs_mlme_restart_vaps_with_non_dfs_chan(struct wlan_objmgr_pdev *pdev,
  */
 #if defined(WLAN_SUPPORT_PRIMARY_ALLOWED_CHAN)
 bool dfs_mlme_check_allowed_prim_chanlist(struct wlan_objmgr_pdev *pdev,
-					  uint32_t chan_num);
+					  uint32_t chan_freq);
 
 #else
 static inline
 bool dfs_mlme_check_allowed_prim_chanlist(struct wlan_objmgr_pdev *pdev,
-					  uint32_t chan_num)
+					  uint32_t chan_freq)
 {
 	return true;
 }

+ 2 - 0
umac/dfs/dispatcher/inc/wlan_dfs_public_struct.h

@@ -128,12 +128,14 @@ struct dfs_radar_found_params {
 /**
  * struct dfs_agile_cac_params - Agile DFS-CAC parameters.
  * @precac_chan:        Agile preCAC channel.
+ * @precac_chan_freq:   Agile preCAC channel frequency in MHZ.
  * @precac_chwidth:     Agile preCAC channel width.
  * @min_precac_timeout: Minimum agile preCAC timeout.
  * @max_precac_timeout: Maximum agile preCAC timeout.
  */
 struct dfs_agile_cac_params {
 	uint8_t precac_chan;
+	uint16_t precac_chan_freq;
 	enum phy_ch_width precac_chwidth;
 	uint32_t min_precac_timeout;
 	uint32_t max_precac_timeout;

+ 57 - 1
umac/dfs/dispatcher/inc/wlan_dfs_tgt_api.h

@@ -97,7 +97,7 @@ struct dfs_emulate_bang_radar_test_cmd {
  * @vdev_id: Physical device identifier
  * @chan_freq: Channel number
  * @chan_width: Channel Width
- * @center_freq: Center Frequency channel number
+ * @center_freq: Center channel number
  * @ocac_status: off channel cac status
  */
 struct vdev_adfs_complete_status {
@@ -122,6 +122,7 @@ extern struct dfs_to_mlme global_dfs_to_mlme;
  * @dfs_ch_vhtop_ch_freq_seg2: Channel Center frequency2.
  */
 #ifdef DFS_COMPONENT_ENABLE
+#ifdef CONFIG_CHAN_NUM_API
 QDF_STATUS tgt_dfs_set_current_channel(struct wlan_objmgr_pdev *pdev,
 		uint16_t dfs_ch_freq,
 		uint64_t dfs_ch_flags,
@@ -129,6 +130,34 @@ QDF_STATUS tgt_dfs_set_current_channel(struct wlan_objmgr_pdev *pdev,
 		uint8_t dfs_ch_ieee,
 		uint8_t dfs_ch_vhtop_ch_freq_seg1,
 		uint8_t dfs_ch_vhtop_ch_freq_seg2);
+#endif
+
+/**
+ * tgt_dfs_set_current_channel_for_freq() - Fill dfs channel structure from
+ *                                          dfs_channel structure.
+ * @pdev: Pointer to DFS pdev object.
+ * @dfs_ch_freq: Frequency in Mhz.
+ * @dfs_ch_flags: Channel flags.
+ * @dfs_ch_flagext: Extended channel flags.
+ * @dfs_ch_ieee: IEEE channel number.
+ * @dfs_ch_vhtop_ch_freq_seg1: Channel Center frequency1.
+ * @dfs_ch_vhtop_ch_freq_seg2: Channel Center frequency2.
+ * @dfs_ch_mhz_freq_seg1:  Channel center frequency of primary segment in MHZ.
+ * @dfs_ch_mhz_freq_seg2:  Channel center frequency of secondary segment in MHZ
+ *                         applicable only for 80+80MHZ mode of operation.
+ */
+#ifdef CONFIG_CHAN_FREQ_API
+QDF_STATUS
+tgt_dfs_set_current_channel_for_freq(struct wlan_objmgr_pdev *pdev,
+				     uint16_t dfs_ch_freq,
+				     uint64_t dfs_ch_flags,
+				     uint16_t dfs_ch_flagext,
+				     uint8_t dfs_ch_ieee,
+				     uint8_t dfs_ch_vhtop_ch_freq_seg1,
+				     uint8_t dfs_ch_vhtop_ch_freq_seg2,
+				     uint16_t dfs_ch_mhz_freq_seg1,
+				     uint16_t dfs_ch_mhz_freq_seg2);
+#endif
 
 /**
  * tgt_dfs_radar_enable() - Enables the radar.
@@ -347,6 +376,7 @@ QDF_STATUS tgt_dfs_ocac_complete(struct wlan_objmgr_pdev *pdev,
  * wrapper function for  dfs_find_vht80_chan_for_precacdfs_cancel_cac_timer().
  * This function called from outside of dfs component.
  */
+#ifdef CONFIG_CHAN_NUM_API
 QDF_STATUS tgt_dfs_find_vht80_chan_for_precac(struct wlan_objmgr_pdev *pdev,
 		uint32_t chan_mode,
 		uint8_t ch_freq_seg1,
@@ -355,6 +385,32 @@ QDF_STATUS tgt_dfs_find_vht80_chan_for_precac(struct wlan_objmgr_pdev *pdev,
 		uint32_t *phy_mode,
 		bool *dfs_set_cfreq2,
 		bool *set_agile);
+#endif
+
+/**
+ * tgt_dfs_find_vht80_precac_chan_freq() - Find VHT80 channel for precac
+ * @pdev: Pointer to DFS pdev object.
+ * @chan_mode: Channel mode.
+ * @ch_freq_seg1_mhz: Segment1 channel freq in MHZ.
+ * @cfreq1: cfreq1.
+ * @cfreq2: cfreq2.
+ * @phy_mode: Precac phymode.
+ * @dfs_set_cfreq2: Precac cfreq2
+ * @set_agile: Agile mode flag.
+ *
+ * wrapper function for  dfs_find_vht80_chan_for_precac_for_freq().
+ */
+#ifdef CONFIG_CHAN_FREQ_API
+QDF_STATUS
+tgt_dfs_find_vht80_precac_chan_freq(struct wlan_objmgr_pdev *pdev,
+				    uint32_t chan_mode,
+				    uint16_t ch_freq_mhz_seg1,
+				    uint32_t *cfreq1,
+				    uint32_t *cfreq2,
+				    uint32_t *phy_mode,
+				    bool *dfs_set_cfreq2,
+				    bool *set_agile);
+#endif
 
 /**
  * tgt_dfs_cac_complete() - Process cac complete indication.

+ 114 - 5
umac/dfs/dispatcher/inc/wlan_dfs_ucfg_api.h

@@ -64,6 +64,15 @@
  * @mlme_update_scan_channel_list:     Update the scan channel list sent to FW.
  * @mlme_bringdown_vaps:               Bringdown vaps if no chans is present.
  * @mlme_dfs_deliver_event:            Deliver DFS events to user space
+ * @mlme_precac_chan_change_csa_for_freq:Channel change triggered by PrCAC using
+ *                                     Channel Switch Announcement.
+ * @mlme_mark_dfs_for_freq:            Mark DFS channel frequency as radar.
+ * @mlme_get_extchan_for_freq:         Get the extension channel.
+ * @mlme_find_dot11_chan_for_freq:     Find a channel pointer.
+ * @mlme_get_dfs_channels_for_freq:    Get DFS channels from current channel
+ *                                     list.
+ * @mlme_get_cac_timeout_for_freq:     Get CAC timeout for a given channel
+ *                                     frequency.
  */
 struct dfs_to_mlme {
 	QDF_STATUS (*pdev_component_obj_attach)(struct wlan_objmgr_pdev *pdev,
@@ -75,19 +84,37 @@ struct dfs_to_mlme {
 			void *comp_priv_obj);
 	QDF_STATUS (*dfs_start_rcsa)(struct wlan_objmgr_pdev *pdev,
 			bool *wait_for_csa);
+#ifdef CONFIG_CHAN_NUM_API
 	QDF_STATUS (*mlme_mark_dfs)(struct wlan_objmgr_pdev *pdev,
 			uint8_t ieee,
 			uint16_t freq,
 			uint8_t vhtop_ch_freq_seg2,
 			uint64_t flags);
+#endif
+#ifdef CONFIG_CHAN_FREQ_API
+	QDF_STATUS (*mlme_mark_dfs_for_freq)(struct wlan_objmgr_pdev *pdev,
+					     uint8_t ieee,
+					     uint16_t freq,
+					     uint16_t ic_mhz_freq_seg2,
+					     uint64_t flags);
+#endif
+#ifdef CONFIG_CHAN_NUM_API
 	QDF_STATUS (*mlme_start_csa)(struct wlan_objmgr_pdev *pdev,
 			uint8_t ieee_chan, uint16_t freq,
 			uint8_t cfreq2, uint64_t flags);
+#endif
+#ifdef CONFIG_CHAN_FREQ_API
+	QDF_STATUS (*mlme_start_csa_for_freq)(struct wlan_objmgr_pdev *pdev,
+					      uint8_t ieee_chan, uint16_t freq,
+					      uint16_t cfreq2, uint64_t flags);
+#endif
+
 	QDF_STATUS (*mlme_proc_cac)(struct wlan_objmgr_pdev *pdev);
 	QDF_STATUS (*mlme_deliver_event_up_after_cac)(
 			struct wlan_objmgr_pdev *pdev);
 	QDF_STATUS (*mlme_get_dfs_ch_nchans)(struct wlan_objmgr_pdev *pdev,
 			int *nchans);
+#ifdef CONFIG_CHAN_NUM_API
 	QDF_STATUS (*mlme_get_extchan)(struct wlan_objmgr_pdev *pdev,
 			uint16_t *dfs_ch_freq,
 			uint64_t *dfs_ch_flags,
@@ -95,12 +122,25 @@ struct dfs_to_mlme {
 			uint8_t *dfs_ch_ieee,
 			uint8_t *dfs_ch_vhtop_ch_freq_seg1,
 			uint8_t *dfs_ch_vhtop_ch_freq_seg2);
+#endif
+#ifdef CONFIG_CHAN_FREQ_API
+	QDF_STATUS (*mlme_get_extchan_for_freq)(struct wlan_objmgr_pdev *pdev,
+						uint16_t *dfs_ch_freq,
+						uint64_t *dfs_ch_flags,
+						uint16_t *dfs_ch_flagext,
+						uint8_t *dfs_ch_ieee,
+						uint8_t *dfs_vhtop_ch_freq_seg1,
+						uint8_t *dfs_vhtop_ch_freq_seg2,
+						uint16_t *dfs_ch_mhz_freq_seg1,
+						uint16_t *dfs_ch_mhz_freq_seg2);
+#endif
 	QDF_STATUS (*mlme_set_no_chans_available)(struct wlan_objmgr_pdev *pdev,
 			int val);
 	QDF_STATUS (*mlme_ieee2mhz)(struct wlan_objmgr_pdev *pdev,
 			int ieee,
 			uint64_t flag,
 			int *freq);
+#ifdef CONFIG_CHAN_NUM_API
 	QDF_STATUS (*mlme_find_dot11_channel)(struct wlan_objmgr_pdev *pdev,
 			uint8_t ieee,
 			uint8_t des_cfreq2,
@@ -111,7 +151,22 @@ struct dfs_to_mlme {
 			uint8_t *dfs_ch_ieee,
 			uint8_t *dfs_ch_vhtop_ch_freq_seg1,
 			uint8_t *dfs_ch_vhtop_ch_freq_seg2);
-
+#endif
+#ifdef CONFIG_CHAN_FREQ_API
+	QDF_STATUS (*mlme_find_dot11_chan_for_freq)(struct wlan_objmgr_pdev *,
+						    uint16_t freq,
+						    uint16_t des_cfreq2_mhz,
+						    int mode,
+						    uint16_t *dfs_ch_freq,
+						    uint64_t *dfs_ch_flags,
+						    uint16_t *dfs_ch_flagext,
+						    uint8_t *dfs_ch_ieee,
+						    uint8_t *dfs_ch_freq_seg1,
+						    uint8_t *dfs_ch_freq_seg2,
+						    uint16_t *dfs_cfreq1_mhz,
+						    uint16_t *dfs_cfreq2_mhz);
+#endif
+#ifdef CONFIG_CHAN_NUM_API
 	QDF_STATUS (*mlme_get_dfs_ch_channels)(struct wlan_objmgr_pdev *pdev,
 			uint16_t *dfs_ch_freq,
 			uint64_t *dfs_ch_flags,
@@ -120,14 +175,37 @@ struct dfs_to_mlme {
 			uint8_t *dfs_ch_vhtop_ch_freq_seg1,
 			uint8_t *dfs_ch_vhtop_ch_freq_seg2,
 			int index);
+#endif
+#ifdef CONFIG_CHAN_FREQ_API
+	QDF_STATUS (*mlme_get_dfs_channels_for_freq)(
+			struct wlan_objmgr_pdev *pdev,
+			uint16_t *dfs_chan_freq,
+			uint64_t *dfs_chan_flags,
+			uint16_t *dfs_chan_flagext,
+			uint8_t *dfs_chan_ieee,
+			uint8_t *dfs_chan_vhtop_ch_freq_seg1,
+			uint8_t *dfs_chan_vhtop_ch_freq_seg2,
+			uint16_t *dfs_chan_mhz_freq_seg1,
+			uint16_t *dfs_chan_mhz_freq_seg2,
+			int index);
+#endif
 	QDF_STATUS (*mlme_dfs_ch_flags_ext)(struct wlan_objmgr_pdev *pdev,
 			uint16_t *flag_ext);
 	QDF_STATUS (*mlme_channel_change_by_precac)(
 			struct wlan_objmgr_pdev *pdev);
 #ifdef WLAN_DFS_PRECAC_AUTO_CHAN_SUPPORT
-	QDF_STATUS (*mlme_precac_chan_change_csa)(struct wlan_objmgr_pdev *pdev,
-						  uint8_t des_chan,
-						  enum wlan_phymode des_mode);
+#ifdef CONFIG_CHAN_FREQ_API
+	QDF_STATUS
+	    (*mlme_precac_chan_change_csa_for_freq)(struct wlan_objmgr_pdev *,
+						    uint16_t des_chan_freq,
+						    enum wlan_phymode des_mode);
+#endif
+#ifdef CONFIG_CHAN_NUM_API
+	QDF_STATUS
+		(*mlme_precac_chan_change_csa)(struct wlan_objmgr_pdev *,
+					       uint8_t des_chan,
+					       enum wlan_phymode des_mode);
+#endif
 #endif
 	QDF_STATUS (*mlme_nol_timeout_notification)(
 			struct wlan_objmgr_pdev *pdev);
@@ -135,17 +213,27 @@ struct dfs_to_mlme {
 			void *nollist,
 			int nentries);
 	bool (*mlme_is_opmode_sta)(struct wlan_objmgr_pdev *pdev);
+#ifdef CONFIG_CHAN_NUM_API
 	QDF_STATUS (*mlme_get_cac_timeout)(struct wlan_objmgr_pdev *pdev,
 			uint16_t dfs_ch_freq,
 			uint8_t c_vhtop_ch_freq_seg2,
 			uint64_t dfs_ch_flags,
 			int *cac_timeout);
+#endif
+#ifdef CONFIG_CHAN_FREQ_API
+	QDF_STATUS
+	    (*mlme_get_cac_timeout_for_freq)(struct wlan_objmgr_pdev *pdev,
+					     uint16_t dfs_ch_freq,
+					     uint16_t c_vhtop_ch_freq_seg2,
+					     uint64_t dfs_ch_flags,
+					     int *cac_timeout);
+#endif
 	QDF_STATUS (*mlme_rebuild_chan_list_with_non_dfs_channels)
 			(struct wlan_objmgr_pdev *pdev);
 	QDF_STATUS (*mlme_restart_vaps_with_non_dfs_chan)
 			(struct wlan_objmgr_pdev *pdev, int no_chans_avail);
 	bool (*mlme_check_allowed_prim_chanlist)
-			(struct wlan_objmgr_pdev *pdev, uint32_t chan_num);
+			(struct wlan_objmgr_pdev *pdev, uint32_t chan);
 	QDF_STATUS (*mlme_update_scan_channel_list)
 			(struct wlan_objmgr_pdev *pdev);
 	QDF_STATUS (*mlme_bringdown_vaps)
@@ -316,11 +404,32 @@ QDF_STATUS ucfg_dfs_get_precac_intermediate_chan(struct wlan_objmgr_pdev *pdev,
  *
  * Return: Precac state of the given channel.
  */
+#ifdef CONFIG_CHAN_NUM_API
 enum precac_chan_state
 ucfg_dfs_get_precac_chan_state(struct wlan_objmgr_pdev *pdev,
 			       uint8_t precac_chan);
 #endif
 
+/**
+ * ucfg_dfs_get_precac_chan_state_for_freq() - Get precac status for the
+ * given channel.
+ * @pdev: Pointer to DFS pdev object.
+ * @precac_chan: Channel frequency for which precac state needs to be
+ *               determined.
+ *
+ * Wrapper function for dfs_get_precac_chan_state().
+ * This function called from outside of dfs component.
+ *
+ * Return: Precac state of the given channel.
+ */
+#ifdef CONFIG_CHAN_FREQ_API
+enum precac_chan_state
+ucfg_dfs_get_precac_chan_state_for_freq(struct wlan_objmgr_pdev *pdev,
+					uint16_t precac_freq);
+#endif
+
+#endif
+
 #ifdef QCA_MCL_DFS_SUPPORT
 /**
  * ucfg_dfs_update_config() - Update DFS user config.

+ 212 - 1
umac/dfs/dispatcher/inc/wlan_dfs_utils_api.h

@@ -93,10 +93,26 @@ extern struct dfs_to_mlme global_dfs_to_mlme;
  * Wrapper function for dfs_cac_valid_reset(). This function called from
  * outside of DFS component.
  */
-
+#ifdef CONFIG_CHAN_NUM_API
 QDF_STATUS utils_dfs_cac_valid_reset(struct wlan_objmgr_pdev *pdev,
 		uint8_t prevchan_ieee,
 		uint32_t prevchan_flags);
+#endif
+
+/**
+ * utils_dfs_cac_valid_reset_for_freq() - Cancels the dfs_cac_valid_timer timer.
+ * @pdev: Pointer to DFS pdev object.
+ * @prevchan_freq: Prevchan frequency.
+ * @prevchan_flags: Prevchan flags.
+ *
+ * Wrapper function for dfs_cac_valid_reset_for_freq(). This function called
+ * from outside of DFS component.
+ */
+#ifdef CONFIG_CHAN_FREQ_API
+QDF_STATUS utils_dfs_cac_valid_reset_for_freq(struct wlan_objmgr_pdev *pdev,
+					      uint16_t prevchan_freq,
+					      uint32_t prevchan_flags);
+#endif
 
 /**
  * utils_dfs_reset() - Reset DFS members.
@@ -131,7 +147,21 @@ QDF_STATUS utils_dfs_reset_precaclists(struct wlan_objmgr_pdev *pdev);
  *
  * Return void.
  */
+#ifdef CONFIG_CHAN_NUM_API
 void utils_dfs_unmark_precac_nol(struct wlan_objmgr_pdev *pdev, uint8_t chan);
+#endif
+
+/**
+ * utils_dfs_unmark_precac_nol_for_freq() - Clears precac channel marked as NOL.
+ * @pdev: Pointer to DFS pdev object.
+ * @chan_freq: channel freq to be unmarked as NOL.
+ *
+ * Return void.
+ */
+#ifdef CONFIG_CHAN_FREQ_API
+void utils_dfs_unmark_precac_nol_for_freq(struct wlan_objmgr_pdev *pdev,
+					  uint16_t chan_freq);
+#endif
 
 /**
  * utils_dfs_cancel_precac_timer() - Cancel the precac timer.
@@ -167,12 +197,32 @@ QDF_STATUS utils_dfs_start_precac_timer(struct wlan_objmgr_pdev *pdev);
  *
  * Return: True if intermediate channel needs to configure. False otherwise.
  */
+#ifdef CONFIG_CHAN_NUM_API
 bool
 utils_dfs_precac_decide_pref_chan(struct wlan_objmgr_pdev *pdev,
 				  uint8_t *ch_ieee,
 				  enum wlan_phymode mode);
 #endif
 
+/**
+ * utils_dfs_precac_decide_pref_chan() - Choose preferred channel
+ * @pdev: Pointer to DFS pdev object.
+ * @ch_freq: Pointer to channel frequency.
+ * @mode: Configured PHY mode.
+ *
+ * Wrapper function for dfs_decide_precac_preferred_chan(). This
+ * function called from outside of dfs component.
+ *
+ * Return: True if intermediate channel needs to configure. False otherwise.
+ */
+#ifdef CONFIG_CHAN_FREQ_API
+bool
+utils_dfs_precac_decide_pref_chan_for_freq(struct wlan_objmgr_pdev *pdev,
+					   uint16_t *ch_freq,
+					   enum wlan_phymode mode);
+#endif
+#endif
+
 /**
  * utils_dfs_cancel_cac_timer() - Cancels the CAC timer.
  * @pdev: Pointer to DFS pdev object.
@@ -414,10 +464,35 @@ QDF_STATUS utils_dfs_get_nol_chfreq_and_chwidth(struct wlan_objmgr_pdev *pdev,
  *
  * Return: QDF_STATUS
  */
+#ifdef CONFIG_CHAN_NUM_API
 QDF_STATUS utils_dfs_get_random_channel(struct wlan_objmgr_pdev *pdev,
 		uint16_t flags, struct ch_params *ch_params,
 		uint32_t *hw_mode, uint8_t *target_chan,
 		struct dfs_acs_info *acs_info);
+#endif
+
+/**
+ * utils_dfs_get_random_channel() - Get random channel.
+ * @pdev: Pointer to DFS pdev object.
+ * @flags: random channel selection flags.
+ * @ch_params: current channel params.
+ * @hw_mode: current operating mode.
+ * @target_chan: Pointer to target_chan freq.
+ * @acs_info: acs range info.
+ *
+ * wrapper function for get_random_chan(). this
+ * function called from outside of dfs component.
+ *
+ * Return: QDF_STATUS
+ */
+#ifdef CONFIG_CHAN_FREQ_API
+QDF_STATUS
+utils_dfs_get_random_channel_for_freq(struct wlan_objmgr_pdev *pdev,
+				      uint16_t flags,
+				      struct ch_params *ch_params,
+				      uint32_t *hw_mode, uint16_t *target_chan,
+				      struct dfs_acs_info *acs_info);
+#endif
 
 /**
  * utils_dfs_get_vdev_random_channel() - Get random channel for vdev
@@ -434,10 +509,35 @@ QDF_STATUS utils_dfs_get_random_channel(struct wlan_objmgr_pdev *pdev,
  *
  * Return: QDF_STATUS
  */
+#ifdef CONFIG_CHAN_NUM_API
 QDF_STATUS utils_dfs_get_vdev_random_channel(
 	struct wlan_objmgr_pdev *pdev, struct wlan_objmgr_vdev *vdev,
 	uint16_t flags, struct ch_params *ch_params, uint32_t *hw_mode,
 	uint8_t *target_chan, struct dfs_acs_info *acs_info);
+#endif
+
+/**
+ * utils_dfs_get_vdev_random_channel() - Get random channel for vdev
+ * @pdev: Pointer to DFS pdev object.
+ * @vdev: vdev of the request
+ * @flags: random channel selection flags.
+ * @ch_params: current channel params.
+ * @hw_mode: current operating mode.
+ * @target_chan: Pointer to target_chan_freq.
+ * @acs_info: acs range info.
+ *
+ * Get random channel based on vdev interface type. If the vdev is null,
+ * the function will get random channel by SAP interface type.
+ *
+ * Return: QDF_STATUS
+ */
+
+#ifdef CONFIG_CHAN_FREQ_API
+QDF_STATUS utils_dfs_get_vdev_random_channel_for_freq(
+	struct wlan_objmgr_pdev *pdev, struct wlan_objmgr_vdev *vdev,
+	uint16_t flags, struct ch_params *ch_params, uint32_t *hw_mode,
+	uint16_t *target_chan_freq, struct dfs_acs_info *acs_info);
+#endif
 
 /**
  * utils_dfs_bw_reduced_channel() - Get BW reduced channel.
@@ -451,10 +551,32 @@ QDF_STATUS utils_dfs_get_vdev_random_channel(
  *
  * Return: QDF_STATUS
  */
+#ifdef CONFIG_CHAN_NUM_API
 QDF_STATUS utils_dfs_bw_reduced_channel(struct wlan_objmgr_pdev *pdev,
 					struct ch_params *ch_params,
 					uint32_t *hw_mode,
 					uint8_t *target_chan);
+#endif
+
+/**
+ * utils_dfs_bw_reduced_channel_for_freq() - Get BW reduced channel.
+ * @pdev: Pointer to DFS pdev object.
+ * @ch_params: current channel params.
+ * @hw_mode: current operating mode.
+ * @target_chan: Pointer to target_chan freq.
+ *
+ * wrapper function for get bw_reduced_channel. this
+ * function called from outside of dfs component.
+ *
+ * Return: QDF_STATUS
+ */
+#ifdef CONFIG_CHAN_FREQ_API
+QDF_STATUS utils_dfs_bw_reduced_channel_for_freq(struct wlan_objmgr_pdev *pdev,
+						 struct ch_params *ch_params,
+						 uint32_t *hw_mode,
+						 uint16_t *target_chan_freq);
+#endif
+
 /**
  * utils_dfs_init_nol() - Initialize nol from platform driver.
  * @pdev: pdev handler.
@@ -506,6 +628,23 @@ static inline void utils_dfs_print_nol_channels(struct wlan_objmgr_pdev *pdev)
  */
 void utils_dfs_clear_nol_channels(struct wlan_objmgr_pdev *pdev);
 
+/**
+ * utils_is_dfs_chan_for_freq() - is channel dfs.
+ * @pdev: pdev handler.
+ * @chan_freq: Channel frequency in MHZ.
+ *
+ * is channel dfs.
+ *
+ * Return: True if channel dfs, else false.
+ */
+#ifdef CONFIG_CHAN_FREQ_API
+static inline bool utils_is_dfs_chan_for_freq(struct wlan_objmgr_pdev *pdev,
+					      uint32_t chan_freq)
+{
+	return wlan_reg_is_dfs_for_freq(pdev, chan_freq);
+}
+#endif
+
 /**
  * utils_is_dfs_ch() - is channel dfs.
  * @pdev: pdev handler.
@@ -514,10 +653,12 @@ void utils_dfs_clear_nol_channels(struct wlan_objmgr_pdev *pdev);
  *
  * Return: True if channel dfs, else false.
  */
+#ifdef CONFIG_CHAN_NUM_API
 static inline bool utils_is_dfs_ch(struct wlan_objmgr_pdev *pdev, uint32_t chan)
 {
 	return wlan_reg_is_dfs_ch(pdev, chan);
 }
+#endif
 
 /**
  * utils_is_dfs_cfreq2_ch() - is channel dfs cfreq2.
@@ -547,11 +688,29 @@ bool utils_is_dfs_cfreq2_ch(struct wlan_objmgr_pdev *pdev)
  *
  * Return: void
  */
+#ifdef CONFIG_CHAN_NUM_API
 void utils_dfs_reg_update_nol_ch(struct wlan_objmgr_pdev *pdev,
 		uint8_t *ch_list,
 		uint8_t num_ch,
 		bool nol_ch);
+#endif
 
+/**
+ * utils_dfs_reg_update_nol_chan_for_freq() - set nol channel
+ *
+ * @pdev: pdev ptr
+ * @ch_list: freq channel list to be returned
+ * @num_ch: number of channels
+ * @nol_ch: nol flag
+ *
+ * Return: void
+ */
+#ifdef CONFIG_CHAN_FREQ_API
+void utils_dfs_reg_update_nol_chan_for_freq(struct wlan_objmgr_pdev *pdev,
+					    uint16_t *ch_list,
+					    uint8_t num_ch,
+					    bool nol_ch);
+#endif
 /**
  * utils_dfs_freq_to_chan () - convert channel freq to channel number
  * @freq: frequency
@@ -600,11 +759,33 @@ QDF_STATUS utils_dfs_update_cur_chan_flags(struct wlan_objmgr_pdev *pdev,
  *
  * Return: QDF_STATUS
  */
+#ifdef CONFIG_CHAN_NUM_API
 QDF_STATUS utils_dfs_mark_leaking_ch(struct wlan_objmgr_pdev *pdev,
 	enum phy_ch_width ch_width,
 	uint8_t temp_ch_lst_sz,
 	uint8_t *temp_ch_lst);
+#endif
+/**
+ * utils_dfs_mark_leaking_chan_for_freq() - to mark channel leaking in to nol
+ * @pdev: Pointer to pdev structure.
+ * @ch_width: channel width
+ * @temp_ch_lst_sz: the target channel list
+ * @temp_ch_lst: the target frequency list
+ *
+ * This function removes the channels from temp channel list that
+ * (if selected as target channel) will cause leakage in one of
+ * the NOL channels
+ *
+ * Return: QDF_STATUS
+ */
+#ifdef CONFIG_CHAN_FREQ_API
+QDF_STATUS utils_dfs_mark_leaking_chan_for_freq(struct wlan_objmgr_pdev *pdev,
+						enum phy_ch_width ch_width,
+						uint8_t temp_ch_lst_sz,
+						uint16_t *temp_ch_lst);
+#endif
 #else
+#ifdef CONFIG_CHAN_NUM_API
 static inline QDF_STATUS utils_dfs_mark_leaking_ch
 	(struct wlan_objmgr_pdev *pdev,
 	enum phy_ch_width ch_width,
@@ -614,6 +795,17 @@ static inline QDF_STATUS utils_dfs_mark_leaking_ch
 	return QDF_STATUS_SUCCESS;
 }
 #endif
+#ifdef CONFIG_CHAN_FREQ_API
+static inline QDF_STATUS utils_dfs_mark_leaking_chan_for_freq
+	(struct wlan_objmgr_pdev *pdev,
+	enum phy_ch_width ch_width,
+	uint8_t temp_ch_lst_sz,
+	uint16_t *temp_ch_lst)
+{
+	return QDF_STATUS_SUCCESS;
+}
+#endif
+#endif
 /**
  * utils_get_dfsdomain() - Get DFS domain.
  * @pdev: Pointer to PDEV structure.
@@ -686,10 +878,29 @@ void utils_dfs_get_nol_history_chan_list(struct wlan_objmgr_pdev *pdev,
  *
  * Return: void
  */
+#ifdef CONFIG_CHAN_NUM_API
 void utils_dfs_reg_update_nol_history_ch(struct wlan_objmgr_pdev *pdev,
 					 uint8_t *ch_list,
 					 uint8_t num_ch,
 					 bool nol_history_ch);
+#endif
+
+/**
+ * utils_dfs_reg_update_nol_history_chan_for_freq() - set nol history channel
+ *
+ * @pdev: pdev ptr
+ * @ch_list: freq channel list to be returned
+ * @num_ch: number of channels
+ * @nol_history_ch: nol history flag
+ *
+ * Return: void
+ */
+#ifdef CONFIG_CHAN_FREQ_API
+void utils_dfs_reg_update_nol_history_chan_for_freq(struct wlan_objmgr_pdev *,
+						    uint16_t *freq_list,
+						    uint8_t num_ch,
+						    bool nol_history_ch);
+#endif
 
 /**
  * utils_dfs_is_cac_required() - Check if CAC is required on the cur_chan.

+ 216 - 3
umac/dfs/dispatcher/src/wlan_dfs_mlme_api.c

@@ -39,6 +39,7 @@ void dfs_mlme_start_rcsa(struct wlan_objmgr_pdev *pdev,
 }
 
 #ifndef QCA_MCL_DFS_SUPPORT
+#ifdef CONFIG_CHAN_NUM_API
 void dfs_mlme_mark_dfs(struct wlan_objmgr_pdev *pdev,
 		uint8_t ieee,
 		uint16_t freq,
@@ -52,7 +53,24 @@ void dfs_mlme_mark_dfs(struct wlan_objmgr_pdev *pdev,
 				vhtop_ch_freq_seg2,
 				flags);
 }
-#else
+#endif
+#ifdef CONFIG_CHAN_FREQ_API
+void dfs_mlme_mark_dfs_for_freq(struct wlan_objmgr_pdev *pdev,
+				uint8_t ieee,
+				uint16_t freq,
+				uint16_t vhtop_ch_freq_seg2,
+				uint64_t flags)
+{
+	if (global_dfs_to_mlme.mlme_mark_dfs_for_freq)
+	global_dfs_to_mlme.mlme_mark_dfs_for_freq(pdev,
+						  ieee,
+						  freq,
+						  vhtop_ch_freq_seg2,
+						  flags);
+}
+#endif
+#else /* Else of ndef MCL_DFS_SUPPORT */
+#ifdef CONFIG_CHAN_NUM_API
 static void dfs_send_radar_ind(struct wlan_objmgr_pdev *pdev,
 		void *object,
 		void *arg)
@@ -69,7 +87,33 @@ static void dfs_send_radar_ind(struct wlan_objmgr_pdev *pdev,
 	dfs_info(NULL, WLAN_DEBUG_DFS_ALWAYS, "eWNI_SME_DFS_RADAR_FOUND pdev%d posted",
 		    vdev_id);
 }
+#endif
+
+/* dfs_send_radar_ind_for_freq() - Send radar found indication.
+ * @pdev: Pointer to wlan_objmgr_pdev.
+ * @object: Pointer to wlan_objmgr_vdev.
+ * @arg : void pointer to args.
+ */
+#ifdef CONFIG_CHAN_FREQ_API
+static void dfs_send_radar_ind_for_freq(struct wlan_objmgr_pdev *pdev,
+					void *object,
+					void *arg)
+{
+	struct scheduler_msg sme_msg = {0};
+	uint8_t vdev_id = wlan_vdev_get_id((struct wlan_objmgr_vdev *)object);
+
+	sme_msg.type = eWNI_SME_DFS_RADAR_FOUND;
+	sme_msg.bodyptr = NULL;
+	sme_msg.bodyval = vdev_id;
+	scheduler_post_message(QDF_MODULE_ID_DFS,
+			       QDF_MODULE_ID_SME,
+			       QDF_MODULE_ID_SME, &sme_msg);
+	dfs_info(NULL, WLAN_DEBUG_DFS_ALWAYS, "eWNI_SME_DFS_RADAR_FOUND pdev%d posted",
+		 vdev_id);
+}
+#endif
 
+#ifdef CONFIG_CHAN_NUM_API
 void dfs_mlme_mark_dfs(struct wlan_objmgr_pdev *pdev,
 		uint8_t ieee,
 		uint16_t freq,
@@ -92,7 +136,32 @@ void dfs_mlme_mark_dfs(struct wlan_objmgr_pdev *pdev,
 }
 #endif
 
+#ifdef CONFIG_CHAN_FREQ_API
+void dfs_mlme_mark_dfs_for_freq(struct wlan_objmgr_pdev *pdev,
+				uint8_t ieee,
+				uint16_t freq,
+				uint16_t vhtop_ch_freq_seg2,
+				uint64_t flags)
+{
+	struct wlan_objmgr_vdev *vdev;
+
+	if (!pdev) {
+		dfs_err(NULL, WLAN_DEBUG_DFS_ALWAYS,  "null pdev");
+		return;
+	}
+
+	vdev = wlan_pdev_peek_active_first_vdev(pdev, WLAN_DFS_ID);
+
+	if (vdev) {
+		dfs_send_radar_ind_for_freq(pdev, vdev, NULL);
+		wlan_objmgr_vdev_release_ref(vdev, WLAN_DFS_ID);
+	}
+}
+#endif
+#endif
+
 #ifndef QCA_MCL_DFS_SUPPORT
+#ifdef CONFIG_CHAN_NUM_API
 void dfs_mlme_start_csa(struct wlan_objmgr_pdev *pdev,
 		uint8_t ieee_chan, uint16_t freq,
 		uint8_t cfreq2, uint64_t flags)
@@ -101,7 +170,19 @@ void dfs_mlme_start_csa(struct wlan_objmgr_pdev *pdev,
 		global_dfs_to_mlme.mlme_start_csa(pdev, ieee_chan, freq, cfreq2,
 				flags);
 }
+#endif
+#ifdef CONFIG_CHAN_FREQ_API
+void dfs_mlme_start_csa_for_freq(struct wlan_objmgr_pdev *pdev,
+				 uint8_t ieee_chan, uint16_t freq,
+				 uint16_t cfreq2, uint64_t flags)
+{
+	if (global_dfs_to_mlme.mlme_start_csa_for_freq)
+		global_dfs_to_mlme.mlme_start_csa_for_freq(pdev, ieee_chan,
+							   freq, cfreq2, flags);
+}
+#endif
 #else
+#ifdef CONFIG_CHAN_NUM_API
 void dfs_mlme_start_csa(struct wlan_objmgr_pdev *pdev,
 			uint8_t ieee_chan, uint16_t freq,
 			uint8_t cfreq2, uint64_t flags)
@@ -121,6 +202,27 @@ void dfs_mlme_start_csa(struct wlan_objmgr_pdev *pdev,
 	}
 }
 #endif
+#ifdef CONFIG_CHAN_FREQ_API
+void dfs_mlme_start_csa_for_freq(struct wlan_objmgr_pdev *pdev,
+				 uint8_t ieee_chan, uint16_t freq,
+				 uint16_t cfreq2, uint64_t flags)
+{
+	struct wlan_objmgr_vdev *vdev;
+
+	if (!pdev) {
+		dfs_err(NULL, WLAN_DEBUG_DFS_ALWAYS,  "null pdev");
+		return;
+	}
+
+	vdev = wlan_pdev_peek_active_first_vdev(pdev, WLAN_DFS_ID);
+
+	if (vdev) {
+		dfs_send_radar_ind(pdev, vdev, NULL);
+		wlan_objmgr_vdev_release_ref(vdev, WLAN_DFS_ID);
+	}
+}
+#endif
+#endif
 
 #ifndef QCA_MCL_DFS_SUPPORT
 void dfs_mlme_proc_cac(struct wlan_objmgr_pdev *pdev, uint32_t vdev_id)
@@ -159,6 +261,7 @@ void dfs_mlme_get_dfs_ch_nchans(struct wlan_objmgr_pdev *pdev,
 				nchans);
 }
 
+#ifdef CONFIG_CHAN_NUM_API
 QDF_STATUS dfs_mlme_get_extchan(struct wlan_objmgr_pdev *pdev,
 		uint16_t *dfs_ch_freq,
 		uint64_t *dfs_ch_flags,
@@ -178,6 +281,33 @@ QDF_STATUS dfs_mlme_get_extchan(struct wlan_objmgr_pdev *pdev,
 
 	return QDF_STATUS_E_FAILURE;
 }
+#endif
+
+#ifdef CONFIG_CHAN_FREQ_API
+QDF_STATUS dfs_mlme_get_extchan_for_freq(struct wlan_objmgr_pdev *pdev,
+					 uint16_t *dfs_chan_freq,
+					 uint64_t *dfs_chan_flags,
+					 uint16_t *dfs_chan_flagext,
+					 uint8_t *dfs_chan_ieee,
+					 uint8_t *dfs_chan_vhtop_ch_freq_seg1,
+					 uint8_t *dfs_chan_vhtop_ch_freq_seg2,
+					 uint16_t *dfs_chan_mhz_freq_seg1,
+					 uint16_t *dfs_chan_mhz_freq_seg2)
+{
+	if (global_dfs_to_mlme.mlme_get_extchan_for_freq)
+		return global_dfs_to_mlme.mlme_get_extchan_for_freq(pdev,
+				dfs_chan_freq,
+				dfs_chan_flags,
+				dfs_chan_flagext,
+				dfs_chan_ieee,
+				dfs_chan_vhtop_ch_freq_seg1,
+				dfs_chan_vhtop_ch_freq_seg2,
+				dfs_chan_mhz_freq_seg1,
+				dfs_chan_mhz_freq_seg2);
+
+	return QDF_STATUS_E_FAILURE;
+}
+#endif
 
 void dfs_mlme_set_no_chans_available(struct wlan_objmgr_pdev *pdev,
 		int val)
@@ -201,6 +331,7 @@ int dfs_mlme_ieee2mhz(struct wlan_objmgr_pdev *pdev, int ieee, uint64_t flag)
 	return freq;
 }
 
+#ifdef CONFIG_CHAN_NUM_API
 QDF_STATUS
 dfs_mlme_find_dot11_channel(struct wlan_objmgr_pdev *pdev,
 			    uint8_t ieee,
@@ -226,7 +357,41 @@ dfs_mlme_find_dot11_channel(struct wlan_objmgr_pdev *pdev,
 								  dfs_ch_vhtop_ch_freq_seg2);
 	return QDF_STATUS_E_FAILURE;
 }
+#endif
 
+#ifdef CONFIG_CHAN_FREQ_API
+QDF_STATUS
+dfs_mlme_find_dot11_chan_for_freq(struct wlan_objmgr_pdev *pdev,
+				  uint16_t freq,
+				  uint16_t des_cfreq2,
+				  int mode,
+				  uint16_t *dfs_chan_freq,
+				  uint64_t *dfs_chan_flag,
+				  uint16_t *dfs_flagext,
+				  uint8_t *dfs_chan_ieee,
+				  uint8_t *dfs_cfreq1,
+				  uint8_t *dfs_cfreq2,
+				  uint16_t *cfreq1_mhz,
+				  uint16_t *cfreq2_mhz)
+{
+	if (global_dfs_to_mlme.mlme_find_dot11_chan_for_freq)
+	return global_dfs_to_mlme.mlme_find_dot11_chan_for_freq(pdev,
+								freq,
+								des_cfreq2,
+								mode,
+								dfs_chan_freq,
+								dfs_chan_flag,
+								dfs_flagext,
+								dfs_chan_ieee,
+								dfs_cfreq1,
+								dfs_cfreq2,
+								cfreq1_mhz,
+								cfreq2_mhz);
+	return QDF_STATUS_E_FAILURE;
+}
+#endif
+
+#ifdef CONFIG_CHAN_NUM_API
 void dfs_mlme_get_dfs_ch_channels(struct wlan_objmgr_pdev *pdev,
 		uint16_t *dfs_ch_freq,
 		uint64_t *dfs_ch_flags,
@@ -246,6 +411,33 @@ void dfs_mlme_get_dfs_ch_channels(struct wlan_objmgr_pdev *pdev,
 				dfs_ch_vhtop_ch_freq_seg2,
 				index);
 }
+#endif
+
+#ifdef CONFIG_CHAN_FREQ_API
+void dfs_mlme_get_dfs_channels_for_freq(struct wlan_objmgr_pdev *pdev,
+					uint16_t *dfs_chan_freq,
+					uint64_t *dfs_chan_flags,
+					uint16_t *dfs_chan_flagext,
+					uint8_t *dfs_chan_ieee,
+					uint8_t *dfs_chan_vhtop_freq_seg1,
+					uint8_t *dfs_chan_vhtop_freq_seg2,
+					uint16_t *dfs_ch_mhz_freq_seg1,
+					uint16_t *dfs_ch_mhz_freq_seg2,
+					int index)
+{
+	if (global_dfs_to_mlme.mlme_get_dfs_channels_for_freq)
+		global_dfs_to_mlme.mlme_get_dfs_channels_for_freq(pdev,
+				dfs_chan_freq,
+				dfs_chan_flags,
+				dfs_chan_flagext,
+				dfs_chan_ieee,
+				dfs_chan_vhtop_freq_seg1,
+				dfs_chan_vhtop_freq_seg2,
+				dfs_ch_mhz_freq_seg1,
+				dfs_ch_mhz_freq_seg2,
+				index);
+}
+#endif
 
 uint32_t dfs_mlme_dfs_ch_flags_ext(struct wlan_objmgr_pdev *pdev)
 {
@@ -282,6 +474,7 @@ void dfs_mlme_clist_update(struct wlan_objmgr_pdev *pdev,
 				nentries);
 }
 
+#ifdef CONFIG_CHAN_NUM_API
 int dfs_mlme_get_cac_timeout(struct wlan_objmgr_pdev *pdev,
 		uint16_t dfs_ch_freq,
 		uint8_t dfs_ch_vhtop_ch_freq_seg2,
@@ -298,6 +491,26 @@ int dfs_mlme_get_cac_timeout(struct wlan_objmgr_pdev *pdev,
 
 	return cac_timeout;
 }
+#endif
+
+#ifdef CONFIG_CHAN_FREQ_API
+int dfs_mlme_get_cac_timeout_for_freq(struct wlan_objmgr_pdev *pdev,
+				      uint16_t dfs_chan_freq,
+				      uint16_t dfs_cfreq2,
+				      uint64_t dfs_ch_flags)
+{
+	int cac_timeout = 0;
+
+	if (global_dfs_to_mlme.mlme_get_cac_timeout_for_freq)
+		global_dfs_to_mlme.mlme_get_cac_timeout_for_freq(pdev,
+								 dfs_chan_freq,
+								 dfs_cfreq2,
+								 dfs_ch_flags,
+								 &cac_timeout);
+
+	return cac_timeout;
+}
+#endif
 
 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
 int dfs_mlme_rebuild_chan_list_with_non_dfs_channels(
@@ -323,13 +536,13 @@ void dfs_mlme_restart_vaps_with_non_dfs_chan(struct wlan_objmgr_pdev *pdev,
 
 #if defined(WLAN_SUPPORT_PRIMARY_ALLOWED_CHAN)
 bool dfs_mlme_check_allowed_prim_chanlist(struct wlan_objmgr_pdev *pdev,
-					  uint32_t chan_num)
+					  uint32_t chan_freq)
 {
 	if (!global_dfs_to_mlme.mlme_check_allowed_prim_chanlist)
 		return true;
 
 	return global_dfs_to_mlme.mlme_check_allowed_prim_chanlist(pdev,
-								   chan_num);
+								   chan_freq);
 }
 
 #endif

+ 13 - 1
umac/dfs/dispatcher/src/wlan_dfs_ucfg_api.c

@@ -249,6 +249,7 @@ QDF_STATUS ucfg_dfs_get_precac_intermediate_chan(struct wlan_objmgr_pdev *pdev,
 	return QDF_STATUS_SUCCESS;
 }
 
+#ifdef CONFIG_CHAN_NUM_API
 enum precac_chan_state
 ucfg_dfs_get_precac_chan_state(struct wlan_objmgr_pdev *pdev,
 			       uint8_t precac_chan)
@@ -263,7 +264,7 @@ ucfg_dfs_get_precac_chan_state(struct wlan_objmgr_pdev *pdev,
 	}
 
 	retval = dfs_get_precac_chan_state(dfs, precac_chan);
-	if (PRECAC_ERR == retval) {
+	if (retval == PRECAC_ERR) {
 		dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS,
 			"Could not find precac channel state");
 	}
@@ -272,6 +273,17 @@ ucfg_dfs_get_precac_chan_state(struct wlan_objmgr_pdev *pdev,
 }
 #endif
 
+#ifdef CONFIG_CHAN_FREQ_API
+enum precac_chan_state
+ucfg_dfs_get_precac_chan_state_for_freq(struct wlan_objmgr_pdev *pdev,
+					uint16_t precac_chan_freq)
+{
+	/* To be implemented when component dev changes are ready */
+	return PRECAC_ERR;
+}
+#endif
+#endif
+
 #ifdef QCA_MCL_DFS_SUPPORT
 QDF_STATUS ucfg_dfs_update_config(struct wlan_objmgr_psoc *psoc,
 		struct dfs_user_config *req)