1 #ifndef __CFG80211_RDEV_OPS 2 #define __CFG80211_RDEV_OPS 3 4 #include <linux/rtnetlink.h> 5 #include <net/cfg80211.h> 6 #include "core.h" 7 #include "trace.h" 8 9 static inline int rdev_suspend(struct cfg80211_registered_device *rdev, 10 struct cfg80211_wowlan *wowlan) 11 { 12 int ret; 13 trace_rdev_suspend(&rdev->wiphy, wowlan); 14 ret = rdev->ops->suspend(&rdev->wiphy, wowlan); 15 trace_rdev_return_int(&rdev->wiphy, ret); 16 return ret; 17 } 18 19 static inline int rdev_resume(struct cfg80211_registered_device *rdev) 20 { 21 int ret; 22 trace_rdev_resume(&rdev->wiphy); 23 ret = rdev->ops->resume(&rdev->wiphy); 24 trace_rdev_return_int(&rdev->wiphy, ret); 25 return ret; 26 } 27 28 static inline void rdev_set_wakeup(struct cfg80211_registered_device *rdev, 29 bool enabled) 30 { 31 trace_rdev_set_wakeup(&rdev->wiphy, enabled); 32 rdev->ops->set_wakeup(&rdev->wiphy, enabled); 33 trace_rdev_return_void(&rdev->wiphy); 34 } 35 36 static inline struct wireless_dev 37 *rdev_add_virtual_intf(struct cfg80211_registered_device *rdev, char *name, 38 unsigned char name_assign_type, 39 enum nl80211_iftype type, 40 struct vif_params *params) 41 { 42 struct wireless_dev *ret; 43 trace_rdev_add_virtual_intf(&rdev->wiphy, name, type); 44 ret = rdev->ops->add_virtual_intf(&rdev->wiphy, name, name_assign_type, 45 type, params); 46 trace_rdev_return_wdev(&rdev->wiphy, ret); 47 return ret; 48 } 49 50 static inline int 51 rdev_del_virtual_intf(struct cfg80211_registered_device *rdev, 52 struct wireless_dev *wdev) 53 { 54 int ret; 55 trace_rdev_del_virtual_intf(&rdev->wiphy, wdev); 56 ret = rdev->ops->del_virtual_intf(&rdev->wiphy, wdev); 57 trace_rdev_return_int(&rdev->wiphy, ret); 58 return ret; 59 } 60 61 static inline int 62 rdev_change_virtual_intf(struct cfg80211_registered_device *rdev, 63 struct net_device *dev, enum nl80211_iftype type, 64 struct vif_params *params) 65 { 66 int ret; 67 trace_rdev_change_virtual_intf(&rdev->wiphy, dev, type); 68 ret = rdev->ops->change_virtual_intf(&rdev->wiphy, dev, type, params); 69 trace_rdev_return_int(&rdev->wiphy, ret); 70 return ret; 71 } 72 73 static inline int rdev_add_key(struct cfg80211_registered_device *rdev, 74 struct net_device *netdev, u8 key_index, 75 bool pairwise, const u8 *mac_addr, 76 struct key_params *params) 77 { 78 int ret; 79 trace_rdev_add_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr); 80 ret = rdev->ops->add_key(&rdev->wiphy, netdev, key_index, pairwise, 81 mac_addr, params); 82 trace_rdev_return_int(&rdev->wiphy, ret); 83 return ret; 84 } 85 86 static inline int 87 rdev_get_key(struct cfg80211_registered_device *rdev, struct net_device *netdev, 88 u8 key_index, bool pairwise, const u8 *mac_addr, void *cookie, 89 void (*callback)(void *cookie, struct key_params*)) 90 { 91 int ret; 92 trace_rdev_get_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr); 93 ret = rdev->ops->get_key(&rdev->wiphy, netdev, key_index, pairwise, 94 mac_addr, cookie, callback); 95 trace_rdev_return_int(&rdev->wiphy, ret); 96 return ret; 97 } 98 99 static inline int rdev_del_key(struct cfg80211_registered_device *rdev, 100 struct net_device *netdev, u8 key_index, 101 bool pairwise, const u8 *mac_addr) 102 { 103 int ret; 104 trace_rdev_del_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr); 105 ret = rdev->ops->del_key(&rdev->wiphy, netdev, key_index, pairwise, 106 mac_addr); 107 trace_rdev_return_int(&rdev->wiphy, ret); 108 return ret; 109 } 110 111 static inline int 112 rdev_set_default_key(struct cfg80211_registered_device *rdev, 113 struct net_device *netdev, u8 key_index, bool unicast, 114 bool multicast) 115 { 116 int ret; 117 trace_rdev_set_default_key(&rdev->wiphy, netdev, key_index, 118 unicast, multicast); 119 ret = rdev->ops->set_default_key(&rdev->wiphy, netdev, key_index, 120 unicast, multicast); 121 trace_rdev_return_int(&rdev->wiphy, ret); 122 return ret; 123 } 124 125 static inline int 126 rdev_set_default_mgmt_key(struct cfg80211_registered_device *rdev, 127 struct net_device *netdev, u8 key_index) 128 { 129 int ret; 130 trace_rdev_set_default_mgmt_key(&rdev->wiphy, netdev, key_index); 131 ret = rdev->ops->set_default_mgmt_key(&rdev->wiphy, netdev, 132 key_index); 133 trace_rdev_return_int(&rdev->wiphy, ret); 134 return ret; 135 } 136 137 static inline int rdev_start_ap(struct cfg80211_registered_device *rdev, 138 struct net_device *dev, 139 struct cfg80211_ap_settings *settings) 140 { 141 int ret; 142 trace_rdev_start_ap(&rdev->wiphy, dev, settings); 143 ret = rdev->ops->start_ap(&rdev->wiphy, dev, settings); 144 trace_rdev_return_int(&rdev->wiphy, ret); 145 return ret; 146 } 147 148 static inline int rdev_change_beacon(struct cfg80211_registered_device *rdev, 149 struct net_device *dev, 150 struct cfg80211_beacon_data *info) 151 { 152 int ret; 153 trace_rdev_change_beacon(&rdev->wiphy, dev, info); 154 ret = rdev->ops->change_beacon(&rdev->wiphy, dev, info); 155 trace_rdev_return_int(&rdev->wiphy, ret); 156 return ret; 157 } 158 159 static inline int rdev_stop_ap(struct cfg80211_registered_device *rdev, 160 struct net_device *dev) 161 { 162 int ret; 163 trace_rdev_stop_ap(&rdev->wiphy, dev); 164 ret = rdev->ops->stop_ap(&rdev->wiphy, dev); 165 trace_rdev_return_int(&rdev->wiphy, ret); 166 return ret; 167 } 168 169 static inline int rdev_add_station(struct cfg80211_registered_device *rdev, 170 struct net_device *dev, u8 *mac, 171 struct station_parameters *params) 172 { 173 int ret; 174 trace_rdev_add_station(&rdev->wiphy, dev, mac, params); 175 ret = rdev->ops->add_station(&rdev->wiphy, dev, mac, params); 176 trace_rdev_return_int(&rdev->wiphy, ret); 177 return ret; 178 } 179 180 static inline int rdev_del_station(struct cfg80211_registered_device *rdev, 181 struct net_device *dev, 182 struct station_del_parameters *params) 183 { 184 int ret; 185 trace_rdev_del_station(&rdev->wiphy, dev, params); 186 ret = rdev->ops->del_station(&rdev->wiphy, dev, params); 187 trace_rdev_return_int(&rdev->wiphy, ret); 188 return ret; 189 } 190 191 static inline int rdev_change_station(struct cfg80211_registered_device *rdev, 192 struct net_device *dev, u8 *mac, 193 struct station_parameters *params) 194 { 195 int ret; 196 trace_rdev_change_station(&rdev->wiphy, dev, mac, params); 197 ret = rdev->ops->change_station(&rdev->wiphy, dev, mac, params); 198 trace_rdev_return_int(&rdev->wiphy, ret); 199 return ret; 200 } 201 202 static inline int rdev_get_station(struct cfg80211_registered_device *rdev, 203 struct net_device *dev, const u8 *mac, 204 struct station_info *sinfo) 205 { 206 int ret; 207 trace_rdev_get_station(&rdev->wiphy, dev, mac); 208 ret = rdev->ops->get_station(&rdev->wiphy, dev, mac, sinfo); 209 trace_rdev_return_int_station_info(&rdev->wiphy, ret, sinfo); 210 return ret; 211 } 212 213 static inline int rdev_dump_station(struct cfg80211_registered_device *rdev, 214 struct net_device *dev, int idx, u8 *mac, 215 struct station_info *sinfo) 216 { 217 int ret; 218 trace_rdev_dump_station(&rdev->wiphy, dev, idx, mac); 219 ret = rdev->ops->dump_station(&rdev->wiphy, dev, idx, mac, sinfo); 220 trace_rdev_return_int_station_info(&rdev->wiphy, ret, sinfo); 221 return ret; 222 } 223 224 static inline int rdev_add_mpath(struct cfg80211_registered_device *rdev, 225 struct net_device *dev, u8 *dst, u8 *next_hop) 226 { 227 int ret; 228 trace_rdev_add_mpath(&rdev->wiphy, dev, dst, next_hop); 229 ret = rdev->ops->add_mpath(&rdev->wiphy, dev, dst, next_hop); 230 trace_rdev_return_int(&rdev->wiphy, ret); 231 return ret; 232 } 233 234 static inline int rdev_del_mpath(struct cfg80211_registered_device *rdev, 235 struct net_device *dev, u8 *dst) 236 { 237 int ret; 238 trace_rdev_del_mpath(&rdev->wiphy, dev, dst); 239 ret = rdev->ops->del_mpath(&rdev->wiphy, dev, dst); 240 trace_rdev_return_int(&rdev->wiphy, ret); 241 return ret; 242 } 243 244 static inline int rdev_change_mpath(struct cfg80211_registered_device *rdev, 245 struct net_device *dev, u8 *dst, 246 u8 *next_hop) 247 { 248 int ret; 249 trace_rdev_change_mpath(&rdev->wiphy, dev, dst, next_hop); 250 ret = rdev->ops->change_mpath(&rdev->wiphy, dev, dst, next_hop); 251 trace_rdev_return_int(&rdev->wiphy, ret); 252 return ret; 253 } 254 255 static inline int rdev_get_mpath(struct cfg80211_registered_device *rdev, 256 struct net_device *dev, u8 *dst, u8 *next_hop, 257 struct mpath_info *pinfo) 258 { 259 int ret; 260 trace_rdev_get_mpath(&rdev->wiphy, dev, dst, next_hop); 261 ret = rdev->ops->get_mpath(&rdev->wiphy, dev, dst, next_hop, pinfo); 262 trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 263 return ret; 264 265 } 266 267 static inline int rdev_get_mpp(struct cfg80211_registered_device *rdev, 268 struct net_device *dev, u8 *dst, u8 *mpp, 269 struct mpath_info *pinfo) 270 { 271 int ret; 272 273 trace_rdev_get_mpp(&rdev->wiphy, dev, dst, mpp); 274 ret = rdev->ops->get_mpp(&rdev->wiphy, dev, dst, mpp, pinfo); 275 trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 276 return ret; 277 } 278 279 static inline int rdev_dump_mpath(struct cfg80211_registered_device *rdev, 280 struct net_device *dev, int idx, u8 *dst, 281 u8 *next_hop, struct mpath_info *pinfo) 282 283 { 284 int ret; 285 trace_rdev_dump_mpath(&rdev->wiphy, dev, idx, dst, next_hop); 286 ret = rdev->ops->dump_mpath(&rdev->wiphy, dev, idx, dst, next_hop, 287 pinfo); 288 trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 289 return ret; 290 } 291 292 static inline int rdev_dump_mpp(struct cfg80211_registered_device *rdev, 293 struct net_device *dev, int idx, u8 *dst, 294 u8 *mpp, struct mpath_info *pinfo) 295 296 { 297 int ret; 298 299 trace_rdev_dump_mpp(&rdev->wiphy, dev, idx, dst, mpp); 300 ret = rdev->ops->dump_mpp(&rdev->wiphy, dev, idx, dst, mpp, pinfo); 301 trace_rdev_return_int_mpath_info(&rdev->wiphy, ret, pinfo); 302 return ret; 303 } 304 305 static inline int 306 rdev_get_mesh_config(struct cfg80211_registered_device *rdev, 307 struct net_device *dev, struct mesh_config *conf) 308 { 309 int ret; 310 trace_rdev_get_mesh_config(&rdev->wiphy, dev); 311 ret = rdev->ops->get_mesh_config(&rdev->wiphy, dev, conf); 312 trace_rdev_return_int_mesh_config(&rdev->wiphy, ret, conf); 313 return ret; 314 } 315 316 static inline int 317 rdev_update_mesh_config(struct cfg80211_registered_device *rdev, 318 struct net_device *dev, u32 mask, 319 const struct mesh_config *nconf) 320 { 321 int ret; 322 trace_rdev_update_mesh_config(&rdev->wiphy, dev, mask, nconf); 323 ret = rdev->ops->update_mesh_config(&rdev->wiphy, dev, mask, nconf); 324 trace_rdev_return_int(&rdev->wiphy, ret); 325 return ret; 326 } 327 328 static inline int rdev_join_mesh(struct cfg80211_registered_device *rdev, 329 struct net_device *dev, 330 const struct mesh_config *conf, 331 const struct mesh_setup *setup) 332 { 333 int ret; 334 trace_rdev_join_mesh(&rdev->wiphy, dev, conf, setup); 335 ret = rdev->ops->join_mesh(&rdev->wiphy, dev, conf, setup); 336 trace_rdev_return_int(&rdev->wiphy, ret); 337 return ret; 338 } 339 340 341 static inline int rdev_leave_mesh(struct cfg80211_registered_device *rdev, 342 struct net_device *dev) 343 { 344 int ret; 345 trace_rdev_leave_mesh(&rdev->wiphy, dev); 346 ret = rdev->ops->leave_mesh(&rdev->wiphy, dev); 347 trace_rdev_return_int(&rdev->wiphy, ret); 348 return ret; 349 } 350 351 static inline int rdev_join_ocb(struct cfg80211_registered_device *rdev, 352 struct net_device *dev, 353 struct ocb_setup *setup) 354 { 355 int ret; 356 trace_rdev_join_ocb(&rdev->wiphy, dev, setup); 357 ret = rdev->ops->join_ocb(&rdev->wiphy, dev, setup); 358 trace_rdev_return_int(&rdev->wiphy, ret); 359 return ret; 360 } 361 362 static inline int rdev_leave_ocb(struct cfg80211_registered_device *rdev, 363 struct net_device *dev) 364 { 365 int ret; 366 trace_rdev_leave_ocb(&rdev->wiphy, dev); 367 ret = rdev->ops->leave_ocb(&rdev->wiphy, dev); 368 trace_rdev_return_int(&rdev->wiphy, ret); 369 return ret; 370 } 371 372 static inline int rdev_change_bss(struct cfg80211_registered_device *rdev, 373 struct net_device *dev, 374 struct bss_parameters *params) 375 376 { 377 int ret; 378 trace_rdev_change_bss(&rdev->wiphy, dev, params); 379 ret = rdev->ops->change_bss(&rdev->wiphy, dev, params); 380 trace_rdev_return_int(&rdev->wiphy, ret); 381 return ret; 382 } 383 384 static inline int rdev_set_txq_params(struct cfg80211_registered_device *rdev, 385 struct net_device *dev, 386 struct ieee80211_txq_params *params) 387 388 { 389 int ret; 390 trace_rdev_set_txq_params(&rdev->wiphy, dev, params); 391 ret = rdev->ops->set_txq_params(&rdev->wiphy, dev, params); 392 trace_rdev_return_int(&rdev->wiphy, ret); 393 return ret; 394 } 395 396 static inline int 397 rdev_libertas_set_mesh_channel(struct cfg80211_registered_device *rdev, 398 struct net_device *dev, 399 struct ieee80211_channel *chan) 400 { 401 int ret; 402 trace_rdev_libertas_set_mesh_channel(&rdev->wiphy, dev, chan); 403 ret = rdev->ops->libertas_set_mesh_channel(&rdev->wiphy, dev, chan); 404 trace_rdev_return_int(&rdev->wiphy, ret); 405 return ret; 406 } 407 408 static inline int 409 rdev_set_monitor_channel(struct cfg80211_registered_device *rdev, 410 struct cfg80211_chan_def *chandef) 411 { 412 int ret; 413 trace_rdev_set_monitor_channel(&rdev->wiphy, chandef); 414 ret = rdev->ops->set_monitor_channel(&rdev->wiphy, chandef); 415 trace_rdev_return_int(&rdev->wiphy, ret); 416 return ret; 417 } 418 419 static inline int rdev_scan(struct cfg80211_registered_device *rdev, 420 struct cfg80211_scan_request *request) 421 { 422 int ret; 423 trace_rdev_scan(&rdev->wiphy, request); 424 ret = rdev->ops->scan(&rdev->wiphy, request); 425 trace_rdev_return_int(&rdev->wiphy, ret); 426 return ret; 427 } 428 429 static inline void rdev_abort_scan(struct cfg80211_registered_device *rdev, 430 struct wireless_dev *wdev) 431 { 432 trace_rdev_abort_scan(&rdev->wiphy, wdev); 433 rdev->ops->abort_scan(&rdev->wiphy, wdev); 434 trace_rdev_return_void(&rdev->wiphy); 435 } 436 437 static inline int rdev_auth(struct cfg80211_registered_device *rdev, 438 struct net_device *dev, 439 struct cfg80211_auth_request *req) 440 { 441 int ret; 442 trace_rdev_auth(&rdev->wiphy, dev, req); 443 ret = rdev->ops->auth(&rdev->wiphy, dev, req); 444 trace_rdev_return_int(&rdev->wiphy, ret); 445 return ret; 446 } 447 448 static inline int rdev_assoc(struct cfg80211_registered_device *rdev, 449 struct net_device *dev, 450 struct cfg80211_assoc_request *req) 451 { 452 int ret; 453 trace_rdev_assoc(&rdev->wiphy, dev, req); 454 ret = rdev->ops->assoc(&rdev->wiphy, dev, req); 455 trace_rdev_return_int(&rdev->wiphy, ret); 456 return ret; 457 } 458 459 static inline int rdev_deauth(struct cfg80211_registered_device *rdev, 460 struct net_device *dev, 461 struct cfg80211_deauth_request *req) 462 { 463 int ret; 464 trace_rdev_deauth(&rdev->wiphy, dev, req); 465 ret = rdev->ops->deauth(&rdev->wiphy, dev, req); 466 trace_rdev_return_int(&rdev->wiphy, ret); 467 return ret; 468 } 469 470 static inline int rdev_disassoc(struct cfg80211_registered_device *rdev, 471 struct net_device *dev, 472 struct cfg80211_disassoc_request *req) 473 { 474 int ret; 475 trace_rdev_disassoc(&rdev->wiphy, dev, req); 476 ret = rdev->ops->disassoc(&rdev->wiphy, dev, req); 477 trace_rdev_return_int(&rdev->wiphy, ret); 478 return ret; 479 } 480 481 static inline int rdev_connect(struct cfg80211_registered_device *rdev, 482 struct net_device *dev, 483 struct cfg80211_connect_params *sme) 484 { 485 int ret; 486 trace_rdev_connect(&rdev->wiphy, dev, sme); 487 ret = rdev->ops->connect(&rdev->wiphy, dev, sme); 488 trace_rdev_return_int(&rdev->wiphy, ret); 489 return ret; 490 } 491 492 static inline int 493 rdev_update_connect_params(struct cfg80211_registered_device *rdev, 494 struct net_device *dev, 495 struct cfg80211_connect_params *sme, u32 changed) 496 { 497 int ret; 498 trace_rdev_update_connect_params(&rdev->wiphy, dev, sme, changed); 499 ret = rdev->ops->update_connect_params(&rdev->wiphy, dev, sme, changed); 500 trace_rdev_return_int(&rdev->wiphy, ret); 501 return ret; 502 } 503 504 static inline int rdev_disconnect(struct cfg80211_registered_device *rdev, 505 struct net_device *dev, u16 reason_code) 506 { 507 int ret; 508 trace_rdev_disconnect(&rdev->wiphy, dev, reason_code); 509 ret = rdev->ops->disconnect(&rdev->wiphy, dev, reason_code); 510 trace_rdev_return_int(&rdev->wiphy, ret); 511 return ret; 512 } 513 514 static inline int rdev_join_ibss(struct cfg80211_registered_device *rdev, 515 struct net_device *dev, 516 struct cfg80211_ibss_params *params) 517 { 518 int ret; 519 trace_rdev_join_ibss(&rdev->wiphy, dev, params); 520 ret = rdev->ops->join_ibss(&rdev->wiphy, dev, params); 521 trace_rdev_return_int(&rdev->wiphy, ret); 522 return ret; 523 } 524 525 static inline int rdev_leave_ibss(struct cfg80211_registered_device *rdev, 526 struct net_device *dev) 527 { 528 int ret; 529 trace_rdev_leave_ibss(&rdev->wiphy, dev); 530 ret = rdev->ops->leave_ibss(&rdev->wiphy, dev); 531 trace_rdev_return_int(&rdev->wiphy, ret); 532 return ret; 533 } 534 535 static inline int 536 rdev_set_wiphy_params(struct cfg80211_registered_device *rdev, u32 changed) 537 { 538 int ret; 539 trace_rdev_set_wiphy_params(&rdev->wiphy, changed); 540 ret = rdev->ops->set_wiphy_params(&rdev->wiphy, changed); 541 trace_rdev_return_int(&rdev->wiphy, ret); 542 return ret; 543 } 544 545 static inline int rdev_set_tx_power(struct cfg80211_registered_device *rdev, 546 struct wireless_dev *wdev, 547 enum nl80211_tx_power_setting type, int mbm) 548 { 549 int ret; 550 trace_rdev_set_tx_power(&rdev->wiphy, wdev, type, mbm); 551 ret = rdev->ops->set_tx_power(&rdev->wiphy, wdev, type, mbm); 552 trace_rdev_return_int(&rdev->wiphy, ret); 553 return ret; 554 } 555 556 static inline int rdev_get_tx_power(struct cfg80211_registered_device *rdev, 557 struct wireless_dev *wdev, int *dbm) 558 { 559 int ret; 560 trace_rdev_get_tx_power(&rdev->wiphy, wdev); 561 ret = rdev->ops->get_tx_power(&rdev->wiphy, wdev, dbm); 562 trace_rdev_return_int_int(&rdev->wiphy, ret, *dbm); 563 return ret; 564 } 565 566 static inline int rdev_set_wds_peer(struct cfg80211_registered_device *rdev, 567 struct net_device *dev, const u8 *addr) 568 { 569 int ret; 570 trace_rdev_set_wds_peer(&rdev->wiphy, dev, addr); 571 ret = rdev->ops->set_wds_peer(&rdev->wiphy, dev, addr); 572 trace_rdev_return_int(&rdev->wiphy, ret); 573 return ret; 574 } 575 576 static inline int 577 rdev_set_multicast_to_unicast(struct cfg80211_registered_device *rdev, 578 struct net_device *dev, 579 const bool enabled) 580 { 581 int ret; 582 trace_rdev_set_multicast_to_unicast(&rdev->wiphy, dev, enabled); 583 ret = rdev->ops->set_multicast_to_unicast(&rdev->wiphy, dev, enabled); 584 trace_rdev_return_int(&rdev->wiphy, ret); 585 return ret; 586 } 587 588 static inline void rdev_rfkill_poll(struct cfg80211_registered_device *rdev) 589 { 590 trace_rdev_rfkill_poll(&rdev->wiphy); 591 rdev->ops->rfkill_poll(&rdev->wiphy); 592 trace_rdev_return_void(&rdev->wiphy); 593 } 594 595 596 #ifdef CONFIG_NL80211_TESTMODE 597 static inline int rdev_testmode_cmd(struct cfg80211_registered_device *rdev, 598 struct wireless_dev *wdev, 599 void *data, int len) 600 { 601 int ret; 602 trace_rdev_testmode_cmd(&rdev->wiphy, wdev); 603 ret = rdev->ops->testmode_cmd(&rdev->wiphy, wdev, data, len); 604 trace_rdev_return_int(&rdev->wiphy, ret); 605 return ret; 606 } 607 608 static inline int rdev_testmode_dump(struct cfg80211_registered_device *rdev, 609 struct sk_buff *skb, 610 struct netlink_callback *cb, void *data, 611 int len) 612 { 613 int ret; 614 trace_rdev_testmode_dump(&rdev->wiphy); 615 ret = rdev->ops->testmode_dump(&rdev->wiphy, skb, cb, data, len); 616 trace_rdev_return_int(&rdev->wiphy, ret); 617 return ret; 618 } 619 #endif 620 621 static inline int 622 rdev_set_bitrate_mask(struct cfg80211_registered_device *rdev, 623 struct net_device *dev, const u8 *peer, 624 const struct cfg80211_bitrate_mask *mask) 625 { 626 int ret; 627 trace_rdev_set_bitrate_mask(&rdev->wiphy, dev, peer, mask); 628 ret = rdev->ops->set_bitrate_mask(&rdev->wiphy, dev, peer, mask); 629 trace_rdev_return_int(&rdev->wiphy, ret); 630 return ret; 631 } 632 633 static inline int rdev_dump_survey(struct cfg80211_registered_device *rdev, 634 struct net_device *netdev, int idx, 635 struct survey_info *info) 636 { 637 int ret; 638 trace_rdev_dump_survey(&rdev->wiphy, netdev, idx); 639 ret = rdev->ops->dump_survey(&rdev->wiphy, netdev, idx, info); 640 if (ret < 0) 641 trace_rdev_return_int(&rdev->wiphy, ret); 642 else 643 trace_rdev_return_int_survey_info(&rdev->wiphy, ret, info); 644 return ret; 645 } 646 647 static inline int rdev_set_pmksa(struct cfg80211_registered_device *rdev, 648 struct net_device *netdev, 649 struct cfg80211_pmksa *pmksa) 650 { 651 int ret; 652 trace_rdev_set_pmksa(&rdev->wiphy, netdev, pmksa); 653 ret = rdev->ops->set_pmksa(&rdev->wiphy, netdev, pmksa); 654 trace_rdev_return_int(&rdev->wiphy, ret); 655 return ret; 656 } 657 658 static inline int rdev_del_pmksa(struct cfg80211_registered_device *rdev, 659 struct net_device *netdev, 660 struct cfg80211_pmksa *pmksa) 661 { 662 int ret; 663 trace_rdev_del_pmksa(&rdev->wiphy, netdev, pmksa); 664 ret = rdev->ops->del_pmksa(&rdev->wiphy, netdev, pmksa); 665 trace_rdev_return_int(&rdev->wiphy, ret); 666 return ret; 667 } 668 669 static inline int rdev_flush_pmksa(struct cfg80211_registered_device *rdev, 670 struct net_device *netdev) 671 { 672 int ret; 673 trace_rdev_flush_pmksa(&rdev->wiphy, netdev); 674 ret = rdev->ops->flush_pmksa(&rdev->wiphy, netdev); 675 trace_rdev_return_int(&rdev->wiphy, ret); 676 return ret; 677 } 678 679 static inline int 680 rdev_remain_on_channel(struct cfg80211_registered_device *rdev, 681 struct wireless_dev *wdev, 682 struct ieee80211_channel *chan, 683 unsigned int duration, u64 *cookie) 684 { 685 int ret; 686 trace_rdev_remain_on_channel(&rdev->wiphy, wdev, chan, duration); 687 ret = rdev->ops->remain_on_channel(&rdev->wiphy, wdev, chan, 688 duration, cookie); 689 trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 690 return ret; 691 } 692 693 static inline int 694 rdev_cancel_remain_on_channel(struct cfg80211_registered_device *rdev, 695 struct wireless_dev *wdev, u64 cookie) 696 { 697 int ret; 698 trace_rdev_cancel_remain_on_channel(&rdev->wiphy, wdev, cookie); 699 ret = rdev->ops->cancel_remain_on_channel(&rdev->wiphy, wdev, cookie); 700 trace_rdev_return_int(&rdev->wiphy, ret); 701 return ret; 702 } 703 704 static inline int rdev_mgmt_tx(struct cfg80211_registered_device *rdev, 705 struct wireless_dev *wdev, 706 struct cfg80211_mgmt_tx_params *params, 707 u64 *cookie) 708 { 709 int ret; 710 trace_rdev_mgmt_tx(&rdev->wiphy, wdev, params); 711 ret = rdev->ops->mgmt_tx(&rdev->wiphy, wdev, params, cookie); 712 trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 713 return ret; 714 } 715 716 static inline int 717 rdev_mgmt_tx_cancel_wait(struct cfg80211_registered_device *rdev, 718 struct wireless_dev *wdev, u64 cookie) 719 { 720 int ret; 721 trace_rdev_mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie); 722 ret = rdev->ops->mgmt_tx_cancel_wait(&rdev->wiphy, wdev, cookie); 723 trace_rdev_return_int(&rdev->wiphy, ret); 724 return ret; 725 } 726 727 static inline int rdev_set_power_mgmt(struct cfg80211_registered_device *rdev, 728 struct net_device *dev, bool enabled, 729 int timeout) 730 { 731 int ret; 732 trace_rdev_set_power_mgmt(&rdev->wiphy, dev, enabled, timeout); 733 ret = rdev->ops->set_power_mgmt(&rdev->wiphy, dev, enabled, timeout); 734 trace_rdev_return_int(&rdev->wiphy, ret); 735 return ret; 736 } 737 738 static inline int 739 rdev_set_cqm_rssi_config(struct cfg80211_registered_device *rdev, 740 struct net_device *dev, s32 rssi_thold, u32 rssi_hyst) 741 { 742 int ret; 743 trace_rdev_set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold, 744 rssi_hyst); 745 ret = rdev->ops->set_cqm_rssi_config(&rdev->wiphy, dev, rssi_thold, 746 rssi_hyst); 747 trace_rdev_return_int(&rdev->wiphy, ret); 748 return ret; 749 } 750 751 static inline int 752 rdev_set_cqm_rssi_range_config(struct cfg80211_registered_device *rdev, 753 struct net_device *dev, s32 low, s32 high) 754 { 755 int ret; 756 trace_rdev_set_cqm_rssi_range_config(&rdev->wiphy, dev, low, high); 757 ret = rdev->ops->set_cqm_rssi_range_config(&rdev->wiphy, dev, 758 low, high); 759 trace_rdev_return_int(&rdev->wiphy, ret); 760 return ret; 761 } 762 763 static inline int 764 rdev_set_cqm_txe_config(struct cfg80211_registered_device *rdev, 765 struct net_device *dev, u32 rate, u32 pkts, u32 intvl) 766 { 767 int ret; 768 trace_rdev_set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts, intvl); 769 ret = rdev->ops->set_cqm_txe_config(&rdev->wiphy, dev, rate, pkts, 770 intvl); 771 trace_rdev_return_int(&rdev->wiphy, ret); 772 return ret; 773 } 774 775 static inline void 776 rdev_mgmt_frame_register(struct cfg80211_registered_device *rdev, 777 struct wireless_dev *wdev, u16 frame_type, bool reg) 778 { 779 might_sleep(); 780 781 trace_rdev_mgmt_frame_register(&rdev->wiphy, wdev , frame_type, reg); 782 rdev->ops->mgmt_frame_register(&rdev->wiphy, wdev , frame_type, reg); 783 trace_rdev_return_void(&rdev->wiphy); 784 } 785 786 static inline int rdev_set_antenna(struct cfg80211_registered_device *rdev, 787 u32 tx_ant, u32 rx_ant) 788 { 789 int ret; 790 trace_rdev_set_antenna(&rdev->wiphy, tx_ant, rx_ant); 791 ret = rdev->ops->set_antenna(&rdev->wiphy, tx_ant, rx_ant); 792 trace_rdev_return_int(&rdev->wiphy, ret); 793 return ret; 794 } 795 796 static inline int rdev_get_antenna(struct cfg80211_registered_device *rdev, 797 u32 *tx_ant, u32 *rx_ant) 798 { 799 int ret; 800 trace_rdev_get_antenna(&rdev->wiphy); 801 ret = rdev->ops->get_antenna(&rdev->wiphy, tx_ant, rx_ant); 802 if (ret) 803 trace_rdev_return_int(&rdev->wiphy, ret); 804 else 805 trace_rdev_return_int_tx_rx(&rdev->wiphy, ret, *tx_ant, 806 *rx_ant); 807 return ret; 808 } 809 810 static inline int 811 rdev_sched_scan_start(struct cfg80211_registered_device *rdev, 812 struct net_device *dev, 813 struct cfg80211_sched_scan_request *request) 814 { 815 int ret; 816 trace_rdev_sched_scan_start(&rdev->wiphy, dev, request->reqid); 817 ret = rdev->ops->sched_scan_start(&rdev->wiphy, dev, request); 818 trace_rdev_return_int(&rdev->wiphy, ret); 819 return ret; 820 } 821 822 static inline int rdev_sched_scan_stop(struct cfg80211_registered_device *rdev, 823 struct net_device *dev, u64 reqid) 824 { 825 int ret; 826 trace_rdev_sched_scan_stop(&rdev->wiphy, dev, reqid); 827 ret = rdev->ops->sched_scan_stop(&rdev->wiphy, dev, reqid); 828 trace_rdev_return_int(&rdev->wiphy, ret); 829 return ret; 830 } 831 832 static inline int rdev_set_rekey_data(struct cfg80211_registered_device *rdev, 833 struct net_device *dev, 834 struct cfg80211_gtk_rekey_data *data) 835 { 836 int ret; 837 trace_rdev_set_rekey_data(&rdev->wiphy, dev); 838 ret = rdev->ops->set_rekey_data(&rdev->wiphy, dev, data); 839 trace_rdev_return_int(&rdev->wiphy, ret); 840 return ret; 841 } 842 843 static inline int rdev_tdls_mgmt(struct cfg80211_registered_device *rdev, 844 struct net_device *dev, u8 *peer, 845 u8 action_code, u8 dialog_token, 846 u16 status_code, u32 peer_capability, 847 bool initiator, const u8 *buf, size_t len) 848 { 849 int ret; 850 trace_rdev_tdls_mgmt(&rdev->wiphy, dev, peer, action_code, 851 dialog_token, status_code, peer_capability, 852 initiator, buf, len); 853 ret = rdev->ops->tdls_mgmt(&rdev->wiphy, dev, peer, action_code, 854 dialog_token, status_code, peer_capability, 855 initiator, buf, len); 856 trace_rdev_return_int(&rdev->wiphy, ret); 857 return ret; 858 } 859 860 static inline int rdev_tdls_oper(struct cfg80211_registered_device *rdev, 861 struct net_device *dev, u8 *peer, 862 enum nl80211_tdls_operation oper) 863 { 864 int ret; 865 trace_rdev_tdls_oper(&rdev->wiphy, dev, peer, oper); 866 ret = rdev->ops->tdls_oper(&rdev->wiphy, dev, peer, oper); 867 trace_rdev_return_int(&rdev->wiphy, ret); 868 return ret; 869 } 870 871 static inline int rdev_probe_client(struct cfg80211_registered_device *rdev, 872 struct net_device *dev, const u8 *peer, 873 u64 *cookie) 874 { 875 int ret; 876 trace_rdev_probe_client(&rdev->wiphy, dev, peer); 877 ret = rdev->ops->probe_client(&rdev->wiphy, dev, peer, cookie); 878 trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie); 879 return ret; 880 } 881 882 static inline int rdev_set_noack_map(struct cfg80211_registered_device *rdev, 883 struct net_device *dev, u16 noack_map) 884 { 885 int ret; 886 trace_rdev_set_noack_map(&rdev->wiphy, dev, noack_map); 887 ret = rdev->ops->set_noack_map(&rdev->wiphy, dev, noack_map); 888 trace_rdev_return_int(&rdev->wiphy, ret); 889 return ret; 890 } 891 892 static inline int 893 rdev_get_channel(struct cfg80211_registered_device *rdev, 894 struct wireless_dev *wdev, 895 struct cfg80211_chan_def *chandef) 896 { 897 int ret; 898 899 trace_rdev_get_channel(&rdev->wiphy, wdev); 900 ret = rdev->ops->get_channel(&rdev->wiphy, wdev, chandef); 901 trace_rdev_return_chandef(&rdev->wiphy, ret, chandef); 902 903 return ret; 904 } 905 906 static inline int rdev_start_p2p_device(struct cfg80211_registered_device *rdev, 907 struct wireless_dev *wdev) 908 { 909 int ret; 910 911 trace_rdev_start_p2p_device(&rdev->wiphy, wdev); 912 ret = rdev->ops->start_p2p_device(&rdev->wiphy, wdev); 913 trace_rdev_return_int(&rdev->wiphy, ret); 914 return ret; 915 } 916 917 static inline void rdev_stop_p2p_device(struct cfg80211_registered_device *rdev, 918 struct wireless_dev *wdev) 919 { 920 trace_rdev_stop_p2p_device(&rdev->wiphy, wdev); 921 rdev->ops->stop_p2p_device(&rdev->wiphy, wdev); 922 trace_rdev_return_void(&rdev->wiphy); 923 } 924 925 static inline int rdev_start_nan(struct cfg80211_registered_device *rdev, 926 struct wireless_dev *wdev, 927 struct cfg80211_nan_conf *conf) 928 { 929 int ret; 930 931 trace_rdev_start_nan(&rdev->wiphy, wdev, conf); 932 ret = rdev->ops->start_nan(&rdev->wiphy, wdev, conf); 933 trace_rdev_return_int(&rdev->wiphy, ret); 934 return ret; 935 } 936 937 static inline void rdev_stop_nan(struct cfg80211_registered_device *rdev, 938 struct wireless_dev *wdev) 939 { 940 trace_rdev_stop_nan(&rdev->wiphy, wdev); 941 rdev->ops->stop_nan(&rdev->wiphy, wdev); 942 trace_rdev_return_void(&rdev->wiphy); 943 } 944 945 static inline int 946 rdev_add_nan_func(struct cfg80211_registered_device *rdev, 947 struct wireless_dev *wdev, 948 struct cfg80211_nan_func *nan_func) 949 { 950 int ret; 951 952 trace_rdev_add_nan_func(&rdev->wiphy, wdev, nan_func); 953 ret = rdev->ops->add_nan_func(&rdev->wiphy, wdev, nan_func); 954 trace_rdev_return_int(&rdev->wiphy, ret); 955 return ret; 956 } 957 958 static inline void rdev_del_nan_func(struct cfg80211_registered_device *rdev, 959 struct wireless_dev *wdev, u64 cookie) 960 { 961 trace_rdev_del_nan_func(&rdev->wiphy, wdev, cookie); 962 rdev->ops->del_nan_func(&rdev->wiphy, wdev, cookie); 963 trace_rdev_return_void(&rdev->wiphy); 964 } 965 966 static inline int 967 rdev_nan_change_conf(struct cfg80211_registered_device *rdev, 968 struct wireless_dev *wdev, 969 struct cfg80211_nan_conf *conf, u32 changes) 970 { 971 int ret; 972 973 trace_rdev_nan_change_conf(&rdev->wiphy, wdev, conf, changes); 974 if (rdev->ops->nan_change_conf) 975 ret = rdev->ops->nan_change_conf(&rdev->wiphy, wdev, conf, 976 changes); 977 else 978 ret = -ENOTSUPP; 979 trace_rdev_return_int(&rdev->wiphy, ret); 980 return ret; 981 } 982 983 static inline int rdev_set_mac_acl(struct cfg80211_registered_device *rdev, 984 struct net_device *dev, 985 struct cfg80211_acl_data *params) 986 { 987 int ret; 988 989 trace_rdev_set_mac_acl(&rdev->wiphy, dev, params); 990 ret = rdev->ops->set_mac_acl(&rdev->wiphy, dev, params); 991 trace_rdev_return_int(&rdev->wiphy, ret); 992 return ret; 993 } 994 995 static inline int rdev_update_ft_ies(struct cfg80211_registered_device *rdev, 996 struct net_device *dev, 997 struct cfg80211_update_ft_ies_params *ftie) 998 { 999 int ret; 1000 1001 trace_rdev_update_ft_ies(&rdev->wiphy, dev, ftie); 1002 ret = rdev->ops->update_ft_ies(&rdev->wiphy, dev, ftie); 1003 trace_rdev_return_int(&rdev->wiphy, ret); 1004 return ret; 1005 } 1006 1007 static inline int rdev_crit_proto_start(struct cfg80211_registered_device *rdev, 1008 struct wireless_dev *wdev, 1009 enum nl80211_crit_proto_id protocol, 1010 u16 duration) 1011 { 1012 int ret; 1013 1014 trace_rdev_crit_proto_start(&rdev->wiphy, wdev, protocol, duration); 1015 ret = rdev->ops->crit_proto_start(&rdev->wiphy, wdev, 1016 protocol, duration); 1017 trace_rdev_return_int(&rdev->wiphy, ret); 1018 return ret; 1019 } 1020 1021 static inline void rdev_crit_proto_stop(struct cfg80211_registered_device *rdev, 1022 struct wireless_dev *wdev) 1023 { 1024 trace_rdev_crit_proto_stop(&rdev->wiphy, wdev); 1025 rdev->ops->crit_proto_stop(&rdev->wiphy, wdev); 1026 trace_rdev_return_void(&rdev->wiphy); 1027 } 1028 1029 static inline int rdev_channel_switch(struct cfg80211_registered_device *rdev, 1030 struct net_device *dev, 1031 struct cfg80211_csa_settings *params) 1032 { 1033 int ret; 1034 1035 trace_rdev_channel_switch(&rdev->wiphy, dev, params); 1036 ret = rdev->ops->channel_switch(&rdev->wiphy, dev, params); 1037 trace_rdev_return_int(&rdev->wiphy, ret); 1038 return ret; 1039 } 1040 1041 static inline int rdev_set_qos_map(struct cfg80211_registered_device *rdev, 1042 struct net_device *dev, 1043 struct cfg80211_qos_map *qos_map) 1044 { 1045 int ret = -EOPNOTSUPP; 1046 1047 if (rdev->ops->set_qos_map) { 1048 trace_rdev_set_qos_map(&rdev->wiphy, dev, qos_map); 1049 ret = rdev->ops->set_qos_map(&rdev->wiphy, dev, qos_map); 1050 trace_rdev_return_int(&rdev->wiphy, ret); 1051 } 1052 1053 return ret; 1054 } 1055 1056 static inline int 1057 rdev_set_ap_chanwidth(struct cfg80211_registered_device *rdev, 1058 struct net_device *dev, struct cfg80211_chan_def *chandef) 1059 { 1060 int ret; 1061 1062 trace_rdev_set_ap_chanwidth(&rdev->wiphy, dev, chandef); 1063 ret = rdev->ops->set_ap_chanwidth(&rdev->wiphy, dev, chandef); 1064 trace_rdev_return_int(&rdev->wiphy, ret); 1065 1066 return ret; 1067 } 1068 1069 static inline int 1070 rdev_add_tx_ts(struct cfg80211_registered_device *rdev, 1071 struct net_device *dev, u8 tsid, const u8 *peer, 1072 u8 user_prio, u16 admitted_time) 1073 { 1074 int ret = -EOPNOTSUPP; 1075 1076 trace_rdev_add_tx_ts(&rdev->wiphy, dev, tsid, peer, 1077 user_prio, admitted_time); 1078 if (rdev->ops->add_tx_ts) 1079 ret = rdev->ops->add_tx_ts(&rdev->wiphy, dev, tsid, peer, 1080 user_prio, admitted_time); 1081 trace_rdev_return_int(&rdev->wiphy, ret); 1082 1083 return ret; 1084 } 1085 1086 static inline int 1087 rdev_del_tx_ts(struct cfg80211_registered_device *rdev, 1088 struct net_device *dev, u8 tsid, const u8 *peer) 1089 { 1090 int ret = -EOPNOTSUPP; 1091 1092 trace_rdev_del_tx_ts(&rdev->wiphy, dev, tsid, peer); 1093 if (rdev->ops->del_tx_ts) 1094 ret = rdev->ops->del_tx_ts(&rdev->wiphy, dev, tsid, peer); 1095 trace_rdev_return_int(&rdev->wiphy, ret); 1096 1097 return ret; 1098 } 1099 1100 static inline int 1101 rdev_tdls_channel_switch(struct cfg80211_registered_device *rdev, 1102 struct net_device *dev, const u8 *addr, 1103 u8 oper_class, struct cfg80211_chan_def *chandef) 1104 { 1105 int ret; 1106 1107 trace_rdev_tdls_channel_switch(&rdev->wiphy, dev, addr, oper_class, 1108 chandef); 1109 ret = rdev->ops->tdls_channel_switch(&rdev->wiphy, dev, addr, 1110 oper_class, chandef); 1111 trace_rdev_return_int(&rdev->wiphy, ret); 1112 return ret; 1113 } 1114 1115 static inline void 1116 rdev_tdls_cancel_channel_switch(struct cfg80211_registered_device *rdev, 1117 struct net_device *dev, const u8 *addr) 1118 { 1119 trace_rdev_tdls_cancel_channel_switch(&rdev->wiphy, dev, addr); 1120 rdev->ops->tdls_cancel_channel_switch(&rdev->wiphy, dev, addr); 1121 trace_rdev_return_void(&rdev->wiphy); 1122 } 1123 1124 static inline int 1125 rdev_start_radar_detection(struct cfg80211_registered_device *rdev, 1126 struct net_device *dev, 1127 struct cfg80211_chan_def *chandef, 1128 u32 cac_time_ms) 1129 { 1130 int ret = -ENOTSUPP; 1131 1132 trace_rdev_start_radar_detection(&rdev->wiphy, dev, chandef, 1133 cac_time_ms); 1134 if (rdev->ops->start_radar_detection) 1135 ret = rdev->ops->start_radar_detection(&rdev->wiphy, dev, 1136 chandef, cac_time_ms); 1137 trace_rdev_return_int(&rdev->wiphy, ret); 1138 return ret; 1139 } 1140 1141 static inline int 1142 rdev_set_mcast_rate(struct cfg80211_registered_device *rdev, 1143 struct net_device *dev, 1144 int mcast_rate[NUM_NL80211_BANDS]) 1145 { 1146 int ret = -ENOTSUPP; 1147 1148 trace_rdev_set_mcast_rate(&rdev->wiphy, dev, mcast_rate); 1149 if (rdev->ops->set_mcast_rate) 1150 ret = rdev->ops->set_mcast_rate(&rdev->wiphy, dev, mcast_rate); 1151 trace_rdev_return_int(&rdev->wiphy, ret); 1152 return ret; 1153 } 1154 1155 static inline int 1156 rdev_set_coalesce(struct cfg80211_registered_device *rdev, 1157 struct cfg80211_coalesce *coalesce) 1158 { 1159 int ret = -ENOTSUPP; 1160 1161 trace_rdev_set_coalesce(&rdev->wiphy, coalesce); 1162 if (rdev->ops->set_coalesce) 1163 ret = rdev->ops->set_coalesce(&rdev->wiphy, coalesce); 1164 trace_rdev_return_int(&rdev->wiphy, ret); 1165 return ret; 1166 } 1167 #endif /* __CFG80211_RDEV_OPS */ 1168