Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8fd69cb2 authored by sheenam monga's avatar sheenam monga Committed by Madan Koyyalamudi
Browse files

qcacmn: Check ext cc event support before pouplating sec chan list

Currently host is populating secondary channel list from master
channel list based on ap power type. In case fw doesn't support
extd cc event then secondary channel list will not have 6g freq,
which may break legacy 6g handling.

Fix is to add validation check for ext cc event support, copy
secondary channel list from ap power type in case ext cc event
is supported by fw else copy secondary channel list from reg
current channel list.

Change-Id: I2e13be2936b624ccbee5e8e426987355076a0062
CRs-Fixed: 2987951
parent d8163bb3
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -228,8 +228,12 @@ target_if_reg_is_reg_cc_ext_event_host_supported(struct wlan_objmgr_psoc *psoc)
		return reg_ext_cc_supp;
	}

	if (reg_tx_ops->register_master_ext_handler)
	if (reg_tx_ops->register_master_ext_handler) {
		reg_ext_cc_supp = true;
		wlan_psoc_nif_fw_ext_cap_set(psoc,
					     WLAN_SOC_EXT_EVENT_SUPPORTED);
	}


	return reg_ext_cc_supp;
}
+2 −0
Original line number Diff line number Diff line
@@ -146,6 +146,8 @@
#define WLAN_SOC_CEXT_SCAN_PER_CH_CONFIG    0x01000000
	/* CAPABILITY: csa offload in case of AP */
#define WLAN_SOC_CEXT_CSA_TX_OFFLOAD      0x02000000
	/* ext event supported by fw */
#define WLAN_SOC_EXT_EVENT_SUPPORTED      0x04000000

/* feature_flags */
	/* CONF: ATH FF enabled */
+21 −5
Original line number Diff line number Diff line
@@ -1046,15 +1046,31 @@ static void
reg_populate_secondary_cur_chan_list(struct wlan_regulatory_pdev_priv_obj
				     *pdev_priv_obj)
{
	struct wlan_objmgr_psoc *psoc;

	psoc = wlan_pdev_get_psoc(pdev_priv_obj->pdev_ptr);
	if (!psoc) {
		reg_err("psoc is NULL");
		return;
	}
	if (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 {
		qdf_mem_copy(pdev_priv_obj->secondary_cur_chan_list,
			     pdev_priv_obj->cur_chan_list,
			     (NUM_CHANNELS) *
			     sizeof(struct regulatory_channel));
	}
}
#else /* CONFIG_REG_CLIENT */
static void