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 1328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_deauthenticate(struct wpa_supplicant *wpa_s, 1338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *addr, int reason_code) 1348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->deauthenticate) { 1368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->deauthenticate(wpa_s->drv_priv, addr, 1378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reason_code); 1388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 1408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_disassociate(struct wpa_supplicant *wpa_s, 1438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *addr, int reason_code) 1448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->disassociate) { 1468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->disassociate(wpa_s->drv_priv, addr, 1478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reason_code); 1488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 1508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_add_pmkid(struct wpa_supplicant *wpa_s, 1538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *bssid, const u8 *pmkid) 1548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->add_pmkid) { 1568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->add_pmkid(wpa_s->drv_priv, bssid, pmkid); 1578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 1598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_remove_pmkid(struct wpa_supplicant *wpa_s, 1628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *bssid, const u8 *pmkid) 1638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->remove_pmkid) { 1658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->remove_pmkid(wpa_s->drv_priv, bssid, 1668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt pmkid); 1678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 1698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_flush_pmkid(struct wpa_supplicant *wpa_s) 1728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->flush_pmkid) { 1748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->flush_pmkid(wpa_s->drv_priv); 1758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 1778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_get_capa(struct wpa_supplicant *wpa_s, 1808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_driver_capa *capa) 1818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->get_capa) { 1838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->get_capa(wpa_s->drv_priv, capa); 1848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 1868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void wpa_drv_poll(struct wpa_supplicant *wpa_s) 1898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->poll) { 1918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_s->driver->poll(wpa_s->drv_priv); 1928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline const char * wpa_drv_get_ifname(struct wpa_supplicant *wpa_s) 1968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->get_ifname) { 1988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->get_ifname(wpa_s->drv_priv); 1998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 2008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return NULL; 2018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline const u8 * wpa_drv_get_mac_addr(struct wpa_supplicant *wpa_s) 2048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->get_mac_addr) { 2068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->get_mac_addr(wpa_s->drv_priv); 2078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 2088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return NULL; 2098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_send_eapol(struct wpa_supplicant *wpa_s, 2128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *dst, u16 proto, 2138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *data, size_t data_len) 2148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->send_eapol) 2168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->send_eapol(wpa_s->drv_priv, dst, proto, 2178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt data, data_len); 2188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 2198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_set_operstate(struct wpa_supplicant *wpa_s, 2228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int state) 2238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->set_operstate) 2258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->set_operstate(wpa_s->drv_priv, state); 2268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 2278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_mlme_setprotection(struct wpa_supplicant *wpa_s, 2308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *addr, int protect_type, 2318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int key_type) 2328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->mlme_setprotection) 2348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->mlme_setprotection(wpa_s->drv_priv, addr, 2358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt protect_type, 2368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt key_type); 2378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 2388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline struct hostapd_hw_modes * 2418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtwpa_drv_get_hw_feature_data(struct wpa_supplicant *wpa_s, u16 *num_modes, 2428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 *flags) 2438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->get_hw_feature_data) 2458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->get_hw_feature_data(wpa_s->drv_priv, 2468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt num_modes, flags); 2478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return NULL; 2488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_set_country(struct wpa_supplicant *wpa_s, 2518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *alpha2) 2528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->set_country) 2548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->set_country(wpa_s->drv_priv, alpha2); 2558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 2568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_send_mlme(struct wpa_supplicant *wpa_s, 2591f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt const u8 *data, size_t data_len, int noack) 2608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->send_mlme) 2628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->send_mlme(wpa_s->drv_priv, 2631f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt data, data_len, noack); 2648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 2658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_update_ft_ies(struct wpa_supplicant *wpa_s, 2688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *md, 2698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *ies, size_t ies_len) 2708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->update_ft_ies) 2728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->update_ft_ies(wpa_s->drv_priv, md, 2738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt ies, ies_len); 2748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 2758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_send_ft_action(struct wpa_supplicant *wpa_s, 2788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 action, const u8 *target_ap, 2798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *ies, size_t ies_len) 2808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->send_ft_action) 2828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->send_ft_action(wpa_s->drv_priv, action, 2838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt target_ap, ies, ies_len); 2848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 2858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2871f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtstatic inline int wpa_drv_set_ap(struct wpa_supplicant *wpa_s, 2881f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt struct wpa_driver_ap_params *params) 2898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2901f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt if (wpa_s->driver->set_ap) 2911f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt return wpa_s->driver->set_ap(wpa_s->drv_priv, params); 2928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 2938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_sta_add(struct wpa_supplicant *wpa_s, 2968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct hostapd_sta_add_params *params) 2978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->sta_add) 2998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->sta_add(wpa_s->drv_priv, params); 3008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 3018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_sta_remove(struct wpa_supplicant *wpa_s, 3048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *addr) 3058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->sta_remove) 3078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->sta_remove(wpa_s->drv_priv, addr); 3088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 3098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_hapd_send_eapol(struct wpa_supplicant *wpa_s, 3128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *addr, const u8 *data, 3138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t data_len, int encrypt, 3148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *own_addr, u32 flags) 3158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->hapd_send_eapol) 3178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->hapd_send_eapol(wpa_s->drv_priv, addr, 3188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt data, data_len, encrypt, 3198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt own_addr, flags); 3208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 3218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_sta_set_flags(struct wpa_supplicant *wpa_s, 3248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *addr, int total_flags, 3258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int flags_or, int flags_and) 3268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->sta_set_flags) 3288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->sta_set_flags(wpa_s->drv_priv, addr, 3298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt total_flags, flags_or, 3308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt flags_and); 3318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 3328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_set_supp_port(struct wpa_supplicant *wpa_s, 3358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int authorized) 3368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->set_supp_port) { 3388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->set_supp_port(wpa_s->drv_priv, 3398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt authorized); 3408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 3418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 3428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_send_action(struct wpa_supplicant *wpa_s, 3458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int freq, 3468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int wait, 3478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *dst, const u8 *src, 3488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *bssid, 3491f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt const u8 *data, size_t data_len, 3501f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt int no_cck) 3518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->send_action) 3538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->send_action(wpa_s->drv_priv, freq, 3548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wait, dst, src, bssid, 3551f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt data, data_len, no_cck); 3568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 3578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void wpa_drv_send_action_cancel_wait(struct wpa_supplicant *wpa_s) 3608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->send_action_cancel_wait) 3628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_s->driver->send_action_cancel_wait(wpa_s->drv_priv); 3638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_set_freq(struct wpa_supplicant *wpa_s, 3668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct hostapd_freq_params *freq) 3678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->set_freq) 3698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->set_freq(wpa_s->drv_priv, freq); 3708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 3718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_if_add(struct wpa_supplicant *wpa_s, 3748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum wpa_driver_if_type type, 3758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *ifname, const u8 *addr, 3768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *bss_ctx, char *force_ifname, 3778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *if_addr, const char *bridge) 3788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->if_add) 3808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->if_add(wpa_s->drv_priv, type, ifname, 3818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt addr, bss_ctx, NULL, force_ifname, 3828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if_addr, bridge); 3838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 3848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_if_remove(struct wpa_supplicant *wpa_s, 3878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum wpa_driver_if_type type, 3888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *ifname) 3898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->if_remove) 3918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->if_remove(wpa_s->drv_priv, type, ifname); 3928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 3938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_remain_on_channel(struct wpa_supplicant *wpa_s, 3968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int freq, 3978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int duration) 3988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->remain_on_channel) 4008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->remain_on_channel(wpa_s->drv_priv, freq, 4018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt duration); 4028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 4038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_cancel_remain_on_channel( 4068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_supplicant *wpa_s) 4078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->cancel_remain_on_channel) 4098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->cancel_remain_on_channel( 4108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_s->drv_priv); 4118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 4128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_probe_req_report(struct wpa_supplicant *wpa_s, 4158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int report) 4168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->probe_req_report) 4188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->probe_req_report(wpa_s->drv_priv, 4198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt report); 4208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 4218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_deinit_ap(struct wpa_supplicant *wpa_s) 4248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->deinit_ap) 4268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->deinit_ap(wpa_s->drv_priv); 4278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 4288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 43004949598a23f501be6eec21697465fd46a28840aDmitry Shmidtstatic inline int wpa_drv_deinit_p2p_cli(struct wpa_supplicant *wpa_s) 43104949598a23f501be6eec21697465fd46a28840aDmitry Shmidt{ 43204949598a23f501be6eec21697465fd46a28840aDmitry Shmidt if (wpa_s->driver->deinit_p2p_cli) 43304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt return wpa_s->driver->deinit_p2p_cli(wpa_s->drv_priv); 43404949598a23f501be6eec21697465fd46a28840aDmitry Shmidt return 0; 43504949598a23f501be6eec21697465fd46a28840aDmitry Shmidt} 43604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 4378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void wpa_drv_suspend(struct wpa_supplicant *wpa_s) 4388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->suspend) 4408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_s->driver->suspend(wpa_s->drv_priv); 4418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void wpa_drv_resume(struct wpa_supplicant *wpa_s) 4448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->resume) 4468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_s->driver->resume(wpa_s->drv_priv); 4478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_signal_monitor(struct wpa_supplicant *wpa_s, 4508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int threshold, int hysteresis) 4518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->signal_monitor) 4538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->signal_monitor(wpa_s->drv_priv, 4548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt threshold, hysteresis); 4558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 4568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_signal_poll(struct wpa_supplicant *wpa_s, 4598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_signal_info *si) 4608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->signal_poll) 4628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->signal_poll(wpa_s->drv_priv, si); 4638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 4648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 466fcd6f21dad589eb6fdba941c98e072ca2664726bYuhao Zhengstatic inline int wpa_drv_pktcnt_poll(struct wpa_supplicant *wpa_s, 467fcd6f21dad589eb6fdba941c98e072ca2664726bYuhao Zheng struct hostap_sta_driver_data *sta) 468fcd6f21dad589eb6fdba941c98e072ca2664726bYuhao Zheng{ 469fcd6f21dad589eb6fdba941c98e072ca2664726bYuhao Zheng if (wpa_s->driver->read_sta_data) 4701e6c57fee4a56b421cc20f6dc0785c9138b21337Jouni Malinen return wpa_s->driver->read_sta_data(wpa_s->drv_priv, sta, 4711e6c57fee4a56b421cc20f6dc0785c9138b21337Jouni Malinen wpa_s->bssid); 472fcd6f21dad589eb6fdba941c98e072ca2664726bYuhao Zheng return -1; 473fcd6f21dad589eb6fdba941c98e072ca2664726bYuhao Zheng} 474fcd6f21dad589eb6fdba941c98e072ca2664726bYuhao Zheng 4758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_set_ap_wps_ie(struct wpa_supplicant *wpa_s, 4768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *beacon, 4778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *proberesp, 4788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *assocresp) 4798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->set_ap_wps_ie) 4818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 4828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->set_ap_wps_ie(wpa_s->drv_priv, beacon, 4838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt proberesp, assocresp); 4848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_shared_freq(struct wpa_supplicant *wpa_s) 4878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->shared_freq) 4898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 4908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->shared_freq(wpa_s->drv_priv); 4918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_get_noa(struct wpa_supplicant *wpa_s, 4948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *buf, size_t buf_len) 4958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->get_noa) 4978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 4988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->get_noa(wpa_s->drv_priv, buf, buf_len); 4998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_set_p2p_powersave(struct wpa_supplicant *wpa_s, 5028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int legacy_ps, int opp_ps, 5038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int ctwindow) 5048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->set_p2p_powersave) 5068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->set_p2p_powersave(wpa_s->drv_priv, legacy_ps, 5088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt opp_ps, ctwindow); 5098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_ampdu(struct wpa_supplicant *wpa_s, int ampdu) 5128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->ampdu) 5148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->ampdu(wpa_s->drv_priv, ampdu); 5168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_find(struct wpa_supplicant *wpa_s, 5198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int timeout, int type) 5208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_find) 5228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_find(wpa_s->drv_priv, timeout, type); 5248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_stop_find(struct wpa_supplicant *wpa_s) 5278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_stop_find) 5298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_stop_find(wpa_s->drv_priv); 5318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_listen(struct wpa_supplicant *wpa_s, 5348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int timeout) 5358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_listen) 5378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_listen(wpa_s->drv_priv, timeout); 5398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_connect(struct wpa_supplicant *wpa_s, 5428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *peer_addr, int wps_method, 5438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int go_intent, 5448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *own_interface_addr, 5458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int force_freq, 5468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int persistent_group) 5478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_connect) 5498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_connect(wpa_s->drv_priv, peer_addr, 5518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wps_method, go_intent, 5528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt own_interface_addr, force_freq, 5538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt persistent_group); 5548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_wps_success_cb(struct wpa_supplicant *wpa_s, 5578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *peer_addr) 5588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->wps_success_cb) 5608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->wps_success_cb(wpa_s->drv_priv, peer_addr); 5628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int 5658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtwpa_drv_p2p_group_formation_failed(struct wpa_supplicant *wpa_s) 5668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_group_formation_failed) 5688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_group_formation_failed(wpa_s->drv_priv); 5708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_set_params(struct wpa_supplicant *wpa_s, 5738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct p2p_params *params) 5748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_set_params) 5768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_set_params(wpa_s->drv_priv, params); 5788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_prov_disc_req(struct wpa_supplicant *wpa_s, 5818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *peer_addr, 5821f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt u16 config_methods, int join) 5838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_prov_disc_req) 5858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_prov_disc_req(wpa_s->drv_priv, peer_addr, 5871f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt config_methods, join); 5888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline u64 wpa_drv_p2p_sd_request(struct wpa_supplicant *wpa_s, 5918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *dst, 5928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *tlvs) 5938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_sd_request) 5958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 5968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_sd_request(wpa_s->drv_priv, dst, tlvs); 5978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_sd_cancel_request(struct wpa_supplicant *wpa_s, 6008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u64 req) 6018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 6028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_sd_cancel_request) 6038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 6048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_sd_cancel_request(wpa_s->drv_priv, req); 6058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 6068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_sd_response(struct wpa_supplicant *wpa_s, 6088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int freq, const u8 *dst, 6098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 dialog_token, 6108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *resp_tlvs) 6118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 6128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_sd_response) 6138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 6148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_sd_response(wpa_s->drv_priv, freq, dst, 6158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt dialog_token, resp_tlvs); 6168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 6178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_service_update(struct wpa_supplicant *wpa_s) 6198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 6208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_service_update) 6218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 6228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_service_update(wpa_s->drv_priv); 6238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 6248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_reject(struct wpa_supplicant *wpa_s, 6268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *addr) 6278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 6288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_reject) 6298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 6308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_reject(wpa_s->drv_priv, addr); 6318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 6328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_invite(struct wpa_supplicant *wpa_s, 6348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *peer, int role, const u8 *bssid, 6358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *ssid, size_t ssid_len, 6368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *go_dev_addr, 6378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int persistent_group) 6388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 6398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_invite) 6408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 6418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_invite(wpa_s->drv_priv, peer, role, bssid, 6428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt ssid, ssid_len, go_dev_addr, 6438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt persistent_group); 6448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 6458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_send_tdls_mgmt(struct wpa_supplicant *wpa_s, 6478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *dst, u8 action_code, 6488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 dialog_token, u16 status_code, 6498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *buf, size_t len) 6508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 6518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->send_tdls_mgmt) { 6528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->send_tdls_mgmt(wpa_s->drv_priv, dst, 6538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt action_code, dialog_token, 6548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt status_code, buf, len); 6558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 6568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 6578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 6588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_tdls_oper(struct wpa_supplicant *wpa_s, 6608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum tdls_oper oper, const u8 *peer) 6618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 6628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->tdls_oper) 6638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 6648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->tdls_oper(wpa_s->drv_priv, oper, peer); 6658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 6668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6671f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt#ifdef ANDROID 668bd567ad93e03f285fdad93464100148cd5ae7941Dmitry Shmidtstatic inline int wpa_drv_driver_cmd(struct wpa_supplicant *wpa_s, 669bd567ad93e03f285fdad93464100148cd5ae7941Dmitry Shmidt char *cmd, char *buf, size_t buf_len) 670bd567ad93e03f285fdad93464100148cd5ae7941Dmitry Shmidt{ 671bd567ad93e03f285fdad93464100148cd5ae7941Dmitry Shmidt if (!wpa_s->driver->driver_cmd) 672bd567ad93e03f285fdad93464100148cd5ae7941Dmitry Shmidt return -1; 673bd567ad93e03f285fdad93464100148cd5ae7941Dmitry Shmidt return wpa_s->driver->driver_cmd(wpa_s->drv_priv, cmd, buf, buf_len); 674bd567ad93e03f285fdad93464100148cd5ae7941Dmitry Shmidt} 6751f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt#endif 676bd567ad93e03f285fdad93464100148cd5ae7941Dmitry Shmidt 6771f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtstatic inline void wpa_drv_set_rekey_info(struct wpa_supplicant *wpa_s, 6781f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt const u8 *kek, const u8 *kck, 6791f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt const u8 *replay_ctr) 6801f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt{ 6811f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt if (!wpa_s->driver->set_rekey_info) 6821f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt return; 6831f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt wpa_s->driver->set_rekey_info(wpa_s->drv_priv, kek, kck, replay_ctr); 6841f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt} 6851f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt 68604949598a23f501be6eec21697465fd46a28840aDmitry Shmidtstatic inline int wpa_drv_radio_disable(struct wpa_supplicant *wpa_s, 68704949598a23f501be6eec21697465fd46a28840aDmitry Shmidt int disabled) 68804949598a23f501be6eec21697465fd46a28840aDmitry Shmidt{ 68904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt if (!wpa_s->driver->radio_disable) 69004949598a23f501be6eec21697465fd46a28840aDmitry Shmidt return -1; 69104949598a23f501be6eec21697465fd46a28840aDmitry Shmidt return wpa_s->driver->radio_disable(wpa_s->drv_priv, disabled); 69204949598a23f501be6eec21697465fd46a28840aDmitry Shmidt} 69304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 694c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidtstatic inline int wpa_drv_switch_channel(struct wpa_supplicant *wpa_s, 69504949598a23f501be6eec21697465fd46a28840aDmitry Shmidt unsigned int freq) 6961f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt{ 697c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt if (!wpa_s->driver->switch_channel) 6981f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt return -1; 699c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt return wpa_s->driver->switch_channel(wpa_s->drv_priv, freq); 7001f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt} 70104949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 70261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtstatic inline int wpa_drv_wnm_oper(struct wpa_supplicant *wpa_s, 70361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt enum wnm_oper oper, const u8 *peer, 70461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt u8 *buf, u16 *buf_len) 70561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt{ 70661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if (!wpa_s->driver->wnm_oper) 70761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt return -1; 70861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt return wpa_s->driver->wnm_oper(wpa_s->drv_priv, oper, peer, buf, 70961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt buf_len); 71061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt} 71161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 7128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* DRIVER_I_H */ 713