1214501Srpaulo/* 2214501Srpaulo * wpa_supplicant - Internal driver interface wrappers 3214501Srpaulo * Copyright (c) 2003-2009, Jouni Malinen <j@w1.fi> 4214501Srpaulo * 5252726Srpaulo * This software may be distributed under the terms of the BSD license. 6252726Srpaulo * See README for more details. 7214501Srpaulo */ 8214501Srpaulo 9214501Srpaulo#ifndef DRIVER_I_H 10214501Srpaulo#define DRIVER_I_H 11214501Srpaulo 12214501Srpaulo#include "drivers/driver.h" 13214501Srpaulo 14214501Srpaulo/* driver_ops */ 15214501Srpaulostatic inline void * wpa_drv_init(struct wpa_supplicant *wpa_s, 16214501Srpaulo const char *ifname) 17214501Srpaulo{ 18214501Srpaulo if (wpa_s->driver->init2) 19214501Srpaulo return wpa_s->driver->init2(wpa_s, ifname, 20214501Srpaulo wpa_s->global_drv_priv); 21214501Srpaulo if (wpa_s->driver->init) { 22214501Srpaulo return wpa_s->driver->init(wpa_s, ifname); 23214501Srpaulo } 24214501Srpaulo return NULL; 25214501Srpaulo} 26214501Srpaulo 27214501Srpaulostatic inline void wpa_drv_deinit(struct wpa_supplicant *wpa_s) 28214501Srpaulo{ 29214501Srpaulo if (wpa_s->driver->deinit) 30214501Srpaulo wpa_s->driver->deinit(wpa_s->drv_priv); 31214501Srpaulo} 32214501Srpaulo 33214501Srpaulostatic inline int wpa_drv_set_param(struct wpa_supplicant *wpa_s, 34214501Srpaulo const char *param) 35214501Srpaulo{ 36214501Srpaulo if (wpa_s->driver->set_param) 37214501Srpaulo return wpa_s->driver->set_param(wpa_s->drv_priv, param); 38214501Srpaulo return 0; 39214501Srpaulo} 40214501Srpaulo 41214501Srpaulostatic inline int wpa_drv_set_countermeasures(struct wpa_supplicant *wpa_s, 42214501Srpaulo int enabled) 43214501Srpaulo{ 44214501Srpaulo if (wpa_s->driver->set_countermeasures) { 45214501Srpaulo return wpa_s->driver->set_countermeasures(wpa_s->drv_priv, 46214501Srpaulo enabled); 47214501Srpaulo } 48214501Srpaulo return -1; 49214501Srpaulo} 50214501Srpaulo 51214501Srpaulostatic inline int wpa_drv_authenticate(struct wpa_supplicant *wpa_s, 52214501Srpaulo struct wpa_driver_auth_params *params) 53214501Srpaulo{ 54214501Srpaulo if (wpa_s->driver->authenticate) 55214501Srpaulo return wpa_s->driver->authenticate(wpa_s->drv_priv, params); 56214501Srpaulo return -1; 57214501Srpaulo} 58214501Srpaulo 59214501Srpaulostatic inline int wpa_drv_associate(struct wpa_supplicant *wpa_s, 60214501Srpaulo struct wpa_driver_associate_params *params) 61214501Srpaulo{ 62214501Srpaulo if (wpa_s->driver->associate) { 63214501Srpaulo return wpa_s->driver->associate(wpa_s->drv_priv, params); 64214501Srpaulo } 65214501Srpaulo return -1; 66214501Srpaulo} 67214501Srpaulo 68214501Srpaulostatic inline int wpa_drv_scan(struct wpa_supplicant *wpa_s, 69214501Srpaulo struct wpa_driver_scan_params *params) 70214501Srpaulo{ 71214501Srpaulo if (wpa_s->driver->scan2) 72214501Srpaulo return wpa_s->driver->scan2(wpa_s->drv_priv, params); 73214501Srpaulo return -1; 74214501Srpaulo} 75214501Srpaulo 76252726Srpaulostatic inline int wpa_drv_sched_scan(struct wpa_supplicant *wpa_s, 77252726Srpaulo struct wpa_driver_scan_params *params, 78252726Srpaulo u32 interval) 79252726Srpaulo{ 80252726Srpaulo if (wpa_s->driver->sched_scan) 81252726Srpaulo return wpa_s->driver->sched_scan(wpa_s->drv_priv, 82252726Srpaulo params, interval); 83252726Srpaulo return -1; 84252726Srpaulo} 85252726Srpaulo 86252726Srpaulostatic inline int wpa_drv_stop_sched_scan(struct wpa_supplicant *wpa_s) 87252726Srpaulo{ 88252726Srpaulo if (wpa_s->driver->stop_sched_scan) 89252726Srpaulo return wpa_s->driver->stop_sched_scan(wpa_s->drv_priv); 90252726Srpaulo return -1; 91252726Srpaulo} 92252726Srpaulo 93214501Srpaulostatic inline struct wpa_scan_results * wpa_drv_get_scan_results2( 94214501Srpaulo struct wpa_supplicant *wpa_s) 95214501Srpaulo{ 96214501Srpaulo if (wpa_s->driver->get_scan_results2) 97214501Srpaulo return wpa_s->driver->get_scan_results2(wpa_s->drv_priv); 98214501Srpaulo return NULL; 99214501Srpaulo} 100214501Srpaulo 101214501Srpaulostatic inline int wpa_drv_get_bssid(struct wpa_supplicant *wpa_s, u8 *bssid) 102214501Srpaulo{ 103214501Srpaulo if (wpa_s->driver->get_bssid) { 104214501Srpaulo return wpa_s->driver->get_bssid(wpa_s->drv_priv, bssid); 105214501Srpaulo } 106214501Srpaulo return -1; 107214501Srpaulo} 108214501Srpaulo 109214501Srpaulostatic inline int wpa_drv_get_ssid(struct wpa_supplicant *wpa_s, u8 *ssid) 110214501Srpaulo{ 111214501Srpaulo if (wpa_s->driver->get_ssid) { 112214501Srpaulo return wpa_s->driver->get_ssid(wpa_s->drv_priv, ssid); 113214501Srpaulo } 114214501Srpaulo return -1; 115214501Srpaulo} 116214501Srpaulo 117214501Srpaulostatic inline int wpa_drv_set_key(struct wpa_supplicant *wpa_s, 118214501Srpaulo enum wpa_alg alg, const u8 *addr, 119214501Srpaulo int key_idx, int set_tx, 120214501Srpaulo const u8 *seq, size_t seq_len, 121214501Srpaulo const u8 *key, size_t key_len) 122214501Srpaulo{ 123214501Srpaulo if (wpa_s->driver->set_key) { 124214501Srpaulo wpa_s->keys_cleared = 0; 125214501Srpaulo return wpa_s->driver->set_key(wpa_s->ifname, wpa_s->drv_priv, 126214501Srpaulo alg, addr, key_idx, set_tx, 127214501Srpaulo seq, seq_len, key, key_len); 128214501Srpaulo } 129214501Srpaulo return -1; 130214501Srpaulo} 131214501Srpaulo 132214501Srpaulostatic inline int wpa_drv_deauthenticate(struct wpa_supplicant *wpa_s, 133214501Srpaulo const u8 *addr, int reason_code) 134214501Srpaulo{ 135214501Srpaulo if (wpa_s->driver->deauthenticate) { 136214501Srpaulo return wpa_s->driver->deauthenticate(wpa_s->drv_priv, addr, 137214501Srpaulo reason_code); 138214501Srpaulo } 139214501Srpaulo return -1; 140214501Srpaulo} 141214501Srpaulo 142214501Srpaulostatic inline int wpa_drv_add_pmkid(struct wpa_supplicant *wpa_s, 143214501Srpaulo const u8 *bssid, const u8 *pmkid) 144214501Srpaulo{ 145214501Srpaulo if (wpa_s->driver->add_pmkid) { 146214501Srpaulo return wpa_s->driver->add_pmkid(wpa_s->drv_priv, bssid, pmkid); 147214501Srpaulo } 148214501Srpaulo return -1; 149214501Srpaulo} 150214501Srpaulo 151214501Srpaulostatic inline int wpa_drv_remove_pmkid(struct wpa_supplicant *wpa_s, 152214501Srpaulo const u8 *bssid, const u8 *pmkid) 153214501Srpaulo{ 154214501Srpaulo if (wpa_s->driver->remove_pmkid) { 155214501Srpaulo return wpa_s->driver->remove_pmkid(wpa_s->drv_priv, bssid, 156214501Srpaulo pmkid); 157214501Srpaulo } 158214501Srpaulo return -1; 159214501Srpaulo} 160214501Srpaulo 161214501Srpaulostatic inline int wpa_drv_flush_pmkid(struct wpa_supplicant *wpa_s) 162214501Srpaulo{ 163214501Srpaulo if (wpa_s->driver->flush_pmkid) { 164214501Srpaulo return wpa_s->driver->flush_pmkid(wpa_s->drv_priv); 165214501Srpaulo } 166214501Srpaulo return -1; 167214501Srpaulo} 168214501Srpaulo 169214501Srpaulostatic inline int wpa_drv_get_capa(struct wpa_supplicant *wpa_s, 170214501Srpaulo struct wpa_driver_capa *capa) 171214501Srpaulo{ 172214501Srpaulo if (wpa_s->driver->get_capa) { 173214501Srpaulo return wpa_s->driver->get_capa(wpa_s->drv_priv, capa); 174214501Srpaulo } 175214501Srpaulo return -1; 176214501Srpaulo} 177214501Srpaulo 178214501Srpaulostatic inline void wpa_drv_poll(struct wpa_supplicant *wpa_s) 179214501Srpaulo{ 180214501Srpaulo if (wpa_s->driver->poll) { 181214501Srpaulo wpa_s->driver->poll(wpa_s->drv_priv); 182214501Srpaulo } 183214501Srpaulo} 184214501Srpaulo 185214501Srpaulostatic inline const char * wpa_drv_get_ifname(struct wpa_supplicant *wpa_s) 186214501Srpaulo{ 187214501Srpaulo if (wpa_s->driver->get_ifname) { 188214501Srpaulo return wpa_s->driver->get_ifname(wpa_s->drv_priv); 189214501Srpaulo } 190214501Srpaulo return NULL; 191214501Srpaulo} 192214501Srpaulo 193214501Srpaulostatic inline const u8 * wpa_drv_get_mac_addr(struct wpa_supplicant *wpa_s) 194214501Srpaulo{ 195214501Srpaulo if (wpa_s->driver->get_mac_addr) { 196214501Srpaulo return wpa_s->driver->get_mac_addr(wpa_s->drv_priv); 197214501Srpaulo } 198214501Srpaulo return NULL; 199214501Srpaulo} 200214501Srpaulo 201214501Srpaulostatic inline int wpa_drv_send_eapol(struct wpa_supplicant *wpa_s, 202214501Srpaulo const u8 *dst, u16 proto, 203214501Srpaulo const u8 *data, size_t data_len) 204214501Srpaulo{ 205214501Srpaulo if (wpa_s->driver->send_eapol) 206214501Srpaulo return wpa_s->driver->send_eapol(wpa_s->drv_priv, dst, proto, 207214501Srpaulo data, data_len); 208214501Srpaulo return -1; 209214501Srpaulo} 210214501Srpaulo 211214501Srpaulostatic inline int wpa_drv_set_operstate(struct wpa_supplicant *wpa_s, 212214501Srpaulo int state) 213214501Srpaulo{ 214214501Srpaulo if (wpa_s->driver->set_operstate) 215214501Srpaulo return wpa_s->driver->set_operstate(wpa_s->drv_priv, state); 216214501Srpaulo return 0; 217214501Srpaulo} 218214501Srpaulo 219214501Srpaulostatic inline int wpa_drv_mlme_setprotection(struct wpa_supplicant *wpa_s, 220214501Srpaulo const u8 *addr, int protect_type, 221214501Srpaulo int key_type) 222214501Srpaulo{ 223214501Srpaulo if (wpa_s->driver->mlme_setprotection) 224214501Srpaulo return wpa_s->driver->mlme_setprotection(wpa_s->drv_priv, addr, 225214501Srpaulo protect_type, 226214501Srpaulo key_type); 227214501Srpaulo return 0; 228214501Srpaulo} 229214501Srpaulo 230214501Srpaulostatic inline struct hostapd_hw_modes * 231214501Srpaulowpa_drv_get_hw_feature_data(struct wpa_supplicant *wpa_s, u16 *num_modes, 232214501Srpaulo u16 *flags) 233214501Srpaulo{ 234214501Srpaulo if (wpa_s->driver->get_hw_feature_data) 235214501Srpaulo return wpa_s->driver->get_hw_feature_data(wpa_s->drv_priv, 236214501Srpaulo num_modes, flags); 237214501Srpaulo return NULL; 238214501Srpaulo} 239214501Srpaulo 240214501Srpaulostatic inline int wpa_drv_set_country(struct wpa_supplicant *wpa_s, 241214501Srpaulo const char *alpha2) 242214501Srpaulo{ 243214501Srpaulo if (wpa_s->driver->set_country) 244214501Srpaulo return wpa_s->driver->set_country(wpa_s->drv_priv, alpha2); 245214501Srpaulo return 0; 246214501Srpaulo} 247214501Srpaulo 248214501Srpaulostatic inline int wpa_drv_send_mlme(struct wpa_supplicant *wpa_s, 249252726Srpaulo const u8 *data, size_t data_len, int noack) 250214501Srpaulo{ 251214501Srpaulo if (wpa_s->driver->send_mlme) 252214501Srpaulo return wpa_s->driver->send_mlme(wpa_s->drv_priv, 253252726Srpaulo data, data_len, noack); 254214501Srpaulo return -1; 255214501Srpaulo} 256214501Srpaulo 257214501Srpaulostatic inline int wpa_drv_update_ft_ies(struct wpa_supplicant *wpa_s, 258214501Srpaulo const u8 *md, 259214501Srpaulo const u8 *ies, size_t ies_len) 260214501Srpaulo{ 261214501Srpaulo if (wpa_s->driver->update_ft_ies) 262214501Srpaulo return wpa_s->driver->update_ft_ies(wpa_s->drv_priv, md, 263214501Srpaulo ies, ies_len); 264214501Srpaulo return -1; 265214501Srpaulo} 266214501Srpaulo 267214501Srpaulostatic inline int wpa_drv_send_ft_action(struct wpa_supplicant *wpa_s, 268214501Srpaulo u8 action, const u8 *target_ap, 269214501Srpaulo const u8 *ies, size_t ies_len) 270214501Srpaulo{ 271214501Srpaulo if (wpa_s->driver->send_ft_action) 272214501Srpaulo return wpa_s->driver->send_ft_action(wpa_s->drv_priv, action, 273214501Srpaulo target_ap, ies, ies_len); 274214501Srpaulo return -1; 275214501Srpaulo} 276214501Srpaulo 277252726Srpaulostatic inline int wpa_drv_set_ap(struct wpa_supplicant *wpa_s, 278252726Srpaulo struct wpa_driver_ap_params *params) 279214501Srpaulo{ 280252726Srpaulo if (wpa_s->driver->set_ap) 281252726Srpaulo return wpa_s->driver->set_ap(wpa_s->drv_priv, params); 282214501Srpaulo return -1; 283214501Srpaulo} 284214501Srpaulo 285214501Srpaulostatic inline int wpa_drv_sta_add(struct wpa_supplicant *wpa_s, 286214501Srpaulo struct hostapd_sta_add_params *params) 287214501Srpaulo{ 288214501Srpaulo if (wpa_s->driver->sta_add) 289214501Srpaulo return wpa_s->driver->sta_add(wpa_s->drv_priv, params); 290214501Srpaulo return -1; 291214501Srpaulo} 292214501Srpaulo 293214501Srpaulostatic inline int wpa_drv_sta_remove(struct wpa_supplicant *wpa_s, 294214501Srpaulo const u8 *addr) 295214501Srpaulo{ 296214501Srpaulo if (wpa_s->driver->sta_remove) 297214501Srpaulo return wpa_s->driver->sta_remove(wpa_s->drv_priv, addr); 298214501Srpaulo return -1; 299214501Srpaulo} 300214501Srpaulo 301214501Srpaulostatic inline int wpa_drv_hapd_send_eapol(struct wpa_supplicant *wpa_s, 302214501Srpaulo const u8 *addr, const u8 *data, 303214501Srpaulo size_t data_len, int encrypt, 304252726Srpaulo const u8 *own_addr, u32 flags) 305214501Srpaulo{ 306214501Srpaulo if (wpa_s->driver->hapd_send_eapol) 307214501Srpaulo return wpa_s->driver->hapd_send_eapol(wpa_s->drv_priv, addr, 308214501Srpaulo data, data_len, encrypt, 309252726Srpaulo own_addr, flags); 310214501Srpaulo return -1; 311214501Srpaulo} 312214501Srpaulo 313214501Srpaulostatic inline int wpa_drv_sta_set_flags(struct wpa_supplicant *wpa_s, 314214501Srpaulo const u8 *addr, int total_flags, 315214501Srpaulo int flags_or, int flags_and) 316214501Srpaulo{ 317214501Srpaulo if (wpa_s->driver->sta_set_flags) 318214501Srpaulo return wpa_s->driver->sta_set_flags(wpa_s->drv_priv, addr, 319214501Srpaulo total_flags, flags_or, 320214501Srpaulo flags_and); 321214501Srpaulo return -1; 322214501Srpaulo} 323214501Srpaulo 324214501Srpaulostatic inline int wpa_drv_set_supp_port(struct wpa_supplicant *wpa_s, 325214501Srpaulo int authorized) 326214501Srpaulo{ 327214501Srpaulo if (wpa_s->driver->set_supp_port) { 328214501Srpaulo return wpa_s->driver->set_supp_port(wpa_s->drv_priv, 329214501Srpaulo authorized); 330214501Srpaulo } 331214501Srpaulo return 0; 332214501Srpaulo} 333214501Srpaulo 334214501Srpaulostatic inline int wpa_drv_send_action(struct wpa_supplicant *wpa_s, 335214501Srpaulo unsigned int freq, 336252726Srpaulo unsigned int wait, 337214501Srpaulo const u8 *dst, const u8 *src, 338214501Srpaulo const u8 *bssid, 339252726Srpaulo const u8 *data, size_t data_len, 340252726Srpaulo int no_cck) 341214501Srpaulo{ 342214501Srpaulo if (wpa_s->driver->send_action) 343214501Srpaulo return wpa_s->driver->send_action(wpa_s->drv_priv, freq, 344252726Srpaulo wait, dst, src, bssid, 345252726Srpaulo data, data_len, no_cck); 346214501Srpaulo return -1; 347214501Srpaulo} 348214501Srpaulo 349252726Srpaulostatic inline void wpa_drv_send_action_cancel_wait(struct wpa_supplicant *wpa_s) 350252726Srpaulo{ 351252726Srpaulo if (wpa_s->driver->send_action_cancel_wait) 352252726Srpaulo wpa_s->driver->send_action_cancel_wait(wpa_s->drv_priv); 353252726Srpaulo} 354252726Srpaulo 355252726Srpaulostatic inline int wpa_drv_set_freq(struct wpa_supplicant *wpa_s, 356252726Srpaulo struct hostapd_freq_params *freq) 357252726Srpaulo{ 358252726Srpaulo if (wpa_s->driver->set_freq) 359252726Srpaulo return wpa_s->driver->set_freq(wpa_s->drv_priv, freq); 360252726Srpaulo return -1; 361252726Srpaulo} 362252726Srpaulo 363214501Srpaulostatic inline int wpa_drv_if_add(struct wpa_supplicant *wpa_s, 364214501Srpaulo enum wpa_driver_if_type type, 365214501Srpaulo const char *ifname, const u8 *addr, 366214501Srpaulo void *bss_ctx, char *force_ifname, 367252726Srpaulo u8 *if_addr, const char *bridge) 368214501Srpaulo{ 369214501Srpaulo if (wpa_s->driver->if_add) 370214501Srpaulo return wpa_s->driver->if_add(wpa_s->drv_priv, type, ifname, 371214501Srpaulo addr, bss_ctx, NULL, force_ifname, 372252726Srpaulo if_addr, bridge); 373214501Srpaulo return -1; 374214501Srpaulo} 375214501Srpaulo 376214501Srpaulostatic inline int wpa_drv_if_remove(struct wpa_supplicant *wpa_s, 377214501Srpaulo enum wpa_driver_if_type type, 378214501Srpaulo const char *ifname) 379214501Srpaulo{ 380214501Srpaulo if (wpa_s->driver->if_remove) 381214501Srpaulo return wpa_s->driver->if_remove(wpa_s->drv_priv, type, ifname); 382214501Srpaulo return -1; 383214501Srpaulo} 384214501Srpaulo 385214501Srpaulostatic inline int wpa_drv_remain_on_channel(struct wpa_supplicant *wpa_s, 386214501Srpaulo unsigned int freq, 387214501Srpaulo unsigned int duration) 388214501Srpaulo{ 389214501Srpaulo if (wpa_s->driver->remain_on_channel) 390214501Srpaulo return wpa_s->driver->remain_on_channel(wpa_s->drv_priv, freq, 391214501Srpaulo duration); 392214501Srpaulo return -1; 393214501Srpaulo} 394214501Srpaulo 395214501Srpaulostatic inline int wpa_drv_cancel_remain_on_channel( 396214501Srpaulo struct wpa_supplicant *wpa_s) 397214501Srpaulo{ 398214501Srpaulo if (wpa_s->driver->cancel_remain_on_channel) 399214501Srpaulo return wpa_s->driver->cancel_remain_on_channel( 400214501Srpaulo wpa_s->drv_priv); 401214501Srpaulo return -1; 402214501Srpaulo} 403214501Srpaulo 404214501Srpaulostatic inline int wpa_drv_probe_req_report(struct wpa_supplicant *wpa_s, 405214501Srpaulo int report) 406214501Srpaulo{ 407214501Srpaulo if (wpa_s->driver->probe_req_report) 408214501Srpaulo return wpa_s->driver->probe_req_report(wpa_s->drv_priv, 409214501Srpaulo report); 410214501Srpaulo return -1; 411214501Srpaulo} 412214501Srpaulo 413214501Srpaulostatic inline int wpa_drv_deinit_ap(struct wpa_supplicant *wpa_s) 414214501Srpaulo{ 415214501Srpaulo if (wpa_s->driver->deinit_ap) 416214501Srpaulo return wpa_s->driver->deinit_ap(wpa_s->drv_priv); 417214501Srpaulo return 0; 418214501Srpaulo} 419214501Srpaulo 420252726Srpaulostatic inline int wpa_drv_deinit_p2p_cli(struct wpa_supplicant *wpa_s) 421252726Srpaulo{ 422252726Srpaulo if (wpa_s->driver->deinit_p2p_cli) 423252726Srpaulo return wpa_s->driver->deinit_p2p_cli(wpa_s->drv_priv); 424252726Srpaulo return 0; 425252726Srpaulo} 426252726Srpaulo 427214501Srpaulostatic inline void wpa_drv_suspend(struct wpa_supplicant *wpa_s) 428214501Srpaulo{ 429214501Srpaulo if (wpa_s->driver->suspend) 430214501Srpaulo wpa_s->driver->suspend(wpa_s->drv_priv); 431214501Srpaulo} 432214501Srpaulo 433214501Srpaulostatic inline void wpa_drv_resume(struct wpa_supplicant *wpa_s) 434214501Srpaulo{ 435214501Srpaulo if (wpa_s->driver->resume) 436214501Srpaulo wpa_s->driver->resume(wpa_s->drv_priv); 437214501Srpaulo} 438214501Srpaulo 439214501Srpaulostatic inline int wpa_drv_signal_monitor(struct wpa_supplicant *wpa_s, 440214501Srpaulo int threshold, int hysteresis) 441214501Srpaulo{ 442214501Srpaulo if (wpa_s->driver->signal_monitor) 443214501Srpaulo return wpa_s->driver->signal_monitor(wpa_s->drv_priv, 444214501Srpaulo threshold, hysteresis); 445214501Srpaulo return -1; 446214501Srpaulo} 447214501Srpaulo 448252726Srpaulostatic inline int wpa_drv_signal_poll(struct wpa_supplicant *wpa_s, 449252726Srpaulo struct wpa_signal_info *si) 450252726Srpaulo{ 451252726Srpaulo if (wpa_s->driver->signal_poll) 452252726Srpaulo return wpa_s->driver->signal_poll(wpa_s->drv_priv, si); 453252726Srpaulo return -1; 454252726Srpaulo} 455252726Srpaulo 456252726Srpaulostatic inline int wpa_drv_pktcnt_poll(struct wpa_supplicant *wpa_s, 457252726Srpaulo struct hostap_sta_driver_data *sta) 458252726Srpaulo{ 459252726Srpaulo if (wpa_s->driver->read_sta_data) 460252726Srpaulo return wpa_s->driver->read_sta_data(wpa_s->drv_priv, sta, 461252726Srpaulo wpa_s->bssid); 462252726Srpaulo return -1; 463252726Srpaulo} 464252726Srpaulo 465214501Srpaulostatic inline int wpa_drv_set_ap_wps_ie(struct wpa_supplicant *wpa_s, 466214501Srpaulo const struct wpabuf *beacon, 467252726Srpaulo const struct wpabuf *proberesp, 468252726Srpaulo const struct wpabuf *assocresp) 469214501Srpaulo{ 470214501Srpaulo if (!wpa_s->driver->set_ap_wps_ie) 471214501Srpaulo return -1; 472214501Srpaulo return wpa_s->driver->set_ap_wps_ie(wpa_s->drv_priv, beacon, 473252726Srpaulo proberesp, assocresp); 474214501Srpaulo} 475214501Srpaulo 476252726Srpaulostatic inline int wpa_drv_shared_freq(struct wpa_supplicant *wpa_s) 477252726Srpaulo{ 478252726Srpaulo if (!wpa_s->driver->shared_freq) 479252726Srpaulo return -1; 480252726Srpaulo return wpa_s->driver->shared_freq(wpa_s->drv_priv); 481252726Srpaulo} 482252726Srpaulo 483252726Srpaulostatic inline int wpa_drv_get_noa(struct wpa_supplicant *wpa_s, 484252726Srpaulo u8 *buf, size_t buf_len) 485252726Srpaulo{ 486252726Srpaulo if (!wpa_s->driver->get_noa) 487252726Srpaulo return -1; 488252726Srpaulo return wpa_s->driver->get_noa(wpa_s->drv_priv, buf, buf_len); 489252726Srpaulo} 490252726Srpaulo 491252726Srpaulostatic inline int wpa_drv_set_p2p_powersave(struct wpa_supplicant *wpa_s, 492252726Srpaulo int legacy_ps, int opp_ps, 493252726Srpaulo int ctwindow) 494252726Srpaulo{ 495252726Srpaulo if (!wpa_s->driver->set_p2p_powersave) 496252726Srpaulo return -1; 497252726Srpaulo return wpa_s->driver->set_p2p_powersave(wpa_s->drv_priv, legacy_ps, 498252726Srpaulo opp_ps, ctwindow); 499252726Srpaulo} 500252726Srpaulo 501252726Srpaulostatic inline int wpa_drv_ampdu(struct wpa_supplicant *wpa_s, int ampdu) 502252726Srpaulo{ 503252726Srpaulo if (!wpa_s->driver->ampdu) 504252726Srpaulo return -1; 505252726Srpaulo return wpa_s->driver->ampdu(wpa_s->drv_priv, ampdu); 506252726Srpaulo} 507252726Srpaulo 508252726Srpaulostatic inline int wpa_drv_p2p_find(struct wpa_supplicant *wpa_s, 509252726Srpaulo unsigned int timeout, int type) 510252726Srpaulo{ 511252726Srpaulo if (!wpa_s->driver->p2p_find) 512252726Srpaulo return -1; 513252726Srpaulo return wpa_s->driver->p2p_find(wpa_s->drv_priv, timeout, type); 514252726Srpaulo} 515252726Srpaulo 516252726Srpaulostatic inline int wpa_drv_p2p_stop_find(struct wpa_supplicant *wpa_s) 517252726Srpaulo{ 518252726Srpaulo if (!wpa_s->driver->p2p_stop_find) 519252726Srpaulo return -1; 520252726Srpaulo return wpa_s->driver->p2p_stop_find(wpa_s->drv_priv); 521252726Srpaulo} 522252726Srpaulo 523252726Srpaulostatic inline int wpa_drv_p2p_listen(struct wpa_supplicant *wpa_s, 524252726Srpaulo unsigned int timeout) 525252726Srpaulo{ 526252726Srpaulo if (!wpa_s->driver->p2p_listen) 527252726Srpaulo return -1; 528252726Srpaulo return wpa_s->driver->p2p_listen(wpa_s->drv_priv, timeout); 529252726Srpaulo} 530252726Srpaulo 531252726Srpaulostatic inline int wpa_drv_p2p_connect(struct wpa_supplicant *wpa_s, 532252726Srpaulo const u8 *peer_addr, int wps_method, 533252726Srpaulo int go_intent, 534252726Srpaulo const u8 *own_interface_addr, 535252726Srpaulo unsigned int force_freq, 536252726Srpaulo int persistent_group) 537252726Srpaulo{ 538252726Srpaulo if (!wpa_s->driver->p2p_connect) 539252726Srpaulo return -1; 540252726Srpaulo return wpa_s->driver->p2p_connect(wpa_s->drv_priv, peer_addr, 541252726Srpaulo wps_method, go_intent, 542252726Srpaulo own_interface_addr, force_freq, 543252726Srpaulo persistent_group); 544252726Srpaulo} 545252726Srpaulo 546252726Srpaulostatic inline int wpa_drv_wps_success_cb(struct wpa_supplicant *wpa_s, 547252726Srpaulo const u8 *peer_addr) 548252726Srpaulo{ 549252726Srpaulo if (!wpa_s->driver->wps_success_cb) 550252726Srpaulo return -1; 551252726Srpaulo return wpa_s->driver->wps_success_cb(wpa_s->drv_priv, peer_addr); 552252726Srpaulo} 553252726Srpaulo 554252726Srpaulostatic inline int 555252726Srpaulowpa_drv_p2p_group_formation_failed(struct wpa_supplicant *wpa_s) 556252726Srpaulo{ 557252726Srpaulo if (!wpa_s->driver->p2p_group_formation_failed) 558252726Srpaulo return -1; 559252726Srpaulo return wpa_s->driver->p2p_group_formation_failed(wpa_s->drv_priv); 560252726Srpaulo} 561252726Srpaulo 562252726Srpaulostatic inline int wpa_drv_p2p_set_params(struct wpa_supplicant *wpa_s, 563252726Srpaulo const struct p2p_params *params) 564252726Srpaulo{ 565252726Srpaulo if (!wpa_s->driver->p2p_set_params) 566252726Srpaulo return -1; 567252726Srpaulo return wpa_s->driver->p2p_set_params(wpa_s->drv_priv, params); 568252726Srpaulo} 569252726Srpaulo 570252726Srpaulostatic inline int wpa_drv_p2p_prov_disc_req(struct wpa_supplicant *wpa_s, 571252726Srpaulo const u8 *peer_addr, 572252726Srpaulo u16 config_methods, int join) 573252726Srpaulo{ 574252726Srpaulo if (!wpa_s->driver->p2p_prov_disc_req) 575252726Srpaulo return -1; 576252726Srpaulo return wpa_s->driver->p2p_prov_disc_req(wpa_s->drv_priv, peer_addr, 577252726Srpaulo config_methods, join); 578252726Srpaulo} 579252726Srpaulo 580252726Srpaulostatic inline u64 wpa_drv_p2p_sd_request(struct wpa_supplicant *wpa_s, 581252726Srpaulo const u8 *dst, 582252726Srpaulo const struct wpabuf *tlvs) 583252726Srpaulo{ 584252726Srpaulo if (!wpa_s->driver->p2p_sd_request) 585252726Srpaulo return 0; 586252726Srpaulo return wpa_s->driver->p2p_sd_request(wpa_s->drv_priv, dst, tlvs); 587252726Srpaulo} 588252726Srpaulo 589252726Srpaulostatic inline int wpa_drv_p2p_sd_cancel_request(struct wpa_supplicant *wpa_s, 590252726Srpaulo u64 req) 591252726Srpaulo{ 592252726Srpaulo if (!wpa_s->driver->p2p_sd_cancel_request) 593252726Srpaulo return -1; 594252726Srpaulo return wpa_s->driver->p2p_sd_cancel_request(wpa_s->drv_priv, req); 595252726Srpaulo} 596252726Srpaulo 597252726Srpaulostatic inline int wpa_drv_p2p_sd_response(struct wpa_supplicant *wpa_s, 598252726Srpaulo int freq, const u8 *dst, 599252726Srpaulo u8 dialog_token, 600252726Srpaulo const struct wpabuf *resp_tlvs) 601252726Srpaulo{ 602252726Srpaulo if (!wpa_s->driver->p2p_sd_response) 603252726Srpaulo return -1; 604252726Srpaulo return wpa_s->driver->p2p_sd_response(wpa_s->drv_priv, freq, dst, 605252726Srpaulo dialog_token, resp_tlvs); 606252726Srpaulo} 607252726Srpaulo 608252726Srpaulostatic inline int wpa_drv_p2p_service_update(struct wpa_supplicant *wpa_s) 609252726Srpaulo{ 610252726Srpaulo if (!wpa_s->driver->p2p_service_update) 611252726Srpaulo return -1; 612252726Srpaulo return wpa_s->driver->p2p_service_update(wpa_s->drv_priv); 613252726Srpaulo} 614252726Srpaulo 615252726Srpaulostatic inline int wpa_drv_p2p_reject(struct wpa_supplicant *wpa_s, 616252726Srpaulo const u8 *addr) 617252726Srpaulo{ 618252726Srpaulo if (!wpa_s->driver->p2p_reject) 619252726Srpaulo return -1; 620252726Srpaulo return wpa_s->driver->p2p_reject(wpa_s->drv_priv, addr); 621252726Srpaulo} 622252726Srpaulo 623252726Srpaulostatic inline int wpa_drv_p2p_invite(struct wpa_supplicant *wpa_s, 624252726Srpaulo const u8 *peer, int role, const u8 *bssid, 625252726Srpaulo const u8 *ssid, size_t ssid_len, 626252726Srpaulo const u8 *go_dev_addr, 627252726Srpaulo int persistent_group) 628252726Srpaulo{ 629252726Srpaulo if (!wpa_s->driver->p2p_invite) 630252726Srpaulo return -1; 631252726Srpaulo return wpa_s->driver->p2p_invite(wpa_s->drv_priv, peer, role, bssid, 632252726Srpaulo ssid, ssid_len, go_dev_addr, 633252726Srpaulo persistent_group); 634252726Srpaulo} 635252726Srpaulo 636252726Srpaulostatic inline int wpa_drv_send_tdls_mgmt(struct wpa_supplicant *wpa_s, 637252726Srpaulo const u8 *dst, u8 action_code, 638252726Srpaulo u8 dialog_token, u16 status_code, 639252726Srpaulo const u8 *buf, size_t len) 640252726Srpaulo{ 641252726Srpaulo if (wpa_s->driver->send_tdls_mgmt) { 642252726Srpaulo return wpa_s->driver->send_tdls_mgmt(wpa_s->drv_priv, dst, 643252726Srpaulo action_code, dialog_token, 644252726Srpaulo status_code, buf, len); 645252726Srpaulo } 646252726Srpaulo return -1; 647252726Srpaulo} 648252726Srpaulo 649252726Srpaulostatic inline int wpa_drv_tdls_oper(struct wpa_supplicant *wpa_s, 650252726Srpaulo enum tdls_oper oper, const u8 *peer) 651252726Srpaulo{ 652252726Srpaulo if (!wpa_s->driver->tdls_oper) 653252726Srpaulo return -1; 654252726Srpaulo return wpa_s->driver->tdls_oper(wpa_s->drv_priv, oper, peer); 655252726Srpaulo} 656252726Srpaulo 657252726Srpaulostatic inline void wpa_drv_set_rekey_info(struct wpa_supplicant *wpa_s, 658252726Srpaulo const u8 *kek, const u8 *kck, 659252726Srpaulo const u8 *replay_ctr) 660252726Srpaulo{ 661252726Srpaulo if (!wpa_s->driver->set_rekey_info) 662252726Srpaulo return; 663252726Srpaulo wpa_s->driver->set_rekey_info(wpa_s->drv_priv, kek, kck, replay_ctr); 664252726Srpaulo} 665252726Srpaulo 666252726Srpaulostatic inline int wpa_drv_radio_disable(struct wpa_supplicant *wpa_s, 667252726Srpaulo int disabled) 668252726Srpaulo{ 669252726Srpaulo if (!wpa_s->driver->radio_disable) 670252726Srpaulo return -1; 671252726Srpaulo return wpa_s->driver->radio_disable(wpa_s->drv_priv, disabled); 672252726Srpaulo} 673252726Srpaulo 674252726Srpaulostatic inline int wpa_drv_switch_channel(struct wpa_supplicant *wpa_s, 675252726Srpaulo unsigned int freq) 676252726Srpaulo{ 677252726Srpaulo if (!wpa_s->driver->switch_channel) 678252726Srpaulo return -1; 679252726Srpaulo return wpa_s->driver->switch_channel(wpa_s->drv_priv, freq); 680252726Srpaulo} 681252726Srpaulo 682252726Srpaulostatic inline int wpa_drv_wnm_oper(struct wpa_supplicant *wpa_s, 683252726Srpaulo enum wnm_oper oper, const u8 *peer, 684252726Srpaulo u8 *buf, u16 *buf_len) 685252726Srpaulo{ 686252726Srpaulo if (!wpa_s->driver->wnm_oper) 687252726Srpaulo return -1; 688252726Srpaulo return wpa_s->driver->wnm_oper(wpa_s->drv_priv, oper, peer, buf, 689252726Srpaulo buf_len); 690252726Srpaulo} 691252726Srpaulo 692214501Srpaulo#endif /* DRIVER_I_H */ 693