Merge "qcacmn: Fix DFS kernel panic"

This commit is contained in:
Linux Build Service Account 2017-07-23 15:46:31 -07:00 • committed by Gerrit - the friendly Code Review server
commit 036d8bc745
12 changed files with 75 additions and 32 deletions

View file

@ -448,7 +448,7 @@ struct dfs_filtertype {
*/
struct dfs_ieee80211_channel {
uint16_t dfs_ch_freq;
uint32_t dfs_ch_flags;
uint64_t dfs_ch_flags;
uint16_t dfs_ch_flagext;
uint8_t dfs_ch_ieee;
uint8_t dfs_ch_vhtop_ch_freq_seg1;
@ -1743,7 +1743,7 @@ void ol_if_dfs_clist_update(struct wlan_dfs *dfs,
*/
void dfs_set_current_channel(struct wlan_dfs *dfs,
uint16_t dfs_ch_freq,
uint32_t dfs_ch_flags,
uint64_t dfs_ch_flags,
uint16_t dfs_ch_flagext,
uint8_t dfs_ch_ieee,
uint8_t dfs_ch_vhtop_ch_freq_seg1,
@ -1922,4 +1922,14 @@ void dfs_main_timer_reset(struct wlan_dfs *dfs);
* @dfs: Pointer to wlan_dfs structure.
*/
void dfs_stop(struct wlan_dfs *dfs);
/**
* dfs_update_cur_chan_flags() - Update DFS channel flag and flagext.
* @dfs: Pointer to wlan_dfs structure.
* @flags: New channel flags
* @flagext: New Extended flags
*/
void dfs_update_cur_chan_flags(struct wlan_dfs *dfs,
uint64_t flags,
uint16_t flagext);
#endif /* _DFS_H_ */

View file

@ -1054,7 +1054,7 @@ int dfs_get_thresholds(struct wlan_dfs *dfs,
void dfs_set_current_channel(struct wlan_dfs *dfs,
uint16_t dfs_ch_freq,
uint32_t dfs_ch_flags,
uint64_t dfs_ch_flags,
uint16_t dfs_ch_flagext,
uint8_t dfs_ch_ieee,
uint8_t dfs_ch_vhtop_ch_freq_seg1,
@ -1081,3 +1081,11 @@ u_int dfs_ieee80211_chan2freq(struct dfs_ieee80211_channel *chan)
return chan == IEEE80211_CHAN_ANYC ?
IEEE80211_CHAN_ANY : chan->dfs_ch_freq;
}
void dfs_update_cur_chan_flags(struct wlan_dfs *dfs,
uint64_t flags,
uint16_t flagext)
{
dfs->dfs_curchan->dfs_ch_flags = flags;
dfs->dfs_curchan->dfs_ch_flagext = flagext;
}

View file

@ -241,7 +241,8 @@ int dfs_random_channel(struct wlan_dfs *dfs,
uint8_t skip_curchan)
{
int chanStart, n = 0;
uint32_t curChanFlags = 0, chan_flags, chan_flagext = 0;
uint64_t curChanFlags = 0, chan_flags;
uint16_t chan_flagext = 0;
int numGChannels = 0;
int numAChannels = 0;
int j = 0;

View file

@ -254,7 +254,7 @@ void dfs_print_nolhistory(struct wlan_dfs *dfs)
i);
if (IEEE80211_IS_CHAN_HISTORY_RADAR(c)) {
DFS_PRINTK(
"nolhistory:%d channel=%d MHz Flags=%X\n",
"nolhistory:%d channel=%d MHz Flags=%llx\n",
j, c->dfs_ch_freq, c->dfs_ch_flags);
j++;
}

View file

@ -38,7 +38,7 @@ extern struct dfs_to_mlme global_dfs_to_mlme;
void dfs_mlme_channel_mark_radar(struct wlan_objmgr_pdev *pdev,
uint16_t freq,
uint8_t vhtop_ch_freq_seg2,
uint32_t flags);
uint64_t flags);
/**
* dfs_mlme_start_rcsa() - Send RCSA to RootAP.
@ -58,7 +58,7 @@ 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);
uint64_t flags);
/**
* dfs_mlme_start_csa() - Sends CSA in ieeeChan
@ -130,7 +130,7 @@ void dfs_mlme_find_any_valid_channel(struct wlan_objmgr_pdev *pdev,
*/
QDF_STATUS dfs_mlme_get_extchan(struct wlan_objmgr_pdev *pdev,
uint16_t *dfs_ch_freq,
uint32_t *dfs_ch_flags,
uint64_t *dfs_ch_flags,
uint16_t *dfs_ch_flagext,
uint8_t *dfs_ch_ieee,
uint8_t *dfs_ch_vhtop_ch_freq_seg1,
@ -152,7 +152,7 @@ void dfs_mlme_set_no_chans_available(struct wlan_objmgr_pdev *pdev,
*/
int dfs_mlme_ieee2mhz(struct wlan_objmgr_pdev *pdev,
int ieee,
int flag);
uint64_t flag);
/**
* dfs_mlme_find_dot11_channel() - Get dot11 channel from ieee, cfreq2 and mode.
@ -173,7 +173,7 @@ void dfs_mlme_find_dot11_channel(struct wlan_objmgr_pdev *pdev,
uint8_t des_cfreq2,
int mode,
uint16_t *dfs_ch_freq,
uint32_t *dfs_ch_flags,
uint64_t *dfs_ch_flags,
uint16_t *dfs_ch_flagext,
uint8_t *dfs_ch_ieee,
uint8_t *dfs_ch_vhtop_ch_freq_seg1,
@ -193,7 +193,7 @@ void dfs_mlme_find_dot11_channel(struct wlan_objmgr_pdev *pdev,
*/
void dfs_mlme_get_dfs_ch_channels(struct wlan_objmgr_pdev *pdev,
uint16_t *dfs_ch_freq,
uint32_t *dfs_ch_flags,
uint64_t *dfs_ch_flags,
uint16_t *dfs_ch_flagext,
uint8_t *dfs_ch_ieee,
uint8_t *dfs_ch_vhtop_ch_freq_seg1,
@ -239,6 +239,6 @@ void dfs_mlme_clist_update(struct wlan_objmgr_pdev *pdev,
int dfs_mlme_get_cac_timeout(struct wlan_objmgr_pdev *pdev,
uint16_t dfs_ch_freq,
uint8_t dfs_ch_vhtop_ch_freq_seg2,
uint32_t dfs_ch_flags);
uint64_t dfs_ch_flags);
#endif /* _WLAN_DFS_MLME_API_H_ */

View file

@ -43,7 +43,7 @@ extern struct dfs_to_mlme global_dfs_to_mlme;
*/
QDF_STATUS tgt_dfs_set_current_channel(struct wlan_objmgr_pdev *pdev,
uint16_t dfs_ch_freq,
uint32_t dfs_ch_flags,
uint64_t dfs_ch_flags,
uint16_t dfs_ch_flagext,
uint8_t dfs_ch_ieee,
uint8_t dfs_ch_vhtop_ch_freq_seg1,

View file

@ -70,13 +70,13 @@ struct dfs_to_mlme {
QDF_STATUS (*dfs_channel_mark_radar)(struct wlan_objmgr_pdev *pdev,
uint16_t freq,
uint8_t vhtop_ch_freq_seg2,
uint32_t flags);
uint64_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);
uint64_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);
@ -98,7 +98,7 @@ struct dfs_to_mlme {
int *ret_val);
QDF_STATUS (*mlme_get_extchan)(struct wlan_objmgr_pdev *pdev,
uint16_t *dfs_ch_freq,
uint32_t *dfs_ch_flags,
uint64_t *dfs_ch_flags,
uint16_t *dfs_ch_flagext,
uint8_t *dfs_ch_ieee,
uint8_t *dfs_ch_vhtop_ch_freq_seg1,
@ -107,14 +107,14 @@ struct dfs_to_mlme {
int val);
QDF_STATUS (*mlme_ieee2mhz)(struct wlan_objmgr_pdev *pdev,
int ieee,
int flag,
uint64_t 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 *dfs_ch_freq,
uint32_t *dfs_ch_flags,
uint64_t *dfs_ch_flags,
uint16_t *dfs_ch_flagext,
uint8_t *dfs_ch_ieee,
uint8_t *dfs_ch_vhtop_ch_freq_seg1,
@ -122,14 +122,14 @@ struct dfs_to_mlme {
QDF_STATUS (*mlme_get_dfs_ch_channels)(struct wlan_objmgr_pdev *pdev,
uint16_t *dfs_ch_freq,
uint32_t *dfs_ch_flags,
uint64_t *dfs_ch_flags,
uint16_t *dfs_ch_flagext,
uint8_t *dfs_ch_ieee,
uint8_t *dfs_ch_vhtop_ch_freq_seg1,
uint8_t *dfs_ch_vhtop_ch_freq_seg2,
int index);
QDF_STATUS (*mlme_dfs_ch_flags_ext)(struct wlan_objmgr_pdev *pdev,
uint32_t *flag_ext);
uint16_t *flag_ext);
QDF_STATUS (*mlme_channel_change_by_precac)(
struct wlan_objmgr_pdev *pdev);
QDF_STATUS (*mlme_nol_timeout_notification)(
@ -140,7 +140,7 @@ struct dfs_to_mlme {
QDF_STATUS (*mlme_get_cac_timeout)(struct wlan_objmgr_pdev *pdev,
uint16_t dfs_ch_freq,
uint8_t c_vhtop_ch_freq_seg2,
uint32_t dfs_ch_flags,
uint64_t dfs_ch_flags,
int *cac_timeout);
};

View file

@ -427,4 +427,13 @@ uint8_t utils_dfs_freq_to_chan(uint32_t freq);
*/
uint32_t utils_dfs_chan_to_freq(uint8_t chan);
/**
* utils_dfs_update_cur_chan_flags() - Update DFS channel flag and flagext.
* @pdev: Pointer to DFS pdev object.
* @flags: New channel flags
* @flagext: New Extended flags
*/
QDF_STATUS utils_dfs_update_cur_chan_flags(struct wlan_objmgr_pdev *pdev,
uint64_t flags,
uint16_t flagext);
#endif /* _WLAN_DFS_UTILS_API_H_ */

View file

@ -33,7 +33,7 @@
void dfs_mlme_channel_mark_radar(struct wlan_objmgr_pdev *pdev,
uint16_t freq,
uint8_t vhtop_ch_freq_seg2,
uint32_t flags)
uint64_t flags)
{
if (global_dfs_to_mlme.dfs_channel_mark_radar != NULL)
global_dfs_to_mlme.dfs_channel_mark_radar(pdev,
@ -53,7 +53,7 @@ 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)
uint64_t flags)
{
if (global_dfs_to_mlme.mlme_mark_dfs != NULL)
global_dfs_to_mlme.mlme_mark_dfs(pdev,
@ -82,7 +82,7 @@ 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)
uint64_t flags)
{
if (!pdev) {
DFS_PRINTK("%s: null pdev\n", __func__);
@ -174,7 +174,7 @@ void dfs_mlme_find_any_valid_channel(struct wlan_objmgr_pdev *pdev,
QDF_STATUS dfs_mlme_get_extchan(struct wlan_objmgr_pdev *pdev,
uint16_t *dfs_ch_freq,
uint32_t *dfs_ch_flags,
uint64_t *dfs_ch_flags,
uint16_t *dfs_ch_flagext,
uint8_t *dfs_ch_ieee,
uint8_t *dfs_ch_vhtop_ch_freq_seg1,
@ -201,7 +201,7 @@ void dfs_mlme_set_no_chans_available(struct wlan_objmgr_pdev *pdev,
val);
}
int dfs_mlme_ieee2mhz(struct wlan_objmgr_pdev *pdev, int ieee, int flag)
int dfs_mlme_ieee2mhz(struct wlan_objmgr_pdev *pdev, int ieee, uint64_t flag)
{
int freq = 0;
@ -219,7 +219,7 @@ void dfs_mlme_find_dot11_channel(struct wlan_objmgr_pdev *pdev,
uint8_t des_cfreq2,
int mode,
uint16_t *dfs_ch_freq,
uint32_t *dfs_ch_flags,
uint64_t *dfs_ch_flags,
uint16_t *dfs_ch_flagext,
uint8_t *dfs_ch_ieee,
uint8_t *dfs_ch_vhtop_ch_freq_seg1,
@ -240,7 +240,7 @@ void dfs_mlme_find_dot11_channel(struct wlan_objmgr_pdev *pdev,
void dfs_mlme_get_dfs_ch_channels(struct wlan_objmgr_pdev *pdev,
uint16_t *dfs_ch_freq,
uint32_t *dfs_ch_flags,
uint64_t *dfs_ch_flags,
uint16_t *dfs_ch_flagext,
uint8_t *dfs_ch_ieee,
uint8_t *dfs_ch_vhtop_ch_freq_seg1,
@ -260,7 +260,7 @@ void dfs_mlme_get_dfs_ch_channels(struct wlan_objmgr_pdev *pdev,
uint32_t dfs_mlme_dfs_ch_flags_ext(struct wlan_objmgr_pdev *pdev)
{
uint32_t flag_ext = 0;
uint16_t flag_ext = 0;
if (global_dfs_to_mlme.mlme_dfs_ch_flags_ext != NULL)
global_dfs_to_mlme.mlme_dfs_ch_flags_ext(pdev,
@ -296,7 +296,7 @@ void dfs_mlme_clist_update(struct wlan_objmgr_pdev *pdev,
int dfs_mlme_get_cac_timeout(struct wlan_objmgr_pdev *pdev,
uint16_t dfs_ch_freq,
uint8_t dfs_ch_vhtop_ch_freq_seg2,
uint32_t dfs_ch_flags)
uint64_t dfs_ch_flags)
{
int cac_timeout = 0;

View file

@ -37,7 +37,7 @@ wlan_psoc_get_dfs_txops(struct wlan_objmgr_psoc *psoc)
QDF_STATUS tgt_dfs_set_current_channel(struct wlan_objmgr_pdev *pdev,
uint16_t dfs_ch_freq,
uint32_t dfs_ch_flags,
uint64_t dfs_ch_flags,
uint16_t dfs_ch_flagext,
uint8_t dfs_ch_ieee,
uint8_t dfs_ch_vhtop_ch_freq_seg1,

View file

@ -392,6 +392,21 @@ QDF_STATUS utils_dfs_get_nol_chfreq_and_chwidth(struct wlan_objmgr_pdev *pdev,
}
EXPORT_SYMBOL(utils_dfs_get_nol_chfreq_and_chwidth);
QDF_STATUS utils_dfs_update_cur_chan_flags(struct wlan_objmgr_pdev *pdev,
uint64_t flags,
uint16_t flagext)
{
struct wlan_dfs *dfs;
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
if (dfs == NULL)
return QDF_STATUS_E_FAILURE;
dfs_update_cur_chan_flags(dfs, flags, flagext);
return QDF_STATUS_SUCCESS;
}
static void utils_dfs_get_max_phy_mode(struct wlan_objmgr_pdev *pdev,
uint32_t *phy_mode)
{

View file

@ -846,7 +846,7 @@ struct wlan_lmac_if_dfs_rx_ops {
int *precac_timeout);
QDF_STATUS (*dfs_set_current_channel)(struct wlan_objmgr_pdev *pdev,
uint16_t ic_freq,
uint32_t ic_flags,
uint64_t ic_flags,
uint16_t ic_flagext,
uint8_t ic_ieee,
uint8_t ic_vhtop_ch_freq_seg1,