wlcore/wl12xx/wl18xx: implement op_set_key per HW arch
[deliverable/linux.git] / drivers / net / wireless / ti / wlcore / main.c
1
2 /*
3 * This file is part of wl1271
4 *
5 * Copyright (C) 2008-2010 Nokia Corporation
6 *
7 * Contact: Luciano Coelho <luciano.coelho@nokia.com>
8 *
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License
11 * version 2 as published by the Free Software Foundation.
12 *
13 * This program is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
21 * 02110-1301 USA
22 *
23 */
24
25 #include <linux/module.h>
26 #include <linux/firmware.h>
27 #include <linux/delay.h>
28 #include <linux/spi/spi.h>
29 #include <linux/crc32.h>
30 #include <linux/etherdevice.h>
31 #include <linux/vmalloc.h>
32 #include <linux/platform_device.h>
33 #include <linux/slab.h>
34 #include <linux/wl12xx.h>
35 #include <linux/sched.h>
36 #include <linux/interrupt.h>
37
38 #include "wlcore.h"
39 #include "debug.h"
40 #include "wl12xx_80211.h"
41 #include "io.h"
42 #include "event.h"
43 #include "tx.h"
44 #include "rx.h"
45 #include "ps.h"
46 #include "init.h"
47 #include "debugfs.h"
48 #include "cmd.h"
49 #include "boot.h"
50 #include "testmode.h"
51 #include "scan.h"
52 #include "hw_ops.h"
53
54 #define WL1271_BOOT_RETRIES 3
55
56 #define WL1271_BOOT_RETRIES 3
57
58 static char *fwlog_param;
59 static bool bug_on_recovery;
60 static bool no_recovery;
61
62 static void __wl1271_op_remove_interface(struct wl1271 *wl,
63 struct ieee80211_vif *vif,
64 bool reset_tx_queues);
65 static void wl1271_op_stop(struct ieee80211_hw *hw);
66 static void wl1271_free_ap_keys(struct wl1271 *wl, struct wl12xx_vif *wlvif);
67
68 static int wl12xx_set_authorized(struct wl1271 *wl,
69 struct wl12xx_vif *wlvif)
70 {
71 int ret;
72
73 if (WARN_ON(wlvif->bss_type != BSS_TYPE_STA_BSS))
74 return -EINVAL;
75
76 if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags))
77 return 0;
78
79 if (test_and_set_bit(WLVIF_FLAG_STA_STATE_SENT, &wlvif->flags))
80 return 0;
81
82 ret = wl12xx_cmd_set_peer_state(wl, wlvif->sta.hlid);
83 if (ret < 0)
84 return ret;
85
86 wl12xx_croc(wl, wlvif->role_id);
87
88 wl1271_info("Association completed.");
89 return 0;
90 }
91
92 static int wl1271_reg_notify(struct wiphy *wiphy,
93 struct regulatory_request *request)
94 {
95 struct ieee80211_supported_band *band;
96 struct ieee80211_channel *ch;
97 int i;
98
99 band = wiphy->bands[IEEE80211_BAND_5GHZ];
100 for (i = 0; i < band->n_channels; i++) {
101 ch = &band->channels[i];
102 if (ch->flags & IEEE80211_CHAN_DISABLED)
103 continue;
104
105 if (ch->flags & IEEE80211_CHAN_RADAR)
106 ch->flags |= IEEE80211_CHAN_NO_IBSS |
107 IEEE80211_CHAN_PASSIVE_SCAN;
108
109 }
110
111 return 0;
112 }
113
114 static int wl1271_set_rx_streaming(struct wl1271 *wl, struct wl12xx_vif *wlvif,
115 bool enable)
116 {
117 int ret = 0;
118
119 /* we should hold wl->mutex */
120 ret = wl1271_acx_ps_rx_streaming(wl, wlvif, enable);
121 if (ret < 0)
122 goto out;
123
124 if (enable)
125 set_bit(WLVIF_FLAG_RX_STREAMING_STARTED, &wlvif->flags);
126 else
127 clear_bit(WLVIF_FLAG_RX_STREAMING_STARTED, &wlvif->flags);
128 out:
129 return ret;
130 }
131
132 /*
133 * this function is being called when the rx_streaming interval
134 * has beed changed or rx_streaming should be disabled
135 */
136 int wl1271_recalc_rx_streaming(struct wl1271 *wl, struct wl12xx_vif *wlvif)
137 {
138 int ret = 0;
139 int period = wl->conf.rx_streaming.interval;
140
141 /* don't reconfigure if rx_streaming is disabled */
142 if (!test_bit(WLVIF_FLAG_RX_STREAMING_STARTED, &wlvif->flags))
143 goto out;
144
145 /* reconfigure/disable according to new streaming_period */
146 if (period &&
147 test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags) &&
148 (wl->conf.rx_streaming.always ||
149 test_bit(WL1271_FLAG_SOFT_GEMINI, &wl->flags)))
150 ret = wl1271_set_rx_streaming(wl, wlvif, true);
151 else {
152 ret = wl1271_set_rx_streaming(wl, wlvif, false);
153 /* don't cancel_work_sync since we might deadlock */
154 del_timer_sync(&wlvif->rx_streaming_timer);
155 }
156 out:
157 return ret;
158 }
159
160 static void wl1271_rx_streaming_enable_work(struct work_struct *work)
161 {
162 int ret;
163 struct wl12xx_vif *wlvif = container_of(work, struct wl12xx_vif,
164 rx_streaming_enable_work);
165 struct wl1271 *wl = wlvif->wl;
166
167 mutex_lock(&wl->mutex);
168
169 if (test_bit(WLVIF_FLAG_RX_STREAMING_STARTED, &wlvif->flags) ||
170 !test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags) ||
171 (!wl->conf.rx_streaming.always &&
172 !test_bit(WL1271_FLAG_SOFT_GEMINI, &wl->flags)))
173 goto out;
174
175 if (!wl->conf.rx_streaming.interval)
176 goto out;
177
178 ret = wl1271_ps_elp_wakeup(wl);
179 if (ret < 0)
180 goto out;
181
182 ret = wl1271_set_rx_streaming(wl, wlvif, true);
183 if (ret < 0)
184 goto out_sleep;
185
186 /* stop it after some time of inactivity */
187 mod_timer(&wlvif->rx_streaming_timer,
188 jiffies + msecs_to_jiffies(wl->conf.rx_streaming.duration));
189
190 out_sleep:
191 wl1271_ps_elp_sleep(wl);
192 out:
193 mutex_unlock(&wl->mutex);
194 }
195
196 static void wl1271_rx_streaming_disable_work(struct work_struct *work)
197 {
198 int ret;
199 struct wl12xx_vif *wlvif = container_of(work, struct wl12xx_vif,
200 rx_streaming_disable_work);
201 struct wl1271 *wl = wlvif->wl;
202
203 mutex_lock(&wl->mutex);
204
205 if (!test_bit(WLVIF_FLAG_RX_STREAMING_STARTED, &wlvif->flags))
206 goto out;
207
208 ret = wl1271_ps_elp_wakeup(wl);
209 if (ret < 0)
210 goto out;
211
212 ret = wl1271_set_rx_streaming(wl, wlvif, false);
213 if (ret)
214 goto out_sleep;
215
216 out_sleep:
217 wl1271_ps_elp_sleep(wl);
218 out:
219 mutex_unlock(&wl->mutex);
220 }
221
222 static void wl1271_rx_streaming_timer(unsigned long data)
223 {
224 struct wl12xx_vif *wlvif = (struct wl12xx_vif *)data;
225 struct wl1271 *wl = wlvif->wl;
226 ieee80211_queue_work(wl->hw, &wlvif->rx_streaming_disable_work);
227 }
228
229 /* wl->mutex must be taken */
230 void wl12xx_rearm_tx_watchdog_locked(struct wl1271 *wl)
231 {
232 /* if the watchdog is not armed, don't do anything */
233 if (wl->tx_allocated_blocks == 0)
234 return;
235
236 cancel_delayed_work(&wl->tx_watchdog_work);
237 ieee80211_queue_delayed_work(wl->hw, &wl->tx_watchdog_work,
238 msecs_to_jiffies(wl->conf.tx.tx_watchdog_timeout));
239 }
240
241 static void wl12xx_tx_watchdog_work(struct work_struct *work)
242 {
243 struct delayed_work *dwork;
244 struct wl1271 *wl;
245
246 dwork = container_of(work, struct delayed_work, work);
247 wl = container_of(dwork, struct wl1271, tx_watchdog_work);
248
249 mutex_lock(&wl->mutex);
250
251 if (unlikely(wl->state == WL1271_STATE_OFF))
252 goto out;
253
254 /* Tx went out in the meantime - everything is ok */
255 if (unlikely(wl->tx_allocated_blocks == 0))
256 goto out;
257
258 /*
259 * if a ROC is in progress, we might not have any Tx for a long
260 * time (e.g. pending Tx on the non-ROC channels)
261 */
262 if (find_first_bit(wl->roc_map, WL12XX_MAX_ROLES) < WL12XX_MAX_ROLES) {
263 wl1271_debug(DEBUG_TX, "No Tx (in FW) for %d ms due to ROC",
264 wl->conf.tx.tx_watchdog_timeout);
265 wl12xx_rearm_tx_watchdog_locked(wl);
266 goto out;
267 }
268
269 /*
270 * if a scan is in progress, we might not have any Tx for a long
271 * time
272 */
273 if (wl->scan.state != WL1271_SCAN_STATE_IDLE) {
274 wl1271_debug(DEBUG_TX, "No Tx (in FW) for %d ms due to scan",
275 wl->conf.tx.tx_watchdog_timeout);
276 wl12xx_rearm_tx_watchdog_locked(wl);
277 goto out;
278 }
279
280 /*
281 * AP might cache a frame for a long time for a sleeping station,
282 * so rearm the timer if there's an AP interface with stations. If
283 * Tx is genuinely stuck we will most hopefully discover it when all
284 * stations are removed due to inactivity.
285 */
286 if (wl->active_sta_count) {
287 wl1271_debug(DEBUG_TX, "No Tx (in FW) for %d ms. AP has "
288 " %d stations",
289 wl->conf.tx.tx_watchdog_timeout,
290 wl->active_sta_count);
291 wl12xx_rearm_tx_watchdog_locked(wl);
292 goto out;
293 }
294
295 wl1271_error("Tx stuck (in FW) for %d ms. Starting recovery",
296 wl->conf.tx.tx_watchdog_timeout);
297 wl12xx_queue_recovery_work(wl);
298
299 out:
300 mutex_unlock(&wl->mutex);
301 }
302
303 static void wlcore_adjust_conf(struct wl1271 *wl)
304 {
305 /* Adjust settings according to optional module parameters */
306 if (fwlog_param) {
307 if (!strcmp(fwlog_param, "continuous")) {
308 wl->conf.fwlog.mode = WL12XX_FWLOG_CONTINUOUS;
309 } else if (!strcmp(fwlog_param, "ondemand")) {
310 wl->conf.fwlog.mode = WL12XX_FWLOG_ON_DEMAND;
311 } else if (!strcmp(fwlog_param, "dbgpins")) {
312 wl->conf.fwlog.mode = WL12XX_FWLOG_CONTINUOUS;
313 wl->conf.fwlog.output = WL12XX_FWLOG_OUTPUT_DBG_PINS;
314 } else if (!strcmp(fwlog_param, "disable")) {
315 wl->conf.fwlog.mem_blocks = 0;
316 wl->conf.fwlog.output = WL12XX_FWLOG_OUTPUT_NONE;
317 } else {
318 wl1271_error("Unknown fwlog parameter %s", fwlog_param);
319 }
320 }
321 }
322
323 static void wl12xx_irq_ps_regulate_link(struct wl1271 *wl,
324 struct wl12xx_vif *wlvif,
325 u8 hlid, u8 tx_pkts)
326 {
327 bool fw_ps, single_sta;
328
329 fw_ps = test_bit(hlid, (unsigned long *)&wl->ap_fw_ps_map);
330 single_sta = (wl->active_sta_count == 1);
331
332 /*
333 * Wake up from high level PS if the STA is asleep with too little
334 * packets in FW or if the STA is awake.
335 */
336 if (!fw_ps || tx_pkts < WL1271_PS_STA_MAX_PACKETS)
337 wl12xx_ps_link_end(wl, wlvif, hlid);
338
339 /*
340 * Start high-level PS if the STA is asleep with enough blocks in FW.
341 * Make an exception if this is the only connected station. In this
342 * case FW-memory congestion is not a problem.
343 */
344 else if (!single_sta && fw_ps && tx_pkts >= WL1271_PS_STA_MAX_PACKETS)
345 wl12xx_ps_link_start(wl, wlvif, hlid, true);
346 }
347
348 static void wl12xx_irq_update_links_status(struct wl1271 *wl,
349 struct wl12xx_vif *wlvif,
350 struct wl_fw_status_2 *status)
351 {
352 struct wl1271_link *lnk;
353 u32 cur_fw_ps_map;
354 u8 hlid, cnt;
355
356 /* TODO: also use link_fast_bitmap here */
357
358 cur_fw_ps_map = le32_to_cpu(status->link_ps_bitmap);
359 if (wl->ap_fw_ps_map != cur_fw_ps_map) {
360 wl1271_debug(DEBUG_PSM,
361 "link ps prev 0x%x cur 0x%x changed 0x%x",
362 wl->ap_fw_ps_map, cur_fw_ps_map,
363 wl->ap_fw_ps_map ^ cur_fw_ps_map);
364
365 wl->ap_fw_ps_map = cur_fw_ps_map;
366 }
367
368 for_each_set_bit(hlid, wlvif->ap.sta_hlid_map, WL12XX_MAX_LINKS) {
369 lnk = &wl->links[hlid];
370 cnt = status->counters.tx_lnk_free_pkts[hlid] -
371 lnk->prev_freed_pkts;
372
373 lnk->prev_freed_pkts = status->counters.tx_lnk_free_pkts[hlid];
374 lnk->allocated_pkts -= cnt;
375
376 wl12xx_irq_ps_regulate_link(wl, wlvif, hlid,
377 lnk->allocated_pkts);
378 }
379 }
380
381 static void wl12xx_fw_status(struct wl1271 *wl,
382 struct wl_fw_status_1 *status_1,
383 struct wl_fw_status_2 *status_2)
384 {
385 struct wl12xx_vif *wlvif;
386 struct timespec ts;
387 u32 old_tx_blk_count = wl->tx_blocks_available;
388 int avail, freed_blocks;
389 int i;
390 size_t status_len;
391
392 status_len = WLCORE_FW_STATUS_1_LEN(wl->num_rx_desc) +
393 sizeof(*status_2) + wl->fw_status_priv_len;
394
395 wlcore_raw_read_data(wl, REG_RAW_FW_STATUS_ADDR, status_1,
396 status_len, false);
397
398 wl1271_debug(DEBUG_IRQ, "intr: 0x%x (fw_rx_counter = %d, "
399 "drv_rx_counter = %d, tx_results_counter = %d)",
400 status_1->intr,
401 status_1->fw_rx_counter,
402 status_1->drv_rx_counter,
403 status_1->tx_results_counter);
404
405 for (i = 0; i < NUM_TX_QUEUES; i++) {
406 /* prevent wrap-around in freed-packets counter */
407 wl->tx_allocated_pkts[i] -=
408 (status_2->counters.tx_released_pkts[i] -
409 wl->tx_pkts_freed[i]) & 0xff;
410
411 wl->tx_pkts_freed[i] = status_2->counters.tx_released_pkts[i];
412 }
413
414 /* prevent wrap-around in total blocks counter */
415 if (likely(wl->tx_blocks_freed <=
416 le32_to_cpu(status_2->total_released_blks)))
417 freed_blocks = le32_to_cpu(status_2->total_released_blks) -
418 wl->tx_blocks_freed;
419 else
420 freed_blocks = 0x100000000LL - wl->tx_blocks_freed +
421 le32_to_cpu(status_2->total_released_blks);
422
423 wl->tx_blocks_freed = le32_to_cpu(status_2->total_released_blks);
424
425 wl->tx_allocated_blocks -= freed_blocks;
426
427 /*
428 * If the FW freed some blocks:
429 * If we still have allocated blocks - re-arm the timer, Tx is
430 * not stuck. Otherwise, cancel the timer (no Tx currently).
431 */
432 if (freed_blocks) {
433 if (wl->tx_allocated_blocks)
434 wl12xx_rearm_tx_watchdog_locked(wl);
435 else
436 cancel_delayed_work(&wl->tx_watchdog_work);
437 }
438
439 avail = le32_to_cpu(status_2->tx_total) - wl->tx_allocated_blocks;
440
441 /*
442 * The FW might change the total number of TX memblocks before
443 * we get a notification about blocks being released. Thus, the
444 * available blocks calculation might yield a temporary result
445 * which is lower than the actual available blocks. Keeping in
446 * mind that only blocks that were allocated can be moved from
447 * TX to RX, tx_blocks_available should never decrease here.
448 */
449 wl->tx_blocks_available = max((int)wl->tx_blocks_available,
450 avail);
451
452 /* if more blocks are available now, tx work can be scheduled */
453 if (wl->tx_blocks_available > old_tx_blk_count)
454 clear_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags);
455
456 /* for AP update num of allocated TX blocks per link and ps status */
457 wl12xx_for_each_wlvif_ap(wl, wlvif) {
458 wl12xx_irq_update_links_status(wl, wlvif, status_2);
459 }
460
461 /* update the host-chipset time offset */
462 getnstimeofday(&ts);
463 wl->time_offset = (timespec_to_ns(&ts) >> 10) -
464 (s64)le32_to_cpu(status_2->fw_localtime);
465 }
466
467 static void wl1271_flush_deferred_work(struct wl1271 *wl)
468 {
469 struct sk_buff *skb;
470
471 /* Pass all received frames to the network stack */
472 while ((skb = skb_dequeue(&wl->deferred_rx_queue)))
473 ieee80211_rx_ni(wl->hw, skb);
474
475 /* Return sent skbs to the network stack */
476 while ((skb = skb_dequeue(&wl->deferred_tx_queue)))
477 ieee80211_tx_status_ni(wl->hw, skb);
478 }
479
480 static void wl1271_netstack_work(struct work_struct *work)
481 {
482 struct wl1271 *wl =
483 container_of(work, struct wl1271, netstack_work);
484
485 do {
486 wl1271_flush_deferred_work(wl);
487 } while (skb_queue_len(&wl->deferred_rx_queue));
488 }
489
490 #define WL1271_IRQ_MAX_LOOPS 256
491
492 static irqreturn_t wl1271_irq(int irq, void *cookie)
493 {
494 int ret;
495 u32 intr;
496 int loopcount = WL1271_IRQ_MAX_LOOPS;
497 struct wl1271 *wl = (struct wl1271 *)cookie;
498 bool done = false;
499 unsigned int defer_count;
500 unsigned long flags;
501
502 /* TX might be handled here, avoid redundant work */
503 set_bit(WL1271_FLAG_TX_PENDING, &wl->flags);
504 cancel_work_sync(&wl->tx_work);
505
506 /*
507 * In case edge triggered interrupt must be used, we cannot iterate
508 * more than once without introducing race conditions with the hardirq.
509 */
510 if (wl->platform_quirks & WL12XX_PLATFORM_QUIRK_EDGE_IRQ)
511 loopcount = 1;
512
513 mutex_lock(&wl->mutex);
514
515 wl1271_debug(DEBUG_IRQ, "IRQ work");
516
517 if (unlikely(wl->state == WL1271_STATE_OFF))
518 goto out;
519
520 ret = wl1271_ps_elp_wakeup(wl);
521 if (ret < 0)
522 goto out;
523
524 while (!done && loopcount--) {
525 /*
526 * In order to avoid a race with the hardirq, clear the flag
527 * before acknowledging the chip. Since the mutex is held,
528 * wl1271_ps_elp_wakeup cannot be called concurrently.
529 */
530 clear_bit(WL1271_FLAG_IRQ_RUNNING, &wl->flags);
531 smp_mb__after_clear_bit();
532
533 wl12xx_fw_status(wl, wl->fw_status_1, wl->fw_status_2);
534
535 wlcore_hw_tx_immediate_compl(wl);
536
537 intr = le32_to_cpu(wl->fw_status_1->intr);
538 intr &= WL1271_INTR_MASK;
539 if (!intr) {
540 done = true;
541 continue;
542 }
543
544 if (unlikely(intr & WL1271_ACX_INTR_WATCHDOG)) {
545 wl1271_error("watchdog interrupt received! "
546 "starting recovery.");
547 wl12xx_queue_recovery_work(wl);
548
549 /* restarting the chip. ignore any other interrupt. */
550 goto out;
551 }
552
553 if (likely(intr & WL1271_ACX_INTR_DATA)) {
554 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_DATA");
555
556 wl12xx_rx(wl, wl->fw_status_1);
557
558 /* Check if any tx blocks were freed */
559 spin_lock_irqsave(&wl->wl_lock, flags);
560 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags) &&
561 wl1271_tx_total_queue_count(wl) > 0) {
562 spin_unlock_irqrestore(&wl->wl_lock, flags);
563 /*
564 * In order to avoid starvation of the TX path,
565 * call the work function directly.
566 */
567 wl1271_tx_work_locked(wl);
568 } else {
569 spin_unlock_irqrestore(&wl->wl_lock, flags);
570 }
571
572 /* check for tx results */
573 wlcore_hw_tx_delayed_compl(wl);
574
575 /* Make sure the deferred queues don't get too long */
576 defer_count = skb_queue_len(&wl->deferred_tx_queue) +
577 skb_queue_len(&wl->deferred_rx_queue);
578 if (defer_count > WL1271_DEFERRED_QUEUE_LIMIT)
579 wl1271_flush_deferred_work(wl);
580 }
581
582 if (intr & WL1271_ACX_INTR_EVENT_A) {
583 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_A");
584 wl1271_event_handle(wl, 0);
585 }
586
587 if (intr & WL1271_ACX_INTR_EVENT_B) {
588 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_B");
589 wl1271_event_handle(wl, 1);
590 }
591
592 if (intr & WL1271_ACX_INTR_INIT_COMPLETE)
593 wl1271_debug(DEBUG_IRQ,
594 "WL1271_ACX_INTR_INIT_COMPLETE");
595
596 if (intr & WL1271_ACX_INTR_HW_AVAILABLE)
597 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_HW_AVAILABLE");
598 }
599
600 wl1271_ps_elp_sleep(wl);
601
602 out:
603 spin_lock_irqsave(&wl->wl_lock, flags);
604 /* In case TX was not handled here, queue TX work */
605 clear_bit(WL1271_FLAG_TX_PENDING, &wl->flags);
606 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags) &&
607 wl1271_tx_total_queue_count(wl) > 0)
608 ieee80211_queue_work(wl->hw, &wl->tx_work);
609 spin_unlock_irqrestore(&wl->wl_lock, flags);
610
611 mutex_unlock(&wl->mutex);
612
613 return IRQ_HANDLED;
614 }
615
616 struct vif_counter_data {
617 u8 counter;
618
619 struct ieee80211_vif *cur_vif;
620 bool cur_vif_running;
621 };
622
623 static void wl12xx_vif_count_iter(void *data, u8 *mac,
624 struct ieee80211_vif *vif)
625 {
626 struct vif_counter_data *counter = data;
627
628 counter->counter++;
629 if (counter->cur_vif == vif)
630 counter->cur_vif_running = true;
631 }
632
633 /* caller must not hold wl->mutex, as it might deadlock */
634 static void wl12xx_get_vif_count(struct ieee80211_hw *hw,
635 struct ieee80211_vif *cur_vif,
636 struct vif_counter_data *data)
637 {
638 memset(data, 0, sizeof(*data));
639 data->cur_vif = cur_vif;
640
641 ieee80211_iterate_active_interfaces(hw,
642 wl12xx_vif_count_iter, data);
643 }
644
645 static int wl12xx_fetch_firmware(struct wl1271 *wl, bool plt)
646 {
647 const struct firmware *fw;
648 const char *fw_name;
649 enum wl12xx_fw_type fw_type;
650 int ret;
651
652 if (plt) {
653 fw_type = WL12XX_FW_TYPE_PLT;
654 fw_name = wl->plt_fw_name;
655 } else {
656 /*
657 * we can't call wl12xx_get_vif_count() here because
658 * wl->mutex is taken, so use the cached last_vif_count value
659 */
660 if (wl->last_vif_count > 1) {
661 fw_type = WL12XX_FW_TYPE_MULTI;
662 fw_name = wl->mr_fw_name;
663 } else {
664 fw_type = WL12XX_FW_TYPE_NORMAL;
665 fw_name = wl->sr_fw_name;
666 }
667 }
668
669 if (wl->fw_type == fw_type)
670 return 0;
671
672 wl1271_debug(DEBUG_BOOT, "booting firmware %s", fw_name);
673
674 ret = request_firmware(&fw, fw_name, wl->dev);
675
676 if (ret < 0) {
677 wl1271_error("could not get firmware %s: %d", fw_name, ret);
678 return ret;
679 }
680
681 if (fw->size % 4) {
682 wl1271_error("firmware size is not multiple of 32 bits: %zu",
683 fw->size);
684 ret = -EILSEQ;
685 goto out;
686 }
687
688 vfree(wl->fw);
689 wl->fw_type = WL12XX_FW_TYPE_NONE;
690 wl->fw_len = fw->size;
691 wl->fw = vmalloc(wl->fw_len);
692
693 if (!wl->fw) {
694 wl1271_error("could not allocate memory for the firmware");
695 ret = -ENOMEM;
696 goto out;
697 }
698
699 memcpy(wl->fw, fw->data, wl->fw_len);
700 ret = 0;
701 wl->fw_type = fw_type;
702 out:
703 release_firmware(fw);
704
705 return ret;
706 }
707
708 static int wl1271_fetch_nvs(struct wl1271 *wl)
709 {
710 const struct firmware *fw;
711 int ret;
712
713 ret = request_firmware(&fw, WL12XX_NVS_NAME, wl->dev);
714
715 if (ret < 0) {
716 wl1271_error("could not get nvs file %s: %d", WL12XX_NVS_NAME,
717 ret);
718 return ret;
719 }
720
721 wl->nvs = kmemdup(fw->data, fw->size, GFP_KERNEL);
722
723 if (!wl->nvs) {
724 wl1271_error("could not allocate memory for the nvs file");
725 ret = -ENOMEM;
726 goto out;
727 }
728
729 wl->nvs_len = fw->size;
730
731 out:
732 release_firmware(fw);
733
734 return ret;
735 }
736
737 void wl12xx_queue_recovery_work(struct wl1271 *wl)
738 {
739 if (!test_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags))
740 ieee80211_queue_work(wl->hw, &wl->recovery_work);
741 }
742
743 size_t wl12xx_copy_fwlog(struct wl1271 *wl, u8 *memblock, size_t maxlen)
744 {
745 size_t len = 0;
746
747 /* The FW log is a length-value list, find where the log end */
748 while (len < maxlen) {
749 if (memblock[len] == 0)
750 break;
751 if (len + memblock[len] + 1 > maxlen)
752 break;
753 len += memblock[len] + 1;
754 }
755
756 /* Make sure we have enough room */
757 len = min(len, (size_t)(PAGE_SIZE - wl->fwlog_size));
758
759 /* Fill the FW log file, consumed by the sysfs fwlog entry */
760 memcpy(wl->fwlog + wl->fwlog_size, memblock, len);
761 wl->fwlog_size += len;
762
763 return len;
764 }
765
766 static void wl12xx_read_fwlog_panic(struct wl1271 *wl)
767 {
768 u32 addr;
769 u32 first_addr;
770 u8 *block;
771
772 if ((wl->quirks & WLCORE_QUIRK_FWLOG_NOT_IMPLEMENTED) ||
773 (wl->conf.fwlog.mode != WL12XX_FWLOG_ON_DEMAND) ||
774 (wl->conf.fwlog.mem_blocks == 0))
775 return;
776
777 wl1271_info("Reading FW panic log");
778
779 block = kmalloc(WL12XX_HW_BLOCK_SIZE, GFP_KERNEL);
780 if (!block)
781 return;
782
783 /*
784 * Make sure the chip is awake and the logger isn't active.
785 * This might fail if the firmware hanged.
786 */
787 if (!wl1271_ps_elp_wakeup(wl))
788 wl12xx_cmd_stop_fwlog(wl);
789
790 /* Read the first memory block address */
791 wl12xx_fw_status(wl, wl->fw_status_1, wl->fw_status_2);
792 first_addr = le32_to_cpu(wl->fw_status_2->log_start_addr);
793 if (!first_addr)
794 goto out;
795
796 /* Traverse the memory blocks linked list */
797 addr = first_addr;
798 do {
799 memset(block, 0, WL12XX_HW_BLOCK_SIZE);
800 wl1271_read_hwaddr(wl, addr, block, WL12XX_HW_BLOCK_SIZE,
801 false);
802
803 /*
804 * Memory blocks are linked to one another. The first 4 bytes
805 * of each memory block hold the hardware address of the next
806 * one. The last memory block points to the first one.
807 */
808 addr = le32_to_cpup((__le32 *)block);
809 if (!wl12xx_copy_fwlog(wl, block + sizeof(addr),
810 WL12XX_HW_BLOCK_SIZE - sizeof(addr)))
811 break;
812 } while (addr && (addr != first_addr));
813
814 wake_up_interruptible(&wl->fwlog_waitq);
815
816 out:
817 kfree(block);
818 }
819
820 static void wl1271_recovery_work(struct work_struct *work)
821 {
822 struct wl1271 *wl =
823 container_of(work, struct wl1271, recovery_work);
824 struct wl12xx_vif *wlvif;
825 struct ieee80211_vif *vif;
826
827 mutex_lock(&wl->mutex);
828
829 if (wl->state != WL1271_STATE_ON || wl->plt)
830 goto out_unlock;
831
832 /* Avoid a recursive recovery */
833 set_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags);
834
835 wl12xx_read_fwlog_panic(wl);
836
837 /* change partitions momentarily so we can read the FW pc */
838 wlcore_set_partition(wl, &wl->ptable[PART_BOOT]);
839 wl1271_info("Hardware recovery in progress. FW ver: %s pc: 0x%x "
840 "hint_sts: 0x%08x",
841 wl->chip.fw_ver_str,
842 wlcore_read_reg(wl, REG_PC_ON_RECOVERY),
843 wlcore_read_reg(wl, REG_INTERRUPT_NO_CLEAR));
844 wlcore_set_partition(wl, &wl->ptable[PART_WORK]);
845
846 BUG_ON(bug_on_recovery &&
847 !test_bit(WL1271_FLAG_INTENDED_FW_RECOVERY, &wl->flags));
848
849 if (no_recovery) {
850 wl1271_info("No recovery (chosen on module load). Fw will remain stuck.");
851 clear_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags);
852 goto out_unlock;
853 }
854
855 /*
856 * Advance security sequence number to overcome potential progress
857 * in the firmware during recovery. This doens't hurt if the network is
858 * not encrypted.
859 */
860 wl12xx_for_each_wlvif(wl, wlvif) {
861 if (test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags) ||
862 test_bit(WLVIF_FLAG_AP_STARTED, &wlvif->flags))
863 wlvif->tx_security_seq +=
864 WL1271_TX_SQN_POST_RECOVERY_PADDING;
865 }
866
867 /* Prevent spurious TX during FW restart */
868 wlcore_stop_queues(wl, WLCORE_QUEUE_STOP_REASON_FW_RESTART);
869
870 if (wl->sched_scanning) {
871 ieee80211_sched_scan_stopped(wl->hw);
872 wl->sched_scanning = false;
873 }
874
875 /* reboot the chipset */
876 while (!list_empty(&wl->wlvif_list)) {
877 wlvif = list_first_entry(&wl->wlvif_list,
878 struct wl12xx_vif, list);
879 vif = wl12xx_wlvif_to_vif(wlvif);
880 __wl1271_op_remove_interface(wl, vif, false);
881 }
882 mutex_unlock(&wl->mutex);
883 wl1271_op_stop(wl->hw);
884
885 clear_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags);
886
887 ieee80211_restart_hw(wl->hw);
888
889 /*
890 * Its safe to enable TX now - the queues are stopped after a request
891 * to restart the HW.
892 */
893 wlcore_wake_queues(wl, WLCORE_QUEUE_STOP_REASON_FW_RESTART);
894 return;
895 out_unlock:
896 mutex_unlock(&wl->mutex);
897 }
898
899 static void wl1271_fw_wakeup(struct wl1271 *wl)
900 {
901 wl1271_raw_write32(wl, HW_ACCESS_ELP_CTRL_REG, ELPCTRL_WAKE_UP);
902 }
903
904 static int wl1271_setup(struct wl1271 *wl)
905 {
906 wl->fw_status_1 = kmalloc(WLCORE_FW_STATUS_1_LEN(wl->num_rx_desc) +
907 sizeof(*wl->fw_status_2) +
908 wl->fw_status_priv_len, GFP_KERNEL);
909 if (!wl->fw_status_1)
910 return -ENOMEM;
911
912 wl->fw_status_2 = (struct wl_fw_status_2 *)
913 (((u8 *) wl->fw_status_1) +
914 WLCORE_FW_STATUS_1_LEN(wl->num_rx_desc));
915
916 wl->tx_res_if = kmalloc(sizeof(*wl->tx_res_if), GFP_KERNEL);
917 if (!wl->tx_res_if) {
918 kfree(wl->fw_status_1);
919 return -ENOMEM;
920 }
921
922 return 0;
923 }
924
925 static int wl12xx_set_power_on(struct wl1271 *wl)
926 {
927 int ret;
928
929 msleep(WL1271_PRE_POWER_ON_SLEEP);
930 ret = wl1271_power_on(wl);
931 if (ret < 0)
932 goto out;
933 msleep(WL1271_POWER_ON_SLEEP);
934 wl1271_io_reset(wl);
935 wl1271_io_init(wl);
936
937 wlcore_set_partition(wl, &wl->ptable[PART_BOOT]);
938
939 /* ELP module wake up */
940 wl1271_fw_wakeup(wl);
941
942 out:
943 return ret;
944 }
945
946 static int wl12xx_chip_wakeup(struct wl1271 *wl, bool plt)
947 {
948 int ret = 0;
949
950 ret = wl12xx_set_power_on(wl);
951 if (ret < 0)
952 goto out;
953
954 /*
955 * For wl127x based devices we could use the default block
956 * size (512 bytes), but due to a bug in the sdio driver, we
957 * need to set it explicitly after the chip is powered on. To
958 * simplify the code and since the performance impact is
959 * negligible, we use the same block size for all different
960 * chip types.
961 *
962 * Check if the bus supports blocksize alignment and, if it
963 * doesn't, make sure we don't have the quirk.
964 */
965 if (!wl1271_set_block_size(wl))
966 wl->quirks &= ~WLCORE_QUIRK_TX_BLOCKSIZE_ALIGN;
967
968 /* TODO: make sure the lower driver has set things up correctly */
969
970 ret = wl1271_setup(wl);
971 if (ret < 0)
972 goto out;
973
974 ret = wl12xx_fetch_firmware(wl, plt);
975 if (ret < 0)
976 goto out;
977
978 /* No NVS from netlink, try to get it from the filesystem */
979 if (wl->nvs == NULL) {
980 ret = wl1271_fetch_nvs(wl);
981 if (ret < 0)
982 goto out;
983 }
984
985 out:
986 return ret;
987 }
988
989 int wl1271_plt_start(struct wl1271 *wl)
990 {
991 int retries = WL1271_BOOT_RETRIES;
992 struct wiphy *wiphy = wl->hw->wiphy;
993 int ret;
994
995 mutex_lock(&wl->mutex);
996
997 wl1271_notice("power up");
998
999 if (wl->state != WL1271_STATE_OFF) {
1000 wl1271_error("cannot go into PLT state because not "
1001 "in off state: %d", wl->state);
1002 ret = -EBUSY;
1003 goto out;
1004 }
1005
1006 while (retries) {
1007 retries--;
1008 ret = wl12xx_chip_wakeup(wl, true);
1009 if (ret < 0)
1010 goto power_off;
1011
1012 ret = wl->ops->plt_init(wl);
1013 if (ret < 0)
1014 goto power_off;
1015
1016 wl->plt = true;
1017 wl->state = WL1271_STATE_ON;
1018 wl1271_notice("firmware booted in PLT mode (%s)",
1019 wl->chip.fw_ver_str);
1020
1021 /* update hw/fw version info in wiphy struct */
1022 wiphy->hw_version = wl->chip.id;
1023 strncpy(wiphy->fw_version, wl->chip.fw_ver_str,
1024 sizeof(wiphy->fw_version));
1025
1026 goto out;
1027
1028 power_off:
1029 wl1271_power_off(wl);
1030 }
1031
1032 wl1271_error("firmware boot in PLT mode failed despite %d retries",
1033 WL1271_BOOT_RETRIES);
1034 out:
1035 mutex_unlock(&wl->mutex);
1036
1037 return ret;
1038 }
1039
1040 int wl1271_plt_stop(struct wl1271 *wl)
1041 {
1042 int ret = 0;
1043
1044 wl1271_notice("power down");
1045
1046 /*
1047 * Interrupts must be disabled before setting the state to OFF.
1048 * Otherwise, the interrupt handler might be called and exit without
1049 * reading the interrupt status.
1050 */
1051 wlcore_disable_interrupts(wl);
1052 mutex_lock(&wl->mutex);
1053 if (!wl->plt) {
1054 mutex_unlock(&wl->mutex);
1055
1056 /*
1057 * This will not necessarily enable interrupts as interrupts
1058 * may have been disabled when op_stop was called. It will,
1059 * however, balance the above call to disable_interrupts().
1060 */
1061 wlcore_enable_interrupts(wl);
1062
1063 wl1271_error("cannot power down because not in PLT "
1064 "state: %d", wl->state);
1065 ret = -EBUSY;
1066 goto out;
1067 }
1068
1069 mutex_unlock(&wl->mutex);
1070
1071 wl1271_flush_deferred_work(wl);
1072 cancel_work_sync(&wl->netstack_work);
1073 cancel_work_sync(&wl->recovery_work);
1074 cancel_delayed_work_sync(&wl->elp_work);
1075 cancel_delayed_work_sync(&wl->tx_watchdog_work);
1076 cancel_delayed_work_sync(&wl->connection_loss_work);
1077
1078 mutex_lock(&wl->mutex);
1079 wl1271_power_off(wl);
1080 wl->flags = 0;
1081 wl->state = WL1271_STATE_OFF;
1082 wl->plt = false;
1083 wl->rx_counter = 0;
1084 mutex_unlock(&wl->mutex);
1085
1086 out:
1087 return ret;
1088 }
1089
1090 static void wl1271_op_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
1091 {
1092 struct wl1271 *wl = hw->priv;
1093 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
1094 struct ieee80211_vif *vif = info->control.vif;
1095 struct wl12xx_vif *wlvif = NULL;
1096 unsigned long flags;
1097 int q, mapping;
1098 u8 hlid;
1099
1100 if (vif)
1101 wlvif = wl12xx_vif_to_data(vif);
1102
1103 mapping = skb_get_queue_mapping(skb);
1104 q = wl1271_tx_get_queue(mapping);
1105
1106 hlid = wl12xx_tx_get_hlid(wl, wlvif, skb);
1107
1108 spin_lock_irqsave(&wl->wl_lock, flags);
1109
1110 /*
1111 * drop the packet if the link is invalid or the queue is stopped
1112 * for any reason but watermark. Watermark is a "soft"-stop so we
1113 * allow these packets through.
1114 */
1115 if (hlid == WL12XX_INVALID_LINK_ID ||
1116 (wlvif && !test_bit(hlid, wlvif->links_map)) ||
1117 (wlcore_is_queue_stopped(wl, q) &&
1118 !wlcore_is_queue_stopped_by_reason(wl, q,
1119 WLCORE_QUEUE_STOP_REASON_WATERMARK))) {
1120 wl1271_debug(DEBUG_TX, "DROP skb hlid %d q %d", hlid, q);
1121 ieee80211_free_txskb(hw, skb);
1122 goto out;
1123 }
1124
1125 wl1271_debug(DEBUG_TX, "queue skb hlid %d q %d len %d",
1126 hlid, q, skb->len);
1127 skb_queue_tail(&wl->links[hlid].tx_queue[q], skb);
1128
1129 wl->tx_queue_count[q]++;
1130
1131 /*
1132 * The workqueue is slow to process the tx_queue and we need stop
1133 * the queue here, otherwise the queue will get too long.
1134 */
1135 if (wl->tx_queue_count[q] >= WL1271_TX_QUEUE_HIGH_WATERMARK) {
1136 wl1271_debug(DEBUG_TX, "op_tx: stopping queues for q %d", q);
1137 wlcore_stop_queue_locked(wl, q,
1138 WLCORE_QUEUE_STOP_REASON_WATERMARK);
1139 }
1140
1141 /*
1142 * The chip specific setup must run before the first TX packet -
1143 * before that, the tx_work will not be initialized!
1144 */
1145
1146 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags) &&
1147 !test_bit(WL1271_FLAG_TX_PENDING, &wl->flags))
1148 ieee80211_queue_work(wl->hw, &wl->tx_work);
1149
1150 out:
1151 spin_unlock_irqrestore(&wl->wl_lock, flags);
1152 }
1153
1154 int wl1271_tx_dummy_packet(struct wl1271 *wl)
1155 {
1156 unsigned long flags;
1157 int q;
1158
1159 /* no need to queue a new dummy packet if one is already pending */
1160 if (test_bit(WL1271_FLAG_DUMMY_PACKET_PENDING, &wl->flags))
1161 return 0;
1162
1163 q = wl1271_tx_get_queue(skb_get_queue_mapping(wl->dummy_packet));
1164
1165 spin_lock_irqsave(&wl->wl_lock, flags);
1166 set_bit(WL1271_FLAG_DUMMY_PACKET_PENDING, &wl->flags);
1167 wl->tx_queue_count[q]++;
1168 spin_unlock_irqrestore(&wl->wl_lock, flags);
1169
1170 /* The FW is low on RX memory blocks, so send the dummy packet asap */
1171 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags))
1172 wl1271_tx_work_locked(wl);
1173
1174 /*
1175 * If the FW TX is busy, TX work will be scheduled by the threaded
1176 * interrupt handler function
1177 */
1178 return 0;
1179 }
1180
1181 /*
1182 * The size of the dummy packet should be at least 1400 bytes. However, in
1183 * order to minimize the number of bus transactions, aligning it to 512 bytes
1184 * boundaries could be beneficial, performance wise
1185 */
1186 #define TOTAL_TX_DUMMY_PACKET_SIZE (ALIGN(1400, 512))
1187
1188 static struct sk_buff *wl12xx_alloc_dummy_packet(struct wl1271 *wl)
1189 {
1190 struct sk_buff *skb;
1191 struct ieee80211_hdr_3addr *hdr;
1192 unsigned int dummy_packet_size;
1193
1194 dummy_packet_size = TOTAL_TX_DUMMY_PACKET_SIZE -
1195 sizeof(struct wl1271_tx_hw_descr) - sizeof(*hdr);
1196
1197 skb = dev_alloc_skb(TOTAL_TX_DUMMY_PACKET_SIZE);
1198 if (!skb) {
1199 wl1271_warning("Failed to allocate a dummy packet skb");
1200 return NULL;
1201 }
1202
1203 skb_reserve(skb, sizeof(struct wl1271_tx_hw_descr));
1204
1205 hdr = (struct ieee80211_hdr_3addr *) skb_put(skb, sizeof(*hdr));
1206 memset(hdr, 0, sizeof(*hdr));
1207 hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_DATA |
1208 IEEE80211_STYPE_NULLFUNC |
1209 IEEE80211_FCTL_TODS);
1210
1211 memset(skb_put(skb, dummy_packet_size), 0, dummy_packet_size);
1212
1213 /* Dummy packets require the TID to be management */
1214 skb->priority = WL1271_TID_MGMT;
1215
1216 /* Initialize all fields that might be used */
1217 skb_set_queue_mapping(skb, 0);
1218 memset(IEEE80211_SKB_CB(skb), 0, sizeof(struct ieee80211_tx_info));
1219
1220 return skb;
1221 }
1222
1223
1224 #ifdef CONFIG_PM
1225 static int
1226 wl1271_validate_wowlan_pattern(struct cfg80211_wowlan_trig_pkt_pattern *p)
1227 {
1228 int num_fields = 0, in_field = 0, fields_size = 0;
1229 int i, pattern_len = 0;
1230
1231 if (!p->mask) {
1232 wl1271_warning("No mask in WoWLAN pattern");
1233 return -EINVAL;
1234 }
1235
1236 /*
1237 * The pattern is broken up into segments of bytes at different offsets
1238 * that need to be checked by the FW filter. Each segment is called
1239 * a field in the FW API. We verify that the total number of fields
1240 * required for this pattern won't exceed FW limits (8)
1241 * as well as the total fields buffer won't exceed the FW limit.
1242 * Note that if there's a pattern which crosses Ethernet/IP header
1243 * boundary a new field is required.
1244 */
1245 for (i = 0; i < p->pattern_len; i++) {
1246 if (test_bit(i, (unsigned long *)p->mask)) {
1247 if (!in_field) {
1248 in_field = 1;
1249 pattern_len = 1;
1250 } else {
1251 if (i == WL1271_RX_FILTER_ETH_HEADER_SIZE) {
1252 num_fields++;
1253 fields_size += pattern_len +
1254 RX_FILTER_FIELD_OVERHEAD;
1255 pattern_len = 1;
1256 } else
1257 pattern_len++;
1258 }
1259 } else {
1260 if (in_field) {
1261 in_field = 0;
1262 fields_size += pattern_len +
1263 RX_FILTER_FIELD_OVERHEAD;
1264 num_fields++;
1265 }
1266 }
1267 }
1268
1269 if (in_field) {
1270 fields_size += pattern_len + RX_FILTER_FIELD_OVERHEAD;
1271 num_fields++;
1272 }
1273
1274 if (num_fields > WL1271_RX_FILTER_MAX_FIELDS) {
1275 wl1271_warning("RX Filter too complex. Too many segments");
1276 return -EINVAL;
1277 }
1278
1279 if (fields_size > WL1271_RX_FILTER_MAX_FIELDS_SIZE) {
1280 wl1271_warning("RX filter pattern is too big");
1281 return -E2BIG;
1282 }
1283
1284 return 0;
1285 }
1286
1287 struct wl12xx_rx_filter *wl1271_rx_filter_alloc(void)
1288 {
1289 return kzalloc(sizeof(struct wl12xx_rx_filter), GFP_KERNEL);
1290 }
1291
1292 void wl1271_rx_filter_free(struct wl12xx_rx_filter *filter)
1293 {
1294 int i;
1295
1296 if (filter == NULL)
1297 return;
1298
1299 for (i = 0; i < filter->num_fields; i++)
1300 kfree(filter->fields[i].pattern);
1301
1302 kfree(filter);
1303 }
1304
1305 int wl1271_rx_filter_alloc_field(struct wl12xx_rx_filter *filter,
1306 u16 offset, u8 flags,
1307 u8 *pattern, u8 len)
1308 {
1309 struct wl12xx_rx_filter_field *field;
1310
1311 if (filter->num_fields == WL1271_RX_FILTER_MAX_FIELDS) {
1312 wl1271_warning("Max fields per RX filter. can't alloc another");
1313 return -EINVAL;
1314 }
1315
1316 field = &filter->fields[filter->num_fields];
1317
1318 field->pattern = kzalloc(len, GFP_KERNEL);
1319 if (!field->pattern) {
1320 wl1271_warning("Failed to allocate RX filter pattern");
1321 return -ENOMEM;
1322 }
1323
1324 filter->num_fields++;
1325
1326 field->offset = cpu_to_le16(offset);
1327 field->flags = flags;
1328 field->len = len;
1329 memcpy(field->pattern, pattern, len);
1330
1331 return 0;
1332 }
1333
1334 int wl1271_rx_filter_get_fields_size(struct wl12xx_rx_filter *filter)
1335 {
1336 int i, fields_size = 0;
1337
1338 for (i = 0; i < filter->num_fields; i++)
1339 fields_size += filter->fields[i].len +
1340 sizeof(struct wl12xx_rx_filter_field) -
1341 sizeof(u8 *);
1342
1343 return fields_size;
1344 }
1345
1346 void wl1271_rx_filter_flatten_fields(struct wl12xx_rx_filter *filter,
1347 u8 *buf)
1348 {
1349 int i;
1350 struct wl12xx_rx_filter_field *field;
1351
1352 for (i = 0; i < filter->num_fields; i++) {
1353 field = (struct wl12xx_rx_filter_field *)buf;
1354
1355 field->offset = filter->fields[i].offset;
1356 field->flags = filter->fields[i].flags;
1357 field->len = filter->fields[i].len;
1358
1359 memcpy(&field->pattern, filter->fields[i].pattern, field->len);
1360 buf += sizeof(struct wl12xx_rx_filter_field) -
1361 sizeof(u8 *) + field->len;
1362 }
1363 }
1364
1365 /*
1366 * Allocates an RX filter returned through f
1367 * which needs to be freed using rx_filter_free()
1368 */
1369 static int wl1271_convert_wowlan_pattern_to_rx_filter(
1370 struct cfg80211_wowlan_trig_pkt_pattern *p,
1371 struct wl12xx_rx_filter **f)
1372 {
1373 int i, j, ret = 0;
1374 struct wl12xx_rx_filter *filter;
1375 u16 offset;
1376 u8 flags, len;
1377
1378 filter = wl1271_rx_filter_alloc();
1379 if (!filter) {
1380 wl1271_warning("Failed to alloc rx filter");
1381 ret = -ENOMEM;
1382 goto err;
1383 }
1384
1385 i = 0;
1386 while (i < p->pattern_len) {
1387 if (!test_bit(i, (unsigned long *)p->mask)) {
1388 i++;
1389 continue;
1390 }
1391
1392 for (j = i; j < p->pattern_len; j++) {
1393 if (!test_bit(j, (unsigned long *)p->mask))
1394 break;
1395
1396 if (i < WL1271_RX_FILTER_ETH_HEADER_SIZE &&
1397 j >= WL1271_RX_FILTER_ETH_HEADER_SIZE)
1398 break;
1399 }
1400
1401 if (i < WL1271_RX_FILTER_ETH_HEADER_SIZE) {
1402 offset = i;
1403 flags = WL1271_RX_FILTER_FLAG_ETHERNET_HEADER;
1404 } else {
1405 offset = i - WL1271_RX_FILTER_ETH_HEADER_SIZE;
1406 flags = WL1271_RX_FILTER_FLAG_IP_HEADER;
1407 }
1408
1409 len = j - i;
1410
1411 ret = wl1271_rx_filter_alloc_field(filter,
1412 offset,
1413 flags,
1414 &p->pattern[i], len);
1415 if (ret)
1416 goto err;
1417
1418 i = j;
1419 }
1420
1421 filter->action = FILTER_SIGNAL;
1422
1423 *f = filter;
1424 return 0;
1425
1426 err:
1427 wl1271_rx_filter_free(filter);
1428 *f = NULL;
1429
1430 return ret;
1431 }
1432
1433 static int wl1271_configure_wowlan(struct wl1271 *wl,
1434 struct cfg80211_wowlan *wow)
1435 {
1436 int i, ret;
1437
1438 if (!wow || wow->any || !wow->n_patterns) {
1439 wl1271_acx_default_rx_filter_enable(wl, 0, FILTER_SIGNAL);
1440 wl1271_rx_filter_clear_all(wl);
1441 return 0;
1442 }
1443
1444 if (WARN_ON(wow->n_patterns > WL1271_MAX_RX_FILTERS))
1445 return -EINVAL;
1446
1447 /* Validate all incoming patterns before clearing current FW state */
1448 for (i = 0; i < wow->n_patterns; i++) {
1449 ret = wl1271_validate_wowlan_pattern(&wow->patterns[i]);
1450 if (ret) {
1451 wl1271_warning("Bad wowlan pattern %d", i);
1452 return ret;
1453 }
1454 }
1455
1456 wl1271_acx_default_rx_filter_enable(wl, 0, FILTER_SIGNAL);
1457 wl1271_rx_filter_clear_all(wl);
1458
1459 /* Translate WoWLAN patterns into filters */
1460 for (i = 0; i < wow->n_patterns; i++) {
1461 struct cfg80211_wowlan_trig_pkt_pattern *p;
1462 struct wl12xx_rx_filter *filter = NULL;
1463
1464 p = &wow->patterns[i];
1465
1466 ret = wl1271_convert_wowlan_pattern_to_rx_filter(p, &filter);
1467 if (ret) {
1468 wl1271_warning("Failed to create an RX filter from "
1469 "wowlan pattern %d", i);
1470 goto out;
1471 }
1472
1473 ret = wl1271_rx_filter_enable(wl, i, 1, filter);
1474
1475 wl1271_rx_filter_free(filter);
1476 if (ret)
1477 goto out;
1478 }
1479
1480 ret = wl1271_acx_default_rx_filter_enable(wl, 1, FILTER_DROP);
1481
1482 out:
1483 return ret;
1484 }
1485
1486 static int wl1271_configure_suspend_sta(struct wl1271 *wl,
1487 struct wl12xx_vif *wlvif,
1488 struct cfg80211_wowlan *wow)
1489 {
1490 int ret = 0;
1491
1492 if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags))
1493 goto out;
1494
1495 ret = wl1271_ps_elp_wakeup(wl);
1496 if (ret < 0)
1497 goto out;
1498
1499 wl1271_configure_wowlan(wl, wow);
1500 ret = wl1271_acx_wake_up_conditions(wl, wlvif,
1501 wl->conf.conn.suspend_wake_up_event,
1502 wl->conf.conn.suspend_listen_interval);
1503
1504 if (ret < 0)
1505 wl1271_error("suspend: set wake up conditions failed: %d", ret);
1506
1507 wl1271_ps_elp_sleep(wl);
1508
1509 out:
1510 return ret;
1511
1512 }
1513
1514 static int wl1271_configure_suspend_ap(struct wl1271 *wl,
1515 struct wl12xx_vif *wlvif)
1516 {
1517 int ret = 0;
1518
1519 if (!test_bit(WLVIF_FLAG_AP_STARTED, &wlvif->flags))
1520 goto out;
1521
1522 ret = wl1271_ps_elp_wakeup(wl);
1523 if (ret < 0)
1524 goto out;
1525
1526 ret = wl1271_acx_beacon_filter_opt(wl, wlvif, true);
1527
1528 wl1271_ps_elp_sleep(wl);
1529 out:
1530 return ret;
1531
1532 }
1533
1534 static int wl1271_configure_suspend(struct wl1271 *wl,
1535 struct wl12xx_vif *wlvif,
1536 struct cfg80211_wowlan *wow)
1537 {
1538 if (wlvif->bss_type == BSS_TYPE_STA_BSS)
1539 return wl1271_configure_suspend_sta(wl, wlvif, wow);
1540 if (wlvif->bss_type == BSS_TYPE_AP_BSS)
1541 return wl1271_configure_suspend_ap(wl, wlvif);
1542 return 0;
1543 }
1544
1545 static void wl1271_configure_resume(struct wl1271 *wl,
1546 struct wl12xx_vif *wlvif)
1547 {
1548 int ret = 0;
1549 bool is_ap = wlvif->bss_type == BSS_TYPE_AP_BSS;
1550 bool is_sta = wlvif->bss_type == BSS_TYPE_STA_BSS;
1551
1552 if ((!is_ap) && (!is_sta))
1553 return;
1554
1555 ret = wl1271_ps_elp_wakeup(wl);
1556 if (ret < 0)
1557 return;
1558
1559 if (is_sta) {
1560 wl1271_configure_wowlan(wl, NULL);
1561
1562 ret = wl1271_acx_wake_up_conditions(wl, wlvif,
1563 wl->conf.conn.wake_up_event,
1564 wl->conf.conn.listen_interval);
1565
1566 if (ret < 0)
1567 wl1271_error("resume: wake up conditions failed: %d",
1568 ret);
1569
1570 } else if (is_ap) {
1571 ret = wl1271_acx_beacon_filter_opt(wl, wlvif, false);
1572 }
1573
1574 wl1271_ps_elp_sleep(wl);
1575 }
1576
1577 static int wl1271_op_suspend(struct ieee80211_hw *hw,
1578 struct cfg80211_wowlan *wow)
1579 {
1580 struct wl1271 *wl = hw->priv;
1581 struct wl12xx_vif *wlvif;
1582 int ret;
1583
1584 wl1271_debug(DEBUG_MAC80211, "mac80211 suspend wow=%d", !!wow);
1585 WARN_ON(!wow);
1586
1587 wl1271_tx_flush(wl);
1588
1589 mutex_lock(&wl->mutex);
1590 wl->wow_enabled = true;
1591 wl12xx_for_each_wlvif(wl, wlvif) {
1592 ret = wl1271_configure_suspend(wl, wlvif, wow);
1593 if (ret < 0) {
1594 mutex_unlock(&wl->mutex);
1595 wl1271_warning("couldn't prepare device to suspend");
1596 return ret;
1597 }
1598 }
1599 mutex_unlock(&wl->mutex);
1600 /* flush any remaining work */
1601 wl1271_debug(DEBUG_MAC80211, "flushing remaining works");
1602
1603 /*
1604 * disable and re-enable interrupts in order to flush
1605 * the threaded_irq
1606 */
1607 wlcore_disable_interrupts(wl);
1608
1609 /*
1610 * set suspended flag to avoid triggering a new threaded_irq
1611 * work. no need for spinlock as interrupts are disabled.
1612 */
1613 set_bit(WL1271_FLAG_SUSPENDED, &wl->flags);
1614
1615 wlcore_enable_interrupts(wl);
1616 flush_work(&wl->tx_work);
1617 flush_delayed_work(&wl->elp_work);
1618
1619 return 0;
1620 }
1621
1622 static int wl1271_op_resume(struct ieee80211_hw *hw)
1623 {
1624 struct wl1271 *wl = hw->priv;
1625 struct wl12xx_vif *wlvif;
1626 unsigned long flags;
1627 bool run_irq_work = false;
1628
1629 wl1271_debug(DEBUG_MAC80211, "mac80211 resume wow=%d",
1630 wl->wow_enabled);
1631 WARN_ON(!wl->wow_enabled);
1632
1633 /*
1634 * re-enable irq_work enqueuing, and call irq_work directly if
1635 * there is a pending work.
1636 */
1637 spin_lock_irqsave(&wl->wl_lock, flags);
1638 clear_bit(WL1271_FLAG_SUSPENDED, &wl->flags);
1639 if (test_and_clear_bit(WL1271_FLAG_PENDING_WORK, &wl->flags))
1640 run_irq_work = true;
1641 spin_unlock_irqrestore(&wl->wl_lock, flags);
1642
1643 if (run_irq_work) {
1644 wl1271_debug(DEBUG_MAC80211,
1645 "run postponed irq_work directly");
1646 wl1271_irq(0, wl);
1647 wlcore_enable_interrupts(wl);
1648 }
1649
1650 mutex_lock(&wl->mutex);
1651 wl12xx_for_each_wlvif(wl, wlvif) {
1652 wl1271_configure_resume(wl, wlvif);
1653 }
1654 wl->wow_enabled = false;
1655 mutex_unlock(&wl->mutex);
1656
1657 return 0;
1658 }
1659 #endif
1660
1661 static int wl1271_op_start(struct ieee80211_hw *hw)
1662 {
1663 wl1271_debug(DEBUG_MAC80211, "mac80211 start");
1664
1665 /*
1666 * We have to delay the booting of the hardware because
1667 * we need to know the local MAC address before downloading and
1668 * initializing the firmware. The MAC address cannot be changed
1669 * after boot, and without the proper MAC address, the firmware
1670 * will not function properly.
1671 *
1672 * The MAC address is first known when the corresponding interface
1673 * is added. That is where we will initialize the hardware.
1674 */
1675
1676 return 0;
1677 }
1678
1679 static void wl1271_op_stop(struct ieee80211_hw *hw)
1680 {
1681 struct wl1271 *wl = hw->priv;
1682 int i;
1683
1684 wl1271_debug(DEBUG_MAC80211, "mac80211 stop");
1685
1686 /*
1687 * Interrupts must be disabled before setting the state to OFF.
1688 * Otherwise, the interrupt handler might be called and exit without
1689 * reading the interrupt status.
1690 */
1691 wlcore_disable_interrupts(wl);
1692 mutex_lock(&wl->mutex);
1693 if (wl->state == WL1271_STATE_OFF) {
1694 mutex_unlock(&wl->mutex);
1695
1696 /*
1697 * This will not necessarily enable interrupts as interrupts
1698 * may have been disabled when op_stop was called. It will,
1699 * however, balance the above call to disable_interrupts().
1700 */
1701 wlcore_enable_interrupts(wl);
1702 return;
1703 }
1704
1705 /*
1706 * this must be before the cancel_work calls below, so that the work
1707 * functions don't perform further work.
1708 */
1709 wl->state = WL1271_STATE_OFF;
1710 mutex_unlock(&wl->mutex);
1711
1712 wl1271_flush_deferred_work(wl);
1713 cancel_delayed_work_sync(&wl->scan_complete_work);
1714 cancel_work_sync(&wl->netstack_work);
1715 cancel_work_sync(&wl->tx_work);
1716 cancel_delayed_work_sync(&wl->elp_work);
1717 cancel_delayed_work_sync(&wl->tx_watchdog_work);
1718 cancel_delayed_work_sync(&wl->connection_loss_work);
1719
1720 /* let's notify MAC80211 about the remaining pending TX frames */
1721 wl12xx_tx_reset(wl);
1722 mutex_lock(&wl->mutex);
1723
1724 wl1271_power_off(wl);
1725
1726 wl->band = IEEE80211_BAND_2GHZ;
1727
1728 wl->rx_counter = 0;
1729 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
1730 wl->channel_type = NL80211_CHAN_NO_HT;
1731 wl->tx_blocks_available = 0;
1732 wl->tx_allocated_blocks = 0;
1733 wl->tx_results_count = 0;
1734 wl->tx_packets_count = 0;
1735 wl->time_offset = 0;
1736 wl->ap_fw_ps_map = 0;
1737 wl->ap_ps_map = 0;
1738 wl->sched_scanning = false;
1739 memset(wl->roles_map, 0, sizeof(wl->roles_map));
1740 memset(wl->links_map, 0, sizeof(wl->links_map));
1741 memset(wl->roc_map, 0, sizeof(wl->roc_map));
1742 wl->active_sta_count = 0;
1743
1744 /* The system link is always allocated */
1745 __set_bit(WL12XX_SYSTEM_HLID, wl->links_map);
1746
1747 /*
1748 * this is performed after the cancel_work calls and the associated
1749 * mutex_lock, so that wl1271_op_add_interface does not accidentally
1750 * get executed before all these vars have been reset.
1751 */
1752 wl->flags = 0;
1753
1754 wl->tx_blocks_freed = 0;
1755
1756 for (i = 0; i < NUM_TX_QUEUES; i++) {
1757 wl->tx_pkts_freed[i] = 0;
1758 wl->tx_allocated_pkts[i] = 0;
1759 }
1760
1761 wl1271_debugfs_reset(wl);
1762
1763 kfree(wl->fw_status_1);
1764 wl->fw_status_1 = NULL;
1765 wl->fw_status_2 = NULL;
1766 kfree(wl->tx_res_if);
1767 wl->tx_res_if = NULL;
1768 kfree(wl->target_mem_map);
1769 wl->target_mem_map = NULL;
1770
1771 mutex_unlock(&wl->mutex);
1772 }
1773
1774 static int wl12xx_allocate_rate_policy(struct wl1271 *wl, u8 *idx)
1775 {
1776 u8 policy = find_first_zero_bit(wl->rate_policies_map,
1777 WL12XX_MAX_RATE_POLICIES);
1778 if (policy >= WL12XX_MAX_RATE_POLICIES)
1779 return -EBUSY;
1780
1781 __set_bit(policy, wl->rate_policies_map);
1782 *idx = policy;
1783 return 0;
1784 }
1785
1786 static void wl12xx_free_rate_policy(struct wl1271 *wl, u8 *idx)
1787 {
1788 if (WARN_ON(*idx >= WL12XX_MAX_RATE_POLICIES))
1789 return;
1790
1791 __clear_bit(*idx, wl->rate_policies_map);
1792 *idx = WL12XX_MAX_RATE_POLICIES;
1793 }
1794
1795 static u8 wl12xx_get_role_type(struct wl1271 *wl, struct wl12xx_vif *wlvif)
1796 {
1797 switch (wlvif->bss_type) {
1798 case BSS_TYPE_AP_BSS:
1799 if (wlvif->p2p)
1800 return WL1271_ROLE_P2P_GO;
1801 else
1802 return WL1271_ROLE_AP;
1803
1804 case BSS_TYPE_STA_BSS:
1805 if (wlvif->p2p)
1806 return WL1271_ROLE_P2P_CL;
1807 else
1808 return WL1271_ROLE_STA;
1809
1810 case BSS_TYPE_IBSS:
1811 return WL1271_ROLE_IBSS;
1812
1813 default:
1814 wl1271_error("invalid bss_type: %d", wlvif->bss_type);
1815 }
1816 return WL12XX_INVALID_ROLE_TYPE;
1817 }
1818
1819 static int wl12xx_init_vif_data(struct wl1271 *wl, struct ieee80211_vif *vif)
1820 {
1821 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
1822 int i;
1823
1824 /* clear everything but the persistent data */
1825 memset(wlvif, 0, offsetof(struct wl12xx_vif, persistent));
1826
1827 switch (ieee80211_vif_type_p2p(vif)) {
1828 case NL80211_IFTYPE_P2P_CLIENT:
1829 wlvif->p2p = 1;
1830 /* fall-through */
1831 case NL80211_IFTYPE_STATION:
1832 wlvif->bss_type = BSS_TYPE_STA_BSS;
1833 break;
1834 case NL80211_IFTYPE_ADHOC:
1835 wlvif->bss_type = BSS_TYPE_IBSS;
1836 break;
1837 case NL80211_IFTYPE_P2P_GO:
1838 wlvif->p2p = 1;
1839 /* fall-through */
1840 case NL80211_IFTYPE_AP:
1841 wlvif->bss_type = BSS_TYPE_AP_BSS;
1842 break;
1843 default:
1844 wlvif->bss_type = MAX_BSS_TYPE;
1845 return -EOPNOTSUPP;
1846 }
1847
1848 wlvif->role_id = WL12XX_INVALID_ROLE_ID;
1849 wlvif->dev_role_id = WL12XX_INVALID_ROLE_ID;
1850 wlvif->dev_hlid = WL12XX_INVALID_LINK_ID;
1851
1852 if (wlvif->bss_type == BSS_TYPE_STA_BSS ||
1853 wlvif->bss_type == BSS_TYPE_IBSS) {
1854 /* init sta/ibss data */
1855 wlvif->sta.hlid = WL12XX_INVALID_LINK_ID;
1856 wl12xx_allocate_rate_policy(wl, &wlvif->sta.basic_rate_idx);
1857 wl12xx_allocate_rate_policy(wl, &wlvif->sta.ap_rate_idx);
1858 wl12xx_allocate_rate_policy(wl, &wlvif->sta.p2p_rate_idx);
1859 wlvif->basic_rate_set = CONF_TX_RATE_MASK_BASIC;
1860 wlvif->basic_rate = CONF_TX_RATE_MASK_BASIC;
1861 wlvif->rate_set = CONF_TX_RATE_MASK_BASIC;
1862 } else {
1863 /* init ap data */
1864 wlvif->ap.bcast_hlid = WL12XX_INVALID_LINK_ID;
1865 wlvif->ap.global_hlid = WL12XX_INVALID_LINK_ID;
1866 wl12xx_allocate_rate_policy(wl, &wlvif->ap.mgmt_rate_idx);
1867 wl12xx_allocate_rate_policy(wl, &wlvif->ap.bcast_rate_idx);
1868 for (i = 0; i < CONF_TX_MAX_AC_COUNT; i++)
1869 wl12xx_allocate_rate_policy(wl,
1870 &wlvif->ap.ucast_rate_idx[i]);
1871 wlvif->basic_rate_set = CONF_TX_AP_ENABLED_RATES;
1872 /*
1873 * TODO: check if basic_rate shouldn't be
1874 * wl1271_tx_min_rate_get(wl, wlvif->basic_rate_set);
1875 * instead (the same thing for STA above).
1876 */
1877 wlvif->basic_rate = CONF_TX_AP_ENABLED_RATES;
1878 /* TODO: this seems to be used only for STA, check it */
1879 wlvif->rate_set = CONF_TX_AP_ENABLED_RATES;
1880 }
1881
1882 wlvif->bitrate_masks[IEEE80211_BAND_2GHZ] = wl->conf.tx.basic_rate;
1883 wlvif->bitrate_masks[IEEE80211_BAND_5GHZ] = wl->conf.tx.basic_rate_5;
1884 wlvif->beacon_int = WL1271_DEFAULT_BEACON_INT;
1885
1886 /*
1887 * mac80211 configures some values globally, while we treat them
1888 * per-interface. thus, on init, we have to copy them from wl
1889 */
1890 wlvif->band = wl->band;
1891 wlvif->channel = wl->channel;
1892 wlvif->power_level = wl->power_level;
1893 wlvif->channel_type = wl->channel_type;
1894
1895 INIT_WORK(&wlvif->rx_streaming_enable_work,
1896 wl1271_rx_streaming_enable_work);
1897 INIT_WORK(&wlvif->rx_streaming_disable_work,
1898 wl1271_rx_streaming_disable_work);
1899 INIT_LIST_HEAD(&wlvif->list);
1900
1901 setup_timer(&wlvif->rx_streaming_timer, wl1271_rx_streaming_timer,
1902 (unsigned long) wlvif);
1903 return 0;
1904 }
1905
1906 static bool wl12xx_init_fw(struct wl1271 *wl)
1907 {
1908 int retries = WL1271_BOOT_RETRIES;
1909 bool booted = false;
1910 struct wiphy *wiphy = wl->hw->wiphy;
1911 int ret;
1912
1913 while (retries) {
1914 retries--;
1915 ret = wl12xx_chip_wakeup(wl, false);
1916 if (ret < 0)
1917 goto power_off;
1918
1919 ret = wl->ops->boot(wl);
1920 if (ret < 0)
1921 goto power_off;
1922
1923 ret = wl1271_hw_init(wl);
1924 if (ret < 0)
1925 goto irq_disable;
1926
1927 booted = true;
1928 break;
1929
1930 irq_disable:
1931 mutex_unlock(&wl->mutex);
1932 /* Unlocking the mutex in the middle of handling is
1933 inherently unsafe. In this case we deem it safe to do,
1934 because we need to let any possibly pending IRQ out of
1935 the system (and while we are WL1271_STATE_OFF the IRQ
1936 work function will not do anything.) Also, any other
1937 possible concurrent operations will fail due to the
1938 current state, hence the wl1271 struct should be safe. */
1939 wlcore_disable_interrupts(wl);
1940 wl1271_flush_deferred_work(wl);
1941 cancel_work_sync(&wl->netstack_work);
1942 mutex_lock(&wl->mutex);
1943 power_off:
1944 wl1271_power_off(wl);
1945 }
1946
1947 if (!booted) {
1948 wl1271_error("firmware boot failed despite %d retries",
1949 WL1271_BOOT_RETRIES);
1950 goto out;
1951 }
1952
1953 wl1271_info("firmware booted (%s)", wl->chip.fw_ver_str);
1954
1955 /* update hw/fw version info in wiphy struct */
1956 wiphy->hw_version = wl->chip.id;
1957 strncpy(wiphy->fw_version, wl->chip.fw_ver_str,
1958 sizeof(wiphy->fw_version));
1959
1960 /*
1961 * Now we know if 11a is supported (info from the NVS), so disable
1962 * 11a channels if not supported
1963 */
1964 if (!wl->enable_11a)
1965 wiphy->bands[IEEE80211_BAND_5GHZ]->n_channels = 0;
1966
1967 wl1271_debug(DEBUG_MAC80211, "11a is %ssupported",
1968 wl->enable_11a ? "" : "not ");
1969
1970 wl->state = WL1271_STATE_ON;
1971 out:
1972 return booted;
1973 }
1974
1975 static bool wl12xx_dev_role_started(struct wl12xx_vif *wlvif)
1976 {
1977 return wlvif->dev_hlid != WL12XX_INVALID_LINK_ID;
1978 }
1979
1980 /*
1981 * Check whether a fw switch (i.e. moving from one loaded
1982 * fw to another) is needed. This function is also responsible
1983 * for updating wl->last_vif_count, so it must be called before
1984 * loading a non-plt fw (so the correct fw (single-role/multi-role)
1985 * will be used).
1986 */
1987 static bool wl12xx_need_fw_change(struct wl1271 *wl,
1988 struct vif_counter_data vif_counter_data,
1989 bool add)
1990 {
1991 enum wl12xx_fw_type current_fw = wl->fw_type;
1992 u8 vif_count = vif_counter_data.counter;
1993
1994 if (test_bit(WL1271_FLAG_VIF_CHANGE_IN_PROGRESS, &wl->flags))
1995 return false;
1996
1997 /* increase the vif count if this is a new vif */
1998 if (add && !vif_counter_data.cur_vif_running)
1999 vif_count++;
2000
2001 wl->last_vif_count = vif_count;
2002
2003 /* no need for fw change if the device is OFF */
2004 if (wl->state == WL1271_STATE_OFF)
2005 return false;
2006
2007 if (vif_count > 1 && current_fw == WL12XX_FW_TYPE_NORMAL)
2008 return true;
2009 if (vif_count <= 1 && current_fw == WL12XX_FW_TYPE_MULTI)
2010 return true;
2011
2012 return false;
2013 }
2014
2015 /*
2016 * Enter "forced psm". Make sure the sta is in psm against the ap,
2017 * to make the fw switch a bit more disconnection-persistent.
2018 */
2019 static void wl12xx_force_active_psm(struct wl1271 *wl)
2020 {
2021 struct wl12xx_vif *wlvif;
2022
2023 wl12xx_for_each_wlvif_sta(wl, wlvif) {
2024 wl1271_ps_set_mode(wl, wlvif, STATION_POWER_SAVE_MODE);
2025 }
2026 }
2027
2028 static int wl1271_op_add_interface(struct ieee80211_hw *hw,
2029 struct ieee80211_vif *vif)
2030 {
2031 struct wl1271 *wl = hw->priv;
2032 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
2033 struct vif_counter_data vif_count;
2034 int ret = 0;
2035 u8 role_type;
2036 bool booted = false;
2037
2038 vif->driver_flags |= IEEE80211_VIF_BEACON_FILTER |
2039 IEEE80211_VIF_SUPPORTS_CQM_RSSI;
2040
2041 wl1271_debug(DEBUG_MAC80211, "mac80211 add interface type %d mac %pM",
2042 ieee80211_vif_type_p2p(vif), vif->addr);
2043
2044 wl12xx_get_vif_count(hw, vif, &vif_count);
2045
2046 mutex_lock(&wl->mutex);
2047 ret = wl1271_ps_elp_wakeup(wl);
2048 if (ret < 0)
2049 goto out_unlock;
2050
2051 /*
2052 * in some very corner case HW recovery scenarios its possible to
2053 * get here before __wl1271_op_remove_interface is complete, so
2054 * opt out if that is the case.
2055 */
2056 if (test_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags) ||
2057 test_bit(WLVIF_FLAG_INITIALIZED, &wlvif->flags)) {
2058 ret = -EBUSY;
2059 goto out;
2060 }
2061
2062
2063 ret = wl12xx_init_vif_data(wl, vif);
2064 if (ret < 0)
2065 goto out;
2066
2067 wlvif->wl = wl;
2068 role_type = wl12xx_get_role_type(wl, wlvif);
2069 if (role_type == WL12XX_INVALID_ROLE_TYPE) {
2070 ret = -EINVAL;
2071 goto out;
2072 }
2073
2074 if (wl12xx_need_fw_change(wl, vif_count, true)) {
2075 wl12xx_force_active_psm(wl);
2076 set_bit(WL1271_FLAG_INTENDED_FW_RECOVERY, &wl->flags);
2077 mutex_unlock(&wl->mutex);
2078 wl1271_recovery_work(&wl->recovery_work);
2079 return 0;
2080 }
2081
2082 /*
2083 * TODO: after the nvs issue will be solved, move this block
2084 * to start(), and make sure here the driver is ON.
2085 */
2086 if (wl->state == WL1271_STATE_OFF) {
2087 /*
2088 * we still need this in order to configure the fw
2089 * while uploading the nvs
2090 */
2091 memcpy(wl->addresses[0].addr, vif->addr, ETH_ALEN);
2092
2093 booted = wl12xx_init_fw(wl);
2094 if (!booted) {
2095 ret = -EINVAL;
2096 goto out;
2097 }
2098 }
2099
2100 if (wlvif->bss_type == BSS_TYPE_STA_BSS ||
2101 wlvif->bss_type == BSS_TYPE_IBSS) {
2102 /*
2103 * The device role is a special role used for
2104 * rx and tx frames prior to association (as
2105 * the STA role can get packets only from
2106 * its associated bssid)
2107 */
2108 ret = wl12xx_cmd_role_enable(wl, vif->addr,
2109 WL1271_ROLE_DEVICE,
2110 &wlvif->dev_role_id);
2111 if (ret < 0)
2112 goto out;
2113 }
2114
2115 ret = wl12xx_cmd_role_enable(wl, vif->addr,
2116 role_type, &wlvif->role_id);
2117 if (ret < 0)
2118 goto out;
2119
2120 ret = wl1271_init_vif_specific(wl, vif);
2121 if (ret < 0)
2122 goto out;
2123
2124 list_add(&wlvif->list, &wl->wlvif_list);
2125 set_bit(WLVIF_FLAG_INITIALIZED, &wlvif->flags);
2126
2127 if (wlvif->bss_type == BSS_TYPE_AP_BSS)
2128 wl->ap_count++;
2129 else
2130 wl->sta_count++;
2131 out:
2132 wl1271_ps_elp_sleep(wl);
2133 out_unlock:
2134 mutex_unlock(&wl->mutex);
2135
2136 return ret;
2137 }
2138
2139 static void __wl1271_op_remove_interface(struct wl1271 *wl,
2140 struct ieee80211_vif *vif,
2141 bool reset_tx_queues)
2142 {
2143 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
2144 int i, ret;
2145
2146 wl1271_debug(DEBUG_MAC80211, "mac80211 remove interface");
2147
2148 if (!test_and_clear_bit(WLVIF_FLAG_INITIALIZED, &wlvif->flags))
2149 return;
2150
2151 /* because of hardware recovery, we may get here twice */
2152 if (wl->state != WL1271_STATE_ON)
2153 return;
2154
2155 wl1271_info("down");
2156
2157 if (wl->scan.state != WL1271_SCAN_STATE_IDLE &&
2158 wl->scan_vif == vif) {
2159 /*
2160 * Rearm the tx watchdog just before idling scan. This
2161 * prevents just-finished scans from triggering the watchdog
2162 */
2163 wl12xx_rearm_tx_watchdog_locked(wl);
2164
2165 wl->scan.state = WL1271_SCAN_STATE_IDLE;
2166 memset(wl->scan.scanned_ch, 0, sizeof(wl->scan.scanned_ch));
2167 wl->scan_vif = NULL;
2168 wl->scan.req = NULL;
2169 ieee80211_scan_completed(wl->hw, true);
2170 }
2171
2172 if (!test_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags)) {
2173 /* disable active roles */
2174 ret = wl1271_ps_elp_wakeup(wl);
2175 if (ret < 0)
2176 goto deinit;
2177
2178 if (wlvif->bss_type == BSS_TYPE_STA_BSS ||
2179 wlvif->bss_type == BSS_TYPE_IBSS) {
2180 if (wl12xx_dev_role_started(wlvif))
2181 wl12xx_stop_dev(wl, wlvif);
2182
2183 ret = wl12xx_cmd_role_disable(wl, &wlvif->dev_role_id);
2184 if (ret < 0)
2185 goto deinit;
2186 }
2187
2188 ret = wl12xx_cmd_role_disable(wl, &wlvif->role_id);
2189 if (ret < 0)
2190 goto deinit;
2191
2192 wl1271_ps_elp_sleep(wl);
2193 }
2194 deinit:
2195 /* clear all hlids (except system_hlid) */
2196 wlvif->dev_hlid = WL12XX_INVALID_LINK_ID;
2197
2198 if (wlvif->bss_type == BSS_TYPE_STA_BSS ||
2199 wlvif->bss_type == BSS_TYPE_IBSS) {
2200 wlvif->sta.hlid = WL12XX_INVALID_LINK_ID;
2201 wl12xx_free_rate_policy(wl, &wlvif->sta.basic_rate_idx);
2202 wl12xx_free_rate_policy(wl, &wlvif->sta.ap_rate_idx);
2203 wl12xx_free_rate_policy(wl, &wlvif->sta.p2p_rate_idx);
2204 } else {
2205 wlvif->ap.bcast_hlid = WL12XX_INVALID_LINK_ID;
2206 wlvif->ap.global_hlid = WL12XX_INVALID_LINK_ID;
2207 wl12xx_free_rate_policy(wl, &wlvif->ap.mgmt_rate_idx);
2208 wl12xx_free_rate_policy(wl, &wlvif->ap.bcast_rate_idx);
2209 for (i = 0; i < CONF_TX_MAX_AC_COUNT; i++)
2210 wl12xx_free_rate_policy(wl,
2211 &wlvif->ap.ucast_rate_idx[i]);
2212 wl1271_free_ap_keys(wl, wlvif);
2213 }
2214
2215 dev_kfree_skb(wlvif->probereq);
2216 wlvif->probereq = NULL;
2217 wl12xx_tx_reset_wlvif(wl, wlvif);
2218 if (wl->last_wlvif == wlvif)
2219 wl->last_wlvif = NULL;
2220 list_del(&wlvif->list);
2221 memset(wlvif->ap.sta_hlid_map, 0, sizeof(wlvif->ap.sta_hlid_map));
2222 wlvif->role_id = WL12XX_INVALID_ROLE_ID;
2223 wlvif->dev_role_id = WL12XX_INVALID_ROLE_ID;
2224
2225 if (wlvif->bss_type == BSS_TYPE_AP_BSS)
2226 wl->ap_count--;
2227 else
2228 wl->sta_count--;
2229
2230 mutex_unlock(&wl->mutex);
2231
2232 del_timer_sync(&wlvif->rx_streaming_timer);
2233 cancel_work_sync(&wlvif->rx_streaming_enable_work);
2234 cancel_work_sync(&wlvif->rx_streaming_disable_work);
2235
2236 mutex_lock(&wl->mutex);
2237 }
2238
2239 static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
2240 struct ieee80211_vif *vif)
2241 {
2242 struct wl1271 *wl = hw->priv;
2243 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
2244 struct wl12xx_vif *iter;
2245 struct vif_counter_data vif_count;
2246 bool cancel_recovery = true;
2247
2248 wl12xx_get_vif_count(hw, vif, &vif_count);
2249 mutex_lock(&wl->mutex);
2250
2251 if (wl->state == WL1271_STATE_OFF ||
2252 !test_bit(WLVIF_FLAG_INITIALIZED, &wlvif->flags))
2253 goto out;
2254
2255 /*
2256 * wl->vif can be null here if someone shuts down the interface
2257 * just when hardware recovery has been started.
2258 */
2259 wl12xx_for_each_wlvif(wl, iter) {
2260 if (iter != wlvif)
2261 continue;
2262
2263 __wl1271_op_remove_interface(wl, vif, true);
2264 break;
2265 }
2266 WARN_ON(iter != wlvif);
2267 if (wl12xx_need_fw_change(wl, vif_count, false)) {
2268 wl12xx_force_active_psm(wl);
2269 set_bit(WL1271_FLAG_INTENDED_FW_RECOVERY, &wl->flags);
2270 wl12xx_queue_recovery_work(wl);
2271 cancel_recovery = false;
2272 }
2273 out:
2274 mutex_unlock(&wl->mutex);
2275 if (cancel_recovery)
2276 cancel_work_sync(&wl->recovery_work);
2277 }
2278
2279 static int wl12xx_op_change_interface(struct ieee80211_hw *hw,
2280 struct ieee80211_vif *vif,
2281 enum nl80211_iftype new_type, bool p2p)
2282 {
2283 struct wl1271 *wl = hw->priv;
2284 int ret;
2285
2286 set_bit(WL1271_FLAG_VIF_CHANGE_IN_PROGRESS, &wl->flags);
2287 wl1271_op_remove_interface(hw, vif);
2288
2289 vif->type = new_type;
2290 vif->p2p = p2p;
2291 ret = wl1271_op_add_interface(hw, vif);
2292
2293 clear_bit(WL1271_FLAG_VIF_CHANGE_IN_PROGRESS, &wl->flags);
2294 return ret;
2295 }
2296
2297 static int wl1271_join(struct wl1271 *wl, struct wl12xx_vif *wlvif,
2298 bool set_assoc)
2299 {
2300 int ret;
2301 bool is_ibss = (wlvif->bss_type == BSS_TYPE_IBSS);
2302
2303 /*
2304 * One of the side effects of the JOIN command is that is clears
2305 * WPA/WPA2 keys from the chipset. Performing a JOIN while associated
2306 * to a WPA/WPA2 access point will therefore kill the data-path.
2307 * Currently the only valid scenario for JOIN during association
2308 * is on roaming, in which case we will also be given new keys.
2309 * Keep the below message for now, unless it starts bothering
2310 * users who really like to roam a lot :)
2311 */
2312 if (test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags))
2313 wl1271_info("JOIN while associated.");
2314
2315 /* clear encryption type */
2316 wlvif->encryption_type = KEY_NONE;
2317
2318 if (set_assoc)
2319 set_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags);
2320
2321 if (is_ibss)
2322 ret = wl12xx_cmd_role_start_ibss(wl, wlvif);
2323 else
2324 ret = wl12xx_cmd_role_start_sta(wl, wlvif);
2325 if (ret < 0)
2326 goto out;
2327
2328 if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags))
2329 goto out;
2330
2331 /*
2332 * The join command disable the keep-alive mode, shut down its process,
2333 * and also clear the template config, so we need to reset it all after
2334 * the join. The acx_aid starts the keep-alive process, and the order
2335 * of the commands below is relevant.
2336 */
2337 ret = wl1271_acx_keep_alive_mode(wl, wlvif, true);
2338 if (ret < 0)
2339 goto out;
2340
2341 ret = wl1271_acx_aid(wl, wlvif, wlvif->aid);
2342 if (ret < 0)
2343 goto out;
2344
2345 ret = wl12xx_cmd_build_klv_null_data(wl, wlvif);
2346 if (ret < 0)
2347 goto out;
2348
2349 ret = wl1271_acx_keep_alive_config(wl, wlvif,
2350 CMD_TEMPL_KLV_IDX_NULL_DATA,
2351 ACX_KEEP_ALIVE_TPL_VALID);
2352 if (ret < 0)
2353 goto out;
2354
2355 out:
2356 return ret;
2357 }
2358
2359 static int wl1271_unjoin(struct wl1271 *wl, struct wl12xx_vif *wlvif)
2360 {
2361 int ret;
2362
2363 if (test_and_clear_bit(WLVIF_FLAG_CS_PROGRESS, &wlvif->flags)) {
2364 struct ieee80211_vif *vif = wl12xx_wlvif_to_vif(wlvif);
2365
2366 wl12xx_cmd_stop_channel_switch(wl);
2367 ieee80211_chswitch_done(vif, false);
2368 }
2369
2370 /* to stop listening to a channel, we disconnect */
2371 ret = wl12xx_cmd_role_stop_sta(wl, wlvif);
2372 if (ret < 0)
2373 goto out;
2374
2375 /* reset TX security counters on a clean disconnect */
2376 wlvif->tx_security_last_seq_lsb = 0;
2377 wlvif->tx_security_seq = 0;
2378
2379 out:
2380 return ret;
2381 }
2382
2383 static void wl1271_set_band_rate(struct wl1271 *wl, struct wl12xx_vif *wlvif)
2384 {
2385 wlvif->basic_rate_set = wlvif->bitrate_masks[wlvif->band];
2386 wlvif->rate_set = wlvif->basic_rate_set;
2387 }
2388
2389 static int wl1271_sta_handle_idle(struct wl1271 *wl, struct wl12xx_vif *wlvif,
2390 bool idle)
2391 {
2392 int ret;
2393 bool cur_idle = !test_bit(WLVIF_FLAG_IN_USE, &wlvif->flags);
2394
2395 if (idle == cur_idle)
2396 return 0;
2397
2398 if (idle) {
2399 /* no need to croc if we weren't busy (e.g. during boot) */
2400 if (wl12xx_dev_role_started(wlvif)) {
2401 ret = wl12xx_stop_dev(wl, wlvif);
2402 if (ret < 0)
2403 goto out;
2404 }
2405 wlvif->rate_set =
2406 wl1271_tx_min_rate_get(wl, wlvif->basic_rate_set);
2407 ret = wl1271_acx_sta_rate_policies(wl, wlvif);
2408 if (ret < 0)
2409 goto out;
2410 ret = wl1271_acx_keep_alive_config(
2411 wl, wlvif, CMD_TEMPL_KLV_IDX_NULL_DATA,
2412 ACX_KEEP_ALIVE_TPL_INVALID);
2413 if (ret < 0)
2414 goto out;
2415 clear_bit(WLVIF_FLAG_IN_USE, &wlvif->flags);
2416 } else {
2417 /* The current firmware only supports sched_scan in idle */
2418 if (wl->sched_scanning) {
2419 wl1271_scan_sched_scan_stop(wl);
2420 ieee80211_sched_scan_stopped(wl->hw);
2421 }
2422
2423 ret = wl12xx_start_dev(wl, wlvif);
2424 if (ret < 0)
2425 goto out;
2426 set_bit(WLVIF_FLAG_IN_USE, &wlvif->flags);
2427 }
2428
2429 out:
2430 return ret;
2431 }
2432
2433 static int wl12xx_config_vif(struct wl1271 *wl, struct wl12xx_vif *wlvif,
2434 struct ieee80211_conf *conf, u32 changed)
2435 {
2436 bool is_ap = (wlvif->bss_type == BSS_TYPE_AP_BSS);
2437 int channel, ret;
2438
2439 channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
2440
2441 /* if the channel changes while joined, join again */
2442 if (changed & IEEE80211_CONF_CHANGE_CHANNEL &&
2443 ((wlvif->band != conf->channel->band) ||
2444 (wlvif->channel != channel) ||
2445 (wlvif->channel_type != conf->channel_type))) {
2446 /* send all pending packets */
2447 wl1271_tx_work_locked(wl);
2448 wlvif->band = conf->channel->band;
2449 wlvif->channel = channel;
2450 wlvif->channel_type = conf->channel_type;
2451
2452 if (is_ap) {
2453 ret = wl1271_init_ap_rates(wl, wlvif);
2454 if (ret < 0)
2455 wl1271_error("AP rate policy change failed %d",
2456 ret);
2457 } else {
2458 /*
2459 * FIXME: the mac80211 should really provide a fixed
2460 * rate to use here. for now, just use the smallest
2461 * possible rate for the band as a fixed rate for
2462 * association frames and other control messages.
2463 */
2464 if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags))
2465 wl1271_set_band_rate(wl, wlvif);
2466
2467 wlvif->basic_rate =
2468 wl1271_tx_min_rate_get(wl,
2469 wlvif->basic_rate_set);
2470 ret = wl1271_acx_sta_rate_policies(wl, wlvif);
2471 if (ret < 0)
2472 wl1271_warning("rate policy for channel "
2473 "failed %d", ret);
2474
2475 /*
2476 * change the ROC channel. do it only if we are
2477 * not idle. otherwise, CROC will be called
2478 * anyway.
2479 */
2480 if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED,
2481 &wlvif->flags) &&
2482 wl12xx_dev_role_started(wlvif) &&
2483 !(conf->flags & IEEE80211_CONF_IDLE)) {
2484 ret = wl12xx_stop_dev(wl, wlvif);
2485 if (ret < 0)
2486 return ret;
2487
2488 ret = wl12xx_start_dev(wl, wlvif);
2489 if (ret < 0)
2490 return ret;
2491 }
2492 }
2493 }
2494
2495 if ((changed & IEEE80211_CONF_CHANGE_PS) && !is_ap) {
2496
2497 if ((conf->flags & IEEE80211_CONF_PS) &&
2498 test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags) &&
2499 !test_bit(WLVIF_FLAG_IN_PS, &wlvif->flags)) {
2500
2501 int ps_mode;
2502 char *ps_mode_str;
2503
2504 if (wl->conf.conn.forced_ps) {
2505 ps_mode = STATION_POWER_SAVE_MODE;
2506 ps_mode_str = "forced";
2507 } else {
2508 ps_mode = STATION_AUTO_PS_MODE;
2509 ps_mode_str = "auto";
2510 }
2511
2512 wl1271_debug(DEBUG_PSM, "%s ps enabled", ps_mode_str);
2513
2514 ret = wl1271_ps_set_mode(wl, wlvif, ps_mode);
2515
2516 if (ret < 0)
2517 wl1271_warning("enter %s ps failed %d",
2518 ps_mode_str, ret);
2519
2520 } else if (!(conf->flags & IEEE80211_CONF_PS) &&
2521 test_bit(WLVIF_FLAG_IN_PS, &wlvif->flags)) {
2522
2523 wl1271_debug(DEBUG_PSM, "auto ps disabled");
2524
2525 ret = wl1271_ps_set_mode(wl, wlvif,
2526 STATION_ACTIVE_MODE);
2527 if (ret < 0)
2528 wl1271_warning("exit auto ps failed %d", ret);
2529 }
2530 }
2531
2532 if (conf->power_level != wlvif->power_level) {
2533 ret = wl1271_acx_tx_power(wl, wlvif, conf->power_level);
2534 if (ret < 0)
2535 return ret;
2536
2537 wlvif->power_level = conf->power_level;
2538 }
2539
2540 return 0;
2541 }
2542
2543 static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed)
2544 {
2545 struct wl1271 *wl = hw->priv;
2546 struct wl12xx_vif *wlvif;
2547 struct ieee80211_conf *conf = &hw->conf;
2548 int channel, ret = 0;
2549
2550 channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
2551
2552 wl1271_debug(DEBUG_MAC80211, "mac80211 config ch %d psm %s power %d %s"
2553 " changed 0x%x",
2554 channel,
2555 conf->flags & IEEE80211_CONF_PS ? "on" : "off",
2556 conf->power_level,
2557 conf->flags & IEEE80211_CONF_IDLE ? "idle" : "in use",
2558 changed);
2559
2560 /*
2561 * mac80211 will go to idle nearly immediately after transmitting some
2562 * frames, such as the deauth. To make sure those frames reach the air,
2563 * wait here until the TX queue is fully flushed.
2564 */
2565 if ((changed & IEEE80211_CONF_CHANGE_CHANNEL) ||
2566 ((changed & IEEE80211_CONF_CHANGE_IDLE) &&
2567 (conf->flags & IEEE80211_CONF_IDLE)))
2568 wl1271_tx_flush(wl);
2569
2570 mutex_lock(&wl->mutex);
2571
2572 /* we support configuring the channel and band even while off */
2573 if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
2574 wl->band = conf->channel->band;
2575 wl->channel = channel;
2576 wl->channel_type = conf->channel_type;
2577 }
2578
2579 if (changed & IEEE80211_CONF_CHANGE_POWER)
2580 wl->power_level = conf->power_level;
2581
2582 if (unlikely(wl->state == WL1271_STATE_OFF))
2583 goto out;
2584
2585 ret = wl1271_ps_elp_wakeup(wl);
2586 if (ret < 0)
2587 goto out;
2588
2589 /* configure each interface */
2590 wl12xx_for_each_wlvif(wl, wlvif) {
2591 ret = wl12xx_config_vif(wl, wlvif, conf, changed);
2592 if (ret < 0)
2593 goto out_sleep;
2594 }
2595
2596 out_sleep:
2597 wl1271_ps_elp_sleep(wl);
2598
2599 out:
2600 mutex_unlock(&wl->mutex);
2601
2602 return ret;
2603 }
2604
2605 struct wl1271_filter_params {
2606 bool enabled;
2607 int mc_list_length;
2608 u8 mc_list[ACX_MC_ADDRESS_GROUP_MAX][ETH_ALEN];
2609 };
2610
2611 static u64 wl1271_op_prepare_multicast(struct ieee80211_hw *hw,
2612 struct netdev_hw_addr_list *mc_list)
2613 {
2614 struct wl1271_filter_params *fp;
2615 struct netdev_hw_addr *ha;
2616 struct wl1271 *wl = hw->priv;
2617
2618 if (unlikely(wl->state == WL1271_STATE_OFF))
2619 return 0;
2620
2621 fp = kzalloc(sizeof(*fp), GFP_ATOMIC);
2622 if (!fp) {
2623 wl1271_error("Out of memory setting filters.");
2624 return 0;
2625 }
2626
2627 /* update multicast filtering parameters */
2628 fp->mc_list_length = 0;
2629 if (netdev_hw_addr_list_count(mc_list) > ACX_MC_ADDRESS_GROUP_MAX) {
2630 fp->enabled = false;
2631 } else {
2632 fp->enabled = true;
2633 netdev_hw_addr_list_for_each(ha, mc_list) {
2634 memcpy(fp->mc_list[fp->mc_list_length],
2635 ha->addr, ETH_ALEN);
2636 fp->mc_list_length++;
2637 }
2638 }
2639
2640 return (u64)(unsigned long)fp;
2641 }
2642
2643 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
2644 FIF_ALLMULTI | \
2645 FIF_FCSFAIL | \
2646 FIF_BCN_PRBRESP_PROMISC | \
2647 FIF_CONTROL | \
2648 FIF_OTHER_BSS)
2649
2650 static void wl1271_op_configure_filter(struct ieee80211_hw *hw,
2651 unsigned int changed,
2652 unsigned int *total, u64 multicast)
2653 {
2654 struct wl1271_filter_params *fp = (void *)(unsigned long)multicast;
2655 struct wl1271 *wl = hw->priv;
2656 struct wl12xx_vif *wlvif;
2657
2658 int ret;
2659
2660 wl1271_debug(DEBUG_MAC80211, "mac80211 configure filter changed %x"
2661 " total %x", changed, *total);
2662
2663 mutex_lock(&wl->mutex);
2664
2665 *total &= WL1271_SUPPORTED_FILTERS;
2666 changed &= WL1271_SUPPORTED_FILTERS;
2667
2668 if (unlikely(wl->state == WL1271_STATE_OFF))
2669 goto out;
2670
2671 ret = wl1271_ps_elp_wakeup(wl);
2672 if (ret < 0)
2673 goto out;
2674
2675 wl12xx_for_each_wlvif(wl, wlvif) {
2676 if (wlvif->bss_type != BSS_TYPE_AP_BSS) {
2677 if (*total & FIF_ALLMULTI)
2678 ret = wl1271_acx_group_address_tbl(wl, wlvif,
2679 false,
2680 NULL, 0);
2681 else if (fp)
2682 ret = wl1271_acx_group_address_tbl(wl, wlvif,
2683 fp->enabled,
2684 fp->mc_list,
2685 fp->mc_list_length);
2686 if (ret < 0)
2687 goto out_sleep;
2688 }
2689 }
2690
2691 /*
2692 * the fw doesn't provide an api to configure the filters. instead,
2693 * the filters configuration is based on the active roles / ROC
2694 * state.
2695 */
2696
2697 out_sleep:
2698 wl1271_ps_elp_sleep(wl);
2699
2700 out:
2701 mutex_unlock(&wl->mutex);
2702 kfree(fp);
2703 }
2704
2705 static int wl1271_record_ap_key(struct wl1271 *wl, struct wl12xx_vif *wlvif,
2706 u8 id, u8 key_type, u8 key_size,
2707 const u8 *key, u8 hlid, u32 tx_seq_32,
2708 u16 tx_seq_16)
2709 {
2710 struct wl1271_ap_key *ap_key;
2711 int i;
2712
2713 wl1271_debug(DEBUG_CRYPT, "record ap key id %d", (int)id);
2714
2715 if (key_size > MAX_KEY_SIZE)
2716 return -EINVAL;
2717
2718 /*
2719 * Find next free entry in ap_keys. Also check we are not replacing
2720 * an existing key.
2721 */
2722 for (i = 0; i < MAX_NUM_KEYS; i++) {
2723 if (wlvif->ap.recorded_keys[i] == NULL)
2724 break;
2725
2726 if (wlvif->ap.recorded_keys[i]->id == id) {
2727 wl1271_warning("trying to record key replacement");
2728 return -EINVAL;
2729 }
2730 }
2731
2732 if (i == MAX_NUM_KEYS)
2733 return -EBUSY;
2734
2735 ap_key = kzalloc(sizeof(*ap_key), GFP_KERNEL);
2736 if (!ap_key)
2737 return -ENOMEM;
2738
2739 ap_key->id = id;
2740 ap_key->key_type = key_type;
2741 ap_key->key_size = key_size;
2742 memcpy(ap_key->key, key, key_size);
2743 ap_key->hlid = hlid;
2744 ap_key->tx_seq_32 = tx_seq_32;
2745 ap_key->tx_seq_16 = tx_seq_16;
2746
2747 wlvif->ap.recorded_keys[i] = ap_key;
2748 return 0;
2749 }
2750
2751 static void wl1271_free_ap_keys(struct wl1271 *wl, struct wl12xx_vif *wlvif)
2752 {
2753 int i;
2754
2755 for (i = 0; i < MAX_NUM_KEYS; i++) {
2756 kfree(wlvif->ap.recorded_keys[i]);
2757 wlvif->ap.recorded_keys[i] = NULL;
2758 }
2759 }
2760
2761 static int wl1271_ap_init_hwenc(struct wl1271 *wl, struct wl12xx_vif *wlvif)
2762 {
2763 int i, ret = 0;
2764 struct wl1271_ap_key *key;
2765 bool wep_key_added = false;
2766
2767 for (i = 0; i < MAX_NUM_KEYS; i++) {
2768 u8 hlid;
2769 if (wlvif->ap.recorded_keys[i] == NULL)
2770 break;
2771
2772 key = wlvif->ap.recorded_keys[i];
2773 hlid = key->hlid;
2774 if (hlid == WL12XX_INVALID_LINK_ID)
2775 hlid = wlvif->ap.bcast_hlid;
2776
2777 ret = wl1271_cmd_set_ap_key(wl, wlvif, KEY_ADD_OR_REPLACE,
2778 key->id, key->key_type,
2779 key->key_size, key->key,
2780 hlid, key->tx_seq_32,
2781 key->tx_seq_16);
2782 if (ret < 0)
2783 goto out;
2784
2785 if (key->key_type == KEY_WEP)
2786 wep_key_added = true;
2787 }
2788
2789 if (wep_key_added) {
2790 ret = wl12xx_cmd_set_default_wep_key(wl, wlvif->default_key,
2791 wlvif->ap.bcast_hlid);
2792 if (ret < 0)
2793 goto out;
2794 }
2795
2796 out:
2797 wl1271_free_ap_keys(wl, wlvif);
2798 return ret;
2799 }
2800
2801 static int wl1271_set_key(struct wl1271 *wl, struct wl12xx_vif *wlvif,
2802 u16 action, u8 id, u8 key_type,
2803 u8 key_size, const u8 *key, u32 tx_seq_32,
2804 u16 tx_seq_16, struct ieee80211_sta *sta)
2805 {
2806 int ret;
2807 bool is_ap = (wlvif->bss_type == BSS_TYPE_AP_BSS);
2808
2809 if (is_ap) {
2810 struct wl1271_station *wl_sta;
2811 u8 hlid;
2812
2813 if (sta) {
2814 wl_sta = (struct wl1271_station *)sta->drv_priv;
2815 hlid = wl_sta->hlid;
2816 } else {
2817 hlid = wlvif->ap.bcast_hlid;
2818 }
2819
2820 if (!test_bit(WLVIF_FLAG_AP_STARTED, &wlvif->flags)) {
2821 /*
2822 * We do not support removing keys after AP shutdown.
2823 * Pretend we do to make mac80211 happy.
2824 */
2825 if (action != KEY_ADD_OR_REPLACE)
2826 return 0;
2827
2828 ret = wl1271_record_ap_key(wl, wlvif, id,
2829 key_type, key_size,
2830 key, hlid, tx_seq_32,
2831 tx_seq_16);
2832 } else {
2833 ret = wl1271_cmd_set_ap_key(wl, wlvif, action,
2834 id, key_type, key_size,
2835 key, hlid, tx_seq_32,
2836 tx_seq_16);
2837 }
2838
2839 if (ret < 0)
2840 return ret;
2841 } else {
2842 const u8 *addr;
2843 static const u8 bcast_addr[ETH_ALEN] = {
2844 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
2845 };
2846
2847 addr = sta ? sta->addr : bcast_addr;
2848
2849 if (is_zero_ether_addr(addr)) {
2850 /* We dont support TX only encryption */
2851 return -EOPNOTSUPP;
2852 }
2853
2854 /* The wl1271 does not allow to remove unicast keys - they
2855 will be cleared automatically on next CMD_JOIN. Ignore the
2856 request silently, as we dont want the mac80211 to emit
2857 an error message. */
2858 if (action == KEY_REMOVE && !is_broadcast_ether_addr(addr))
2859 return 0;
2860
2861 /* don't remove key if hlid was already deleted */
2862 if (action == KEY_REMOVE &&
2863 wlvif->sta.hlid == WL12XX_INVALID_LINK_ID)
2864 return 0;
2865
2866 ret = wl1271_cmd_set_sta_key(wl, wlvif, action,
2867 id, key_type, key_size,
2868 key, addr, tx_seq_32,
2869 tx_seq_16);
2870 if (ret < 0)
2871 return ret;
2872
2873 /* the default WEP key needs to be configured at least once */
2874 if (key_type == KEY_WEP) {
2875 ret = wl12xx_cmd_set_default_wep_key(wl,
2876 wlvif->default_key,
2877 wlvif->sta.hlid);
2878 if (ret < 0)
2879 return ret;
2880 }
2881 }
2882
2883 return 0;
2884 }
2885
2886 static int wlcore_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
2887 struct ieee80211_vif *vif,
2888 struct ieee80211_sta *sta,
2889 struct ieee80211_key_conf *key_conf)
2890 {
2891 struct wl1271 *wl = hw->priv;
2892
2893 return wlcore_hw_set_key(wl, cmd, vif, sta, key_conf);
2894 }
2895
2896 int wlcore_set_key(struct wl1271 *wl, enum set_key_cmd cmd,
2897 struct ieee80211_vif *vif,
2898 struct ieee80211_sta *sta,
2899 struct ieee80211_key_conf *key_conf)
2900 {
2901 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
2902 int ret;
2903 u32 tx_seq_32 = 0;
2904 u16 tx_seq_16 = 0;
2905 u8 key_type;
2906
2907 wl1271_debug(DEBUG_MAC80211, "mac80211 set key");
2908
2909 wl1271_debug(DEBUG_CRYPT, "CMD: 0x%x sta: %p", cmd, sta);
2910 wl1271_debug(DEBUG_CRYPT, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
2911 key_conf->cipher, key_conf->keyidx,
2912 key_conf->keylen, key_conf->flags);
2913 wl1271_dump(DEBUG_CRYPT, "KEY: ", key_conf->key, key_conf->keylen);
2914
2915 mutex_lock(&wl->mutex);
2916
2917 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2918 ret = -EAGAIN;
2919 goto out_unlock;
2920 }
2921
2922 ret = wl1271_ps_elp_wakeup(wl);
2923 if (ret < 0)
2924 goto out_unlock;
2925
2926 switch (key_conf->cipher) {
2927 case WLAN_CIPHER_SUITE_WEP40:
2928 case WLAN_CIPHER_SUITE_WEP104:
2929 key_type = KEY_WEP;
2930
2931 key_conf->hw_key_idx = key_conf->keyidx;
2932 break;
2933 case WLAN_CIPHER_SUITE_TKIP:
2934 key_type = KEY_TKIP;
2935
2936 key_conf->hw_key_idx = key_conf->keyidx;
2937 tx_seq_32 = WL1271_TX_SECURITY_HI32(wlvif->tx_security_seq);
2938 tx_seq_16 = WL1271_TX_SECURITY_LO16(wlvif->tx_security_seq);
2939 break;
2940 case WLAN_CIPHER_SUITE_CCMP:
2941 key_type = KEY_AES;
2942
2943 key_conf->flags |= IEEE80211_KEY_FLAG_PUT_IV_SPACE;
2944 tx_seq_32 = WL1271_TX_SECURITY_HI32(wlvif->tx_security_seq);
2945 tx_seq_16 = WL1271_TX_SECURITY_LO16(wlvif->tx_security_seq);
2946 break;
2947 case WL1271_CIPHER_SUITE_GEM:
2948 key_type = KEY_GEM;
2949 tx_seq_32 = WL1271_TX_SECURITY_HI32(wlvif->tx_security_seq);
2950 tx_seq_16 = WL1271_TX_SECURITY_LO16(wlvif->tx_security_seq);
2951 break;
2952 default:
2953 wl1271_error("Unknown key algo 0x%x", key_conf->cipher);
2954
2955 ret = -EOPNOTSUPP;
2956 goto out_sleep;
2957 }
2958
2959 switch (cmd) {
2960 case SET_KEY:
2961 ret = wl1271_set_key(wl, wlvif, KEY_ADD_OR_REPLACE,
2962 key_conf->keyidx, key_type,
2963 key_conf->keylen, key_conf->key,
2964 tx_seq_32, tx_seq_16, sta);
2965 if (ret < 0) {
2966 wl1271_error("Could not add or replace key");
2967 goto out_sleep;
2968 }
2969
2970 /*
2971 * reconfiguring arp response if the unicast (or common)
2972 * encryption key type was changed
2973 */
2974 if (wlvif->bss_type == BSS_TYPE_STA_BSS &&
2975 (sta || key_type == KEY_WEP) &&
2976 wlvif->encryption_type != key_type) {
2977 wlvif->encryption_type = key_type;
2978 ret = wl1271_cmd_build_arp_rsp(wl, wlvif);
2979 if (ret < 0) {
2980 wl1271_warning("build arp rsp failed: %d", ret);
2981 goto out_sleep;
2982 }
2983 }
2984 break;
2985
2986 case DISABLE_KEY:
2987 ret = wl1271_set_key(wl, wlvif, KEY_REMOVE,
2988 key_conf->keyidx, key_type,
2989 key_conf->keylen, key_conf->key,
2990 0, 0, sta);
2991 if (ret < 0) {
2992 wl1271_error("Could not remove key");
2993 goto out_sleep;
2994 }
2995 break;
2996
2997 default:
2998 wl1271_error("Unsupported key cmd 0x%x", cmd);
2999 ret = -EOPNOTSUPP;
3000 break;
3001 }
3002
3003 out_sleep:
3004 wl1271_ps_elp_sleep(wl);
3005
3006 out_unlock:
3007 mutex_unlock(&wl->mutex);
3008
3009 return ret;
3010 }
3011 EXPORT_SYMBOL_GPL(wlcore_set_key);
3012
3013 static int wl1271_op_hw_scan(struct ieee80211_hw *hw,
3014 struct ieee80211_vif *vif,
3015 struct cfg80211_scan_request *req)
3016 {
3017 struct wl1271 *wl = hw->priv;
3018 int ret;
3019 u8 *ssid = NULL;
3020 size_t len = 0;
3021
3022 wl1271_debug(DEBUG_MAC80211, "mac80211 hw scan");
3023
3024 if (req->n_ssids) {
3025 ssid = req->ssids[0].ssid;
3026 len = req->ssids[0].ssid_len;
3027 }
3028
3029 mutex_lock(&wl->mutex);
3030
3031 if (wl->state == WL1271_STATE_OFF) {
3032 /*
3033 * We cannot return -EBUSY here because cfg80211 will expect
3034 * a call to ieee80211_scan_completed if we do - in this case
3035 * there won't be any call.
3036 */
3037 ret = -EAGAIN;
3038 goto out;
3039 }
3040
3041 ret = wl1271_ps_elp_wakeup(wl);
3042 if (ret < 0)
3043 goto out;
3044
3045 /* fail if there is any role in ROC */
3046 if (find_first_bit(wl->roc_map, WL12XX_MAX_ROLES) < WL12XX_MAX_ROLES) {
3047 /* don't allow scanning right now */
3048 ret = -EBUSY;
3049 goto out_sleep;
3050 }
3051
3052 ret = wl1271_scan(hw->priv, vif, ssid, len, req);
3053 out_sleep:
3054 wl1271_ps_elp_sleep(wl);
3055 out:
3056 mutex_unlock(&wl->mutex);
3057
3058 return ret;
3059 }
3060
3061 static void wl1271_op_cancel_hw_scan(struct ieee80211_hw *hw,
3062 struct ieee80211_vif *vif)
3063 {
3064 struct wl1271 *wl = hw->priv;
3065 int ret;
3066
3067 wl1271_debug(DEBUG_MAC80211, "mac80211 cancel hw scan");
3068
3069 mutex_lock(&wl->mutex);
3070
3071 if (wl->state == WL1271_STATE_OFF)
3072 goto out;
3073
3074 if (wl->scan.state == WL1271_SCAN_STATE_IDLE)
3075 goto out;
3076
3077 ret = wl1271_ps_elp_wakeup(wl);
3078 if (ret < 0)
3079 goto out;
3080
3081 if (wl->scan.state != WL1271_SCAN_STATE_DONE) {
3082 ret = wl1271_scan_stop(wl);
3083 if (ret < 0)
3084 goto out_sleep;
3085 }
3086
3087 /*
3088 * Rearm the tx watchdog just before idling scan. This
3089 * prevents just-finished scans from triggering the watchdog
3090 */
3091 wl12xx_rearm_tx_watchdog_locked(wl);
3092
3093 wl->scan.state = WL1271_SCAN_STATE_IDLE;
3094 memset(wl->scan.scanned_ch, 0, sizeof(wl->scan.scanned_ch));
3095 wl->scan_vif = NULL;
3096 wl->scan.req = NULL;
3097 ieee80211_scan_completed(wl->hw, true);
3098
3099 out_sleep:
3100 wl1271_ps_elp_sleep(wl);
3101 out:
3102 mutex_unlock(&wl->mutex);
3103
3104 cancel_delayed_work_sync(&wl->scan_complete_work);
3105 }
3106
3107 static int wl1271_op_sched_scan_start(struct ieee80211_hw *hw,
3108 struct ieee80211_vif *vif,
3109 struct cfg80211_sched_scan_request *req,
3110 struct ieee80211_sched_scan_ies *ies)
3111 {
3112 struct wl1271 *wl = hw->priv;
3113 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
3114 int ret;
3115
3116 wl1271_debug(DEBUG_MAC80211, "wl1271_op_sched_scan_start");
3117
3118 mutex_lock(&wl->mutex);
3119
3120 if (wl->state == WL1271_STATE_OFF) {
3121 ret = -EAGAIN;
3122 goto out;
3123 }
3124
3125 ret = wl1271_ps_elp_wakeup(wl);
3126 if (ret < 0)
3127 goto out;
3128
3129 ret = wl1271_scan_sched_scan_config(wl, wlvif, req, ies);
3130 if (ret < 0)
3131 goto out_sleep;
3132
3133 ret = wl1271_scan_sched_scan_start(wl, wlvif);
3134 if (ret < 0)
3135 goto out_sleep;
3136
3137 wl->sched_scanning = true;
3138
3139 out_sleep:
3140 wl1271_ps_elp_sleep(wl);
3141 out:
3142 mutex_unlock(&wl->mutex);
3143 return ret;
3144 }
3145
3146 static void wl1271_op_sched_scan_stop(struct ieee80211_hw *hw,
3147 struct ieee80211_vif *vif)
3148 {
3149 struct wl1271 *wl = hw->priv;
3150 int ret;
3151
3152 wl1271_debug(DEBUG_MAC80211, "wl1271_op_sched_scan_stop");
3153
3154 mutex_lock(&wl->mutex);
3155
3156 if (wl->state == WL1271_STATE_OFF)
3157 goto out;
3158
3159 ret = wl1271_ps_elp_wakeup(wl);
3160 if (ret < 0)
3161 goto out;
3162
3163 wl1271_scan_sched_scan_stop(wl);
3164
3165 wl1271_ps_elp_sleep(wl);
3166 out:
3167 mutex_unlock(&wl->mutex);
3168 }
3169
3170 static int wl1271_op_set_frag_threshold(struct ieee80211_hw *hw, u32 value)
3171 {
3172 struct wl1271 *wl = hw->priv;
3173 int ret = 0;
3174
3175 mutex_lock(&wl->mutex);
3176
3177 if (unlikely(wl->state == WL1271_STATE_OFF)) {
3178 ret = -EAGAIN;
3179 goto out;
3180 }
3181
3182 ret = wl1271_ps_elp_wakeup(wl);
3183 if (ret < 0)
3184 goto out;
3185
3186 ret = wl1271_acx_frag_threshold(wl, value);
3187 if (ret < 0)
3188 wl1271_warning("wl1271_op_set_frag_threshold failed: %d", ret);
3189
3190 wl1271_ps_elp_sleep(wl);
3191
3192 out:
3193 mutex_unlock(&wl->mutex);
3194
3195 return ret;
3196 }
3197
3198 static int wl1271_op_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
3199 {
3200 struct wl1271 *wl = hw->priv;
3201 struct wl12xx_vif *wlvif;
3202 int ret = 0;
3203
3204 mutex_lock(&wl->mutex);
3205
3206 if (unlikely(wl->state == WL1271_STATE_OFF)) {
3207 ret = -EAGAIN;
3208 goto out;
3209 }
3210
3211 ret = wl1271_ps_elp_wakeup(wl);
3212 if (ret < 0)
3213 goto out;
3214
3215 wl12xx_for_each_wlvif(wl, wlvif) {
3216 ret = wl1271_acx_rts_threshold(wl, wlvif, value);
3217 if (ret < 0)
3218 wl1271_warning("set rts threshold failed: %d", ret);
3219 }
3220 wl1271_ps_elp_sleep(wl);
3221
3222 out:
3223 mutex_unlock(&wl->mutex);
3224
3225 return ret;
3226 }
3227
3228 static int wl1271_ssid_set(struct ieee80211_vif *vif, struct sk_buff *skb,
3229 int offset)
3230 {
3231 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
3232 u8 ssid_len;
3233 const u8 *ptr = cfg80211_find_ie(WLAN_EID_SSID, skb->data + offset,
3234 skb->len - offset);
3235
3236 if (!ptr) {
3237 wl1271_error("No SSID in IEs!");
3238 return -ENOENT;
3239 }
3240
3241 ssid_len = ptr[1];
3242 if (ssid_len > IEEE80211_MAX_SSID_LEN) {
3243 wl1271_error("SSID is too long!");
3244 return -EINVAL;
3245 }
3246
3247 wlvif->ssid_len = ssid_len;
3248 memcpy(wlvif->ssid, ptr+2, ssid_len);
3249 return 0;
3250 }
3251
3252 static void wl12xx_remove_ie(struct sk_buff *skb, u8 eid, int ieoffset)
3253 {
3254 int len;
3255 const u8 *next, *end = skb->data + skb->len;
3256 u8 *ie = (u8 *)cfg80211_find_ie(eid, skb->data + ieoffset,
3257 skb->len - ieoffset);
3258 if (!ie)
3259 return;
3260 len = ie[1] + 2;
3261 next = ie + len;
3262 memmove(ie, next, end - next);
3263 skb_trim(skb, skb->len - len);
3264 }
3265
3266 static void wl12xx_remove_vendor_ie(struct sk_buff *skb,
3267 unsigned int oui, u8 oui_type,
3268 int ieoffset)
3269 {
3270 int len;
3271 const u8 *next, *end = skb->data + skb->len;
3272 u8 *ie = (u8 *)cfg80211_find_vendor_ie(oui, oui_type,
3273 skb->data + ieoffset,
3274 skb->len - ieoffset);
3275 if (!ie)
3276 return;
3277 len = ie[1] + 2;
3278 next = ie + len;
3279 memmove(ie, next, end - next);
3280 skb_trim(skb, skb->len - len);
3281 }
3282
3283 static int wl1271_ap_set_probe_resp_tmpl(struct wl1271 *wl, u32 rates,
3284 struct ieee80211_vif *vif)
3285 {
3286 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
3287 struct sk_buff *skb;
3288 int ret;
3289
3290 skb = ieee80211_proberesp_get(wl->hw, vif);
3291 if (!skb)
3292 return -EOPNOTSUPP;
3293
3294 ret = wl1271_cmd_template_set(wl, wlvif->role_id,
3295 CMD_TEMPL_AP_PROBE_RESPONSE,
3296 skb->data,
3297 skb->len, 0,
3298 rates);
3299 dev_kfree_skb(skb);
3300
3301 if (ret < 0)
3302 goto out;
3303
3304 wl1271_debug(DEBUG_AP, "probe response updated");
3305 set_bit(WLVIF_FLAG_AP_PROBE_RESP_SET, &wlvif->flags);
3306
3307 out:
3308 return ret;
3309 }
3310
3311 static int wl1271_ap_set_probe_resp_tmpl_legacy(struct wl1271 *wl,
3312 struct ieee80211_vif *vif,
3313 u8 *probe_rsp_data,
3314 size_t probe_rsp_len,
3315 u32 rates)
3316 {
3317 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
3318 struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
3319 u8 probe_rsp_templ[WL1271_CMD_TEMPL_MAX_SIZE];
3320 int ssid_ie_offset, ie_offset, templ_len;
3321 const u8 *ptr;
3322
3323 /* no need to change probe response if the SSID is set correctly */
3324 if (wlvif->ssid_len > 0)
3325 return wl1271_cmd_template_set(wl, wlvif->role_id,
3326 CMD_TEMPL_AP_PROBE_RESPONSE,
3327 probe_rsp_data,
3328 probe_rsp_len, 0,
3329 rates);
3330
3331 if (probe_rsp_len + bss_conf->ssid_len > WL1271_CMD_TEMPL_MAX_SIZE) {
3332 wl1271_error("probe_rsp template too big");
3333 return -EINVAL;
3334 }
3335
3336 /* start searching from IE offset */
3337 ie_offset = offsetof(struct ieee80211_mgmt, u.probe_resp.variable);
3338
3339 ptr = cfg80211_find_ie(WLAN_EID_SSID, probe_rsp_data + ie_offset,
3340 probe_rsp_len - ie_offset);
3341 if (!ptr) {
3342 wl1271_error("No SSID in beacon!");
3343 return -EINVAL;
3344 }
3345
3346 ssid_ie_offset = ptr - probe_rsp_data;
3347 ptr += (ptr[1] + 2);
3348
3349 memcpy(probe_rsp_templ, probe_rsp_data, ssid_ie_offset);
3350
3351 /* insert SSID from bss_conf */
3352 probe_rsp_templ[ssid_ie_offset] = WLAN_EID_SSID;
3353 probe_rsp_templ[ssid_ie_offset + 1] = bss_conf->ssid_len;
3354 memcpy(probe_rsp_templ + ssid_ie_offset + 2,
3355 bss_conf->ssid, bss_conf->ssid_len);
3356 templ_len = ssid_ie_offset + 2 + bss_conf->ssid_len;
3357
3358 memcpy(probe_rsp_templ + ssid_ie_offset + 2 + bss_conf->ssid_len,
3359 ptr, probe_rsp_len - (ptr - probe_rsp_data));
3360 templ_len += probe_rsp_len - (ptr - probe_rsp_data);
3361
3362 return wl1271_cmd_template_set(wl, wlvif->role_id,
3363 CMD_TEMPL_AP_PROBE_RESPONSE,
3364 probe_rsp_templ,
3365 templ_len, 0,
3366 rates);
3367 }
3368
3369 static int wl1271_bss_erp_info_changed(struct wl1271 *wl,
3370 struct ieee80211_vif *vif,
3371 struct ieee80211_bss_conf *bss_conf,
3372 u32 changed)
3373 {
3374 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
3375 int ret = 0;
3376
3377 if (changed & BSS_CHANGED_ERP_SLOT) {
3378 if (bss_conf->use_short_slot)
3379 ret = wl1271_acx_slot(wl, wlvif, SLOT_TIME_SHORT);
3380 else
3381 ret = wl1271_acx_slot(wl, wlvif, SLOT_TIME_LONG);
3382 if (ret < 0) {
3383 wl1271_warning("Set slot time failed %d", ret);
3384 goto out;
3385 }
3386 }
3387
3388 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
3389 if (bss_conf->use_short_preamble)
3390 wl1271_acx_set_preamble(wl, wlvif, ACX_PREAMBLE_SHORT);
3391 else
3392 wl1271_acx_set_preamble(wl, wlvif, ACX_PREAMBLE_LONG);
3393 }
3394
3395 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
3396 if (bss_conf->use_cts_prot)
3397 ret = wl1271_acx_cts_protect(wl, wlvif,
3398 CTSPROTECT_ENABLE);
3399 else
3400 ret = wl1271_acx_cts_protect(wl, wlvif,
3401 CTSPROTECT_DISABLE);
3402 if (ret < 0) {
3403 wl1271_warning("Set ctsprotect failed %d", ret);
3404 goto out;
3405 }
3406 }
3407
3408 out:
3409 return ret;
3410 }
3411
3412 static int wlcore_set_beacon_template(struct wl1271 *wl,
3413 struct ieee80211_vif *vif,
3414 bool is_ap)
3415 {
3416 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
3417 struct ieee80211_hdr *hdr;
3418 u32 min_rate;
3419 int ret;
3420 int ieoffset = offsetof(struct ieee80211_mgmt,
3421 u.beacon.variable);
3422 struct sk_buff *beacon = ieee80211_beacon_get(wl->hw, vif);
3423 u16 tmpl_id;
3424
3425 if (!beacon) {
3426 ret = -EINVAL;
3427 goto out;
3428 }
3429
3430 wl1271_debug(DEBUG_MASTER, "beacon updated");
3431
3432 ret = wl1271_ssid_set(vif, beacon, ieoffset);
3433 if (ret < 0) {
3434 dev_kfree_skb(beacon);
3435 goto out;
3436 }
3437 min_rate = wl1271_tx_min_rate_get(wl, wlvif->basic_rate_set);
3438 tmpl_id = is_ap ? CMD_TEMPL_AP_BEACON :
3439 CMD_TEMPL_BEACON;
3440 ret = wl1271_cmd_template_set(wl, wlvif->role_id, tmpl_id,
3441 beacon->data,
3442 beacon->len, 0,
3443 min_rate);
3444 if (ret < 0) {
3445 dev_kfree_skb(beacon);
3446 goto out;
3447 }
3448
3449 /*
3450 * In case we already have a probe-resp beacon set explicitly
3451 * by usermode, don't use the beacon data.
3452 */
3453 if (test_bit(WLVIF_FLAG_AP_PROBE_RESP_SET, &wlvif->flags))
3454 goto end_bcn;
3455
3456 /* remove TIM ie from probe response */
3457 wl12xx_remove_ie(beacon, WLAN_EID_TIM, ieoffset);
3458
3459 /*
3460 * remove p2p ie from probe response.
3461 * the fw reponds to probe requests that don't include
3462 * the p2p ie. probe requests with p2p ie will be passed,
3463 * and will be responded by the supplicant (the spec
3464 * forbids including the p2p ie when responding to probe
3465 * requests that didn't include it).
3466 */
3467 wl12xx_remove_vendor_ie(beacon, WLAN_OUI_WFA,
3468 WLAN_OUI_TYPE_WFA_P2P, ieoffset);
3469
3470 hdr = (struct ieee80211_hdr *) beacon->data;
3471 hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
3472 IEEE80211_STYPE_PROBE_RESP);
3473 if (is_ap)
3474 ret = wl1271_ap_set_probe_resp_tmpl_legacy(wl, vif,
3475 beacon->data,
3476 beacon->len,
3477 min_rate);
3478 else
3479 ret = wl1271_cmd_template_set(wl, wlvif->role_id,
3480 CMD_TEMPL_PROBE_RESPONSE,
3481 beacon->data,
3482 beacon->len, 0,
3483 min_rate);
3484 end_bcn:
3485 dev_kfree_skb(beacon);
3486 if (ret < 0)
3487 goto out;
3488
3489 out:
3490 return ret;
3491 }
3492
3493 static int wl1271_bss_beacon_info_changed(struct wl1271 *wl,
3494 struct ieee80211_vif *vif,
3495 struct ieee80211_bss_conf *bss_conf,
3496 u32 changed)
3497 {
3498 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
3499 bool is_ap = (wlvif->bss_type == BSS_TYPE_AP_BSS);
3500 int ret = 0;
3501
3502 if ((changed & BSS_CHANGED_BEACON_INT)) {
3503 wl1271_debug(DEBUG_MASTER, "beacon interval updated: %d",
3504 bss_conf->beacon_int);
3505
3506 wlvif->beacon_int = bss_conf->beacon_int;
3507 }
3508
3509 if ((changed & BSS_CHANGED_AP_PROBE_RESP) && is_ap) {
3510 u32 rate = wl1271_tx_min_rate_get(wl, wlvif->basic_rate_set);
3511
3512 wl1271_ap_set_probe_resp_tmpl(wl, rate, vif);
3513 }
3514
3515 if ((changed & BSS_CHANGED_BEACON)) {
3516 ret = wlcore_set_beacon_template(wl, vif, is_ap);
3517 if (ret < 0)
3518 goto out;
3519 }
3520
3521 out:
3522 if (ret != 0)
3523 wl1271_error("beacon info change failed: %d", ret);
3524 return ret;
3525 }
3526
3527 /* AP mode changes */
3528 static void wl1271_bss_info_changed_ap(struct wl1271 *wl,
3529 struct ieee80211_vif *vif,
3530 struct ieee80211_bss_conf *bss_conf,
3531 u32 changed)
3532 {
3533 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
3534 int ret = 0;
3535
3536 if ((changed & BSS_CHANGED_BASIC_RATES)) {
3537 u32 rates = bss_conf->basic_rates;
3538
3539 wlvif->basic_rate_set = wl1271_tx_enabled_rates_get(wl, rates,
3540 wlvif->band);
3541 wlvif->basic_rate = wl1271_tx_min_rate_get(wl,
3542 wlvif->basic_rate_set);
3543
3544 ret = wl1271_init_ap_rates(wl, wlvif);
3545 if (ret < 0) {
3546 wl1271_error("AP rate policy change failed %d", ret);
3547 goto out;
3548 }
3549
3550 ret = wl1271_ap_init_templates(wl, vif);
3551 if (ret < 0)
3552 goto out;
3553
3554 ret = wl1271_ap_set_probe_resp_tmpl(wl, wlvif->basic_rate, vif);
3555 if (ret < 0)
3556 goto out;
3557
3558 ret = wlcore_set_beacon_template(wl, vif, true);
3559 if (ret < 0)
3560 goto out;
3561 }
3562
3563 ret = wl1271_bss_beacon_info_changed(wl, vif, bss_conf, changed);
3564 if (ret < 0)
3565 goto out;
3566
3567 if ((changed & BSS_CHANGED_BEACON_ENABLED)) {
3568 if (bss_conf->enable_beacon) {
3569 if (!test_bit(WLVIF_FLAG_AP_STARTED, &wlvif->flags)) {
3570 ret = wl12xx_cmd_role_start_ap(wl, wlvif);
3571 if (ret < 0)
3572 goto out;
3573
3574 ret = wl1271_ap_init_hwenc(wl, wlvif);
3575 if (ret < 0)
3576 goto out;
3577
3578 set_bit(WLVIF_FLAG_AP_STARTED, &wlvif->flags);
3579 wl1271_debug(DEBUG_AP, "started AP");
3580 }
3581 } else {
3582 if (test_bit(WLVIF_FLAG_AP_STARTED, &wlvif->flags)) {
3583 ret = wl12xx_cmd_role_stop_ap(wl, wlvif);
3584 if (ret < 0)
3585 goto out;
3586
3587 clear_bit(WLVIF_FLAG_AP_STARTED, &wlvif->flags);
3588 clear_bit(WLVIF_FLAG_AP_PROBE_RESP_SET,
3589 &wlvif->flags);
3590 wl1271_debug(DEBUG_AP, "stopped AP");
3591 }
3592 }
3593 }
3594
3595 ret = wl1271_bss_erp_info_changed(wl, vif, bss_conf, changed);
3596 if (ret < 0)
3597 goto out;
3598
3599 /* Handle HT information change */
3600 if ((changed & BSS_CHANGED_HT) &&
3601 (bss_conf->channel_type != NL80211_CHAN_NO_HT)) {
3602 ret = wl1271_acx_set_ht_information(wl, wlvif,
3603 bss_conf->ht_operation_mode);
3604 if (ret < 0) {
3605 wl1271_warning("Set ht information failed %d", ret);
3606 goto out;
3607 }
3608 }
3609
3610 out:
3611 return;
3612 }
3613
3614 /* STA/IBSS mode changes */
3615 static void wl1271_bss_info_changed_sta(struct wl1271 *wl,
3616 struct ieee80211_vif *vif,
3617 struct ieee80211_bss_conf *bss_conf,
3618 u32 changed)
3619 {
3620 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
3621 bool do_join = false, set_assoc = false;
3622 bool is_ibss = (wlvif->bss_type == BSS_TYPE_IBSS);
3623 bool ibss_joined = false;
3624 u32 sta_rate_set = 0;
3625 int ret;
3626 struct ieee80211_sta *sta;
3627 bool sta_exists = false;
3628 struct ieee80211_sta_ht_cap sta_ht_cap;
3629
3630 if (is_ibss) {
3631 ret = wl1271_bss_beacon_info_changed(wl, vif, bss_conf,
3632 changed);
3633 if (ret < 0)
3634 goto out;
3635 }
3636
3637 if (changed & BSS_CHANGED_IBSS) {
3638 if (bss_conf->ibss_joined) {
3639 set_bit(WLVIF_FLAG_IBSS_JOINED, &wlvif->flags);
3640 ibss_joined = true;
3641 } else {
3642 if (test_and_clear_bit(WLVIF_FLAG_IBSS_JOINED,
3643 &wlvif->flags))
3644 wl1271_unjoin(wl, wlvif);
3645 }
3646 }
3647
3648 if ((changed & BSS_CHANGED_BEACON_INT) && ibss_joined)
3649 do_join = true;
3650
3651 /* Need to update the SSID (for filtering etc) */
3652 if ((changed & BSS_CHANGED_BEACON) && ibss_joined)
3653 do_join = true;
3654
3655 if ((changed & BSS_CHANGED_BEACON_ENABLED) && ibss_joined) {
3656 wl1271_debug(DEBUG_ADHOC, "ad-hoc beaconing: %s",
3657 bss_conf->enable_beacon ? "enabled" : "disabled");
3658
3659 do_join = true;
3660 }
3661
3662 if (changed & BSS_CHANGED_IDLE && !is_ibss) {
3663 ret = wl1271_sta_handle_idle(wl, wlvif, bss_conf->idle);
3664 if (ret < 0)
3665 wl1271_warning("idle mode change failed %d", ret);
3666 }
3667
3668 if ((changed & BSS_CHANGED_CQM)) {
3669 bool enable = false;
3670 if (bss_conf->cqm_rssi_thold)
3671 enable = true;
3672 ret = wl1271_acx_rssi_snr_trigger(wl, wlvif, enable,
3673 bss_conf->cqm_rssi_thold,
3674 bss_conf->cqm_rssi_hyst);
3675 if (ret < 0)
3676 goto out;
3677 wlvif->rssi_thold = bss_conf->cqm_rssi_thold;
3678 }
3679
3680 if (changed & BSS_CHANGED_BSSID)
3681 if (!is_zero_ether_addr(bss_conf->bssid)) {
3682 ret = wl12xx_cmd_build_null_data(wl, wlvif);
3683 if (ret < 0)
3684 goto out;
3685
3686 ret = wl1271_build_qos_null_data(wl, vif);
3687 if (ret < 0)
3688 goto out;
3689 }
3690
3691 if (changed & (BSS_CHANGED_ASSOC | BSS_CHANGED_HT)) {
3692 rcu_read_lock();
3693 sta = ieee80211_find_sta(vif, bss_conf->bssid);
3694 if (!sta)
3695 goto sta_not_found;
3696
3697 /* save the supp_rates of the ap */
3698 sta_rate_set = sta->supp_rates[wl->hw->conf.channel->band];
3699 if (sta->ht_cap.ht_supported)
3700 sta_rate_set |=
3701 (sta->ht_cap.mcs.rx_mask[0] << HW_HT_RATES_OFFSET) |
3702 (sta->ht_cap.mcs.rx_mask[1] << HW_MIMO_RATES_OFFSET);
3703 sta_ht_cap = sta->ht_cap;
3704 sta_exists = true;
3705
3706 sta_not_found:
3707 rcu_read_unlock();
3708 }
3709
3710 if ((changed & BSS_CHANGED_ASSOC)) {
3711 if (bss_conf->assoc) {
3712 u32 rates;
3713 int ieoffset;
3714 wlvif->aid = bss_conf->aid;
3715 wlvif->channel_type = bss_conf->channel_type;
3716 wlvif->beacon_int = bss_conf->beacon_int;
3717 do_join = true;
3718 set_assoc = true;
3719
3720 /*
3721 * use basic rates from AP, and determine lowest rate
3722 * to use with control frames.
3723 */
3724 rates = bss_conf->basic_rates;
3725 wlvif->basic_rate_set =
3726 wl1271_tx_enabled_rates_get(wl, rates,
3727 wlvif->band);
3728 wlvif->basic_rate =
3729 wl1271_tx_min_rate_get(wl,
3730 wlvif->basic_rate_set);
3731 if (sta_rate_set)
3732 wlvif->rate_set =
3733 wl1271_tx_enabled_rates_get(wl,
3734 sta_rate_set,
3735 wlvif->band);
3736 ret = wl1271_acx_sta_rate_policies(wl, wlvif);
3737 if (ret < 0)
3738 goto out;
3739
3740 /*
3741 * with wl1271, we don't need to update the
3742 * beacon_int and dtim_period, because the firmware
3743 * updates it by itself when the first beacon is
3744 * received after a join.
3745 */
3746 ret = wl1271_cmd_build_ps_poll(wl, wlvif, wlvif->aid);
3747 if (ret < 0)
3748 goto out;
3749
3750 /*
3751 * Get a template for hardware connection maintenance
3752 */
3753 dev_kfree_skb(wlvif->probereq);
3754 wlvif->probereq = wl1271_cmd_build_ap_probe_req(wl,
3755 wlvif,
3756 NULL);
3757 ieoffset = offsetof(struct ieee80211_mgmt,
3758 u.probe_req.variable);
3759 wl1271_ssid_set(vif, wlvif->probereq, ieoffset);
3760
3761 /* enable the connection monitoring feature */
3762 ret = wl1271_acx_conn_monit_params(wl, wlvif, true);
3763 if (ret < 0)
3764 goto out;
3765 } else {
3766 /* use defaults when not associated */
3767 bool was_assoc =
3768 !!test_and_clear_bit(WLVIF_FLAG_STA_ASSOCIATED,
3769 &wlvif->flags);
3770 bool was_ifup =
3771 !!test_and_clear_bit(WLVIF_FLAG_STA_STATE_SENT,
3772 &wlvif->flags);
3773 wlvif->aid = 0;
3774
3775 /* free probe-request template */
3776 dev_kfree_skb(wlvif->probereq);
3777 wlvif->probereq = NULL;
3778
3779 /* revert back to minimum rates for the current band */
3780 wl1271_set_band_rate(wl, wlvif);
3781 wlvif->basic_rate =
3782 wl1271_tx_min_rate_get(wl,
3783 wlvif->basic_rate_set);
3784 ret = wl1271_acx_sta_rate_policies(wl, wlvif);
3785 if (ret < 0)
3786 goto out;
3787
3788 /* disable connection monitor features */
3789 ret = wl1271_acx_conn_monit_params(wl, wlvif, false);
3790
3791 /* Disable the keep-alive feature */
3792 ret = wl1271_acx_keep_alive_mode(wl, wlvif, false);
3793 if (ret < 0)
3794 goto out;
3795
3796 /* restore the bssid filter and go to dummy bssid */
3797 if (was_assoc) {
3798 /*
3799 * we might have to disable roc, if there was
3800 * no IF_OPER_UP notification.
3801 */
3802 if (!was_ifup) {
3803 ret = wl12xx_croc(wl, wlvif->role_id);
3804 if (ret < 0)
3805 goto out;
3806 }
3807 /*
3808 * (we also need to disable roc in case of
3809 * roaming on the same channel. until we will
3810 * have a better flow...)
3811 */
3812 if (test_bit(wlvif->dev_role_id, wl->roc_map)) {
3813 ret = wl12xx_croc(wl,
3814 wlvif->dev_role_id);
3815 if (ret < 0)
3816 goto out;
3817 }
3818
3819 wl1271_unjoin(wl, wlvif);
3820 if (!bss_conf->idle)
3821 wl12xx_start_dev(wl, wlvif);
3822 }
3823 }
3824 }
3825
3826 if (changed & BSS_CHANGED_IBSS) {
3827 wl1271_debug(DEBUG_ADHOC, "ibss_joined: %d",
3828 bss_conf->ibss_joined);
3829
3830 if (bss_conf->ibss_joined) {
3831 u32 rates = bss_conf->basic_rates;
3832 wlvif->basic_rate_set =
3833 wl1271_tx_enabled_rates_get(wl, rates,
3834 wlvif->band);
3835 wlvif->basic_rate =
3836 wl1271_tx_min_rate_get(wl,
3837 wlvif->basic_rate_set);
3838
3839 /* by default, use 11b + OFDM rates */
3840 wlvif->rate_set = CONF_TX_IBSS_DEFAULT_RATES;
3841 ret = wl1271_acx_sta_rate_policies(wl, wlvif);
3842 if (ret < 0)
3843 goto out;
3844 }
3845 }
3846
3847 ret = wl1271_bss_erp_info_changed(wl, vif, bss_conf, changed);
3848 if (ret < 0)
3849 goto out;
3850
3851 if (do_join) {
3852 ret = wl1271_join(wl, wlvif, set_assoc);
3853 if (ret < 0) {
3854 wl1271_warning("cmd join failed %d", ret);
3855 goto out;
3856 }
3857
3858 /* ROC until connected (after EAPOL exchange) */
3859 if (!is_ibss) {
3860 ret = wl12xx_roc(wl, wlvif, wlvif->role_id);
3861 if (ret < 0)
3862 goto out;
3863
3864 if (test_bit(WLVIF_FLAG_STA_AUTHORIZED, &wlvif->flags))
3865 wl12xx_set_authorized(wl, wlvif);
3866 }
3867 /*
3868 * stop device role if started (we might already be in
3869 * STA/IBSS role).
3870 */
3871 if (wl12xx_dev_role_started(wlvif)) {
3872 ret = wl12xx_stop_dev(wl, wlvif);
3873 if (ret < 0)
3874 goto out;
3875 }
3876 }
3877
3878 /* Handle new association with HT. Do this after join. */
3879 if (sta_exists) {
3880 if ((changed & BSS_CHANGED_HT) &&
3881 (bss_conf->channel_type != NL80211_CHAN_NO_HT)) {
3882 ret = wl1271_acx_set_ht_capabilities(wl,
3883 &sta_ht_cap,
3884 true,
3885 wlvif->sta.hlid);
3886 if (ret < 0) {
3887 wl1271_warning("Set ht cap true failed %d",
3888 ret);
3889 goto out;
3890 }
3891 }
3892 /* handle new association without HT and disassociation */
3893 else if (changed & BSS_CHANGED_ASSOC) {
3894 ret = wl1271_acx_set_ht_capabilities(wl,
3895 &sta_ht_cap,
3896 false,
3897 wlvif->sta.hlid);
3898 if (ret < 0) {
3899 wl1271_warning("Set ht cap false failed %d",
3900 ret);
3901 goto out;
3902 }
3903 }
3904 }
3905
3906 /* Handle HT information change. Done after join. */
3907 if ((changed & BSS_CHANGED_HT) &&
3908 (bss_conf->channel_type != NL80211_CHAN_NO_HT)) {
3909 ret = wl1271_acx_set_ht_information(wl, wlvif,
3910 bss_conf->ht_operation_mode);
3911 if (ret < 0) {
3912 wl1271_warning("Set ht information failed %d", ret);
3913 goto out;
3914 }
3915 }
3916
3917 /* Handle arp filtering. Done after join. */
3918 if ((changed & BSS_CHANGED_ARP_FILTER) ||
3919 (!is_ibss && (changed & BSS_CHANGED_QOS))) {
3920 __be32 addr = bss_conf->arp_addr_list[0];
3921 wlvif->sta.qos = bss_conf->qos;
3922 WARN_ON(wlvif->bss_type != BSS_TYPE_STA_BSS);
3923
3924 if (bss_conf->arp_addr_cnt == 1 &&
3925 bss_conf->arp_filter_enabled) {
3926 wlvif->ip_addr = addr;
3927 /*
3928 * The template should have been configured only upon
3929 * association. however, it seems that the correct ip
3930 * isn't being set (when sending), so we have to
3931 * reconfigure the template upon every ip change.
3932 */
3933 ret = wl1271_cmd_build_arp_rsp(wl, wlvif);
3934 if (ret < 0) {
3935 wl1271_warning("build arp rsp failed: %d", ret);
3936 goto out;
3937 }
3938
3939 ret = wl1271_acx_arp_ip_filter(wl, wlvif,
3940 (ACX_ARP_FILTER_ARP_FILTERING |
3941 ACX_ARP_FILTER_AUTO_ARP),
3942 addr);
3943 } else {
3944 wlvif->ip_addr = 0;
3945 ret = wl1271_acx_arp_ip_filter(wl, wlvif, 0, addr);
3946 }
3947
3948 if (ret < 0)
3949 goto out;
3950 }
3951
3952 out:
3953 return;
3954 }
3955
3956 static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
3957 struct ieee80211_vif *vif,
3958 struct ieee80211_bss_conf *bss_conf,
3959 u32 changed)
3960 {
3961 struct wl1271 *wl = hw->priv;
3962 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
3963 bool is_ap = (wlvif->bss_type == BSS_TYPE_AP_BSS);
3964 int ret;
3965
3966 wl1271_debug(DEBUG_MAC80211, "mac80211 bss info changed 0x%x",
3967 (int)changed);
3968
3969 /*
3970 * make sure to cancel pending disconnections if our association
3971 * state changed
3972 */
3973 if (!is_ap && (changed & BSS_CHANGED_ASSOC))
3974 cancel_delayed_work_sync(&wl->connection_loss_work);
3975
3976 if (is_ap && (changed & BSS_CHANGED_BEACON_ENABLED) &&
3977 !bss_conf->enable_beacon)
3978 wl1271_tx_flush(wl);
3979
3980 mutex_lock(&wl->mutex);
3981
3982 if (unlikely(wl->state == WL1271_STATE_OFF))
3983 goto out;
3984
3985 if (unlikely(!test_bit(WLVIF_FLAG_INITIALIZED, &wlvif->flags)))
3986 goto out;
3987
3988 ret = wl1271_ps_elp_wakeup(wl);
3989 if (ret < 0)
3990 goto out;
3991
3992 if (is_ap)
3993 wl1271_bss_info_changed_ap(wl, vif, bss_conf, changed);
3994 else
3995 wl1271_bss_info_changed_sta(wl, vif, bss_conf, changed);
3996
3997 wl1271_ps_elp_sleep(wl);
3998
3999 out:
4000 mutex_unlock(&wl->mutex);
4001 }
4002
4003 static int wl1271_op_conf_tx(struct ieee80211_hw *hw,
4004 struct ieee80211_vif *vif, u16 queue,
4005 const struct ieee80211_tx_queue_params *params)
4006 {
4007 struct wl1271 *wl = hw->priv;
4008 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
4009 u8 ps_scheme;
4010 int ret = 0;
4011
4012 mutex_lock(&wl->mutex);
4013
4014 wl1271_debug(DEBUG_MAC80211, "mac80211 conf tx %d", queue);
4015
4016 if (params->uapsd)
4017 ps_scheme = CONF_PS_SCHEME_UPSD_TRIGGER;
4018 else
4019 ps_scheme = CONF_PS_SCHEME_LEGACY;
4020
4021 if (!test_bit(WLVIF_FLAG_INITIALIZED, &wlvif->flags))
4022 goto out;
4023
4024 ret = wl1271_ps_elp_wakeup(wl);
4025 if (ret < 0)
4026 goto out;
4027
4028 /*
4029 * the txop is confed in units of 32us by the mac80211,
4030 * we need us
4031 */
4032 ret = wl1271_acx_ac_cfg(wl, wlvif, wl1271_tx_get_queue(queue),
4033 params->cw_min, params->cw_max,
4034 params->aifs, params->txop << 5);
4035 if (ret < 0)
4036 goto out_sleep;
4037
4038 ret = wl1271_acx_tid_cfg(wl, wlvif, wl1271_tx_get_queue(queue),
4039 CONF_CHANNEL_TYPE_EDCF,
4040 wl1271_tx_get_queue(queue),
4041 ps_scheme, CONF_ACK_POLICY_LEGACY,
4042 0, 0);
4043
4044 out_sleep:
4045 wl1271_ps_elp_sleep(wl);
4046
4047 out:
4048 mutex_unlock(&wl->mutex);
4049
4050 return ret;
4051 }
4052
4053 static u64 wl1271_op_get_tsf(struct ieee80211_hw *hw,
4054 struct ieee80211_vif *vif)
4055 {
4056
4057 struct wl1271 *wl = hw->priv;
4058 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
4059 u64 mactime = ULLONG_MAX;
4060 int ret;
4061
4062 wl1271_debug(DEBUG_MAC80211, "mac80211 get tsf");
4063
4064 mutex_lock(&wl->mutex);
4065
4066 if (unlikely(wl->state == WL1271_STATE_OFF))
4067 goto out;
4068
4069 ret = wl1271_ps_elp_wakeup(wl);
4070 if (ret < 0)
4071 goto out;
4072
4073 ret = wl12xx_acx_tsf_info(wl, wlvif, &mactime);
4074 if (ret < 0)
4075 goto out_sleep;
4076
4077 out_sleep:
4078 wl1271_ps_elp_sleep(wl);
4079
4080 out:
4081 mutex_unlock(&wl->mutex);
4082 return mactime;
4083 }
4084
4085 static int wl1271_op_get_survey(struct ieee80211_hw *hw, int idx,
4086 struct survey_info *survey)
4087 {
4088 struct wl1271 *wl = hw->priv;
4089 struct ieee80211_conf *conf = &hw->conf;
4090
4091 if (idx != 0)
4092 return -ENOENT;
4093
4094 survey->channel = conf->channel;
4095 survey->filled = SURVEY_INFO_NOISE_DBM;
4096 survey->noise = wl->noise;
4097
4098 return 0;
4099 }
4100
4101 static int wl1271_allocate_sta(struct wl1271 *wl,
4102 struct wl12xx_vif *wlvif,
4103 struct ieee80211_sta *sta)
4104 {
4105 struct wl1271_station *wl_sta;
4106 int ret;
4107
4108
4109 if (wl->active_sta_count >= AP_MAX_STATIONS) {
4110 wl1271_warning("could not allocate HLID - too much stations");
4111 return -EBUSY;
4112 }
4113
4114 wl_sta = (struct wl1271_station *)sta->drv_priv;
4115 ret = wl12xx_allocate_link(wl, wlvif, &wl_sta->hlid);
4116 if (ret < 0) {
4117 wl1271_warning("could not allocate HLID - too many links");
4118 return -EBUSY;
4119 }
4120
4121 set_bit(wl_sta->hlid, wlvif->ap.sta_hlid_map);
4122 memcpy(wl->links[wl_sta->hlid].addr, sta->addr, ETH_ALEN);
4123 wl->active_sta_count++;
4124 return 0;
4125 }
4126
4127 void wl1271_free_sta(struct wl1271 *wl, struct wl12xx_vif *wlvif, u8 hlid)
4128 {
4129 if (!test_bit(hlid, wlvif->ap.sta_hlid_map))
4130 return;
4131
4132 clear_bit(hlid, wlvif->ap.sta_hlid_map);
4133 memset(wl->links[hlid].addr, 0, ETH_ALEN);
4134 wl->links[hlid].ba_bitmap = 0;
4135 __clear_bit(hlid, &wl->ap_ps_map);
4136 __clear_bit(hlid, (unsigned long *)&wl->ap_fw_ps_map);
4137 wl12xx_free_link(wl, wlvif, &hlid);
4138 wl->active_sta_count--;
4139
4140 /*
4141 * rearm the tx watchdog when the last STA is freed - give the FW a
4142 * chance to return STA-buffered packets before complaining.
4143 */
4144 if (wl->active_sta_count == 0)
4145 wl12xx_rearm_tx_watchdog_locked(wl);
4146 }
4147
4148 static int wl12xx_sta_add(struct wl1271 *wl,
4149 struct wl12xx_vif *wlvif,
4150 struct ieee80211_sta *sta)
4151 {
4152 struct wl1271_station *wl_sta;
4153 int ret = 0;
4154 u8 hlid;
4155
4156 wl1271_debug(DEBUG_MAC80211, "mac80211 add sta %d", (int)sta->aid);
4157
4158 ret = wl1271_allocate_sta(wl, wlvif, sta);
4159 if (ret < 0)
4160 return ret;
4161
4162 wl_sta = (struct wl1271_station *)sta->drv_priv;
4163 hlid = wl_sta->hlid;
4164
4165 ret = wl12xx_cmd_add_peer(wl, wlvif, sta, hlid);
4166 if (ret < 0)
4167 wl1271_free_sta(wl, wlvif, hlid);
4168
4169 return ret;
4170 }
4171
4172 static int wl12xx_sta_remove(struct wl1271 *wl,
4173 struct wl12xx_vif *wlvif,
4174 struct ieee80211_sta *sta)
4175 {
4176 struct wl1271_station *wl_sta;
4177 int ret = 0, id;
4178
4179 wl1271_debug(DEBUG_MAC80211, "mac80211 remove sta %d", (int)sta->aid);
4180
4181 wl_sta = (struct wl1271_station *)sta->drv_priv;
4182 id = wl_sta->hlid;
4183 if (WARN_ON(!test_bit(id, wlvif->ap.sta_hlid_map)))
4184 return -EINVAL;
4185
4186 ret = wl12xx_cmd_remove_peer(wl, wl_sta->hlid);
4187 if (ret < 0)
4188 return ret;
4189
4190 wl1271_free_sta(wl, wlvif, wl_sta->hlid);
4191 return ret;
4192 }
4193
4194 static int wl12xx_update_sta_state(struct wl1271 *wl,
4195 struct wl12xx_vif *wlvif,
4196 struct ieee80211_sta *sta,
4197 enum ieee80211_sta_state old_state,
4198 enum ieee80211_sta_state new_state)
4199 {
4200 struct wl1271_station *wl_sta;
4201 u8 hlid;
4202 bool is_ap = wlvif->bss_type == BSS_TYPE_AP_BSS;
4203 bool is_sta = wlvif->bss_type == BSS_TYPE_STA_BSS;
4204 int ret;
4205
4206 wl_sta = (struct wl1271_station *)sta->drv_priv;
4207 hlid = wl_sta->hlid;
4208
4209 /* Add station (AP mode) */
4210 if (is_ap &&
4211 old_state == IEEE80211_STA_NOTEXIST &&
4212 new_state == IEEE80211_STA_NONE)
4213 return wl12xx_sta_add(wl, wlvif, sta);
4214
4215 /* Remove station (AP mode) */
4216 if (is_ap &&
4217 old_state == IEEE80211_STA_NONE &&
4218 new_state == IEEE80211_STA_NOTEXIST) {
4219 /* must not fail */
4220 wl12xx_sta_remove(wl, wlvif, sta);
4221 return 0;
4222 }
4223
4224 /* Authorize station (AP mode) */
4225 if (is_ap &&
4226 new_state == IEEE80211_STA_AUTHORIZED) {
4227 ret = wl12xx_cmd_set_peer_state(wl, hlid);
4228 if (ret < 0)
4229 return ret;
4230
4231 ret = wl1271_acx_set_ht_capabilities(wl, &sta->ht_cap, true,
4232 hlid);
4233 return ret;
4234 }
4235
4236 /* Authorize station */
4237 if (is_sta &&
4238 new_state == IEEE80211_STA_AUTHORIZED) {
4239 set_bit(WLVIF_FLAG_STA_AUTHORIZED, &wlvif->flags);
4240 return wl12xx_set_authorized(wl, wlvif);
4241 }
4242
4243 if (is_sta &&
4244 old_state == IEEE80211_STA_AUTHORIZED &&
4245 new_state == IEEE80211_STA_ASSOC) {
4246 clear_bit(WLVIF_FLAG_STA_AUTHORIZED, &wlvif->flags);
4247 return 0;
4248 }
4249
4250 return 0;
4251 }
4252
4253 static int wl12xx_op_sta_state(struct ieee80211_hw *hw,
4254 struct ieee80211_vif *vif,
4255 struct ieee80211_sta *sta,
4256 enum ieee80211_sta_state old_state,
4257 enum ieee80211_sta_state new_state)
4258 {
4259 struct wl1271 *wl = hw->priv;
4260 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
4261 int ret;
4262
4263 wl1271_debug(DEBUG_MAC80211, "mac80211 sta %d state=%d->%d",
4264 sta->aid, old_state, new_state);
4265
4266 mutex_lock(&wl->mutex);
4267
4268 if (unlikely(wl->state == WL1271_STATE_OFF)) {
4269 ret = -EBUSY;
4270 goto out;
4271 }
4272
4273 ret = wl1271_ps_elp_wakeup(wl);
4274 if (ret < 0)
4275 goto out;
4276
4277 ret = wl12xx_update_sta_state(wl, wlvif, sta, old_state, new_state);
4278
4279 wl1271_ps_elp_sleep(wl);
4280 out:
4281 mutex_unlock(&wl->mutex);
4282 if (new_state < old_state)
4283 return 0;
4284 return ret;
4285 }
4286
4287 static int wl1271_op_ampdu_action(struct ieee80211_hw *hw,
4288 struct ieee80211_vif *vif,
4289 enum ieee80211_ampdu_mlme_action action,
4290 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
4291 u8 buf_size)
4292 {
4293 struct wl1271 *wl = hw->priv;
4294 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
4295 int ret;
4296 u8 hlid, *ba_bitmap;
4297
4298 wl1271_debug(DEBUG_MAC80211, "mac80211 ampdu action %d tid %d", action,
4299 tid);
4300
4301 /* sanity check - the fields in FW are only 8bits wide */
4302 if (WARN_ON(tid > 0xFF))
4303 return -ENOTSUPP;
4304
4305 mutex_lock(&wl->mutex);
4306
4307 if (unlikely(wl->state == WL1271_STATE_OFF)) {
4308 ret = -EAGAIN;
4309 goto out;
4310 }
4311
4312 if (wlvif->bss_type == BSS_TYPE_STA_BSS) {
4313 hlid = wlvif->sta.hlid;
4314 ba_bitmap = &wlvif->sta.ba_rx_bitmap;
4315 } else if (wlvif->bss_type == BSS_TYPE_AP_BSS) {
4316 struct wl1271_station *wl_sta;
4317
4318 wl_sta = (struct wl1271_station *)sta->drv_priv;
4319 hlid = wl_sta->hlid;
4320 ba_bitmap = &wl->links[hlid].ba_bitmap;
4321 } else {
4322 ret = -EINVAL;
4323 goto out;
4324 }
4325
4326 ret = wl1271_ps_elp_wakeup(wl);
4327 if (ret < 0)
4328 goto out;
4329
4330 wl1271_debug(DEBUG_MAC80211, "mac80211 ampdu: Rx tid %d action %d",
4331 tid, action);
4332
4333 switch (action) {
4334 case IEEE80211_AMPDU_RX_START:
4335 if (!wlvif->ba_support || !wlvif->ba_allowed) {
4336 ret = -ENOTSUPP;
4337 break;
4338 }
4339
4340 if (wl->ba_rx_session_count >= RX_BA_MAX_SESSIONS) {
4341 ret = -EBUSY;
4342 wl1271_error("exceeded max RX BA sessions");
4343 break;
4344 }
4345
4346 if (*ba_bitmap & BIT(tid)) {
4347 ret = -EINVAL;
4348 wl1271_error("cannot enable RX BA session on active "
4349 "tid: %d", tid);
4350 break;
4351 }
4352
4353 ret = wl12xx_acx_set_ba_receiver_session(wl, tid, *ssn, true,
4354 hlid);
4355 if (!ret) {
4356 *ba_bitmap |= BIT(tid);
4357 wl->ba_rx_session_count++;
4358 }
4359 break;
4360
4361 case IEEE80211_AMPDU_RX_STOP:
4362 if (!(*ba_bitmap & BIT(tid))) {
4363 ret = -EINVAL;
4364 wl1271_error("no active RX BA session on tid: %d",
4365 tid);
4366 break;
4367 }
4368
4369 ret = wl12xx_acx_set_ba_receiver_session(wl, tid, 0, false,
4370 hlid);
4371 if (!ret) {
4372 *ba_bitmap &= ~BIT(tid);
4373 wl->ba_rx_session_count--;
4374 }
4375 break;
4376
4377 /*
4378 * The BA initiator session management in FW independently.
4379 * Falling break here on purpose for all TX APDU commands.
4380 */
4381 case IEEE80211_AMPDU_TX_START:
4382 case IEEE80211_AMPDU_TX_STOP:
4383 case IEEE80211_AMPDU_TX_OPERATIONAL:
4384 ret = -EINVAL;
4385 break;
4386
4387 default:
4388 wl1271_error("Incorrect ampdu action id=%x\n", action);
4389 ret = -EINVAL;
4390 }
4391
4392 wl1271_ps_elp_sleep(wl);
4393
4394 out:
4395 mutex_unlock(&wl->mutex);
4396
4397 return ret;
4398 }
4399
4400 static int wl12xx_set_bitrate_mask(struct ieee80211_hw *hw,
4401 struct ieee80211_vif *vif,
4402 const struct cfg80211_bitrate_mask *mask)
4403 {
4404 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
4405 struct wl1271 *wl = hw->priv;
4406 int i, ret = 0;
4407
4408 wl1271_debug(DEBUG_MAC80211, "mac80211 set_bitrate_mask 0x%x 0x%x",
4409 mask->control[NL80211_BAND_2GHZ].legacy,
4410 mask->control[NL80211_BAND_5GHZ].legacy);
4411
4412 mutex_lock(&wl->mutex);
4413
4414 for (i = 0; i < IEEE80211_NUM_BANDS; i++)
4415 wlvif->bitrate_masks[i] =
4416 wl1271_tx_enabled_rates_get(wl,
4417 mask->control[i].legacy,
4418 i);
4419
4420 if (unlikely(wl->state == WL1271_STATE_OFF))
4421 goto out;
4422
4423 if (wlvif->bss_type == BSS_TYPE_STA_BSS &&
4424 !test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags)) {
4425
4426 ret = wl1271_ps_elp_wakeup(wl);
4427 if (ret < 0)
4428 goto out;
4429
4430 wl1271_set_band_rate(wl, wlvif);
4431 wlvif->basic_rate =
4432 wl1271_tx_min_rate_get(wl, wlvif->basic_rate_set);
4433 ret = wl1271_acx_sta_rate_policies(wl, wlvif);
4434
4435 wl1271_ps_elp_sleep(wl);
4436 }
4437 out:
4438 mutex_unlock(&wl->mutex);
4439
4440 return ret;
4441 }
4442
4443 static void wl12xx_op_channel_switch(struct ieee80211_hw *hw,
4444 struct ieee80211_channel_switch *ch_switch)
4445 {
4446 struct wl1271 *wl = hw->priv;
4447 struct wl12xx_vif *wlvif;
4448 int ret;
4449
4450 wl1271_debug(DEBUG_MAC80211, "mac80211 channel switch");
4451
4452 wl1271_tx_flush(wl);
4453
4454 mutex_lock(&wl->mutex);
4455
4456 if (unlikely(wl->state == WL1271_STATE_OFF)) {
4457 wl12xx_for_each_wlvif_sta(wl, wlvif) {
4458 struct ieee80211_vif *vif = wl12xx_wlvif_to_vif(wlvif);
4459 ieee80211_chswitch_done(vif, false);
4460 }
4461 goto out;
4462 }
4463
4464 ret = wl1271_ps_elp_wakeup(wl);
4465 if (ret < 0)
4466 goto out;
4467
4468 /* TODO: change mac80211 to pass vif as param */
4469 wl12xx_for_each_wlvif_sta(wl, wlvif) {
4470 ret = wl12xx_cmd_channel_switch(wl, wlvif, ch_switch);
4471
4472 if (!ret)
4473 set_bit(WLVIF_FLAG_CS_PROGRESS, &wlvif->flags);
4474 }
4475
4476 wl1271_ps_elp_sleep(wl);
4477
4478 out:
4479 mutex_unlock(&wl->mutex);
4480 }
4481
4482 static bool wl1271_tx_frames_pending(struct ieee80211_hw *hw)
4483 {
4484 struct wl1271 *wl = hw->priv;
4485 bool ret = false;
4486
4487 mutex_lock(&wl->mutex);
4488
4489 if (unlikely(wl->state == WL1271_STATE_OFF))
4490 goto out;
4491
4492 /* packets are considered pending if in the TX queue or the FW */
4493 ret = (wl1271_tx_total_queue_count(wl) > 0) || (wl->tx_frames_cnt > 0);
4494 out:
4495 mutex_unlock(&wl->mutex);
4496
4497 return ret;
4498 }
4499
4500 /* can't be const, mac80211 writes to this */
4501 static struct ieee80211_rate wl1271_rates[] = {
4502 { .bitrate = 10,
4503 .hw_value = CONF_HW_BIT_RATE_1MBPS,
4504 .hw_value_short = CONF_HW_BIT_RATE_1MBPS, },
4505 { .bitrate = 20,
4506 .hw_value = CONF_HW_BIT_RATE_2MBPS,
4507 .hw_value_short = CONF_HW_BIT_RATE_2MBPS,
4508 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
4509 { .bitrate = 55,
4510 .hw_value = CONF_HW_BIT_RATE_5_5MBPS,
4511 .hw_value_short = CONF_HW_BIT_RATE_5_5MBPS,
4512 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
4513 { .bitrate = 110,
4514 .hw_value = CONF_HW_BIT_RATE_11MBPS,
4515 .hw_value_short = CONF_HW_BIT_RATE_11MBPS,
4516 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
4517 { .bitrate = 60,
4518 .hw_value = CONF_HW_BIT_RATE_6MBPS,
4519 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
4520 { .bitrate = 90,
4521 .hw_value = CONF_HW_BIT_RATE_9MBPS,
4522 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
4523 { .bitrate = 120,
4524 .hw_value = CONF_HW_BIT_RATE_12MBPS,
4525 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
4526 { .bitrate = 180,
4527 .hw_value = CONF_HW_BIT_RATE_18MBPS,
4528 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
4529 { .bitrate = 240,
4530 .hw_value = CONF_HW_BIT_RATE_24MBPS,
4531 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
4532 { .bitrate = 360,
4533 .hw_value = CONF_HW_BIT_RATE_36MBPS,
4534 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
4535 { .bitrate = 480,
4536 .hw_value = CONF_HW_BIT_RATE_48MBPS,
4537 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
4538 { .bitrate = 540,
4539 .hw_value = CONF_HW_BIT_RATE_54MBPS,
4540 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
4541 };
4542
4543 /* can't be const, mac80211 writes to this */
4544 static struct ieee80211_channel wl1271_channels[] = {
4545 { .hw_value = 1, .center_freq = 2412, .max_power = 25 },
4546 { .hw_value = 2, .center_freq = 2417, .max_power = 25 },
4547 { .hw_value = 3, .center_freq = 2422, .max_power = 25 },
4548 { .hw_value = 4, .center_freq = 2427, .max_power = 25 },
4549 { .hw_value = 5, .center_freq = 2432, .max_power = 25 },
4550 { .hw_value = 6, .center_freq = 2437, .max_power = 25 },
4551 { .hw_value = 7, .center_freq = 2442, .max_power = 25 },
4552 { .hw_value = 8, .center_freq = 2447, .max_power = 25 },
4553 { .hw_value = 9, .center_freq = 2452, .max_power = 25 },
4554 { .hw_value = 10, .center_freq = 2457, .max_power = 25 },
4555 { .hw_value = 11, .center_freq = 2462, .max_power = 25 },
4556 { .hw_value = 12, .center_freq = 2467, .max_power = 25 },
4557 { .hw_value = 13, .center_freq = 2472, .max_power = 25 },
4558 { .hw_value = 14, .center_freq = 2484, .max_power = 25 },
4559 };
4560
4561 /* can't be const, mac80211 writes to this */
4562 static struct ieee80211_supported_band wl1271_band_2ghz = {
4563 .channels = wl1271_channels,
4564 .n_channels = ARRAY_SIZE(wl1271_channels),
4565 .bitrates = wl1271_rates,
4566 .n_bitrates = ARRAY_SIZE(wl1271_rates),
4567 };
4568
4569 /* 5 GHz data rates for WL1273 */
4570 static struct ieee80211_rate wl1271_rates_5ghz[] = {
4571 { .bitrate = 60,
4572 .hw_value = CONF_HW_BIT_RATE_6MBPS,
4573 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
4574 { .bitrate = 90,
4575 .hw_value = CONF_HW_BIT_RATE_9MBPS,
4576 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
4577 { .bitrate = 120,
4578 .hw_value = CONF_HW_BIT_RATE_12MBPS,
4579 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
4580 { .bitrate = 180,
4581 .hw_value = CONF_HW_BIT_RATE_18MBPS,
4582 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
4583 { .bitrate = 240,
4584 .hw_value = CONF_HW_BIT_RATE_24MBPS,
4585 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
4586 { .bitrate = 360,
4587 .hw_value = CONF_HW_BIT_RATE_36MBPS,
4588 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
4589 { .bitrate = 480,
4590 .hw_value = CONF_HW_BIT_RATE_48MBPS,
4591 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
4592 { .bitrate = 540,
4593 .hw_value = CONF_HW_BIT_RATE_54MBPS,
4594 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
4595 };
4596
4597 /* 5 GHz band channels for WL1273 */
4598 static struct ieee80211_channel wl1271_channels_5ghz[] = {
4599 { .hw_value = 7, .center_freq = 5035, .max_power = 25 },
4600 { .hw_value = 8, .center_freq = 5040, .max_power = 25 },
4601 { .hw_value = 9, .center_freq = 5045, .max_power = 25 },
4602 { .hw_value = 11, .center_freq = 5055, .max_power = 25 },
4603 { .hw_value = 12, .center_freq = 5060, .max_power = 25 },
4604 { .hw_value = 16, .center_freq = 5080, .max_power = 25 },
4605 { .hw_value = 34, .center_freq = 5170, .max_power = 25 },
4606 { .hw_value = 36, .center_freq = 5180, .max_power = 25 },
4607 { .hw_value = 38, .center_freq = 5190, .max_power = 25 },
4608 { .hw_value = 40, .center_freq = 5200, .max_power = 25 },
4609 { .hw_value = 42, .center_freq = 5210, .max_power = 25 },
4610 { .hw_value = 44, .center_freq = 5220, .max_power = 25 },
4611 { .hw_value = 46, .center_freq = 5230, .max_power = 25 },
4612 { .hw_value = 48, .center_freq = 5240, .max_power = 25 },
4613 { .hw_value = 52, .center_freq = 5260, .max_power = 25 },
4614 { .hw_value = 56, .center_freq = 5280, .max_power = 25 },
4615 { .hw_value = 60, .center_freq = 5300, .max_power = 25 },
4616 { .hw_value = 64, .center_freq = 5320, .max_power = 25 },
4617 { .hw_value = 100, .center_freq = 5500, .max_power = 25 },
4618 { .hw_value = 104, .center_freq = 5520, .max_power = 25 },
4619 { .hw_value = 108, .center_freq = 5540, .max_power = 25 },
4620 { .hw_value = 112, .center_freq = 5560, .max_power = 25 },
4621 { .hw_value = 116, .center_freq = 5580, .max_power = 25 },
4622 { .hw_value = 120, .center_freq = 5600, .max_power = 25 },
4623 { .hw_value = 124, .center_freq = 5620, .max_power = 25 },
4624 { .hw_value = 128, .center_freq = 5640, .max_power = 25 },
4625 { .hw_value = 132, .center_freq = 5660, .max_power = 25 },
4626 { .hw_value = 136, .center_freq = 5680, .max_power = 25 },
4627 { .hw_value = 140, .center_freq = 5700, .max_power = 25 },
4628 { .hw_value = 149, .center_freq = 5745, .max_power = 25 },
4629 { .hw_value = 153, .center_freq = 5765, .max_power = 25 },
4630 { .hw_value = 157, .center_freq = 5785, .max_power = 25 },
4631 { .hw_value = 161, .center_freq = 5805, .max_power = 25 },
4632 { .hw_value = 165, .center_freq = 5825, .max_power = 25 },
4633 };
4634
4635 static struct ieee80211_supported_band wl1271_band_5ghz = {
4636 .channels = wl1271_channels_5ghz,
4637 .n_channels = ARRAY_SIZE(wl1271_channels_5ghz),
4638 .bitrates = wl1271_rates_5ghz,
4639 .n_bitrates = ARRAY_SIZE(wl1271_rates_5ghz),
4640 };
4641
4642 static const struct ieee80211_ops wl1271_ops = {
4643 .start = wl1271_op_start,
4644 .stop = wl1271_op_stop,
4645 .add_interface = wl1271_op_add_interface,
4646 .remove_interface = wl1271_op_remove_interface,
4647 .change_interface = wl12xx_op_change_interface,
4648 #ifdef CONFIG_PM
4649 .suspend = wl1271_op_suspend,
4650 .resume = wl1271_op_resume,
4651 #endif
4652 .config = wl1271_op_config,
4653 .prepare_multicast = wl1271_op_prepare_multicast,
4654 .configure_filter = wl1271_op_configure_filter,
4655 .tx = wl1271_op_tx,
4656 .set_key = wlcore_op_set_key,
4657 .hw_scan = wl1271_op_hw_scan,
4658 .cancel_hw_scan = wl1271_op_cancel_hw_scan,
4659 .sched_scan_start = wl1271_op_sched_scan_start,
4660 .sched_scan_stop = wl1271_op_sched_scan_stop,
4661 .bss_info_changed = wl1271_op_bss_info_changed,
4662 .set_frag_threshold = wl1271_op_set_frag_threshold,
4663 .set_rts_threshold = wl1271_op_set_rts_threshold,
4664 .conf_tx = wl1271_op_conf_tx,
4665 .get_tsf = wl1271_op_get_tsf,
4666 .get_survey = wl1271_op_get_survey,
4667 .sta_state = wl12xx_op_sta_state,
4668 .ampdu_action = wl1271_op_ampdu_action,
4669 .tx_frames_pending = wl1271_tx_frames_pending,
4670 .set_bitrate_mask = wl12xx_set_bitrate_mask,
4671 .channel_switch = wl12xx_op_channel_switch,
4672 CFG80211_TESTMODE_CMD(wl1271_tm_cmd)
4673 };
4674
4675
4676 u8 wlcore_rate_to_idx(struct wl1271 *wl, u8 rate, enum ieee80211_band band)
4677 {
4678 u8 idx;
4679
4680 BUG_ON(band >= 2);
4681
4682 if (unlikely(rate >= wl->hw_tx_rate_tbl_size)) {
4683 wl1271_error("Illegal RX rate from HW: %d", rate);
4684 return 0;
4685 }
4686
4687 idx = wl->band_rate_to_idx[band][rate];
4688 if (unlikely(idx == CONF_HW_RXTX_RATE_UNSUPPORTED)) {
4689 wl1271_error("Unsupported RX rate from HW: %d", rate);
4690 return 0;
4691 }
4692
4693 return idx;
4694 }
4695
4696 static ssize_t wl1271_sysfs_show_bt_coex_state(struct device *dev,
4697 struct device_attribute *attr,
4698 char *buf)
4699 {
4700 struct wl1271 *wl = dev_get_drvdata(dev);
4701 ssize_t len;
4702
4703 len = PAGE_SIZE;
4704
4705 mutex_lock(&wl->mutex);
4706 len = snprintf(buf, len, "%d\n\n0 - off\n1 - on\n",
4707 wl->sg_enabled);
4708 mutex_unlock(&wl->mutex);
4709
4710 return len;
4711
4712 }
4713
4714 static ssize_t wl1271_sysfs_store_bt_coex_state(struct device *dev,
4715 struct device_attribute *attr,
4716 const char *buf, size_t count)
4717 {
4718 struct wl1271 *wl = dev_get_drvdata(dev);
4719 unsigned long res;
4720 int ret;
4721
4722 ret = kstrtoul(buf, 10, &res);
4723 if (ret < 0) {
4724 wl1271_warning("incorrect value written to bt_coex_mode");
4725 return count;
4726 }
4727
4728 mutex_lock(&wl->mutex);
4729
4730 res = !!res;
4731
4732 if (res == wl->sg_enabled)
4733 goto out;
4734
4735 wl->sg_enabled = res;
4736
4737 if (wl->state == WL1271_STATE_OFF)
4738 goto out;
4739
4740 ret = wl1271_ps_elp_wakeup(wl);
4741 if (ret < 0)
4742 goto out;
4743
4744 wl1271_acx_sg_enable(wl, wl->sg_enabled);
4745 wl1271_ps_elp_sleep(wl);
4746
4747 out:
4748 mutex_unlock(&wl->mutex);
4749 return count;
4750 }
4751
4752 static DEVICE_ATTR(bt_coex_state, S_IRUGO | S_IWUSR,
4753 wl1271_sysfs_show_bt_coex_state,
4754 wl1271_sysfs_store_bt_coex_state);
4755
4756 static ssize_t wl1271_sysfs_show_hw_pg_ver(struct device *dev,
4757 struct device_attribute *attr,
4758 char *buf)
4759 {
4760 struct wl1271 *wl = dev_get_drvdata(dev);
4761 ssize_t len;
4762
4763 len = PAGE_SIZE;
4764
4765 mutex_lock(&wl->mutex);
4766 if (wl->hw_pg_ver >= 0)
4767 len = snprintf(buf, len, "%d\n", wl->hw_pg_ver);
4768 else
4769 len = snprintf(buf, len, "n/a\n");
4770 mutex_unlock(&wl->mutex);
4771
4772 return len;
4773 }
4774
4775 static DEVICE_ATTR(hw_pg_ver, S_IRUGO,
4776 wl1271_sysfs_show_hw_pg_ver, NULL);
4777
4778 static ssize_t wl1271_sysfs_read_fwlog(struct file *filp, struct kobject *kobj,
4779 struct bin_attribute *bin_attr,
4780 char *buffer, loff_t pos, size_t count)
4781 {
4782 struct device *dev = container_of(kobj, struct device, kobj);
4783 struct wl1271 *wl = dev_get_drvdata(dev);
4784 ssize_t len;
4785 int ret;
4786
4787 ret = mutex_lock_interruptible(&wl->mutex);
4788 if (ret < 0)
4789 return -ERESTARTSYS;
4790
4791 /* Let only one thread read the log at a time, blocking others */
4792 while (wl->fwlog_size == 0) {
4793 DEFINE_WAIT(wait);
4794
4795 prepare_to_wait_exclusive(&wl->fwlog_waitq,
4796 &wait,
4797 TASK_INTERRUPTIBLE);
4798
4799 if (wl->fwlog_size != 0) {
4800 finish_wait(&wl->fwlog_waitq, &wait);
4801 break;
4802 }
4803
4804 mutex_unlock(&wl->mutex);
4805
4806 schedule();
4807 finish_wait(&wl->fwlog_waitq, &wait);
4808
4809 if (signal_pending(current))
4810 return -ERESTARTSYS;
4811
4812 ret = mutex_lock_interruptible(&wl->mutex);
4813 if (ret < 0)
4814 return -ERESTARTSYS;
4815 }
4816
4817 /* Check if the fwlog is still valid */
4818 if (wl->fwlog_size < 0) {
4819 mutex_unlock(&wl->mutex);
4820 return 0;
4821 }
4822
4823 /* Seeking is not supported - old logs are not kept. Disregard pos. */
4824 len = min(count, (size_t)wl->fwlog_size);
4825 wl->fwlog_size -= len;
4826 memcpy(buffer, wl->fwlog, len);
4827
4828 /* Make room for new messages */
4829 memmove(wl->fwlog, wl->fwlog + len, wl->fwlog_size);
4830
4831 mutex_unlock(&wl->mutex);
4832
4833 return len;
4834 }
4835
4836 static struct bin_attribute fwlog_attr = {
4837 .attr = {.name = "fwlog", .mode = S_IRUSR},
4838 .read = wl1271_sysfs_read_fwlog,
4839 };
4840
4841 static void wl1271_connection_loss_work(struct work_struct *work)
4842 {
4843 struct delayed_work *dwork;
4844 struct wl1271 *wl;
4845 struct ieee80211_vif *vif;
4846 struct wl12xx_vif *wlvif;
4847
4848 dwork = container_of(work, struct delayed_work, work);
4849 wl = container_of(dwork, struct wl1271, connection_loss_work);
4850
4851 wl1271_info("Connection loss work.");
4852
4853 mutex_lock(&wl->mutex);
4854
4855 if (unlikely(wl->state == WL1271_STATE_OFF))
4856 goto out;
4857
4858 /* Call mac80211 connection loss */
4859 wl12xx_for_each_wlvif_sta(wl, wlvif) {
4860 if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags))
4861 goto out;
4862 vif = wl12xx_wlvif_to_vif(wlvif);
4863 ieee80211_connection_loss(vif);
4864 }
4865 out:
4866 mutex_unlock(&wl->mutex);
4867 }
4868
4869 static void wl12xx_derive_mac_addresses(struct wl1271 *wl,
4870 u32 oui, u32 nic, int n)
4871 {
4872 int i;
4873
4874 wl1271_debug(DEBUG_PROBE, "base address: oui %06x nic %06x, n %d",
4875 oui, nic, n);
4876
4877 if (nic + n - 1 > 0xffffff)
4878 wl1271_warning("NIC part of the MAC address wraps around!");
4879
4880 for (i = 0; i < n; i++) {
4881 wl->addresses[i].addr[0] = (u8)(oui >> 16);
4882 wl->addresses[i].addr[1] = (u8)(oui >> 8);
4883 wl->addresses[i].addr[2] = (u8) oui;
4884 wl->addresses[i].addr[3] = (u8)(nic >> 16);
4885 wl->addresses[i].addr[4] = (u8)(nic >> 8);
4886 wl->addresses[i].addr[5] = (u8) nic;
4887 nic++;
4888 }
4889
4890 wl->hw->wiphy->n_addresses = n;
4891 wl->hw->wiphy->addresses = wl->addresses;
4892 }
4893
4894 static int wl12xx_get_hw_info(struct wl1271 *wl)
4895 {
4896 int ret;
4897
4898 ret = wl12xx_set_power_on(wl);
4899 if (ret < 0)
4900 goto out;
4901
4902 wl->chip.id = wlcore_read_reg(wl, REG_CHIP_ID_B);
4903
4904 wl->fuse_oui_addr = 0;
4905 wl->fuse_nic_addr = 0;
4906
4907 wl->hw_pg_ver = wl->ops->get_pg_ver(wl);
4908
4909 if (wl->ops->get_mac)
4910 wl->ops->get_mac(wl);
4911
4912 wl1271_power_off(wl);
4913 out:
4914 return ret;
4915 }
4916
4917 static int wl1271_register_hw(struct wl1271 *wl)
4918 {
4919 int ret;
4920 u32 oui_addr = 0, nic_addr = 0;
4921
4922 if (wl->mac80211_registered)
4923 return 0;
4924
4925 ret = wl1271_fetch_nvs(wl);
4926 if (ret == 0) {
4927 /* NOTE: The wl->nvs->nvs element must be first, in
4928 * order to simplify the casting, we assume it is at
4929 * the beginning of the wl->nvs structure.
4930 */
4931 u8 *nvs_ptr = (u8 *)wl->nvs;
4932
4933 oui_addr =
4934 (nvs_ptr[11] << 16) + (nvs_ptr[10] << 8) + nvs_ptr[6];
4935 nic_addr =
4936 (nvs_ptr[5] << 16) + (nvs_ptr[4] << 8) + nvs_ptr[3];
4937 }
4938
4939 /* if the MAC address is zeroed in the NVS derive from fuse */
4940 if (oui_addr == 0 && nic_addr == 0) {
4941 oui_addr = wl->fuse_oui_addr;
4942 /* fuse has the BD_ADDR, the WLAN addresses are the next two */
4943 nic_addr = wl->fuse_nic_addr + 1;
4944 }
4945
4946 wl12xx_derive_mac_addresses(wl, oui_addr, nic_addr, 2);
4947
4948 ret = ieee80211_register_hw(wl->hw);
4949 if (ret < 0) {
4950 wl1271_error("unable to register mac80211 hw: %d", ret);
4951 goto out;
4952 }
4953
4954 wl->mac80211_registered = true;
4955
4956 wl1271_debugfs_init(wl);
4957
4958 wl1271_notice("loaded");
4959
4960 out:
4961 return ret;
4962 }
4963
4964 static void wl1271_unregister_hw(struct wl1271 *wl)
4965 {
4966 if (wl->plt)
4967 wl1271_plt_stop(wl);
4968
4969 ieee80211_unregister_hw(wl->hw);
4970 wl->mac80211_registered = false;
4971
4972 }
4973
4974 static int wl1271_init_ieee80211(struct wl1271 *wl)
4975 {
4976 static const u32 cipher_suites[] = {
4977 WLAN_CIPHER_SUITE_WEP40,
4978 WLAN_CIPHER_SUITE_WEP104,
4979 WLAN_CIPHER_SUITE_TKIP,
4980 WLAN_CIPHER_SUITE_CCMP,
4981 WL1271_CIPHER_SUITE_GEM,
4982 };
4983
4984 /* The tx descriptor buffer */
4985 wl->hw->extra_tx_headroom = sizeof(struct wl1271_tx_hw_descr);
4986
4987 if (wl->quirks & WLCORE_QUIRK_TKIP_HEADER_SPACE)
4988 wl->hw->extra_tx_headroom += WL1271_EXTRA_SPACE_TKIP;
4989
4990 /* unit us */
4991 /* FIXME: find a proper value */
4992 wl->hw->channel_change_time = 10000;
4993 wl->hw->max_listen_interval = wl->conf.conn.max_listen_interval;
4994
4995 wl->hw->flags = IEEE80211_HW_SIGNAL_DBM |
4996 IEEE80211_HW_SUPPORTS_PS |
4997 IEEE80211_HW_SUPPORTS_DYNAMIC_PS |
4998 IEEE80211_HW_SUPPORTS_UAPSD |
4999 IEEE80211_HW_HAS_RATE_CONTROL |
5000 IEEE80211_HW_CONNECTION_MONITOR |
5001 IEEE80211_HW_REPORTS_TX_ACK_STATUS |
5002 IEEE80211_HW_SPECTRUM_MGMT |
5003 IEEE80211_HW_AP_LINK_PS |
5004 IEEE80211_HW_AMPDU_AGGREGATION |
5005 IEEE80211_HW_TX_AMPDU_SETUP_IN_HW |
5006 IEEE80211_HW_SCAN_WHILE_IDLE;
5007
5008 wl->hw->wiphy->cipher_suites = cipher_suites;
5009 wl->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
5010
5011 wl->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
5012 BIT(NL80211_IFTYPE_ADHOC) | BIT(NL80211_IFTYPE_AP) |
5013 BIT(NL80211_IFTYPE_P2P_CLIENT) | BIT(NL80211_IFTYPE_P2P_GO);
5014 wl->hw->wiphy->max_scan_ssids = 1;
5015 wl->hw->wiphy->max_sched_scan_ssids = 16;
5016 wl->hw->wiphy->max_match_sets = 16;
5017 /*
5018 * Maximum length of elements in scanning probe request templates
5019 * should be the maximum length possible for a template, without
5020 * the IEEE80211 header of the template
5021 */
5022 wl->hw->wiphy->max_scan_ie_len = WL1271_CMD_TEMPL_MAX_SIZE -
5023 sizeof(struct ieee80211_header);
5024
5025 wl->hw->wiphy->max_sched_scan_ie_len = WL1271_CMD_TEMPL_MAX_SIZE -
5026 sizeof(struct ieee80211_header);
5027
5028 wl->hw->wiphy->flags |= WIPHY_FLAG_AP_UAPSD |
5029 WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
5030
5031 /* make sure all our channels fit in the scanned_ch bitmask */
5032 BUILD_BUG_ON(ARRAY_SIZE(wl1271_channels) +
5033 ARRAY_SIZE(wl1271_channels_5ghz) >
5034 WL1271_MAX_CHANNELS);
5035 /*
5036 * We keep local copies of the band structs because we need to
5037 * modify them on a per-device basis.
5038 */
5039 memcpy(&wl->bands[IEEE80211_BAND_2GHZ], &wl1271_band_2ghz,
5040 sizeof(wl1271_band_2ghz));
5041 memcpy(&wl->bands[IEEE80211_BAND_2GHZ].ht_cap,
5042 &wl->ht_cap[IEEE80211_BAND_2GHZ],
5043 sizeof(*wl->ht_cap));
5044 memcpy(&wl->bands[IEEE80211_BAND_5GHZ], &wl1271_band_5ghz,
5045 sizeof(wl1271_band_5ghz));
5046 memcpy(&wl->bands[IEEE80211_BAND_5GHZ].ht_cap,
5047 &wl->ht_cap[IEEE80211_BAND_5GHZ],
5048 sizeof(*wl->ht_cap));
5049
5050 wl->hw->wiphy->bands[IEEE80211_BAND_2GHZ] =
5051 &wl->bands[IEEE80211_BAND_2GHZ];
5052 wl->hw->wiphy->bands[IEEE80211_BAND_5GHZ] =
5053 &wl->bands[IEEE80211_BAND_5GHZ];
5054
5055 wl->hw->queues = 4;
5056 wl->hw->max_rates = 1;
5057
5058 wl->hw->wiphy->reg_notifier = wl1271_reg_notify;
5059
5060 /* the FW answers probe-requests in AP-mode */
5061 wl->hw->wiphy->flags |= WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD;
5062 wl->hw->wiphy->probe_resp_offload =
5063 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS |
5064 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2 |
5065 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P;
5066
5067 SET_IEEE80211_DEV(wl->hw, wl->dev);
5068
5069 wl->hw->sta_data_size = sizeof(struct wl1271_station);
5070 wl->hw->vif_data_size = sizeof(struct wl12xx_vif);
5071
5072 wl->hw->max_rx_aggregation_subframes = wl->conf.ht.rx_ba_win_size;
5073
5074 return 0;
5075 }
5076
5077 #define WL1271_DEFAULT_CHANNEL 0
5078
5079 struct ieee80211_hw *wlcore_alloc_hw(size_t priv_size)
5080 {
5081 struct ieee80211_hw *hw;
5082 struct wl1271 *wl;
5083 int i, j, ret;
5084 unsigned int order;
5085
5086 BUILD_BUG_ON(AP_MAX_STATIONS > WL12XX_MAX_LINKS);
5087
5088 hw = ieee80211_alloc_hw(sizeof(*wl), &wl1271_ops);
5089 if (!hw) {
5090 wl1271_error("could not alloc ieee80211_hw");
5091 ret = -ENOMEM;
5092 goto err_hw_alloc;
5093 }
5094
5095 wl = hw->priv;
5096 memset(wl, 0, sizeof(*wl));
5097
5098 wl->priv = kzalloc(priv_size, GFP_KERNEL);
5099 if (!wl->priv) {
5100 wl1271_error("could not alloc wl priv");
5101 ret = -ENOMEM;
5102 goto err_priv_alloc;
5103 }
5104
5105 INIT_LIST_HEAD(&wl->wlvif_list);
5106
5107 wl->hw = hw;
5108
5109 for (i = 0; i < NUM_TX_QUEUES; i++)
5110 for (j = 0; j < WL12XX_MAX_LINKS; j++)
5111 skb_queue_head_init(&wl->links[j].tx_queue[i]);
5112
5113 skb_queue_head_init(&wl->deferred_rx_queue);
5114 skb_queue_head_init(&wl->deferred_tx_queue);
5115
5116 INIT_DELAYED_WORK(&wl->elp_work, wl1271_elp_work);
5117 INIT_WORK(&wl->netstack_work, wl1271_netstack_work);
5118 INIT_WORK(&wl->tx_work, wl1271_tx_work);
5119 INIT_WORK(&wl->recovery_work, wl1271_recovery_work);
5120 INIT_DELAYED_WORK(&wl->scan_complete_work, wl1271_scan_complete_work);
5121 INIT_DELAYED_WORK(&wl->tx_watchdog_work, wl12xx_tx_watchdog_work);
5122 INIT_DELAYED_WORK(&wl->connection_loss_work,
5123 wl1271_connection_loss_work);
5124
5125 wl->freezable_wq = create_freezable_workqueue("wl12xx_wq");
5126 if (!wl->freezable_wq) {
5127 ret = -ENOMEM;
5128 goto err_hw;
5129 }
5130
5131 wl->channel = WL1271_DEFAULT_CHANNEL;
5132 wl->rx_counter = 0;
5133 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
5134 wl->band = IEEE80211_BAND_2GHZ;
5135 wl->channel_type = NL80211_CHAN_NO_HT;
5136 wl->flags = 0;
5137 wl->sg_enabled = true;
5138 wl->hw_pg_ver = -1;
5139 wl->ap_ps_map = 0;
5140 wl->ap_fw_ps_map = 0;
5141 wl->quirks = 0;
5142 wl->platform_quirks = 0;
5143 wl->sched_scanning = false;
5144 wl->system_hlid = WL12XX_SYSTEM_HLID;
5145 wl->active_sta_count = 0;
5146 wl->fwlog_size = 0;
5147 init_waitqueue_head(&wl->fwlog_waitq);
5148
5149 /* The system link is always allocated */
5150 __set_bit(WL12XX_SYSTEM_HLID, wl->links_map);
5151
5152 memset(wl->tx_frames_map, 0, sizeof(wl->tx_frames_map));
5153 for (i = 0; i < wl->num_tx_desc; i++)
5154 wl->tx_frames[i] = NULL;
5155
5156 spin_lock_init(&wl->wl_lock);
5157
5158 wl->state = WL1271_STATE_OFF;
5159 wl->fw_type = WL12XX_FW_TYPE_NONE;
5160 mutex_init(&wl->mutex);
5161 mutex_init(&wl->flush_mutex);
5162
5163 order = get_order(WL1271_AGGR_BUFFER_SIZE);
5164 wl->aggr_buf = (u8 *)__get_free_pages(GFP_KERNEL, order);
5165 if (!wl->aggr_buf) {
5166 ret = -ENOMEM;
5167 goto err_wq;
5168 }
5169
5170 wl->dummy_packet = wl12xx_alloc_dummy_packet(wl);
5171 if (!wl->dummy_packet) {
5172 ret = -ENOMEM;
5173 goto err_aggr;
5174 }
5175
5176 /* Allocate one page for the FW log */
5177 wl->fwlog = (u8 *)get_zeroed_page(GFP_KERNEL);
5178 if (!wl->fwlog) {
5179 ret = -ENOMEM;
5180 goto err_dummy_packet;
5181 }
5182
5183 wl->mbox = kmalloc(sizeof(*wl->mbox), GFP_KERNEL | GFP_DMA);
5184 if (!wl->mbox) {
5185 ret = -ENOMEM;
5186 goto err_fwlog;
5187 }
5188
5189 return hw;
5190
5191 err_fwlog:
5192 free_page((unsigned long)wl->fwlog);
5193
5194 err_dummy_packet:
5195 dev_kfree_skb(wl->dummy_packet);
5196
5197 err_aggr:
5198 free_pages((unsigned long)wl->aggr_buf, order);
5199
5200 err_wq:
5201 destroy_workqueue(wl->freezable_wq);
5202
5203 err_hw:
5204 wl1271_debugfs_exit(wl);
5205 kfree(wl->priv);
5206
5207 err_priv_alloc:
5208 ieee80211_free_hw(hw);
5209
5210 err_hw_alloc:
5211
5212 return ERR_PTR(ret);
5213 }
5214 EXPORT_SYMBOL_GPL(wlcore_alloc_hw);
5215
5216 int wlcore_free_hw(struct wl1271 *wl)
5217 {
5218 /* Unblock any fwlog readers */
5219 mutex_lock(&wl->mutex);
5220 wl->fwlog_size = -1;
5221 wake_up_interruptible_all(&wl->fwlog_waitq);
5222 mutex_unlock(&wl->mutex);
5223
5224 device_remove_bin_file(wl->dev, &fwlog_attr);
5225
5226 device_remove_file(wl->dev, &dev_attr_hw_pg_ver);
5227
5228 device_remove_file(wl->dev, &dev_attr_bt_coex_state);
5229 free_page((unsigned long)wl->fwlog);
5230 dev_kfree_skb(wl->dummy_packet);
5231 free_pages((unsigned long)wl->aggr_buf,
5232 get_order(WL1271_AGGR_BUFFER_SIZE));
5233
5234 wl1271_debugfs_exit(wl);
5235
5236 vfree(wl->fw);
5237 wl->fw = NULL;
5238 wl->fw_type = WL12XX_FW_TYPE_NONE;
5239 kfree(wl->nvs);
5240 wl->nvs = NULL;
5241
5242 kfree(wl->fw_status_1);
5243 kfree(wl->tx_res_if);
5244 destroy_workqueue(wl->freezable_wq);
5245
5246 kfree(wl->priv);
5247 ieee80211_free_hw(wl->hw);
5248
5249 return 0;
5250 }
5251 EXPORT_SYMBOL_GPL(wlcore_free_hw);
5252
5253 static irqreturn_t wl12xx_hardirq(int irq, void *cookie)
5254 {
5255 struct wl1271 *wl = cookie;
5256 unsigned long flags;
5257
5258 wl1271_debug(DEBUG_IRQ, "IRQ");
5259
5260 /* complete the ELP completion */
5261 spin_lock_irqsave(&wl->wl_lock, flags);
5262 set_bit(WL1271_FLAG_IRQ_RUNNING, &wl->flags);
5263 if (wl->elp_compl) {
5264 complete(wl->elp_compl);
5265 wl->elp_compl = NULL;
5266 }
5267
5268 if (test_bit(WL1271_FLAG_SUSPENDED, &wl->flags)) {
5269 /* don't enqueue a work right now. mark it as pending */
5270 set_bit(WL1271_FLAG_PENDING_WORK, &wl->flags);
5271 wl1271_debug(DEBUG_IRQ, "should not enqueue work");
5272 disable_irq_nosync(wl->irq);
5273 pm_wakeup_event(wl->dev, 0);
5274 spin_unlock_irqrestore(&wl->wl_lock, flags);
5275 return IRQ_HANDLED;
5276 }
5277 spin_unlock_irqrestore(&wl->wl_lock, flags);
5278
5279 return IRQ_WAKE_THREAD;
5280 }
5281
5282 int __devinit wlcore_probe(struct wl1271 *wl, struct platform_device *pdev)
5283 {
5284 struct wl12xx_platform_data *pdata = pdev->dev.platform_data;
5285 unsigned long irqflags;
5286 int ret;
5287
5288 if (!wl->ops || !wl->ptable) {
5289 ret = -EINVAL;
5290 goto out_free_hw;
5291 }
5292
5293 BUG_ON(wl->num_tx_desc > WLCORE_MAX_TX_DESCRIPTORS);
5294
5295 /* adjust some runtime configuration parameters */
5296 wlcore_adjust_conf(wl);
5297
5298 wl->irq = platform_get_irq(pdev, 0);
5299 wl->platform_quirks = pdata->platform_quirks;
5300 wl->set_power = pdata->set_power;
5301 wl->dev = &pdev->dev;
5302 wl->if_ops = pdata->ops;
5303
5304 platform_set_drvdata(pdev, wl);
5305
5306 if (wl->platform_quirks & WL12XX_PLATFORM_QUIRK_EDGE_IRQ)
5307 irqflags = IRQF_TRIGGER_RISING;
5308 else
5309 irqflags = IRQF_TRIGGER_HIGH | IRQF_ONESHOT;
5310
5311 ret = request_threaded_irq(wl->irq, wl12xx_hardirq, wl1271_irq,
5312 irqflags,
5313 pdev->name, wl);
5314 if (ret < 0) {
5315 wl1271_error("request_irq() failed: %d", ret);
5316 goto out_free_hw;
5317 }
5318
5319 ret = enable_irq_wake(wl->irq);
5320 if (!ret) {
5321 wl->irq_wake_enabled = true;
5322 device_init_wakeup(wl->dev, 1);
5323 if (pdata->pwr_in_suspend) {
5324 wl->hw->wiphy->wowlan.flags = WIPHY_WOWLAN_ANY;
5325 wl->hw->wiphy->wowlan.n_patterns =
5326 WL1271_MAX_RX_FILTERS;
5327 wl->hw->wiphy->wowlan.pattern_min_len = 1;
5328 wl->hw->wiphy->wowlan.pattern_max_len =
5329 WL1271_RX_FILTER_MAX_PATTERN_SIZE;
5330 }
5331 }
5332 disable_irq(wl->irq);
5333
5334 ret = wl12xx_get_hw_info(wl);
5335 if (ret < 0) {
5336 wl1271_error("couldn't get hw info");
5337 goto out;
5338 }
5339
5340 ret = wl->ops->identify_chip(wl);
5341 if (ret < 0)
5342 goto out;
5343
5344 ret = wl1271_init_ieee80211(wl);
5345 if (ret)
5346 goto out_irq;
5347
5348 ret = wl1271_register_hw(wl);
5349 if (ret)
5350 goto out_irq;
5351
5352 /* Create sysfs file to control bt coex state */
5353 ret = device_create_file(wl->dev, &dev_attr_bt_coex_state);
5354 if (ret < 0) {
5355 wl1271_error("failed to create sysfs file bt_coex_state");
5356 goto out_irq;
5357 }
5358
5359 /* Create sysfs file to get HW PG version */
5360 ret = device_create_file(wl->dev, &dev_attr_hw_pg_ver);
5361 if (ret < 0) {
5362 wl1271_error("failed to create sysfs file hw_pg_ver");
5363 goto out_bt_coex_state;
5364 }
5365
5366 /* Create sysfs file for the FW log */
5367 ret = device_create_bin_file(wl->dev, &fwlog_attr);
5368 if (ret < 0) {
5369 wl1271_error("failed to create sysfs file fwlog");
5370 goto out_hw_pg_ver;
5371 }
5372
5373 goto out;
5374
5375 out_hw_pg_ver:
5376 device_remove_file(wl->dev, &dev_attr_hw_pg_ver);
5377
5378 out_bt_coex_state:
5379 device_remove_file(wl->dev, &dev_attr_bt_coex_state);
5380
5381 out_irq:
5382 free_irq(wl->irq, wl);
5383
5384 out_free_hw:
5385 wlcore_free_hw(wl);
5386
5387 out:
5388 return ret;
5389 }
5390 EXPORT_SYMBOL_GPL(wlcore_probe);
5391
5392 int __devexit wlcore_remove(struct platform_device *pdev)
5393 {
5394 struct wl1271 *wl = platform_get_drvdata(pdev);
5395
5396 if (wl->irq_wake_enabled) {
5397 device_init_wakeup(wl->dev, 0);
5398 disable_irq_wake(wl->irq);
5399 }
5400 wl1271_unregister_hw(wl);
5401 free_irq(wl->irq, wl);
5402 wlcore_free_hw(wl);
5403
5404 return 0;
5405 }
5406 EXPORT_SYMBOL_GPL(wlcore_remove);
5407
5408 u32 wl12xx_debug_level = DEBUG_NONE;
5409 EXPORT_SYMBOL_GPL(wl12xx_debug_level);
5410 module_param_named(debug_level, wl12xx_debug_level, uint, S_IRUSR | S_IWUSR);
5411 MODULE_PARM_DESC(debug_level, "wl12xx debugging level");
5412
5413 module_param_named(fwlog, fwlog_param, charp, 0);
5414 MODULE_PARM_DESC(fwlog,
5415 "FW logger options: continuous, ondemand, dbgpins or disable");
5416
5417 module_param(bug_on_recovery, bool, S_IRUSR | S_IWUSR);
5418 MODULE_PARM_DESC(bug_on_recovery, "BUG() on fw recovery");
5419
5420 module_param(no_recovery, bool, S_IRUSR | S_IWUSR);
5421 MODULE_PARM_DESC(no_recovery, "Prevent HW recovery. FW will remain stuck.");
5422
5423 MODULE_LICENSE("GPL");
5424 MODULE_AUTHOR("Luciano Coelho <coelho@ti.com>");
5425 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");
This page took 0.240292 seconds and 6 git commands to generate.