From 70e1b6f859c0e33bfb2a1a1c28779d3a73eecd3f Mon Sep 17 00:00:00 2001 From: Priyadarshnee S Date: Thu, 17 Oct 2019 13:25:25 +0530 Subject: [PATCH] qcacmn: Add frequency APIs in DFS Dispatcher To avoid "channel number" space collision with the introduction of 6GHZ frequency band, add frequency based APIs in DFS dispatcher. Change-Id: I349093e134b04ee31d046eb4da108522bc74a51a CRs-Fixed: 2526372 --- umac/dfs/dispatcher/inc/wlan_dfs_mlme_api.h | 155 ++++++++++++- .../dispatcher/inc/wlan_dfs_public_struct.h | 2 + umac/dfs/dispatcher/inc/wlan_dfs_tgt_api.h | 58 ++++- umac/dfs/dispatcher/inc/wlan_dfs_ucfg_api.h | 119 +++++++++- umac/dfs/dispatcher/inc/wlan_dfs_utils_api.h | 213 ++++++++++++++++- umac/dfs/dispatcher/src/wlan_dfs_mlme_api.c | 219 +++++++++++++++++- umac/dfs/dispatcher/src/wlan_dfs_ucfg_api.c | 14 +- 7 files changed, 767 insertions(+), 13 deletions(-) diff --git a/umac/dfs/dispatcher/inc/wlan_dfs_mlme_api.h b/umac/dfs/dispatcher/inc/wlan_dfs_mlme_api.h index 3719595f8586..f8d9a31523b5 100644 --- a/umac/dfs/dispatcher/inc/wlan_dfs_mlme_api.h +++ b/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; } diff --git a/umac/dfs/dispatcher/inc/wlan_dfs_public_struct.h b/umac/dfs/dispatcher/inc/wlan_dfs_public_struct.h index b27e679fda49..4722ca2a43b7 100644 --- a/umac/dfs/dispatcher/inc/wlan_dfs_public_struct.h +++ b/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; diff --git a/umac/dfs/dispatcher/inc/wlan_dfs_tgt_api.h b/umac/dfs/dispatcher/inc/wlan_dfs_tgt_api.h index 6005cf648695..655ce2e6a1d9 100644 --- a/umac/dfs/dispatcher/inc/wlan_dfs_tgt_api.h +++ b/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. diff --git a/umac/dfs/dispatcher/inc/wlan_dfs_ucfg_api.h b/umac/dfs/dispatcher/inc/wlan_dfs_ucfg_api.h index 700810f78f7f..bbf9b0e9c740 100644 --- a/umac/dfs/dispatcher/inc/wlan_dfs_ucfg_api.h +++ b/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. diff --git a/umac/dfs/dispatcher/inc/wlan_dfs_utils_api.h b/umac/dfs/dispatcher/inc/wlan_dfs_utils_api.h index ece0338e271f..c5739d00cdb4 100644 --- a/umac/dfs/dispatcher/inc/wlan_dfs_utils_api.h +++ b/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. diff --git a/umac/dfs/dispatcher/src/wlan_dfs_mlme_api.c b/umac/dfs/dispatcher/src/wlan_dfs_mlme_api.c index dac0e47a06c7..d881a2050698 100644 --- a/umac/dfs/dispatcher/src/wlan_dfs_mlme_api.c +++ b/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 diff --git a/umac/dfs/dispatcher/src/wlan_dfs_ucfg_api.c b/umac/dfs/dispatcher/src/wlan_dfs_ucfg_api.c index 0193e5826141..411b36db1fc1 100644 --- a/umac/dfs/dispatcher/src/wlan_dfs_ucfg_api.c +++ b/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)