Commit df42bfc9 authored by Vasanthakumar Thiagarajan's avatar Vasanthakumar Thiagarajan Committed by Johannes Berg
Browse files

wifi: cfg80211: Add utility API to get radio index from channel



Add utility API cfg80211_get_radio_idx_by_chan() to retrieve the radio
index corresponding to a given channel in a multi-radio wiphy.

This utility function can be used when we want to check the radio-specific
data for a channel in a multi-radio wiphy. For example, it can help
determine the radio index required to handle a scan request. This index
can then be used to decide whether the scan can proceed without
interfering with ongoing DFS operations on another radio.

Signed-off-by: default avatarVasanthakumar Thiagarajan <vasanthakumar.thiagarajan@oss.qualcomm.com>
Co-developed-by: default avatarRaj Kumar Bhagat <quic_rajkbhag@quicinc.com>
Signed-off-by: default avatarRaj Kumar Bhagat <quic_rajkbhag@quicinc.com>
Link: https://patch.msgid.link/20250527-mlo-dfs-acs-v2-1-92c2f37c81d9@quicinc.com


Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent aa34ecc4
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -9372,6 +9372,17 @@ int cfg80211_iter_combinations(struct wiphy *wiphy,
			       void (*iter)(const struct ieee80211_iface_combination *c,
					    void *data),
			       void *data);
/**
 * cfg80211_get_radio_idx_by_chan - get the radio index by the channel
 *
 * @wiphy: the wiphy
 * @chan: channel for which the supported radio index is required
 *
 * Return: radio index on success or a negative error code
 */
int cfg80211_get_radio_idx_by_chan(struct wiphy *wiphy,
				   const struct ieee80211_channel *chan);


/**
 * cfg80211_stop_iface - trigger interface disconnection
+24 −0
Original line number Diff line number Diff line
@@ -2516,6 +2516,30 @@ int cfg80211_check_combinations(struct wiphy *wiphy,
}
EXPORT_SYMBOL(cfg80211_check_combinations);

int cfg80211_get_radio_idx_by_chan(struct wiphy *wiphy,
				   const struct ieee80211_channel *chan)
{
	const struct wiphy_radio *radio;
	int i, j;
	u32 freq;

	if (!chan)
		return -EINVAL;

	freq = ieee80211_channel_to_khz(chan);
	for (i = 0; i < wiphy->n_radio; i++) {
		radio = &wiphy->radio[i];
		for (j = 0; j < radio->n_freq_range; j++) {
			if (freq >= radio->freq_range[j].start_freq &&
			    freq < radio->freq_range[j].end_freq)
				return i;
		}
	}

	return -ENOENT;
}
EXPORT_SYMBOL(cfg80211_get_radio_idx_by_chan);

int ieee80211_get_ratemask(struct ieee80211_supported_band *sband,
			   const u8 *rates, unsigned int n_rates,
			   u32 *mask)