1  /*
2   * wpa_supplicant - Internal driver interface wrappers
3   * Copyright (c) 2003-2015, Jouni Malinen <j@w1.fi>
4   *
5   * This software may be distributed under the terms of the BSD license.
6   * See README for more details.
7   */
8  
9  #ifndef DRIVER_I_H
10  #define DRIVER_I_H
11  
12  #include "common/nan_de.h"
13  #include "drivers/driver.h"
14  
15  /* driver_ops */
wpa_drv_init(struct wpa_supplicant * wpa_s,const char * ifname)16  static inline void * wpa_drv_init(struct wpa_supplicant *wpa_s,
17  				  const char *ifname)
18  {
19  	if (wpa_s->driver->init2) {
20  		enum wpa_p2p_mode p2p_mode = WPA_P2P_MODE_WFD_R1;
21  
22  #ifdef CONFIG_P2P
23  		p2p_mode = wpa_s->p2p_mode;
24  #endif /* CONFIG_P2P */
25  
26  		return wpa_s->driver->init2(wpa_s, ifname,
27  					    wpa_s->global_drv_priv,
28  					    p2p_mode);
29  	}
30  	if (wpa_s->driver->init) {
31  		return wpa_s->driver->init(wpa_s, ifname);
32  	}
33  	return NULL;
34  }
35  
wpa_drv_deinit(struct wpa_supplicant * wpa_s)36  static inline void wpa_drv_deinit(struct wpa_supplicant *wpa_s)
37  {
38  	if (wpa_s->driver->deinit)
39  		wpa_s->driver->deinit(wpa_s->drv_priv);
40  }
41  
wpa_drv_set_param(struct wpa_supplicant * wpa_s,const char * param)42  static inline int wpa_drv_set_param(struct wpa_supplicant *wpa_s,
43  				    const char *param)
44  {
45  	if (wpa_s->driver->set_param)
46  		return wpa_s->driver->set_param(wpa_s->drv_priv, param);
47  	return 0;
48  }
49  
wpa_drv_set_countermeasures(struct wpa_supplicant * wpa_s,int enabled)50  static inline int wpa_drv_set_countermeasures(struct wpa_supplicant *wpa_s,
51  					      int enabled)
52  {
53  	if (wpa_s->driver->set_countermeasures) {
54  		return wpa_s->driver->set_countermeasures(wpa_s->drv_priv,
55  							  enabled);
56  	}
57  	return -1;
58  }
59  
wpa_drv_authenticate(struct wpa_supplicant * wpa_s,struct wpa_driver_auth_params * params)60  static inline int wpa_drv_authenticate(struct wpa_supplicant *wpa_s,
61  				       struct wpa_driver_auth_params *params)
62  {
63  	if (wpa_s->driver->authenticate)
64  		return wpa_s->driver->authenticate(wpa_s->drv_priv, params);
65  	return -1;
66  }
67  
wpa_drv_associate(struct wpa_supplicant * wpa_s,struct wpa_driver_associate_params * params)68  static inline int wpa_drv_associate(struct wpa_supplicant *wpa_s,
69  				    struct wpa_driver_associate_params *params)
70  {
71  	if (wpa_s->driver->associate) {
72  		if (params)
73  			params->freq.link_id = -1;
74  
75  		return wpa_s->driver->associate(wpa_s->drv_priv, params);
76  	}
77  	return -1;
78  }
79  
wpa_drv_init_mesh(struct wpa_supplicant * wpa_s)80  static inline int wpa_drv_init_mesh(struct wpa_supplicant *wpa_s)
81  {
82  	if (wpa_s->driver->init_mesh)
83  		return wpa_s->driver->init_mesh(wpa_s->drv_priv);
84  	return -1;
85  }
86  
wpa_drv_join_mesh(struct wpa_supplicant * wpa_s,struct wpa_driver_mesh_join_params * params)87  static inline int wpa_drv_join_mesh(struct wpa_supplicant *wpa_s,
88  				    struct wpa_driver_mesh_join_params *params)
89  {
90  	if (wpa_s->driver->join_mesh)
91  		return wpa_s->driver->join_mesh(wpa_s->drv_priv, params);
92  	return -1;
93  }
94  
wpa_drv_leave_mesh(struct wpa_supplicant * wpa_s)95  static inline int wpa_drv_leave_mesh(struct wpa_supplicant *wpa_s)
96  {
97  	if (wpa_s->driver->leave_mesh)
98  		return wpa_s->driver->leave_mesh(wpa_s->drv_priv);
99  	return -1;
100  }
101  
wpa_drv_mesh_link_probe(struct wpa_supplicant * wpa_s,const u8 * addr,const u8 * eth,size_t len)102  static inline int wpa_drv_mesh_link_probe(struct wpa_supplicant *wpa_s,
103  					  const u8 *addr,
104  					  const u8 *eth, size_t len)
105  {
106  	if (wpa_s->driver->probe_mesh_link)
107  		return wpa_s->driver->probe_mesh_link(wpa_s->drv_priv, addr,
108  						      eth, len);
109  	return -1;
110  }
111  
wpa_drv_scan(struct wpa_supplicant * wpa_s,struct wpa_driver_scan_params * params)112  static inline int wpa_drv_scan(struct wpa_supplicant *wpa_s,
113  			       struct wpa_driver_scan_params *params)
114  {
115  	params->link_id = -1;
116  
117  #ifdef CONFIG_TESTING_OPTIONS
118  	if (wpa_s->test_failure == WPAS_TEST_FAILURE_SCAN_TRIGGER)
119  		return -EBUSY;
120  #endif /* CONFIG_TESTING_OPTIONS */
121  	if (wpa_s->driver->scan2)
122  		return wpa_s->driver->scan2(wpa_s->drv_priv, params);
123  	return -1;
124  }
125  
wpa_drv_sched_scan(struct wpa_supplicant * wpa_s,struct wpa_driver_scan_params * params)126  static inline int wpa_drv_sched_scan(struct wpa_supplicant *wpa_s,
127  				     struct wpa_driver_scan_params *params)
128  {
129  	if (wpa_s->driver->sched_scan)
130  		return wpa_s->driver->sched_scan(wpa_s->drv_priv, params);
131  	return -1;
132  }
133  
wpa_drv_stop_sched_scan(struct wpa_supplicant * wpa_s)134  static inline int wpa_drv_stop_sched_scan(struct wpa_supplicant *wpa_s)
135  {
136  	if (wpa_s->driver->stop_sched_scan)
137  		return wpa_s->driver->stop_sched_scan(wpa_s->drv_priv);
138  	return -1;
139  }
140  
141  struct wpa_scan_results *
142  wpa_drv_get_scan_results(struct wpa_supplicant *wpa_s, const u8 *bssid);
143  
wpa_drv_get_bssid(struct wpa_supplicant * wpa_s,u8 * bssid)144  static inline int wpa_drv_get_bssid(struct wpa_supplicant *wpa_s, u8 *bssid)
145  {
146  	if (wpa_s->driver->get_bssid) {
147  		return wpa_s->driver->get_bssid(wpa_s->drv_priv, bssid);
148  	}
149  	return -1;
150  }
151  
wpa_drv_get_ssid(struct wpa_supplicant * wpa_s,u8 * ssid)152  static inline int wpa_drv_get_ssid(struct wpa_supplicant *wpa_s, u8 *ssid)
153  {
154  	if (wpa_s->driver->get_ssid) {
155  		return wpa_s->driver->get_ssid(wpa_s->drv_priv, ssid);
156  	}
157  	return -1;
158  }
159  
wpa_drv_set_key(struct wpa_supplicant * wpa_s,int link_id,enum wpa_alg alg,const u8 * addr,int key_idx,int set_tx,const u8 * seq,size_t seq_len,const u8 * key,size_t key_len,enum key_flag key_flag)160  static inline int wpa_drv_set_key(struct wpa_supplicant *wpa_s, int link_id,
161  				  enum wpa_alg alg, const u8 *addr,
162  				  int key_idx, int set_tx,
163  				  const u8 *seq, size_t seq_len,
164  				  const u8 *key, size_t key_len,
165  				  enum key_flag key_flag)
166  {
167  	struct wpa_driver_set_key_params params;
168  
169  	os_memset(&params, 0, sizeof(params));
170  	params.ifname = wpa_s->ifname;
171  	params.alg = alg;
172  	params.addr = addr;
173  	params.key_idx = key_idx;
174  	params.set_tx = set_tx;
175  	params.seq = seq;
176  	params.seq_len = seq_len;
177  	params.key = key;
178  	params.key_len = key_len;
179  	params.key_flag = key_flag;
180  	params.link_id = link_id;
181  
182  	if (alg != WPA_ALG_NONE) {
183  		/* keyidx = 1 can be either a broadcast or--with
184  		 * Extended Key ID--a unicast key. Use bit 15 for
185  		 * the pairwise keyidx 1 which is hopefully high enough
186  		 * to not clash with future extensions.
187  		 */
188  		if (key_idx == 1 && (key_flag & KEY_FLAG_PAIRWISE))
189  			wpa_s->keys_cleared &= ~BIT(15);
190  		else if (key_idx >= 0 && key_idx <= 5)
191  			wpa_s->keys_cleared &= ~BIT(key_idx);
192  		else
193  			wpa_s->keys_cleared = 0;
194  	}
195  	if (wpa_s->driver->set_key) {
196  		return wpa_s->driver->set_key(wpa_s->drv_priv, &params);
197  	}
198  	return -1;
199  }
200  
wpa_drv_get_seqnum(struct wpa_supplicant * wpa_s,const u8 * addr,int idx,u8 * seq)201  static inline int wpa_drv_get_seqnum(struct wpa_supplicant *wpa_s,
202  				     const u8 *addr, int idx, u8 *seq)
203  {
204  	if (wpa_s->driver->get_seqnum)
205  		return wpa_s->driver->get_seqnum(wpa_s->ifname, wpa_s->drv_priv,
206  						 addr, idx, -1, seq);
207  	return -1;
208  }
209  
wpa_drv_sta_deauth(struct wpa_supplicant * wpa_s,const u8 * addr,u16 reason_code)210  static inline int wpa_drv_sta_deauth(struct wpa_supplicant *wpa_s,
211  				     const u8 *addr, u16 reason_code)
212  {
213  	if (wpa_s->driver->sta_deauth) {
214  		return wpa_s->driver->sta_deauth(wpa_s->drv_priv,
215  						 wpa_s->own_addr, addr,
216  						 reason_code, -1);
217  	}
218  	return -1;
219  }
220  
wpa_drv_deauthenticate(struct wpa_supplicant * wpa_s,const u8 * addr,u16 reason_code)221  static inline int wpa_drv_deauthenticate(struct wpa_supplicant *wpa_s,
222  					 const u8 *addr, u16 reason_code)
223  {
224  	if (wpa_s->driver->deauthenticate) {
225  		return wpa_s->driver->deauthenticate(wpa_s->drv_priv, addr,
226  						     reason_code);
227  	}
228  	return -1;
229  }
230  
wpa_drv_add_pmkid(struct wpa_supplicant * wpa_s,struct wpa_pmkid_params * params)231  static inline int wpa_drv_add_pmkid(struct wpa_supplicant *wpa_s,
232  				    struct wpa_pmkid_params *params)
233  {
234  	if (wpa_s->driver->add_pmkid) {
235  		return wpa_s->driver->add_pmkid(wpa_s->drv_priv, params);
236  	}
237  	return -1;
238  }
239  
wpa_drv_remove_pmkid(struct wpa_supplicant * wpa_s,struct wpa_pmkid_params * params)240  static inline int wpa_drv_remove_pmkid(struct wpa_supplicant *wpa_s,
241  				       struct wpa_pmkid_params *params)
242  {
243  	if (wpa_s->driver->remove_pmkid) {
244  		return wpa_s->driver->remove_pmkid(wpa_s->drv_priv, params);
245  	}
246  	return -1;
247  }
248  
wpa_drv_flush_pmkid(struct wpa_supplicant * wpa_s)249  static inline int wpa_drv_flush_pmkid(struct wpa_supplicant *wpa_s)
250  {
251  	if (wpa_s->driver->flush_pmkid) {
252  		return wpa_s->driver->flush_pmkid(wpa_s->drv_priv);
253  	}
254  	return -1;
255  }
256  
wpa_drv_get_capa(struct wpa_supplicant * wpa_s,struct wpa_driver_capa * capa)257  static inline int wpa_drv_get_capa(struct wpa_supplicant *wpa_s,
258  				   struct wpa_driver_capa *capa)
259  {
260  	if (wpa_s->driver->get_capa) {
261  		return wpa_s->driver->get_capa(wpa_s->drv_priv, capa);
262  	}
263  	return -1;
264  }
265  
wpa_drv_poll(struct wpa_supplicant * wpa_s)266  static inline void wpa_drv_poll(struct wpa_supplicant *wpa_s)
267  {
268  	if (wpa_s->driver->poll) {
269  		wpa_s->driver->poll(wpa_s->drv_priv);
270  	}
271  }
272  
wpa_drv_get_ifname(struct wpa_supplicant * wpa_s)273  static inline const char * wpa_drv_get_ifname(struct wpa_supplicant *wpa_s)
274  {
275  	if (wpa_s->driver->get_ifname) {
276  		return wpa_s->driver->get_ifname(wpa_s->drv_priv);
277  	}
278  	return NULL;
279  }
280  
281  static inline const char *
wpa_driver_get_radio_name(struct wpa_supplicant * wpa_s)282  wpa_driver_get_radio_name(struct wpa_supplicant *wpa_s)
283  {
284  	if (wpa_s->driver->get_radio_name)
285  		return wpa_s->driver->get_radio_name(wpa_s->drv_priv);
286  	return NULL;
287  }
288  
wpa_drv_get_mac_addr(struct wpa_supplicant * wpa_s)289  static inline const u8 * wpa_drv_get_mac_addr(struct wpa_supplicant *wpa_s)
290  {
291  	if (wpa_s->driver->get_mac_addr) {
292  		return wpa_s->driver->get_mac_addr(wpa_s->drv_priv);
293  	}
294  	return NULL;
295  }
296  
wpa_drv_set_operstate(struct wpa_supplicant * wpa_s,int state)297  static inline int wpa_drv_set_operstate(struct wpa_supplicant *wpa_s,
298  					int state)
299  {
300  	if (wpa_s->driver->set_operstate)
301  		return wpa_s->driver->set_operstate(wpa_s->drv_priv, state);
302  	return 0;
303  }
304  
wpa_drv_mlme_setprotection(struct wpa_supplicant * wpa_s,const u8 * addr,int protect_type,int key_type)305  static inline int wpa_drv_mlme_setprotection(struct wpa_supplicant *wpa_s,
306  					     const u8 *addr, int protect_type,
307  					     int key_type)
308  {
309  	if (wpa_s->driver->mlme_setprotection)
310  		return wpa_s->driver->mlme_setprotection(wpa_s->drv_priv, addr,
311  							 protect_type,
312  							 key_type);
313  	return 0;
314  }
315  
316  static inline struct hostapd_hw_modes *
wpa_drv_get_hw_feature_data(struct wpa_supplicant * wpa_s,u16 * num_modes,u16 * flags,u8 * dfs_domain)317  wpa_drv_get_hw_feature_data(struct wpa_supplicant *wpa_s, u16 *num_modes,
318  			    u16 *flags, u8 *dfs_domain)
319  {
320  	if (wpa_s->driver->get_hw_feature_data)
321  		return wpa_s->driver->get_hw_feature_data(wpa_s->drv_priv,
322  							  num_modes, flags,
323  							  dfs_domain);
324  	return NULL;
325  }
326  
wpa_drv_set_country(struct wpa_supplicant * wpa_s,const char * alpha2)327  static inline int wpa_drv_set_country(struct wpa_supplicant *wpa_s,
328  				      const char *alpha2)
329  {
330  	if (wpa_s->driver->set_country)
331  		return wpa_s->driver->set_country(wpa_s->drv_priv, alpha2);
332  	return 0;
333  }
334  
wpa_drv_send_mlme(struct wpa_supplicant * wpa_s,const u8 * data,size_t data_len,int noack,unsigned int freq,unsigned int wait)335  static inline int wpa_drv_send_mlme(struct wpa_supplicant *wpa_s,
336  				    const u8 *data, size_t data_len, int noack,
337  				    unsigned int freq, unsigned int wait)
338  {
339  	if (wpa_s->driver->send_mlme)
340  		return wpa_s->driver->send_mlme(wpa_s->drv_priv,
341  						data, data_len, noack,
342  						freq, NULL, 0, 0, wait, -1);
343  	return -1;
344  }
345  
wpa_drv_update_ft_ies(struct wpa_supplicant * wpa_s,const u8 * md,const u8 * ies,size_t ies_len)346  static inline int wpa_drv_update_ft_ies(struct wpa_supplicant *wpa_s,
347  					const u8 *md,
348  					const u8 *ies, size_t ies_len)
349  {
350  	if (wpa_s->driver->update_ft_ies)
351  		return wpa_s->driver->update_ft_ies(wpa_s->drv_priv, md,
352  						    ies, ies_len);
353  	return -1;
354  }
355  
wpa_drv_sta_add(struct wpa_supplicant * wpa_s,struct hostapd_sta_add_params * params)356  static inline int wpa_drv_sta_add(struct wpa_supplicant *wpa_s,
357  				  struct hostapd_sta_add_params *params)
358  {
359  	if (wpa_s->driver->sta_add) {
360  		/* Set link_id to -1 for non-TDLS peers */
361  		if (!(params->flags & WPA_STA_TDLS_PEER))
362  			params->mld_link_id = -1;
363  		return wpa_s->driver->sta_add(wpa_s->drv_priv, params);
364  	}
365  	return -1;
366  }
367  
wpa_drv_sta_remove(struct wpa_supplicant * wpa_s,const u8 * addr)368  static inline int wpa_drv_sta_remove(struct wpa_supplicant *wpa_s,
369  				     const u8 *addr)
370  {
371  	if (wpa_s->driver->sta_remove)
372  		return wpa_s->driver->sta_remove(wpa_s->drv_priv, addr);
373  	return -1;
374  }
375  
wpa_drv_tx_control_port(struct wpa_supplicant * wpa_s,const u8 * dest,u16 proto,const u8 * buf,size_t len,int no_encrypt)376  static inline int wpa_drv_tx_control_port(struct wpa_supplicant *wpa_s,
377  					  const u8 *dest, u16 proto,
378  					  const u8 *buf, size_t len,
379  					  int no_encrypt)
380  {
381  	if (!wpa_s->driver->tx_control_port)
382  		return -1;
383  	return wpa_s->driver->tx_control_port(wpa_s->drv_priv, dest, proto,
384  					      buf, len, no_encrypt, -1);
385  }
386  
wpa_drv_hapd_send_eapol(struct wpa_supplicant * wpa_s,const u8 * addr,const u8 * data,size_t data_len,int encrypt,const u8 * own_addr,u32 flags)387  static inline int wpa_drv_hapd_send_eapol(struct wpa_supplicant *wpa_s,
388  					  const u8 *addr, const u8 *data,
389  					  size_t data_len, int encrypt,
390  					  const u8 *own_addr, u32 flags)
391  {
392  	if (wpa_s->driver->hapd_send_eapol)
393  		return wpa_s->driver->hapd_send_eapol(wpa_s->drv_priv, addr,
394  						      data, data_len, encrypt,
395  						      own_addr, flags, -1);
396  	return -1;
397  }
398  
wpa_drv_sta_set_flags(struct wpa_supplicant * wpa_s,const u8 * addr,int total_flags,int flags_or,int flags_and)399  static inline int wpa_drv_sta_set_flags(struct wpa_supplicant *wpa_s,
400  					const u8 *addr, int total_flags,
401  					int flags_or, int flags_and)
402  {
403  	if (wpa_s->driver->sta_set_flags)
404  		return wpa_s->driver->sta_set_flags(wpa_s->drv_priv, addr,
405  						    total_flags, flags_or,
406  						    flags_and);
407  	return -1;
408  }
409  
wpa_drv_set_supp_port(struct wpa_supplicant * wpa_s,int authorized)410  static inline int wpa_drv_set_supp_port(struct wpa_supplicant *wpa_s,
411  					int authorized)
412  {
413  	if (wpa_s->driver->set_supp_port) {
414  		return wpa_s->driver->set_supp_port(wpa_s->drv_priv,
415  						    authorized);
416  	}
417  	return 0;
418  }
419  
420  int wpa_drv_send_action(struct wpa_supplicant *wpa_s, unsigned int freq,
421  			unsigned int wait, const u8 *dst, const u8 *src,
422  			const u8 *bssid, const u8 *data, size_t data_len,
423  			int no_cck);
424  
wpa_drv_send_action_cancel_wait(struct wpa_supplicant * wpa_s)425  static inline void wpa_drv_send_action_cancel_wait(struct wpa_supplicant *wpa_s)
426  {
427  	if (wpa_s->driver->send_action_cancel_wait)
428  		wpa_s->driver->send_action_cancel_wait(wpa_s->drv_priv);
429  }
430  
wpa_drv_set_freq(struct wpa_supplicant * wpa_s,struct hostapd_freq_params * freq)431  static inline int wpa_drv_set_freq(struct wpa_supplicant *wpa_s,
432  				   struct hostapd_freq_params *freq)
433  {
434  	if (wpa_s->driver->set_freq)
435  		return wpa_s->driver->set_freq(wpa_s->drv_priv, freq);
436  	return -1;
437  }
438  
wpa_drv_if_add(struct wpa_supplicant * wpa_s,enum wpa_driver_if_type type,const char * ifname,const u8 * addr,void * bss_ctx,char * force_ifname,u8 * if_addr,const char * bridge)439  static inline int wpa_drv_if_add(struct wpa_supplicant *wpa_s,
440  				 enum wpa_driver_if_type type,
441  				 const char *ifname, const u8 *addr,
442  				 void *bss_ctx, char *force_ifname,
443  				 u8 *if_addr, const char *bridge)
444  {
445  	if (wpa_s->driver->if_add)
446  		return wpa_s->driver->if_add(wpa_s->drv_priv, type, ifname,
447  					     addr, bss_ctx, NULL, force_ifname,
448  					     if_addr, bridge, 0, 0);
449  	return -1;
450  }
451  
wpa_drv_if_remove(struct wpa_supplicant * wpa_s,enum wpa_driver_if_type type,const char * ifname)452  static inline int wpa_drv_if_remove(struct wpa_supplicant *wpa_s,
453  				    enum wpa_driver_if_type type,
454  				    const char *ifname)
455  {
456  	if (wpa_s->driver->if_remove)
457  		return wpa_s->driver->if_remove(wpa_s->drv_priv, type, ifname);
458  	return -1;
459  }
460  
wpa_drv_remain_on_channel(struct wpa_supplicant * wpa_s,unsigned int freq,unsigned int duration)461  static inline int wpa_drv_remain_on_channel(struct wpa_supplicant *wpa_s,
462  					    unsigned int freq,
463  					    unsigned int duration)
464  {
465  	if (wpa_s->driver->remain_on_channel)
466  		return wpa_s->driver->remain_on_channel(wpa_s->drv_priv, freq,
467  							duration);
468  	return -1;
469  }
470  
wpa_drv_cancel_remain_on_channel(struct wpa_supplicant * wpa_s)471  static inline int wpa_drv_cancel_remain_on_channel(
472  	struct wpa_supplicant *wpa_s)
473  {
474  	if (wpa_s->driver->cancel_remain_on_channel)
475  		return wpa_s->driver->cancel_remain_on_channel(
476  			wpa_s->drv_priv);
477  	return -1;
478  }
479  
wpa_drv_probe_req_report(struct wpa_supplicant * wpa_s,int report)480  static inline int wpa_drv_probe_req_report(struct wpa_supplicant *wpa_s,
481  					   int report)
482  {
483  	if (wpa_s->driver->probe_req_report)
484  		return wpa_s->driver->probe_req_report(wpa_s->drv_priv,
485  						       report);
486  	return -1;
487  }
488  
wpa_drv_deinit_ap(struct wpa_supplicant * wpa_s)489  static inline int wpa_drv_deinit_ap(struct wpa_supplicant *wpa_s)
490  {
491  	if (wpa_s->driver->deinit_ap)
492  		return wpa_s->driver->deinit_ap(wpa_s->drv_priv);
493  	return 0;
494  }
495  
wpa_drv_deinit_p2p_cli(struct wpa_supplicant * wpa_s)496  static inline int wpa_drv_deinit_p2p_cli(struct wpa_supplicant *wpa_s)
497  {
498  	if (wpa_s->driver->deinit_p2p_cli)
499  		return wpa_s->driver->deinit_p2p_cli(wpa_s->drv_priv);
500  	return 0;
501  }
502  
wpa_drv_suspend(struct wpa_supplicant * wpa_s)503  static inline void wpa_drv_suspend(struct wpa_supplicant *wpa_s)
504  {
505  	if (wpa_s->driver->suspend)
506  		wpa_s->driver->suspend(wpa_s->drv_priv);
507  }
508  
wpa_drv_resume(struct wpa_supplicant * wpa_s)509  static inline void wpa_drv_resume(struct wpa_supplicant *wpa_s)
510  {
511  	if (wpa_s->driver->resume)
512  		wpa_s->driver->resume(wpa_s->drv_priv);
513  }
514  
wpa_drv_signal_monitor(struct wpa_supplicant * wpa_s,int threshold,int hysteresis)515  static inline int wpa_drv_signal_monitor(struct wpa_supplicant *wpa_s,
516  					 int threshold, int hysteresis)
517  {
518  	if (wpa_s->driver->signal_monitor)
519  		return wpa_s->driver->signal_monitor(wpa_s->drv_priv,
520  						     threshold, hysteresis);
521  	return -1;
522  }
523  
524  int wpa_drv_signal_poll(struct wpa_supplicant *wpa_s,
525  			struct wpa_signal_info *si);
526  
wpa_drv_mlo_signal_poll(struct wpa_supplicant * wpa_s,struct wpa_mlo_signal_info * mlo_si)527  static inline int wpa_drv_mlo_signal_poll(struct wpa_supplicant *wpa_s,
528  					  struct wpa_mlo_signal_info *mlo_si)
529  {
530  	if (wpa_s->driver->mlo_signal_poll)
531  		return wpa_s->driver->mlo_signal_poll(wpa_s->drv_priv, mlo_si);
532  	return -1;
533  }
534  
wpa_drv_channel_info(struct wpa_supplicant * wpa_s,struct wpa_channel_info * ci)535  static inline int wpa_drv_channel_info(struct wpa_supplicant *wpa_s,
536  				       struct wpa_channel_info *ci)
537  {
538  	if (wpa_s->driver->channel_info)
539  		return wpa_s->driver->channel_info(wpa_s->drv_priv, ci);
540  	return -1;
541  }
542  
wpa_drv_pktcnt_poll(struct wpa_supplicant * wpa_s,struct hostap_sta_driver_data * sta)543  static inline int wpa_drv_pktcnt_poll(struct wpa_supplicant *wpa_s,
544  				      struct hostap_sta_driver_data *sta)
545  {
546  	if (wpa_s->driver->read_sta_data)
547  		return wpa_s->driver->read_sta_data(wpa_s->drv_priv, sta,
548  						    wpa_s->bssid);
549  	return -1;
550  }
551  
wpa_drv_set_ap_wps_ie(struct wpa_supplicant * wpa_s,const struct wpabuf * beacon,const struct wpabuf * proberesp,const struct wpabuf * assocresp)552  static inline int wpa_drv_set_ap_wps_ie(struct wpa_supplicant *wpa_s,
553  					const struct wpabuf *beacon,
554  					const struct wpabuf *proberesp,
555  					const struct wpabuf *assocresp)
556  {
557  	if (!wpa_s->driver->set_ap_wps_ie)
558  		return -1;
559  	return wpa_s->driver->set_ap_wps_ie(wpa_s->drv_priv, beacon,
560  					    proberesp, assocresp);
561  }
562  
wpa_drv_get_noa(struct wpa_supplicant * wpa_s,u8 * buf,size_t buf_len)563  static inline int wpa_drv_get_noa(struct wpa_supplicant *wpa_s,
564  				  u8 *buf, size_t buf_len)
565  {
566  	if (!wpa_s->driver->get_noa)
567  		return -1;
568  	return wpa_s->driver->get_noa(wpa_s->drv_priv, buf, buf_len);
569  }
570  
wpa_drv_set_p2p_powersave(struct wpa_supplicant * wpa_s,int legacy_ps,int opp_ps,int ctwindow)571  static inline int wpa_drv_set_p2p_powersave(struct wpa_supplicant *wpa_s,
572  					    int legacy_ps, int opp_ps,
573  					    int ctwindow)
574  {
575  	if (!wpa_s->driver->set_p2p_powersave)
576  		return -1;
577  	return wpa_s->driver->set_p2p_powersave(wpa_s->drv_priv, legacy_ps,
578  						opp_ps, ctwindow);
579  }
580  
wpa_drv_ampdu(struct wpa_supplicant * wpa_s,int ampdu)581  static inline int wpa_drv_ampdu(struct wpa_supplicant *wpa_s, int ampdu)
582  {
583  	if (!wpa_s->driver->ampdu)
584  		return -1;
585  	return wpa_s->driver->ampdu(wpa_s->drv_priv, ampdu);
586  }
587  
wpa_drv_send_tdls_mgmt(struct wpa_supplicant * wpa_s,const u8 * dst,u8 action_code,u8 dialog_token,u16 status_code,u32 peer_capab,int initiator,const u8 * buf,size_t len,int link_id)588  static inline int wpa_drv_send_tdls_mgmt(struct wpa_supplicant *wpa_s,
589  					 const u8 *dst, u8 action_code,
590  					 u8 dialog_token, u16 status_code,
591  					 u32 peer_capab, int initiator,
592  					 const u8 *buf, size_t len, int link_id)
593  {
594  	if (wpa_s->driver->send_tdls_mgmt) {
595  		return wpa_s->driver->send_tdls_mgmt(wpa_s->drv_priv, dst,
596  						     action_code, dialog_token,
597  						     status_code, peer_capab,
598  						     initiator, buf, len,
599  						     link_id);
600  	}
601  	return -1;
602  }
603  
wpa_drv_tdls_oper(struct wpa_supplicant * wpa_s,enum tdls_oper oper,const u8 * peer)604  static inline int wpa_drv_tdls_oper(struct wpa_supplicant *wpa_s,
605  				    enum tdls_oper oper, const u8 *peer)
606  {
607  	if (!wpa_s->driver->tdls_oper)
608  		return -1;
609  	return wpa_s->driver->tdls_oper(wpa_s->drv_priv, oper, peer);
610  }
611  
612  #ifdef ANDROID
wpa_drv_driver_cmd(struct wpa_supplicant * wpa_s,char * cmd,char * buf,size_t buf_len)613  static inline int wpa_drv_driver_cmd(struct wpa_supplicant *wpa_s,
614  				     char *cmd, char *buf, size_t buf_len)
615  {
616  	if (!wpa_s->driver->driver_cmd)
617  		return -1;
618  	return wpa_s->driver->driver_cmd(wpa_s->drv_priv, cmd, buf, buf_len);
619  }
620  #endif /* ANDROID */
621  
wpa_drv_set_rekey_info(struct wpa_supplicant * wpa_s,const u8 * kek,size_t kek_len,const u8 * kck,size_t kck_len,const u8 * replay_ctr)622  static inline void wpa_drv_set_rekey_info(struct wpa_supplicant *wpa_s,
623  					  const u8 *kek, size_t kek_len,
624  					  const u8 *kck, size_t kck_len,
625  					  const u8 *replay_ctr)
626  {
627  	if (!wpa_s->driver->set_rekey_info)
628  		return;
629  	wpa_s->driver->set_rekey_info(wpa_s->drv_priv, kek, kek_len,
630  				      kck, kck_len, replay_ctr);
631  }
632  
wpa_drv_radio_disable(struct wpa_supplicant * wpa_s,int disabled)633  static inline int wpa_drv_radio_disable(struct wpa_supplicant *wpa_s,
634  					int disabled)
635  {
636  	if (!wpa_s->driver->radio_disable)
637  		return -1;
638  	return wpa_s->driver->radio_disable(wpa_s->drv_priv, disabled);
639  }
640  
wpa_drv_switch_channel(struct wpa_supplicant * wpa_s,struct csa_settings * settings)641  static inline int wpa_drv_switch_channel(struct wpa_supplicant *wpa_s,
642  					 struct csa_settings *settings)
643  {
644  	if (!wpa_s->driver->switch_channel)
645  		return -1;
646  	return wpa_s->driver->switch_channel(wpa_s->drv_priv, settings);
647  }
648  
wpa_drv_add_ts(struct wpa_supplicant * wpa_s,u8 tsid,const u8 * address,u8 user_priority,u16 admitted_time)649  static inline int wpa_drv_add_ts(struct wpa_supplicant *wpa_s, u8 tsid,
650  				 const u8 *address, u8 user_priority,
651  				 u16 admitted_time)
652  {
653  	if (!wpa_s->driver->add_tx_ts)
654  		return -1;
655  	return wpa_s->driver->add_tx_ts(wpa_s->drv_priv, tsid, address,
656  					user_priority, admitted_time);
657  }
658  
wpa_drv_del_ts(struct wpa_supplicant * wpa_s,u8 tid,const u8 * address)659  static inline int wpa_drv_del_ts(struct wpa_supplicant *wpa_s, u8 tid,
660  				 const u8 *address)
661  {
662  	if (!wpa_s->driver->del_tx_ts)
663  		return -1;
664  	return wpa_s->driver->del_tx_ts(wpa_s->drv_priv, tid, address);
665  }
666  
wpa_drv_tdls_enable_channel_switch(struct wpa_supplicant * wpa_s,const u8 * addr,u8 oper_class,const struct hostapd_freq_params * freq_params)667  static inline int wpa_drv_tdls_enable_channel_switch(
668  	struct wpa_supplicant *wpa_s, const u8 *addr, u8 oper_class,
669  	const struct hostapd_freq_params *freq_params)
670  {
671  	if (!wpa_s->driver->tdls_enable_channel_switch)
672  		return -1;
673  	return wpa_s->driver->tdls_enable_channel_switch(wpa_s->drv_priv, addr,
674  							 oper_class,
675  							 freq_params);
676  }
677  
678  static inline int
wpa_drv_tdls_disable_channel_switch(struct wpa_supplicant * wpa_s,const u8 * addr)679  wpa_drv_tdls_disable_channel_switch(struct wpa_supplicant *wpa_s,
680  				    const u8 *addr)
681  {
682  	if (!wpa_s->driver->tdls_disable_channel_switch)
683  		return -1;
684  	return wpa_s->driver->tdls_disable_channel_switch(wpa_s->drv_priv,
685  							  addr);
686  }
687  
wpa_drv_wnm_oper(struct wpa_supplicant * wpa_s,enum wnm_oper oper,const u8 * peer,u8 * buf,u16 * buf_len)688  static inline int wpa_drv_wnm_oper(struct wpa_supplicant *wpa_s,
689  				   enum wnm_oper oper, const u8 *peer,
690  				   u8 *buf, u16 *buf_len)
691  {
692  	if (!wpa_s->driver->wnm_oper)
693  		return -1;
694  	return wpa_s->driver->wnm_oper(wpa_s->drv_priv, oper, peer, buf,
695  				       buf_len);
696  }
697  
wpa_drv_status(struct wpa_supplicant * wpa_s,char * buf,size_t buflen)698  static inline int wpa_drv_status(struct wpa_supplicant *wpa_s,
699  				 char *buf, size_t buflen)
700  {
701  	if (!wpa_s->driver->status)
702  		return -1;
703  	return wpa_s->driver->status(wpa_s->drv_priv, buf, buflen);
704  }
705  
wpa_drv_set_qos_map(struct wpa_supplicant * wpa_s,const u8 * qos_map_set,u8 qos_map_set_len)706  static inline int wpa_drv_set_qos_map(struct wpa_supplicant *wpa_s,
707  				      const u8 *qos_map_set, u8 qos_map_set_len)
708  {
709  	if (!wpa_s->driver->set_qos_map)
710  		return -1;
711  	return wpa_s->driver->set_qos_map(wpa_s->drv_priv, qos_map_set,
712  					  qos_map_set_len);
713  }
714  
wpa_drv_get_wowlan(struct wpa_supplicant * wpa_s)715  static inline int wpa_drv_get_wowlan(struct wpa_supplicant *wpa_s)
716  {
717  	if (!wpa_s->driver->get_wowlan)
718  		return 0;
719  	return wpa_s->driver->get_wowlan(wpa_s->drv_priv);
720  }
721  
wpa_drv_wowlan(struct wpa_supplicant * wpa_s,const struct wowlan_triggers * triggers)722  static inline int wpa_drv_wowlan(struct wpa_supplicant *wpa_s,
723  				 const struct wowlan_triggers *triggers)
724  {
725  	if (!wpa_s->driver->set_wowlan)
726  		return -1;
727  	return wpa_s->driver->set_wowlan(wpa_s->drv_priv, triggers);
728  }
729  
wpa_drv_vendor_cmd(struct wpa_supplicant * wpa_s,int vendor_id,int subcmd,const u8 * data,size_t data_len,enum nested_attr nested_attr_flag,struct wpabuf * buf)730  static inline int wpa_drv_vendor_cmd(struct wpa_supplicant *wpa_s,
731  				     int vendor_id, int subcmd, const u8 *data,
732  				     size_t data_len,
733  				     enum nested_attr nested_attr_flag,
734  				     struct wpabuf *buf)
735  {
736  	if (!wpa_s->driver->vendor_cmd)
737  		return -1;
738  	return wpa_s->driver->vendor_cmd(wpa_s->drv_priv, vendor_id, subcmd,
739  					 data, data_len, nested_attr_flag, buf);
740  }
741  
wpa_drv_roaming(struct wpa_supplicant * wpa_s,int allowed,const u8 * bssid)742  static inline int wpa_drv_roaming(struct wpa_supplicant *wpa_s, int allowed,
743  				  const u8 *bssid)
744  {
745  	if (!wpa_s->driver->roaming)
746  		return -1;
747  	return wpa_s->driver->roaming(wpa_s->drv_priv, allowed, bssid);
748  }
749  
wpa_drv_disable_fils(struct wpa_supplicant * wpa_s,int disable)750  static inline int wpa_drv_disable_fils(struct wpa_supplicant *wpa_s,
751  				       int disable)
752  {
753  	if (!wpa_s->driver->disable_fils)
754  		return -1;
755  	return wpa_s->driver->disable_fils(wpa_s->drv_priv, disable);
756  }
757  
wpa_drv_set_mac_addr(struct wpa_supplicant * wpa_s,const u8 * addr)758  static inline int wpa_drv_set_mac_addr(struct wpa_supplicant *wpa_s,
759  				       const u8 *addr)
760  {
761  	if (!wpa_s->driver->set_mac_addr)
762  		return -1;
763  	return wpa_s->driver->set_mac_addr(wpa_s->drv_priv, addr);
764  }
765  
766  
767  #ifdef CONFIG_MACSEC
768  
wpa_drv_macsec_init(struct wpa_supplicant * wpa_s,struct macsec_init_params * params)769  static inline int wpa_drv_macsec_init(struct wpa_supplicant *wpa_s,
770  				      struct macsec_init_params *params)
771  {
772  	if (!wpa_s->driver->macsec_init)
773  		return -1;
774  	return wpa_s->driver->macsec_init(wpa_s->drv_priv, params);
775  }
776  
wpa_drv_macsec_deinit(struct wpa_supplicant * wpa_s)777  static inline int wpa_drv_macsec_deinit(struct wpa_supplicant *wpa_s)
778  {
779  	if (!wpa_s->driver->macsec_deinit)
780  		return -1;
781  	return wpa_s->driver->macsec_deinit(wpa_s->drv_priv);
782  }
783  
wpa_drv_macsec_get_capability(struct wpa_supplicant * wpa_s,enum macsec_cap * cap)784  static inline int wpa_drv_macsec_get_capability(struct wpa_supplicant *wpa_s,
785  						enum macsec_cap *cap)
786  {
787  	if (!wpa_s->driver->macsec_get_capability)
788  		return -1;
789  	return wpa_s->driver->macsec_get_capability(wpa_s->drv_priv, cap);
790  }
791  
wpa_drv_enable_protect_frames(struct wpa_supplicant * wpa_s,bool enabled)792  static inline int wpa_drv_enable_protect_frames(struct wpa_supplicant *wpa_s,
793  						bool enabled)
794  {
795  	if (!wpa_s->driver->enable_protect_frames)
796  		return -1;
797  	return wpa_s->driver->enable_protect_frames(wpa_s->drv_priv, enabled);
798  }
799  
wpa_drv_enable_encrypt(struct wpa_supplicant * wpa_s,bool enabled)800  static inline int wpa_drv_enable_encrypt(struct wpa_supplicant *wpa_s,
801  						bool enabled)
802  {
803  	if (!wpa_s->driver->enable_encrypt)
804  		return -1;
805  	return wpa_s->driver->enable_encrypt(wpa_s->drv_priv, enabled);
806  }
807  
wpa_drv_set_replay_protect(struct wpa_supplicant * wpa_s,bool enabled,u32 window)808  static inline int wpa_drv_set_replay_protect(struct wpa_supplicant *wpa_s,
809  					     bool enabled, u32 window)
810  {
811  	if (!wpa_s->driver->set_replay_protect)
812  		return -1;
813  	return wpa_s->driver->set_replay_protect(wpa_s->drv_priv, enabled,
814  						 window);
815  }
816  
wpa_drv_set_offload(struct wpa_supplicant * wpa_s,u8 offload)817  static inline int wpa_drv_set_offload(struct wpa_supplicant *wpa_s, u8 offload)
818  {
819  	if (!wpa_s->driver->set_offload)
820  		return -1;
821  	return wpa_s->driver->set_offload(wpa_s->drv_priv, offload);
822  
823  }
824  
wpa_drv_set_current_cipher_suite(struct wpa_supplicant * wpa_s,u64 cs)825  static inline int wpa_drv_set_current_cipher_suite(struct wpa_supplicant *wpa_s,
826  						   u64 cs)
827  {
828  	if (!wpa_s->driver->set_current_cipher_suite)
829  		return -1;
830  	return wpa_s->driver->set_current_cipher_suite(wpa_s->drv_priv, cs);
831  }
832  
wpa_drv_enable_controlled_port(struct wpa_supplicant * wpa_s,bool enabled)833  static inline int wpa_drv_enable_controlled_port(struct wpa_supplicant *wpa_s,
834  						 bool enabled)
835  {
836  	if (!wpa_s->driver->enable_controlled_port)
837  		return -1;
838  	return wpa_s->driver->enable_controlled_port(wpa_s->drv_priv, enabled);
839  }
840  
wpa_drv_get_receive_lowest_pn(struct wpa_supplicant * wpa_s,struct receive_sa * sa)841  static inline int wpa_drv_get_receive_lowest_pn(struct wpa_supplicant *wpa_s,
842  						struct receive_sa *sa)
843  {
844  	if (!wpa_s->driver->get_receive_lowest_pn)
845  		return -1;
846  	return wpa_s->driver->get_receive_lowest_pn(wpa_s->drv_priv, sa);
847  }
848  
wpa_drv_get_transmit_next_pn(struct wpa_supplicant * wpa_s,struct transmit_sa * sa)849  static inline int wpa_drv_get_transmit_next_pn(struct wpa_supplicant *wpa_s,
850  						struct transmit_sa *sa)
851  {
852  	if (!wpa_s->driver->get_transmit_next_pn)
853  		return -1;
854  	return wpa_s->driver->get_transmit_next_pn(wpa_s->drv_priv, sa);
855  }
856  
wpa_drv_set_transmit_next_pn(struct wpa_supplicant * wpa_s,struct transmit_sa * sa)857  static inline int wpa_drv_set_transmit_next_pn(struct wpa_supplicant *wpa_s,
858  						struct transmit_sa *sa)
859  {
860  	if (!wpa_s->driver->set_transmit_next_pn)
861  		return -1;
862  	return wpa_s->driver->set_transmit_next_pn(wpa_s->drv_priv, sa);
863  }
864  
wpa_drv_set_receive_lowest_pn(struct wpa_supplicant * wpa_s,struct receive_sa * sa)865  static inline int wpa_drv_set_receive_lowest_pn(struct wpa_supplicant *wpa_s,
866  						struct receive_sa *sa)
867  {
868  	if (!wpa_s->driver->set_receive_lowest_pn)
869  		return -1;
870  	return wpa_s->driver->set_receive_lowest_pn(wpa_s->drv_priv, sa);
871  }
872  
873  static inline int
wpa_drv_create_receive_sc(struct wpa_supplicant * wpa_s,struct receive_sc * sc,unsigned int conf_offset,int validation)874  wpa_drv_create_receive_sc(struct wpa_supplicant *wpa_s, struct receive_sc *sc,
875  			  unsigned int conf_offset, int validation)
876  {
877  	if (!wpa_s->driver->create_receive_sc)
878  		return -1;
879  	return wpa_s->driver->create_receive_sc(wpa_s->drv_priv, sc,
880  						conf_offset, validation);
881  }
882  
wpa_drv_delete_receive_sc(struct wpa_supplicant * wpa_s,struct receive_sc * sc)883  static inline int wpa_drv_delete_receive_sc(struct wpa_supplicant *wpa_s,
884  					    struct receive_sc *sc)
885  {
886  	if (!wpa_s->driver->delete_receive_sc)
887  		return -1;
888  	return wpa_s->driver->delete_receive_sc(wpa_s->drv_priv, sc);
889  }
890  
wpa_drv_create_receive_sa(struct wpa_supplicant * wpa_s,struct receive_sa * sa)891  static inline int wpa_drv_create_receive_sa(struct wpa_supplicant *wpa_s,
892  					    struct receive_sa *sa)
893  {
894  	if (!wpa_s->driver->create_receive_sa)
895  		return -1;
896  	return wpa_s->driver->create_receive_sa(wpa_s->drv_priv, sa);
897  }
898  
wpa_drv_delete_receive_sa(struct wpa_supplicant * wpa_s,struct receive_sa * sa)899  static inline int wpa_drv_delete_receive_sa(struct wpa_supplicant *wpa_s,
900  					    struct receive_sa *sa)
901  {
902  	if (!wpa_s->driver->delete_receive_sa)
903  		return -1;
904  	return wpa_s->driver->delete_receive_sa(wpa_s->drv_priv, sa);
905  }
906  
wpa_drv_enable_receive_sa(struct wpa_supplicant * wpa_s,struct receive_sa * sa)907  static inline int wpa_drv_enable_receive_sa(struct wpa_supplicant *wpa_s,
908  					    struct receive_sa *sa)
909  {
910  	if (!wpa_s->driver->enable_receive_sa)
911  		return -1;
912  	return wpa_s->driver->enable_receive_sa(wpa_s->drv_priv, sa);
913  }
914  
wpa_drv_disable_receive_sa(struct wpa_supplicant * wpa_s,struct receive_sa * sa)915  static inline int wpa_drv_disable_receive_sa(struct wpa_supplicant *wpa_s,
916  					     struct receive_sa *sa)
917  {
918  	if (!wpa_s->driver->disable_receive_sa)
919  		return -1;
920  	return wpa_s->driver->disable_receive_sa(wpa_s->drv_priv, sa);
921  }
922  
923  static inline int
wpa_drv_create_transmit_sc(struct wpa_supplicant * wpa_s,struct transmit_sc * sc,unsigned int conf_offset)924  wpa_drv_create_transmit_sc(struct wpa_supplicant *wpa_s, struct transmit_sc *sc,
925  			   unsigned int conf_offset)
926  {
927  	if (!wpa_s->driver->create_transmit_sc)
928  		return -1;
929  	return wpa_s->driver->create_transmit_sc(wpa_s->drv_priv, sc,
930  						 conf_offset);
931  }
932  
wpa_drv_delete_transmit_sc(struct wpa_supplicant * wpa_s,struct transmit_sc * sc)933  static inline int wpa_drv_delete_transmit_sc(struct wpa_supplicant *wpa_s,
934  					     struct transmit_sc *sc)
935  {
936  	if (!wpa_s->driver->delete_transmit_sc)
937  		return -1;
938  	return wpa_s->driver->delete_transmit_sc(wpa_s->drv_priv, sc);
939  }
940  
wpa_drv_create_transmit_sa(struct wpa_supplicant * wpa_s,struct transmit_sa * sa)941  static inline int wpa_drv_create_transmit_sa(struct wpa_supplicant *wpa_s,
942  					     struct transmit_sa *sa)
943  {
944  	if (!wpa_s->driver->create_transmit_sa)
945  		return -1;
946  	return wpa_s->driver->create_transmit_sa(wpa_s->drv_priv, sa);
947  }
948  
wpa_drv_delete_transmit_sa(struct wpa_supplicant * wpa_s,struct transmit_sa * sa)949  static inline int wpa_drv_delete_transmit_sa(struct wpa_supplicant *wpa_s,
950  					     struct transmit_sa *sa)
951  {
952  	if (!wpa_s->driver->delete_transmit_sa)
953  		return -1;
954  	return wpa_s->driver->delete_transmit_sa(wpa_s->drv_priv, sa);
955  }
956  
wpa_drv_enable_transmit_sa(struct wpa_supplicant * wpa_s,struct transmit_sa * sa)957  static inline int wpa_drv_enable_transmit_sa(struct wpa_supplicant *wpa_s,
958  					     struct transmit_sa *sa)
959  {
960  	if (!wpa_s->driver->enable_transmit_sa)
961  		return -1;
962  	return wpa_s->driver->enable_transmit_sa(wpa_s->drv_priv, sa);
963  }
964  
wpa_drv_disable_transmit_sa(struct wpa_supplicant * wpa_s,struct transmit_sa * sa)965  static inline int wpa_drv_disable_transmit_sa(struct wpa_supplicant *wpa_s,
966  					      struct transmit_sa *sa)
967  {
968  	if (!wpa_s->driver->disable_transmit_sa)
969  		return -1;
970  	return wpa_s->driver->disable_transmit_sa(wpa_s->drv_priv, sa);
971  }
972  #endif /* CONFIG_MACSEC */
973  
wpa_drv_setband(struct wpa_supplicant * wpa_s,u32 band_mask)974  static inline int wpa_drv_setband(struct wpa_supplicant *wpa_s,
975  				  u32 band_mask)
976  {
977  	if (!wpa_s->driver->set_band)
978  		return -1;
979  	return wpa_s->driver->set_band(wpa_s->drv_priv, band_mask);
980  }
981  
wpa_drv_get_pref_freq_list(struct wpa_supplicant * wpa_s,enum wpa_driver_if_type if_type,unsigned int * num,struct weighted_pcl * freq_list)982  static inline int wpa_drv_get_pref_freq_list(struct wpa_supplicant *wpa_s,
983  					     enum wpa_driver_if_type if_type,
984  					     unsigned int *num,
985  					     struct weighted_pcl *freq_list)
986  {
987  #ifdef CONFIG_TESTING_OPTIONS
988  	if (wpa_s->get_pref_freq_list_override)
989  		return wpas_ctrl_iface_get_pref_freq_list_override(
990  			wpa_s, if_type, num, freq_list);
991  #endif /* CONFIG_TESTING_OPTIONS */
992  	if (!wpa_s->driver->get_pref_freq_list)
993  		return -1;
994  	return wpa_s->driver->get_pref_freq_list(wpa_s->drv_priv, if_type,
995  						 num, freq_list);
996  }
997  
wpa_drv_set_prob_oper_freq(struct wpa_supplicant * wpa_s,unsigned int freq)998  static inline int wpa_drv_set_prob_oper_freq(struct wpa_supplicant *wpa_s,
999  					     unsigned int freq)
1000  {
1001  	if (!wpa_s->driver->set_prob_oper_freq)
1002  		return 0;
1003  	return wpa_s->driver->set_prob_oper_freq(wpa_s->drv_priv, freq);
1004  }
1005  
wpa_drv_abort_scan(struct wpa_supplicant * wpa_s,u64 scan_cookie)1006  static inline int wpa_drv_abort_scan(struct wpa_supplicant *wpa_s,
1007  				     u64 scan_cookie)
1008  {
1009  	if (!wpa_s->driver->abort_scan)
1010  		return -1;
1011  	return wpa_s->driver->abort_scan(wpa_s->drv_priv, scan_cookie);
1012  }
1013  
wpa_drv_configure_frame_filters(struct wpa_supplicant * wpa_s,u32 filters)1014  static inline int wpa_drv_configure_frame_filters(struct wpa_supplicant *wpa_s,
1015  						  u32 filters)
1016  {
1017  	if (!wpa_s->driver->configure_data_frame_filters)
1018  		return -1;
1019  	return wpa_s->driver->configure_data_frame_filters(wpa_s->drv_priv,
1020  							   filters);
1021  }
1022  
wpa_drv_get_ext_capa(struct wpa_supplicant * wpa_s,enum wpa_driver_if_type type)1023  static inline int wpa_drv_get_ext_capa(struct wpa_supplicant *wpa_s,
1024  				       enum wpa_driver_if_type type)
1025  {
1026  	if (!wpa_s->driver->get_ext_capab)
1027  		return -1;
1028  	return wpa_s->driver->get_ext_capab(wpa_s->drv_priv, type,
1029  					    &wpa_s->extended_capa,
1030  					    &wpa_s->extended_capa_mask,
1031  					    &wpa_s->extended_capa_len);
1032  }
1033  
wpa_drv_p2p_lo_start(struct wpa_supplicant * wpa_s,unsigned int channel,unsigned int period,unsigned int interval,unsigned int count,const u8 * device_types,size_t dev_types_len,const u8 * ies,size_t ies_len)1034  static inline int wpa_drv_p2p_lo_start(struct wpa_supplicant *wpa_s,
1035  				       unsigned int channel,
1036  				       unsigned int period,
1037  				       unsigned int interval,
1038  				       unsigned int count,
1039  				       const u8 *device_types,
1040  				       size_t dev_types_len,
1041  				       const u8 *ies, size_t ies_len)
1042  {
1043  	if (!wpa_s->driver->p2p_lo_start)
1044  		return -1;
1045  	return wpa_s->driver->p2p_lo_start(wpa_s->drv_priv, channel, period,
1046  					   interval, count, device_types,
1047  					   dev_types_len, ies, ies_len);
1048  }
1049  
wpa_drv_p2p_lo_stop(struct wpa_supplicant * wpa_s)1050  static inline int wpa_drv_p2p_lo_stop(struct wpa_supplicant *wpa_s)
1051  {
1052  	if (!wpa_s->driver->p2p_lo_stop)
1053  		return -1;
1054  	return wpa_s->driver->p2p_lo_stop(wpa_s->drv_priv);
1055  }
1056  
wpa_drv_set_default_scan_ies(struct wpa_supplicant * wpa_s,const u8 * ies,size_t len)1057  static inline int wpa_drv_set_default_scan_ies(struct wpa_supplicant *wpa_s,
1058  					       const u8 *ies, size_t len)
1059  {
1060  	if (!wpa_s->driver->set_default_scan_ies)
1061  		return -1;
1062  	return wpa_s->driver->set_default_scan_ies(wpa_s->drv_priv, ies, len);
1063  }
1064  
wpa_drv_set_tdls_mode(struct wpa_supplicant * wpa_s,int tdls_external_control)1065  static inline int wpa_drv_set_tdls_mode(struct wpa_supplicant *wpa_s,
1066  					int tdls_external_control)
1067  {
1068  	if (!wpa_s->driver->set_tdls_mode)
1069  		return -1;
1070  	return wpa_s->driver->set_tdls_mode(wpa_s->drv_priv,
1071  					    tdls_external_control);
1072  }
1073  
1074  static inline struct wpa_bss_candidate_info *
wpa_drv_get_bss_trans_status(struct wpa_supplicant * wpa_s,struct wpa_bss_trans_info * params)1075  wpa_drv_get_bss_trans_status(struct wpa_supplicant *wpa_s,
1076  			     struct wpa_bss_trans_info *params)
1077  {
1078  	if (!wpa_s->driver->get_bss_transition_status)
1079  		return NULL;
1080  	return wpa_s->driver->get_bss_transition_status(wpa_s->drv_priv,
1081  							params);
1082  }
1083  
wpa_drv_ignore_assoc_disallow(struct wpa_supplicant * wpa_s,int val)1084  static inline int wpa_drv_ignore_assoc_disallow(struct wpa_supplicant *wpa_s,
1085  						int val)
1086  {
1087  	if (!wpa_s->driver->ignore_assoc_disallow)
1088  		return -1;
1089  	return wpa_s->driver->ignore_assoc_disallow(wpa_s->drv_priv, val);
1090  }
1091  
wpa_drv_set_bssid_tmp_disallow(struct wpa_supplicant * wpa_s,unsigned int num_bssid,const u8 * bssids)1092  static inline int wpa_drv_set_bssid_tmp_disallow(struct wpa_supplicant *wpa_s,
1093  						 unsigned int num_bssid,
1094  						 const u8 *bssids)
1095  {
1096  	if (!wpa_s->driver->set_bssid_tmp_disallow)
1097  		return -1;
1098  	return wpa_s->driver->set_bssid_tmp_disallow(wpa_s->drv_priv, num_bssid,
1099  						     bssids);
1100  }
1101  
wpa_drv_update_connect_params(struct wpa_supplicant * wpa_s,struct wpa_driver_associate_params * params,enum wpa_drv_update_connect_params_mask mask)1102  static inline int wpa_drv_update_connect_params(
1103  	struct wpa_supplicant *wpa_s,
1104  	struct wpa_driver_associate_params *params,
1105  	enum wpa_drv_update_connect_params_mask mask)
1106  {
1107  	if (!wpa_s->driver->update_connect_params)
1108  		return -1;
1109  
1110  	if (params)
1111  		params->freq.link_id = -1;
1112  
1113  	return wpa_s->driver->update_connect_params(wpa_s->drv_priv, params,
1114  						    mask);
1115  }
1116  
1117  static inline int
wpa_drv_send_external_auth_status(struct wpa_supplicant * wpa_s,struct external_auth * params)1118  wpa_drv_send_external_auth_status(struct wpa_supplicant *wpa_s,
1119  				  struct external_auth *params)
1120  {
1121  	if (!wpa_s->driver->send_external_auth_status)
1122  		return -1;
1123  	return wpa_s->driver->send_external_auth_status(wpa_s->drv_priv,
1124  							params);
1125  }
1126  
wpa_drv_set_4addr_mode(struct wpa_supplicant * wpa_s,int val)1127  static inline int wpa_drv_set_4addr_mode(struct wpa_supplicant *wpa_s, int val)
1128  {
1129  	if (!wpa_s->driver->set_4addr_mode)
1130  		return -1;
1131  	return wpa_s->driver->set_4addr_mode(wpa_s->drv_priv,
1132  					     wpa_s->bridge_ifname, val);
1133  }
1134  
wpa_drv_dpp_listen(struct wpa_supplicant * wpa_s,bool enable)1135  static inline int wpa_drv_dpp_listen(struct wpa_supplicant *wpa_s, bool enable)
1136  {
1137  	if (!wpa_s->driver->dpp_listen)
1138  		return 0;
1139  	return wpa_s->driver->dpp_listen(wpa_s->drv_priv, enable);
1140  }
1141  
wpa_drv_send_pasn_resp(struct wpa_supplicant * wpa_s,struct pasn_auth * params)1142  static inline int wpa_drv_send_pasn_resp(struct wpa_supplicant *wpa_s,
1143  					 struct pasn_auth *params)
1144  {
1145  	if (!wpa_s->driver->send_pasn_resp)
1146  		return -1;
1147  	return wpa_s->driver->send_pasn_resp(wpa_s->drv_priv, params);
1148  }
1149  
wpa_drv_set_secure_ranging_ctx(struct wpa_supplicant * wpa_s,const u8 * own_addr,const u8 * peer_addr,u32 cipher,u8 tk_len,const u8 * tk,u8 ltf_keyseed_len,const u8 * ltf_keyseed,u32 action)1150  static inline int wpa_drv_set_secure_ranging_ctx(struct wpa_supplicant *wpa_s,
1151  						 const u8 *own_addr,
1152  						 const u8 *peer_addr,
1153  						 u32 cipher, u8 tk_len,
1154  						 const u8 *tk,
1155  						 u8 ltf_keyseed_len,
1156  						 const u8 *ltf_keyseed,
1157  						 u32 action)
1158  {
1159  	struct secure_ranging_params params;
1160  
1161  	/* Configure secure ranging context only to the drivers that support it.
1162  	 */
1163  	if (!wpa_s->driver->set_secure_ranging_ctx)
1164  		return 0;
1165  
1166  	os_memset(&params, 0, sizeof(params));
1167  	params.action = action;
1168  	params.own_addr = own_addr;
1169  	params.peer_addr = peer_addr;
1170  	params.cipher = cipher;
1171  	params.tk_len = tk_len;
1172  	params.tk = tk;
1173  	params.ltf_keyseed_len = ltf_keyseed_len;
1174  	params.ltf_keyseed = ltf_keyseed;
1175  
1176  	return wpa_s->driver->set_secure_ranging_ctx(wpa_s->drv_priv, &params);
1177  }
1178  
1179  static inline int
wpas_drv_get_sta_mlo_info(struct wpa_supplicant * wpa_s,struct driver_sta_mlo_info * mlo_info)1180  wpas_drv_get_sta_mlo_info(struct wpa_supplicant *wpa_s,
1181  			  struct driver_sta_mlo_info *mlo_info)
1182  {
1183  	if (!wpa_s->driver->get_sta_mlo_info)
1184  		return 0;
1185  
1186  	return wpa_s->driver->get_sta_mlo_info(wpa_s->drv_priv, mlo_info);
1187  }
1188  
1189  static inline int
wpas_drv_nan_flush(struct wpa_supplicant * wpa_s)1190  wpas_drv_nan_flush(struct wpa_supplicant *wpa_s)
1191  {
1192  	if (!wpa_s->driver->nan_flush)
1193  		return 0;
1194  
1195  	return wpa_s->driver->nan_flush(wpa_s->drv_priv);
1196  }
1197  
1198  static inline int
wpas_drv_nan_publish(struct wpa_supplicant * wpa_s,const u8 * addr,int publish_id,const char * service_name,const u8 * service_id,enum nan_service_protocol_type srv_proto_type,const struct wpabuf * ssi,const struct wpabuf * elems,struct nan_publish_params * params)1199  wpas_drv_nan_publish(struct wpa_supplicant *wpa_s, const u8 *addr,
1200  		     int publish_id, const char *service_name,
1201  		     const u8 *service_id,
1202  		     enum nan_service_protocol_type srv_proto_type,
1203  		     const struct wpabuf *ssi, const struct wpabuf *elems,
1204  		     struct nan_publish_params *params)
1205  {
1206  	if (!wpa_s->driver->nan_publish)
1207  		return 0;
1208  
1209  	return wpa_s->driver->nan_publish(wpa_s->drv_priv, addr, publish_id,
1210  					  service_name, service_id,
1211  					  srv_proto_type, ssi, elems, params);
1212  }
1213  
1214  static inline int
wpas_drv_nan_cancel_publish(struct wpa_supplicant * wpa_s,int publish_id)1215  wpas_drv_nan_cancel_publish(struct wpa_supplicant *wpa_s, int publish_id)
1216  {
1217  	if (!wpa_s->driver->nan_cancel_publish)
1218  		return 0;
1219  
1220  	return wpa_s->driver->nan_cancel_publish(wpa_s->drv_priv, publish_id);
1221  }
1222  
1223  static inline int
wpas_drv_nan_update_publish(struct wpa_supplicant * wpa_s,int publish_id,const struct wpabuf * ssi)1224  wpas_drv_nan_update_publish(struct wpa_supplicant *wpa_s, int publish_id,
1225  			    const struct wpabuf *ssi)
1226  {
1227  	if (!wpa_s->driver->nan_update_publish)
1228  		return 0;
1229  
1230  	return wpa_s->driver->nan_update_publish(wpa_s->drv_priv, publish_id,
1231  						 ssi);
1232  }
1233  
1234  static inline int
wpas_drv_nan_subscribe(struct wpa_supplicant * wpa_s,const u8 * addr,int subscribe_id,const char * service_name,const u8 * service_id,enum nan_service_protocol_type srv_proto_type,const struct wpabuf * ssi,const struct wpabuf * elems,struct nan_subscribe_params * params)1235  wpas_drv_nan_subscribe(struct wpa_supplicant *wpa_s, const u8 *addr,
1236  		       int subscribe_id, const char *service_name,
1237  		       const u8 *service_id,
1238  		       enum nan_service_protocol_type srv_proto_type,
1239  		       const struct wpabuf *ssi, const struct wpabuf *elems,
1240  		       struct nan_subscribe_params *params)
1241  {
1242  	if (!wpa_s->driver->nan_subscribe)
1243  		return 0;
1244  
1245  	return wpa_s->driver->nan_subscribe(wpa_s->drv_priv, addr, subscribe_id,
1246  					    service_name, service_id,
1247  					    srv_proto_type, ssi, elems, params);
1248  }
1249  
1250  static inline int
wpas_drv_nan_cancel_subscribe(struct wpa_supplicant * wpa_s,int subscribe_id)1251  wpas_drv_nan_cancel_subscribe(struct wpa_supplicant *wpa_s, int subscribe_id)
1252  {
1253  	if (!wpa_s->driver->nan_cancel_subscribe)
1254  		return 0;
1255  
1256  	return wpa_s->driver->nan_cancel_subscribe(wpa_s->drv_priv,
1257  						   subscribe_id);
1258  }
1259  
1260  #endif /* DRIVER_I_H */
1261