Merge "qcacmn: Fix DFS kernel panic"
diff --git a/umac/dfs/core/src/dfs.h b/umac/dfs/core/src/dfs.h
index c656e4b..e785b60 100644
--- a/umac/dfs/core/src/dfs.h
+++ b/umac/dfs/core/src/dfs.h
@@ -448,7 +448,7 @@
*/
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 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 @@
* @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_ */
diff --git a/umac/dfs/core/src/misc/dfs.c b/umac/dfs/core/src/misc/dfs.c
index f44ab44..92d6c22 100644
--- a/umac/dfs/core/src/misc/dfs.c
+++ b/umac/dfs/core/src/misc/dfs.c
@@ -1054,7 +1054,7 @@
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 @@
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;
+}
diff --git a/umac/dfs/core/src/misc/dfs_cac.c b/umac/dfs/core/src/misc/dfs_cac.c
index 14dba0d..5099393 100644
--- a/umac/dfs/core/src/misc/dfs_cac.c
+++ b/umac/dfs/core/src/misc/dfs_cac.c
@@ -241,7 +241,8 @@
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;
diff --git a/umac/dfs/core/src/misc/dfs_nol.c b/umac/dfs/core/src/misc/dfs_nol.c
index 388babd..638eb1c 100644
--- a/umac/dfs/core/src/misc/dfs_nol.c
+++ b/umac/dfs/core/src/misc/dfs_nol.c
@@ -254,7 +254,7 @@
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++;
}
diff --git a/umac/dfs/dispatcher/inc/wlan_dfs_mlme_api.h b/umac/dfs/dispatcher/inc/wlan_dfs_mlme_api.h
index fcc1036..61688d8 100644
--- a/umac/dfs/dispatcher/inc/wlan_dfs_mlme_api.h
+++ b/umac/dfs/dispatcher/inc/wlan_dfs_mlme_api.h
@@ -38,7 +38,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);
/**
* dfs_mlme_start_rcsa() - Send RCSA to RootAP.
@@ -58,7 +58,7 @@
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 @@
*/
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 @@
*/
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 @@
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_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 @@
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_ */
diff --git a/umac/dfs/dispatcher/inc/wlan_dfs_tgt_api.h b/umac/dfs/dispatcher/inc/wlan_dfs_tgt_api.h
index f2fddc4..0e246d8 100644
--- a/umac/dfs/dispatcher/inc/wlan_dfs_tgt_api.h
+++ b/umac/dfs/dispatcher/inc/wlan_dfs_tgt_api.h
@@ -43,7 +43,7 @@
*/
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,
diff --git a/umac/dfs/dispatcher/inc/wlan_dfs_ucfg_api.h b/umac/dfs/dispatcher/inc/wlan_dfs_ucfg_api.h
index 7f44c0e..3e8ae4d 100644
--- a/umac/dfs/dispatcher/inc/wlan_dfs_ucfg_api.h
+++ b/umac/dfs/dispatcher/inc/wlan_dfs_ucfg_api.h
@@ -70,13 +70,13 @@
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 @@
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 @@
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 @@
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 @@
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);
};
diff --git a/umac/dfs/dispatcher/inc/wlan_dfs_utils_api.h b/umac/dfs/dispatcher/inc/wlan_dfs_utils_api.h
index 4ee88c0..1151d2f 100644
--- a/umac/dfs/dispatcher/inc/wlan_dfs_utils_api.h
+++ b/umac/dfs/dispatcher/inc/wlan_dfs_utils_api.h
@@ -427,4 +427,13 @@
*/
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_ */
diff --git a/umac/dfs/dispatcher/src/wlan_dfs_mlme_api.c b/umac/dfs/dispatcher/src/wlan_dfs_mlme_api.c
index 5ae8a4b..c792454 100644
--- a/umac/dfs/dispatcher/src/wlan_dfs_mlme_api.c
+++ b/umac/dfs/dispatcher/src/wlan_dfs_mlme_api.c
@@ -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 @@
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 @@
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 @@
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 @@
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 @@
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_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 @@
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 @@
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;
diff --git a/umac/dfs/dispatcher/src/wlan_dfs_tgt_api.c b/umac/dfs/dispatcher/src/wlan_dfs_tgt_api.c
index 8bd5367..07d5a14 100644
--- a/umac/dfs/dispatcher/src/wlan_dfs_tgt_api.c
+++ b/umac/dfs/dispatcher/src/wlan_dfs_tgt_api.c
@@ -37,7 +37,7 @@
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,
diff --git a/umac/dfs/dispatcher/src/wlan_dfs_utils_api.c b/umac/dfs/dispatcher/src/wlan_dfs_utils_api.c
index fe24244..64779c7 100644
--- a/umac/dfs/dispatcher/src/wlan_dfs_utils_api.c
+++ b/umac/dfs/dispatcher/src/wlan_dfs_utils_api.c
@@ -392,6 +392,21 @@
}
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)
{
diff --git a/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h b/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h
index cd5b3e2..495c013 100644
--- a/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h
+++ b/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h
@@ -846,7 +846,7 @@
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,