Lines Matching +full:re +full:- +full:started
1 // SPDX-License-Identifier: ISC
3 * Copyright (c) 2014-2017 Qualcomm Atheros, Inc.
10 #define P2P_WILDCARD_SSID "DIRECT-"
18 struct wil_p2p_info *p2p = &vif->p2p; in wil_p2p_start_listen()
19 u8 channel = p2p->listen_chan.hw_value; in wil_p2p_start_listen()
22 lockdep_assert_held(&wil->mutex); in wil_p2p_start_listen()
42 INIT_WORK(&p2p->discovery_expired_work, wil_p2p_listen_expired); in wil_p2p_start_listen()
43 mod_timer(&p2p->discovery_timer, in wil_p2p_start_listen()
44 jiffies + msecs_to_jiffies(p2p->listen_duration)); in wil_p2p_start_listen()
55 return (request->n_channels == 1) && in wil_p2p_is_social_scan()
56 (request->channels[0]->hw_value == P2P_DMG_SOCIAL_CHANNEL); in wil_p2p_is_social_scan()
64 struct wil_p2p_info *p2p = &vif->p2p; in wil_p2p_search()
68 lockdep_assert_held(&wil->mutex); in wil_p2p_search()
70 if (p2p->discovery_started) { in wil_p2p_search()
72 rc = -EBUSY; in wil_p2p_search()
90 request->ie_len, request->ie); in wil_p2p_search()
96 /* supplicant doesn't provide Probe Response IEs. As a workaround - in wil_p2p_search()
97 * re-use Probe Request IEs in wil_p2p_search()
100 request->ie_len, request->ie); in wil_p2p_search()
112 p2p->discovery_started = 1; in wil_p2p_search()
113 INIT_WORK(&p2p->discovery_expired_work, wil_p2p_search_expired); in wil_p2p_search()
114 mod_timer(&p2p->discovery_timer, in wil_p2p_search()
130 struct wil_p2p_info *p2p = &vif->p2p; in wil_p2p_listen()
134 return -EINVAL; in wil_p2p_listen()
138 mutex_lock(&wil->mutex); in wil_p2p_listen()
140 if (p2p->discovery_started) { in wil_p2p_listen()
142 rc = -EBUSY; in wil_p2p_listen()
146 memcpy(&p2p->listen_chan, chan, sizeof(*chan)); in wil_p2p_listen()
147 *cookie = ++p2p->cookie; in wil_p2p_listen()
148 p2p->listen_duration = duration; in wil_p2p_listen()
150 mutex_lock(&wil->vif_mutex); in wil_p2p_listen()
151 if (vif->scan_request) { in wil_p2p_listen()
153 p2p->pending_listen_wdev = wdev; in wil_p2p_listen()
154 p2p->discovery_started = 1; in wil_p2p_listen()
156 mutex_unlock(&wil->vif_mutex); in wil_p2p_listen()
159 mutex_unlock(&wil->vif_mutex); in wil_p2p_listen()
165 p2p->discovery_started = 1; in wil_p2p_listen()
166 if (vif->mid == 0) in wil_p2p_listen()
167 wil->radio_wdev = wdev; in wil_p2p_listen()
173 mutex_unlock(&wil->mutex); in wil_p2p_listen()
179 struct wil_p2p_info *p2p = &vif->p2p; in wil_p2p_stop_discovery()
180 u8 started = p2p->discovery_started; in wil_p2p_stop_discovery() local
182 if (p2p->discovery_started) { in wil_p2p_stop_discovery()
183 if (p2p->pending_listen_wdev) { in wil_p2p_stop_discovery()
184 /* discovery not really started, only pending */ in wil_p2p_stop_discovery()
185 p2p->pending_listen_wdev = NULL; in wil_p2p_stop_discovery()
187 del_timer_sync(&p2p->discovery_timer); in wil_p2p_stop_discovery()
190 p2p->discovery_started = 0; in wil_p2p_stop_discovery()
193 return started; in wil_p2p_stop_discovery()
199 struct wil_p2p_info *p2p = &vif->p2p; in wil_p2p_cancel_listen()
200 u8 started; in wil_p2p_cancel_listen() local
202 mutex_lock(&wil->mutex); in wil_p2p_cancel_listen()
204 if (cookie != p2p->cookie) { in wil_p2p_cancel_listen()
206 p2p->cookie, cookie); in wil_p2p_cancel_listen()
207 mutex_unlock(&wil->mutex); in wil_p2p_cancel_listen()
208 return -ENOENT; in wil_p2p_cancel_listen()
211 started = wil_p2p_stop_discovery(vif); in wil_p2p_cancel_listen()
213 mutex_unlock(&wil->mutex); in wil_p2p_cancel_listen()
215 if (!started) { in wil_p2p_cancel_listen()
216 wil_err(wil, "listen not started\n"); in wil_p2p_cancel_listen()
217 return -ENOENT; in wil_p2p_cancel_listen()
220 mutex_lock(&wil->vif_mutex); in wil_p2p_cancel_listen()
222 p2p->cookie, in wil_p2p_cancel_listen()
223 &p2p->listen_chan, in wil_p2p_cancel_listen()
225 if (vif->mid == 0) in wil_p2p_cancel_listen()
226 wil->radio_wdev = wil->main_ndev->ieee80211_ptr; in wil_p2p_cancel_listen()
227 mutex_unlock(&wil->vif_mutex); in wil_p2p_cancel_listen()
238 u8 started; in wil_p2p_listen_expired() local
242 mutex_lock(&wil->mutex); in wil_p2p_listen_expired()
243 started = wil_p2p_stop_discovery(vif); in wil_p2p_listen_expired()
244 mutex_unlock(&wil->mutex); in wil_p2p_listen_expired()
246 if (!started) in wil_p2p_listen_expired()
249 mutex_lock(&wil->vif_mutex); in wil_p2p_listen_expired()
251 p2p->cookie, in wil_p2p_listen_expired()
252 &p2p->listen_chan, in wil_p2p_listen_expired()
254 if (vif->mid == 0) in wil_p2p_listen_expired()
255 wil->radio_wdev = wil->main_ndev->ieee80211_ptr; in wil_p2p_listen_expired()
256 mutex_unlock(&wil->vif_mutex); in wil_p2p_listen_expired()
266 u8 started; in wil_p2p_search_expired() local
270 mutex_lock(&wil->mutex); in wil_p2p_search_expired()
271 started = wil_p2p_stop_discovery(vif); in wil_p2p_search_expired()
272 mutex_unlock(&wil->mutex); in wil_p2p_search_expired()
274 if (started) { in wil_p2p_search_expired()
279 mutex_lock(&wil->vif_mutex); in wil_p2p_search_expired()
280 if (vif->scan_request) { in wil_p2p_search_expired()
281 cfg80211_scan_done(vif->scan_request, &info); in wil_p2p_search_expired()
282 vif->scan_request = NULL; in wil_p2p_search_expired()
283 if (vif->mid == 0) in wil_p2p_search_expired()
284 wil->radio_wdev = in wil_p2p_search_expired()
285 wil->main_ndev->ieee80211_ptr; in wil_p2p_search_expired()
287 mutex_unlock(&wil->vif_mutex); in wil_p2p_search_expired()
300 mutex_lock(&wil->mutex); in wil_p2p_delayed_listen_work()
303 if (!p2p->discovery_started || !p2p->pending_listen_wdev) in wil_p2p_delayed_listen_work()
306 mutex_lock(&wil->vif_mutex); in wil_p2p_delayed_listen_work()
307 if (vif->scan_request) { in wil_p2p_delayed_listen_work()
308 /* another scan started, wait again... */ in wil_p2p_delayed_listen_work()
309 mutex_unlock(&wil->vif_mutex); in wil_p2p_delayed_listen_work()
312 mutex_unlock(&wil->vif_mutex); in wil_p2p_delayed_listen_work()
316 mutex_lock(&wil->vif_mutex); in wil_p2p_delayed_listen_work()
318 cfg80211_remain_on_channel_expired(p2p->pending_listen_wdev, in wil_p2p_delayed_listen_work()
319 p2p->cookie, in wil_p2p_delayed_listen_work()
320 &p2p->listen_chan, in wil_p2p_delayed_listen_work()
322 if (vif->mid == 0) in wil_p2p_delayed_listen_work()
323 wil->radio_wdev = wil->main_ndev->ieee80211_ptr; in wil_p2p_delayed_listen_work()
325 cfg80211_ready_on_channel(p2p->pending_listen_wdev, p2p->cookie, in wil_p2p_delayed_listen_work()
326 &p2p->listen_chan, in wil_p2p_delayed_listen_work()
327 p2p->listen_duration, GFP_KERNEL); in wil_p2p_delayed_listen_work()
328 if (vif->mid == 0) in wil_p2p_delayed_listen_work()
329 wil->radio_wdev = p2p->pending_listen_wdev; in wil_p2p_delayed_listen_work()
331 p2p->pending_listen_wdev = NULL; in wil_p2p_delayed_listen_work()
332 mutex_unlock(&wil->vif_mutex); in wil_p2p_delayed_listen_work()
335 mutex_unlock(&wil->mutex); in wil_p2p_delayed_listen_work()
340 struct wil6210_vif *vif = ndev_to_vif(wil->main_ndev); in wil_p2p_stop_radio_operations()
341 struct wil_p2p_info *p2p = &vif->p2p; in wil_p2p_stop_radio_operations()
346 lockdep_assert_held(&wil->mutex); in wil_p2p_stop_radio_operations()
347 lockdep_assert_held(&wil->vif_mutex); in wil_p2p_stop_radio_operations()
349 if (wil->radio_wdev != wil->p2p_wdev) in wil_p2p_stop_radio_operations()
352 if (!p2p->discovery_started) { in wil_p2p_stop_radio_operations()
354 if (vif->scan_request && in wil_p2p_stop_radio_operations()
355 vif->scan_request->wdev == wil->p2p_wdev) in wil_p2p_stop_radio_operations()
361 mutex_unlock(&wil->vif_mutex); in wil_p2p_stop_radio_operations()
363 mutex_lock(&wil->vif_mutex); in wil_p2p_stop_radio_operations()
365 if (vif->scan_request) { in wil_p2p_stop_radio_operations()
367 cfg80211_scan_done(vif->scan_request, &info); in wil_p2p_stop_radio_operations()
368 vif->scan_request = NULL; in wil_p2p_stop_radio_operations()
371 cfg80211_remain_on_channel_expired(wil->radio_wdev, in wil_p2p_stop_radio_operations()
372 p2p->cookie, in wil_p2p_stop_radio_operations()
373 &p2p->listen_chan, in wil_p2p_stop_radio_operations()
378 wil->radio_wdev = wil->main_ndev->ieee80211_ptr; in wil_p2p_stop_radio_operations()