xref: /openbmc/linux/net/wireless/nl80211.h (revision c900529f3d9161bfde5cca0754f83b4d3c3e0220)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
29bb7e0f2SJohannes Berg /*
39bb7e0f2SJohannes Berg  * Portions of this file
400b3d840SAvraham Stern  * Copyright (C) 2018, 2020-2022 Intel Corporation
59bb7e0f2SJohannes Berg  */
655682965SJohannes Berg #ifndef __NET_WIRELESS_NL80211_H
755682965SJohannes Berg #define __NET_WIRELESS_NL80211_H
855682965SJohannes Berg 
955682965SJohannes Berg #include "core.h"
1055682965SJohannes Berg 
11dad82330SJohannes Berg int nl80211_init(void);
12dad82330SJohannes Berg void nl80211_exit(void);
139bb7e0f2SJohannes Berg 
149bb7e0f2SJohannes Berg void *nl80211hdr_put(struct sk_buff *skb, u32 portid, u32 seq,
159bb7e0f2SJohannes Berg 		     int flags, u8 cmd);
169bb7e0f2SJohannes Berg bool nl80211_put_sta_rate(struct sk_buff *msg, struct rate_info *info,
179bb7e0f2SJohannes Berg 			  int attr);
189bb7e0f2SJohannes Berg 
wdev_id(struct wireless_dev * wdev)199bb7e0f2SJohannes Berg static inline u64 wdev_id(struct wireless_dev *wdev)
209bb7e0f2SJohannes Berg {
219bb7e0f2SJohannes Berg 	return (u64)wdev->identifier |
229bb7e0f2SJohannes Berg 	       ((u64)wiphy_to_rdev(wdev->wiphy)->wiphy_idx << 32);
239bb7e0f2SJohannes Berg }
249bb7e0f2SJohannes Berg 
259bb7e0f2SJohannes Berg int nl80211_parse_chandef(struct cfg80211_registered_device *rdev,
269bb7e0f2SJohannes Berg 			  struct genl_info *info,
279bb7e0f2SJohannes Berg 			  struct cfg80211_chan_def *chandef);
289bb7e0f2SJohannes Berg int nl80211_parse_random_mac(struct nlattr **attrs,
299bb7e0f2SJohannes Berg 			     u8 *mac_addr, u8 *mac_addr_mask);
309bb7e0f2SJohannes Berg 
313bb20556SJohannes Berg void nl80211_notify_wiphy(struct cfg80211_registered_device *rdev,
323bb20556SJohannes Berg 			  enum nl80211_commands cmd);
33896ff063SDenis Kenzior void nl80211_notify_iface(struct cfg80211_registered_device *rdev,
34896ff063SDenis Kenzior 			  struct wireless_dev *wdev,
35896ff063SDenis Kenzior 			  enum nl80211_commands cmd);
36dad82330SJohannes Berg void nl80211_send_scan_start(struct cfg80211_registered_device *rdev,
37fd014284SJohannes Berg 			     struct wireless_dev *wdev);
38f9d15d16SJohannes Berg struct sk_buff *nl80211_build_scan_msg(struct cfg80211_registered_device *rdev,
39f9d15d16SJohannes Berg 				       struct wireless_dev *wdev, bool aborted);
40505a2e88SArend Van Spriel void nl80211_send_scan_msg(struct cfg80211_registered_device *rdev,
41f9d15d16SJohannes Berg 			   struct sk_buff *msg);
4296b08fd6SArend Van Spriel void nl80211_send_sched_scan(struct cfg80211_sched_scan_request *req, u32 cmd);
43b0d7aa59SJonathan Doron void nl80211_common_reg_change_event(enum nl80211_commands cmd_id,
44b0d7aa59SJonathan Doron 				     struct regulatory_request *request);
45b0d7aa59SJonathan Doron 
46b0d7aa59SJonathan Doron static inline void
nl80211_send_reg_change_event(struct regulatory_request * request)47b0d7aa59SJonathan Doron nl80211_send_reg_change_event(struct regulatory_request *request)
48b0d7aa59SJonathan Doron {
49b0d7aa59SJonathan Doron 	nl80211_common_reg_change_event(NL80211_CMD_REG_CHANGE, request);
50b0d7aa59SJonathan Doron }
51b0d7aa59SJonathan Doron 
52b0d7aa59SJonathan Doron static inline void
nl80211_send_wiphy_reg_change_event(struct regulatory_request * request)53b0d7aa59SJonathan Doron nl80211_send_wiphy_reg_change_event(struct regulatory_request *request)
54b0d7aa59SJonathan Doron {
55b0d7aa59SJonathan Doron 	nl80211_common_reg_change_event(NL80211_CMD_WIPHY_REG_CHANGE, request);
56b0d7aa59SJonathan Doron }
57b0d7aa59SJonathan Doron 
58dad82330SJohannes Berg void nl80211_send_rx_auth(struct cfg80211_registered_device *rdev,
596039f6d2SJouni Malinen 			  struct net_device *netdev,
60e6d6e342SJohannes Berg 			  const u8 *buf, size_t len, gfp_t gfp);
61dad82330SJohannes Berg void nl80211_send_rx_assoc(struct cfg80211_registered_device *rdev,
626039f6d2SJouni Malinen 			   struct net_device *netdev,
63cd47c0f5SJohannes Berg 			   struct cfg80211_rx_assoc_resp *data);
64dad82330SJohannes Berg void nl80211_send_deauth(struct cfg80211_registered_device *rdev,
656039f6d2SJouni Malinen 			 struct net_device *netdev,
663bb02143SJohannes Berg 			 const u8 *buf, size_t len,
673bb02143SJohannes Berg 			 bool reconnect, gfp_t gfp);
68dad82330SJohannes Berg void nl80211_send_disassoc(struct cfg80211_registered_device *rdev,
696039f6d2SJouni Malinen 			   struct net_device *netdev,
703bb02143SJohannes Berg 			   const u8 *buf, size_t len,
713bb02143SJohannes Berg 			   bool reconnect, gfp_t gfp);
72dad82330SJohannes Berg void nl80211_send_auth_timeout(struct cfg80211_registered_device *rdev,
731965c853SJouni Malinen 			       struct net_device *netdev,
74e6d6e342SJohannes Berg 			       const u8 *addr, gfp_t gfp);
75dad82330SJohannes Berg void nl80211_send_assoc_timeout(struct cfg80211_registered_device *rdev,
761965c853SJouni Malinen 				struct net_device *netdev,
77e6d6e342SJohannes Berg 				const u8 *addr, gfp_t gfp);
78b23aa676SSamuel Ortiz void nl80211_send_connect_result(struct cfg80211_registered_device *rdev,
795349a0f7SVidyullatha Kanchanapally 				 struct net_device *netdev,
805349a0f7SVidyullatha Kanchanapally 				 struct cfg80211_connect_resp_params *params,
813093ebbeSPurushottam Kushwaha 				 gfp_t gfp);
82b23aa676SSamuel Ortiz void nl80211_send_roamed(struct cfg80211_registered_device *rdev,
8329ce6ecbSAvraham Stern 			 struct net_device *netdev,
8429ce6ecbSAvraham Stern 			 struct cfg80211_roam_info *info, gfp_t gfp);
85503c1fb9SAvraham Stern void nl80211_send_port_authorized(struct cfg80211_registered_device *rdev,
860ff57171SVinayak Yadawad 				  struct net_device *netdev, const u8 *bssid,
870ff57171SVinayak Yadawad 				  const u8 *td_bitmap, u8 td_bitmap_len);
88b23aa676SSamuel Ortiz void nl80211_send_disconnected(struct cfg80211_registered_device *rdev,
89b23aa676SSamuel Ortiz 			       struct net_device *netdev, u16 reason,
90667503ddSJohannes Berg 			       const u8 *ie, size_t ie_len, bool from_ap);
91b23aa676SSamuel Ortiz 
92dad82330SJohannes Berg void
93a3b8b056SJouni Malinen nl80211_michael_mic_failure(struct cfg80211_registered_device *rdev,
94a3b8b056SJouni Malinen 			    struct net_device *netdev, const u8 *addr,
95a3b8b056SJouni Malinen 			    enum nl80211_key_type key_type,
96e6d6e342SJohannes Berg 			    int key_id, const u8 *tsc, gfp_t gfp);
9755682965SJohannes Berg 
98dad82330SJohannes Berg void
996bad8766SLuis R. Rodriguez nl80211_send_beacon_hint_event(struct wiphy *wiphy,
1006bad8766SLuis R. Rodriguez 			       struct ieee80211_channel *channel_before,
1016bad8766SLuis R. Rodriguez 			       struct ieee80211_channel *channel_after);
1026bad8766SLuis R. Rodriguez 
10304a773adSJohannes Berg void nl80211_send_ibss_bssid(struct cfg80211_registered_device *rdev,
10404a773adSJohannes Berg 			     struct net_device *netdev, const u8 *bssid,
10504a773adSJohannes Berg 			     gfp_t gfp);
10604a773adSJohannes Berg 
1072e161f78SJohannes Berg int nl80211_send_mgmt(struct cfg80211_registered_device *rdev,
10871bbc994SJohannes Berg 		      struct wireless_dev *wdev, u32 nlpid,
10900b3d840SAvraham Stern 		      struct cfg80211_rx_info *info, gfp_t gfp);
11004f39047SSimon Wunderlich 
11104f39047SSimon Wunderlich void
11204f39047SSimon Wunderlich nl80211_radar_notify(struct cfg80211_registered_device *rdev,
113d2859df5SJanusz Dziedzic 		     const struct cfg80211_chan_def *chandef,
11404f39047SSimon Wunderlich 		     enum nl80211_radar_event event,
11504f39047SSimon Wunderlich 		     struct net_device *netdev, gfp_t gfp);
11604f39047SSimon Wunderlich 
117*cba7217aSAlvin Šipraga void nl80211_send_ap_stopped(struct wireless_dev *wdev, unsigned int link_id);
118348baf0eSJohannes Berg 
119be29b99aSAmitkumar Karwar void cfg80211_rdev_free_coalesce(struct cfg80211_registered_device *rdev);
120be29b99aSAmitkumar Karwar 
1219bb7e0f2SJohannes Berg /* peer measurement */
1229bb7e0f2SJohannes Berg int nl80211_pmsr_start(struct sk_buff *skb, struct genl_info *info);
1239bb7e0f2SJohannes Berg 
12455682965SJohannes Berg #endif /* __NET_WIRELESS_NL80211_H */
125