Просмотр исходного кода

qcacmn: Fill primary 160MHz center for 320MHz channel

Fill the primary 160MHz segment centers (mhz, ieee) for a 320MHz
channel in the given channel param.

Change-Id: I422bc90fabd2e2ecaa6732a6719218fcc18c19f2
Vignesh Mohan 4 лет назад
Родитель
Сommit
fdaf4853b2
1 измененных файлов с 34 добавлено и 0 удалено
  1. 34 0
      umac/regulatory/core/src/reg_services_common.c

+ 34 - 0
umac/regulatory/core/src/reg_services_common.c

@@ -3593,6 +3593,35 @@ reg_get_320_bonded_channel_state(struct wlan_objmgr_pdev *pdev,
 		return CHANNEL_STATE_ENABLE;
 }
 
+/**
+ * reg_fill_primary_160mhz_centers() - Fill the primary 160MHz segment centers
+ * for a 320MHz channel in the given channel param.
+ * @pdev: Pointer to struct wlan_objmgr_pdev.
+ * @ch_param: channel params to be filled.
+ * @freq: Input primary frequency in MHZ.
+ *
+ * Return: void.
+ */
+static void
+reg_fill_primary_160mhz_centers(struct wlan_objmgr_pdev *pdev,
+				struct ch_params *ch_param, qdf_freq_t freq)
+{
+	const struct bonded_channel_freq *t_bonded_ch_ptr;
+
+	t_bonded_ch_ptr = reg_get_bonded_chan_entry(freq, CH_WIDTH_160MHZ);
+	if (t_bonded_ch_ptr) {
+		ch_param->mhz_freq_seg0 =
+			(t_bonded_ch_ptr->start_freq +
+			 t_bonded_ch_ptr->end_freq) / 2;
+		ch_param->center_freq_seg0 =
+			reg_freq_to_chan(pdev,
+					 ch_param->mhz_freq_seg0);
+	} else {
+		reg_err("Cannot find 160Mhz centers for freq %d", freq);
+		ch_param->ch_width = CH_WIDTH_INVALID;
+	}
+}
+
 /**
  * reg_fill_channel_list_for_320() - Fill 320MHZ channel list. If we
  * are unable to find a channel whose width is greater than 160MHZ and less
@@ -3692,6 +3721,7 @@ reg_fill_channel_list_for_320(struct wlan_objmgr_pdev *pdev,
 		if (chan_state == CHANNEL_STATE_ENABLE) {
 			struct ch_params *t_chan_param =
 			    &chan_list->chan_param[num_ch_params];
+
 			t_chan_param->mhz_freq_seg1 =
 				(bonded_ch_ptr[i]->start_freq +
 				 bonded_ch_ptr[i]->end_freq) / 2;
@@ -3700,6 +3730,10 @@ reg_fill_channel_list_for_320(struct wlan_objmgr_pdev *pdev,
 						 t_chan_param->mhz_freq_seg1);
 			t_chan_param->ch_width = *in_ch_width;
 			t_chan_param->reg_punc_pattern = out_punc_pat;
+
+			reg_fill_primary_160mhz_centers(pdev,
+							t_chan_param,
+							freq);
 			num_ch_params++;
 			chan_list->num_ch_params = num_ch_params;
 		}