linux/net/wireless/rdev-ops.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef __CFG80211_RDEV_OPS
   3#define __CFG80211_RDEV_OPS
   4
   5#include <linux/rtnetlink.h>
   6#include <net/cfg80211.h>
   7#include "core.h"
   8#include "trace.h"
   9
  10static inline int rdev_suspend(struct cfg80211_registered_device *rdev,
  11                               struct cfg80211_wowlan *wowlan)
  12{
  13        int ret;
  14        trace_rdev_suspend(&rdev->wiphy, wowlan);
  15        ret = rdev->ops->suspend(&rdev->wiphy, wowlan);
  16        trace_rdev_return_int(&rdev->wiphy, ret);
  17        return ret;
  18}
  19
  20static inline int rdev_resume(struct cfg80211_registered_device *rdev)
  21{
  22        int ret;
  23        trace_rdev_resume(&rdev->wiphy);
  24        ret = rdev->ops->resume(&rdev->wiphy);
  25        trace_rdev_return_int(&rdev->wiphy, ret);
  26        return ret;
  27}
  28
  29static inline void rdev_set_wakeup(struct cfg80211_registered_device *rdev,
  30                                   bool enabled)
  31{
  32        trace_rdev_set_wakeup(&rdev->wiphy, enabled);
  33        rdev->ops->set_wakeup(&rdev->wiphy, enabled);
  34        trace_rdev_return_void(&rdev->wiphy);
  35}
  36
  37static inline struct wireless_dev
  38*rdev_add_virtual_intf(struct cfg80211_registered_device *rdev, char *name,
  39                       unsigned char name_assign_type,
  40                       enum nl80211_iftype type,
  41                       struct vif_params *params)
  42{
  43        struct wireless_dev *ret;
  44        trace_rdev_add_virtual_intf(&rdev->wiphy, name, type);
  45        ret = rdev->ops->add_virtual_intf(&rdev->wiphy, name, name_assign_type,
  46                                          type, params);
  47        trace_rdev_return_wdev(&rdev->wiphy, ret);
  48        return ret;
  49}
  50
  51static inline int
  52rdev_del_virtual_intf(struct cfg80211_registered_device *rdev,
  53                      struct wireless_dev *wdev)
  54{
  55        int ret;
  56        trace_rdev_del_virtual_intf(&rdev->wiphy, wdev);
  57        ret = rdev->ops->del_virtual_intf(&rdev->wiphy, wdev);
  58        trace_rdev_return_int(&rdev->wiphy, ret);
  59        return ret;
  60}
  61
  62static inline int
  63rdev_change_virtual_intf(struct cfg80211_registered_device *rdev,
  64                         struct net_device *dev, enum nl80211_iftype type,
  65                         struct vif_params *params)
  66{
  67        int ret;
  68        trace_rdev_change_virtual_intf(&rdev->wiphy, dev, type);
  69        ret = rdev->ops->change_virtual_intf(&rdev->wiphy, dev, type, 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,
  81                           mac_addr, params->mode);
  82        ret = rdev->ops->add_key(&rdev->wiphy, netdev, key_index, pairwise,
  83                                  mac_addr, params);
  84        trace_rdev_return_int(&rdev->wiphy, ret);
  85        return ret;
  86}
  87
  88static inline int
  89rdev_get_key(struct cfg80211_registered_device *rdev, struct net_device *netdev,
  90             u8 key_index, bool pairwise, const u8 *mac_addr, void *cookie,
  91             void (*callback)(void *cookie, struct key_params*))
  92{
  93        int ret;
  94        trace_rdev_get_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr);
  95        ret = rdev->ops->get_key(&rdev->wiphy, netdev, key_index, pairwise,
  96                                  mac_addr, cookie, callback);
  97        trace_rdev_return_int(&rdev->wiphy, ret);
  98        return ret;
  99}
 100
 101static inline int rdev_del_key(struct cfg80211_registered_device *rdev,
 102                               struct net_device *netdev, u8 key_index,
 103                               bool pairwise, const u8 *mac_addr)
 104{
 105        int ret;
 106        trace_rdev_del_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr);
 107        ret = rdev->ops->del_key(&rdev->wiphy, netdev, key_index, pairwise,
 108                                  mac_addr);
 109        trace_rdev_return_int(&rdev->wiphy, ret);
 110        return ret;
 111}
 112
 113static inline int
 114rdev_set_default_key(struct cfg80211_registered_device *rdev,
 115                     struct net_device *netdev, u8 key_index, bool unicast,
 116                     bool multicast)
 117{
 118        int ret;
 119        trace_rdev_set_default_key(&rdev->wiphy, netdev, key_index,
 120                                   unicast, multicast);
 121        ret = rdev->ops->set_default_key(&rdev->wiphy, netdev, key_index,
 122                                          unicast, multicast);
 123        trace_rdev_return_int(&rdev->wiphy, ret);
 124        return ret;
 125}
 126
 127static inline int
 128rdev_set_default_mgmt_key(struct cfg80211_registered_device *rdev,
 129                          struct net_device *netdev, u8 key_index)
 130{
 131        int ret;
 132        trace_rdev_set_default_mgmt_key(&rdev->wiphy, netdev, key_index);
 133        ret = rdev->ops->set_default_mgmt_key(&rdev->wiphy, netdev,
 134                                               key_index);
 135        trace_rdev_return_int(&rdev->wiphy, ret);
 136        return ret;
 137}
 138
 139static inline int rdev_start_ap(struct cfg80211_registered_device *rdev,
 140                                struct net_device *dev,
 141                                struct cfg80211_ap_settings *settings)
 142{
 143        int ret;
 144        trace_rdev_start_ap(&rdev->wiphy, dev, settings);
 145        ret = rdev->ops->start_ap(&rdev->wiphy, dev, settings);
 146        trace_rdev_return_int(&rdev->wiphy, ret);
 147        return ret;
 148}
 149
 150static inline int rdev_change_beacon(struct cfg80211_registered_device *rdev,
 151                                     struct net_device *dev,
 152                                     struct cfg80211_beacon_data *info)
 153{
 154        int ret;
 155        trace_rdev_change_beacon(&rdev->wiphy, dev, info);
 156        ret = rdev->ops->change_beacon(&rdev->wiphy, dev, info);
 157        trace_rdev_return_int(&rdev->wiphy, ret);
 158        return ret;
 159}
 160
 161static inline int rdev_stop_ap(struct cfg80211_registered_device *rdev,
 162                               struct net_device *dev)
 163{
 164        int ret;
 165        trace_rdev_stop_ap(&rdev->wiphy, dev);
 166        ret = rdev->ops->stop_ap(&rdev->wiphy, dev);
 167        trace_rdev_return_int(&rdev->wiphy, ret);
 168        return ret;
 169}
 170
 171static inline int rdev_add_station(struct cfg80211_registered_device *rdev,
 172                                   struct net_device *dev, u8 *mac,
 173                                   struct station_parameters *params)
 174{
 175        int ret;
 176        trace_rdev_add_station(&rdev->wiphy, dev, mac, params);
 177        ret = rdev->ops->add_station(&rdev->wiphy, dev, mac, params);
 178        trace_rdev_return_int(&rdev->wiphy, ret);
 179        return ret;
 180}
 181
 182static inline int rdev_del_station(struct cfg80211_registered_device *rdev,
 183                                   struct net_device *dev,
 184                                   struct station_del_parameters *params)
 185{
 186        int ret;
 187        trace_rdev_del_station(&rdev->wiphy, dev, params);
 188        ret = rdev->ops->del_station(&rdev->wiphy, dev, params);
 189        trace_rdev_return_int(&rdev->wiphy, ret);
 190        return ret;
 191}
 192
 193static inline int rdev_change_station(struct cfg80211_registered_device *rdev,
 194                                      struct net_device *dev, u8 *mac,
 195                                      struct station_parameters *params)
 196{
 197        int ret;
 198        trace_rdev_change_station(&rdev->wiphy, dev, mac, params);
 199        ret = rdev->ops->change_station(&rdev->wiphy, dev, mac, params);
 200        trace_rdev_return_int(&rdev->wiphy, ret);
 201        return ret;
 202}
 203
 204static inline int rdev_get_station(struct cfg80211_registered_device *rdev,
 205                                   struct net_device *dev, const u8 *mac,
 206                                   struct station_info *sinfo)
 207{
 208        int ret;
 209        trace_rdev_get_station(&rdev->wiphy, dev, mac);
 210        ret = rdev->ops->get_station(&rdev->wiphy, dev, mac, sinfo);
 211        trace_rdev_return_int_station_info(&rdev->wiphy, ret, sinfo);
 212        return ret;
 213}
 214
 215static inline int rdev_dump_station(struct cfg80211_registered_device *rdev,
 216                                    struct net_device *dev, int idx, u8 *mac,
 217                                    struct station_info *sinfo)
 218{
 219        int ret;
 220        trace_rdev_dump_station(&rdev->wiphy, dev, idx, mac);
 221        ret = rdev->ops->dump_station(&rdev->wiphy, dev, idx, mac, sinfo);
 222        trace_rdev_return_int_station_info(&rdev->wiphy, ret, sinfo);
 223        return ret;
 224}
 225
 226static inline int rdev_add_mpath(struct cfg80211_registered_device *rdev,
 227                                 struct net_device *dev, u8 *dst, u8 *next_hop)
 228{
 229        int ret;
 230        trace_rdev_add_mpath(&rdev->wiphy, dev, dst, next_hop);
 231        ret = rdev->ops->add_mpath(&rdev->wiphy, dev, dst, next_hop);
 232        trace_rdev_return_int(&rdev->wiphy, ret);
 233        return ret;
 234}
 235
 236static inline int rdev_del_mpath(struct cfg80211_registered_device *rdev,
 237                                 struct net_device *dev, u8 *dst)
 238{
 239        int ret;
 240        trace_rdev_del_mpath(&rdev->wiphy, dev, dst);
 241        ret = rdev->ops->del_mpath(&rdev->wiphy, dev, dst);
 242        trace_rdev_return_int(&rdev->wiphy, ret);
 243        return ret;
 244}
 245
 246static inline int rdev_change_mpath(struct cfg80211_registered_device *rdev,
 247                                    struct net_device *dev, u8 *dst,
 248                                    u8 *next_hop)
 249{
 250        int ret;
 251        trace_rdev_change_mpath(&rdev->wiphy, dev, dst, next_hop);
 252        ret = rdev->ops->change_mpath(&rdev->wiphy, dev, dst, next_hop);
 253        trace_rdev_return_int(&rdev->wiphy, ret);
 254        return ret;
 255}
 256
 257static inline int rdev_get_mpath(struct cfg80211_registered_device *rdev,
 258                                 struct net_device *dev, u8 *dst, u8 *next_hop,
 259                                 struct mpath_info *pinfo)
 260{
 261        int ret;
 262        trace_rdev_get_mpath(&rdev->wiphy, dev, dst, next_hop);
 263        ret = rdev->ops->get_mpath(&rdev->wiphy, dev, dst, next_hop, pinfo);
 264        trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo);
 265        return ret;
 266
 267}
 268
 269static inline int rdev_get_mpp(struct cfg80211_registered_device *rdev,
 270                               struct net_device *dev, u8 *dst, u8 *mpp,
 271                               struct mpath_info *pinfo)
 272{
 273        int ret;
 274
 275        trace_rdev_get_mpp(&rdev->wiphy, dev, dst, mpp);
 276        ret = rdev->ops->get_mpp(&rdev->wiphy, dev, dst, mpp, pinfo);
 277        trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo);
 278        return ret;
 279}
 280
 281static inline int rdev_dump_mpath(struct cfg80211_registered_device *rdev,
 282                                  struct net_device *dev, int idx, u8 *dst,
 283                                  u8 *next_hop, struct mpath_info *pinfo)
 284
 285{
 286        int ret;
 287        trace_rdev_dump_mpath(&rdev->wiphy, dev, idx, dst, next_hop);
 288        ret = rdev->ops->dump_mpath(&rdev->wiphy, dev, idx, dst, next_hop,
 289                                    pinfo);
 290        trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo);
 291        return ret;
 292}
 293
 294static inline int rdev_dump_mpp(struct cfg80211_registered_device *rdev,
 295                                struct net_device *dev, int idx, u8 *dst,
 296                                u8 *mpp, struct mpath_info *pinfo)
 297
 298{
 299        int ret;
 300
 301        trace_rdev_dump_mpp(&rdev->wiphy, dev, idx, dst, mpp);
 302        ret = rdev->ops->dump_mpp(&rdev->wiphy, dev, idx, dst, mpp, pinfo);
 303        trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo);
 304        return ret;
 305}
 306
 307static inline int
 308rdev_get_mesh_config(struct cfg80211_registered_device *rdev,
 309                     struct net_device *dev, struct mesh_config *conf)
 310{
 311        int ret;
 312        trace_rdev_get_mesh_config(&rdev->wiphy, dev);
 313        ret = rdev->ops->get_mesh_config(&rdev->wiphy, dev, conf);
 314        trace_rdev_return_int_mesh_config(&rdev->wiphy, ret, conf);
 315        return ret;
 316}
 317
 318static inline int
 319rdev_update_mesh_config(struct cfg80211_registered_device *rdev,
 320                        struct net_device *dev, u32 mask,
 321                        const struct mesh_config *nconf)
 322{
 323        int ret;
 324        trace_rdev_update_mesh_config(&rdev->wiphy, dev, mask, nconf);
 325        ret = rdev->ops->update_mesh_config(&rdev->wiphy, dev, mask, nconf);
 326        trace_rdev_return_int(&rdev->wiphy, ret);
 327        return ret;
 328}
 329
 330static inline int rdev_join_mesh(struct cfg80211_registered_device *rdev,
 331                                 struct net_device *dev,
 332                                 const struct mesh_config *conf,
 333                                 const struct mesh_setup *setup)
 334{
 335        int ret;
 336        trace_rdev_join_mesh(&rdev->wiphy, dev, conf, setup);
 337        ret = rdev->ops->join_mesh(&rdev->wiphy, dev, conf, setup);
 338        trace_rdev_return_int(&rdev->wiphy, ret);
 339        return ret;
 340}
 341
 342
 343static inline int rdev_leave_mesh(struct cfg80211_registered_device *rdev,
 344                                  struct net_device *dev)
 345{
 346        int ret;
 347        trace_rdev_leave_mesh(&rdev->wiphy, dev);
 348        ret = rdev->ops->leave_mesh(&rdev->wiphy, dev);
 349        trace_rdev_return_int(&rdev->wiphy, ret);
 350        return ret;
 351}
 352
 353static inline int rdev_join_ocb(struct cfg80211_registered_device *rdev,
 354                                struct net_device *dev,
 355                                struct ocb_setup *setup)
 356{
 357        int ret;
 358        trace_rdev_join_ocb(&rdev->wiphy, dev, setup);
 359        ret = rdev->ops->join_ocb(&rdev->wiphy, dev, setup);
 360        trace_rdev_return_int(&rdev->wiphy, ret);
 361        return ret;
 362}
 363
 364static inline int rdev_leave_ocb(struct cfg80211_registered_device *rdev,
 365                                 struct net_device *dev)
 366{
 367        int ret;
 368        trace_rdev_leave_ocb(&rdev->wiphy, dev);
 369        ret = rdev->ops->leave_ocb(&rdev->wiphy, dev);
 370        trace_rdev_return_int(&rdev->wiphy, ret);
 371        return ret;
 372}
 373
 374static inline int rdev_change_bss(struct cfg80211_registered_device *rdev,
 375                                  struct net_device *dev,
 376                                  struct bss_parameters *params)
 377
 378{
 379        int ret;
 380        trace_rdev_change_bss(&rdev->wiphy, dev, params);
 381        ret = rdev->ops->change_bss(&rdev->wiphy, dev, params);
 382        trace_rdev_return_int(&rdev->wiphy, ret);
 383        return ret;
 384}
 385
 386static inline int rdev_set_txq_params(struct cfg80211_registered_device *rdev,
 387                                      struct net_device *dev,
 388                                      struct ieee80211_txq_params *params)
 389
 390{
 391        int ret;
 392        trace_rdev_set_txq_params(&rdev->wiphy, dev, params);
 393        ret = rdev->ops->set_txq_params(&rdev->wiphy, dev, params);
 394        trace_rdev_return_int(&rdev->wiphy, ret);
 395        return ret;
 396}
 397
 398static inline int
 399rdev_libertas_set_mesh_channel(struct cfg80211_registered_device *rdev,
 400                               struct net_device *dev,
 401                               struct ieee80211_channel *chan)
 402{
 403        int ret;
 404        trace_rdev_libertas_set_mesh_channel(&rdev->wiphy, dev, chan);
 405        ret = rdev->ops->libertas_set_mesh_channel(&rdev->wiphy, dev, chan);
 406        trace_rdev_return_int(&rdev->wiphy, ret);
 407        return ret;
 408}
 409
 410static inline int
 411rdev_set_monitor_channel(struct cfg80211_registered_device *rdev,
 412                         struct cfg80211_chan_def *chandef)
 413{
 414        int ret;
 415        trace_rdev_set_monitor_channel(&rdev->wiphy, chandef);
 416        ret = rdev->ops->set_monitor_channel(&rdev->wiphy, chandef);
 417        trace_rdev_return_int(&rdev->wiphy, ret);
 418        return ret;
 419}
 420
 421static inline int rdev_scan(struct cfg80211_registered_device *rdev,
 422                            struct cfg80211_scan_request *request)
 423{
 424        int ret;
 425        trace_rdev_scan(&rdev->wiphy, request);
 426        ret = rdev->ops->scan(&rdev->wiphy, request);
 427        trace_rdev_return_int(&rdev->wiphy, ret);
 428        return ret;
 429}
 430
 431static inline void rdev_abort_scan(struct cfg80211_registered_device *rdev,
 432                                   struct wireless_dev *wdev)
 433{
 434        trace_rdev_abort_scan(&rdev->wiphy, wdev);
 435        rdev->ops->abort_scan(&rdev->wiphy, wdev);
 436        trace_rdev_return_void(&rdev->wiphy);
 437}
 438
 439static inline int rdev_auth(struct cfg80211_registered_device *rdev,
 440                            struct net_device *dev,
 441                            struct cfg80211_auth_request *req)
 442{
 443        int ret;
 444        trace_rdev_auth(&rdev->wiphy, dev, req);
 445        ret = rdev->ops->auth(&rdev->wiphy, dev, req);
 446        trace_rdev_return_int(&rdev->wiphy, ret);
 447        return ret;
 448}
 449
 450static inline int rdev_assoc(struct cfg80211_registered_device *rdev,
 451                             struct net_device *dev,
 452                             struct cfg80211_assoc_request *req)
 453{
 454        int ret;
 455        trace_rdev_assoc(&rdev->wiphy, dev, req);
 456        ret = rdev->ops->assoc(&rdev->wiphy, dev, req);
 457        trace_rdev_return_int(&rdev->wiphy, ret);
 458        return ret;
 459}
 460
 461static inline int rdev_deauth(struct cfg80211_registered_device *rdev,
 462                              struct net_device *dev,
 463                              struct cfg80211_deauth_request *req)
 464{
 465        int ret;
 466        trace_rdev_deauth(&rdev->wiphy, dev, req);
 467        ret = rdev->ops->deauth(&rdev->wiphy, dev, req);
 468        trace_rdev_return_int(&rdev->wiphy, ret);
 469        return ret;
 470}
 471
 472static inline int rdev_disassoc(struct cfg80211_registered_device *rdev,
 473                                struct net_device *dev,
 474                                struct cfg80211_disassoc_request *req)
 475{
 476        int ret;
 477        trace_rdev_disassoc(&rdev->wiphy, dev, req);
 478        ret = rdev->ops->disassoc(&rdev->wiphy, dev, req);
 479        trace_rdev_return_int(&rdev->wiphy, ret);
 480        return ret;
 481}
 482
 483static inline int rdev_connect(struct cfg80211_registered_device *rdev,
 484                               struct net_device *dev,
 485                               struct cfg80211_connect_params *sme)
 486{
 487        int ret;
 488        trace_rdev_connect(&rdev->wiphy, dev, sme);
 489        ret = rdev->ops->connect(&rdev->wiphy, dev, sme);
 490        trace_rdev_return_int(&rdev->wiphy, ret);
 491        return ret;
 492}
 493
 494static inline int
 495rdev_update_connect_params(struct cfg80211_registered_device *rdev,
 496                           struct net_device *dev,
 497                           struct cfg80211_connect_params *sme, u32 changed)
 498{
 499        int ret;
 500        trace_rdev_update_connect_params(&rdev->wiphy, dev, sme, changed);
 501        ret = rdev->ops->update_connect_params(&rdev->wiphy, dev, sme, changed);
 502        trace_rdev_return_int(&rdev->wiphy, ret);
 503        return ret;
 504}
 505
 506static inline int rdev_disconnect(struct cfg80211_registered_device *rdev,
 507                                  struct net_device *dev, u16 reason_code)
 508{
 509        int ret;
 510        trace_rdev_disconnect(&rdev->wiphy, dev, reason_code);
 511        ret = rdev->ops->disconnect(&rdev->wiphy, dev, reason_code);
 512        trace_rdev_return_int(&rdev->wiphy, ret);
 513        return ret;
 514}
 515
 516static inline int rdev_join_ibss(struct cfg80211_registered_device *rdev,
 517                                 struct net_device *dev,
 518                                 struct cfg80211_ibss_params *params)
 519{
 520        int ret;
 521        trace_rdev_join_ibss(&rdev->wiphy, dev, params);
 522        ret = rdev->ops->join_ibss(&rdev->wiphy, dev, params);
 523        trace_rdev_return_int(&rdev->wiphy, ret);
 524        return ret;
 525}
 526
 527static inline int rdev_leave_ibss(struct cfg80211_registered_device *rdev,
 528                                  struct net_device *dev)
 529{
 530        int ret;
 531        trace_rdev_leave_ibss(&rdev->wiphy, dev);
 532        ret = rdev->ops->leave_ibss(&rdev->wiphy, dev);
 533        trace_rdev_return_int(&rdev->wiphy, ret);
 534        return ret;
 535}
 536
 537static inline int
 538rdev_set_wiphy_params(struct cfg80211_registered_device *rdev, u32 changed)
 539{
 540        int ret;
 541        trace_rdev_set_wiphy_params(&rdev->wiphy, changed);
 542        ret = rdev->ops->set_wiphy_params(&rdev->wiphy, changed);
 543        trace_rdev_return_int(&rdev->wiphy, ret);
 544        return ret;
 545}
 546
 547static inline int rdev_set_tx_power(struct cfg80211_registered_device *rdev,
 548                                    struct wireless_dev *wdev,
 549                                    enum nl80211_tx_power_setting type, int mbm)
 550{
 551        int ret;
 552        trace_rdev_set_tx_power(&rdev->wiphy, wdev, type, mbm);
 553        ret = rdev->ops->set_tx_power(&rdev->wiphy, wdev, type, mbm);
 554        trace_rdev_return_int(&rdev->wiphy, ret);
 555        return ret;
 556}
 557
 558static inline int rdev_get_tx_power(struct cfg80211_registered_device *rdev,
 559                                    struct wireless_dev *wdev, int *dbm)
 560{
 561        int ret;
 562        trace_rdev_get_tx_power(&rdev->wiphy, wdev);
 563        ret = rdev->ops->get_tx_power(&rdev->wiphy, wdev, dbm);
 564        trace_rdev_return_int_int(&rdev->wiphy, ret, *dbm);
 565        return ret;
 566}
 567
 568static inline int rdev_set_wds_peer(struct cfg80211_registered_device *rdev,
 569                                    struct net_device *dev, const u8 *addr)
 570{
 571        int ret;
 572        trace_rdev_set_wds_peer(&rdev->wiphy, dev, addr);
 573        ret = rdev->ops->set_wds_peer(&rdev->wiphy, dev, addr);
 574        trace_rdev_return_int(&rdev->wiphy, ret);
 575        return ret;
 576}
 577
 578static inline int
 579rdev_set_multicast_to_unicast(struct cfg80211_registered_device *rdev,
 580                              struct net_device *dev,
 581                              const bool enabled)
 582{
 583        int ret;
 584        trace_rdev_set_multicast_to_unicast(&rdev->wiphy, dev, enabled);
 585        ret = rdev->ops->set_multicast_to_unicast(&rdev->wiphy, dev, enabled);
 586        trace_rdev_return_int(&rdev->wiphy, ret);
 587        return ret;
 588}
 589
 590static inline int
 591rdev_get_txq_stats(struct cfg80211_registered_device *rdev,
 592                   struct wireless_dev *wdev,
 593                   struct cfg80211_txq_stats *txqstats)
 594{
 595        int ret;
 596        trace_rdev_get_txq_stats(&rdev->wiphy, wdev);
 597        ret = rdev->ops->get_txq_stats(&rdev->wiphy, wdev, txqstats);
 598        trace_rdev_return_int(&rdev->wiphy, ret);
 599        return ret;
 600}
 601
 602static inline void rdev_rfkill_poll(struct cfg80211_registered_device *rdev)
 603{
 604        trace_rdev_rfkill_poll(&rdev->wiphy);
 605        rdev->ops->rfkill_poll(&rdev->wiphy);
 606        trace_rdev_return_void(&rdev->wiphy);
 607}
 608
 609
 610#ifdef CONFIG_NL80211_TESTMODE
 611static inline int rdev_testmode_cmd(struct cfg80211_registered_device *rdev,
 612                                    struct wireless_dev *wdev,
 613                                    void *data, int len)
 614{
 615        int ret;
 616        trace_rdev_testmode_cmd(&rdev->wiphy, wdev);
 617        ret = rdev->ops->testmode_cmd(&rdev->wiphy, wdev, data, len);
 618        trace_rdev_return_int(&rdev->wiphy, ret);
 619        return ret;
 620}
 621
 622static inline int rdev_testmode_dump(struct cfg80211_registered_device *rdev,
 623                                     struct sk_buff *skb,
 624                                     struct netlink_callback *cb, void *data,
 625                                     int len)
 626{
 627        int ret;
 628        trace_rdev_testmode_dump(&rdev->wiphy);
 629        ret = rdev->ops->testmode_dump(&rdev->wiphy, skb, cb, data, len);
 630        trace_rdev_return_int(&rdev->wiphy, ret);
 631        return ret;
 632}
 633#endif
 634
 635static inline int
 636rdev_set_bitrate_mask(struct cfg80211_registered_device *rdev,
 637                      struct net_device *dev, const u8 *peer,
 638                      const struct cfg80211_bitrate_mask *mask)
 639{
 640        int ret;
 641        trace_rdev_set_bitrate_mask(&rdev->wiphy, dev, peer, mask);
 642        ret = rdev->ops->set_bitrate_mask(&rdev->wiphy, dev, peer, mask);
 643        trace_rdev_return_int(&rdev->wiphy, ret);
 644        return ret;
 645}
 646
 647static inline int rdev_dump_survey(struct cfg80211_registered_device *rdev,
 648                                   struct net_device *netdev, int idx,
 649                                   struct survey_info *info)
 650{
 651        int ret;
 652        trace_rdev_dump_survey(&rdev->wiphy, netdev, idx);
 653        ret = rdev->ops->dump_survey(&rdev->wiphy, netdev, idx, info);
 654        if (ret < 0)
 655                trace_rdev_return_int(&rdev->wiphy, ret);
 656        else
 657                trace_rdev_return_int_survey_info(&rdev->wiphy, ret, info);
 658        return ret;
 659}
 660
 661static inline int rdev_set_pmksa(struct cfg80211_registered_device *rdev,
 662                                 struct net_device *netdev,
 663                                 struct cfg80211_pmksa *pmksa)
 664{
 665        int ret;
 666        trace_rdev_set_pmksa(&rdev->wiphy, netdev, pmksa);
 667        ret = rdev->ops->set_pmksa(&rdev->wiphy, netdev, pmksa);
 668        trace_rdev_return_int(&rdev->wiphy, ret);
 669        return ret;
 670}
 671
 672static inline int rdev_del_pmksa(struct cfg80211_registered_device *rdev,
 673                                 struct net_device *netdev,
 674                                 struct cfg80211_pmksa *pmksa)
 675{
 676        int ret;
 677        trace_rdev_del_pmksa(&rdev->wiphy, netdev, pmksa);
 678        ret = rdev->ops->del_pmksa(&rdev->wiphy, netdev, pmksa);
 679        trace_rdev_return_int(&rdev->wiphy, ret);
 680        return ret;
 681}
 682
 683static inline int rdev_flush_pmksa(struct cfg80211_registered_device *rdev,
 684                                   struct net_device *netdev)
 685{
 686        int ret;
 687        trace_rdev_flush_pmksa(&rdev->wiphy, netdev);
 688        ret = rdev->ops->flush_pmksa(&rdev->wiphy, netdev);
 689        trace_rdev_return_int(&rdev->wiphy, ret);
 690        return ret;
 691}
 692
 693static inline int
 694rdev_remain_on_channel(struct cfg80211_registered_device *rdev,
 695                       struct wireless_dev *wdev,
 696                       struct ieee80211_channel *chan,
 697                       unsigned int duration, u64 *cookie)
 698{
 699        int ret;
 700        trace_rdev_remain_on_channel(&rdev->wiphy, wdev, chan, duration);
 701        ret = rdev->ops->remain_on_channel(&rdev->wiphy, wdev, chan,
 702                                           duration, cookie);
 703        trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie);
 704        return ret;
 705}
 706
 707static inline int
 708rdev_cancel_remain_on_channel(struct cfg80211_registered_device *rdev,
 709                              struct wireless_dev *wdev, u64 cookie)
 710{
 711        int ret;
 712        trace_rdev_cancel_remain_on_channel(&rdev->wiphy, wdev, cookie);
 713        ret = rdev->ops->cancel_remain_on_channel(&rdev->wiphy, wdev, cookie);
 714        trace_rdev_return_int(&rdev->wiphy, ret);
 715        return ret;
 716}
 717
 718static inline int rdev_mgmt_tx(struct cfg80211_registered_device *rdev,
 719                               struct wireless_dev *wdev,
 720                               struct cfg80211_mgmt_tx_params *params,
 721                               u64 *cookie)
 722{
 723        int ret;
 724        trace_rdev_mgmt_tx(&rdev->wiphy, wdev, params);
 725        ret = rdev->ops->mgmt_tx(&rdev->wiphy, wdev, params, cookie);
 726        trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie);
 727        return ret;
 728}
 729
 730static inline int rdev_tx_control_port(struct cfg80211_registered_device *rdev,
 731                                       struct net_device *dev,
 732                                       const void *buf, size_t len,
 733                                       const u8 *dest, __be16 proto,
 734                                       const bool noencrypt)
 735{
 736        int ret;
 737        trace_rdev_tx_control_port(&rdev->wiphy, dev, buf, len,
 738                                   dest, proto, noencrypt);
 739        ret = rdev->ops->tx_control_port(&rdev->wiphy, dev, buf, len,
 740                                         dest, proto, noencrypt);
 741        trace_rdev_return_int(&rdev->wiphy, ret);
 742        return ret;
 743}
 744
 745static inline int
 746rdev_mgmt_tx_cancel_wait(struct cfg80211_registered_device *rdev,
 747                         struct wireless_dev *wdev, u64 cookie)
 748{
 749        int ret;
 750        trace_rdev_mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie);
 751        ret = rdev->ops->mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie);
 752        trace_rdev_return_int(&rdev->wiphy, ret);
 753        return ret;
 754}
 755
 756static inline int rdev_set_power_mgmt(struct cfg80211_registered_device *rdev,
 757                                      struct net_device *dev, bool enabled,
 758                                      int timeout)
 759{
 760        int ret;
 761        trace_rdev_set_power_mgmt(&rdev->wiphy, dev, enabled, timeout);
 762        ret = rdev->ops->set_power_mgmt(&rdev->wiphy, dev, enabled, timeout);
 763        trace_rdev_return_int(&rdev->wiphy, ret);
 764        return ret;
 765}
 766
 767static inline int
 768rdev_set_cqm_rssi_config(struct cfg80211_registered_device *rdev,
 769                         struct net_device *dev, s32 rssi_thold, u32 rssi_hyst)
 770{
 771        int ret;
 772        trace_rdev_set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold,
 773                                       rssi_hyst);
 774        ret = rdev->ops->set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold,
 775                                       rssi_hyst);
 776        trace_rdev_return_int(&rdev->wiphy, ret);
 777        return ret;
 778}
 779
 780static inline int
 781rdev_set_cqm_rssi_range_config(struct cfg80211_registered_device *rdev,
 782                               struct net_device *dev, s32 low, s32 high)
 783{
 784        int ret;
 785        trace_rdev_set_cqm_rssi_range_config(&rdev->wiphy, dev, low, high);
 786        ret = rdev->ops->set_cqm_rssi_range_config(&rdev->wiphy, dev,
 787                                                   low, high);
 788        trace_rdev_return_int(&rdev->wiphy, ret);
 789        return ret;
 790}
 791
 792static inline int
 793rdev_set_cqm_txe_config(struct cfg80211_registered_device *rdev,
 794                        struct net_device *dev, u32 rate, u32 pkts, u32 intvl)
 795{
 796        int ret;
 797        trace_rdev_set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts, intvl);
 798        ret = rdev->ops->set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts,
 799                                             intvl);
 800        trace_rdev_return_int(&rdev->wiphy, ret);
 801        return ret;
 802}
 803
 804static inline void
 805rdev_mgmt_frame_register(struct cfg80211_registered_device *rdev,
 806                         struct wireless_dev *wdev, u16 frame_type, bool reg)
 807{
 808        might_sleep();
 809
 810        trace_rdev_mgmt_frame_register(&rdev->wiphy, wdev , frame_type, reg);
 811        rdev->ops->mgmt_frame_register(&rdev->wiphy, wdev , frame_type, reg);
 812        trace_rdev_return_void(&rdev->wiphy);
 813}
 814
 815static inline int rdev_set_antenna(struct cfg80211_registered_device *rdev,
 816                                   u32 tx_ant, u32 rx_ant)
 817{
 818        int ret;
 819        trace_rdev_set_antenna(&rdev->wiphy, tx_ant, rx_ant);
 820        ret = rdev->ops->set_antenna(&rdev->wiphy, tx_ant, rx_ant);
 821        trace_rdev_return_int(&rdev->wiphy, ret);
 822        return ret;
 823}
 824
 825static inline int rdev_get_antenna(struct cfg80211_registered_device *rdev,
 826                                   u32 *tx_ant, u32 *rx_ant)
 827{
 828        int ret;
 829        trace_rdev_get_antenna(&rdev->wiphy);
 830        ret = rdev->ops->get_antenna(&rdev->wiphy, tx_ant, rx_ant);
 831        if (ret)
 832                trace_rdev_return_int(&rdev->wiphy, ret);
 833        else
 834                trace_rdev_return_int_tx_rx(&rdev->wiphy, ret, *tx_ant,
 835                                            *rx_ant);
 836        return ret;
 837}
 838
 839static inline int
 840rdev_sched_scan_start(struct cfg80211_registered_device *rdev,
 841                      struct net_device *dev,
 842                      struct cfg80211_sched_scan_request *request)
 843{
 844        int ret;
 845        trace_rdev_sched_scan_start(&rdev->wiphy, dev, request->reqid);
 846        ret = rdev->ops->sched_scan_start(&rdev->wiphy, dev, request);
 847        trace_rdev_return_int(&rdev->wiphy, ret);
 848        return ret;
 849}
 850
 851static inline int rdev_sched_scan_stop(struct cfg80211_registered_device *rdev,
 852                                       struct net_device *dev, u64 reqid)
 853{
 854        int ret;
 855        trace_rdev_sched_scan_stop(&rdev->wiphy, dev, reqid);
 856        ret = rdev->ops->sched_scan_stop(&rdev->wiphy, dev, reqid);
 857        trace_rdev_return_int(&rdev->wiphy, ret);
 858        return ret;
 859}
 860
 861static inline int rdev_set_rekey_data(struct cfg80211_registered_device *rdev,
 862                                      struct net_device *dev,
 863                                      struct cfg80211_gtk_rekey_data *data)
 864{
 865        int ret;
 866        trace_rdev_set_rekey_data(&rdev->wiphy, dev);
 867        ret = rdev->ops->set_rekey_data(&rdev->wiphy, dev, data);
 868        trace_rdev_return_int(&rdev->wiphy, ret);
 869        return ret;
 870}
 871
 872static inline int rdev_tdls_mgmt(struct cfg80211_registered_device *rdev,
 873                                 struct net_device *dev, u8 *peer,
 874                                 u8 action_code, u8 dialog_token,
 875                                 u16 status_code, u32 peer_capability,
 876                                 bool initiator, const u8 *buf, size_t len)
 877{
 878        int ret;
 879        trace_rdev_tdls_mgmt(&rdev->wiphy, dev, peer, action_code,
 880                             dialog_token, status_code, peer_capability,
 881                             initiator, buf, len);
 882        ret = rdev->ops->tdls_mgmt(&rdev->wiphy, dev, peer, action_code,
 883                                   dialog_token, status_code, peer_capability,
 884                                   initiator, buf, len);
 885        trace_rdev_return_int(&rdev->wiphy, ret);
 886        return ret;
 887}
 888
 889static inline int rdev_tdls_oper(struct cfg80211_registered_device *rdev,
 890                                 struct net_device *dev, u8 *peer,
 891                                 enum nl80211_tdls_operation oper)
 892{
 893        int ret;
 894        trace_rdev_tdls_oper(&rdev->wiphy, dev, peer, oper);
 895        ret = rdev->ops->tdls_oper(&rdev->wiphy, dev, peer, oper);
 896        trace_rdev_return_int(&rdev->wiphy, ret);
 897        return ret;
 898}
 899
 900static inline int rdev_probe_client(struct cfg80211_registered_device *rdev,
 901                                    struct net_device *dev, const u8 *peer,
 902                                    u64 *cookie)
 903{
 904        int ret;
 905        trace_rdev_probe_client(&rdev->wiphy, dev, peer);
 906        ret = rdev->ops->probe_client(&rdev->wiphy, dev, peer, cookie);
 907        trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie);
 908        return ret;
 909}
 910
 911static inline int rdev_set_noack_map(struct cfg80211_registered_device *rdev,
 912                                     struct net_device *dev, u16 noack_map)
 913{
 914        int ret;
 915        trace_rdev_set_noack_map(&rdev->wiphy, dev, noack_map);
 916        ret = rdev->ops->set_noack_map(&rdev->wiphy, dev, noack_map);
 917        trace_rdev_return_int(&rdev->wiphy, ret);
 918        return ret;
 919}
 920
 921static inline int
 922rdev_get_channel(struct cfg80211_registered_device *rdev,
 923                 struct wireless_dev *wdev,
 924                 struct cfg80211_chan_def *chandef)
 925{
 926        int ret;
 927
 928        trace_rdev_get_channel(&rdev->wiphy, wdev);
 929        ret = rdev->ops->get_channel(&rdev->wiphy, wdev, chandef);
 930        trace_rdev_return_chandef(&rdev->wiphy, ret, chandef);
 931
 932        return ret;
 933}
 934
 935static inline int rdev_start_p2p_device(struct cfg80211_registered_device *rdev,
 936                                        struct wireless_dev *wdev)
 937{
 938        int ret;
 939
 940        trace_rdev_start_p2p_device(&rdev->wiphy, wdev);
 941        ret = rdev->ops->start_p2p_device(&rdev->wiphy, wdev);
 942        trace_rdev_return_int(&rdev->wiphy, ret);
 943        return ret;
 944}
 945
 946static inline void rdev_stop_p2p_device(struct cfg80211_registered_device *rdev,
 947                                        struct wireless_dev *wdev)
 948{
 949        trace_rdev_stop_p2p_device(&rdev->wiphy, wdev);
 950        rdev->ops->stop_p2p_device(&rdev->wiphy, wdev);
 951        trace_rdev_return_void(&rdev->wiphy);
 952}
 953
 954static inline int rdev_start_nan(struct cfg80211_registered_device *rdev,
 955                                 struct wireless_dev *wdev,
 956                                 struct cfg80211_nan_conf *conf)
 957{
 958        int ret;
 959
 960        trace_rdev_start_nan(&rdev->wiphy, wdev, conf);
 961        ret = rdev->ops->start_nan(&rdev->wiphy, wdev, conf);
 962        trace_rdev_return_int(&rdev->wiphy, ret);
 963        return ret;
 964}
 965
 966static inline void rdev_stop_nan(struct cfg80211_registered_device *rdev,
 967                                 struct wireless_dev *wdev)
 968{
 969        trace_rdev_stop_nan(&rdev->wiphy, wdev);
 970        rdev->ops->stop_nan(&rdev->wiphy, wdev);
 971        trace_rdev_return_void(&rdev->wiphy);
 972}
 973
 974static inline int
 975rdev_add_nan_func(struct cfg80211_registered_device *rdev,
 976                  struct wireless_dev *wdev,
 977                  struct cfg80211_nan_func *nan_func)
 978{
 979        int ret;
 980
 981        trace_rdev_add_nan_func(&rdev->wiphy, wdev, nan_func);
 982        ret = rdev->ops->add_nan_func(&rdev->wiphy, wdev, nan_func);
 983        trace_rdev_return_int(&rdev->wiphy, ret);
 984        return ret;
 985}
 986
 987static inline void rdev_del_nan_func(struct cfg80211_registered_device *rdev,
 988                                    struct wireless_dev *wdev, u64 cookie)
 989{
 990        trace_rdev_del_nan_func(&rdev->wiphy, wdev, cookie);
 991        rdev->ops->del_nan_func(&rdev->wiphy, wdev, cookie);
 992        trace_rdev_return_void(&rdev->wiphy);
 993}
 994
 995static inline int
 996rdev_nan_change_conf(struct cfg80211_registered_device *rdev,
 997                     struct wireless_dev *wdev,
 998                     struct cfg80211_nan_conf *conf, u32 changes)
 999{
1000        int ret;
1001
1002        trace_rdev_nan_change_conf(&rdev->wiphy, wdev, conf, changes);
1003        if (rdev->ops->nan_change_conf)
1004                ret = rdev->ops->nan_change_conf(&rdev->wiphy, wdev, conf,
1005                                                 changes);
1006        else
1007                ret = -ENOTSUPP;
1008        trace_rdev_return_int(&rdev->wiphy, ret);
1009        return ret;
1010}
1011
1012static inline int rdev_set_mac_acl(struct cfg80211_registered_device *rdev,
1013                                   struct net_device *dev,
1014                                   struct cfg80211_acl_data *params)
1015{
1016        int ret;
1017
1018        trace_rdev_set_mac_acl(&rdev->wiphy, dev, params);
1019        ret = rdev->ops->set_mac_acl(&rdev->wiphy, dev, params);
1020        trace_rdev_return_int(&rdev->wiphy, ret);
1021        return ret;
1022}
1023
1024static inline int rdev_update_ft_ies(struct cfg80211_registered_device *rdev,
1025                                     struct net_device *dev,
1026                                     struct cfg80211_update_ft_ies_params *ftie)
1027{
1028        int ret;
1029
1030        trace_rdev_update_ft_ies(&rdev->wiphy, dev, ftie);
1031        ret = rdev->ops->update_ft_ies(&rdev->wiphy, dev, ftie);
1032        trace_rdev_return_int(&rdev->wiphy, ret);
1033        return ret;
1034}
1035
1036static inline int rdev_crit_proto_start(struct cfg80211_registered_device *rdev,
1037                                        struct wireless_dev *wdev,
1038                                        enum nl80211_crit_proto_id protocol,
1039                                        u16 duration)
1040{
1041        int ret;
1042
1043        trace_rdev_crit_proto_start(&rdev->wiphy, wdev, protocol, duration);
1044        ret = rdev->ops->crit_proto_start(&rdev->wiphy, wdev,
1045                                          protocol, duration);
1046        trace_rdev_return_int(&rdev->wiphy, ret);
1047        return ret;
1048}
1049
1050static inline void rdev_crit_proto_stop(struct cfg80211_registered_device *rdev,
1051                                       struct wireless_dev *wdev)
1052{
1053        trace_rdev_crit_proto_stop(&rdev->wiphy, wdev);
1054        rdev->ops->crit_proto_stop(&rdev->wiphy, wdev);
1055        trace_rdev_return_void(&rdev->wiphy);
1056}
1057
1058static inline int rdev_channel_switch(struct cfg80211_registered_device *rdev,
1059                                      struct net_device *dev,
1060                                      struct cfg80211_csa_settings *params)
1061{
1062        int ret;
1063
1064        trace_rdev_channel_switch(&rdev->wiphy, dev, params);
1065        ret = rdev->ops->channel_switch(&rdev->wiphy, dev, params);
1066        trace_rdev_return_int(&rdev->wiphy, ret);
1067        return ret;
1068}
1069
1070static inline int rdev_set_qos_map(struct cfg80211_registered_device *rdev,
1071                                   struct net_device *dev,
1072                                   struct cfg80211_qos_map *qos_map)
1073{
1074        int ret = -EOPNOTSUPP;
1075
1076        if (rdev->ops->set_qos_map) {
1077                trace_rdev_set_qos_map(&rdev->wiphy, dev, qos_map);
1078                ret = rdev->ops->set_qos_map(&rdev->wiphy, dev, qos_map);
1079                trace_rdev_return_int(&rdev->wiphy, ret);
1080        }
1081
1082        return ret;
1083}
1084
1085static inline int
1086rdev_set_ap_chanwidth(struct cfg80211_registered_device *rdev,
1087                      struct net_device *dev, struct cfg80211_chan_def *chandef)
1088{
1089        int ret;
1090
1091        trace_rdev_set_ap_chanwidth(&rdev->wiphy, dev, chandef);
1092        ret = rdev->ops->set_ap_chanwidth(&rdev->wiphy, dev, chandef);
1093        trace_rdev_return_int(&rdev->wiphy, ret);
1094
1095        return ret;
1096}
1097
1098static inline int
1099rdev_add_tx_ts(struct cfg80211_registered_device *rdev,
1100               struct net_device *dev, u8 tsid, const u8 *peer,
1101               u8 user_prio, u16 admitted_time)
1102{
1103        int ret = -EOPNOTSUPP;
1104
1105        trace_rdev_add_tx_ts(&rdev->wiphy, dev, tsid, peer,
1106                             user_prio, admitted_time);
1107        if (rdev->ops->add_tx_ts)
1108                ret = rdev->ops->add_tx_ts(&rdev->wiphy, dev, tsid, peer,
1109                                           user_prio, admitted_time);
1110        trace_rdev_return_int(&rdev->wiphy, ret);
1111
1112        return ret;
1113}
1114
1115static inline int
1116rdev_del_tx_ts(struct cfg80211_registered_device *rdev,
1117               struct net_device *dev, u8 tsid, const u8 *peer)
1118{
1119        int ret = -EOPNOTSUPP;
1120
1121        trace_rdev_del_tx_ts(&rdev->wiphy, dev, tsid, peer);
1122        if (rdev->ops->del_tx_ts)
1123                ret = rdev->ops->del_tx_ts(&rdev->wiphy, dev, tsid, peer);
1124        trace_rdev_return_int(&rdev->wiphy, ret);
1125
1126        return ret;
1127}
1128
1129static inline int
1130rdev_tdls_channel_switch(struct cfg80211_registered_device *rdev,
1131                         struct net_device *dev, const u8 *addr,
1132                         u8 oper_class, struct cfg80211_chan_def *chandef)
1133{
1134        int ret;
1135
1136        trace_rdev_tdls_channel_switch(&rdev->wiphy, dev, addr, oper_class,
1137                                       chandef);
1138        ret = rdev->ops->tdls_channel_switch(&rdev->wiphy, dev, addr,
1139                                             oper_class, chandef);
1140        trace_rdev_return_int(&rdev->wiphy, ret);
1141        return ret;
1142}
1143
1144static inline void
1145rdev_tdls_cancel_channel_switch(struct cfg80211_registered_device *rdev,
1146                                struct net_device *dev, const u8 *addr)
1147{
1148        trace_rdev_tdls_cancel_channel_switch(&rdev->wiphy, dev, addr);
1149        rdev->ops->tdls_cancel_channel_switch(&rdev->wiphy, dev, addr);
1150        trace_rdev_return_void(&rdev->wiphy);
1151}
1152
1153static inline int
1154rdev_start_radar_detection(struct cfg80211_registered_device *rdev,
1155                           struct net_device *dev,
1156                           struct cfg80211_chan_def *chandef,
1157                           u32 cac_time_ms)
1158{
1159        int ret = -ENOTSUPP;
1160
1161        trace_rdev_start_radar_detection(&rdev->wiphy, dev, chandef,
1162                                         cac_time_ms);
1163        if (rdev->ops->start_radar_detection)
1164                ret = rdev->ops->start_radar_detection(&rdev->wiphy, dev,
1165                                                       chandef, cac_time_ms);
1166        trace_rdev_return_int(&rdev->wiphy, ret);
1167        return ret;
1168}
1169
1170static inline int
1171rdev_set_mcast_rate(struct cfg80211_registered_device *rdev,
1172                    struct net_device *dev,
1173                    int mcast_rate[NUM_NL80211_BANDS])
1174{
1175        int ret = -ENOTSUPP;
1176
1177        trace_rdev_set_mcast_rate(&rdev->wiphy, dev, mcast_rate);
1178        if (rdev->ops->set_mcast_rate)
1179                ret = rdev->ops->set_mcast_rate(&rdev->wiphy, dev, mcast_rate);
1180        trace_rdev_return_int(&rdev->wiphy, ret);
1181        return ret;
1182}
1183
1184static inline int
1185rdev_set_coalesce(struct cfg80211_registered_device *rdev,
1186                  struct cfg80211_coalesce *coalesce)
1187{
1188        int ret = -ENOTSUPP;
1189
1190        trace_rdev_set_coalesce(&rdev->wiphy, coalesce);
1191        if (rdev->ops->set_coalesce)
1192                ret = rdev->ops->set_coalesce(&rdev->wiphy, coalesce);
1193        trace_rdev_return_int(&rdev->wiphy, ret);
1194        return ret;
1195}
1196
1197static inline int rdev_set_pmk(struct cfg80211_registered_device *rdev,
1198                               struct net_device *dev,
1199                               struct cfg80211_pmk_conf *pmk_conf)
1200{
1201        int ret = -EOPNOTSUPP;
1202
1203        trace_rdev_set_pmk(&rdev->wiphy, dev, pmk_conf);
1204        if (rdev->ops->set_pmk)
1205                ret = rdev->ops->set_pmk(&rdev->wiphy, dev, pmk_conf);
1206        trace_rdev_return_int(&rdev->wiphy, ret);
1207        return ret;
1208}
1209
1210static inline int rdev_del_pmk(struct cfg80211_registered_device *rdev,
1211                               struct net_device *dev, const u8 *aa)
1212{
1213        int ret = -EOPNOTSUPP;
1214
1215        trace_rdev_del_pmk(&rdev->wiphy, dev, aa);
1216        if (rdev->ops->del_pmk)
1217                ret = rdev->ops->del_pmk(&rdev->wiphy, dev, aa);
1218        trace_rdev_return_int(&rdev->wiphy, ret);
1219        return ret;
1220}
1221
1222static inline int
1223rdev_external_auth(struct cfg80211_registered_device *rdev,
1224                   struct net_device *dev,
1225                   struct cfg80211_external_auth_params *params)
1226{
1227        int ret = -EOPNOTSUPP;
1228
1229        trace_rdev_external_auth(&rdev->wiphy, dev, params);
1230        if (rdev->ops->external_auth)
1231                ret = rdev->ops->external_auth(&rdev->wiphy, dev, params);
1232        trace_rdev_return_int(&rdev->wiphy, ret);
1233        return ret;
1234}
1235
1236static inline int
1237rdev_get_ftm_responder_stats(struct cfg80211_registered_device *rdev,
1238                             struct net_device *dev,
1239                             struct cfg80211_ftm_responder_stats *ftm_stats)
1240{
1241        int ret = -EOPNOTSUPP;
1242
1243        trace_rdev_get_ftm_responder_stats(&rdev->wiphy, dev, ftm_stats);
1244        if (rdev->ops->get_ftm_responder_stats)
1245                ret = rdev->ops->get_ftm_responder_stats(&rdev->wiphy, dev,
1246                                                        ftm_stats);
1247        trace_rdev_return_int(&rdev->wiphy, ret);
1248        return ret;
1249}
1250
1251static inline int
1252rdev_start_pmsr(struct cfg80211_registered_device *rdev,
1253                struct wireless_dev *wdev,
1254                struct cfg80211_pmsr_request *request)
1255{
1256        int ret = -EOPNOTSUPP;
1257
1258        trace_rdev_start_pmsr(&rdev->wiphy, wdev, request->cookie);
1259        if (rdev->ops->start_pmsr)
1260                ret = rdev->ops->start_pmsr(&rdev->wiphy, wdev, request);
1261        trace_rdev_return_int(&rdev->wiphy, ret);
1262        return ret;
1263}
1264
1265static inline void
1266rdev_abort_pmsr(struct cfg80211_registered_device *rdev,
1267                struct wireless_dev *wdev,
1268                struct cfg80211_pmsr_request *request)
1269{
1270        trace_rdev_abort_pmsr(&rdev->wiphy, wdev, request->cookie);
1271        if (rdev->ops->abort_pmsr)
1272                rdev->ops->abort_pmsr(&rdev->wiphy, wdev, request);
1273        trace_rdev_return_void(&rdev->wiphy);
1274}
1275
1276static inline int rdev_update_owe_info(struct cfg80211_registered_device *rdev,
1277                                       struct net_device *dev,
1278                                       struct cfg80211_update_owe_info *oweinfo)
1279{
1280        int ret = -EOPNOTSUPP;
1281
1282        trace_rdev_update_owe_info(&rdev->wiphy, dev, oweinfo);
1283        if (rdev->ops->update_owe_info)
1284                ret = rdev->ops->update_owe_info(&rdev->wiphy, dev, oweinfo);
1285        trace_rdev_return_int(&rdev->wiphy, ret);
1286        return ret;
1287}
1288
1289static inline int
1290rdev_probe_mesh_link(struct cfg80211_registered_device *rdev,
1291                     struct net_device *dev, const u8 *dest,
1292                     const void *buf, size_t len)
1293{
1294        int ret;
1295
1296        trace_rdev_probe_mesh_link(&rdev->wiphy, dev, dest, buf, len);
1297        ret = rdev->ops->probe_mesh_link(&rdev->wiphy, dev, buf, len);
1298        trace_rdev_return_int(&rdev->wiphy, ret);
1299        return ret;
1300}
1301
1302#endif /* __CFG80211_RDEV_OPS */
1303