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

Commit 0ce77920 authored by Jouni Malinen's avatar Jouni Malinen Committed by Kalle Valo
Browse files

ath6kl: Use cfg80211_inform_bss instead of cfg80211_inform_bss_frame



There is no point in generating a bogus Beacon frame for
cfg80211_inform_bss_frame when cfg80211_inform_bss can be used
instead.

Signed-off-by: default avatarJouni Malinen <jouni@qca.qualcomm.com>
Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
parent 2fa8b6a0
Loading
Loading
Loading
Loading
+17 −27
Original line number Diff line number Diff line
@@ -723,8 +723,6 @@ static inline bool is_ch_11a(u16 ch)
/* struct ath6kl_node_table::nt_nodelock is locked when calling this */
void ath6kl_cfg80211_scan_node(struct wiphy *wiphy, struct bss *ni)
{
	u16 size;
	unsigned char *ieeemgmtbuf = NULL;
	struct ieee80211_mgmt *mgmt;
	struct ieee80211_channel *channel;
	struct ieee80211_supported_band *band;
@@ -741,37 +739,29 @@ void ath6kl_cfg80211_scan_node(struct wiphy *wiphy, struct bss *ni)
	else
		band = wiphy->bands[IEEE80211_BAND_2GHZ]; /* 11b */

	size = ni->ni_framelen + offsetof(struct ieee80211_mgmt, u);
	ieeemgmtbuf = kmalloc(size, GFP_ATOMIC);
	if (!ieeemgmtbuf) {
		ath6kl_err("ieee mgmt buf alloc error\n");
		return;
	}

	/*
	 * TODO: Update target to include 802.11 mac header while sending
	 * bss info. Target removes 802.11 mac header while sending the bss
	 * info to host, cfg80211 needs it, for time being just filling the
	 * da, sa and bssid fields alone.
	 */
	mgmt = (struct ieee80211_mgmt *)ieeemgmtbuf;
	memset(mgmt->da, 0xff, ETH_ALEN);	/*broadcast addr */
	memcpy(mgmt->sa, ni->ni_macaddr, ETH_ALEN);
	memcpy(mgmt->bssid, ni->ni_macaddr, ETH_ALEN);
	memcpy(ieeemgmtbuf + offsetof(struct ieee80211_mgmt, u),
	       ni->ni_buf, ni->ni_framelen);

	freq = cie->ie_chan;
	channel = ieee80211_get_channel(wiphy, freq);
	signal = ni->ni_snr * 100;

	ath6kl_dbg(ATH6KL_DBG_WLAN_CFG,
		   "%s: bssid %pM ch %d freq %d size %d\n", __func__,
		   mgmt->bssid, channel->hw_value, freq, size);
	cfg80211_inform_bss_frame(wiphy, channel, mgmt,
				  size, signal, GFP_ATOMIC);

	kfree(ieeemgmtbuf);
		   ni->ni_macaddr, channel->hw_value, freq, ni->ni_framelen);
	/*
	 * Both Beacon and Probe Response frames have same payload structure,
	 * so it is fine to share the parser for both.
	 */
	if (ni->ni_framelen < 8 + 2 + 2)
		return;
	mgmt = (struct ieee80211_mgmt *) (ni->ni_buf -
					  offsetof(struct ieee80211_mgmt, u));
	cfg80211_inform_bss(wiphy, channel, ni->ni_macaddr,
			    le64_to_cpu(mgmt->u.beacon.timestamp),
			    le16_to_cpu(mgmt->u.beacon.capab_info),
			    le16_to_cpu(mgmt->u.beacon.beacon_int),
			    mgmt->u.beacon.variable,
			    ni->ni_buf + ni->ni_framelen -
			    mgmt->u.beacon.variable,
			    signal, GFP_ATOMIC);
}

static int ath6kl_cfg80211_scan(struct wiphy *wiphy, struct net_device *ndev,