Преглед изворни кода

qcacmn: Add rxops to display super channel list for all modes

Add rxops reg_display_super_chan_list, its core and dispatcher functions to
display super channel list for all modes.

Change-Id: I2b094d407d318ad84ac79ea3a4bc1127606c0fa2
CRs-Fixed: 3212642
Amith A пре 2 година
родитељ
комит
9eefe85e1d

+ 6 - 0
umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h

@@ -1666,6 +1666,10 @@ struct wlan_lmac_if_mgmt_txrx_rx_ops {
 #endif
 };
 
+/**
+ * struct wlan_lmac_if_reg_rx_ops - structure of rx function pointers
+ * @reg_display_super_chan_list: function pointer to print super channel list
+ */
 struct wlan_lmac_if_reg_rx_ops {
 	QDF_STATUS (*master_list_handler)(struct cur_regulatory_info
 					  *reg_info);
@@ -1726,6 +1730,8 @@ struct wlan_lmac_if_reg_rx_ops {
 	QDF_STATUS
 	(*reg_set_disable_upper_6g_edge_ch_supp)(struct wlan_objmgr_psoc *psoc,
 						 bool val);
+	QDF_STATUS
+	(*reg_display_super_chan_list)(struct wlan_objmgr_pdev *pdev);
 #endif
 
 #ifdef CONFIG_AFC_SUPPORT

+ 14 - 0
umac/global_umac_dispatcher/lmac_if/src/wlan_lmac_if.c

@@ -351,6 +351,13 @@ static void wlan_lmac_if_register_master_list_ext_handler(
 		tgt_reg_process_master_chan_list_ext;
 }
 
+static void wlan_lmac_if_register_super_chan_display(
+					struct wlan_lmac_if_rx_ops *rx_ops)
+{
+	rx_ops->reg_rx_ops.reg_display_super_chan_list =
+		wlan_reg_display_super_chan_list;
+}
+
 #ifdef CONFIG_AFC_SUPPORT
 static void wlan_lmac_if_register_afc_handlers(
 					struct wlan_lmac_if_rx_ops *rx_ops)
@@ -376,6 +383,11 @@ static inline void wlan_lmac_if_register_afc_handlers(
 					struct wlan_lmac_if_rx_ops *rx_ops)
 {
 }
+
+static inline void wlan_lmac_if_register_super_chan_display(
+					struct wlan_lmac_if_rx_ops *rx_ops)
+{
+}
 #endif
 
 #if defined(CONFIG_BAND_6GHZ)
@@ -489,6 +501,8 @@ static void wlan_lmac_if_umac_reg_rx_ops_register(
 	wlan_lmac_if_register_6g_edge_chan_supp(rx_ops);
 
 	wlan_lmac_if_register_afc_handlers(rx_ops);
+
+	wlan_lmac_if_register_super_chan_display(rx_ops);
 }
 
 #ifdef CONVERGED_P2P_ENABLE

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

@@ -9492,3 +9492,52 @@ reg_is_sup_chan_entry_afc_done(struct wlan_objmgr_pdev *pdev,
 		 REGULATORY_CHAN_AFC_NOT_DONE);
 }
 #endif
+
+#ifdef CONFIG_BAND_6GHZ
+QDF_STATUS
+reg_display_super_chan_list(struct wlan_objmgr_pdev *pdev)
+{
+	struct wlan_regulatory_pdev_priv_obj *pdev_priv_obj;
+	struct super_chan_info *super_chan_list;
+	uint8_t i;
+
+	pdev_priv_obj = reg_get_pdev_obj(pdev);
+	if (!IS_VALID_PDEV_REG_OBJ(pdev_priv_obj)) {
+		reg_err_rl("pdev reg component is NULL");
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	super_chan_list = pdev_priv_obj->super_chan_list;
+	for (i = 0; i < NUM_6GHZ_CHANNELS; i++) {
+		struct super_chan_info *chan_info = &super_chan_list[i];
+		struct regulatory_channel  cur_chan_list =
+			pdev_priv_obj->cur_chan_list[MIN_6GHZ_CHANNEL + i];
+		uint8_t j;
+
+		qdf_print("Freq = %d\tPower types = 0x%x\t"
+			  "Best power mode = 0x%x\n",
+			  cur_chan_list.center_freq, chan_info->power_types,
+			  chan_info->best_power_mode);
+		for (j = REG_AP_LPI; j <= REG_CLI_SUB_VLP; j++) {
+			bool afc_not_done_bit;
+
+			afc_not_done_bit = chan_info->chan_flags_arr[j] &
+						REGULATORY_CHAN_AFC_NOT_DONE;
+			qdf_print("Power mode = %d\tPSD flag = %d\t"
+				  "PSD power = %d\tEIRP power = %d\t"
+				  "Chan flags = 0x%x\tChannel state = %d\t"
+				  "Min bw = %d\tMax bw = %d\t"
+				  "AFC_NOT_DONE = %d\n",
+				  j, chan_info->reg_chan_pwr[j].psd_flag,
+				  chan_info->reg_chan_pwr[j].psd_eirp,
+				  chan_info->reg_chan_pwr[j].tx_power,
+				  chan_info->chan_flags_arr[j],
+				  chan_info->state_arr[j],
+				  chan_info->min_bw[j], chan_info->max_bw[j],
+				  afc_not_done_bit);
+		}
+	}
+
+	return QDF_STATUS_SUCCESS;
+}
+#endif

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

@@ -2631,6 +2631,18 @@ reg_is_sup_chan_entry_afc_done(struct wlan_objmgr_pdev *pdev,
 	return false;
 }
 #endif
+
+#ifdef CONFIG_BAND_6GHZ
+/**
+ * reg_display_super_chan_list() - Display super channel list for all modes
+ * @pdev: pdev pointer
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS
+reg_display_super_chan_list(struct wlan_objmgr_pdev *pdev);
+#endif
+
 /**
  * reg_get_max_bw_5G_for_fo() - get max bw
  * @pdev: PDEV object

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

@@ -2553,6 +2553,15 @@ bool
 wlan_is_sup_chan_entry_afc_done(struct wlan_objmgr_pdev *pdev,
 				enum channel_enum chan_idx,
 				enum supported_6g_pwr_types in_6g_pwr_mode);
+
+/**
+ * wlan_reg_display_super_chan_list() - Display super channel list for all modes
+ * @pdev: Pointer to pdev
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS
+wlan_reg_display_super_chan_list(struct wlan_objmgr_pdev *pdev);
 #else
 static inline bool
 wlan_is_sup_chan_entry_afc_done(struct wlan_objmgr_pdev *pdev,
@@ -2561,5 +2570,11 @@ wlan_is_sup_chan_entry_afc_done(struct wlan_objmgr_pdev *pdev,
 {
 	return false;
 }
+
+static inline QDF_STATUS
+wlan_reg_display_super_chan_list(struct wlan_objmgr_pdev *pdev)
+{
+	return QDF_STATUS_E_NOSUPPORT;
+}
 #endif
 #endif

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

@@ -1897,4 +1897,10 @@ bool wlan_is_sup_chan_entry_afc_done(struct wlan_objmgr_pdev *pdev,
 }
 
 qdf_export_symbol(wlan_is_sup_chan_entry_afc_done);
+
+QDF_STATUS
+wlan_reg_display_super_chan_list(struct wlan_objmgr_pdev *pdev)
+{
+	return reg_display_super_chan_list(pdev);
+}
 #endif