diff options
author | Johannes Berg <johannes.berg@intel.com> | 2013-06-03 11:25:34 -0400 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-06-03 12:43:34 -0400 |
commit | 964dc9e2c3aaccacacd40640964a58544fb5769a (patch) | |
tree | 3457e7dfc23df7d2477b57d346886031cb7361d9 /net/wireless/nl80211.c | |
parent | e05ecccdf752122a439b03c3190458d2c8f0bac6 (diff) |
cfg80211: take WoWLAN support information out of wiphy struct
There's no need to take up the space for devices that don't
support WoWLAN, and most drivers can even make the support
data static const (except where it's modified at runtime.)
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/wireless/nl80211.c')
-rw-r--r-- | net/wireless/nl80211.c | 56 |
1 files changed, 27 insertions, 29 deletions
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 31d265f36d2c..7ee9af3283a8 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c | |||
@@ -908,7 +908,7 @@ nla_put_failure: | |||
908 | static int nl80211_send_wowlan_tcp_caps(struct cfg80211_registered_device *rdev, | 908 | static int nl80211_send_wowlan_tcp_caps(struct cfg80211_registered_device *rdev, |
909 | struct sk_buff *msg) | 909 | struct sk_buff *msg) |
910 | { | 910 | { |
911 | const struct wiphy_wowlan_tcp_support *tcp = rdev->wiphy.wowlan.tcp; | 911 | const struct wiphy_wowlan_tcp_support *tcp = rdev->wiphy.wowlan->tcp; |
912 | struct nlattr *nl_tcp; | 912 | struct nlattr *nl_tcp; |
913 | 913 | ||
914 | if (!tcp) | 914 | if (!tcp) |
@@ -951,37 +951,37 @@ static int nl80211_send_wowlan(struct sk_buff *msg, | |||
951 | { | 951 | { |
952 | struct nlattr *nl_wowlan; | 952 | struct nlattr *nl_wowlan; |
953 | 953 | ||
954 | if (!dev->wiphy.wowlan.flags && !dev->wiphy.wowlan.n_patterns) | 954 | if (!dev->wiphy.wowlan) |
955 | return 0; | 955 | return 0; |
956 | 956 | ||
957 | nl_wowlan = nla_nest_start(msg, NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED); | 957 | nl_wowlan = nla_nest_start(msg, NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED); |
958 | if (!nl_wowlan) | 958 | if (!nl_wowlan) |
959 | return -ENOBUFS; | 959 | return -ENOBUFS; |
960 | 960 | ||
961 | if (((dev->wiphy.wowlan.flags & WIPHY_WOWLAN_ANY) && | 961 | if (((dev->wiphy.wowlan->flags & WIPHY_WOWLAN_ANY) && |
962 | nla_put_flag(msg, NL80211_WOWLAN_TRIG_ANY)) || | 962 | nla_put_flag(msg, NL80211_WOWLAN_TRIG_ANY)) || |
963 | ((dev->wiphy.wowlan.flags & WIPHY_WOWLAN_DISCONNECT) && | 963 | ((dev->wiphy.wowlan->flags & WIPHY_WOWLAN_DISCONNECT) && |
964 | nla_put_flag(msg, NL80211_WOWLAN_TRIG_DISCONNECT)) || | 964 | nla_put_flag(msg, NL80211_WOWLAN_TRIG_DISCONNECT)) || |
965 | ((dev->wiphy.wowlan.flags & WIPHY_WOWLAN_MAGIC_PKT) && | 965 | ((dev->wiphy.wowlan->flags & WIPHY_WOWLAN_MAGIC_PKT) && |
966 | nla_put_flag(msg, NL80211_WOWLAN_TRIG_MAGIC_PKT)) || | 966 | nla_put_flag(msg, NL80211_WOWLAN_TRIG_MAGIC_PKT)) || |
967 | ((dev->wiphy.wowlan.flags & WIPHY_WOWLAN_SUPPORTS_GTK_REKEY) && | 967 | ((dev->wiphy.wowlan->flags & WIPHY_WOWLAN_SUPPORTS_GTK_REKEY) && |
968 | nla_put_flag(msg, NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED)) || | 968 | nla_put_flag(msg, NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED)) || |
969 | ((dev->wiphy.wowlan.flags & WIPHY_WOWLAN_GTK_REKEY_FAILURE) && | 969 | ((dev->wiphy.wowlan->flags & WIPHY_WOWLAN_GTK_REKEY_FAILURE) && |
970 | nla_put_flag(msg, NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE)) || | 970 | nla_put_flag(msg, NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE)) || |
971 | ((dev->wiphy.wowlan.flags & WIPHY_WOWLAN_EAP_IDENTITY_REQ) && | 971 | ((dev->wiphy.wowlan->flags & WIPHY_WOWLAN_EAP_IDENTITY_REQ) && |
972 | nla_put_flag(msg, NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST)) || | 972 | nla_put_flag(msg, NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST)) || |
973 | ((dev->wiphy.wowlan.flags & WIPHY_WOWLAN_4WAY_HANDSHAKE) && | 973 | ((dev->wiphy.wowlan->flags & WIPHY_WOWLAN_4WAY_HANDSHAKE) && |
974 | nla_put_flag(msg, NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE)) || | 974 | nla_put_flag(msg, NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE)) || |
975 | ((dev->wiphy.wowlan.flags & WIPHY_WOWLAN_RFKILL_RELEASE) && | 975 | ((dev->wiphy.wowlan->flags & WIPHY_WOWLAN_RFKILL_RELEASE) && |
976 | nla_put_flag(msg, NL80211_WOWLAN_TRIG_RFKILL_RELEASE))) | 976 | nla_put_flag(msg, NL80211_WOWLAN_TRIG_RFKILL_RELEASE))) |
977 | return -ENOBUFS; | 977 | return -ENOBUFS; |
978 | 978 | ||
979 | if (dev->wiphy.wowlan.n_patterns) { | 979 | if (dev->wiphy.wowlan->n_patterns) { |
980 | struct nl80211_wowlan_pattern_support pat = { | 980 | struct nl80211_wowlan_pattern_support pat = { |
981 | .max_patterns = dev->wiphy.wowlan.n_patterns, | 981 | .max_patterns = dev->wiphy.wowlan->n_patterns, |
982 | .min_pattern_len = dev->wiphy.wowlan.pattern_min_len, | 982 | .min_pattern_len = dev->wiphy.wowlan->pattern_min_len, |
983 | .max_pattern_len = dev->wiphy.wowlan.pattern_max_len, | 983 | .max_pattern_len = dev->wiphy.wowlan->pattern_max_len, |
984 | .max_pkt_offset = dev->wiphy.wowlan.max_pkt_offset, | 984 | .max_pkt_offset = dev->wiphy.wowlan->max_pkt_offset, |
985 | }; | 985 | }; |
986 | 986 | ||
987 | if (nla_put(msg, NL80211_WOWLAN_TRIG_PKT_PATTERN, | 987 | 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) | |||
7580 | void *hdr; | 7580 | void *hdr; |
7581 | u32 size = NLMSG_DEFAULT_SIZE; | 7581 | u32 size = NLMSG_DEFAULT_SIZE; |
7582 | 7582 | ||
7583 | if (!rdev->wiphy.wowlan.flags && !rdev->wiphy.wowlan.n_patterns && | 7583 | if (!rdev->wiphy.wowlan) |
7584 | !rdev->wiphy.wowlan.tcp) | ||
7585 | return -EOPNOTSUPP; | 7584 | return -EOPNOTSUPP; |
7586 | 7585 | ||
7587 | if (rdev->wiphy.wowlan_config && rdev->wiphy.wowlan_config->tcp) { | 7586 | 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, | |||
7654 | u32 data_size, wake_size, tokens_size = 0, wake_mask_size; | 7653 | u32 data_size, wake_size, tokens_size = 0, wake_mask_size; |
7655 | int err, port; | 7654 | int err, port; |
7656 | 7655 | ||
7657 | if (!rdev->wiphy.wowlan.tcp) | 7656 | if (!rdev->wiphy.wowlan->tcp) |
7658 | return -EINVAL; | 7657 | return -EINVAL; |
7659 | 7658 | ||
7660 | err = nla_parse(tb, MAX_NL80211_WOWLAN_TCP, | 7659 | err = nla_parse(tb, MAX_NL80211_WOWLAN_TCP, |
@@ -7674,16 +7673,16 @@ static int nl80211_parse_wowlan_tcp(struct cfg80211_registered_device *rdev, | |||
7674 | return -EINVAL; | 7673 | return -EINVAL; |
7675 | 7674 | ||
7676 | data_size = nla_len(tb[NL80211_WOWLAN_TCP_DATA_PAYLOAD]); | 7675 | data_size = nla_len(tb[NL80211_WOWLAN_TCP_DATA_PAYLOAD]); |
7677 | if (data_size > rdev->wiphy.wowlan.tcp->data_payload_max) | 7676 | if (data_size > rdev->wiphy.wowlan->tcp->data_payload_max) |
7678 | return -EINVAL; | 7677 | return -EINVAL; |
7679 | 7678 | ||
7680 | if (nla_get_u32(tb[NL80211_WOWLAN_TCP_DATA_INTERVAL]) > | 7679 | if (nla_get_u32(tb[NL80211_WOWLAN_TCP_DATA_INTERVAL]) > |
7681 | rdev->wiphy.wowlan.tcp->data_interval_max || | 7680 | rdev->wiphy.wowlan->tcp->data_interval_max || |
7682 | nla_get_u32(tb[NL80211_WOWLAN_TCP_DATA_INTERVAL]) == 0) | 7681 | nla_get_u32(tb[NL80211_WOWLAN_TCP_DATA_INTERVAL]) == 0) |
7683 | return -EINVAL; | 7682 | return -EINVAL; |
7684 | 7683 | ||
7685 | wake_size = nla_len(tb[NL80211_WOWLAN_TCP_WAKE_PAYLOAD]); | 7684 | wake_size = nla_len(tb[NL80211_WOWLAN_TCP_WAKE_PAYLOAD]); |
7686 | if (wake_size > rdev->wiphy.wowlan.tcp->wake_payload_max) | 7685 | if (wake_size > rdev->wiphy.wowlan->tcp->wake_payload_max) |
7687 | return -EINVAL; | 7686 | return -EINVAL; |
7688 | 7687 | ||
7689 | wake_mask_size = nla_len(tb[NL80211_WOWLAN_TCP_WAKE_MASK]); | 7688 | 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, | |||
7698 | 7697 | ||
7699 | if (!tok->len || tokens_size % tok->len) | 7698 | if (!tok->len || tokens_size % tok->len) |
7700 | return -EINVAL; | 7699 | return -EINVAL; |
7701 | if (!rdev->wiphy.wowlan.tcp->tok) | 7700 | if (!rdev->wiphy.wowlan->tcp->tok) |
7702 | return -EINVAL; | 7701 | return -EINVAL; |
7703 | if (tok->len > rdev->wiphy.wowlan.tcp->tok->max_len) | 7702 | if (tok->len > rdev->wiphy.wowlan->tcp->tok->max_len) |
7704 | return -EINVAL; | 7703 | return -EINVAL; |
7705 | if (tok->len < rdev->wiphy.wowlan.tcp->tok->min_len) | 7704 | if (tok->len < rdev->wiphy.wowlan->tcp->tok->min_len) |
7706 | return -EINVAL; | 7705 | return -EINVAL; |
7707 | if (tokens_size > rdev->wiphy.wowlan.tcp->tok->bufsize) | 7706 | if (tokens_size > rdev->wiphy.wowlan->tcp->tok->bufsize) |
7708 | return -EINVAL; | 7707 | return -EINVAL; |
7709 | if (tok->offset + tok->len > data_size) | 7708 | if (tok->offset + tok->len > data_size) |
7710 | return -EINVAL; | 7709 | return -EINVAL; |
@@ -7712,7 +7711,7 @@ static int nl80211_parse_wowlan_tcp(struct cfg80211_registered_device *rdev, | |||
7712 | 7711 | ||
7713 | if (tb[NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ]) { | 7712 | if (tb[NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ]) { |
7714 | seq = nla_data(tb[NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ]); | 7713 | seq = nla_data(tb[NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ]); |
7715 | if (!rdev->wiphy.wowlan.tcp->seq) | 7714 | if (!rdev->wiphy.wowlan->tcp->seq) |
7716 | return -EINVAL; | 7715 | return -EINVAL; |
7717 | if (seq->len == 0 || seq->len > 4) | 7716 | if (seq->len == 0 || seq->len > 4) |
7718 | return -EINVAL; | 7717 | return -EINVAL; |
@@ -7793,12 +7792,11 @@ static int nl80211_set_wowlan(struct sk_buff *skb, struct genl_info *info) | |||
7793 | struct nlattr *tb[NUM_NL80211_WOWLAN_TRIG]; | 7792 | struct nlattr *tb[NUM_NL80211_WOWLAN_TRIG]; |
7794 | struct cfg80211_wowlan new_triggers = {}; | 7793 | struct cfg80211_wowlan new_triggers = {}; |
7795 | struct cfg80211_wowlan *ntrig; | 7794 | struct cfg80211_wowlan *ntrig; |
7796 | struct wiphy_wowlan_support *wowlan = &rdev->wiphy.wowlan; | 7795 | const struct wiphy_wowlan_support *wowlan = rdev->wiphy.wowlan; |
7797 | int err, i; | 7796 | int err, i; |
7798 | bool prev_enabled = rdev->wiphy.wowlan_config; | 7797 | bool prev_enabled = rdev->wiphy.wowlan_config; |
7799 | 7798 | ||
7800 | if (!rdev->wiphy.wowlan.flags && !rdev->wiphy.wowlan.n_patterns && | 7799 | if (!wowlan) |
7801 | !rdev->wiphy.wowlan.tcp) | ||
7802 | return -EOPNOTSUPP; | 7800 | return -EOPNOTSUPP; |
7803 | 7801 | ||
7804 | if (!info->attrs[NL80211_ATTR_WOWLAN_TRIGGERS]) { | 7802 | if (!info->attrs[NL80211_ATTR_WOWLAN_TRIGGERS]) { |