Lines Matching defs:scan

11 #include "scan.h"
17 static int cw1200_scan_start(struct cw1200_common *priv, struct wsm_scan *scan)
31 scan->type, scan->num_channels, scan->flags);
33 for (i = 0; i < scan->num_channels; ++i)
34 tmo += scan->ch[i].max_chan_time + 10;
37 atomic_set(&priv->scan.in_progress, 1);
40 queue_delayed_work(priv->workqueue, &priv->scan.timeout,
42 ret = wsm_scan(priv, scan);
44 atomic_set(&priv->scan.in_progress, 0);
45 cancel_delayed_work_sync(&priv->scan.timeout);
87 down(&priv->scan.lock);
97 up(&priv->scan.lock);
104 BUG_ON(priv->scan.req);
105 priv->scan.req = req;
106 priv->scan.n_ssids = 0;
107 priv->scan.status = 0;
108 priv->scan.begin = &req->channels[0];
109 priv->scan.curr = priv->scan.begin;
110 priv->scan.end = &req->channels[req->n_channels];
111 priv->scan.output_power = priv->output_power;
114 struct wsm_ssid *dst = &priv->scan.ssids[priv->scan.n_ssids];
117 ++priv->scan.n_ssids;
122 queue_work(priv->workqueue, &priv->scan.work);
129 scan.work);
131 struct wsm_scan scan = {
135 bool first_run = (priv->scan.begin == priv->scan.curr &&
136 priv->scan.begin != priv->scan.end);
140 /* Firmware gets crazy if scan request is sent
158 * after scan
164 if (!priv->scan.req || (priv->scan.curr == priv->scan.end)) {
166 .aborted = priv->scan.status ? 1 : 0,
169 if (priv->scan.output_power != priv->output_power)
175 if (priv->scan.status < 0)
178 priv->scan.status);
179 else if (priv->scan.req)
186 priv->scan.req = NULL;
191 up(&priv->scan.lock);
194 struct ieee80211_channel *first = *priv->scan.curr;
195 for (it = priv->scan.curr + 1, i = 1;
196 it != priv->scan.end && i < WSM_SCAN_MAX_NUM_OF_CHANNELS;
207 scan.band = first->band;
209 if (priv->scan.req->no_cck)
210 scan.max_tx_rate = WSM_TRANSMIT_RATE_6;
212 scan.max_tx_rate = WSM_TRANSMIT_RATE_1;
213 scan.num_probes =
215 scan.num_ssids = priv->scan.n_ssids;
216 scan.ssids = &priv->scan.ssids[0];
217 scan.num_channels = it - priv->scan.curr;
219 scan.probe_delay = 100;
221 * FW team says that driver may not use FG scan
225 scan.type = WSM_SCAN_TYPE_BACKGROUND;
226 scan.flags = WSM_SCAN_FLAG_FORCE_BACKGROUND;
228 scan.ch = kcalloc(it - priv->scan.curr,
231 if (!scan.ch) {
232 priv->scan.status = -ENOMEM;
235 for (i = 0; i < scan.num_channels; ++i) {
236 scan.ch[i].number = priv->scan.curr[i]->hw_value;
237 if (priv->scan.curr[i]->flags & IEEE80211_CHAN_NO_IR) {
238 scan.ch[i].min_chan_time = 50;
239 scan.ch[i].max_chan_time = 100;
241 scan.ch[i].min_chan_time = 10;
242 scan.ch[i].max_chan_time = 25;
246 priv->scan.output_power != first->max_power) {
247 priv->scan.output_power = first->max_power;
249 priv->scan.output_power * 10);
251 priv->scan.status = cw1200_scan_start(priv, &scan);
252 kfree(scan.ch);
253 if (priv->scan.status)
255 priv->scan.curr = it;
261 priv->scan.curr = priv->scan.end;
263 queue_work(priv->workqueue, &priv->scan.work);
269 /* FW bug: driver has to restart p2p-dev mode after scan. */
289 if (priv->scan.direct_probe) {
292 priv->scan.direct_probe = 0;
293 up(&priv->scan.lock);
296 cw1200_scan_work(&priv->scan.work);
306 if (cancel_delayed_work_sync(&priv->scan.timeout) > 0) {
307 priv->scan.status = -EIO;
308 queue_delayed_work(priv->workqueue, &priv->scan.timeout, 0);
320 if (cancel_delayed_work_sync(&priv->scan.timeout) > 0) {
321 priv->scan.status = 1;
322 queue_delayed_work(priv->workqueue, &priv->scan.timeout, 0);
337 container_of(work, struct cw1200_common, scan.timeout.work);
338 if (atomic_xchg(&priv->scan.in_progress, 0)) {
339 if (priv->scan.status > 0) {
340 priv->scan.status = 0;
341 } else if (!priv->scan.status) {
343 "Timeout waiting for scan complete notification.\n");
344 priv->scan.status = -ETIMEDOUT;
345 priv->scan.curr = priv->scan.end;
355 container_of(work, struct cw1200_common, scan.probe_work.work);
370 struct wsm_scan scan = {
385 if (down_trylock(&priv->scan.lock)) {
388 queue_delayed_work(priv->workqueue, &priv->scan.probe_work,
397 up(&priv->scan.lock);
403 scan.max_tx_rate = wsm->max_tx_rate;
404 scan.band = (priv->channel->band == NL80211_BAND_5GHZ) ?
408 scan.type = WSM_SCAN_TYPE_BACKGROUND;
409 scan.flags = WSM_SCAN_FLAG_FORCE_BACKGROUND;
430 scan.num_ssids = 1;
439 /* FW bug: driver has to restart p2p-dev mode after scan */
443 priv->scan.direct_probe = 1;
446 ret = cw1200_scan_start(priv, &scan);
456 priv->scan.direct_probe = 0;
457 up(&priv->scan.lock);