mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -04:00
Some more updates:
* use shash in mac80211 crypto code where applicable * some documentation fixes * pass RSSI levels up in change notifications * remove unused rfkill-regulator * various other cleanups -----BEGIN PGP SIGNATURE----- iQIcBAABCgAGBQJYnHuZAAoJEGt7eEactAAdorYP/iIfEZjLblLZNui+93OHpmsq QgXeQ9Vl/Xgq8g6vEb6jpHE6pvT/xoW/jt0s5rpYpPDzP7WRgkFQI144Jflx9gE+ 7KRHYc7k9XqugbFGFakjT+DyduxrGkEhZ7Vpd39D+zlPaf+p/31Jk6C4MNwk2oG3 AA7ARUJfOKGpct3+l+cpnWQPUYQQKrSnjnMIwHL3Tu5pvGPDapdDWXbfn6T75Aof 3oVQSNtbEtdzW/Ty+HgDn/boOCRXzXlOCxFlE7OiH2AXfe2mqGU/hkcm/wZ0QxOf 9m3CxVjKH10tY6nsjDiXTOzFn+Zkzuum9/gcKtsgx+6BZ4qod2XuhtzmTeXggI8F b7nGeadSfSS6/unUu5Fibdn+X4Cw8+Yu5Qyiwo+jLL6yyTLUg6aKN6N9HWddhBfa pIjWAZVA1iB2m2XqUqRB/asEhslndSSfDmZK8nruYJSZWtQBNkNUdHXqqbqbBSHv KtKbHMOKoLU4zKmV2vMWGy0qypZCxtZkNF6GURhMh2m89qBcIAApFwQMzK09MwmP d5TcMwfi8YcKRb1Gw6n7gnJsC8e+tFDGXMi9w6z0FDGZvMbOlnO3ctSd/BY3B01H DWimkX8Ev3kt6KKTgbJ/n0lR/vEmDGdKo2ahH1uHOTPudrjpOHUg0cdDzS/VPZqi Qw4+FbVArISNrI2skTrA =sqkq -----END PGP SIGNATURE----- Merge tag 'mac80211-next-for-davem-2017-02-09' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next Johannes Berg says: ==================== Some more updates: * use shash in mac80211 crypto code where applicable * some documentation fixes * pass RSSI levels up in change notifications * remove unused rfkill-regulator * various other cleanups ==================== Signed-off-by: David S. Miller <[email protected]>
This commit is contained in:
commit
0d2164af26
34 changed files with 559 additions and 843 deletions
|
|
@ -626,7 +626,8 @@ int wiphy_register(struct wiphy *wiphy)
|
|||
|
||||
if (WARN_ON((wiphy->interface_modes & BIT(NL80211_IFTYPE_NAN)) &&
|
||||
(!rdev->ops->start_nan || !rdev->ops->stop_nan ||
|
||||
!rdev->ops->add_nan_func || !rdev->ops->del_nan_func)))
|
||||
!rdev->ops->add_nan_func || !rdev->ops->del_nan_func ||
|
||||
!(wiphy->nan_supported_bands & BIT(NL80211_BAND_2GHZ)))))
|
||||
return -EINVAL;
|
||||
|
||||
#ifndef CONFIG_WIRELESS_WDS
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
static ssize_t name## _read(struct file *file, char __user *userbuf, \
|
||||
size_t count, loff_t *ppos) \
|
||||
{ \
|
||||
struct wiphy *wiphy= file->private_data; \
|
||||
struct wiphy *wiphy = file->private_data; \
|
||||
char buf[buflen]; \
|
||||
int res; \
|
||||
\
|
||||
|
|
@ -29,14 +29,14 @@ static const struct file_operations name## _ops = { \
|
|||
.read = name## _read, \
|
||||
.open = simple_open, \
|
||||
.llseek = generic_file_llseek, \
|
||||
};
|
||||
}
|
||||
|
||||
DEBUGFS_READONLY_FILE(rts_threshold, 20, "%d",
|
||||
wiphy->rts_threshold)
|
||||
wiphy->rts_threshold);
|
||||
DEBUGFS_READONLY_FILE(fragmentation_threshold, 20, "%d",
|
||||
wiphy->frag_threshold);
|
||||
DEBUGFS_READONLY_FILE(short_retry_limit, 20, "%d",
|
||||
wiphy->retry_short)
|
||||
wiphy->retry_short);
|
||||
DEBUGFS_READONLY_FILE(long_retry_limit, 20, "%d",
|
||||
wiphy->retry_long);
|
||||
|
||||
|
|
@ -103,7 +103,7 @@ static const struct file_operations ht40allow_map_ops = {
|
|||
};
|
||||
|
||||
#define DEBUGFS_ADD(name) \
|
||||
debugfs_create_file(#name, S_IRUGO, phyd, &rdev->wiphy, &name## _ops);
|
||||
debugfs_create_file(#name, 0444, phyd, &rdev->wiphy, &name## _ops)
|
||||
|
||||
void cfg80211_debugfs_rdev_add(struct cfg80211_registered_device *rdev)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* Copyright 2006-2010 Johannes Berg <johannes@sipsolutions.net>
|
||||
* Copyright 2013-2014 Intel Mobile Communications GmbH
|
||||
* Copyright 2015-2016 Intel Deutschland GmbH
|
||||
* Copyright 2015-2017 Intel Deutschland GmbH
|
||||
*/
|
||||
|
||||
#include <linux/if.h>
|
||||
|
|
@ -398,7 +398,7 @@ static const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = {
|
|||
},
|
||||
[NL80211_ATTR_MU_MIMO_FOLLOW_MAC_ADDR] = { .len = ETH_ALEN },
|
||||
[NL80211_ATTR_NAN_MASTER_PREF] = { .type = NLA_U8 },
|
||||
[NL80211_ATTR_NAN_DUAL] = { .type = NLA_U8 },
|
||||
[NL80211_ATTR_BANDS] = { .type = NLA_U32 },
|
||||
[NL80211_ATTR_NAN_FUNC] = { .type = NLA_NESTED },
|
||||
[NL80211_ATTR_FILS_KEK] = { .type = NLA_BINARY,
|
||||
.len = FILS_MAX_KEK_LEN },
|
||||
|
|
@ -1886,6 +1886,10 @@ static int nl80211_send_wiphy(struct cfg80211_registered_device *rdev,
|
|||
}
|
||||
}
|
||||
|
||||
if (nla_put_u32(msg, NL80211_ATTR_BANDS,
|
||||
rdev->wiphy.nan_supported_bands))
|
||||
goto nla_put_failure;
|
||||
|
||||
/* done */
|
||||
state->split_start = 0;
|
||||
break;
|
||||
|
|
@ -3743,6 +3747,49 @@ static int nl80211_parse_beacon(struct nlattr *attrs[],
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void nl80211_check_ap_rate_selectors(struct cfg80211_ap_settings *params,
|
||||
const u8 *rates)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!rates)
|
||||
return;
|
||||
|
||||
for (i = 0; i < rates[1]; i++) {
|
||||
if (rates[2 + i] == BSS_MEMBERSHIP_SELECTOR_HT_PHY)
|
||||
params->ht_required = true;
|
||||
if (rates[2 + i] == BSS_MEMBERSHIP_SELECTOR_VHT_PHY)
|
||||
params->vht_required = true;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Since the nl80211 API didn't include, from the beginning, attributes about
|
||||
* HT/VHT requirements/capabilities, we parse them out of the IEs for the
|
||||
* benefit of drivers that rebuild IEs in the firmware.
|
||||
*/
|
||||
static void nl80211_calculate_ap_params(struct cfg80211_ap_settings *params)
|
||||
{
|
||||
const struct cfg80211_beacon_data *bcn = ¶ms->beacon;
|
||||
size_t ies_len = bcn->beacon_ies_len;
|
||||
const u8 *ies = bcn->beacon_ies;
|
||||
const u8 *rates;
|
||||
const u8 *cap;
|
||||
|
||||
rates = cfg80211_find_ie(WLAN_EID_SUPP_RATES, ies, ies_len);
|
||||
nl80211_check_ap_rate_selectors(params, rates);
|
||||
|
||||
rates = cfg80211_find_ie(WLAN_EID_EXT_SUPP_RATES, ies, ies_len);
|
||||
nl80211_check_ap_rate_selectors(params, rates);
|
||||
|
||||
cap = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, ies, ies_len);
|
||||
if (cap && cap[1] >= sizeof(*params->ht_cap))
|
||||
params->ht_cap = (void *)(cap + 2);
|
||||
cap = cfg80211_find_ie(WLAN_EID_VHT_CAPABILITY, ies, ies_len);
|
||||
if (cap && cap[1] >= sizeof(*params->vht_cap))
|
||||
params->vht_cap = (void *)(cap + 2);
|
||||
}
|
||||
|
||||
static bool nl80211_get_ap_channel(struct cfg80211_registered_device *rdev,
|
||||
struct cfg80211_ap_settings *params)
|
||||
{
|
||||
|
|
@ -3971,6 +4018,8 @@ static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info)
|
|||
return PTR_ERR(params.acl);
|
||||
}
|
||||
|
||||
nl80211_calculate_ap_params(¶ms);
|
||||
|
||||
wdev_lock(wdev);
|
||||
err = rdev_start_ap(rdev, dev, ¶ms);
|
||||
if (!err) {
|
||||
|
|
@ -6868,7 +6917,7 @@ nl80211_parse_sched_scan_plans(struct wiphy *wiphy, int n_plans,
|
|||
|
||||
static struct cfg80211_sched_scan_request *
|
||||
nl80211_parse_sched_scan(struct wiphy *wiphy, struct wireless_dev *wdev,
|
||||
struct nlattr **attrs)
|
||||
struct nlattr **attrs, int max_match_sets)
|
||||
{
|
||||
struct cfg80211_sched_scan_request *request;
|
||||
struct nlattr *attr;
|
||||
|
|
@ -6933,7 +6982,7 @@ nl80211_parse_sched_scan(struct wiphy *wiphy, struct wireless_dev *wdev,
|
|||
if (!n_match_sets && default_match_rssi != NL80211_SCAN_RSSI_THOLD_OFF)
|
||||
n_match_sets = 1;
|
||||
|
||||
if (n_match_sets > wiphy->max_match_sets)
|
||||
if (n_match_sets > max_match_sets)
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
if (attrs[NL80211_ATTR_IE])
|
||||
|
|
@ -7233,7 +7282,8 @@ static int nl80211_start_sched_scan(struct sk_buff *skb,
|
|||
return -EINPROGRESS;
|
||||
|
||||
sched_scan_req = nl80211_parse_sched_scan(&rdev->wiphy, wdev,
|
||||
info->attrs);
|
||||
info->attrs,
|
||||
rdev->wiphy.max_match_sets);
|
||||
|
||||
err = PTR_ERR_OR_ZERO(sched_scan_req);
|
||||
if (err)
|
||||
|
|
@ -8586,6 +8636,12 @@ static int nl80211_testmode_dump(struct sk_buff *skb,
|
|||
* so we need to offset by 1.
|
||||
*/
|
||||
phy_idx = cb->args[0] - 1;
|
||||
|
||||
rdev = cfg80211_rdev_by_wiphy_idx(phy_idx);
|
||||
if (!rdev) {
|
||||
err = -ENOENT;
|
||||
goto out_err;
|
||||
}
|
||||
} else {
|
||||
struct nlattr **attrbuf = genl_family_attrbuf(&nl80211_fam);
|
||||
|
||||
|
|
@ -8600,7 +8656,6 @@ static int nl80211_testmode_dump(struct sk_buff *skb,
|
|||
goto out_err;
|
||||
}
|
||||
phy_idx = rdev->wiphy_idx;
|
||||
rdev = NULL;
|
||||
|
||||
if (attrbuf[NL80211_ATTR_TESTDATA])
|
||||
cb->args[1] = (long)attrbuf[NL80211_ATTR_TESTDATA];
|
||||
|
|
@ -8611,12 +8666,6 @@ static int nl80211_testmode_dump(struct sk_buff *skb,
|
|||
data_len = nla_len((void *)cb->args[1]);
|
||||
}
|
||||
|
||||
rdev = cfg80211_rdev_by_wiphy_idx(phy_idx);
|
||||
if (!rdev) {
|
||||
err = -ENOENT;
|
||||
goto out_err;
|
||||
}
|
||||
|
||||
if (!rdev->ops->testmode_dump) {
|
||||
err = -EOPNOTSUPP;
|
||||
goto out_err;
|
||||
|
|
@ -9430,6 +9479,7 @@ nl80211_attr_cqm_policy[NL80211_ATTR_CQM_MAX + 1] = {
|
|||
[NL80211_ATTR_CQM_TXE_RATE] = { .type = NLA_U32 },
|
||||
[NL80211_ATTR_CQM_TXE_PKTS] = { .type = NLA_U32 },
|
||||
[NL80211_ATTR_CQM_TXE_INTVL] = { .type = NLA_U32 },
|
||||
[NL80211_ATTR_CQM_RSSI_LEVEL] = { .type = NLA_S32 },
|
||||
};
|
||||
|
||||
static int nl80211_set_cqm_txe(struct genl_info *info,
|
||||
|
|
@ -10046,7 +10096,8 @@ static int nl80211_parse_wowlan_nd(struct cfg80211_registered_device *rdev,
|
|||
if (err)
|
||||
goto out;
|
||||
|
||||
trig->nd_config = nl80211_parse_sched_scan(&rdev->wiphy, NULL, tb);
|
||||
trig->nd_config = nl80211_parse_sched_scan(&rdev->wiphy, NULL, tb,
|
||||
wowlan->max_nd_match_sets);
|
||||
err = PTR_ERR_OR_ZERO(trig->nd_config);
|
||||
if (err)
|
||||
trig->nd_config = NULL;
|
||||
|
|
@ -10731,15 +10782,22 @@ static int nl80211_start_nan(struct sk_buff *skb, struct genl_info *info)
|
|||
if (!info->attrs[NL80211_ATTR_NAN_MASTER_PREF])
|
||||
return -EINVAL;
|
||||
|
||||
if (!info->attrs[NL80211_ATTR_NAN_DUAL])
|
||||
return -EINVAL;
|
||||
|
||||
conf.master_pref =
|
||||
nla_get_u8(info->attrs[NL80211_ATTR_NAN_MASTER_PREF]);
|
||||
if (!conf.master_pref)
|
||||
return -EINVAL;
|
||||
|
||||
conf.dual = nla_get_u8(info->attrs[NL80211_ATTR_NAN_DUAL]);
|
||||
if (info->attrs[NL80211_ATTR_BANDS]) {
|
||||
u32 bands = nla_get_u32(info->attrs[NL80211_ATTR_BANDS]);
|
||||
|
||||
if (bands & ~(u32)wdev->wiphy->nan_supported_bands)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (bands && !(bands & BIT(NL80211_BAND_2GHZ)))
|
||||
return -EINVAL;
|
||||
|
||||
conf.bands = bands;
|
||||
}
|
||||
|
||||
err = rdev_start_nan(rdev, wdev, &conf);
|
||||
if (err)
|
||||
|
|
@ -11104,9 +11162,17 @@ static int nl80211_nan_change_config(struct sk_buff *skb,
|
|||
changed |= CFG80211_NAN_CONF_CHANGED_PREF;
|
||||
}
|
||||
|
||||
if (info->attrs[NL80211_ATTR_NAN_DUAL]) {
|
||||
conf.dual = nla_get_u8(info->attrs[NL80211_ATTR_NAN_DUAL]);
|
||||
changed |= CFG80211_NAN_CONF_CHANGED_DUAL;
|
||||
if (info->attrs[NL80211_ATTR_BANDS]) {
|
||||
u32 bands = nla_get_u32(info->attrs[NL80211_ATTR_BANDS]);
|
||||
|
||||
if (bands & ~(u32)wdev->wiphy->nan_supported_bands)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (bands && !(bands & BIT(NL80211_BAND_2GHZ)))
|
||||
return -EINVAL;
|
||||
|
||||
conf.bands = bands;
|
||||
changed |= CFG80211_NAN_CONF_CHANGED_BANDS;
|
||||
}
|
||||
|
||||
if (!changed)
|
||||
|
|
@ -13914,11 +13980,11 @@ static void cfg80211_send_cqm(struct sk_buff *msg, gfp_t gfp)
|
|||
|
||||
void cfg80211_cqm_rssi_notify(struct net_device *dev,
|
||||
enum nl80211_cqm_rssi_threshold_event rssi_event,
|
||||
gfp_t gfp)
|
||||
s32 rssi_level, gfp_t gfp)
|
||||
{
|
||||
struct sk_buff *msg;
|
||||
|
||||
trace_cfg80211_cqm_rssi_notify(dev, rssi_event);
|
||||
trace_cfg80211_cqm_rssi_notify(dev, rssi_event, rssi_level);
|
||||
|
||||
if (WARN_ON(rssi_event != NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW &&
|
||||
rssi_event != NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH))
|
||||
|
|
@ -13932,6 +13998,10 @@ void cfg80211_cqm_rssi_notify(struct net_device *dev,
|
|||
rssi_event))
|
||||
goto nla_put_failure;
|
||||
|
||||
if (rssi_level && nla_put_s32(msg, NL80211_ATTR_CQM_RSSI_LEVEL,
|
||||
rssi_level))
|
||||
goto nla_put_failure;
|
||||
|
||||
cfg80211_send_cqm(msg, gfp);
|
||||
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -1915,18 +1915,18 @@ TRACE_EVENT(rdev_start_nan,
|
|||
WIPHY_ENTRY
|
||||
WDEV_ENTRY
|
||||
__field(u8, master_pref)
|
||||
__field(u8, dual);
|
||||
__field(u8, bands);
|
||||
),
|
||||
TP_fast_assign(
|
||||
WIPHY_ASSIGN;
|
||||
WDEV_ASSIGN;
|
||||
__entry->master_pref = conf->master_pref;
|
||||
__entry->dual = conf->dual;
|
||||
__entry->bands = conf->bands;
|
||||
),
|
||||
TP_printk(WIPHY_PR_FMT ", " WDEV_PR_FMT
|
||||
", master preference: %u, dual: %d",
|
||||
", master preference: %u, bands: 0x%0x",
|
||||
WIPHY_PR_ARG, WDEV_PR_ARG, __entry->master_pref,
|
||||
__entry->dual)
|
||||
__entry->bands)
|
||||
);
|
||||
|
||||
TRACE_EVENT(rdev_nan_change_conf,
|
||||
|
|
@ -1937,20 +1937,20 @@ TRACE_EVENT(rdev_nan_change_conf,
|
|||
WIPHY_ENTRY
|
||||
WDEV_ENTRY
|
||||
__field(u8, master_pref)
|
||||
__field(u8, dual);
|
||||
__field(u8, bands);
|
||||
__field(u32, changes);
|
||||
),
|
||||
TP_fast_assign(
|
||||
WIPHY_ASSIGN;
|
||||
WDEV_ASSIGN;
|
||||
__entry->master_pref = conf->master_pref;
|
||||
__entry->dual = conf->dual;
|
||||
__entry->bands = conf->bands;
|
||||
__entry->changes = changes;
|
||||
),
|
||||
TP_printk(WIPHY_PR_FMT ", " WDEV_PR_FMT
|
||||
", master preference: %u, dual: %d, changes: %x",
|
||||
", master preference: %u, bands: 0x%0x, changes: %x",
|
||||
WIPHY_PR_ARG, WDEV_PR_ARG, __entry->master_pref,
|
||||
__entry->dual, __entry->changes)
|
||||
__entry->bands, __entry->changes)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(wiphy_wdev_evt, rdev_stop_nan,
|
||||
|
|
@ -2490,18 +2490,21 @@ TRACE_EVENT(cfg80211_mgmt_tx_status,
|
|||
|
||||
TRACE_EVENT(cfg80211_cqm_rssi_notify,
|
||||
TP_PROTO(struct net_device *netdev,
|
||||
enum nl80211_cqm_rssi_threshold_event rssi_event),
|
||||
TP_ARGS(netdev, rssi_event),
|
||||
enum nl80211_cqm_rssi_threshold_event rssi_event,
|
||||
s32 rssi_level),
|
||||
TP_ARGS(netdev, rssi_event, rssi_level),
|
||||
TP_STRUCT__entry(
|
||||
NETDEV_ENTRY
|
||||
__field(enum nl80211_cqm_rssi_threshold_event, rssi_event)
|
||||
__field(s32, rssi_level)
|
||||
),
|
||||
TP_fast_assign(
|
||||
NETDEV_ASSIGN;
|
||||
__entry->rssi_event = rssi_event;
|
||||
__entry->rssi_level = rssi_level;
|
||||
),
|
||||
TP_printk(NETDEV_PR_FMT ", rssi event: %d",
|
||||
NETDEV_PR_ARG, __entry->rssi_event)
|
||||
TP_printk(NETDEV_PR_FMT ", rssi event: %d, level: %d",
|
||||
NETDEV_PR_ARG, __entry->rssi_event, __entry->rssi_level)
|
||||
);
|
||||
|
||||
TRACE_EVENT(cfg80211_reg_can_beacon,
|
||||
|
|
|
|||
Loading…
Reference in a new issue