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