driver_i.h revision 281806
1/* 2 * wpa_supplicant - Internal driver interface wrappers 3 * Copyright (c) 2003-2015, Jouni Malinen <j@w1.fi> 4 * 5 * This software may be distributed under the terms of the BSD license. 6 * See README for more details. 7 */ 8 9#ifndef DRIVER_I_H 10#define DRIVER_I_H 11 12#include "drivers/driver.h" 13 14/* driver_ops */ 15static inline void * wpa_drv_init(struct wpa_supplicant *wpa_s, 16 const char *ifname) 17{ 18 if (wpa_s->driver->init2) 19 return wpa_s->driver->init2(wpa_s, ifname, 20 wpa_s->global_drv_priv); 21 if (wpa_s->driver->init) { 22 return wpa_s->driver->init(wpa_s, ifname); 23 } 24 return NULL; 25} 26 27static inline void wpa_drv_deinit(struct wpa_supplicant *wpa_s) 28{ 29 if (wpa_s->driver->deinit) 30 wpa_s->driver->deinit(wpa_s->drv_priv); 31} 32 33static inline int wpa_drv_set_param(struct wpa_supplicant *wpa_s, 34 const char *param) 35{ 36 if (wpa_s->driver->set_param) 37 return wpa_s->driver->set_param(wpa_s->drv_priv, param); 38 return 0; 39} 40 41static inline int wpa_drv_set_countermeasures(struct wpa_supplicant *wpa_s, 42 int enabled) 43{ 44 if (wpa_s->driver->set_countermeasures) { 45 return wpa_s->driver->set_countermeasures(wpa_s->drv_priv, 46 enabled); 47 } 48 return -1; 49} 50 51static inline int wpa_drv_authenticate(struct wpa_supplicant *wpa_s, 52 struct wpa_driver_auth_params *params) 53{ 54 if (wpa_s->driver->authenticate) 55 return wpa_s->driver->authenticate(wpa_s->drv_priv, params); 56 return -1; 57} 58 59static inline int wpa_drv_associate(struct wpa_supplicant *wpa_s, 60 struct wpa_driver_associate_params *params) 61{ 62 if (wpa_s->driver->associate) { 63 return wpa_s->driver->associate(wpa_s->drv_priv, params); 64 } 65 return -1; 66} 67 68static inline int wpa_drv_init_mesh(struct wpa_supplicant *wpa_s) 69{ 70 if (wpa_s->driver->init_mesh) 71 return wpa_s->driver->init_mesh(wpa_s->drv_priv); 72 return -1; 73} 74 75static inline int wpa_drv_join_mesh(struct wpa_supplicant *wpa_s, 76 struct wpa_driver_mesh_join_params *params) 77{ 78 if (wpa_s->driver->join_mesh) 79 return wpa_s->driver->join_mesh(wpa_s->drv_priv, params); 80 return -1; 81} 82 83static inline int wpa_drv_leave_mesh(struct wpa_supplicant *wpa_s) 84{ 85 if (wpa_s->driver->leave_mesh) 86 return wpa_s->driver->leave_mesh(wpa_s->drv_priv); 87 return -1; 88} 89 90static inline int wpa_drv_scan(struct wpa_supplicant *wpa_s, 91 struct wpa_driver_scan_params *params) 92{ 93#ifdef CONFIG_TESTING_OPTIONS 94 if (wpa_s->test_failure == WPAS_TEST_FAILURE_SCAN_TRIGGER) 95 return -EBUSY; 96#endif /* CONFIG_TESTING_OPTIONS */ 97 if (wpa_s->driver->scan2) 98 return wpa_s->driver->scan2(wpa_s->drv_priv, params); 99 return -1; 100} 101 102static inline int wpa_drv_sched_scan(struct wpa_supplicant *wpa_s, 103 struct wpa_driver_scan_params *params, 104 u32 interval) 105{ 106 if (wpa_s->driver->sched_scan) 107 return wpa_s->driver->sched_scan(wpa_s->drv_priv, 108 params, interval); 109 return -1; 110} 111 112static inline int wpa_drv_stop_sched_scan(struct wpa_supplicant *wpa_s) 113{ 114 if (wpa_s->driver->stop_sched_scan) 115 return wpa_s->driver->stop_sched_scan(wpa_s->drv_priv); 116 return -1; 117} 118 119static inline struct wpa_scan_results * wpa_drv_get_scan_results2( 120 struct wpa_supplicant *wpa_s) 121{ 122 if (wpa_s->driver->get_scan_results2) 123 return wpa_s->driver->get_scan_results2(wpa_s->drv_priv); 124 return NULL; 125} 126 127static inline int wpa_drv_get_bssid(struct wpa_supplicant *wpa_s, u8 *bssid) 128{ 129 if (wpa_s->driver->get_bssid) { 130 return wpa_s->driver->get_bssid(wpa_s->drv_priv, bssid); 131 } 132 return -1; 133} 134 135static inline int wpa_drv_get_ssid(struct wpa_supplicant *wpa_s, u8 *ssid) 136{ 137 if (wpa_s->driver->get_ssid) { 138 return wpa_s->driver->get_ssid(wpa_s->drv_priv, ssid); 139 } 140 return -1; 141} 142 143static inline int wpa_drv_set_key(struct wpa_supplicant *wpa_s, 144 enum wpa_alg alg, const u8 *addr, 145 int key_idx, int set_tx, 146 const u8 *seq, size_t seq_len, 147 const u8 *key, size_t key_len) 148{ 149 if (alg != WPA_ALG_NONE) { 150 if (key_idx >= 0 && key_idx <= 6) 151 wpa_s->keys_cleared &= ~BIT(key_idx); 152 else 153 wpa_s->keys_cleared = 0; 154 } 155 if (wpa_s->driver->set_key) { 156 return wpa_s->driver->set_key(wpa_s->ifname, wpa_s->drv_priv, 157 alg, addr, key_idx, set_tx, 158 seq, seq_len, key, key_len); 159 } 160 return -1; 161} 162 163static inline int wpa_drv_sta_deauth(struct wpa_supplicant *wpa_s, 164 const u8 *addr, int reason_code) 165{ 166 if (wpa_s->driver->sta_deauth) { 167 return wpa_s->driver->sta_deauth(wpa_s->drv_priv, 168 wpa_s->own_addr, addr, 169 reason_code); 170 } 171 return -1; 172} 173 174static inline int wpa_drv_deauthenticate(struct wpa_supplicant *wpa_s, 175 const u8 *addr, int reason_code) 176{ 177 if (wpa_s->driver->deauthenticate) { 178 return wpa_s->driver->deauthenticate(wpa_s->drv_priv, addr, 179 reason_code); 180 } 181 return -1; 182} 183 184static inline int wpa_drv_add_pmkid(struct wpa_supplicant *wpa_s, 185 const u8 *bssid, const u8 *pmkid) 186{ 187 if (wpa_s->driver->add_pmkid) { 188 return wpa_s->driver->add_pmkid(wpa_s->drv_priv, bssid, pmkid); 189 } 190 return -1; 191} 192 193static inline int wpa_drv_remove_pmkid(struct wpa_supplicant *wpa_s, 194 const u8 *bssid, const u8 *pmkid) 195{ 196 if (wpa_s->driver->remove_pmkid) { 197 return wpa_s->driver->remove_pmkid(wpa_s->drv_priv, bssid, 198 pmkid); 199 } 200 return -1; 201} 202 203static inline int wpa_drv_flush_pmkid(struct wpa_supplicant *wpa_s) 204{ 205 if (wpa_s->driver->flush_pmkid) { 206 return wpa_s->driver->flush_pmkid(wpa_s->drv_priv); 207 } 208 return -1; 209} 210 211static inline int wpa_drv_get_capa(struct wpa_supplicant *wpa_s, 212 struct wpa_driver_capa *capa) 213{ 214 if (wpa_s->driver->get_capa) { 215 return wpa_s->driver->get_capa(wpa_s->drv_priv, capa); 216 } 217 return -1; 218} 219 220static inline void wpa_drv_poll(struct wpa_supplicant *wpa_s) 221{ 222 if (wpa_s->driver->poll) { 223 wpa_s->driver->poll(wpa_s->drv_priv); 224 } 225} 226 227static inline const char * wpa_drv_get_ifname(struct wpa_supplicant *wpa_s) 228{ 229 if (wpa_s->driver->get_ifname) { 230 return wpa_s->driver->get_ifname(wpa_s->drv_priv); 231 } 232 return NULL; 233} 234 235static inline const char * 236wpa_driver_get_radio_name(struct wpa_supplicant *wpa_s) 237{ 238 if (wpa_s->driver->get_radio_name) 239 return wpa_s->driver->get_radio_name(wpa_s->drv_priv); 240 return NULL; 241} 242 243static inline const u8 * wpa_drv_get_mac_addr(struct wpa_supplicant *wpa_s) 244{ 245 if (wpa_s->driver->get_mac_addr) { 246 return wpa_s->driver->get_mac_addr(wpa_s->drv_priv); 247 } 248 return NULL; 249} 250 251static inline int wpa_drv_set_operstate(struct wpa_supplicant *wpa_s, 252 int state) 253{ 254 if (wpa_s->driver->set_operstate) 255 return wpa_s->driver->set_operstate(wpa_s->drv_priv, state); 256 return 0; 257} 258 259static inline int wpa_drv_mlme_setprotection(struct wpa_supplicant *wpa_s, 260 const u8 *addr, int protect_type, 261 int key_type) 262{ 263 if (wpa_s->driver->mlme_setprotection) 264 return wpa_s->driver->mlme_setprotection(wpa_s->drv_priv, addr, 265 protect_type, 266 key_type); 267 return 0; 268} 269 270static inline struct hostapd_hw_modes * 271wpa_drv_get_hw_feature_data(struct wpa_supplicant *wpa_s, u16 *num_modes, 272 u16 *flags) 273{ 274 if (wpa_s->driver->get_hw_feature_data) 275 return wpa_s->driver->get_hw_feature_data(wpa_s->drv_priv, 276 num_modes, flags); 277 return NULL; 278} 279 280static inline int wpa_drv_set_country(struct wpa_supplicant *wpa_s, 281 const char *alpha2) 282{ 283 if (wpa_s->driver->set_country) 284 return wpa_s->driver->set_country(wpa_s->drv_priv, alpha2); 285 return 0; 286} 287 288static inline int wpa_drv_send_mlme(struct wpa_supplicant *wpa_s, 289 const u8 *data, size_t data_len, int noack) 290{ 291 if (wpa_s->driver->send_mlme) 292 return wpa_s->driver->send_mlme(wpa_s->drv_priv, 293 data, data_len, noack); 294 return -1; 295} 296 297static inline int wpa_drv_update_ft_ies(struct wpa_supplicant *wpa_s, 298 const u8 *md, 299 const u8 *ies, size_t ies_len) 300{ 301 if (wpa_s->driver->update_ft_ies) 302 return wpa_s->driver->update_ft_ies(wpa_s->drv_priv, md, 303 ies, ies_len); 304 return -1; 305} 306 307static inline int wpa_drv_set_ap(struct wpa_supplicant *wpa_s, 308 struct wpa_driver_ap_params *params) 309{ 310 if (wpa_s->driver->set_ap) 311 return wpa_s->driver->set_ap(wpa_s->drv_priv, params); 312 return -1; 313} 314 315static inline int wpa_drv_sta_add(struct wpa_supplicant *wpa_s, 316 struct hostapd_sta_add_params *params) 317{ 318 if (wpa_s->driver->sta_add) 319 return wpa_s->driver->sta_add(wpa_s->drv_priv, params); 320 return -1; 321} 322 323static inline int wpa_drv_sta_remove(struct wpa_supplicant *wpa_s, 324 const u8 *addr) 325{ 326 if (wpa_s->driver->sta_remove) 327 return wpa_s->driver->sta_remove(wpa_s->drv_priv, addr); 328 return -1; 329} 330 331static inline int wpa_drv_hapd_send_eapol(struct wpa_supplicant *wpa_s, 332 const u8 *addr, const u8 *data, 333 size_t data_len, int encrypt, 334 const u8 *own_addr, u32 flags) 335{ 336 if (wpa_s->driver->hapd_send_eapol) 337 return wpa_s->driver->hapd_send_eapol(wpa_s->drv_priv, addr, 338 data, data_len, encrypt, 339 own_addr, flags); 340 return -1; 341} 342 343static inline int wpa_drv_sta_set_flags(struct wpa_supplicant *wpa_s, 344 const u8 *addr, int total_flags, 345 int flags_or, int flags_and) 346{ 347 if (wpa_s->driver->sta_set_flags) 348 return wpa_s->driver->sta_set_flags(wpa_s->drv_priv, addr, 349 total_flags, flags_or, 350 flags_and); 351 return -1; 352} 353 354static inline int wpa_drv_set_supp_port(struct wpa_supplicant *wpa_s, 355 int authorized) 356{ 357 if (wpa_s->driver->set_supp_port) { 358 return wpa_s->driver->set_supp_port(wpa_s->drv_priv, 359 authorized); 360 } 361 return 0; 362} 363 364static inline int wpa_drv_send_action(struct wpa_supplicant *wpa_s, 365 unsigned int freq, 366 unsigned int wait, 367 const u8 *dst, const u8 *src, 368 const u8 *bssid, 369 const u8 *data, size_t data_len, 370 int no_cck) 371{ 372 if (wpa_s->driver->send_action) 373 return wpa_s->driver->send_action(wpa_s->drv_priv, freq, 374 wait, dst, src, bssid, 375 data, data_len, no_cck); 376 return -1; 377} 378 379static inline void wpa_drv_send_action_cancel_wait(struct wpa_supplicant *wpa_s) 380{ 381 if (wpa_s->driver->send_action_cancel_wait) 382 wpa_s->driver->send_action_cancel_wait(wpa_s->drv_priv); 383} 384 385static inline int wpa_drv_set_freq(struct wpa_supplicant *wpa_s, 386 struct hostapd_freq_params *freq) 387{ 388 if (wpa_s->driver->set_freq) 389 return wpa_s->driver->set_freq(wpa_s->drv_priv, freq); 390 return -1; 391} 392 393static inline int wpa_drv_if_add(struct wpa_supplicant *wpa_s, 394 enum wpa_driver_if_type type, 395 const char *ifname, const u8 *addr, 396 void *bss_ctx, char *force_ifname, 397 u8 *if_addr, const char *bridge) 398{ 399 if (wpa_s->driver->if_add) 400 return wpa_s->driver->if_add(wpa_s->drv_priv, type, ifname, 401 addr, bss_ctx, NULL, force_ifname, 402 if_addr, bridge, 0); 403 return -1; 404} 405 406static inline int wpa_drv_if_remove(struct wpa_supplicant *wpa_s, 407 enum wpa_driver_if_type type, 408 const char *ifname) 409{ 410 if (wpa_s->driver->if_remove) 411 return wpa_s->driver->if_remove(wpa_s->drv_priv, type, ifname); 412 return -1; 413} 414 415static inline int wpa_drv_remain_on_channel(struct wpa_supplicant *wpa_s, 416 unsigned int freq, 417 unsigned int duration) 418{ 419 if (wpa_s->driver->remain_on_channel) 420 return wpa_s->driver->remain_on_channel(wpa_s->drv_priv, freq, 421 duration); 422 return -1; 423} 424 425static inline int wpa_drv_cancel_remain_on_channel( 426 struct wpa_supplicant *wpa_s) 427{ 428 if (wpa_s->driver->cancel_remain_on_channel) 429 return wpa_s->driver->cancel_remain_on_channel( 430 wpa_s->drv_priv); 431 return -1; 432} 433 434static inline int wpa_drv_probe_req_report(struct wpa_supplicant *wpa_s, 435 int report) 436{ 437 if (wpa_s->driver->probe_req_report) 438 return wpa_s->driver->probe_req_report(wpa_s->drv_priv, 439 report); 440 return -1; 441} 442 443static inline int wpa_drv_deinit_ap(struct wpa_supplicant *wpa_s) 444{ 445 if (wpa_s->driver->deinit_ap) 446 return wpa_s->driver->deinit_ap(wpa_s->drv_priv); 447 return 0; 448} 449 450static inline int wpa_drv_deinit_p2p_cli(struct wpa_supplicant *wpa_s) 451{ 452 if (wpa_s->driver->deinit_p2p_cli) 453 return wpa_s->driver->deinit_p2p_cli(wpa_s->drv_priv); 454 return 0; 455} 456 457static inline void wpa_drv_suspend(struct wpa_supplicant *wpa_s) 458{ 459 if (wpa_s->driver->suspend) 460 wpa_s->driver->suspend(wpa_s->drv_priv); 461} 462 463static inline void wpa_drv_resume(struct wpa_supplicant *wpa_s) 464{ 465 if (wpa_s->driver->resume) 466 wpa_s->driver->resume(wpa_s->drv_priv); 467} 468 469static inline int wpa_drv_signal_monitor(struct wpa_supplicant *wpa_s, 470 int threshold, int hysteresis) 471{ 472 if (wpa_s->driver->signal_monitor) 473 return wpa_s->driver->signal_monitor(wpa_s->drv_priv, 474 threshold, hysteresis); 475 return -1; 476} 477 478static inline int wpa_drv_signal_poll(struct wpa_supplicant *wpa_s, 479 struct wpa_signal_info *si) 480{ 481 if (wpa_s->driver->signal_poll) 482 return wpa_s->driver->signal_poll(wpa_s->drv_priv, si); 483 return -1; 484} 485 486static inline int wpa_drv_pktcnt_poll(struct wpa_supplicant *wpa_s, 487 struct hostap_sta_driver_data *sta) 488{ 489 if (wpa_s->driver->read_sta_data) 490 return wpa_s->driver->read_sta_data(wpa_s->drv_priv, sta, 491 wpa_s->bssid); 492 return -1; 493} 494 495static inline int wpa_drv_set_ap_wps_ie(struct wpa_supplicant *wpa_s, 496 const struct wpabuf *beacon, 497 const struct wpabuf *proberesp, 498 const struct wpabuf *assocresp) 499{ 500 if (!wpa_s->driver->set_ap_wps_ie) 501 return -1; 502 return wpa_s->driver->set_ap_wps_ie(wpa_s->drv_priv, beacon, 503 proberesp, assocresp); 504} 505 506static inline int wpa_drv_shared_freq(struct wpa_supplicant *wpa_s) 507{ 508 if (!wpa_s->driver->shared_freq) 509 return -1; 510 return wpa_s->driver->shared_freq(wpa_s->drv_priv); 511} 512 513static inline int wpa_drv_get_noa(struct wpa_supplicant *wpa_s, 514 u8 *buf, size_t buf_len) 515{ 516 if (!wpa_s->driver->get_noa) 517 return -1; 518 return wpa_s->driver->get_noa(wpa_s->drv_priv, buf, buf_len); 519} 520 521static inline int wpa_drv_set_p2p_powersave(struct wpa_supplicant *wpa_s, 522 int legacy_ps, int opp_ps, 523 int ctwindow) 524{ 525 if (!wpa_s->driver->set_p2p_powersave) 526 return -1; 527 return wpa_s->driver->set_p2p_powersave(wpa_s->drv_priv, legacy_ps, 528 opp_ps, ctwindow); 529} 530 531static inline int wpa_drv_ampdu(struct wpa_supplicant *wpa_s, int ampdu) 532{ 533 if (!wpa_s->driver->ampdu) 534 return -1; 535 return wpa_s->driver->ampdu(wpa_s->drv_priv, ampdu); 536} 537 538static inline int wpa_drv_send_tdls_mgmt(struct wpa_supplicant *wpa_s, 539 const u8 *dst, u8 action_code, 540 u8 dialog_token, u16 status_code, 541 u32 peer_capab, int initiator, 542 const u8 *buf, size_t len) 543{ 544 if (wpa_s->driver->send_tdls_mgmt) { 545 return wpa_s->driver->send_tdls_mgmt(wpa_s->drv_priv, dst, 546 action_code, dialog_token, 547 status_code, peer_capab, 548 initiator, buf, len); 549 } 550 return -1; 551} 552 553static inline int wpa_drv_tdls_oper(struct wpa_supplicant *wpa_s, 554 enum tdls_oper oper, const u8 *peer) 555{ 556 if (!wpa_s->driver->tdls_oper) 557 return -1; 558 return wpa_s->driver->tdls_oper(wpa_s->drv_priv, oper, peer); 559} 560 561#ifdef ANDROID 562static inline int wpa_drv_driver_cmd(struct wpa_supplicant *wpa_s, 563 char *cmd, char *buf, size_t buf_len) 564{ 565 if (!wpa_s->driver->driver_cmd) 566 return -1; 567 return wpa_s->driver->driver_cmd(wpa_s->drv_priv, cmd, buf, buf_len); 568} 569#endif /* ANDROID */ 570 571static inline void wpa_drv_set_rekey_info(struct wpa_supplicant *wpa_s, 572 const u8 *kek, size_t kek_len, 573 const u8 *kck, size_t kck_len, 574 const u8 *replay_ctr) 575{ 576 if (!wpa_s->driver->set_rekey_info) 577 return; 578 wpa_s->driver->set_rekey_info(wpa_s->drv_priv, kek, kek_len, 579 kck, kck_len, replay_ctr); 580} 581 582static inline int wpa_drv_radio_disable(struct wpa_supplicant *wpa_s, 583 int disabled) 584{ 585 if (!wpa_s->driver->radio_disable) 586 return -1; 587 return wpa_s->driver->radio_disable(wpa_s->drv_priv, disabled); 588} 589 590static inline int wpa_drv_switch_channel(struct wpa_supplicant *wpa_s, 591 struct csa_settings *settings) 592{ 593 if (!wpa_s->driver->switch_channel) 594 return -1; 595 return wpa_s->driver->switch_channel(wpa_s->drv_priv, settings); 596} 597 598static inline int wpa_drv_add_ts(struct wpa_supplicant *wpa_s, u8 tsid, 599 const u8 *address, u8 user_priority, 600 u16 admitted_time) 601{ 602 if (!wpa_s->driver->add_tx_ts) 603 return -1; 604 return wpa_s->driver->add_tx_ts(wpa_s->drv_priv, tsid, address, 605 user_priority, admitted_time); 606} 607 608static inline int wpa_drv_del_ts(struct wpa_supplicant *wpa_s, u8 tid, 609 const u8 *address) 610{ 611 if (!wpa_s->driver->del_tx_ts) 612 return -1; 613 return wpa_s->driver->del_tx_ts(wpa_s->drv_priv, tid, address); 614} 615 616static inline int wpa_drv_tdls_enable_channel_switch( 617 struct wpa_supplicant *wpa_s, const u8 *addr, u8 oper_class, 618 const struct hostapd_freq_params *freq_params) 619{ 620 if (!wpa_s->driver->tdls_enable_channel_switch) 621 return -1; 622 return wpa_s->driver->tdls_enable_channel_switch(wpa_s->drv_priv, addr, 623 oper_class, 624 freq_params); 625} 626 627static inline int 628wpa_drv_tdls_disable_channel_switch(struct wpa_supplicant *wpa_s, 629 const u8 *addr) 630{ 631 if (!wpa_s->driver->tdls_disable_channel_switch) 632 return -1; 633 return wpa_s->driver->tdls_disable_channel_switch(wpa_s->drv_priv, 634 addr); 635} 636 637static inline int wpa_drv_wnm_oper(struct wpa_supplicant *wpa_s, 638 enum wnm_oper oper, const u8 *peer, 639 u8 *buf, u16 *buf_len) 640{ 641 if (!wpa_s->driver->wnm_oper) 642 return -1; 643 return wpa_s->driver->wnm_oper(wpa_s->drv_priv, oper, peer, buf, 644 buf_len); 645} 646 647static inline int wpa_drv_status(struct wpa_supplicant *wpa_s, 648 char *buf, size_t buflen) 649{ 650 if (!wpa_s->driver->status) 651 return -1; 652 return wpa_s->driver->status(wpa_s->drv_priv, buf, buflen); 653} 654 655static inline int wpa_drv_set_qos_map(struct wpa_supplicant *wpa_s, 656 const u8 *qos_map_set, u8 qos_map_set_len) 657{ 658 if (!wpa_s->driver->set_qos_map) 659 return -1; 660 return wpa_s->driver->set_qos_map(wpa_s->drv_priv, qos_map_set, 661 qos_map_set_len); 662} 663 664static inline int wpa_drv_wowlan(struct wpa_supplicant *wpa_s, 665 const struct wowlan_triggers *triggers) 666{ 667 if (!wpa_s->driver->set_wowlan) 668 return -1; 669 return wpa_s->driver->set_wowlan(wpa_s->drv_priv, triggers); 670} 671 672static inline int wpa_drv_vendor_cmd(struct wpa_supplicant *wpa_s, 673 int vendor_id, int subcmd, const u8 *data, 674 size_t data_len, struct wpabuf *buf) 675{ 676 if (!wpa_s->driver->vendor_cmd) 677 return -1; 678 return wpa_s->driver->vendor_cmd(wpa_s->drv_priv, vendor_id, subcmd, 679 data, data_len, buf); 680} 681 682static inline int wpa_drv_roaming(struct wpa_supplicant *wpa_s, int allowed, 683 const u8 *bssid) 684{ 685 if (!wpa_s->driver->roaming) 686 return -1; 687 return wpa_s->driver->roaming(wpa_s->drv_priv, allowed, bssid); 688} 689 690static inline int wpa_drv_set_mac_addr(struct wpa_supplicant *wpa_s, 691 const u8 *addr) 692{ 693 if (!wpa_s->driver->set_mac_addr) 694 return -1; 695 return wpa_s->driver->set_mac_addr(wpa_s->drv_priv, addr); 696} 697 698 699#ifdef CONFIG_MACSEC 700 701static inline int wpa_drv_macsec_init(struct wpa_supplicant *wpa_s, 702 struct macsec_init_params *params) 703{ 704 if (!wpa_s->driver->macsec_init) 705 return -1; 706 return wpa_s->driver->macsec_init(wpa_s->drv_priv, params); 707} 708 709static inline int wpa_drv_macsec_deinit(struct wpa_supplicant *wpa_s) 710{ 711 if (!wpa_s->driver->macsec_deinit) 712 return -1; 713 return wpa_s->driver->macsec_deinit(wpa_s->drv_priv); 714} 715 716static inline int wpa_drv_enable_protect_frames(struct wpa_supplicant *wpa_s, 717 Boolean enabled) 718{ 719 if (!wpa_s->driver->enable_protect_frames) 720 return -1; 721 return wpa_s->driver->enable_protect_frames(wpa_s->drv_priv, enabled); 722} 723 724static inline int wpa_drv_set_replay_protect(struct wpa_supplicant *wpa_s, 725 Boolean enabled, u32 window) 726{ 727 if (!wpa_s->driver->set_replay_protect) 728 return -1; 729 return wpa_s->driver->set_replay_protect(wpa_s->drv_priv, enabled, 730 window); 731} 732 733static inline int wpa_drv_set_current_cipher_suite(struct wpa_supplicant *wpa_s, 734 const u8 *cs, size_t cs_len) 735{ 736 if (!wpa_s->driver->set_current_cipher_suite) 737 return -1; 738 return wpa_s->driver->set_current_cipher_suite(wpa_s->drv_priv, cs, 739 cs_len); 740} 741 742static inline int wpa_drv_enable_controlled_port(struct wpa_supplicant *wpa_s, 743 Boolean enabled) 744{ 745 if (!wpa_s->driver->enable_controlled_port) 746 return -1; 747 return wpa_s->driver->enable_controlled_port(wpa_s->drv_priv, enabled); 748} 749 750static inline int wpa_drv_get_receive_lowest_pn(struct wpa_supplicant *wpa_s, 751 u32 channel, u8 an, 752 u32 *lowest_pn) 753{ 754 if (!wpa_s->driver->get_receive_lowest_pn) 755 return -1; 756 return wpa_s->driver->get_receive_lowest_pn(wpa_s->drv_priv, channel, 757 an, lowest_pn); 758} 759 760static inline int wpa_drv_get_transmit_next_pn(struct wpa_supplicant *wpa_s, 761 u32 channel, u8 an, 762 u32 *next_pn) 763{ 764 if (!wpa_s->driver->get_transmit_next_pn) 765 return -1; 766 return wpa_s->driver->get_transmit_next_pn(wpa_s->drv_priv, channel, 767 an, next_pn); 768} 769 770static inline int wpa_drv_set_transmit_next_pn(struct wpa_supplicant *wpa_s, 771 u32 channel, u8 an, 772 u32 next_pn) 773{ 774 if (!wpa_s->driver->set_transmit_next_pn) 775 return -1; 776 return wpa_s->driver->set_transmit_next_pn(wpa_s->drv_priv, channel, 777 an, next_pn); 778} 779 780static inline int wpa_drv_get_available_receive_sc(struct wpa_supplicant *wpa_s, 781 u32 *channel) 782{ 783 if (!wpa_s->driver->get_available_receive_sc) 784 return -1; 785 return wpa_s->driver->get_available_receive_sc(wpa_s->drv_priv, 786 channel); 787} 788 789static inline int 790wpa_drv_create_receive_sc(struct wpa_supplicant *wpa_s, u32 channel, 791 const u8 *sci_addr, u16 sci_port, 792 unsigned int conf_offset, int validation) 793{ 794 if (!wpa_s->driver->create_receive_sc) 795 return -1; 796 return wpa_s->driver->create_receive_sc(wpa_s->drv_priv, channel, 797 sci_addr, sci_port, conf_offset, 798 validation); 799} 800 801static inline int wpa_drv_delete_receive_sc(struct wpa_supplicant *wpa_s, 802 u32 channel) 803{ 804 if (!wpa_s->driver->delete_receive_sc) 805 return -1; 806 return wpa_s->driver->delete_receive_sc(wpa_s->drv_priv, channel); 807} 808 809static inline int wpa_drv_create_receive_sa(struct wpa_supplicant *wpa_s, 810 u32 channel, u8 an, 811 u32 lowest_pn, const u8 *sak) 812{ 813 if (!wpa_s->driver->create_receive_sa) 814 return -1; 815 return wpa_s->driver->create_receive_sa(wpa_s->drv_priv, channel, an, 816 lowest_pn, sak); 817} 818 819static inline int wpa_drv_enable_receive_sa(struct wpa_supplicant *wpa_s, 820 u32 channel, u8 an) 821{ 822 if (!wpa_s->driver->enable_receive_sa) 823 return -1; 824 return wpa_s->driver->enable_receive_sa(wpa_s->drv_priv, channel, an); 825} 826 827static inline int wpa_drv_disable_receive_sa(struct wpa_supplicant *wpa_s, 828 u32 channel, u8 an) 829{ 830 if (!wpa_s->driver->disable_receive_sa) 831 return -1; 832 return wpa_s->driver->disable_receive_sa(wpa_s->drv_priv, channel, an); 833} 834 835static inline int 836wpa_drv_get_available_transmit_sc(struct wpa_supplicant *wpa_s, u32 *channel) 837{ 838 if (!wpa_s->driver->get_available_transmit_sc) 839 return -1; 840 return wpa_s->driver->get_available_transmit_sc(wpa_s->drv_priv, 841 channel); 842} 843 844static inline int 845wpa_drv_create_transmit_sc(struct wpa_supplicant *wpa_s, u32 channel, 846 const u8 *sci_addr, u16 sci_port, 847 unsigned int conf_offset) 848{ 849 if (!wpa_s->driver->create_transmit_sc) 850 return -1; 851 return wpa_s->driver->create_transmit_sc(wpa_s->drv_priv, channel, 852 sci_addr, sci_port, 853 conf_offset); 854} 855 856static inline int wpa_drv_delete_transmit_sc(struct wpa_supplicant *wpa_s, 857 u32 channel) 858{ 859 if (!wpa_s->driver->delete_transmit_sc) 860 return -1; 861 return wpa_s->driver->delete_transmit_sc(wpa_s->drv_priv, channel); 862} 863 864static inline int wpa_drv_create_transmit_sa(struct wpa_supplicant *wpa_s, 865 u32 channel, u8 an, 866 u32 next_pn, 867 Boolean confidentiality, 868 const u8 *sak) 869{ 870 if (!wpa_s->driver->create_transmit_sa) 871 return -1; 872 return wpa_s->driver->create_transmit_sa(wpa_s->drv_priv, channel, an, 873 next_pn, confidentiality, sak); 874} 875 876static inline int wpa_drv_enable_transmit_sa(struct wpa_supplicant *wpa_s, 877 u32 channel, u8 an) 878{ 879 if (!wpa_s->driver->enable_transmit_sa) 880 return -1; 881 return wpa_s->driver->enable_transmit_sa(wpa_s->drv_priv, channel, an); 882} 883 884static inline int wpa_drv_disable_transmit_sa(struct wpa_supplicant *wpa_s, 885 u32 channel, u8 an) 886{ 887 if (!wpa_s->driver->disable_transmit_sa) 888 return -1; 889 return wpa_s->driver->disable_transmit_sa(wpa_s->drv_priv, channel, an); 890} 891#endif /* CONFIG_MACSEC */ 892 893#endif /* DRIVER_I_H */ 894