driver_i.h revision 351611
1139749Simp/*
2139749Simp * wpa_supplicant - Internal driver interface wrappers
3139749Simp * Copyright (c) 2003-2015, Jouni Malinen <j@w1.fi>
4127827Swes *
5127827Swes * This software may be distributed under the terms of the BSD license.
6127827Swes * See README for more details.
7127827Swes */
8127827Swes
9127827Swes#ifndef DRIVER_I_H
10127827Swes#define DRIVER_I_H
11127827Swes
12127827Swes#include "drivers/driver.h"
13127827Swes
14127827Swes/* driver_ops */
15127827Swesstatic inline void * wpa_drv_init(struct wpa_supplicant *wpa_s,
16127827Swes				  const char *ifname)
17127827Swes{
18127827Swes	if (wpa_s->driver->init2)
19127827Swes		return wpa_s->driver->init2(wpa_s, ifname,
20127827Swes					    wpa_s->global_drv_priv);
21127827Swes	if (wpa_s->driver->init) {
22127827Swes		return wpa_s->driver->init(wpa_s, ifname);
23127827Swes	}
24127827Swes	return NULL;
25119917Swpaul}
26119917Swpaul
27119917Swpaulstatic inline void wpa_drv_deinit(struct wpa_supplicant *wpa_s)
28119917Swpaul{
29119917Swpaul	if (wpa_s->driver->deinit)
30119917Swpaul		wpa_s->driver->deinit(wpa_s->drv_priv);
31119917Swpaul}
32119917Swpaul
33119917Swpaulstatic inline int wpa_drv_set_param(struct wpa_supplicant *wpa_s,
34119917Swpaul				    const char *param)
35119917Swpaul{
36119917Swpaul	if (wpa_s->driver->set_param)
37119917Swpaul		return wpa_s->driver->set_param(wpa_s->drv_priv, param);
38119917Swpaul	return 0;
39119917Swpaul}
40119917Swpaul
41119917Swpaulstatic inline int wpa_drv_set_countermeasures(struct wpa_supplicant *wpa_s,
42119917Swpaul					      int enabled)
43119917Swpaul{
44119917Swpaul	if (wpa_s->driver->set_countermeasures) {
45119917Swpaul		return wpa_s->driver->set_countermeasures(wpa_s->drv_priv,
46119917Swpaul							  enabled);
47119917Swpaul	}
48119917Swpaul	return -1;
49119917Swpaul}
50119917Swpaul
51119917Swpaulstatic inline int wpa_drv_authenticate(struct wpa_supplicant *wpa_s,
52119917Swpaul				       struct wpa_driver_auth_params *params)
53119917Swpaul{
54119917Swpaul	if (wpa_s->driver->authenticate)
55119917Swpaul		return wpa_s->driver->authenticate(wpa_s->drv_priv, params);
56119917Swpaul	return -1;
57119917Swpaul}
58119917Swpaul
59119917Swpaulstatic inline int wpa_drv_associate(struct wpa_supplicant *wpa_s,
60119917Swpaul				    struct wpa_driver_associate_params *params)
61119917Swpaul{
62119917Swpaul	if (wpa_s->driver->associate) {
63133282Sdes		return wpa_s->driver->associate(wpa_s->drv_priv, params);
64119917Swpaul	}
65119917Swpaul	return -1;
66119917Swpaul}
67133282Sdes
68119917Swpaulstatic inline int wpa_drv_init_mesh(struct wpa_supplicant *wpa_s)
69119917Swpaul{
70119917Swpaul	if (wpa_s->driver->init_mesh)
71119917Swpaul		return wpa_s->driver->init_mesh(wpa_s->drv_priv);
72119917Swpaul	return -1;
73119917Swpaul}
74119917Swpaul
75119917Swpaulstatic inline int wpa_drv_join_mesh(struct wpa_supplicant *wpa_s,
76175787Syongari				    struct wpa_driver_mesh_join_params *params)
77175787Syongari{
78175787Syongari	if (wpa_s->driver->join_mesh)
79175787Syongari		return wpa_s->driver->join_mesh(wpa_s->drv_priv, params);
80119917Swpaul	return -1;
81119917Swpaul}
82119917Swpaul
83119917Swpaulstatic inline int wpa_drv_leave_mesh(struct wpa_supplicant *wpa_s)
84119917Swpaul{
85119917Swpaul	if (wpa_s->driver->leave_mesh)
86119917Swpaul		return wpa_s->driver->leave_mesh(wpa_s->drv_priv);
87119917Swpaul	return -1;
88119917Swpaul}
89119917Swpaul
90119917Swpaulstatic inline int wpa_drv_mesh_link_probe(struct wpa_supplicant *wpa_s,
91119917Swpaul					  const u8 *addr,
92119917Swpaul					  const u8 *eth, size_t len)
93119917Swpaul{
94119917Swpaul	if (wpa_s->driver->probe_mesh_link)
95119917Swpaul		return wpa_s->driver->probe_mesh_link(wpa_s->drv_priv, addr,
96119917Swpaul						      eth, len);
97119917Swpaul	return -1;
98119917Swpaul}
99119917Swpaul
100119917Swpaulstatic inline int wpa_drv_scan(struct wpa_supplicant *wpa_s,
101119917Swpaul			       struct wpa_driver_scan_params *params)
102119917Swpaul{
103119917Swpaul#ifdef CONFIG_TESTING_OPTIONS
104119917Swpaul	if (wpa_s->test_failure == WPAS_TEST_FAILURE_SCAN_TRIGGER)
105119917Swpaul		return -EBUSY;
106119917Swpaul#endif /* CONFIG_TESTING_OPTIONS */
107119917Swpaul	if (wpa_s->driver->scan2)
108119917Swpaul		return wpa_s->driver->scan2(wpa_s->drv_priv, params);
109119917Swpaul	return -1;
110119917Swpaul}
111119917Swpaul
112119917Swpaulstatic inline int wpa_drv_sched_scan(struct wpa_supplicant *wpa_s,
113119917Swpaul				     struct wpa_driver_scan_params *params)
114119917Swpaul{
115119917Swpaul	if (wpa_s->driver->sched_scan)
116119917Swpaul		return wpa_s->driver->sched_scan(wpa_s->drv_priv, params);
117119917Swpaul	return -1;
118119917Swpaul}
119119917Swpaul
120119917Swpaulstatic inline int wpa_drv_stop_sched_scan(struct wpa_supplicant *wpa_s)
121119917Swpaul{
122119917Swpaul	if (wpa_s->driver->stop_sched_scan)
123119917Swpaul		return wpa_s->driver->stop_sched_scan(wpa_s->drv_priv);
124119917Swpaul	return -1;
125119917Swpaul}
126119917Swpaul
127119917Swpaulstatic inline struct wpa_scan_results * wpa_drv_get_scan_results2(
128119917Swpaul	struct wpa_supplicant *wpa_s)
129119917Swpaul{
130119917Swpaul	if (wpa_s->driver->get_scan_results2)
131119917Swpaul		return wpa_s->driver->get_scan_results2(wpa_s->drv_priv);
132119917Swpaul	return NULL;
133119917Swpaul}
134119917Swpaul
135119917Swpaulstatic inline int wpa_drv_get_bssid(struct wpa_supplicant *wpa_s, u8 *bssid)
136119917Swpaul{
137119917Swpaul	if (wpa_s->driver->get_bssid) {
138119917Swpaul		return wpa_s->driver->get_bssid(wpa_s->drv_priv, bssid);
139119917Swpaul	}
140119917Swpaul	return -1;
141119917Swpaul}
142119917Swpaul
143119917Swpaulstatic inline int wpa_drv_get_ssid(struct wpa_supplicant *wpa_s, u8 *ssid)
144119917Swpaul{
145119917Swpaul	if (wpa_s->driver->get_ssid) {
146119917Swpaul		return wpa_s->driver->get_ssid(wpa_s->drv_priv, ssid);
147119917Swpaul	}
148119917Swpaul	return -1;
149119917Swpaul}
150119917Swpaul
151119917Swpaulstatic inline int wpa_drv_set_key(struct wpa_supplicant *wpa_s,
152119917Swpaul				  enum wpa_alg alg, const u8 *addr,
153119917Swpaul				  int key_idx, int set_tx,
154119917Swpaul				  const u8 *seq, size_t seq_len,
155119917Swpaul				  const u8 *key, size_t key_len)
156119917Swpaul{
157119917Swpaul	if (alg != WPA_ALG_NONE) {
158119917Swpaul		if (key_idx >= 0 && key_idx <= 6)
159119917Swpaul			wpa_s->keys_cleared &= ~BIT(key_idx);
160119917Swpaul		else
161119917Swpaul			wpa_s->keys_cleared = 0;
162119917Swpaul	}
163119917Swpaul	if (wpa_s->driver->set_key) {
164119917Swpaul		return wpa_s->driver->set_key(wpa_s->ifname, wpa_s->drv_priv,
165119917Swpaul					      alg, addr, key_idx, set_tx,
166119917Swpaul					      seq, seq_len, key, key_len);
167119917Swpaul	}
168119917Swpaul	return -1;
169119917Swpaul}
170119917Swpaul
171119917Swpaulstatic inline int wpa_drv_get_seqnum(struct wpa_supplicant *wpa_s,
172119917Swpaul				     const u8 *addr, int idx, u8 *seq)
173119917Swpaul{
174119917Swpaul	if (wpa_s->driver->get_seqnum)
175119917Swpaul		return wpa_s->driver->get_seqnum(wpa_s->ifname, wpa_s->drv_priv,
176119917Swpaul						 addr, idx, seq);
177119917Swpaul	return -1;
178119917Swpaul}
179119917Swpaul
180119917Swpaulstatic inline int wpa_drv_sta_deauth(struct wpa_supplicant *wpa_s,
181119917Swpaul				     const u8 *addr, u16 reason_code)
182119917Swpaul{
183119917Swpaul	if (wpa_s->driver->sta_deauth) {
184119917Swpaul		return wpa_s->driver->sta_deauth(wpa_s->drv_priv,
185119917Swpaul						 wpa_s->own_addr, addr,
186119917Swpaul						 reason_code);
187119917Swpaul	}
188119917Swpaul	return -1;
189119917Swpaul}
190119917Swpaul
191119917Swpaulstatic inline int wpa_drv_deauthenticate(struct wpa_supplicant *wpa_s,
192119917Swpaul					 const u8 *addr, u16 reason_code)
193119917Swpaul{
194119917Swpaul	if (wpa_s->driver->deauthenticate) {
195119917Swpaul		return wpa_s->driver->deauthenticate(wpa_s->drv_priv, addr,
196119917Swpaul						     reason_code);
197119917Swpaul	}
198119917Swpaul	return -1;
199119917Swpaul}
200119917Swpaul
201119917Swpaulstatic inline int wpa_drv_add_pmkid(struct wpa_supplicant *wpa_s,
202119917Swpaul				    struct wpa_pmkid_params *params)
203119917Swpaul{
204119917Swpaul	if (wpa_s->driver->add_pmkid) {
205119917Swpaul		return wpa_s->driver->add_pmkid(wpa_s->drv_priv, params);
206119917Swpaul	}
207119917Swpaul	return -1;
208119917Swpaul}
209119917Swpaul
210119917Swpaulstatic inline int wpa_drv_remove_pmkid(struct wpa_supplicant *wpa_s,
211119917Swpaul				       struct wpa_pmkid_params *params)
212119917Swpaul{
213119917Swpaul	if (wpa_s->driver->remove_pmkid) {
214119917Swpaul		return wpa_s->driver->remove_pmkid(wpa_s->drv_priv, params);
215119917Swpaul	}
216119917Swpaul	return -1;
217119917Swpaul}
218119917Swpaul
219119917Swpaulstatic inline int wpa_drv_flush_pmkid(struct wpa_supplicant *wpa_s)
220119917Swpaul{
221119917Swpaul	if (wpa_s->driver->flush_pmkid) {
222119917Swpaul		return wpa_s->driver->flush_pmkid(wpa_s->drv_priv);
223119917Swpaul	}
224119917Swpaul	return -1;
225119917Swpaul}
226119917Swpaul
227119917Swpaulstatic inline int wpa_drv_get_capa(struct wpa_supplicant *wpa_s,
228119917Swpaul				   struct wpa_driver_capa *capa)
229119917Swpaul{
230119917Swpaul	if (wpa_s->driver->get_capa) {
231119917Swpaul		return wpa_s->driver->get_capa(wpa_s->drv_priv, capa);
232119917Swpaul	}
233119917Swpaul	return -1;
234119917Swpaul}
235119917Swpaul
236119917Swpaulstatic inline void wpa_drv_poll(struct wpa_supplicant *wpa_s)
237119917Swpaul{
238119917Swpaul	if (wpa_s->driver->poll) {
239119917Swpaul		wpa_s->driver->poll(wpa_s->drv_priv);
240119917Swpaul	}
241119917Swpaul}
242119917Swpaul
243119917Swpaulstatic inline const char * wpa_drv_get_ifname(struct wpa_supplicant *wpa_s)
244119917Swpaul{
245119917Swpaul	if (wpa_s->driver->get_ifname) {
246119917Swpaul		return wpa_s->driver->get_ifname(wpa_s->drv_priv);
247119917Swpaul	}
248119917Swpaul	return NULL;
249119917Swpaul}
250119917Swpaul
251119917Swpaulstatic inline const char *
252119917Swpaulwpa_driver_get_radio_name(struct wpa_supplicant *wpa_s)
253119917Swpaul{
254119917Swpaul	if (wpa_s->driver->get_radio_name)
255119917Swpaul		return wpa_s->driver->get_radio_name(wpa_s->drv_priv);
256119917Swpaul	return NULL;
257119917Swpaul}
258119917Swpaul
259119917Swpaulstatic inline const u8 * wpa_drv_get_mac_addr(struct wpa_supplicant *wpa_s)
260119917Swpaul{
261119917Swpaul	if (wpa_s->driver->get_mac_addr) {
262119917Swpaul		return wpa_s->driver->get_mac_addr(wpa_s->drv_priv);
263119917Swpaul	}
264119917Swpaul	return NULL;
265119917Swpaul}
266119917Swpaul
267119917Swpaulstatic inline int wpa_drv_set_operstate(struct wpa_supplicant *wpa_s,
268119917Swpaul					int state)
269119917Swpaul{
270119917Swpaul	if (wpa_s->driver->set_operstate)
271119917Swpaul		return wpa_s->driver->set_operstate(wpa_s->drv_priv, state);
272119917Swpaul	return 0;
273119917Swpaul}
274119917Swpaul
275119917Swpaulstatic inline int wpa_drv_mlme_setprotection(struct wpa_supplicant *wpa_s,
276119917Swpaul					     const u8 *addr, int protect_type,
277119917Swpaul					     int key_type)
278119917Swpaul{
279119917Swpaul	if (wpa_s->driver->mlme_setprotection)
280119917Swpaul		return wpa_s->driver->mlme_setprotection(wpa_s->drv_priv, addr,
281119917Swpaul							 protect_type,
282119917Swpaul							 key_type);
283119917Swpaul	return 0;
284119917Swpaul}
285119917Swpaul
286119917Swpaulstatic inline struct hostapd_hw_modes *
287119917Swpaulwpa_drv_get_hw_feature_data(struct wpa_supplicant *wpa_s, u16 *num_modes,
288119917Swpaul			    u16 *flags, u8 *dfs_domain)
289119917Swpaul{
290119917Swpaul	if (wpa_s->driver->get_hw_feature_data)
291119917Swpaul		return wpa_s->driver->get_hw_feature_data(wpa_s->drv_priv,
292119917Swpaul							  num_modes, flags,
293119917Swpaul							  dfs_domain);
294119917Swpaul	return NULL;
295119917Swpaul}
296119917Swpaul
297119917Swpaulstatic inline int wpa_drv_set_country(struct wpa_supplicant *wpa_s,
298119917Swpaul				      const char *alpha2)
299119917Swpaul{
300119917Swpaul	if (wpa_s->driver->set_country)
301119917Swpaul		return wpa_s->driver->set_country(wpa_s->drv_priv, alpha2);
302119917Swpaul	return 0;
303119917Swpaul}
304119917Swpaul
305119917Swpaulstatic inline int wpa_drv_send_mlme(struct wpa_supplicant *wpa_s,
306119917Swpaul				    const u8 *data, size_t data_len, int noack,
307119917Swpaul				    unsigned int freq)
308119917Swpaul{
309119917Swpaul	if (wpa_s->driver->send_mlme)
310119917Swpaul		return wpa_s->driver->send_mlme(wpa_s->drv_priv,
311119917Swpaul						data, data_len, noack,
312119917Swpaul						freq, NULL, 0);
313119917Swpaul	return -1;
314119917Swpaul}
315119917Swpaul
316119917Swpaulstatic inline int wpa_drv_update_ft_ies(struct wpa_supplicant *wpa_s,
317119917Swpaul					const u8 *md,
318119917Swpaul					const u8 *ies, size_t ies_len)
319119917Swpaul{
320119917Swpaul	if (wpa_s->driver->update_ft_ies)
321119917Swpaul		return wpa_s->driver->update_ft_ies(wpa_s->drv_priv, md,
322119917Swpaul						    ies, ies_len);
323119917Swpaul	return -1;
324119917Swpaul}
325119917Swpaul
326119917Swpaulstatic inline int wpa_drv_set_ap(struct wpa_supplicant *wpa_s,
327119917Swpaul				 struct wpa_driver_ap_params *params)
328119917Swpaul{
329119917Swpaul	if (wpa_s->driver->set_ap)
330119917Swpaul		return wpa_s->driver->set_ap(wpa_s->drv_priv, params);
331119917Swpaul	return -1;
332119917Swpaul}
333119917Swpaul
334119917Swpaulstatic inline int wpa_drv_sta_add(struct wpa_supplicant *wpa_s,
335119917Swpaul				  struct hostapd_sta_add_params *params)
336119917Swpaul{
337119917Swpaul	if (wpa_s->driver->sta_add)
338119917Swpaul		return wpa_s->driver->sta_add(wpa_s->drv_priv, params);
339119917Swpaul	return -1;
340119917Swpaul}
341119917Swpaul
342119917Swpaulstatic inline int wpa_drv_sta_remove(struct wpa_supplicant *wpa_s,
343119917Swpaul				     const u8 *addr)
344119917Swpaul{
345119917Swpaul	if (wpa_s->driver->sta_remove)
346119917Swpaul		return wpa_s->driver->sta_remove(wpa_s->drv_priv, addr);
347119917Swpaul	return -1;
348119917Swpaul}
349119917Swpaul
350119917Swpaulstatic inline int wpa_drv_hapd_send_eapol(struct wpa_supplicant *wpa_s,
351119917Swpaul					  const u8 *addr, const u8 *data,
352119917Swpaul					  size_t data_len, int encrypt,
353119917Swpaul					  const u8 *own_addr, u32 flags)
354119917Swpaul{
355119917Swpaul	if (wpa_s->driver->hapd_send_eapol)
356119917Swpaul		return wpa_s->driver->hapd_send_eapol(wpa_s->drv_priv, addr,
357119917Swpaul						      data, data_len, encrypt,
358119917Swpaul						      own_addr, flags);
359119917Swpaul	return -1;
360119917Swpaul}
361119917Swpaul
362119917Swpaulstatic inline int wpa_drv_sta_set_flags(struct wpa_supplicant *wpa_s,
363119917Swpaul					const u8 *addr, int total_flags,
364119917Swpaul					int flags_or, int flags_and)
365119917Swpaul{
366119917Swpaul	if (wpa_s->driver->sta_set_flags)
367119917Swpaul		return wpa_s->driver->sta_set_flags(wpa_s->drv_priv, addr,
368119917Swpaul						    total_flags, flags_or,
369119917Swpaul						    flags_and);
370119917Swpaul	return -1;
371119917Swpaul}
372119917Swpaul
373119917Swpaulstatic inline int wpa_drv_set_supp_port(struct wpa_supplicant *wpa_s,
374119917Swpaul					int authorized)
375119917Swpaul{
376119917Swpaul	if (wpa_s->driver->set_supp_port) {
377119917Swpaul		return wpa_s->driver->set_supp_port(wpa_s->drv_priv,
378119917Swpaul						    authorized);
379119917Swpaul	}
380119917Swpaul	return 0;
381119917Swpaul}
382119917Swpaul
383119917Swpaulstatic inline int wpa_drv_send_action(struct wpa_supplicant *wpa_s,
384119917Swpaul				      unsigned int freq,
385119917Swpaul				      unsigned int wait,
386119917Swpaul				      const u8 *dst, const u8 *src,
387119917Swpaul				      const u8 *bssid,
388119917Swpaul				      const u8 *data, size_t data_len,
389119917Swpaul				      int no_cck)
390119917Swpaul{
391119917Swpaul	if (wpa_s->driver->send_action)
392119917Swpaul		return wpa_s->driver->send_action(wpa_s->drv_priv, freq,
393119917Swpaul						  wait, dst, src, bssid,
394119917Swpaul						  data, data_len, no_cck);
395119917Swpaul	return -1;
396119917Swpaul}
397119917Swpaul
398119917Swpaulstatic inline void wpa_drv_send_action_cancel_wait(struct wpa_supplicant *wpa_s)
399119917Swpaul{
400119917Swpaul	if (wpa_s->driver->send_action_cancel_wait)
401119917Swpaul		wpa_s->driver->send_action_cancel_wait(wpa_s->drv_priv);
402119917Swpaul}
403119917Swpaul
404119917Swpaulstatic inline int wpa_drv_set_freq(struct wpa_supplicant *wpa_s,
405119917Swpaul				   struct hostapd_freq_params *freq)
406119917Swpaul{
407119917Swpaul	if (wpa_s->driver->set_freq)
408119917Swpaul		return wpa_s->driver->set_freq(wpa_s->drv_priv, freq);
409119917Swpaul	return -1;
410119917Swpaul}
411119917Swpaul
412119917Swpaulstatic inline int wpa_drv_if_add(struct wpa_supplicant *wpa_s,
413119917Swpaul				 enum wpa_driver_if_type type,
414119917Swpaul				 const char *ifname, const u8 *addr,
415119917Swpaul				 void *bss_ctx, char *force_ifname,
416133282Sdes				 u8 *if_addr, const char *bridge)
417119917Swpaul{
418119917Swpaul	if (wpa_s->driver->if_add)
419119917Swpaul		return wpa_s->driver->if_add(wpa_s->drv_priv, type, ifname,
420119917Swpaul					     addr, bss_ctx, NULL, force_ifname,
421119917Swpaul					     if_addr, bridge, 0, 0);
422119917Swpaul	return -1;
423119917Swpaul}
424134590Sdes
425119917Swpaulstatic inline int wpa_drv_if_remove(struct wpa_supplicant *wpa_s,
426119917Swpaul				    enum wpa_driver_if_type type,
427119917Swpaul				    const char *ifname)
428119917Swpaul{
429119917Swpaul	if (wpa_s->driver->if_remove)
430119917Swpaul		return wpa_s->driver->if_remove(wpa_s->drv_priv, type, ifname);
431159015Ssilby	return -1;
432159015Ssilby}
433119917Swpaul
434119917Swpaulstatic inline int wpa_drv_remain_on_channel(struct wpa_supplicant *wpa_s,
435119917Swpaul					    unsigned int freq,
436119917Swpaul					    unsigned int duration)
437119917Swpaul{
438181953Syongari	if (wpa_s->driver->remain_on_channel)
439181953Syongari		return wpa_s->driver->remain_on_channel(wpa_s->drv_priv, freq,
440181953Syongari							duration);
441181953Syongari	return -1;
442181953Syongari}
443119917Swpaul
444181953Syongaristatic inline int wpa_drv_cancel_remain_on_channel(
445119917Swpaul	struct wpa_supplicant *wpa_s)
446181953Syongari{
447181953Syongari	if (wpa_s->driver->cancel_remain_on_channel)
448119917Swpaul		return wpa_s->driver->cancel_remain_on_channel(
449133282Sdes			wpa_s->drv_priv);
450119917Swpaul	return -1;
451119917Swpaul}
452133282Sdes
453119917Swpaulstatic inline int wpa_drv_probe_req_report(struct wpa_supplicant *wpa_s,
454136804Smtm					   int report)
455136804Smtm{
456136804Smtm	if (wpa_s->driver->probe_req_report)
457119917Swpaul		return wpa_s->driver->probe_req_report(wpa_s->drv_priv,
458119917Swpaul						       report);
459119917Swpaul	return -1;
460181953Syongari}
461119917Swpaul
462119917Swpaulstatic inline int wpa_drv_deinit_ap(struct wpa_supplicant *wpa_s)
463119917Swpaul{
464119917Swpaul	if (wpa_s->driver->deinit_ap)
465181953Syongari		return wpa_s->driver->deinit_ap(wpa_s->drv_priv);
466181953Syongari	return 0;
467181953Syongari}
468181953Syongari
469181953Syongaristatic inline int wpa_drv_deinit_p2p_cli(struct wpa_supplicant *wpa_s)
470181953Syongari{
471119917Swpaul	if (wpa_s->driver->deinit_p2p_cli)
472119917Swpaul		return wpa_s->driver->deinit_p2p_cli(wpa_s->drv_priv);
473119917Swpaul	return 0;
474119917Swpaul}
475119917Swpaul
476119917Swpaulstatic inline void wpa_drv_suspend(struct wpa_supplicant *wpa_s)
477119917Swpaul{
478119917Swpaul	if (wpa_s->driver->suspend)
479119917Swpaul		wpa_s->driver->suspend(wpa_s->drv_priv);
480119917Swpaul}
481119917Swpaul
482181994Syongaristatic inline void wpa_drv_resume(struct wpa_supplicant *wpa_s)
483181994Syongari{
484181994Syongari	if (wpa_s->driver->resume)
485181994Syongari		wpa_s->driver->resume(wpa_s->drv_priv);
486181994Syongari}
487181994Syongari
488181994Syongaristatic inline int wpa_drv_signal_monitor(struct wpa_supplicant *wpa_s,
489181994Syongari					 int threshold, int hysteresis)
490181994Syongari{
491181994Syongari	if (wpa_s->driver->signal_monitor)
492181994Syongari		return wpa_s->driver->signal_monitor(wpa_s->drv_priv,
493181994Syongari						     threshold, hysteresis);
494181994Syongari	return -1;
495181994Syongari}
496181994Syongari
497181994Syongaristatic inline int wpa_drv_signal_poll(struct wpa_supplicant *wpa_s,
498181994Syongari				      struct wpa_signal_info *si)
499181994Syongari{
500181994Syongari	if (wpa_s->driver->signal_poll)
501181994Syongari		return wpa_s->driver->signal_poll(wpa_s->drv_priv, si);
502181994Syongari	return -1;
503181994Syongari}
504181994Syongari
505181994Syongaristatic inline int wpa_drv_channel_info(struct wpa_supplicant *wpa_s,
506181994Syongari				       struct wpa_channel_info *ci)
507181994Syongari{
508181994Syongari	if (wpa_s->driver->channel_info)
509181994Syongari		return wpa_s->driver->channel_info(wpa_s->drv_priv, ci);
510181994Syongari	return -1;
511181994Syongari}
512181994Syongari
513181994Syongaristatic inline int wpa_drv_pktcnt_poll(struct wpa_supplicant *wpa_s,
514181994Syongari				      struct hostap_sta_driver_data *sta)
515181994Syongari{
516181994Syongari	if (wpa_s->driver->read_sta_data)
517181994Syongari		return wpa_s->driver->read_sta_data(wpa_s->drv_priv, sta,
518181994Syongari						    wpa_s->bssid);
519181994Syongari	return -1;
520181994Syongari}
521181994Syongari
522181994Syongaristatic inline int wpa_drv_set_ap_wps_ie(struct wpa_supplicant *wpa_s,
523181994Syongari					const struct wpabuf *beacon,
524181994Syongari					const struct wpabuf *proberesp,
525181994Syongari					const struct wpabuf *assocresp)
526181994Syongari{
527181994Syongari	if (!wpa_s->driver->set_ap_wps_ie)
528181994Syongari		return -1;
529181994Syongari	return wpa_s->driver->set_ap_wps_ie(wpa_s->drv_priv, beacon,
530181994Syongari					    proberesp, assocresp);
531181994Syongari}
532119917Swpaul
533181994Syongaristatic inline int wpa_drv_get_noa(struct wpa_supplicant *wpa_s,
534181994Syongari				  u8 *buf, size_t buf_len)
535181994Syongari{
536181994Syongari	if (!wpa_s->driver->get_noa)
537181994Syongari		return -1;
538181994Syongari	return wpa_s->driver->get_noa(wpa_s->drv_priv, buf, buf_len);
539181994Syongari}
540181994Syongari
541181994Syongaristatic inline int wpa_drv_set_p2p_powersave(struct wpa_supplicant *wpa_s,
542181994Syongari					    int legacy_ps, int opp_ps,
543181994Syongari					    int ctwindow)
544181994Syongari{
545181994Syongari	if (!wpa_s->driver->set_p2p_powersave)
546181994Syongari		return -1;
547181994Syongari	return wpa_s->driver->set_p2p_powersave(wpa_s->drv_priv, legacy_ps,
548181994Syongari						opp_ps, ctwindow);
549181994Syongari}
550181994Syongari
551181994Syongaristatic inline int wpa_drv_ampdu(struct wpa_supplicant *wpa_s, int ampdu)
552181994Syongari{
553181994Syongari	if (!wpa_s->driver->ampdu)
554181994Syongari		return -1;
555181994Syongari	return wpa_s->driver->ampdu(wpa_s->drv_priv, ampdu);
556181994Syongari}
557119917Swpaul
558181994Syongaristatic inline int wpa_drv_send_tdls_mgmt(struct wpa_supplicant *wpa_s,
559181994Syongari					 const u8 *dst, u8 action_code,
560181994Syongari					 u8 dialog_token, u16 status_code,
561181994Syongari					 u32 peer_capab, int initiator,
562181994Syongari					 const u8 *buf, size_t len)
563181994Syongari{
564181994Syongari	if (wpa_s->driver->send_tdls_mgmt) {
565181994Syongari		return wpa_s->driver->send_tdls_mgmt(wpa_s->drv_priv, dst,
566181994Syongari						     action_code, dialog_token,
567181994Syongari						     status_code, peer_capab,
568181994Syongari						     initiator, buf, len);
569181994Syongari	}
570181994Syongari	return -1;
571181994Syongari}
572181994Syongari
573181994Syongaristatic inline int wpa_drv_tdls_oper(struct wpa_supplicant *wpa_s,
574181994Syongari				    enum tdls_oper oper, const u8 *peer)
575181994Syongari{
576181994Syongari	if (!wpa_s->driver->tdls_oper)
577181994Syongari		return -1;
578181994Syongari	return wpa_s->driver->tdls_oper(wpa_s->drv_priv, oper, peer);
579181994Syongari}
580181994Syongari
581119917Swpaul#ifdef ANDROID
582119917Swpaulstatic inline int wpa_drv_driver_cmd(struct wpa_supplicant *wpa_s,
583133282Sdes				     char *cmd, char *buf, size_t buf_len)
584119917Swpaul{
585147256Sbrooks	if (!wpa_s->driver->driver_cmd)
586119917Swpaul		return -1;
587119917Swpaul	return wpa_s->driver->driver_cmd(wpa_s->drv_priv, cmd, buf, buf_len);
588119917Swpaul}
589119917Swpaul#endif /* ANDROID */
590119917Swpaul
591119917Swpaulstatic inline void wpa_drv_set_rekey_info(struct wpa_supplicant *wpa_s,
592181953Syongari					  const u8 *kek, size_t kek_len,
593181953Syongari					  const u8 *kck, size_t kck_len,
594119917Swpaul					  const u8 *replay_ctr)
595119917Swpaul{
596119917Swpaul	if (!wpa_s->driver->set_rekey_info)
597175787Syongari		return;
598181994Syongari	wpa_s->driver->set_rekey_info(wpa_s->drv_priv, kek, kek_len,
599119917Swpaul				      kck, kck_len, replay_ctr);
600181953Syongari}
601181953Syongari
602119917Swpaulstatic inline int wpa_drv_radio_disable(struct wpa_supplicant *wpa_s,
603119917Swpaul					int disabled)
604181976Syongari{
605181976Syongari	if (!wpa_s->driver->radio_disable)
606119917Swpaul		return -1;
607119917Swpaul	return wpa_s->driver->radio_disable(wpa_s->drv_priv, disabled);
608119917Swpaul}
609181953Syongari
610119917Swpaulstatic inline int wpa_drv_switch_channel(struct wpa_supplicant *wpa_s,
611175787Syongari					 struct csa_settings *settings)
612119917Swpaul{
613119917Swpaul	if (!wpa_s->driver->switch_channel)
614119917Swpaul		return -1;
615147256Sbrooks	return wpa_s->driver->switch_channel(wpa_s->drv_priv, settings);
616119917Swpaul}
617119917Swpaul
618119917Swpaulstatic inline int wpa_drv_add_ts(struct wpa_supplicant *wpa_s, u8 tsid,
619133282Sdes				 const u8 *address, u8 user_priority,
620119917Swpaul				 u16 admitted_time)
621119917Swpaul{
622119917Swpaul	if (!wpa_s->driver->add_tx_ts)
623119917Swpaul		return -1;
624119917Swpaul	return wpa_s->driver->add_tx_ts(wpa_s->drv_priv, tsid, address,
625119917Swpaul					user_priority, admitted_time);
626119917Swpaul}
627
628static inline int wpa_drv_del_ts(struct wpa_supplicant *wpa_s, u8 tid,
629				 const u8 *address)
630{
631	if (!wpa_s->driver->del_tx_ts)
632		return -1;
633	return wpa_s->driver->del_tx_ts(wpa_s->drv_priv, tid, address);
634}
635
636static inline int wpa_drv_tdls_enable_channel_switch(
637	struct wpa_supplicant *wpa_s, const u8 *addr, u8 oper_class,
638	const struct hostapd_freq_params *freq_params)
639{
640	if (!wpa_s->driver->tdls_enable_channel_switch)
641		return -1;
642	return wpa_s->driver->tdls_enable_channel_switch(wpa_s->drv_priv, addr,
643							 oper_class,
644							 freq_params);
645}
646
647static inline int
648wpa_drv_tdls_disable_channel_switch(struct wpa_supplicant *wpa_s,
649				    const u8 *addr)
650{
651	if (!wpa_s->driver->tdls_disable_channel_switch)
652		return -1;
653	return wpa_s->driver->tdls_disable_channel_switch(wpa_s->drv_priv,
654							  addr);
655}
656
657static inline int wpa_drv_wnm_oper(struct wpa_supplicant *wpa_s,
658				   enum wnm_oper oper, const u8 *peer,
659				   u8 *buf, u16 *buf_len)
660{
661	if (!wpa_s->driver->wnm_oper)
662		return -1;
663	return wpa_s->driver->wnm_oper(wpa_s->drv_priv, oper, peer, buf,
664				       buf_len);
665}
666
667static inline int wpa_drv_status(struct wpa_supplicant *wpa_s,
668				 char *buf, size_t buflen)
669{
670	if (!wpa_s->driver->status)
671		return -1;
672	return wpa_s->driver->status(wpa_s->drv_priv, buf, buflen);
673}
674
675static inline int wpa_drv_set_qos_map(struct wpa_supplicant *wpa_s,
676				      const u8 *qos_map_set, u8 qos_map_set_len)
677{
678	if (!wpa_s->driver->set_qos_map)
679		return -1;
680	return wpa_s->driver->set_qos_map(wpa_s->drv_priv, qos_map_set,
681					  qos_map_set_len);
682}
683
684static inline int wpa_drv_wowlan(struct wpa_supplicant *wpa_s,
685				 const struct wowlan_triggers *triggers)
686{
687	if (!wpa_s->driver->set_wowlan)
688		return -1;
689	return wpa_s->driver->set_wowlan(wpa_s->drv_priv, triggers);
690}
691
692static inline int wpa_drv_vendor_cmd(struct wpa_supplicant *wpa_s,
693				     int vendor_id, int subcmd, const u8 *data,
694				     size_t data_len, struct wpabuf *buf)
695{
696	if (!wpa_s->driver->vendor_cmd)
697		return -1;
698	return wpa_s->driver->vendor_cmd(wpa_s->drv_priv, vendor_id, subcmd,
699					 data, data_len, buf);
700}
701
702static inline int wpa_drv_roaming(struct wpa_supplicant *wpa_s, int allowed,
703				  const u8 *bssid)
704{
705	if (!wpa_s->driver->roaming)
706		return -1;
707	return wpa_s->driver->roaming(wpa_s->drv_priv, allowed, bssid);
708}
709
710static inline int wpa_drv_disable_fils(struct wpa_supplicant *wpa_s,
711				       int disable)
712{
713	if (!wpa_s->driver->disable_fils)
714		return -1;
715	return wpa_s->driver->disable_fils(wpa_s->drv_priv, disable);
716}
717
718static inline int wpa_drv_set_mac_addr(struct wpa_supplicant *wpa_s,
719				       const u8 *addr)
720{
721	if (!wpa_s->driver->set_mac_addr)
722		return -1;
723	return wpa_s->driver->set_mac_addr(wpa_s->drv_priv, addr);
724}
725
726
727#ifdef CONFIG_MACSEC
728
729static inline int wpa_drv_macsec_init(struct wpa_supplicant *wpa_s,
730				      struct macsec_init_params *params)
731{
732	if (!wpa_s->driver->macsec_init)
733		return -1;
734	return wpa_s->driver->macsec_init(wpa_s->drv_priv, params);
735}
736
737static inline int wpa_drv_macsec_deinit(struct wpa_supplicant *wpa_s)
738{
739	if (!wpa_s->driver->macsec_deinit)
740		return -1;
741	return wpa_s->driver->macsec_deinit(wpa_s->drv_priv);
742}
743
744static inline int wpa_drv_macsec_get_capability(struct wpa_supplicant *wpa_s,
745						enum macsec_cap *cap)
746{
747	if (!wpa_s->driver->macsec_get_capability)
748		return -1;
749	return wpa_s->driver->macsec_get_capability(wpa_s->drv_priv, cap);
750}
751
752static inline int wpa_drv_enable_protect_frames(struct wpa_supplicant *wpa_s,
753						Boolean enabled)
754{
755	if (!wpa_s->driver->enable_protect_frames)
756		return -1;
757	return wpa_s->driver->enable_protect_frames(wpa_s->drv_priv, enabled);
758}
759
760static inline int wpa_drv_enable_encrypt(struct wpa_supplicant *wpa_s,
761						Boolean enabled)
762{
763	if (!wpa_s->driver->enable_encrypt)
764		return -1;
765	return wpa_s->driver->enable_encrypt(wpa_s->drv_priv, enabled);
766}
767
768static inline int wpa_drv_set_replay_protect(struct wpa_supplicant *wpa_s,
769					     Boolean enabled, u32 window)
770{
771	if (!wpa_s->driver->set_replay_protect)
772		return -1;
773	return wpa_s->driver->set_replay_protect(wpa_s->drv_priv, enabled,
774						 window);
775}
776
777static inline int wpa_drv_set_current_cipher_suite(struct wpa_supplicant *wpa_s,
778						   u64 cs)
779{
780	if (!wpa_s->driver->set_current_cipher_suite)
781		return -1;
782	return wpa_s->driver->set_current_cipher_suite(wpa_s->drv_priv, cs);
783}
784
785static inline int wpa_drv_enable_controlled_port(struct wpa_supplicant *wpa_s,
786						 Boolean enabled)
787{
788	if (!wpa_s->driver->enable_controlled_port)
789		return -1;
790	return wpa_s->driver->enable_controlled_port(wpa_s->drv_priv, enabled);
791}
792
793static inline int wpa_drv_get_receive_lowest_pn(struct wpa_supplicant *wpa_s,
794						struct receive_sa *sa)
795{
796	if (!wpa_s->driver->get_receive_lowest_pn)
797		return -1;
798	return wpa_s->driver->get_receive_lowest_pn(wpa_s->drv_priv, sa);
799}
800
801static inline int wpa_drv_get_transmit_next_pn(struct wpa_supplicant *wpa_s,
802						struct transmit_sa *sa)
803{
804	if (!wpa_s->driver->get_transmit_next_pn)
805		return -1;
806	return wpa_s->driver->get_transmit_next_pn(wpa_s->drv_priv, sa);
807}
808
809static inline int wpa_drv_set_transmit_next_pn(struct wpa_supplicant *wpa_s,
810						struct transmit_sa *sa)
811{
812	if (!wpa_s->driver->set_transmit_next_pn)
813		return -1;
814	return wpa_s->driver->set_transmit_next_pn(wpa_s->drv_priv, sa);
815}
816
817static inline int wpa_drv_set_receive_lowest_pn(struct wpa_supplicant *wpa_s,
818						struct receive_sa *sa)
819{
820	if (!wpa_s->driver->set_receive_lowest_pn)
821		return -1;
822	return wpa_s->driver->set_receive_lowest_pn(wpa_s->drv_priv, sa);
823}
824
825static inline int
826wpa_drv_create_receive_sc(struct wpa_supplicant *wpa_s, struct receive_sc *sc,
827			  unsigned int conf_offset, int validation)
828{
829	if (!wpa_s->driver->create_receive_sc)
830		return -1;
831	return wpa_s->driver->create_receive_sc(wpa_s->drv_priv, sc,
832						conf_offset, validation);
833}
834
835static inline int wpa_drv_delete_receive_sc(struct wpa_supplicant *wpa_s,
836					    struct receive_sc *sc)
837{
838	if (!wpa_s->driver->delete_receive_sc)
839		return -1;
840	return wpa_s->driver->delete_receive_sc(wpa_s->drv_priv, sc);
841}
842
843static inline int wpa_drv_create_receive_sa(struct wpa_supplicant *wpa_s,
844					    struct receive_sa *sa)
845{
846	if (!wpa_s->driver->create_receive_sa)
847		return -1;
848	return wpa_s->driver->create_receive_sa(wpa_s->drv_priv, sa);
849}
850
851static inline int wpa_drv_delete_receive_sa(struct wpa_supplicant *wpa_s,
852					    struct receive_sa *sa)
853{
854	if (!wpa_s->driver->delete_receive_sa)
855		return -1;
856	return wpa_s->driver->delete_receive_sa(wpa_s->drv_priv, sa);
857}
858
859static inline int wpa_drv_enable_receive_sa(struct wpa_supplicant *wpa_s,
860					    struct receive_sa *sa)
861{
862	if (!wpa_s->driver->enable_receive_sa)
863		return -1;
864	return wpa_s->driver->enable_receive_sa(wpa_s->drv_priv, sa);
865}
866
867static inline int wpa_drv_disable_receive_sa(struct wpa_supplicant *wpa_s,
868					     struct receive_sa *sa)
869{
870	if (!wpa_s->driver->disable_receive_sa)
871		return -1;
872	return wpa_s->driver->disable_receive_sa(wpa_s->drv_priv, sa);
873}
874
875static inline int
876wpa_drv_create_transmit_sc(struct wpa_supplicant *wpa_s, struct transmit_sc *sc,
877			   unsigned int conf_offset)
878{
879	if (!wpa_s->driver->create_transmit_sc)
880		return -1;
881	return wpa_s->driver->create_transmit_sc(wpa_s->drv_priv, sc,
882						 conf_offset);
883}
884
885static inline int wpa_drv_delete_transmit_sc(struct wpa_supplicant *wpa_s,
886					     struct transmit_sc *sc)
887{
888	if (!wpa_s->driver->delete_transmit_sc)
889		return -1;
890	return wpa_s->driver->delete_transmit_sc(wpa_s->drv_priv, sc);
891}
892
893static inline int wpa_drv_create_transmit_sa(struct wpa_supplicant *wpa_s,
894					     struct transmit_sa *sa)
895{
896	if (!wpa_s->driver->create_transmit_sa)
897		return -1;
898	return wpa_s->driver->create_transmit_sa(wpa_s->drv_priv, sa);
899}
900
901static inline int wpa_drv_delete_transmit_sa(struct wpa_supplicant *wpa_s,
902					     struct transmit_sa *sa)
903{
904	if (!wpa_s->driver->delete_transmit_sa)
905		return -1;
906	return wpa_s->driver->delete_transmit_sa(wpa_s->drv_priv, sa);
907}
908
909static inline int wpa_drv_enable_transmit_sa(struct wpa_supplicant *wpa_s,
910					     struct transmit_sa *sa)
911{
912	if (!wpa_s->driver->enable_transmit_sa)
913		return -1;
914	return wpa_s->driver->enable_transmit_sa(wpa_s->drv_priv, sa);
915}
916
917static inline int wpa_drv_disable_transmit_sa(struct wpa_supplicant *wpa_s,
918					      struct transmit_sa *sa)
919{
920	if (!wpa_s->driver->disable_transmit_sa)
921		return -1;
922	return wpa_s->driver->disable_transmit_sa(wpa_s->drv_priv, sa);
923}
924#endif /* CONFIG_MACSEC */
925
926static inline int wpa_drv_setband(struct wpa_supplicant *wpa_s,
927				  enum set_band band)
928{
929	if (!wpa_s->driver->set_band)
930		return -1;
931	return wpa_s->driver->set_band(wpa_s->drv_priv, band);
932}
933
934static inline int wpa_drv_get_pref_freq_list(struct wpa_supplicant *wpa_s,
935					     enum wpa_driver_if_type if_type,
936					     unsigned int *num,
937					     unsigned int *freq_list)
938{
939#ifdef CONFIG_TESTING_OPTIONS
940	if (wpa_s->get_pref_freq_list_override)
941		return wpas_ctrl_iface_get_pref_freq_list_override(
942			wpa_s, if_type, num, freq_list);
943#endif /* CONFIG_TESTING_OPTIONS */
944	if (!wpa_s->driver->get_pref_freq_list)
945		return -1;
946	return wpa_s->driver->get_pref_freq_list(wpa_s->drv_priv, if_type,
947						 num, freq_list);
948}
949
950static inline int wpa_drv_set_prob_oper_freq(struct wpa_supplicant *wpa_s,
951					     unsigned int freq)
952{
953	if (!wpa_s->driver->set_prob_oper_freq)
954		return 0;
955	return wpa_s->driver->set_prob_oper_freq(wpa_s->drv_priv, freq);
956}
957
958static inline int wpa_drv_abort_scan(struct wpa_supplicant *wpa_s,
959				     u64 scan_cookie)
960{
961	if (!wpa_s->driver->abort_scan)
962		return -1;
963	return wpa_s->driver->abort_scan(wpa_s->drv_priv, scan_cookie);
964}
965
966static inline int wpa_drv_configure_frame_filters(struct wpa_supplicant *wpa_s,
967						  u32 filters)
968{
969	if (!wpa_s->driver->configure_data_frame_filters)
970		return -1;
971	return wpa_s->driver->configure_data_frame_filters(wpa_s->drv_priv,
972							   filters);
973}
974
975static inline int wpa_drv_get_ext_capa(struct wpa_supplicant *wpa_s,
976				       enum wpa_driver_if_type type)
977{
978	if (!wpa_s->driver->get_ext_capab)
979		return -1;
980	return wpa_s->driver->get_ext_capab(wpa_s->drv_priv, type,
981					    &wpa_s->extended_capa,
982					    &wpa_s->extended_capa_mask,
983					    &wpa_s->extended_capa_len);
984}
985
986static inline int wpa_drv_p2p_lo_start(struct wpa_supplicant *wpa_s,
987				       unsigned int channel,
988				       unsigned int period,
989				       unsigned int interval,
990				       unsigned int count,
991				       const u8 *device_types,
992				       size_t dev_types_len,
993				       const u8 *ies, size_t ies_len)
994{
995	if (!wpa_s->driver->p2p_lo_start)
996		return -1;
997	return wpa_s->driver->p2p_lo_start(wpa_s->drv_priv, channel, period,
998					   interval, count, device_types,
999					   dev_types_len, ies, ies_len);
1000}
1001
1002static inline int wpa_drv_p2p_lo_stop(struct wpa_supplicant *wpa_s)
1003{
1004	if (!wpa_s->driver->p2p_lo_stop)
1005		return -1;
1006	return wpa_s->driver->p2p_lo_stop(wpa_s->drv_priv);
1007}
1008
1009static inline int wpa_drv_set_default_scan_ies(struct wpa_supplicant *wpa_s,
1010					       const u8 *ies, size_t len)
1011{
1012	if (!wpa_s->driver->set_default_scan_ies)
1013		return -1;
1014	return wpa_s->driver->set_default_scan_ies(wpa_s->drv_priv, ies, len);
1015}
1016
1017static inline int wpa_drv_set_tdls_mode(struct wpa_supplicant *wpa_s,
1018					int tdls_external_control)
1019{
1020	if (!wpa_s->driver->set_tdls_mode)
1021		return -1;
1022	return wpa_s->driver->set_tdls_mode(wpa_s->drv_priv,
1023					    tdls_external_control);
1024}
1025
1026static inline struct wpa_bss_candidate_info *
1027wpa_drv_get_bss_trans_status(struct wpa_supplicant *wpa_s,
1028			     struct wpa_bss_trans_info *params)
1029{
1030	if (!wpa_s->driver->get_bss_transition_status)
1031		return NULL;
1032	return wpa_s->driver->get_bss_transition_status(wpa_s->drv_priv,
1033							params);
1034}
1035
1036static inline int wpa_drv_ignore_assoc_disallow(struct wpa_supplicant *wpa_s,
1037						int val)
1038{
1039	if (!wpa_s->driver->ignore_assoc_disallow)
1040		return -1;
1041	return wpa_s->driver->ignore_assoc_disallow(wpa_s->drv_priv, val);
1042}
1043
1044static inline int wpa_drv_set_bssid_blacklist(struct wpa_supplicant *wpa_s,
1045					      unsigned int num_bssid,
1046					      const u8 *bssids)
1047{
1048	if (!wpa_s->driver->set_bssid_blacklist)
1049		return -1;
1050	return wpa_s->driver->set_bssid_blacklist(wpa_s->drv_priv, num_bssid,
1051						  bssids);
1052}
1053
1054static inline int wpa_drv_update_connect_params(
1055	struct wpa_supplicant *wpa_s,
1056	struct wpa_driver_associate_params *params,
1057	enum wpa_drv_update_connect_params_mask mask)
1058{
1059	if (!wpa_s->driver->update_connect_params)
1060		return -1;
1061	return wpa_s->driver->update_connect_params(wpa_s->drv_priv, params,
1062						    mask);
1063}
1064
1065static inline int
1066wpa_drv_send_external_auth_status(struct wpa_supplicant *wpa_s,
1067				  struct external_auth *params)
1068{
1069	if (!wpa_s->driver->send_external_auth_status)
1070		return -1;
1071	return wpa_s->driver->send_external_auth_status(wpa_s->drv_priv,
1072							params);
1073}
1074
1075static inline int wpa_drv_set_4addr_mode(struct wpa_supplicant *wpa_s, int val)
1076{
1077	if (!wpa_s->driver->set_4addr_mode)
1078		return -1;
1079	return wpa_s->driver->set_4addr_mode(wpa_s->drv_priv,
1080					     wpa_s->bridge_ifname, val);
1081}
1082
1083#endif /* DRIVER_I_H */
1084