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

Commit 15214c2f authored by John W. Linville's avatar John W. Linville
Browse files
parents c7515d23 aa5f66d5
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -3056,6 +3056,9 @@ static int prepare_for_handlers(struct ieee80211_rx_data *rx,
	case NL80211_IFTYPE_ADHOC:
	case NL80211_IFTYPE_ADHOC:
		if (!bssid)
		if (!bssid)
			return 0;
			return 0;
		if (ether_addr_equal(sdata->vif.addr, hdr->addr2) ||
		    ether_addr_equal(sdata->u.ibss.bssid, hdr->addr2))
			return 0;
		if (ieee80211_is_beacon(hdr->frame_control)) {
		if (ieee80211_is_beacon(hdr->frame_control)) {
			return 1;
			return 1;
		} else if (!ieee80211_bssid_match(bssid, sdata->u.ibss.bssid)) {
		} else if (!ieee80211_bssid_match(bssid, sdata->u.ibss.bssid)) {
+1 −4
Original line number Original line Diff line number Diff line
@@ -2103,7 +2103,7 @@ int ieee80211_add_ext_srates_ie(struct ieee80211_sub_if_data *sdata,
{
{
	struct ieee80211_local *local = sdata->local;
	struct ieee80211_local *local = sdata->local;
	struct ieee80211_supported_band *sband;
	struct ieee80211_supported_band *sband;
	int rate, skip, shift;
	int rate, shift;
	u8 i, exrates, *pos;
	u8 i, exrates, *pos;
	u32 basic_rates = sdata->vif.bss_conf.basic_rates;
	u32 basic_rates = sdata->vif.bss_conf.basic_rates;
	u32 rate_flags;
	u32 rate_flags;
@@ -2131,14 +2131,11 @@ int ieee80211_add_ext_srates_ie(struct ieee80211_sub_if_data *sdata,
		pos = skb_put(skb, exrates + 2);
		pos = skb_put(skb, exrates + 2);
		*pos++ = WLAN_EID_EXT_SUPP_RATES;
		*pos++ = WLAN_EID_EXT_SUPP_RATES;
		*pos++ = exrates;
		*pos++ = exrates;
		skip = 0;
		for (i = 8; i < sband->n_bitrates; i++) {
		for (i = 8; i < sband->n_bitrates; i++) {
			u8 basic = 0;
			u8 basic = 0;
			if ((rate_flags & sband->bitrates[i].flags)
			if ((rate_flags & sband->bitrates[i].flags)
			    != rate_flags)
			    != rate_flags)
				continue;
				continue;
			if (skip++ < 8)
				continue;
			if (need_basic && basic_rates & BIT(i))
			if (need_basic && basic_rates & BIT(i))
				basic = 0x80;
				basic = 0x80;
			rate = DIV_ROUND_UP(sband->bitrates[i].bitrate,
			rate = DIV_ROUND_UP(sband->bitrates[i].bitrate,
+13 −8
Original line number Original line Diff line number Diff line
@@ -566,18 +566,13 @@ int wiphy_register(struct wiphy *wiphy)
	/* check and set up bitrates */
	/* check and set up bitrates */
	ieee80211_set_bitrate_flags(wiphy);
	ieee80211_set_bitrate_flags(wiphy);



	rtnl_lock();
	res = device_add(&rdev->wiphy.dev);
	res = device_add(&rdev->wiphy.dev);
	if (res)
		return res;

	res = rfkill_register(rdev->rfkill);
	if (res) {
	if (res) {
		device_del(&rdev->wiphy.dev);
		rtnl_unlock();
		return res;
		return res;
	}
	}


	rtnl_lock();
	/* set up regulatory info */
	/* set up regulatory info */
	wiphy_regulatory_register(wiphy);
	wiphy_regulatory_register(wiphy);


@@ -606,6 +601,15 @@ int wiphy_register(struct wiphy *wiphy)


	rdev->wiphy.registered = true;
	rdev->wiphy.registered = true;
	rtnl_unlock();
	rtnl_unlock();

	res = rfkill_register(rdev->rfkill);
	if (res) {
		rfkill_destroy(rdev->rfkill);
		rdev->rfkill = NULL;
		wiphy_unregister(&rdev->wiphy);
		return res;
	}

	return 0;
	return 0;
}
}
EXPORT_SYMBOL(wiphy_register);
EXPORT_SYMBOL(wiphy_register);
@@ -640,6 +644,7 @@ void wiphy_unregister(struct wiphy *wiphy)
		rtnl_unlock();
		rtnl_unlock();
		__count == 0; }));
		__count == 0; }));


	if (rdev->rfkill)
		rfkill_unregister(rdev->rfkill);
		rfkill_unregister(rdev->rfkill);


	rtnl_lock();
	rtnl_lock();
+3 −0
Original line number Original line Diff line number Diff line
@@ -263,6 +263,8 @@ int cfg80211_ibss_wext_join(struct cfg80211_registered_device *rdev,
				if (chan->flags & IEEE80211_CHAN_DISABLED)
				if (chan->flags & IEEE80211_CHAN_DISABLED)
					continue;
					continue;
				wdev->wext.ibss.chandef.chan = chan;
				wdev->wext.ibss.chandef.chan = chan;
				wdev->wext.ibss.chandef.center_freq1 =
					chan->center_freq;
				break;
				break;
			}
			}


@@ -347,6 +349,7 @@ int cfg80211_ibss_wext_siwfreq(struct net_device *dev,
	if (chan) {
	if (chan) {
		wdev->wext.ibss.chandef.chan = chan;
		wdev->wext.ibss.chandef.chan = chan;
		wdev->wext.ibss.chandef.width = NL80211_CHAN_WIDTH_20_NOHT;
		wdev->wext.ibss.chandef.width = NL80211_CHAN_WIDTH_20_NOHT;
		wdev->wext.ibss.chandef.center_freq1 = freq;
		wdev->wext.ibss.channel_fixed = true;
		wdev->wext.ibss.channel_fixed = true;
	} else {
	} else {
		/* cfg80211_ibss_wext_join will pick one if needed */
		/* cfg80211_ibss_wext_join will pick one if needed */
+2 −2
Original line number Original line Diff line number Diff line
@@ -2421,7 +2421,7 @@ static int nl80211_set_interface(struct sk_buff *skb, struct genl_info *info)
		change = true;
		change = true;
	}
	}


	if (flags && (*flags & NL80211_MNTR_FLAG_ACTIVE) &&
	if (flags && (*flags & MONITOR_FLAG_ACTIVE) &&
	    !(rdev->wiphy.features & NL80211_FEATURE_ACTIVE_MONITOR))
	    !(rdev->wiphy.features & NL80211_FEATURE_ACTIVE_MONITOR))
		return -EOPNOTSUPP;
		return -EOPNOTSUPP;


@@ -2483,7 +2483,7 @@ static int nl80211_new_interface(struct sk_buff *skb, struct genl_info *info)
				  info->attrs[NL80211_ATTR_MNTR_FLAGS] : NULL,
				  info->attrs[NL80211_ATTR_MNTR_FLAGS] : NULL,
				  &flags);
				  &flags);


	if (!err && (flags & NL80211_MNTR_FLAG_ACTIVE) &&
	if (!err && (flags & MONITOR_FLAG_ACTIVE) &&
	    !(rdev->wiphy.features & NL80211_FEATURE_ACTIVE_MONITOR))
	    !(rdev->wiphy.features & NL80211_FEATURE_ACTIVE_MONITOR))
		return -EOPNOTSUPP;
		return -EOPNOTSUPP;