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