Updated through tag hostap_2_5 from git://w1.fi/hostap.git
[mech_eap.git] / libeap / wpa_supplicant / driver_i.h
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 "drivers/driver.h"
13
14 /* driver_ops */
15 static inline void * wpa_drv_init(struct wpa_supplicant *wpa_s,
16                                   const char *ifname)
17 {
18         if (wpa_s->driver->init2)
19                 return wpa_s->driver->init2(wpa_s, ifname,
20                                             wpa_s->global_drv_priv);
21         if (wpa_s->driver->init) {
22                 return wpa_s->driver->init(wpa_s, ifname);
23         }
24         return NULL;
25 }
26
27 static inline void wpa_drv_deinit(struct wpa_supplicant *wpa_s)
28 {
29         if (wpa_s->driver->deinit)
30                 wpa_s->driver->deinit(wpa_s->drv_priv);
31 }
32
33 static inline int wpa_drv_set_param(struct wpa_supplicant *wpa_s,
34                                     const char *param)
35 {
36         if (wpa_s->driver->set_param)
37                 return wpa_s->driver->set_param(wpa_s->drv_priv, param);
38         return 0;
39 }
40
41 static inline int wpa_drv_set_countermeasures(struct wpa_supplicant *wpa_s,
42                                               int enabled)
43 {
44         if (wpa_s->driver->set_countermeasures) {
45                 return wpa_s->driver->set_countermeasures(wpa_s->drv_priv,
46                                                           enabled);
47         }
48         return -1;
49 }
50
51 static inline int wpa_drv_authenticate(struct wpa_supplicant *wpa_s,
52                                        struct wpa_driver_auth_params *params)
53 {
54         if (wpa_s->driver->authenticate)
55                 return wpa_s->driver->authenticate(wpa_s->drv_priv, params);
56         return -1;
57 }
58
59 static inline int wpa_drv_associate(struct wpa_supplicant *wpa_s,
60                                     struct wpa_driver_associate_params *params)
61 {
62         if (wpa_s->driver->associate) {
63                 return wpa_s->driver->associate(wpa_s->drv_priv, params);
64         }
65         return -1;
66 }
67
68 static inline int wpa_drv_init_mesh(struct wpa_supplicant *wpa_s)
69 {
70         if (wpa_s->driver->init_mesh)
71                 return wpa_s->driver->init_mesh(wpa_s->drv_priv);
72         return -1;
73 }
74
75 static inline int wpa_drv_join_mesh(struct wpa_supplicant *wpa_s,
76                                     struct wpa_driver_mesh_join_params *params)
77 {
78         if (wpa_s->driver->join_mesh)
79                 return wpa_s->driver->join_mesh(wpa_s->drv_priv, params);
80         return -1;
81 }
82
83 static inline int wpa_drv_leave_mesh(struct wpa_supplicant *wpa_s)
84 {
85         if (wpa_s->driver->leave_mesh)
86                 return wpa_s->driver->leave_mesh(wpa_s->drv_priv);
87         return -1;
88 }
89
90 static inline int wpa_drv_scan(struct wpa_supplicant *wpa_s,
91                                struct wpa_driver_scan_params *params)
92 {
93 #ifdef CONFIG_TESTING_OPTIONS
94         if (wpa_s->test_failure == WPAS_TEST_FAILURE_SCAN_TRIGGER)
95                 return -EBUSY;
96 #endif /* CONFIG_TESTING_OPTIONS */
97         if (wpa_s->driver->scan2)
98                 return wpa_s->driver->scan2(wpa_s->drv_priv, params);
99         return -1;
100 }
101
102 static inline int wpa_drv_sched_scan(struct wpa_supplicant *wpa_s,
103                                      struct wpa_driver_scan_params *params,
104                                      u32 interval)
105 {
106         if (wpa_s->driver->sched_scan)
107                 return wpa_s->driver->sched_scan(wpa_s->drv_priv,
108                                                  params, interval);
109         return -1;
110 }
111
112 static inline int wpa_drv_stop_sched_scan(struct wpa_supplicant *wpa_s)
113 {
114         if (wpa_s->driver->stop_sched_scan)
115                 return wpa_s->driver->stop_sched_scan(wpa_s->drv_priv);
116         return -1;
117 }
118
119 static inline struct wpa_scan_results * wpa_drv_get_scan_results2(
120         struct wpa_supplicant *wpa_s)
121 {
122         if (wpa_s->driver->get_scan_results2)
123                 return wpa_s->driver->get_scan_results2(wpa_s->drv_priv);
124         return NULL;
125 }
126
127 static inline int wpa_drv_get_bssid(struct wpa_supplicant *wpa_s, u8 *bssid)
128 {
129         if (wpa_s->driver->get_bssid) {
130                 return wpa_s->driver->get_bssid(wpa_s->drv_priv, bssid);
131         }
132         return -1;
133 }
134
135 static inline int wpa_drv_get_ssid(struct wpa_supplicant *wpa_s, u8 *ssid)
136 {
137         if (wpa_s->driver->get_ssid) {
138                 return wpa_s->driver->get_ssid(wpa_s->drv_priv, ssid);
139         }
140         return -1;
141 }
142
143 static inline int wpa_drv_set_key(struct wpa_supplicant *wpa_s,
144                                   enum wpa_alg alg, const u8 *addr,
145                                   int key_idx, int set_tx,
146                                   const u8 *seq, size_t seq_len,
147                                   const u8 *key, size_t key_len)
148 {
149         if (alg != WPA_ALG_NONE) {
150                 if (key_idx >= 0 && key_idx <= 6)
151                         wpa_s->keys_cleared &= ~BIT(key_idx);
152                 else
153                         wpa_s->keys_cleared = 0;
154         }
155         if (wpa_s->driver->set_key) {
156                 return wpa_s->driver->set_key(wpa_s->ifname, wpa_s->drv_priv,
157                                               alg, addr, key_idx, set_tx,
158                                               seq, seq_len, key, key_len);
159         }
160         return -1;
161 }
162
163 static inline int wpa_drv_sta_deauth(struct wpa_supplicant *wpa_s,
164                                      const u8 *addr, int reason_code)
165 {
166         if (wpa_s->driver->sta_deauth) {
167                 return wpa_s->driver->sta_deauth(wpa_s->drv_priv,
168                                                  wpa_s->own_addr, addr,
169                                                  reason_code);
170         }
171         return -1;
172 }
173
174 static inline int wpa_drv_deauthenticate(struct wpa_supplicant *wpa_s,
175                                          const u8 *addr, int reason_code)
176 {
177         if (wpa_s->driver->deauthenticate) {
178                 return wpa_s->driver->deauthenticate(wpa_s->drv_priv, addr,
179                                                      reason_code);
180         }
181         return -1;
182 }
183
184 static inline int wpa_drv_add_pmkid(struct wpa_supplicant *wpa_s,
185                                     const u8 *bssid, const u8 *pmkid)
186 {
187         if (wpa_s->driver->add_pmkid) {
188                 return wpa_s->driver->add_pmkid(wpa_s->drv_priv, bssid, pmkid);
189         }
190         return -1;
191 }
192
193 static inline int wpa_drv_remove_pmkid(struct wpa_supplicant *wpa_s,
194                                        const u8 *bssid, const u8 *pmkid)
195 {
196         if (wpa_s->driver->remove_pmkid) {
197                 return wpa_s->driver->remove_pmkid(wpa_s->drv_priv, bssid,
198                                                    pmkid);
199         }
200         return -1;
201 }
202
203 static inline int wpa_drv_flush_pmkid(struct wpa_supplicant *wpa_s)
204 {
205         if (wpa_s->driver->flush_pmkid) {
206                 return wpa_s->driver->flush_pmkid(wpa_s->drv_priv);
207         }
208         return -1;
209 }
210
211 static inline int wpa_drv_get_capa(struct wpa_supplicant *wpa_s,
212                                    struct wpa_driver_capa *capa)
213 {
214         if (wpa_s->driver->get_capa) {
215                 return wpa_s->driver->get_capa(wpa_s->drv_priv, capa);
216         }
217         return -1;
218 }
219
220 static inline void wpa_drv_poll(struct wpa_supplicant *wpa_s)
221 {
222         if (wpa_s->driver->poll) {
223                 wpa_s->driver->poll(wpa_s->drv_priv);
224         }
225 }
226
227 static inline const char * wpa_drv_get_ifname(struct wpa_supplicant *wpa_s)
228 {
229         if (wpa_s->driver->get_ifname) {
230                 return wpa_s->driver->get_ifname(wpa_s->drv_priv);
231         }
232         return NULL;
233 }
234
235 static inline const char *
236 wpa_driver_get_radio_name(struct wpa_supplicant *wpa_s)
237 {
238         if (wpa_s->driver->get_radio_name)
239                 return wpa_s->driver->get_radio_name(wpa_s->drv_priv);
240         return NULL;
241 }
242
243 static inline const u8 * wpa_drv_get_mac_addr(struct wpa_supplicant *wpa_s)
244 {
245         if (wpa_s->driver->get_mac_addr) {
246                 return wpa_s->driver->get_mac_addr(wpa_s->drv_priv);
247         }
248         return NULL;
249 }
250
251 static inline int wpa_drv_set_operstate(struct wpa_supplicant *wpa_s,
252                                         int state)
253 {
254         if (wpa_s->driver->set_operstate)
255                 return wpa_s->driver->set_operstate(wpa_s->drv_priv, state);
256         return 0;
257 }
258
259 static inline int wpa_drv_mlme_setprotection(struct wpa_supplicant *wpa_s,
260                                              const u8 *addr, int protect_type,
261                                              int key_type)
262 {
263         if (wpa_s->driver->mlme_setprotection)
264                 return wpa_s->driver->mlme_setprotection(wpa_s->drv_priv, addr,
265                                                          protect_type,
266                                                          key_type);
267         return 0;
268 }
269
270 static inline struct hostapd_hw_modes *
271 wpa_drv_get_hw_feature_data(struct wpa_supplicant *wpa_s, u16 *num_modes,
272                             u16 *flags)
273 {
274         if (wpa_s->driver->get_hw_feature_data)
275                 return wpa_s->driver->get_hw_feature_data(wpa_s->drv_priv,
276                                                           num_modes, flags);
277         return NULL;
278 }
279
280 static inline int wpa_drv_set_country(struct wpa_supplicant *wpa_s,
281                                       const char *alpha2)
282 {
283         if (wpa_s->driver->set_country)
284                 return wpa_s->driver->set_country(wpa_s->drv_priv, alpha2);
285         return 0;
286 }
287
288 static inline int wpa_drv_send_mlme(struct wpa_supplicant *wpa_s,
289                                     const u8 *data, size_t data_len, int noack,
290                                     unsigned int freq)
291 {
292         if (wpa_s->driver->send_mlme)
293                 return wpa_s->driver->send_mlme(wpa_s->drv_priv,
294                                                 data, data_len, noack,
295                                                 freq);
296         return -1;
297 }
298
299 static inline int wpa_drv_update_ft_ies(struct wpa_supplicant *wpa_s,
300                                         const u8 *md,
301                                         const u8 *ies, size_t ies_len)
302 {
303         if (wpa_s->driver->update_ft_ies)
304                 return wpa_s->driver->update_ft_ies(wpa_s->drv_priv, md,
305                                                     ies, ies_len);
306         return -1;
307 }
308
309 static inline int wpa_drv_set_ap(struct wpa_supplicant *wpa_s,
310                                  struct wpa_driver_ap_params *params)
311 {
312         if (wpa_s->driver->set_ap)
313                 return wpa_s->driver->set_ap(wpa_s->drv_priv, params);
314         return -1;
315 }
316
317 static inline int wpa_drv_sta_add(struct wpa_supplicant *wpa_s,
318                                   struct hostapd_sta_add_params *params)
319 {
320         if (wpa_s->driver->sta_add)
321                 return wpa_s->driver->sta_add(wpa_s->drv_priv, params);
322         return -1;
323 }
324
325 static inline int wpa_drv_sta_remove(struct wpa_supplicant *wpa_s,
326                                      const u8 *addr)
327 {
328         if (wpa_s->driver->sta_remove)
329                 return wpa_s->driver->sta_remove(wpa_s->drv_priv, addr);
330         return -1;
331 }
332
333 static inline int wpa_drv_hapd_send_eapol(struct wpa_supplicant *wpa_s,
334                                           const u8 *addr, const u8 *data,
335                                           size_t data_len, int encrypt,
336                                           const u8 *own_addr, u32 flags)
337 {
338         if (wpa_s->driver->hapd_send_eapol)
339                 return wpa_s->driver->hapd_send_eapol(wpa_s->drv_priv, addr,
340                                                       data, data_len, encrypt,
341                                                       own_addr, flags);
342         return -1;
343 }
344
345 static inline int wpa_drv_sta_set_flags(struct wpa_supplicant *wpa_s,
346                                         const u8 *addr, int total_flags,
347                                         int flags_or, int flags_and)
348 {
349         if (wpa_s->driver->sta_set_flags)
350                 return wpa_s->driver->sta_set_flags(wpa_s->drv_priv, addr,
351                                                     total_flags, flags_or,
352                                                     flags_and);
353         return -1;
354 }
355
356 static inline int wpa_drv_set_supp_port(struct wpa_supplicant *wpa_s,
357                                         int authorized)
358 {
359         if (wpa_s->driver->set_supp_port) {
360                 return wpa_s->driver->set_supp_port(wpa_s->drv_priv,
361                                                     authorized);
362         }
363         return 0;
364 }
365
366 static inline int wpa_drv_send_action(struct wpa_supplicant *wpa_s,
367                                       unsigned int freq,
368                                       unsigned int wait,
369                                       const u8 *dst, const u8 *src,
370                                       const u8 *bssid,
371                                       const u8 *data, size_t data_len,
372                                       int no_cck)
373 {
374         if (wpa_s->driver->send_action)
375                 return wpa_s->driver->send_action(wpa_s->drv_priv, freq,
376                                                   wait, dst, src, bssid,
377                                                   data, data_len, no_cck);
378         return -1;
379 }
380
381 static inline void wpa_drv_send_action_cancel_wait(struct wpa_supplicant *wpa_s)
382 {
383         if (wpa_s->driver->send_action_cancel_wait)
384                 wpa_s->driver->send_action_cancel_wait(wpa_s->drv_priv);
385 }
386
387 static inline int wpa_drv_set_freq(struct wpa_supplicant *wpa_s,
388                                    struct hostapd_freq_params *freq)
389 {
390         if (wpa_s->driver->set_freq)
391                 return wpa_s->driver->set_freq(wpa_s->drv_priv, freq);
392         return -1;
393 }
394
395 static inline int wpa_drv_if_add(struct wpa_supplicant *wpa_s,
396                                  enum wpa_driver_if_type type,
397                                  const char *ifname, const u8 *addr,
398                                  void *bss_ctx, char *force_ifname,
399                                  u8 *if_addr, const char *bridge)
400 {
401         if (wpa_s->driver->if_add)
402                 return wpa_s->driver->if_add(wpa_s->drv_priv, type, ifname,
403                                              addr, bss_ctx, NULL, force_ifname,
404                                              if_addr, bridge, 0);
405         return -1;
406 }
407
408 static inline int wpa_drv_if_remove(struct wpa_supplicant *wpa_s,
409                                     enum wpa_driver_if_type type,
410                                     const char *ifname)
411 {
412         if (wpa_s->driver->if_remove)
413                 return wpa_s->driver->if_remove(wpa_s->drv_priv, type, ifname);
414         return -1;
415 }
416
417 static inline int wpa_drv_remain_on_channel(struct wpa_supplicant *wpa_s,
418                                             unsigned int freq,
419                                             unsigned int duration)
420 {
421         if (wpa_s->driver->remain_on_channel)
422                 return wpa_s->driver->remain_on_channel(wpa_s->drv_priv, freq,
423                                                         duration);
424         return -1;
425 }
426
427 static inline int wpa_drv_cancel_remain_on_channel(
428         struct wpa_supplicant *wpa_s)
429 {
430         if (wpa_s->driver->cancel_remain_on_channel)
431                 return wpa_s->driver->cancel_remain_on_channel(
432                         wpa_s->drv_priv);
433         return -1;
434 }
435
436 static inline int wpa_drv_probe_req_report(struct wpa_supplicant *wpa_s,
437                                            int report)
438 {
439         if (wpa_s->driver->probe_req_report)
440                 return wpa_s->driver->probe_req_report(wpa_s->drv_priv,
441                                                        report);
442         return -1;
443 }
444
445 static inline int wpa_drv_deinit_ap(struct wpa_supplicant *wpa_s)
446 {
447         if (wpa_s->driver->deinit_ap)
448                 return wpa_s->driver->deinit_ap(wpa_s->drv_priv);
449         return 0;
450 }
451
452 static inline int wpa_drv_deinit_p2p_cli(struct wpa_supplicant *wpa_s)
453 {
454         if (wpa_s->driver->deinit_p2p_cli)
455                 return wpa_s->driver->deinit_p2p_cli(wpa_s->drv_priv);
456         return 0;
457 }
458
459 static inline void wpa_drv_suspend(struct wpa_supplicant *wpa_s)
460 {
461         if (wpa_s->driver->suspend)
462                 wpa_s->driver->suspend(wpa_s->drv_priv);
463 }
464
465 static inline void wpa_drv_resume(struct wpa_supplicant *wpa_s)
466 {
467         if (wpa_s->driver->resume)
468                 wpa_s->driver->resume(wpa_s->drv_priv);
469 }
470
471 static inline int wpa_drv_signal_monitor(struct wpa_supplicant *wpa_s,
472                                          int threshold, int hysteresis)
473 {
474         if (wpa_s->driver->signal_monitor)
475                 return wpa_s->driver->signal_monitor(wpa_s->drv_priv,
476                                                      threshold, hysteresis);
477         return -1;
478 }
479
480 static inline int wpa_drv_signal_poll(struct wpa_supplicant *wpa_s,
481                                       struct wpa_signal_info *si)
482 {
483         if (wpa_s->driver->signal_poll)
484                 return wpa_s->driver->signal_poll(wpa_s->drv_priv, si);
485         return -1;
486 }
487
488 static inline int wpa_drv_pktcnt_poll(struct wpa_supplicant *wpa_s,
489                                       struct hostap_sta_driver_data *sta)
490 {
491         if (wpa_s->driver->read_sta_data)
492                 return wpa_s->driver->read_sta_data(wpa_s->drv_priv, sta,
493                                                     wpa_s->bssid);
494         return -1;
495 }
496
497 static inline int wpa_drv_set_ap_wps_ie(struct wpa_supplicant *wpa_s,
498                                         const struct wpabuf *beacon,
499                                         const struct wpabuf *proberesp,
500                                         const struct wpabuf *assocresp)
501 {
502         if (!wpa_s->driver->set_ap_wps_ie)
503                 return -1;
504         return wpa_s->driver->set_ap_wps_ie(wpa_s->drv_priv, beacon,
505                                             proberesp, assocresp);
506 }
507
508 static inline int wpa_drv_get_noa(struct wpa_supplicant *wpa_s,
509                                   u8 *buf, size_t buf_len)
510 {
511         if (!wpa_s->driver->get_noa)
512                 return -1;
513         return wpa_s->driver->get_noa(wpa_s->drv_priv, buf, buf_len);
514 }
515
516 static inline int wpa_drv_set_p2p_powersave(struct wpa_supplicant *wpa_s,
517                                             int legacy_ps, int opp_ps,
518                                             int ctwindow)
519 {
520         if (!wpa_s->driver->set_p2p_powersave)
521                 return -1;
522         return wpa_s->driver->set_p2p_powersave(wpa_s->drv_priv, legacy_ps,
523                                                 opp_ps, ctwindow);
524 }
525
526 static inline int wpa_drv_ampdu(struct wpa_supplicant *wpa_s, int ampdu)
527 {
528         if (!wpa_s->driver->ampdu)
529                 return -1;
530         return wpa_s->driver->ampdu(wpa_s->drv_priv, ampdu);
531 }
532
533 static inline int wpa_drv_send_tdls_mgmt(struct wpa_supplicant *wpa_s,
534                                          const u8 *dst, u8 action_code,
535                                          u8 dialog_token, u16 status_code,
536                                          u32 peer_capab, int initiator,
537                                          const u8 *buf, size_t len)
538 {
539         if (wpa_s->driver->send_tdls_mgmt) {
540                 return wpa_s->driver->send_tdls_mgmt(wpa_s->drv_priv, dst,
541                                                      action_code, dialog_token,
542                                                      status_code, peer_capab,
543                                                      initiator, buf, len);
544         }
545         return -1;
546 }
547
548 static inline int wpa_drv_tdls_oper(struct wpa_supplicant *wpa_s,
549                                     enum tdls_oper oper, const u8 *peer)
550 {
551         if (!wpa_s->driver->tdls_oper)
552                 return -1;
553         return wpa_s->driver->tdls_oper(wpa_s->drv_priv, oper, peer);
554 }
555
556 #ifdef ANDROID
557 static inline int wpa_drv_driver_cmd(struct wpa_supplicant *wpa_s,
558                                      char *cmd, char *buf, size_t buf_len)
559 {
560         if (!wpa_s->driver->driver_cmd)
561                 return -1;
562         return wpa_s->driver->driver_cmd(wpa_s->drv_priv, cmd, buf, buf_len);
563 }
564 #endif /* ANDROID */
565
566 static inline void wpa_drv_set_rekey_info(struct wpa_supplicant *wpa_s,
567                                           const u8 *kek, size_t kek_len,
568                                           const u8 *kck, size_t kck_len,
569                                           const u8 *replay_ctr)
570 {
571         if (!wpa_s->driver->set_rekey_info)
572                 return;
573         wpa_s->driver->set_rekey_info(wpa_s->drv_priv, kek, kek_len,
574                                       kck, kck_len, replay_ctr);
575 }
576
577 static inline int wpa_drv_radio_disable(struct wpa_supplicant *wpa_s,
578                                         int disabled)
579 {
580         if (!wpa_s->driver->radio_disable)
581                 return -1;
582         return wpa_s->driver->radio_disable(wpa_s->drv_priv, disabled);
583 }
584
585 static inline int wpa_drv_switch_channel(struct wpa_supplicant *wpa_s,
586                                          struct csa_settings *settings)
587 {
588         if (!wpa_s->driver->switch_channel)
589                 return -1;
590         return wpa_s->driver->switch_channel(wpa_s->drv_priv, settings);
591 }
592
593 static inline int wpa_drv_add_ts(struct wpa_supplicant *wpa_s, u8 tsid,
594                                  const u8 *address, u8 user_priority,
595                                  u16 admitted_time)
596 {
597         if (!wpa_s->driver->add_tx_ts)
598                 return -1;
599         return wpa_s->driver->add_tx_ts(wpa_s->drv_priv, tsid, address,
600                                         user_priority, admitted_time);
601 }
602
603 static inline int wpa_drv_del_ts(struct wpa_supplicant *wpa_s, u8 tid,
604                                  const u8 *address)
605 {
606         if (!wpa_s->driver->del_tx_ts)
607                 return -1;
608         return wpa_s->driver->del_tx_ts(wpa_s->drv_priv, tid, address);
609 }
610
611 static inline int wpa_drv_tdls_enable_channel_switch(
612         struct wpa_supplicant *wpa_s, const u8 *addr, u8 oper_class,
613         const struct hostapd_freq_params *freq_params)
614 {
615         if (!wpa_s->driver->tdls_enable_channel_switch)
616                 return -1;
617         return wpa_s->driver->tdls_enable_channel_switch(wpa_s->drv_priv, addr,
618                                                          oper_class,
619                                                          freq_params);
620 }
621
622 static inline int
623 wpa_drv_tdls_disable_channel_switch(struct wpa_supplicant *wpa_s,
624                                     const u8 *addr)
625 {
626         if (!wpa_s->driver->tdls_disable_channel_switch)
627                 return -1;
628         return wpa_s->driver->tdls_disable_channel_switch(wpa_s->drv_priv,
629                                                           addr);
630 }
631
632 static inline int wpa_drv_wnm_oper(struct wpa_supplicant *wpa_s,
633                                    enum wnm_oper oper, const u8 *peer,
634                                    u8 *buf, u16 *buf_len)
635 {
636         if (!wpa_s->driver->wnm_oper)
637                 return -1;
638         return wpa_s->driver->wnm_oper(wpa_s->drv_priv, oper, peer, buf,
639                                        buf_len);
640 }
641
642 static inline int wpa_drv_status(struct wpa_supplicant *wpa_s,
643                                  char *buf, size_t buflen)
644 {
645         if (!wpa_s->driver->status)
646                 return -1;
647         return wpa_s->driver->status(wpa_s->drv_priv, buf, buflen);
648 }
649
650 static inline int wpa_drv_set_qos_map(struct wpa_supplicant *wpa_s,
651                                       const u8 *qos_map_set, u8 qos_map_set_len)
652 {
653         if (!wpa_s->driver->set_qos_map)
654                 return -1;
655         return wpa_s->driver->set_qos_map(wpa_s->drv_priv, qos_map_set,
656                                           qos_map_set_len);
657 }
658
659 static inline int wpa_drv_wowlan(struct wpa_supplicant *wpa_s,
660                                  const struct wowlan_triggers *triggers)
661 {
662         if (!wpa_s->driver->set_wowlan)
663                 return -1;
664         return wpa_s->driver->set_wowlan(wpa_s->drv_priv, triggers);
665 }
666
667 static inline int wpa_drv_vendor_cmd(struct wpa_supplicant *wpa_s,
668                                      int vendor_id, int subcmd, const u8 *data,
669                                      size_t data_len, struct wpabuf *buf)
670 {
671         if (!wpa_s->driver->vendor_cmd)
672                 return -1;
673         return wpa_s->driver->vendor_cmd(wpa_s->drv_priv, vendor_id, subcmd,
674                                          data, data_len, buf);
675 }
676
677 static inline int wpa_drv_roaming(struct wpa_supplicant *wpa_s, int allowed,
678                                   const u8 *bssid)
679 {
680         if (!wpa_s->driver->roaming)
681                 return -1;
682         return wpa_s->driver->roaming(wpa_s->drv_priv, allowed, bssid);
683 }
684
685 static inline int wpa_drv_set_mac_addr(struct wpa_supplicant *wpa_s,
686                                        const u8 *addr)
687 {
688         if (!wpa_s->driver->set_mac_addr)
689                 return -1;
690         return wpa_s->driver->set_mac_addr(wpa_s->drv_priv, addr);
691 }
692
693
694 #ifdef CONFIG_MACSEC
695
696 static inline int wpa_drv_macsec_init(struct wpa_supplicant *wpa_s,
697                                       struct macsec_init_params *params)
698 {
699         if (!wpa_s->driver->macsec_init)
700                 return -1;
701         return wpa_s->driver->macsec_init(wpa_s->drv_priv, params);
702 }
703
704 static inline int wpa_drv_macsec_deinit(struct wpa_supplicant *wpa_s)
705 {
706         if (!wpa_s->driver->macsec_deinit)
707                 return -1;
708         return wpa_s->driver->macsec_deinit(wpa_s->drv_priv);
709 }
710
711 static inline int wpa_drv_enable_protect_frames(struct wpa_supplicant *wpa_s,
712                                                 Boolean enabled)
713 {
714         if (!wpa_s->driver->enable_protect_frames)
715                 return -1;
716         return wpa_s->driver->enable_protect_frames(wpa_s->drv_priv, enabled);
717 }
718
719 static inline int wpa_drv_set_replay_protect(struct wpa_supplicant *wpa_s,
720                                              Boolean enabled, u32 window)
721 {
722         if (!wpa_s->driver->set_replay_protect)
723                 return -1;
724         return wpa_s->driver->set_replay_protect(wpa_s->drv_priv, enabled,
725                                                  window);
726 }
727
728 static inline int wpa_drv_set_current_cipher_suite(struct wpa_supplicant *wpa_s,
729                                                    const u8 *cs, size_t cs_len)
730 {
731         if (!wpa_s->driver->set_current_cipher_suite)
732                 return -1;
733         return wpa_s->driver->set_current_cipher_suite(wpa_s->drv_priv, cs,
734                                                        cs_len);
735 }
736
737 static inline int wpa_drv_enable_controlled_port(struct wpa_supplicant *wpa_s,
738                                                  Boolean enabled)
739 {
740         if (!wpa_s->driver->enable_controlled_port)
741                 return -1;
742         return wpa_s->driver->enable_controlled_port(wpa_s->drv_priv, enabled);
743 }
744
745 static inline int wpa_drv_get_receive_lowest_pn(struct wpa_supplicant *wpa_s,
746                                                 u32 channel, u8 an,
747                                                 u32 *lowest_pn)
748 {
749         if (!wpa_s->driver->get_receive_lowest_pn)
750                 return -1;
751         return wpa_s->driver->get_receive_lowest_pn(wpa_s->drv_priv, channel,
752                                                     an, lowest_pn);
753 }
754
755 static inline int wpa_drv_get_transmit_next_pn(struct wpa_supplicant *wpa_s,
756                                                 u32 channel, u8 an,
757                                                 u32 *next_pn)
758 {
759         if (!wpa_s->driver->get_transmit_next_pn)
760                 return -1;
761         return wpa_s->driver->get_transmit_next_pn(wpa_s->drv_priv, channel,
762                                                     an, next_pn);
763 }
764
765 static inline int wpa_drv_set_transmit_next_pn(struct wpa_supplicant *wpa_s,
766                                                 u32 channel, u8 an,
767                                                 u32 next_pn)
768 {
769         if (!wpa_s->driver->set_transmit_next_pn)
770                 return -1;
771         return wpa_s->driver->set_transmit_next_pn(wpa_s->drv_priv, channel,
772                                                     an, next_pn);
773 }
774
775 static inline int wpa_drv_get_available_receive_sc(struct wpa_supplicant *wpa_s,
776                                                    u32 *channel)
777 {
778         if (!wpa_s->driver->get_available_receive_sc)
779                 return -1;
780         return wpa_s->driver->get_available_receive_sc(wpa_s->drv_priv,
781                                                        channel);
782 }
783
784 static inline int
785 wpa_drv_create_receive_sc(struct wpa_supplicant *wpa_s, u32 channel,
786                           const u8 *sci_addr, u16 sci_port,
787                           unsigned int conf_offset, int validation)
788 {
789         if (!wpa_s->driver->create_receive_sc)
790                 return -1;
791         return wpa_s->driver->create_receive_sc(wpa_s->drv_priv, channel,
792                                                 sci_addr, sci_port, conf_offset,
793                                                 validation);
794 }
795
796 static inline int wpa_drv_delete_receive_sc(struct wpa_supplicant *wpa_s,
797                                             u32 channel)
798 {
799         if (!wpa_s->driver->delete_receive_sc)
800                 return -1;
801         return wpa_s->driver->delete_receive_sc(wpa_s->drv_priv, channel);
802 }
803
804 static inline int wpa_drv_create_receive_sa(struct wpa_supplicant *wpa_s,
805                                             u32 channel, u8 an,
806                                             u32 lowest_pn, const u8 *sak)
807 {
808         if (!wpa_s->driver->create_receive_sa)
809                 return -1;
810         return wpa_s->driver->create_receive_sa(wpa_s->drv_priv, channel, an,
811                                                 lowest_pn, sak);
812 }
813
814 static inline int wpa_drv_enable_receive_sa(struct wpa_supplicant *wpa_s,
815                                             u32 channel, u8 an)
816 {
817         if (!wpa_s->driver->enable_receive_sa)
818                 return -1;
819         return wpa_s->driver->enable_receive_sa(wpa_s->drv_priv, channel, an);
820 }
821
822 static inline int wpa_drv_disable_receive_sa(struct wpa_supplicant *wpa_s,
823                                              u32 channel, u8 an)
824 {
825         if (!wpa_s->driver->disable_receive_sa)
826                 return -1;
827         return wpa_s->driver->disable_receive_sa(wpa_s->drv_priv, channel, an);
828 }
829
830 static inline int
831 wpa_drv_get_available_transmit_sc(struct wpa_supplicant *wpa_s, u32 *channel)
832 {
833         if (!wpa_s->driver->get_available_transmit_sc)
834                 return -1;
835         return wpa_s->driver->get_available_transmit_sc(wpa_s->drv_priv,
836                                                         channel);
837 }
838
839 static inline int
840 wpa_drv_create_transmit_sc(struct wpa_supplicant *wpa_s, u32 channel,
841                            const u8 *sci_addr, u16 sci_port,
842                            unsigned int conf_offset)
843 {
844         if (!wpa_s->driver->create_transmit_sc)
845                 return -1;
846         return wpa_s->driver->create_transmit_sc(wpa_s->drv_priv, channel,
847                                                  sci_addr, sci_port,
848                                                  conf_offset);
849 }
850
851 static inline int wpa_drv_delete_transmit_sc(struct wpa_supplicant *wpa_s,
852                                              u32 channel)
853 {
854         if (!wpa_s->driver->delete_transmit_sc)
855                 return -1;
856         return wpa_s->driver->delete_transmit_sc(wpa_s->drv_priv, channel);
857 }
858
859 static inline int wpa_drv_create_transmit_sa(struct wpa_supplicant *wpa_s,
860                                              u32 channel, u8 an,
861                                              u32 next_pn,
862                                              Boolean confidentiality,
863                                              const u8 *sak)
864 {
865         if (!wpa_s->driver->create_transmit_sa)
866                 return -1;
867         return wpa_s->driver->create_transmit_sa(wpa_s->drv_priv, channel, an,
868                                                  next_pn, confidentiality, sak);
869 }
870
871 static inline int wpa_drv_enable_transmit_sa(struct wpa_supplicant *wpa_s,
872                                              u32 channel, u8 an)
873 {
874         if (!wpa_s->driver->enable_transmit_sa)
875                 return -1;
876         return wpa_s->driver->enable_transmit_sa(wpa_s->drv_priv, channel, an);
877 }
878
879 static inline int wpa_drv_disable_transmit_sa(struct wpa_supplicant *wpa_s,
880                                               u32 channel, u8 an)
881 {
882         if (!wpa_s->driver->disable_transmit_sa)
883                 return -1;
884         return wpa_s->driver->disable_transmit_sa(wpa_s->drv_priv, channel, an);
885 }
886 #endif /* CONFIG_MACSEC */
887
888 static inline int wpa_drv_setband(struct wpa_supplicant *wpa_s,
889                                   enum set_band band)
890 {
891         if (!wpa_s->driver->set_band)
892                 return -1;
893         return wpa_s->driver->set_band(wpa_s->drv_priv, band);
894 }
895
896 static inline int wpa_drv_get_pref_freq_list(struct wpa_supplicant *wpa_s,
897                                              enum wpa_driver_if_type if_type,
898                                              unsigned int *num,
899                                              unsigned int *freq_list)
900 {
901         if (!wpa_s->driver->get_pref_freq_list)
902                 return -1;
903         return wpa_s->driver->get_pref_freq_list(wpa_s->drv_priv, if_type,
904                                                  num, freq_list);
905 }
906
907 static inline int wpa_drv_set_prob_oper_freq(struct wpa_supplicant *wpa_s,
908                                              unsigned int freq)
909 {
910         if (!wpa_s->driver->set_prob_oper_freq)
911                 return 0;
912         return wpa_s->driver->set_prob_oper_freq(wpa_s->drv_priv, freq);
913 }
914
915 #endif /* DRIVER_I_H */