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 90*206b73d0SCy Schubert static inline int wpa_drv_mesh_link_probe(struct wpa_supplicant *wpa_s, 91*206b73d0SCy Schubert const u8 *addr, 92*206b73d0SCy Schubert const u8 *eth, size_t len) 93*206b73d0SCy Schubert { 94*206b73d0SCy Schubert if (wpa_s->driver->probe_mesh_link) 95*206b73d0SCy Schubert return wpa_s->driver->probe_mesh_link(wpa_s->drv_priv, addr, 96*206b73d0SCy Schubert eth, len); 97*206b73d0SCy Schubert return -1; 98*206b73d0SCy Schubert } 99*206b73d0SCy 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 127e28a4053SRui Paulo static inline struct wpa_scan_results * wpa_drv_get_scan_results2( 128e28a4053SRui Paulo struct wpa_supplicant *wpa_s) 129e28a4053SRui Paulo { 130e28a4053SRui Paulo if (wpa_s->driver->get_scan_results2) 131e28a4053SRui Paulo return wpa_s->driver->get_scan_results2(wpa_s->drv_priv); 132e28a4053SRui Paulo return NULL; 133e28a4053SRui Paulo } 134e28a4053SRui Paulo 135e28a4053SRui Paulo static inline int wpa_drv_get_bssid(struct wpa_supplicant *wpa_s, u8 *bssid) 136e28a4053SRui Paulo { 137e28a4053SRui Paulo if (wpa_s->driver->get_bssid) { 138e28a4053SRui Paulo return wpa_s->driver->get_bssid(wpa_s->drv_priv, bssid); 139e28a4053SRui Paulo } 140e28a4053SRui Paulo return -1; 141e28a4053SRui Paulo } 142e28a4053SRui Paulo 143e28a4053SRui Paulo static inline int wpa_drv_get_ssid(struct wpa_supplicant *wpa_s, u8 *ssid) 144e28a4053SRui Paulo { 145e28a4053SRui Paulo if (wpa_s->driver->get_ssid) { 146e28a4053SRui Paulo return wpa_s->driver->get_ssid(wpa_s->drv_priv, ssid); 147e28a4053SRui Paulo } 148e28a4053SRui Paulo return -1; 149e28a4053SRui Paulo } 150e28a4053SRui Paulo 151e28a4053SRui Paulo static inline int wpa_drv_set_key(struct wpa_supplicant *wpa_s, 152e28a4053SRui Paulo enum wpa_alg alg, const u8 *addr, 153e28a4053SRui Paulo int key_idx, int set_tx, 154e28a4053SRui Paulo const u8 *seq, size_t seq_len, 155e28a4053SRui Paulo const u8 *key, size_t key_len) 156e28a4053SRui Paulo { 1575b9c547cSRui Paulo if (alg != WPA_ALG_NONE) { 1585b9c547cSRui Paulo if (key_idx >= 0 && key_idx <= 6) 1595b9c547cSRui Paulo wpa_s->keys_cleared &= ~BIT(key_idx); 1605b9c547cSRui Paulo else 161e28a4053SRui Paulo wpa_s->keys_cleared = 0; 1625b9c547cSRui Paulo } 1635b9c547cSRui Paulo if (wpa_s->driver->set_key) { 164e28a4053SRui Paulo return wpa_s->driver->set_key(wpa_s->ifname, wpa_s->drv_priv, 165e28a4053SRui Paulo alg, addr, key_idx, set_tx, 166e28a4053SRui Paulo seq, seq_len, key, key_len); 167e28a4053SRui Paulo } 168e28a4053SRui Paulo return -1; 169e28a4053SRui Paulo } 170e28a4053SRui Paulo 171780fb4a2SCy Schubert static inline int wpa_drv_get_seqnum(struct wpa_supplicant *wpa_s, 172780fb4a2SCy Schubert const u8 *addr, int idx, u8 *seq) 173780fb4a2SCy Schubert { 174780fb4a2SCy Schubert if (wpa_s->driver->get_seqnum) 175780fb4a2SCy Schubert return wpa_s->driver->get_seqnum(wpa_s->ifname, wpa_s->drv_priv, 176780fb4a2SCy Schubert addr, idx, seq); 177780fb4a2SCy Schubert return -1; 178780fb4a2SCy Schubert } 179780fb4a2SCy Schubert 1805b9c547cSRui Paulo static inline int wpa_drv_sta_deauth(struct wpa_supplicant *wpa_s, 181*206b73d0SCy Schubert const u8 *addr, u16 reason_code) 1825b9c547cSRui Paulo { 1835b9c547cSRui Paulo if (wpa_s->driver->sta_deauth) { 1845b9c547cSRui Paulo return wpa_s->driver->sta_deauth(wpa_s->drv_priv, 1855b9c547cSRui Paulo wpa_s->own_addr, addr, 1865b9c547cSRui Paulo reason_code); 1875b9c547cSRui Paulo } 1885b9c547cSRui Paulo return -1; 1895b9c547cSRui Paulo } 1905b9c547cSRui Paulo 191e28a4053SRui Paulo static inline int wpa_drv_deauthenticate(struct wpa_supplicant *wpa_s, 192*206b73d0SCy Schubert const u8 *addr, u16 reason_code) 193e28a4053SRui Paulo { 194e28a4053SRui Paulo if (wpa_s->driver->deauthenticate) { 195e28a4053SRui Paulo return wpa_s->driver->deauthenticate(wpa_s->drv_priv, addr, 196e28a4053SRui Paulo reason_code); 197e28a4053SRui Paulo } 198e28a4053SRui Paulo return -1; 199e28a4053SRui Paulo } 200e28a4053SRui Paulo 201e28a4053SRui Paulo static inline int wpa_drv_add_pmkid(struct wpa_supplicant *wpa_s, 20285732ac8SCy Schubert struct wpa_pmkid_params *params) 203e28a4053SRui Paulo { 204e28a4053SRui Paulo if (wpa_s->driver->add_pmkid) { 20585732ac8SCy Schubert return wpa_s->driver->add_pmkid(wpa_s->drv_priv, params); 206e28a4053SRui Paulo } 207e28a4053SRui Paulo return -1; 208e28a4053SRui Paulo } 209e28a4053SRui Paulo 210e28a4053SRui Paulo static inline int wpa_drv_remove_pmkid(struct wpa_supplicant *wpa_s, 21185732ac8SCy Schubert struct wpa_pmkid_params *params) 212e28a4053SRui Paulo { 213e28a4053SRui Paulo if (wpa_s->driver->remove_pmkid) { 21485732ac8SCy Schubert return wpa_s->driver->remove_pmkid(wpa_s->drv_priv, params); 215e28a4053SRui Paulo } 216e28a4053SRui Paulo return -1; 217e28a4053SRui Paulo } 218e28a4053SRui Paulo 219e28a4053SRui Paulo static inline int wpa_drv_flush_pmkid(struct wpa_supplicant *wpa_s) 220e28a4053SRui Paulo { 221e28a4053SRui Paulo if (wpa_s->driver->flush_pmkid) { 222e28a4053SRui Paulo return wpa_s->driver->flush_pmkid(wpa_s->drv_priv); 223e28a4053SRui Paulo } 224e28a4053SRui Paulo return -1; 225e28a4053SRui Paulo } 226e28a4053SRui Paulo 227e28a4053SRui Paulo static inline int wpa_drv_get_capa(struct wpa_supplicant *wpa_s, 228e28a4053SRui Paulo struct wpa_driver_capa *capa) 229e28a4053SRui Paulo { 230e28a4053SRui Paulo if (wpa_s->driver->get_capa) { 231e28a4053SRui Paulo return wpa_s->driver->get_capa(wpa_s->drv_priv, capa); 232e28a4053SRui Paulo } 233e28a4053SRui Paulo return -1; 234e28a4053SRui Paulo } 235e28a4053SRui Paulo 236e28a4053SRui Paulo static inline void wpa_drv_poll(struct wpa_supplicant *wpa_s) 237e28a4053SRui Paulo { 238e28a4053SRui Paulo if (wpa_s->driver->poll) { 239e28a4053SRui Paulo wpa_s->driver->poll(wpa_s->drv_priv); 240e28a4053SRui Paulo } 241e28a4053SRui Paulo } 242e28a4053SRui Paulo 243e28a4053SRui Paulo static inline const char * wpa_drv_get_ifname(struct wpa_supplicant *wpa_s) 244e28a4053SRui Paulo { 245e28a4053SRui Paulo if (wpa_s->driver->get_ifname) { 246e28a4053SRui Paulo return wpa_s->driver->get_ifname(wpa_s->drv_priv); 247e28a4053SRui Paulo } 248e28a4053SRui Paulo return NULL; 249e28a4053SRui Paulo } 250e28a4053SRui Paulo 2515b9c547cSRui Paulo static inline const char * 2525b9c547cSRui Paulo wpa_driver_get_radio_name(struct wpa_supplicant *wpa_s) 2535b9c547cSRui Paulo { 2545b9c547cSRui Paulo if (wpa_s->driver->get_radio_name) 2555b9c547cSRui Paulo return wpa_s->driver->get_radio_name(wpa_s->drv_priv); 2565b9c547cSRui Paulo return NULL; 2575b9c547cSRui Paulo } 2585b9c547cSRui Paulo 259e28a4053SRui Paulo static inline const u8 * wpa_drv_get_mac_addr(struct wpa_supplicant *wpa_s) 260e28a4053SRui Paulo { 261e28a4053SRui Paulo if (wpa_s->driver->get_mac_addr) { 262e28a4053SRui Paulo return wpa_s->driver->get_mac_addr(wpa_s->drv_priv); 263e28a4053SRui Paulo } 264e28a4053SRui Paulo return NULL; 265e28a4053SRui Paulo } 266e28a4053SRui Paulo 267e28a4053SRui Paulo static inline int wpa_drv_set_operstate(struct wpa_supplicant *wpa_s, 268e28a4053SRui Paulo int state) 269e28a4053SRui Paulo { 270e28a4053SRui Paulo if (wpa_s->driver->set_operstate) 271e28a4053SRui Paulo return wpa_s->driver->set_operstate(wpa_s->drv_priv, state); 272e28a4053SRui Paulo return 0; 273e28a4053SRui Paulo } 274e28a4053SRui Paulo 275e28a4053SRui Paulo static inline int wpa_drv_mlme_setprotection(struct wpa_supplicant *wpa_s, 276e28a4053SRui Paulo const u8 *addr, int protect_type, 277e28a4053SRui Paulo int key_type) 278e28a4053SRui Paulo { 279e28a4053SRui Paulo if (wpa_s->driver->mlme_setprotection) 280e28a4053SRui Paulo return wpa_s->driver->mlme_setprotection(wpa_s->drv_priv, addr, 281e28a4053SRui Paulo protect_type, 282e28a4053SRui Paulo key_type); 283e28a4053SRui Paulo return 0; 284e28a4053SRui Paulo } 285e28a4053SRui Paulo 286e28a4053SRui Paulo static inline struct hostapd_hw_modes * 287e28a4053SRui Paulo wpa_drv_get_hw_feature_data(struct wpa_supplicant *wpa_s, u16 *num_modes, 28885732ac8SCy Schubert u16 *flags, u8 *dfs_domain) 289e28a4053SRui Paulo { 290e28a4053SRui Paulo if (wpa_s->driver->get_hw_feature_data) 291e28a4053SRui Paulo return wpa_s->driver->get_hw_feature_data(wpa_s->drv_priv, 29285732ac8SCy Schubert num_modes, flags, 29385732ac8SCy Schubert dfs_domain); 294e28a4053SRui Paulo return NULL; 295e28a4053SRui Paulo } 296e28a4053SRui Paulo 297e28a4053SRui Paulo static inline int wpa_drv_set_country(struct wpa_supplicant *wpa_s, 298e28a4053SRui Paulo const char *alpha2) 299e28a4053SRui Paulo { 300e28a4053SRui Paulo if (wpa_s->driver->set_country) 301e28a4053SRui Paulo return wpa_s->driver->set_country(wpa_s->drv_priv, alpha2); 302e28a4053SRui Paulo return 0; 303e28a4053SRui Paulo } 304e28a4053SRui Paulo 305e28a4053SRui Paulo static inline int wpa_drv_send_mlme(struct wpa_supplicant *wpa_s, 306325151a3SRui Paulo const u8 *data, size_t data_len, int noack, 307325151a3SRui Paulo unsigned int freq) 308e28a4053SRui Paulo { 309e28a4053SRui Paulo if (wpa_s->driver->send_mlme) 310e28a4053SRui Paulo return wpa_s->driver->send_mlme(wpa_s->drv_priv, 311325151a3SRui Paulo data, data_len, noack, 312780fb4a2SCy Schubert freq, NULL, 0); 313e28a4053SRui Paulo return -1; 314e28a4053SRui Paulo } 315e28a4053SRui Paulo 316e28a4053SRui Paulo static inline int wpa_drv_update_ft_ies(struct wpa_supplicant *wpa_s, 317e28a4053SRui Paulo const u8 *md, 318e28a4053SRui Paulo const u8 *ies, size_t ies_len) 319e28a4053SRui Paulo { 320e28a4053SRui Paulo if (wpa_s->driver->update_ft_ies) 321e28a4053SRui Paulo return wpa_s->driver->update_ft_ies(wpa_s->drv_priv, md, 322e28a4053SRui Paulo ies, ies_len); 323e28a4053SRui Paulo return -1; 324e28a4053SRui Paulo } 325e28a4053SRui Paulo 326f05cddf9SRui Paulo static inline int wpa_drv_set_ap(struct wpa_supplicant *wpa_s, 327f05cddf9SRui Paulo struct wpa_driver_ap_params *params) 328e28a4053SRui Paulo { 329f05cddf9SRui Paulo if (wpa_s->driver->set_ap) 330f05cddf9SRui Paulo return wpa_s->driver->set_ap(wpa_s->drv_priv, params); 331e28a4053SRui Paulo return -1; 332e28a4053SRui Paulo } 333e28a4053SRui Paulo 334e28a4053SRui Paulo static inline int wpa_drv_sta_add(struct wpa_supplicant *wpa_s, 335e28a4053SRui Paulo struct hostapd_sta_add_params *params) 336e28a4053SRui Paulo { 337e28a4053SRui Paulo if (wpa_s->driver->sta_add) 338e28a4053SRui Paulo return wpa_s->driver->sta_add(wpa_s->drv_priv, params); 339e28a4053SRui Paulo return -1; 340e28a4053SRui Paulo } 341e28a4053SRui Paulo 342e28a4053SRui Paulo static inline int wpa_drv_sta_remove(struct wpa_supplicant *wpa_s, 343e28a4053SRui Paulo const u8 *addr) 344e28a4053SRui Paulo { 345e28a4053SRui Paulo if (wpa_s->driver->sta_remove) 346e28a4053SRui Paulo return wpa_s->driver->sta_remove(wpa_s->drv_priv, addr); 347e28a4053SRui Paulo return -1; 348e28a4053SRui Paulo } 349e28a4053SRui Paulo 350e28a4053SRui Paulo static inline int wpa_drv_hapd_send_eapol(struct wpa_supplicant *wpa_s, 351e28a4053SRui Paulo const u8 *addr, const u8 *data, 352e28a4053SRui Paulo size_t data_len, int encrypt, 353f05cddf9SRui Paulo const u8 *own_addr, u32 flags) 354e28a4053SRui Paulo { 355e28a4053SRui Paulo if (wpa_s->driver->hapd_send_eapol) 356e28a4053SRui Paulo return wpa_s->driver->hapd_send_eapol(wpa_s->drv_priv, addr, 357e28a4053SRui Paulo data, data_len, encrypt, 358f05cddf9SRui Paulo own_addr, flags); 359e28a4053SRui Paulo return -1; 360e28a4053SRui Paulo } 361e28a4053SRui Paulo 362e28a4053SRui Paulo static inline int wpa_drv_sta_set_flags(struct wpa_supplicant *wpa_s, 363e28a4053SRui Paulo const u8 *addr, int total_flags, 364e28a4053SRui Paulo int flags_or, int flags_and) 365e28a4053SRui Paulo { 366e28a4053SRui Paulo if (wpa_s->driver->sta_set_flags) 367e28a4053SRui Paulo return wpa_s->driver->sta_set_flags(wpa_s->drv_priv, addr, 368e28a4053SRui Paulo total_flags, flags_or, 369e28a4053SRui Paulo flags_and); 370e28a4053SRui Paulo return -1; 371e28a4053SRui Paulo } 372e28a4053SRui Paulo 373e28a4053SRui Paulo static inline int wpa_drv_set_supp_port(struct wpa_supplicant *wpa_s, 374e28a4053SRui Paulo int authorized) 375e28a4053SRui Paulo { 376e28a4053SRui Paulo if (wpa_s->driver->set_supp_port) { 377e28a4053SRui Paulo return wpa_s->driver->set_supp_port(wpa_s->drv_priv, 378e28a4053SRui Paulo authorized); 379e28a4053SRui Paulo } 380e28a4053SRui Paulo return 0; 381e28a4053SRui Paulo } 382e28a4053SRui Paulo 383e28a4053SRui Paulo static inline int wpa_drv_send_action(struct wpa_supplicant *wpa_s, 384e28a4053SRui Paulo unsigned int freq, 385f05cddf9SRui Paulo unsigned int wait, 386e28a4053SRui Paulo const u8 *dst, const u8 *src, 387e28a4053SRui Paulo const u8 *bssid, 388f05cddf9SRui Paulo const u8 *data, size_t data_len, 389f05cddf9SRui Paulo int no_cck) 390e28a4053SRui Paulo { 391e28a4053SRui Paulo if (wpa_s->driver->send_action) 392e28a4053SRui Paulo return wpa_s->driver->send_action(wpa_s->drv_priv, freq, 393f05cddf9SRui Paulo wait, dst, src, bssid, 394f05cddf9SRui Paulo data, data_len, no_cck); 395f05cddf9SRui Paulo return -1; 396f05cddf9SRui Paulo } 397f05cddf9SRui Paulo 398f05cddf9SRui Paulo static inline void wpa_drv_send_action_cancel_wait(struct wpa_supplicant *wpa_s) 399f05cddf9SRui Paulo { 400f05cddf9SRui Paulo if (wpa_s->driver->send_action_cancel_wait) 401f05cddf9SRui Paulo wpa_s->driver->send_action_cancel_wait(wpa_s->drv_priv); 402f05cddf9SRui Paulo } 403f05cddf9SRui Paulo 404f05cddf9SRui Paulo static inline int wpa_drv_set_freq(struct wpa_supplicant *wpa_s, 405f05cddf9SRui Paulo struct hostapd_freq_params *freq) 406f05cddf9SRui Paulo { 407f05cddf9SRui Paulo if (wpa_s->driver->set_freq) 408f05cddf9SRui Paulo return wpa_s->driver->set_freq(wpa_s->drv_priv, freq); 409e28a4053SRui Paulo return -1; 410e28a4053SRui Paulo } 411e28a4053SRui Paulo 412e28a4053SRui Paulo static inline int wpa_drv_if_add(struct wpa_supplicant *wpa_s, 413e28a4053SRui Paulo enum wpa_driver_if_type type, 414e28a4053SRui Paulo const char *ifname, const u8 *addr, 415e28a4053SRui Paulo void *bss_ctx, char *force_ifname, 416f05cddf9SRui Paulo u8 *if_addr, const char *bridge) 417e28a4053SRui Paulo { 418e28a4053SRui Paulo if (wpa_s->driver->if_add) 419e28a4053SRui Paulo return wpa_s->driver->if_add(wpa_s->drv_priv, type, ifname, 420e28a4053SRui Paulo addr, bss_ctx, NULL, force_ifname, 421780fb4a2SCy Schubert if_addr, bridge, 0, 0); 422e28a4053SRui Paulo return -1; 423e28a4053SRui Paulo } 424e28a4053SRui Paulo 425e28a4053SRui Paulo static inline int wpa_drv_if_remove(struct wpa_supplicant *wpa_s, 426e28a4053SRui Paulo enum wpa_driver_if_type type, 427e28a4053SRui Paulo const char *ifname) 428e28a4053SRui Paulo { 429e28a4053SRui Paulo if (wpa_s->driver->if_remove) 430e28a4053SRui Paulo return wpa_s->driver->if_remove(wpa_s->drv_priv, type, ifname); 431e28a4053SRui Paulo return -1; 432e28a4053SRui Paulo } 433e28a4053SRui Paulo 434e28a4053SRui Paulo static inline int wpa_drv_remain_on_channel(struct wpa_supplicant *wpa_s, 435e28a4053SRui Paulo unsigned int freq, 436e28a4053SRui Paulo unsigned int duration) 437e28a4053SRui Paulo { 438e28a4053SRui Paulo if (wpa_s->driver->remain_on_channel) 439e28a4053SRui Paulo return wpa_s->driver->remain_on_channel(wpa_s->drv_priv, freq, 440e28a4053SRui Paulo duration); 441e28a4053SRui Paulo return -1; 442e28a4053SRui Paulo } 443e28a4053SRui Paulo 444e28a4053SRui Paulo static inline int wpa_drv_cancel_remain_on_channel( 445e28a4053SRui Paulo struct wpa_supplicant *wpa_s) 446e28a4053SRui Paulo { 447e28a4053SRui Paulo if (wpa_s->driver->cancel_remain_on_channel) 448e28a4053SRui Paulo return wpa_s->driver->cancel_remain_on_channel( 449e28a4053SRui Paulo wpa_s->drv_priv); 450e28a4053SRui Paulo return -1; 451e28a4053SRui Paulo } 452e28a4053SRui Paulo 453e28a4053SRui Paulo static inline int wpa_drv_probe_req_report(struct wpa_supplicant *wpa_s, 454e28a4053SRui Paulo int report) 455e28a4053SRui Paulo { 456e28a4053SRui Paulo if (wpa_s->driver->probe_req_report) 457e28a4053SRui Paulo return wpa_s->driver->probe_req_report(wpa_s->drv_priv, 458e28a4053SRui Paulo report); 459e28a4053SRui Paulo return -1; 460e28a4053SRui Paulo } 461e28a4053SRui Paulo 462e28a4053SRui Paulo static inline int wpa_drv_deinit_ap(struct wpa_supplicant *wpa_s) 463e28a4053SRui Paulo { 464e28a4053SRui Paulo if (wpa_s->driver->deinit_ap) 465e28a4053SRui Paulo return wpa_s->driver->deinit_ap(wpa_s->drv_priv); 466e28a4053SRui Paulo return 0; 467e28a4053SRui Paulo } 468e28a4053SRui Paulo 469f05cddf9SRui Paulo static inline int wpa_drv_deinit_p2p_cli(struct wpa_supplicant *wpa_s) 470f05cddf9SRui Paulo { 471f05cddf9SRui Paulo if (wpa_s->driver->deinit_p2p_cli) 472f05cddf9SRui Paulo return wpa_s->driver->deinit_p2p_cli(wpa_s->drv_priv); 473f05cddf9SRui Paulo return 0; 474f05cddf9SRui Paulo } 475f05cddf9SRui Paulo 476e28a4053SRui Paulo static inline void wpa_drv_suspend(struct wpa_supplicant *wpa_s) 477e28a4053SRui Paulo { 478e28a4053SRui Paulo if (wpa_s->driver->suspend) 479e28a4053SRui Paulo wpa_s->driver->suspend(wpa_s->drv_priv); 480e28a4053SRui Paulo } 481e28a4053SRui Paulo 482e28a4053SRui Paulo static inline void wpa_drv_resume(struct wpa_supplicant *wpa_s) 483e28a4053SRui Paulo { 484e28a4053SRui Paulo if (wpa_s->driver->resume) 485e28a4053SRui Paulo wpa_s->driver->resume(wpa_s->drv_priv); 486e28a4053SRui Paulo } 487e28a4053SRui Paulo 488e28a4053SRui Paulo static inline int wpa_drv_signal_monitor(struct wpa_supplicant *wpa_s, 489e28a4053SRui Paulo int threshold, int hysteresis) 490e28a4053SRui Paulo { 491e28a4053SRui Paulo if (wpa_s->driver->signal_monitor) 492e28a4053SRui Paulo return wpa_s->driver->signal_monitor(wpa_s->drv_priv, 493e28a4053SRui Paulo threshold, hysteresis); 494e28a4053SRui Paulo return -1; 495e28a4053SRui Paulo } 496e28a4053SRui Paulo 497f05cddf9SRui Paulo static inline int wpa_drv_signal_poll(struct wpa_supplicant *wpa_s, 498f05cddf9SRui Paulo struct wpa_signal_info *si) 499f05cddf9SRui Paulo { 500f05cddf9SRui Paulo if (wpa_s->driver->signal_poll) 501f05cddf9SRui Paulo return wpa_s->driver->signal_poll(wpa_s->drv_priv, si); 502f05cddf9SRui Paulo return -1; 503f05cddf9SRui Paulo } 504f05cddf9SRui Paulo 5054bc52338SCy Schubert static inline int wpa_drv_channel_info(struct wpa_supplicant *wpa_s, 5064bc52338SCy Schubert struct wpa_channel_info *ci) 5074bc52338SCy Schubert { 5084bc52338SCy Schubert if (wpa_s->driver->channel_info) 5094bc52338SCy Schubert return wpa_s->driver->channel_info(wpa_s->drv_priv, ci); 5104bc52338SCy Schubert return -1; 5114bc52338SCy Schubert } 5124bc52338SCy Schubert 513f05cddf9SRui Paulo static inline int wpa_drv_pktcnt_poll(struct wpa_supplicant *wpa_s, 514f05cddf9SRui Paulo struct hostap_sta_driver_data *sta) 515f05cddf9SRui Paulo { 516f05cddf9SRui Paulo if (wpa_s->driver->read_sta_data) 517f05cddf9SRui Paulo return wpa_s->driver->read_sta_data(wpa_s->drv_priv, sta, 518f05cddf9SRui Paulo wpa_s->bssid); 519f05cddf9SRui Paulo return -1; 520f05cddf9SRui Paulo } 521f05cddf9SRui Paulo 522e28a4053SRui Paulo static inline int wpa_drv_set_ap_wps_ie(struct wpa_supplicant *wpa_s, 523e28a4053SRui Paulo const struct wpabuf *beacon, 524f05cddf9SRui Paulo const struct wpabuf *proberesp, 525f05cddf9SRui Paulo const struct wpabuf *assocresp) 526e28a4053SRui Paulo { 527e28a4053SRui Paulo if (!wpa_s->driver->set_ap_wps_ie) 528e28a4053SRui Paulo return -1; 529e28a4053SRui Paulo return wpa_s->driver->set_ap_wps_ie(wpa_s->drv_priv, beacon, 530f05cddf9SRui Paulo proberesp, assocresp); 531f05cddf9SRui Paulo } 532f05cddf9SRui Paulo 533f05cddf9SRui Paulo static inline int wpa_drv_get_noa(struct wpa_supplicant *wpa_s, 534f05cddf9SRui Paulo u8 *buf, size_t buf_len) 535f05cddf9SRui Paulo { 536f05cddf9SRui Paulo if (!wpa_s->driver->get_noa) 537f05cddf9SRui Paulo return -1; 538f05cddf9SRui Paulo return wpa_s->driver->get_noa(wpa_s->drv_priv, buf, buf_len); 539f05cddf9SRui Paulo } 540f05cddf9SRui Paulo 541f05cddf9SRui Paulo static inline int wpa_drv_set_p2p_powersave(struct wpa_supplicant *wpa_s, 542f05cddf9SRui Paulo int legacy_ps, int opp_ps, 543f05cddf9SRui Paulo int ctwindow) 544f05cddf9SRui Paulo { 545f05cddf9SRui Paulo if (!wpa_s->driver->set_p2p_powersave) 546f05cddf9SRui Paulo return -1; 547f05cddf9SRui Paulo return wpa_s->driver->set_p2p_powersave(wpa_s->drv_priv, legacy_ps, 548f05cddf9SRui Paulo opp_ps, ctwindow); 549f05cddf9SRui Paulo } 550f05cddf9SRui Paulo 551f05cddf9SRui Paulo static inline int wpa_drv_ampdu(struct wpa_supplicant *wpa_s, int ampdu) 552f05cddf9SRui Paulo { 553f05cddf9SRui Paulo if (!wpa_s->driver->ampdu) 554f05cddf9SRui Paulo return -1; 555f05cddf9SRui Paulo return wpa_s->driver->ampdu(wpa_s->drv_priv, ampdu); 556f05cddf9SRui Paulo } 557f05cddf9SRui Paulo 558f05cddf9SRui Paulo static inline int wpa_drv_send_tdls_mgmt(struct wpa_supplicant *wpa_s, 559f05cddf9SRui Paulo const u8 *dst, u8 action_code, 560f05cddf9SRui Paulo u8 dialog_token, u16 status_code, 5615b9c547cSRui Paulo u32 peer_capab, int initiator, 562f05cddf9SRui Paulo const u8 *buf, size_t len) 563f05cddf9SRui Paulo { 564f05cddf9SRui Paulo if (wpa_s->driver->send_tdls_mgmt) { 565f05cddf9SRui Paulo return wpa_s->driver->send_tdls_mgmt(wpa_s->drv_priv, dst, 566f05cddf9SRui Paulo action_code, dialog_token, 5675b9c547cSRui Paulo status_code, peer_capab, 5685b9c547cSRui Paulo initiator, buf, len); 569f05cddf9SRui Paulo } 570f05cddf9SRui Paulo return -1; 571f05cddf9SRui Paulo } 572f05cddf9SRui Paulo 573f05cddf9SRui Paulo static inline int wpa_drv_tdls_oper(struct wpa_supplicant *wpa_s, 574f05cddf9SRui Paulo enum tdls_oper oper, const u8 *peer) 575f05cddf9SRui Paulo { 576f05cddf9SRui Paulo if (!wpa_s->driver->tdls_oper) 577f05cddf9SRui Paulo return -1; 578f05cddf9SRui Paulo return wpa_s->driver->tdls_oper(wpa_s->drv_priv, oper, peer); 579f05cddf9SRui Paulo } 580f05cddf9SRui Paulo 5815b9c547cSRui Paulo #ifdef ANDROID 5825b9c547cSRui Paulo static inline int wpa_drv_driver_cmd(struct wpa_supplicant *wpa_s, 5835b9c547cSRui Paulo char *cmd, char *buf, size_t buf_len) 5845b9c547cSRui Paulo { 5855b9c547cSRui Paulo if (!wpa_s->driver->driver_cmd) 5865b9c547cSRui Paulo return -1; 5875b9c547cSRui Paulo return wpa_s->driver->driver_cmd(wpa_s->drv_priv, cmd, buf, buf_len); 5885b9c547cSRui Paulo } 5895b9c547cSRui Paulo #endif /* ANDROID */ 5905b9c547cSRui Paulo 591f05cddf9SRui Paulo static inline void wpa_drv_set_rekey_info(struct wpa_supplicant *wpa_s, 5925b9c547cSRui Paulo const u8 *kek, size_t kek_len, 5935b9c547cSRui Paulo const u8 *kck, size_t kck_len, 594f05cddf9SRui Paulo const u8 *replay_ctr) 595f05cddf9SRui Paulo { 596f05cddf9SRui Paulo if (!wpa_s->driver->set_rekey_info) 597f05cddf9SRui Paulo return; 5985b9c547cSRui Paulo wpa_s->driver->set_rekey_info(wpa_s->drv_priv, kek, kek_len, 5995b9c547cSRui Paulo kck, kck_len, replay_ctr); 600f05cddf9SRui Paulo } 601f05cddf9SRui Paulo 602f05cddf9SRui Paulo static inline int wpa_drv_radio_disable(struct wpa_supplicant *wpa_s, 603f05cddf9SRui Paulo int disabled) 604f05cddf9SRui Paulo { 605f05cddf9SRui Paulo if (!wpa_s->driver->radio_disable) 606f05cddf9SRui Paulo return -1; 607f05cddf9SRui Paulo return wpa_s->driver->radio_disable(wpa_s->drv_priv, disabled); 608f05cddf9SRui Paulo } 609f05cddf9SRui Paulo 610f05cddf9SRui Paulo static inline int wpa_drv_switch_channel(struct wpa_supplicant *wpa_s, 6115b9c547cSRui Paulo struct csa_settings *settings) 612f05cddf9SRui Paulo { 613f05cddf9SRui Paulo if (!wpa_s->driver->switch_channel) 614f05cddf9SRui Paulo return -1; 6155b9c547cSRui Paulo return wpa_s->driver->switch_channel(wpa_s->drv_priv, settings); 6165b9c547cSRui Paulo } 6175b9c547cSRui Paulo 6185b9c547cSRui Paulo static inline int wpa_drv_add_ts(struct wpa_supplicant *wpa_s, u8 tsid, 6195b9c547cSRui Paulo const u8 *address, u8 user_priority, 6205b9c547cSRui Paulo u16 admitted_time) 6215b9c547cSRui Paulo { 6225b9c547cSRui Paulo if (!wpa_s->driver->add_tx_ts) 6235b9c547cSRui Paulo return -1; 6245b9c547cSRui Paulo return wpa_s->driver->add_tx_ts(wpa_s->drv_priv, tsid, address, 6255b9c547cSRui Paulo user_priority, admitted_time); 6265b9c547cSRui Paulo } 6275b9c547cSRui Paulo 6285b9c547cSRui Paulo static inline int wpa_drv_del_ts(struct wpa_supplicant *wpa_s, u8 tid, 6295b9c547cSRui Paulo const u8 *address) 6305b9c547cSRui Paulo { 6315b9c547cSRui Paulo if (!wpa_s->driver->del_tx_ts) 6325b9c547cSRui Paulo return -1; 6335b9c547cSRui Paulo return wpa_s->driver->del_tx_ts(wpa_s->drv_priv, tid, address); 6345b9c547cSRui Paulo } 6355b9c547cSRui Paulo 6365b9c547cSRui Paulo static inline int wpa_drv_tdls_enable_channel_switch( 6375b9c547cSRui Paulo struct wpa_supplicant *wpa_s, const u8 *addr, u8 oper_class, 6385b9c547cSRui Paulo const struct hostapd_freq_params *freq_params) 6395b9c547cSRui Paulo { 6405b9c547cSRui Paulo if (!wpa_s->driver->tdls_enable_channel_switch) 6415b9c547cSRui Paulo return -1; 6425b9c547cSRui Paulo return wpa_s->driver->tdls_enable_channel_switch(wpa_s->drv_priv, addr, 6435b9c547cSRui Paulo oper_class, 6445b9c547cSRui Paulo freq_params); 6455b9c547cSRui Paulo } 6465b9c547cSRui Paulo 6475b9c547cSRui Paulo static inline int 6485b9c547cSRui Paulo wpa_drv_tdls_disable_channel_switch(struct wpa_supplicant *wpa_s, 6495b9c547cSRui Paulo const u8 *addr) 6505b9c547cSRui Paulo { 6515b9c547cSRui Paulo if (!wpa_s->driver->tdls_disable_channel_switch) 6525b9c547cSRui Paulo return -1; 6535b9c547cSRui Paulo return wpa_s->driver->tdls_disable_channel_switch(wpa_s->drv_priv, 6545b9c547cSRui Paulo addr); 655f05cddf9SRui Paulo } 656f05cddf9SRui Paulo 657f05cddf9SRui Paulo static inline int wpa_drv_wnm_oper(struct wpa_supplicant *wpa_s, 658f05cddf9SRui Paulo enum wnm_oper oper, const u8 *peer, 659f05cddf9SRui Paulo u8 *buf, u16 *buf_len) 660f05cddf9SRui Paulo { 661f05cddf9SRui Paulo if (!wpa_s->driver->wnm_oper) 662f05cddf9SRui Paulo return -1; 663f05cddf9SRui Paulo return wpa_s->driver->wnm_oper(wpa_s->drv_priv, oper, peer, buf, 664f05cddf9SRui Paulo buf_len); 665e28a4053SRui Paulo } 666e28a4053SRui Paulo 6675b9c547cSRui Paulo static inline int wpa_drv_status(struct wpa_supplicant *wpa_s, 6685b9c547cSRui Paulo char *buf, size_t buflen) 6695b9c547cSRui Paulo { 6705b9c547cSRui Paulo if (!wpa_s->driver->status) 6715b9c547cSRui Paulo return -1; 6725b9c547cSRui Paulo return wpa_s->driver->status(wpa_s->drv_priv, buf, buflen); 6735b9c547cSRui Paulo } 6745b9c547cSRui Paulo 6755b9c547cSRui Paulo static inline int wpa_drv_set_qos_map(struct wpa_supplicant *wpa_s, 6765b9c547cSRui Paulo const u8 *qos_map_set, u8 qos_map_set_len) 6775b9c547cSRui Paulo { 6785b9c547cSRui Paulo if (!wpa_s->driver->set_qos_map) 6795b9c547cSRui Paulo return -1; 6805b9c547cSRui Paulo return wpa_s->driver->set_qos_map(wpa_s->drv_priv, qos_map_set, 6815b9c547cSRui Paulo qos_map_set_len); 6825b9c547cSRui Paulo } 6835b9c547cSRui Paulo 6845b9c547cSRui Paulo static inline int wpa_drv_wowlan(struct wpa_supplicant *wpa_s, 6855b9c547cSRui Paulo const struct wowlan_triggers *triggers) 6865b9c547cSRui Paulo { 6875b9c547cSRui Paulo if (!wpa_s->driver->set_wowlan) 6885b9c547cSRui Paulo return -1; 6895b9c547cSRui Paulo return wpa_s->driver->set_wowlan(wpa_s->drv_priv, triggers); 6905b9c547cSRui Paulo } 6915b9c547cSRui Paulo 6925b9c547cSRui Paulo static inline int wpa_drv_vendor_cmd(struct wpa_supplicant *wpa_s, 6935b9c547cSRui Paulo int vendor_id, int subcmd, const u8 *data, 6945b9c547cSRui Paulo size_t data_len, struct wpabuf *buf) 6955b9c547cSRui Paulo { 6965b9c547cSRui Paulo if (!wpa_s->driver->vendor_cmd) 6975b9c547cSRui Paulo return -1; 6985b9c547cSRui Paulo return wpa_s->driver->vendor_cmd(wpa_s->drv_priv, vendor_id, subcmd, 6995b9c547cSRui Paulo data, data_len, buf); 7005b9c547cSRui Paulo } 7015b9c547cSRui Paulo 7025b9c547cSRui Paulo static inline int wpa_drv_roaming(struct wpa_supplicant *wpa_s, int allowed, 7035b9c547cSRui Paulo const u8 *bssid) 7045b9c547cSRui Paulo { 7055b9c547cSRui Paulo if (!wpa_s->driver->roaming) 7065b9c547cSRui Paulo return -1; 7075b9c547cSRui Paulo return wpa_s->driver->roaming(wpa_s->drv_priv, allowed, bssid); 7085b9c547cSRui Paulo } 7095b9c547cSRui Paulo 71085732ac8SCy Schubert static inline int wpa_drv_disable_fils(struct wpa_supplicant *wpa_s, 71185732ac8SCy Schubert int disable) 71285732ac8SCy Schubert { 71385732ac8SCy Schubert if (!wpa_s->driver->disable_fils) 71485732ac8SCy Schubert return -1; 71585732ac8SCy Schubert return wpa_s->driver->disable_fils(wpa_s->drv_priv, disable); 71685732ac8SCy Schubert } 71785732ac8SCy Schubert 7185b9c547cSRui Paulo static inline int wpa_drv_set_mac_addr(struct wpa_supplicant *wpa_s, 7195b9c547cSRui Paulo const u8 *addr) 7205b9c547cSRui Paulo { 7215b9c547cSRui Paulo if (!wpa_s->driver->set_mac_addr) 7225b9c547cSRui Paulo return -1; 7235b9c547cSRui Paulo return wpa_s->driver->set_mac_addr(wpa_s->drv_priv, addr); 7245b9c547cSRui Paulo } 7255b9c547cSRui Paulo 7265b9c547cSRui Paulo 7275b9c547cSRui Paulo #ifdef CONFIG_MACSEC 7285b9c547cSRui Paulo 7295b9c547cSRui Paulo static inline int wpa_drv_macsec_init(struct wpa_supplicant *wpa_s, 7305b9c547cSRui Paulo struct macsec_init_params *params) 7315b9c547cSRui Paulo { 7325b9c547cSRui Paulo if (!wpa_s->driver->macsec_init) 7335b9c547cSRui Paulo return -1; 7345b9c547cSRui Paulo return wpa_s->driver->macsec_init(wpa_s->drv_priv, params); 7355b9c547cSRui Paulo } 7365b9c547cSRui Paulo 7375b9c547cSRui Paulo static inline int wpa_drv_macsec_deinit(struct wpa_supplicant *wpa_s) 7385b9c547cSRui Paulo { 7395b9c547cSRui Paulo if (!wpa_s->driver->macsec_deinit) 7405b9c547cSRui Paulo return -1; 7415b9c547cSRui Paulo return wpa_s->driver->macsec_deinit(wpa_s->drv_priv); 7425b9c547cSRui Paulo } 7435b9c547cSRui Paulo 74485732ac8SCy Schubert static inline int wpa_drv_macsec_get_capability(struct wpa_supplicant *wpa_s, 74585732ac8SCy Schubert enum macsec_cap *cap) 74685732ac8SCy Schubert { 74785732ac8SCy Schubert if (!wpa_s->driver->macsec_get_capability) 74885732ac8SCy Schubert return -1; 74985732ac8SCy Schubert return wpa_s->driver->macsec_get_capability(wpa_s->drv_priv, cap); 75085732ac8SCy Schubert } 75185732ac8SCy Schubert 7525b9c547cSRui Paulo static inline int wpa_drv_enable_protect_frames(struct wpa_supplicant *wpa_s, 7535b9c547cSRui Paulo Boolean enabled) 7545b9c547cSRui Paulo { 7555b9c547cSRui Paulo if (!wpa_s->driver->enable_protect_frames) 7565b9c547cSRui Paulo return -1; 7575b9c547cSRui Paulo return wpa_s->driver->enable_protect_frames(wpa_s->drv_priv, enabled); 7585b9c547cSRui Paulo } 7595b9c547cSRui Paulo 76085732ac8SCy Schubert static inline int wpa_drv_enable_encrypt(struct wpa_supplicant *wpa_s, 76185732ac8SCy Schubert Boolean enabled) 76285732ac8SCy Schubert { 76385732ac8SCy Schubert if (!wpa_s->driver->enable_encrypt) 76485732ac8SCy Schubert return -1; 76585732ac8SCy Schubert return wpa_s->driver->enable_encrypt(wpa_s->drv_priv, enabled); 76685732ac8SCy Schubert } 76785732ac8SCy Schubert 7685b9c547cSRui Paulo static inline int wpa_drv_set_replay_protect(struct wpa_supplicant *wpa_s, 7695b9c547cSRui Paulo Boolean enabled, u32 window) 7705b9c547cSRui Paulo { 7715b9c547cSRui Paulo if (!wpa_s->driver->set_replay_protect) 7725b9c547cSRui Paulo return -1; 7735b9c547cSRui Paulo return wpa_s->driver->set_replay_protect(wpa_s->drv_priv, enabled, 7745b9c547cSRui Paulo window); 7755b9c547cSRui Paulo } 7765b9c547cSRui Paulo 7775b9c547cSRui Paulo static inline int wpa_drv_set_current_cipher_suite(struct wpa_supplicant *wpa_s, 778780fb4a2SCy Schubert u64 cs) 7795b9c547cSRui Paulo { 7805b9c547cSRui Paulo if (!wpa_s->driver->set_current_cipher_suite) 7815b9c547cSRui Paulo return -1; 782780fb4a2SCy Schubert return wpa_s->driver->set_current_cipher_suite(wpa_s->drv_priv, cs); 7835b9c547cSRui Paulo } 7845b9c547cSRui Paulo 7855b9c547cSRui Paulo static inline int wpa_drv_enable_controlled_port(struct wpa_supplicant *wpa_s, 7865b9c547cSRui Paulo Boolean enabled) 7875b9c547cSRui Paulo { 7885b9c547cSRui Paulo if (!wpa_s->driver->enable_controlled_port) 7895b9c547cSRui Paulo return -1; 7905b9c547cSRui Paulo return wpa_s->driver->enable_controlled_port(wpa_s->drv_priv, enabled); 7915b9c547cSRui Paulo } 7925b9c547cSRui Paulo 7935b9c547cSRui Paulo static inline int wpa_drv_get_receive_lowest_pn(struct wpa_supplicant *wpa_s, 79485732ac8SCy Schubert struct receive_sa *sa) 7955b9c547cSRui Paulo { 7965b9c547cSRui Paulo if (!wpa_s->driver->get_receive_lowest_pn) 7975b9c547cSRui Paulo return -1; 79885732ac8SCy Schubert return wpa_s->driver->get_receive_lowest_pn(wpa_s->drv_priv, sa); 7995b9c547cSRui Paulo } 8005b9c547cSRui Paulo 8015b9c547cSRui Paulo static inline int wpa_drv_get_transmit_next_pn(struct wpa_supplicant *wpa_s, 80285732ac8SCy Schubert struct transmit_sa *sa) 8035b9c547cSRui Paulo { 8045b9c547cSRui Paulo if (!wpa_s->driver->get_transmit_next_pn) 8055b9c547cSRui Paulo return -1; 80685732ac8SCy Schubert return wpa_s->driver->get_transmit_next_pn(wpa_s->drv_priv, sa); 8075b9c547cSRui Paulo } 8085b9c547cSRui Paulo 8095b9c547cSRui Paulo static inline int wpa_drv_set_transmit_next_pn(struct wpa_supplicant *wpa_s, 81085732ac8SCy Schubert struct transmit_sa *sa) 8115b9c547cSRui Paulo { 8125b9c547cSRui Paulo if (!wpa_s->driver->set_transmit_next_pn) 8135b9c547cSRui Paulo return -1; 81485732ac8SCy Schubert return wpa_s->driver->set_transmit_next_pn(wpa_s->drv_priv, sa); 8155b9c547cSRui Paulo } 8165b9c547cSRui Paulo 8174bc52338SCy Schubert static inline int wpa_drv_set_receive_lowest_pn(struct wpa_supplicant *wpa_s, 8184bc52338SCy Schubert struct receive_sa *sa) 8194bc52338SCy Schubert { 8204bc52338SCy Schubert if (!wpa_s->driver->set_receive_lowest_pn) 8214bc52338SCy Schubert return -1; 8224bc52338SCy Schubert return wpa_s->driver->set_receive_lowest_pn(wpa_s->drv_priv, sa); 8234bc52338SCy Schubert } 8244bc52338SCy Schubert 8255b9c547cSRui Paulo static inline int 82685732ac8SCy Schubert wpa_drv_create_receive_sc(struct wpa_supplicant *wpa_s, struct receive_sc *sc, 8275b9c547cSRui Paulo unsigned int conf_offset, int validation) 8285b9c547cSRui Paulo { 8295b9c547cSRui Paulo if (!wpa_s->driver->create_receive_sc) 8305b9c547cSRui Paulo return -1; 83185732ac8SCy Schubert return wpa_s->driver->create_receive_sc(wpa_s->drv_priv, sc, 83285732ac8SCy Schubert conf_offset, validation); 8335b9c547cSRui Paulo } 8345b9c547cSRui Paulo 8355b9c547cSRui Paulo static inline int wpa_drv_delete_receive_sc(struct wpa_supplicant *wpa_s, 83685732ac8SCy Schubert struct receive_sc *sc) 8375b9c547cSRui Paulo { 8385b9c547cSRui Paulo if (!wpa_s->driver->delete_receive_sc) 8395b9c547cSRui Paulo return -1; 84085732ac8SCy Schubert return wpa_s->driver->delete_receive_sc(wpa_s->drv_priv, sc); 8415b9c547cSRui Paulo } 8425b9c547cSRui Paulo 8435b9c547cSRui Paulo static inline int wpa_drv_create_receive_sa(struct wpa_supplicant *wpa_s, 84485732ac8SCy Schubert struct receive_sa *sa) 8455b9c547cSRui Paulo { 8465b9c547cSRui Paulo if (!wpa_s->driver->create_receive_sa) 8475b9c547cSRui Paulo return -1; 84885732ac8SCy Schubert return wpa_s->driver->create_receive_sa(wpa_s->drv_priv, sa); 84985732ac8SCy Schubert } 85085732ac8SCy Schubert 85185732ac8SCy Schubert static inline int wpa_drv_delete_receive_sa(struct wpa_supplicant *wpa_s, 85285732ac8SCy Schubert struct receive_sa *sa) 85385732ac8SCy Schubert { 85485732ac8SCy Schubert if (!wpa_s->driver->delete_receive_sa) 85585732ac8SCy Schubert return -1; 85685732ac8SCy Schubert return wpa_s->driver->delete_receive_sa(wpa_s->drv_priv, sa); 8575b9c547cSRui Paulo } 8585b9c547cSRui Paulo 8595b9c547cSRui Paulo static inline int wpa_drv_enable_receive_sa(struct wpa_supplicant *wpa_s, 86085732ac8SCy Schubert struct receive_sa *sa) 8615b9c547cSRui Paulo { 8625b9c547cSRui Paulo if (!wpa_s->driver->enable_receive_sa) 8635b9c547cSRui Paulo return -1; 86485732ac8SCy Schubert return wpa_s->driver->enable_receive_sa(wpa_s->drv_priv, sa); 8655b9c547cSRui Paulo } 8665b9c547cSRui Paulo 8675b9c547cSRui Paulo static inline int wpa_drv_disable_receive_sa(struct wpa_supplicant *wpa_s, 86885732ac8SCy Schubert struct receive_sa *sa) 8695b9c547cSRui Paulo { 8705b9c547cSRui Paulo if (!wpa_s->driver->disable_receive_sa) 8715b9c547cSRui Paulo return -1; 87285732ac8SCy Schubert return wpa_s->driver->disable_receive_sa(wpa_s->drv_priv, sa); 8735b9c547cSRui Paulo } 8745b9c547cSRui Paulo 8755b9c547cSRui Paulo static inline int 87685732ac8SCy Schubert wpa_drv_create_transmit_sc(struct wpa_supplicant *wpa_s, struct transmit_sc *sc, 8775b9c547cSRui Paulo unsigned int conf_offset) 8785b9c547cSRui Paulo { 8795b9c547cSRui Paulo if (!wpa_s->driver->create_transmit_sc) 8805b9c547cSRui Paulo return -1; 88185732ac8SCy Schubert return wpa_s->driver->create_transmit_sc(wpa_s->drv_priv, sc, 8825b9c547cSRui Paulo conf_offset); 8835b9c547cSRui Paulo } 8845b9c547cSRui Paulo 8855b9c547cSRui Paulo static inline int wpa_drv_delete_transmit_sc(struct wpa_supplicant *wpa_s, 88685732ac8SCy Schubert struct transmit_sc *sc) 8875b9c547cSRui Paulo { 8885b9c547cSRui Paulo if (!wpa_s->driver->delete_transmit_sc) 8895b9c547cSRui Paulo return -1; 89085732ac8SCy Schubert return wpa_s->driver->delete_transmit_sc(wpa_s->drv_priv, sc); 8915b9c547cSRui Paulo } 8925b9c547cSRui Paulo 8935b9c547cSRui Paulo static inline int wpa_drv_create_transmit_sa(struct wpa_supplicant *wpa_s, 89485732ac8SCy Schubert struct transmit_sa *sa) 8955b9c547cSRui Paulo { 8965b9c547cSRui Paulo if (!wpa_s->driver->create_transmit_sa) 8975b9c547cSRui Paulo return -1; 89885732ac8SCy Schubert return wpa_s->driver->create_transmit_sa(wpa_s->drv_priv, sa); 89985732ac8SCy Schubert } 90085732ac8SCy Schubert 90185732ac8SCy Schubert static inline int wpa_drv_delete_transmit_sa(struct wpa_supplicant *wpa_s, 90285732ac8SCy Schubert struct transmit_sa *sa) 90385732ac8SCy Schubert { 90485732ac8SCy Schubert if (!wpa_s->driver->delete_transmit_sa) 90585732ac8SCy Schubert return -1; 90685732ac8SCy Schubert return wpa_s->driver->delete_transmit_sa(wpa_s->drv_priv, sa); 9075b9c547cSRui Paulo } 9085b9c547cSRui Paulo 9095b9c547cSRui Paulo static inline int wpa_drv_enable_transmit_sa(struct wpa_supplicant *wpa_s, 91085732ac8SCy Schubert struct transmit_sa *sa) 9115b9c547cSRui Paulo { 9125b9c547cSRui Paulo if (!wpa_s->driver->enable_transmit_sa) 9135b9c547cSRui Paulo return -1; 91485732ac8SCy Schubert return wpa_s->driver->enable_transmit_sa(wpa_s->drv_priv, sa); 9155b9c547cSRui Paulo } 9165b9c547cSRui Paulo 9175b9c547cSRui Paulo static inline int wpa_drv_disable_transmit_sa(struct wpa_supplicant *wpa_s, 91885732ac8SCy Schubert struct transmit_sa *sa) 9195b9c547cSRui Paulo { 9205b9c547cSRui Paulo if (!wpa_s->driver->disable_transmit_sa) 9215b9c547cSRui Paulo return -1; 92285732ac8SCy Schubert return wpa_s->driver->disable_transmit_sa(wpa_s->drv_priv, sa); 9235b9c547cSRui Paulo } 9245b9c547cSRui Paulo #endif /* CONFIG_MACSEC */ 9255b9c547cSRui Paulo 926325151a3SRui Paulo static inline int wpa_drv_setband(struct wpa_supplicant *wpa_s, 927325151a3SRui Paulo enum set_band band) 928325151a3SRui Paulo { 929325151a3SRui Paulo if (!wpa_s->driver->set_band) 930325151a3SRui Paulo return -1; 931325151a3SRui Paulo return wpa_s->driver->set_band(wpa_s->drv_priv, band); 932325151a3SRui Paulo } 933325151a3SRui Paulo 934325151a3SRui Paulo static inline int wpa_drv_get_pref_freq_list(struct wpa_supplicant *wpa_s, 935325151a3SRui Paulo enum wpa_driver_if_type if_type, 936325151a3SRui Paulo unsigned int *num, 937325151a3SRui Paulo unsigned int *freq_list) 938325151a3SRui Paulo { 93985732ac8SCy Schubert #ifdef CONFIG_TESTING_OPTIONS 94085732ac8SCy Schubert if (wpa_s->get_pref_freq_list_override) 94185732ac8SCy Schubert return wpas_ctrl_iface_get_pref_freq_list_override( 94285732ac8SCy Schubert wpa_s, if_type, num, freq_list); 94385732ac8SCy Schubert #endif /* CONFIG_TESTING_OPTIONS */ 944325151a3SRui Paulo if (!wpa_s->driver->get_pref_freq_list) 945325151a3SRui Paulo return -1; 946325151a3SRui Paulo return wpa_s->driver->get_pref_freq_list(wpa_s->drv_priv, if_type, 947325151a3SRui Paulo num, freq_list); 948325151a3SRui Paulo } 949325151a3SRui Paulo 950325151a3SRui Paulo static inline int wpa_drv_set_prob_oper_freq(struct wpa_supplicant *wpa_s, 951325151a3SRui Paulo unsigned int freq) 952325151a3SRui Paulo { 953325151a3SRui Paulo if (!wpa_s->driver->set_prob_oper_freq) 954325151a3SRui Paulo return 0; 955325151a3SRui Paulo return wpa_s->driver->set_prob_oper_freq(wpa_s->drv_priv, freq); 956325151a3SRui Paulo } 957325151a3SRui Paulo 95885732ac8SCy Schubert static inline int wpa_drv_abort_scan(struct wpa_supplicant *wpa_s, 95985732ac8SCy Schubert u64 scan_cookie) 960780fb4a2SCy Schubert { 961780fb4a2SCy Schubert if (!wpa_s->driver->abort_scan) 962780fb4a2SCy Schubert return -1; 96385732ac8SCy Schubert return wpa_s->driver->abort_scan(wpa_s->drv_priv, scan_cookie); 964780fb4a2SCy Schubert } 965780fb4a2SCy Schubert 966780fb4a2SCy Schubert static inline int wpa_drv_configure_frame_filters(struct wpa_supplicant *wpa_s, 967780fb4a2SCy Schubert u32 filters) 968780fb4a2SCy Schubert { 969780fb4a2SCy Schubert if (!wpa_s->driver->configure_data_frame_filters) 970780fb4a2SCy Schubert return -1; 971780fb4a2SCy Schubert return wpa_s->driver->configure_data_frame_filters(wpa_s->drv_priv, 972780fb4a2SCy Schubert filters); 973780fb4a2SCy Schubert } 974780fb4a2SCy Schubert 975780fb4a2SCy Schubert static inline int wpa_drv_get_ext_capa(struct wpa_supplicant *wpa_s, 976780fb4a2SCy Schubert enum wpa_driver_if_type type) 977780fb4a2SCy Schubert { 978780fb4a2SCy Schubert if (!wpa_s->driver->get_ext_capab) 979780fb4a2SCy Schubert return -1; 980780fb4a2SCy Schubert return wpa_s->driver->get_ext_capab(wpa_s->drv_priv, type, 981780fb4a2SCy Schubert &wpa_s->extended_capa, 982780fb4a2SCy Schubert &wpa_s->extended_capa_mask, 983780fb4a2SCy Schubert &wpa_s->extended_capa_len); 984780fb4a2SCy Schubert } 985780fb4a2SCy Schubert 986780fb4a2SCy Schubert static inline int wpa_drv_p2p_lo_start(struct wpa_supplicant *wpa_s, 987780fb4a2SCy Schubert unsigned int channel, 988780fb4a2SCy Schubert unsigned int period, 989780fb4a2SCy Schubert unsigned int interval, 990780fb4a2SCy Schubert unsigned int count, 991780fb4a2SCy Schubert const u8 *device_types, 992780fb4a2SCy Schubert size_t dev_types_len, 993780fb4a2SCy Schubert const u8 *ies, size_t ies_len) 994780fb4a2SCy Schubert { 995780fb4a2SCy Schubert if (!wpa_s->driver->p2p_lo_start) 996780fb4a2SCy Schubert return -1; 997780fb4a2SCy Schubert return wpa_s->driver->p2p_lo_start(wpa_s->drv_priv, channel, period, 998780fb4a2SCy Schubert interval, count, device_types, 999780fb4a2SCy Schubert dev_types_len, ies, ies_len); 1000780fb4a2SCy Schubert } 1001780fb4a2SCy Schubert 1002780fb4a2SCy Schubert static inline int wpa_drv_p2p_lo_stop(struct wpa_supplicant *wpa_s) 1003780fb4a2SCy Schubert { 1004780fb4a2SCy Schubert if (!wpa_s->driver->p2p_lo_stop) 1005780fb4a2SCy Schubert return -1; 1006780fb4a2SCy Schubert return wpa_s->driver->p2p_lo_stop(wpa_s->drv_priv); 1007780fb4a2SCy Schubert } 1008780fb4a2SCy Schubert 1009780fb4a2SCy Schubert static inline int wpa_drv_set_default_scan_ies(struct wpa_supplicant *wpa_s, 1010780fb4a2SCy Schubert const u8 *ies, size_t len) 1011780fb4a2SCy Schubert { 1012780fb4a2SCy Schubert if (!wpa_s->driver->set_default_scan_ies) 1013780fb4a2SCy Schubert return -1; 1014780fb4a2SCy Schubert return wpa_s->driver->set_default_scan_ies(wpa_s->drv_priv, ies, len); 1015780fb4a2SCy Schubert } 1016780fb4a2SCy Schubert 101785732ac8SCy Schubert static inline int wpa_drv_set_tdls_mode(struct wpa_supplicant *wpa_s, 101885732ac8SCy Schubert int tdls_external_control) 101985732ac8SCy Schubert { 102085732ac8SCy Schubert if (!wpa_s->driver->set_tdls_mode) 102185732ac8SCy Schubert return -1; 102285732ac8SCy Schubert return wpa_s->driver->set_tdls_mode(wpa_s->drv_priv, 102385732ac8SCy Schubert tdls_external_control); 102485732ac8SCy Schubert } 102585732ac8SCy Schubert 102685732ac8SCy Schubert static inline struct wpa_bss_candidate_info * 102785732ac8SCy Schubert wpa_drv_get_bss_trans_status(struct wpa_supplicant *wpa_s, 102885732ac8SCy Schubert struct wpa_bss_trans_info *params) 102985732ac8SCy Schubert { 103085732ac8SCy Schubert if (!wpa_s->driver->get_bss_transition_status) 103185732ac8SCy Schubert return NULL; 103285732ac8SCy Schubert return wpa_s->driver->get_bss_transition_status(wpa_s->drv_priv, 103385732ac8SCy Schubert params); 103485732ac8SCy Schubert } 103585732ac8SCy Schubert 103685732ac8SCy Schubert static inline int wpa_drv_ignore_assoc_disallow(struct wpa_supplicant *wpa_s, 103785732ac8SCy Schubert int val) 103885732ac8SCy Schubert { 103985732ac8SCy Schubert if (!wpa_s->driver->ignore_assoc_disallow) 104085732ac8SCy Schubert return -1; 104185732ac8SCy Schubert return wpa_s->driver->ignore_assoc_disallow(wpa_s->drv_priv, val); 104285732ac8SCy Schubert } 104385732ac8SCy Schubert 104485732ac8SCy Schubert static inline int wpa_drv_set_bssid_blacklist(struct wpa_supplicant *wpa_s, 104585732ac8SCy Schubert unsigned int num_bssid, 104685732ac8SCy Schubert const u8 *bssids) 104785732ac8SCy Schubert { 104885732ac8SCy Schubert if (!wpa_s->driver->set_bssid_blacklist) 104985732ac8SCy Schubert return -1; 105085732ac8SCy Schubert return wpa_s->driver->set_bssid_blacklist(wpa_s->drv_priv, num_bssid, 105185732ac8SCy Schubert bssids); 105285732ac8SCy Schubert } 105385732ac8SCy Schubert 105485732ac8SCy Schubert static inline int wpa_drv_update_connect_params( 105585732ac8SCy Schubert struct wpa_supplicant *wpa_s, 105685732ac8SCy Schubert struct wpa_driver_associate_params *params, 105785732ac8SCy Schubert enum wpa_drv_update_connect_params_mask mask) 105885732ac8SCy Schubert { 105985732ac8SCy Schubert if (!wpa_s->driver->update_connect_params) 106085732ac8SCy Schubert return -1; 106185732ac8SCy Schubert return wpa_s->driver->update_connect_params(wpa_s->drv_priv, params, 106285732ac8SCy Schubert mask); 106385732ac8SCy Schubert } 106485732ac8SCy Schubert 106585732ac8SCy Schubert static inline int 106685732ac8SCy Schubert wpa_drv_send_external_auth_status(struct wpa_supplicant *wpa_s, 106785732ac8SCy Schubert struct external_auth *params) 106885732ac8SCy Schubert { 106985732ac8SCy Schubert if (!wpa_s->driver->send_external_auth_status) 107085732ac8SCy Schubert return -1; 107185732ac8SCy Schubert return wpa_s->driver->send_external_auth_status(wpa_s->drv_priv, 107285732ac8SCy Schubert params); 107385732ac8SCy Schubert } 107485732ac8SCy Schubert 10754bc52338SCy Schubert static inline int wpa_drv_set_4addr_mode(struct wpa_supplicant *wpa_s, int val) 10764bc52338SCy Schubert { 10774bc52338SCy Schubert if (!wpa_s->driver->set_4addr_mode) 10784bc52338SCy Schubert return -1; 10794bc52338SCy Schubert return wpa_s->driver->set_4addr_mode(wpa_s->drv_priv, 10804bc52338SCy Schubert wpa_s->bridge_ifname, val); 10814bc52338SCy Schubert } 10824bc52338SCy Schubert 1083e28a4053SRui Paulo #endif /* DRIVER_I_H */ 1084