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