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

Commit 562a7480 authored by Johannes Berg's avatar Johannes Berg Committed by John W. Linville
Browse files

nl80211: advertise device AP SME



Add the ability to advertise that the device
contains the AP SME and what features it can
support. There are currently no features in
the bitmap -- probe response offload will be
advertised by a few patches Arik is working
on now (who took over from Guy Eilam) and a
device with AP SME will typically implement
and require response offload.

Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 21fc7560
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -1548,7 +1548,8 @@ static int ath6kl_init(struct net_device *dev)
	ar->conf_flags = ATH6KL_CONF_IGNORE_ERP_BARKER |
			 ATH6KL_CONF_ENABLE_11N | ATH6KL_CONF_ENABLE_TX_BURST;

	ar->wdev->wiphy->flags |= WIPHY_FLAG_SUPPORTS_FW_ROAM;
	ar->wdev->wiphy->flags |= WIPHY_FLAG_SUPPORTS_FW_ROAM |
				  WIPHY_FLAG_HAVE_AP_SME;

	status = ath6kl_target_config_wlan_params(ar);
	if (!status)
+15 −0
Original line number Diff line number Diff line
@@ -1121,6 +1121,11 @@ enum nl80211_commands {
 *	%NL80211_CMD_TDLS_MGMT. Otherwise %NL80211_CMD_TDLS_OPER should be
 *	used for asking the driver to perform a TDLS operation.
 *
 * @NL80211_ATTR_DEVICE_AP_SME: This u32 attribute may be listed for devices
 *	that have AP support to indicate that they have the AP SME integrated
 *	with support for the features listed in this attribute, see
 *	&enum nl80211_ap_sme_features.
 *
 * @NL80211_ATTR_MAX: highest attribute number currently defined
 * @__NL80211_ATTR_AFTER_LAST: internal use
 */
@@ -1349,6 +1354,8 @@ enum nl80211_attrs {
	NL80211_ATTR_TDLS_SUPPORT,
	NL80211_ATTR_TDLS_EXTERNAL_SETUP,

	NL80211_ATTR_DEVICE_AP_SME,

	/* add attributes here, update the policy in nl80211.c */

	__NL80211_ATTR_AFTER_LAST,
@@ -2662,4 +2669,12 @@ enum nl80211_tdls_operation {
	NL80211_TDLS_DISABLE_LINK,
};

/*
 * enum nl80211_ap_sme_features - device-integrated AP features
 * Reserved for future use, no bits are defined in
 * NL80211_ATTR_DEVICE_AP_SME yet.
enum nl80211_ap_sme_features {
};
 */

#endif /* __LINUX_NL80211_H */
+6 −0
Original line number Diff line number Diff line
@@ -1679,6 +1679,7 @@ struct cfg80211_ops {
 *	teardown packets should be sent through the @NL80211_CMD_TDLS_MGMT
 *	command. When this flag is not set, @NL80211_CMD_TDLS_OPER should be
 *	used for asking the driver/firmware to perform a TDLS operation.
 * @WIPHY_FLAG_HAVE_AP_SME: device integrates AP SME
 */
enum wiphy_flags {
	WIPHY_FLAG_CUSTOM_REGULATORY		= BIT(0),
@@ -1697,6 +1698,7 @@ enum wiphy_flags {
	WIPHY_FLAG_AP_UAPSD			= BIT(14),
	WIPHY_FLAG_SUPPORTS_TDLS		= BIT(15),
	WIPHY_FLAG_TDLS_EXTERNAL_SETUP		= BIT(16),
	WIPHY_FLAG_HAVE_AP_SME			= BIT(17),
};

/**
@@ -1907,6 +1909,8 @@ struct wiphy_wowlan_support {
 *	may request, if implemented.
 *
 * @wowlan: WoWLAN support information
 *
 * @ap_sme_capa: AP SME capabilities, flags from &enum nl80211_ap_sme_features.
 */
struct wiphy {
	/* assign these fields before you register the wiphy */
@@ -1930,6 +1934,8 @@ struct wiphy {

	u32 flags;

	u32 ap_sme_capa;

	enum cfg80211_signal_type signal_type;

	int bss_priv_size;
+4 −0
Original line number Diff line number Diff line
@@ -492,6 +492,10 @@ int wiphy_register(struct wiphy *wiphy)
		    !(wiphy->wowlan.flags & WIPHY_WOWLAN_SUPPORTS_GTK_REKEY)))
		return -EINVAL;

	if (WARN_ON(wiphy->ap_sme_capa &&
		    !(wiphy->flags & WIPHY_FLAG_HAVE_AP_SME)))
		return -EINVAL;

	if (WARN_ON(wiphy->addresses && !wiphy->n_addresses))
		return -EINVAL;

+4 −0
Original line number Diff line number Diff line
@@ -1007,6 +1007,10 @@ static int nl80211_send_wiphy(struct sk_buff *msg, u32 pid, u32 seq, int flags,
	if (nl80211_put_iface_combinations(&dev->wiphy, msg))
		goto nla_put_failure;

	if (dev->wiphy.flags & WIPHY_FLAG_HAVE_AP_SME)
		NLA_PUT_U32(msg, NL80211_ATTR_DEVICE_AP_SME,
			    dev->wiphy.ap_sme_capa);

	return genlmsg_end(msg, hdr);

 nla_put_failure: