1214501Srpaulo/*
2214501Srpaulo * wpa_supplicant - Internal driver interface wrappers
3214501Srpaulo * Copyright (c) 2003-2009, Jouni Malinen <j@w1.fi>
4214501Srpaulo *
5214501Srpaulo * This program is free software; you can redistribute it and/or modify
6214501Srpaulo * it under the terms of the GNU General Public License version 2 as
7214501Srpaulo * published by the Free Software Foundation.
8214501Srpaulo *
9214501Srpaulo * Alternatively, this software may be distributed under the terms of BSD
10214501Srpaulo * license.
11214501Srpaulo *
12214501Srpaulo * See README and COPYING for more details.
13214501Srpaulo */
14214501Srpaulo
15214501Srpaulo#ifndef DRIVER_I_H
16214501Srpaulo#define DRIVER_I_H
17214501Srpaulo
18214501Srpaulo#include "drivers/driver.h"
19214501Srpaulo
20214501Srpaulo/* driver_ops */
21214501Srpaulostatic inline void * wpa_drv_init(struct wpa_supplicant *wpa_s,
22214501Srpaulo				  const char *ifname)
23214501Srpaulo{
24214501Srpaulo	if (wpa_s->driver->init2)
25214501Srpaulo		return wpa_s->driver->init2(wpa_s, ifname,
26214501Srpaulo					    wpa_s->global_drv_priv);
27214501Srpaulo	if (wpa_s->driver->init) {
28214501Srpaulo		return wpa_s->driver->init(wpa_s, ifname);
29214501Srpaulo	}
30214501Srpaulo	return NULL;
31214501Srpaulo}
32214501Srpaulo
33214501Srpaulostatic inline void wpa_drv_deinit(struct wpa_supplicant *wpa_s)
34214501Srpaulo{
35214501Srpaulo	if (wpa_s->driver->deinit)
36214501Srpaulo		wpa_s->driver->deinit(wpa_s->drv_priv);
37214501Srpaulo}
38214501Srpaulo
39214501Srpaulostatic inline int wpa_drv_set_param(struct wpa_supplicant *wpa_s,
40214501Srpaulo				    const char *param)
41214501Srpaulo{
42214501Srpaulo	if (wpa_s->driver->set_param)
43214501Srpaulo		return wpa_s->driver->set_param(wpa_s->drv_priv, param);
44214501Srpaulo	return 0;
45214501Srpaulo}
46214501Srpaulo
47214501Srpaulostatic inline int wpa_drv_set_countermeasures(struct wpa_supplicant *wpa_s,
48214501Srpaulo					      int enabled)
49214501Srpaulo{
50214501Srpaulo	if (wpa_s->driver->set_countermeasures) {
51214501Srpaulo		return wpa_s->driver->set_countermeasures(wpa_s->drv_priv,
52214501Srpaulo							  enabled);
53214501Srpaulo	}
54214501Srpaulo	return -1;
55214501Srpaulo}
56214501Srpaulo
57214501Srpaulostatic inline int wpa_drv_authenticate(struct wpa_supplicant *wpa_s,
58214501Srpaulo				       struct wpa_driver_auth_params *params)
59214501Srpaulo{
60214501Srpaulo	if (wpa_s->driver->authenticate)
61214501Srpaulo		return wpa_s->driver->authenticate(wpa_s->drv_priv, params);
62214501Srpaulo	return -1;
63214501Srpaulo}
64214501Srpaulo
65214501Srpaulostatic inline int wpa_drv_associate(struct wpa_supplicant *wpa_s,
66214501Srpaulo				    struct wpa_driver_associate_params *params)
67214501Srpaulo{
68214501Srpaulo	if (wpa_s->driver->associate) {
69214501Srpaulo		return wpa_s->driver->associate(wpa_s->drv_priv, params);
70214501Srpaulo	}
71214501Srpaulo	return -1;
72214501Srpaulo}
73214501Srpaulo
74214501Srpaulostatic inline int wpa_drv_scan(struct wpa_supplicant *wpa_s,
75214501Srpaulo			       struct wpa_driver_scan_params *params)
76214501Srpaulo{
77214501Srpaulo	if (wpa_s->driver->scan2)
78214501Srpaulo		return wpa_s->driver->scan2(wpa_s->drv_priv, params);
79214501Srpaulo	return -1;
80214501Srpaulo}
81214501Srpaulo
82214501Srpaulostatic inline struct wpa_scan_results * wpa_drv_get_scan_results2(
83214501Srpaulo	struct wpa_supplicant *wpa_s)
84214501Srpaulo{
85214501Srpaulo	if (wpa_s->driver->get_scan_results2)
86214501Srpaulo		return wpa_s->driver->get_scan_results2(wpa_s->drv_priv);
87214501Srpaulo	return NULL;
88214501Srpaulo}
89214501Srpaulo
90214501Srpaulostatic inline int wpa_drv_get_bssid(struct wpa_supplicant *wpa_s, u8 *bssid)
91214501Srpaulo{
92214501Srpaulo	if (wpa_s->driver->get_bssid) {
93214501Srpaulo		return wpa_s->driver->get_bssid(wpa_s->drv_priv, bssid);
94214501Srpaulo	}
95214501Srpaulo	return -1;
96214501Srpaulo}
97214501Srpaulo
98214501Srpaulostatic inline int wpa_drv_get_ssid(struct wpa_supplicant *wpa_s, u8 *ssid)
99214501Srpaulo{
100214501Srpaulo	if (wpa_s->driver->get_ssid) {
101214501Srpaulo		return wpa_s->driver->get_ssid(wpa_s->drv_priv, ssid);
102214501Srpaulo	}
103214501Srpaulo	return -1;
104214501Srpaulo}
105214501Srpaulo
106214501Srpaulostatic inline int wpa_drv_set_key(struct wpa_supplicant *wpa_s,
107214501Srpaulo				  enum wpa_alg alg, const u8 *addr,
108214501Srpaulo				  int key_idx, int set_tx,
109214501Srpaulo				   const u8 *seq, size_t seq_len,
110214501Srpaulo				   const u8 *key, size_t key_len)
111214501Srpaulo{
112214501Srpaulo	if (wpa_s->driver->set_key) {
113214501Srpaulo		wpa_s->keys_cleared = 0;
114214501Srpaulo		return wpa_s->driver->set_key(wpa_s->ifname, wpa_s->drv_priv,
115214501Srpaulo					      alg, addr, key_idx, set_tx,
116214501Srpaulo					      seq, seq_len, key, key_len);
117214501Srpaulo	}
118214501Srpaulo	return -1;
119214501Srpaulo}
120214501Srpaulo
121214501Srpaulostatic inline int wpa_drv_deauthenticate(struct wpa_supplicant *wpa_s,
122214501Srpaulo					 const u8 *addr, int reason_code)
123214501Srpaulo{
124214501Srpaulo	if (wpa_s->driver->deauthenticate) {
125214501Srpaulo		return wpa_s->driver->deauthenticate(wpa_s->drv_priv, addr,
126214501Srpaulo						     reason_code);
127214501Srpaulo	}
128214501Srpaulo	return -1;
129214501Srpaulo}
130214501Srpaulo
131214501Srpaulostatic inline int wpa_drv_disassociate(struct wpa_supplicant *wpa_s,
132214501Srpaulo				       const u8 *addr, int reason_code)
133214501Srpaulo{
134214501Srpaulo	if (wpa_s->driver->disassociate) {
135214501Srpaulo		return wpa_s->driver->disassociate(wpa_s->drv_priv, addr,
136214501Srpaulo						   reason_code);
137214501Srpaulo	}
138214501Srpaulo	return -1;
139214501Srpaulo}
140214501Srpaulo
141214501Srpaulostatic inline int wpa_drv_add_pmkid(struct wpa_supplicant *wpa_s,
142214501Srpaulo				    const u8 *bssid, const u8 *pmkid)
143214501Srpaulo{
144214501Srpaulo	if (wpa_s->driver->add_pmkid) {
145214501Srpaulo		return wpa_s->driver->add_pmkid(wpa_s->drv_priv, bssid, pmkid);
146214501Srpaulo	}
147214501Srpaulo	return -1;
148214501Srpaulo}
149214501Srpaulo
150214501Srpaulostatic inline int wpa_drv_remove_pmkid(struct wpa_supplicant *wpa_s,
151214501Srpaulo				       const u8 *bssid, const u8 *pmkid)
152214501Srpaulo{
153214501Srpaulo	if (wpa_s->driver->remove_pmkid) {
154214501Srpaulo		return wpa_s->driver->remove_pmkid(wpa_s->drv_priv, bssid,
155214501Srpaulo						   pmkid);
156214501Srpaulo	}
157214501Srpaulo	return -1;
158214501Srpaulo}
159214501Srpaulo
160214501Srpaulostatic inline int wpa_drv_flush_pmkid(struct wpa_supplicant *wpa_s)
161214501Srpaulo{
162214501Srpaulo	if (wpa_s->driver->flush_pmkid) {
163214501Srpaulo		return wpa_s->driver->flush_pmkid(wpa_s->drv_priv);
164214501Srpaulo	}
165214501Srpaulo	return -1;
166214501Srpaulo}
167214501Srpaulo
168214501Srpaulostatic inline int wpa_drv_get_capa(struct wpa_supplicant *wpa_s,
169214501Srpaulo				   struct wpa_driver_capa *capa)
170214501Srpaulo{
171214501Srpaulo	if (wpa_s->driver->get_capa) {
172214501Srpaulo		return wpa_s->driver->get_capa(wpa_s->drv_priv, capa);
173214501Srpaulo	}
174214501Srpaulo	return -1;
175214501Srpaulo}
176214501Srpaulo
177214501Srpaulostatic inline void wpa_drv_poll(struct wpa_supplicant *wpa_s)
178214501Srpaulo{
179214501Srpaulo	if (wpa_s->driver->poll) {
180214501Srpaulo		wpa_s->driver->poll(wpa_s->drv_priv);
181214501Srpaulo	}
182214501Srpaulo}
183214501Srpaulo
184214501Srpaulostatic inline const char * wpa_drv_get_ifname(struct wpa_supplicant *wpa_s)
185214501Srpaulo{
186214501Srpaulo	if (wpa_s->driver->get_ifname) {
187214501Srpaulo		return wpa_s->driver->get_ifname(wpa_s->drv_priv);
188214501Srpaulo	}
189214501Srpaulo	return NULL;
190214501Srpaulo}
191214501Srpaulo
192214501Srpaulostatic inline const u8 * wpa_drv_get_mac_addr(struct wpa_supplicant *wpa_s)
193214501Srpaulo{
194214501Srpaulo	if (wpa_s->driver->get_mac_addr) {
195214501Srpaulo		return wpa_s->driver->get_mac_addr(wpa_s->drv_priv);
196214501Srpaulo	}
197214501Srpaulo	return NULL;
198214501Srpaulo}
199214501Srpaulo
200214501Srpaulostatic inline int wpa_drv_send_eapol(struct wpa_supplicant *wpa_s,
201214501Srpaulo				     const u8 *dst, u16 proto,
202214501Srpaulo				     const u8 *data, size_t data_len)
203214501Srpaulo{
204214501Srpaulo	if (wpa_s->driver->send_eapol)
205214501Srpaulo		return wpa_s->driver->send_eapol(wpa_s->drv_priv, dst, proto,
206214501Srpaulo						 data, data_len);
207214501Srpaulo	return -1;
208214501Srpaulo}
209214501Srpaulo
210214501Srpaulostatic inline int wpa_drv_set_operstate(struct wpa_supplicant *wpa_s,
211214501Srpaulo					int state)
212214501Srpaulo{
213214501Srpaulo	if (wpa_s->driver->set_operstate)
214214501Srpaulo		return wpa_s->driver->set_operstate(wpa_s->drv_priv, state);
215214501Srpaulo	return 0;
216214501Srpaulo}
217214501Srpaulo
218214501Srpaulostatic inline int wpa_drv_mlme_setprotection(struct wpa_supplicant *wpa_s,
219214501Srpaulo					     const u8 *addr, int protect_type,
220214501Srpaulo					     int key_type)
221214501Srpaulo{
222214501Srpaulo	if (wpa_s->driver->mlme_setprotection)
223214501Srpaulo		return wpa_s->driver->mlme_setprotection(wpa_s->drv_priv, addr,
224214501Srpaulo							 protect_type,
225214501Srpaulo							 key_type);
226214501Srpaulo	return 0;
227214501Srpaulo}
228214501Srpaulo
229214501Srpaulostatic inline struct hostapd_hw_modes *
230214501Srpaulowpa_drv_get_hw_feature_data(struct wpa_supplicant *wpa_s, u16 *num_modes,
231214501Srpaulo			    u16 *flags)
232214501Srpaulo{
233214501Srpaulo	if (wpa_s->driver->get_hw_feature_data)
234214501Srpaulo		return wpa_s->driver->get_hw_feature_data(wpa_s->drv_priv,
235214501Srpaulo							  num_modes, flags);
236214501Srpaulo	return NULL;
237214501Srpaulo}
238214501Srpaulo
239214501Srpaulostatic inline int wpa_drv_set_channel(struct wpa_supplicant *wpa_s,
240214501Srpaulo				      enum hostapd_hw_mode phymode, int chan,
241214501Srpaulo				      int freq)
242214501Srpaulo{
243214501Srpaulo	if (wpa_s->driver->set_channel)
244214501Srpaulo		return wpa_s->driver->set_channel(wpa_s->drv_priv, phymode,
245214501Srpaulo						  chan, freq);
246214501Srpaulo	return -1;
247214501Srpaulo}
248214501Srpaulo
249214501Srpaulostatic inline int wpa_drv_set_ssid(struct wpa_supplicant *wpa_s,
250214501Srpaulo				   const u8 *ssid, size_t ssid_len)
251214501Srpaulo{
252214501Srpaulo	if (wpa_s->driver->set_ssid) {
253214501Srpaulo		return wpa_s->driver->set_ssid(wpa_s->drv_priv, ssid,
254214501Srpaulo					       ssid_len);
255214501Srpaulo	}
256214501Srpaulo	return -1;
257214501Srpaulo}
258214501Srpaulo
259214501Srpaulostatic inline int wpa_drv_set_bssid(struct wpa_supplicant *wpa_s,
260214501Srpaulo				    const u8 *bssid)
261214501Srpaulo{
262214501Srpaulo	if (wpa_s->driver->set_bssid) {
263214501Srpaulo		return wpa_s->driver->set_bssid(wpa_s->drv_priv, bssid);
264214501Srpaulo	}
265214501Srpaulo	return -1;
266214501Srpaulo}
267214501Srpaulo
268214501Srpaulostatic inline int wpa_drv_set_country(struct wpa_supplicant *wpa_s,
269214501Srpaulo				      const char *alpha2)
270214501Srpaulo{
271214501Srpaulo	if (wpa_s->driver->set_country)
272214501Srpaulo		return wpa_s->driver->set_country(wpa_s->drv_priv, alpha2);
273214501Srpaulo	return 0;
274214501Srpaulo}
275214501Srpaulo
276214501Srpaulostatic inline int wpa_drv_send_mlme(struct wpa_supplicant *wpa_s,
277214501Srpaulo				    const u8 *data, size_t data_len)
278214501Srpaulo{
279214501Srpaulo	if (wpa_s->driver->send_mlme)
280214501Srpaulo		return wpa_s->driver->send_mlme(wpa_s->drv_priv,
281214501Srpaulo						data, data_len);
282214501Srpaulo	return -1;
283214501Srpaulo}
284214501Srpaulo
285214501Srpaulostatic inline int wpa_drv_mlme_add_sta(struct wpa_supplicant *wpa_s,
286214501Srpaulo				       const u8 *addr, const u8 *supp_rates,
287214501Srpaulo				       size_t supp_rates_len)
288214501Srpaulo{
289214501Srpaulo	if (wpa_s->driver->mlme_add_sta)
290214501Srpaulo		return wpa_s->driver->mlme_add_sta(wpa_s->drv_priv, addr,
291214501Srpaulo						   supp_rates, supp_rates_len);
292214501Srpaulo	return -1;
293214501Srpaulo}
294214501Srpaulo
295214501Srpaulostatic inline int wpa_drv_mlme_remove_sta(struct wpa_supplicant *wpa_s,
296214501Srpaulo					  const u8 *addr)
297214501Srpaulo{
298214501Srpaulo	if (wpa_s->driver->mlme_remove_sta)
299214501Srpaulo		return wpa_s->driver->mlme_remove_sta(wpa_s->drv_priv, addr);
300214501Srpaulo	return -1;
301214501Srpaulo}
302214501Srpaulo
303214501Srpaulostatic inline int wpa_drv_update_ft_ies(struct wpa_supplicant *wpa_s,
304214501Srpaulo					const u8 *md,
305214501Srpaulo					const u8 *ies, size_t ies_len)
306214501Srpaulo{
307214501Srpaulo	if (wpa_s->driver->update_ft_ies)
308214501Srpaulo		return wpa_s->driver->update_ft_ies(wpa_s->drv_priv, md,
309214501Srpaulo						    ies, ies_len);
310214501Srpaulo	return -1;
311214501Srpaulo}
312214501Srpaulo
313214501Srpaulostatic inline int wpa_drv_send_ft_action(struct wpa_supplicant *wpa_s,
314214501Srpaulo					 u8 action, const u8 *target_ap,
315214501Srpaulo					 const u8 *ies, size_t ies_len)
316214501Srpaulo{
317214501Srpaulo	if (wpa_s->driver->send_ft_action)
318214501Srpaulo		return wpa_s->driver->send_ft_action(wpa_s->drv_priv, action,
319214501Srpaulo						     target_ap, ies, ies_len);
320214501Srpaulo	return -1;
321214501Srpaulo}
322214501Srpaulo
323214501Srpaulostatic inline int wpa_drv_set_beacon(struct wpa_supplicant *wpa_s,
324214501Srpaulo				     const u8 *head, size_t head_len,
325214501Srpaulo				     const u8 *tail, size_t tail_len,
326214501Srpaulo				     int dtim_period, int beacon_int)
327214501Srpaulo{
328214501Srpaulo	if (wpa_s->driver->set_beacon)
329214501Srpaulo		return wpa_s->driver->set_beacon(wpa_s->drv_priv, head,
330214501Srpaulo						 head_len, tail, tail_len,
331214501Srpaulo						 dtim_period, beacon_int);
332214501Srpaulo	return -1;
333214501Srpaulo}
334214501Srpaulo
335214501Srpaulostatic inline int wpa_drv_sta_add(struct wpa_supplicant *wpa_s,
336214501Srpaulo				  struct hostapd_sta_add_params *params)
337214501Srpaulo{
338214501Srpaulo	if (wpa_s->driver->sta_add)
339214501Srpaulo		return wpa_s->driver->sta_add(wpa_s->drv_priv, params);
340214501Srpaulo	return -1;
341214501Srpaulo}
342214501Srpaulo
343214501Srpaulostatic inline int wpa_drv_sta_remove(struct wpa_supplicant *wpa_s,
344214501Srpaulo				     const u8 *addr)
345214501Srpaulo{
346214501Srpaulo	if (wpa_s->driver->sta_remove)
347214501Srpaulo		return wpa_s->driver->sta_remove(wpa_s->drv_priv, addr);
348214501Srpaulo	return -1;
349214501Srpaulo}
350214501Srpaulo
351214501Srpaulostatic inline int wpa_drv_hapd_send_eapol(struct wpa_supplicant *wpa_s,
352214501Srpaulo					  const u8 *addr, const u8 *data,
353214501Srpaulo					  size_t data_len, int encrypt,
354214501Srpaulo					  const u8 *own_addr)
355214501Srpaulo{
356214501Srpaulo	if (wpa_s->driver->hapd_send_eapol)
357214501Srpaulo		return wpa_s->driver->hapd_send_eapol(wpa_s->drv_priv, addr,
358214501Srpaulo						      data, data_len, encrypt,
359214501Srpaulo						      own_addr);
360214501Srpaulo	return -1;
361214501Srpaulo}
362214501Srpaulo
363214501Srpaulostatic inline int wpa_drv_sta_set_flags(struct wpa_supplicant *wpa_s,
364214501Srpaulo					const u8 *addr, int total_flags,
365214501Srpaulo					int flags_or, int flags_and)
366214501Srpaulo{
367214501Srpaulo	if (wpa_s->driver->sta_set_flags)
368214501Srpaulo		return wpa_s->driver->sta_set_flags(wpa_s->drv_priv, addr,
369214501Srpaulo						    total_flags, flags_or,
370214501Srpaulo						    flags_and);
371214501Srpaulo	return -1;
372214501Srpaulo}
373214501Srpaulo
374214501Srpaulostatic inline int wpa_drv_set_supp_port(struct wpa_supplicant *wpa_s,
375214501Srpaulo					int authorized)
376214501Srpaulo{
377214501Srpaulo	if (wpa_s->driver->set_supp_port) {
378214501Srpaulo		return wpa_s->driver->set_supp_port(wpa_s->drv_priv,
379214501Srpaulo						    authorized);
380214501Srpaulo	}
381214501Srpaulo	return 0;
382214501Srpaulo}
383214501Srpaulo
384214501Srpaulostatic inline int wpa_drv_send_action(struct wpa_supplicant *wpa_s,
385214501Srpaulo				      unsigned int freq,
386214501Srpaulo				      const u8 *dst, const u8 *src,
387214501Srpaulo				      const u8 *bssid,
388214501Srpaulo				      const u8 *data, size_t data_len)
389214501Srpaulo{
390214501Srpaulo	if (wpa_s->driver->send_action)
391214501Srpaulo		return wpa_s->driver->send_action(wpa_s->drv_priv, freq,
392214501Srpaulo						  dst, src, bssid, data,
393214501Srpaulo						  data_len);
394214501Srpaulo	return -1;
395214501Srpaulo}
396214501Srpaulo
397214501Srpaulostatic inline int wpa_drv_if_add(struct wpa_supplicant *wpa_s,
398214501Srpaulo				 enum wpa_driver_if_type type,
399214501Srpaulo				 const char *ifname, const u8 *addr,
400214501Srpaulo				 void *bss_ctx, char *force_ifname,
401214501Srpaulo				 u8 *if_addr)
402214501Srpaulo{
403214501Srpaulo	if (wpa_s->driver->if_add)
404214501Srpaulo		return wpa_s->driver->if_add(wpa_s->drv_priv, type, ifname,
405214501Srpaulo					     addr, bss_ctx, NULL, force_ifname,
406214501Srpaulo					     if_addr);
407214501Srpaulo	return -1;
408214501Srpaulo}
409214501Srpaulo
410214501Srpaulostatic inline int wpa_drv_if_remove(struct wpa_supplicant *wpa_s,
411214501Srpaulo				    enum wpa_driver_if_type type,
412214501Srpaulo				    const char *ifname)
413214501Srpaulo{
414214501Srpaulo	if (wpa_s->driver->if_remove)
415214501Srpaulo		return wpa_s->driver->if_remove(wpa_s->drv_priv, type, ifname);
416214501Srpaulo	return -1;
417214501Srpaulo}
418214501Srpaulo
419214501Srpaulostatic inline int wpa_drv_remain_on_channel(struct wpa_supplicant *wpa_s,
420214501Srpaulo					    unsigned int freq,
421214501Srpaulo					    unsigned int duration)
422214501Srpaulo{
423214501Srpaulo	if (wpa_s->driver->remain_on_channel)
424214501Srpaulo		return wpa_s->driver->remain_on_channel(wpa_s->drv_priv, freq,
425214501Srpaulo							duration);
426214501Srpaulo	return -1;
427214501Srpaulo}
428214501Srpaulo
429214501Srpaulostatic inline int wpa_drv_cancel_remain_on_channel(
430214501Srpaulo	struct wpa_supplicant *wpa_s)
431214501Srpaulo{
432214501Srpaulo	if (wpa_s->driver->cancel_remain_on_channel)
433214501Srpaulo		return wpa_s->driver->cancel_remain_on_channel(
434214501Srpaulo			wpa_s->drv_priv);
435214501Srpaulo	return -1;
436214501Srpaulo}
437214501Srpaulo
438214501Srpaulostatic inline int wpa_drv_probe_req_report(struct wpa_supplicant *wpa_s,
439214501Srpaulo					   int report)
440214501Srpaulo{
441214501Srpaulo	if (wpa_s->driver->probe_req_report)
442214501Srpaulo		return wpa_s->driver->probe_req_report(wpa_s->drv_priv,
443214501Srpaulo						       report);
444214501Srpaulo	return -1;
445214501Srpaulo}
446214501Srpaulo
447214501Srpaulostatic inline int wpa_drv_disable_11b_rates(struct wpa_supplicant *wpa_s,
448214501Srpaulo					    int disabled)
449214501Srpaulo{
450214501Srpaulo	if (wpa_s->driver->disable_11b_rates)
451214501Srpaulo		return wpa_s->driver->disable_11b_rates(wpa_s->drv_priv,
452214501Srpaulo							disabled);
453214501Srpaulo	return -1;
454214501Srpaulo}
455214501Srpaulo
456214501Srpaulostatic inline int wpa_drv_deinit_ap(struct wpa_supplicant *wpa_s)
457214501Srpaulo{
458214501Srpaulo	if (wpa_s->driver->deinit_ap)
459214501Srpaulo		return wpa_s->driver->deinit_ap(wpa_s->drv_priv);
460214501Srpaulo	return 0;
461214501Srpaulo}
462214501Srpaulo
463214501Srpaulostatic inline void wpa_drv_suspend(struct wpa_supplicant *wpa_s)
464214501Srpaulo{
465214501Srpaulo	if (wpa_s->driver->suspend)
466214501Srpaulo		wpa_s->driver->suspend(wpa_s->drv_priv);
467214501Srpaulo}
468214501Srpaulo
469214501Srpaulostatic inline void wpa_drv_resume(struct wpa_supplicant *wpa_s)
470214501Srpaulo{
471214501Srpaulo	if (wpa_s->driver->resume)
472214501Srpaulo		wpa_s->driver->resume(wpa_s->drv_priv);
473214501Srpaulo}
474214501Srpaulo
475214501Srpaulostatic inline int wpa_drv_signal_monitor(struct wpa_supplicant *wpa_s,
476214501Srpaulo					 int threshold, int hysteresis)
477214501Srpaulo{
478214501Srpaulo	if (wpa_s->driver->signal_monitor)
479214501Srpaulo		return wpa_s->driver->signal_monitor(wpa_s->drv_priv,
480214501Srpaulo						     threshold, hysteresis);
481214501Srpaulo	return -1;
482214501Srpaulo}
483214501Srpaulo
484214501Srpaulostatic inline int wpa_drv_set_ap_wps_ie(struct wpa_supplicant *wpa_s,
485214501Srpaulo					const struct wpabuf *beacon,
486214501Srpaulo					const struct wpabuf *proberesp)
487214501Srpaulo{
488214501Srpaulo	if (!wpa_s->driver->set_ap_wps_ie)
489214501Srpaulo		return -1;
490214501Srpaulo	return wpa_s->driver->set_ap_wps_ie(wpa_s->drv_priv, beacon,
491214501Srpaulo					    proberesp);
492214501Srpaulo}
493214501Srpaulo
494214501Srpaulo#endif /* DRIVER_I_H */
495