Commit 62c16f21 authored by Aditya Kumar Singh's avatar Aditya Kumar Singh Committed by Johannes Berg
Browse files

wifi: cfg80211: move DFS related members to links[] in wireless_dev



A few members related to DFS handling are currently under per wireless
device data structure. However, in order to support DFS with MLO, there is
a need to have them on a per-link manner.

Hence, as a preliminary step, move members cac_started, cac_start_time
and cac_time_ms to be on a per-link basis.

Since currently, link ID is not known at all places, use default value of
0 for now.

Signed-off-by: default avatarAditya Kumar Singh <quic_adisi@quicinc.com>
Link: https://patch.msgid.link/20240906064426.2101315-5-quic_adisi@quicinc.com


Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent f4bb650c
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -117,7 +117,7 @@ void mwifiex_dfs_cac_work_queue(struct work_struct *work)
				     dfs_cac_work);

	chandef = priv->dfs_chandef;
	if (priv->wdev.cac_started) {
	if (priv->wdev.links[0].cac_started) {
		mwifiex_dbg(priv->adapter, MSG,
			    "CAC timer finished; No radar detected\n");
		cfg80211_cac_event(priv->netdev, &chandef,
@@ -174,7 +174,7 @@ int mwifiex_stop_radar_detection(struct mwifiex_private *priv,
 */
void mwifiex_abort_cac(struct mwifiex_private *priv)
{
	if (priv->wdev.cac_started) {
	if (priv->wdev.links[0].cac_started) {
		if (mwifiex_stop_radar_detection(priv, &priv->dfs_chandef))
			mwifiex_dbg(priv->adapter, ERROR,
				    "failed to stop CAC in FW\n");
+2 −2
Original line number Diff line number Diff line
@@ -1906,7 +1906,7 @@ mwifiex_cfg80211_del_station(struct wiphy *wiphy, struct net_device *dev,
	struct mwifiex_sta_node *sta_node;
	u8 deauth_mac[ETH_ALEN];

	if (!priv->bss_started && priv->wdev.cac_started) {
	if (!priv->bss_started && priv->wdev.links[0].cac_started) {
		mwifiex_dbg(priv->adapter, INFO, "%s: abort CAC!\n", __func__);
		mwifiex_abort_cac(priv);
	}
@@ -4038,7 +4038,7 @@ mwifiex_cfg80211_channel_switch(struct wiphy *wiphy, struct net_device *dev,
		return -EBUSY;
	}

	if (priv->wdev.cac_started)
	if (priv->wdev.links[0].cac_started)
		return -EBUSY;

	if (cfg80211_chandef_identical(&params->chandef,
+3 −3
Original line number Diff line number Diff line
@@ -520,21 +520,21 @@ static int qtnf_event_handle_radar(struct qtnf_vif *vif,
		cfg80211_radar_event(wiphy, &chandef, GFP_KERNEL);
		break;
	case QLINK_RADAR_CAC_FINISHED:
		if (!vif->wdev.cac_started)
		if (!vif->wdev.links[0].cac_started)
			break;

		cfg80211_cac_event(vif->netdev, &chandef,
				   NL80211_RADAR_CAC_FINISHED, GFP_KERNEL);
		break;
	case QLINK_RADAR_CAC_ABORTED:
		if (!vif->wdev.cac_started)
		if (!vif->wdev.links[0].cac_started)
			break;

		cfg80211_cac_event(vif->netdev, &chandef,
				   NL80211_RADAR_CAC_ABORTED, GFP_KERNEL);
		break;
	case QLINK_RADAR_CAC_STARTED:
		if (vif->wdev.cac_started)
		if (vif->wdev.links[0].cac_started)
			break;

		if (!wiphy_ext_feature_isset(wiphy,
+9 −8
Original line number Diff line number Diff line
@@ -6194,9 +6194,6 @@ enum ieee80211_ap_reg_power {
 * @address: The address for this device, valid only if @netdev is %NULL
 * @is_running: true if this is a non-netdev device that has been started, e.g.
 *	the P2P Device.
 * @cac_started: true if DFS channel availability check has been started
 * @cac_start_time: timestamp (jiffies) when the dfs state was entered.
 * @cac_time_ms: CAC time in ms
 * @ps: powersave mode is enabled
 * @ps_timeout: dynamic powersave timeout
 * @ap_unexpected_nlportid: (private) netlink port ID of application
@@ -6220,6 +6217,11 @@ enum ieee80211_ap_reg_power {
 *	unprotected beacon report
 * @links: array of %IEEE80211_MLD_MAX_NUM_LINKS elements containing @addr
 *	@ap and @client for each link
 * @links[].cac_started: true if DFS channel availability check has been
 *	started
 * @links[].cac_start_time: timestamp (jiffies) when the dfs state was
 *	entered.
 * @links[].cac_time_ms: CAC time in ms
 * @valid_links: bitmap describing what elements of @links are valid
 */
struct wireless_dev {
@@ -6261,11 +6263,6 @@ struct wireless_dev {
	u32 owner_nlportid;
	bool nl_owner_dead;

	/* FIXME: need to rework radar detection for MLO */
	bool cac_started;
	unsigned long cac_start_time;
	unsigned int cac_time_ms;

#ifdef CONFIG_CFG80211_WEXT
	/* wext data */
	struct {
@@ -6332,6 +6329,10 @@ struct wireless_dev {
				struct cfg80211_internal_bss *current_bss;
			} client;
		};

		bool cac_started;
		unsigned long cac_start_time;
		unsigned int cac_time_ms;
	} links[IEEE80211_MLD_MAX_NUM_LINKS];
	u16 valid_links;
};
+4 −4
Original line number Diff line number Diff line
@@ -1662,7 +1662,7 @@ static int ieee80211_stop_ap(struct wiphy *wiphy, struct net_device *dev,
	ieee80211_link_info_change_notify(sdata, link,
					  BSS_CHANGED_BEACON_ENABLED);

	if (sdata->wdev.cac_started) {
	if (sdata->wdev.links[0].cac_started) {
		chandef = link_conf->chanreq.oper;
		wiphy_delayed_work_cancel(wiphy, &link->dfs_cac_timer_work);
		cfg80211_cac_event(sdata->dev, &chandef,
@@ -3501,9 +3501,9 @@ static void ieee80211_end_cac(struct wiphy *wiphy,
		wiphy_delayed_work_cancel(wiphy,
					  &sdata->deflink.dfs_cac_timer_work);

		if (sdata->wdev.cac_started) {
		if (sdata->wdev.links[0].cac_started) {
			ieee80211_link_release_channel(&sdata->deflink);
			sdata->wdev.cac_started = false;
			sdata->wdev.links[0].cac_started = false;
		}
	}
}
@@ -3958,7 +3958,7 @@ __ieee80211_channel_switch(struct wiphy *wiphy, struct net_device *dev,
	if (!list_empty(&local->roc_list) || local->scanning)
		return -EBUSY;

	if (sdata->wdev.cac_started)
	if (sdata->wdev.links[0].cac_started)
		return -EBUSY;

	if (WARN_ON(link_id >= IEEE80211_MLD_MAX_NUM_LINKS))
Loading