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:
Abhijit Pradhan
2017-03-13 13:58:53 +05:30
committed by Sandeep Puligilla
szülő 37cef934f1
commit 38ae892add
12 fájl változott, egészen pontosan 2744 új sor hozzáadva és 0 régi sor törölve

Fájl megtekintése

@@ -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_ */

Fájl megtekintése

@@ -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_ */

Fájl megtekintése

@@ -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_ */

Fájl megtekintése

@@ -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_ */

Fájl megtekintése

@@ -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_ */

Fájl megtekintése

@@ -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_ */

Fájl megtekintése

@@ -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;
}

Fájl megtekintése

@@ -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;
}

Fájl megtekintése

@@ -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;
}

Fájl megtekintése

@@ -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);

Fájl megtekintése

@@ -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);

Fájl megtekintése

@@ -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);