qcacmn: DFS componentization (DFS Dispatcher)
DFS module provides these public APIs for other modules to call DFS functions. Change-Id: I4f703416d7afe97d2304033b1c3b6c31914a83bb CRs-Fixed: 2001106
This commit is contained in:

committed by
Sandeep Puligilla

szülő
37cef934f1
commit
38ae892add
66
umac/dfs/dispatcher/inc/wlan_dfs_init_deinit_api.h
Normal file
66
umac/dfs/dispatcher/inc/wlan_dfs_init_deinit_api.h
Normal file
@@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2017 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DOC: This file init/deint functions for DFS module.
|
||||
*/
|
||||
|
||||
#ifndef _WLAN_DFS_INIT_DEINIT_API_H_
|
||||
#define _WLAN_DFS_INIT_DEINIT_API_H_
|
||||
|
||||
#include "wlan_dfs_ucfg_api.h"
|
||||
|
||||
/**
|
||||
* wlan_pdev_get_dfs_obj() - Get DFS object from PDEV.
|
||||
* @pdev: Pointer to PDEV structure.
|
||||
* @id: DFS component ID.
|
||||
* @obj: Pointer to DFS object.
|
||||
*/
|
||||
struct wlan_dfs *wlan_pdev_get_dfs_obj(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* register_dfs_callbacks() - Fill mlme pointers.
|
||||
*/
|
||||
void register_dfs_callbacks(void);
|
||||
|
||||
/**
|
||||
* dfs_init() - Init DFS module
|
||||
*/
|
||||
QDF_STATUS dfs_init(void);
|
||||
|
||||
/**
|
||||
* dfs_deinit() - Deinit DFS module.
|
||||
*/
|
||||
QDF_STATUS dfs_deinit(void);
|
||||
|
||||
/**
|
||||
* wlan_dfs_pdev_obj_create_notification() - DFS pdev object create handler.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
*/
|
||||
QDF_STATUS wlan_dfs_pdev_obj_create_notification(struct wlan_objmgr_pdev *pdev,
|
||||
void *arg);
|
||||
|
||||
/**
|
||||
* wlan_dfs_pdev_obj_destroy_notification() - DFS pdev object delete handler.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
*/
|
||||
QDF_STATUS wlan_dfs_pdev_obj_destroy_notification(struct wlan_objmgr_pdev *pdev,
|
||||
void *arg);
|
||||
|
||||
#endif /* _WLAN_DFS_INIT_DEINIT_API_H_ */
|
181
umac/dfs/dispatcher/inc/wlan_dfs_lmac_api.h
Normal file
181
umac/dfs/dispatcher/inc/wlan_dfs_lmac_api.h
Normal file
@@ -0,0 +1,181 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2017 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DOC: These APIs are used by DFS core functions to call lmac/offload
|
||||
* functions.
|
||||
*/
|
||||
|
||||
#ifndef _WLAN_DFS_LMAC_API_H_
|
||||
#define _WLAN_DFS_LMAC_API_H_
|
||||
|
||||
#include <wlan_objmgr_psoc_obj.h>
|
||||
#include <wlan_objmgr_pdev_obj.h>
|
||||
|
||||
/**
|
||||
* lmac_get_caps() - Get DFS capabilities.
|
||||
* @pdev: Pointer to PDEV structure.
|
||||
* @ext_chan: Can radar be detected on the extension chan?
|
||||
* @combined_rssi: Can use combined radar RSSI?
|
||||
* @use_enhancement: This flag is used to indicate if radar
|
||||
* detection scheme should use enhanced chirping
|
||||
* detection algorithm. This flag also determines
|
||||
* if certain radar data should be discarded to
|
||||
* minimize false detection of radar.
|
||||
* @strong_signal_diversiry: Strong Signal fast diversity count.
|
||||
* @chip_is_bb_tlv: Chip is BB TLV?
|
||||
* @chip_is_over_sampled: Is Over sampled.
|
||||
* @chip_is_ht160: IS VHT160?
|
||||
* @chip_is_false_detect: Is False detected?
|
||||
* @fastdiv_val: Goes with wlan_strong_signal_diversiry: If we
|
||||
* have fast diversity capability, read off
|
||||
* Strong Signal fast diversity count set in the
|
||||
* ini file, and store so we can restore the
|
||||
* value when radar is disabled.
|
||||
*/
|
||||
void lmac_get_caps(struct wlan_objmgr_pdev *pdev,
|
||||
bool *ext_chan,
|
||||
bool *combined_rssi,
|
||||
bool *use_enhancement,
|
||||
bool *strong_signal_diversiry,
|
||||
bool *chip_is_bb_tlv,
|
||||
bool *chip_is_over_sampled,
|
||||
bool *chip_is_ht160,
|
||||
bool *chip_is_false_detect,
|
||||
uint32_t *fastdiv_val);
|
||||
|
||||
/**
|
||||
* lmac_get_tsf64() - Get tsf64 value.
|
||||
* @pdev: Pointer to PDEV structure.
|
||||
*
|
||||
* Return: tsf64 timer value.
|
||||
*/
|
||||
uint64_t lmac_get_tsf64(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* lmac_dfs_disable() - Disable DFS.
|
||||
* @pdev: Pointer to PDEV structure.
|
||||
* @no_cac: no_cac flag.
|
||||
*/
|
||||
void lmac_dfs_disable(struct wlan_objmgr_pdev *pdev, int no_cac);
|
||||
|
||||
/**
|
||||
* lmac_get_dfsdomain() - Get DFS domain.
|
||||
* @pdev: Pointer to PDEV structure.
|
||||
*/
|
||||
int lmac_get_dfsdomain(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* lmac_dfs_enable() - Enable DFS.
|
||||
* @pdev: Pointer to PDEV structure.
|
||||
* @is_fastclk: fastclk value.
|
||||
* @pe_firpwr: FIR pwr out threshold.
|
||||
* @pe_rrssi: Radar rssi thresh.
|
||||
* @pe_height: Pulse height thresh.
|
||||
* @pe_prssi: Pulse rssi thresh.
|
||||
* @pe_inband: Inband thresh.
|
||||
* @pe_relpwr: Relative power threshold in 0.5dB steps.
|
||||
* @pe_relstep: Pulse Relative step threshold in 0.5dB steps.
|
||||
* @pe_maxlen: Max length of radar sign in 0.8us units.
|
||||
* @dfsdomain: DFS domain.
|
||||
*/
|
||||
void lmac_dfs_enable(struct wlan_objmgr_pdev *pdev,
|
||||
int *is_fastclk,
|
||||
int32_t pe_firpwr,
|
||||
int32_t pe_rrssi,
|
||||
int32_t pe_height,
|
||||
int32_t pe_prssi,
|
||||
int32_t pe_inband,
|
||||
uint32_t pe_relpwr,
|
||||
uint32_t pe_relstep,
|
||||
uint32_t pe_maxlen,
|
||||
int dfsdomain);
|
||||
|
||||
/**
|
||||
* lmac_dfs_get_thresholds() - Get thresholds.
|
||||
* @pdev: Pointer to PDEV structure.
|
||||
* @pe_firpwr: FIR pwr out threshold.
|
||||
* @pe_rrssi: Radar rssi thresh.
|
||||
* @pe_height: Pulse height thresh.
|
||||
* @pe_prssi: Pulse rssi thresh.
|
||||
* @pe_inband: Inband thresh.
|
||||
* @pe_relpwr: Relative power threshold in 0.5dB steps.
|
||||
* @pe_relstep: Pulse Relative step threshold in 0.5dB steps.
|
||||
* @pe_maxlen: Max length of radar sign in 0.8us units.
|
||||
*/
|
||||
void lmac_dfs_get_thresholds(struct wlan_objmgr_pdev *pdev,
|
||||
int32_t *pe_firpwr,
|
||||
int32_t *pe_rrssi,
|
||||
int32_t *pe_height,
|
||||
int32_t *pe_prssi,
|
||||
int32_t *pe_inband,
|
||||
uint32_t *pe_relpwr,
|
||||
uint32_t *pe_relstep,
|
||||
uint32_t *pe_maxlen);
|
||||
|
||||
/**
|
||||
* lmac_is_mode_offload() - Check the radio for offload.
|
||||
* @pdev: Pointer to PDEV structure.
|
||||
*/
|
||||
bool lmac_is_mode_offload(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* lmac_get_ah_devid() - Get ah devid.
|
||||
* @pdev: Pointer to PDEV structure.
|
||||
*/
|
||||
uint16_t lmac_get_ah_devid(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* lmac_get_ext_busy() - Get ext_busy.
|
||||
* @pdev: Pointer to PDEV structure.
|
||||
*/
|
||||
uint32_t lmac_get_ext_busy(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* lmac_is_countryCode_KOREA_ROC3() - Check is county code Korea.
|
||||
* @pdev: Pointer to PDEV structure.
|
||||
*/
|
||||
bool lmac_is_countryCode_KOREA_ROC3(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* lmac_set_use_cac_prssi() - Set use_cac_prssi value.
|
||||
* @pdev: Pointer to PDEV structure.
|
||||
*/
|
||||
void lmac_set_use_cac_prssi(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* lmac_get_target_type() - Get target type.
|
||||
* @pdev: Pointer to PDEV structure.
|
||||
*/
|
||||
uint32_t lmac_get_target_type(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* lmac_is_countryCode_CHINA() - Check is country code CHINA.
|
||||
* @pdev: Pointer to PDEV structure.
|
||||
*/
|
||||
bool lmac_is_countryCode_CHINA(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* lmac_get_phymode_info() - Get phymode info.
|
||||
* @pdev: Pointer to PDEV structure.
|
||||
*/
|
||||
uint32_t lmac_get_phymode_info(struct wlan_objmgr_pdev *pdev,
|
||||
uint32_t chan_mode);
|
||||
|
||||
#endif /* _WLAN_DFS_LMAC_API_H_ */
|
243
umac/dfs/dispatcher/inc/wlan_dfs_mlme_api.h
Normal file
243
umac/dfs/dispatcher/inc/wlan_dfs_mlme_api.h
Normal file
@@ -0,0 +1,243 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2017 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DOC: These APIs are used by DFS core functions to call mlme functions.
|
||||
*/
|
||||
|
||||
#ifndef _WLAN_DFS_MLME_API_H_
|
||||
#define _WLAN_DFS_MLME_API_H_
|
||||
|
||||
#include "wlan_dfs_ucfg_api.h"
|
||||
|
||||
extern struct dfs_to_mlme global_dfs_to_mlme;
|
||||
|
||||
/**
|
||||
* dfs_mlme_channel_mark_radar() - mark the channel as radar.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @freq: Channel frequency
|
||||
* @vhtop_ch_freq_seg2: VHT80 Cfreq2
|
||||
* @flags: channel flags.
|
||||
*/
|
||||
void dfs_mlme_channel_mark_radar(struct wlan_objmgr_pdev *pdev,
|
||||
uint16_t freq,
|
||||
uint8_t vhtop_ch_freq_seg2,
|
||||
uint32_t flags);
|
||||
|
||||
/**
|
||||
* dfs_mlme_start_rcsa() - Send RCSA to RootAP.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
*/
|
||||
void dfs_mlme_start_rcsa(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* dfs_mlme_mark_dfs() - Mark the channel in the channel list.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @ieee: Channel number.
|
||||
* @freq: Channel frequency.
|
||||
* @vhtop_ch_freq_seg2: VHT80 Cfreq2.
|
||||
* @flags: channel flags.
|
||||
*/
|
||||
void dfs_mlme_mark_dfs(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t ieee,
|
||||
uint16_t freq,
|
||||
uint8_t vhtop_ch_freq_seg2,
|
||||
uint32_t flags);
|
||||
|
||||
/**
|
||||
* dfs_mlme_start_csa() - Sends CSA in ieeeChan
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @ieeeChan: Channel number.
|
||||
*/
|
||||
void dfs_mlme_start_csa(struct wlan_objmgr_pdev *pdev, uint8_t ieeeChan);
|
||||
|
||||
/**
|
||||
* dfs_mlme_proc_cac() - Process the CAC completion event.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
*/
|
||||
void dfs_mlme_proc_cac(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* dfs_mlme_deliver_event_up_afrer_cac() - Send a CAC timeout, VAP up event to
|
||||
* userspace.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
*/
|
||||
void dfs_mlme_deliver_event_up_afrer_cac(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* dfs_mlme_get_ic_nchans() - Get number of channels in the channel list
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @nchans: Pointer to save the channel number.
|
||||
*/
|
||||
void dfs_mlme_get_ic_nchans(struct wlan_objmgr_pdev *pdev, int *nchans);
|
||||
|
||||
/**
|
||||
* dfs_mlme_get_ic_no_weather_radar_chan() - Checks is the channel is weather
|
||||
* radar channel.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @no_wradar: Pointer to save weather radar filter value.
|
||||
*/
|
||||
void dfs_mlme_get_ic_no_weather_radar_chan(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t *no_wradar);
|
||||
|
||||
/**
|
||||
* dfs_mlme_find_alternate_mode_channel() - Finds the channel.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @alt_chan_mode: Input mode.
|
||||
* @chan_count: channel count.
|
||||
*/
|
||||
int dfs_mlme_find_alternate_mode_channel(struct wlan_objmgr_pdev *pdev,
|
||||
uint32_t alt_chan_mode,
|
||||
int chan_count);
|
||||
|
||||
/**
|
||||
* dfs_mlme_find_any_valid_channel() - Finds the channel with the given mode.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @chan_mode: Channel mode.
|
||||
* @ret_val: Pointer to save the channel index.
|
||||
*/
|
||||
void dfs_mlme_find_any_valid_channel(struct wlan_objmgr_pdev *pdev,
|
||||
uint32_t chan_mode,
|
||||
int *ret_val);
|
||||
|
||||
/**
|
||||
* dfs_mlme_get_extchan() - Get extension channel.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @ic_freq: Frequency in Mhz.
|
||||
* @ic_flags: Channel flags.
|
||||
* @ic_flagext: Extended channel flags.
|
||||
* @ic_ieee: IEEE channel number.
|
||||
* @ic_vhtop_ch_freq_seg1: Channel Center frequency.
|
||||
* @ic_vhtop_ch_freq_seg2: Channel Center frequency applicable for 80+80MHz
|
||||
* mode of operation.
|
||||
*/
|
||||
void dfs_mlme_get_extchan(struct wlan_objmgr_pdev *pdev,
|
||||
uint16_t *ic_freq,
|
||||
uint32_t *ic_flags,
|
||||
uint16_t *ic_flagext,
|
||||
uint8_t *ic_ieee,
|
||||
uint8_t *ic_vhtop_ch_freq_seg1,
|
||||
uint8_t *ic_vhtop_ch_freq_seg2);
|
||||
|
||||
/**
|
||||
* dfs_mlme_set_no_chans_available() - Set no_chans_available flag.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @val: Set this value to no_chans_available flag.
|
||||
*/
|
||||
void dfs_mlme_set_no_chans_available(struct wlan_objmgr_pdev *pdev,
|
||||
int val);
|
||||
|
||||
/**
|
||||
* dfs_mlme_ieee2mhz() - Get the frequency from channel number.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @ieee: Channel number.
|
||||
* @flag: Channel flag.
|
||||
*/
|
||||
int dfs_mlme_ieee2mhz(struct wlan_objmgr_pdev *pdev,
|
||||
int ieee,
|
||||
int flag);
|
||||
|
||||
/**
|
||||
* dfs_mlme_find_dot11_channel() - Get dot11 channel from ieee, cfreq2 and mode.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @ieee: Channel number.
|
||||
* @des_cfreq2: cfreq2
|
||||
* @mode: Phymode
|
||||
* @ic_freq: Frequency in Mhz.
|
||||
* @ic_flags: Channel flags.
|
||||
* @ic_flagext: Extended channel flags.
|
||||
* @ic_ieee: IEEE channel number.
|
||||
* @ic_vhtop_ch_freq_seg1: Channel Center frequency.
|
||||
* @ic_vhtop_ch_freq_seg2: Channel Center frequency applicable for 80+80MHz
|
||||
* mode of operation.
|
||||
*/
|
||||
void dfs_mlme_find_dot11_channel(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t ieee,
|
||||
uint8_t des_cfreq2,
|
||||
int mode,
|
||||
uint16_t *ic_freq,
|
||||
uint32_t *ic_flags,
|
||||
uint16_t *ic_flagext,
|
||||
uint8_t *ic_ieee,
|
||||
uint8_t *ic_vhtop_ch_freq_seg1,
|
||||
uint8_t *ic_vhtop_ch_freq_seg2);
|
||||
|
||||
/**
|
||||
* dfs_mlme_get_ic_channels() - Get channel from channel list.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @ic_freq: Frequency in Mhz.
|
||||
* @ic_flags: Channel flags.
|
||||
* @ic_flagext: Extended channel flags.
|
||||
* @ic_ieee: IEEE channel number.
|
||||
* @ic_vhtop_ch_freq_seg1: Channel Center frequency.
|
||||
* @ic_vhtop_ch_freq_seg2: Channel Center frequency applicable for 80+80MHz
|
||||
* mode of operation.
|
||||
* @index: Index into channel list.
|
||||
*/
|
||||
void dfs_mlme_get_ic_channels(struct wlan_objmgr_pdev *pdev,
|
||||
uint16_t *ic_freq,
|
||||
uint32_t *ic_flags,
|
||||
uint16_t *ic_flagext,
|
||||
uint8_t *ic_ieee,
|
||||
uint8_t *ic_vhtop_ch_freq_seg1,
|
||||
uint8_t *ic_vhtop_ch_freq_seg2,
|
||||
int index);
|
||||
|
||||
/**
|
||||
* dfs_mlme_ic_flags_ext() - Get extension channel flags.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
*/
|
||||
uint32_t dfs_mlme_ic_flags_ext(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* dfs_mlme_channel_change_by_precac() - Channel change by PreCAC.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
*/
|
||||
void dfs_mlme_channel_change_by_precac(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* dfs_mlme_nol_timeout_notification() - NOL timeout notification to userspace.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
*/
|
||||
void dfs_mlme_nol_timeout_notification(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* dfs_mlme_clist_update() - Mark the channel as RADAR.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @nollist: Pointer to NOL list.
|
||||
* @nentries: Number of channels in the NOL list.
|
||||
*/
|
||||
void dfs_mlme_clist_update(struct wlan_objmgr_pdev *pdev,
|
||||
void *nollist,
|
||||
int nentries);
|
||||
|
||||
/**
|
||||
* dfs_mlme_get_cac_timeout() - Get cac_timeout.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @ic_freq: Frequency in Mhz.
|
||||
* @ic_vhtop_ch_freq_seg2: Channel Center frequency applicable for 80+80MHz
|
||||
* mode of operation.
|
||||
* @ic_flags: Channel flags.
|
||||
*/
|
||||
int dfs_mlme_get_cac_timeout(struct wlan_objmgr_pdev *pdev,
|
||||
uint16_t ic_freq,
|
||||
uint8_t ic_vhtop_ch_freq_seg2,
|
||||
uint32_t ic_flags);
|
||||
|
||||
#endif /* _WLAN_DFS_MLME_API_H_ */
|
188
umac/dfs/dispatcher/inc/wlan_dfs_tgt_api.h
Normal file
188
umac/dfs/dispatcher/inc/wlan_dfs_tgt_api.h
Normal file
@@ -0,0 +1,188 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2017 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DOC: This file has the DFS dispatcher API which is exposed to outside of DFS
|
||||
* component.
|
||||
*/
|
||||
|
||||
#ifndef _WLAN_DFS_TGT_API_H_
|
||||
#define _WLAN_DFS_TGT_API_H_
|
||||
|
||||
#include "wlan_dfs_ucfg_api.h"
|
||||
|
||||
extern struct dfs_to_mlme global_dfs_to_mlme;
|
||||
|
||||
/**
|
||||
* tgt_dfs_set_current_channel() - Fill dfs channel structure from
|
||||
* dfs_ieee80211_channel structure.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @ic_freq: Frequency in Mhz.
|
||||
* @ic_flags: Channel flags.
|
||||
* @ic_flagext: Extended channel flags.
|
||||
* @ic_ieee: IEEE channel number.
|
||||
* @ic_vhtop_ch_freq_seg1: Channel Center frequency1.
|
||||
* @ic_vhtop_ch_freq_seg2: Channel Center frequency2.
|
||||
*/
|
||||
QDF_STATUS tgt_dfs_set_current_channel(struct wlan_objmgr_pdev *pdev,
|
||||
uint16_t ic_freq,
|
||||
uint32_t ic_flags,
|
||||
uint16_t ic_flagext,
|
||||
uint8_t ic_ieee,
|
||||
uint8_t ic_vhtop_ch_freq_seg1,
|
||||
uint8_t ic_vhtop_ch_freq_seg2);
|
||||
|
||||
/**
|
||||
* tgt_dfs_reset() - DFS reset
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
*
|
||||
* Wrapper function for dfs_reset(). This function called from outside of DFS
|
||||
* component.
|
||||
*/
|
||||
QDF_STATUS tgt_dfs_reset(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* tgt_dfs_get_radars() - Based on the chipset, calls init radar table functions
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
*
|
||||
* Wrapper function for dfs_get_radars(). This function called from
|
||||
* outside of DFS component.
|
||||
*/
|
||||
QDF_STATUS tgt_dfs_get_radars(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* tgt_dfs_process_phyerr() - Process phyerr.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @buf: Phyerr buffer.
|
||||
* @datalen: phyerr buffer length.
|
||||
* @r_rssi: RSSI.
|
||||
* @r_ext_rssi: Extension channel RSSI.
|
||||
* @r_rs_tstamp: Timestamp.
|
||||
* @r_fulltsf: TSF64.
|
||||
*
|
||||
* Wrapper function for dfs_process_phyerr(). This function called from
|
||||
* outside of DFS component.
|
||||
*/
|
||||
QDF_STATUS tgt_dfs_process_phyerr(struct wlan_objmgr_pdev *pdev,
|
||||
void *buf,
|
||||
uint16_t datalen,
|
||||
uint8_t r_rssi,
|
||||
uint8_t r_ext_rssi,
|
||||
uint32_t r_rs_tstamp,
|
||||
uint64_t r_fulltsf);
|
||||
|
||||
/**
|
||||
* tgt_dfs_destroy_object() - Destroys the DFS object.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
*
|
||||
* Wrapper function for dfs_destroy_object(). This function called from
|
||||
* outside of DFS component.
|
||||
*/
|
||||
QDF_STATUS tgt_dfs_destroy_object(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* tgt_dfs_radar_enable() - Enables the radar.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @no_cac: If no_cac is 0, it cancels the CAC.
|
||||
*
|
||||
* This is called each time a channel change occurs, to (potentially) enable
|
||||
* the radar code.
|
||||
*/
|
||||
QDF_STATUS tgt_dfs_radar_enable(struct wlan_objmgr_pdev *pdev,
|
||||
int no_cac, uint32_t opmode);
|
||||
|
||||
/**
|
||||
* tgt_dfs_attach() - Allocates memory for wlan_dfs members.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
*
|
||||
* Wrapper function for dfs_attach(). This function called from
|
||||
* outside of DFS component.
|
||||
*/
|
||||
QDF_STATUS tgt_dfs_attach(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* tgt_sif_dfs_detach() - DFS detach.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
*
|
||||
* Wrapper function for sif_dfs_attach(). This function called from
|
||||
* outside of DFS component.
|
||||
*/
|
||||
QDF_STATUS tgt_sif_dfs_detach(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* tgt_dfs_control()- Used to process ioctls related to DFS.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @id: Command type.
|
||||
* @indata: Input buffer.
|
||||
* @insize: size of the input buffer.
|
||||
* @outdata: A buffer for the results.
|
||||
* @outsize: Size of the output buffer.
|
||||
*/
|
||||
QDF_STATUS tgt_dfs_control(struct wlan_objmgr_pdev *pdev,
|
||||
u_int id,
|
||||
void *indata,
|
||||
uint32_t insize,
|
||||
void *outdata,
|
||||
uint32_t *outsize,
|
||||
int *error);
|
||||
|
||||
/**
|
||||
* tgt_nif_dfs_reset() - DFS reset.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
*
|
||||
* Wrapper function for nif_dfs_reset(). This function called from
|
||||
* outside of DFS component.
|
||||
*/
|
||||
QDF_STATUS tgt_nif_dfs_reset(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* tgt_dfs_is_precac_timer_running() - Check whether precac timer is running.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @is_precac_timer_running: Pointer to save precac timer value.
|
||||
*
|
||||
* Wrapper function for dfs_is_precac_timer_running(). This function called from
|
||||
* outside of DFS component.
|
||||
*/
|
||||
QDF_STATUS tgt_dfs_is_precac_timer_running(struct wlan_objmgr_pdev *pdev,
|
||||
bool *is_precac_timer_running);
|
||||
|
||||
/**
|
||||
* utils_dfs_find_vht80_chan_for_precac() - Find VHT80 channel for precac.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @chan_mode: Channel mode.
|
||||
* @ch_freq_seg1: Segment1 channel freq.
|
||||
* @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_precacdfs_cancel_cac_timer().
|
||||
* This function called from outside of dfs component.
|
||||
*/
|
||||
QDF_STATUS tgt_dfs_find_vht80_chan_for_precac(struct wlan_objmgr_pdev *pdev,
|
||||
uint32_t chan_mode,
|
||||
uint8_t ch_freq_seg1,
|
||||
uint32_t *cfreq1,
|
||||
uint32_t *cfreq2,
|
||||
uint32_t *phy_mode,
|
||||
bool *dfs_set_cfreq2,
|
||||
bool *set_agile);
|
||||
|
||||
#endif /* _WLAN_DFS_TGT_API_H_ */
|
249
umac/dfs/dispatcher/inc/wlan_dfs_ucfg_api.h
Normal file
249
umac/dfs/dispatcher/inc/wlan_dfs_ucfg_api.h
Normal file
@@ -0,0 +1,249 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2017 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DOC: This file has the DFS dispatcher API which is exposed to outside of DFS
|
||||
* component.
|
||||
*/
|
||||
|
||||
#ifndef _WLAN_DFS_UCFG_API_H_
|
||||
#define _WLAN_DFS_UCFG_API_H_
|
||||
|
||||
#include <wlan_objmgr_psoc_obj.h>
|
||||
#include <wlan_objmgr_pdev_obj.h>
|
||||
|
||||
/**
|
||||
* struct dfs_to_mlme - These are MLME function pointer used by DFS component.
|
||||
* @pdev_component_obj_attach: Attach DFS object to PDEV.
|
||||
* @pdev_component_obj_detach: Detach DFS object from PDEV.
|
||||
* @pdev_get_comp_private_obj: Get DFS object from PDEV.
|
||||
* @dfs_channel_mark_radar: Mark the channel as RADAR.
|
||||
* @dfs_start_rcsa: Send RCSA to RootAP.
|
||||
* @mlme_mark_dfs: Calls dfs_action function.
|
||||
* @mlme_start_csa: Sends CSA.
|
||||
* @mlme_proc_cac: Process the CAC completion event.
|
||||
* @mlme_deliver_event_up_afrer_cac: Send a CAC timeout, VAP up event to user
|
||||
* space
|
||||
* @mlme_get_ic_nchans: Get number of channels in the channel
|
||||
* list.
|
||||
* @mlme_get_ic_no_weather_radar_chan: Checks is the channel is weather radar
|
||||
* channel.
|
||||
* @mlme_find_alternate_mode_channel: Finds the channel.
|
||||
* @mlme_find_any_valid_channel: Find the valid channeil.
|
||||
* @mlme_get_extchan: Gets the extension channel.
|
||||
* @mlme_set_no_chans_available: Sets no_chans_available flag.
|
||||
* @mlme_ieee2mhz: Gets Channel freq from ieee number.
|
||||
* @mlme_find_dot11_channel: Find dot11 channel.
|
||||
* @mlme_get_ic_channels: Get the channel list.
|
||||
* @mlme_ic_flags_ext: Gets channel extension flag.
|
||||
* @mlme_channel_change_by_precac: Channel change triggered by PreCAC.
|
||||
* @mlme_nol_timeout_notification: NOL timeout notification.
|
||||
* @mlme_clist_update: Updates the channel list.
|
||||
* @mlme_get_cac_timeout: Gets the CAC timeout.
|
||||
*/
|
||||
struct dfs_to_mlme {
|
||||
QDF_STATUS (*pdev_component_obj_attach)(struct wlan_objmgr_pdev *pdev,
|
||||
enum wlan_umac_comp_id id,
|
||||
void *comp_priv_obj,
|
||||
QDF_STATUS status);
|
||||
QDF_STATUS (*pdev_component_obj_detach)(struct wlan_objmgr_pdev *pdev,
|
||||
enum wlan_umac_comp_id id,
|
||||
void *comp_priv_obj);
|
||||
struct wlan_dfs *(*pdev_get_comp_private_obj)(
|
||||
struct wlan_objmgr_pdev *pdev);
|
||||
QDF_STATUS (*dfs_channel_mark_radar)(struct wlan_objmgr_pdev *pdev,
|
||||
uint16_t freq,
|
||||
uint8_t vhtop_ch_freq_seg2,
|
||||
uint32_t flags);
|
||||
QDF_STATUS (*dfs_start_rcsa)(struct wlan_objmgr_pdev *pdev);
|
||||
QDF_STATUS (*mlme_mark_dfs)(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t ieee,
|
||||
uint16_t freq,
|
||||
uint8_t vhtop_ch_freq_seg2,
|
||||
uint32_t flags);
|
||||
QDF_STATUS (*mlme_start_csa)(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t ieeeChan);
|
||||
QDF_STATUS (*mlme_proc_cac)(struct wlan_objmgr_pdev *pdev);
|
||||
QDF_STATUS (*mlme_deliver_event_up_afrer_cac)(
|
||||
struct wlan_objmgr_pdev *pdev);
|
||||
QDF_STATUS (*mlme_get_ic_nchans)(struct wlan_objmgr_pdev *pdev,
|
||||
int *nchans);
|
||||
QDF_STATUS (*mlme_get_ic_no_weather_radar_chan)(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t *no_wradar);
|
||||
QDF_STATUS (*mlme_find_alternate_mode_channel)(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
uint32_t alt_chan_mode,
|
||||
int chan_count,
|
||||
int *ret_val);
|
||||
QDF_STATUS (*mlme_find_any_valid_channel)(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
uint32_t chan_mode,
|
||||
int *ret_val);
|
||||
QDF_STATUS (*mlme_get_extchan)(struct wlan_objmgr_pdev *pdev,
|
||||
uint16_t *ic_freq,
|
||||
uint32_t *ic_flags,
|
||||
uint16_t *ic_flagext,
|
||||
uint8_t *ic_ieee,
|
||||
uint8_t *ic_vhtop_ch_freq_seg1,
|
||||
uint8_t *ic_vhtop_ch_freq_seg2);
|
||||
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,
|
||||
int flag,
|
||||
int *freq);
|
||||
QDF_STATUS (*mlme_find_dot11_channel)(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t ieee,
|
||||
uint8_t des_cfreq2,
|
||||
int mode,
|
||||
uint16_t *ic_freq,
|
||||
uint32_t *ic_flags,
|
||||
uint16_t *ic_flagext,
|
||||
uint8_t *ic_ieee,
|
||||
uint8_t *ic_vhtop_ch_freq_seg1,
|
||||
uint8_t *ic_vhtop_ch_freq_seg2);
|
||||
|
||||
QDF_STATUS (*mlme_get_ic_channels)(struct wlan_objmgr_pdev *pdev,
|
||||
uint16_t *ic_freq,
|
||||
uint32_t *ic_flags,
|
||||
uint16_t *ic_flagext,
|
||||
uint8_t *ic_ieee,
|
||||
uint8_t *ic_vhtop_ch_freq_seg1,
|
||||
uint8_t *ic_vhtop_ch_freq_seg2,
|
||||
int index);
|
||||
QDF_STATUS (*mlme_ic_flags_ext)(struct wlan_objmgr_pdev *pdev,
|
||||
uint32_t *flag_ext);
|
||||
QDF_STATUS (*mlme_channel_change_by_precac)(
|
||||
struct wlan_objmgr_pdev *pdev);
|
||||
QDF_STATUS (*mlme_nol_timeout_notification)(
|
||||
struct wlan_objmgr_pdev *pdev);
|
||||
QDF_STATUS (*mlme_clist_update)(struct wlan_objmgr_pdev *pdev,
|
||||
void *nollist,
|
||||
int nentries);
|
||||
QDF_STATUS (*mlme_get_cac_timeout)(struct wlan_objmgr_pdev *pdev,
|
||||
uint16_t ic_freq,
|
||||
uint8_t c_vhtop_ch_freq_seg2,
|
||||
uint32_t ic_flags,
|
||||
int *cac_timeout);
|
||||
};
|
||||
|
||||
extern struct dfs_to_mlme global_dfs_to_mlme;
|
||||
|
||||
/**
|
||||
* wlan_dfs_pdev_obj_create_notification() - DFS pdev object create handler.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
*/
|
||||
QDF_STATUS wlan_dfs_pdev_obj_create_notification(struct wlan_objmgr_pdev *pdev,
|
||||
void *arg);
|
||||
|
||||
/**
|
||||
* wlan_dfs_pdev_obj_destroy_notification() - DFS pdev object delete handler.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
*/
|
||||
QDF_STATUS wlan_dfs_pdev_obj_destroy_notification(struct wlan_objmgr_pdev *pdev,
|
||||
void *arg);
|
||||
|
||||
/**
|
||||
* ucfg_dfs_is_ap_cac_timer_running() - Returns the dfs cac timer.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @is_ap_cac_timer_running: Pointer to save dfs_cac_timer_running value.
|
||||
*
|
||||
* Wrapper function for dfs_is_ap_cac_timer_running().
|
||||
* This function called from outside of dfs component.
|
||||
*/
|
||||
QDF_STATUS ucfg_dfs_is_ap_cac_timer_running(struct wlan_objmgr_pdev *pdev,
|
||||
int *is_ap_cac_timer_running);
|
||||
|
||||
/**
|
||||
* ucfg_dfs_getnol() - Wrapper function for dfs_get_nol()
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @dfs_nolinfo: Pointer to dfsreq_nolinfo structure.
|
||||
*
|
||||
* Wrapper function for dfs_getnol().
|
||||
* This function called from outside of dfs component.
|
||||
*/
|
||||
QDF_STATUS ucfg_dfs_getnol(struct wlan_objmgr_pdev *pdev, void *dfs_nolinfo);
|
||||
|
||||
/**
|
||||
* ucfg_dfs_override_cac_timeout() - Override the default CAC timeout.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @cac_timeout: CAC timeout value.
|
||||
*
|
||||
* Wrapper function for dfs_override_cac_timeout().
|
||||
* This function called from outside of dfs component.
|
||||
*/
|
||||
QDF_STATUS ucfg_dfs_override_cac_timeout(struct wlan_objmgr_pdev *pdev,
|
||||
int cac_timeout, int *status);
|
||||
|
||||
/**
|
||||
* ucfg_dfs_get_override_cac_timeout() - Get override CAC timeout value.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @cac_timeout: Pointer to save the CAC timeout value.
|
||||
*
|
||||
* Wrapper function for dfs_get_override_cac_timeout().
|
||||
* This function called from outside of dfs component.
|
||||
*/
|
||||
QDF_STATUS ucfg_dfs_get_override_cac_timeout(struct wlan_objmgr_pdev *pdev,
|
||||
int *cac_timeout, int *status);
|
||||
|
||||
/**
|
||||
* ucfg_dfs_get_override_precac_timeout() - Get precac timeout.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @precac_timeout: Get precac timeout value in this variable.
|
||||
*
|
||||
* Wrapper function for dfs_get_override_precac_timeout().
|
||||
* This function called from outside of dfs component.
|
||||
*/
|
||||
QDF_STATUS ucfg_dfs_get_override_precac_timeout(struct wlan_objmgr_pdev *pdev,
|
||||
int *precac_timeout);
|
||||
|
||||
/**
|
||||
* ucfg_dfs_override_precac_timeout() - Override the default precac timeout.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @precac_timeout: Precac timeout value.
|
||||
*
|
||||
* Wrapper function for dfs_override_precac_timeout().
|
||||
* This function called from outside of dfs component.
|
||||
*/
|
||||
QDF_STATUS ucfg_dfs_override_precac_timeout(struct wlan_objmgr_pdev *pdev,
|
||||
int precac_timeout);
|
||||
|
||||
/**
|
||||
* ucfg_dfs_set_precac_enable() - Set precac enable flag.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @value: input value for dfs_precac_enable flag.
|
||||
*
|
||||
* Wrapper function for dfs_set_precac_enable().
|
||||
* This function called from outside of dfs component.
|
||||
*/
|
||||
QDF_STATUS ucfg_dfs_set_precac_enable(struct wlan_objmgr_pdev *pdev,
|
||||
uint32_t value);
|
||||
|
||||
/**
|
||||
* ucfg_dfs_get_precac_enable() - Get precac enable flag.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @buff: Pointer to save precac_enable value.
|
||||
*
|
||||
* Wrapper function for dfs_get_precac_enable().
|
||||
* This function called from outside of dfs component.
|
||||
*/
|
||||
QDF_STATUS ucfg_dfs_get_precac_enable(struct wlan_objmgr_pdev *pdev, int *buff);
|
||||
|
||||
#endif /* _WLAN_DFS_UCFG_API_H_ */
|
287
umac/dfs/dispatcher/inc/wlan_dfs_utils_api.h
Normal file
287
umac/dfs/dispatcher/inc/wlan_dfs_utils_api.h
Normal file
@@ -0,0 +1,287 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2017 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DOC: This file has the DFS dispatcher API which is exposed to outside of DFS
|
||||
* component.
|
||||
*/
|
||||
|
||||
#ifndef _WLAN_DFS_UTILS_API_H_
|
||||
#define _WLAN_DFS_UTILS_API_H_
|
||||
|
||||
#include "wlan_dfs_ucfg_api.h"
|
||||
|
||||
extern struct dfs_to_mlme global_dfs_to_mlme;
|
||||
|
||||
/**
|
||||
* utils_nif_dfs_attach() - DFS attach function.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
*
|
||||
* Wrapper function for nif_dfs_attach(). This function called from outside of
|
||||
* DFS component.
|
||||
*/
|
||||
QDF_STATUS utils_nif_dfs_attach(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* utils_nif_dfs_detach() - DFS detach
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
*
|
||||
* Wrapper function for nif_dfs_detach(). This function called from outside of
|
||||
* DFS component.
|
||||
*/
|
||||
QDF_STATUS utils_nif_dfs_detach(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* utils_dfs_cac_valid_reset() - Cancels the dfs_cac_valid_timer timer.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @prevchan_ieee: Prevchan number.
|
||||
* @prevchan_flags: Prevchan flags.
|
||||
*
|
||||
* Wrapper function for dfs_cac_valid_reset(). This function called from
|
||||
* outside of DFS component.
|
||||
*/
|
||||
|
||||
QDF_STATUS utils_dfs_cac_valid_reset(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t prevchan_ieee,
|
||||
uint32_t prevchan_flags);
|
||||
|
||||
/**
|
||||
* utils_dfs_reset_precaclists() - Clears and initiakizes precac_required_list,
|
||||
* precac_done_list and precac_nol_list.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
*
|
||||
* Wrapper function for dfs_reset_precaclists(). This function called from
|
||||
* outside of DFS component.
|
||||
*/
|
||||
QDF_STATUS utils_dfs_reset_precaclists(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* utils_dfs_cancel_precac_timer() - Cancel the precac timer.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
*
|
||||
* wrapper function for dfs_cancel_precac_timer(). this function called from
|
||||
* outside of dfs component.
|
||||
*/
|
||||
QDF_STATUS utils_dfs_cancel_precac_timer(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* utils_dfs_is_precac_done() - Is precac done.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
*
|
||||
* wrapper function for dfs_is_precac_done(). this
|
||||
* function called from outside of dfs component.
|
||||
*/
|
||||
QDF_STATUS utils_dfs_is_precac_done(struct wlan_objmgr_pdev *pdev,
|
||||
bool *is_precac_done);
|
||||
|
||||
/**
|
||||
* utils_dfs_cancel_cac_timer() - Cancels the CAC timer.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
*
|
||||
* wrapper function for dfs_cancel_cac_timer(). this
|
||||
* function called from outside of dfs component.
|
||||
*/
|
||||
QDF_STATUS utils_dfs_cancel_cac_timer(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* utils_dfs_start_cac_timer() - Starts the CAC timer.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
*
|
||||
* wrapper function for dfs_start_cac_timer(). this
|
||||
* function called from outside of dfs component.
|
||||
*/
|
||||
QDF_STATUS utils_dfs_start_cac_timer(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* utils_dfs_cac_stop() - Clear the AP CAC timer.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
*
|
||||
* wrapper function for dfs_cac_stop(). this
|
||||
* function called from outside of dfs component.
|
||||
*/
|
||||
QDF_STATUS utils_dfs_cac_stop(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* utils_dfs_stacac_stop() - Clear the STA CAC timer.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
*
|
||||
* wrapper function for dfs_stacac_stop(). this
|
||||
* function called from outside of dfs component.
|
||||
*/
|
||||
QDF_STATUS utils_dfs_stacac_stop(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* utils_dfs_random_channel() - Function to choose the random channel from the
|
||||
* current channel list.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @is_select_nondfs: Select NON-DFS chan or both NON-DFS and DFS.
|
||||
* @skip_curchan: Select the next channel post radar detecr and skip the
|
||||
* curchan.
|
||||
* @target_channel: Pointer to target_channel.
|
||||
*
|
||||
* wrapper function for dfs_random_channel(). this
|
||||
* function called from outside of dfs component.
|
||||
*/
|
||||
QDF_STATUS utils_dfs_random_channel(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t is_select_nondfs,
|
||||
uint8_t skip_curchan,
|
||||
int *target_channel);
|
||||
|
||||
/**
|
||||
* utils_dfs_get_usenol() - Returns use_nol flag.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @usenol: Pointer to usenol value.
|
||||
*
|
||||
* wrapper function for dfs_get_usenol(). this
|
||||
* function called from outside of dfs component.
|
||||
*/
|
||||
QDF_STATUS utils_dfs_get_usenol(struct wlan_objmgr_pdev *pdev,
|
||||
uint16_t *usenol);
|
||||
|
||||
/**
|
||||
* utils_dfs_radar_disable() - Disables the radar.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
*
|
||||
* wrapper function for dfs_radar_disable(). this
|
||||
* function called from outside of dfs component.
|
||||
*/
|
||||
QDF_STATUS utils_dfs_radar_disable(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* utils_dfs_set_update_nol_flag() - Sets update_nol flag.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @val: update_nol flag.
|
||||
*
|
||||
* wrapper function for dfs_set_update_nol_flag(). this
|
||||
* function called from outside of dfs component.
|
||||
*/
|
||||
QDF_STATUS utils_dfs_set_update_nol_flag(struct wlan_objmgr_pdev *pdev,
|
||||
bool val);
|
||||
|
||||
/**
|
||||
* utils_dfs_get_update_nol_flag() - Returns update_nol flag.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @nol_flag: Fill nol_flag in this variable.
|
||||
*
|
||||
* wrapper function for dfs_get_update_nol_flag(). this
|
||||
* function called from outside of dfs component.
|
||||
*/
|
||||
QDF_STATUS utils_dfs_get_update_nol_flag(struct wlan_objmgr_pdev *pdev,
|
||||
bool *nol_flag);
|
||||
|
||||
/**
|
||||
* utils_dfs_get_rn_use_nol() - Get usenol.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @rn_use_nol: Pointer to rn_use_nol.
|
||||
*
|
||||
* wrapper function for dfs_get_rn_use_nol(). this
|
||||
* function called from outside of dfs component.
|
||||
*/
|
||||
QDF_STATUS utils_dfs_get_rn_use_nol(struct wlan_objmgr_pdev *pdev,
|
||||
int *rn_use_nol);
|
||||
|
||||
/**
|
||||
* utils_dfs_get_nol_timeout() - Get NOL timeout.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @dfs_nol_timeout: Pointer to dfs_nol_timeout.
|
||||
*
|
||||
* wrapper function for dfs_get_nol_timeout(). this
|
||||
* function called from outside of dfs component.
|
||||
*/
|
||||
QDF_STATUS utils_dfs_get_nol_timeout(struct wlan_objmgr_pdev *pdev,
|
||||
int *dfs_nol_timeout);
|
||||
|
||||
/**
|
||||
* utils_dfs_nol_addchan() - Add channel to NOL.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @chan: channel t o add NOL.
|
||||
* @dfs_nol_timeout: NOL timeout.
|
||||
*
|
||||
* wrapper function for dfs_nol_addchan(). this
|
||||
* function called from outside of dfs component.
|
||||
*/
|
||||
QDF_STATUS utils_dfs_nol_addchan(struct wlan_objmgr_pdev *pdev,
|
||||
uint16_t freq,
|
||||
uint32_t dfs_nol_timeout);
|
||||
|
||||
/**
|
||||
* utils_dfs_nol_update() - NOL update
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
*
|
||||
* wrapper function for dfs_nol_update(). this
|
||||
* function called from outside of dfs component.
|
||||
*/
|
||||
QDF_STATUS utils_dfs_nol_update(struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* utils_dfs_second_segment_radar_disable() - Disables the second segment radar.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
*
|
||||
* This is called when AP detects the radar, to (potentially) disable
|
||||
* the radar code.
|
||||
*/
|
||||
QDF_STATUS utils_dfs_second_segment_radar_disable(
|
||||
struct wlan_objmgr_pdev *pdev);
|
||||
|
||||
/**
|
||||
* utils_dfs_is_ignore_dfs() - Get Ignore DFS value.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @ignore_dfs: Fill ignore_dfs value in this variable.
|
||||
*/
|
||||
QDF_STATUS utils_dfs_is_ignore_dfs(struct wlan_objmgr_pdev *pdev,
|
||||
bool *ignore_dfs);
|
||||
|
||||
/**
|
||||
* utils_dfs_is_cac_valid() - Gets the value of is_cac_valid.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @is_cac_valid: Fill is_cac_valid in this variable.
|
||||
*/
|
||||
QDF_STATUS utils_dfs_is_cac_valid(struct wlan_objmgr_pdev *pdev,
|
||||
bool *is_cac_valid);
|
||||
|
||||
/**
|
||||
* utils_dfs_is_ignore_cac() - Gets the value of is_ignore_cac.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @ignore_cac: Fill ignore_cac value in this variable.
|
||||
*/
|
||||
QDF_STATUS utils_dfs_is_ignore_cac(struct wlan_objmgr_pdev *pdev,
|
||||
bool *ignore_cac);
|
||||
|
||||
/**
|
||||
* utils_dfs_set_cac_timer_running() - Sets the cac timer running.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @val: Set this value to dfs_cac_timer_running variable.
|
||||
*/
|
||||
QDF_STATUS utils_dfs_set_cac_timer_running(struct wlan_objmgr_pdev *pdev,
|
||||
int val);
|
||||
|
||||
/**
|
||||
* utils_dfs_get_nol_chfreq_and_chwidth() - Sets the cac timer running.
|
||||
* @pdev: Pointer to DFS pdev object.
|
||||
* @nollist: Pointer to NOL channel entry.
|
||||
* @nol_chfreq: Pointer to save channel frequency.
|
||||
* @nol_chwidth: Pointer to save channel width.
|
||||
* @index: Index into nol list.
|
||||
*/
|
||||
QDF_STATUS utils_dfs_get_nol_chfreq_and_chwidth(struct wlan_objmgr_pdev *pdev,
|
||||
void *nollist,
|
||||
uint32_t *nol_chfreq,
|
||||
uint32_t *nol_chwidth,
|
||||
int index);
|
||||
#endif /* _WLAN_DFS_UTILS_API_H_ */
|
198
umac/dfs/dispatcher/src/wlan_dfs_init_deinit_api.c
Normal file
198
umac/dfs/dispatcher/src/wlan_dfs_init_deinit_api.c
Normal file
@@ -0,0 +1,198 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2017 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DOC: This file init/deint functions for DFS module.
|
||||
*/
|
||||
|
||||
#include "wlan_dfs_ucfg_api.h"
|
||||
#ifndef QCA_MCL_DFS_SUPPORT
|
||||
#include "ieee80211_mlme_dfs_interface.h"
|
||||
#endif
|
||||
#include "wlan_objmgr_global_obj.h"
|
||||
#include "wlan_dfs_init_deinit_api.h"
|
||||
#include "../../core/src/dfs.h"
|
||||
|
||||
struct dfs_to_mlme global_dfs_to_mlme;
|
||||
|
||||
struct wlan_dfs *wlan_pdev_get_dfs_obj(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
dfs = wlan_objmgr_pdev_get_comp_private_obj(pdev,
|
||||
WLAN_UMAC_COMP_DFS);
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
return dfs;
|
||||
}
|
||||
|
||||
#ifndef QCA_MCL_DFS_SUPPORT
|
||||
void register_dfs_callbacks(void)
|
||||
{
|
||||
struct dfs_to_mlme *tmp_dfs_to_mlme = &global_dfs_to_mlme;
|
||||
|
||||
tmp_dfs_to_mlme->pdev_component_obj_attach =
|
||||
wlan_objmgr_pdev_component_obj_attach;
|
||||
tmp_dfs_to_mlme->pdev_component_obj_detach =
|
||||
wlan_objmgr_pdev_component_obj_detach;
|
||||
tmp_dfs_to_mlme->pdev_get_comp_private_obj =
|
||||
wlan_pdev_get_dfs_obj;
|
||||
|
||||
tmp_dfs_to_mlme->dfs_channel_mark_radar = mlme_dfs_channel_mark_radar;
|
||||
tmp_dfs_to_mlme->dfs_start_rcsa = mlme_dfs_start_rcsa;
|
||||
tmp_dfs_to_mlme->mlme_mark_dfs = mlme_dfs_mark_dfs;
|
||||
tmp_dfs_to_mlme->mlme_start_csa = mlme_dfs_start_csa;
|
||||
tmp_dfs_to_mlme->mlme_proc_cac = mlme_dfs_proc_cac;
|
||||
tmp_dfs_to_mlme->mlme_deliver_event_up_afrer_cac =
|
||||
mlme_dfs_deliver_event_up_afrer_cac;
|
||||
tmp_dfs_to_mlme->mlme_get_ic_nchans = mlme_dfs_get_ic_nchans;
|
||||
tmp_dfs_to_mlme->mlme_get_ic_no_weather_radar_chan =
|
||||
mlme_dfs_get_ic_no_weather_radar_chan;
|
||||
tmp_dfs_to_mlme->mlme_find_alternate_mode_channel =
|
||||
mlme_dfs_find_alternate_mode_channel;
|
||||
tmp_dfs_to_mlme->mlme_find_any_valid_channel =
|
||||
mlme_dfs_find_any_valid_channel;
|
||||
tmp_dfs_to_mlme->mlme_get_extchan = mlme_dfs_get_extchan;
|
||||
tmp_dfs_to_mlme->mlme_set_no_chans_available =
|
||||
mlme_dfs_set_no_chans_available;
|
||||
tmp_dfs_to_mlme->mlme_ieee2mhz = mlme_dfs_ieee2mhz;
|
||||
tmp_dfs_to_mlme->mlme_find_dot11_channel = mlme_dfs_find_dot11_channel;
|
||||
tmp_dfs_to_mlme->mlme_get_ic_channels = mlme_dfs_get_ic_channels;
|
||||
tmp_dfs_to_mlme->mlme_ic_flags_ext = mlme_dfs_ic_flags_ext;
|
||||
tmp_dfs_to_mlme->mlme_channel_change_by_precac =
|
||||
mlme_dfs_channel_change_by_precac;
|
||||
tmp_dfs_to_mlme->mlme_nol_timeout_notification =
|
||||
mlme_dfs_nol_timeout_notification;
|
||||
tmp_dfs_to_mlme->mlme_clist_update = mlme_dfs_clist_update;
|
||||
tmp_dfs_to_mlme->mlme_get_cac_timeout = mlme_dfs_get_cac_timeout;
|
||||
}
|
||||
#else
|
||||
void register_dfs_callbacks(void)
|
||||
{
|
||||
struct dfs_to_mlme *tmp_dfs_to_mlme = &global_dfs_to_mlme;
|
||||
|
||||
tmp_dfs_to_mlme->pdev_component_obj_attach =
|
||||
wlan_objmgr_pdev_component_obj_attach;
|
||||
tmp_dfs_to_mlme->pdev_component_obj_detach =
|
||||
wlan_objmgr_pdev_component_obj_detach;
|
||||
tmp_dfs_to_mlme->pdev_get_comp_private_obj =
|
||||
wlan_pdev_get_dfs_obj;
|
||||
}
|
||||
#endif
|
||||
|
||||
QDF_STATUS dfs_init(void)
|
||||
{
|
||||
register_dfs_callbacks();
|
||||
|
||||
if (wlan_objmgr_register_pdev_create_handler(WLAN_UMAC_COMP_DFS,
|
||||
wlan_dfs_pdev_obj_create_notification,
|
||||
NULL)
|
||||
!= QDF_STATUS_SUCCESS) {
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
if (wlan_objmgr_register_pdev_destroy_handler(WLAN_UMAC_COMP_DFS,
|
||||
wlan_dfs_pdev_obj_destroy_notification,
|
||||
NULL)
|
||||
!= QDF_STATUS_SUCCESS) {
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS dfs_deinit(void)
|
||||
{
|
||||
if (wlan_objmgr_unregister_pdev_create_handler(WLAN_UMAC_COMP_DFS,
|
||||
wlan_dfs_pdev_obj_create_notification,
|
||||
NULL)
|
||||
!= QDF_STATUS_SUCCESS) {
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
if (wlan_objmgr_unregister_pdev_destroy_handler(WLAN_UMAC_COMP_DFS,
|
||||
wlan_dfs_pdev_obj_destroy_notification,
|
||||
NULL)
|
||||
!= QDF_STATUS_SUCCESS) {
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS wlan_dfs_pdev_obj_create_notification(struct wlan_objmgr_pdev *pdev,
|
||||
void *arg)
|
||||
{
|
||||
struct wlan_dfs *dfs = NULL;
|
||||
|
||||
if (pdev == NULL) {
|
||||
DFS_PRINTK("%s:PDEV is NULL\n", __func__);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
if (dfs_create_object(&dfs) == 1) {
|
||||
DFS_PRINTK("%s : Failed to create DFS object\n", __func__);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
global_dfs_to_mlme.pdev_component_obj_attach(pdev,
|
||||
WLAN_UMAC_COMP_DFS,
|
||||
(void *)dfs,
|
||||
QDF_STATUS_SUCCESS);
|
||||
dfs->dfs_pdev_obj = pdev;
|
||||
|
||||
/* wlan_ar_ops are assigned to sc_wlan_ops in wlan_dev_attach.
|
||||
* This function is called during module init.
|
||||
* and wlan_dev_attach is called during wlan_attach.
|
||||
* If we call dfs_attach here, seen crash in wlan_net80211_attach_dfs.
|
||||
*/
|
||||
if (dfs_attach(dfs) == 1) {
|
||||
DFS_PRINTK("%s : dfs_attch failed\n", __func__);
|
||||
dfs_destroy_object(dfs);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
dfs_get_radars(dfs);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS wlan_dfs_pdev_obj_destroy_notification(struct wlan_objmgr_pdev *pdev,
|
||||
void *arg)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
if (pdev == NULL) {
|
||||
DFS_PRINTK("%s:PDEV is NULL\n", __func__);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
dfs = wlan_pdev_get_dfs_obj(pdev);
|
||||
|
||||
/* DFS is NULL during unload. should we call this function before */
|
||||
if (dfs != NULL) {
|
||||
global_dfs_to_mlme.pdev_component_obj_detach(pdev,
|
||||
WLAN_UMAC_COMP_DFS,
|
||||
(void *)dfs);
|
||||
|
||||
dfs->dfs_pdev_obj = NULL;
|
||||
dfs_destroy_object(dfs);
|
||||
}
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
306
umac/dfs/dispatcher/src/wlan_dfs_lmac_api.c
Normal file
306
umac/dfs/dispatcher/src/wlan_dfs_lmac_api.c
Normal file
@@ -0,0 +1,306 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2017 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DOC: Functions to call lmac/offload functions from DFS component.
|
||||
*/
|
||||
|
||||
#include "wlan_dfs_lmac_api.h"
|
||||
#include "../../core/src/dfs_internal.h"
|
||||
|
||||
void lmac_get_caps(struct wlan_objmgr_pdev *pdev,
|
||||
bool *ext_chan,
|
||||
bool *combined_rssi,
|
||||
bool *use_enhancement,
|
||||
bool *strong_signal_diversiry,
|
||||
bool *chip_is_bb_tlv,
|
||||
bool *chip_is_over_sampled,
|
||||
bool *chip_is_ht160,
|
||||
bool *chip_is_false_detect,
|
||||
uint32_t *fastdiv_val)
|
||||
{
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct wlan_lmac_if_dfs_tx_ops *dfs_tx_ops;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
psoc = wlan_pdev_get_psoc(pdev);
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
dfs_tx_ops = &psoc->soc_cb.tx_ops.dfs_tx_ops;
|
||||
|
||||
dfs_tx_ops->dfs_get_caps(pdev,
|
||||
ext_chan,
|
||||
combined_rssi,
|
||||
use_enhancement,
|
||||
strong_signal_diversiry,
|
||||
chip_is_bb_tlv,
|
||||
chip_is_over_sampled,
|
||||
chip_is_ht160,
|
||||
chip_is_false_detect,
|
||||
fastdiv_val);
|
||||
}
|
||||
|
||||
uint64_t lmac_get_tsf64(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct wlan_lmac_if_dfs_tx_ops *dfs_tx_ops;
|
||||
uint64_t tsf64 = 0;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
psoc = wlan_pdev_get_psoc(pdev);
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
dfs_tx_ops = &psoc->soc_cb.tx_ops.dfs_tx_ops;
|
||||
|
||||
dfs_tx_ops->dfs_gettsf64(pdev, &tsf64);
|
||||
|
||||
return tsf64;
|
||||
}
|
||||
|
||||
void lmac_dfs_disable(struct wlan_objmgr_pdev *pdev, int no_cac)
|
||||
{
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct wlan_lmac_if_dfs_tx_ops *dfs_tx_ops;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
psoc = wlan_pdev_get_psoc(pdev);
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
dfs_tx_ops = &psoc->soc_cb.tx_ops.dfs_tx_ops;
|
||||
|
||||
if (dfs_tx_ops->dfs_disable)
|
||||
dfs_tx_ops->dfs_disable(pdev, no_cac);
|
||||
}
|
||||
|
||||
int lmac_get_dfsdomain(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct wlan_lmac_if_dfs_tx_ops *dfs_tx_ops;
|
||||
int dfsdomain = DFS_FCC_DOMAIN;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
psoc = wlan_pdev_get_psoc(pdev);
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
dfs_tx_ops = &psoc->soc_cb.tx_ops.dfs_tx_ops;
|
||||
|
||||
dfs_tx_ops->dfs_get_dfsdomain(pdev, &dfsdomain);
|
||||
|
||||
return dfsdomain;
|
||||
}
|
||||
|
||||
void lmac_dfs_enable(struct wlan_objmgr_pdev *pdev,
|
||||
int *is_fastclk,
|
||||
int32_t pe_firpwr,
|
||||
int32_t pe_rrssi,
|
||||
int32_t pe_height,
|
||||
int32_t pe_prssi,
|
||||
int32_t pe_inband,
|
||||
uint32_t pe_relpwr,
|
||||
uint32_t pe_relstep,
|
||||
uint32_t pe_maxlen,
|
||||
int dfsdomain)
|
||||
{
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct wlan_lmac_if_dfs_tx_ops *dfs_tx_ops;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
psoc = wlan_pdev_get_psoc(pdev);
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
dfs_tx_ops = &psoc->soc_cb.tx_ops.dfs_tx_ops;
|
||||
|
||||
dfs_tx_ops->dfs_enable(pdev,
|
||||
is_fastclk,
|
||||
pe_firpwr,
|
||||
pe_rrssi,
|
||||
pe_height,
|
||||
pe_prssi,
|
||||
pe_inband,
|
||||
pe_relpwr,
|
||||
pe_relstep,
|
||||
pe_maxlen,
|
||||
dfsdomain);
|
||||
}
|
||||
|
||||
void lmac_dfs_get_thresholds(struct wlan_objmgr_pdev *pdev,
|
||||
int32_t *pe_firpwr,
|
||||
int32_t *pe_rrssi,
|
||||
int32_t *pe_height,
|
||||
int32_t *pe_prssi,
|
||||
int32_t *pe_inband,
|
||||
uint32_t *pe_relpwr,
|
||||
uint32_t *pe_relstep,
|
||||
uint32_t *pe_maxlen)
|
||||
{
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct wlan_lmac_if_dfs_tx_ops *dfs_tx_ops;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
psoc = wlan_pdev_get_psoc(pdev);
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
dfs_tx_ops = &psoc->soc_cb.tx_ops.dfs_tx_ops;
|
||||
|
||||
dfs_tx_ops->dfs_get_thresholds(pdev,
|
||||
pe_firpwr,
|
||||
pe_rrssi,
|
||||
pe_height,
|
||||
pe_prssi,
|
||||
pe_inband,
|
||||
pe_relpwr,
|
||||
pe_relstep,
|
||||
pe_maxlen);
|
||||
}
|
||||
|
||||
bool lmac_is_mode_offload(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct wlan_lmac_if_dfs_tx_ops *dfs_tx_ops;
|
||||
bool is_offload = false;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
psoc = wlan_pdev_get_psoc(pdev);
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
dfs_tx_ops = &psoc->soc_cb.tx_ops.dfs_tx_ops;
|
||||
|
||||
dfs_tx_ops->dfs_is_mode_offload(pdev, &is_offload);
|
||||
|
||||
return is_offload;
|
||||
}
|
||||
|
||||
uint16_t lmac_get_ah_devid(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct wlan_lmac_if_dfs_tx_ops *dfs_tx_ops;
|
||||
uint16_t devid = 0;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
psoc = wlan_pdev_get_psoc(pdev);
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
dfs_tx_ops = &psoc->soc_cb.tx_ops.dfs_tx_ops;
|
||||
|
||||
dfs_tx_ops->dfs_get_ah_devid(pdev, &devid);
|
||||
|
||||
return devid;
|
||||
}
|
||||
|
||||
uint32_t lmac_get_ext_busy(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct wlan_lmac_if_dfs_tx_ops *dfs_tx_ops;
|
||||
uint32_t ext_chan_busy = 0;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
psoc = wlan_pdev_get_psoc(pdev);
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
dfs_tx_ops = &psoc->soc_cb.tx_ops.dfs_tx_ops;
|
||||
|
||||
dfs_tx_ops->dfs_get_ext_busy(pdev, &ext_chan_busy);
|
||||
|
||||
return ext_chan_busy;
|
||||
}
|
||||
|
||||
bool lmac_is_countryCode_KOREA_ROC3(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct wlan_lmac_if_dfs_tx_ops *dfs_tx_ops;
|
||||
bool ctry_korea = false;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
psoc = wlan_pdev_get_psoc(pdev);
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
dfs_tx_ops = &psoc->soc_cb.tx_ops.dfs_tx_ops;
|
||||
|
||||
dfs_tx_ops->dfs_is_countryCode_KOREA_ROC3(pdev,
|
||||
&ctry_korea);
|
||||
|
||||
return ctry_korea;
|
||||
|
||||
}
|
||||
|
||||
void lmac_set_use_cac_prssi(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct wlan_lmac_if_dfs_tx_ops *dfs_tx_ops;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
psoc = wlan_pdev_get_psoc(pdev);
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
dfs_tx_ops = &psoc->soc_cb.tx_ops.dfs_tx_ops;
|
||||
|
||||
dfs_tx_ops->dfs_set_use_cac_prssi(pdev);
|
||||
}
|
||||
|
||||
uint32_t lmac_get_target_type(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct wlan_lmac_if_dfs_tx_ops *dfs_tx_ops;
|
||||
uint32_t target_type = 0;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
psoc = wlan_pdev_get_psoc(pdev);
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
dfs_tx_ops = &psoc->soc_cb.tx_ops.dfs_tx_ops;
|
||||
|
||||
dfs_tx_ops->dfs_get_target_type(pdev, &target_type);
|
||||
|
||||
return target_type;
|
||||
}
|
||||
|
||||
bool lmac_is_countryCode_CHINA(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct wlan_lmac_if_dfs_tx_ops *dfs_tx_ops;
|
||||
bool country_china = false;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
psoc = wlan_pdev_get_psoc(pdev);
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
dfs_tx_ops = &psoc->soc_cb.tx_ops.dfs_tx_ops;
|
||||
|
||||
dfs_tx_ops->dfs_is_countryCode_CHINA(pdev, &country_china);
|
||||
|
||||
return country_china;
|
||||
}
|
||||
|
||||
uint32_t lmac_get_phymode_info(struct wlan_objmgr_pdev *pdev,
|
||||
uint32_t chan_mode)
|
||||
{
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct wlan_lmac_if_dfs_tx_ops *dfs_tx_ops;
|
||||
uint32_t mode_info = 0;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
psoc = wlan_pdev_get_psoc(pdev);
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
dfs_tx_ops = &psoc->soc_cb.tx_ops.dfs_tx_ops;
|
||||
|
||||
dfs_tx_ops->dfs_get_phymode_info(pdev, chan_mode, &mode_info);
|
||||
|
||||
return mode_info;
|
||||
}
|
254
umac/dfs/dispatcher/src/wlan_dfs_mlme_api.c
Normal file
254
umac/dfs/dispatcher/src/wlan_dfs_mlme_api.c
Normal file
@@ -0,0 +1,254 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2017 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DOC: Functions to call mlme functions from DFS component.
|
||||
*/
|
||||
|
||||
#include "wlan_dfs_mlme_api.h"
|
||||
|
||||
void dfs_mlme_channel_mark_radar(struct wlan_objmgr_pdev *pdev,
|
||||
uint16_t freq,
|
||||
uint8_t vhtop_ch_freq_seg2,
|
||||
uint32_t flags)
|
||||
{
|
||||
if (global_dfs_to_mlme.dfs_channel_mark_radar != NULL)
|
||||
global_dfs_to_mlme.dfs_channel_mark_radar(pdev,
|
||||
freq,
|
||||
vhtop_ch_freq_seg2,
|
||||
flags);
|
||||
}
|
||||
|
||||
void dfs_mlme_start_rcsa(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
if (global_dfs_to_mlme.dfs_start_rcsa != NULL)
|
||||
global_dfs_to_mlme.dfs_start_rcsa(pdev);
|
||||
}
|
||||
|
||||
void dfs_mlme_mark_dfs(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t ieee,
|
||||
uint16_t freq,
|
||||
uint8_t vhtop_ch_freq_seg2,
|
||||
uint32_t flags)
|
||||
{
|
||||
if (global_dfs_to_mlme.mlme_mark_dfs != NULL)
|
||||
global_dfs_to_mlme.mlme_mark_dfs(pdev,
|
||||
ieee,
|
||||
freq,
|
||||
vhtop_ch_freq_seg2,
|
||||
flags);
|
||||
}
|
||||
|
||||
void dfs_mlme_start_csa(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t ieeeChan)
|
||||
{
|
||||
if (global_dfs_to_mlme.mlme_start_csa != NULL)
|
||||
global_dfs_to_mlme.mlme_start_csa(pdev, ieeeChan);
|
||||
}
|
||||
|
||||
void dfs_mlme_proc_cac(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
if (global_dfs_to_mlme.mlme_proc_cac != NULL)
|
||||
global_dfs_to_mlme.mlme_proc_cac(pdev);
|
||||
}
|
||||
|
||||
void dfs_mlme_deliver_event_up_afrer_cac(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
if (global_dfs_to_mlme.mlme_deliver_event_up_afrer_cac != NULL)
|
||||
global_dfs_to_mlme.mlme_deliver_event_up_afrer_cac(
|
||||
pdev);
|
||||
}
|
||||
|
||||
void dfs_mlme_get_ic_nchans(struct wlan_objmgr_pdev *pdev,
|
||||
int *nchans)
|
||||
{
|
||||
if (global_dfs_to_mlme.mlme_get_ic_nchans != NULL)
|
||||
global_dfs_to_mlme.mlme_get_ic_nchans(pdev,
|
||||
nchans);
|
||||
}
|
||||
|
||||
void dfs_mlme_get_ic_no_weather_radar_chan(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t *no_wradar)
|
||||
{
|
||||
if (global_dfs_to_mlme.mlme_get_ic_no_weather_radar_chan != NULL)
|
||||
global_dfs_to_mlme.mlme_get_ic_no_weather_radar_chan(
|
||||
pdev,
|
||||
no_wradar);
|
||||
}
|
||||
|
||||
int dfs_mlme_find_alternate_mode_channel(struct wlan_objmgr_pdev *pdev,
|
||||
uint32_t alt_chan_mode,
|
||||
int chan_count)
|
||||
{
|
||||
int ret_val = 0;
|
||||
|
||||
if (global_dfs_to_mlme.mlme_find_alternate_mode_channel != NULL)
|
||||
global_dfs_to_mlme.mlme_find_alternate_mode_channel(
|
||||
pdev,
|
||||
alt_chan_mode, chan_count, &ret_val);
|
||||
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
void dfs_mlme_find_any_valid_channel(struct wlan_objmgr_pdev *pdev,
|
||||
uint32_t chan_mode,
|
||||
int *ret_val)
|
||||
{
|
||||
if (global_dfs_to_mlme.mlme_find_any_valid_channel != NULL)
|
||||
global_dfs_to_mlme.mlme_find_any_valid_channel(
|
||||
pdev,
|
||||
chan_mode,
|
||||
ret_val);
|
||||
}
|
||||
|
||||
void dfs_mlme_get_extchan(struct wlan_objmgr_pdev *pdev,
|
||||
uint16_t *ic_freq,
|
||||
uint32_t *ic_flags,
|
||||
uint16_t *ic_flagext,
|
||||
uint8_t *ic_ieee,
|
||||
uint8_t *ic_vhtop_ch_freq_seg1,
|
||||
uint8_t *ic_vhtop_ch_freq_seg2)
|
||||
{
|
||||
if (global_dfs_to_mlme.mlme_get_extchan != NULL)
|
||||
global_dfs_to_mlme.mlme_get_extchan(pdev,
|
||||
ic_freq,
|
||||
ic_flags,
|
||||
ic_flagext,
|
||||
ic_ieee,
|
||||
ic_vhtop_ch_freq_seg1,
|
||||
ic_vhtop_ch_freq_seg2);
|
||||
}
|
||||
|
||||
void dfs_mlme_set_no_chans_available(struct wlan_objmgr_pdev *pdev,
|
||||
int val)
|
||||
{
|
||||
if (global_dfs_to_mlme.mlme_set_no_chans_available != NULL)
|
||||
global_dfs_to_mlme.mlme_set_no_chans_available(
|
||||
pdev,
|
||||
val);
|
||||
}
|
||||
|
||||
int dfs_mlme_ieee2mhz(struct wlan_objmgr_pdev *pdev, int ieee, int flag)
|
||||
{
|
||||
int freq = 0;
|
||||
|
||||
if (global_dfs_to_mlme.mlme_ieee2mhz != NULL)
|
||||
global_dfs_to_mlme.mlme_ieee2mhz(pdev,
|
||||
ieee,
|
||||
flag,
|
||||
&freq);
|
||||
|
||||
return freq;
|
||||
}
|
||||
|
||||
void dfs_mlme_find_dot11_channel(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t ieee,
|
||||
uint8_t des_cfreq2,
|
||||
int mode,
|
||||
uint16_t *ic_freq,
|
||||
uint32_t *ic_flags,
|
||||
uint16_t *ic_flagext,
|
||||
uint8_t *ic_ieee,
|
||||
uint8_t *ic_vhtop_ch_freq_seg1,
|
||||
uint8_t *ic_vhtop_ch_freq_seg2)
|
||||
{
|
||||
if (global_dfs_to_mlme.mlme_find_dot11_channel != NULL)
|
||||
global_dfs_to_mlme.mlme_find_dot11_channel(pdev,
|
||||
ieee,
|
||||
des_cfreq2,
|
||||
mode,
|
||||
ic_freq,
|
||||
ic_flags,
|
||||
ic_flagext,
|
||||
ic_ieee,
|
||||
ic_vhtop_ch_freq_seg1,
|
||||
ic_vhtop_ch_freq_seg2);
|
||||
}
|
||||
|
||||
void dfs_mlme_get_ic_channels(struct wlan_objmgr_pdev *pdev,
|
||||
uint16_t *ic_freq,
|
||||
uint32_t *ic_flags,
|
||||
uint16_t *ic_flagext,
|
||||
uint8_t *ic_ieee,
|
||||
uint8_t *ic_vhtop_ch_freq_seg1,
|
||||
uint8_t *ic_vhtop_ch_freq_seg2,
|
||||
int index)
|
||||
{
|
||||
if (global_dfs_to_mlme.mlme_get_ic_channels != NULL)
|
||||
global_dfs_to_mlme.mlme_get_ic_channels(pdev,
|
||||
ic_freq,
|
||||
ic_flags,
|
||||
ic_flagext,
|
||||
ic_ieee,
|
||||
ic_vhtop_ch_freq_seg1,
|
||||
ic_vhtop_ch_freq_seg2,
|
||||
index);
|
||||
}
|
||||
|
||||
uint32_t dfs_mlme_ic_flags_ext(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
uint32_t flag_ext = 0;
|
||||
|
||||
if (global_dfs_to_mlme.mlme_ic_flags_ext != NULL)
|
||||
global_dfs_to_mlme.mlme_ic_flags_ext(pdev,
|
||||
&flag_ext);
|
||||
|
||||
return flag_ext;
|
||||
}
|
||||
|
||||
void dfs_mlme_channel_change_by_precac(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
if (global_dfs_to_mlme.mlme_channel_change_by_precac != NULL)
|
||||
global_dfs_to_mlme.mlme_channel_change_by_precac(
|
||||
pdev);
|
||||
}
|
||||
|
||||
void dfs_mlme_nol_timeout_notification(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
if (global_dfs_to_mlme.mlme_nol_timeout_notification != NULL)
|
||||
global_dfs_to_mlme.mlme_nol_timeout_notification(
|
||||
pdev);
|
||||
}
|
||||
|
||||
void dfs_mlme_clist_update(struct wlan_objmgr_pdev *pdev,
|
||||
void *nollist,
|
||||
int nentries)
|
||||
{
|
||||
if (global_dfs_to_mlme.mlme_clist_update != NULL)
|
||||
global_dfs_to_mlme.mlme_clist_update(pdev,
|
||||
nollist,
|
||||
nentries);
|
||||
}
|
||||
|
||||
int dfs_mlme_get_cac_timeout(struct wlan_objmgr_pdev *pdev,
|
||||
uint16_t ic_freq,
|
||||
uint8_t ic_vhtop_ch_freq_seg2,
|
||||
uint32_t ic_flags)
|
||||
{
|
||||
int cac_timeout = 0;
|
||||
|
||||
if (global_dfs_to_mlme.mlme_get_cac_timeout != NULL)
|
||||
global_dfs_to_mlme.mlme_get_cac_timeout(pdev,
|
||||
ic_freq,
|
||||
ic_vhtop_ch_freq_seg2,
|
||||
ic_flags,
|
||||
&cac_timeout);
|
||||
|
||||
return cac_timeout;
|
||||
}
|
226
umac/dfs/dispatcher/src/wlan_dfs_tgt_api.c
Normal file
226
umac/dfs/dispatcher/src/wlan_dfs_tgt_api.c
Normal file
@@ -0,0 +1,226 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2017 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DOC: This file has the DFS dispatcher API implementation which is exposed
|
||||
* to outside of DFS component.
|
||||
*/
|
||||
#include "wlan_dfs_tgt_api.h"
|
||||
#include "../../core/src/dfs.h"
|
||||
#include "../../core/src/dfs_zero_cac.h"
|
||||
|
||||
QDF_STATUS tgt_dfs_set_current_channel(struct wlan_objmgr_pdev *pdev,
|
||||
uint16_t ic_freq,
|
||||
uint32_t ic_flags,
|
||||
uint16_t ic_flagext,
|
||||
uint8_t ic_ieee,
|
||||
uint8_t ic_vhtop_ch_freq_seg1,
|
||||
uint8_t ic_vhtop_ch_freq_seg2)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
dfs_set_current_channel(dfs, ic_freq, ic_flags, ic_flagext, ic_ieee,
|
||||
ic_vhtop_ch_freq_seg1, ic_vhtop_ch_freq_seg2);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(tgt_dfs_set_current_channel);
|
||||
|
||||
QDF_STATUS tgt_dfs_reset(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
dfs_reset(dfs);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(tgt_dfs_reset);
|
||||
|
||||
QDF_STATUS tgt_dfs_radar_enable(struct wlan_objmgr_pdev *pdev,
|
||||
int no_cac, uint32_t opmode)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
dfs_radar_enable(dfs, no_cac, opmode);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(tgt_dfs_radar_enable);
|
||||
|
||||
QDF_STATUS tgt_dfs_process_phyerr(struct wlan_objmgr_pdev *pdev,
|
||||
void *buf,
|
||||
uint16_t datalen,
|
||||
uint8_t r_rssi,
|
||||
uint8_t r_ext_rssi,
|
||||
uint32_t r_rs_tstamp,
|
||||
uint64_t r_fulltsf)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
dfs_process_phyerr(dfs, buf, datalen, r_rssi, r_ext_rssi, r_rs_tstamp,
|
||||
r_fulltsf);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(tgt_dfs_process_phyerr);
|
||||
|
||||
QDF_STATUS tgt_dfs_is_precac_timer_running(struct wlan_objmgr_pdev *pdev,
|
||||
bool *is_precac_timer_running)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
*is_precac_timer_running = dfs_is_precac_timer_running(dfs);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(tgt_dfs_is_precac_timer_running);
|
||||
|
||||
QDF_STATUS tgt_dfs_get_radars(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
dfs_get_radars(dfs);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(tgt_dfs_get_radars);
|
||||
|
||||
QDF_STATUS tgt_dfs_attach(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
return dfs_attach(dfs);
|
||||
}
|
||||
EXPORT_SYMBOL(tgt_dfs_attach);
|
||||
|
||||
QDF_STATUS tgt_dfs_destroy_object(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
dfs_destroy_object(dfs);
|
||||
dfs = NULL;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(tgt_dfs_destroy_object);
|
||||
|
||||
QDF_STATUS tgt_nif_dfs_reset(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
nif_dfs_reset(dfs);
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(tgt_nif_dfs_reset);
|
||||
|
||||
QDF_STATUS tgt_sif_dfs_detach(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
sif_dfs_detach(dfs);
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS tgt_dfs_control(struct wlan_objmgr_pdev *pdev,
|
||||
u_int id,
|
||||
void *indata,
|
||||
uint32_t insize,
|
||||
void *outdata,
|
||||
uint32_t *outsize,
|
||||
int *error)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
*error = dfs_control(dfs, id, indata, insize, outdata, outsize);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(tgt_dfs_control);
|
||||
|
||||
QDF_STATUS tgt_dfs_find_vht80_chan_for_precac(struct wlan_objmgr_pdev *pdev,
|
||||
uint32_t chan_mode,
|
||||
uint8_t ch_freq_seg1,
|
||||
uint32_t *cfreq1,
|
||||
uint32_t *cfreq2,
|
||||
uint32_t *phy_mode,
|
||||
bool *dfs_set_cfreq2,
|
||||
bool *set_agile)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
dfs_find_vht80_chan_for_precac(dfs,
|
||||
chan_mode,
|
||||
ch_freq_seg1,
|
||||
cfreq1,
|
||||
cfreq2,
|
||||
phy_mode,
|
||||
dfs_set_cfreq2,
|
||||
set_agile);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(tgt_dfs_find_vht80_chan_for_precac);
|
149
umac/dfs/dispatcher/src/wlan_dfs_ucfg_api.c
Normal file
149
umac/dfs/dispatcher/src/wlan_dfs_ucfg_api.c
Normal file
@@ -0,0 +1,149 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2017 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DOC: This file has the DFS dispatcher API implementation which is exposed
|
||||
* to outside of DFS component.
|
||||
*/
|
||||
|
||||
#include "wlan_dfs_ucfg_api.h"
|
||||
#include "../../core/src/dfs.h"
|
||||
#include "../../core/src/dfs_zero_cac.h"
|
||||
|
||||
QDF_STATUS ucfg_dfs_is_ap_cac_timer_running(struct wlan_objmgr_pdev *pdev,
|
||||
int *is_ap_cac_timer_running)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
*is_ap_cac_timer_running = dfs_is_ap_cac_timer_running(dfs);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(ucfg_dfs_is_ap_cac_timer_running);
|
||||
|
||||
QDF_STATUS ucfg_dfs_getnol(struct wlan_objmgr_pdev *pdev,
|
||||
void *dfs_nolinfo)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
dfs_getnol(dfs, dfs_nolinfo);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(ucfg_dfs_getnol);
|
||||
|
||||
QDF_STATUS ucfg_dfs_override_cac_timeout(struct wlan_objmgr_pdev *pdev,
|
||||
int cac_timeout,
|
||||
int *status)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
*status = dfs_override_cac_timeout(dfs, cac_timeout);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(ucfg_dfs_override_cac_timeout);
|
||||
|
||||
QDF_STATUS ucfg_dfs_get_override_cac_timeout(struct wlan_objmgr_pdev *pdev,
|
||||
int *cac_timeout,
|
||||
int *status)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
*status = dfs_get_override_cac_timeout(dfs, cac_timeout);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(ucfg_dfs_get_override_cac_timeout);
|
||||
|
||||
QDF_STATUS ucfg_dfs_get_override_precac_timeout(struct wlan_objmgr_pdev *pdev,
|
||||
int *precac_timeout)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
dfs_get_override_precac_timeout(dfs, precac_timeout);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(ucfg_dfs_get_override_precac_timeout);
|
||||
|
||||
QDF_STATUS ucfg_dfs_override_precac_timeout(struct wlan_objmgr_pdev *pdev,
|
||||
int precac_timeout)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
dfs_override_precac_timeout(dfs, precac_timeout);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(ucfg_dfs_override_precac_timeout);
|
||||
|
||||
QDF_STATUS ucfg_dfs_set_precac_enable(struct wlan_objmgr_pdev *pdev,
|
||||
uint32_t value)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
dfs_set_precac_enable(dfs, value);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(ucfg_dfs_set_precac_enable);
|
||||
|
||||
QDF_STATUS ucfg_dfs_get_precac_enable(struct wlan_objmgr_pdev *pdev,
|
||||
int *buff)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
*buff = dfs_get_precac_enable(dfs);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(ucfg_dfs_get_precac_enable);
|
397
umac/dfs/dispatcher/src/wlan_dfs_utils_api.c
Normal file
397
umac/dfs/dispatcher/src/wlan_dfs_utils_api.c
Normal file
@@ -0,0 +1,397 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2017 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DOC: This file has the DFS dispatcher API implementation which is exposed
|
||||
* to outside of DFS component.
|
||||
*/
|
||||
#include "wlan_dfs_utils_api.h"
|
||||
#include "../../core/src/dfs.h"
|
||||
#include "../../core/src/dfs_zero_cac.h"
|
||||
|
||||
QDF_STATUS utils_nif_dfs_attach(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
nif_dfs_attach(dfs);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(utils_nif_dfs_attach);
|
||||
|
||||
QDF_STATUS utils_nif_dfs_detach(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
nif_dfs_detach(dfs);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(utils_nif_dfs_detach);
|
||||
|
||||
QDF_STATUS utils_dfs_cac_valid_reset(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t prevchan_ieee,
|
||||
uint32_t prevchan_flags)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
dfs_cac_valid_reset(dfs, prevchan_ieee, prevchan_flags);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(utils_dfs_cac_valid_reset);
|
||||
|
||||
QDF_STATUS utils_dfs_reset_precaclists(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
dfs_reset_precaclists(dfs);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(utils_dfs_reset_precaclists);
|
||||
|
||||
QDF_STATUS utils_dfs_cancel_precac_timer(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
dfs_cancel_precac_timer(dfs);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(utils_dfs_cancel_precac_timer);
|
||||
|
||||
QDF_STATUS utils_dfs_is_precac_done(struct wlan_objmgr_pdev *pdev,
|
||||
bool *is_precac_done)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
*is_precac_done = dfs_is_precac_done(dfs);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(utils_dfs_is_precac_done);
|
||||
|
||||
QDF_STATUS utils_dfs_cancel_cac_timer(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
dfs_cancel_cac_timer(dfs);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(utils_dfs_cancel_cac_timer);
|
||||
|
||||
QDF_STATUS utils_dfs_start_cac_timer(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
dfs_start_cac_timer(dfs);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(utils_dfs_start_cac_timer);
|
||||
|
||||
QDF_STATUS utils_dfs_cac_stop(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
dfs_cac_stop(dfs);
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(utils_dfs_cac_stop);
|
||||
|
||||
QDF_STATUS utils_dfs_stacac_stop(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
dfs_stacac_stop(dfs);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(utils_dfs_stacac_stop);
|
||||
|
||||
QDF_STATUS utils_dfs_random_channel(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t is_select_nondfs,
|
||||
uint8_t skip_curchan,
|
||||
int *target_channel)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
*target_channel = dfs_random_channel(dfs,
|
||||
is_select_nondfs,
|
||||
skip_curchan);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(utils_dfs_random_channel);
|
||||
|
||||
QDF_STATUS utils_dfs_get_usenol(struct wlan_objmgr_pdev *pdev, uint16_t *usenol)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
*usenol = dfs_get_usenol(dfs);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(utils_dfs_get_usenol);
|
||||
|
||||
QDF_STATUS utils_dfs_radar_disable(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
dfs_radar_disable(dfs);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(utils_dfs_radar_disable);
|
||||
|
||||
QDF_STATUS utils_dfs_set_update_nol_flag(struct wlan_objmgr_pdev *pdev,
|
||||
bool val)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
dfs_set_update_nol_flag(dfs, val);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(utils_dfs_set_update_nol_flag);
|
||||
|
||||
QDF_STATUS utils_dfs_get_update_nol_flag(struct wlan_objmgr_pdev *pdev,
|
||||
bool *nol_flag)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
*nol_flag = dfs_get_update_nol_flag(dfs);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(utils_dfs_get_update_nol_flag);
|
||||
|
||||
QDF_STATUS utils_dfs_get_rn_use_nol(struct wlan_objmgr_pdev *pdev,
|
||||
int *rn_use_nol)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
*rn_use_nol = dfs_get_rn_use_nol(dfs);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(utils_dfs_get_rn_use_nol);
|
||||
|
||||
QDF_STATUS utils_dfs_get_nol_timeout(struct wlan_objmgr_pdev *pdev,
|
||||
int *dfs_nol_timeout)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
*dfs_nol_timeout = dfs_get_nol_timeout(dfs);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(utils_dfs_get_nol_timeout);
|
||||
|
||||
QDF_STATUS utils_dfs_nol_addchan(struct wlan_objmgr_pdev *pdev,
|
||||
uint16_t freq,
|
||||
uint32_t dfs_nol_timeout)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
dfs_nol_addchan(dfs, freq, dfs_nol_timeout);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(utils_dfs_nol_addchan);
|
||||
|
||||
QDF_STATUS utils_dfs_nol_update(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
dfs_nol_update(dfs);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(utils_dfs_nol_update);
|
||||
|
||||
QDF_STATUS utils_dfs_second_segment_radar_disable(struct wlan_objmgr_pdev *pdev)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
dfs_second_segment_radar_disable(dfs);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS utils_dfs_is_ignore_dfs(struct wlan_objmgr_pdev *pdev,
|
||||
bool *ignore_dfs)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
*ignore_dfs = dfs->dfs_ignore_dfs;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(utils_dfs_is_ignore_dfs);
|
||||
|
||||
QDF_STATUS utils_dfs_is_cac_valid(struct wlan_objmgr_pdev *pdev,
|
||||
bool *is_cac_valid)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
*is_cac_valid = dfs->dfs_cac_valid;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(utils_dfs_is_cac_valid);
|
||||
|
||||
QDF_STATUS utils_dfs_is_ignore_cac(struct wlan_objmgr_pdev *pdev,
|
||||
bool *ignore_cac)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
*ignore_cac = dfs->dfs_ignore_cac;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(utils_dfs_is_ignore_cac);
|
||||
|
||||
QDF_STATUS utils_dfs_set_cac_timer_running(struct wlan_objmgr_pdev *pdev,
|
||||
int val)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
dfs->dfs_cac_timer_running = val;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(utils_dfs_set_cac_timer_running);
|
||||
|
||||
QDF_STATUS utils_dfs_get_nol_chfreq_and_chwidth(struct wlan_objmgr_pdev *pdev,
|
||||
void *nollist,
|
||||
uint32_t *nol_chfreq,
|
||||
uint32_t *nol_chwidth,
|
||||
int index)
|
||||
{
|
||||
struct wlan_dfs *dfs;
|
||||
|
||||
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||
if (dfs == NULL)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
dfs_get_nol_chfreq_and_chwidth(nollist, nol_chfreq, nol_chwidth, index);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
EXPORT_SYMBOL(utils_dfs_get_nol_chfreq_and_chwidth);
|
||||
|
Reference in New Issue
Block a user