aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2013-02-22 16:05:20 -0500
committerJohannes Berg <johannes.berg@intel.com>2013-03-06 10:35:46 -0500
commit947add36ca2dcd61c5b07347f029a5bafb9efb4e (patch)
tree900d905694e42ffbaf85129bf5ec74c6887756d4
parentfe1abafd942f3fac233c27d7ddebe5ed913edbff (diff)
cfg80211: move exported event functions into nl80211
This is the sort of thing gcc's LTO could do, but since we don't have that yet we can also do it manually. The advantage is reduced code, both source and binary, e.g. on x86-64 text data bss dec hex filename 442825 56230 776 499831 7a077 cfg80211.ko (before) 441585 56230 776 498591 79b9f cfg80211.ko (after) a reduction of ~1k. But in order to not complicate the code move only those functions that are simple wrappers, not those that have functionality of their own. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-rw-r--r--net/wireless/ap.c62
-rw-r--r--net/wireless/mesh.c14
-rw-r--r--net/wireless/mlme.c159
-rw-r--r--net/wireless/nl80211.c266
-rw-r--r--net/wireless/nl80211.h68
5 files changed, 195 insertions, 374 deletions
diff --git a/net/wireless/ap.c b/net/wireless/ap.c
index a4a14e8f55cc..324e8d851dc4 100644
--- a/net/wireless/ap.c
+++ b/net/wireless/ap.c
@@ -46,65 +46,3 @@ int cfg80211_stop_ap(struct cfg80211_registered_device *rdev,
46 46
47 return err; 47 return err;
48} 48}
49
50void cfg80211_ch_switch_notify(struct net_device *dev,
51 struct cfg80211_chan_def *chandef)
52{
53 struct wireless_dev *wdev = dev->ieee80211_ptr;
54 struct wiphy *wiphy = wdev->wiphy;
55 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
56
57 trace_cfg80211_ch_switch_notify(dev, chandef);
58
59 wdev_lock(wdev);
60
61 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_AP &&
62 wdev->iftype != NL80211_IFTYPE_P2P_GO))
63 goto out;
64
65 wdev->channel = chandef->chan;
66 nl80211_ch_switch_notify(rdev, dev, chandef, GFP_KERNEL);
67out:
68 wdev_unlock(wdev);
69 return;
70}
71EXPORT_SYMBOL(cfg80211_ch_switch_notify);
72
73bool cfg80211_rx_spurious_frame(struct net_device *dev,
74 const u8 *addr, gfp_t gfp)
75{
76 struct wireless_dev *wdev = dev->ieee80211_ptr;
77 bool ret;
78
79 trace_cfg80211_rx_spurious_frame(dev, addr);
80
81 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_AP &&
82 wdev->iftype != NL80211_IFTYPE_P2P_GO)) {
83 trace_cfg80211_return_bool(false);
84 return false;
85 }
86 ret = nl80211_unexpected_frame(dev, addr, gfp);
87 trace_cfg80211_return_bool(ret);
88 return ret;
89}
90EXPORT_SYMBOL(cfg80211_rx_spurious_frame);
91
92bool cfg80211_rx_unexpected_4addr_frame(struct net_device *dev,
93 const u8 *addr, gfp_t gfp)
94{
95 struct wireless_dev *wdev = dev->ieee80211_ptr;
96 bool ret;
97
98 trace_cfg80211_rx_unexpected_4addr_frame(dev, addr);
99
100 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_AP &&
101 wdev->iftype != NL80211_IFTYPE_P2P_GO &&
102 wdev->iftype != NL80211_IFTYPE_AP_VLAN)) {
103 trace_cfg80211_return_bool(false);
104 return false;
105 }
106 ret = nl80211_unexpected_4addr_frame(dev, addr, gfp);
107 trace_cfg80211_return_bool(ret);
108 return ret;
109}
110EXPORT_SYMBOL(cfg80211_rx_unexpected_4addr_frame);
diff --git a/net/wireless/mesh.c b/net/wireless/mesh.c
index 55957a284f6c..9688b249a805 100644
--- a/net/wireless/mesh.c
+++ b/net/wireless/mesh.c
@@ -233,20 +233,6 @@ int cfg80211_set_mesh_channel(struct cfg80211_registered_device *rdev,
233 return 0; 233 return 0;
234} 234}
235 235
236void cfg80211_notify_new_peer_candidate(struct net_device *dev,
237 const u8 *macaddr, const u8* ie, u8 ie_len, gfp_t gfp)
238{
239 struct wireless_dev *wdev = dev->ieee80211_ptr;
240
241 trace_cfg80211_notify_new_peer_candidate(dev, macaddr);
242 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_MESH_POINT))
243 return;
244
245 nl80211_send_new_peer_candidate(wiphy_to_dev(wdev->wiphy), dev,
246 macaddr, ie, ie_len, gfp);
247}
248EXPORT_SYMBOL(cfg80211_notify_new_peer_candidate);
249
250static int __cfg80211_leave_mesh(struct cfg80211_registered_device *rdev, 236static int __cfg80211_leave_mesh(struct cfg80211_registered_device *rdev,
251 struct net_device *dev) 237 struct net_device *dev)
252{ 238{
diff --git a/net/wireless/mlme.c b/net/wireless/mlme.c
index caddca35d686..5a97ce6d283b 100644
--- a/net/wireless/mlme.c
+++ b/net/wireless/mlme.c
@@ -187,30 +187,6 @@ void cfg80211_send_disassoc(struct net_device *dev, const u8 *buf, size_t len)
187} 187}
188EXPORT_SYMBOL(cfg80211_send_disassoc); 188EXPORT_SYMBOL(cfg80211_send_disassoc);
189 189
190void cfg80211_send_unprot_deauth(struct net_device *dev, const u8 *buf,
191 size_t len)
192{
193 struct wireless_dev *wdev = dev->ieee80211_ptr;
194 struct wiphy *wiphy = wdev->wiphy;
195 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
196
197 trace_cfg80211_send_unprot_deauth(dev);
198 nl80211_send_unprot_deauth(rdev, dev, buf, len, GFP_ATOMIC);
199}
200EXPORT_SYMBOL(cfg80211_send_unprot_deauth);
201
202void cfg80211_send_unprot_disassoc(struct net_device *dev, const u8 *buf,
203 size_t len)
204{
205 struct wireless_dev *wdev = dev->ieee80211_ptr;
206 struct wiphy *wiphy = wdev->wiphy;
207 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
208
209 trace_cfg80211_send_unprot_disassoc(dev);
210 nl80211_send_unprot_disassoc(rdev, dev, buf, len, GFP_ATOMIC);
211}
212EXPORT_SYMBOL(cfg80211_send_unprot_disassoc);
213
214void cfg80211_send_auth_timeout(struct net_device *dev, const u8 *addr) 190void cfg80211_send_auth_timeout(struct net_device *dev, const u8 *addr)
215{ 191{
216 struct wireless_dev *wdev = dev->ieee80211_ptr; 192 struct wireless_dev *wdev = dev->ieee80211_ptr;
@@ -577,62 +553,6 @@ void cfg80211_mlme_down(struct cfg80211_registered_device *rdev,
577 } 553 }
578} 554}
579 555
580void cfg80211_ready_on_channel(struct wireless_dev *wdev, u64 cookie,
581 struct ieee80211_channel *chan,
582 unsigned int duration, gfp_t gfp)
583{
584 struct wiphy *wiphy = wdev->wiphy;
585 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
586
587 trace_cfg80211_ready_on_channel(wdev, cookie, chan, duration);
588 nl80211_send_remain_on_channel(rdev, wdev, cookie, chan, duration, gfp);
589}
590EXPORT_SYMBOL(cfg80211_ready_on_channel);
591
592void cfg80211_remain_on_channel_expired(struct wireless_dev *wdev, u64 cookie,
593 struct ieee80211_channel *chan,
594 gfp_t gfp)
595{
596 struct wiphy *wiphy = wdev->wiphy;
597 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
598
599 trace_cfg80211_ready_on_channel_expired(wdev, cookie, chan);
600 nl80211_send_remain_on_channel_cancel(rdev, wdev, cookie, chan, gfp);
601}
602EXPORT_SYMBOL(cfg80211_remain_on_channel_expired);
603
604void cfg80211_new_sta(struct net_device *dev, const u8 *mac_addr,
605 struct station_info *sinfo, gfp_t gfp)
606{
607 struct wiphy *wiphy = dev->ieee80211_ptr->wiphy;
608 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
609
610 trace_cfg80211_new_sta(dev, mac_addr, sinfo);
611 nl80211_send_sta_event(rdev, dev, mac_addr, sinfo, gfp);
612}
613EXPORT_SYMBOL(cfg80211_new_sta);
614
615void cfg80211_del_sta(struct net_device *dev, const u8 *mac_addr, gfp_t gfp)
616{
617 struct wiphy *wiphy = dev->ieee80211_ptr->wiphy;
618 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
619
620 trace_cfg80211_del_sta(dev, mac_addr);
621 nl80211_send_sta_del_event(rdev, dev, mac_addr, gfp);
622}
623EXPORT_SYMBOL(cfg80211_del_sta);
624
625void cfg80211_conn_failed(struct net_device *dev, const u8 *mac_addr,
626 enum nl80211_connect_failed_reason reason,
627 gfp_t gfp)
628{
629 struct wiphy *wiphy = dev->ieee80211_ptr->wiphy;
630 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
631
632 nl80211_send_conn_failed_event(rdev, dev, mac_addr, reason, gfp);
633}
634EXPORT_SYMBOL(cfg80211_conn_failed);
635
636struct cfg80211_mgmt_registration { 556struct cfg80211_mgmt_registration {
637 struct list_head list; 557 struct list_head list;
638 558
@@ -909,85 +829,6 @@ bool cfg80211_rx_mgmt(struct wireless_dev *wdev, int freq, int sig_mbm,
909} 829}
910EXPORT_SYMBOL(cfg80211_rx_mgmt); 830EXPORT_SYMBOL(cfg80211_rx_mgmt);
911 831
912void cfg80211_mgmt_tx_status(struct wireless_dev *wdev, u64 cookie,
913 const u8 *buf, size_t len, bool ack, gfp_t gfp)
914{
915 struct wiphy *wiphy = wdev->wiphy;
916 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
917
918 trace_cfg80211_mgmt_tx_status(wdev, cookie, ack);
919
920 /* Indicate TX status of the Action frame to user space */
921 nl80211_send_mgmt_tx_status(rdev, wdev, cookie, buf, len, ack, gfp);
922}
923EXPORT_SYMBOL(cfg80211_mgmt_tx_status);
924
925void cfg80211_cqm_rssi_notify(struct net_device *dev,
926 enum nl80211_cqm_rssi_threshold_event rssi_event,
927 gfp_t gfp)
928{
929 struct wireless_dev *wdev = dev->ieee80211_ptr;
930 struct wiphy *wiphy = wdev->wiphy;
931 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
932
933 trace_cfg80211_cqm_rssi_notify(dev, rssi_event);
934
935 /* Indicate roaming trigger event to user space */
936 nl80211_send_cqm_rssi_notify(rdev, dev, rssi_event, gfp);
937}
938EXPORT_SYMBOL(cfg80211_cqm_rssi_notify);
939
940void cfg80211_cqm_pktloss_notify(struct net_device *dev,
941 const u8 *peer, u32 num_packets, gfp_t gfp)
942{
943 struct wireless_dev *wdev = dev->ieee80211_ptr;
944 struct wiphy *wiphy = wdev->wiphy;
945 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
946
947 trace_cfg80211_cqm_pktloss_notify(dev, peer, num_packets);
948
949 /* Indicate roaming trigger event to user space */
950 nl80211_send_cqm_pktloss_notify(rdev, dev, peer, num_packets, gfp);
951}
952EXPORT_SYMBOL(cfg80211_cqm_pktloss_notify);
953
954void cfg80211_cqm_txe_notify(struct net_device *dev,
955 const u8 *peer, u32 num_packets,
956 u32 rate, u32 intvl, gfp_t gfp)
957{
958 struct wireless_dev *wdev = dev->ieee80211_ptr;
959 struct wiphy *wiphy = wdev->wiphy;
960 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
961
962 nl80211_send_cqm_txe_notify(rdev, dev, peer, num_packets,
963 rate, intvl, gfp);
964}
965EXPORT_SYMBOL(cfg80211_cqm_txe_notify);
966
967void cfg80211_gtk_rekey_notify(struct net_device *dev, const u8 *bssid,
968 const u8 *replay_ctr, gfp_t gfp)
969{
970 struct wireless_dev *wdev = dev->ieee80211_ptr;
971 struct wiphy *wiphy = wdev->wiphy;
972 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
973
974 trace_cfg80211_gtk_rekey_notify(dev, bssid);
975 nl80211_gtk_rekey_notify(rdev, dev, bssid, replay_ctr, gfp);
976}
977EXPORT_SYMBOL(cfg80211_gtk_rekey_notify);
978
979void cfg80211_pmksa_candidate_notify(struct net_device *dev, int index,
980 const u8 *bssid, bool preauth, gfp_t gfp)
981{
982 struct wireless_dev *wdev = dev->ieee80211_ptr;
983 struct wiphy *wiphy = wdev->wiphy;
984 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
985
986 trace_cfg80211_pmksa_candidate_notify(dev, index, bssid, preauth);
987 nl80211_pmksa_candidate_notify(rdev, dev, index, bssid, preauth, gfp);
988}
989EXPORT_SYMBOL(cfg80211_pmksa_candidate_notify);
990
991void cfg80211_dfs_channels_update_work(struct work_struct *work) 832void cfg80211_dfs_channels_update_work(struct work_struct *work)
992{ 833{
993 struct delayed_work *delayed_work; 834 struct delayed_work *delayed_work;
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 3a45ea614cbb..0e5176784b42 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -9151,21 +9151,31 @@ void nl80211_send_disassoc(struct cfg80211_registered_device *rdev,
9151 NL80211_CMD_DISASSOCIATE, gfp); 9151 NL80211_CMD_DISASSOCIATE, gfp);
9152} 9152}
9153 9153
9154void nl80211_send_unprot_deauth(struct cfg80211_registered_device *rdev, 9154void cfg80211_send_unprot_deauth(struct net_device *dev, const u8 *buf,
9155 struct net_device *netdev, const u8 *buf, 9155 size_t len)
9156 size_t len, gfp_t gfp)
9157{ 9156{
9158 nl80211_send_mlme_event(rdev, netdev, buf, len, 9157 struct wireless_dev *wdev = dev->ieee80211_ptr;
9159 NL80211_CMD_UNPROT_DEAUTHENTICATE, gfp); 9158 struct wiphy *wiphy = wdev->wiphy;
9159 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
9160
9161 trace_cfg80211_send_unprot_deauth(dev);
9162 nl80211_send_mlme_event(rdev, dev, buf, len,
9163 NL80211_CMD_UNPROT_DEAUTHENTICATE, GFP_ATOMIC);
9160} 9164}
9165EXPORT_SYMBOL(cfg80211_send_unprot_deauth);
9161 9166
9162void nl80211_send_unprot_disassoc(struct cfg80211_registered_device *rdev, 9167void cfg80211_send_unprot_disassoc(struct net_device *dev, const u8 *buf,
9163 struct net_device *netdev, const u8 *buf, 9168 size_t len)
9164 size_t len, gfp_t gfp)
9165{ 9169{
9166 nl80211_send_mlme_event(rdev, netdev, buf, len, 9170 struct wireless_dev *wdev = dev->ieee80211_ptr;
9167 NL80211_CMD_UNPROT_DISASSOCIATE, gfp); 9171 struct wiphy *wiphy = wdev->wiphy;
9172 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
9173
9174 trace_cfg80211_send_unprot_disassoc(dev);
9175 nl80211_send_mlme_event(rdev, dev, buf, len,
9176 NL80211_CMD_UNPROT_DISASSOCIATE, GFP_ATOMIC);
9168} 9177}
9178EXPORT_SYMBOL(cfg80211_send_unprot_disassoc);
9169 9179
9170static void nl80211_send_mlme_timeout(struct cfg80211_registered_device *rdev, 9180static void nl80211_send_mlme_timeout(struct cfg80211_registered_device *rdev,
9171 struct net_device *netdev, int cmd, 9181 struct net_device *netdev, int cmd,
@@ -9368,14 +9378,19 @@ void nl80211_send_ibss_bssid(struct cfg80211_registered_device *rdev,
9368 nlmsg_free(msg); 9378 nlmsg_free(msg);
9369} 9379}
9370 9380
9371void nl80211_send_new_peer_candidate(struct cfg80211_registered_device *rdev, 9381void cfg80211_notify_new_peer_candidate(struct net_device *dev, const u8 *addr,
9372 struct net_device *netdev, 9382 const u8* ie, u8 ie_len, gfp_t gfp)
9373 const u8 *macaddr, const u8* ie, u8 ie_len,
9374 gfp_t gfp)
9375{ 9383{
9384 struct wireless_dev *wdev = dev->ieee80211_ptr;
9385 struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy);
9376 struct sk_buff *msg; 9386 struct sk_buff *msg;
9377 void *hdr; 9387 void *hdr;
9378 9388
9389 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_MESH_POINT))
9390 return;
9391
9392 trace_cfg80211_notify_new_peer_candidate(dev, addr);
9393
9379 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); 9394 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
9380 if (!msg) 9395 if (!msg)
9381 return; 9396 return;
@@ -9387,8 +9402,8 @@ void nl80211_send_new_peer_candidate(struct cfg80211_registered_device *rdev,
9387 } 9402 }
9388 9403
9389 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || 9404 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
9390 nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) || 9405 nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) ||
9391 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, macaddr) || 9406 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, addr) ||
9392 (ie_len && ie && 9407 (ie_len && ie &&
9393 nla_put(msg, NL80211_ATTR_IE, ie_len , ie))) 9408 nla_put(msg, NL80211_ATTR_IE, ie_len , ie)))
9394 goto nla_put_failure; 9409 goto nla_put_failure;
@@ -9403,6 +9418,7 @@ void nl80211_send_new_peer_candidate(struct cfg80211_registered_device *rdev,
9403 genlmsg_cancel(msg, hdr); 9418 genlmsg_cancel(msg, hdr);
9404 nlmsg_free(msg); 9419 nlmsg_free(msg);
9405} 9420}
9421EXPORT_SYMBOL(cfg80211_notify_new_peer_candidate);
9406 9422
9407void nl80211_michael_mic_failure(struct cfg80211_registered_device *rdev, 9423void nl80211_michael_mic_failure(struct cfg80211_registered_device *rdev,
9408 struct net_device *netdev, const u8 *addr, 9424 struct net_device *netdev, const u8 *addr,
@@ -9541,31 +9557,42 @@ static void nl80211_send_remain_on_chan_event(
9541 nlmsg_free(msg); 9557 nlmsg_free(msg);
9542} 9558}
9543 9559
9544void nl80211_send_remain_on_channel(struct cfg80211_registered_device *rdev, 9560void cfg80211_ready_on_channel(struct wireless_dev *wdev, u64 cookie,
9545 struct wireless_dev *wdev, u64 cookie, 9561 struct ieee80211_channel *chan,
9546 struct ieee80211_channel *chan, 9562 unsigned int duration, gfp_t gfp)
9547 unsigned int duration, gfp_t gfp)
9548{ 9563{
9564 struct wiphy *wiphy = wdev->wiphy;
9565 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
9566
9567 trace_cfg80211_ready_on_channel(wdev, cookie, chan, duration);
9549 nl80211_send_remain_on_chan_event(NL80211_CMD_REMAIN_ON_CHANNEL, 9568 nl80211_send_remain_on_chan_event(NL80211_CMD_REMAIN_ON_CHANNEL,
9550 rdev, wdev, cookie, chan, 9569 rdev, wdev, cookie, chan,
9551 duration, gfp); 9570 duration, gfp);
9552} 9571}
9572EXPORT_SYMBOL(cfg80211_ready_on_channel);
9553 9573
9554void nl80211_send_remain_on_channel_cancel( 9574void cfg80211_remain_on_channel_expired(struct wireless_dev *wdev, u64 cookie,
9555 struct cfg80211_registered_device *rdev, 9575 struct ieee80211_channel *chan,
9556 struct wireless_dev *wdev, 9576 gfp_t gfp)
9557 u64 cookie, struct ieee80211_channel *chan, gfp_t gfp)
9558{ 9577{
9578 struct wiphy *wiphy = wdev->wiphy;
9579 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
9580
9581 trace_cfg80211_ready_on_channel_expired(wdev, cookie, chan);
9559 nl80211_send_remain_on_chan_event(NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL, 9582 nl80211_send_remain_on_chan_event(NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL,
9560 rdev, wdev, cookie, chan, 0, gfp); 9583 rdev, wdev, cookie, chan, 0, gfp);
9561} 9584}
9585EXPORT_SYMBOL(cfg80211_remain_on_channel_expired);
9562 9586
9563void nl80211_send_sta_event(struct cfg80211_registered_device *rdev, 9587void cfg80211_new_sta(struct net_device *dev, const u8 *mac_addr,
9564 struct net_device *dev, const u8 *mac_addr, 9588 struct station_info *sinfo, gfp_t gfp)
9565 struct station_info *sinfo, gfp_t gfp)
9566{ 9589{
9590 struct wiphy *wiphy = dev->ieee80211_ptr->wiphy;
9591 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
9567 struct sk_buff *msg; 9592 struct sk_buff *msg;
9568 9593
9594 trace_cfg80211_new_sta(dev, mac_addr, sinfo);
9595
9569 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); 9596 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
9570 if (!msg) 9597 if (!msg)
9571 return; 9598 return;
@@ -9579,14 +9606,17 @@ void nl80211_send_sta_event(struct cfg80211_registered_device *rdev,
9579 genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, 9606 genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0,
9580 nl80211_mlme_mcgrp.id, gfp); 9607 nl80211_mlme_mcgrp.id, gfp);
9581} 9608}
9609EXPORT_SYMBOL(cfg80211_new_sta);
9582 9610
9583void nl80211_send_sta_del_event(struct cfg80211_registered_device *rdev, 9611void cfg80211_del_sta(struct net_device *dev, const u8 *mac_addr, gfp_t gfp)
9584 struct net_device *dev, const u8 *mac_addr,
9585 gfp_t gfp)
9586{ 9612{
9613 struct wiphy *wiphy = dev->ieee80211_ptr->wiphy;
9614 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
9587 struct sk_buff *msg; 9615 struct sk_buff *msg;
9588 void *hdr; 9616 void *hdr;
9589 9617
9618 trace_cfg80211_del_sta(dev, mac_addr);
9619
9590 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); 9620 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
9591 if (!msg) 9621 if (!msg)
9592 return; 9622 return;
@@ -9611,12 +9641,14 @@ void nl80211_send_sta_del_event(struct cfg80211_registered_device *rdev,
9611 genlmsg_cancel(msg, hdr); 9641 genlmsg_cancel(msg, hdr);
9612 nlmsg_free(msg); 9642 nlmsg_free(msg);
9613} 9643}
9644EXPORT_SYMBOL(cfg80211_del_sta);
9614 9645
9615void nl80211_send_conn_failed_event(struct cfg80211_registered_device *rdev, 9646void cfg80211_conn_failed(struct net_device *dev, const u8 *mac_addr,
9616 struct net_device *dev, const u8 *mac_addr, 9647 enum nl80211_connect_failed_reason reason,
9617 enum nl80211_connect_failed_reason reason, 9648 gfp_t gfp)
9618 gfp_t gfp)
9619{ 9649{
9650 struct wiphy *wiphy = dev->ieee80211_ptr->wiphy;
9651 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
9620 struct sk_buff *msg; 9652 struct sk_buff *msg;
9621 void *hdr; 9653 void *hdr;
9622 9654
@@ -9645,6 +9677,7 @@ void nl80211_send_conn_failed_event(struct cfg80211_registered_device *rdev,
9645 genlmsg_cancel(msg, hdr); 9677 genlmsg_cancel(msg, hdr);
9646 nlmsg_free(msg); 9678 nlmsg_free(msg);
9647} 9679}
9680EXPORT_SYMBOL(cfg80211_conn_failed);
9648 9681
9649static bool __nl80211_unexpected_frame(struct net_device *dev, u8 cmd, 9682static bool __nl80211_unexpected_frame(struct net_device *dev, u8 cmd,
9650 const u8 *addr, gfp_t gfp) 9683 const u8 *addr, gfp_t gfp)
@@ -9689,19 +9722,47 @@ static bool __nl80211_unexpected_frame(struct net_device *dev, u8 cmd,
9689 return true; 9722 return true;
9690} 9723}
9691 9724
9692bool nl80211_unexpected_frame(struct net_device *dev, const u8 *addr, gfp_t gfp) 9725bool cfg80211_rx_spurious_frame(struct net_device *dev,
9726 const u8 *addr, gfp_t gfp)
9693{ 9727{
9694 return __nl80211_unexpected_frame(dev, NL80211_CMD_UNEXPECTED_FRAME, 9728 struct wireless_dev *wdev = dev->ieee80211_ptr;
9695 addr, gfp); 9729 bool ret;
9730
9731 trace_cfg80211_rx_spurious_frame(dev, addr);
9732
9733 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_AP &&
9734 wdev->iftype != NL80211_IFTYPE_P2P_GO)) {
9735 trace_cfg80211_return_bool(false);
9736 return false;
9737 }
9738 ret = __nl80211_unexpected_frame(dev, NL80211_CMD_UNEXPECTED_FRAME,
9739 addr, gfp);
9740 trace_cfg80211_return_bool(ret);
9741 return ret;
9696} 9742}
9743EXPORT_SYMBOL(cfg80211_rx_spurious_frame);
9697 9744
9698bool nl80211_unexpected_4addr_frame(struct net_device *dev, 9745bool cfg80211_rx_unexpected_4addr_frame(struct net_device *dev,
9699 const u8 *addr, gfp_t gfp) 9746 const u8 *addr, gfp_t gfp)
9700{ 9747{
9701 return __nl80211_unexpected_frame(dev, 9748 struct wireless_dev *wdev = dev->ieee80211_ptr;
9702 NL80211_CMD_UNEXPECTED_4ADDR_FRAME, 9749 bool ret;
9703 addr, gfp); 9750
9751 trace_cfg80211_rx_unexpected_4addr_frame(dev, addr);
9752
9753 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_AP &&
9754 wdev->iftype != NL80211_IFTYPE_P2P_GO &&
9755 wdev->iftype != NL80211_IFTYPE_AP_VLAN)) {
9756 trace_cfg80211_return_bool(false);
9757 return false;
9758 }
9759 ret = __nl80211_unexpected_frame(dev,
9760 NL80211_CMD_UNEXPECTED_4ADDR_FRAME,
9761 addr, gfp);
9762 trace_cfg80211_return_bool(ret);
9763 return ret;
9704} 9764}
9765EXPORT_SYMBOL(cfg80211_rx_unexpected_4addr_frame);
9705 9766
9706int nl80211_send_mgmt(struct cfg80211_registered_device *rdev, 9767int nl80211_send_mgmt(struct cfg80211_registered_device *rdev,
9707 struct wireless_dev *wdev, u32 nlportid, 9768 struct wireless_dev *wdev, u32 nlportid,
@@ -9741,15 +9802,17 @@ int nl80211_send_mgmt(struct cfg80211_registered_device *rdev,
9741 return -ENOBUFS; 9802 return -ENOBUFS;
9742} 9803}
9743 9804
9744void nl80211_send_mgmt_tx_status(struct cfg80211_registered_device *rdev, 9805void cfg80211_mgmt_tx_status(struct wireless_dev *wdev, u64 cookie,
9745 struct wireless_dev *wdev, u64 cookie, 9806 const u8 *buf, size_t len, bool ack, gfp_t gfp)
9746 const u8 *buf, size_t len, bool ack,
9747 gfp_t gfp)
9748{ 9807{
9808 struct wiphy *wiphy = wdev->wiphy;
9809 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
9749 struct net_device *netdev = wdev->netdev; 9810 struct net_device *netdev = wdev->netdev;
9750 struct sk_buff *msg; 9811 struct sk_buff *msg;
9751 void *hdr; 9812 void *hdr;
9752 9813
9814 trace_cfg80211_mgmt_tx_status(wdev, cookie, ack);
9815
9753 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); 9816 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
9754 if (!msg) 9817 if (!msg)
9755 return; 9818 return;
@@ -9777,17 +9840,21 @@ void nl80211_send_mgmt_tx_status(struct cfg80211_registered_device *rdev,
9777 genlmsg_cancel(msg, hdr); 9840 genlmsg_cancel(msg, hdr);
9778 nlmsg_free(msg); 9841 nlmsg_free(msg);
9779} 9842}
9843EXPORT_SYMBOL(cfg80211_mgmt_tx_status);
9780 9844
9781void 9845void cfg80211_cqm_rssi_notify(struct net_device *dev,
9782nl80211_send_cqm_rssi_notify(struct cfg80211_registered_device *rdev, 9846 enum nl80211_cqm_rssi_threshold_event rssi_event,
9783 struct net_device *netdev, 9847 gfp_t gfp)
9784 enum nl80211_cqm_rssi_threshold_event rssi_event,
9785 gfp_t gfp)
9786{ 9848{
9849 struct wireless_dev *wdev = dev->ieee80211_ptr;
9850 struct wiphy *wiphy = wdev->wiphy;
9851 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
9787 struct sk_buff *msg; 9852 struct sk_buff *msg;
9788 struct nlattr *pinfoattr; 9853 struct nlattr *pinfoattr;
9789 void *hdr; 9854 void *hdr;
9790 9855
9856 trace_cfg80211_cqm_rssi_notify(dev, rssi_event);
9857
9791 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); 9858 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
9792 if (!msg) 9859 if (!msg)
9793 return; 9860 return;
@@ -9799,7 +9866,7 @@ nl80211_send_cqm_rssi_notify(struct cfg80211_registered_device *rdev,
9799 } 9866 }
9800 9867
9801 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || 9868 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
9802 nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex)) 9869 nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex))
9803 goto nla_put_failure; 9870 goto nla_put_failure;
9804 9871
9805 pinfoattr = nla_nest_start(msg, NL80211_ATTR_CQM); 9872 pinfoattr = nla_nest_start(msg, NL80211_ATTR_CQM);
@@ -9822,10 +9889,11 @@ nl80211_send_cqm_rssi_notify(struct cfg80211_registered_device *rdev,
9822 genlmsg_cancel(msg, hdr); 9889 genlmsg_cancel(msg, hdr);
9823 nlmsg_free(msg); 9890 nlmsg_free(msg);
9824} 9891}
9892EXPORT_SYMBOL(cfg80211_cqm_rssi_notify);
9825 9893
9826void nl80211_gtk_rekey_notify(struct cfg80211_registered_device *rdev, 9894static void nl80211_gtk_rekey_notify(struct cfg80211_registered_device *rdev,
9827 struct net_device *netdev, const u8 *bssid, 9895 struct net_device *netdev, const u8 *bssid,
9828 const u8 *replay_ctr, gfp_t gfp) 9896 const u8 *replay_ctr, gfp_t gfp)
9829{ 9897{
9830 struct sk_buff *msg; 9898 struct sk_buff *msg;
9831 struct nlattr *rekey_attr; 9899 struct nlattr *rekey_attr;
@@ -9867,9 +9935,22 @@ void nl80211_gtk_rekey_notify(struct cfg80211_registered_device *rdev,
9867 nlmsg_free(msg); 9935 nlmsg_free(msg);
9868} 9936}
9869 9937
9870void nl80211_pmksa_candidate_notify(struct cfg80211_registered_device *rdev, 9938void cfg80211_gtk_rekey_notify(struct net_device *dev, const u8 *bssid,
9871 struct net_device *netdev, int index, 9939 const u8 *replay_ctr, gfp_t gfp)
9872 const u8 *bssid, bool preauth, gfp_t gfp) 9940{
9941 struct wireless_dev *wdev = dev->ieee80211_ptr;
9942 struct wiphy *wiphy = wdev->wiphy;
9943 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
9944
9945 trace_cfg80211_gtk_rekey_notify(dev, bssid);
9946 nl80211_gtk_rekey_notify(rdev, dev, bssid, replay_ctr, gfp);
9947}
9948EXPORT_SYMBOL(cfg80211_gtk_rekey_notify);
9949
9950static void
9951nl80211_pmksa_candidate_notify(struct cfg80211_registered_device *rdev,
9952 struct net_device *netdev, int index,
9953 const u8 *bssid, bool preauth, gfp_t gfp)
9873{ 9954{
9874 struct sk_buff *msg; 9955 struct sk_buff *msg;
9875 struct nlattr *attr; 9956 struct nlattr *attr;
@@ -9912,9 +9993,22 @@ void nl80211_pmksa_candidate_notify(struct cfg80211_registered_device *rdev,
9912 nlmsg_free(msg); 9993 nlmsg_free(msg);
9913} 9994}
9914 9995
9915void nl80211_ch_switch_notify(struct cfg80211_registered_device *rdev, 9996void cfg80211_pmksa_candidate_notify(struct net_device *dev, int index,
9916 struct net_device *netdev, 9997 const u8 *bssid, bool preauth, gfp_t gfp)
9917 struct cfg80211_chan_def *chandef, gfp_t gfp) 9998{
9999 struct wireless_dev *wdev = dev->ieee80211_ptr;
10000 struct wiphy *wiphy = wdev->wiphy;
10001 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
10002
10003 trace_cfg80211_pmksa_candidate_notify(dev, index, bssid, preauth);
10004 nl80211_pmksa_candidate_notify(rdev, dev, index, bssid, preauth, gfp);
10005}
10006EXPORT_SYMBOL(cfg80211_pmksa_candidate_notify);
10007
10008static void nl80211_ch_switch_notify(struct cfg80211_registered_device *rdev,
10009 struct net_device *netdev,
10010 struct cfg80211_chan_def *chandef,
10011 gfp_t gfp)
9918{ 10012{
9919 struct sk_buff *msg; 10013 struct sk_buff *msg;
9920 void *hdr; 10014 void *hdr;
@@ -9946,11 +10040,36 @@ void nl80211_ch_switch_notify(struct cfg80211_registered_device *rdev,
9946 nlmsg_free(msg); 10040 nlmsg_free(msg);
9947} 10041}
9948 10042
9949void 10043void cfg80211_ch_switch_notify(struct net_device *dev,
9950nl80211_send_cqm_txe_notify(struct cfg80211_registered_device *rdev, 10044 struct cfg80211_chan_def *chandef)
9951 struct net_device *netdev, const u8 *peer,
9952 u32 num_packets, u32 rate, u32 intvl, gfp_t gfp)
9953{ 10045{
10046 struct wireless_dev *wdev = dev->ieee80211_ptr;
10047 struct wiphy *wiphy = wdev->wiphy;
10048 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
10049
10050 trace_cfg80211_ch_switch_notify(dev, chandef);
10051
10052 wdev_lock(wdev);
10053
10054 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_AP &&
10055 wdev->iftype != NL80211_IFTYPE_P2P_GO))
10056 goto out;
10057
10058 wdev->channel = chandef->chan;
10059 nl80211_ch_switch_notify(rdev, dev, chandef, GFP_KERNEL);
10060out:
10061 wdev_unlock(wdev);
10062 return;
10063}
10064EXPORT_SYMBOL(cfg80211_ch_switch_notify);
10065
10066void cfg80211_cqm_txe_notify(struct net_device *dev,
10067 const u8 *peer, u32 num_packets,
10068 u32 rate, u32 intvl, gfp_t gfp)
10069{
10070 struct wireless_dev *wdev = dev->ieee80211_ptr;
10071 struct wiphy *wiphy = wdev->wiphy;
10072 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
9954 struct sk_buff *msg; 10073 struct sk_buff *msg;
9955 struct nlattr *pinfoattr; 10074 struct nlattr *pinfoattr;
9956 void *hdr; 10075 void *hdr;
@@ -9966,7 +10085,7 @@ nl80211_send_cqm_txe_notify(struct cfg80211_registered_device *rdev,
9966 } 10085 }
9967 10086
9968 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || 10087 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
9969 nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) || 10088 nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) ||
9970 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, peer)) 10089 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, peer))
9971 goto nla_put_failure; 10090 goto nla_put_failure;
9972 10091
@@ -9995,6 +10114,7 @@ nl80211_send_cqm_txe_notify(struct cfg80211_registered_device *rdev,
9995 genlmsg_cancel(msg, hdr); 10114 genlmsg_cancel(msg, hdr);
9996 nlmsg_free(msg); 10115 nlmsg_free(msg);
9997} 10116}
10117EXPORT_SYMBOL(cfg80211_cqm_txe_notify);
9998 10118
9999void 10119void
10000nl80211_radar_notify(struct cfg80211_registered_device *rdev, 10120nl80211_radar_notify(struct cfg80211_registered_device *rdev,
@@ -10047,15 +10167,18 @@ nl80211_radar_notify(struct cfg80211_registered_device *rdev,
10047 nlmsg_free(msg); 10167 nlmsg_free(msg);
10048} 10168}
10049 10169
10050void 10170void cfg80211_cqm_pktloss_notify(struct net_device *dev,
10051nl80211_send_cqm_pktloss_notify(struct cfg80211_registered_device *rdev, 10171 const u8 *peer, u32 num_packets, gfp_t gfp)
10052 struct net_device *netdev, const u8 *peer,
10053 u32 num_packets, gfp_t gfp)
10054{ 10172{
10173 struct wireless_dev *wdev = dev->ieee80211_ptr;
10174 struct wiphy *wiphy = wdev->wiphy;
10175 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
10055 struct sk_buff *msg; 10176 struct sk_buff *msg;
10056 struct nlattr *pinfoattr; 10177 struct nlattr *pinfoattr;
10057 void *hdr; 10178 void *hdr;
10058 10179
10180 trace_cfg80211_cqm_pktloss_notify(dev, peer, num_packets);
10181
10059 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); 10182 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
10060 if (!msg) 10183 if (!msg)
10061 return; 10184 return;
@@ -10067,7 +10190,7 @@ nl80211_send_cqm_pktloss_notify(struct cfg80211_registered_device *rdev,
10067 } 10190 }
10068 10191
10069 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || 10192 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
10070 nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) || 10193 nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) ||
10071 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, peer)) 10194 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, peer))
10072 goto nla_put_failure; 10195 goto nla_put_failure;
10073 10196
@@ -10090,6 +10213,7 @@ nl80211_send_cqm_pktloss_notify(struct cfg80211_registered_device *rdev,
10090 genlmsg_cancel(msg, hdr); 10213 genlmsg_cancel(msg, hdr);
10091 nlmsg_free(msg); 10214 nlmsg_free(msg);
10092} 10215}
10216EXPORT_SYMBOL(cfg80211_cqm_pktloss_notify);
10093 10217
10094void cfg80211_probe_status(struct net_device *dev, const u8 *addr, 10218void cfg80211_probe_status(struct net_device *dev, const u8 *addr,
10095 u64 cookie, bool acked, gfp_t gfp) 10219 u64 cookie, bool acked, gfp_t gfp)
diff --git a/net/wireless/nl80211.h b/net/wireless/nl80211.h
index b061da4919e1..a4073e808c13 100644
--- a/net/wireless/nl80211.h
+++ b/net/wireless/nl80211.h
@@ -29,12 +29,6 @@ void nl80211_send_deauth(struct cfg80211_registered_device *rdev,
29void nl80211_send_disassoc(struct cfg80211_registered_device *rdev, 29void nl80211_send_disassoc(struct cfg80211_registered_device *rdev,
30 struct net_device *netdev, 30 struct net_device *netdev,
31 const u8 *buf, size_t len, gfp_t gfp); 31 const u8 *buf, size_t len, gfp_t gfp);
32void nl80211_send_unprot_deauth(struct cfg80211_registered_device *rdev,
33 struct net_device *netdev,
34 const u8 *buf, size_t len, gfp_t gfp);
35void nl80211_send_unprot_disassoc(struct cfg80211_registered_device *rdev,
36 struct net_device *netdev,
37 const u8 *buf, size_t len, gfp_t gfp);
38void nl80211_send_auth_timeout(struct cfg80211_registered_device *rdev, 32void nl80211_send_auth_timeout(struct cfg80211_registered_device *rdev,
39 struct net_device *netdev, 33 struct net_device *netdev,
40 const u8 *addr, gfp_t gfp); 34 const u8 *addr, gfp_t gfp);
@@ -54,10 +48,6 @@ void nl80211_send_disconnected(struct cfg80211_registered_device *rdev,
54 struct net_device *netdev, u16 reason, 48 struct net_device *netdev, u16 reason,
55 const u8 *ie, size_t ie_len, bool from_ap); 49 const u8 *ie, size_t ie_len, bool from_ap);
56 50
57void nl80211_send_new_peer_candidate(struct cfg80211_registered_device *rdev,
58 struct net_device *netdev,
59 const u8 *macaddr, const u8* ie, u8 ie_len,
60 gfp_t gfp);
61void 51void
62nl80211_michael_mic_failure(struct cfg80211_registered_device *rdev, 52nl80211_michael_mic_failure(struct cfg80211_registered_device *rdev,
63 struct net_device *netdev, const u8 *addr, 53 struct net_device *netdev, const u8 *addr,
@@ -73,41 +63,10 @@ void nl80211_send_ibss_bssid(struct cfg80211_registered_device *rdev,
73 struct net_device *netdev, const u8 *bssid, 63 struct net_device *netdev, const u8 *bssid,
74 gfp_t gfp); 64 gfp_t gfp);
75 65
76void nl80211_send_remain_on_channel(struct cfg80211_registered_device *rdev,
77 struct wireless_dev *wdev, u64 cookie,
78 struct ieee80211_channel *chan,
79 unsigned int duration, gfp_t gfp);
80void nl80211_send_remain_on_channel_cancel(
81 struct cfg80211_registered_device *rdev,
82 struct wireless_dev *wdev,
83 u64 cookie, struct ieee80211_channel *chan, gfp_t gfp);
84
85void nl80211_send_sta_event(struct cfg80211_registered_device *rdev,
86 struct net_device *dev, const u8 *mac_addr,
87 struct station_info *sinfo, gfp_t gfp);
88void nl80211_send_sta_del_event(struct cfg80211_registered_device *rdev,
89 struct net_device *dev, const u8 *mac_addr,
90 gfp_t gfp);
91
92void nl80211_send_conn_failed_event(struct cfg80211_registered_device *rdev,
93 struct net_device *dev, const u8 *mac_addr,
94 enum nl80211_connect_failed_reason reason,
95 gfp_t gfp);
96
97int nl80211_send_mgmt(struct cfg80211_registered_device *rdev, 66int nl80211_send_mgmt(struct cfg80211_registered_device *rdev,
98 struct wireless_dev *wdev, u32 nlpid, 67 struct wireless_dev *wdev, u32 nlpid,
99 int freq, int sig_dbm, 68 int freq, int sig_dbm,
100 const u8 *buf, size_t len, gfp_t gfp); 69 const u8 *buf, size_t len, gfp_t gfp);
101void nl80211_send_mgmt_tx_status(struct cfg80211_registered_device *rdev,
102 struct wireless_dev *wdev, u64 cookie,
103 const u8 *buf, size_t len, bool ack,
104 gfp_t gfp);
105
106void
107nl80211_send_cqm_rssi_notify(struct cfg80211_registered_device *rdev,
108 struct net_device *netdev,
109 enum nl80211_cqm_rssi_threshold_event rssi_event,
110 gfp_t gfp);
111 70
112void 71void
113nl80211_radar_notify(struct cfg80211_registered_device *rdev, 72nl80211_radar_notify(struct cfg80211_registered_device *rdev,
@@ -115,31 +74,4 @@ nl80211_radar_notify(struct cfg80211_registered_device *rdev,
115 enum nl80211_radar_event event, 74 enum nl80211_radar_event event,
116 struct net_device *netdev, gfp_t gfp); 75 struct net_device *netdev, gfp_t gfp);
117 76
118void
119nl80211_send_cqm_pktloss_notify(struct cfg80211_registered_device *rdev,
120 struct net_device *netdev, const u8 *peer,
121 u32 num_packets, gfp_t gfp);
122
123void
124nl80211_send_cqm_txe_notify(struct cfg80211_registered_device *rdev,
125 struct net_device *netdev, const u8 *peer,
126 u32 num_packets, u32 rate, u32 intvl, gfp_t gfp);
127
128void nl80211_gtk_rekey_notify(struct cfg80211_registered_device *rdev,
129 struct net_device *netdev, const u8 *bssid,
130 const u8 *replay_ctr, gfp_t gfp);
131
132void nl80211_pmksa_candidate_notify(struct cfg80211_registered_device *rdev,
133 struct net_device *netdev, int index,
134 const u8 *bssid, bool preauth, gfp_t gfp);
135
136void nl80211_ch_switch_notify(struct cfg80211_registered_device *rdev,
137 struct net_device *dev,
138 struct cfg80211_chan_def *chandef, gfp_t gfp);
139
140bool nl80211_unexpected_frame(struct net_device *dev,
141 const u8 *addr, gfp_t gfp);
142bool nl80211_unexpected_4addr_frame(struct net_device *dev,
143 const u8 *addr, gfp_t gfp);
144
145#endif /* __NET_WIRELESS_NL80211_H */ 77#endif /* __NET_WIRELESS_NL80211_H */