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