1#ifndef __CFG80211_RDEV_OPS
2#define __CFG80211_RDEV_OPS
3
4#include <linux/rtnetlink.h>
5#include <net/cfg80211.h>
6#include "core.h"
7#include "trace.h"
8
9static inline int rdev_suspend(struct cfg80211_registered_device *rdev,
10			       struct cfg80211_wowlan *wowlan)
11{
12	int ret;
13	trace_rdev_suspend(&rdev->wiphy, wowlan);
14	ret = rdev->ops->suspend(&rdev->wiphy, wowlan);
15	trace_rdev_return_int(&rdev->wiphy, ret);
16	return ret;
17}
18
19static inline int rdev_resume(struct cfg80211_registered_device *rdev)
20{
21	int ret;
22	trace_rdev_resume(&rdev->wiphy);
23	ret = rdev->ops->resume(&rdev->wiphy);
24	trace_rdev_return_int(&rdev->wiphy, ret);
25	return ret;
26}
27
28static inline void rdev_set_wakeup(struct cfg80211_registered_device *rdev,
29				   bool enabled)
30{
31	trace_rdev_set_wakeup(&rdev->wiphy, enabled);
32	rdev->ops->set_wakeup(&rdev->wiphy, enabled);
33	trace_rdev_return_void(&rdev->wiphy);
34}
35
36static inline struct wireless_dev
37*rdev_add_virtual_intf(struct cfg80211_registered_device *rdev, char *name,
38		       unsigned char name_assign_type,
39		       enum nl80211_iftype type, u32 *flags,
40		       struct vif_params *params)
41{
42	struct wireless_dev *ret;
43	trace_rdev_add_virtual_intf(&rdev->wiphy, name, type);
44	ret = rdev->ops->add_virtual_intf(&rdev->wiphy, name, name_assign_type,
45					  type, flags, params);
46	trace_rdev_return_wdev(&rdev->wiphy, ret);
47	return ret;
48}
49
50static inline int
51rdev_del_virtual_intf(struct cfg80211_registered_device *rdev,
52		      struct wireless_dev *wdev)
53{
54	int ret;
55	trace_rdev_del_virtual_intf(&rdev->wiphy, wdev);
56	ret = rdev->ops->del_virtual_intf(&rdev->wiphy, wdev);
57	trace_rdev_return_int(&rdev->wiphy, ret);
58	return ret;
59}
60
61static inline int
62rdev_change_virtual_intf(struct cfg80211_registered_device *rdev,
63			 struct net_device *dev, enum nl80211_iftype type,
64			 u32 *flags, struct vif_params *params)
65{
66	int ret;
67	trace_rdev_change_virtual_intf(&rdev->wiphy, dev, type);
68	ret = rdev->ops->change_virtual_intf(&rdev->wiphy, dev, type, flags,
69					     params);
70	trace_rdev_return_int(&rdev->wiphy, ret);
71	return ret;
72}
73
74static inline int rdev_add_key(struct cfg80211_registered_device *rdev,
75			       struct net_device *netdev, u8 key_index,
76			       bool pairwise, const u8 *mac_addr,
77			       struct key_params *params)
78{
79	int ret;
80	trace_rdev_add_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr);
81	ret = rdev->ops->add_key(&rdev->wiphy, netdev, key_index, pairwise,
82				  mac_addr, params);
83	trace_rdev_return_int(&rdev->wiphy, ret);
84	return ret;
85}
86
87static inline int
88rdev_get_key(struct cfg80211_registered_device *rdev, struct net_device *netdev,
89	     u8 key_index, bool pairwise, const u8 *mac_addr, void *cookie,
90	     void (*callback)(void *cookie, struct key_params*))
91{
92	int ret;
93	trace_rdev_get_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr);
94	ret = rdev->ops->get_key(&rdev->wiphy, netdev, key_index, pairwise,
95				  mac_addr, cookie, callback);
96	trace_rdev_return_int(&rdev->wiphy, ret);
97	return ret;
98}
99
100static inline int rdev_del_key(struct cfg80211_registered_device *rdev,
101			       struct net_device *netdev, u8 key_index,
102			       bool pairwise, const u8 *mac_addr)
103{
104	int ret;
105	trace_rdev_del_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr);
106	ret = rdev->ops->del_key(&rdev->wiphy, netdev, key_index, pairwise,
107				  mac_addr);
108	trace_rdev_return_int(&rdev->wiphy, ret);
109	return ret;
110}
111
112static inline int
113rdev_set_default_key(struct cfg80211_registered_device *rdev,
114		     struct net_device *netdev, u8 key_index, bool unicast,
115		     bool multicast)
116{
117	int ret;
118	trace_rdev_set_default_key(&rdev->wiphy, netdev, key_index,
119				   unicast, multicast);
120	ret = rdev->ops->set_default_key(&rdev->wiphy, netdev, key_index,
121					  unicast, multicast);
122	trace_rdev_return_int(&rdev->wiphy, ret);
123	return ret;
124}
125
126static inline int
127rdev_set_default_mgmt_key(struct cfg80211_registered_device *rdev,
128			  struct net_device *netdev, u8 key_index)
129{
130	int ret;
131	trace_rdev_set_default_mgmt_key(&rdev->wiphy, netdev, key_index);
132	ret = rdev->ops->set_default_mgmt_key(&rdev->wiphy, netdev,
133					       key_index);
134	trace_rdev_return_int(&rdev->wiphy, ret);
135	return ret;
136}
137
138static inline int rdev_start_ap(struct cfg80211_registered_device *rdev,
139				struct net_device *dev,
140				struct cfg80211_ap_settings *settings)
141{
142	int ret;
143	trace_rdev_start_ap(&rdev->wiphy, dev, settings);
144	ret = rdev->ops->start_ap(&rdev->wiphy, dev, settings);
145	trace_rdev_return_int(&rdev->wiphy, ret);
146	return ret;
147}
148
149static inline int rdev_change_beacon(struct cfg80211_registered_device *rdev,
150				     struct net_device *dev,
151				     struct cfg80211_beacon_data *info)
152{
153	int ret;
154	trace_rdev_change_beacon(&rdev->wiphy, dev, info);
155	ret = rdev->ops->change_beacon(&rdev->wiphy, dev, info);
156	trace_rdev_return_int(&rdev->wiphy, ret);
157	return ret;
158}
159
160static inline int rdev_stop_ap(struct cfg80211_registered_device *rdev,
161			       struct net_device *dev)
162{
163	int ret;
164	trace_rdev_stop_ap(&rdev->wiphy, dev);
165	ret = rdev->ops->stop_ap(&rdev->wiphy, dev);
166	trace_rdev_return_int(&rdev->wiphy, ret);
167	return ret;
168}
169
170static inline int rdev_add_station(struct cfg80211_registered_device *rdev,
171				   struct net_device *dev, u8 *mac,
172				   struct station_parameters *params)
173{
174	int ret;
175	trace_rdev_add_station(&rdev->wiphy, dev, mac, params);
176	ret = rdev->ops->add_station(&rdev->wiphy, dev, mac, params);
177	trace_rdev_return_int(&rdev->wiphy, ret);
178	return ret;
179}
180
181static inline int rdev_del_station(struct cfg80211_registered_device *rdev,
182				   struct net_device *dev,
183				   struct station_del_parameters *params)
184{
185	int ret;
186	trace_rdev_del_station(&rdev->wiphy, dev, params);
187	ret = rdev->ops->del_station(&rdev->wiphy, dev, params);
188	trace_rdev_return_int(&rdev->wiphy, ret);
189	return ret;
190}
191
192static inline int rdev_change_station(struct cfg80211_registered_device *rdev,
193				      struct net_device *dev, u8 *mac,
194				      struct station_parameters *params)
195{
196	int ret;
197	trace_rdev_change_station(&rdev->wiphy, dev, mac, params);
198	ret = rdev->ops->change_station(&rdev->wiphy, dev, mac, params);
199	trace_rdev_return_int(&rdev->wiphy, ret);
200	return ret;
201}
202
203static inline int rdev_get_station(struct cfg80211_registered_device *rdev,
204				   struct net_device *dev, const u8 *mac,
205				   struct station_info *sinfo)
206{
207	int ret;
208	trace_rdev_get_station(&rdev->wiphy, dev, mac);
209	ret = rdev->ops->get_station(&rdev->wiphy, dev, mac, sinfo);
210	trace_rdev_return_int_station_info(&rdev->wiphy, ret, sinfo);
211	return ret;
212}
213
214static inline int rdev_dump_station(struct cfg80211_registered_device *rdev,
215				    struct net_device *dev, int idx, u8 *mac,
216				    struct station_info *sinfo)
217{
218	int ret;
219	trace_rdev_dump_station(&rdev->wiphy, dev, idx, mac);
220	ret = rdev->ops->dump_station(&rdev->wiphy, dev, idx, mac, sinfo);
221	trace_rdev_return_int_station_info(&rdev->wiphy, ret, sinfo);
222	return ret;
223}
224
225static inline int rdev_add_mpath(struct cfg80211_registered_device *rdev,
226				 struct net_device *dev, u8 *dst, u8 *next_hop)
227{
228	int ret;
229	trace_rdev_add_mpath(&rdev->wiphy, dev, dst, next_hop);
230	ret = rdev->ops->add_mpath(&rdev->wiphy, dev, dst, next_hop);
231	trace_rdev_return_int(&rdev->wiphy, ret);
232	return ret;
233}
234
235static inline int rdev_del_mpath(struct cfg80211_registered_device *rdev,
236				 struct net_device *dev, u8 *dst)
237{
238	int ret;
239	trace_rdev_del_mpath(&rdev->wiphy, dev, dst);
240	ret = rdev->ops->del_mpath(&rdev->wiphy, dev, dst);
241	trace_rdev_return_int(&rdev->wiphy, ret);
242	return ret;
243}
244
245static inline int rdev_change_mpath(struct cfg80211_registered_device *rdev,
246				    struct net_device *dev, u8 *dst,
247				    u8 *next_hop)
248{
249	int ret;
250	trace_rdev_change_mpath(&rdev->wiphy, dev, dst, next_hop);
251	ret = rdev->ops->change_mpath(&rdev->wiphy, dev, dst, next_hop);
252	trace_rdev_return_int(&rdev->wiphy, ret);
253	return ret;
254}
255
256static inline int rdev_get_mpath(struct cfg80211_registered_device *rdev,
257				 struct net_device *dev, u8 *dst, u8 *next_hop,
258				 struct mpath_info *pinfo)
259{
260	int ret;
261	trace_rdev_get_mpath(&rdev->wiphy, dev, dst, next_hop);
262	ret = rdev->ops->get_mpath(&rdev->wiphy, dev, dst, next_hop, pinfo);
263	trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo);
264	return ret;
265
266}
267
268static inline int rdev_get_mpp(struct cfg80211_registered_device *rdev,
269			       struct net_device *dev, u8 *dst, u8 *mpp,
270			       struct mpath_info *pinfo)
271{
272	int ret;
273
274	trace_rdev_get_mpp(&rdev->wiphy, dev, dst, mpp);
275	ret = rdev->ops->get_mpp(&rdev->wiphy, dev, dst, mpp, pinfo);
276	trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo);
277	return ret;
278}
279
280static inline int rdev_dump_mpath(struct cfg80211_registered_device *rdev,
281				  struct net_device *dev, int idx, u8 *dst,
282				  u8 *next_hop, struct mpath_info *pinfo)
283
284{
285	int ret;
286	trace_rdev_dump_mpath(&rdev->wiphy, dev, idx, dst, next_hop);
287	ret = rdev->ops->dump_mpath(&rdev->wiphy, dev, idx, dst, next_hop,
288				    pinfo);
289	trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo);
290	return ret;
291}
292
293static inline int rdev_dump_mpp(struct cfg80211_registered_device *rdev,
294				struct net_device *dev, int idx, u8 *dst,
295				u8 *mpp, struct mpath_info *pinfo)
296
297{
298	int ret;
299
300	trace_rdev_dump_mpp(&rdev->wiphy, dev, idx, dst, mpp);
301	ret = rdev->ops->dump_mpp(&rdev->wiphy, dev, idx, dst, mpp, pinfo);
302	trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo);
303	return ret;
304}
305
306static inline int
307rdev_get_mesh_config(struct cfg80211_registered_device *rdev,
308		     struct net_device *dev, struct mesh_config *conf)
309{
310	int ret;
311	trace_rdev_get_mesh_config(&rdev->wiphy, dev);
312	ret = rdev->ops->get_mesh_config(&rdev->wiphy, dev, conf);
313	trace_rdev_return_int_mesh_config(&rdev->wiphy, ret, conf);
314	return ret;
315}
316
317static inline int
318rdev_update_mesh_config(struct cfg80211_registered_device *rdev,
319			struct net_device *dev, u32 mask,
320			const struct mesh_config *nconf)
321{
322	int ret;
323	trace_rdev_update_mesh_config(&rdev->wiphy, dev, mask, nconf);
324	ret = rdev->ops->update_mesh_config(&rdev->wiphy, dev, mask, nconf);
325	trace_rdev_return_int(&rdev->wiphy, ret);
326	return ret;
327}
328
329static inline int rdev_join_mesh(struct cfg80211_registered_device *rdev,
330				 struct net_device *dev,
331				 const struct mesh_config *conf,
332				 const struct mesh_setup *setup)
333{
334	int ret;
335	trace_rdev_join_mesh(&rdev->wiphy, dev, conf, setup);
336	ret = rdev->ops->join_mesh(&rdev->wiphy, dev, conf, setup);
337	trace_rdev_return_int(&rdev->wiphy, ret);
338	return ret;
339}
340
341
342static inline int rdev_leave_mesh(struct cfg80211_registered_device *rdev,
343				  struct net_device *dev)
344{
345	int ret;
346	trace_rdev_leave_mesh(&rdev->wiphy, dev);
347	ret = rdev->ops->leave_mesh(&rdev->wiphy, dev);
348	trace_rdev_return_int(&rdev->wiphy, ret);
349	return ret;
350}
351
352static inline int rdev_join_ocb(struct cfg80211_registered_device *rdev,
353				struct net_device *dev,
354				struct ocb_setup *setup)
355{
356	int ret;
357	trace_rdev_join_ocb(&rdev->wiphy, dev, setup);
358	ret = rdev->ops->join_ocb(&rdev->wiphy, dev, setup);
359	trace_rdev_return_int(&rdev->wiphy, ret);
360	return ret;
361}
362
363static inline int rdev_leave_ocb(struct cfg80211_registered_device *rdev,
364				 struct net_device *dev)
365{
366	int ret;
367	trace_rdev_leave_ocb(&rdev->wiphy, dev);
368	ret = rdev->ops->leave_ocb(&rdev->wiphy, dev);
369	trace_rdev_return_int(&rdev->wiphy, ret);
370	return ret;
371}
372
373static inline int rdev_change_bss(struct cfg80211_registered_device *rdev,
374				  struct net_device *dev,
375				  struct bss_parameters *params)
376
377{
378	int ret;
379	trace_rdev_change_bss(&rdev->wiphy, dev, params);
380	ret = rdev->ops->change_bss(&rdev->wiphy, dev, params);
381	trace_rdev_return_int(&rdev->wiphy, ret);
382	return ret;
383}
384
385static inline int rdev_set_txq_params(struct cfg80211_registered_device *rdev,
386				      struct net_device *dev,
387				      struct ieee80211_txq_params *params)
388
389{
390	int ret;
391	trace_rdev_set_txq_params(&rdev->wiphy, dev, params);
392	ret = rdev->ops->set_txq_params(&rdev->wiphy, dev, params);
393	trace_rdev_return_int(&rdev->wiphy, ret);
394	return ret;
395}
396
397static inline int
398rdev_libertas_set_mesh_channel(struct cfg80211_registered_device *rdev,
399			       struct net_device *dev,
400			       struct ieee80211_channel *chan)
401{
402	int ret;
403	trace_rdev_libertas_set_mesh_channel(&rdev->wiphy, dev, chan);
404	ret = rdev->ops->libertas_set_mesh_channel(&rdev->wiphy, dev, chan);
405	trace_rdev_return_int(&rdev->wiphy, ret);
406	return ret;
407}
408
409static inline int
410rdev_set_monitor_channel(struct cfg80211_registered_device *rdev,
411			 struct cfg80211_chan_def *chandef)
412{
413	int ret;
414	trace_rdev_set_monitor_channel(&rdev->wiphy, chandef);
415	ret = rdev->ops->set_monitor_channel(&rdev->wiphy, chandef);
416	trace_rdev_return_int(&rdev->wiphy, ret);
417	return ret;
418}
419
420static inline int rdev_scan(struct cfg80211_registered_device *rdev,
421			    struct cfg80211_scan_request *request)
422{
423	int ret;
424	trace_rdev_scan(&rdev->wiphy, request);
425	ret = rdev->ops->scan(&rdev->wiphy, request);
426	trace_rdev_return_int(&rdev->wiphy, ret);
427	return ret;
428}
429
430static inline int rdev_auth(struct cfg80211_registered_device *rdev,
431			    struct net_device *dev,
432			    struct cfg80211_auth_request *req)
433{
434	int ret;
435	trace_rdev_auth(&rdev->wiphy, dev, req);
436	ret = rdev->ops->auth(&rdev->wiphy, dev, req);
437	trace_rdev_return_int(&rdev->wiphy, ret);
438	return ret;
439}
440
441static inline int rdev_assoc(struct cfg80211_registered_device *rdev,
442			     struct net_device *dev,
443			     struct cfg80211_assoc_request *req)
444{
445	int ret;
446	trace_rdev_assoc(&rdev->wiphy, dev, req);
447	ret = rdev->ops->assoc(&rdev->wiphy, dev, req);
448	trace_rdev_return_int(&rdev->wiphy, ret);
449	return ret;
450}
451
452static inline int rdev_deauth(struct cfg80211_registered_device *rdev,
453			      struct net_device *dev,
454			      struct cfg80211_deauth_request *req)
455{
456	int ret;
457	trace_rdev_deauth(&rdev->wiphy, dev, req);
458	ret = rdev->ops->deauth(&rdev->wiphy, dev, req);
459	trace_rdev_return_int(&rdev->wiphy, ret);
460	return ret;
461}
462
463static inline int rdev_disassoc(struct cfg80211_registered_device *rdev,
464				struct net_device *dev,
465				struct cfg80211_disassoc_request *req)
466{
467	int ret;
468	trace_rdev_disassoc(&rdev->wiphy, dev, req);
469	ret = rdev->ops->disassoc(&rdev->wiphy, dev, req);
470	trace_rdev_return_int(&rdev->wiphy, ret);
471	return ret;
472}
473
474static inline int rdev_connect(struct cfg80211_registered_device *rdev,
475			       struct net_device *dev,
476			       struct cfg80211_connect_params *sme)
477{
478	int ret;
479	trace_rdev_connect(&rdev->wiphy, dev, sme);
480	ret = rdev->ops->connect(&rdev->wiphy, dev, sme);
481	trace_rdev_return_int(&rdev->wiphy, ret);
482	return ret;
483}
484
485static inline int rdev_disconnect(struct cfg80211_registered_device *rdev,
486				  struct net_device *dev, u16 reason_code)
487{
488	int ret;
489	trace_rdev_disconnect(&rdev->wiphy, dev, reason_code);
490	ret = rdev->ops->disconnect(&rdev->wiphy, dev, reason_code);
491	trace_rdev_return_int(&rdev->wiphy, ret);
492	return ret;
493}
494
495static inline int rdev_join_ibss(struct cfg80211_registered_device *rdev,
496				 struct net_device *dev,
497				 struct cfg80211_ibss_params *params)
498{
499	int ret;
500	trace_rdev_join_ibss(&rdev->wiphy, dev, params);
501	ret = rdev->ops->join_ibss(&rdev->wiphy, dev, params);
502	trace_rdev_return_int(&rdev->wiphy, ret);
503	return ret;
504}
505
506static inline int rdev_leave_ibss(struct cfg80211_registered_device *rdev,
507				  struct net_device *dev)
508{
509	int ret;
510	trace_rdev_leave_ibss(&rdev->wiphy, dev);
511	ret = rdev->ops->leave_ibss(&rdev->wiphy, dev);
512	trace_rdev_return_int(&rdev->wiphy, ret);
513	return ret;
514}
515
516static inline int
517rdev_set_wiphy_params(struct cfg80211_registered_device *rdev, u32 changed)
518{
519	int ret;
520	trace_rdev_set_wiphy_params(&rdev->wiphy, changed);
521	ret = rdev->ops->set_wiphy_params(&rdev->wiphy, changed);
522	trace_rdev_return_int(&rdev->wiphy, ret);
523	return ret;
524}
525
526static inline int rdev_set_tx_power(struct cfg80211_registered_device *rdev,
527				    struct wireless_dev *wdev,
528				    enum nl80211_tx_power_setting type, int mbm)
529{
530	int ret;
531	trace_rdev_set_tx_power(&rdev->wiphy, wdev, type, mbm);
532	ret = rdev->ops->set_tx_power(&rdev->wiphy, wdev, type, mbm);
533	trace_rdev_return_int(&rdev->wiphy, ret);
534	return ret;
535}
536
537static inline int rdev_get_tx_power(struct cfg80211_registered_device *rdev,
538				    struct wireless_dev *wdev, int *dbm)
539{
540	int ret;
541	trace_rdev_get_tx_power(&rdev->wiphy, wdev);
542	ret = rdev->ops->get_tx_power(&rdev->wiphy, wdev, dbm);
543	trace_rdev_return_int_int(&rdev->wiphy, ret, *dbm);
544	return ret;
545}
546
547static inline int rdev_set_wds_peer(struct cfg80211_registered_device *rdev,
548				    struct net_device *dev, const u8 *addr)
549{
550	int ret;
551	trace_rdev_set_wds_peer(&rdev->wiphy, dev, addr);
552	ret = rdev->ops->set_wds_peer(&rdev->wiphy, dev, addr);
553	trace_rdev_return_int(&rdev->wiphy, ret);
554	return ret;
555}
556
557static inline void rdev_rfkill_poll(struct cfg80211_registered_device *rdev)
558{
559	trace_rdev_rfkill_poll(&rdev->wiphy);
560	rdev->ops->rfkill_poll(&rdev->wiphy);
561	trace_rdev_return_void(&rdev->wiphy);
562}
563
564
565#ifdef CONFIG_NL80211_TESTMODE
566static inline int rdev_testmode_cmd(struct cfg80211_registered_device *rdev,
567				    struct wireless_dev *wdev,
568				    void *data, int len)
569{
570	int ret;
571	trace_rdev_testmode_cmd(&rdev->wiphy, wdev);
572	ret = rdev->ops->testmode_cmd(&rdev->wiphy, wdev, data, len);
573	trace_rdev_return_int(&rdev->wiphy, ret);
574	return ret;
575}
576
577static inline int rdev_testmode_dump(struct cfg80211_registered_device *rdev,
578				     struct sk_buff *skb,
579				     struct netlink_callback *cb, void *data,
580				     int len)
581{
582	int ret;
583	trace_rdev_testmode_dump(&rdev->wiphy);
584	ret = rdev->ops->testmode_dump(&rdev->wiphy, skb, cb, data, len);
585	trace_rdev_return_int(&rdev->wiphy, ret);
586	return ret;
587}
588#endif
589
590static inline int
591rdev_set_bitrate_mask(struct cfg80211_registered_device *rdev,
592		      struct net_device *dev, const u8 *peer,
593		      const struct cfg80211_bitrate_mask *mask)
594{
595	int ret;
596	trace_rdev_set_bitrate_mask(&rdev->wiphy, dev, peer, mask);
597	ret = rdev->ops->set_bitrate_mask(&rdev->wiphy, dev, peer, mask);
598	trace_rdev_return_int(&rdev->wiphy, ret);
599	return ret;
600}
601
602static inline int rdev_dump_survey(struct cfg80211_registered_device *rdev,
603				   struct net_device *netdev, int idx,
604				   struct survey_info *info)
605{
606	int ret;
607	trace_rdev_dump_survey(&rdev->wiphy, netdev, idx);
608	ret = rdev->ops->dump_survey(&rdev->wiphy, netdev, idx, info);
609	if (ret < 0)
610		trace_rdev_return_int(&rdev->wiphy, ret);
611	else
612		trace_rdev_return_int_survey_info(&rdev->wiphy, ret, info);
613	return ret;
614}
615
616static inline int rdev_set_pmksa(struct cfg80211_registered_device *rdev,
617				 struct net_device *netdev,
618				 struct cfg80211_pmksa *pmksa)
619{
620	int ret;
621	trace_rdev_set_pmksa(&rdev->wiphy, netdev, pmksa);
622	ret = rdev->ops->set_pmksa(&rdev->wiphy, netdev, pmksa);
623	trace_rdev_return_int(&rdev->wiphy, ret);
624	return ret;
625}
626
627static inline int rdev_del_pmksa(struct cfg80211_registered_device *rdev,
628				 struct net_device *netdev,
629				 struct cfg80211_pmksa *pmksa)
630{
631	int ret;
632	trace_rdev_del_pmksa(&rdev->wiphy, netdev, pmksa);
633	ret = rdev->ops->del_pmksa(&rdev->wiphy, netdev, pmksa);
634	trace_rdev_return_int(&rdev->wiphy, ret);
635	return ret;
636}
637
638static inline int rdev_flush_pmksa(struct cfg80211_registered_device *rdev,
639				   struct net_device *netdev)
640{
641	int ret;
642	trace_rdev_flush_pmksa(&rdev->wiphy, netdev);
643	ret = rdev->ops->flush_pmksa(&rdev->wiphy, netdev);
644	trace_rdev_return_int(&rdev->wiphy, ret);
645	return ret;
646}
647
648static inline int
649rdev_remain_on_channel(struct cfg80211_registered_device *rdev,
650		       struct wireless_dev *wdev,
651		       struct ieee80211_channel *chan,
652		       unsigned int duration, u64 *cookie)
653{
654	int ret;
655	trace_rdev_remain_on_channel(&rdev->wiphy, wdev, chan, duration);
656	ret = rdev->ops->remain_on_channel(&rdev->wiphy, wdev, chan,
657					   duration, cookie);
658	trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie);
659	return ret;
660}
661
662static inline int
663rdev_cancel_remain_on_channel(struct cfg80211_registered_device *rdev,
664			      struct wireless_dev *wdev, u64 cookie)
665{
666	int ret;
667	trace_rdev_cancel_remain_on_channel(&rdev->wiphy, wdev, cookie);
668	ret = rdev->ops->cancel_remain_on_channel(&rdev->wiphy, wdev, cookie);
669	trace_rdev_return_int(&rdev->wiphy, ret);
670	return ret;
671}
672
673static inline int rdev_mgmt_tx(struct cfg80211_registered_device *rdev,
674			       struct wireless_dev *wdev,
675			       struct cfg80211_mgmt_tx_params *params,
676			       u64 *cookie)
677{
678	int ret;
679	trace_rdev_mgmt_tx(&rdev->wiphy, wdev, params);
680	ret = rdev->ops->mgmt_tx(&rdev->wiphy, wdev, params, cookie);
681	trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie);
682	return ret;
683}
684
685static inline int
686rdev_mgmt_tx_cancel_wait(struct cfg80211_registered_device *rdev,
687			 struct wireless_dev *wdev, u64 cookie)
688{
689	int ret;
690	trace_rdev_mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie);
691	ret = rdev->ops->mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie);
692	trace_rdev_return_int(&rdev->wiphy, ret);
693	return ret;
694}
695
696static inline int rdev_set_power_mgmt(struct cfg80211_registered_device *rdev,
697				      struct net_device *dev, bool enabled,
698				      int timeout)
699{
700	int ret;
701	trace_rdev_set_power_mgmt(&rdev->wiphy, dev, enabled, timeout);
702	ret = rdev->ops->set_power_mgmt(&rdev->wiphy, dev, enabled, timeout);
703	trace_rdev_return_int(&rdev->wiphy, ret);
704	return ret;
705}
706
707static inline int
708rdev_set_cqm_rssi_config(struct cfg80211_registered_device *rdev,
709			 struct net_device *dev, s32 rssi_thold, u32 rssi_hyst)
710{
711	int ret;
712	trace_rdev_set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold,
713				       rssi_hyst);
714	ret = rdev->ops->set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold,
715				       rssi_hyst);
716	trace_rdev_return_int(&rdev->wiphy, ret);
717	return ret;
718}
719
720static inline int
721rdev_set_cqm_txe_config(struct cfg80211_registered_device *rdev,
722			struct net_device *dev, u32 rate, u32 pkts, u32 intvl)
723{
724	int ret;
725	trace_rdev_set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts, intvl);
726	ret = rdev->ops->set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts,
727					     intvl);
728	trace_rdev_return_int(&rdev->wiphy, ret);
729	return ret;
730}
731
732static inline void
733rdev_mgmt_frame_register(struct cfg80211_registered_device *rdev,
734			 struct wireless_dev *wdev, u16 frame_type, bool reg)
735{
736	trace_rdev_mgmt_frame_register(&rdev->wiphy, wdev , frame_type, reg);
737	rdev->ops->mgmt_frame_register(&rdev->wiphy, wdev , frame_type, reg);
738	trace_rdev_return_void(&rdev->wiphy);
739}
740
741static inline int rdev_set_antenna(struct cfg80211_registered_device *rdev,
742				   u32 tx_ant, u32 rx_ant)
743{
744	int ret;
745	trace_rdev_set_antenna(&rdev->wiphy, tx_ant, rx_ant);
746	ret = rdev->ops->set_antenna(&rdev->wiphy, tx_ant, rx_ant);
747	trace_rdev_return_int(&rdev->wiphy, ret);
748	return ret;
749}
750
751static inline int rdev_get_antenna(struct cfg80211_registered_device *rdev,
752				   u32 *tx_ant, u32 *rx_ant)
753{
754	int ret;
755	trace_rdev_get_antenna(&rdev->wiphy);
756	ret = rdev->ops->get_antenna(&rdev->wiphy, tx_ant, rx_ant);
757	if (ret)
758		trace_rdev_return_int(&rdev->wiphy, ret);
759	else
760		trace_rdev_return_int_tx_rx(&rdev->wiphy, ret, *tx_ant,
761					    *rx_ant);
762	return ret;
763}
764
765static inline int
766rdev_sched_scan_start(struct cfg80211_registered_device *rdev,
767		      struct net_device *dev,
768		      struct cfg80211_sched_scan_request *request)
769{
770	int ret;
771	trace_rdev_sched_scan_start(&rdev->wiphy, dev, request);
772	ret = rdev->ops->sched_scan_start(&rdev->wiphy, dev, request);
773	trace_rdev_return_int(&rdev->wiphy, ret);
774	return ret;
775}
776
777static inline int rdev_sched_scan_stop(struct cfg80211_registered_device *rdev,
778				       struct net_device *dev)
779{
780	int ret;
781	trace_rdev_sched_scan_stop(&rdev->wiphy, dev);
782	ret = rdev->ops->sched_scan_stop(&rdev->wiphy, dev);
783	trace_rdev_return_int(&rdev->wiphy, ret);
784	return ret;
785}
786
787static inline int rdev_set_rekey_data(struct cfg80211_registered_device *rdev,
788				      struct net_device *dev,
789				      struct cfg80211_gtk_rekey_data *data)
790{
791	int ret;
792	trace_rdev_set_rekey_data(&rdev->wiphy, dev);
793	ret = rdev->ops->set_rekey_data(&rdev->wiphy, dev, data);
794	trace_rdev_return_int(&rdev->wiphy, ret);
795	return ret;
796}
797
798static inline int rdev_tdls_mgmt(struct cfg80211_registered_device *rdev,
799				 struct net_device *dev, u8 *peer,
800				 u8 action_code, u8 dialog_token,
801				 u16 status_code, u32 peer_capability,
802				 bool initiator, const u8 *buf, size_t len)
803{
804	int ret;
805	trace_rdev_tdls_mgmt(&rdev->wiphy, dev, peer, action_code,
806			     dialog_token, status_code, peer_capability,
807			     initiator, buf, len);
808	ret = rdev->ops->tdls_mgmt(&rdev->wiphy, dev, peer, action_code,
809				   dialog_token, status_code, peer_capability,
810				   initiator, buf, len);
811	trace_rdev_return_int(&rdev->wiphy, ret);
812	return ret;
813}
814
815static inline int rdev_tdls_oper(struct cfg80211_registered_device *rdev,
816				 struct net_device *dev, u8 *peer,
817				 enum nl80211_tdls_operation oper)
818{
819	int ret;
820	trace_rdev_tdls_oper(&rdev->wiphy, dev, peer, oper);
821	ret = rdev->ops->tdls_oper(&rdev->wiphy, dev, peer, oper);
822	trace_rdev_return_int(&rdev->wiphy, ret);
823	return ret;
824}
825
826static inline int rdev_probe_client(struct cfg80211_registered_device *rdev,
827				    struct net_device *dev, const u8 *peer,
828				    u64 *cookie)
829{
830	int ret;
831	trace_rdev_probe_client(&rdev->wiphy, dev, peer);
832	ret = rdev->ops->probe_client(&rdev->wiphy, dev, peer, cookie);
833	trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie);
834	return ret;
835}
836
837static inline int rdev_set_noack_map(struct cfg80211_registered_device *rdev,
838				     struct net_device *dev, u16 noack_map)
839{
840	int ret;
841	trace_rdev_set_noack_map(&rdev->wiphy, dev, noack_map);
842	ret = rdev->ops->set_noack_map(&rdev->wiphy, dev, noack_map);
843	trace_rdev_return_int(&rdev->wiphy, ret);
844	return ret;
845}
846
847static inline int
848rdev_get_channel(struct cfg80211_registered_device *rdev,
849		 struct wireless_dev *wdev,
850		 struct cfg80211_chan_def *chandef)
851{
852	int ret;
853
854	trace_rdev_get_channel(&rdev->wiphy, wdev);
855	ret = rdev->ops->get_channel(&rdev->wiphy, wdev, chandef);
856	trace_rdev_return_chandef(&rdev->wiphy, ret, chandef);
857
858	return ret;
859}
860
861static inline int rdev_start_p2p_device(struct cfg80211_registered_device *rdev,
862					struct wireless_dev *wdev)
863{
864	int ret;
865
866	trace_rdev_start_p2p_device(&rdev->wiphy, wdev);
867	ret = rdev->ops->start_p2p_device(&rdev->wiphy, wdev);
868	trace_rdev_return_int(&rdev->wiphy, ret);
869	return ret;
870}
871
872static inline void rdev_stop_p2p_device(struct cfg80211_registered_device *rdev,
873					struct wireless_dev *wdev)
874{
875	trace_rdev_stop_p2p_device(&rdev->wiphy, wdev);
876	rdev->ops->stop_p2p_device(&rdev->wiphy, wdev);
877	trace_rdev_return_void(&rdev->wiphy);
878}
879
880static inline int rdev_set_mac_acl(struct cfg80211_registered_device *rdev,
881				   struct net_device *dev,
882				   struct cfg80211_acl_data *params)
883{
884	int ret;
885
886	trace_rdev_set_mac_acl(&rdev->wiphy, dev, params);
887	ret = rdev->ops->set_mac_acl(&rdev->wiphy, dev, params);
888	trace_rdev_return_int(&rdev->wiphy, ret);
889	return ret;
890}
891
892static inline int rdev_update_ft_ies(struct cfg80211_registered_device *rdev,
893				     struct net_device *dev,
894				     struct cfg80211_update_ft_ies_params *ftie)
895{
896	int ret;
897
898	trace_rdev_update_ft_ies(&rdev->wiphy, dev, ftie);
899	ret = rdev->ops->update_ft_ies(&rdev->wiphy, dev, ftie);
900	trace_rdev_return_int(&rdev->wiphy, ret);
901	return ret;
902}
903
904static inline int rdev_crit_proto_start(struct cfg80211_registered_device *rdev,
905					struct wireless_dev *wdev,
906					enum nl80211_crit_proto_id protocol,
907					u16 duration)
908{
909	int ret;
910
911	trace_rdev_crit_proto_start(&rdev->wiphy, wdev, protocol, duration);
912	ret = rdev->ops->crit_proto_start(&rdev->wiphy, wdev,
913					  protocol, duration);
914	trace_rdev_return_int(&rdev->wiphy, ret);
915	return ret;
916}
917
918static inline void rdev_crit_proto_stop(struct cfg80211_registered_device *rdev,
919				       struct wireless_dev *wdev)
920{
921	trace_rdev_crit_proto_stop(&rdev->wiphy, wdev);
922	rdev->ops->crit_proto_stop(&rdev->wiphy, wdev);
923	trace_rdev_return_void(&rdev->wiphy);
924}
925
926static inline int rdev_channel_switch(struct cfg80211_registered_device *rdev,
927				      struct net_device *dev,
928				      struct cfg80211_csa_settings *params)
929{
930	int ret;
931
932	trace_rdev_channel_switch(&rdev->wiphy, dev, params);
933	ret = rdev->ops->channel_switch(&rdev->wiphy, dev, params);
934	trace_rdev_return_int(&rdev->wiphy, ret);
935	return ret;
936}
937
938static inline int rdev_set_qos_map(struct cfg80211_registered_device *rdev,
939				   struct net_device *dev,
940				   struct cfg80211_qos_map *qos_map)
941{
942	int ret = -EOPNOTSUPP;
943
944	if (rdev->ops->set_qos_map) {
945		trace_rdev_set_qos_map(&rdev->wiphy, dev, qos_map);
946		ret = rdev->ops->set_qos_map(&rdev->wiphy, dev, qos_map);
947		trace_rdev_return_int(&rdev->wiphy, ret);
948	}
949
950	return ret;
951}
952
953static inline int
954rdev_set_ap_chanwidth(struct cfg80211_registered_device *rdev,
955		      struct net_device *dev, struct cfg80211_chan_def *chandef)
956{
957	int ret;
958
959	trace_rdev_set_ap_chanwidth(&rdev->wiphy, dev, chandef);
960	ret = rdev->ops->set_ap_chanwidth(&rdev->wiphy, dev, chandef);
961	trace_rdev_return_int(&rdev->wiphy, ret);
962
963	return ret;
964}
965
966static inline int
967rdev_add_tx_ts(struct cfg80211_registered_device *rdev,
968	       struct net_device *dev, u8 tsid, const u8 *peer,
969	       u8 user_prio, u16 admitted_time)
970{
971	int ret = -EOPNOTSUPP;
972
973	trace_rdev_add_tx_ts(&rdev->wiphy, dev, tsid, peer,
974			     user_prio, admitted_time);
975	if (rdev->ops->add_tx_ts)
976		ret = rdev->ops->add_tx_ts(&rdev->wiphy, dev, tsid, peer,
977					   user_prio, admitted_time);
978	trace_rdev_return_int(&rdev->wiphy, ret);
979
980	return ret;
981}
982
983static inline int
984rdev_del_tx_ts(struct cfg80211_registered_device *rdev,
985	       struct net_device *dev, u8 tsid, const u8 *peer)
986{
987	int ret = -EOPNOTSUPP;
988
989	trace_rdev_del_tx_ts(&rdev->wiphy, dev, tsid, peer);
990	if (rdev->ops->del_tx_ts)
991		ret = rdev->ops->del_tx_ts(&rdev->wiphy, dev, tsid, peer);
992	trace_rdev_return_int(&rdev->wiphy, ret);
993
994	return ret;
995}
996
997static inline int
998rdev_tdls_channel_switch(struct cfg80211_registered_device *rdev,
999			 struct net_device *dev, const u8 *addr,
1000			 u8 oper_class, struct cfg80211_chan_def *chandef)
1001{
1002	int ret;
1003
1004	trace_rdev_tdls_channel_switch(&rdev->wiphy, dev, addr, oper_class,
1005				       chandef);
1006	ret = rdev->ops->tdls_channel_switch(&rdev->wiphy, dev, addr,
1007					     oper_class, chandef);
1008	trace_rdev_return_int(&rdev->wiphy, ret);
1009	return ret;
1010}
1011
1012static inline void
1013rdev_tdls_cancel_channel_switch(struct cfg80211_registered_device *rdev,
1014				struct net_device *dev, const u8 *addr)
1015{
1016	trace_rdev_tdls_cancel_channel_switch(&rdev->wiphy, dev, addr);
1017	rdev->ops->tdls_cancel_channel_switch(&rdev->wiphy, dev, addr);
1018	trace_rdev_return_void(&rdev->wiphy);
1019}
1020
1021#endif /* __CFG80211_RDEV_OPS */
1022