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