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