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