mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
Merge remote-tracking branch 'net-next/master' into mac80211-next
Merge net-next, which pulled in net, so I can merge a few more patches that would otherwise conflict. Signed-off-by: Johannes Berg <[email protected]>
This commit is contained in:
commit
188de5dd80
916 changed files with 28401 additions and 18972 deletions
|
|
@ -3770,6 +3770,7 @@ static bool ht_rateset_to_mask(struct ieee80211_supported_band *sband,
|
|||
return false;
|
||||
|
||||
/* check availability */
|
||||
ridx = array_index_nospec(ridx, IEEE80211_HT_MCS_MASK_LEN);
|
||||
if (sband->ht_cap.mcs.rx_mask[ridx] & rbit)
|
||||
mcs[ridx] |= rbit;
|
||||
else
|
||||
|
|
@ -10279,7 +10280,7 @@ static int cfg80211_cqm_rssi_update(struct cfg80211_registered_device *rdev,
|
|||
struct wireless_dev *wdev = dev->ieee80211_ptr;
|
||||
s32 last, low, high;
|
||||
u32 hyst;
|
||||
int i, n;
|
||||
int i, n, low_index;
|
||||
int err;
|
||||
|
||||
/* RSSI reporting disabled? */
|
||||
|
|
@ -10316,10 +10317,19 @@ static int cfg80211_cqm_rssi_update(struct cfg80211_registered_device *rdev,
|
|||
if (last < wdev->cqm_config->rssi_thresholds[i])
|
||||
break;
|
||||
|
||||
low = i > 0 ?
|
||||
(wdev->cqm_config->rssi_thresholds[i - 1] - hyst) : S32_MIN;
|
||||
high = i < n ?
|
||||
(wdev->cqm_config->rssi_thresholds[i] + hyst - 1) : S32_MAX;
|
||||
low_index = i - 1;
|
||||
if (low_index >= 0) {
|
||||
low_index = array_index_nospec(low_index, n);
|
||||
low = wdev->cqm_config->rssi_thresholds[low_index] - hyst;
|
||||
} else {
|
||||
low = S32_MIN;
|
||||
}
|
||||
if (i < n) {
|
||||
i = array_index_nospec(i, n);
|
||||
high = wdev->cqm_config->rssi_thresholds[i] + hyst - 1;
|
||||
} else {
|
||||
high = S32_MAX;
|
||||
}
|
||||
|
||||
return rdev_set_cqm_rssi_range_config(rdev, dev, low, high);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2667,11 +2667,12 @@ static void reg_process_hint(struct regulatory_request *reg_request)
|
|||
{
|
||||
struct wiphy *wiphy = NULL;
|
||||
enum reg_request_treatment treatment;
|
||||
enum nl80211_reg_initiator initiator = reg_request->initiator;
|
||||
|
||||
if (reg_request->wiphy_idx != WIPHY_IDX_INVALID)
|
||||
wiphy = wiphy_idx_to_wiphy(reg_request->wiphy_idx);
|
||||
|
||||
switch (reg_request->initiator) {
|
||||
switch (initiator) {
|
||||
case NL80211_REGDOM_SET_BY_CORE:
|
||||
treatment = reg_process_hint_core(reg_request);
|
||||
break;
|
||||
|
|
@ -2689,7 +2690,7 @@ static void reg_process_hint(struct regulatory_request *reg_request)
|
|||
treatment = reg_process_hint_country_ie(wiphy, reg_request);
|
||||
break;
|
||||
default:
|
||||
WARN(1, "invalid initiator %d\n", reg_request->initiator);
|
||||
WARN(1, "invalid initiator %d\n", initiator);
|
||||
goto out_free;
|
||||
}
|
||||
|
||||
|
|
@ -2704,7 +2705,7 @@ static void reg_process_hint(struct regulatory_request *reg_request)
|
|||
*/
|
||||
if (treatment == REG_REQ_ALREADY_SET && wiphy &&
|
||||
wiphy->regulatory_flags & REGULATORY_STRICT_REG) {
|
||||
wiphy_update_regulatory(wiphy, reg_request->initiator);
|
||||
wiphy_update_regulatory(wiphy, initiator);
|
||||
wiphy_all_share_dfs_chan_state(wiphy);
|
||||
reg_check_channels();
|
||||
}
|
||||
|
|
@ -2873,6 +2874,7 @@ static int regulatory_hint_core(const char *alpha2)
|
|||
request->alpha2[0] = alpha2[0];
|
||||
request->alpha2[1] = alpha2[1];
|
||||
request->initiator = NL80211_REGDOM_SET_BY_CORE;
|
||||
request->wiphy_idx = WIPHY_IDX_INVALID;
|
||||
|
||||
queue_regulatory_request(request);
|
||||
|
||||
|
|
|
|||
|
|
@ -1058,13 +1058,23 @@ cfg80211_bss_update(struct cfg80211_registered_device *rdev,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Update RX channel information based on the available frame payload
|
||||
* information. This is mainly for the 2.4 GHz band where frames can be received
|
||||
* from neighboring channels and the Beacon frames use the DSSS Parameter Set
|
||||
* element to indicate the current (transmitting) channel, but this might also
|
||||
* be needed on other bands if RX frequency does not match with the actual
|
||||
* operating channel of a BSS.
|
||||
*/
|
||||
static struct ieee80211_channel *
|
||||
cfg80211_get_bss_channel(struct wiphy *wiphy, const u8 *ie, size_t ielen,
|
||||
struct ieee80211_channel *channel)
|
||||
struct ieee80211_channel *channel,
|
||||
enum nl80211_bss_scan_width scan_width)
|
||||
{
|
||||
const u8 *tmp;
|
||||
u32 freq;
|
||||
int channel_number = -1;
|
||||
struct ieee80211_channel *alt_channel;
|
||||
|
||||
tmp = cfg80211_find_ie(WLAN_EID_DS_PARAMS, ie, ielen);
|
||||
if (tmp && tmp[1] == 1) {
|
||||
|
|
@ -1078,16 +1088,45 @@ cfg80211_get_bss_channel(struct wiphy *wiphy, const u8 *ie, size_t ielen,
|
|||
}
|
||||
}
|
||||
|
||||
if (channel_number < 0)
|
||||
if (channel_number < 0) {
|
||||
/* No channel information in frame payload */
|
||||
return channel;
|
||||
}
|
||||
|
||||
freq = ieee80211_channel_to_frequency(channel_number, channel->band);
|
||||
channel = ieee80211_get_channel(wiphy, freq);
|
||||
if (!channel)
|
||||
alt_channel = ieee80211_get_channel(wiphy, freq);
|
||||
if (!alt_channel) {
|
||||
if (channel->band == NL80211_BAND_2GHZ) {
|
||||
/*
|
||||
* Better not allow unexpected channels when that could
|
||||
* be going beyond the 1-11 range (e.g., discovering
|
||||
* BSS on channel 12 when radio is configured for
|
||||
* channel 11.
|
||||
*/
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* No match for the payload channel number - ignore it */
|
||||
return channel;
|
||||
}
|
||||
|
||||
if (scan_width == NL80211_BSS_CHAN_WIDTH_10 ||
|
||||
scan_width == NL80211_BSS_CHAN_WIDTH_5) {
|
||||
/*
|
||||
* Ignore channel number in 5 and 10 MHz channels where there
|
||||
* may not be an n:1 or 1:n mapping between frequencies and
|
||||
* channel numbers.
|
||||
*/
|
||||
return channel;
|
||||
}
|
||||
|
||||
/*
|
||||
* Use the channel determined through the payload channel number
|
||||
* instead of the RX channel reported by the driver.
|
||||
*/
|
||||
if (alt_channel->flags & IEEE80211_CHAN_DISABLED)
|
||||
return NULL;
|
||||
if (channel->flags & IEEE80211_CHAN_DISABLED)
|
||||
return NULL;
|
||||
return channel;
|
||||
return alt_channel;
|
||||
}
|
||||
|
||||
/* Returned bss is reference counted and must be cleaned up appropriately. */
|
||||
|
|
@ -1112,7 +1151,8 @@ cfg80211_inform_bss_data(struct wiphy *wiphy,
|
|||
(data->signal < 0 || data->signal > 100)))
|
||||
return NULL;
|
||||
|
||||
channel = cfg80211_get_bss_channel(wiphy, ie, ielen, data->chan);
|
||||
channel = cfg80211_get_bss_channel(wiphy, ie, ielen, data->chan,
|
||||
data->scan_width);
|
||||
if (!channel)
|
||||
return NULL;
|
||||
|
||||
|
|
@ -1210,7 +1250,7 @@ cfg80211_inform_bss_frame_data(struct wiphy *wiphy,
|
|||
return NULL;
|
||||
|
||||
channel = cfg80211_get_bss_channel(wiphy, mgmt->u.beacon.variable,
|
||||
ielen, data->chan);
|
||||
ielen, data->chan, data->scan_width);
|
||||
if (!channel)
|
||||
return NULL;
|
||||
|
||||
|
|
|
|||
|
|
@ -1278,12 +1278,16 @@ static int cfg80211_wext_giwrate(struct net_device *dev,
|
|||
if (err)
|
||||
return err;
|
||||
|
||||
if (!(sinfo.filled & BIT_ULL(NL80211_STA_INFO_TX_BITRATE)))
|
||||
return -EOPNOTSUPP;
|
||||
if (!(sinfo.filled & BIT_ULL(NL80211_STA_INFO_TX_BITRATE))) {
|
||||
err = -EOPNOTSUPP;
|
||||
goto free;
|
||||
}
|
||||
|
||||
rate->value = 100000 * cfg80211_calculate_bitrate(&sinfo.txrate);
|
||||
|
||||
return 0;
|
||||
free:
|
||||
cfg80211_sinfo_release_content(&sinfo);
|
||||
return err;
|
||||
}
|
||||
|
||||
/* Get wireless statistics. Called by /proc/net/wireless and by SIOCGIWSTATS */
|
||||
|
|
@ -1293,7 +1297,7 @@ static struct iw_statistics *cfg80211_wireless_stats(struct net_device *dev)
|
|||
struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
|
||||
/* we are under RTNL - globally locked - so can use static structs */
|
||||
static struct iw_statistics wstats;
|
||||
static struct station_info sinfo;
|
||||
static struct station_info sinfo = {};
|
||||
u8 bssid[ETH_ALEN];
|
||||
|
||||
if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION)
|
||||
|
|
@ -1352,6 +1356,8 @@ static struct iw_statistics *cfg80211_wireless_stats(struct net_device *dev)
|
|||
if (sinfo.filled & BIT_ULL(NL80211_STA_INFO_TX_FAILED))
|
||||
wstats.discard.retries = sinfo.tx_failed;
|
||||
|
||||
cfg80211_sinfo_release_content(&sinfo);
|
||||
|
||||
return &wstats;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue