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