Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v5.0-rc1 1275 lines 38 kB view raw
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, 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 int 590rdev_get_txq_stats(struct cfg80211_registered_device *rdev, 591 struct wireless_dev *wdev, 592 struct cfg80211_txq_stats *txqstats) 593{ 594 int ret; 595 trace_rdev_get_txq_stats(&rdev->wiphy, wdev); 596 ret = rdev->ops->get_txq_stats(&rdev->wiphy, wdev, txqstats); 597 trace_rdev_return_int(&rdev->wiphy, ret); 598 return ret; 599} 600 601static inline void rdev_rfkill_poll(struct cfg80211_registered_device *rdev) 602{ 603 trace_rdev_rfkill_poll(&rdev->wiphy); 604 rdev->ops->rfkill_poll(&rdev->wiphy); 605 trace_rdev_return_void(&rdev->wiphy); 606} 607 608 609#ifdef CONFIG_NL80211_TESTMODE 610static inline int rdev_testmode_cmd(struct cfg80211_registered_device *rdev, 611 struct wireless_dev *wdev, 612 void *data, int len) 613{ 614 int ret; 615 trace_rdev_testmode_cmd(&rdev->wiphy, wdev); 616 ret = rdev->ops->testmode_cmd(&rdev->wiphy, wdev, data, len); 617 trace_rdev_return_int(&rdev->wiphy, ret); 618 return ret; 619} 620 621static inline int rdev_testmode_dump(struct cfg80211_registered_device *rdev, 622 struct sk_buff *skb, 623 struct netlink_callback *cb, void *data, 624 int len) 625{ 626 int ret; 627 trace_rdev_testmode_dump(&rdev->wiphy); 628 ret = rdev->ops->testmode_dump(&rdev->wiphy, skb, cb, data, len); 629 trace_rdev_return_int(&rdev->wiphy, ret); 630 return ret; 631} 632#endif 633 634static inline int 635rdev_set_bitrate_mask(struct cfg80211_registered_device *rdev, 636 struct net_device *dev, const u8 *peer, 637 const struct cfg80211_bitrate_mask *mask) 638{ 639 int ret; 640 trace_rdev_set_bitrate_mask(&rdev->wiphy, dev, peer, mask); 641 ret = rdev->ops->set_bitrate_mask(&rdev->wiphy, dev, peer, mask); 642 trace_rdev_return_int(&rdev->wiphy, ret); 643 return ret; 644} 645 646static inline int rdev_dump_survey(struct cfg80211_registered_device *rdev, 647 struct net_device *netdev, int idx, 648 struct survey_info *info) 649{ 650 int ret; 651 trace_rdev_dump_survey(&rdev->wiphy, netdev, idx); 652 ret = rdev->ops->dump_survey(&rdev->wiphy, netdev, idx, info); 653 if (ret < 0) 654 trace_rdev_return_int(&rdev->wiphy, ret); 655 else 656 trace_rdev_return_int_survey_info(&rdev->wiphy, ret, info); 657 return ret; 658} 659 660static inline int rdev_set_pmksa(struct cfg80211_registered_device *rdev, 661 struct net_device *netdev, 662 struct cfg80211_pmksa *pmksa) 663{ 664 int ret; 665 trace_rdev_set_pmksa(&rdev->wiphy, netdev, pmksa); 666 ret = rdev->ops->set_pmksa(&rdev->wiphy, netdev, pmksa); 667 trace_rdev_return_int(&rdev->wiphy, ret); 668 return ret; 669} 670 671static inline int rdev_del_pmksa(struct cfg80211_registered_device *rdev, 672 struct net_device *netdev, 673 struct cfg80211_pmksa *pmksa) 674{ 675 int ret; 676 trace_rdev_del_pmksa(&rdev->wiphy, netdev, pmksa); 677 ret = rdev->ops->del_pmksa(&rdev->wiphy, netdev, pmksa); 678 trace_rdev_return_int(&rdev->wiphy, ret); 679 return ret; 680} 681 682static inline int rdev_flush_pmksa(struct cfg80211_registered_device *rdev, 683 struct net_device *netdev) 684{ 685 int ret; 686 trace_rdev_flush_pmksa(&rdev->wiphy, netdev); 687 ret = rdev->ops->flush_pmksa(&rdev->wiphy, netdev); 688 trace_rdev_return_int(&rdev->wiphy, ret); 689 return ret; 690} 691 692static inline int 693rdev_remain_on_channel(struct cfg80211_registered_device *rdev, 694 struct wireless_dev *wdev, 695 struct ieee80211_channel *chan, 696 unsigned int duration, u64 *cookie) 697{ 698 int ret; 699 trace_rdev_remain_on_channel(&rdev->wiphy, wdev, chan, duration); 700 ret = rdev->ops->remain_on_channel(&rdev->wiphy, wdev, chan, 701 duration, cookie); 702 trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 703 return ret; 704} 705 706static inline int 707rdev_cancel_remain_on_channel(struct cfg80211_registered_device *rdev, 708 struct wireless_dev *wdev, u64 cookie) 709{ 710 int ret; 711 trace_rdev_cancel_remain_on_channel(&rdev->wiphy, wdev, cookie); 712 ret = rdev->ops->cancel_remain_on_channel(&rdev->wiphy, wdev, cookie); 713 trace_rdev_return_int(&rdev->wiphy, ret); 714 return ret; 715} 716 717static inline int rdev_mgmt_tx(struct cfg80211_registered_device *rdev, 718 struct wireless_dev *wdev, 719 struct cfg80211_mgmt_tx_params *params, 720 u64 *cookie) 721{ 722 int ret; 723 trace_rdev_mgmt_tx(&rdev->wiphy, wdev, params); 724 ret = rdev->ops->mgmt_tx(&rdev->wiphy, wdev, params, cookie); 725 trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 726 return ret; 727} 728 729static inline int rdev_tx_control_port(struct cfg80211_registered_device *rdev, 730 struct net_device *dev, 731 const void *buf, size_t len, 732 const u8 *dest, __be16 proto, 733 const bool noencrypt) 734{ 735 int ret; 736 trace_rdev_tx_control_port(&rdev->wiphy, dev, buf, len, 737 dest, proto, noencrypt); 738 ret = rdev->ops->tx_control_port(&rdev->wiphy, dev, buf, len, 739 dest, proto, noencrypt); 740 trace_rdev_return_int(&rdev->wiphy, ret); 741 return ret; 742} 743 744static inline int 745rdev_mgmt_tx_cancel_wait(struct cfg80211_registered_device *rdev, 746 struct wireless_dev *wdev, u64 cookie) 747{ 748 int ret; 749 trace_rdev_mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie); 750 ret = rdev->ops->mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie); 751 trace_rdev_return_int(&rdev->wiphy, ret); 752 return ret; 753} 754 755static inline int rdev_set_power_mgmt(struct cfg80211_registered_device *rdev, 756 struct net_device *dev, bool enabled, 757 int timeout) 758{ 759 int ret; 760 trace_rdev_set_power_mgmt(&rdev->wiphy, dev, enabled, timeout); 761 ret = rdev->ops->set_power_mgmt(&rdev->wiphy, dev, enabled, timeout); 762 trace_rdev_return_int(&rdev->wiphy, ret); 763 return ret; 764} 765 766static inline int 767rdev_set_cqm_rssi_config(struct cfg80211_registered_device *rdev, 768 struct net_device *dev, s32 rssi_thold, u32 rssi_hyst) 769{ 770 int ret; 771 trace_rdev_set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold, 772 rssi_hyst); 773 ret = rdev->ops->set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold, 774 rssi_hyst); 775 trace_rdev_return_int(&rdev->wiphy, ret); 776 return ret; 777} 778 779static inline int 780rdev_set_cqm_rssi_range_config(struct cfg80211_registered_device *rdev, 781 struct net_device *dev, s32 low, s32 high) 782{ 783 int ret; 784 trace_rdev_set_cqm_rssi_range_config(&rdev->wiphy, dev, low, high); 785 ret = rdev->ops->set_cqm_rssi_range_config(&rdev->wiphy, dev, 786 low, high); 787 trace_rdev_return_int(&rdev->wiphy, ret); 788 return ret; 789} 790 791static inline int 792rdev_set_cqm_txe_config(struct cfg80211_registered_device *rdev, 793 struct net_device *dev, u32 rate, u32 pkts, u32 intvl) 794{ 795 int ret; 796 trace_rdev_set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts, intvl); 797 ret = rdev->ops->set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts, 798 intvl); 799 trace_rdev_return_int(&rdev->wiphy, ret); 800 return ret; 801} 802 803static inline void 804rdev_mgmt_frame_register(struct cfg80211_registered_device *rdev, 805 struct wireless_dev *wdev, u16 frame_type, bool reg) 806{ 807 might_sleep(); 808 809 trace_rdev_mgmt_frame_register(&rdev->wiphy, wdev , frame_type, reg); 810 rdev->ops->mgmt_frame_register(&rdev->wiphy, wdev , frame_type, reg); 811 trace_rdev_return_void(&rdev->wiphy); 812} 813 814static inline int rdev_set_antenna(struct cfg80211_registered_device *rdev, 815 u32 tx_ant, u32 rx_ant) 816{ 817 int ret; 818 trace_rdev_set_antenna(&rdev->wiphy, tx_ant, rx_ant); 819 ret = rdev->ops->set_antenna(&rdev->wiphy, tx_ant, rx_ant); 820 trace_rdev_return_int(&rdev->wiphy, ret); 821 return ret; 822} 823 824static inline int rdev_get_antenna(struct cfg80211_registered_device *rdev, 825 u32 *tx_ant, u32 *rx_ant) 826{ 827 int ret; 828 trace_rdev_get_antenna(&rdev->wiphy); 829 ret = rdev->ops->get_antenna(&rdev->wiphy, tx_ant, rx_ant); 830 if (ret) 831 trace_rdev_return_int(&rdev->wiphy, ret); 832 else 833 trace_rdev_return_int_tx_rx(&rdev->wiphy, ret, *tx_ant, 834 *rx_ant); 835 return ret; 836} 837 838static inline int 839rdev_sched_scan_start(struct cfg80211_registered_device *rdev, 840 struct net_device *dev, 841 struct cfg80211_sched_scan_request *request) 842{ 843 int ret; 844 trace_rdev_sched_scan_start(&rdev->wiphy, dev, request->reqid); 845 ret = rdev->ops->sched_scan_start(&rdev->wiphy, dev, request); 846 trace_rdev_return_int(&rdev->wiphy, ret); 847 return ret; 848} 849 850static inline int rdev_sched_scan_stop(struct cfg80211_registered_device *rdev, 851 struct net_device *dev, u64 reqid) 852{ 853 int ret; 854 trace_rdev_sched_scan_stop(&rdev->wiphy, dev, reqid); 855 ret = rdev->ops->sched_scan_stop(&rdev->wiphy, dev, reqid); 856 trace_rdev_return_int(&rdev->wiphy, ret); 857 return ret; 858} 859 860static inline int rdev_set_rekey_data(struct cfg80211_registered_device *rdev, 861 struct net_device *dev, 862 struct cfg80211_gtk_rekey_data *data) 863{ 864 int ret; 865 trace_rdev_set_rekey_data(&rdev->wiphy, dev); 866 ret = rdev->ops->set_rekey_data(&rdev->wiphy, dev, data); 867 trace_rdev_return_int(&rdev->wiphy, ret); 868 return ret; 869} 870 871static inline int rdev_tdls_mgmt(struct cfg80211_registered_device *rdev, 872 struct net_device *dev, u8 *peer, 873 u8 action_code, u8 dialog_token, 874 u16 status_code, u32 peer_capability, 875 bool initiator, const u8 *buf, size_t len) 876{ 877 int ret; 878 trace_rdev_tdls_mgmt(&rdev->wiphy, dev, peer, action_code, 879 dialog_token, status_code, peer_capability, 880 initiator, buf, len); 881 ret = rdev->ops->tdls_mgmt(&rdev->wiphy, dev, peer, action_code, 882 dialog_token, status_code, peer_capability, 883 initiator, buf, len); 884 trace_rdev_return_int(&rdev->wiphy, ret); 885 return ret; 886} 887 888static inline int rdev_tdls_oper(struct cfg80211_registered_device *rdev, 889 struct net_device *dev, u8 *peer, 890 enum nl80211_tdls_operation oper) 891{ 892 int ret; 893 trace_rdev_tdls_oper(&rdev->wiphy, dev, peer, oper); 894 ret = rdev->ops->tdls_oper(&rdev->wiphy, dev, peer, oper); 895 trace_rdev_return_int(&rdev->wiphy, ret); 896 return ret; 897} 898 899static inline int rdev_probe_client(struct cfg80211_registered_device *rdev, 900 struct net_device *dev, const u8 *peer, 901 u64 *cookie) 902{ 903 int ret; 904 trace_rdev_probe_client(&rdev->wiphy, dev, peer); 905 ret = rdev->ops->probe_client(&rdev->wiphy, dev, peer, cookie); 906 trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 907 return ret; 908} 909 910static inline int rdev_set_noack_map(struct cfg80211_registered_device *rdev, 911 struct net_device *dev, u16 noack_map) 912{ 913 int ret; 914 trace_rdev_set_noack_map(&rdev->wiphy, dev, noack_map); 915 ret = rdev->ops->set_noack_map(&rdev->wiphy, dev, noack_map); 916 trace_rdev_return_int(&rdev->wiphy, ret); 917 return ret; 918} 919 920static inline int 921rdev_get_channel(struct cfg80211_registered_device *rdev, 922 struct wireless_dev *wdev, 923 struct cfg80211_chan_def *chandef) 924{ 925 int ret; 926 927 trace_rdev_get_channel(&rdev->wiphy, wdev); 928 ret = rdev->ops->get_channel(&rdev->wiphy, wdev, chandef); 929 trace_rdev_return_chandef(&rdev->wiphy, ret, chandef); 930 931 return ret; 932} 933 934static inline int rdev_start_p2p_device(struct cfg80211_registered_device *rdev, 935 struct wireless_dev *wdev) 936{ 937 int ret; 938 939 trace_rdev_start_p2p_device(&rdev->wiphy, wdev); 940 ret = rdev->ops->start_p2p_device(&rdev->wiphy, wdev); 941 trace_rdev_return_int(&rdev->wiphy, ret); 942 return ret; 943} 944 945static inline void rdev_stop_p2p_device(struct cfg80211_registered_device *rdev, 946 struct wireless_dev *wdev) 947{ 948 trace_rdev_stop_p2p_device(&rdev->wiphy, wdev); 949 rdev->ops->stop_p2p_device(&rdev->wiphy, wdev); 950 trace_rdev_return_void(&rdev->wiphy); 951} 952 953static inline int rdev_start_nan(struct cfg80211_registered_device *rdev, 954 struct wireless_dev *wdev, 955 struct cfg80211_nan_conf *conf) 956{ 957 int ret; 958 959 trace_rdev_start_nan(&rdev->wiphy, wdev, conf); 960 ret = rdev->ops->start_nan(&rdev->wiphy, wdev, conf); 961 trace_rdev_return_int(&rdev->wiphy, ret); 962 return ret; 963} 964 965static inline void rdev_stop_nan(struct cfg80211_registered_device *rdev, 966 struct wireless_dev *wdev) 967{ 968 trace_rdev_stop_nan(&rdev->wiphy, wdev); 969 rdev->ops->stop_nan(&rdev->wiphy, wdev); 970 trace_rdev_return_void(&rdev->wiphy); 971} 972 973static inline int 974rdev_add_nan_func(struct cfg80211_registered_device *rdev, 975 struct wireless_dev *wdev, 976 struct cfg80211_nan_func *nan_func) 977{ 978 int ret; 979 980 trace_rdev_add_nan_func(&rdev->wiphy, wdev, nan_func); 981 ret = rdev->ops->add_nan_func(&rdev->wiphy, wdev, nan_func); 982 trace_rdev_return_int(&rdev->wiphy, ret); 983 return ret; 984} 985 986static inline void rdev_del_nan_func(struct cfg80211_registered_device *rdev, 987 struct wireless_dev *wdev, u64 cookie) 988{ 989 trace_rdev_del_nan_func(&rdev->wiphy, wdev, cookie); 990 rdev->ops->del_nan_func(&rdev->wiphy, wdev, cookie); 991 trace_rdev_return_void(&rdev->wiphy); 992} 993 994static inline int 995rdev_nan_change_conf(struct cfg80211_registered_device *rdev, 996 struct wireless_dev *wdev, 997 struct cfg80211_nan_conf *conf, u32 changes) 998{ 999 int ret; 1000 1001 trace_rdev_nan_change_conf(&rdev->wiphy, wdev, conf, changes); 1002 if (rdev->ops->nan_change_conf) 1003 ret = rdev->ops->nan_change_conf(&rdev->wiphy, wdev, conf, 1004 changes); 1005 else 1006 ret = -ENOTSUPP; 1007 trace_rdev_return_int(&rdev->wiphy, ret); 1008 return ret; 1009} 1010 1011static inline int rdev_set_mac_acl(struct cfg80211_registered_device *rdev, 1012 struct net_device *dev, 1013 struct cfg80211_acl_data *params) 1014{ 1015 int ret; 1016 1017 trace_rdev_set_mac_acl(&rdev->wiphy, dev, params); 1018 ret = rdev->ops->set_mac_acl(&rdev->wiphy, dev, params); 1019 trace_rdev_return_int(&rdev->wiphy, ret); 1020 return ret; 1021} 1022 1023static inline int rdev_update_ft_ies(struct cfg80211_registered_device *rdev, 1024 struct net_device *dev, 1025 struct cfg80211_update_ft_ies_params *ftie) 1026{ 1027 int ret; 1028 1029 trace_rdev_update_ft_ies(&rdev->wiphy, dev, ftie); 1030 ret = rdev->ops->update_ft_ies(&rdev->wiphy, dev, ftie); 1031 trace_rdev_return_int(&rdev->wiphy, ret); 1032 return ret; 1033} 1034 1035static inline int rdev_crit_proto_start(struct cfg80211_registered_device *rdev, 1036 struct wireless_dev *wdev, 1037 enum nl80211_crit_proto_id protocol, 1038 u16 duration) 1039{ 1040 int ret; 1041 1042 trace_rdev_crit_proto_start(&rdev->wiphy, wdev, protocol, duration); 1043 ret = rdev->ops->crit_proto_start(&rdev->wiphy, wdev, 1044 protocol, duration); 1045 trace_rdev_return_int(&rdev->wiphy, ret); 1046 return ret; 1047} 1048 1049static inline void rdev_crit_proto_stop(struct cfg80211_registered_device *rdev, 1050 struct wireless_dev *wdev) 1051{ 1052 trace_rdev_crit_proto_stop(&rdev->wiphy, wdev); 1053 rdev->ops->crit_proto_stop(&rdev->wiphy, wdev); 1054 trace_rdev_return_void(&rdev->wiphy); 1055} 1056 1057static inline int rdev_channel_switch(struct cfg80211_registered_device *rdev, 1058 struct net_device *dev, 1059 struct cfg80211_csa_settings *params) 1060{ 1061 int ret; 1062 1063 trace_rdev_channel_switch(&rdev->wiphy, dev, params); 1064 ret = rdev->ops->channel_switch(&rdev->wiphy, dev, params); 1065 trace_rdev_return_int(&rdev->wiphy, ret); 1066 return ret; 1067} 1068 1069static inline int rdev_set_qos_map(struct cfg80211_registered_device *rdev, 1070 struct net_device *dev, 1071 struct cfg80211_qos_map *qos_map) 1072{ 1073 int ret = -EOPNOTSUPP; 1074 1075 if (rdev->ops->set_qos_map) { 1076 trace_rdev_set_qos_map(&rdev->wiphy, dev, qos_map); 1077 ret = rdev->ops->set_qos_map(&rdev->wiphy, dev, qos_map); 1078 trace_rdev_return_int(&rdev->wiphy, ret); 1079 } 1080 1081 return ret; 1082} 1083 1084static inline int 1085rdev_set_ap_chanwidth(struct cfg80211_registered_device *rdev, 1086 struct net_device *dev, struct cfg80211_chan_def *chandef) 1087{ 1088 int ret; 1089 1090 trace_rdev_set_ap_chanwidth(&rdev->wiphy, dev, chandef); 1091 ret = rdev->ops->set_ap_chanwidth(&rdev->wiphy, dev, chandef); 1092 trace_rdev_return_int(&rdev->wiphy, ret); 1093 1094 return ret; 1095} 1096 1097static inline int 1098rdev_add_tx_ts(struct cfg80211_registered_device *rdev, 1099 struct net_device *dev, u8 tsid, const u8 *peer, 1100 u8 user_prio, u16 admitted_time) 1101{ 1102 int ret = -EOPNOTSUPP; 1103 1104 trace_rdev_add_tx_ts(&rdev->wiphy, dev, tsid, peer, 1105 user_prio, admitted_time); 1106 if (rdev->ops->add_tx_ts) 1107 ret = rdev->ops->add_tx_ts(&rdev->wiphy, dev, tsid, peer, 1108 user_prio, admitted_time); 1109 trace_rdev_return_int(&rdev->wiphy, ret); 1110 1111 return ret; 1112} 1113 1114static inline int 1115rdev_del_tx_ts(struct cfg80211_registered_device *rdev, 1116 struct net_device *dev, u8 tsid, const u8 *peer) 1117{ 1118 int ret = -EOPNOTSUPP; 1119 1120 trace_rdev_del_tx_ts(&rdev->wiphy, dev, tsid, peer); 1121 if (rdev->ops->del_tx_ts) 1122 ret = rdev->ops->del_tx_ts(&rdev->wiphy, dev, tsid, peer); 1123 trace_rdev_return_int(&rdev->wiphy, ret); 1124 1125 return ret; 1126} 1127 1128static inline int 1129rdev_tdls_channel_switch(struct cfg80211_registered_device *rdev, 1130 struct net_device *dev, const u8 *addr, 1131 u8 oper_class, struct cfg80211_chan_def *chandef) 1132{ 1133 int ret; 1134 1135 trace_rdev_tdls_channel_switch(&rdev->wiphy, dev, addr, oper_class, 1136 chandef); 1137 ret = rdev->ops->tdls_channel_switch(&rdev->wiphy, dev, addr, 1138 oper_class, chandef); 1139 trace_rdev_return_int(&rdev->wiphy, ret); 1140 return ret; 1141} 1142 1143static inline void 1144rdev_tdls_cancel_channel_switch(struct cfg80211_registered_device *rdev, 1145 struct net_device *dev, const u8 *addr) 1146{ 1147 trace_rdev_tdls_cancel_channel_switch(&rdev->wiphy, dev, addr); 1148 rdev->ops->tdls_cancel_channel_switch(&rdev->wiphy, dev, addr); 1149 trace_rdev_return_void(&rdev->wiphy); 1150} 1151 1152static inline int 1153rdev_start_radar_detection(struct cfg80211_registered_device *rdev, 1154 struct net_device *dev, 1155 struct cfg80211_chan_def *chandef, 1156 u32 cac_time_ms) 1157{ 1158 int ret = -ENOTSUPP; 1159 1160 trace_rdev_start_radar_detection(&rdev->wiphy, dev, chandef, 1161 cac_time_ms); 1162 if (rdev->ops->start_radar_detection) 1163 ret = rdev->ops->start_radar_detection(&rdev->wiphy, dev, 1164 chandef, cac_time_ms); 1165 trace_rdev_return_int(&rdev->wiphy, ret); 1166 return ret; 1167} 1168 1169static inline int 1170rdev_set_mcast_rate(struct cfg80211_registered_device *rdev, 1171 struct net_device *dev, 1172 int mcast_rate[NUM_NL80211_BANDS]) 1173{ 1174 int ret = -ENOTSUPP; 1175 1176 trace_rdev_set_mcast_rate(&rdev->wiphy, dev, mcast_rate); 1177 if (rdev->ops->set_mcast_rate) 1178 ret = rdev->ops->set_mcast_rate(&rdev->wiphy, dev, mcast_rate); 1179 trace_rdev_return_int(&rdev->wiphy, ret); 1180 return ret; 1181} 1182 1183static inline int 1184rdev_set_coalesce(struct cfg80211_registered_device *rdev, 1185 struct cfg80211_coalesce *coalesce) 1186{ 1187 int ret = -ENOTSUPP; 1188 1189 trace_rdev_set_coalesce(&rdev->wiphy, coalesce); 1190 if (rdev->ops->set_coalesce) 1191 ret = rdev->ops->set_coalesce(&rdev->wiphy, coalesce); 1192 trace_rdev_return_int(&rdev->wiphy, ret); 1193 return ret; 1194} 1195 1196static inline int rdev_set_pmk(struct cfg80211_registered_device *rdev, 1197 struct net_device *dev, 1198 struct cfg80211_pmk_conf *pmk_conf) 1199{ 1200 int ret = -EOPNOTSUPP; 1201 1202 trace_rdev_set_pmk(&rdev->wiphy, dev, pmk_conf); 1203 if (rdev->ops->set_pmk) 1204 ret = rdev->ops->set_pmk(&rdev->wiphy, dev, pmk_conf); 1205 trace_rdev_return_int(&rdev->wiphy, ret); 1206 return ret; 1207} 1208 1209static inline int rdev_del_pmk(struct cfg80211_registered_device *rdev, 1210 struct net_device *dev, const u8 *aa) 1211{ 1212 int ret = -EOPNOTSUPP; 1213 1214 trace_rdev_del_pmk(&rdev->wiphy, dev, aa); 1215 if (rdev->ops->del_pmk) 1216 ret = rdev->ops->del_pmk(&rdev->wiphy, dev, aa); 1217 trace_rdev_return_int(&rdev->wiphy, ret); 1218 return ret; 1219} 1220 1221static inline int 1222rdev_external_auth(struct cfg80211_registered_device *rdev, 1223 struct net_device *dev, 1224 struct cfg80211_external_auth_params *params) 1225{ 1226 int ret = -EOPNOTSUPP; 1227 1228 trace_rdev_external_auth(&rdev->wiphy, dev, params); 1229 if (rdev->ops->external_auth) 1230 ret = rdev->ops->external_auth(&rdev->wiphy, dev, params); 1231 trace_rdev_return_int(&rdev->wiphy, ret); 1232 return ret; 1233} 1234 1235static inline int 1236rdev_get_ftm_responder_stats(struct cfg80211_registered_device *rdev, 1237 struct net_device *dev, 1238 struct cfg80211_ftm_responder_stats *ftm_stats) 1239{ 1240 int ret = -EOPNOTSUPP; 1241 1242 trace_rdev_get_ftm_responder_stats(&rdev->wiphy, dev, ftm_stats); 1243 if (rdev->ops->get_ftm_responder_stats) 1244 ret = rdev->ops->get_ftm_responder_stats(&rdev->wiphy, dev, 1245 ftm_stats); 1246 trace_rdev_return_int(&rdev->wiphy, ret); 1247 return ret; 1248} 1249 1250static inline int 1251rdev_start_pmsr(struct cfg80211_registered_device *rdev, 1252 struct wireless_dev *wdev, 1253 struct cfg80211_pmsr_request *request) 1254{ 1255 int ret = -EOPNOTSUPP; 1256 1257 trace_rdev_start_pmsr(&rdev->wiphy, wdev, request->cookie); 1258 if (rdev->ops->start_pmsr) 1259 ret = rdev->ops->start_pmsr(&rdev->wiphy, wdev, request); 1260 trace_rdev_return_int(&rdev->wiphy, ret); 1261 return ret; 1262} 1263 1264static inline void 1265rdev_abort_pmsr(struct cfg80211_registered_device *rdev, 1266 struct wireless_dev *wdev, 1267 struct cfg80211_pmsr_request *request) 1268{ 1269 trace_rdev_abort_pmsr(&rdev->wiphy, wdev, request->cookie); 1270 if (rdev->ops->abort_pmsr) 1271 rdev->ops->abort_pmsr(&rdev->wiphy, wdev, request); 1272 trace_rdev_return_void(&rdev->wiphy); 1273} 1274 1275#endif /* __CFG80211_RDEV_OPS */