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