1e28a4053SRui Paulo /* 2e28a4053SRui Paulo * wpa_supplicant - Internal driver interface wrappers 35b9c547cSRui Paulo * Copyright (c) 2003-2015, Jouni Malinen <j@w1.fi> 4e28a4053SRui Paulo * 5f05cddf9SRui Paulo * This software may be distributed under the terms of the BSD license. 6f05cddf9SRui Paulo * See README for more details. 7e28a4053SRui Paulo */ 8e28a4053SRui Paulo 9e28a4053SRui Paulo #ifndef DRIVER_I_H 10e28a4053SRui Paulo #define DRIVER_I_H 11e28a4053SRui Paulo 12e28a4053SRui Paulo #include "drivers/driver.h" 13e28a4053SRui Paulo 14e28a4053SRui Paulo /* driver_ops */ 15e28a4053SRui Paulo static inline void * wpa_drv_init(struct wpa_supplicant *wpa_s, 16e28a4053SRui Paulo const char *ifname) 17e28a4053SRui Paulo { 18e28a4053SRui Paulo if (wpa_s->driver->init2) 19e28a4053SRui Paulo return wpa_s->driver->init2(wpa_s, ifname, 20e28a4053SRui Paulo wpa_s->global_drv_priv); 21e28a4053SRui Paulo if (wpa_s->driver->init) { 22e28a4053SRui Paulo return wpa_s->driver->init(wpa_s, ifname); 23e28a4053SRui Paulo } 24e28a4053SRui Paulo return NULL; 25e28a4053SRui Paulo } 26e28a4053SRui Paulo 27e28a4053SRui Paulo static inline void wpa_drv_deinit(struct wpa_supplicant *wpa_s) 28e28a4053SRui Paulo { 29e28a4053SRui Paulo if (wpa_s->driver->deinit) 30e28a4053SRui Paulo wpa_s->driver->deinit(wpa_s->drv_priv); 31e28a4053SRui Paulo } 32e28a4053SRui Paulo 33e28a4053SRui Paulo static inline int wpa_drv_set_param(struct wpa_supplicant *wpa_s, 34e28a4053SRui Paulo const char *param) 35e28a4053SRui Paulo { 36e28a4053SRui Paulo if (wpa_s->driver->set_param) 37e28a4053SRui Paulo return wpa_s->driver->set_param(wpa_s->drv_priv, param); 38e28a4053SRui Paulo return 0; 39e28a4053SRui Paulo } 40e28a4053SRui Paulo 41e28a4053SRui Paulo static inline int wpa_drv_set_countermeasures(struct wpa_supplicant *wpa_s, 42e28a4053SRui Paulo int enabled) 43e28a4053SRui Paulo { 44e28a4053SRui Paulo if (wpa_s->driver->set_countermeasures) { 45e28a4053SRui Paulo return wpa_s->driver->set_countermeasures(wpa_s->drv_priv, 46e28a4053SRui Paulo enabled); 47e28a4053SRui Paulo } 48e28a4053SRui Paulo return -1; 49e28a4053SRui Paulo } 50e28a4053SRui Paulo 51e28a4053SRui Paulo static inline int wpa_drv_authenticate(struct wpa_supplicant *wpa_s, 52e28a4053SRui Paulo struct wpa_driver_auth_params *params) 53e28a4053SRui Paulo { 54e28a4053SRui Paulo if (wpa_s->driver->authenticate) 55e28a4053SRui Paulo return wpa_s->driver->authenticate(wpa_s->drv_priv, params); 56e28a4053SRui Paulo return -1; 57e28a4053SRui Paulo } 58e28a4053SRui Paulo 59e28a4053SRui Paulo static inline int wpa_drv_associate(struct wpa_supplicant *wpa_s, 60e28a4053SRui Paulo struct wpa_driver_associate_params *params) 61e28a4053SRui Paulo { 62e28a4053SRui Paulo if (wpa_s->driver->associate) { 63e28a4053SRui Paulo return wpa_s->driver->associate(wpa_s->drv_priv, params); 64e28a4053SRui Paulo } 65e28a4053SRui Paulo return -1; 66e28a4053SRui Paulo } 67e28a4053SRui Paulo 685b9c547cSRui Paulo static inline int wpa_drv_init_mesh(struct wpa_supplicant *wpa_s) 695b9c547cSRui Paulo { 705b9c547cSRui Paulo if (wpa_s->driver->init_mesh) 715b9c547cSRui Paulo return wpa_s->driver->init_mesh(wpa_s->drv_priv); 725b9c547cSRui Paulo return -1; 735b9c547cSRui Paulo } 745b9c547cSRui Paulo 755b9c547cSRui Paulo static inline int wpa_drv_join_mesh(struct wpa_supplicant *wpa_s, 765b9c547cSRui Paulo struct wpa_driver_mesh_join_params *params) 775b9c547cSRui Paulo { 785b9c547cSRui Paulo if (wpa_s->driver->join_mesh) 795b9c547cSRui Paulo return wpa_s->driver->join_mesh(wpa_s->drv_priv, params); 805b9c547cSRui Paulo return -1; 815b9c547cSRui Paulo } 825b9c547cSRui Paulo 835b9c547cSRui Paulo static inline int wpa_drv_leave_mesh(struct wpa_supplicant *wpa_s) 845b9c547cSRui Paulo { 855b9c547cSRui Paulo if (wpa_s->driver->leave_mesh) 865b9c547cSRui Paulo return wpa_s->driver->leave_mesh(wpa_s->drv_priv); 875b9c547cSRui Paulo return -1; 885b9c547cSRui Paulo } 895b9c547cSRui Paulo 90206b73d0SCy Schubert static inline int wpa_drv_mesh_link_probe(struct wpa_supplicant *wpa_s, 91206b73d0SCy Schubert const u8 *addr, 92206b73d0SCy Schubert const u8 *eth, size_t len) 93206b73d0SCy Schubert { 94206b73d0SCy Schubert if (wpa_s->driver->probe_mesh_link) 95206b73d0SCy Schubert return wpa_s->driver->probe_mesh_link(wpa_s->drv_priv, addr, 96206b73d0SCy Schubert eth, len); 97206b73d0SCy Schubert return -1; 98206b73d0SCy Schubert } 99206b73d0SCy Schubert 100e28a4053SRui Paulo static inline int wpa_drv_scan(struct wpa_supplicant *wpa_s, 101e28a4053SRui Paulo struct wpa_driver_scan_params *params) 102e28a4053SRui Paulo { 1035b9c547cSRui Paulo #ifdef CONFIG_TESTING_OPTIONS 1045b9c547cSRui Paulo if (wpa_s->test_failure == WPAS_TEST_FAILURE_SCAN_TRIGGER) 1055b9c547cSRui Paulo return -EBUSY; 1065b9c547cSRui Paulo #endif /* CONFIG_TESTING_OPTIONS */ 107e28a4053SRui Paulo if (wpa_s->driver->scan2) 108e28a4053SRui Paulo return wpa_s->driver->scan2(wpa_s->drv_priv, params); 109e28a4053SRui Paulo return -1; 110e28a4053SRui Paulo } 111e28a4053SRui Paulo 112f05cddf9SRui Paulo static inline int wpa_drv_sched_scan(struct wpa_supplicant *wpa_s, 113780fb4a2SCy Schubert struct wpa_driver_scan_params *params) 114f05cddf9SRui Paulo { 115f05cddf9SRui Paulo if (wpa_s->driver->sched_scan) 116780fb4a2SCy Schubert return wpa_s->driver->sched_scan(wpa_s->drv_priv, params); 117f05cddf9SRui Paulo return -1; 118f05cddf9SRui Paulo } 119f05cddf9SRui Paulo 120f05cddf9SRui Paulo static inline int wpa_drv_stop_sched_scan(struct wpa_supplicant *wpa_s) 121f05cddf9SRui Paulo { 122f05cddf9SRui Paulo if (wpa_s->driver->stop_sched_scan) 123f05cddf9SRui Paulo return wpa_s->driver->stop_sched_scan(wpa_s->drv_priv); 124f05cddf9SRui Paulo return -1; 125f05cddf9SRui Paulo } 126f05cddf9SRui Paulo 127*c1d255d3SCy Schubert struct wpa_scan_results * 128*c1d255d3SCy Schubert wpa_drv_get_scan_results2(struct wpa_supplicant *wpa_s); 129e28a4053SRui Paulo 130e28a4053SRui Paulo static inline int wpa_drv_get_bssid(struct wpa_supplicant *wpa_s, u8 *bssid) 131e28a4053SRui Paulo { 132e28a4053SRui Paulo if (wpa_s->driver->get_bssid) { 133e28a4053SRui Paulo return wpa_s->driver->get_bssid(wpa_s->drv_priv, bssid); 134e28a4053SRui Paulo } 135e28a4053SRui Paulo return -1; 136e28a4053SRui Paulo } 137e28a4053SRui Paulo 138e28a4053SRui Paulo static inline int wpa_drv_get_ssid(struct wpa_supplicant *wpa_s, u8 *ssid) 139e28a4053SRui Paulo { 140e28a4053SRui Paulo if (wpa_s->driver->get_ssid) { 141e28a4053SRui Paulo return wpa_s->driver->get_ssid(wpa_s->drv_priv, ssid); 142e28a4053SRui Paulo } 143e28a4053SRui Paulo return -1; 144e28a4053SRui Paulo } 145e28a4053SRui Paulo 146e28a4053SRui Paulo static inline int wpa_drv_set_key(struct wpa_supplicant *wpa_s, 147e28a4053SRui Paulo enum wpa_alg alg, const u8 *addr, 148e28a4053SRui Paulo int key_idx, int set_tx, 149e28a4053SRui Paulo const u8 *seq, size_t seq_len, 150*c1d255d3SCy Schubert const u8 *key, size_t key_len, 151*c1d255d3SCy Schubert enum key_flag key_flag) 152e28a4053SRui Paulo { 153*c1d255d3SCy Schubert struct wpa_driver_set_key_params params; 154*c1d255d3SCy Schubert 155*c1d255d3SCy Schubert os_memset(¶ms, 0, sizeof(params)); 156*c1d255d3SCy Schubert params.ifname = wpa_s->ifname; 157*c1d255d3SCy Schubert params.alg = alg; 158*c1d255d3SCy Schubert params.addr = addr; 159*c1d255d3SCy Schubert params.key_idx = key_idx; 160*c1d255d3SCy Schubert params.set_tx = set_tx; 161*c1d255d3SCy Schubert params.seq = seq; 162*c1d255d3SCy Schubert params.seq_len = seq_len; 163*c1d255d3SCy Schubert params.key = key; 164*c1d255d3SCy Schubert params.key_len = key_len; 165*c1d255d3SCy Schubert params.key_flag = key_flag; 166*c1d255d3SCy Schubert 1675b9c547cSRui Paulo if (alg != WPA_ALG_NONE) { 168*c1d255d3SCy Schubert /* keyidx = 1 can be either a broadcast or--with 169*c1d255d3SCy Schubert * Extended Key ID--a unicast key. Use bit 15 for 170*c1d255d3SCy Schubert * the pairwise keyidx 1 which is hopefully high enough 171*c1d255d3SCy Schubert * to not clash with future extensions. 172*c1d255d3SCy Schubert */ 173*c1d255d3SCy Schubert if (key_idx == 1 && (key_flag & KEY_FLAG_PAIRWISE)) 174*c1d255d3SCy Schubert wpa_s->keys_cleared &= ~BIT(15); 175*c1d255d3SCy Schubert else if (key_idx >= 0 && key_idx <= 5) 1765b9c547cSRui Paulo wpa_s->keys_cleared &= ~BIT(key_idx); 1775b9c547cSRui Paulo else 178e28a4053SRui Paulo wpa_s->keys_cleared = 0; 1795b9c547cSRui Paulo } 1805b9c547cSRui Paulo if (wpa_s->driver->set_key) { 181*c1d255d3SCy Schubert return wpa_s->driver->set_key(wpa_s->drv_priv, ¶ms); 182e28a4053SRui Paulo } 183e28a4053SRui Paulo return -1; 184e28a4053SRui Paulo } 185e28a4053SRui Paulo 186780fb4a2SCy Schubert static inline int wpa_drv_get_seqnum(struct wpa_supplicant *wpa_s, 187780fb4a2SCy Schubert const u8 *addr, int idx, u8 *seq) 188780fb4a2SCy Schubert { 189780fb4a2SCy Schubert if (wpa_s->driver->get_seqnum) 190780fb4a2SCy Schubert return wpa_s->driver->get_seqnum(wpa_s->ifname, wpa_s->drv_priv, 191780fb4a2SCy Schubert addr, idx, seq); 192780fb4a2SCy Schubert return -1; 193780fb4a2SCy Schubert } 194780fb4a2SCy Schubert 1955b9c547cSRui Paulo static inline int wpa_drv_sta_deauth(struct wpa_supplicant *wpa_s, 196206b73d0SCy Schubert const u8 *addr, u16 reason_code) 1975b9c547cSRui Paulo { 1985b9c547cSRui Paulo if (wpa_s->driver->sta_deauth) { 1995b9c547cSRui Paulo return wpa_s->driver->sta_deauth(wpa_s->drv_priv, 2005b9c547cSRui Paulo wpa_s->own_addr, addr, 2015b9c547cSRui Paulo reason_code); 2025b9c547cSRui Paulo } 2035b9c547cSRui Paulo return -1; 2045b9c547cSRui Paulo } 2055b9c547cSRui Paulo 206e28a4053SRui Paulo static inline int wpa_drv_deauthenticate(struct wpa_supplicant *wpa_s, 207206b73d0SCy Schubert const u8 *addr, u16 reason_code) 208e28a4053SRui Paulo { 209e28a4053SRui Paulo if (wpa_s->driver->deauthenticate) { 210e28a4053SRui Paulo return wpa_s->driver->deauthenticate(wpa_s->drv_priv, addr, 211e28a4053SRui Paulo reason_code); 212e28a4053SRui Paulo } 213e28a4053SRui Paulo return -1; 214e28a4053SRui Paulo } 215e28a4053SRui Paulo 216e28a4053SRui Paulo static inline int wpa_drv_add_pmkid(struct wpa_supplicant *wpa_s, 21785732ac8SCy Schubert struct wpa_pmkid_params *params) 218e28a4053SRui Paulo { 219e28a4053SRui Paulo if (wpa_s->driver->add_pmkid) { 22085732ac8SCy Schubert return wpa_s->driver->add_pmkid(wpa_s->drv_priv, params); 221e28a4053SRui Paulo } 222e28a4053SRui Paulo return -1; 223e28a4053SRui Paulo } 224e28a4053SRui Paulo 225e28a4053SRui Paulo static inline int wpa_drv_remove_pmkid(struct wpa_supplicant *wpa_s, 22685732ac8SCy Schubert struct wpa_pmkid_params *params) 227e28a4053SRui Paulo { 228e28a4053SRui Paulo if (wpa_s->driver->remove_pmkid) { 22985732ac8SCy Schubert return wpa_s->driver->remove_pmkid(wpa_s->drv_priv, params); 230e28a4053SRui Paulo } 231e28a4053SRui Paulo return -1; 232e28a4053SRui Paulo } 233e28a4053SRui Paulo 234e28a4053SRui Paulo static inline int wpa_drv_flush_pmkid(struct wpa_supplicant *wpa_s) 235e28a4053SRui Paulo { 236e28a4053SRui Paulo if (wpa_s->driver->flush_pmkid) { 237e28a4053SRui Paulo return wpa_s->driver->flush_pmkid(wpa_s->drv_priv); 238e28a4053SRui Paulo } 239e28a4053SRui Paulo return -1; 240e28a4053SRui Paulo } 241e28a4053SRui Paulo 242e28a4053SRui Paulo static inline int wpa_drv_get_capa(struct wpa_supplicant *wpa_s, 243e28a4053SRui Paulo struct wpa_driver_capa *capa) 244e28a4053SRui Paulo { 245e28a4053SRui Paulo if (wpa_s->driver->get_capa) { 246e28a4053SRui Paulo return wpa_s->driver->get_capa(wpa_s->drv_priv, capa); 247e28a4053SRui Paulo } 248e28a4053SRui Paulo return -1; 249e28a4053SRui Paulo } 250e28a4053SRui Paulo 251e28a4053SRui Paulo static inline void wpa_drv_poll(struct wpa_supplicant *wpa_s) 252e28a4053SRui Paulo { 253e28a4053SRui Paulo if (wpa_s->driver->poll) { 254e28a4053SRui Paulo wpa_s->driver->poll(wpa_s->drv_priv); 255e28a4053SRui Paulo } 256e28a4053SRui Paulo } 257e28a4053SRui Paulo 258e28a4053SRui Paulo static inline const char * wpa_drv_get_ifname(struct wpa_supplicant *wpa_s) 259e28a4053SRui Paulo { 260e28a4053SRui Paulo if (wpa_s->driver->get_ifname) { 261e28a4053SRui Paulo return wpa_s->driver->get_ifname(wpa_s->drv_priv); 262e28a4053SRui Paulo } 263e28a4053SRui Paulo return NULL; 264e28a4053SRui Paulo } 265e28a4053SRui Paulo 2665b9c547cSRui Paulo static inline const char * 2675b9c547cSRui Paulo wpa_driver_get_radio_name(struct wpa_supplicant *wpa_s) 2685b9c547cSRui Paulo { 2695b9c547cSRui Paulo if (wpa_s->driver->get_radio_name) 2705b9c547cSRui Paulo return wpa_s->driver->get_radio_name(wpa_s->drv_priv); 2715b9c547cSRui Paulo return NULL; 2725b9c547cSRui Paulo } 2735b9c547cSRui Paulo 274e28a4053SRui Paulo static inline const u8 * wpa_drv_get_mac_addr(struct wpa_supplicant *wpa_s) 275e28a4053SRui Paulo { 276e28a4053SRui Paulo if (wpa_s->driver->get_mac_addr) { 277e28a4053SRui Paulo return wpa_s->driver->get_mac_addr(wpa_s->drv_priv); 278e28a4053SRui Paulo } 279e28a4053SRui Paulo return NULL; 280e28a4053SRui Paulo } 281e28a4053SRui Paulo 282e28a4053SRui Paulo static inline int wpa_drv_set_operstate(struct wpa_supplicant *wpa_s, 283e28a4053SRui Paulo int state) 284e28a4053SRui Paulo { 285e28a4053SRui Paulo if (wpa_s->driver->set_operstate) 286e28a4053SRui Paulo return wpa_s->driver->set_operstate(wpa_s->drv_priv, state); 287e28a4053SRui Paulo return 0; 288e28a4053SRui Paulo } 289e28a4053SRui Paulo 290e28a4053SRui Paulo static inline int wpa_drv_mlme_setprotection(struct wpa_supplicant *wpa_s, 291e28a4053SRui Paulo const u8 *addr, int protect_type, 292e28a4053SRui Paulo int key_type) 293e28a4053SRui Paulo { 294e28a4053SRui Paulo if (wpa_s->driver->mlme_setprotection) 295e28a4053SRui Paulo return wpa_s->driver->mlme_setprotection(wpa_s->drv_priv, addr, 296e28a4053SRui Paulo protect_type, 297e28a4053SRui Paulo key_type); 298e28a4053SRui Paulo return 0; 299e28a4053SRui Paulo } 300e28a4053SRui Paulo 301e28a4053SRui Paulo static inline struct hostapd_hw_modes * 302e28a4053SRui Paulo wpa_drv_get_hw_feature_data(struct wpa_supplicant *wpa_s, u16 *num_modes, 30385732ac8SCy Schubert u16 *flags, u8 *dfs_domain) 304e28a4053SRui Paulo { 305e28a4053SRui Paulo if (wpa_s->driver->get_hw_feature_data) 306e28a4053SRui Paulo return wpa_s->driver->get_hw_feature_data(wpa_s->drv_priv, 30785732ac8SCy Schubert num_modes, flags, 30885732ac8SCy Schubert dfs_domain); 309e28a4053SRui Paulo return NULL; 310e28a4053SRui Paulo } 311e28a4053SRui Paulo 312e28a4053SRui Paulo static inline int wpa_drv_set_country(struct wpa_supplicant *wpa_s, 313e28a4053SRui Paulo const char *alpha2) 314e28a4053SRui Paulo { 315e28a4053SRui Paulo if (wpa_s->driver->set_country) 316e28a4053SRui Paulo return wpa_s->driver->set_country(wpa_s->drv_priv, alpha2); 317e28a4053SRui Paulo return 0; 318e28a4053SRui Paulo } 319e28a4053SRui Paulo 320e28a4053SRui Paulo static inline int wpa_drv_send_mlme(struct wpa_supplicant *wpa_s, 321325151a3SRui Paulo const u8 *data, size_t data_len, int noack, 322*c1d255d3SCy Schubert unsigned int freq, unsigned int wait) 323e28a4053SRui Paulo { 324e28a4053SRui Paulo if (wpa_s->driver->send_mlme) 325e28a4053SRui Paulo return wpa_s->driver->send_mlme(wpa_s->drv_priv, 326325151a3SRui Paulo data, data_len, noack, 327*c1d255d3SCy Schubert freq, NULL, 0, 0, wait); 328e28a4053SRui Paulo return -1; 329e28a4053SRui Paulo } 330e28a4053SRui Paulo 331e28a4053SRui Paulo static inline int wpa_drv_update_ft_ies(struct wpa_supplicant *wpa_s, 332e28a4053SRui Paulo const u8 *md, 333e28a4053SRui Paulo const u8 *ies, size_t ies_len) 334e28a4053SRui Paulo { 335e28a4053SRui Paulo if (wpa_s->driver->update_ft_ies) 336e28a4053SRui Paulo return wpa_s->driver->update_ft_ies(wpa_s->drv_priv, md, 337e28a4053SRui Paulo ies, ies_len); 338e28a4053SRui Paulo return -1; 339e28a4053SRui Paulo } 340e28a4053SRui Paulo 341f05cddf9SRui Paulo static inline int wpa_drv_set_ap(struct wpa_supplicant *wpa_s, 342f05cddf9SRui Paulo struct wpa_driver_ap_params *params) 343e28a4053SRui Paulo { 344f05cddf9SRui Paulo if (wpa_s->driver->set_ap) 345f05cddf9SRui Paulo return wpa_s->driver->set_ap(wpa_s->drv_priv, params); 346e28a4053SRui Paulo return -1; 347e28a4053SRui Paulo } 348e28a4053SRui Paulo 349e28a4053SRui Paulo static inline int wpa_drv_sta_add(struct wpa_supplicant *wpa_s, 350e28a4053SRui Paulo struct hostapd_sta_add_params *params) 351e28a4053SRui Paulo { 352e28a4053SRui Paulo if (wpa_s->driver->sta_add) 353e28a4053SRui Paulo return wpa_s->driver->sta_add(wpa_s->drv_priv, params); 354e28a4053SRui Paulo return -1; 355e28a4053SRui Paulo } 356e28a4053SRui Paulo 357e28a4053SRui Paulo static inline int wpa_drv_sta_remove(struct wpa_supplicant *wpa_s, 358e28a4053SRui Paulo const u8 *addr) 359e28a4053SRui Paulo { 360e28a4053SRui Paulo if (wpa_s->driver->sta_remove) 361e28a4053SRui Paulo return wpa_s->driver->sta_remove(wpa_s->drv_priv, addr); 362e28a4053SRui Paulo return -1; 363e28a4053SRui Paulo } 364e28a4053SRui Paulo 365*c1d255d3SCy Schubert static inline int wpa_drv_tx_control_port(struct wpa_supplicant *wpa_s, 366*c1d255d3SCy Schubert const u8 *dest, u16 proto, 367*c1d255d3SCy Schubert const u8 *buf, size_t len, 368*c1d255d3SCy Schubert int no_encrypt) 369*c1d255d3SCy Schubert { 370*c1d255d3SCy Schubert if (!wpa_s->driver->tx_control_port) 371*c1d255d3SCy Schubert return -1; 372*c1d255d3SCy Schubert return wpa_s->driver->tx_control_port(wpa_s->drv_priv, dest, proto, 373*c1d255d3SCy Schubert buf, len, no_encrypt); 374*c1d255d3SCy Schubert } 375*c1d255d3SCy Schubert 376e28a4053SRui Paulo static inline int wpa_drv_hapd_send_eapol(struct wpa_supplicant *wpa_s, 377e28a4053SRui Paulo const u8 *addr, const u8 *data, 378e28a4053SRui Paulo size_t data_len, int encrypt, 379f05cddf9SRui Paulo const u8 *own_addr, u32 flags) 380e28a4053SRui Paulo { 381e28a4053SRui Paulo if (wpa_s->driver->hapd_send_eapol) 382e28a4053SRui Paulo return wpa_s->driver->hapd_send_eapol(wpa_s->drv_priv, addr, 383e28a4053SRui Paulo data, data_len, encrypt, 384f05cddf9SRui Paulo own_addr, flags); 385e28a4053SRui Paulo return -1; 386e28a4053SRui Paulo } 387e28a4053SRui Paulo 388e28a4053SRui Paulo static inline int wpa_drv_sta_set_flags(struct wpa_supplicant *wpa_s, 389e28a4053SRui Paulo const u8 *addr, int total_flags, 390e28a4053SRui Paulo int flags_or, int flags_and) 391e28a4053SRui Paulo { 392e28a4053SRui Paulo if (wpa_s->driver->sta_set_flags) 393e28a4053SRui Paulo return wpa_s->driver->sta_set_flags(wpa_s->drv_priv, addr, 394e28a4053SRui Paulo total_flags, flags_or, 395e28a4053SRui Paulo flags_and); 396e28a4053SRui Paulo return -1; 397e28a4053SRui Paulo } 398e28a4053SRui Paulo 399e28a4053SRui Paulo static inline int wpa_drv_set_supp_port(struct wpa_supplicant *wpa_s, 400e28a4053SRui Paulo int authorized) 401e28a4053SRui Paulo { 402e28a4053SRui Paulo if (wpa_s->driver->set_supp_port) { 403e28a4053SRui Paulo return wpa_s->driver->set_supp_port(wpa_s->drv_priv, 404e28a4053SRui Paulo authorized); 405e28a4053SRui Paulo } 406e28a4053SRui Paulo return 0; 407e28a4053SRui Paulo } 408e28a4053SRui Paulo 409e28a4053SRui Paulo static inline int wpa_drv_send_action(struct wpa_supplicant *wpa_s, 410e28a4053SRui Paulo unsigned int freq, 411f05cddf9SRui Paulo unsigned int wait, 412e28a4053SRui Paulo const u8 *dst, const u8 *src, 413e28a4053SRui Paulo const u8 *bssid, 414f05cddf9SRui Paulo const u8 *data, size_t data_len, 415f05cddf9SRui Paulo int no_cck) 416e28a4053SRui Paulo { 417e28a4053SRui Paulo if (wpa_s->driver->send_action) 418e28a4053SRui Paulo return wpa_s->driver->send_action(wpa_s->drv_priv, freq, 419f05cddf9SRui Paulo wait, dst, src, bssid, 420f05cddf9SRui Paulo data, data_len, no_cck); 421f05cddf9SRui Paulo return -1; 422f05cddf9SRui Paulo } 423f05cddf9SRui Paulo 424f05cddf9SRui Paulo static inline void wpa_drv_send_action_cancel_wait(struct wpa_supplicant *wpa_s) 425f05cddf9SRui Paulo { 426f05cddf9SRui Paulo if (wpa_s->driver->send_action_cancel_wait) 427f05cddf9SRui Paulo wpa_s->driver->send_action_cancel_wait(wpa_s->drv_priv); 428f05cddf9SRui Paulo } 429f05cddf9SRui Paulo 430f05cddf9SRui Paulo static inline int wpa_drv_set_freq(struct wpa_supplicant *wpa_s, 431f05cddf9SRui Paulo struct hostapd_freq_params *freq) 432f05cddf9SRui Paulo { 433f05cddf9SRui Paulo if (wpa_s->driver->set_freq) 434f05cddf9SRui Paulo return wpa_s->driver->set_freq(wpa_s->drv_priv, freq); 435e28a4053SRui Paulo return -1; 436e28a4053SRui Paulo } 437e28a4053SRui Paulo 438e28a4053SRui Paulo static inline int wpa_drv_if_add(struct wpa_supplicant *wpa_s, 439e28a4053SRui Paulo enum wpa_driver_if_type type, 440e28a4053SRui Paulo const char *ifname, const u8 *addr, 441e28a4053SRui Paulo void *bss_ctx, char *force_ifname, 442f05cddf9SRui Paulo u8 *if_addr, const char *bridge) 443e28a4053SRui Paulo { 444e28a4053SRui Paulo if (wpa_s->driver->if_add) 445e28a4053SRui Paulo return wpa_s->driver->if_add(wpa_s->drv_priv, type, ifname, 446e28a4053SRui Paulo addr, bss_ctx, NULL, force_ifname, 447780fb4a2SCy Schubert if_addr, bridge, 0, 0); 448e28a4053SRui Paulo return -1; 449e28a4053SRui Paulo } 450e28a4053SRui Paulo 451e28a4053SRui Paulo static inline int wpa_drv_if_remove(struct wpa_supplicant *wpa_s, 452e28a4053SRui Paulo enum wpa_driver_if_type type, 453e28a4053SRui Paulo const char *ifname) 454e28a4053SRui Paulo { 455e28a4053SRui Paulo if (wpa_s->driver->if_remove) 456e28a4053SRui Paulo return wpa_s->driver->if_remove(wpa_s->drv_priv, type, ifname); 457e28a4053SRui Paulo return -1; 458e28a4053SRui Paulo } 459e28a4053SRui Paulo 460e28a4053SRui Paulo static inline int wpa_drv_remain_on_channel(struct wpa_supplicant *wpa_s, 461e28a4053SRui Paulo unsigned int freq, 462e28a4053SRui Paulo unsigned int duration) 463e28a4053SRui Paulo { 464e28a4053SRui Paulo if (wpa_s->driver->remain_on_channel) 465e28a4053SRui Paulo return wpa_s->driver->remain_on_channel(wpa_s->drv_priv, freq, 466e28a4053SRui Paulo duration); 467e28a4053SRui Paulo return -1; 468e28a4053SRui Paulo } 469e28a4053SRui Paulo 470e28a4053SRui Paulo static inline int wpa_drv_cancel_remain_on_channel( 471e28a4053SRui Paulo struct wpa_supplicant *wpa_s) 472e28a4053SRui Paulo { 473e28a4053SRui Paulo if (wpa_s->driver->cancel_remain_on_channel) 474e28a4053SRui Paulo return wpa_s->driver->cancel_remain_on_channel( 475e28a4053SRui Paulo wpa_s->drv_priv); 476e28a4053SRui Paulo return -1; 477e28a4053SRui Paulo } 478e28a4053SRui Paulo 479e28a4053SRui Paulo static inline int wpa_drv_probe_req_report(struct wpa_supplicant *wpa_s, 480e28a4053SRui Paulo int report) 481e28a4053SRui Paulo { 482e28a4053SRui Paulo if (wpa_s->driver->probe_req_report) 483e28a4053SRui Paulo return wpa_s->driver->probe_req_report(wpa_s->drv_priv, 484e28a4053SRui Paulo report); 485e28a4053SRui Paulo return -1; 486e28a4053SRui Paulo } 487e28a4053SRui Paulo 488e28a4053SRui Paulo static inline int wpa_drv_deinit_ap(struct wpa_supplicant *wpa_s) 489e28a4053SRui Paulo { 490e28a4053SRui Paulo if (wpa_s->driver->deinit_ap) 491e28a4053SRui Paulo return wpa_s->driver->deinit_ap(wpa_s->drv_priv); 492e28a4053SRui Paulo return 0; 493e28a4053SRui Paulo } 494e28a4053SRui Paulo 495f05cddf9SRui Paulo static inline int wpa_drv_deinit_p2p_cli(struct wpa_supplicant *wpa_s) 496f05cddf9SRui Paulo { 497f05cddf9SRui Paulo if (wpa_s->driver->deinit_p2p_cli) 498f05cddf9SRui Paulo return wpa_s->driver->deinit_p2p_cli(wpa_s->drv_priv); 499f05cddf9SRui Paulo return 0; 500f05cddf9SRui Paulo } 501f05cddf9SRui Paulo 502e28a4053SRui Paulo static inline void wpa_drv_suspend(struct wpa_supplicant *wpa_s) 503e28a4053SRui Paulo { 504e28a4053SRui Paulo if (wpa_s->driver->suspend) 505e28a4053SRui Paulo wpa_s->driver->suspend(wpa_s->drv_priv); 506e28a4053SRui Paulo } 507e28a4053SRui Paulo 508e28a4053SRui Paulo static inline void wpa_drv_resume(struct wpa_supplicant *wpa_s) 509e28a4053SRui Paulo { 510e28a4053SRui Paulo if (wpa_s->driver->resume) 511e28a4053SRui Paulo wpa_s->driver->resume(wpa_s->drv_priv); 512e28a4053SRui Paulo } 513e28a4053SRui Paulo 514e28a4053SRui Paulo static inline int wpa_drv_signal_monitor(struct wpa_supplicant *wpa_s, 515e28a4053SRui Paulo int threshold, int hysteresis) 516e28a4053SRui Paulo { 517e28a4053SRui Paulo if (wpa_s->driver->signal_monitor) 518e28a4053SRui Paulo return wpa_s->driver->signal_monitor(wpa_s->drv_priv, 519e28a4053SRui Paulo threshold, hysteresis); 520e28a4053SRui Paulo return -1; 521e28a4053SRui Paulo } 522e28a4053SRui Paulo 523*c1d255d3SCy Schubert int wpa_drv_signal_poll(struct wpa_supplicant *wpa_s, 524*c1d255d3SCy Schubert struct wpa_signal_info *si); 525f05cddf9SRui Paulo 5264bc52338SCy Schubert static inline int wpa_drv_channel_info(struct wpa_supplicant *wpa_s, 5274bc52338SCy Schubert struct wpa_channel_info *ci) 5284bc52338SCy Schubert { 5294bc52338SCy Schubert if (wpa_s->driver->channel_info) 5304bc52338SCy Schubert return wpa_s->driver->channel_info(wpa_s->drv_priv, ci); 5314bc52338SCy Schubert return -1; 5324bc52338SCy Schubert } 5334bc52338SCy Schubert 534f05cddf9SRui Paulo static inline int wpa_drv_pktcnt_poll(struct wpa_supplicant *wpa_s, 535f05cddf9SRui Paulo struct hostap_sta_driver_data *sta) 536f05cddf9SRui Paulo { 537f05cddf9SRui Paulo if (wpa_s->driver->read_sta_data) 538f05cddf9SRui Paulo return wpa_s->driver->read_sta_data(wpa_s->drv_priv, sta, 539f05cddf9SRui Paulo wpa_s->bssid); 540f05cddf9SRui Paulo return -1; 541f05cddf9SRui Paulo } 542f05cddf9SRui Paulo 543e28a4053SRui Paulo static inline int wpa_drv_set_ap_wps_ie(struct wpa_supplicant *wpa_s, 544e28a4053SRui Paulo const struct wpabuf *beacon, 545f05cddf9SRui Paulo const struct wpabuf *proberesp, 546f05cddf9SRui Paulo const struct wpabuf *assocresp) 547e28a4053SRui Paulo { 548e28a4053SRui Paulo if (!wpa_s->driver->set_ap_wps_ie) 549e28a4053SRui Paulo return -1; 550e28a4053SRui Paulo return wpa_s->driver->set_ap_wps_ie(wpa_s->drv_priv, beacon, 551f05cddf9SRui Paulo proberesp, assocresp); 552f05cddf9SRui Paulo } 553f05cddf9SRui Paulo 554f05cddf9SRui Paulo static inline int wpa_drv_get_noa(struct wpa_supplicant *wpa_s, 555f05cddf9SRui Paulo u8 *buf, size_t buf_len) 556f05cddf9SRui Paulo { 557f05cddf9SRui Paulo if (!wpa_s->driver->get_noa) 558f05cddf9SRui Paulo return -1; 559f05cddf9SRui Paulo return wpa_s->driver->get_noa(wpa_s->drv_priv, buf, buf_len); 560f05cddf9SRui Paulo } 561f05cddf9SRui Paulo 562f05cddf9SRui Paulo static inline int wpa_drv_set_p2p_powersave(struct wpa_supplicant *wpa_s, 563f05cddf9SRui Paulo int legacy_ps, int opp_ps, 564f05cddf9SRui Paulo int ctwindow) 565f05cddf9SRui Paulo { 566f05cddf9SRui Paulo if (!wpa_s->driver->set_p2p_powersave) 567f05cddf9SRui Paulo return -1; 568f05cddf9SRui Paulo return wpa_s->driver->set_p2p_powersave(wpa_s->drv_priv, legacy_ps, 569f05cddf9SRui Paulo opp_ps, ctwindow); 570f05cddf9SRui Paulo } 571f05cddf9SRui Paulo 572f05cddf9SRui Paulo static inline int wpa_drv_ampdu(struct wpa_supplicant *wpa_s, int ampdu) 573f05cddf9SRui Paulo { 574f05cddf9SRui Paulo if (!wpa_s->driver->ampdu) 575f05cddf9SRui Paulo return -1; 576f05cddf9SRui Paulo return wpa_s->driver->ampdu(wpa_s->drv_priv, ampdu); 577f05cddf9SRui Paulo } 578f05cddf9SRui Paulo 579f05cddf9SRui Paulo static inline int wpa_drv_send_tdls_mgmt(struct wpa_supplicant *wpa_s, 580f05cddf9SRui Paulo const u8 *dst, u8 action_code, 581f05cddf9SRui Paulo u8 dialog_token, u16 status_code, 5825b9c547cSRui Paulo u32 peer_capab, int initiator, 583f05cddf9SRui Paulo const u8 *buf, size_t len) 584f05cddf9SRui Paulo { 585f05cddf9SRui Paulo if (wpa_s->driver->send_tdls_mgmt) { 586f05cddf9SRui Paulo return wpa_s->driver->send_tdls_mgmt(wpa_s->drv_priv, dst, 587f05cddf9SRui Paulo action_code, dialog_token, 5885b9c547cSRui Paulo status_code, peer_capab, 5895b9c547cSRui Paulo initiator, buf, len); 590f05cddf9SRui Paulo } 591f05cddf9SRui Paulo return -1; 592f05cddf9SRui Paulo } 593f05cddf9SRui Paulo 594f05cddf9SRui Paulo static inline int wpa_drv_tdls_oper(struct wpa_supplicant *wpa_s, 595f05cddf9SRui Paulo enum tdls_oper oper, const u8 *peer) 596f05cddf9SRui Paulo { 597f05cddf9SRui Paulo if (!wpa_s->driver->tdls_oper) 598f05cddf9SRui Paulo return -1; 599f05cddf9SRui Paulo return wpa_s->driver->tdls_oper(wpa_s->drv_priv, oper, peer); 600f05cddf9SRui Paulo } 601f05cddf9SRui Paulo 6025b9c547cSRui Paulo #ifdef ANDROID 6035b9c547cSRui Paulo static inline int wpa_drv_driver_cmd(struct wpa_supplicant *wpa_s, 6045b9c547cSRui Paulo char *cmd, char *buf, size_t buf_len) 6055b9c547cSRui Paulo { 6065b9c547cSRui Paulo if (!wpa_s->driver->driver_cmd) 6075b9c547cSRui Paulo return -1; 6085b9c547cSRui Paulo return wpa_s->driver->driver_cmd(wpa_s->drv_priv, cmd, buf, buf_len); 6095b9c547cSRui Paulo } 6105b9c547cSRui Paulo #endif /* ANDROID */ 6115b9c547cSRui Paulo 612f05cddf9SRui Paulo static inline void wpa_drv_set_rekey_info(struct wpa_supplicant *wpa_s, 6135b9c547cSRui Paulo const u8 *kek, size_t kek_len, 6145b9c547cSRui Paulo const u8 *kck, size_t kck_len, 615f05cddf9SRui Paulo const u8 *replay_ctr) 616f05cddf9SRui Paulo { 617f05cddf9SRui Paulo if (!wpa_s->driver->set_rekey_info) 618f05cddf9SRui Paulo return; 6195b9c547cSRui Paulo wpa_s->driver->set_rekey_info(wpa_s->drv_priv, kek, kek_len, 6205b9c547cSRui Paulo kck, kck_len, replay_ctr); 621f05cddf9SRui Paulo } 622f05cddf9SRui Paulo 623f05cddf9SRui Paulo static inline int wpa_drv_radio_disable(struct wpa_supplicant *wpa_s, 624f05cddf9SRui Paulo int disabled) 625f05cddf9SRui Paulo { 626f05cddf9SRui Paulo if (!wpa_s->driver->radio_disable) 627f05cddf9SRui Paulo return -1; 628f05cddf9SRui Paulo return wpa_s->driver->radio_disable(wpa_s->drv_priv, disabled); 629f05cddf9SRui Paulo } 630f05cddf9SRui Paulo 631f05cddf9SRui Paulo static inline int wpa_drv_switch_channel(struct wpa_supplicant *wpa_s, 6325b9c547cSRui Paulo struct csa_settings *settings) 633f05cddf9SRui Paulo { 634f05cddf9SRui Paulo if (!wpa_s->driver->switch_channel) 635f05cddf9SRui Paulo return -1; 6365b9c547cSRui Paulo return wpa_s->driver->switch_channel(wpa_s->drv_priv, settings); 6375b9c547cSRui Paulo } 6385b9c547cSRui Paulo 6395b9c547cSRui Paulo static inline int wpa_drv_add_ts(struct wpa_supplicant *wpa_s, u8 tsid, 6405b9c547cSRui Paulo const u8 *address, u8 user_priority, 6415b9c547cSRui Paulo u16 admitted_time) 6425b9c547cSRui Paulo { 6435b9c547cSRui Paulo if (!wpa_s->driver->add_tx_ts) 6445b9c547cSRui Paulo return -1; 6455b9c547cSRui Paulo return wpa_s->driver->add_tx_ts(wpa_s->drv_priv, tsid, address, 6465b9c547cSRui Paulo user_priority, admitted_time); 6475b9c547cSRui Paulo } 6485b9c547cSRui Paulo 6495b9c547cSRui Paulo static inline int wpa_drv_del_ts(struct wpa_supplicant *wpa_s, u8 tid, 6505b9c547cSRui Paulo const u8 *address) 6515b9c547cSRui Paulo { 6525b9c547cSRui Paulo if (!wpa_s->driver->del_tx_ts) 6535b9c547cSRui Paulo return -1; 6545b9c547cSRui Paulo return wpa_s->driver->del_tx_ts(wpa_s->drv_priv, tid, address); 6555b9c547cSRui Paulo } 6565b9c547cSRui Paulo 6575b9c547cSRui Paulo static inline int wpa_drv_tdls_enable_channel_switch( 6585b9c547cSRui Paulo struct wpa_supplicant *wpa_s, const u8 *addr, u8 oper_class, 6595b9c547cSRui Paulo const struct hostapd_freq_params *freq_params) 6605b9c547cSRui Paulo { 6615b9c547cSRui Paulo if (!wpa_s->driver->tdls_enable_channel_switch) 6625b9c547cSRui Paulo return -1; 6635b9c547cSRui Paulo return wpa_s->driver->tdls_enable_channel_switch(wpa_s->drv_priv, addr, 6645b9c547cSRui Paulo oper_class, 6655b9c547cSRui Paulo freq_params); 6665b9c547cSRui Paulo } 6675b9c547cSRui Paulo 6685b9c547cSRui Paulo static inline int 6695b9c547cSRui Paulo wpa_drv_tdls_disable_channel_switch(struct wpa_supplicant *wpa_s, 6705b9c547cSRui Paulo const u8 *addr) 6715b9c547cSRui Paulo { 6725b9c547cSRui Paulo if (!wpa_s->driver->tdls_disable_channel_switch) 6735b9c547cSRui Paulo return -1; 6745b9c547cSRui Paulo return wpa_s->driver->tdls_disable_channel_switch(wpa_s->drv_priv, 6755b9c547cSRui Paulo addr); 676f05cddf9SRui Paulo } 677f05cddf9SRui Paulo 678f05cddf9SRui Paulo static inline int wpa_drv_wnm_oper(struct wpa_supplicant *wpa_s, 679f05cddf9SRui Paulo enum wnm_oper oper, const u8 *peer, 680f05cddf9SRui Paulo u8 *buf, u16 *buf_len) 681f05cddf9SRui Paulo { 682f05cddf9SRui Paulo if (!wpa_s->driver->wnm_oper) 683f05cddf9SRui Paulo return -1; 684f05cddf9SRui Paulo return wpa_s->driver->wnm_oper(wpa_s->drv_priv, oper, peer, buf, 685f05cddf9SRui Paulo buf_len); 686e28a4053SRui Paulo } 687e28a4053SRui Paulo 6885b9c547cSRui Paulo static inline int wpa_drv_status(struct wpa_supplicant *wpa_s, 6895b9c547cSRui Paulo char *buf, size_t buflen) 6905b9c547cSRui Paulo { 6915b9c547cSRui Paulo if (!wpa_s->driver->status) 6925b9c547cSRui Paulo return -1; 6935b9c547cSRui Paulo return wpa_s->driver->status(wpa_s->drv_priv, buf, buflen); 6945b9c547cSRui Paulo } 6955b9c547cSRui Paulo 6965b9c547cSRui Paulo static inline int wpa_drv_set_qos_map(struct wpa_supplicant *wpa_s, 6975b9c547cSRui Paulo const u8 *qos_map_set, u8 qos_map_set_len) 6985b9c547cSRui Paulo { 6995b9c547cSRui Paulo if (!wpa_s->driver->set_qos_map) 7005b9c547cSRui Paulo return -1; 7015b9c547cSRui Paulo return wpa_s->driver->set_qos_map(wpa_s->drv_priv, qos_map_set, 7025b9c547cSRui Paulo qos_map_set_len); 7035b9c547cSRui Paulo } 7045b9c547cSRui Paulo 705*c1d255d3SCy Schubert static inline int wpa_drv_get_wowlan(struct wpa_supplicant *wpa_s) 706*c1d255d3SCy Schubert { 707*c1d255d3SCy Schubert if (!wpa_s->driver->get_wowlan) 708*c1d255d3SCy Schubert return 0; 709*c1d255d3SCy Schubert return wpa_s->driver->get_wowlan(wpa_s->drv_priv); 710*c1d255d3SCy Schubert } 711*c1d255d3SCy Schubert 7125b9c547cSRui Paulo static inline int wpa_drv_wowlan(struct wpa_supplicant *wpa_s, 7135b9c547cSRui Paulo const struct wowlan_triggers *triggers) 7145b9c547cSRui Paulo { 7155b9c547cSRui Paulo if (!wpa_s->driver->set_wowlan) 7165b9c547cSRui Paulo return -1; 7175b9c547cSRui Paulo return wpa_s->driver->set_wowlan(wpa_s->drv_priv, triggers); 7185b9c547cSRui Paulo } 7195b9c547cSRui Paulo 7205b9c547cSRui Paulo static inline int wpa_drv_vendor_cmd(struct wpa_supplicant *wpa_s, 7215b9c547cSRui Paulo int vendor_id, int subcmd, const u8 *data, 722*c1d255d3SCy Schubert size_t data_len, 723*c1d255d3SCy Schubert enum nested_attr nested_attr_flag, 724*c1d255d3SCy Schubert struct wpabuf *buf) 7255b9c547cSRui Paulo { 7265b9c547cSRui Paulo if (!wpa_s->driver->vendor_cmd) 7275b9c547cSRui Paulo return -1; 7285b9c547cSRui Paulo return wpa_s->driver->vendor_cmd(wpa_s->drv_priv, vendor_id, subcmd, 729*c1d255d3SCy Schubert data, data_len, nested_attr_flag, buf); 7305b9c547cSRui Paulo } 7315b9c547cSRui Paulo 7325b9c547cSRui Paulo static inline int wpa_drv_roaming(struct wpa_supplicant *wpa_s, int allowed, 7335b9c547cSRui Paulo const u8 *bssid) 7345b9c547cSRui Paulo { 7355b9c547cSRui Paulo if (!wpa_s->driver->roaming) 7365b9c547cSRui Paulo return -1; 7375b9c547cSRui Paulo return wpa_s->driver->roaming(wpa_s->drv_priv, allowed, bssid); 7385b9c547cSRui Paulo } 7395b9c547cSRui Paulo 74085732ac8SCy Schubert static inline int wpa_drv_disable_fils(struct wpa_supplicant *wpa_s, 74185732ac8SCy Schubert int disable) 74285732ac8SCy Schubert { 74385732ac8SCy Schubert if (!wpa_s->driver->disable_fils) 74485732ac8SCy Schubert return -1; 74585732ac8SCy Schubert return wpa_s->driver->disable_fils(wpa_s->drv_priv, disable); 74685732ac8SCy Schubert } 74785732ac8SCy Schubert 7485b9c547cSRui Paulo static inline int wpa_drv_set_mac_addr(struct wpa_supplicant *wpa_s, 7495b9c547cSRui Paulo const u8 *addr) 7505b9c547cSRui Paulo { 7515b9c547cSRui Paulo if (!wpa_s->driver->set_mac_addr) 7525b9c547cSRui Paulo return -1; 7535b9c547cSRui Paulo return wpa_s->driver->set_mac_addr(wpa_s->drv_priv, addr); 7545b9c547cSRui Paulo } 7555b9c547cSRui Paulo 7565b9c547cSRui Paulo 7575b9c547cSRui Paulo #ifdef CONFIG_MACSEC 7585b9c547cSRui Paulo 7595b9c547cSRui Paulo static inline int wpa_drv_macsec_init(struct wpa_supplicant *wpa_s, 7605b9c547cSRui Paulo struct macsec_init_params *params) 7615b9c547cSRui Paulo { 7625b9c547cSRui Paulo if (!wpa_s->driver->macsec_init) 7635b9c547cSRui Paulo return -1; 7645b9c547cSRui Paulo return wpa_s->driver->macsec_init(wpa_s->drv_priv, params); 7655b9c547cSRui Paulo } 7665b9c547cSRui Paulo 7675b9c547cSRui Paulo static inline int wpa_drv_macsec_deinit(struct wpa_supplicant *wpa_s) 7685b9c547cSRui Paulo { 7695b9c547cSRui Paulo if (!wpa_s->driver->macsec_deinit) 7705b9c547cSRui Paulo return -1; 7715b9c547cSRui Paulo return wpa_s->driver->macsec_deinit(wpa_s->drv_priv); 7725b9c547cSRui Paulo } 7735b9c547cSRui Paulo 77485732ac8SCy Schubert static inline int wpa_drv_macsec_get_capability(struct wpa_supplicant *wpa_s, 77585732ac8SCy Schubert enum macsec_cap *cap) 77685732ac8SCy Schubert { 77785732ac8SCy Schubert if (!wpa_s->driver->macsec_get_capability) 77885732ac8SCy Schubert return -1; 77985732ac8SCy Schubert return wpa_s->driver->macsec_get_capability(wpa_s->drv_priv, cap); 78085732ac8SCy Schubert } 78185732ac8SCy Schubert 7825b9c547cSRui Paulo static inline int wpa_drv_enable_protect_frames(struct wpa_supplicant *wpa_s, 783*c1d255d3SCy Schubert bool enabled) 7845b9c547cSRui Paulo { 7855b9c547cSRui Paulo if (!wpa_s->driver->enable_protect_frames) 7865b9c547cSRui Paulo return -1; 7875b9c547cSRui Paulo return wpa_s->driver->enable_protect_frames(wpa_s->drv_priv, enabled); 7885b9c547cSRui Paulo } 7895b9c547cSRui Paulo 79085732ac8SCy Schubert static inline int wpa_drv_enable_encrypt(struct wpa_supplicant *wpa_s, 791*c1d255d3SCy Schubert bool enabled) 79285732ac8SCy Schubert { 79385732ac8SCy Schubert if (!wpa_s->driver->enable_encrypt) 79485732ac8SCy Schubert return -1; 79585732ac8SCy Schubert return wpa_s->driver->enable_encrypt(wpa_s->drv_priv, enabled); 79685732ac8SCy Schubert } 79785732ac8SCy Schubert 7985b9c547cSRui Paulo static inline int wpa_drv_set_replay_protect(struct wpa_supplicant *wpa_s, 799*c1d255d3SCy Schubert bool enabled, u32 window) 8005b9c547cSRui Paulo { 8015b9c547cSRui Paulo if (!wpa_s->driver->set_replay_protect) 8025b9c547cSRui Paulo return -1; 8035b9c547cSRui Paulo return wpa_s->driver->set_replay_protect(wpa_s->drv_priv, enabled, 8045b9c547cSRui Paulo window); 8055b9c547cSRui Paulo } 8065b9c547cSRui Paulo 8075b9c547cSRui Paulo static inline int wpa_drv_set_current_cipher_suite(struct wpa_supplicant *wpa_s, 808780fb4a2SCy Schubert u64 cs) 8095b9c547cSRui Paulo { 8105b9c547cSRui Paulo if (!wpa_s->driver->set_current_cipher_suite) 8115b9c547cSRui Paulo return -1; 812780fb4a2SCy Schubert return wpa_s->driver->set_current_cipher_suite(wpa_s->drv_priv, cs); 8135b9c547cSRui Paulo } 8145b9c547cSRui Paulo 8155b9c547cSRui Paulo static inline int wpa_drv_enable_controlled_port(struct wpa_supplicant *wpa_s, 816*c1d255d3SCy Schubert bool enabled) 8175b9c547cSRui Paulo { 8185b9c547cSRui Paulo if (!wpa_s->driver->enable_controlled_port) 8195b9c547cSRui Paulo return -1; 8205b9c547cSRui Paulo return wpa_s->driver->enable_controlled_port(wpa_s->drv_priv, enabled); 8215b9c547cSRui Paulo } 8225b9c547cSRui Paulo 8235b9c547cSRui Paulo static inline int wpa_drv_get_receive_lowest_pn(struct wpa_supplicant *wpa_s, 82485732ac8SCy Schubert struct receive_sa *sa) 8255b9c547cSRui Paulo { 8265b9c547cSRui Paulo if (!wpa_s->driver->get_receive_lowest_pn) 8275b9c547cSRui Paulo return -1; 82885732ac8SCy Schubert return wpa_s->driver->get_receive_lowest_pn(wpa_s->drv_priv, sa); 8295b9c547cSRui Paulo } 8305b9c547cSRui Paulo 8315b9c547cSRui Paulo static inline int wpa_drv_get_transmit_next_pn(struct wpa_supplicant *wpa_s, 83285732ac8SCy Schubert struct transmit_sa *sa) 8335b9c547cSRui Paulo { 8345b9c547cSRui Paulo if (!wpa_s->driver->get_transmit_next_pn) 8355b9c547cSRui Paulo return -1; 83685732ac8SCy Schubert return wpa_s->driver->get_transmit_next_pn(wpa_s->drv_priv, sa); 8375b9c547cSRui Paulo } 8385b9c547cSRui Paulo 8395b9c547cSRui Paulo static inline int wpa_drv_set_transmit_next_pn(struct wpa_supplicant *wpa_s, 84085732ac8SCy Schubert struct transmit_sa *sa) 8415b9c547cSRui Paulo { 8425b9c547cSRui Paulo if (!wpa_s->driver->set_transmit_next_pn) 8435b9c547cSRui Paulo return -1; 84485732ac8SCy Schubert return wpa_s->driver->set_transmit_next_pn(wpa_s->drv_priv, sa); 8455b9c547cSRui Paulo } 8465b9c547cSRui Paulo 8474bc52338SCy Schubert static inline int wpa_drv_set_receive_lowest_pn(struct wpa_supplicant *wpa_s, 8484bc52338SCy Schubert struct receive_sa *sa) 8494bc52338SCy Schubert { 8504bc52338SCy Schubert if (!wpa_s->driver->set_receive_lowest_pn) 8514bc52338SCy Schubert return -1; 8524bc52338SCy Schubert return wpa_s->driver->set_receive_lowest_pn(wpa_s->drv_priv, sa); 8534bc52338SCy Schubert } 8544bc52338SCy Schubert 8555b9c547cSRui Paulo static inline int 85685732ac8SCy Schubert wpa_drv_create_receive_sc(struct wpa_supplicant *wpa_s, struct receive_sc *sc, 8575b9c547cSRui Paulo unsigned int conf_offset, int validation) 8585b9c547cSRui Paulo { 8595b9c547cSRui Paulo if (!wpa_s->driver->create_receive_sc) 8605b9c547cSRui Paulo return -1; 86185732ac8SCy Schubert return wpa_s->driver->create_receive_sc(wpa_s->drv_priv, sc, 86285732ac8SCy Schubert conf_offset, validation); 8635b9c547cSRui Paulo } 8645b9c547cSRui Paulo 8655b9c547cSRui Paulo static inline int wpa_drv_delete_receive_sc(struct wpa_supplicant *wpa_s, 86685732ac8SCy Schubert struct receive_sc *sc) 8675b9c547cSRui Paulo { 8685b9c547cSRui Paulo if (!wpa_s->driver->delete_receive_sc) 8695b9c547cSRui Paulo return -1; 87085732ac8SCy Schubert return wpa_s->driver->delete_receive_sc(wpa_s->drv_priv, sc); 8715b9c547cSRui Paulo } 8725b9c547cSRui Paulo 8735b9c547cSRui Paulo static inline int wpa_drv_create_receive_sa(struct wpa_supplicant *wpa_s, 87485732ac8SCy Schubert struct receive_sa *sa) 8755b9c547cSRui Paulo { 8765b9c547cSRui Paulo if (!wpa_s->driver->create_receive_sa) 8775b9c547cSRui Paulo return -1; 87885732ac8SCy Schubert return wpa_s->driver->create_receive_sa(wpa_s->drv_priv, sa); 87985732ac8SCy Schubert } 88085732ac8SCy Schubert 88185732ac8SCy Schubert static inline int wpa_drv_delete_receive_sa(struct wpa_supplicant *wpa_s, 88285732ac8SCy Schubert struct receive_sa *sa) 88385732ac8SCy Schubert { 88485732ac8SCy Schubert if (!wpa_s->driver->delete_receive_sa) 88585732ac8SCy Schubert return -1; 88685732ac8SCy Schubert return wpa_s->driver->delete_receive_sa(wpa_s->drv_priv, sa); 8875b9c547cSRui Paulo } 8885b9c547cSRui Paulo 8895b9c547cSRui Paulo static inline int wpa_drv_enable_receive_sa(struct wpa_supplicant *wpa_s, 89085732ac8SCy Schubert struct receive_sa *sa) 8915b9c547cSRui Paulo { 8925b9c547cSRui Paulo if (!wpa_s->driver->enable_receive_sa) 8935b9c547cSRui Paulo return -1; 89485732ac8SCy Schubert return wpa_s->driver->enable_receive_sa(wpa_s->drv_priv, sa); 8955b9c547cSRui Paulo } 8965b9c547cSRui Paulo 8975b9c547cSRui Paulo static inline int wpa_drv_disable_receive_sa(struct wpa_supplicant *wpa_s, 89885732ac8SCy Schubert struct receive_sa *sa) 8995b9c547cSRui Paulo { 9005b9c547cSRui Paulo if (!wpa_s->driver->disable_receive_sa) 9015b9c547cSRui Paulo return -1; 90285732ac8SCy Schubert return wpa_s->driver->disable_receive_sa(wpa_s->drv_priv, sa); 9035b9c547cSRui Paulo } 9045b9c547cSRui Paulo 9055b9c547cSRui Paulo static inline int 90685732ac8SCy Schubert wpa_drv_create_transmit_sc(struct wpa_supplicant *wpa_s, struct transmit_sc *sc, 9075b9c547cSRui Paulo unsigned int conf_offset) 9085b9c547cSRui Paulo { 9095b9c547cSRui Paulo if (!wpa_s->driver->create_transmit_sc) 9105b9c547cSRui Paulo return -1; 91185732ac8SCy Schubert return wpa_s->driver->create_transmit_sc(wpa_s->drv_priv, sc, 9125b9c547cSRui Paulo conf_offset); 9135b9c547cSRui Paulo } 9145b9c547cSRui Paulo 9155b9c547cSRui Paulo static inline int wpa_drv_delete_transmit_sc(struct wpa_supplicant *wpa_s, 91685732ac8SCy Schubert struct transmit_sc *sc) 9175b9c547cSRui Paulo { 9185b9c547cSRui Paulo if (!wpa_s->driver->delete_transmit_sc) 9195b9c547cSRui Paulo return -1; 92085732ac8SCy Schubert return wpa_s->driver->delete_transmit_sc(wpa_s->drv_priv, sc); 9215b9c547cSRui Paulo } 9225b9c547cSRui Paulo 9235b9c547cSRui Paulo static inline int wpa_drv_create_transmit_sa(struct wpa_supplicant *wpa_s, 92485732ac8SCy Schubert struct transmit_sa *sa) 9255b9c547cSRui Paulo { 9265b9c547cSRui Paulo if (!wpa_s->driver->create_transmit_sa) 9275b9c547cSRui Paulo return -1; 92885732ac8SCy Schubert return wpa_s->driver->create_transmit_sa(wpa_s->drv_priv, sa); 92985732ac8SCy Schubert } 93085732ac8SCy Schubert 93185732ac8SCy Schubert static inline int wpa_drv_delete_transmit_sa(struct wpa_supplicant *wpa_s, 93285732ac8SCy Schubert struct transmit_sa *sa) 93385732ac8SCy Schubert { 93485732ac8SCy Schubert if (!wpa_s->driver->delete_transmit_sa) 93585732ac8SCy Schubert return -1; 93685732ac8SCy Schubert return wpa_s->driver->delete_transmit_sa(wpa_s->drv_priv, sa); 9375b9c547cSRui Paulo } 9385b9c547cSRui Paulo 9395b9c547cSRui Paulo static inline int wpa_drv_enable_transmit_sa(struct wpa_supplicant *wpa_s, 94085732ac8SCy Schubert struct transmit_sa *sa) 9415b9c547cSRui Paulo { 9425b9c547cSRui Paulo if (!wpa_s->driver->enable_transmit_sa) 9435b9c547cSRui Paulo return -1; 94485732ac8SCy Schubert return wpa_s->driver->enable_transmit_sa(wpa_s->drv_priv, sa); 9455b9c547cSRui Paulo } 9465b9c547cSRui Paulo 9475b9c547cSRui Paulo static inline int wpa_drv_disable_transmit_sa(struct wpa_supplicant *wpa_s, 94885732ac8SCy Schubert struct transmit_sa *sa) 9495b9c547cSRui Paulo { 9505b9c547cSRui Paulo if (!wpa_s->driver->disable_transmit_sa) 9515b9c547cSRui Paulo return -1; 95285732ac8SCy Schubert return wpa_s->driver->disable_transmit_sa(wpa_s->drv_priv, sa); 9535b9c547cSRui Paulo } 9545b9c547cSRui Paulo #endif /* CONFIG_MACSEC */ 9555b9c547cSRui Paulo 956325151a3SRui Paulo static inline int wpa_drv_setband(struct wpa_supplicant *wpa_s, 957*c1d255d3SCy Schubert u32 band_mask) 958325151a3SRui Paulo { 959325151a3SRui Paulo if (!wpa_s->driver->set_band) 960325151a3SRui Paulo return -1; 961*c1d255d3SCy Schubert return wpa_s->driver->set_band(wpa_s->drv_priv, band_mask); 962325151a3SRui Paulo } 963325151a3SRui Paulo 964325151a3SRui Paulo static inline int wpa_drv_get_pref_freq_list(struct wpa_supplicant *wpa_s, 965325151a3SRui Paulo enum wpa_driver_if_type if_type, 966325151a3SRui Paulo unsigned int *num, 967325151a3SRui Paulo unsigned int *freq_list) 968325151a3SRui Paulo { 96985732ac8SCy Schubert #ifdef CONFIG_TESTING_OPTIONS 97085732ac8SCy Schubert if (wpa_s->get_pref_freq_list_override) 97185732ac8SCy Schubert return wpas_ctrl_iface_get_pref_freq_list_override( 97285732ac8SCy Schubert wpa_s, if_type, num, freq_list); 97385732ac8SCy Schubert #endif /* CONFIG_TESTING_OPTIONS */ 974325151a3SRui Paulo if (!wpa_s->driver->get_pref_freq_list) 975325151a3SRui Paulo return -1; 976325151a3SRui Paulo return wpa_s->driver->get_pref_freq_list(wpa_s->drv_priv, if_type, 977325151a3SRui Paulo num, freq_list); 978325151a3SRui Paulo } 979325151a3SRui Paulo 980325151a3SRui Paulo static inline int wpa_drv_set_prob_oper_freq(struct wpa_supplicant *wpa_s, 981325151a3SRui Paulo unsigned int freq) 982325151a3SRui Paulo { 983325151a3SRui Paulo if (!wpa_s->driver->set_prob_oper_freq) 984325151a3SRui Paulo return 0; 985325151a3SRui Paulo return wpa_s->driver->set_prob_oper_freq(wpa_s->drv_priv, freq); 986325151a3SRui Paulo } 987325151a3SRui Paulo 98885732ac8SCy Schubert static inline int wpa_drv_abort_scan(struct wpa_supplicant *wpa_s, 98985732ac8SCy Schubert u64 scan_cookie) 990780fb4a2SCy Schubert { 991780fb4a2SCy Schubert if (!wpa_s->driver->abort_scan) 992780fb4a2SCy Schubert return -1; 99385732ac8SCy Schubert return wpa_s->driver->abort_scan(wpa_s->drv_priv, scan_cookie); 994780fb4a2SCy Schubert } 995780fb4a2SCy Schubert 996780fb4a2SCy Schubert static inline int wpa_drv_configure_frame_filters(struct wpa_supplicant *wpa_s, 997780fb4a2SCy Schubert u32 filters) 998780fb4a2SCy Schubert { 999780fb4a2SCy Schubert if (!wpa_s->driver->configure_data_frame_filters) 1000780fb4a2SCy Schubert return -1; 1001780fb4a2SCy Schubert return wpa_s->driver->configure_data_frame_filters(wpa_s->drv_priv, 1002780fb4a2SCy Schubert filters); 1003780fb4a2SCy Schubert } 1004780fb4a2SCy Schubert 1005780fb4a2SCy Schubert static inline int wpa_drv_get_ext_capa(struct wpa_supplicant *wpa_s, 1006780fb4a2SCy Schubert enum wpa_driver_if_type type) 1007780fb4a2SCy Schubert { 1008780fb4a2SCy Schubert if (!wpa_s->driver->get_ext_capab) 1009780fb4a2SCy Schubert return -1; 1010780fb4a2SCy Schubert return wpa_s->driver->get_ext_capab(wpa_s->drv_priv, type, 1011780fb4a2SCy Schubert &wpa_s->extended_capa, 1012780fb4a2SCy Schubert &wpa_s->extended_capa_mask, 1013780fb4a2SCy Schubert &wpa_s->extended_capa_len); 1014780fb4a2SCy Schubert } 1015780fb4a2SCy Schubert 1016780fb4a2SCy Schubert static inline int wpa_drv_p2p_lo_start(struct wpa_supplicant *wpa_s, 1017780fb4a2SCy Schubert unsigned int channel, 1018780fb4a2SCy Schubert unsigned int period, 1019780fb4a2SCy Schubert unsigned int interval, 1020780fb4a2SCy Schubert unsigned int count, 1021780fb4a2SCy Schubert const u8 *device_types, 1022780fb4a2SCy Schubert size_t dev_types_len, 1023780fb4a2SCy Schubert const u8 *ies, size_t ies_len) 1024780fb4a2SCy Schubert { 1025780fb4a2SCy Schubert if (!wpa_s->driver->p2p_lo_start) 1026780fb4a2SCy Schubert return -1; 1027780fb4a2SCy Schubert return wpa_s->driver->p2p_lo_start(wpa_s->drv_priv, channel, period, 1028780fb4a2SCy Schubert interval, count, device_types, 1029780fb4a2SCy Schubert dev_types_len, ies, ies_len); 1030780fb4a2SCy Schubert } 1031780fb4a2SCy Schubert 1032780fb4a2SCy Schubert static inline int wpa_drv_p2p_lo_stop(struct wpa_supplicant *wpa_s) 1033780fb4a2SCy Schubert { 1034780fb4a2SCy Schubert if (!wpa_s->driver->p2p_lo_stop) 1035780fb4a2SCy Schubert return -1; 1036780fb4a2SCy Schubert return wpa_s->driver->p2p_lo_stop(wpa_s->drv_priv); 1037780fb4a2SCy Schubert } 1038780fb4a2SCy Schubert 1039780fb4a2SCy Schubert static inline int wpa_drv_set_default_scan_ies(struct wpa_supplicant *wpa_s, 1040780fb4a2SCy Schubert const u8 *ies, size_t len) 1041780fb4a2SCy Schubert { 1042780fb4a2SCy Schubert if (!wpa_s->driver->set_default_scan_ies) 1043780fb4a2SCy Schubert return -1; 1044780fb4a2SCy Schubert return wpa_s->driver->set_default_scan_ies(wpa_s->drv_priv, ies, len); 1045780fb4a2SCy Schubert } 1046780fb4a2SCy Schubert 104785732ac8SCy Schubert static inline int wpa_drv_set_tdls_mode(struct wpa_supplicant *wpa_s, 104885732ac8SCy Schubert int tdls_external_control) 104985732ac8SCy Schubert { 105085732ac8SCy Schubert if (!wpa_s->driver->set_tdls_mode) 105185732ac8SCy Schubert return -1; 105285732ac8SCy Schubert return wpa_s->driver->set_tdls_mode(wpa_s->drv_priv, 105385732ac8SCy Schubert tdls_external_control); 105485732ac8SCy Schubert } 105585732ac8SCy Schubert 105685732ac8SCy Schubert static inline struct wpa_bss_candidate_info * 105785732ac8SCy Schubert wpa_drv_get_bss_trans_status(struct wpa_supplicant *wpa_s, 105885732ac8SCy Schubert struct wpa_bss_trans_info *params) 105985732ac8SCy Schubert { 106085732ac8SCy Schubert if (!wpa_s->driver->get_bss_transition_status) 106185732ac8SCy Schubert return NULL; 106285732ac8SCy Schubert return wpa_s->driver->get_bss_transition_status(wpa_s->drv_priv, 106385732ac8SCy Schubert params); 106485732ac8SCy Schubert } 106585732ac8SCy Schubert 106685732ac8SCy Schubert static inline int wpa_drv_ignore_assoc_disallow(struct wpa_supplicant *wpa_s, 106785732ac8SCy Schubert int val) 106885732ac8SCy Schubert { 106985732ac8SCy Schubert if (!wpa_s->driver->ignore_assoc_disallow) 107085732ac8SCy Schubert return -1; 107185732ac8SCy Schubert return wpa_s->driver->ignore_assoc_disallow(wpa_s->drv_priv, val); 107285732ac8SCy Schubert } 107385732ac8SCy Schubert 1074*c1d255d3SCy Schubert static inline int wpa_drv_set_bssid_tmp_disallow(struct wpa_supplicant *wpa_s, 107585732ac8SCy Schubert unsigned int num_bssid, 107685732ac8SCy Schubert const u8 *bssids) 107785732ac8SCy Schubert { 1078*c1d255d3SCy Schubert if (!wpa_s->driver->set_bssid_tmp_disallow) 107985732ac8SCy Schubert return -1; 1080*c1d255d3SCy Schubert return wpa_s->driver->set_bssid_tmp_disallow(wpa_s->drv_priv, num_bssid, 108185732ac8SCy Schubert bssids); 108285732ac8SCy Schubert } 108385732ac8SCy Schubert 108485732ac8SCy Schubert static inline int wpa_drv_update_connect_params( 108585732ac8SCy Schubert struct wpa_supplicant *wpa_s, 108685732ac8SCy Schubert struct wpa_driver_associate_params *params, 108785732ac8SCy Schubert enum wpa_drv_update_connect_params_mask mask) 108885732ac8SCy Schubert { 108985732ac8SCy Schubert if (!wpa_s->driver->update_connect_params) 109085732ac8SCy Schubert return -1; 109185732ac8SCy Schubert return wpa_s->driver->update_connect_params(wpa_s->drv_priv, params, 109285732ac8SCy Schubert mask); 109385732ac8SCy Schubert } 109485732ac8SCy Schubert 109585732ac8SCy Schubert static inline int 109685732ac8SCy Schubert wpa_drv_send_external_auth_status(struct wpa_supplicant *wpa_s, 109785732ac8SCy Schubert struct external_auth *params) 109885732ac8SCy Schubert { 109985732ac8SCy Schubert if (!wpa_s->driver->send_external_auth_status) 110085732ac8SCy Schubert return -1; 110185732ac8SCy Schubert return wpa_s->driver->send_external_auth_status(wpa_s->drv_priv, 110285732ac8SCy Schubert params); 110385732ac8SCy Schubert } 110485732ac8SCy Schubert 11054bc52338SCy Schubert static inline int wpa_drv_set_4addr_mode(struct wpa_supplicant *wpa_s, int val) 11064bc52338SCy Schubert { 11074bc52338SCy Schubert if (!wpa_s->driver->set_4addr_mode) 11084bc52338SCy Schubert return -1; 11094bc52338SCy Schubert return wpa_s->driver->set_4addr_mode(wpa_s->drv_priv, 11104bc52338SCy Schubert wpa_s->bridge_ifname, val); 11114bc52338SCy Schubert } 11124bc52338SCy Schubert 1113*c1d255d3SCy Schubert static inline int wpa_drv_dpp_listen(struct wpa_supplicant *wpa_s, bool enable) 1114*c1d255d3SCy Schubert { 1115*c1d255d3SCy Schubert if (!wpa_s->driver->dpp_listen) 1116*c1d255d3SCy Schubert return 0; 1117*c1d255d3SCy Schubert return wpa_s->driver->dpp_listen(wpa_s->drv_priv, enable); 1118*c1d255d3SCy Schubert } 1119*c1d255d3SCy Schubert 1120e28a4053SRui Paulo #endif /* DRIVER_I_H */ 1121