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