|
@@ -908,7 +908,7 @@ nla_put_failure:
|
|
|
static int nl80211_send_wowlan_tcp_caps(struct cfg80211_registered_device *rdev,
|
|
|
struct sk_buff *msg)
|
|
|
{
|
|
|
- const struct wiphy_wowlan_tcp_support *tcp = rdev->wiphy.wowlan.tcp;
|
|
|
+ const struct wiphy_wowlan_tcp_support *tcp = rdev->wiphy.wowlan->tcp;
|
|
|
struct nlattr *nl_tcp;
|
|
|
|
|
|
if (!tcp)
|
|
@@ -951,37 +951,37 @@ static int nl80211_send_wowlan(struct sk_buff *msg,
|
|
|
{
|
|
|
struct nlattr *nl_wowlan;
|
|
|
|
|
|
- if (!dev->wiphy.wowlan.flags && !dev->wiphy.wowlan.n_patterns)
|
|
|
+ if (!dev->wiphy.wowlan)
|
|
|
return 0;
|
|
|
|
|
|
nl_wowlan = nla_nest_start(msg, NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED);
|
|
|
if (!nl_wowlan)
|
|
|
return -ENOBUFS;
|
|
|
|
|
|
- if (((dev->wiphy.wowlan.flags & WIPHY_WOWLAN_ANY) &&
|
|
|
+ if (((dev->wiphy.wowlan->flags & WIPHY_WOWLAN_ANY) &&
|
|
|
nla_put_flag(msg, NL80211_WOWLAN_TRIG_ANY)) ||
|
|
|
- ((dev->wiphy.wowlan.flags & WIPHY_WOWLAN_DISCONNECT) &&
|
|
|
+ ((dev->wiphy.wowlan->flags & WIPHY_WOWLAN_DISCONNECT) &&
|
|
|
nla_put_flag(msg, NL80211_WOWLAN_TRIG_DISCONNECT)) ||
|
|
|
- ((dev->wiphy.wowlan.flags & WIPHY_WOWLAN_MAGIC_PKT) &&
|
|
|
+ ((dev->wiphy.wowlan->flags & WIPHY_WOWLAN_MAGIC_PKT) &&
|
|
|
nla_put_flag(msg, NL80211_WOWLAN_TRIG_MAGIC_PKT)) ||
|
|
|
- ((dev->wiphy.wowlan.flags & WIPHY_WOWLAN_SUPPORTS_GTK_REKEY) &&
|
|
|
+ ((dev->wiphy.wowlan->flags & WIPHY_WOWLAN_SUPPORTS_GTK_REKEY) &&
|
|
|
nla_put_flag(msg, NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED)) ||
|
|
|
- ((dev->wiphy.wowlan.flags & WIPHY_WOWLAN_GTK_REKEY_FAILURE) &&
|
|
|
+ ((dev->wiphy.wowlan->flags & WIPHY_WOWLAN_GTK_REKEY_FAILURE) &&
|
|
|
nla_put_flag(msg, NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE)) ||
|
|
|
- ((dev->wiphy.wowlan.flags & WIPHY_WOWLAN_EAP_IDENTITY_REQ) &&
|
|
|
+ ((dev->wiphy.wowlan->flags & WIPHY_WOWLAN_EAP_IDENTITY_REQ) &&
|
|
|
nla_put_flag(msg, NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST)) ||
|
|
|
- ((dev->wiphy.wowlan.flags & WIPHY_WOWLAN_4WAY_HANDSHAKE) &&
|
|
|
+ ((dev->wiphy.wowlan->flags & WIPHY_WOWLAN_4WAY_HANDSHAKE) &&
|
|
|
nla_put_flag(msg, NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE)) ||
|
|
|
- ((dev->wiphy.wowlan.flags & WIPHY_WOWLAN_RFKILL_RELEASE) &&
|
|
|
+ ((dev->wiphy.wowlan->flags & WIPHY_WOWLAN_RFKILL_RELEASE) &&
|
|
|
nla_put_flag(msg, NL80211_WOWLAN_TRIG_RFKILL_RELEASE)))
|
|
|
return -ENOBUFS;
|
|
|
|
|
|
- if (dev->wiphy.wowlan.n_patterns) {
|
|
|
+ if (dev->wiphy.wowlan->n_patterns) {
|
|
|
struct nl80211_wowlan_pattern_support pat = {
|
|
|
- .max_patterns = dev->wiphy.wowlan.n_patterns,
|
|
|
- .min_pattern_len = dev->wiphy.wowlan.pattern_min_len,
|
|
|
- .max_pattern_len = dev->wiphy.wowlan.pattern_max_len,
|
|
|
- .max_pkt_offset = dev->wiphy.wowlan.max_pkt_offset,
|
|
|
+ .max_patterns = dev->wiphy.wowlan->n_patterns,
|
|
|
+ .min_pattern_len = dev->wiphy.wowlan->pattern_min_len,
|
|
|
+ .max_pattern_len = dev->wiphy.wowlan->pattern_max_len,
|
|
|
+ .max_pkt_offset = dev->wiphy.wowlan->max_pkt_offset,
|
|
|
};
|
|
|
|
|
|
if (nla_put(msg, NL80211_WOWLAN_TRIG_PKT_PATTERN,
|
|
@@ -7580,8 +7580,7 @@ static int nl80211_get_wowlan(struct sk_buff *skb, struct genl_info *info)
|
|
|
void *hdr;
|
|
|
u32 size = NLMSG_DEFAULT_SIZE;
|
|
|
|
|
|
- if (!rdev->wiphy.wowlan.flags && !rdev->wiphy.wowlan.n_patterns &&
|
|
|
- !rdev->wiphy.wowlan.tcp)
|
|
|
+ if (!rdev->wiphy.wowlan)
|
|
|
return -EOPNOTSUPP;
|
|
|
|
|
|
if (rdev->wiphy.wowlan_config && rdev->wiphy.wowlan_config->tcp) {
|
|
@@ -7654,7 +7653,7 @@ static int nl80211_parse_wowlan_tcp(struct cfg80211_registered_device *rdev,
|
|
|
u32 data_size, wake_size, tokens_size = 0, wake_mask_size;
|
|
|
int err, port;
|
|
|
|
|
|
- if (!rdev->wiphy.wowlan.tcp)
|
|
|
+ if (!rdev->wiphy.wowlan->tcp)
|
|
|
return -EINVAL;
|
|
|
|
|
|
err = nla_parse(tb, MAX_NL80211_WOWLAN_TCP,
|
|
@@ -7674,16 +7673,16 @@ static int nl80211_parse_wowlan_tcp(struct cfg80211_registered_device *rdev,
|
|
|
return -EINVAL;
|
|
|
|
|
|
data_size = nla_len(tb[NL80211_WOWLAN_TCP_DATA_PAYLOAD]);
|
|
|
- if (data_size > rdev->wiphy.wowlan.tcp->data_payload_max)
|
|
|
+ if (data_size > rdev->wiphy.wowlan->tcp->data_payload_max)
|
|
|
return -EINVAL;
|
|
|
|
|
|
if (nla_get_u32(tb[NL80211_WOWLAN_TCP_DATA_INTERVAL]) >
|
|
|
- rdev->wiphy.wowlan.tcp->data_interval_max ||
|
|
|
+ rdev->wiphy.wowlan->tcp->data_interval_max ||
|
|
|
nla_get_u32(tb[NL80211_WOWLAN_TCP_DATA_INTERVAL]) == 0)
|
|
|
return -EINVAL;
|
|
|
|
|
|
wake_size = nla_len(tb[NL80211_WOWLAN_TCP_WAKE_PAYLOAD]);
|
|
|
- if (wake_size > rdev->wiphy.wowlan.tcp->wake_payload_max)
|
|
|
+ if (wake_size > rdev->wiphy.wowlan->tcp->wake_payload_max)
|
|
|
return -EINVAL;
|
|
|
|
|
|
wake_mask_size = nla_len(tb[NL80211_WOWLAN_TCP_WAKE_MASK]);
|
|
@@ -7698,13 +7697,13 @@ static int nl80211_parse_wowlan_tcp(struct cfg80211_registered_device *rdev,
|
|
|
|
|
|
if (!tok->len || tokens_size % tok->len)
|
|
|
return -EINVAL;
|
|
|
- if (!rdev->wiphy.wowlan.tcp->tok)
|
|
|
+ if (!rdev->wiphy.wowlan->tcp->tok)
|
|
|
return -EINVAL;
|
|
|
- if (tok->len > rdev->wiphy.wowlan.tcp->tok->max_len)
|
|
|
+ if (tok->len > rdev->wiphy.wowlan->tcp->tok->max_len)
|
|
|
return -EINVAL;
|
|
|
- if (tok->len < rdev->wiphy.wowlan.tcp->tok->min_len)
|
|
|
+ if (tok->len < rdev->wiphy.wowlan->tcp->tok->min_len)
|
|
|
return -EINVAL;
|
|
|
- if (tokens_size > rdev->wiphy.wowlan.tcp->tok->bufsize)
|
|
|
+ if (tokens_size > rdev->wiphy.wowlan->tcp->tok->bufsize)
|
|
|
return -EINVAL;
|
|
|
if (tok->offset + tok->len > data_size)
|
|
|
return -EINVAL;
|
|
@@ -7712,7 +7711,7 @@ static int nl80211_parse_wowlan_tcp(struct cfg80211_registered_device *rdev,
|
|
|
|
|
|
if (tb[NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ]) {
|
|
|
seq = nla_data(tb[NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ]);
|
|
|
- if (!rdev->wiphy.wowlan.tcp->seq)
|
|
|
+ if (!rdev->wiphy.wowlan->tcp->seq)
|
|
|
return -EINVAL;
|
|
|
if (seq->len == 0 || seq->len > 4)
|
|
|
return -EINVAL;
|
|
@@ -7793,12 +7792,11 @@ static int nl80211_set_wowlan(struct sk_buff *skb, struct genl_info *info)
|
|
|
struct nlattr *tb[NUM_NL80211_WOWLAN_TRIG];
|
|
|
struct cfg80211_wowlan new_triggers = {};
|
|
|
struct cfg80211_wowlan *ntrig;
|
|
|
- struct wiphy_wowlan_support *wowlan = &rdev->wiphy.wowlan;
|
|
|
+ const struct wiphy_wowlan_support *wowlan = rdev->wiphy.wowlan;
|
|
|
int err, i;
|
|
|
bool prev_enabled = rdev->wiphy.wowlan_config;
|
|
|
|
|
|
- if (!rdev->wiphy.wowlan.flags && !rdev->wiphy.wowlan.n_patterns &&
|
|
|
- !rdev->wiphy.wowlan.tcp)
|
|
|
+ if (!wowlan)
|
|
|
return -EOPNOTSUPP;
|
|
|
|
|
|
if (!info->attrs[NL80211_ATTR_WOWLAN_TRIGGERS]) {
|