xref: /freebsd/contrib/wpa/wpa_supplicant/driver_i.h (revision 71e72c9e91c4b8007a4292e09669e8b549c29e97)
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,char * alpha2,size_t alpha2_len)317 wpa_drv_get_hw_feature_data(struct wpa_supplicant *wpa_s, u16 *num_modes,
318 			    u16 *flags, u8 *dfs_domain,
319 			    char *alpha2, size_t alpha2_len)
320 {
321 	if (wpa_s->driver->get_hw_feature_data)
322 		return wpa_s->driver->get_hw_feature_data(wpa_s->drv_priv,
323 							  num_modes, flags,
324 							  dfs_domain,
325 							  alpha2, alpha2_len);
326 	return NULL;
327 }
328 
wpa_drv_set_country(struct wpa_supplicant * wpa_s,const char * alpha2)329 static inline int wpa_drv_set_country(struct wpa_supplicant *wpa_s,
330 				      const char *alpha2)
331 {
332 	if (wpa_s->driver->set_country)
333 		return wpa_s->driver->set_country(wpa_s->drv_priv, alpha2);
334 	return 0;
335 }
336 
wpa_drv_send_mlme(struct wpa_supplicant * wpa_s,const u8 * data,size_t data_len,int noack,unsigned int freq,unsigned int wait)337 static inline int wpa_drv_send_mlme(struct wpa_supplicant *wpa_s,
338 				    const u8 *data, size_t data_len, int noack,
339 				    unsigned int freq, unsigned int wait)
340 {
341 	if (wpa_s->driver->send_mlme)
342 		return wpa_s->driver->send_mlme(wpa_s->drv_priv,
343 						data, data_len, noack,
344 						freq, NULL, 0, 0, wait, -1);
345 	return -1;
346 }
347 
wpa_drv_update_ft_ies(struct wpa_supplicant * wpa_s,const u8 * md,const u8 * ies,size_t ies_len)348 static inline int wpa_drv_update_ft_ies(struct wpa_supplicant *wpa_s,
349 					const u8 *md,
350 					const u8 *ies, size_t ies_len)
351 {
352 	if (wpa_s->driver->update_ft_ies)
353 		return wpa_s->driver->update_ft_ies(wpa_s->drv_priv, md,
354 						    ies, ies_len);
355 	return -1;
356 }
357 
wpa_drv_sta_add(struct wpa_supplicant * wpa_s,struct hostapd_sta_add_params * params)358 static inline int wpa_drv_sta_add(struct wpa_supplicant *wpa_s,
359 				  struct hostapd_sta_add_params *params)
360 {
361 	if (wpa_s->driver->sta_add) {
362 		/* Set link_id to -1 for non-TDLS peers */
363 		if (!(params->flags & WPA_STA_TDLS_PEER))
364 			params->mld_link_id = -1;
365 		return wpa_s->driver->sta_add(wpa_s->drv_priv, params);
366 	}
367 	return -1;
368 }
369 
wpa_drv_sta_remove(struct wpa_supplicant * wpa_s,const u8 * addr)370 static inline int wpa_drv_sta_remove(struct wpa_supplicant *wpa_s,
371 				     const u8 *addr)
372 {
373 	if (wpa_s->driver->sta_remove)
374 		return wpa_s->driver->sta_remove(wpa_s->drv_priv, addr);
375 	return -1;
376 }
377 
wpa_drv_tx_control_port(struct wpa_supplicant * wpa_s,const u8 * dest,u16 proto,const u8 * buf,size_t len,int no_encrypt)378 static inline int wpa_drv_tx_control_port(struct wpa_supplicant *wpa_s,
379 					  const u8 *dest, u16 proto,
380 					  const u8 *buf, size_t len,
381 					  int no_encrypt)
382 {
383 	if (!wpa_s->driver->tx_control_port)
384 		return -1;
385 	return wpa_s->driver->tx_control_port(wpa_s->drv_priv, dest, proto,
386 					      buf, len, no_encrypt, -1);
387 }
388 
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)389 static inline int wpa_drv_hapd_send_eapol(struct wpa_supplicant *wpa_s,
390 					  const u8 *addr, const u8 *data,
391 					  size_t data_len, int encrypt,
392 					  const u8 *own_addr, u32 flags)
393 {
394 	if (wpa_s->driver->hapd_send_eapol)
395 		return wpa_s->driver->hapd_send_eapol(wpa_s->drv_priv, addr,
396 						      data, data_len, encrypt,
397 						      own_addr, flags, -1);
398 	return -1;
399 }
400 
wpa_drv_sta_set_flags(struct wpa_supplicant * wpa_s,const u8 * addr,int total_flags,int flags_or,int flags_and)401 static inline int wpa_drv_sta_set_flags(struct wpa_supplicant *wpa_s,
402 					const u8 *addr, int total_flags,
403 					int flags_or, int flags_and)
404 {
405 	if (wpa_s->driver->sta_set_flags)
406 		return wpa_s->driver->sta_set_flags(wpa_s->drv_priv, addr,
407 						    total_flags, flags_or,
408 						    flags_and);
409 	return -1;
410 }
411 
wpa_drv_set_supp_port(struct wpa_supplicant * wpa_s,int authorized)412 static inline int wpa_drv_set_supp_port(struct wpa_supplicant *wpa_s,
413 					int authorized)
414 {
415 	if (wpa_s->driver->set_supp_port) {
416 		return wpa_s->driver->set_supp_port(wpa_s->drv_priv,
417 						    authorized);
418 	}
419 	return 0;
420 }
421 
422 int wpa_drv_send_action(struct wpa_supplicant *wpa_s, unsigned int freq,
423 			unsigned int wait, const u8 *dst, const u8 *src,
424 			const u8 *bssid, const u8 *data, size_t data_len,
425 			int no_cck);
426 
wpa_drv_send_action_cancel_wait(struct wpa_supplicant * wpa_s)427 static inline void wpa_drv_send_action_cancel_wait(struct wpa_supplicant *wpa_s)
428 {
429 	if (wpa_s->driver->send_action_cancel_wait)
430 		wpa_s->driver->send_action_cancel_wait(wpa_s->drv_priv);
431 }
432 
wpa_drv_set_freq(struct wpa_supplicant * wpa_s,struct hostapd_freq_params * freq)433 static inline int wpa_drv_set_freq(struct wpa_supplicant *wpa_s,
434 				   struct hostapd_freq_params *freq)
435 {
436 	if (wpa_s->driver->set_freq)
437 		return wpa_s->driver->set_freq(wpa_s->drv_priv, freq);
438 	return -1;
439 }
440 
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)441 static inline int wpa_drv_if_add(struct wpa_supplicant *wpa_s,
442 				 enum wpa_driver_if_type type,
443 				 const char *ifname, const u8 *addr,
444 				 void *bss_ctx, char *force_ifname,
445 				 u8 *if_addr, const char *bridge)
446 {
447 	if (wpa_s->driver->if_add)
448 		return wpa_s->driver->if_add(wpa_s->drv_priv, type, ifname,
449 					     addr, bss_ctx, NULL, force_ifname,
450 					     if_addr, bridge, 0, 0);
451 	return -1;
452 }
453 
wpa_drv_if_remove(struct wpa_supplicant * wpa_s,enum wpa_driver_if_type type,const char * ifname)454 static inline int wpa_drv_if_remove(struct wpa_supplicant *wpa_s,
455 				    enum wpa_driver_if_type type,
456 				    const char *ifname)
457 {
458 	if (wpa_s->driver->if_remove)
459 		return wpa_s->driver->if_remove(wpa_s->drv_priv, type, ifname);
460 	return -1;
461 }
462 
wpa_drv_remain_on_channel(struct wpa_supplicant * wpa_s,unsigned int freq,unsigned int duration,const u8 * filter_addr)463 static inline int wpa_drv_remain_on_channel(struct wpa_supplicant *wpa_s,
464 					    unsigned int freq,
465 					    unsigned int duration,
466 					    const u8 *filter_addr)
467 {
468 	if (wpa_s->driver->remain_on_channel)
469 		return wpa_s->driver->remain_on_channel(wpa_s->drv_priv, freq,
470 							duration, filter_addr);
471 	return -1;
472 }
473 
wpa_drv_cancel_remain_on_channel(struct wpa_supplicant * wpa_s)474 static inline int wpa_drv_cancel_remain_on_channel(
475 	struct wpa_supplicant *wpa_s)
476 {
477 	if (wpa_s->driver->cancel_remain_on_channel)
478 		return wpa_s->driver->cancel_remain_on_channel(
479 			wpa_s->drv_priv);
480 	return -1;
481 }
482 
wpa_drv_probe_req_report(struct wpa_supplicant * wpa_s,int report)483 static inline int wpa_drv_probe_req_report(struct wpa_supplicant *wpa_s,
484 					   int report)
485 {
486 	if (wpa_s->driver->probe_req_report)
487 		return wpa_s->driver->probe_req_report(wpa_s->drv_priv,
488 						       report);
489 	return -1;
490 }
491 
wpa_drv_deinit_ap(struct wpa_supplicant * wpa_s)492 static inline int wpa_drv_deinit_ap(struct wpa_supplicant *wpa_s)
493 {
494 	if (wpa_s->driver->deinit_ap)
495 		return wpa_s->driver->deinit_ap(wpa_s->drv_priv);
496 	return 0;
497 }
498 
wpa_drv_deinit_p2p_cli(struct wpa_supplicant * wpa_s)499 static inline int wpa_drv_deinit_p2p_cli(struct wpa_supplicant *wpa_s)
500 {
501 	if (wpa_s->driver->deinit_p2p_cli)
502 		return wpa_s->driver->deinit_p2p_cli(wpa_s->drv_priv);
503 	return 0;
504 }
505 
wpa_drv_suspend(struct wpa_supplicant * wpa_s)506 static inline void wpa_drv_suspend(struct wpa_supplicant *wpa_s)
507 {
508 	if (wpa_s->driver->suspend)
509 		wpa_s->driver->suspend(wpa_s->drv_priv);
510 }
511 
wpa_drv_resume(struct wpa_supplicant * wpa_s)512 static inline void wpa_drv_resume(struct wpa_supplicant *wpa_s)
513 {
514 	if (wpa_s->driver->resume)
515 		wpa_s->driver->resume(wpa_s->drv_priv);
516 }
517 
wpa_drv_signal_monitor(struct wpa_supplicant * wpa_s,int threshold,int hysteresis)518 static inline int wpa_drv_signal_monitor(struct wpa_supplicant *wpa_s,
519 					 int threshold, int hysteresis)
520 {
521 	if (wpa_s->driver->signal_monitor)
522 		return wpa_s->driver->signal_monitor(wpa_s->drv_priv,
523 						     threshold, hysteresis);
524 	return -1;
525 }
526 
527 int wpa_drv_signal_poll(struct wpa_supplicant *wpa_s,
528 			struct wpa_signal_info *si);
529 
wpa_drv_mlo_signal_poll(struct wpa_supplicant * wpa_s,struct wpa_mlo_signal_info * mlo_si)530 static inline int wpa_drv_mlo_signal_poll(struct wpa_supplicant *wpa_s,
531 					  struct wpa_mlo_signal_info *mlo_si)
532 {
533 	if (wpa_s->driver->mlo_signal_poll)
534 		return wpa_s->driver->mlo_signal_poll(wpa_s->drv_priv, mlo_si);
535 	return -1;
536 }
537 
538 static inline int
wpa_drv_setup_link_reconfig(struct wpa_supplicant * wpa_s,struct wpa_mlo_reconfig_info * info)539 wpa_drv_setup_link_reconfig(struct wpa_supplicant *wpa_s,
540 			    struct wpa_mlo_reconfig_info *info)
541 {
542 	if (wpa_s->driver->setup_link_reconfig)
543 		return wpa_s->driver->setup_link_reconfig(wpa_s->drv_priv,
544 							  info);
545 	return -1;
546 }
547 
wpa_drv_channel_info(struct wpa_supplicant * wpa_s,struct wpa_channel_info * ci)548 static inline int wpa_drv_channel_info(struct wpa_supplicant *wpa_s,
549 				       struct wpa_channel_info *ci)
550 {
551 	if (wpa_s->driver->channel_info)
552 		return wpa_s->driver->channel_info(wpa_s->drv_priv, ci);
553 	return -1;
554 }
555 
wpa_drv_pktcnt_poll(struct wpa_supplicant * wpa_s,struct hostap_sta_driver_data * sta)556 static inline int wpa_drv_pktcnt_poll(struct wpa_supplicant *wpa_s,
557 				      struct hostap_sta_driver_data *sta)
558 {
559 	if (wpa_s->driver->read_sta_data)
560 		return wpa_s->driver->read_sta_data(wpa_s->drv_priv, sta,
561 						    wpa_s->bssid);
562 	return -1;
563 }
564 
wpa_drv_set_ap_wps_ie(struct wpa_supplicant * wpa_s,const struct wpabuf * beacon,const struct wpabuf * proberesp,const struct wpabuf * assocresp)565 static inline int wpa_drv_set_ap_wps_ie(struct wpa_supplicant *wpa_s,
566 					const struct wpabuf *beacon,
567 					const struct wpabuf *proberesp,
568 					const struct wpabuf *assocresp)
569 {
570 	if (!wpa_s->driver->set_ap_wps_ie)
571 		return -1;
572 	return wpa_s->driver->set_ap_wps_ie(wpa_s->drv_priv, beacon,
573 					    proberesp, assocresp);
574 }
575 
wpa_drv_get_noa(struct wpa_supplicant * wpa_s,u8 * buf,size_t buf_len)576 static inline int wpa_drv_get_noa(struct wpa_supplicant *wpa_s,
577 				  u8 *buf, size_t buf_len)
578 {
579 	if (!wpa_s->driver->get_noa)
580 		return -1;
581 	return wpa_s->driver->get_noa(wpa_s->drv_priv, buf, buf_len);
582 }
583 
wpa_drv_set_p2p_powersave(struct wpa_supplicant * wpa_s,int legacy_ps,int opp_ps,int ctwindow)584 static inline int wpa_drv_set_p2p_powersave(struct wpa_supplicant *wpa_s,
585 					    int legacy_ps, int opp_ps,
586 					    int ctwindow)
587 {
588 	if (!wpa_s->driver->set_p2p_powersave)
589 		return -1;
590 	return wpa_s->driver->set_p2p_powersave(wpa_s->drv_priv, legacy_ps,
591 						opp_ps, ctwindow);
592 }
593 
wpa_drv_ampdu(struct wpa_supplicant * wpa_s,int ampdu)594 static inline int wpa_drv_ampdu(struct wpa_supplicant *wpa_s, int ampdu)
595 {
596 	if (!wpa_s->driver->ampdu)
597 		return -1;
598 	return wpa_s->driver->ampdu(wpa_s->drv_priv, ampdu);
599 }
600 
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)601 static inline int wpa_drv_send_tdls_mgmt(struct wpa_supplicant *wpa_s,
602 					 const u8 *dst, u8 action_code,
603 					 u8 dialog_token, u16 status_code,
604 					 u32 peer_capab, int initiator,
605 					 const u8 *buf, size_t len, int link_id)
606 {
607 	if (wpa_s->driver->send_tdls_mgmt) {
608 		return wpa_s->driver->send_tdls_mgmt(wpa_s->drv_priv, dst,
609 						     action_code, dialog_token,
610 						     status_code, peer_capab,
611 						     initiator, buf, len,
612 						     link_id);
613 	}
614 	return -1;
615 }
616 
wpa_drv_tdls_oper(struct wpa_supplicant * wpa_s,enum tdls_oper oper,const u8 * peer)617 static inline int wpa_drv_tdls_oper(struct wpa_supplicant *wpa_s,
618 				    enum tdls_oper oper, const u8 *peer)
619 {
620 	if (!wpa_s->driver->tdls_oper)
621 		return -1;
622 	return wpa_s->driver->tdls_oper(wpa_s->drv_priv, oper, peer);
623 }
624 
625 #ifdef ANDROID
wpa_drv_driver_cmd(struct wpa_supplicant * wpa_s,char * cmd,char * buf,size_t buf_len)626 static inline int wpa_drv_driver_cmd(struct wpa_supplicant *wpa_s,
627 				     char *cmd, char *buf, size_t buf_len)
628 {
629 	if (!wpa_s->driver->driver_cmd)
630 		return -1;
631 	return wpa_s->driver->driver_cmd(wpa_s->drv_priv, cmd, buf, buf_len);
632 }
633 #endif /* ANDROID */
634 
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)635 static inline void wpa_drv_set_rekey_info(struct wpa_supplicant *wpa_s,
636 					  const u8 *kek, size_t kek_len,
637 					  const u8 *kck, size_t kck_len,
638 					  const u8 *replay_ctr)
639 {
640 	if (!wpa_s->driver->set_rekey_info)
641 		return;
642 	wpa_s->driver->set_rekey_info(wpa_s->drv_priv, kek, kek_len,
643 				      kck, kck_len, replay_ctr);
644 }
645 
wpa_drv_radio_disable(struct wpa_supplicant * wpa_s,int disabled)646 static inline int wpa_drv_radio_disable(struct wpa_supplicant *wpa_s,
647 					int disabled)
648 {
649 	if (!wpa_s->driver->radio_disable)
650 		return -1;
651 	return wpa_s->driver->radio_disable(wpa_s->drv_priv, disabled);
652 }
653 
wpa_drv_switch_channel(struct wpa_supplicant * wpa_s,struct csa_settings * settings)654 static inline int wpa_drv_switch_channel(struct wpa_supplicant *wpa_s,
655 					 struct csa_settings *settings)
656 {
657 	if (!wpa_s->driver->switch_channel)
658 		return -1;
659 	return wpa_s->driver->switch_channel(wpa_s->drv_priv, settings);
660 }
661 
wpa_drv_add_ts(struct wpa_supplicant * wpa_s,u8 tsid,const u8 * address,u8 user_priority,u16 admitted_time)662 static inline int wpa_drv_add_ts(struct wpa_supplicant *wpa_s, u8 tsid,
663 				 const u8 *address, u8 user_priority,
664 				 u16 admitted_time)
665 {
666 	if (!wpa_s->driver->add_tx_ts)
667 		return -1;
668 	return wpa_s->driver->add_tx_ts(wpa_s->drv_priv, tsid, address,
669 					user_priority, admitted_time);
670 }
671 
wpa_drv_del_ts(struct wpa_supplicant * wpa_s,u8 tid,const u8 * address)672 static inline int wpa_drv_del_ts(struct wpa_supplicant *wpa_s, u8 tid,
673 				 const u8 *address)
674 {
675 	if (!wpa_s->driver->del_tx_ts)
676 		return -1;
677 	return wpa_s->driver->del_tx_ts(wpa_s->drv_priv, tid, address);
678 }
679 
wpa_drv_tdls_enable_channel_switch(struct wpa_supplicant * wpa_s,const u8 * addr,u8 oper_class,const struct hostapd_freq_params * freq_params)680 static inline int wpa_drv_tdls_enable_channel_switch(
681 	struct wpa_supplicant *wpa_s, const u8 *addr, u8 oper_class,
682 	const struct hostapd_freq_params *freq_params)
683 {
684 	if (!wpa_s->driver->tdls_enable_channel_switch)
685 		return -1;
686 	return wpa_s->driver->tdls_enable_channel_switch(wpa_s->drv_priv, addr,
687 							 oper_class,
688 							 freq_params);
689 }
690 
691 static inline int
wpa_drv_tdls_disable_channel_switch(struct wpa_supplicant * wpa_s,const u8 * addr)692 wpa_drv_tdls_disable_channel_switch(struct wpa_supplicant *wpa_s,
693 				    const u8 *addr)
694 {
695 	if (!wpa_s->driver->tdls_disable_channel_switch)
696 		return -1;
697 	return wpa_s->driver->tdls_disable_channel_switch(wpa_s->drv_priv,
698 							  addr);
699 }
700 
wpa_drv_wnm_oper(struct wpa_supplicant * wpa_s,enum wnm_oper oper,const u8 * peer,u8 * buf,u16 * buf_len)701 static inline int wpa_drv_wnm_oper(struct wpa_supplicant *wpa_s,
702 				   enum wnm_oper oper, const u8 *peer,
703 				   u8 *buf, u16 *buf_len)
704 {
705 	if (!wpa_s->driver->wnm_oper)
706 		return -1;
707 	return wpa_s->driver->wnm_oper(wpa_s->drv_priv, oper, peer, buf,
708 				       buf_len);
709 }
710 
wpa_drv_status(struct wpa_supplicant * wpa_s,char * buf,size_t buflen)711 static inline int wpa_drv_status(struct wpa_supplicant *wpa_s,
712 				 char *buf, size_t buflen)
713 {
714 	if (!wpa_s->driver->status)
715 		return -1;
716 	return wpa_s->driver->status(wpa_s->drv_priv, buf, buflen);
717 }
718 
wpa_drv_set_qos_map(struct wpa_supplicant * wpa_s,const u8 * qos_map_set,u8 qos_map_set_len)719 static inline int wpa_drv_set_qos_map(struct wpa_supplicant *wpa_s,
720 				      const u8 *qos_map_set, u8 qos_map_set_len)
721 {
722 	if (!wpa_s->driver->set_qos_map)
723 		return -1;
724 	return wpa_s->driver->set_qos_map(wpa_s->drv_priv, qos_map_set,
725 					  qos_map_set_len);
726 }
727 
wpa_drv_get_wowlan(struct wpa_supplicant * wpa_s)728 static inline int wpa_drv_get_wowlan(struct wpa_supplicant *wpa_s)
729 {
730 	if (!wpa_s->driver->get_wowlan)
731 		return 0;
732 	return wpa_s->driver->get_wowlan(wpa_s->drv_priv);
733 }
734 
wpa_drv_wowlan(struct wpa_supplicant * wpa_s,const struct wowlan_triggers * triggers)735 static inline int wpa_drv_wowlan(struct wpa_supplicant *wpa_s,
736 				 const struct wowlan_triggers *triggers)
737 {
738 	if (!wpa_s->driver->set_wowlan)
739 		return -1;
740 	return wpa_s->driver->set_wowlan(wpa_s->drv_priv, triggers);
741 }
742 
743 #ifdef CONFIG_PR
744 
745 static inline int
wpa_drv_pd_start(struct wpa_supplicant * wpa_s,const u8 * addr,u8 * pd_addr)746 wpa_drv_pd_start(struct wpa_supplicant *wpa_s, const u8 *addr, u8 *pd_addr)
747 {
748 	if (!wpa_s->driver->pd_start)
749 		return -1;
750 	return wpa_s->driver->pd_start(wpa_s->drv_priv, addr, pd_addr);
751 }
752 
753 static inline void
wpa_drv_pd_stop(struct wpa_supplicant * wpa_s)754 wpa_drv_pd_stop(struct wpa_supplicant *wpa_s)
755 {
756 	if (!wpa_s->driver->pd_stop)
757 		return;
758 	wpa_s->driver->pd_stop(wpa_s->drv_priv);
759 }
760 
761 static inline int
wpa_drv_start_peer_measurement(struct wpa_supplicant * wpa_s,const u8 * peer,int freq,u8 channel,int bw,struct pr_pasn_ranging_params * params)762 wpa_drv_start_peer_measurement(struct wpa_supplicant *wpa_s, const u8 *peer,
763 			       int freq, u8 channel, int bw,
764 			       struct pr_pasn_ranging_params *params)
765 {
766 	if (!wpa_s->driver->start_peer_measurement)
767 		return -1;
768 	return wpa_s->driver->start_peer_measurement(wpa_s->drv_priv, peer,
769 						      freq, channel, bw,
770 						      params);
771 }
772 
773 static inline void
wpa_drv_stop_peer_measurement(struct wpa_supplicant * wpa_s)774 wpa_drv_stop_peer_measurement(struct wpa_supplicant *wpa_s)
775 {
776 	if (!wpa_s->driver->stop_peer_measurement)
777 		return;
778 	wpa_s->driver->stop_peer_measurement(wpa_s->drv_priv);
779 }
780 
781 #endif /* CONFIG_PR */
782 
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)783 static inline int wpa_drv_vendor_cmd(struct wpa_supplicant *wpa_s,
784 				     int vendor_id, int subcmd, const u8 *data,
785 				     size_t data_len,
786 				     enum nested_attr nested_attr_flag,
787 				     struct wpabuf *buf)
788 {
789 	if (!wpa_s->driver->vendor_cmd)
790 		return -1;
791 	return wpa_s->driver->vendor_cmd(wpa_s->drv_priv, vendor_id, subcmd,
792 					 data, data_len, nested_attr_flag, buf);
793 }
794 
wpa_drv_roaming(struct wpa_supplicant * wpa_s,int allowed,const u8 * bssid)795 static inline int wpa_drv_roaming(struct wpa_supplicant *wpa_s, int allowed,
796 				  const u8 *bssid)
797 {
798 	if (!wpa_s->driver->roaming)
799 		return -1;
800 	return wpa_s->driver->roaming(wpa_s->drv_priv, allowed, bssid);
801 }
802 
wpa_drv_disable_fils(struct wpa_supplicant * wpa_s,int disable)803 static inline int wpa_drv_disable_fils(struct wpa_supplicant *wpa_s,
804 				       int disable)
805 {
806 	if (!wpa_s->driver->disable_fils)
807 		return -1;
808 	return wpa_s->driver->disable_fils(wpa_s->drv_priv, disable);
809 }
810 
wpa_drv_set_mac_addr(struct wpa_supplicant * wpa_s,const u8 * addr)811 static inline int wpa_drv_set_mac_addr(struct wpa_supplicant *wpa_s,
812 				       const u8 *addr)
813 {
814 	if (!wpa_s->driver->set_mac_addr)
815 		return -1;
816 	return wpa_s->driver->set_mac_addr(wpa_s->drv_priv, addr);
817 }
818 
819 
820 #ifdef CONFIG_MACSEC
821 
wpa_drv_macsec_init(struct wpa_supplicant * wpa_s,struct macsec_init_params * params)822 static inline int wpa_drv_macsec_init(struct wpa_supplicant *wpa_s,
823 				      struct macsec_init_params *params)
824 {
825 	if (!wpa_s->driver->macsec_init)
826 		return -1;
827 	return wpa_s->driver->macsec_init(wpa_s->drv_priv, params);
828 }
829 
wpa_drv_macsec_deinit(struct wpa_supplicant * wpa_s)830 static inline int wpa_drv_macsec_deinit(struct wpa_supplicant *wpa_s)
831 {
832 	if (!wpa_s->driver->macsec_deinit)
833 		return -1;
834 	return wpa_s->driver->macsec_deinit(wpa_s->drv_priv);
835 }
836 
wpa_drv_macsec_get_capability(struct wpa_supplicant * wpa_s,enum macsec_cap * cap)837 static inline int wpa_drv_macsec_get_capability(struct wpa_supplicant *wpa_s,
838 						enum macsec_cap *cap)
839 {
840 	if (!wpa_s->driver->macsec_get_capability)
841 		return -1;
842 	return wpa_s->driver->macsec_get_capability(wpa_s->drv_priv, cap);
843 }
844 
wpa_drv_enable_protect_frames(struct wpa_supplicant * wpa_s,bool enabled)845 static inline int wpa_drv_enable_protect_frames(struct wpa_supplicant *wpa_s,
846 						bool enabled)
847 {
848 	if (!wpa_s->driver->enable_protect_frames)
849 		return -1;
850 	return wpa_s->driver->enable_protect_frames(wpa_s->drv_priv, enabled);
851 }
852 
wpa_drv_enable_encrypt(struct wpa_supplicant * wpa_s,bool enabled)853 static inline int wpa_drv_enable_encrypt(struct wpa_supplicant *wpa_s,
854 						bool enabled)
855 {
856 	if (!wpa_s->driver->enable_encrypt)
857 		return -1;
858 	return wpa_s->driver->enable_encrypt(wpa_s->drv_priv, enabled);
859 }
860 
wpa_drv_set_replay_protect(struct wpa_supplicant * wpa_s,bool enabled,u32 window)861 static inline int wpa_drv_set_replay_protect(struct wpa_supplicant *wpa_s,
862 					     bool enabled, u32 window)
863 {
864 	if (!wpa_s->driver->set_replay_protect)
865 		return -1;
866 	return wpa_s->driver->set_replay_protect(wpa_s->drv_priv, enabled,
867 						 window);
868 }
869 
wpa_drv_set_offload(struct wpa_supplicant * wpa_s,u8 offload)870 static inline int wpa_drv_set_offload(struct wpa_supplicant *wpa_s, u8 offload)
871 {
872 	if (!wpa_s->driver->set_offload)
873 		return -1;
874 	return wpa_s->driver->set_offload(wpa_s->drv_priv, offload);
875 
876 }
877 
wpa_drv_set_current_cipher_suite(struct wpa_supplicant * wpa_s,u64 cs)878 static inline int wpa_drv_set_current_cipher_suite(struct wpa_supplicant *wpa_s,
879 						   u64 cs)
880 {
881 	if (!wpa_s->driver->set_current_cipher_suite)
882 		return -1;
883 	return wpa_s->driver->set_current_cipher_suite(wpa_s->drv_priv, cs);
884 }
885 
wpa_drv_enable_controlled_port(struct wpa_supplicant * wpa_s,bool enabled)886 static inline int wpa_drv_enable_controlled_port(struct wpa_supplicant *wpa_s,
887 						 bool enabled)
888 {
889 	if (!wpa_s->driver->enable_controlled_port)
890 		return -1;
891 	return wpa_s->driver->enable_controlled_port(wpa_s->drv_priv, enabled);
892 }
893 
wpa_drv_get_receive_lowest_pn(struct wpa_supplicant * wpa_s,struct receive_sa * sa)894 static inline int wpa_drv_get_receive_lowest_pn(struct wpa_supplicant *wpa_s,
895 						struct receive_sa *sa)
896 {
897 	if (!wpa_s->driver->get_receive_lowest_pn)
898 		return -1;
899 	return wpa_s->driver->get_receive_lowest_pn(wpa_s->drv_priv, sa);
900 }
901 
wpa_drv_get_transmit_next_pn(struct wpa_supplicant * wpa_s,struct transmit_sa * sa)902 static inline int wpa_drv_get_transmit_next_pn(struct wpa_supplicant *wpa_s,
903 						struct transmit_sa *sa)
904 {
905 	if (!wpa_s->driver->get_transmit_next_pn)
906 		return -1;
907 	return wpa_s->driver->get_transmit_next_pn(wpa_s->drv_priv, sa);
908 }
909 
wpa_drv_set_transmit_next_pn(struct wpa_supplicant * wpa_s,struct transmit_sa * sa)910 static inline int wpa_drv_set_transmit_next_pn(struct wpa_supplicant *wpa_s,
911 						struct transmit_sa *sa)
912 {
913 	if (!wpa_s->driver->set_transmit_next_pn)
914 		return -1;
915 	return wpa_s->driver->set_transmit_next_pn(wpa_s->drv_priv, sa);
916 }
917 
wpa_drv_set_receive_lowest_pn(struct wpa_supplicant * wpa_s,struct receive_sa * sa)918 static inline int wpa_drv_set_receive_lowest_pn(struct wpa_supplicant *wpa_s,
919 						struct receive_sa *sa)
920 {
921 	if (!wpa_s->driver->set_receive_lowest_pn)
922 		return -1;
923 	return wpa_s->driver->set_receive_lowest_pn(wpa_s->drv_priv, sa);
924 }
925 
926 static inline int
wpa_drv_create_receive_sc(struct wpa_supplicant * wpa_s,struct receive_sc * sc,unsigned int conf_offset,int validation)927 wpa_drv_create_receive_sc(struct wpa_supplicant *wpa_s, struct receive_sc *sc,
928 			  unsigned int conf_offset, int validation)
929 {
930 	if (!wpa_s->driver->create_receive_sc)
931 		return -1;
932 	return wpa_s->driver->create_receive_sc(wpa_s->drv_priv, sc,
933 						conf_offset, validation);
934 }
935 
wpa_drv_delete_receive_sc(struct wpa_supplicant * wpa_s,struct receive_sc * sc)936 static inline int wpa_drv_delete_receive_sc(struct wpa_supplicant *wpa_s,
937 					    struct receive_sc *sc)
938 {
939 	if (!wpa_s->driver->delete_receive_sc)
940 		return -1;
941 	return wpa_s->driver->delete_receive_sc(wpa_s->drv_priv, sc);
942 }
943 
wpa_drv_create_receive_sa(struct wpa_supplicant * wpa_s,struct receive_sa * sa)944 static inline int wpa_drv_create_receive_sa(struct wpa_supplicant *wpa_s,
945 					    struct receive_sa *sa)
946 {
947 	if (!wpa_s->driver->create_receive_sa)
948 		return -1;
949 	return wpa_s->driver->create_receive_sa(wpa_s->drv_priv, sa);
950 }
951 
wpa_drv_delete_receive_sa(struct wpa_supplicant * wpa_s,struct receive_sa * sa)952 static inline int wpa_drv_delete_receive_sa(struct wpa_supplicant *wpa_s,
953 					    struct receive_sa *sa)
954 {
955 	if (!wpa_s->driver->delete_receive_sa)
956 		return -1;
957 	return wpa_s->driver->delete_receive_sa(wpa_s->drv_priv, sa);
958 }
959 
wpa_drv_enable_receive_sa(struct wpa_supplicant * wpa_s,struct receive_sa * sa)960 static inline int wpa_drv_enable_receive_sa(struct wpa_supplicant *wpa_s,
961 					    struct receive_sa *sa)
962 {
963 	if (!wpa_s->driver->enable_receive_sa)
964 		return -1;
965 	return wpa_s->driver->enable_receive_sa(wpa_s->drv_priv, sa);
966 }
967 
wpa_drv_disable_receive_sa(struct wpa_supplicant * wpa_s,struct receive_sa * sa)968 static inline int wpa_drv_disable_receive_sa(struct wpa_supplicant *wpa_s,
969 					     struct receive_sa *sa)
970 {
971 	if (!wpa_s->driver->disable_receive_sa)
972 		return -1;
973 	return wpa_s->driver->disable_receive_sa(wpa_s->drv_priv, sa);
974 }
975 
976 static inline int
wpa_drv_create_transmit_sc(struct wpa_supplicant * wpa_s,struct transmit_sc * sc,unsigned int conf_offset)977 wpa_drv_create_transmit_sc(struct wpa_supplicant *wpa_s, struct transmit_sc *sc,
978 			   unsigned int conf_offset)
979 {
980 	if (!wpa_s->driver->create_transmit_sc)
981 		return -1;
982 	return wpa_s->driver->create_transmit_sc(wpa_s->drv_priv, sc,
983 						 conf_offset);
984 }
985 
wpa_drv_delete_transmit_sc(struct wpa_supplicant * wpa_s,struct transmit_sc * sc)986 static inline int wpa_drv_delete_transmit_sc(struct wpa_supplicant *wpa_s,
987 					     struct transmit_sc *sc)
988 {
989 	if (!wpa_s->driver->delete_transmit_sc)
990 		return -1;
991 	return wpa_s->driver->delete_transmit_sc(wpa_s->drv_priv, sc);
992 }
993 
wpa_drv_create_transmit_sa(struct wpa_supplicant * wpa_s,struct transmit_sa * sa)994 static inline int wpa_drv_create_transmit_sa(struct wpa_supplicant *wpa_s,
995 					     struct transmit_sa *sa)
996 {
997 	if (!wpa_s->driver->create_transmit_sa)
998 		return -1;
999 	return wpa_s->driver->create_transmit_sa(wpa_s->drv_priv, sa);
1000 }
1001 
wpa_drv_delete_transmit_sa(struct wpa_supplicant * wpa_s,struct transmit_sa * sa)1002 static inline int wpa_drv_delete_transmit_sa(struct wpa_supplicant *wpa_s,
1003 					     struct transmit_sa *sa)
1004 {
1005 	if (!wpa_s->driver->delete_transmit_sa)
1006 		return -1;
1007 	return wpa_s->driver->delete_transmit_sa(wpa_s->drv_priv, sa);
1008 }
1009 
wpa_drv_enable_transmit_sa(struct wpa_supplicant * wpa_s,struct transmit_sa * sa)1010 static inline int wpa_drv_enable_transmit_sa(struct wpa_supplicant *wpa_s,
1011 					     struct transmit_sa *sa)
1012 {
1013 	if (!wpa_s->driver->enable_transmit_sa)
1014 		return -1;
1015 	return wpa_s->driver->enable_transmit_sa(wpa_s->drv_priv, sa);
1016 }
1017 
wpa_drv_disable_transmit_sa(struct wpa_supplicant * wpa_s,struct transmit_sa * sa)1018 static inline int wpa_drv_disable_transmit_sa(struct wpa_supplicant *wpa_s,
1019 					      struct transmit_sa *sa)
1020 {
1021 	if (!wpa_s->driver->disable_transmit_sa)
1022 		return -1;
1023 	return wpa_s->driver->disable_transmit_sa(wpa_s->drv_priv, sa);
1024 }
1025 #endif /* CONFIG_MACSEC */
1026 
wpa_drv_setband(struct wpa_supplicant * wpa_s,u32 band_mask)1027 static inline int wpa_drv_setband(struct wpa_supplicant *wpa_s,
1028 				  u32 band_mask)
1029 {
1030 	if (!wpa_s->driver->set_band)
1031 		return -1;
1032 	return wpa_s->driver->set_band(wpa_s->drv_priv, band_mask);
1033 }
1034 
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)1035 static inline int wpa_drv_get_pref_freq_list(struct wpa_supplicant *wpa_s,
1036 					     enum wpa_driver_if_type if_type,
1037 					     unsigned int *num,
1038 					     struct weighted_pcl *freq_list)
1039 {
1040 #ifdef CONFIG_TESTING_OPTIONS
1041 	if (wpa_s->get_pref_freq_list_override)
1042 		return wpas_ctrl_iface_get_pref_freq_list_override(
1043 			wpa_s, if_type, num, freq_list);
1044 #endif /* CONFIG_TESTING_OPTIONS */
1045 	if (!wpa_s->driver->get_pref_freq_list)
1046 		return -1;
1047 	return wpa_s->driver->get_pref_freq_list(wpa_s->drv_priv, if_type,
1048 						 num, freq_list);
1049 }
1050 
wpa_drv_set_prob_oper_freq(struct wpa_supplicant * wpa_s,unsigned int freq)1051 static inline int wpa_drv_set_prob_oper_freq(struct wpa_supplicant *wpa_s,
1052 					     unsigned int freq)
1053 {
1054 	if (!wpa_s->driver->set_prob_oper_freq)
1055 		return 0;
1056 	return wpa_s->driver->set_prob_oper_freq(wpa_s->drv_priv, freq);
1057 }
1058 
wpa_drv_abort_scan(struct wpa_supplicant * wpa_s,u64 scan_cookie)1059 static inline int wpa_drv_abort_scan(struct wpa_supplicant *wpa_s,
1060 				     u64 scan_cookie)
1061 {
1062 	if (!wpa_s->driver->abort_scan)
1063 		return -1;
1064 	return wpa_s->driver->abort_scan(wpa_s->drv_priv, scan_cookie);
1065 }
1066 
wpa_drv_configure_frame_filters(struct wpa_supplicant * wpa_s,u32 filters)1067 static inline int wpa_drv_configure_frame_filters(struct wpa_supplicant *wpa_s,
1068 						  u32 filters)
1069 {
1070 	if (!wpa_s->driver->configure_data_frame_filters)
1071 		return -1;
1072 	return wpa_s->driver->configure_data_frame_filters(wpa_s->drv_priv,
1073 							   filters);
1074 }
1075 
wpa_drv_get_ext_capa(struct wpa_supplicant * wpa_s,enum wpa_driver_if_type type)1076 static inline int wpa_drv_get_ext_capa(struct wpa_supplicant *wpa_s,
1077 				       enum wpa_driver_if_type type)
1078 {
1079 	if (!wpa_s->driver->get_ext_capab)
1080 		return -1;
1081 	return wpa_s->driver->get_ext_capab(wpa_s->drv_priv, type,
1082 					    &wpa_s->extended_capa,
1083 					    &wpa_s->extended_capa_mask,
1084 					    &wpa_s->extended_capa_len);
1085 }
1086 
wpa_drv_get_mld_capa(struct wpa_supplicant * wpa_s,enum wpa_driver_if_type type,u16 * mld_eml_capa,u16 * mld_mld_capa)1087 static inline int wpa_drv_get_mld_capa(struct wpa_supplicant *wpa_s,
1088 				       enum wpa_driver_if_type type,
1089 				       u16 *mld_eml_capa, u16 *mld_mld_capa)
1090 {
1091 	if (!wpa_s->driver->get_mld_capab)
1092 		return -1;
1093 	return wpa_s->driver->get_mld_capab(wpa_s->drv_priv, type,
1094 					    mld_eml_capa, mld_mld_capa);
1095 }
1096 
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)1097 static inline int wpa_drv_p2p_lo_start(struct wpa_supplicant *wpa_s,
1098 				       unsigned int channel,
1099 				       unsigned int period,
1100 				       unsigned int interval,
1101 				       unsigned int count,
1102 				       const u8 *device_types,
1103 				       size_t dev_types_len,
1104 				       const u8 *ies, size_t ies_len)
1105 {
1106 	if (!wpa_s->driver->p2p_lo_start)
1107 		return -1;
1108 	return wpa_s->driver->p2p_lo_start(wpa_s->drv_priv, channel, period,
1109 					   interval, count, device_types,
1110 					   dev_types_len, ies, ies_len);
1111 }
1112 
wpa_drv_p2p_lo_stop(struct wpa_supplicant * wpa_s)1113 static inline int wpa_drv_p2p_lo_stop(struct wpa_supplicant *wpa_s)
1114 {
1115 	if (!wpa_s->driver->p2p_lo_stop)
1116 		return -1;
1117 	return wpa_s->driver->p2p_lo_stop(wpa_s->drv_priv);
1118 }
1119 
wpa_drv_set_default_scan_ies(struct wpa_supplicant * wpa_s,const u8 * ies,size_t len)1120 static inline int wpa_drv_set_default_scan_ies(struct wpa_supplicant *wpa_s,
1121 					       const u8 *ies, size_t len)
1122 {
1123 	if (!wpa_s->driver->set_default_scan_ies)
1124 		return -1;
1125 	return wpa_s->driver->set_default_scan_ies(wpa_s->drv_priv, ies, len);
1126 }
1127 
wpa_drv_set_tdls_mode(struct wpa_supplicant * wpa_s,int tdls_external_control)1128 static inline int wpa_drv_set_tdls_mode(struct wpa_supplicant *wpa_s,
1129 					int tdls_external_control)
1130 {
1131 	if (!wpa_s->driver->set_tdls_mode)
1132 		return -1;
1133 	return wpa_s->driver->set_tdls_mode(wpa_s->drv_priv,
1134 					    tdls_external_control);
1135 }
1136 
1137 static inline struct wpa_bss_candidate_info *
wpa_drv_get_bss_trans_status(struct wpa_supplicant * wpa_s,struct wpa_bss_trans_info * params)1138 wpa_drv_get_bss_trans_status(struct wpa_supplicant *wpa_s,
1139 			     struct wpa_bss_trans_info *params)
1140 {
1141 	if (!wpa_s->driver->get_bss_transition_status)
1142 		return NULL;
1143 	return wpa_s->driver->get_bss_transition_status(wpa_s->drv_priv,
1144 							params);
1145 }
1146 
wpa_drv_ignore_assoc_disallow(struct wpa_supplicant * wpa_s,int val)1147 static inline int wpa_drv_ignore_assoc_disallow(struct wpa_supplicant *wpa_s,
1148 						int val)
1149 {
1150 	if (!wpa_s->driver->ignore_assoc_disallow)
1151 		return -1;
1152 	return wpa_s->driver->ignore_assoc_disallow(wpa_s->drv_priv, val);
1153 }
1154 
wpa_drv_set_bssid_tmp_disallow(struct wpa_supplicant * wpa_s,unsigned int num_bssid,const u8 * bssids)1155 static inline int wpa_drv_set_bssid_tmp_disallow(struct wpa_supplicant *wpa_s,
1156 						 unsigned int num_bssid,
1157 						 const u8 *bssids)
1158 {
1159 	if (!wpa_s->driver->set_bssid_tmp_disallow)
1160 		return -1;
1161 	return wpa_s->driver->set_bssid_tmp_disallow(wpa_s->drv_priv, num_bssid,
1162 						     bssids);
1163 }
1164 
wpa_drv_update_connect_params(struct wpa_supplicant * wpa_s,struct wpa_driver_associate_params * params,enum wpa_drv_update_connect_params_mask mask)1165 static inline int wpa_drv_update_connect_params(
1166 	struct wpa_supplicant *wpa_s,
1167 	struct wpa_driver_associate_params *params,
1168 	enum wpa_drv_update_connect_params_mask mask)
1169 {
1170 	if (!wpa_s->driver->update_connect_params)
1171 		return -1;
1172 
1173 	if (params)
1174 		params->freq.link_id = -1;
1175 
1176 	return wpa_s->driver->update_connect_params(wpa_s->drv_priv, params,
1177 						    mask);
1178 }
1179 
1180 static inline int
wpa_drv_send_external_auth_status(struct wpa_supplicant * wpa_s,struct external_auth * params)1181 wpa_drv_send_external_auth_status(struct wpa_supplicant *wpa_s,
1182 				  struct external_auth *params)
1183 {
1184 	if (!wpa_s->driver->send_external_auth_status)
1185 		return -1;
1186 	return wpa_s->driver->send_external_auth_status(wpa_s->drv_priv,
1187 							params);
1188 }
1189 
wpa_drv_set_4addr_mode(struct wpa_supplicant * wpa_s,int val)1190 static inline int wpa_drv_set_4addr_mode(struct wpa_supplicant *wpa_s, int val)
1191 {
1192 	if (!wpa_s->driver->set_4addr_mode)
1193 		return -1;
1194 	return wpa_s->driver->set_4addr_mode(wpa_s->drv_priv,
1195 					     wpa_s->bridge_ifname, val);
1196 }
1197 
wpa_drv_dpp_listen(struct wpa_supplicant * wpa_s,bool enable)1198 static inline int wpa_drv_dpp_listen(struct wpa_supplicant *wpa_s, bool enable)
1199 {
1200 	if (!wpa_s->driver->dpp_listen)
1201 		return 0;
1202 	return wpa_s->driver->dpp_listen(wpa_s->drv_priv, enable);
1203 }
1204 
wpa_drv_send_pasn_resp(struct wpa_supplicant * wpa_s,struct pasn_auth * params)1205 static inline int wpa_drv_send_pasn_resp(struct wpa_supplicant *wpa_s,
1206 					 struct pasn_auth *params)
1207 {
1208 	if (!wpa_s->driver->send_pasn_resp)
1209 		return -1;
1210 	return wpa_s->driver->send_pasn_resp(wpa_s->drv_priv, params);
1211 }
1212 
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)1213 static inline int wpa_drv_set_secure_ranging_ctx(struct wpa_supplicant *wpa_s,
1214 						 const u8 *own_addr,
1215 						 const u8 *peer_addr,
1216 						 u32 cipher, u8 tk_len,
1217 						 const u8 *tk,
1218 						 u8 ltf_keyseed_len,
1219 						 const u8 *ltf_keyseed,
1220 						 u32 action)
1221 {
1222 	struct secure_ranging_params params;
1223 
1224 	/* Configure secure ranging context only to the drivers that support it.
1225 	 */
1226 	if (!wpa_s->driver->set_secure_ranging_ctx)
1227 		return 0;
1228 
1229 	os_memset(&params, 0, sizeof(params));
1230 	params.action = action;
1231 	params.own_addr = own_addr;
1232 	params.peer_addr = peer_addr;
1233 	params.cipher = cipher;
1234 	params.tk_len = tk_len;
1235 	params.tk = tk;
1236 	params.ltf_keyseed_len = ltf_keyseed_len;
1237 	params.ltf_keyseed = ltf_keyseed;
1238 
1239 	return wpa_s->driver->set_secure_ranging_ctx(wpa_s->drv_priv, &params);
1240 }
1241 
1242 static inline int
wpas_drv_get_sta_mlo_info(struct wpa_supplicant * wpa_s,struct driver_sta_mlo_info * mlo_info)1243 wpas_drv_get_sta_mlo_info(struct wpa_supplicant *wpa_s,
1244 			  struct driver_sta_mlo_info *mlo_info)
1245 {
1246 	if (!wpa_s->driver->get_sta_mlo_info)
1247 		return 0;
1248 
1249 	return wpa_s->driver->get_sta_mlo_info(wpa_s->drv_priv, mlo_info);
1250 }
1251 
1252 static inline int
wpas_drv_nan_flush(struct wpa_supplicant * wpa_s)1253 wpas_drv_nan_flush(struct wpa_supplicant *wpa_s)
1254 {
1255 	if (!wpa_s->driver->nan_flush)
1256 		return 0;
1257 
1258 	return wpa_s->driver->nan_flush(wpa_s->drv_priv);
1259 }
1260 
1261 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,const u8 * network_id)1262 wpas_drv_nan_publish(struct wpa_supplicant *wpa_s, const u8 *addr,
1263 		     int publish_id, const char *service_name,
1264 		     const u8 *service_id,
1265 		     enum nan_service_protocol_type srv_proto_type,
1266 		     const struct wpabuf *ssi, const struct wpabuf *elems,
1267 		     struct nan_publish_params *params, const u8 *network_id)
1268 {
1269 	if (!wpa_s->driver->nan_publish)
1270 		return 0;
1271 
1272 	return wpa_s->driver->nan_publish(wpa_s->drv_priv, addr, publish_id,
1273 					  service_name, service_id,
1274 					  srv_proto_type, ssi, elems, params,
1275 					  network_id);
1276 }
1277 
1278 static inline int
wpas_drv_nan_cancel_publish(struct wpa_supplicant * wpa_s,int publish_id)1279 wpas_drv_nan_cancel_publish(struct wpa_supplicant *wpa_s, int publish_id)
1280 {
1281 	if (!wpa_s->driver->nan_cancel_publish)
1282 		return 0;
1283 
1284 	return wpa_s->driver->nan_cancel_publish(wpa_s->drv_priv, publish_id);
1285 }
1286 
1287 static inline int
wpas_drv_nan_update_publish(struct wpa_supplicant * wpa_s,int publish_id,const struct wpabuf * ssi)1288 wpas_drv_nan_update_publish(struct wpa_supplicant *wpa_s, int publish_id,
1289 			    const struct wpabuf *ssi)
1290 {
1291 	if (!wpa_s->driver->nan_update_publish)
1292 		return 0;
1293 
1294 	return wpa_s->driver->nan_update_publish(wpa_s->drv_priv, publish_id,
1295 						 ssi);
1296 }
1297 
1298 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,const u8 * network_id)1299 wpas_drv_nan_subscribe(struct wpa_supplicant *wpa_s, const u8 *addr,
1300 		       int subscribe_id, const char *service_name,
1301 		       const u8 *service_id,
1302 		       enum nan_service_protocol_type srv_proto_type,
1303 		       const struct wpabuf *ssi, const struct wpabuf *elems,
1304 		       struct nan_subscribe_params *params,
1305 		       const u8 *network_id)
1306 {
1307 	if (!wpa_s->driver->nan_subscribe)
1308 		return 0;
1309 
1310 	return wpa_s->driver->nan_subscribe(wpa_s->drv_priv, addr, subscribe_id,
1311 					    service_name, service_id,
1312 					    srv_proto_type, ssi, elems, params,
1313 					    network_id);
1314 }
1315 
1316 static inline int
wpas_drv_nan_cancel_subscribe(struct wpa_supplicant * wpa_s,int subscribe_id)1317 wpas_drv_nan_cancel_subscribe(struct wpa_supplicant *wpa_s, int subscribe_id)
1318 {
1319 	if (!wpa_s->driver->nan_cancel_subscribe)
1320 		return 0;
1321 
1322 	return wpa_s->driver->nan_cancel_subscribe(wpa_s->drv_priv,
1323 						   subscribe_id);
1324 }
1325 
1326 
1327 #ifdef CONFIG_NAN
1328 
wpa_drv_nan_start(struct wpa_supplicant * wpa_s,const struct nan_cluster_config * conf)1329 static inline int wpa_drv_nan_start(struct wpa_supplicant *wpa_s,
1330 				    const struct nan_cluster_config *conf)
1331 {
1332 	if (!wpa_s->driver->nan_start)
1333 		return -1;
1334 	return wpa_s->driver->nan_start(wpa_s->drv_priv, conf);
1335 }
1336 
wpa_drv_nan_stop(struct wpa_supplicant * wpa_s)1337 static inline void wpa_drv_nan_stop(struct wpa_supplicant *wpa_s)
1338 {
1339 	if (!wpa_s->driver->nan_stop)
1340 		return;
1341 	wpa_s->driver->nan_stop(wpa_s->drv_priv);
1342 }
1343 
1344 static inline int
wpa_drv_nan_update_config(struct wpa_supplicant * wpa_s,const struct nan_cluster_config * conf)1345 wpa_drv_nan_update_config(struct wpa_supplicant *wpa_s,
1346 			  const struct nan_cluster_config *conf)
1347 {
1348 	if (!wpa_s->driver->nan_change_config)
1349 		return -1;
1350 	return wpa_s->driver->nan_change_config(wpa_s->drv_priv, conf);
1351 }
1352 
wpa_drv_nan_config_schedule(struct wpa_supplicant * wpa_s,u8 map_id,struct nan_schedule_config * conf)1353 static inline int wpa_drv_nan_config_schedule(struct wpa_supplicant *wpa_s,
1354 					      u8 map_id,
1355 					      struct nan_schedule_config *conf)
1356 {
1357 	if (!wpa_s->driver->nan_config_schedule)
1358 		return -1;
1359 	return wpa_s->driver->nan_config_schedule(wpa_s->drv_priv, map_id,
1360 						  conf);
1361 }
1362 
1363 static inline int
wpa_drv_nan_config_peer_schedule(struct wpa_supplicant * wpa_s,const u8 * peer,u16 cdw,u8 sequence_id,u16 max_chan_switch_time,const struct wpabuf * ulw,struct nan_peer_schedule_config * sched)1364 wpa_drv_nan_config_peer_schedule(struct wpa_supplicant *wpa_s, const u8 *peer,
1365 				 u16 cdw, u8 sequence_id,
1366 				 u16 max_chan_switch_time,
1367 				 const struct wpabuf *ulw,
1368 				 struct nan_peer_schedule_config *sched)
1369 {
1370 	if (!wpa_s->driver->nan_config_peer_schedule)
1371 		return -1;
1372 	return wpa_s->driver->nan_config_peer_schedule(wpa_s->drv_priv, peer,
1373 						       cdw, sequence_id,
1374 						       max_chan_switch_time,
1375 						       ulw, sched);
1376 }
1377 
wpa_drv_get_inact_sec(struct wpa_supplicant * wpa_s,const u8 * addr)1378 static inline int wpa_drv_get_inact_sec(struct wpa_supplicant *wpa_s,
1379 					const u8 *addr)
1380 {
1381 	if (!wpa_s->driver->get_inact_sec)
1382 		return -1;
1383 
1384 	return wpa_s->driver->get_inact_sec(wpa_s->drv_priv, addr);
1385 }
1386 
1387 #endif /* CONFIG_NAN */
1388 
1389 #endif /* DRIVER_I_H */
1390