1214501Srpaulo/* 2214501Srpaulo * wpa_supplicant - Internal driver interface wrappers 3214501Srpaulo * Copyright (c) 2003-2009, Jouni Malinen <j@w1.fi> 4214501Srpaulo * 5214501Srpaulo * This program is free software; you can redistribute it and/or modify 6214501Srpaulo * it under the terms of the GNU General Public License version 2 as 7214501Srpaulo * published by the Free Software Foundation. 8214501Srpaulo * 9214501Srpaulo * Alternatively, this software may be distributed under the terms of BSD 10214501Srpaulo * license. 11214501Srpaulo * 12214501Srpaulo * See README and COPYING for more details. 13214501Srpaulo */ 14214501Srpaulo 15214501Srpaulo#ifndef DRIVER_I_H 16214501Srpaulo#define DRIVER_I_H 17214501Srpaulo 18214501Srpaulo#include "drivers/driver.h" 19214501Srpaulo 20214501Srpaulo/* driver_ops */ 21214501Srpaulostatic inline void * wpa_drv_init(struct wpa_supplicant *wpa_s, 22214501Srpaulo const char *ifname) 23214501Srpaulo{ 24214501Srpaulo if (wpa_s->driver->init2) 25214501Srpaulo return wpa_s->driver->init2(wpa_s, ifname, 26214501Srpaulo wpa_s->global_drv_priv); 27214501Srpaulo if (wpa_s->driver->init) { 28214501Srpaulo return wpa_s->driver->init(wpa_s, ifname); 29214501Srpaulo } 30214501Srpaulo return NULL; 31214501Srpaulo} 32214501Srpaulo 33214501Srpaulostatic inline void wpa_drv_deinit(struct wpa_supplicant *wpa_s) 34214501Srpaulo{ 35214501Srpaulo if (wpa_s->driver->deinit) 36214501Srpaulo wpa_s->driver->deinit(wpa_s->drv_priv); 37214501Srpaulo} 38214501Srpaulo 39214501Srpaulostatic inline int wpa_drv_set_param(struct wpa_supplicant *wpa_s, 40214501Srpaulo const char *param) 41214501Srpaulo{ 42214501Srpaulo if (wpa_s->driver->set_param) 43214501Srpaulo return wpa_s->driver->set_param(wpa_s->drv_priv, param); 44214501Srpaulo return 0; 45214501Srpaulo} 46214501Srpaulo 47214501Srpaulostatic inline int wpa_drv_set_countermeasures(struct wpa_supplicant *wpa_s, 48214501Srpaulo int enabled) 49214501Srpaulo{ 50214501Srpaulo if (wpa_s->driver->set_countermeasures) { 51214501Srpaulo return wpa_s->driver->set_countermeasures(wpa_s->drv_priv, 52214501Srpaulo enabled); 53214501Srpaulo } 54214501Srpaulo return -1; 55214501Srpaulo} 56214501Srpaulo 57214501Srpaulostatic inline int wpa_drv_authenticate(struct wpa_supplicant *wpa_s, 58214501Srpaulo struct wpa_driver_auth_params *params) 59214501Srpaulo{ 60214501Srpaulo if (wpa_s->driver->authenticate) 61214501Srpaulo return wpa_s->driver->authenticate(wpa_s->drv_priv, params); 62214501Srpaulo return -1; 63214501Srpaulo} 64214501Srpaulo 65214501Srpaulostatic inline int wpa_drv_associate(struct wpa_supplicant *wpa_s, 66214501Srpaulo struct wpa_driver_associate_params *params) 67214501Srpaulo{ 68214501Srpaulo if (wpa_s->driver->associate) { 69214501Srpaulo return wpa_s->driver->associate(wpa_s->drv_priv, params); 70214501Srpaulo } 71214501Srpaulo return -1; 72214501Srpaulo} 73214501Srpaulo 74214501Srpaulostatic inline int wpa_drv_scan(struct wpa_supplicant *wpa_s, 75214501Srpaulo struct wpa_driver_scan_params *params) 76214501Srpaulo{ 77214501Srpaulo if (wpa_s->driver->scan2) 78214501Srpaulo return wpa_s->driver->scan2(wpa_s->drv_priv, params); 79214501Srpaulo return -1; 80214501Srpaulo} 81214501Srpaulo 82214501Srpaulostatic inline struct wpa_scan_results * wpa_drv_get_scan_results2( 83214501Srpaulo struct wpa_supplicant *wpa_s) 84214501Srpaulo{ 85214501Srpaulo if (wpa_s->driver->get_scan_results2) 86214501Srpaulo return wpa_s->driver->get_scan_results2(wpa_s->drv_priv); 87214501Srpaulo return NULL; 88214501Srpaulo} 89214501Srpaulo 90214501Srpaulostatic inline int wpa_drv_get_bssid(struct wpa_supplicant *wpa_s, u8 *bssid) 91214501Srpaulo{ 92214501Srpaulo if (wpa_s->driver->get_bssid) { 93214501Srpaulo return wpa_s->driver->get_bssid(wpa_s->drv_priv, bssid); 94214501Srpaulo } 95214501Srpaulo return -1; 96214501Srpaulo} 97214501Srpaulo 98214501Srpaulostatic inline int wpa_drv_get_ssid(struct wpa_supplicant *wpa_s, u8 *ssid) 99214501Srpaulo{ 100214501Srpaulo if (wpa_s->driver->get_ssid) { 101214501Srpaulo return wpa_s->driver->get_ssid(wpa_s->drv_priv, ssid); 102214501Srpaulo } 103214501Srpaulo return -1; 104214501Srpaulo} 105214501Srpaulo 106214501Srpaulostatic inline int wpa_drv_set_key(struct wpa_supplicant *wpa_s, 107214501Srpaulo enum wpa_alg alg, const u8 *addr, 108214501Srpaulo int key_idx, int set_tx, 109214501Srpaulo const u8 *seq, size_t seq_len, 110214501Srpaulo const u8 *key, size_t key_len) 111214501Srpaulo{ 112214501Srpaulo if (wpa_s->driver->set_key) { 113214501Srpaulo wpa_s->keys_cleared = 0; 114214501Srpaulo return wpa_s->driver->set_key(wpa_s->ifname, wpa_s->drv_priv, 115214501Srpaulo alg, addr, key_idx, set_tx, 116214501Srpaulo seq, seq_len, key, key_len); 117214501Srpaulo } 118214501Srpaulo return -1; 119214501Srpaulo} 120214501Srpaulo 121214501Srpaulostatic inline int wpa_drv_deauthenticate(struct wpa_supplicant *wpa_s, 122214501Srpaulo const u8 *addr, int reason_code) 123214501Srpaulo{ 124214501Srpaulo if (wpa_s->driver->deauthenticate) { 125214501Srpaulo return wpa_s->driver->deauthenticate(wpa_s->drv_priv, addr, 126214501Srpaulo reason_code); 127214501Srpaulo } 128214501Srpaulo return -1; 129214501Srpaulo} 130214501Srpaulo 131214501Srpaulostatic inline int wpa_drv_disassociate(struct wpa_supplicant *wpa_s, 132214501Srpaulo const u8 *addr, int reason_code) 133214501Srpaulo{ 134214501Srpaulo if (wpa_s->driver->disassociate) { 135214501Srpaulo return wpa_s->driver->disassociate(wpa_s->drv_priv, addr, 136214501Srpaulo reason_code); 137214501Srpaulo } 138214501Srpaulo return -1; 139214501Srpaulo} 140214501Srpaulo 141214501Srpaulostatic inline int wpa_drv_add_pmkid(struct wpa_supplicant *wpa_s, 142214501Srpaulo const u8 *bssid, const u8 *pmkid) 143214501Srpaulo{ 144214501Srpaulo if (wpa_s->driver->add_pmkid) { 145214501Srpaulo return wpa_s->driver->add_pmkid(wpa_s->drv_priv, bssid, pmkid); 146214501Srpaulo } 147214501Srpaulo return -1; 148214501Srpaulo} 149214501Srpaulo 150214501Srpaulostatic inline int wpa_drv_remove_pmkid(struct wpa_supplicant *wpa_s, 151214501Srpaulo const u8 *bssid, const u8 *pmkid) 152214501Srpaulo{ 153214501Srpaulo if (wpa_s->driver->remove_pmkid) { 154214501Srpaulo return wpa_s->driver->remove_pmkid(wpa_s->drv_priv, bssid, 155214501Srpaulo pmkid); 156214501Srpaulo } 157214501Srpaulo return -1; 158214501Srpaulo} 159214501Srpaulo 160214501Srpaulostatic inline int wpa_drv_flush_pmkid(struct wpa_supplicant *wpa_s) 161214501Srpaulo{ 162214501Srpaulo if (wpa_s->driver->flush_pmkid) { 163214501Srpaulo return wpa_s->driver->flush_pmkid(wpa_s->drv_priv); 164214501Srpaulo } 165214501Srpaulo return -1; 166214501Srpaulo} 167214501Srpaulo 168214501Srpaulostatic inline int wpa_drv_get_capa(struct wpa_supplicant *wpa_s, 169214501Srpaulo struct wpa_driver_capa *capa) 170214501Srpaulo{ 171214501Srpaulo if (wpa_s->driver->get_capa) { 172214501Srpaulo return wpa_s->driver->get_capa(wpa_s->drv_priv, capa); 173214501Srpaulo } 174214501Srpaulo return -1; 175214501Srpaulo} 176214501Srpaulo 177214501Srpaulostatic inline void wpa_drv_poll(struct wpa_supplicant *wpa_s) 178214501Srpaulo{ 179214501Srpaulo if (wpa_s->driver->poll) { 180214501Srpaulo wpa_s->driver->poll(wpa_s->drv_priv); 181214501Srpaulo } 182214501Srpaulo} 183214501Srpaulo 184214501Srpaulostatic inline const char * wpa_drv_get_ifname(struct wpa_supplicant *wpa_s) 185214501Srpaulo{ 186214501Srpaulo if (wpa_s->driver->get_ifname) { 187214501Srpaulo return wpa_s->driver->get_ifname(wpa_s->drv_priv); 188214501Srpaulo } 189214501Srpaulo return NULL; 190214501Srpaulo} 191214501Srpaulo 192214501Srpaulostatic inline const u8 * wpa_drv_get_mac_addr(struct wpa_supplicant *wpa_s) 193214501Srpaulo{ 194214501Srpaulo if (wpa_s->driver->get_mac_addr) { 195214501Srpaulo return wpa_s->driver->get_mac_addr(wpa_s->drv_priv); 196214501Srpaulo } 197214501Srpaulo return NULL; 198214501Srpaulo} 199214501Srpaulo 200214501Srpaulostatic inline int wpa_drv_send_eapol(struct wpa_supplicant *wpa_s, 201214501Srpaulo const u8 *dst, u16 proto, 202214501Srpaulo const u8 *data, size_t data_len) 203214501Srpaulo{ 204214501Srpaulo if (wpa_s->driver->send_eapol) 205214501Srpaulo return wpa_s->driver->send_eapol(wpa_s->drv_priv, dst, proto, 206214501Srpaulo data, data_len); 207214501Srpaulo return -1; 208214501Srpaulo} 209214501Srpaulo 210214501Srpaulostatic inline int wpa_drv_set_operstate(struct wpa_supplicant *wpa_s, 211214501Srpaulo int state) 212214501Srpaulo{ 213214501Srpaulo if (wpa_s->driver->set_operstate) 214214501Srpaulo return wpa_s->driver->set_operstate(wpa_s->drv_priv, state); 215214501Srpaulo return 0; 216214501Srpaulo} 217214501Srpaulo 218214501Srpaulostatic inline int wpa_drv_mlme_setprotection(struct wpa_supplicant *wpa_s, 219214501Srpaulo const u8 *addr, int protect_type, 220214501Srpaulo int key_type) 221214501Srpaulo{ 222214501Srpaulo if (wpa_s->driver->mlme_setprotection) 223214501Srpaulo return wpa_s->driver->mlme_setprotection(wpa_s->drv_priv, addr, 224214501Srpaulo protect_type, 225214501Srpaulo key_type); 226214501Srpaulo return 0; 227214501Srpaulo} 228214501Srpaulo 229214501Srpaulostatic inline struct hostapd_hw_modes * 230214501Srpaulowpa_drv_get_hw_feature_data(struct wpa_supplicant *wpa_s, u16 *num_modes, 231214501Srpaulo u16 *flags) 232214501Srpaulo{ 233214501Srpaulo if (wpa_s->driver->get_hw_feature_data) 234214501Srpaulo return wpa_s->driver->get_hw_feature_data(wpa_s->drv_priv, 235214501Srpaulo num_modes, flags); 236214501Srpaulo return NULL; 237214501Srpaulo} 238214501Srpaulo 239214501Srpaulostatic inline int wpa_drv_set_channel(struct wpa_supplicant *wpa_s, 240214501Srpaulo enum hostapd_hw_mode phymode, int chan, 241214501Srpaulo int freq) 242214501Srpaulo{ 243214501Srpaulo if (wpa_s->driver->set_channel) 244214501Srpaulo return wpa_s->driver->set_channel(wpa_s->drv_priv, phymode, 245214501Srpaulo chan, freq); 246214501Srpaulo return -1; 247214501Srpaulo} 248214501Srpaulo 249214501Srpaulostatic inline int wpa_drv_set_ssid(struct wpa_supplicant *wpa_s, 250214501Srpaulo const u8 *ssid, size_t ssid_len) 251214501Srpaulo{ 252214501Srpaulo if (wpa_s->driver->set_ssid) { 253214501Srpaulo return wpa_s->driver->set_ssid(wpa_s->drv_priv, ssid, 254214501Srpaulo ssid_len); 255214501Srpaulo } 256214501Srpaulo return -1; 257214501Srpaulo} 258214501Srpaulo 259214501Srpaulostatic inline int wpa_drv_set_bssid(struct wpa_supplicant *wpa_s, 260214501Srpaulo const u8 *bssid) 261214501Srpaulo{ 262214501Srpaulo if (wpa_s->driver->set_bssid) { 263214501Srpaulo return wpa_s->driver->set_bssid(wpa_s->drv_priv, bssid); 264214501Srpaulo } 265214501Srpaulo return -1; 266214501Srpaulo} 267214501Srpaulo 268214501Srpaulostatic inline int wpa_drv_set_country(struct wpa_supplicant *wpa_s, 269214501Srpaulo const char *alpha2) 270214501Srpaulo{ 271214501Srpaulo if (wpa_s->driver->set_country) 272214501Srpaulo return wpa_s->driver->set_country(wpa_s->drv_priv, alpha2); 273214501Srpaulo return 0; 274214501Srpaulo} 275214501Srpaulo 276214501Srpaulostatic inline int wpa_drv_send_mlme(struct wpa_supplicant *wpa_s, 277214501Srpaulo const u8 *data, size_t data_len) 278214501Srpaulo{ 279214501Srpaulo if (wpa_s->driver->send_mlme) 280214501Srpaulo return wpa_s->driver->send_mlme(wpa_s->drv_priv, 281214501Srpaulo data, data_len); 282214501Srpaulo return -1; 283214501Srpaulo} 284214501Srpaulo 285214501Srpaulostatic inline int wpa_drv_mlme_add_sta(struct wpa_supplicant *wpa_s, 286214501Srpaulo const u8 *addr, const u8 *supp_rates, 287214501Srpaulo size_t supp_rates_len) 288214501Srpaulo{ 289214501Srpaulo if (wpa_s->driver->mlme_add_sta) 290214501Srpaulo return wpa_s->driver->mlme_add_sta(wpa_s->drv_priv, addr, 291214501Srpaulo supp_rates, supp_rates_len); 292214501Srpaulo return -1; 293214501Srpaulo} 294214501Srpaulo 295214501Srpaulostatic inline int wpa_drv_mlme_remove_sta(struct wpa_supplicant *wpa_s, 296214501Srpaulo const u8 *addr) 297214501Srpaulo{ 298214501Srpaulo if (wpa_s->driver->mlme_remove_sta) 299214501Srpaulo return wpa_s->driver->mlme_remove_sta(wpa_s->drv_priv, addr); 300214501Srpaulo return -1; 301214501Srpaulo} 302214501Srpaulo 303214501Srpaulostatic inline int wpa_drv_update_ft_ies(struct wpa_supplicant *wpa_s, 304214501Srpaulo const u8 *md, 305214501Srpaulo const u8 *ies, size_t ies_len) 306214501Srpaulo{ 307214501Srpaulo if (wpa_s->driver->update_ft_ies) 308214501Srpaulo return wpa_s->driver->update_ft_ies(wpa_s->drv_priv, md, 309214501Srpaulo ies, ies_len); 310214501Srpaulo return -1; 311214501Srpaulo} 312214501Srpaulo 313214501Srpaulostatic inline int wpa_drv_send_ft_action(struct wpa_supplicant *wpa_s, 314214501Srpaulo u8 action, const u8 *target_ap, 315214501Srpaulo const u8 *ies, size_t ies_len) 316214501Srpaulo{ 317214501Srpaulo if (wpa_s->driver->send_ft_action) 318214501Srpaulo return wpa_s->driver->send_ft_action(wpa_s->drv_priv, action, 319214501Srpaulo target_ap, ies, ies_len); 320214501Srpaulo return -1; 321214501Srpaulo} 322214501Srpaulo 323214501Srpaulostatic inline int wpa_drv_set_beacon(struct wpa_supplicant *wpa_s, 324214501Srpaulo const u8 *head, size_t head_len, 325214501Srpaulo const u8 *tail, size_t tail_len, 326214501Srpaulo int dtim_period, int beacon_int) 327214501Srpaulo{ 328214501Srpaulo if (wpa_s->driver->set_beacon) 329214501Srpaulo return wpa_s->driver->set_beacon(wpa_s->drv_priv, head, 330214501Srpaulo head_len, tail, tail_len, 331214501Srpaulo dtim_period, beacon_int); 332214501Srpaulo return -1; 333214501Srpaulo} 334214501Srpaulo 335214501Srpaulostatic inline int wpa_drv_sta_add(struct wpa_supplicant *wpa_s, 336214501Srpaulo struct hostapd_sta_add_params *params) 337214501Srpaulo{ 338214501Srpaulo if (wpa_s->driver->sta_add) 339214501Srpaulo return wpa_s->driver->sta_add(wpa_s->drv_priv, params); 340214501Srpaulo return -1; 341214501Srpaulo} 342214501Srpaulo 343214501Srpaulostatic inline int wpa_drv_sta_remove(struct wpa_supplicant *wpa_s, 344214501Srpaulo const u8 *addr) 345214501Srpaulo{ 346214501Srpaulo if (wpa_s->driver->sta_remove) 347214501Srpaulo return wpa_s->driver->sta_remove(wpa_s->drv_priv, addr); 348214501Srpaulo return -1; 349214501Srpaulo} 350214501Srpaulo 351214501Srpaulostatic inline int wpa_drv_hapd_send_eapol(struct wpa_supplicant *wpa_s, 352214501Srpaulo const u8 *addr, const u8 *data, 353214501Srpaulo size_t data_len, int encrypt, 354214501Srpaulo const u8 *own_addr) 355214501Srpaulo{ 356214501Srpaulo if (wpa_s->driver->hapd_send_eapol) 357214501Srpaulo return wpa_s->driver->hapd_send_eapol(wpa_s->drv_priv, addr, 358214501Srpaulo data, data_len, encrypt, 359214501Srpaulo own_addr); 360214501Srpaulo return -1; 361214501Srpaulo} 362214501Srpaulo 363214501Srpaulostatic inline int wpa_drv_sta_set_flags(struct wpa_supplicant *wpa_s, 364214501Srpaulo const u8 *addr, int total_flags, 365214501Srpaulo int flags_or, int flags_and) 366214501Srpaulo{ 367214501Srpaulo if (wpa_s->driver->sta_set_flags) 368214501Srpaulo return wpa_s->driver->sta_set_flags(wpa_s->drv_priv, addr, 369214501Srpaulo total_flags, flags_or, 370214501Srpaulo flags_and); 371214501Srpaulo return -1; 372214501Srpaulo} 373214501Srpaulo 374214501Srpaulostatic inline int wpa_drv_set_supp_port(struct wpa_supplicant *wpa_s, 375214501Srpaulo int authorized) 376214501Srpaulo{ 377214501Srpaulo if (wpa_s->driver->set_supp_port) { 378214501Srpaulo return wpa_s->driver->set_supp_port(wpa_s->drv_priv, 379214501Srpaulo authorized); 380214501Srpaulo } 381214501Srpaulo return 0; 382214501Srpaulo} 383214501Srpaulo 384214501Srpaulostatic inline int wpa_drv_send_action(struct wpa_supplicant *wpa_s, 385214501Srpaulo unsigned int freq, 386214501Srpaulo const u8 *dst, const u8 *src, 387214501Srpaulo const u8 *bssid, 388214501Srpaulo const u8 *data, size_t data_len) 389214501Srpaulo{ 390214501Srpaulo if (wpa_s->driver->send_action) 391214501Srpaulo return wpa_s->driver->send_action(wpa_s->drv_priv, freq, 392214501Srpaulo dst, src, bssid, data, 393214501Srpaulo data_len); 394214501Srpaulo return -1; 395214501Srpaulo} 396214501Srpaulo 397214501Srpaulostatic inline int wpa_drv_if_add(struct wpa_supplicant *wpa_s, 398214501Srpaulo enum wpa_driver_if_type type, 399214501Srpaulo const char *ifname, const u8 *addr, 400214501Srpaulo void *bss_ctx, char *force_ifname, 401214501Srpaulo u8 *if_addr) 402214501Srpaulo{ 403214501Srpaulo if (wpa_s->driver->if_add) 404214501Srpaulo return wpa_s->driver->if_add(wpa_s->drv_priv, type, ifname, 405214501Srpaulo addr, bss_ctx, NULL, force_ifname, 406214501Srpaulo if_addr); 407214501Srpaulo return -1; 408214501Srpaulo} 409214501Srpaulo 410214501Srpaulostatic inline int wpa_drv_if_remove(struct wpa_supplicant *wpa_s, 411214501Srpaulo enum wpa_driver_if_type type, 412214501Srpaulo const char *ifname) 413214501Srpaulo{ 414214501Srpaulo if (wpa_s->driver->if_remove) 415214501Srpaulo return wpa_s->driver->if_remove(wpa_s->drv_priv, type, ifname); 416214501Srpaulo return -1; 417214501Srpaulo} 418214501Srpaulo 419214501Srpaulostatic inline int wpa_drv_remain_on_channel(struct wpa_supplicant *wpa_s, 420214501Srpaulo unsigned int freq, 421214501Srpaulo unsigned int duration) 422214501Srpaulo{ 423214501Srpaulo if (wpa_s->driver->remain_on_channel) 424214501Srpaulo return wpa_s->driver->remain_on_channel(wpa_s->drv_priv, freq, 425214501Srpaulo duration); 426214501Srpaulo return -1; 427214501Srpaulo} 428214501Srpaulo 429214501Srpaulostatic inline int wpa_drv_cancel_remain_on_channel( 430214501Srpaulo struct wpa_supplicant *wpa_s) 431214501Srpaulo{ 432214501Srpaulo if (wpa_s->driver->cancel_remain_on_channel) 433214501Srpaulo return wpa_s->driver->cancel_remain_on_channel( 434214501Srpaulo wpa_s->drv_priv); 435214501Srpaulo return -1; 436214501Srpaulo} 437214501Srpaulo 438214501Srpaulostatic inline int wpa_drv_probe_req_report(struct wpa_supplicant *wpa_s, 439214501Srpaulo int report) 440214501Srpaulo{ 441214501Srpaulo if (wpa_s->driver->probe_req_report) 442214501Srpaulo return wpa_s->driver->probe_req_report(wpa_s->drv_priv, 443214501Srpaulo report); 444214501Srpaulo return -1; 445214501Srpaulo} 446214501Srpaulo 447214501Srpaulostatic inline int wpa_drv_disable_11b_rates(struct wpa_supplicant *wpa_s, 448214501Srpaulo int disabled) 449214501Srpaulo{ 450214501Srpaulo if (wpa_s->driver->disable_11b_rates) 451214501Srpaulo return wpa_s->driver->disable_11b_rates(wpa_s->drv_priv, 452214501Srpaulo disabled); 453214501Srpaulo return -1; 454214501Srpaulo} 455214501Srpaulo 456214501Srpaulostatic inline int wpa_drv_deinit_ap(struct wpa_supplicant *wpa_s) 457214501Srpaulo{ 458214501Srpaulo if (wpa_s->driver->deinit_ap) 459214501Srpaulo return wpa_s->driver->deinit_ap(wpa_s->drv_priv); 460214501Srpaulo return 0; 461214501Srpaulo} 462214501Srpaulo 463214501Srpaulostatic inline void wpa_drv_suspend(struct wpa_supplicant *wpa_s) 464214501Srpaulo{ 465214501Srpaulo if (wpa_s->driver->suspend) 466214501Srpaulo wpa_s->driver->suspend(wpa_s->drv_priv); 467214501Srpaulo} 468214501Srpaulo 469214501Srpaulostatic inline void wpa_drv_resume(struct wpa_supplicant *wpa_s) 470214501Srpaulo{ 471214501Srpaulo if (wpa_s->driver->resume) 472214501Srpaulo wpa_s->driver->resume(wpa_s->drv_priv); 473214501Srpaulo} 474214501Srpaulo 475214501Srpaulostatic inline int wpa_drv_signal_monitor(struct wpa_supplicant *wpa_s, 476214501Srpaulo int threshold, int hysteresis) 477214501Srpaulo{ 478214501Srpaulo if (wpa_s->driver->signal_monitor) 479214501Srpaulo return wpa_s->driver->signal_monitor(wpa_s->drv_priv, 480214501Srpaulo threshold, hysteresis); 481214501Srpaulo return -1; 482214501Srpaulo} 483214501Srpaulo 484214501Srpaulostatic inline int wpa_drv_set_ap_wps_ie(struct wpa_supplicant *wpa_s, 485214501Srpaulo const struct wpabuf *beacon, 486214501Srpaulo const struct wpabuf *proberesp) 487214501Srpaulo{ 488214501Srpaulo if (!wpa_s->driver->set_ap_wps_ie) 489214501Srpaulo return -1; 490214501Srpaulo return wpa_s->driver->set_ap_wps_ie(wpa_s->drv_priv, beacon, 491214501Srpaulo proberesp); 492214501Srpaulo} 493214501Srpaulo 494214501Srpaulo#endif /* DRIVER_I_H */ 495