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

Commit bf0c111e authored by Mahesh Palivela's avatar Mahesh Palivela Committed by Johannes Berg
Browse files

cfg80211: allow advertising VHT capabilities



Allow drivers to advertise their VHT capabilities
and export them to userspace via nl80211.

Signed-off-by: default avatarMahesh Palivela <maheshp@posedge.com>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent ce0e1695
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -1813,6 +1813,9 @@ enum nl80211_mpath_info {
 * @NL80211_BAND_ATTR_HT_CAPA: HT capabilities, as in the HT information IE
 * @NL80211_BAND_ATTR_HT_AMPDU_FACTOR: A-MPDU factor, as in 11n
 * @NL80211_BAND_ATTR_HT_AMPDU_DENSITY: A-MPDU density, as in 11n
 * @NL80211_BAND_ATTR_VHT_MCS_SET: 32-byte attribute containing the MCS set as
 *	defined in 802.11ac
 * @NL80211_BAND_ATTR_VHT_CAPA: VHT capabilities, as in the HT information IE
 * @NL80211_BAND_ATTR_MAX: highest band attribute currently defined
 * @__NL80211_BAND_ATTR_AFTER_LAST: internal use
 */
@@ -1826,6 +1829,9 @@ enum nl80211_band_attr {
	NL80211_BAND_ATTR_HT_AMPDU_FACTOR,
	NL80211_BAND_ATTR_HT_AMPDU_DENSITY,

	NL80211_BAND_ATTR_VHT_MCS_SET,
	NL80211_BAND_ATTR_VHT_CAPA,

	/* keep last */
	__NL80211_BAND_ATTR_AFTER_LAST,
	NL80211_BAND_ATTR_MAX = __NL80211_BAND_ATTR_AFTER_LAST - 1
+17 −0
Original line number Diff line number Diff line
@@ -210,6 +210,22 @@ struct ieee80211_sta_ht_cap {
	struct ieee80211_mcs_info mcs;
};

/**
 * struct ieee80211_sta_vht_cap - STA's VHT capabilities
 *
 * This structure describes most essential parameters needed
 * to describe 802.11ac VHT capabilities for an STA.
 *
 * @vht_supported: is VHT supported by the STA
 * @cap: VHT capabilities map as described in 802.11ac spec
 * @vht_mcs: Supported VHT MCS rates
 */
struct ieee80211_sta_vht_cap {
	bool vht_supported;
	u32 cap; /* use IEEE80211_VHT_CAP_ */
	struct ieee80211_vht_mcs_info vht_mcs;
};

/**
 * struct ieee80211_supported_band - frequency band definition
 *
@@ -233,6 +249,7 @@ struct ieee80211_supported_band {
	int n_channels;
	int n_bitrates;
	struct ieee80211_sta_ht_cap ht_cap;
	struct ieee80211_sta_vht_cap vht_cap;
};

/*
+9 −0
Original line number Diff line number Diff line
@@ -921,6 +921,15 @@ static int nl80211_send_wiphy(struct sk_buff *msg, u32 pid, u32 seq, int flags,
				dev->wiphy.bands[band]->ht_cap.ampdu_density)))
			goto nla_put_failure;

		/* add VHT info */
		if (dev->wiphy.bands[band]->vht_cap.vht_supported &&
		    (nla_put(msg, NL80211_BAND_ATTR_VHT_MCS_SET,
			     sizeof(dev->wiphy.bands[band]->vht_cap.vht_mcs),
			     &dev->wiphy.bands[band]->vht_cap.vht_mcs) ||
		     nla_put_u32(msg, NL80211_BAND_ATTR_VHT_CAPA,
				 dev->wiphy.bands[band]->vht_cap.cap)))
			goto nla_put_failure;

		/* add frequencies */
		nl_freqs = nla_nest_start(msg, NL80211_BAND_ATTR_FREQS);
		if (!nl_freqs)