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