linux/net/wireless/rdev-ops.h
<<
>>
Prefs
   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 void rdev_abort_scan(struct cfg80211_registered_device *rdev,
 431                                   struct wireless_dev *wdev)
 432{
 433        trace_rdev_abort_scan(&rdev->wiphy, wdev);
 434        rdev->ops->abort_scan(&rdev->wiphy, wdev);
 435        trace_rdev_return_void(&rdev->wiphy);
 436}
 437
 438static inline int rdev_auth(struct cfg80211_registered_device *rdev,
 439                            struct net_device *dev,
 440                            struct cfg80211_auth_request *req)
 441{
 442        int ret;
 443        trace_rdev_auth(&rdev->wiphy, dev, req);
 444        ret = rdev->ops->auth(&rdev->wiphy, dev, req);
 445        trace_rdev_return_int(&rdev->wiphy, ret);
 446        return ret;
 447}
 448
 449static inline int rdev_assoc(struct cfg80211_registered_device *rdev,
 450                             struct net_device *dev,
 451                             struct cfg80211_assoc_request *req)
 452{
 453        int ret;
 454        trace_rdev_assoc(&rdev->wiphy, dev, req);
 455        ret = rdev->ops->assoc(&rdev->wiphy, dev, req);
 456        trace_rdev_return_int(&rdev->wiphy, ret);
 457        return ret;
 458}
 459
 460static inline int rdev_deauth(struct cfg80211_registered_device *rdev,
 461                              struct net_device *dev,
 462                              struct cfg80211_deauth_request *req)
 463{
 464        int ret;
 465        trace_rdev_deauth(&rdev->wiphy, dev, req);
 466        ret = rdev->ops->deauth(&rdev->wiphy, dev, req);
 467        trace_rdev_return_int(&rdev->wiphy, ret);
 468        return ret;
 469}
 470
 471static inline int rdev_disassoc(struct cfg80211_registered_device *rdev,
 472                                struct net_device *dev,
 473                                struct cfg80211_disassoc_request *req)
 474{
 475        int ret;
 476        trace_rdev_disassoc(&rdev->wiphy, dev, req);
 477        ret = rdev->ops->disassoc(&rdev->wiphy, dev, req);
 478        trace_rdev_return_int(&rdev->wiphy, ret);
 479        return ret;
 480}
 481
 482static inline int rdev_connect(struct cfg80211_registered_device *rdev,
 483                               struct net_device *dev,
 484                               struct cfg80211_connect_params *sme)
 485{
 486        int ret;
 487        trace_rdev_connect(&rdev->wiphy, dev, sme);
 488        ret = rdev->ops->connect(&rdev->wiphy, dev, sme);
 489        trace_rdev_return_int(&rdev->wiphy, ret);
 490        return ret;
 491}
 492
 493static inline int rdev_disconnect(struct cfg80211_registered_device *rdev,
 494                                  struct net_device *dev, u16 reason_code)
 495{
 496        int ret;
 497        trace_rdev_disconnect(&rdev->wiphy, dev, reason_code);
 498        ret = rdev->ops->disconnect(&rdev->wiphy, dev, reason_code);
 499        trace_rdev_return_int(&rdev->wiphy, ret);
 500        return ret;
 501}
 502
 503static inline int rdev_join_ibss(struct cfg80211_registered_device *rdev,
 504                                 struct net_device *dev,
 505                                 struct cfg80211_ibss_params *params)
 506{
 507        int ret;
 508        trace_rdev_join_ibss(&rdev->wiphy, dev, params);
 509        ret = rdev->ops->join_ibss(&rdev->wiphy, dev, params);
 510        trace_rdev_return_int(&rdev->wiphy, ret);
 511        return ret;
 512}
 513
 514static inline int rdev_leave_ibss(struct cfg80211_registered_device *rdev,
 515                                  struct net_device *dev)
 516{
 517        int ret;
 518        trace_rdev_leave_ibss(&rdev->wiphy, dev);
 519        ret = rdev->ops->leave_ibss(&rdev->wiphy, dev);
 520        trace_rdev_return_int(&rdev->wiphy, ret);
 521        return ret;
 522}
 523
 524static inline int
 525rdev_set_wiphy_params(struct cfg80211_registered_device *rdev, u32 changed)
 526{
 527        int ret;
 528        trace_rdev_set_wiphy_params(&rdev->wiphy, changed);
 529        ret = rdev->ops->set_wiphy_params(&rdev->wiphy, changed);
 530        trace_rdev_return_int(&rdev->wiphy, ret);
 531        return ret;
 532}
 533
 534static inline int rdev_set_tx_power(struct cfg80211_registered_device *rdev,
 535                                    struct wireless_dev *wdev,
 536                                    enum nl80211_tx_power_setting type, int mbm)
 537{
 538        int ret;
 539        trace_rdev_set_tx_power(&rdev->wiphy, wdev, type, mbm);
 540        ret = rdev->ops->set_tx_power(&rdev->wiphy, wdev, type, mbm);
 541        trace_rdev_return_int(&rdev->wiphy, ret);
 542        return ret;
 543}
 544
 545static inline int rdev_get_tx_power(struct cfg80211_registered_device *rdev,
 546                                    struct wireless_dev *wdev, int *dbm)
 547{
 548        int ret;
 549        trace_rdev_get_tx_power(&rdev->wiphy, wdev);
 550        ret = rdev->ops->get_tx_power(&rdev->wiphy, wdev, dbm);
 551        trace_rdev_return_int_int(&rdev->wiphy, ret, *dbm);
 552        return ret;
 553}
 554
 555static inline int rdev_set_wds_peer(struct cfg80211_registered_device *rdev,
 556                                    struct net_device *dev, const u8 *addr)
 557{
 558        int ret;
 559        trace_rdev_set_wds_peer(&rdev->wiphy, dev, addr);
 560        ret = rdev->ops->set_wds_peer(&rdev->wiphy, dev, addr);
 561        trace_rdev_return_int(&rdev->wiphy, ret);
 562        return ret;
 563}
 564
 565static inline void rdev_rfkill_poll(struct cfg80211_registered_device *rdev)
 566{
 567        trace_rdev_rfkill_poll(&rdev->wiphy);
 568        rdev->ops->rfkill_poll(&rdev->wiphy);
 569        trace_rdev_return_void(&rdev->wiphy);
 570}
 571
 572
 573#ifdef CONFIG_NL80211_TESTMODE
 574static inline int rdev_testmode_cmd(struct cfg80211_registered_device *rdev,
 575                                    struct wireless_dev *wdev,
 576                                    void *data, int len)
 577{
 578        int ret;
 579        trace_rdev_testmode_cmd(&rdev->wiphy, wdev);
 580        ret = rdev->ops->testmode_cmd(&rdev->wiphy, wdev, data, len);
 581        trace_rdev_return_int(&rdev->wiphy, ret);
 582        return ret;
 583}
 584
 585static inline int rdev_testmode_dump(struct cfg80211_registered_device *rdev,
 586                                     struct sk_buff *skb,
 587                                     struct netlink_callback *cb, void *data,
 588                                     int len)
 589{
 590        int ret;
 591        trace_rdev_testmode_dump(&rdev->wiphy);
 592        ret = rdev->ops->testmode_dump(&rdev->wiphy, skb, cb, data, len);
 593        trace_rdev_return_int(&rdev->wiphy, ret);
 594        return ret;
 595}
 596#endif
 597
 598static inline int
 599rdev_set_bitrate_mask(struct cfg80211_registered_device *rdev,
 600                      struct net_device *dev, const u8 *peer,
 601                      const struct cfg80211_bitrate_mask *mask)
 602{
 603        int ret;
 604        trace_rdev_set_bitrate_mask(&rdev->wiphy, dev, peer, mask);
 605        ret = rdev->ops->set_bitrate_mask(&rdev->wiphy, dev, peer, mask);
 606        trace_rdev_return_int(&rdev->wiphy, ret);
 607        return ret;
 608}
 609
 610static inline int rdev_dump_survey(struct cfg80211_registered_device *rdev,
 611                                   struct net_device *netdev, int idx,
 612                                   struct survey_info *info)
 613{
 614        int ret;
 615        trace_rdev_dump_survey(&rdev->wiphy, netdev, idx);
 616        ret = rdev->ops->dump_survey(&rdev->wiphy, netdev, idx, info);
 617        if (ret < 0)
 618                trace_rdev_return_int(&rdev->wiphy, ret);
 619        else
 620                trace_rdev_return_int_survey_info(&rdev->wiphy, ret, info);
 621        return ret;
 622}
 623
 624static inline int rdev_set_pmksa(struct cfg80211_registered_device *rdev,
 625                                 struct net_device *netdev,
 626                                 struct cfg80211_pmksa *pmksa)
 627{
 628        int ret;
 629        trace_rdev_set_pmksa(&rdev->wiphy, netdev, pmksa);
 630        ret = rdev->ops->set_pmksa(&rdev->wiphy, netdev, pmksa);
 631        trace_rdev_return_int(&rdev->wiphy, ret);
 632        return ret;
 633}
 634
 635static inline int rdev_del_pmksa(struct cfg80211_registered_device *rdev,
 636                                 struct net_device *netdev,
 637                                 struct cfg80211_pmksa *pmksa)
 638{
 639        int ret;
 640        trace_rdev_del_pmksa(&rdev->wiphy, netdev, pmksa);
 641        ret = rdev->ops->del_pmksa(&rdev->wiphy, netdev, pmksa);
 642        trace_rdev_return_int(&rdev->wiphy, ret);
 643        return ret;
 644}
 645
 646static inline int rdev_flush_pmksa(struct cfg80211_registered_device *rdev,
 647                                   struct net_device *netdev)
 648{
 649        int ret;
 650        trace_rdev_flush_pmksa(&rdev->wiphy, netdev);
 651        ret = rdev->ops->flush_pmksa(&rdev->wiphy, netdev);
 652        trace_rdev_return_int(&rdev->wiphy, ret);
 653        return ret;
 654}
 655
 656static inline int
 657rdev_remain_on_channel(struct cfg80211_registered_device *rdev,
 658                       struct wireless_dev *wdev,
 659                       struct ieee80211_channel *chan,
 660                       unsigned int duration, u64 *cookie)
 661{
 662        int ret;
 663        trace_rdev_remain_on_channel(&rdev->wiphy, wdev, chan, duration);
 664        ret = rdev->ops->remain_on_channel(&rdev->wiphy, wdev, chan,
 665                                           duration, cookie);
 666        trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie);
 667        return ret;
 668}
 669
 670static inline int
 671rdev_cancel_remain_on_channel(struct cfg80211_registered_device *rdev,
 672                              struct wireless_dev *wdev, u64 cookie)
 673{
 674        int ret;
 675        trace_rdev_cancel_remain_on_channel(&rdev->wiphy, wdev, cookie);
 676        ret = rdev->ops->cancel_remain_on_channel(&rdev->wiphy, wdev, cookie);
 677        trace_rdev_return_int(&rdev->wiphy, ret);
 678        return ret;
 679}
 680
 681static inline int rdev_mgmt_tx(struct cfg80211_registered_device *rdev,
 682                               struct wireless_dev *wdev,
 683                               struct cfg80211_mgmt_tx_params *params,
 684                               u64 *cookie)
 685{
 686        int ret;
 687        trace_rdev_mgmt_tx(&rdev->wiphy, wdev, params);
 688        ret = rdev->ops->mgmt_tx(&rdev->wiphy, wdev, params, cookie);
 689        trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie);
 690        return ret;
 691}
 692
 693static inline int
 694rdev_mgmt_tx_cancel_wait(struct cfg80211_registered_device *rdev,
 695                         struct wireless_dev *wdev, u64 cookie)
 696{
 697        int ret;
 698        trace_rdev_mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie);
 699        ret = rdev->ops->mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie);
 700        trace_rdev_return_int(&rdev->wiphy, ret);
 701        return ret;
 702}
 703
 704static inline int rdev_set_power_mgmt(struct cfg80211_registered_device *rdev,
 705                                      struct net_device *dev, bool enabled,
 706                                      int timeout)
 707{
 708        int ret;
 709        trace_rdev_set_power_mgmt(&rdev->wiphy, dev, enabled, timeout);
 710        ret = rdev->ops->set_power_mgmt(&rdev->wiphy, dev, enabled, timeout);
 711        trace_rdev_return_int(&rdev->wiphy, ret);
 712        return ret;
 713}
 714
 715static inline int
 716rdev_set_cqm_rssi_config(struct cfg80211_registered_device *rdev,
 717                         struct net_device *dev, s32 rssi_thold, u32 rssi_hyst)
 718{
 719        int ret;
 720        trace_rdev_set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold,
 721                                       rssi_hyst);
 722        ret = rdev->ops->set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold,
 723                                       rssi_hyst);
 724        trace_rdev_return_int(&rdev->wiphy, ret);
 725        return ret;
 726}
 727
 728static inline int
 729rdev_set_cqm_txe_config(struct cfg80211_registered_device *rdev,
 730                        struct net_device *dev, u32 rate, u32 pkts, u32 intvl)
 731{
 732        int ret;
 733        trace_rdev_set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts, intvl);
 734        ret = rdev->ops->set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts,
 735                                             intvl);
 736        trace_rdev_return_int(&rdev->wiphy, ret);
 737        return ret;
 738}
 739
 740static inline void
 741rdev_mgmt_frame_register(struct cfg80211_registered_device *rdev,
 742                         struct wireless_dev *wdev, u16 frame_type, bool reg)
 743{
 744        might_sleep();
 745
 746        trace_rdev_mgmt_frame_register(&rdev->wiphy, wdev , frame_type, reg);
 747        rdev->ops->mgmt_frame_register(&rdev->wiphy, wdev , frame_type, reg);
 748        trace_rdev_return_void(&rdev->wiphy);
 749}
 750
 751static inline int rdev_set_antenna(struct cfg80211_registered_device *rdev,
 752                                   u32 tx_ant, u32 rx_ant)
 753{
 754        int ret;
 755        trace_rdev_set_antenna(&rdev->wiphy, tx_ant, rx_ant);
 756        ret = rdev->ops->set_antenna(&rdev->wiphy, tx_ant, rx_ant);
 757        trace_rdev_return_int(&rdev->wiphy, ret);
 758        return ret;
 759}
 760
 761static inline int rdev_get_antenna(struct cfg80211_registered_device *rdev,
 762                                   u32 *tx_ant, u32 *rx_ant)
 763{
 764        int ret;
 765        trace_rdev_get_antenna(&rdev->wiphy);
 766        ret = rdev->ops->get_antenna(&rdev->wiphy, tx_ant, rx_ant);
 767        if (ret)
 768                trace_rdev_return_int(&rdev->wiphy, ret);
 769        else
 770                trace_rdev_return_int_tx_rx(&rdev->wiphy, ret, *tx_ant,
 771                                            *rx_ant);
 772        return ret;
 773}
 774
 775static inline int
 776rdev_sched_scan_start(struct cfg80211_registered_device *rdev,
 777                      struct net_device *dev,
 778                      struct cfg80211_sched_scan_request *request)
 779{
 780        int ret;
 781        trace_rdev_sched_scan_start(&rdev->wiphy, dev, request);
 782        ret = rdev->ops->sched_scan_start(&rdev->wiphy, dev, request);
 783        trace_rdev_return_int(&rdev->wiphy, ret);
 784        return ret;
 785}
 786
 787static inline int rdev_sched_scan_stop(struct cfg80211_registered_device *rdev,
 788                                       struct net_device *dev)
 789{
 790        int ret;
 791        trace_rdev_sched_scan_stop(&rdev->wiphy, dev);
 792        ret = rdev->ops->sched_scan_stop(&rdev->wiphy, dev);
 793        trace_rdev_return_int(&rdev->wiphy, ret);
 794        return ret;
 795}
 796
 797static inline int rdev_set_rekey_data(struct cfg80211_registered_device *rdev,
 798                                      struct net_device *dev,
 799                                      struct cfg80211_gtk_rekey_data *data)
 800{
 801        int ret;
 802        trace_rdev_set_rekey_data(&rdev->wiphy, dev);
 803        ret = rdev->ops->set_rekey_data(&rdev->wiphy, dev, data);
 804        trace_rdev_return_int(&rdev->wiphy, ret);
 805        return ret;
 806}
 807
 808static inline int rdev_tdls_mgmt(struct cfg80211_registered_device *rdev,
 809                                 struct net_device *dev, u8 *peer,
 810                                 u8 action_code, u8 dialog_token,
 811                                 u16 status_code, u32 peer_capability,
 812                                 bool initiator, const u8 *buf, size_t len)
 813{
 814        int ret;
 815        trace_rdev_tdls_mgmt(&rdev->wiphy, dev, peer, action_code,
 816                             dialog_token, status_code, peer_capability,
 817                             initiator, buf, len);
 818        ret = rdev->ops->tdls_mgmt(&rdev->wiphy, dev, peer, action_code,
 819                                   dialog_token, status_code, peer_capability,
 820                                   initiator, buf, len);
 821        trace_rdev_return_int(&rdev->wiphy, ret);
 822        return ret;
 823}
 824
 825static inline int rdev_tdls_oper(struct cfg80211_registered_device *rdev,
 826                                 struct net_device *dev, u8 *peer,
 827                                 enum nl80211_tdls_operation oper)
 828{
 829        int ret;
 830        trace_rdev_tdls_oper(&rdev->wiphy, dev, peer, oper);
 831        ret = rdev->ops->tdls_oper(&rdev->wiphy, dev, peer, oper);
 832        trace_rdev_return_int(&rdev->wiphy, ret);
 833        return ret;
 834}
 835
 836static inline int rdev_probe_client(struct cfg80211_registered_device *rdev,
 837                                    struct net_device *dev, const u8 *peer,
 838                                    u64 *cookie)
 839{
 840        int ret;
 841        trace_rdev_probe_client(&rdev->wiphy, dev, peer);
 842        ret = rdev->ops->probe_client(&rdev->wiphy, dev, peer, cookie);
 843        trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie);
 844        return ret;
 845}
 846
 847static inline int rdev_set_noack_map(struct cfg80211_registered_device *rdev,
 848                                     struct net_device *dev, u16 noack_map)
 849{
 850        int ret;
 851        trace_rdev_set_noack_map(&rdev->wiphy, dev, noack_map);
 852        ret = rdev->ops->set_noack_map(&rdev->wiphy, dev, noack_map);
 853        trace_rdev_return_int(&rdev->wiphy, ret);
 854        return ret;
 855}
 856
 857static inline int
 858rdev_get_channel(struct cfg80211_registered_device *rdev,
 859                 struct wireless_dev *wdev,
 860                 struct cfg80211_chan_def *chandef)
 861{
 862        int ret;
 863
 864        trace_rdev_get_channel(&rdev->wiphy, wdev);
 865        ret = rdev->ops->get_channel(&rdev->wiphy, wdev, chandef);
 866        trace_rdev_return_chandef(&rdev->wiphy, ret, chandef);
 867
 868        return ret;
 869}
 870
 871static inline int rdev_start_p2p_device(struct cfg80211_registered_device *rdev,
 872                                        struct wireless_dev *wdev)
 873{
 874        int ret;
 875
 876        trace_rdev_start_p2p_device(&rdev->wiphy, wdev);
 877        ret = rdev->ops->start_p2p_device(&rdev->wiphy, wdev);
 878        trace_rdev_return_int(&rdev->wiphy, ret);
 879        return ret;
 880}
 881
 882static inline void rdev_stop_p2p_device(struct cfg80211_registered_device *rdev,
 883                                        struct wireless_dev *wdev)
 884{
 885        trace_rdev_stop_p2p_device(&rdev->wiphy, wdev);
 886        rdev->ops->stop_p2p_device(&rdev->wiphy, wdev);
 887        trace_rdev_return_void(&rdev->wiphy);
 888}
 889
 890static inline int rdev_start_nan(struct cfg80211_registered_device *rdev,
 891                                 struct wireless_dev *wdev,
 892                                 struct cfg80211_nan_conf *conf)
 893{
 894        int ret;
 895
 896        trace_rdev_start_nan(&rdev->wiphy, wdev, conf);
 897        ret = rdev->ops->start_nan(&rdev->wiphy, wdev, conf);
 898        trace_rdev_return_int(&rdev->wiphy, ret);
 899        return ret;
 900}
 901
 902static inline void rdev_stop_nan(struct cfg80211_registered_device *rdev,
 903                                 struct wireless_dev *wdev)
 904{
 905        trace_rdev_stop_nan(&rdev->wiphy, wdev);
 906        rdev->ops->stop_nan(&rdev->wiphy, wdev);
 907        trace_rdev_return_void(&rdev->wiphy);
 908}
 909
 910static inline int
 911rdev_add_nan_func(struct cfg80211_registered_device *rdev,
 912                  struct wireless_dev *wdev,
 913                  struct cfg80211_nan_func *nan_func)
 914{
 915        int ret;
 916
 917        trace_rdev_add_nan_func(&rdev->wiphy, wdev, nan_func);
 918        ret = rdev->ops->add_nan_func(&rdev->wiphy, wdev, nan_func);
 919        trace_rdev_return_int(&rdev->wiphy, ret);
 920        return ret;
 921}
 922
 923static inline void rdev_del_nan_func(struct cfg80211_registered_device *rdev,
 924                                    struct wireless_dev *wdev, u64 cookie)
 925{
 926        trace_rdev_del_nan_func(&rdev->wiphy, wdev, cookie);
 927        rdev->ops->del_nan_func(&rdev->wiphy, wdev, cookie);
 928        trace_rdev_return_void(&rdev->wiphy);
 929}
 930
 931static inline int
 932rdev_nan_change_conf(struct cfg80211_registered_device *rdev,
 933                     struct wireless_dev *wdev,
 934                     struct cfg80211_nan_conf *conf, u32 changes)
 935{
 936        int ret;
 937
 938        trace_rdev_nan_change_conf(&rdev->wiphy, wdev, conf, changes);
 939        if (rdev->ops->nan_change_conf)
 940                ret = rdev->ops->nan_change_conf(&rdev->wiphy, wdev, conf,
 941                                                 changes);
 942        else
 943                ret = -ENOTSUPP;
 944        trace_rdev_return_int(&rdev->wiphy, ret);
 945        return ret;
 946}
 947
 948static inline int rdev_set_mac_acl(struct cfg80211_registered_device *rdev,
 949                                   struct net_device *dev,
 950                                   struct cfg80211_acl_data *params)
 951{
 952        int ret;
 953
 954        trace_rdev_set_mac_acl(&rdev->wiphy, dev, params);
 955        ret = rdev->ops->set_mac_acl(&rdev->wiphy, dev, params);
 956        trace_rdev_return_int(&rdev->wiphy, ret);
 957        return ret;
 958}
 959
 960static inline int rdev_update_ft_ies(struct cfg80211_registered_device *rdev,
 961                                     struct net_device *dev,
 962                                     struct cfg80211_update_ft_ies_params *ftie)
 963{
 964        int ret;
 965
 966        trace_rdev_update_ft_ies(&rdev->wiphy, dev, ftie);
 967        ret = rdev->ops->update_ft_ies(&rdev->wiphy, dev, ftie);
 968        trace_rdev_return_int(&rdev->wiphy, ret);
 969        return ret;
 970}
 971
 972static inline int rdev_crit_proto_start(struct cfg80211_registered_device *rdev,
 973                                        struct wireless_dev *wdev,
 974                                        enum nl80211_crit_proto_id protocol,
 975                                        u16 duration)
 976{
 977        int ret;
 978
 979        trace_rdev_crit_proto_start(&rdev->wiphy, wdev, protocol, duration);
 980        ret = rdev->ops->crit_proto_start(&rdev->wiphy, wdev,
 981                                          protocol, duration);
 982        trace_rdev_return_int(&rdev->wiphy, ret);
 983        return ret;
 984}
 985
 986static inline void rdev_crit_proto_stop(struct cfg80211_registered_device *rdev,
 987                                       struct wireless_dev *wdev)
 988{
 989        trace_rdev_crit_proto_stop(&rdev->wiphy, wdev);
 990        rdev->ops->crit_proto_stop(&rdev->wiphy, wdev);
 991        trace_rdev_return_void(&rdev->wiphy);
 992}
 993
 994static inline int rdev_channel_switch(struct cfg80211_registered_device *rdev,
 995                                      struct net_device *dev,
 996                                      struct cfg80211_csa_settings *params)
 997{
 998        int ret;
 999
1000        trace_rdev_channel_switch(&rdev->wiphy, dev, params);
1001        ret = rdev->ops->channel_switch(&rdev->wiphy, dev, params);
1002        trace_rdev_return_int(&rdev->wiphy, ret);
1003        return ret;
1004}
1005
1006static inline int rdev_set_qos_map(struct cfg80211_registered_device *rdev,
1007                                   struct net_device *dev,
1008                                   struct cfg80211_qos_map *qos_map)
1009{
1010        int ret = -EOPNOTSUPP;
1011
1012        if (rdev->ops->set_qos_map) {
1013                trace_rdev_set_qos_map(&rdev->wiphy, dev, qos_map);
1014                ret = rdev->ops->set_qos_map(&rdev->wiphy, dev, qos_map);
1015                trace_rdev_return_int(&rdev->wiphy, ret);
1016        }
1017
1018        return ret;
1019}
1020
1021static inline int
1022rdev_set_ap_chanwidth(struct cfg80211_registered_device *rdev,
1023                      struct net_device *dev, struct cfg80211_chan_def *chandef)
1024{
1025        int ret;
1026
1027        trace_rdev_set_ap_chanwidth(&rdev->wiphy, dev, chandef);
1028        ret = rdev->ops->set_ap_chanwidth(&rdev->wiphy, dev, chandef);
1029        trace_rdev_return_int(&rdev->wiphy, ret);
1030
1031        return ret;
1032}
1033
1034static inline int
1035rdev_add_tx_ts(struct cfg80211_registered_device *rdev,
1036               struct net_device *dev, u8 tsid, const u8 *peer,
1037               u8 user_prio, u16 admitted_time)
1038{
1039        int ret = -EOPNOTSUPP;
1040
1041        trace_rdev_add_tx_ts(&rdev->wiphy, dev, tsid, peer,
1042                             user_prio, admitted_time);
1043        if (rdev->ops->add_tx_ts)
1044                ret = rdev->ops->add_tx_ts(&rdev->wiphy, dev, tsid, peer,
1045                                           user_prio, admitted_time);
1046        trace_rdev_return_int(&rdev->wiphy, ret);
1047
1048        return ret;
1049}
1050
1051static inline int
1052rdev_del_tx_ts(struct cfg80211_registered_device *rdev,
1053               struct net_device *dev, u8 tsid, const u8 *peer)
1054{
1055        int ret = -EOPNOTSUPP;
1056
1057        trace_rdev_del_tx_ts(&rdev->wiphy, dev, tsid, peer);
1058        if (rdev->ops->del_tx_ts)
1059                ret = rdev->ops->del_tx_ts(&rdev->wiphy, dev, tsid, peer);
1060        trace_rdev_return_int(&rdev->wiphy, ret);
1061
1062        return ret;
1063}
1064
1065static inline int
1066rdev_tdls_channel_switch(struct cfg80211_registered_device *rdev,
1067                         struct net_device *dev, const u8 *addr,
1068                         u8 oper_class, struct cfg80211_chan_def *chandef)
1069{
1070        int ret;
1071
1072        trace_rdev_tdls_channel_switch(&rdev->wiphy, dev, addr, oper_class,
1073                                       chandef);
1074        ret = rdev->ops->tdls_channel_switch(&rdev->wiphy, dev, addr,
1075                                             oper_class, chandef);
1076        trace_rdev_return_int(&rdev->wiphy, ret);
1077        return ret;
1078}
1079
1080static inline void
1081rdev_tdls_cancel_channel_switch(struct cfg80211_registered_device *rdev,
1082                                struct net_device *dev, const u8 *addr)
1083{
1084        trace_rdev_tdls_cancel_channel_switch(&rdev->wiphy, dev, addr);
1085        rdev->ops->tdls_cancel_channel_switch(&rdev->wiphy, dev, addr);
1086        trace_rdev_return_void(&rdev->wiphy);
1087}
1088
1089static inline int
1090rdev_start_radar_detection(struct cfg80211_registered_device *rdev,
1091                           struct net_device *dev,
1092                           struct cfg80211_chan_def *chandef,
1093                           u32 cac_time_ms)
1094{
1095        int ret = -ENOTSUPP;
1096
1097        trace_rdev_start_radar_detection(&rdev->wiphy, dev, chandef,
1098                                         cac_time_ms);
1099        if (rdev->ops->start_radar_detection)
1100                ret = rdev->ops->start_radar_detection(&rdev->wiphy, dev,
1101                                                       chandef, cac_time_ms);
1102        trace_rdev_return_int(&rdev->wiphy, ret);
1103        return ret;
1104}
1105
1106static inline int
1107rdev_set_mcast_rate(struct cfg80211_registered_device *rdev,
1108                    struct net_device *dev,
1109                    int mcast_rate[NUM_NL80211_BANDS])
1110{
1111        int ret = -ENOTSUPP;
1112
1113        trace_rdev_set_mcast_rate(&rdev->wiphy, dev, mcast_rate);
1114        if (rdev->ops->set_mcast_rate)
1115                ret = rdev->ops->set_mcast_rate(&rdev->wiphy, dev, mcast_rate);
1116        trace_rdev_return_int(&rdev->wiphy, ret);
1117        return ret;
1118}
1119
1120static inline int
1121rdev_set_coalesce(struct cfg80211_registered_device *rdev,
1122                  struct cfg80211_coalesce *coalesce)
1123{
1124        int ret = -ENOTSUPP;
1125
1126        trace_rdev_set_coalesce(&rdev->wiphy, coalesce);
1127        if (rdev->ops->set_coalesce)
1128                ret = rdev->ops->set_coalesce(&rdev->wiphy, coalesce);
1129        trace_rdev_return_int(&rdev->wiphy, ret);
1130        return ret;
1131}
1132#endif /* __CFG80211_RDEV_OPS */
1133