diff options
author | John W. Linville <linville@tuxdriver.com> | 2014-05-29 12:55:38 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2014-05-29 12:55:38 -0400 |
commit | 737be10d8cb783d1cadb1868b061abb2b4314eae (patch) | |
tree | 1b72ea0d454affab6d6cc743939cfb316fad14b3 /net/wireless | |
parent | 03c4444650969431b3a5effde4995de767e3013a (diff) | |
parent | d3a58df87a2e4c2301ac843604202d290a48440b (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next
Diffstat (limited to 'net/wireless')
-rw-r--r-- | net/wireless/core.c | 5 | ||||
-rw-r--r-- | net/wireless/genregdb.awk | 14 | ||||
-rw-r--r-- | net/wireless/nl80211.c | 21 | ||||
-rw-r--r-- | net/wireless/nl80211.h | 3 |
4 files changed, 24 insertions, 19 deletions
diff --git a/net/wireless/core.c b/net/wireless/core.c index d03d8bdb29ca..a1c40654dd9b 100644 --- a/net/wireless/core.c +++ b/net/wireless/core.c | |||
@@ -130,7 +130,7 @@ int cfg80211_dev_rename(struct cfg80211_registered_device *rdev, | |||
130 | newname)) | 130 | newname)) |
131 | pr_err("failed to rename debugfs dir to %s!\n", newname); | 131 | pr_err("failed to rename debugfs dir to %s!\n", newname); |
132 | 132 | ||
133 | nl80211_notify_dev_rename(rdev); | 133 | nl80211_notify_wiphy(rdev, NL80211_CMD_NEW_WIPHY); |
134 | 134 | ||
135 | return 0; | 135 | return 0; |
136 | } | 136 | } |
@@ -660,6 +660,8 @@ int wiphy_register(struct wiphy *wiphy) | |||
660 | return res; | 660 | return res; |
661 | } | 661 | } |
662 | 662 | ||
663 | nl80211_notify_wiphy(rdev, NL80211_CMD_NEW_WIPHY); | ||
664 | |||
663 | return 0; | 665 | return 0; |
664 | } | 666 | } |
665 | EXPORT_SYMBOL(wiphy_register); | 667 | EXPORT_SYMBOL(wiphy_register); |
@@ -698,6 +700,7 @@ void wiphy_unregister(struct wiphy *wiphy) | |||
698 | rfkill_unregister(rdev->rfkill); | 700 | rfkill_unregister(rdev->rfkill); |
699 | 701 | ||
700 | rtnl_lock(); | 702 | rtnl_lock(); |
703 | nl80211_notify_wiphy(rdev, NL80211_CMD_DEL_WIPHY); | ||
701 | rdev->wiphy.registered = false; | 704 | rdev->wiphy.registered = false; |
702 | 705 | ||
703 | WARN_ON(!list_empty(&rdev->wdev_list)); | 706 | WARN_ON(!list_empty(&rdev->wdev_list)); |
diff --git a/net/wireless/genregdb.awk b/net/wireless/genregdb.awk index b35da8dc85de..40c37fc5b67c 100644 --- a/net/wireless/genregdb.awk +++ b/net/wireless/genregdb.awk | |||
@@ -68,17 +68,7 @@ function parse_reg_rule() | |||
68 | sub(/,/, "", units) | 68 | sub(/,/, "", units) |
69 | dfs_cac = $9 | 69 | dfs_cac = $9 |
70 | if (units == "mW") { | 70 | if (units == "mW") { |
71 | if (power == 100) { | 71 | power = 10 * log(power)/log(10) |
72 | power = 20 | ||
73 | } else if (power == 200) { | ||
74 | power = 23 | ||
75 | } else if (power == 500) { | ||
76 | power = 27 | ||
77 | } else if (power == 1000) { | ||
78 | power = 30 | ||
79 | } else { | ||
80 | print "Unknown power value in database!" | ||
81 | } | ||
82 | } else { | 72 | } else { |
83 | dfs_cac = $8 | 73 | dfs_cac = $8 |
84 | } | 74 | } |
@@ -117,7 +107,7 @@ function parse_reg_rule() | |||
117 | 107 | ||
118 | } | 108 | } |
119 | flags = flags "0" | 109 | flags = flags "0" |
120 | printf "\t\tREG_RULE_EXT(%d, %d, %d, %d, %d, %d, %s),\n", start, end, bw, gain, power, dfs_cac, flags | 110 | printf "\t\tREG_RULE_EXT(%d, %d, %d, %d, %.0f, %d, %s),\n", start, end, bw, gain, power, dfs_cac, flags |
121 | rules++ | 111 | rules++ |
122 | } | 112 | } |
123 | 113 | ||
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 62bdb1adaa4d..ba4f1723c83a 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c | |||
@@ -1226,6 +1226,7 @@ struct nl80211_dump_wiphy_state { | |||
1226 | }; | 1226 | }; |
1227 | 1227 | ||
1228 | static int nl80211_send_wiphy(struct cfg80211_registered_device *rdev, | 1228 | static int nl80211_send_wiphy(struct cfg80211_registered_device *rdev, |
1229 | enum nl80211_commands cmd, | ||
1229 | struct sk_buff *msg, u32 portid, u32 seq, | 1230 | struct sk_buff *msg, u32 portid, u32 seq, |
1230 | int flags, struct nl80211_dump_wiphy_state *state) | 1231 | int flags, struct nl80211_dump_wiphy_state *state) |
1231 | { | 1232 | { |
@@ -1240,7 +1241,7 @@ static int nl80211_send_wiphy(struct cfg80211_registered_device *rdev, | |||
1240 | rdev->wiphy.mgmt_stypes; | 1241 | rdev->wiphy.mgmt_stypes; |
1241 | u32 features; | 1242 | u32 features; |
1242 | 1243 | ||
1243 | hdr = nl80211hdr_put(msg, portid, seq, flags, NL80211_CMD_NEW_WIPHY); | 1244 | hdr = nl80211hdr_put(msg, portid, seq, flags, cmd); |
1244 | if (!hdr) | 1245 | if (!hdr) |
1245 | return -ENOBUFS; | 1246 | return -ENOBUFS; |
1246 | 1247 | ||
@@ -1254,6 +1255,9 @@ static int nl80211_send_wiphy(struct cfg80211_registered_device *rdev, | |||
1254 | cfg80211_rdev_list_generation)) | 1255 | cfg80211_rdev_list_generation)) |
1255 | goto nla_put_failure; | 1256 | goto nla_put_failure; |
1256 | 1257 | ||
1258 | if (cmd != NL80211_CMD_NEW_WIPHY) | ||
1259 | goto finish; | ||
1260 | |||
1257 | switch (state->split_start) { | 1261 | switch (state->split_start) { |
1258 | case 0: | 1262 | case 0: |
1259 | if (nla_put_u8(msg, NL80211_ATTR_WIPHY_RETRY_SHORT, | 1263 | if (nla_put_u8(msg, NL80211_ATTR_WIPHY_RETRY_SHORT, |
@@ -1682,6 +1686,7 @@ static int nl80211_send_wiphy(struct cfg80211_registered_device *rdev, | |||
1682 | state->split_start = 0; | 1686 | state->split_start = 0; |
1683 | break; | 1687 | break; |
1684 | } | 1688 | } |
1689 | finish: | ||
1685 | return genlmsg_end(msg, hdr); | 1690 | return genlmsg_end(msg, hdr); |
1686 | 1691 | ||
1687 | nla_put_failure: | 1692 | nla_put_failure: |
@@ -1756,7 +1761,8 @@ static int nl80211_dump_wiphy(struct sk_buff *skb, struct netlink_callback *cb) | |||
1756 | continue; | 1761 | continue; |
1757 | /* attempt to fit multiple wiphy data chunks into the skb */ | 1762 | /* attempt to fit multiple wiphy data chunks into the skb */ |
1758 | do { | 1763 | do { |
1759 | ret = nl80211_send_wiphy(rdev, skb, | 1764 | ret = nl80211_send_wiphy(rdev, NL80211_CMD_NEW_WIPHY, |
1765 | skb, | ||
1760 | NETLINK_CB(cb->skb).portid, | 1766 | NETLINK_CB(cb->skb).portid, |
1761 | cb->nlh->nlmsg_seq, | 1767 | cb->nlh->nlmsg_seq, |
1762 | NLM_F_MULTI, state); | 1768 | NLM_F_MULTI, state); |
@@ -1811,7 +1817,8 @@ static int nl80211_get_wiphy(struct sk_buff *skb, struct genl_info *info) | |||
1811 | if (!msg) | 1817 | if (!msg) |
1812 | return -ENOMEM; | 1818 | return -ENOMEM; |
1813 | 1819 | ||
1814 | if (nl80211_send_wiphy(rdev, msg, info->snd_portid, info->snd_seq, 0, | 1820 | if (nl80211_send_wiphy(rdev, NL80211_CMD_NEW_WIPHY, msg, |
1821 | info->snd_portid, info->snd_seq, 0, | ||
1815 | &state) < 0) { | 1822 | &state) < 0) { |
1816 | nlmsg_free(msg); | 1823 | nlmsg_free(msg); |
1817 | return -ENOBUFS; | 1824 | return -ENOBUFS; |
@@ -10101,16 +10108,20 @@ static const struct genl_ops nl80211_ops[] = { | |||
10101 | 10108 | ||
10102 | /* notification functions */ | 10109 | /* notification functions */ |
10103 | 10110 | ||
10104 | void nl80211_notify_dev_rename(struct cfg80211_registered_device *rdev) | 10111 | void nl80211_notify_wiphy(struct cfg80211_registered_device *rdev, |
10112 | enum nl80211_commands cmd) | ||
10105 | { | 10113 | { |
10106 | struct sk_buff *msg; | 10114 | struct sk_buff *msg; |
10107 | struct nl80211_dump_wiphy_state state = {}; | 10115 | struct nl80211_dump_wiphy_state state = {}; |
10108 | 10116 | ||
10117 | WARN_ON(cmd != NL80211_CMD_NEW_WIPHY && | ||
10118 | cmd != NL80211_CMD_DEL_WIPHY); | ||
10119 | |||
10109 | msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); | 10120 | msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); |
10110 | if (!msg) | 10121 | if (!msg) |
10111 | return; | 10122 | return; |
10112 | 10123 | ||
10113 | if (nl80211_send_wiphy(rdev, msg, 0, 0, 0, &state) < 0) { | 10124 | if (nl80211_send_wiphy(rdev, cmd, msg, 0, 0, 0, &state) < 0) { |
10114 | nlmsg_free(msg); | 10125 | nlmsg_free(msg); |
10115 | return; | 10126 | return; |
10116 | } | 10127 | } |
diff --git a/net/wireless/nl80211.h b/net/wireless/nl80211.h index 1e6df9630f42..49c9a482dd12 100644 --- a/net/wireless/nl80211.h +++ b/net/wireless/nl80211.h | |||
@@ -5,7 +5,8 @@ | |||
5 | 5 | ||
6 | int nl80211_init(void); | 6 | int nl80211_init(void); |
7 | void nl80211_exit(void); | 7 | void nl80211_exit(void); |
8 | void nl80211_notify_dev_rename(struct cfg80211_registered_device *rdev); | 8 | void nl80211_notify_wiphy(struct cfg80211_registered_device *rdev, |
9 | enum nl80211_commands cmd); | ||
9 | void nl80211_send_scan_start(struct cfg80211_registered_device *rdev, | 10 | void nl80211_send_scan_start(struct cfg80211_registered_device *rdev, |
10 | struct wireless_dev *wdev); | 11 | struct wireless_dev *wdev); |
11 | struct sk_buff *nl80211_build_scan_msg(struct cfg80211_registered_device *rdev, | 12 | struct sk_buff *nl80211_build_scan_msg(struct cfg80211_registered_device *rdev, |