瀏覽代碼

qcacmn: Implement converting freq/chan within dfs

Implement converting freq to chan and chan to freq
within dfs module.

Change-Id: Id9b39dbe90264621b0702a99a8df69fff9af9dd3
CRs-Fixed: 2017481
Arif Hussain 8 年之前
父節點
當前提交
a23b01405b

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

@@ -105,7 +105,7 @@ static os_timer_func(dfs_remove_from_nol)
 	struct wlan_dfs *dfs;
 	uint16_t delfreq;
 	uint16_t delchwidth;
-	uint32_t chan;
+	uint8_t chan;
 
 	OS_GET_TIMER_ARG(nol_arg, struct dfs_nol_timer_arg *);
 
@@ -120,7 +120,7 @@ static os_timer_func(dfs_remove_from_nol)
 	dfs_nol_update(dfs);
 
 	dfs_mlme_nol_timeout_notification(dfs->dfs_pdev_obj);
-	chan = utils_dfs_freq_to_chan(dfs->dfs_pdev_obj, delfreq);
+	chan = utils_dfs_freq_to_chan(delfreq);
 	DFS_DPRINTK(dfs, WLAN_DEBUG_DFS_NOL,
 		    "%s: remove channel %d from nol\n", __func__, chan);
 	utils_dfs_reg_update_nol_ch(dfs->dfs_pdev_obj,

+ 3 - 3
umac/dfs/core/src/misc/dfs_process_radar_found_ind.c

@@ -230,10 +230,10 @@ void dfs_process_radar_found_indication(struct wlan_dfs *dfs,
 	sidx = DFS_FREQ_OFFSET_TO_SIDX(radar_found->freq_offset);
 
 	if (!radar_found->segment_id)
-		freq_center = utils_dfs_chan_to_freq(dfs->dfs_pdev_obj,
+		freq_center = utils_dfs_chan_to_freq(
 				dfs->dfs_curchan->ic_vhtop_ch_freq_seg1);
 	else {
-		freq_center = utils_dfs_chan_to_freq(dfs->dfs_pdev_obj,
+		freq_center = utils_dfs_chan_to_freq(
 				dfs->dfs_curchan->ic_vhtop_ch_freq_seg2);
 		if (flag & IEEE80211_CHAN_VHT160)
 			freq_center += DFS_160MHZ_SECOND_SEG_OFFSET;
@@ -273,7 +273,7 @@ void dfs_process_radar_found_indication(struct wlan_dfs *dfs,
 
 	for (i = 0; i < DFS_NUM_FREQ_OFFSET; i++) {
 		freq_offset.chan_num[i] = utils_dfs_freq_to_chan(
-				dfs->dfs_pdev_obj, freq_offset.freq[i]);
+				freq_offset.freq[i]);
 		DFS_PRINTK("%s: offset=%d, channel%d\n",
 			   __func__, i, freq_offset.chan_num[i]);
 	}

+ 38 - 6
umac/dfs/dispatcher/inc/wlan_dfs_utils_api.h

@@ -37,6 +37,42 @@
 /* Max nol channels */
 #define DFS_MAX_NOL_CHANNEL         80
 
+/* WLAN 2.4GHz start freq */
+#define DFS_24_GHZ_BASE_FREQ     (2407)
+
+/* WLAN 5GHz start freq */
+#define DFS_5_GHZ_BASE_FREQ      (5000)
+
+/* WLAN 2.4 GHz channel number 6 */
+#define DFS_24_GHZ_CHANNEL_6        (6)
+
+/* WLAN 2.4 GHz channel number 14 */
+#define DFS_24_GHZ_CHANNEL_14      (14)
+
+/* WLAN 2.4 GHz channel number 15 */
+#define DFS_24_GHZ_CHANNEL_15      (15)
+
+/* WLAN 2.4 GHz channel number 27 */
+#define DFS_24_GHZ_CHANNEL_27      (27)
+
+/* WLAN 5GHz channel number 170 */
+#define DFS_5_GHZ_CHANNEL_170     (170)
+
+/* WLAN 5MHz channel spacing */
+#define DFS_CHAN_SPACING_5MHZ       (5)
+
+/* WLAN 20Hz channel spacing */
+#define DFS_CHAN_SPACING_20MHZ     (20)
+
+/* WLAN 2.4GHz channel number 14 freq */
+#define DFS_CHAN_14_FREQ         (2484)
+
+/* WLAN 2.4GHz channel number 15 freq */
+#define DFS_CHAN_15_FREQ         (2512)
+
+/* WLAN 5GHz channel number 170 freq */
+#define DFS_CHAN_170_FREQ        (5852)
+
 /* dfs offload service bit */
 #define DFS_SERVICE_PHYERR_OFFLOAD 113
 
@@ -389,22 +425,18 @@ void utils_dfs_reg_update_nol_ch(struct wlan_objmgr_pdev *pdev,
 
 /**
  * utils_dfs_freq_to_chan () - convert channel freq to channel number
- * @pdev: pdev ptr
  * @freq: frequency
  *
  * Return: channel number
  */
-uint32_t utils_dfs_freq_to_chan(struct wlan_objmgr_pdev *pdev,
-			       uint32_t freq);
+uint8_t utils_dfs_freq_to_chan(uint32_t freq);
 
 /**
  * utils_dfs__chan_to_freq () - convert channel number to frequency
- * @pdev: pdev ptr
  * @chan: channel number
  *
  * Return: frequency
  */
-uint32_t utils_dfs_chan_to_freq(struct wlan_objmgr_pdev *pdev,
-			       uint32_t chan);
+uint32_t utils_dfs_chan_to_freq(uint8_t chan);
 
 #endif /* _WLAN_DFS_UTILS_API_H_ */

+ 38 - 10
umac/dfs/dispatcher/src/wlan_dfs_utils_api.c

@@ -530,6 +530,8 @@ QDF_STATUS dfs_get_random_channel(
 
 	ch_params->center_freq_seg0 = cur_chan.ic_vhtop_ch_freq_seg1;
 	ch_params->center_freq_seg1 = cur_chan.ic_vhtop_ch_freq_seg2;
+	DFS_PRINTK("%s: input width=%d\n", __func__, ch_params->ch_width);
+
 	if (*target_chan) {
 		wlan_reg_set_channel_params(pdev,
 			(uint8_t)*target_chan, 0, ch_params);
@@ -537,6 +539,9 @@ QDF_STATUS dfs_get_random_channel(
 		status = QDF_STATUS_SUCCESS;
 	}
 
+	DFS_PRINTK("%s: ch=%d, seg0=%d, seg1=%d, width=%d\n",
+		   __func__, *target_chan, ch_params->center_freq_seg0,
+		   ch_params->center_freq_seg1, ch_params->ch_width);
 random_chan_error:
 	qdf_mem_free(chan_list);
 
@@ -575,10 +580,13 @@ void dfs_init_nol(struct wlan_objmgr_pdev *pdev)
 	qdf_mem_zero(&dfs_nolinfo, sizeof(dfs_nolinfo));
 	len = pld_wlan_get_dfs_nol(qdf_dev->dev, (void *)&dfs_nolinfo,
 			(uint16_t)sizeof(dfs_nolinfo));
-	if (len > 0)
+	if (len > 0) {
 		dfs_set_nol(dfs, dfs_nolinfo.dfs_nol, dfs_nolinfo.num_chans);
-	else
-		DFS_PRINTK("%s: nol nol in pld\n", __func__);
+		DFS_PRINTK("%s: nol channels in pld\n", __func__);
+		dfs_print_nol(dfs);
+	} else {
+		DFS_PRINTK("%s: no nol in pld\n", __func__);
+	}
 }
 #endif
 EXPORT_SYMBOL(dfs_init_nol);
@@ -685,16 +693,36 @@ void utils_dfs_reg_update_nol_ch(struct wlan_objmgr_pdev *pdev,
 }
 EXPORT_SYMBOL(utils_dfs_reg_update_nol_ch);
 
-uint32_t utils_dfs_freq_to_chan(struct wlan_objmgr_pdev *pdev,
-			       uint32_t freq)
+uint8_t utils_dfs_freq_to_chan(uint32_t freq)
 {
-	return wlan_reg_freq_to_chan(pdev, freq);
+	uint8_t chan;
+
+	if (freq > DFS_24_GHZ_BASE_FREQ && freq < DFS_CHAN_14_FREQ)
+		chan = ((freq - DFS_24_GHZ_BASE_FREQ) / DFS_CHAN_SPACING_5MHZ);
+	else if (freq == DFS_CHAN_14_FREQ)
+		chan = DFS_24_GHZ_CHANNEL_14;
+	else if ((freq > DFS_24_GHZ_BASE_FREQ) && (freq < DFS_5_GHZ_BASE_FREQ))
+		chan = (((freq - DFS_CHAN_15_FREQ) / DFS_CHAN_SPACING_20MHZ) +
+			DFS_24_GHZ_CHANNEL_15);
+	else
+		chan = (freq - DFS_5_GHZ_BASE_FREQ) / DFS_CHAN_SPACING_5MHZ;
+
+	return chan;
 }
 EXPORT_SYMBOL(utils_dfs_freq_to_chan);
 
-uint32_t utils_dfs_chan_to_freq(struct wlan_objmgr_pdev *pdev,
-			       uint32_t chan)
-{
-	return wlan_reg_chan_to_freq(pdev, chan);
+uint32_t utils_dfs_chan_to_freq(uint8_t chan)
+{
+	if (chan < DFS_24_GHZ_CHANNEL_14)
+		return DFS_24_GHZ_BASE_FREQ + (chan * DFS_CHAN_SPACING_5MHZ);
+	else if (chan == DFS_24_GHZ_CHANNEL_14)
+		return DFS_CHAN_14_FREQ;
+	else if (chan < DFS_24_GHZ_CHANNEL_27)
+		return DFS_CHAN_15_FREQ + ((chan - DFS_24_GHZ_CHANNEL_15) *
+				DFS_CHAN_SPACING_20MHZ);
+	else if (chan == DFS_5_GHZ_CHANNEL_170)
+		return DFS_CHAN_170_FREQ;
+	else
+		return DFS_5_GHZ_BASE_FREQ + (chan * DFS_CHAN_SPACING_5MHZ);
 }
 EXPORT_SYMBOL(utils_dfs_chan_to_freq);