Prechádzať zdrojové kódy

Merge "qcacmn: Fix DFS kernel panic"

Linux Build Service Account 7 rokov pred
rodič
commit
036d8bc745

+ 12 - 2
umac/dfs/core/src/dfs.h

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

+ 9 - 1
umac/dfs/core/src/misc/dfs.c

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

+ 2 - 1
umac/dfs/core/src/misc/dfs_cac.c

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

+ 1 - 1
umac/dfs/core/src/misc/dfs_nol.c

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

+ 7 - 7
umac/dfs/dispatcher/inc/wlan_dfs_mlme_api.h

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

+ 1 - 1
umac/dfs/dispatcher/inc/wlan_dfs_tgt_api.h

@@ -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,

+ 8 - 8
umac/dfs/dispatcher/inc/wlan_dfs_ucfg_api.h

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

+ 9 - 0
umac/dfs/dispatcher/inc/wlan_dfs_utils_api.h

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

+ 9 - 9
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 @@ 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;
 

+ 1 - 1
umac/dfs/dispatcher/src/wlan_dfs_tgt_api.c

@@ -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,

+ 15 - 0
umac/dfs/dispatcher/src/wlan_dfs_utils_api.c

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

+ 1 - 1
umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h

@@ -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,