1131962Smp/* 259243Sobrien * wpa_supplicant - Internal driver interface wrappers 359243Sobrien * Copyright (c) 2003-2009, Jouni Malinen <j@w1.fi> 459243Sobrien * 559243Sobrien * This software may be distributed under the terms of the BSD license. 659243Sobrien * See README for more details. 759243Sobrien */ 859243Sobrien 959243Sobrien#ifndef DRIVER_I_H 1059243Sobrien#define DRIVER_I_H 1159243Sobrien 1259243Sobrien#include "drivers/driver.h" 1359243Sobrien 1459243Sobrien/* driver_ops */ 1559243Sobrienstatic inline void * wpa_drv_init(struct wpa_supplicant *wpa_s, 1659243Sobrien const char *ifname) 1759243Sobrien{ 1859243Sobrien if (wpa_s->driver->init2) 1959243Sobrien return wpa_s->driver->init2(wpa_s, ifname, 20100616Smp wpa_s->global_drv_priv); 2159243Sobrien if (wpa_s->driver->init) { 2259243Sobrien return wpa_s->driver->init(wpa_s, ifname); 2359243Sobrien } 2459243Sobrien return NULL; 2559243Sobrien} 2659243Sobrien 2759243Sobrienstatic inline void wpa_drv_deinit(struct wpa_supplicant *wpa_s) 2859243Sobrien{ 2959243Sobrien if (wpa_s->driver->deinit) 3059243Sobrien wpa_s->driver->deinit(wpa_s->drv_priv); 3159243Sobrien} 3259243Sobrien 3359243Sobrienstatic inline int wpa_drv_set_param(struct wpa_supplicant *wpa_s, 3459243Sobrien const char *param) 3559243Sobrien{ 3659243Sobrien if (wpa_s->driver->set_param) 3759243Sobrien return wpa_s->driver->set_param(wpa_s->drv_priv, param); 38131962Smp return 0; 3959243Sobrien} 4059243Sobrien 4159243Sobrienstatic inline int wpa_drv_set_countermeasures(struct wpa_supplicant *wpa_s, 4259243Sobrien int enabled) 4359243Sobrien{ 4469408Sache if (wpa_s->driver->set_countermeasures) { 4559243Sobrien return wpa_s->driver->set_countermeasures(wpa_s->drv_priv, 4669408Sache enabled); 4759243Sobrien } 4859243Sobrien return -1; 4959243Sobrien} 5059243Sobrien 5159243Sobrienstatic inline int wpa_drv_authenticate(struct wpa_supplicant *wpa_s, 5259243Sobrien struct wpa_driver_auth_params *params) 5359243Sobrien{ 5459243Sobrien if (wpa_s->driver->authenticate) 5559243Sobrien return wpa_s->driver->authenticate(wpa_s->drv_priv, params); 5659243Sobrien return -1; 5759243Sobrien} 5859243Sobrien 5959243Sobrienstatic inline int wpa_drv_associate(struct wpa_supplicant *wpa_s, 6059243Sobrien struct wpa_driver_associate_params *params) 6159243Sobrien{ 6259243Sobrien if (wpa_s->driver->associate) { 6359243Sobrien return wpa_s->driver->associate(wpa_s->drv_priv, params); 6459243Sobrien } 6559243Sobrien return -1; 6659243Sobrien} 6759243Sobrien 6859243Sobrienstatic inline int wpa_drv_scan(struct wpa_supplicant *wpa_s, 6959243Sobrien struct wpa_driver_scan_params *params) 7059243Sobrien{ 7159243Sobrien if (wpa_s->driver->scan2) 7259243Sobrien return wpa_s->driver->scan2(wpa_s->drv_priv, params); 7359243Sobrien return -1; 7459243Sobrien} 7559243Sobrien 7659243Sobrienstatic inline int wpa_drv_sched_scan(struct wpa_supplicant *wpa_s, 7759243Sobrien struct wpa_driver_scan_params *params, 7859243Sobrien u32 interval) 7959243Sobrien{ 8059243Sobrien if (wpa_s->driver->sched_scan) 8159243Sobrien return wpa_s->driver->sched_scan(wpa_s->drv_priv, 8259243Sobrien params, interval); 8359243Sobrien return -1; 8459243Sobrien} 8559243Sobrien 8659243Sobrienstatic inline int wpa_drv_stop_sched_scan(struct wpa_supplicant *wpa_s) 8759243Sobrien{ 8859243Sobrien if (wpa_s->driver->stop_sched_scan) 8959243Sobrien return wpa_s->driver->stop_sched_scan(wpa_s->drv_priv); 9059243Sobrien return -1; 9159243Sobrien} 9259243Sobrien 9359243Sobrienstatic inline struct wpa_scan_results * wpa_drv_get_scan_results2( 9459243Sobrien struct wpa_supplicant *wpa_s) 9559243Sobrien{ 9659243Sobrien if (wpa_s->driver->get_scan_results2) 9759243Sobrien return wpa_s->driver->get_scan_results2(wpa_s->drv_priv); 9859243Sobrien return NULL; 9959243Sobrien} 10059243Sobrien 10159243Sobrienstatic inline int wpa_drv_get_bssid(struct wpa_supplicant *wpa_s, u8 *bssid) 10259243Sobrien{ 10359243Sobrien if (wpa_s->driver->get_bssid) { 10459243Sobrien return wpa_s->driver->get_bssid(wpa_s->drv_priv, bssid); 10559243Sobrien } 10659243Sobrien return -1; 10759243Sobrien} 10869408Sache 10959243Sobrienstatic inline int wpa_drv_get_ssid(struct wpa_supplicant *wpa_s, u8 *ssid) 11069408Sache{ 11159243Sobrien if (wpa_s->driver->get_ssid) { 11259243Sobrien return wpa_s->driver->get_ssid(wpa_s->drv_priv, ssid); 11359243Sobrien } 11459243Sobrien return -1; 11559243Sobrien} 11659243Sobrien 11759243Sobrienstatic inline int wpa_drv_set_key(struct wpa_supplicant *wpa_s, 118131962Smp enum wpa_alg alg, const u8 *addr, 119131962Smp int key_idx, int set_tx, 12059243Sobrien const u8 *seq, size_t seq_len, 12159243Sobrien const u8 *key, size_t key_len) 12269408Sache{ 12359243Sobrien if (wpa_s->driver->set_key) { 12459243Sobrien wpa_s->keys_cleared = 0; 12559243Sobrien return wpa_s->driver->set_key(wpa_s->ifname, wpa_s->drv_priv, 12659243Sobrien alg, addr, key_idx, set_tx, 12769408Sache seq, seq_len, key, key_len); 12859243Sobrien } 12959243Sobrien return -1; 13059243Sobrien} 13159243Sobrien 13259243Sobrienstatic inline int wpa_drv_deauthenticate(struct wpa_supplicant *wpa_s, 13359243Sobrien const u8 *addr, int reason_code) 13459243Sobrien{ 13559243Sobrien if (wpa_s->driver->deauthenticate) { 13659243Sobrien return wpa_s->driver->deauthenticate(wpa_s->drv_priv, addr, 13759243Sobrien reason_code); 13859243Sobrien } 13959243Sobrien return -1; 14059243Sobrien} 14159243Sobrien 14259243Sobrienstatic inline int wpa_drv_add_pmkid(struct wpa_supplicant *wpa_s, 14359243Sobrien const u8 *bssid, const u8 *pmkid) 14459243Sobrien{ 14559243Sobrien if (wpa_s->driver->add_pmkid) { 14659243Sobrien return wpa_s->driver->add_pmkid(wpa_s->drv_priv, bssid, pmkid); 14759243Sobrien } 14859243Sobrien return -1; 14959243Sobrien} 15059243Sobrien 15159243Sobrienstatic inline int wpa_drv_remove_pmkid(struct wpa_supplicant *wpa_s, 15259243Sobrien const u8 *bssid, const u8 *pmkid) 15359243Sobrien{ 15459243Sobrien if (wpa_s->driver->remove_pmkid) { 15559243Sobrien return wpa_s->driver->remove_pmkid(wpa_s->drv_priv, bssid, 15659243Sobrien pmkid); 15759243Sobrien } 15859243Sobrien return -1; 15959243Sobrien} 16059243Sobrien 16159243Sobrienstatic inline int wpa_drv_flush_pmkid(struct wpa_supplicant *wpa_s) 16259243Sobrien{ 16359243Sobrien if (wpa_s->driver->flush_pmkid) { 16459243Sobrien return wpa_s->driver->flush_pmkid(wpa_s->drv_priv); 16559243Sobrien } 16659243Sobrien return -1; 16759243Sobrien} 16859243Sobrien 16959243Sobrienstatic inline int wpa_drv_get_capa(struct wpa_supplicant *wpa_s, 17059243Sobrien struct wpa_driver_capa *capa) 17159243Sobrien{ 17259243Sobrien if (wpa_s->driver->get_capa) { 17359243Sobrien return wpa_s->driver->get_capa(wpa_s->drv_priv, capa); 17459243Sobrien } 17559243Sobrien return -1; 17659243Sobrien} 17759243Sobrien 17859243Sobrienstatic inline void wpa_drv_poll(struct wpa_supplicant *wpa_s) 17959243Sobrien{ 18059243Sobrien if (wpa_s->driver->poll) { 18159243Sobrien wpa_s->driver->poll(wpa_s->drv_priv); 18259243Sobrien } 18359243Sobrien} 18459243Sobrien 18559243Sobrienstatic inline const char * wpa_drv_get_ifname(struct wpa_supplicant *wpa_s) 18659243Sobrien{ 18759243Sobrien if (wpa_s->driver->get_ifname) { 18859243Sobrien return wpa_s->driver->get_ifname(wpa_s->drv_priv); 18959243Sobrien } 19059243Sobrien return NULL; 19159243Sobrien} 19259243Sobrien 19359243Sobrienstatic inline const u8 * wpa_drv_get_mac_addr(struct wpa_supplicant *wpa_s) 19459243Sobrien{ 19559243Sobrien if (wpa_s->driver->get_mac_addr) { 19659243Sobrien return wpa_s->driver->get_mac_addr(wpa_s->drv_priv); 19759243Sobrien } 19859243Sobrien return NULL; 19959243Sobrien} 20059243Sobrien 20159243Sobrienstatic inline int wpa_drv_send_eapol(struct wpa_supplicant *wpa_s, 20259243Sobrien const u8 *dst, u16 proto, 20359243Sobrien const u8 *data, size_t data_len) 20459243Sobrien{ 20559243Sobrien if (wpa_s->driver->send_eapol) 20659243Sobrien return wpa_s->driver->send_eapol(wpa_s->drv_priv, dst, proto, 20759243Sobrien data, data_len); 20859243Sobrien return -1; 20959243Sobrien} 21059243Sobrien 21159243Sobrienstatic inline int wpa_drv_set_operstate(struct wpa_supplicant *wpa_s, 21259243Sobrien int state) 21359243Sobrien{ 21459243Sobrien if (wpa_s->driver->set_operstate) 21559243Sobrien return wpa_s->driver->set_operstate(wpa_s->drv_priv, state); 21659243Sobrien return 0; 21759243Sobrien} 21859243Sobrien 21959243Sobrienstatic inline int wpa_drv_mlme_setprotection(struct wpa_supplicant *wpa_s, 22059243Sobrien const u8 *addr, int protect_type, 22159243Sobrien int key_type) 22259243Sobrien{ 22359243Sobrien if (wpa_s->driver->mlme_setprotection) 22459243Sobrien return wpa_s->driver->mlme_setprotection(wpa_s->drv_priv, addr, 22559243Sobrien protect_type, 22659243Sobrien key_type); 22759243Sobrien return 0; 22859243Sobrien} 22959243Sobrien 23059243Sobrienstatic inline struct hostapd_hw_modes * 23159243Sobrienwpa_drv_get_hw_feature_data(struct wpa_supplicant *wpa_s, u16 *num_modes, 23259243Sobrien u16 *flags) 23359243Sobrien{ 23459243Sobrien if (wpa_s->driver->get_hw_feature_data) 23559243Sobrien return wpa_s->driver->get_hw_feature_data(wpa_s->drv_priv, 23659243Sobrien num_modes, flags); 23759243Sobrien return NULL; 23859243Sobrien} 23959243Sobrien 24059243Sobrienstatic inline int wpa_drv_set_country(struct wpa_supplicant *wpa_s, 24159243Sobrien const char *alpha2) 24259243Sobrien{ 24359243Sobrien if (wpa_s->driver->set_country) 24459243Sobrien return wpa_s->driver->set_country(wpa_s->drv_priv, alpha2); 24559243Sobrien return 0; 24659243Sobrien} 24759243Sobrien 24859243Sobrienstatic inline int wpa_drv_send_mlme(struct wpa_supplicant *wpa_s, 24959243Sobrien const u8 *data, size_t data_len, int noack) 25059243Sobrien{ 25159243Sobrien if (wpa_s->driver->send_mlme) 25259243Sobrien return wpa_s->driver->send_mlme(wpa_s->drv_priv, 25359243Sobrien data, data_len, noack); 25459243Sobrien return -1; 25559243Sobrien} 25659243Sobrien 25759243Sobrienstatic inline int wpa_drv_update_ft_ies(struct wpa_supplicant *wpa_s, 25859243Sobrien const u8 *md, 25959243Sobrien const u8 *ies, size_t ies_len) 26059243Sobrien{ 26159243Sobrien if (wpa_s->driver->update_ft_ies) 26259243Sobrien return wpa_s->driver->update_ft_ies(wpa_s->drv_priv, md, 26359243Sobrien ies, ies_len); 26459243Sobrien return -1; 26559243Sobrien} 26659243Sobrien 26759243Sobrienstatic inline int wpa_drv_send_ft_action(struct wpa_supplicant *wpa_s, 26859243Sobrien u8 action, const u8 *target_ap, 26959243Sobrien const u8 *ies, size_t ies_len) 27059243Sobrien{ 27159243Sobrien if (wpa_s->driver->send_ft_action) 27259243Sobrien return wpa_s->driver->send_ft_action(wpa_s->drv_priv, action, 27359243Sobrien target_ap, ies, ies_len); 27459243Sobrien return -1; 27559243Sobrien} 27659243Sobrien 27759243Sobrienstatic inline int wpa_drv_set_ap(struct wpa_supplicant *wpa_s, 27859243Sobrien struct wpa_driver_ap_params *params) 27959243Sobrien{ 28059243Sobrien if (wpa_s->driver->set_ap) 28159243Sobrien return wpa_s->driver->set_ap(wpa_s->drv_priv, params); 28259243Sobrien return -1; 28359243Sobrien} 28459243Sobrien 28559243Sobrienstatic inline int wpa_drv_sta_add(struct wpa_supplicant *wpa_s, 28659243Sobrien struct hostapd_sta_add_params *params) 28759243Sobrien{ 28859243Sobrien if (wpa_s->driver->sta_add) 28959243Sobrien return wpa_s->driver->sta_add(wpa_s->drv_priv, params); 29059243Sobrien return -1; 29159243Sobrien} 29259243Sobrien 29359243Sobrienstatic inline int wpa_drv_sta_remove(struct wpa_supplicant *wpa_s, 29459243Sobrien const u8 *addr) 29559243Sobrien{ 29659243Sobrien if (wpa_s->driver->sta_remove) 29759243Sobrien return wpa_s->driver->sta_remove(wpa_s->drv_priv, addr); 29859243Sobrien return -1; 29959243Sobrien} 30059243Sobrien 30159243Sobrienstatic inline int wpa_drv_hapd_send_eapol(struct wpa_supplicant *wpa_s, 30259243Sobrien const u8 *addr, const u8 *data, 30359243Sobrien size_t data_len, int encrypt, 30459243Sobrien const u8 *own_addr, u32 flags) 30559243Sobrien{ 30659243Sobrien if (wpa_s->driver->hapd_send_eapol) 30759243Sobrien return wpa_s->driver->hapd_send_eapol(wpa_s->drv_priv, addr, 30859243Sobrien data, data_len, encrypt, 30959243Sobrien own_addr, flags); 31059243Sobrien return -1; 31159243Sobrien} 31259243Sobrien 31359243Sobrienstatic inline int wpa_drv_sta_set_flags(struct wpa_supplicant *wpa_s, 31459243Sobrien const u8 *addr, int total_flags, 31559243Sobrien int flags_or, int flags_and) 31659243Sobrien{ 31759243Sobrien if (wpa_s->driver->sta_set_flags) 31859243Sobrien return wpa_s->driver->sta_set_flags(wpa_s->drv_priv, addr, 31959243Sobrien total_flags, flags_or, 32059243Sobrien flags_and); 32159243Sobrien return -1; 32259243Sobrien} 32359243Sobrien 32459243Sobrienstatic inline int wpa_drv_set_supp_port(struct wpa_supplicant *wpa_s, 32559243Sobrien int authorized) 32659243Sobrien{ 32759243Sobrien if (wpa_s->driver->set_supp_port) { 32859243Sobrien return wpa_s->driver->set_supp_port(wpa_s->drv_priv, 32959243Sobrien authorized); 33059243Sobrien } 33159243Sobrien return 0; 33259243Sobrien} 33359243Sobrien 33459243Sobrienstatic inline int wpa_drv_send_action(struct wpa_supplicant *wpa_s, 33559243Sobrien unsigned int freq, 33659243Sobrien unsigned int wait, 33759243Sobrien const u8 *dst, const u8 *src, 33859243Sobrien const u8 *bssid, 33959243Sobrien const u8 *data, size_t data_len, 34059243Sobrien int no_cck) 34159243Sobrien{ 34259243Sobrien if (wpa_s->driver->send_action) 34359243Sobrien return wpa_s->driver->send_action(wpa_s->drv_priv, freq, 34459243Sobrien wait, dst, src, bssid, 34559243Sobrien data, data_len, no_cck); 34659243Sobrien return -1; 34759243Sobrien} 34859243Sobrien 34959243Sobrienstatic inline void wpa_drv_send_action_cancel_wait(struct wpa_supplicant *wpa_s) 35059243Sobrien{ 35159243Sobrien if (wpa_s->driver->send_action_cancel_wait) 35259243Sobrien wpa_s->driver->send_action_cancel_wait(wpa_s->drv_priv); 35359243Sobrien} 35459243Sobrien 35559243Sobrienstatic inline int wpa_drv_set_freq(struct wpa_supplicant *wpa_s, 35659243Sobrien struct hostapd_freq_params *freq) 35759243Sobrien{ 35859243Sobrien if (wpa_s->driver->set_freq) 35959243Sobrien return wpa_s->driver->set_freq(wpa_s->drv_priv, freq); 36059243Sobrien return -1; 36159243Sobrien} 36259243Sobrien 36359243Sobrienstatic inline int wpa_drv_if_add(struct wpa_supplicant *wpa_s, 36459243Sobrien enum wpa_driver_if_type type, 36559243Sobrien const char *ifname, const u8 *addr, 36659243Sobrien void *bss_ctx, char *force_ifname, 36759243Sobrien u8 *if_addr, const char *bridge) 36859243Sobrien{ 36959243Sobrien if (wpa_s->driver->if_add) 37059243Sobrien return wpa_s->driver->if_add(wpa_s->drv_priv, type, ifname, 37159243Sobrien addr, bss_ctx, NULL, force_ifname, 37259243Sobrien if_addr, bridge); 37359243Sobrien return -1; 37459243Sobrien} 37559243Sobrien 37659243Sobrienstatic inline int wpa_drv_if_remove(struct wpa_supplicant *wpa_s, 37759243Sobrien enum wpa_driver_if_type type, 37859243Sobrien const char *ifname) 37959243Sobrien{ 38059243Sobrien if (wpa_s->driver->if_remove) 38159243Sobrien return wpa_s->driver->if_remove(wpa_s->drv_priv, type, ifname); 38259243Sobrien return -1; 38359243Sobrien} 38459243Sobrien 38559243Sobrienstatic inline int wpa_drv_remain_on_channel(struct wpa_supplicant *wpa_s, 38659243Sobrien unsigned int freq, 38759243Sobrien unsigned int duration) 38859243Sobrien{ 38959243Sobrien if (wpa_s->driver->remain_on_channel) 39059243Sobrien return wpa_s->driver->remain_on_channel(wpa_s->drv_priv, freq, 39159243Sobrien duration); 39259243Sobrien return -1; 39359243Sobrien} 39459243Sobrien 39559243Sobrienstatic inline int wpa_drv_cancel_remain_on_channel( 39659243Sobrien struct wpa_supplicant *wpa_s) 39759243Sobrien{ 39859243Sobrien if (wpa_s->driver->cancel_remain_on_channel) 39959243Sobrien return wpa_s->driver->cancel_remain_on_channel( 40059243Sobrien wpa_s->drv_priv); 40159243Sobrien return -1; 40259243Sobrien} 40359243Sobrien 40459243Sobrienstatic inline int wpa_drv_probe_req_report(struct wpa_supplicant *wpa_s, 40559243Sobrien int report) 40659243Sobrien{ 40759243Sobrien if (wpa_s->driver->probe_req_report) 40859243Sobrien return wpa_s->driver->probe_req_report(wpa_s->drv_priv, 40959243Sobrien report); 41059243Sobrien return -1; 41159243Sobrien} 41259243Sobrien 41359243Sobrienstatic inline int wpa_drv_deinit_ap(struct wpa_supplicant *wpa_s) 41459243Sobrien{ 41559243Sobrien if (wpa_s->driver->deinit_ap) 41659243Sobrien return wpa_s->driver->deinit_ap(wpa_s->drv_priv); 41759243Sobrien return 0; 41859243Sobrien} 41959243Sobrien 42059243Sobrienstatic inline int wpa_drv_deinit_p2p_cli(struct wpa_supplicant *wpa_s) 42159243Sobrien{ 42259243Sobrien if (wpa_s->driver->deinit_p2p_cli) 42359243Sobrien return wpa_s->driver->deinit_p2p_cli(wpa_s->drv_priv); 42459243Sobrien return 0; 42559243Sobrien} 42659243Sobrien 42759243Sobrienstatic inline void wpa_drv_suspend(struct wpa_supplicant *wpa_s) 42859243Sobrien{ 42959243Sobrien if (wpa_s->driver->suspend) 43059243Sobrien wpa_s->driver->suspend(wpa_s->drv_priv); 43159243Sobrien} 43259243Sobrien 43359243Sobrienstatic inline void wpa_drv_resume(struct wpa_supplicant *wpa_s) 43459243Sobrien{ 43559243Sobrien if (wpa_s->driver->resume) 43659243Sobrien wpa_s->driver->resume(wpa_s->drv_priv); 43759243Sobrien} 43859243Sobrien 43959243Sobrienstatic inline int wpa_drv_signal_monitor(struct wpa_supplicant *wpa_s, 44059243Sobrien int threshold, int hysteresis) 44159243Sobrien{ 44259243Sobrien if (wpa_s->driver->signal_monitor) 44359243Sobrien return wpa_s->driver->signal_monitor(wpa_s->drv_priv, 44459243Sobrien threshold, hysteresis); 44559243Sobrien return -1; 44659243Sobrien} 44759243Sobrien 44859243Sobrienstatic inline int wpa_drv_signal_poll(struct wpa_supplicant *wpa_s, 44959243Sobrien struct wpa_signal_info *si) 45059243Sobrien{ 45159243Sobrien if (wpa_s->driver->signal_poll) 45259243Sobrien return wpa_s->driver->signal_poll(wpa_s->drv_priv, si); 45359243Sobrien return -1; 45459243Sobrien} 45559243Sobrien 45659243Sobrienstatic inline int wpa_drv_pktcnt_poll(struct wpa_supplicant *wpa_s, 45759243Sobrien struct hostap_sta_driver_data *sta) 45859243Sobrien{ 45959243Sobrien if (wpa_s->driver->read_sta_data) 46059243Sobrien return wpa_s->driver->read_sta_data(wpa_s->drv_priv, sta, 46159243Sobrien wpa_s->bssid); 46259243Sobrien return -1; 46359243Sobrien} 46459243Sobrien 46559243Sobrienstatic inline int wpa_drv_set_ap_wps_ie(struct wpa_supplicant *wpa_s, 46659243Sobrien const struct wpabuf *beacon, 46759243Sobrien const struct wpabuf *proberesp, 46859243Sobrien const struct wpabuf *assocresp) 46959243Sobrien{ 47059243Sobrien if (!wpa_s->driver->set_ap_wps_ie) 47159243Sobrien return -1; 47259243Sobrien return wpa_s->driver->set_ap_wps_ie(wpa_s->drv_priv, beacon, 47359243Sobrien proberesp, assocresp); 47459243Sobrien} 47559243Sobrien 47659243Sobrienstatic inline int wpa_drv_shared_freq(struct wpa_supplicant *wpa_s) 47759243Sobrien{ 47859243Sobrien if (!wpa_s->driver->shared_freq) 47959243Sobrien return -1; 48059243Sobrien return wpa_s->driver->shared_freq(wpa_s->drv_priv); 48159243Sobrien} 48259243Sobrien 48359243Sobrienstatic inline int wpa_drv_get_noa(struct wpa_supplicant *wpa_s, 48459243Sobrien u8 *buf, size_t buf_len) 48559243Sobrien{ 48659243Sobrien if (!wpa_s->driver->get_noa) 48759243Sobrien return -1; 48859243Sobrien return wpa_s->driver->get_noa(wpa_s->drv_priv, buf, buf_len); 48959243Sobrien} 49059243Sobrien 49159243Sobrienstatic inline int wpa_drv_set_p2p_powersave(struct wpa_supplicant *wpa_s, 49259243Sobrien int legacy_ps, int opp_ps, 49359243Sobrien int ctwindow) 49459243Sobrien{ 49559243Sobrien if (!wpa_s->driver->set_p2p_powersave) 49659243Sobrien return -1; 49759243Sobrien return wpa_s->driver->set_p2p_powersave(wpa_s->drv_priv, legacy_ps, 49859243Sobrien opp_ps, ctwindow); 49959243Sobrien} 50059243Sobrien 50159243Sobrienstatic inline int wpa_drv_ampdu(struct wpa_supplicant *wpa_s, int ampdu) 50259243Sobrien{ 50359243Sobrien if (!wpa_s->driver->ampdu) 50459243Sobrien return -1; 50559243Sobrien return wpa_s->driver->ampdu(wpa_s->drv_priv, ampdu); 50659243Sobrien} 50759243Sobrien 50859243Sobrienstatic inline int wpa_drv_p2p_find(struct wpa_supplicant *wpa_s, 50959243Sobrien unsigned int timeout, int type) 51059243Sobrien{ 51159243Sobrien if (!wpa_s->driver->p2p_find) 51259243Sobrien return -1; 51359243Sobrien return wpa_s->driver->p2p_find(wpa_s->drv_priv, timeout, type); 51459243Sobrien} 51559243Sobrien 51659243Sobrienstatic inline int wpa_drv_p2p_stop_find(struct wpa_supplicant *wpa_s) 51759243Sobrien{ 51859243Sobrien if (!wpa_s->driver->p2p_stop_find) 51959243Sobrien return -1; 52059243Sobrien return wpa_s->driver->p2p_stop_find(wpa_s->drv_priv); 52159243Sobrien} 52259243Sobrien 52359243Sobrienstatic inline int wpa_drv_p2p_listen(struct wpa_supplicant *wpa_s, 52459243Sobrien unsigned int timeout) 52559243Sobrien{ 52659243Sobrien if (!wpa_s->driver->p2p_listen) 52759243Sobrien return -1; 52859243Sobrien return wpa_s->driver->p2p_listen(wpa_s->drv_priv, timeout); 52959243Sobrien} 53059243Sobrien 53159243Sobrienstatic inline int wpa_drv_p2p_connect(struct wpa_supplicant *wpa_s, 53259243Sobrien const u8 *peer_addr, int wps_method, 53359415Sobrien int go_intent, 53459415Sobrien const u8 *own_interface_addr, 53559415Sobrien unsigned int force_freq, 53659243Sobrien int persistent_group) 53759243Sobrien{ 53859243Sobrien if (!wpa_s->driver->p2p_connect) 53959243Sobrien return -1; 54059243Sobrien return wpa_s->driver->p2p_connect(wpa_s->drv_priv, peer_addr, 54159243Sobrien wps_method, go_intent, 54259243Sobrien own_interface_addr, force_freq, 54359415Sobrien persistent_group); 54459415Sobrien} 54559415Sobrien 54659243Sobrienstatic inline int wpa_drv_wps_success_cb(struct wpa_supplicant *wpa_s, 54759243Sobrien const u8 *peer_addr) 54859243Sobrien{ 54959243Sobrien if (!wpa_s->driver->wps_success_cb) 55059243Sobrien return -1; 55159243Sobrien return wpa_s->driver->wps_success_cb(wpa_s->drv_priv, peer_addr); 55259243Sobrien} 55359243Sobrien 55459243Sobrienstatic inline int 55559243Sobrienwpa_drv_p2p_group_formation_failed(struct wpa_supplicant *wpa_s) 55659243Sobrien{ 55759243Sobrien if (!wpa_s->driver->p2p_group_formation_failed) 55859243Sobrien return -1; 55959415Sobrien return wpa_s->driver->p2p_group_formation_failed(wpa_s->drv_priv); 56059415Sobrien} 56159415Sobrien 56259415Sobrienstatic inline int wpa_drv_p2p_set_params(struct wpa_supplicant *wpa_s, 56359243Sobrien const struct p2p_params *params) 56459243Sobrien{ 56559243Sobrien if (!wpa_s->driver->p2p_set_params) 56659243Sobrien return -1; 56759243Sobrien return wpa_s->driver->p2p_set_params(wpa_s->drv_priv, params); 56859243Sobrien} 56959243Sobrien 57059243Sobrienstatic inline int wpa_drv_p2p_prov_disc_req(struct wpa_supplicant *wpa_s, 57159243Sobrien const u8 *peer_addr, 57259243Sobrien u16 config_methods, int join) 57359243Sobrien{ 57459243Sobrien if (!wpa_s->driver->p2p_prov_disc_req) 57559243Sobrien return -1; 57659243Sobrien return wpa_s->driver->p2p_prov_disc_req(wpa_s->drv_priv, peer_addr, 57759243Sobrien config_methods, join); 57859243Sobrien} 57959243Sobrien 58059243Sobrienstatic inline u64 wpa_drv_p2p_sd_request(struct wpa_supplicant *wpa_s, 58159243Sobrien const u8 *dst, 58259243Sobrien const struct wpabuf *tlvs) 58359243Sobrien{ 58459243Sobrien if (!wpa_s->driver->p2p_sd_request) 58559243Sobrien return 0; 58659243Sobrien return wpa_s->driver->p2p_sd_request(wpa_s->drv_priv, dst, tlvs); 58759243Sobrien} 58859243Sobrien 58959243Sobrienstatic inline int wpa_drv_p2p_sd_cancel_request(struct wpa_supplicant *wpa_s, 59059243Sobrien u64 req) 59159243Sobrien{ 59259243Sobrien if (!wpa_s->driver->p2p_sd_cancel_request) 59359243Sobrien return -1; 59459243Sobrien return wpa_s->driver->p2p_sd_cancel_request(wpa_s->drv_priv, req); 59559243Sobrien} 59659243Sobrien 59759243Sobrienstatic inline int wpa_drv_p2p_sd_response(struct wpa_supplicant *wpa_s, 59859243Sobrien int freq, const u8 *dst, 59959243Sobrien u8 dialog_token, 60059243Sobrien const struct wpabuf *resp_tlvs) 60159243Sobrien{ 60259243Sobrien if (!wpa_s->driver->p2p_sd_response) 60359243Sobrien return -1; 60459415Sobrien return wpa_s->driver->p2p_sd_response(wpa_s->drv_priv, freq, dst, 60559415Sobrien dialog_token, resp_tlvs); 60659415Sobrien} 60759243Sobrien 60859243Sobrienstatic inline int wpa_drv_p2p_service_update(struct wpa_supplicant *wpa_s) 60959243Sobrien{ 61059415Sobrien if (!wpa_s->driver->p2p_service_update) 61159415Sobrien return -1; 61259415Sobrien return wpa_s->driver->p2p_service_update(wpa_s->drv_priv); 61359415Sobrien} 61459415Sobrien 61559415Sobrienstatic inline int wpa_drv_p2p_reject(struct wpa_supplicant *wpa_s, 61659243Sobrien const u8 *addr) 61759243Sobrien{ 61859243Sobrien if (!wpa_s->driver->p2p_reject) 61959243Sobrien return -1; 62059243Sobrien return wpa_s->driver->p2p_reject(wpa_s->drv_priv, addr); 62159243Sobrien} 62259243Sobrien 62359243Sobrienstatic inline int wpa_drv_p2p_invite(struct wpa_supplicant *wpa_s, 62459243Sobrien const u8 *peer, int role, const u8 *bssid, 62559243Sobrien const u8 *ssid, size_t ssid_len, 62659243Sobrien const u8 *go_dev_addr, 62759243Sobrien int persistent_group) 62859243Sobrien{ 62959243Sobrien if (!wpa_s->driver->p2p_invite) 63059243Sobrien return -1; 63159243Sobrien return wpa_s->driver->p2p_invite(wpa_s->drv_priv, peer, role, bssid, 63259243Sobrien ssid, ssid_len, go_dev_addr, 63359243Sobrien persistent_group); 63459243Sobrien} 63559243Sobrien 63659243Sobrienstatic inline int wpa_drv_send_tdls_mgmt(struct wpa_supplicant *wpa_s, 63759243Sobrien const u8 *dst, u8 action_code, 63859243Sobrien u8 dialog_token, u16 status_code, 63959243Sobrien const u8 *buf, size_t len) 64059243Sobrien{ 64159243Sobrien if (wpa_s->driver->send_tdls_mgmt) { 64259243Sobrien return wpa_s->driver->send_tdls_mgmt(wpa_s->drv_priv, dst, 64359243Sobrien action_code, dialog_token, 64459243Sobrien status_code, buf, len); 64559243Sobrien } 64659243Sobrien return -1; 64759243Sobrien} 64859243Sobrien 64959243Sobrienstatic inline int wpa_drv_tdls_oper(struct wpa_supplicant *wpa_s, 65059243Sobrien enum tdls_oper oper, const u8 *peer) 65159243Sobrien{ 65259243Sobrien if (!wpa_s->driver->tdls_oper) 65359243Sobrien return -1; 65459243Sobrien return wpa_s->driver->tdls_oper(wpa_s->drv_priv, oper, peer); 65559243Sobrien} 65659243Sobrien 65759243Sobrienstatic inline void wpa_drv_set_rekey_info(struct wpa_supplicant *wpa_s, 65859243Sobrien const u8 *kek, const u8 *kck, 65959243Sobrien const u8 *replay_ctr) 66059243Sobrien{ 66159243Sobrien if (!wpa_s->driver->set_rekey_info) 66259243Sobrien return; 66359243Sobrien wpa_s->driver->set_rekey_info(wpa_s->drv_priv, kek, kck, replay_ctr); 66459243Sobrien} 66559243Sobrien 66659243Sobrienstatic inline int wpa_drv_radio_disable(struct wpa_supplicant *wpa_s, 66759243Sobrien int disabled) 66859243Sobrien{ 66959243Sobrien if (!wpa_s->driver->radio_disable) 67059243Sobrien return -1; 67159243Sobrien return wpa_s->driver->radio_disable(wpa_s->drv_priv, disabled); 67259243Sobrien} 67359243Sobrien 67459243Sobrienstatic inline int wpa_drv_switch_channel(struct wpa_supplicant *wpa_s, 67559243Sobrien unsigned int freq) 67659243Sobrien{ 67759243Sobrien if (!wpa_s->driver->switch_channel) 67859243Sobrien return -1; 67959243Sobrien return wpa_s->driver->switch_channel(wpa_s->drv_priv, freq); 68059243Sobrien} 68159243Sobrien 68259243Sobrienstatic inline int wpa_drv_wnm_oper(struct wpa_supplicant *wpa_s, 68359243Sobrien enum wnm_oper oper, const u8 *peer, 68459243Sobrien u8 *buf, u16 *buf_len) 68559243Sobrien{ 68659243Sobrien if (!wpa_s->driver->wnm_oper) 68759243Sobrien return -1; 68859243Sobrien return wpa_s->driver->wnm_oper(wpa_s->drv_priv, oper, peer, buf, 68959243Sobrien buf_len); 69059243Sobrien} 69159243Sobrien 69259243Sobrien#endif /* DRIVER_I_H */ 69359243Sobrien