Forráskód Böngészése

qcacmn: Add support to get min and max bw of chan enum

Add support to get min and max band width of provided
channel enum, so that configured bandwidth can be validated
whether it lies in the range of bandwidth or not.

Change-Id: I765b4e8013d021eaca41b37789d1ef3f1d57fa7d
CRs-Fixed: 3402928
Sheenam Monga 2 éve
szülő
commit
7453254a0c

+ 22 - 14
umac/regulatory/core/src/reg_services_common.c

@@ -8739,15 +8739,20 @@ reg_is_freq_idx_enabled_on_cur_chan_list(struct wlan_regulatory_pdev_priv_obj
 	return !reg_is_chan_disabled_and_not_nol(&cur_chan_list[freq_idx]);
 }
 
-static QDF_STATUS
-reg_get_min_max_bw_on_cur_chan_list(struct wlan_regulatory_pdev_priv_obj
-				*pdev_priv_obj,
-				enum channel_enum freq_idx,
-				uint16_t *min_bw,
-				uint16_t *max_bw)
+QDF_STATUS
+reg_get_min_max_bw_on_cur_chan_list(struct wlan_objmgr_pdev *pdev,
+				    enum channel_enum freq_idx,
+				    uint16_t *min_bw,
+				    uint16_t *max_bw)
 {
 	struct regulatory_channel *cur_chan_list;
+	struct wlan_regulatory_pdev_priv_obj *pdev_priv_obj;
 
+	pdev_priv_obj = reg_get_pdev_obj(pdev);
+	if (!IS_VALID_PDEV_REG_OBJ(pdev_priv_obj)) {
+		reg_err("reg pdev private obj is NULL");
+		return QDF_STATUS_E_FAILURE;
+	}
 	if (freq_idx >= NUM_CHANNELS)
 		return QDF_STATUS_E_FAILURE;
 
@@ -8860,7 +8865,8 @@ reg_get_min_max_bw_on_given_pwr_mode(struct wlan_regulatory_pdev_priv_obj
 		return QDF_STATUS_E_FAILURE;
 
 	if (freq_idx < MIN_6GHZ_CHANNEL)
-		return reg_get_min_max_bw_on_cur_chan_list(pdev_priv_obj,
+		return reg_get_min_max_bw_on_cur_chan_list(
+						       pdev_priv_obj->pdev_ptr,
 						       freq_idx,
 						       min_bw, max_bw);
 
@@ -9000,7 +9006,7 @@ reg_get_min_max_bw_on_given_pwr_mode(struct wlan_regulatory_pdev_priv_obj
 				     uint16_t *min_bw,
 				     uint16_t *max_bw)
 {
-	return reg_get_min_max_bw_on_cur_chan_list(pdev_priv_obj,
+	return reg_get_min_max_bw_on_cur_chan_list(pdev_priv_obj->pdev_ptr,
 						   freq_idx,
 						   min_bw, max_bw);
 }
@@ -9088,15 +9094,17 @@ QDF_STATUS reg_get_min_max_bw_reg_chan_list(struct wlan_objmgr_pdev *pdev,
 	}
 
 	if (freq_idx < MIN_6GHZ_CHANNEL)
-		return reg_get_min_max_bw_on_cur_chan_list(pdev_priv_obj,
-							   freq_idx,
-							   min_bw, max_bw);
+		return reg_get_min_max_bw_on_cur_chan_list(
+							pdev,
+							freq_idx,
+							min_bw, max_bw);
 
 	switch (in_6g_pwr_mode) {
 	case REG_CURRENT_PWR_MODE:
-		return reg_get_min_max_bw_on_cur_chan_list(pdev_priv_obj,
-							   freq_idx,
-							   min_bw, max_bw);
+		return reg_get_min_max_bw_on_cur_chan_list(
+							pdev,
+							freq_idx,
+							min_bw, max_bw);
 
 	case REG_BEST_PWR_MODE:
 	default:

+ 15 - 0
umac/regulatory/core/src/reg_services_common.h

@@ -961,6 +961,21 @@ reg_is_freq_present_in_cur_chan_list(struct wlan_objmgr_pdev *pdev,
  */
 enum channel_enum reg_get_chan_enum_for_freq(qdf_freq_t freq);
 
+/**
+ * reg_get_min_max_bw_on_cur_chan_list() - To get min and max BW supported
+ * by channel enum
+ * @pdev: pointer to pdev
+ * @chn_idx: enum channel_enum
+ * @min bw: min bw
+ * @max bw: max bw
+ *
+ * Return: SUCCESS/FAILURE
+ */
+QDF_STATUS
+reg_get_min_max_bw_on_cur_chan_list(struct wlan_objmgr_pdev *pdev,
+				    enum channel_enum chan_idx,
+				    uint16_t *min_bw, uint16_t *max_bw);
+
 /**
  * reg_get_channel_list_with_power_for_freq() - Provides the channel list with
  * power

+ 15 - 0
umac/regulatory/dispatcher/inc/wlan_reg_services_api.h

@@ -1422,6 +1422,21 @@ bool wlan_reg_is_same_band_freqs(qdf_freq_t freq1, qdf_freq_t freq2);
  */
 enum channel_enum wlan_reg_get_chan_enum_for_freq(qdf_freq_t freq);
 
+/**
+ * wlan_reg_get_min_max_bw_for_chan_index() - To get min and max BW supported
+ * by channel enum
+ * @pdev: pointer to pdev
+ * @chn_idx: enum channel_enum
+ * @min bw: min bw
+ * @max bw: max bw
+ *
+ * Return: SUCCESS/FAILURE
+ */
+QDF_STATUS
+wlan_reg_get_min_max_bw_for_chan_index(struct wlan_objmgr_pdev *pdev,
+				       enum channel_enum chan_idx,
+				       uint16_t *min_bw, uint16_t *max_bw);
+
 /**
  * wlan_reg_is_freq_present_in_cur_chan_list() - Check if channel is present
  * in the current channel list

+ 9 - 0
umac/regulatory/dispatcher/src/wlan_reg_services_api.c

@@ -1077,6 +1077,15 @@ enum channel_enum wlan_reg_get_chan_enum_for_freq(qdf_freq_t freq)
 	return reg_get_chan_enum_for_freq(freq);
 }
 
+QDF_STATUS
+wlan_reg_get_min_max_bw_for_chan_index(struct wlan_objmgr_pdev *pdev,
+				       enum channel_enum chan_idx,
+				       uint16_t *min_bw, uint16_t *max_bw)
+{
+	return reg_get_min_max_bw_on_cur_chan_list(pdev,
+						   chan_idx, min_bw, max_bw);
+}
+
 bool wlan_reg_is_freq_present_in_cur_chan_list(struct wlan_objmgr_pdev *pdev,
 					       qdf_freq_t freq)
 {

+ 3 - 1
umac/scan/dispatcher/src/wlan_scan_api.c

@@ -660,8 +660,10 @@ void wlan_scan_get_last_scan_ageout_time(struct wlan_objmgr_psoc *psoc,
 	struct wlan_scan_obj *scan_obj;
 
 	scan_obj = wlan_psoc_get_scan_obj(psoc);
-	if (!scan_obj)
+	if (!scan_obj) {
 		*last_scan_ageout_time = 0;
+		return;
+	}
 	*last_scan_ageout_time =
 	scan_obj->scan_def.last_scan_ageout_time;
 }