|
@@ -42,6 +42,38 @@
|
|
#define MAX_PWR_FCC_CHAN_13 2
|
|
#define MAX_PWR_FCC_CHAN_13 2
|
|
#define CHAN_144_CENT_FREQ 5720
|
|
#define CHAN_144_CENT_FREQ 5720
|
|
|
|
|
|
|
|
+/**
|
|
|
|
+ * reg_init_chan() - Initialize the channel list from the channel_map global
|
|
|
|
+ * list
|
|
|
|
+ * @dst_list: list to initialize
|
|
|
|
+ * @beg_enum: starting point in list(inclusive)
|
|
|
|
+ * @end_enum: ending point in list(inclusive)
|
|
|
|
+ * @dst_idx_adj: offset between channel_map and dst_list
|
|
|
|
+ * @soc_reg: soc private object for regulatory
|
|
|
|
+ *
|
|
|
|
+ * Return: none
|
|
|
|
+ */
|
|
|
|
+static void reg_init_chan(struct regulatory_channel *dst_list,
|
|
|
|
+ enum channel_enum beg_enum,
|
|
|
|
+ enum channel_enum end_enum, uint8_t dst_idx_adj,
|
|
|
|
+ struct wlan_regulatory_psoc_priv_obj *soc_reg)
|
|
|
|
+{
|
|
|
|
+ enum channel_enum chan_enum;
|
|
|
|
+ uint8_t dst_idx;
|
|
|
|
+
|
|
|
|
+ for (chan_enum = beg_enum; chan_enum <= end_enum; chan_enum++) {
|
|
|
|
+ dst_idx = chan_enum - dst_idx_adj;
|
|
|
|
+
|
|
|
|
+ dst_list[dst_idx].chan_num = channel_map[chan_enum].chan_num;
|
|
|
|
+ dst_list[dst_idx].center_freq =
|
|
|
|
+ channel_map[chan_enum].center_freq;
|
|
|
|
+ dst_list[dst_idx].chan_flags = REGULATORY_CHAN_DISABLED;
|
|
|
|
+ dst_list[dst_idx].state = CHANNEL_STATE_DISABLE;
|
|
|
|
+ if (!soc_reg->retain_nol_across_regdmn_update)
|
|
|
|
+ dst_list[dst_idx].nol_chan = false;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
static inline bool
|
|
static inline bool
|
|
reg_nol_and_history_not_set(struct regulatory_channel *chan)
|
|
reg_nol_and_history_not_set(struct regulatory_channel *chan)
|
|
{
|
|
{
|
|
@@ -63,12 +95,33 @@ static void reg_fill_psd_info(enum channel_enum chan_enum,
|
|
|
|
|
|
master_list[chan_enum].psd_eirp = reg_rule->psd_eirp;
|
|
master_list[chan_enum].psd_eirp = reg_rule->psd_eirp;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * reg_init_6ghz_master_chan() - Init 6 GHz channel list
|
|
|
|
+ * @dst_list: pointer to 6 GHz channel list
|
|
|
|
+ * @soc_reg: pointer to regulatory psoc private object.
|
|
|
|
+ *
|
|
|
|
+ * Return: None
|
|
|
|
+ */
|
|
|
|
+static void
|
|
|
|
+reg_init_6ghz_master_chan(struct regulatory_channel *dst_list,
|
|
|
|
+ struct wlan_regulatory_psoc_priv_obj *soc_reg)
|
|
|
|
+{
|
|
|
|
+ reg_init_chan(dst_list, MIN_6GHZ_CHANNEL, MAX_6GHZ_CHANNEL,
|
|
|
|
+ MIN_6GHZ_CHANNEL, soc_reg);
|
|
|
|
+}
|
|
#else
|
|
#else
|
|
static inline void reg_fill_psd_info(enum channel_enum chan_enum,
|
|
static inline void reg_fill_psd_info(enum channel_enum chan_enum,
|
|
struct cur_reg_rule *reg_rule,
|
|
struct cur_reg_rule *reg_rule,
|
|
struct regulatory_channel *master_list)
|
|
struct regulatory_channel *master_list)
|
|
{
|
|
{
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+static inline void
|
|
|
|
+reg_init_6ghz_master_chan(struct regulatory_channel *dst_list,
|
|
|
|
+ struct wlan_regulatory_psoc_priv_obj *soc_reg)
|
|
|
|
+{
|
|
|
|
+}
|
|
#endif
|
|
#endif
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -1527,12 +1580,120 @@ reg_append_mas_chan_list_for_6g(struct wlan_regulatory_pdev_priv_obj
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/**
|
|
|
|
+ * reg_dump_valid_6ghz_channel_list() - Function to print valid 6 GHz channel
|
|
|
|
+ * list state and attribute.
|
|
|
|
+ * @chan: Pointer to array of 6 GHz channel list
|
|
|
|
+ *
|
|
|
|
+ * Return: None
|
|
|
|
+ */
|
|
|
|
+static void
|
|
|
|
+reg_dump_valid_6ghz_channel_list(struct regulatory_channel *chan)
|
|
|
|
+{
|
|
|
|
+#define MAX_CHAN_LOG_ONE_LINE 18
|
|
|
|
+ uint32_t buf_size = MAX_CHAN_LOG_ONE_LINE * 24 + 1;
|
|
|
|
+ uint8_t *buf;
|
|
|
|
+ uint32_t i, len = 0, count = 0;
|
|
|
|
+
|
|
|
|
+ buf = qdf_mem_malloc(buf_size);
|
|
|
|
+ if (!buf)
|
|
|
|
+ return;
|
|
|
|
+
|
|
|
|
+ for (i = MIN_6GHZ_CHANNEL; i <= MAX_6GHZ_CHANNEL; i++, chan++) {
|
|
|
|
+ if (chan->state == CHANNEL_STATE_DISABLE)
|
|
|
|
+ continue;
|
|
|
|
+ len += qdf_scnprintf(buf + len, buf_size - len,
|
|
|
|
+ "%d:%d:%d:%d:%d:%x ",
|
|
|
|
+ chan->center_freq, chan->state,
|
|
|
|
+ chan->psd_flag, chan->tx_power,
|
|
|
|
+ (int16_t)chan->psd_eirp,
|
|
|
|
+ chan->chan_flags);
|
|
|
|
+ count++;
|
|
|
|
+ if (count >= MAX_CHAN_LOG_ONE_LINE) {
|
|
|
|
+ reg_nofl_debug("%s", buf);
|
|
|
|
+ count = 0;
|
|
|
|
+ len = 0;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (len)
|
|
|
|
+ reg_nofl_debug("%s", buf);
|
|
|
|
+
|
|
|
|
+ qdf_mem_free(buf);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * reg_dump_valid_6ghz_cur_chan_list() - API to dump pdev current/secondary
|
|
|
|
+ * channel list state
|
|
|
|
+ * @pdev_priv_obj: pointer to pdev private object
|
|
|
|
+ *
|
|
|
|
+ * Return: None
|
|
|
|
+ */
|
|
|
|
+static void
|
|
|
|
+reg_dump_valid_6ghz_cur_chan_list(struct wlan_regulatory_pdev_priv_obj
|
|
|
|
+ *pdev_priv_obj)
|
|
|
|
+{
|
|
|
|
+ reg_debug("sta freq:state:ispsd:pwr:psd:flags(hex):");
|
|
|
|
+ reg_dump_valid_6ghz_channel_list(
|
|
|
|
+ &pdev_priv_obj->cur_chan_list[MIN_6GHZ_CHANNEL]);
|
|
|
|
+ reg_debug("sap freq:state:ispsd:pwr:psd:flags(hex):");
|
|
|
|
+ reg_dump_valid_6ghz_channel_list(
|
|
|
|
+ &pdev_priv_obj->secondary_cur_chan_list[MIN_6GHZ_CHANNEL]);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+#ifdef CONFIG_AFC_SUPPORT
|
|
|
|
+/**
|
|
|
|
+ * reg_populate_afc_secondary_cur_chan_list() - Function to populate AFC
|
|
|
|
+ * channel list to secondary current channel list
|
|
|
|
+ * @pdev_priv_obj: Pointer to pdev regulatory private object
|
|
|
|
+ * @chan_list: Pointer to array of 6 GHz channel list
|
|
|
|
+ *
|
|
|
|
+ * Return: None
|
|
|
|
+ */
|
|
|
|
+static void reg_populate_afc_secondary_cur_chan_list(
|
|
|
|
+ struct wlan_regulatory_pdev_priv_obj *pdev_priv_obj,
|
|
|
|
+ struct regulatory_channel *chan_list)
|
|
|
|
+{
|
|
|
|
+ uint32_t i;
|
|
|
|
+ struct regulatory_channel *afc_chan_list;
|
|
|
|
+ struct regulatory_channel *sp_chan_list;
|
|
|
|
+
|
|
|
|
+ if (!pdev_priv_obj->is_6g_afc_power_event_received)
|
|
|
|
+ return;
|
|
|
|
+
|
|
|
|
+ afc_chan_list = pdev_priv_obj->afc_chan_list;
|
|
|
|
+ sp_chan_list = pdev_priv_obj->
|
|
|
|
+ mas_chan_list_6g_ap[REG_STANDARD_POWER_AP];
|
|
|
|
+ for (i = 0; i < NUM_6GHZ_CHANNELS; i++) {
|
|
|
|
+ if (afc_chan_list[i].state == CHANNEL_STATE_DISABLE &&
|
|
|
|
+ sp_chan_list[i].state == CHANNEL_STATE_ENABLE) {
|
|
|
|
+ chan_list[i].state = CHANNEL_STATE_DISABLE;
|
|
|
|
+ chan_list[i].chan_flags |= REGULATORY_CHAN_DISABLED;
|
|
|
|
+ } else if (afc_chan_list[i].state == CHANNEL_STATE_ENABLE) {
|
|
|
|
+ qdf_mem_copy(&chan_list[i],
|
|
|
|
+ &afc_chan_list[i],
|
|
|
|
+ sizeof(chan_list[i]));
|
|
|
|
+ chan_list[i].chan_flags |= REGULATORY_CHAN_AFC;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+#else
|
|
|
|
+static inline void reg_populate_afc_secondary_cur_chan_list(
|
|
|
|
+ struct wlan_regulatory_pdev_priv_obj *pdev_priv_obj,
|
|
|
|
+ struct regulatory_channel *chan_list)
|
|
|
|
+{
|
|
|
|
+}
|
|
|
|
+#endif
|
|
|
|
+
|
|
static void
|
|
static void
|
|
reg_populate_secondary_cur_chan_list(struct wlan_regulatory_pdev_priv_obj
|
|
reg_populate_secondary_cur_chan_list(struct wlan_regulatory_pdev_priv_obj
|
|
*pdev_priv_obj)
|
|
*pdev_priv_obj)
|
|
{
|
|
{
|
|
struct wlan_objmgr_psoc *psoc;
|
|
struct wlan_objmgr_psoc *psoc;
|
|
struct wlan_lmac_if_reg_tx_ops *reg_tx_ops;
|
|
struct wlan_lmac_if_reg_tx_ops *reg_tx_ops;
|
|
|
|
+ struct wlan_regulatory_psoc_priv_obj *soc_reg;
|
|
|
|
+ struct regulatory_channel *chan_list;
|
|
|
|
+ uint32_t len_6ghz;
|
|
|
|
|
|
psoc = wlan_pdev_get_psoc(pdev_priv_obj->pdev_ptr);
|
|
psoc = wlan_pdev_get_psoc(pdev_priv_obj->pdev_ptr);
|
|
if (!psoc) {
|
|
if (!psoc) {
|
|
@@ -1540,29 +1701,59 @@ reg_populate_secondary_cur_chan_list(struct wlan_regulatory_pdev_priv_obj
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ soc_reg = reg_get_psoc_obj(psoc);
|
|
|
|
+ if (!IS_VALID_PSOC_REG_OBJ(soc_reg)) {
|
|
|
|
+ reg_err("psoc reg component is NULL");
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
reg_tx_ops = reg_get_psoc_tx_ops(psoc);
|
|
reg_tx_ops = reg_get_psoc_tx_ops(psoc);
|
|
if (!reg_tx_ops) {
|
|
if (!reg_tx_ops) {
|
|
reg_err("reg_tx_ops null");
|
|
reg_err("reg_tx_ops null");
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- if (reg_tx_ops->register_master_ext_handler &&
|
|
|
|
- wlan_psoc_nif_fw_ext_cap_get(psoc, WLAN_SOC_EXT_EVENT_SUPPORTED)) {
|
|
|
|
- qdf_mem_copy(pdev_priv_obj->secondary_cur_chan_list,
|
|
|
|
- pdev_priv_obj->cur_chan_list,
|
|
|
|
- (NUM_CHANNELS - NUM_6GHZ_CHANNELS) *
|
|
|
|
- sizeof(struct regulatory_channel));
|
|
|
|
|
|
|
|
- qdf_mem_copy(&pdev_priv_obj->
|
|
|
|
- secondary_cur_chan_list[MIN_6GHZ_CHANNEL],
|
|
|
|
- pdev_priv_obj->mas_chan_list_6g_ap
|
|
|
|
- [pdev_priv_obj->reg_cur_6g_ap_pwr_type],
|
|
|
|
- NUM_6GHZ_CHANNELS * sizeof(struct regulatory_channel));
|
|
|
|
- } else {
|
|
|
|
|
|
+ if (!reg_tx_ops->register_master_ext_handler ||
|
|
|
|
+ !wlan_psoc_nif_fw_ext_cap_get(psoc, WLAN_SOC_EXT_EVENT_SUPPORTED)) {
|
|
qdf_mem_copy(pdev_priv_obj->secondary_cur_chan_list,
|
|
qdf_mem_copy(pdev_priv_obj->secondary_cur_chan_list,
|
|
pdev_priv_obj->cur_chan_list,
|
|
pdev_priv_obj->cur_chan_list,
|
|
(NUM_CHANNELS) *
|
|
(NUM_CHANNELS) *
|
|
sizeof(struct regulatory_channel));
|
|
sizeof(struct regulatory_channel));
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ len_6ghz = NUM_6GHZ_CHANNELS * sizeof(struct regulatory_channel);
|
|
|
|
+ chan_list = qdf_mem_malloc(len_6ghz);
|
|
|
|
+ if (!chan_list)
|
|
|
|
+ return;
|
|
|
|
+
|
|
|
|
+ if (pdev_priv_obj->indoor_chan_enabled &&
|
|
|
|
+ pdev_priv_obj->reg_rules.num_of_6g_ap_reg_rules[REG_INDOOR_AP]) {
|
|
|
|
+ qdf_mem_copy(chan_list,
|
|
|
|
+ pdev_priv_obj->mas_chan_list_6g_ap[REG_INDOOR_AP],
|
|
|
|
+ len_6ghz);
|
|
|
|
+ /* has flag REGULATORY_CHAN_INDOOR_ONLY */
|
|
|
|
+ } else if (pdev_priv_obj->reg_rules.num_of_6g_ap_reg_rules
|
|
|
|
+ [REG_VERY_LOW_POWER_AP]) {
|
|
|
|
+ qdf_mem_copy(chan_list,
|
|
|
|
+ pdev_priv_obj->mas_chan_list_6g_ap
|
|
|
|
+ [REG_VERY_LOW_POWER_AP],
|
|
|
|
+ len_6ghz);
|
|
|
|
+ } else {
|
|
|
|
+ reg_init_6ghz_master_chan(chan_list, soc_reg);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ reg_populate_afc_secondary_cur_chan_list(pdev_priv_obj, chan_list);
|
|
|
|
+
|
|
|
|
+ qdf_mem_copy(pdev_priv_obj->secondary_cur_chan_list,
|
|
|
|
+ pdev_priv_obj->cur_chan_list,
|
|
|
|
+ (NUM_CHANNELS - NUM_6GHZ_CHANNELS) *
|
|
|
|
+ sizeof(struct regulatory_channel));
|
|
|
|
+ qdf_mem_copy(&pdev_priv_obj->secondary_cur_chan_list[MIN_6GHZ_CHANNEL],
|
|
|
|
+ chan_list,
|
|
|
|
+ len_6ghz);
|
|
|
|
+ qdf_mem_free(chan_list);
|
|
|
|
+ reg_dump_valid_6ghz_cur_chan_list(pdev_priv_obj);
|
|
}
|
|
}
|
|
#else /* CONFIG_REG_CLIENT */
|
|
#else /* CONFIG_REG_CLIENT */
|
|
|
|
|
|
@@ -3267,38 +3458,6 @@ reg_soc_vars_reset_on_failure(enum cc_setting_code status_code,
|
|
return QDF_STATUS_SUCCESS;
|
|
return QDF_STATUS_SUCCESS;
|
|
}
|
|
}
|
|
|
|
|
|
-/**
|
|
|
|
- * reg_init_chan() - Initialize the channel list from the channel_map global
|
|
|
|
- * list
|
|
|
|
- * @dst_list: list to initialize
|
|
|
|
- * @beg_enum: starting point in list(inclusive)
|
|
|
|
- * @end_enum: ending point in list(inclusive)
|
|
|
|
- * @dst_idx_adj: offset between channel_map and dst_list
|
|
|
|
- * @soc_reg: soc private object for regulatory
|
|
|
|
- *
|
|
|
|
- * Return: none
|
|
|
|
- */
|
|
|
|
-static void reg_init_chan(struct regulatory_channel *dst_list,
|
|
|
|
- enum channel_enum beg_enum,
|
|
|
|
- enum channel_enum end_enum, uint8_t dst_idx_adj,
|
|
|
|
- struct wlan_regulatory_psoc_priv_obj *soc_reg)
|
|
|
|
-{
|
|
|
|
- enum channel_enum chan_enum;
|
|
|
|
- uint8_t dst_idx;
|
|
|
|
-
|
|
|
|
- for (chan_enum = beg_enum; chan_enum <= end_enum; chan_enum++) {
|
|
|
|
- dst_idx = chan_enum - dst_idx_adj;
|
|
|
|
-
|
|
|
|
- dst_list[dst_idx].chan_num = channel_map[chan_enum].chan_num;
|
|
|
|
- dst_list[dst_idx].center_freq =
|
|
|
|
- channel_map[chan_enum].center_freq;
|
|
|
|
- dst_list[dst_idx].chan_flags = REGULATORY_CHAN_DISABLED;
|
|
|
|
- dst_list[dst_idx].state = CHANNEL_STATE_DISABLE;
|
|
|
|
- if (!soc_reg->retain_nol_across_regdmn_update)
|
|
|
|
- dst_list[dst_idx].nol_chan = false;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
static void reg_init_legacy_master_chan(struct regulatory_channel *dst_list,
|
|
static void reg_init_legacy_master_chan(struct regulatory_channel *dst_list,
|
|
struct wlan_regulatory_psoc_priv_obj *soc_reg)
|
|
struct wlan_regulatory_psoc_priv_obj *soc_reg)
|
|
{
|
|
{
|
|
@@ -3346,13 +3505,6 @@ static void reg_init_2g_5g_master_chan(struct regulatory_channel *dst_list,
|
|
reg_init_chan(dst_list, 0, MAX_5GHZ_CHANNEL, 0, soc_reg);
|
|
reg_init_chan(dst_list, 0, MAX_5GHZ_CHANNEL, 0, soc_reg);
|
|
}
|
|
}
|
|
|
|
|
|
-static void reg_init_6g_master_chan(struct regulatory_channel *dst_list,
|
|
|
|
- struct wlan_regulatory_psoc_priv_obj *soc_reg)
|
|
|
|
-{
|
|
|
|
- reg_init_chan(dst_list, MIN_6GHZ_CHANNEL, MAX_6GHZ_CHANNEL,
|
|
|
|
- MIN_6GHZ_CHANNEL, soc_reg);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* reg_store_regulatory_ext_info_to_socpriv() - Copy ext info from regulatory
|
|
* reg_store_regulatory_ext_info_to_socpriv() - Copy ext info from regulatory
|
|
* to regulatory PSOC private obj
|
|
* to regulatory PSOC private obj
|
|
@@ -3875,10 +4027,10 @@ QDF_STATUS reg_process_master_chan_list_ext(
|
|
reg_init_2g_5g_master_chan(mas_chan_list_2g_5g, soc_reg);
|
|
reg_init_2g_5g_master_chan(mas_chan_list_2g_5g, soc_reg);
|
|
|
|
|
|
for (i = 0; i < REG_CURRENT_MAX_AP_TYPE; i++) {
|
|
for (i = 0; i < REG_CURRENT_MAX_AP_TYPE; i++) {
|
|
- reg_init_6g_master_chan(mas_chan_list_6g_ap[i], soc_reg);
|
|
|
|
|
|
+ reg_init_6ghz_master_chan(mas_chan_list_6g_ap[i], soc_reg);
|
|
for (j = 0; j < REG_MAX_CLIENT_TYPE; j++)
|
|
for (j = 0; j < REG_MAX_CLIENT_TYPE; j++)
|
|
- reg_init_6g_master_chan(mas_chan_list_6g_client[i][j],
|
|
|
|
- soc_reg);
|
|
|
|
|
|
+ reg_init_6ghz_master_chan(mas_chan_list_6g_client[i][j],
|
|
|
|
+ soc_reg);
|
|
}
|
|
}
|
|
|
|
|
|
reg_store_regulatory_ext_info_to_socpriv(soc_reg, regulat_info, phy_id);
|
|
reg_store_regulatory_ext_info_to_socpriv(soc_reg, regulat_info, phy_id);
|
|
@@ -4038,6 +4190,37 @@ reg_disable_sp_channels_in_super_chan_list(
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+#if defined(CONFIG_AFC_SUPPORT) && defined(CONFIG_REG_CLIENT)
|
|
|
|
+/**
|
|
|
|
+ * reg_client_afc_populate_channels() - Function to populate channels and
|
|
|
|
+ * invoke callbacks to notify the channel list change.
|
|
|
|
+ * @psoc: Pointer to PSOC object
|
|
|
|
+ * @pdev: Pointer to PDEV object
|
|
|
|
+ *
|
|
|
|
+ * Return: None
|
|
|
|
+ */
|
|
|
|
+static void
|
|
|
|
+reg_client_afc_populate_channels(struct wlan_objmgr_psoc *psoc,
|
|
|
|
+ struct wlan_objmgr_pdev *pdev)
|
|
|
|
+{
|
|
|
|
+ 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_alert("pdev reg component is NULL");
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ reg_compute_pdev_current_chan_list(pdev_priv_obj);
|
|
|
|
+ reg_send_scheduler_msg_nb(psoc, pdev);
|
|
|
|
+}
|
|
|
|
+#else
|
|
|
|
+static inline void
|
|
|
|
+reg_client_afc_populate_channels(struct wlan_objmgr_psoc *psoc,
|
|
|
|
+ struct wlan_objmgr_pdev *pdev)
|
|
|
|
+{
|
|
|
|
+}
|
|
|
|
+#endif
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* reg_process_afc_expiry_event() - Process the afc expiry event and get the
|
|
* reg_process_afc_expiry_event() - Process the afc expiry event and get the
|
|
* afc request id
|
|
* afc request id
|
|
@@ -4108,6 +4291,7 @@ reg_process_afc_expiry_event(struct afc_regulatory_info *afc_info)
|
|
pdev_priv_obj->is_6g_afc_power_event_received = false;
|
|
pdev_priv_obj->is_6g_afc_power_event_received = false;
|
|
reg_disable_afc_mas_chan_list_channels(pdev_priv_obj);
|
|
reg_disable_afc_mas_chan_list_channels(pdev_priv_obj);
|
|
reg_disable_sp_channels_in_super_chan_list(pdev_priv_obj);
|
|
reg_disable_sp_channels_in_super_chan_list(pdev_priv_obj);
|
|
|
|
+ reg_client_afc_populate_channels(psoc, pdev);
|
|
if (tx_ops->trigger_acs_for_afc)
|
|
if (tx_ops->trigger_acs_for_afc)
|
|
tx_ops->trigger_acs_for_afc(pdev);
|
|
tx_ops->trigger_acs_for_afc(pdev);
|
|
break;
|
|
break;
|
|
@@ -4564,7 +4748,7 @@ reg_process_afc_power_event(struct afc_regulatory_info *afc_info)
|
|
afc_mas_chan_list = this_mchan_params->mas_chan_list_6g_afc;
|
|
afc_mas_chan_list = this_mchan_params->mas_chan_list_6g_afc;
|
|
qdf_mem_zero(afc_mas_chan_list,
|
|
qdf_mem_zero(afc_mas_chan_list,
|
|
NUM_6GHZ_CHANNELS * sizeof(struct regulatory_channel));
|
|
NUM_6GHZ_CHANNELS * sizeof(struct regulatory_channel));
|
|
- reg_init_6g_master_chan(afc_mas_chan_list, soc_reg);
|
|
|
|
|
|
+ reg_init_6ghz_master_chan(afc_mas_chan_list, soc_reg);
|
|
soc_reg->mas_chan_params[phy_id].is_6g_afc_power_event_received = true;
|
|
soc_reg->mas_chan_params[phy_id].is_6g_afc_power_event_received = true;
|
|
pdev = wlan_objmgr_get_pdev_by_id(psoc, pdev_id, dbg_id);
|
|
pdev = wlan_objmgr_get_pdev_by_id(psoc, pdev_id, dbg_id);
|
|
|
|
|
|
@@ -4582,7 +4766,7 @@ reg_process_afc_power_event(struct afc_regulatory_info *afc_info)
|
|
}
|
|
}
|
|
|
|
|
|
reg_init_pdev_super_chan_list(pdev_priv_obj);
|
|
reg_init_pdev_super_chan_list(pdev_priv_obj);
|
|
- reg_init_6g_master_chan(pdev_priv_obj->afc_chan_list, soc_reg);
|
|
|
|
|
|
+ reg_init_6ghz_master_chan(pdev_priv_obj->afc_chan_list, soc_reg);
|
|
/* Free the old power_info event if it was allocated */
|
|
/* Free the old power_info event if it was allocated */
|
|
if (pdev_priv_obj->power_info)
|
|
if (pdev_priv_obj->power_info)
|
|
reg_free_afc_pwr_info(pdev_priv_obj);
|
|
reg_free_afc_pwr_info(pdev_priv_obj);
|
|
@@ -4607,6 +4791,7 @@ reg_process_afc_power_event(struct afc_regulatory_info *afc_info)
|
|
|
|
|
|
reg_modify_6g_afc_chan_list(pdev_priv_obj);
|
|
reg_modify_6g_afc_chan_list(pdev_priv_obj);
|
|
reg_compute_super_chan_list(pdev_priv_obj);
|
|
reg_compute_super_chan_list(pdev_priv_obj);
|
|
|
|
+ reg_client_afc_populate_channels(psoc, pdev);
|
|
|
|
|
|
if (tx_ops->trigger_acs_for_afc &&
|
|
if (tx_ops->trigger_acs_for_afc &&
|
|
!wlan_reg_is_noaction_on_afc_pwr_evt(pdev) &&
|
|
!wlan_reg_is_noaction_on_afc_pwr_evt(pdev) &&
|