18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wpa_supplicant - Internal driver interface wrappers 38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Copyright (c) 2003-2009, Jouni Malinen <j@w1.fi> 48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 5c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * This software may be distributed under the terms of the BSD license. 6c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * See README for more details. 78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef DRIVER_I_H 108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define DRIVER_I_H 118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "drivers/driver.h" 138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* driver_ops */ 158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void * wpa_drv_init(struct wpa_supplicant *wpa_s, 168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *ifname) 178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->init2) 198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->init2(wpa_s, ifname, 208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_s->global_drv_priv); 218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->init) { 228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->init(wpa_s, ifname); 238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return NULL; 258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void wpa_drv_deinit(struct wpa_supplicant *wpa_s) 288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->deinit) 308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_s->driver->deinit(wpa_s->drv_priv); 318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_set_param(struct wpa_supplicant *wpa_s, 348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *param) 358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->set_param) 378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->set_param(wpa_s->drv_priv, param); 388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_set_countermeasures(struct wpa_supplicant *wpa_s, 428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int enabled) 438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->set_countermeasures) { 458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->set_countermeasures(wpa_s->drv_priv, 468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enabled); 478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_authenticate(struct wpa_supplicant *wpa_s, 528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_driver_auth_params *params) 538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->authenticate) 558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->authenticate(wpa_s->drv_priv, params); 568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_associate(struct wpa_supplicant *wpa_s, 608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_driver_associate_params *params) 618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->associate) { 638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->associate(wpa_s->drv_priv, params); 648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_scan(struct wpa_supplicant *wpa_s, 698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_driver_scan_params *params) 708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->scan2) 728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->scan2(wpa_s->drv_priv, params); 738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 761f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtstatic inline int wpa_drv_sched_scan(struct wpa_supplicant *wpa_s, 771f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt struct wpa_driver_scan_params *params, 781f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt u32 interval) 791f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt{ 801f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt if (wpa_s->driver->sched_scan) 811f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt return wpa_s->driver->sched_scan(wpa_s->drv_priv, 821f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt params, interval); 831f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt return -1; 841f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt} 851f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt 861f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtstatic inline int wpa_drv_stop_sched_scan(struct wpa_supplicant *wpa_s) 871f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt{ 881f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt if (wpa_s->driver->stop_sched_scan) 891f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt return wpa_s->driver->stop_sched_scan(wpa_s->drv_priv); 901f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt return -1; 911f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt} 921f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt 938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline struct wpa_scan_results * wpa_drv_get_scan_results2( 948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_supplicant *wpa_s) 958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->get_scan_results2) 978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->get_scan_results2(wpa_s->drv_priv); 988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return NULL; 998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_get_bssid(struct wpa_supplicant *wpa_s, u8 *bssid) 1028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->get_bssid) { 1048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->get_bssid(wpa_s->drv_priv, bssid); 1058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 1078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_get_ssid(struct wpa_supplicant *wpa_s, u8 *ssid) 1108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->get_ssid) { 1128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->get_ssid(wpa_s->drv_priv, ssid); 1138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 1158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_set_key(struct wpa_supplicant *wpa_s, 1188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum wpa_alg alg, const u8 *addr, 1198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int key_idx, int set_tx, 1208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *seq, size_t seq_len, 1218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *key, size_t key_len) 1228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->set_key) { 1248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_s->keys_cleared = 0; 1258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->set_key(wpa_s->ifname, wpa_s->drv_priv, 1268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt alg, addr, key_idx, set_tx, 1278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt seq, seq_len, key, key_len); 1288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 1308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 13234af306c42b7ccf956508e7cd23f0ba90606e360Dmitry Shmidtstatic inline int wpa_drv_sta_deauth(struct wpa_supplicant *wpa_s, 13334af306c42b7ccf956508e7cd23f0ba90606e360Dmitry Shmidt const u8 *addr, int reason_code) 13434af306c42b7ccf956508e7cd23f0ba90606e360Dmitry Shmidt{ 13534af306c42b7ccf956508e7cd23f0ba90606e360Dmitry Shmidt if (wpa_s->driver->sta_deauth) { 136c2ebb4b85d69b65f552fee71ac68f44e8d87b39eDmitry Shmidt return wpa_s->driver->sta_deauth(wpa_s->drv_priv, 137c2ebb4b85d69b65f552fee71ac68f44e8d87b39eDmitry Shmidt wpa_s->own_addr, addr, 13834af306c42b7ccf956508e7cd23f0ba90606e360Dmitry Shmidt reason_code); 13934af306c42b7ccf956508e7cd23f0ba90606e360Dmitry Shmidt } 14034af306c42b7ccf956508e7cd23f0ba90606e360Dmitry Shmidt return -1; 14134af306c42b7ccf956508e7cd23f0ba90606e360Dmitry Shmidt} 14234af306c42b7ccf956508e7cd23f0ba90606e360Dmitry Shmidt 1438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_deauthenticate(struct wpa_supplicant *wpa_s, 1448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *addr, int reason_code) 1458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->deauthenticate) { 1478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->deauthenticate(wpa_s->drv_priv, addr, 1488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reason_code); 1498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 1518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_add_pmkid(struct wpa_supplicant *wpa_s, 1548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *bssid, const u8 *pmkid) 1558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->add_pmkid) { 1578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->add_pmkid(wpa_s->drv_priv, bssid, pmkid); 1588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 1608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_remove_pmkid(struct wpa_supplicant *wpa_s, 1638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *bssid, const u8 *pmkid) 1648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->remove_pmkid) { 1668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->remove_pmkid(wpa_s->drv_priv, bssid, 1678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt pmkid); 1688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 1708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_flush_pmkid(struct wpa_supplicant *wpa_s) 1738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->flush_pmkid) { 1758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->flush_pmkid(wpa_s->drv_priv); 1768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 1788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_get_capa(struct wpa_supplicant *wpa_s, 1818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_driver_capa *capa) 1828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->get_capa) { 1848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->get_capa(wpa_s->drv_priv, capa); 1858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 1878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void wpa_drv_poll(struct wpa_supplicant *wpa_s) 1908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->poll) { 1928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_s->driver->poll(wpa_s->drv_priv); 1938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline const char * wpa_drv_get_ifname(struct wpa_supplicant *wpa_s) 1978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->get_ifname) { 1998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->get_ifname(wpa_s->drv_priv); 2008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 2018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return NULL; 2028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline const u8 * wpa_drv_get_mac_addr(struct wpa_supplicant *wpa_s) 2058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->get_mac_addr) { 2078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->get_mac_addr(wpa_s->drv_priv); 2088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 2098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return NULL; 2108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_send_eapol(struct wpa_supplicant *wpa_s, 2138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *dst, u16 proto, 2148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *data, size_t data_len) 2158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->send_eapol) 2178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->send_eapol(wpa_s->drv_priv, dst, proto, 2188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt data, data_len); 2198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 2208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_set_operstate(struct wpa_supplicant *wpa_s, 2238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int state) 2248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->set_operstate) 2268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->set_operstate(wpa_s->drv_priv, state); 2278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 2288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_mlme_setprotection(struct wpa_supplicant *wpa_s, 2318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *addr, int protect_type, 2328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int key_type) 2338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->mlme_setprotection) 2358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->mlme_setprotection(wpa_s->drv_priv, addr, 2368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt protect_type, 2378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt key_type); 2388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 2398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline struct hostapd_hw_modes * 2428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtwpa_drv_get_hw_feature_data(struct wpa_supplicant *wpa_s, u16 *num_modes, 2438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 *flags) 2448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->get_hw_feature_data) 2468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->get_hw_feature_data(wpa_s->drv_priv, 2478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt num_modes, flags); 2488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return NULL; 2498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_set_country(struct wpa_supplicant *wpa_s, 2528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *alpha2) 2538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->set_country) 2558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->set_country(wpa_s->drv_priv, alpha2); 2568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 2578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_send_mlme(struct wpa_supplicant *wpa_s, 2601f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt const u8 *data, size_t data_len, int noack) 2618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->send_mlme) 2638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->send_mlme(wpa_s->drv_priv, 2641f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt data, data_len, noack); 2658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 2668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_update_ft_ies(struct wpa_supplicant *wpa_s, 2698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *md, 2708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *ies, size_t ies_len) 2718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->update_ft_ies) 2738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->update_ft_ies(wpa_s->drv_priv, md, 2748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt ies, ies_len); 2758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 2768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_send_ft_action(struct wpa_supplicant *wpa_s, 2798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 action, const u8 *target_ap, 2808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *ies, size_t ies_len) 2818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->send_ft_action) 2838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->send_ft_action(wpa_s->drv_priv, action, 2848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt target_ap, ies, ies_len); 2858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 2868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2881f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtstatic inline int wpa_drv_set_ap(struct wpa_supplicant *wpa_s, 2891f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt struct wpa_driver_ap_params *params) 2908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2911f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt if (wpa_s->driver->set_ap) 2921f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt return wpa_s->driver->set_ap(wpa_s->drv_priv, params); 2938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 2948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_sta_add(struct wpa_supplicant *wpa_s, 2978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct hostapd_sta_add_params *params) 2988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->sta_add) 3008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->sta_add(wpa_s->drv_priv, params); 3018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 3028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_sta_remove(struct wpa_supplicant *wpa_s, 3058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *addr) 3068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->sta_remove) 3088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->sta_remove(wpa_s->drv_priv, addr); 3098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 3108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_hapd_send_eapol(struct wpa_supplicant *wpa_s, 3138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *addr, const u8 *data, 3148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t data_len, int encrypt, 3158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *own_addr, u32 flags) 3168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->hapd_send_eapol) 3188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->hapd_send_eapol(wpa_s->drv_priv, addr, 3198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt data, data_len, encrypt, 3208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt own_addr, flags); 3218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 3228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_sta_set_flags(struct wpa_supplicant *wpa_s, 3258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *addr, int total_flags, 3268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int flags_or, int flags_and) 3278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->sta_set_flags) 3298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->sta_set_flags(wpa_s->drv_priv, addr, 3308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt total_flags, flags_or, 3318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt flags_and); 3328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 3338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_set_supp_port(struct wpa_supplicant *wpa_s, 3368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int authorized) 3378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->set_supp_port) { 3398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->set_supp_port(wpa_s->drv_priv, 3408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt authorized); 3418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 3428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 3438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_send_action(struct wpa_supplicant *wpa_s, 3468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int freq, 3478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int wait, 3488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *dst, const u8 *src, 3498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *bssid, 3501f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt const u8 *data, size_t data_len, 3511f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt int no_cck) 3528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->send_action) 3548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->send_action(wpa_s->drv_priv, freq, 3558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wait, dst, src, bssid, 3561f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt data, data_len, no_cck); 3578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 3588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void wpa_drv_send_action_cancel_wait(struct wpa_supplicant *wpa_s) 3618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->send_action_cancel_wait) 3638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_s->driver->send_action_cancel_wait(wpa_s->drv_priv); 3648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_set_freq(struct wpa_supplicant *wpa_s, 3678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct hostapd_freq_params *freq) 3688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->set_freq) 3708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->set_freq(wpa_s->drv_priv, freq); 3718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 3728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_if_add(struct wpa_supplicant *wpa_s, 3758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum wpa_driver_if_type type, 3768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *ifname, const u8 *addr, 3778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *bss_ctx, char *force_ifname, 3788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *if_addr, const char *bridge) 3798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->if_add) 3818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->if_add(wpa_s->drv_priv, type, ifname, 3828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt addr, bss_ctx, NULL, force_ifname, 3838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if_addr, bridge); 3848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 3858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_if_remove(struct wpa_supplicant *wpa_s, 3888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum wpa_driver_if_type type, 3898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *ifname) 3908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->if_remove) 3928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->if_remove(wpa_s->drv_priv, type, ifname); 3938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 3948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_remain_on_channel(struct wpa_supplicant *wpa_s, 3978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int freq, 3988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int duration) 3998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->remain_on_channel) 4018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->remain_on_channel(wpa_s->drv_priv, freq, 4028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt duration); 4038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 4048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_cancel_remain_on_channel( 4078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_supplicant *wpa_s) 4088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->cancel_remain_on_channel) 4108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->cancel_remain_on_channel( 4118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_s->drv_priv); 4128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 4138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_probe_req_report(struct wpa_supplicant *wpa_s, 4168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int report) 4178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->probe_req_report) 4198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->probe_req_report(wpa_s->drv_priv, 4208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt report); 4218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 4228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_deinit_ap(struct wpa_supplicant *wpa_s) 4258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->deinit_ap) 4278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->deinit_ap(wpa_s->drv_priv); 4288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 4298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 43104949598a23f501be6eec21697465fd46a28840aDmitry Shmidtstatic inline int wpa_drv_deinit_p2p_cli(struct wpa_supplicant *wpa_s) 43204949598a23f501be6eec21697465fd46a28840aDmitry Shmidt{ 43304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt if (wpa_s->driver->deinit_p2p_cli) 43404949598a23f501be6eec21697465fd46a28840aDmitry Shmidt return wpa_s->driver->deinit_p2p_cli(wpa_s->drv_priv); 43504949598a23f501be6eec21697465fd46a28840aDmitry Shmidt return 0; 43604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt} 43704949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 4388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void wpa_drv_suspend(struct wpa_supplicant *wpa_s) 4398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->suspend) 4418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_s->driver->suspend(wpa_s->drv_priv); 4428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void wpa_drv_resume(struct wpa_supplicant *wpa_s) 4458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->resume) 4478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_s->driver->resume(wpa_s->drv_priv); 4488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_signal_monitor(struct wpa_supplicant *wpa_s, 4518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int threshold, int hysteresis) 4528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->signal_monitor) 4548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->signal_monitor(wpa_s->drv_priv, 4558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt threshold, hysteresis); 4568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 4578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_signal_poll(struct wpa_supplicant *wpa_s, 4608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_signal_info *si) 4618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->signal_poll) 4638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->signal_poll(wpa_s->drv_priv, si); 4648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 4658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 467fcd6f21dad589eb6fdba941c98e072ca2664726bYuhao Zhengstatic inline int wpa_drv_pktcnt_poll(struct wpa_supplicant *wpa_s, 468fcd6f21dad589eb6fdba941c98e072ca2664726bYuhao Zheng struct hostap_sta_driver_data *sta) 469fcd6f21dad589eb6fdba941c98e072ca2664726bYuhao Zheng{ 470fcd6f21dad589eb6fdba941c98e072ca2664726bYuhao Zheng if (wpa_s->driver->read_sta_data) 4711e6c57fee4a56b421cc20f6dc0785c9138b21337Jouni Malinen return wpa_s->driver->read_sta_data(wpa_s->drv_priv, sta, 4721e6c57fee4a56b421cc20f6dc0785c9138b21337Jouni Malinen wpa_s->bssid); 473fcd6f21dad589eb6fdba941c98e072ca2664726bYuhao Zheng return -1; 474fcd6f21dad589eb6fdba941c98e072ca2664726bYuhao Zheng} 475fcd6f21dad589eb6fdba941c98e072ca2664726bYuhao Zheng 4768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_set_ap_wps_ie(struct wpa_supplicant *wpa_s, 4778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *beacon, 4788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *proberesp, 4798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *assocresp) 4808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->set_ap_wps_ie) 4828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 4838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->set_ap_wps_ie(wpa_s->drv_priv, beacon, 4848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt proberesp, assocresp); 4858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_shared_freq(struct wpa_supplicant *wpa_s) 4888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->shared_freq) 4908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 4918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->shared_freq(wpa_s->drv_priv); 4928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_get_noa(struct wpa_supplicant *wpa_s, 4958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *buf, size_t buf_len) 4968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->get_noa) 4988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 4998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->get_noa(wpa_s->drv_priv, buf, buf_len); 5008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_set_p2p_powersave(struct wpa_supplicant *wpa_s, 5038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int legacy_ps, int opp_ps, 5048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int ctwindow) 5058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->set_p2p_powersave) 5078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->set_p2p_powersave(wpa_s->drv_priv, legacy_ps, 5098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt opp_ps, ctwindow); 5108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_ampdu(struct wpa_supplicant *wpa_s, int ampdu) 5138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->ampdu) 5158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->ampdu(wpa_s->drv_priv, ampdu); 5178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_find(struct wpa_supplicant *wpa_s, 5208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int timeout, int type) 5218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_find) 5238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_find(wpa_s->drv_priv, timeout, type); 5258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_stop_find(struct wpa_supplicant *wpa_s) 5288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_stop_find) 5308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_stop_find(wpa_s->drv_priv); 5328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_listen(struct wpa_supplicant *wpa_s, 5358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int timeout) 5368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_listen) 5388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_listen(wpa_s->drv_priv, timeout); 5408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_connect(struct wpa_supplicant *wpa_s, 5438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *peer_addr, int wps_method, 5448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int go_intent, 5458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *own_interface_addr, 5468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int force_freq, 5478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int persistent_group) 5488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_connect) 5508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_connect(wpa_s->drv_priv, peer_addr, 5528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wps_method, go_intent, 5538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt own_interface_addr, force_freq, 5548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt persistent_group); 5558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_wps_success_cb(struct wpa_supplicant *wpa_s, 5588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *peer_addr) 5598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->wps_success_cb) 5618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->wps_success_cb(wpa_s->drv_priv, peer_addr); 5638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int 5668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtwpa_drv_p2p_group_formation_failed(struct wpa_supplicant *wpa_s) 5678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_group_formation_failed) 5698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_group_formation_failed(wpa_s->drv_priv); 5718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_set_params(struct wpa_supplicant *wpa_s, 5748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct p2p_params *params) 5758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_set_params) 5778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_set_params(wpa_s->drv_priv, params); 5798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_prov_disc_req(struct wpa_supplicant *wpa_s, 5828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *peer_addr, 5831f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt u16 config_methods, int join) 5848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_prov_disc_req) 5868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_prov_disc_req(wpa_s->drv_priv, peer_addr, 5881f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt config_methods, join); 5898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline u64 wpa_drv_p2p_sd_request(struct wpa_supplicant *wpa_s, 5928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *dst, 5938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *tlvs) 5948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_sd_request) 5968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 5978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_sd_request(wpa_s->drv_priv, dst, tlvs); 5988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_sd_cancel_request(struct wpa_supplicant *wpa_s, 6018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u64 req) 6028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 6038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_sd_cancel_request) 6048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 6058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_sd_cancel_request(wpa_s->drv_priv, req); 6068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 6078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_sd_response(struct wpa_supplicant *wpa_s, 6098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int freq, const u8 *dst, 6108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 dialog_token, 6118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *resp_tlvs) 6128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 6138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_sd_response) 6148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 6158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_sd_response(wpa_s->drv_priv, freq, dst, 6168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt dialog_token, resp_tlvs); 6178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 6188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_service_update(struct wpa_supplicant *wpa_s) 6208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 6218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_service_update) 6228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 6238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_service_update(wpa_s->drv_priv); 6248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 6258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_reject(struct wpa_supplicant *wpa_s, 6278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *addr) 6288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 6298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_reject) 6308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 6318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_reject(wpa_s->drv_priv, addr); 6328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 6338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_invite(struct wpa_supplicant *wpa_s, 6358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *peer, int role, const u8 *bssid, 6368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *ssid, size_t ssid_len, 6378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *go_dev_addr, 6388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int persistent_group) 6398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 6408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_invite) 6418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 6428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_invite(wpa_s->drv_priv, peer, role, bssid, 6438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt ssid, ssid_len, go_dev_addr, 6448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt persistent_group); 6458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 6468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_send_tdls_mgmt(struct wpa_supplicant *wpa_s, 6488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *dst, u8 action_code, 6498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 dialog_token, u16 status_code, 6508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *buf, size_t len) 6518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 6528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->send_tdls_mgmt) { 6538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->send_tdls_mgmt(wpa_s->drv_priv, dst, 6548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt action_code, dialog_token, 6558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt status_code, buf, len); 6568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 6578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 6588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 6598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_tdls_oper(struct wpa_supplicant *wpa_s, 6618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum tdls_oper oper, const u8 *peer) 6628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 6638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->tdls_oper) 6648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 6658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->tdls_oper(wpa_s->drv_priv, oper, peer); 6668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 6678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6681f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt#ifdef ANDROID 669bd567ad93e03f285fdad93464100148cd5ae7941Dmitry Shmidtstatic inline int wpa_drv_driver_cmd(struct wpa_supplicant *wpa_s, 670bd567ad93e03f285fdad93464100148cd5ae7941Dmitry Shmidt char *cmd, char *buf, size_t buf_len) 671bd567ad93e03f285fdad93464100148cd5ae7941Dmitry Shmidt{ 672bd567ad93e03f285fdad93464100148cd5ae7941Dmitry Shmidt if (!wpa_s->driver->driver_cmd) 673bd567ad93e03f285fdad93464100148cd5ae7941Dmitry Shmidt return -1; 674bd567ad93e03f285fdad93464100148cd5ae7941Dmitry Shmidt return wpa_s->driver->driver_cmd(wpa_s->drv_priv, cmd, buf, buf_len); 675bd567ad93e03f285fdad93464100148cd5ae7941Dmitry Shmidt} 6761f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt#endif 677bd567ad93e03f285fdad93464100148cd5ae7941Dmitry Shmidt 6781f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtstatic inline void wpa_drv_set_rekey_info(struct wpa_supplicant *wpa_s, 6791f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt const u8 *kek, const u8 *kck, 6801f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt const u8 *replay_ctr) 6811f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt{ 6821f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt if (!wpa_s->driver->set_rekey_info) 6831f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt return; 6841f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt wpa_s->driver->set_rekey_info(wpa_s->drv_priv, kek, kck, replay_ctr); 6851f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt} 6861f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt 68704949598a23f501be6eec21697465fd46a28840aDmitry Shmidtstatic inline int wpa_drv_radio_disable(struct wpa_supplicant *wpa_s, 68804949598a23f501be6eec21697465fd46a28840aDmitry Shmidt int disabled) 68904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt{ 69004949598a23f501be6eec21697465fd46a28840aDmitry Shmidt if (!wpa_s->driver->radio_disable) 69104949598a23f501be6eec21697465fd46a28840aDmitry Shmidt return -1; 69204949598a23f501be6eec21697465fd46a28840aDmitry Shmidt return wpa_s->driver->radio_disable(wpa_s->drv_priv, disabled); 69304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt} 69404949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 695c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidtstatic inline int wpa_drv_switch_channel(struct wpa_supplicant *wpa_s, 69604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt unsigned int freq) 6971f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt{ 698c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt if (!wpa_s->driver->switch_channel) 6991f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt return -1; 700c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt return wpa_s->driver->switch_channel(wpa_s->drv_priv, freq); 7011f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt} 70204949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 70361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtstatic inline int wpa_drv_wnm_oper(struct wpa_supplicant *wpa_s, 70461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt enum wnm_oper oper, const u8 *peer, 70561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt u8 *buf, u16 *buf_len) 70661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt{ 70761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if (!wpa_s->driver->wnm_oper) 70861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt return -1; 70961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt return wpa_s->driver->wnm_oper(wpa_s->drv_priv, oper, peer, buf, 71061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt buf_len); 71161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt} 71261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 7138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* DRIVER_I_H */ 714