Lines Matching refs:wvif
24 static int update_probe_tmpl(struct wfx_vif *wvif, struct cfg80211_scan_request *req) in update_probe_tmpl() argument
26 struct ieee80211_vif *vif = wvif_to_vif(wvif); in update_probe_tmpl()
29 skb = ieee80211_probereq_get(wvif->wdev->hw, vif->addr, NULL, 0, in update_probe_tmpl()
35 wfx_hif_set_template_frame(wvif, skb, HIF_TMPLT_PRBREQ, 0); in update_probe_tmpl()
40 static int send_scan_req(struct wfx_vif *wvif, struct cfg80211_scan_request *req, int start_idx) in send_scan_req() argument
42 struct ieee80211_vif *vif = wvif_to_vif(wvif); in send_scan_req()
55 wfx_tx_lock_flush(wvif->wdev); in send_scan_req()
56 wvif->scan_abort = false; in send_scan_req()
57 reinit_completion(&wvif->scan_complete); in send_scan_req()
58 ret = wfx_hif_scan(wvif, req, start_idx, i - start_idx); in send_scan_req()
60 wfx_tx_unlock(wvif->wdev); in send_scan_req()
63 ret = wait_for_completion_timeout(&wvif->scan_complete, 1 * HZ); in send_scan_req()
65 wfx_hif_stop_scan(wvif); in send_scan_req()
66 ret = wait_for_completion_timeout(&wvif->scan_complete, 1 * HZ); in send_scan_req()
67 dev_dbg(wvif->wdev->dev, "scan timeout (%d channels done)\n", in send_scan_req()
68 wvif->scan_nb_chan_done); in send_scan_req()
71 dev_err(wvif->wdev->dev, "scan didn't stop\n"); in send_scan_req()
73 } else if (wvif->scan_abort) { in send_scan_req()
74 dev_notice(wvif->wdev->dev, "scan abort\n"); in send_scan_req()
76 } else if (wvif->scan_nb_chan_done > i - start_idx) { in send_scan_req()
79 ret = wvif->scan_nb_chan_done; in send_scan_req()
82 wfx_hif_set_output_power(wvif, vif->bss_conf.txpower); in send_scan_req()
83 wfx_tx_unlock(wvif->wdev); in send_scan_req()
93 struct wfx_vif *wvif = container_of(work, struct wfx_vif, scan_work); in wfx_hw_scan_work() local
94 struct ieee80211_scan_request *hw_req = wvif->scan_req; in wfx_hw_scan_work()
97 mutex_lock(&wvif->wdev->conf_mutex); in wfx_hw_scan_work()
98 mutex_lock(&wvif->wdev->scan_lock); in wfx_hw_scan_work()
99 if (wvif->join_in_progress) { in wfx_hw_scan_work()
100 dev_info(wvif->wdev->dev, "abort in-progress REQ_JOIN"); in wfx_hw_scan_work()
101 wfx_reset(wvif); in wfx_hw_scan_work()
103 update_probe_tmpl(wvif, &hw_req->req); in wfx_hw_scan_work()
107 ret = send_scan_req(wvif, &hw_req->req, chan_cur); in wfx_hw_scan_work()
115 dev_err(wvif->wdev->dev, "scan has not been able to start\n"); in wfx_hw_scan_work()
119 mutex_unlock(&wvif->wdev->scan_lock); in wfx_hw_scan_work()
120 mutex_unlock(&wvif->wdev->conf_mutex); in wfx_hw_scan_work()
121 wfx_ieee80211_scan_completed_compat(wvif->wdev->hw, ret < 0); in wfx_hw_scan_work()
127 struct wfx_vif *wvif = (struct wfx_vif *)vif->drv_priv; in wfx_hw_scan() local
130 wvif->scan_req = hw_req; in wfx_hw_scan()
131 schedule_work(&wvif->scan_work); in wfx_hw_scan()
137 struct wfx_vif *wvif = (struct wfx_vif *)vif->drv_priv; in wfx_cancel_hw_scan() local
139 wvif->scan_abort = true; in wfx_cancel_hw_scan()
140 wfx_hif_stop_scan(wvif); in wfx_cancel_hw_scan()
143 void wfx_scan_complete(struct wfx_vif *wvif, int nb_chan_done) in wfx_scan_complete() argument
145 wvif->scan_nb_chan_done = nb_chan_done; in wfx_scan_complete()
146 complete(&wvif->scan_complete); in wfx_scan_complete()
151 struct wfx_vif *wvif = container_of(work, struct wfx_vif, remain_on_channel_work); in wfx_remain_on_channel_work() local
152 struct ieee80211_channel *chan = wvif->remain_on_channel_chan; in wfx_remain_on_channel_work()
153 int duration = wvif->remain_on_channel_duration; in wfx_remain_on_channel_work()
157 mutex_lock(&wvif->wdev->conf_mutex); in wfx_remain_on_channel_work()
158 mutex_lock(&wvif->wdev->scan_lock); in wfx_remain_on_channel_work()
159 if (wvif->join_in_progress) { in wfx_remain_on_channel_work()
160 dev_info(wvif->wdev->dev, "abort in-progress REQ_JOIN"); in wfx_remain_on_channel_work()
161 wfx_reset(wvif); in wfx_remain_on_channel_work()
163 wfx_tx_flush(wvif->wdev); in wfx_remain_on_channel_work()
165 reinit_completion(&wvif->scan_complete); in wfx_remain_on_channel_work()
166 ret = wfx_hif_scan_uniq(wvif, chan, duration); in wfx_remain_on_channel_work()
169 ieee80211_ready_on_channel(wvif->wdev->hw); in wfx_remain_on_channel_work()
170 ret = wait_for_completion_timeout(&wvif->scan_complete, in wfx_remain_on_channel_work()
173 wfx_hif_stop_scan(wvif); in wfx_remain_on_channel_work()
174 ret = wait_for_completion_timeout(&wvif->scan_complete, 1 * HZ); in wfx_remain_on_channel_work()
175 dev_dbg(wvif->wdev->dev, "roc timeout\n"); in wfx_remain_on_channel_work()
178 dev_err(wvif->wdev->dev, "roc didn't stop\n"); in wfx_remain_on_channel_work()
179 ieee80211_remain_on_channel_expired(wvif->wdev->hw); in wfx_remain_on_channel_work()
181 mutex_unlock(&wvif->wdev->scan_lock); in wfx_remain_on_channel_work()
182 mutex_unlock(&wvif->wdev->conf_mutex); in wfx_remain_on_channel_work()
183 wfx_bh_request_tx(wvif->wdev); in wfx_remain_on_channel_work()
191 struct wfx_vif *wvif = (struct wfx_vif *)vif->drv_priv; in wfx_remain_on_channel() local
196 wvif->remain_on_channel_duration = duration; in wfx_remain_on_channel()
197 wvif->remain_on_channel_chan = chan; in wfx_remain_on_channel()
198 schedule_work(&wvif->remain_on_channel_work); in wfx_remain_on_channel()
204 struct wfx_vif *wvif = (struct wfx_vif *)vif->drv_priv; in wfx_cancel_remain_on_channel() local
206 wfx_hif_stop_scan(wvif); in wfx_cancel_remain_on_channel()
207 flush_work(&wvif->remain_on_channel_work); in wfx_cancel_remain_on_channel()