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 */ 15 static 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 27 static 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 33 static 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 41 static 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 51 static 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 59 static 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 68 static 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 75 static 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 83 static 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 90 static 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 102 static 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 112 static 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 119 static 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 127 static 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 135 static 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 143 static 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 163 static 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 174 static 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 184 static 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 193 static 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 203 static 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 211 static 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 220 static 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 227 static 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 235 static inline const char * 236 wpa_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 243 static 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 251 static 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 259 static 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 270 static inline struct hostapd_hw_modes * 271 wpa_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 280 static 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 288 static 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 297 static 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 307 static 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 315 static 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 323 static 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 331 static 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 343 static 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 354 static 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 364 static 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 379 static 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 385 static 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 393 static 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 406 static 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 415 static 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 425 static 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 434 static 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 443 static 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 450 static 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 457 static 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 463 static 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 469 static 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 478 static 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 486 static 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 495 static 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 506 static 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 513 static 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 521 static 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 531 static 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 538 static 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 553 static 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 562 static 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 571 static 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 582 static 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 590 static 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 598 static 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 608 static 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 616 static 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 627 static inline int 628 wpa_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 637 static 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 647 static 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 655 static 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 664 static 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 672 static 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 682 static 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 690 static 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 701 static 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 709 static 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 716 static 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 724 static 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 733 static 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 742 static 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 750 static 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 760 static 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 770 static 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 780 static 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 789 static inline int 790 wpa_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 801 static 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 809 static 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 819 static 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 827 static 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 835 static inline int 836 wpa_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 844 static inline int 845 wpa_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 856 static 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 864 static 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 876 static 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 884 static 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