3 * This file is part of wl1271
5 * Copyright (C) 2008-2010 Nokia Corporation
7 * Contact: Luciano Coelho <luciano.coelho@nokia.com>
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.
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.
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
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>
40 #include "wl12xx_80211.h"
54 #define WL1271_BOOT_RETRIES 3
56 #define WL1271_BOOT_RETRIES 3
58 static char *fwlog_param;
59 static bool bug_on_recovery;
60 static bool no_recovery;
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);
68 static int wl12xx_set_authorized(struct wl1271 *wl,
69 struct wl12xx_vif *wlvif)
73 if (WARN_ON(wlvif->bss_type != BSS_TYPE_STA_BSS))
76 if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags))
79 if (test_and_set_bit(WLVIF_FLAG_STA_STATE_SENT, &wlvif->flags))
82 ret = wl12xx_cmd_set_peer_state(wl, wlvif->sta.hlid);
86 wl12xx_croc(wl, wlvif->role_id);
88 wl1271_info("Association completed.");
92 static int wl1271_reg_notify(struct wiphy *wiphy,
93 struct regulatory_request *request)
95 struct ieee80211_supported_band *band;
96 struct ieee80211_channel *ch;
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)
105 if (ch->flags & IEEE80211_CHAN_RADAR)
106 ch->flags |= IEEE80211_CHAN_NO_IBSS |
107 IEEE80211_CHAN_PASSIVE_SCAN;
114 static int wl1271_set_rx_streaming(struct wl1271 *wl, struct wl12xx_vif *wlvif,
119 /* we should hold wl->mutex */
120 ret = wl1271_acx_ps_rx_streaming(wl, wlvif, enable);
125 set_bit(WLVIF_FLAG_RX_STREAMING_STARTED, &wlvif->flags);
127 clear_bit(WLVIF_FLAG_RX_STREAMING_STARTED, &wlvif->flags);
133 * this function is being called when the rx_streaming interval
134 * has beed changed or rx_streaming should be disabled
136 int wl1271_recalc_rx_streaming(struct wl1271 *wl, struct wl12xx_vif *wlvif)
139 int period = wl->conf.rx_streaming.interval;
141 /* don't reconfigure if rx_streaming is disabled */
142 if (!test_bit(WLVIF_FLAG_RX_STREAMING_STARTED, &wlvif->flags))
145 /* reconfigure/disable according to new streaming_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);
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);
160 static void wl1271_rx_streaming_enable_work(struct work_struct *work)
163 struct wl12xx_vif *wlvif = container_of(work, struct wl12xx_vif,
164 rx_streaming_enable_work);
165 struct wl1271 *wl = wlvif->wl;
167 mutex_lock(&wl->mutex);
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)))
175 if (!wl->conf.rx_streaming.interval)
178 ret = wl1271_ps_elp_wakeup(wl);
182 ret = wl1271_set_rx_streaming(wl, wlvif, true);
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));
191 wl1271_ps_elp_sleep(wl);
193 mutex_unlock(&wl->mutex);
196 static void wl1271_rx_streaming_disable_work(struct work_struct *work)
199 struct wl12xx_vif *wlvif = container_of(work, struct wl12xx_vif,
200 rx_streaming_disable_work);
201 struct wl1271 *wl = wlvif->wl;
203 mutex_lock(&wl->mutex);
205 if (!test_bit(WLVIF_FLAG_RX_STREAMING_STARTED, &wlvif->flags))
208 ret = wl1271_ps_elp_wakeup(wl);
212 ret = wl1271_set_rx_streaming(wl, wlvif, false);
217 wl1271_ps_elp_sleep(wl);
219 mutex_unlock(&wl->mutex);
222 static void wl1271_rx_streaming_timer(unsigned long data)
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);
229 /* wl->mutex must be taken */
230 void wl12xx_rearm_tx_watchdog_locked(struct wl1271 *wl)
232 /* if the watchdog is not armed, don't do anything */
233 if (wl->tx_allocated_blocks == 0)
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));
241 static void wl12xx_tx_watchdog_work(struct work_struct *work)
243 struct delayed_work *dwork;
246 dwork = container_of(work, struct delayed_work, work);
247 wl = container_of(dwork, struct wl1271, tx_watchdog_work);
249 mutex_lock(&wl->mutex);
251 if (unlikely(wl->state == WL1271_STATE_OFF))
254 /* Tx went out in the meantime - everything is ok */
255 if (unlikely(wl->tx_allocated_blocks == 0))
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)
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);
270 * if a scan is in progress, we might not have any Tx for a long
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);
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.
286 if (wl->active_sta_count) {
287 wl1271_debug(DEBUG_TX, "No Tx (in FW) for %d ms. AP has "
289 wl->conf.tx.tx_watchdog_timeout,
290 wl->active_sta_count);
291 wl12xx_rearm_tx_watchdog_locked(wl);
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);
300 mutex_unlock(&wl->mutex);
303 static void wlcore_adjust_conf(struct wl1271 *wl)
305 /* Adjust settings according to optional module parameters */
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;
318 wl1271_error("Unknown fwlog parameter %s", fwlog_param);
323 static int wl1271_plt_init(struct wl1271 *wl)
327 ret = wl->ops->hw_init(wl);
331 ret = wl1271_acx_init_mem_config(wl);
335 ret = wl12xx_acx_mem_cfg(wl);
337 goto out_free_memmap;
339 /* Enable data path */
340 ret = wl1271_cmd_data_path(wl, 1);
342 goto out_free_memmap;
344 /* Configure for CAM power saving (ie. always active) */
345 ret = wl1271_acx_sleep_auth(wl, WL1271_PSM_CAM);
347 goto out_free_memmap;
350 ret = wl1271_acx_pm_config(wl);
352 goto out_free_memmap;
357 kfree(wl->target_mem_map);
358 wl->target_mem_map = NULL;
363 static void wl12xx_irq_ps_regulate_link(struct wl1271 *wl,
364 struct wl12xx_vif *wlvif,
367 bool fw_ps, single_sta;
369 fw_ps = test_bit(hlid, (unsigned long *)&wl->ap_fw_ps_map);
370 single_sta = (wl->active_sta_count == 1);
373 * Wake up from high level PS if the STA is asleep with too little
374 * packets in FW or if the STA is awake.
376 if (!fw_ps || tx_pkts < WL1271_PS_STA_MAX_PACKETS)
377 wl12xx_ps_link_end(wl, wlvif, hlid);
380 * Start high-level PS if the STA is asleep with enough blocks in FW.
381 * Make an exception if this is the only connected station. In this
382 * case FW-memory congestion is not a problem.
384 else if (!single_sta && fw_ps && tx_pkts >= WL1271_PS_STA_MAX_PACKETS)
385 wl12xx_ps_link_start(wl, wlvif, hlid, true);
388 static void wl12xx_irq_update_links_status(struct wl1271 *wl,
389 struct wl12xx_vif *wlvif,
390 struct wl_fw_status *status)
392 struct wl1271_link *lnk;
396 /* TODO: also use link_fast_bitmap here */
398 cur_fw_ps_map = le32_to_cpu(status->link_ps_bitmap);
399 if (wl->ap_fw_ps_map != cur_fw_ps_map) {
400 wl1271_debug(DEBUG_PSM,
401 "link ps prev 0x%x cur 0x%x changed 0x%x",
402 wl->ap_fw_ps_map, cur_fw_ps_map,
403 wl->ap_fw_ps_map ^ cur_fw_ps_map);
405 wl->ap_fw_ps_map = cur_fw_ps_map;
408 for_each_set_bit(hlid, wlvif->ap.sta_hlid_map, WL12XX_MAX_LINKS) {
409 lnk = &wl->links[hlid];
410 cnt = status->counters.tx_lnk_free_pkts[hlid] -
411 lnk->prev_freed_pkts;
413 lnk->prev_freed_pkts = status->counters.tx_lnk_free_pkts[hlid];
414 lnk->allocated_pkts -= cnt;
416 wl12xx_irq_ps_regulate_link(wl, wlvif, hlid,
417 lnk->allocated_pkts);
421 static void wl12xx_fw_status(struct wl1271 *wl,
422 struct wl_fw_status *status)
424 struct wl12xx_vif *wlvif;
426 u32 old_tx_blk_count = wl->tx_blocks_available;
427 int avail, freed_blocks;
431 status_len = sizeof(*status) + wl->fw_status_priv_len;
433 wlcore_raw_read_data(wl, REG_RAW_FW_STATUS_ADDR, status,
436 wl1271_debug(DEBUG_IRQ, "intr: 0x%x (fw_rx_counter = %d, "
437 "drv_rx_counter = %d, tx_results_counter = %d)",
439 status->fw_rx_counter,
440 status->drv_rx_counter,
441 status->tx_results_counter);
443 for (i = 0; i < NUM_TX_QUEUES; i++) {
444 /* prevent wrap-around in freed-packets counter */
445 wl->tx_allocated_pkts[i] -=
446 (status->counters.tx_released_pkts[i] -
447 wl->tx_pkts_freed[i]) & 0xff;
449 wl->tx_pkts_freed[i] = status->counters.tx_released_pkts[i];
452 /* prevent wrap-around in total blocks counter */
453 if (likely(wl->tx_blocks_freed <=
454 le32_to_cpu(status->total_released_blks)))
455 freed_blocks = le32_to_cpu(status->total_released_blks) -
458 freed_blocks = 0x100000000LL - wl->tx_blocks_freed +
459 le32_to_cpu(status->total_released_blks);
461 wl->tx_blocks_freed = le32_to_cpu(status->total_released_blks);
463 wl->tx_allocated_blocks -= freed_blocks;
466 * If the FW freed some blocks:
467 * If we still have allocated blocks - re-arm the timer, Tx is
468 * not stuck. Otherwise, cancel the timer (no Tx currently).
471 if (wl->tx_allocated_blocks)
472 wl12xx_rearm_tx_watchdog_locked(wl);
474 cancel_delayed_work(&wl->tx_watchdog_work);
477 avail = le32_to_cpu(status->tx_total) - wl->tx_allocated_blocks;
480 * The FW might change the total number of TX memblocks before
481 * we get a notification about blocks being released. Thus, the
482 * available blocks calculation might yield a temporary result
483 * which is lower than the actual available blocks. Keeping in
484 * mind that only blocks that were allocated can be moved from
485 * TX to RX, tx_blocks_available should never decrease here.
487 wl->tx_blocks_available = max((int)wl->tx_blocks_available,
490 /* if more blocks are available now, tx work can be scheduled */
491 if (wl->tx_blocks_available > old_tx_blk_count)
492 clear_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags);
494 /* for AP update num of allocated TX blocks per link and ps status */
495 wl12xx_for_each_wlvif_ap(wl, wlvif) {
496 wl12xx_irq_update_links_status(wl, wlvif, status);
499 /* update the host-chipset time offset */
501 wl->time_offset = (timespec_to_ns(&ts) >> 10) -
502 (s64)le32_to_cpu(status->fw_localtime);
505 static void wl1271_flush_deferred_work(struct wl1271 *wl)
509 /* Pass all received frames to the network stack */
510 while ((skb = skb_dequeue(&wl->deferred_rx_queue)))
511 ieee80211_rx_ni(wl->hw, skb);
513 /* Return sent skbs to the network stack */
514 while ((skb = skb_dequeue(&wl->deferred_tx_queue)))
515 ieee80211_tx_status_ni(wl->hw, skb);
518 static void wl1271_netstack_work(struct work_struct *work)
521 container_of(work, struct wl1271, netstack_work);
524 wl1271_flush_deferred_work(wl);
525 } while (skb_queue_len(&wl->deferred_rx_queue));
528 #define WL1271_IRQ_MAX_LOOPS 256
530 static irqreturn_t wl1271_irq(int irq, void *cookie)
534 int loopcount = WL1271_IRQ_MAX_LOOPS;
535 struct wl1271 *wl = (struct wl1271 *)cookie;
537 unsigned int defer_count;
540 /* TX might be handled here, avoid redundant work */
541 set_bit(WL1271_FLAG_TX_PENDING, &wl->flags);
542 cancel_work_sync(&wl->tx_work);
545 * In case edge triggered interrupt must be used, we cannot iterate
546 * more than once without introducing race conditions with the hardirq.
548 if (wl->platform_quirks & WL12XX_PLATFORM_QUIRK_EDGE_IRQ)
551 mutex_lock(&wl->mutex);
553 wl1271_debug(DEBUG_IRQ, "IRQ work");
555 if (unlikely(wl->state == WL1271_STATE_OFF))
558 ret = wl1271_ps_elp_wakeup(wl);
562 while (!done && loopcount--) {
564 * In order to avoid a race with the hardirq, clear the flag
565 * before acknowledging the chip. Since the mutex is held,
566 * wl1271_ps_elp_wakeup cannot be called concurrently.
568 clear_bit(WL1271_FLAG_IRQ_RUNNING, &wl->flags);
569 smp_mb__after_clear_bit();
571 wl12xx_fw_status(wl, wl->fw_status);
573 wlcore_hw_tx_immediate_compl(wl);
575 intr = le32_to_cpu(wl->fw_status->intr);
576 intr &= WL1271_INTR_MASK;
582 if (unlikely(intr & WL1271_ACX_INTR_WATCHDOG)) {
583 wl1271_error("watchdog interrupt received! "
584 "starting recovery.");
585 wl12xx_queue_recovery_work(wl);
587 /* restarting the chip. ignore any other interrupt. */
591 if (likely(intr & WL1271_ACX_INTR_DATA)) {
592 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_DATA");
594 wl12xx_rx(wl, wl->fw_status);
596 /* Check if any tx blocks were freed */
597 spin_lock_irqsave(&wl->wl_lock, flags);
598 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags) &&
599 wl1271_tx_total_queue_count(wl) > 0) {
600 spin_unlock_irqrestore(&wl->wl_lock, flags);
602 * In order to avoid starvation of the TX path,
603 * call the work function directly.
605 wl1271_tx_work_locked(wl);
607 spin_unlock_irqrestore(&wl->wl_lock, flags);
610 /* check for tx results */
611 wlcore_hw_tx_delayed_compl(wl);
613 /* Make sure the deferred queues don't get too long */
614 defer_count = skb_queue_len(&wl->deferred_tx_queue) +
615 skb_queue_len(&wl->deferred_rx_queue);
616 if (defer_count > WL1271_DEFERRED_QUEUE_LIMIT)
617 wl1271_flush_deferred_work(wl);
620 if (intr & WL1271_ACX_INTR_EVENT_A) {
621 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_A");
622 wl1271_event_handle(wl, 0);
625 if (intr & WL1271_ACX_INTR_EVENT_B) {
626 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_B");
627 wl1271_event_handle(wl, 1);
630 if (intr & WL1271_ACX_INTR_INIT_COMPLETE)
631 wl1271_debug(DEBUG_IRQ,
632 "WL1271_ACX_INTR_INIT_COMPLETE");
634 if (intr & WL1271_ACX_INTR_HW_AVAILABLE)
635 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_HW_AVAILABLE");
638 wl1271_ps_elp_sleep(wl);
641 spin_lock_irqsave(&wl->wl_lock, flags);
642 /* In case TX was not handled here, queue TX work */
643 clear_bit(WL1271_FLAG_TX_PENDING, &wl->flags);
644 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags) &&
645 wl1271_tx_total_queue_count(wl) > 0)
646 ieee80211_queue_work(wl->hw, &wl->tx_work);
647 spin_unlock_irqrestore(&wl->wl_lock, flags);
649 mutex_unlock(&wl->mutex);
654 struct vif_counter_data {
657 struct ieee80211_vif *cur_vif;
658 bool cur_vif_running;
661 static void wl12xx_vif_count_iter(void *data, u8 *mac,
662 struct ieee80211_vif *vif)
664 struct vif_counter_data *counter = data;
667 if (counter->cur_vif == vif)
668 counter->cur_vif_running = true;
671 /* caller must not hold wl->mutex, as it might deadlock */
672 static void wl12xx_get_vif_count(struct ieee80211_hw *hw,
673 struct ieee80211_vif *cur_vif,
674 struct vif_counter_data *data)
676 memset(data, 0, sizeof(*data));
677 data->cur_vif = cur_vif;
679 ieee80211_iterate_active_interfaces(hw,
680 wl12xx_vif_count_iter, data);
683 static int wl12xx_fetch_firmware(struct wl1271 *wl, bool plt)
685 const struct firmware *fw;
687 enum wl12xx_fw_type fw_type;
691 fw_type = WL12XX_FW_TYPE_PLT;
692 fw_name = wl->plt_fw_name;
695 * we can't call wl12xx_get_vif_count() here because
696 * wl->mutex is taken, so use the cached last_vif_count value
698 if (wl->last_vif_count > 1) {
699 fw_type = WL12XX_FW_TYPE_MULTI;
700 fw_name = wl->mr_fw_name;
702 fw_type = WL12XX_FW_TYPE_NORMAL;
703 fw_name = wl->sr_fw_name;
707 if (wl->fw_type == fw_type)
710 wl1271_debug(DEBUG_BOOT, "booting firmware %s", fw_name);
712 ret = request_firmware(&fw, fw_name, wl->dev);
715 wl1271_error("could not get firmware %s: %d", fw_name, ret);
720 wl1271_error("firmware size is not multiple of 32 bits: %zu",
727 wl->fw_type = WL12XX_FW_TYPE_NONE;
728 wl->fw_len = fw->size;
729 wl->fw = vmalloc(wl->fw_len);
732 wl1271_error("could not allocate memory for the firmware");
737 memcpy(wl->fw, fw->data, wl->fw_len);
739 wl->fw_type = fw_type;
741 release_firmware(fw);
746 static int wl1271_fetch_nvs(struct wl1271 *wl)
748 const struct firmware *fw;
751 ret = request_firmware(&fw, WL12XX_NVS_NAME, wl->dev);
754 wl1271_error("could not get nvs file %s: %d", WL12XX_NVS_NAME,
759 wl->nvs = kmemdup(fw->data, fw->size, GFP_KERNEL);
762 wl1271_error("could not allocate memory for the nvs file");
767 wl->nvs_len = fw->size;
770 release_firmware(fw);
775 void wl12xx_queue_recovery_work(struct wl1271 *wl)
777 if (!test_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags))
778 ieee80211_queue_work(wl->hw, &wl->recovery_work);
781 size_t wl12xx_copy_fwlog(struct wl1271 *wl, u8 *memblock, size_t maxlen)
785 /* The FW log is a length-value list, find where the log end */
786 while (len < maxlen) {
787 if (memblock[len] == 0)
789 if (len + memblock[len] + 1 > maxlen)
791 len += memblock[len] + 1;
794 /* Make sure we have enough room */
795 len = min(len, (size_t)(PAGE_SIZE - wl->fwlog_size));
797 /* Fill the FW log file, consumed by the sysfs fwlog entry */
798 memcpy(wl->fwlog + wl->fwlog_size, memblock, len);
799 wl->fwlog_size += len;
804 static void wl12xx_read_fwlog_panic(struct wl1271 *wl)
810 if ((wl->quirks & WLCORE_QUIRK_FWLOG_NOT_IMPLEMENTED) ||
811 (wl->conf.fwlog.mode != WL12XX_FWLOG_ON_DEMAND) ||
812 (wl->conf.fwlog.mem_blocks == 0))
815 wl1271_info("Reading FW panic log");
817 block = kmalloc(WL12XX_HW_BLOCK_SIZE, GFP_KERNEL);
822 * Make sure the chip is awake and the logger isn't active.
823 * This might fail if the firmware hanged.
825 if (!wl1271_ps_elp_wakeup(wl))
826 wl12xx_cmd_stop_fwlog(wl);
828 /* Read the first memory block address */
829 wl12xx_fw_status(wl, wl->fw_status);
830 first_addr = le32_to_cpu(wl->fw_status->log_start_addr);
834 /* Traverse the memory blocks linked list */
837 memset(block, 0, WL12XX_HW_BLOCK_SIZE);
838 wl1271_read_hwaddr(wl, addr, block, WL12XX_HW_BLOCK_SIZE,
842 * Memory blocks are linked to one another. The first 4 bytes
843 * of each memory block hold the hardware address of the next
844 * one. The last memory block points to the first one.
846 addr = le32_to_cpup((__le32 *)block);
847 if (!wl12xx_copy_fwlog(wl, block + sizeof(addr),
848 WL12XX_HW_BLOCK_SIZE - sizeof(addr)))
850 } while (addr && (addr != first_addr));
852 wake_up_interruptible(&wl->fwlog_waitq);
858 static void wl1271_recovery_work(struct work_struct *work)
861 container_of(work, struct wl1271, recovery_work);
862 struct wl12xx_vif *wlvif;
863 struct ieee80211_vif *vif;
865 mutex_lock(&wl->mutex);
867 if (wl->state != WL1271_STATE_ON || wl->plt)
870 /* Avoid a recursive recovery */
871 set_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags);
873 wl12xx_read_fwlog_panic(wl);
875 wl1271_info("Hardware recovery in progress. FW ver: %s pc: 0x%x",
877 wlcore_read_reg(wl, REG_PC_ON_RECOVERY));
879 BUG_ON(bug_on_recovery &&
880 !test_bit(WL1271_FLAG_INTENDED_FW_RECOVERY, &wl->flags));
883 wl1271_info("No recovery (chosen on module load). Fw will remain stuck.");
884 clear_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags);
888 BUG_ON(bug_on_recovery);
891 * Advance security sequence number to overcome potential progress
892 * in the firmware during recovery. This doens't hurt if the network is
895 wl12xx_for_each_wlvif(wl, wlvif) {
896 if (test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags) ||
897 test_bit(WLVIF_FLAG_AP_STARTED, &wlvif->flags))
898 wlvif->tx_security_seq +=
899 WL1271_TX_SQN_POST_RECOVERY_PADDING;
902 /* Prevent spurious TX during FW restart */
903 ieee80211_stop_queues(wl->hw);
905 if (wl->sched_scanning) {
906 ieee80211_sched_scan_stopped(wl->hw);
907 wl->sched_scanning = false;
910 /* reboot the chipset */
911 while (!list_empty(&wl->wlvif_list)) {
912 wlvif = list_first_entry(&wl->wlvif_list,
913 struct wl12xx_vif, list);
914 vif = wl12xx_wlvif_to_vif(wlvif);
915 __wl1271_op_remove_interface(wl, vif, false);
917 mutex_unlock(&wl->mutex);
918 wl1271_op_stop(wl->hw);
920 clear_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags);
922 ieee80211_restart_hw(wl->hw);
925 * Its safe to enable TX now - the queues are stopped after a request
928 ieee80211_wake_queues(wl->hw);
931 mutex_unlock(&wl->mutex);
934 static void wl1271_fw_wakeup(struct wl1271 *wl)
936 wl1271_raw_write32(wl, HW_ACCESS_ELP_CTRL_REG, ELPCTRL_WAKE_UP);
939 static int wl1271_setup(struct wl1271 *wl)
941 wl->fw_status = kmalloc(sizeof(*wl->fw_status), GFP_KERNEL);
945 wl->tx_res_if = kmalloc(sizeof(*wl->tx_res_if), GFP_KERNEL);
946 if (!wl->tx_res_if) {
947 kfree(wl->fw_status);
954 static int wl12xx_set_power_on(struct wl1271 *wl)
958 msleep(WL1271_PRE_POWER_ON_SLEEP);
959 ret = wl1271_power_on(wl);
962 msleep(WL1271_POWER_ON_SLEEP);
966 wlcore_set_partition(wl, &wl->ptable[PART_BOOT]);
968 /* ELP module wake up */
969 wl1271_fw_wakeup(wl);
975 static int wl12xx_chip_wakeup(struct wl1271 *wl, bool plt)
979 ret = wl12xx_set_power_on(wl);
984 * For wl127x based devices we could use the default block
985 * size (512 bytes), but due to a bug in the sdio driver, we
986 * need to set it explicitly after the chip is powered on. To
987 * simplify the code and since the performance impact is
988 * negligible, we use the same block size for all different
991 if (wl1271_set_block_size(wl))
992 wl->quirks |= WLCORE_QUIRK_TX_BLOCKSIZE_ALIGN;
994 ret = wl->ops->identify_chip(wl);
998 /* TODO: make sure the lower driver has set things up correctly */
1000 ret = wl1271_setup(wl);
1004 ret = wl12xx_fetch_firmware(wl, plt);
1008 /* No NVS from netlink, try to get it from the filesystem */
1009 if (wl->nvs == NULL) {
1010 ret = wl1271_fetch_nvs(wl);
1019 int wl1271_plt_start(struct wl1271 *wl)
1021 int retries = WL1271_BOOT_RETRIES;
1022 struct wiphy *wiphy = wl->hw->wiphy;
1025 mutex_lock(&wl->mutex);
1027 wl1271_notice("power up");
1029 if (wl->state != WL1271_STATE_OFF) {
1030 wl1271_error("cannot go into PLT state because not "
1031 "in off state: %d", wl->state);
1038 ret = wl12xx_chip_wakeup(wl, true);
1042 ret = wl->ops->boot(wl);
1046 ret = wl1271_plt_init(wl);
1051 wl->state = WL1271_STATE_ON;
1052 wl1271_notice("firmware booted in PLT mode (%s)",
1053 wl->chip.fw_ver_str);
1055 /* update hw/fw version info in wiphy struct */
1056 wiphy->hw_version = wl->chip.id;
1057 strncpy(wiphy->fw_version, wl->chip.fw_ver_str,
1058 sizeof(wiphy->fw_version));
1063 mutex_unlock(&wl->mutex);
1064 /* Unlocking the mutex in the middle of handling is
1065 inherently unsafe. In this case we deem it safe to do,
1066 because we need to let any possibly pending IRQ out of
1067 the system (and while we are WL1271_STATE_OFF the IRQ
1068 work function will not do anything.) Also, any other
1069 possible concurrent operations will fail due to the
1070 current state, hence the wl1271 struct should be safe. */
1071 wlcore_disable_interrupts(wl);
1072 wl1271_flush_deferred_work(wl);
1073 cancel_work_sync(&wl->netstack_work);
1074 mutex_lock(&wl->mutex);
1076 wl1271_power_off(wl);
1079 wl1271_error("firmware boot in PLT mode failed despite %d retries",
1080 WL1271_BOOT_RETRIES);
1082 mutex_unlock(&wl->mutex);
1087 int wl1271_plt_stop(struct wl1271 *wl)
1091 wl1271_notice("power down");
1094 * Interrupts must be disabled before setting the state to OFF.
1095 * Otherwise, the interrupt handler might be called and exit without
1096 * reading the interrupt status.
1098 wlcore_disable_interrupts(wl);
1099 mutex_lock(&wl->mutex);
1101 mutex_unlock(&wl->mutex);
1104 * This will not necessarily enable interrupts as interrupts
1105 * may have been disabled when op_stop was called. It will,
1106 * however, balance the above call to disable_interrupts().
1108 wlcore_enable_interrupts(wl);
1110 wl1271_error("cannot power down because not in PLT "
1111 "state: %d", wl->state);
1116 mutex_unlock(&wl->mutex);
1118 wl1271_flush_deferred_work(wl);
1119 cancel_work_sync(&wl->netstack_work);
1120 cancel_work_sync(&wl->recovery_work);
1121 cancel_delayed_work_sync(&wl->elp_work);
1122 cancel_delayed_work_sync(&wl->tx_watchdog_work);
1124 mutex_lock(&wl->mutex);
1125 wl1271_power_off(wl);
1127 wl->state = WL1271_STATE_OFF;
1130 mutex_unlock(&wl->mutex);
1136 static void wl1271_op_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
1138 struct wl1271 *wl = hw->priv;
1139 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
1140 struct ieee80211_vif *vif = info->control.vif;
1141 struct wl12xx_vif *wlvif = NULL;
1142 unsigned long flags;
1147 wlvif = wl12xx_vif_to_data(vif);
1149 mapping = skb_get_queue_mapping(skb);
1150 q = wl1271_tx_get_queue(mapping);
1152 hlid = wl12xx_tx_get_hlid(wl, wlvif, skb);
1154 spin_lock_irqsave(&wl->wl_lock, flags);
1156 /* queue the packet */
1157 if (hlid == WL12XX_INVALID_LINK_ID ||
1158 (wlvif && !test_bit(hlid, wlvif->links_map))) {
1159 wl1271_debug(DEBUG_TX, "DROP skb hlid %d q %d", hlid, q);
1160 ieee80211_free_txskb(hw, skb);
1164 wl1271_debug(DEBUG_TX, "queue skb hlid %d q %d len %d",
1166 skb_queue_tail(&wl->links[hlid].tx_queue[q], skb);
1168 wl->tx_queue_count[q]++;
1171 * The workqueue is slow to process the tx_queue and we need stop
1172 * the queue here, otherwise the queue will get too long.
1174 if (wl->tx_queue_count[q] >= WL1271_TX_QUEUE_HIGH_WATERMARK) {
1175 wl1271_debug(DEBUG_TX, "op_tx: stopping queues for q %d", q);
1176 ieee80211_stop_queue(wl->hw, mapping);
1177 set_bit(q, &wl->stopped_queues_map);
1181 * The chip specific setup must run before the first TX packet -
1182 * before that, the tx_work will not be initialized!
1185 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags) &&
1186 !test_bit(WL1271_FLAG_TX_PENDING, &wl->flags))
1187 ieee80211_queue_work(wl->hw, &wl->tx_work);
1190 spin_unlock_irqrestore(&wl->wl_lock, flags);
1193 int wl1271_tx_dummy_packet(struct wl1271 *wl)
1195 unsigned long flags;
1198 /* no need to queue a new dummy packet if one is already pending */
1199 if (test_bit(WL1271_FLAG_DUMMY_PACKET_PENDING, &wl->flags))
1202 q = wl1271_tx_get_queue(skb_get_queue_mapping(wl->dummy_packet));
1204 spin_lock_irqsave(&wl->wl_lock, flags);
1205 set_bit(WL1271_FLAG_DUMMY_PACKET_PENDING, &wl->flags);
1206 wl->tx_queue_count[q]++;
1207 spin_unlock_irqrestore(&wl->wl_lock, flags);
1209 /* The FW is low on RX memory blocks, so send the dummy packet asap */
1210 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags))
1211 wl1271_tx_work_locked(wl);
1214 * If the FW TX is busy, TX work will be scheduled by the threaded
1215 * interrupt handler function
1221 * The size of the dummy packet should be at least 1400 bytes. However, in
1222 * order to minimize the number of bus transactions, aligning it to 512 bytes
1223 * boundaries could be beneficial, performance wise
1225 #define TOTAL_TX_DUMMY_PACKET_SIZE (ALIGN(1400, 512))
1227 static struct sk_buff *wl12xx_alloc_dummy_packet(struct wl1271 *wl)
1229 struct sk_buff *skb;
1230 struct ieee80211_hdr_3addr *hdr;
1231 unsigned int dummy_packet_size;
1233 dummy_packet_size = TOTAL_TX_DUMMY_PACKET_SIZE -
1234 sizeof(struct wl1271_tx_hw_descr) - sizeof(*hdr);
1236 skb = dev_alloc_skb(TOTAL_TX_DUMMY_PACKET_SIZE);
1238 wl1271_warning("Failed to allocate a dummy packet skb");
1242 skb_reserve(skb, sizeof(struct wl1271_tx_hw_descr));
1244 hdr = (struct ieee80211_hdr_3addr *) skb_put(skb, sizeof(*hdr));
1245 memset(hdr, 0, sizeof(*hdr));
1246 hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_DATA |
1247 IEEE80211_STYPE_NULLFUNC |
1248 IEEE80211_FCTL_TODS);
1250 memset(skb_put(skb, dummy_packet_size), 0, dummy_packet_size);
1252 /* Dummy packets require the TID to be management */
1253 skb->priority = WL1271_TID_MGMT;
1255 /* Initialize all fields that might be used */
1256 skb_set_queue_mapping(skb, 0);
1257 memset(IEEE80211_SKB_CB(skb), 0, sizeof(struct ieee80211_tx_info));
1264 static int wl1271_configure_suspend_sta(struct wl1271 *wl,
1265 struct wl12xx_vif *wlvif)
1269 if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags))
1272 ret = wl1271_ps_elp_wakeup(wl);
1276 ret = wl1271_acx_wake_up_conditions(wl, wlvif,
1277 wl->conf.conn.suspend_wake_up_event,
1278 wl->conf.conn.suspend_listen_interval);
1281 wl1271_error("suspend: set wake up conditions failed: %d", ret);
1283 wl1271_ps_elp_sleep(wl);
1290 static int wl1271_configure_suspend_ap(struct wl1271 *wl,
1291 struct wl12xx_vif *wlvif)
1295 if (!test_bit(WLVIF_FLAG_AP_STARTED, &wlvif->flags))
1298 ret = wl1271_ps_elp_wakeup(wl);
1302 ret = wl1271_acx_beacon_filter_opt(wl, wlvif, true);
1304 wl1271_ps_elp_sleep(wl);
1310 static int wl1271_configure_suspend(struct wl1271 *wl,
1311 struct wl12xx_vif *wlvif)
1313 if (wlvif->bss_type == BSS_TYPE_STA_BSS)
1314 return wl1271_configure_suspend_sta(wl, wlvif);
1315 if (wlvif->bss_type == BSS_TYPE_AP_BSS)
1316 return wl1271_configure_suspend_ap(wl, wlvif);
1320 static void wl1271_configure_resume(struct wl1271 *wl,
1321 struct wl12xx_vif *wlvif)
1324 bool is_ap = wlvif->bss_type == BSS_TYPE_AP_BSS;
1325 bool is_sta = wlvif->bss_type == BSS_TYPE_STA_BSS;
1327 if ((!is_ap) && (!is_sta))
1330 ret = wl1271_ps_elp_wakeup(wl);
1335 ret = wl1271_acx_wake_up_conditions(wl, wlvif,
1336 wl->conf.conn.wake_up_event,
1337 wl->conf.conn.listen_interval);
1340 wl1271_error("resume: wake up conditions failed: %d",
1344 ret = wl1271_acx_beacon_filter_opt(wl, wlvif, false);
1347 wl1271_ps_elp_sleep(wl);
1350 static int wl1271_op_suspend(struct ieee80211_hw *hw,
1351 struct cfg80211_wowlan *wow)
1353 struct wl1271 *wl = hw->priv;
1354 struct wl12xx_vif *wlvif;
1357 wl1271_debug(DEBUG_MAC80211, "mac80211 suspend wow=%d", !!wow);
1358 WARN_ON(!wow || !wow->any);
1360 wl1271_tx_flush(wl);
1362 mutex_lock(&wl->mutex);
1363 wl->wow_enabled = true;
1364 wl12xx_for_each_wlvif(wl, wlvif) {
1365 ret = wl1271_configure_suspend(wl, wlvif);
1367 wl1271_warning("couldn't prepare device to suspend");
1371 mutex_unlock(&wl->mutex);
1372 /* flush any remaining work */
1373 wl1271_debug(DEBUG_MAC80211, "flushing remaining works");
1376 * disable and re-enable interrupts in order to flush
1379 wlcore_disable_interrupts(wl);
1382 * set suspended flag to avoid triggering a new threaded_irq
1383 * work. no need for spinlock as interrupts are disabled.
1385 set_bit(WL1271_FLAG_SUSPENDED, &wl->flags);
1387 wlcore_enable_interrupts(wl);
1388 flush_work(&wl->tx_work);
1389 flush_delayed_work(&wl->elp_work);
1394 static int wl1271_op_resume(struct ieee80211_hw *hw)
1396 struct wl1271 *wl = hw->priv;
1397 struct wl12xx_vif *wlvif;
1398 unsigned long flags;
1399 bool run_irq_work = false;
1401 wl1271_debug(DEBUG_MAC80211, "mac80211 resume wow=%d",
1403 WARN_ON(!wl->wow_enabled);
1406 * re-enable irq_work enqueuing, and call irq_work directly if
1407 * there is a pending work.
1409 spin_lock_irqsave(&wl->wl_lock, flags);
1410 clear_bit(WL1271_FLAG_SUSPENDED, &wl->flags);
1411 if (test_and_clear_bit(WL1271_FLAG_PENDING_WORK, &wl->flags))
1412 run_irq_work = true;
1413 spin_unlock_irqrestore(&wl->wl_lock, flags);
1416 wl1271_debug(DEBUG_MAC80211,
1417 "run postponed irq_work directly");
1419 wlcore_enable_interrupts(wl);
1422 mutex_lock(&wl->mutex);
1423 wl12xx_for_each_wlvif(wl, wlvif) {
1424 wl1271_configure_resume(wl, wlvif);
1426 wl->wow_enabled = false;
1427 mutex_unlock(&wl->mutex);
1433 static int wl1271_op_start(struct ieee80211_hw *hw)
1435 wl1271_debug(DEBUG_MAC80211, "mac80211 start");
1438 * We have to delay the booting of the hardware because
1439 * we need to know the local MAC address before downloading and
1440 * initializing the firmware. The MAC address cannot be changed
1441 * after boot, and without the proper MAC address, the firmware
1442 * will not function properly.
1444 * The MAC address is first known when the corresponding interface
1445 * is added. That is where we will initialize the hardware.
1451 static void wl1271_op_stop(struct ieee80211_hw *hw)
1453 struct wl1271 *wl = hw->priv;
1456 wl1271_debug(DEBUG_MAC80211, "mac80211 stop");
1459 * Interrupts must be disabled before setting the state to OFF.
1460 * Otherwise, the interrupt handler might be called and exit without
1461 * reading the interrupt status.
1463 wlcore_disable_interrupts(wl);
1464 mutex_lock(&wl->mutex);
1465 if (wl->state == WL1271_STATE_OFF) {
1466 mutex_unlock(&wl->mutex);
1469 * This will not necessarily enable interrupts as interrupts
1470 * may have been disabled when op_stop was called. It will,
1471 * however, balance the above call to disable_interrupts().
1473 wlcore_enable_interrupts(wl);
1478 * this must be before the cancel_work calls below, so that the work
1479 * functions don't perform further work.
1481 wl->state = WL1271_STATE_OFF;
1482 mutex_unlock(&wl->mutex);
1484 wl1271_flush_deferred_work(wl);
1485 cancel_delayed_work_sync(&wl->scan_complete_work);
1486 cancel_work_sync(&wl->netstack_work);
1487 cancel_work_sync(&wl->tx_work);
1488 cancel_delayed_work_sync(&wl->elp_work);
1489 cancel_delayed_work_sync(&wl->tx_watchdog_work);
1491 /* let's notify MAC80211 about the remaining pending TX frames */
1492 wl12xx_tx_reset(wl, true);
1493 mutex_lock(&wl->mutex);
1495 wl1271_power_off(wl);
1497 wl->band = IEEE80211_BAND_2GHZ;
1500 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
1501 wl->tx_blocks_available = 0;
1502 wl->tx_allocated_blocks = 0;
1503 wl->tx_results_count = 0;
1504 wl->tx_packets_count = 0;
1505 wl->time_offset = 0;
1506 wl->ap_fw_ps_map = 0;
1508 wl->sched_scanning = false;
1509 memset(wl->roles_map, 0, sizeof(wl->roles_map));
1510 memset(wl->links_map, 0, sizeof(wl->links_map));
1511 memset(wl->roc_map, 0, sizeof(wl->roc_map));
1512 wl->active_sta_count = 0;
1514 /* The system link is always allocated */
1515 __set_bit(WL12XX_SYSTEM_HLID, wl->links_map);
1518 * this is performed after the cancel_work calls and the associated
1519 * mutex_lock, so that wl1271_op_add_interface does not accidentally
1520 * get executed before all these vars have been reset.
1524 wl->tx_blocks_freed = 0;
1526 for (i = 0; i < NUM_TX_QUEUES; i++) {
1527 wl->tx_pkts_freed[i] = 0;
1528 wl->tx_allocated_pkts[i] = 0;
1531 wl1271_debugfs_reset(wl);
1533 kfree(wl->fw_status);
1534 wl->fw_status = NULL;
1535 kfree(wl->tx_res_if);
1536 wl->tx_res_if = NULL;
1537 kfree(wl->target_mem_map);
1538 wl->target_mem_map = NULL;
1540 mutex_unlock(&wl->mutex);
1543 static int wl12xx_allocate_rate_policy(struct wl1271 *wl, u8 *idx)
1545 u8 policy = find_first_zero_bit(wl->rate_policies_map,
1546 WL12XX_MAX_RATE_POLICIES);
1547 if (policy >= WL12XX_MAX_RATE_POLICIES)
1550 __set_bit(policy, wl->rate_policies_map);
1555 static void wl12xx_free_rate_policy(struct wl1271 *wl, u8 *idx)
1557 if (WARN_ON(*idx >= WL12XX_MAX_RATE_POLICIES))
1560 __clear_bit(*idx, wl->rate_policies_map);
1561 *idx = WL12XX_MAX_RATE_POLICIES;
1564 static u8 wl12xx_get_role_type(struct wl1271 *wl, struct wl12xx_vif *wlvif)
1566 switch (wlvif->bss_type) {
1567 case BSS_TYPE_AP_BSS:
1569 return WL1271_ROLE_P2P_GO;
1571 return WL1271_ROLE_AP;
1573 case BSS_TYPE_STA_BSS:
1575 return WL1271_ROLE_P2P_CL;
1577 return WL1271_ROLE_STA;
1580 return WL1271_ROLE_IBSS;
1583 wl1271_error("invalid bss_type: %d", wlvif->bss_type);
1585 return WL12XX_INVALID_ROLE_TYPE;
1588 static int wl12xx_init_vif_data(struct wl1271 *wl, struct ieee80211_vif *vif)
1590 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
1593 /* clear everything but the persistent data */
1594 memset(wlvif, 0, offsetof(struct wl12xx_vif, persistent));
1596 switch (ieee80211_vif_type_p2p(vif)) {
1597 case NL80211_IFTYPE_P2P_CLIENT:
1600 case NL80211_IFTYPE_STATION:
1601 wlvif->bss_type = BSS_TYPE_STA_BSS;
1603 case NL80211_IFTYPE_ADHOC:
1604 wlvif->bss_type = BSS_TYPE_IBSS;
1606 case NL80211_IFTYPE_P2P_GO:
1609 case NL80211_IFTYPE_AP:
1610 wlvif->bss_type = BSS_TYPE_AP_BSS;
1613 wlvif->bss_type = MAX_BSS_TYPE;
1617 wlvif->role_id = WL12XX_INVALID_ROLE_ID;
1618 wlvif->dev_role_id = WL12XX_INVALID_ROLE_ID;
1619 wlvif->dev_hlid = WL12XX_INVALID_LINK_ID;
1621 if (wlvif->bss_type == BSS_TYPE_STA_BSS ||
1622 wlvif->bss_type == BSS_TYPE_IBSS) {
1623 /* init sta/ibss data */
1624 wlvif->sta.hlid = WL12XX_INVALID_LINK_ID;
1625 wl12xx_allocate_rate_policy(wl, &wlvif->sta.basic_rate_idx);
1626 wl12xx_allocate_rate_policy(wl, &wlvif->sta.ap_rate_idx);
1627 wl12xx_allocate_rate_policy(wl, &wlvif->sta.p2p_rate_idx);
1630 wlvif->ap.bcast_hlid = WL12XX_INVALID_LINK_ID;
1631 wlvif->ap.global_hlid = WL12XX_INVALID_LINK_ID;
1632 wl12xx_allocate_rate_policy(wl, &wlvif->ap.mgmt_rate_idx);
1633 wl12xx_allocate_rate_policy(wl, &wlvif->ap.bcast_rate_idx);
1634 for (i = 0; i < CONF_TX_MAX_AC_COUNT; i++)
1635 wl12xx_allocate_rate_policy(wl,
1636 &wlvif->ap.ucast_rate_idx[i]);
1639 wlvif->bitrate_masks[IEEE80211_BAND_2GHZ] = wl->conf.tx.basic_rate;
1640 wlvif->bitrate_masks[IEEE80211_BAND_5GHZ] = wl->conf.tx.basic_rate_5;
1641 wlvif->basic_rate_set = CONF_TX_RATE_MASK_BASIC;
1642 wlvif->basic_rate = CONF_TX_RATE_MASK_BASIC;
1643 wlvif->rate_set = CONF_TX_RATE_MASK_BASIC;
1644 wlvif->beacon_int = WL1271_DEFAULT_BEACON_INT;
1647 * mac80211 configures some values globally, while we treat them
1648 * per-interface. thus, on init, we have to copy them from wl
1650 wlvif->band = wl->band;
1651 wlvif->channel = wl->channel;
1652 wlvif->power_level = wl->power_level;
1654 INIT_WORK(&wlvif->rx_streaming_enable_work,
1655 wl1271_rx_streaming_enable_work);
1656 INIT_WORK(&wlvif->rx_streaming_disable_work,
1657 wl1271_rx_streaming_disable_work);
1658 INIT_LIST_HEAD(&wlvif->list);
1660 setup_timer(&wlvif->rx_streaming_timer, wl1271_rx_streaming_timer,
1661 (unsigned long) wlvif);
1665 static bool wl12xx_init_fw(struct wl1271 *wl)
1667 int retries = WL1271_BOOT_RETRIES;
1668 bool booted = false;
1669 struct wiphy *wiphy = wl->hw->wiphy;
1674 ret = wl12xx_chip_wakeup(wl, false);
1678 ret = wl->ops->boot(wl);
1682 ret = wl1271_hw_init(wl);
1690 mutex_unlock(&wl->mutex);
1691 /* Unlocking the mutex in the middle of handling is
1692 inherently unsafe. In this case we deem it safe to do,
1693 because we need to let any possibly pending IRQ out of
1694 the system (and while we are WL1271_STATE_OFF the IRQ
1695 work function will not do anything.) Also, any other
1696 possible concurrent operations will fail due to the
1697 current state, hence the wl1271 struct should be safe. */
1698 wlcore_disable_interrupts(wl);
1699 wl1271_flush_deferred_work(wl);
1700 cancel_work_sync(&wl->netstack_work);
1701 mutex_lock(&wl->mutex);
1703 wl1271_power_off(wl);
1707 wl1271_error("firmware boot failed despite %d retries",
1708 WL1271_BOOT_RETRIES);
1712 wl1271_info("firmware booted (%s)", wl->chip.fw_ver_str);
1714 /* update hw/fw version info in wiphy struct */
1715 wiphy->hw_version = wl->chip.id;
1716 strncpy(wiphy->fw_version, wl->chip.fw_ver_str,
1717 sizeof(wiphy->fw_version));
1720 * Now we know if 11a is supported (info from the NVS), so disable
1721 * 11a channels if not supported
1723 if (!wl->enable_11a)
1724 wiphy->bands[IEEE80211_BAND_5GHZ]->n_channels = 0;
1726 wl1271_debug(DEBUG_MAC80211, "11a is %ssupported",
1727 wl->enable_11a ? "" : "not ");
1729 wl->state = WL1271_STATE_ON;
1734 static bool wl12xx_dev_role_started(struct wl12xx_vif *wlvif)
1736 return wlvif->dev_hlid != WL12XX_INVALID_LINK_ID;
1740 * Check whether a fw switch (i.e. moving from one loaded
1741 * fw to another) is needed. This function is also responsible
1742 * for updating wl->last_vif_count, so it must be called before
1743 * loading a non-plt fw (so the correct fw (single-role/multi-role)
1746 static bool wl12xx_need_fw_change(struct wl1271 *wl,
1747 struct vif_counter_data vif_counter_data,
1750 enum wl12xx_fw_type current_fw = wl->fw_type;
1751 u8 vif_count = vif_counter_data.counter;
1753 if (test_bit(WL1271_FLAG_VIF_CHANGE_IN_PROGRESS, &wl->flags))
1756 /* increase the vif count if this is a new vif */
1757 if (add && !vif_counter_data.cur_vif_running)
1760 wl->last_vif_count = vif_count;
1762 /* no need for fw change if the device is OFF */
1763 if (wl->state == WL1271_STATE_OFF)
1766 if (vif_count > 1 && current_fw == WL12XX_FW_TYPE_NORMAL)
1768 if (vif_count <= 1 && current_fw == WL12XX_FW_TYPE_MULTI)
1775 * Enter "forced psm". Make sure the sta is in psm against the ap,
1776 * to make the fw switch a bit more disconnection-persistent.
1778 static void wl12xx_force_active_psm(struct wl1271 *wl)
1780 struct wl12xx_vif *wlvif;
1782 wl12xx_for_each_wlvif_sta(wl, wlvif) {
1783 wl1271_ps_set_mode(wl, wlvif, STATION_POWER_SAVE_MODE);
1787 static int wl1271_op_add_interface(struct ieee80211_hw *hw,
1788 struct ieee80211_vif *vif)
1790 struct wl1271 *wl = hw->priv;
1791 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
1792 struct vif_counter_data vif_count;
1795 bool booted = false;
1797 vif->driver_flags |= IEEE80211_VIF_BEACON_FILTER |
1798 IEEE80211_VIF_SUPPORTS_CQM_RSSI;
1800 wl1271_debug(DEBUG_MAC80211, "mac80211 add interface type %d mac %pM",
1801 ieee80211_vif_type_p2p(vif), vif->addr);
1803 wl12xx_get_vif_count(hw, vif, &vif_count);
1805 mutex_lock(&wl->mutex);
1806 ret = wl1271_ps_elp_wakeup(wl);
1811 * in some very corner case HW recovery scenarios its possible to
1812 * get here before __wl1271_op_remove_interface is complete, so
1813 * opt out if that is the case.
1815 if (test_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags) ||
1816 test_bit(WLVIF_FLAG_INITIALIZED, &wlvif->flags)) {
1822 ret = wl12xx_init_vif_data(wl, vif);
1827 role_type = wl12xx_get_role_type(wl, wlvif);
1828 if (role_type == WL12XX_INVALID_ROLE_TYPE) {
1833 if (wl12xx_need_fw_change(wl, vif_count, true)) {
1834 wl12xx_force_active_psm(wl);
1835 set_bit(WL1271_FLAG_INTENDED_FW_RECOVERY, &wl->flags);
1836 mutex_unlock(&wl->mutex);
1837 wl1271_recovery_work(&wl->recovery_work);
1842 * TODO: after the nvs issue will be solved, move this block
1843 * to start(), and make sure here the driver is ON.
1845 if (wl->state == WL1271_STATE_OFF) {
1847 * we still need this in order to configure the fw
1848 * while uploading the nvs
1850 memcpy(wl->addresses[0].addr, vif->addr, ETH_ALEN);
1852 booted = wl12xx_init_fw(wl);
1859 if (wlvif->bss_type == BSS_TYPE_STA_BSS ||
1860 wlvif->bss_type == BSS_TYPE_IBSS) {
1862 * The device role is a special role used for
1863 * rx and tx frames prior to association (as
1864 * the STA role can get packets only from
1865 * its associated bssid)
1867 ret = wl12xx_cmd_role_enable(wl, vif->addr,
1869 &wlvif->dev_role_id);
1874 ret = wl12xx_cmd_role_enable(wl, vif->addr,
1875 role_type, &wlvif->role_id);
1879 ret = wl1271_init_vif_specific(wl, vif);
1883 list_add(&wlvif->list, &wl->wlvif_list);
1884 set_bit(WLVIF_FLAG_INITIALIZED, &wlvif->flags);
1886 if (wlvif->bss_type == BSS_TYPE_AP_BSS)
1891 wl1271_ps_elp_sleep(wl);
1893 mutex_unlock(&wl->mutex);
1898 static void __wl1271_op_remove_interface(struct wl1271 *wl,
1899 struct ieee80211_vif *vif,
1900 bool reset_tx_queues)
1902 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
1905 wl1271_debug(DEBUG_MAC80211, "mac80211 remove interface");
1907 if (!test_and_clear_bit(WLVIF_FLAG_INITIALIZED, &wlvif->flags))
1910 /* because of hardware recovery, we may get here twice */
1911 if (wl->state != WL1271_STATE_ON)
1914 wl1271_info("down");
1916 if (wl->scan.state != WL1271_SCAN_STATE_IDLE &&
1917 wl->scan_vif == vif) {
1919 * Rearm the tx watchdog just before idling scan. This
1920 * prevents just-finished scans from triggering the watchdog
1922 wl12xx_rearm_tx_watchdog_locked(wl);
1924 wl->scan.state = WL1271_SCAN_STATE_IDLE;
1925 memset(wl->scan.scanned_ch, 0, sizeof(wl->scan.scanned_ch));
1926 wl->scan_vif = NULL;
1927 wl->scan.req = NULL;
1928 ieee80211_scan_completed(wl->hw, true);
1931 if (!test_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags)) {
1932 /* disable active roles */
1933 ret = wl1271_ps_elp_wakeup(wl);
1937 if (wlvif->bss_type == BSS_TYPE_STA_BSS ||
1938 wlvif->bss_type == BSS_TYPE_IBSS) {
1939 if (wl12xx_dev_role_started(wlvif))
1940 wl12xx_stop_dev(wl, wlvif);
1942 ret = wl12xx_cmd_role_disable(wl, &wlvif->dev_role_id);
1947 ret = wl12xx_cmd_role_disable(wl, &wlvif->role_id);
1951 wl1271_ps_elp_sleep(wl);
1954 /* clear all hlids (except system_hlid) */
1955 wlvif->dev_hlid = WL12XX_INVALID_LINK_ID;
1957 if (wlvif->bss_type == BSS_TYPE_STA_BSS ||
1958 wlvif->bss_type == BSS_TYPE_IBSS) {
1959 wlvif->sta.hlid = WL12XX_INVALID_LINK_ID;
1960 wl12xx_free_rate_policy(wl, &wlvif->sta.basic_rate_idx);
1961 wl12xx_free_rate_policy(wl, &wlvif->sta.ap_rate_idx);
1962 wl12xx_free_rate_policy(wl, &wlvif->sta.p2p_rate_idx);
1964 wlvif->ap.bcast_hlid = WL12XX_INVALID_LINK_ID;
1965 wlvif->ap.global_hlid = WL12XX_INVALID_LINK_ID;
1966 wl12xx_free_rate_policy(wl, &wlvif->ap.mgmt_rate_idx);
1967 wl12xx_free_rate_policy(wl, &wlvif->ap.bcast_rate_idx);
1968 for (i = 0; i < CONF_TX_MAX_AC_COUNT; i++)
1969 wl12xx_free_rate_policy(wl,
1970 &wlvif->ap.ucast_rate_idx[i]);
1971 wl1271_free_ap_keys(wl, wlvif);
1974 dev_kfree_skb(wlvif->probereq);
1975 wlvif->probereq = NULL;
1976 wl12xx_tx_reset_wlvif(wl, wlvif);
1977 if (wl->last_wlvif == wlvif)
1978 wl->last_wlvif = NULL;
1979 list_del(&wlvif->list);
1980 memset(wlvif->ap.sta_hlid_map, 0, sizeof(wlvif->ap.sta_hlid_map));
1981 wlvif->role_id = WL12XX_INVALID_ROLE_ID;
1982 wlvif->dev_role_id = WL12XX_INVALID_ROLE_ID;
1984 if (wlvif->bss_type == BSS_TYPE_AP_BSS)
1989 mutex_unlock(&wl->mutex);
1991 del_timer_sync(&wlvif->rx_streaming_timer);
1992 cancel_work_sync(&wlvif->rx_streaming_enable_work);
1993 cancel_work_sync(&wlvif->rx_streaming_disable_work);
1995 mutex_lock(&wl->mutex);
1998 static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
1999 struct ieee80211_vif *vif)
2001 struct wl1271 *wl = hw->priv;
2002 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
2003 struct wl12xx_vif *iter;
2004 struct vif_counter_data vif_count;
2005 bool cancel_recovery = true;
2007 wl12xx_get_vif_count(hw, vif, &vif_count);
2008 mutex_lock(&wl->mutex);
2010 if (wl->state == WL1271_STATE_OFF ||
2011 !test_bit(WLVIF_FLAG_INITIALIZED, &wlvif->flags))
2015 * wl->vif can be null here if someone shuts down the interface
2016 * just when hardware recovery has been started.
2018 wl12xx_for_each_wlvif(wl, iter) {
2022 __wl1271_op_remove_interface(wl, vif, true);
2025 WARN_ON(iter != wlvif);
2026 if (wl12xx_need_fw_change(wl, vif_count, false)) {
2027 wl12xx_force_active_psm(wl);
2028 set_bit(WL1271_FLAG_INTENDED_FW_RECOVERY, &wl->flags);
2029 wl12xx_queue_recovery_work(wl);
2030 cancel_recovery = false;
2033 mutex_unlock(&wl->mutex);
2034 if (cancel_recovery)
2035 cancel_work_sync(&wl->recovery_work);
2038 static int wl12xx_op_change_interface(struct ieee80211_hw *hw,
2039 struct ieee80211_vif *vif,
2040 enum nl80211_iftype new_type, bool p2p)
2042 struct wl1271 *wl = hw->priv;
2045 set_bit(WL1271_FLAG_VIF_CHANGE_IN_PROGRESS, &wl->flags);
2046 wl1271_op_remove_interface(hw, vif);
2048 vif->type = new_type;
2050 ret = wl1271_op_add_interface(hw, vif);
2052 clear_bit(WL1271_FLAG_VIF_CHANGE_IN_PROGRESS, &wl->flags);
2056 static int wl1271_join(struct wl1271 *wl, struct wl12xx_vif *wlvif,
2060 bool is_ibss = (wlvif->bss_type == BSS_TYPE_IBSS);
2063 * One of the side effects of the JOIN command is that is clears
2064 * WPA/WPA2 keys from the chipset. Performing a JOIN while associated
2065 * to a WPA/WPA2 access point will therefore kill the data-path.
2066 * Currently the only valid scenario for JOIN during association
2067 * is on roaming, in which case we will also be given new keys.
2068 * Keep the below message for now, unless it starts bothering
2069 * users who really like to roam a lot :)
2071 if (test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags))
2072 wl1271_info("JOIN while associated.");
2074 /* clear encryption type */
2075 wlvif->encryption_type = KEY_NONE;
2078 set_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags);
2081 ret = wl12xx_cmd_role_start_ibss(wl, wlvif);
2083 ret = wl12xx_cmd_role_start_sta(wl, wlvif);
2087 if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags))
2091 * The join command disable the keep-alive mode, shut down its process,
2092 * and also clear the template config, so we need to reset it all after
2093 * the join. The acx_aid starts the keep-alive process, and the order
2094 * of the commands below is relevant.
2096 ret = wl1271_acx_keep_alive_mode(wl, wlvif, true);
2100 ret = wl1271_acx_aid(wl, wlvif, wlvif->aid);
2104 ret = wl12xx_cmd_build_klv_null_data(wl, wlvif);
2108 ret = wl1271_acx_keep_alive_config(wl, wlvif,
2109 CMD_TEMPL_KLV_IDX_NULL_DATA,
2110 ACX_KEEP_ALIVE_TPL_VALID);
2118 static int wl1271_unjoin(struct wl1271 *wl, struct wl12xx_vif *wlvif)
2122 if (test_and_clear_bit(WLVIF_FLAG_CS_PROGRESS, &wlvif->flags)) {
2123 struct ieee80211_vif *vif = wl12xx_wlvif_to_vif(wlvif);
2125 wl12xx_cmd_stop_channel_switch(wl);
2126 ieee80211_chswitch_done(vif, false);
2129 /* to stop listening to a channel, we disconnect */
2130 ret = wl12xx_cmd_role_stop_sta(wl, wlvif);
2134 /* reset TX security counters on a clean disconnect */
2135 wlvif->tx_security_last_seq_lsb = 0;
2136 wlvif->tx_security_seq = 0;
2142 static void wl1271_set_band_rate(struct wl1271 *wl, struct wl12xx_vif *wlvif)
2144 wlvif->basic_rate_set = wlvif->bitrate_masks[wlvif->band];
2145 wlvif->rate_set = wlvif->basic_rate_set;
2148 static int wl1271_sta_handle_idle(struct wl1271 *wl, struct wl12xx_vif *wlvif,
2152 bool cur_idle = !test_bit(WLVIF_FLAG_IN_USE, &wlvif->flags);
2154 if (idle == cur_idle)
2158 /* no need to croc if we weren't busy (e.g. during boot) */
2159 if (wl12xx_dev_role_started(wlvif)) {
2160 ret = wl12xx_stop_dev(wl, wlvif);
2165 wl1271_tx_min_rate_get(wl, wlvif->basic_rate_set);
2166 ret = wl1271_acx_sta_rate_policies(wl, wlvif);
2169 ret = wl1271_acx_keep_alive_config(
2170 wl, wlvif, CMD_TEMPL_KLV_IDX_NULL_DATA,
2171 ACX_KEEP_ALIVE_TPL_INVALID);
2174 clear_bit(WLVIF_FLAG_IN_USE, &wlvif->flags);
2176 /* The current firmware only supports sched_scan in idle */
2177 if (wl->sched_scanning) {
2178 wl1271_scan_sched_scan_stop(wl);
2179 ieee80211_sched_scan_stopped(wl->hw);
2182 ret = wl12xx_start_dev(wl, wlvif);
2185 set_bit(WLVIF_FLAG_IN_USE, &wlvif->flags);
2192 static int wl12xx_config_vif(struct wl1271 *wl, struct wl12xx_vif *wlvif,
2193 struct ieee80211_conf *conf, u32 changed)
2195 bool is_ap = (wlvif->bss_type == BSS_TYPE_AP_BSS);
2198 channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
2200 /* if the channel changes while joined, join again */
2201 if (changed & IEEE80211_CONF_CHANGE_CHANNEL &&
2202 ((wlvif->band != conf->channel->band) ||
2203 (wlvif->channel != channel))) {
2204 /* send all pending packets */
2205 wl1271_tx_work_locked(wl);
2206 wlvif->band = conf->channel->band;
2207 wlvif->channel = channel;
2211 * FIXME: the mac80211 should really provide a fixed
2212 * rate to use here. for now, just use the smallest
2213 * possible rate for the band as a fixed rate for
2214 * association frames and other control messages.
2216 if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags))
2217 wl1271_set_band_rate(wl, wlvif);
2220 wl1271_tx_min_rate_get(wl,
2221 wlvif->basic_rate_set);
2222 ret = wl1271_acx_sta_rate_policies(wl, wlvif);
2224 wl1271_warning("rate policy for channel "
2228 * change the ROC channel. do it only if we are
2229 * not idle. otherwise, CROC will be called
2232 if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED,
2234 wl12xx_dev_role_started(wlvif) &&
2235 !(conf->flags & IEEE80211_CONF_IDLE)) {
2236 ret = wl12xx_stop_dev(wl, wlvif);
2240 ret = wl12xx_start_dev(wl, wlvif);
2247 if ((changed & IEEE80211_CONF_CHANGE_PS) && !is_ap) {
2249 if ((conf->flags & IEEE80211_CONF_PS) &&
2250 test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags) &&
2251 !test_bit(WLVIF_FLAG_IN_PS, &wlvif->flags)) {
2256 if (wl->conf.conn.forced_ps) {
2257 ps_mode = STATION_POWER_SAVE_MODE;
2258 ps_mode_str = "forced";
2260 ps_mode = STATION_AUTO_PS_MODE;
2261 ps_mode_str = "auto";
2264 wl1271_debug(DEBUG_PSM, "%s ps enabled", ps_mode_str);
2266 ret = wl1271_ps_set_mode(wl, wlvif, ps_mode);
2269 wl1271_warning("enter %s ps failed %d",
2272 } else if (!(conf->flags & IEEE80211_CONF_PS) &&
2273 test_bit(WLVIF_FLAG_IN_PS, &wlvif->flags)) {
2275 wl1271_debug(DEBUG_PSM, "auto ps disabled");
2277 ret = wl1271_ps_set_mode(wl, wlvif,
2278 STATION_ACTIVE_MODE);
2280 wl1271_warning("exit auto ps failed %d", ret);
2284 if (conf->power_level != wlvif->power_level) {
2285 ret = wl1271_acx_tx_power(wl, wlvif, conf->power_level);
2289 wlvif->power_level = conf->power_level;
2295 static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed)
2297 struct wl1271 *wl = hw->priv;
2298 struct wl12xx_vif *wlvif;
2299 struct ieee80211_conf *conf = &hw->conf;
2300 int channel, ret = 0;
2302 channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
2304 wl1271_debug(DEBUG_MAC80211, "mac80211 config ch %d psm %s power %d %s"
2307 conf->flags & IEEE80211_CONF_PS ? "on" : "off",
2309 conf->flags & IEEE80211_CONF_IDLE ? "idle" : "in use",
2313 * mac80211 will go to idle nearly immediately after transmitting some
2314 * frames, such as the deauth. To make sure those frames reach the air,
2315 * wait here until the TX queue is fully flushed.
2317 if ((changed & IEEE80211_CONF_CHANGE_IDLE) &&
2318 (conf->flags & IEEE80211_CONF_IDLE))
2319 wl1271_tx_flush(wl);
2321 mutex_lock(&wl->mutex);
2323 /* we support configuring the channel and band even while off */
2324 if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
2325 wl->band = conf->channel->band;
2326 wl->channel = channel;
2329 if (changed & IEEE80211_CONF_CHANGE_POWER)
2330 wl->power_level = conf->power_level;
2332 if (unlikely(wl->state == WL1271_STATE_OFF))
2335 ret = wl1271_ps_elp_wakeup(wl);
2339 /* configure each interface */
2340 wl12xx_for_each_wlvif(wl, wlvif) {
2341 ret = wl12xx_config_vif(wl, wlvif, conf, changed);
2347 wl1271_ps_elp_sleep(wl);
2350 mutex_unlock(&wl->mutex);
2355 struct wl1271_filter_params {
2358 u8 mc_list[ACX_MC_ADDRESS_GROUP_MAX][ETH_ALEN];
2361 static u64 wl1271_op_prepare_multicast(struct ieee80211_hw *hw,
2362 struct netdev_hw_addr_list *mc_list)
2364 struct wl1271_filter_params *fp;
2365 struct netdev_hw_addr *ha;
2366 struct wl1271 *wl = hw->priv;
2368 if (unlikely(wl->state == WL1271_STATE_OFF))
2371 fp = kzalloc(sizeof(*fp), GFP_ATOMIC);
2373 wl1271_error("Out of memory setting filters.");
2377 /* update multicast filtering parameters */
2378 fp->mc_list_length = 0;
2379 if (netdev_hw_addr_list_count(mc_list) > ACX_MC_ADDRESS_GROUP_MAX) {
2380 fp->enabled = false;
2383 netdev_hw_addr_list_for_each(ha, mc_list) {
2384 memcpy(fp->mc_list[fp->mc_list_length],
2385 ha->addr, ETH_ALEN);
2386 fp->mc_list_length++;
2390 return (u64)(unsigned long)fp;
2393 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
2396 FIF_BCN_PRBRESP_PROMISC | \
2400 static void wl1271_op_configure_filter(struct ieee80211_hw *hw,
2401 unsigned int changed,
2402 unsigned int *total, u64 multicast)
2404 struct wl1271_filter_params *fp = (void *)(unsigned long)multicast;
2405 struct wl1271 *wl = hw->priv;
2406 struct wl12xx_vif *wlvif;
2410 wl1271_debug(DEBUG_MAC80211, "mac80211 configure filter changed %x"
2411 " total %x", changed, *total);
2413 mutex_lock(&wl->mutex);
2415 *total &= WL1271_SUPPORTED_FILTERS;
2416 changed &= WL1271_SUPPORTED_FILTERS;
2418 if (unlikely(wl->state == WL1271_STATE_OFF))
2421 ret = wl1271_ps_elp_wakeup(wl);
2425 wl12xx_for_each_wlvif(wl, wlvif) {
2426 if (wlvif->bss_type != BSS_TYPE_AP_BSS) {
2427 if (*total & FIF_ALLMULTI)
2428 ret = wl1271_acx_group_address_tbl(wl, wlvif,
2432 ret = wl1271_acx_group_address_tbl(wl, wlvif,
2435 fp->mc_list_length);
2442 * the fw doesn't provide an api to configure the filters. instead,
2443 * the filters configuration is based on the active roles / ROC
2448 wl1271_ps_elp_sleep(wl);
2451 mutex_unlock(&wl->mutex);
2455 static int wl1271_record_ap_key(struct wl1271 *wl, struct wl12xx_vif *wlvif,
2456 u8 id, u8 key_type, u8 key_size,
2457 const u8 *key, u8 hlid, u32 tx_seq_32,
2460 struct wl1271_ap_key *ap_key;
2463 wl1271_debug(DEBUG_CRYPT, "record ap key id %d", (int)id);
2465 if (key_size > MAX_KEY_SIZE)
2469 * Find next free entry in ap_keys. Also check we are not replacing
2472 for (i = 0; i < MAX_NUM_KEYS; i++) {
2473 if (wlvif->ap.recorded_keys[i] == NULL)
2476 if (wlvif->ap.recorded_keys[i]->id == id) {
2477 wl1271_warning("trying to record key replacement");
2482 if (i == MAX_NUM_KEYS)
2485 ap_key = kzalloc(sizeof(*ap_key), GFP_KERNEL);
2490 ap_key->key_type = key_type;
2491 ap_key->key_size = key_size;
2492 memcpy(ap_key->key, key, key_size);
2493 ap_key->hlid = hlid;
2494 ap_key->tx_seq_32 = tx_seq_32;
2495 ap_key->tx_seq_16 = tx_seq_16;
2497 wlvif->ap.recorded_keys[i] = ap_key;
2501 static void wl1271_free_ap_keys(struct wl1271 *wl, struct wl12xx_vif *wlvif)
2505 for (i = 0; i < MAX_NUM_KEYS; i++) {
2506 kfree(wlvif->ap.recorded_keys[i]);
2507 wlvif->ap.recorded_keys[i] = NULL;
2511 static int wl1271_ap_init_hwenc(struct wl1271 *wl, struct wl12xx_vif *wlvif)
2514 struct wl1271_ap_key *key;
2515 bool wep_key_added = false;
2517 for (i = 0; i < MAX_NUM_KEYS; i++) {
2519 if (wlvif->ap.recorded_keys[i] == NULL)
2522 key = wlvif->ap.recorded_keys[i];
2524 if (hlid == WL12XX_INVALID_LINK_ID)
2525 hlid = wlvif->ap.bcast_hlid;
2527 ret = wl1271_cmd_set_ap_key(wl, wlvif, KEY_ADD_OR_REPLACE,
2528 key->id, key->key_type,
2529 key->key_size, key->key,
2530 hlid, key->tx_seq_32,
2535 if (key->key_type == KEY_WEP)
2536 wep_key_added = true;
2539 if (wep_key_added) {
2540 ret = wl12xx_cmd_set_default_wep_key(wl, wlvif->default_key,
2541 wlvif->ap.bcast_hlid);
2547 wl1271_free_ap_keys(wl, wlvif);
2551 static int wl1271_set_key(struct wl1271 *wl, struct wl12xx_vif *wlvif,
2552 u16 action, u8 id, u8 key_type,
2553 u8 key_size, const u8 *key, u32 tx_seq_32,
2554 u16 tx_seq_16, struct ieee80211_sta *sta)
2557 bool is_ap = (wlvif->bss_type == BSS_TYPE_AP_BSS);
2560 * A role set to GEM cipher requires different Tx settings (namely
2561 * spare blocks). Note when we are in this mode so the HW can adjust.
2563 if (key_type == KEY_GEM) {
2564 if (action == KEY_ADD_OR_REPLACE)
2565 wlvif->is_gem = true;
2566 else if (action == KEY_REMOVE)
2567 wlvif->is_gem = false;
2571 struct wl1271_station *wl_sta;
2575 wl_sta = (struct wl1271_station *)sta->drv_priv;
2576 hlid = wl_sta->hlid;
2578 hlid = wlvif->ap.bcast_hlid;
2581 if (!test_bit(WLVIF_FLAG_AP_STARTED, &wlvif->flags)) {
2583 * We do not support removing keys after AP shutdown.
2584 * Pretend we do to make mac80211 happy.
2586 if (action != KEY_ADD_OR_REPLACE)
2589 ret = wl1271_record_ap_key(wl, wlvif, id,
2591 key, hlid, tx_seq_32,
2594 ret = wl1271_cmd_set_ap_key(wl, wlvif, action,
2595 id, key_type, key_size,
2596 key, hlid, tx_seq_32,
2604 static const u8 bcast_addr[ETH_ALEN] = {
2605 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
2608 addr = sta ? sta->addr : bcast_addr;
2610 if (is_zero_ether_addr(addr)) {
2611 /* We dont support TX only encryption */
2615 /* The wl1271 does not allow to remove unicast keys - they
2616 will be cleared automatically on next CMD_JOIN. Ignore the
2617 request silently, as we dont want the mac80211 to emit
2618 an error message. */
2619 if (action == KEY_REMOVE && !is_broadcast_ether_addr(addr))
2622 /* don't remove key if hlid was already deleted */
2623 if (action == KEY_REMOVE &&
2624 wlvif->sta.hlid == WL12XX_INVALID_LINK_ID)
2627 ret = wl1271_cmd_set_sta_key(wl, wlvif, action,
2628 id, key_type, key_size,
2629 key, addr, tx_seq_32,
2634 /* the default WEP key needs to be configured at least once */
2635 if (key_type == KEY_WEP) {
2636 ret = wl12xx_cmd_set_default_wep_key(wl,
2647 static int wl1271_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
2648 struct ieee80211_vif *vif,
2649 struct ieee80211_sta *sta,
2650 struct ieee80211_key_conf *key_conf)
2652 struct wl1271 *wl = hw->priv;
2653 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
2659 wl1271_debug(DEBUG_MAC80211, "mac80211 set key");
2661 wl1271_debug(DEBUG_CRYPT, "CMD: 0x%x sta: %p", cmd, sta);
2662 wl1271_debug(DEBUG_CRYPT, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
2663 key_conf->cipher, key_conf->keyidx,
2664 key_conf->keylen, key_conf->flags);
2665 wl1271_dump(DEBUG_CRYPT, "KEY: ", key_conf->key, key_conf->keylen);
2667 mutex_lock(&wl->mutex);
2669 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2674 ret = wl1271_ps_elp_wakeup(wl);
2678 switch (key_conf->cipher) {
2679 case WLAN_CIPHER_SUITE_WEP40:
2680 case WLAN_CIPHER_SUITE_WEP104:
2683 key_conf->hw_key_idx = key_conf->keyidx;
2685 case WLAN_CIPHER_SUITE_TKIP:
2686 key_type = KEY_TKIP;
2688 key_conf->hw_key_idx = key_conf->keyidx;
2689 tx_seq_32 = WL1271_TX_SECURITY_HI32(wlvif->tx_security_seq);
2690 tx_seq_16 = WL1271_TX_SECURITY_LO16(wlvif->tx_security_seq);
2692 case WLAN_CIPHER_SUITE_CCMP:
2695 key_conf->flags |= IEEE80211_KEY_FLAG_PUT_IV_SPACE;
2696 tx_seq_32 = WL1271_TX_SECURITY_HI32(wlvif->tx_security_seq);
2697 tx_seq_16 = WL1271_TX_SECURITY_LO16(wlvif->tx_security_seq);
2699 case WL1271_CIPHER_SUITE_GEM:
2701 tx_seq_32 = WL1271_TX_SECURITY_HI32(wlvif->tx_security_seq);
2702 tx_seq_16 = WL1271_TX_SECURITY_LO16(wlvif->tx_security_seq);
2705 wl1271_error("Unknown key algo 0x%x", key_conf->cipher);
2713 ret = wl1271_set_key(wl, wlvif, KEY_ADD_OR_REPLACE,
2714 key_conf->keyidx, key_type,
2715 key_conf->keylen, key_conf->key,
2716 tx_seq_32, tx_seq_16, sta);
2718 wl1271_error("Could not add or replace key");
2723 * reconfiguring arp response if the unicast (or common)
2724 * encryption key type was changed
2726 if (wlvif->bss_type == BSS_TYPE_STA_BSS &&
2727 (sta || key_type == KEY_WEP) &&
2728 wlvif->encryption_type != key_type) {
2729 wlvif->encryption_type = key_type;
2730 ret = wl1271_cmd_build_arp_rsp(wl, wlvif);
2732 wl1271_warning("build arp rsp failed: %d", ret);
2739 ret = wl1271_set_key(wl, wlvif, KEY_REMOVE,
2740 key_conf->keyidx, key_type,
2741 key_conf->keylen, key_conf->key,
2744 wl1271_error("Could not remove key");
2750 wl1271_error("Unsupported key cmd 0x%x", cmd);
2756 wl1271_ps_elp_sleep(wl);
2759 mutex_unlock(&wl->mutex);
2764 static int wl1271_op_hw_scan(struct ieee80211_hw *hw,
2765 struct ieee80211_vif *vif,
2766 struct cfg80211_scan_request *req)
2768 struct wl1271 *wl = hw->priv;
2773 wl1271_debug(DEBUG_MAC80211, "mac80211 hw scan");
2776 ssid = req->ssids[0].ssid;
2777 len = req->ssids[0].ssid_len;
2780 mutex_lock(&wl->mutex);
2782 if (wl->state == WL1271_STATE_OFF) {
2784 * We cannot return -EBUSY here because cfg80211 will expect
2785 * a call to ieee80211_scan_completed if we do - in this case
2786 * there won't be any call.
2792 ret = wl1271_ps_elp_wakeup(wl);
2796 /* fail if there is any role in ROC */
2797 if (find_first_bit(wl->roc_map, WL12XX_MAX_ROLES) < WL12XX_MAX_ROLES) {
2798 /* don't allow scanning right now */
2803 ret = wl1271_scan(hw->priv, vif, ssid, len, req);
2805 wl1271_ps_elp_sleep(wl);
2807 mutex_unlock(&wl->mutex);
2812 static void wl1271_op_cancel_hw_scan(struct ieee80211_hw *hw,
2813 struct ieee80211_vif *vif)
2815 struct wl1271 *wl = hw->priv;
2818 wl1271_debug(DEBUG_MAC80211, "mac80211 cancel hw scan");
2820 mutex_lock(&wl->mutex);
2822 if (wl->state == WL1271_STATE_OFF)
2825 if (wl->scan.state == WL1271_SCAN_STATE_IDLE)
2828 ret = wl1271_ps_elp_wakeup(wl);
2832 if (wl->scan.state != WL1271_SCAN_STATE_DONE) {
2833 ret = wl1271_scan_stop(wl);
2839 * Rearm the tx watchdog just before idling scan. This
2840 * prevents just-finished scans from triggering the watchdog
2842 wl12xx_rearm_tx_watchdog_locked(wl);
2844 wl->scan.state = WL1271_SCAN_STATE_IDLE;
2845 memset(wl->scan.scanned_ch, 0, sizeof(wl->scan.scanned_ch));
2846 wl->scan_vif = NULL;
2847 wl->scan.req = NULL;
2848 ieee80211_scan_completed(wl->hw, true);
2851 wl1271_ps_elp_sleep(wl);
2853 mutex_unlock(&wl->mutex);
2855 cancel_delayed_work_sync(&wl->scan_complete_work);
2858 static int wl1271_op_sched_scan_start(struct ieee80211_hw *hw,
2859 struct ieee80211_vif *vif,
2860 struct cfg80211_sched_scan_request *req,
2861 struct ieee80211_sched_scan_ies *ies)
2863 struct wl1271 *wl = hw->priv;
2864 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
2867 wl1271_debug(DEBUG_MAC80211, "wl1271_op_sched_scan_start");
2869 mutex_lock(&wl->mutex);
2871 if (wl->state == WL1271_STATE_OFF) {
2876 ret = wl1271_ps_elp_wakeup(wl);
2880 ret = wl1271_scan_sched_scan_config(wl, wlvif, req, ies);
2884 ret = wl1271_scan_sched_scan_start(wl, wlvif);
2888 wl->sched_scanning = true;
2891 wl1271_ps_elp_sleep(wl);
2893 mutex_unlock(&wl->mutex);
2897 static void wl1271_op_sched_scan_stop(struct ieee80211_hw *hw,
2898 struct ieee80211_vif *vif)
2900 struct wl1271 *wl = hw->priv;
2903 wl1271_debug(DEBUG_MAC80211, "wl1271_op_sched_scan_stop");
2905 mutex_lock(&wl->mutex);
2907 if (wl->state == WL1271_STATE_OFF)
2910 ret = wl1271_ps_elp_wakeup(wl);
2914 wl1271_scan_sched_scan_stop(wl);
2916 wl1271_ps_elp_sleep(wl);
2918 mutex_unlock(&wl->mutex);
2921 static int wl1271_op_set_frag_threshold(struct ieee80211_hw *hw, u32 value)
2923 struct wl1271 *wl = hw->priv;
2926 mutex_lock(&wl->mutex);
2928 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2933 ret = wl1271_ps_elp_wakeup(wl);
2937 ret = wl1271_acx_frag_threshold(wl, value);
2939 wl1271_warning("wl1271_op_set_frag_threshold failed: %d", ret);
2941 wl1271_ps_elp_sleep(wl);
2944 mutex_unlock(&wl->mutex);
2949 static int wl1271_op_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
2951 struct wl1271 *wl = hw->priv;
2952 struct wl12xx_vif *wlvif;
2955 mutex_lock(&wl->mutex);
2957 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2962 ret = wl1271_ps_elp_wakeup(wl);
2966 wl12xx_for_each_wlvif(wl, wlvif) {
2967 ret = wl1271_acx_rts_threshold(wl, wlvif, value);
2969 wl1271_warning("set rts threshold failed: %d", ret);
2971 wl1271_ps_elp_sleep(wl);
2974 mutex_unlock(&wl->mutex);
2979 static int wl1271_ssid_set(struct ieee80211_vif *vif, struct sk_buff *skb,
2982 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
2984 const u8 *ptr = cfg80211_find_ie(WLAN_EID_SSID, skb->data + offset,
2988 wl1271_error("No SSID in IEs!");
2993 if (ssid_len > IEEE80211_MAX_SSID_LEN) {
2994 wl1271_error("SSID is too long!");
2998 wlvif->ssid_len = ssid_len;
2999 memcpy(wlvif->ssid, ptr+2, ssid_len);
3003 static void wl12xx_remove_ie(struct sk_buff *skb, u8 eid, int ieoffset)
3006 const u8 *next, *end = skb->data + skb->len;
3007 u8 *ie = (u8 *)cfg80211_find_ie(eid, skb->data + ieoffset,
3008 skb->len - ieoffset);
3013 memmove(ie, next, end - next);
3014 skb_trim(skb, skb->len - len);
3017 static void wl12xx_remove_vendor_ie(struct sk_buff *skb,
3018 unsigned int oui, u8 oui_type,
3022 const u8 *next, *end = skb->data + skb->len;
3023 u8 *ie = (u8 *)cfg80211_find_vendor_ie(oui, oui_type,
3024 skb->data + ieoffset,
3025 skb->len - ieoffset);
3030 memmove(ie, next, end - next);
3031 skb_trim(skb, skb->len - len);
3034 static int wl1271_ap_set_probe_resp_tmpl(struct wl1271 *wl, u32 rates,
3035 struct ieee80211_vif *vif)
3037 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
3038 struct sk_buff *skb;
3041 skb = ieee80211_proberesp_get(wl->hw, vif);
3045 ret = wl1271_cmd_template_set(wl, wlvif->role_id,
3046 CMD_TEMPL_AP_PROBE_RESPONSE,
3055 static int wl1271_ap_set_probe_resp_tmpl_legacy(struct wl1271 *wl,
3056 struct ieee80211_vif *vif,
3058 size_t probe_rsp_len,
3061 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
3062 struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
3063 u8 probe_rsp_templ[WL1271_CMD_TEMPL_MAX_SIZE];
3064 int ssid_ie_offset, ie_offset, templ_len;
3067 /* no need to change probe response if the SSID is set correctly */
3068 if (wlvif->ssid_len > 0)
3069 return wl1271_cmd_template_set(wl, wlvif->role_id,
3070 CMD_TEMPL_AP_PROBE_RESPONSE,
3075 if (probe_rsp_len + bss_conf->ssid_len > WL1271_CMD_TEMPL_MAX_SIZE) {
3076 wl1271_error("probe_rsp template too big");
3080 /* start searching from IE offset */
3081 ie_offset = offsetof(struct ieee80211_mgmt, u.probe_resp.variable);
3083 ptr = cfg80211_find_ie(WLAN_EID_SSID, probe_rsp_data + ie_offset,
3084 probe_rsp_len - ie_offset);
3086 wl1271_error("No SSID in beacon!");
3090 ssid_ie_offset = ptr - probe_rsp_data;
3091 ptr += (ptr[1] + 2);
3093 memcpy(probe_rsp_templ, probe_rsp_data, ssid_ie_offset);
3095 /* insert SSID from bss_conf */
3096 probe_rsp_templ[ssid_ie_offset] = WLAN_EID_SSID;
3097 probe_rsp_templ[ssid_ie_offset + 1] = bss_conf->ssid_len;
3098 memcpy(probe_rsp_templ + ssid_ie_offset + 2,
3099 bss_conf->ssid, bss_conf->ssid_len);
3100 templ_len = ssid_ie_offset + 2 + bss_conf->ssid_len;
3102 memcpy(probe_rsp_templ + ssid_ie_offset + 2 + bss_conf->ssid_len,
3103 ptr, probe_rsp_len - (ptr - probe_rsp_data));
3104 templ_len += probe_rsp_len - (ptr - probe_rsp_data);
3106 return wl1271_cmd_template_set(wl, wlvif->role_id,
3107 CMD_TEMPL_AP_PROBE_RESPONSE,
3113 static int wl1271_bss_erp_info_changed(struct wl1271 *wl,
3114 struct ieee80211_vif *vif,
3115 struct ieee80211_bss_conf *bss_conf,
3118 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
3121 if (changed & BSS_CHANGED_ERP_SLOT) {
3122 if (bss_conf->use_short_slot)
3123 ret = wl1271_acx_slot(wl, wlvif, SLOT_TIME_SHORT);
3125 ret = wl1271_acx_slot(wl, wlvif, SLOT_TIME_LONG);
3127 wl1271_warning("Set slot time failed %d", ret);
3132 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
3133 if (bss_conf->use_short_preamble)
3134 wl1271_acx_set_preamble(wl, wlvif, ACX_PREAMBLE_SHORT);
3136 wl1271_acx_set_preamble(wl, wlvif, ACX_PREAMBLE_LONG);
3139 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
3140 if (bss_conf->use_cts_prot)
3141 ret = wl1271_acx_cts_protect(wl, wlvif,
3144 ret = wl1271_acx_cts_protect(wl, wlvif,
3145 CTSPROTECT_DISABLE);
3147 wl1271_warning("Set ctsprotect failed %d", ret);
3156 static int wl1271_bss_beacon_info_changed(struct wl1271 *wl,
3157 struct ieee80211_vif *vif,
3158 struct ieee80211_bss_conf *bss_conf,
3161 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
3162 bool is_ap = (wlvif->bss_type == BSS_TYPE_AP_BSS);
3165 if ((changed & BSS_CHANGED_BEACON_INT)) {
3166 wl1271_debug(DEBUG_MASTER, "beacon interval updated: %d",
3167 bss_conf->beacon_int);
3169 wlvif->beacon_int = bss_conf->beacon_int;
3172 if ((changed & BSS_CHANGED_AP_PROBE_RESP) && is_ap) {
3173 u32 rate = wl1271_tx_min_rate_get(wl, wlvif->basic_rate_set);
3174 if (!wl1271_ap_set_probe_resp_tmpl(wl, rate, vif)) {
3175 wl1271_debug(DEBUG_AP, "probe response updated");
3176 set_bit(WLVIF_FLAG_AP_PROBE_RESP_SET, &wlvif->flags);
3180 if ((changed & BSS_CHANGED_BEACON)) {
3181 struct ieee80211_hdr *hdr;
3183 int ieoffset = offsetof(struct ieee80211_mgmt,
3185 struct sk_buff *beacon = ieee80211_beacon_get(wl->hw, vif);
3193 wl1271_debug(DEBUG_MASTER, "beacon updated");
3195 ret = wl1271_ssid_set(vif, beacon, ieoffset);
3197 dev_kfree_skb(beacon);
3200 min_rate = wl1271_tx_min_rate_get(wl, wlvif->basic_rate_set);
3201 tmpl_id = is_ap ? CMD_TEMPL_AP_BEACON :
3203 ret = wl1271_cmd_template_set(wl, wlvif->role_id, tmpl_id,
3208 dev_kfree_skb(beacon);
3213 * In case we already have a probe-resp beacon set explicitly
3214 * by usermode, don't use the beacon data.
3216 if (test_bit(WLVIF_FLAG_AP_PROBE_RESP_SET, &wlvif->flags))
3219 /* remove TIM ie from probe response */
3220 wl12xx_remove_ie(beacon, WLAN_EID_TIM, ieoffset);
3223 * remove p2p ie from probe response.
3224 * the fw reponds to probe requests that don't include
3225 * the p2p ie. probe requests with p2p ie will be passed,
3226 * and will be responded by the supplicant (the spec
3227 * forbids including the p2p ie when responding to probe
3228 * requests that didn't include it).
3230 wl12xx_remove_vendor_ie(beacon, WLAN_OUI_WFA,
3231 WLAN_OUI_TYPE_WFA_P2P, ieoffset);
3233 hdr = (struct ieee80211_hdr *) beacon->data;
3234 hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
3235 IEEE80211_STYPE_PROBE_RESP);
3237 ret = wl1271_ap_set_probe_resp_tmpl_legacy(wl, vif,
3242 ret = wl1271_cmd_template_set(wl, wlvif->role_id,
3243 CMD_TEMPL_PROBE_RESPONSE,
3248 dev_kfree_skb(beacon);
3255 wl1271_error("beacon info change failed: %d", ret);
3259 /* AP mode changes */
3260 static void wl1271_bss_info_changed_ap(struct wl1271 *wl,
3261 struct ieee80211_vif *vif,
3262 struct ieee80211_bss_conf *bss_conf,
3265 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
3268 if ((changed & BSS_CHANGED_BASIC_RATES)) {
3269 u32 rates = bss_conf->basic_rates;
3271 wlvif->basic_rate_set = wl1271_tx_enabled_rates_get(wl, rates,
3273 wlvif->basic_rate = wl1271_tx_min_rate_get(wl,
3274 wlvif->basic_rate_set);
3276 ret = wl1271_init_ap_rates(wl, wlvif);
3278 wl1271_error("AP rate policy change failed %d", ret);
3282 ret = wl1271_ap_init_templates(wl, vif);
3287 ret = wl1271_bss_beacon_info_changed(wl, vif, bss_conf, changed);
3291 if ((changed & BSS_CHANGED_BEACON_ENABLED)) {
3292 if (bss_conf->enable_beacon) {
3293 if (!test_bit(WLVIF_FLAG_AP_STARTED, &wlvif->flags)) {
3294 ret = wl12xx_cmd_role_start_ap(wl, wlvif);
3298 ret = wl1271_ap_init_hwenc(wl, wlvif);
3302 set_bit(WLVIF_FLAG_AP_STARTED, &wlvif->flags);
3303 wl1271_debug(DEBUG_AP, "started AP");
3306 if (test_bit(WLVIF_FLAG_AP_STARTED, &wlvif->flags)) {
3307 ret = wl12xx_cmd_role_stop_ap(wl, wlvif);
3311 clear_bit(WLVIF_FLAG_AP_STARTED, &wlvif->flags);
3312 clear_bit(WLVIF_FLAG_AP_PROBE_RESP_SET,
3314 wl1271_debug(DEBUG_AP, "stopped AP");
3319 ret = wl1271_bss_erp_info_changed(wl, vif, bss_conf, changed);
3323 /* Handle HT information change */
3324 if ((changed & BSS_CHANGED_HT) &&
3325 (bss_conf->channel_type != NL80211_CHAN_NO_HT)) {
3326 ret = wl1271_acx_set_ht_information(wl, wlvif,
3327 bss_conf->ht_operation_mode);
3329 wl1271_warning("Set ht information failed %d", ret);
3338 /* STA/IBSS mode changes */
3339 static void wl1271_bss_info_changed_sta(struct wl1271 *wl,
3340 struct ieee80211_vif *vif,
3341 struct ieee80211_bss_conf *bss_conf,
3344 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
3345 bool do_join = false, set_assoc = false;
3346 bool is_ibss = (wlvif->bss_type == BSS_TYPE_IBSS);
3347 bool ibss_joined = false;
3348 u32 sta_rate_set = 0;
3350 struct ieee80211_sta *sta;
3351 bool sta_exists = false;
3352 struct ieee80211_sta_ht_cap sta_ht_cap;
3355 ret = wl1271_bss_beacon_info_changed(wl, vif, bss_conf,
3361 if (changed & BSS_CHANGED_IBSS) {
3362 if (bss_conf->ibss_joined) {
3363 set_bit(WLVIF_FLAG_IBSS_JOINED, &wlvif->flags);
3366 if (test_and_clear_bit(WLVIF_FLAG_IBSS_JOINED,
3368 wl1271_unjoin(wl, wlvif);
3372 if ((changed & BSS_CHANGED_BEACON_INT) && ibss_joined)
3375 /* Need to update the SSID (for filtering etc) */
3376 if ((changed & BSS_CHANGED_BEACON) && ibss_joined)
3379 if ((changed & BSS_CHANGED_BEACON_ENABLED) && ibss_joined) {
3380 wl1271_debug(DEBUG_ADHOC, "ad-hoc beaconing: %s",
3381 bss_conf->enable_beacon ? "enabled" : "disabled");
3386 if (changed & BSS_CHANGED_IDLE && !is_ibss) {
3387 ret = wl1271_sta_handle_idle(wl, wlvif, bss_conf->idle);
3389 wl1271_warning("idle mode change failed %d", ret);
3392 if ((changed & BSS_CHANGED_CQM)) {
3393 bool enable = false;
3394 if (bss_conf->cqm_rssi_thold)
3396 ret = wl1271_acx_rssi_snr_trigger(wl, wlvif, enable,
3397 bss_conf->cqm_rssi_thold,
3398 bss_conf->cqm_rssi_hyst);
3401 wlvif->rssi_thold = bss_conf->cqm_rssi_thold;
3404 if (changed & BSS_CHANGED_BSSID)
3405 if (!is_zero_ether_addr(bss_conf->bssid)) {
3406 ret = wl12xx_cmd_build_null_data(wl, wlvif);
3410 ret = wl1271_build_qos_null_data(wl, vif);
3415 if (changed & (BSS_CHANGED_ASSOC | BSS_CHANGED_HT)) {
3417 sta = ieee80211_find_sta(vif, bss_conf->bssid);
3421 /* save the supp_rates of the ap */
3422 sta_rate_set = sta->supp_rates[wl->hw->conf.channel->band];
3423 if (sta->ht_cap.ht_supported)
3425 (sta->ht_cap.mcs.rx_mask[0] << HW_HT_RATES_OFFSET);
3426 sta_ht_cap = sta->ht_cap;
3433 if ((changed & BSS_CHANGED_ASSOC)) {
3434 if (bss_conf->assoc) {
3437 wlvif->aid = bss_conf->aid;
3438 wlvif->beacon_int = bss_conf->beacon_int;
3443 * use basic rates from AP, and determine lowest rate
3444 * to use with control frames.
3446 rates = bss_conf->basic_rates;
3447 wlvif->basic_rate_set =
3448 wl1271_tx_enabled_rates_get(wl, rates,
3451 wl1271_tx_min_rate_get(wl,
3452 wlvif->basic_rate_set);
3455 wl1271_tx_enabled_rates_get(wl,
3458 ret = wl1271_acx_sta_rate_policies(wl, wlvif);
3463 * with wl1271, we don't need to update the
3464 * beacon_int and dtim_period, because the firmware
3465 * updates it by itself when the first beacon is
3466 * received after a join.
3468 ret = wl1271_cmd_build_ps_poll(wl, wlvif, wlvif->aid);
3473 * Get a template for hardware connection maintenance
3475 dev_kfree_skb(wlvif->probereq);
3476 wlvif->probereq = wl1271_cmd_build_ap_probe_req(wl,
3479 ieoffset = offsetof(struct ieee80211_mgmt,
3480 u.probe_req.variable);
3481 wl1271_ssid_set(vif, wlvif->probereq, ieoffset);
3483 /* enable the connection monitoring feature */
3484 ret = wl1271_acx_conn_monit_params(wl, wlvif, true);
3488 /* use defaults when not associated */
3490 !!test_and_clear_bit(WLVIF_FLAG_STA_ASSOCIATED,
3493 !!test_and_clear_bit(WLVIF_FLAG_STA_STATE_SENT,
3497 /* free probe-request template */
3498 dev_kfree_skb(wlvif->probereq);
3499 wlvif->probereq = NULL;
3501 /* revert back to minimum rates for the current band */
3502 wl1271_set_band_rate(wl, wlvif);
3504 wl1271_tx_min_rate_get(wl,
3505 wlvif->basic_rate_set);
3506 ret = wl1271_acx_sta_rate_policies(wl, wlvif);
3510 /* disable connection monitor features */
3511 ret = wl1271_acx_conn_monit_params(wl, wlvif, false);
3513 /* Disable the keep-alive feature */
3514 ret = wl1271_acx_keep_alive_mode(wl, wlvif, false);
3518 /* restore the bssid filter and go to dummy bssid */
3521 * we might have to disable roc, if there was
3522 * no IF_OPER_UP notification.
3525 ret = wl12xx_croc(wl, wlvif->role_id);
3530 * (we also need to disable roc in case of
3531 * roaming on the same channel. until we will
3532 * have a better flow...)
3534 if (test_bit(wlvif->dev_role_id, wl->roc_map)) {
3535 ret = wl12xx_croc(wl,
3536 wlvif->dev_role_id);
3541 wl1271_unjoin(wl, wlvif);
3542 if (!bss_conf->idle)
3543 wl12xx_start_dev(wl, wlvif);
3548 if (changed & BSS_CHANGED_IBSS) {
3549 wl1271_debug(DEBUG_ADHOC, "ibss_joined: %d",
3550 bss_conf->ibss_joined);
3552 if (bss_conf->ibss_joined) {
3553 u32 rates = bss_conf->basic_rates;
3554 wlvif->basic_rate_set =
3555 wl1271_tx_enabled_rates_get(wl, rates,
3558 wl1271_tx_min_rate_get(wl,
3559 wlvif->basic_rate_set);
3561 /* by default, use 11b + OFDM rates */
3562 wlvif->rate_set = CONF_TX_IBSS_DEFAULT_RATES;
3563 ret = wl1271_acx_sta_rate_policies(wl, wlvif);
3569 ret = wl1271_bss_erp_info_changed(wl, vif, bss_conf, changed);
3574 ret = wl1271_join(wl, wlvif, set_assoc);
3576 wl1271_warning("cmd join failed %d", ret);
3580 /* ROC until connected (after EAPOL exchange) */
3582 ret = wl12xx_roc(wl, wlvif, wlvif->role_id);
3586 if (test_bit(WLVIF_FLAG_STA_AUTHORIZED, &wlvif->flags))
3587 wl12xx_set_authorized(wl, wlvif);
3590 * stop device role if started (we might already be in
3593 if (wl12xx_dev_role_started(wlvif)) {
3594 ret = wl12xx_stop_dev(wl, wlvif);
3600 /* Handle new association with HT. Do this after join. */
3602 if ((changed & BSS_CHANGED_HT) &&
3603 (bss_conf->channel_type != NL80211_CHAN_NO_HT)) {
3604 ret = wl1271_acx_set_ht_capabilities(wl,
3609 wl1271_warning("Set ht cap true failed %d",
3614 /* handle new association without HT and disassociation */
3615 else if (changed & BSS_CHANGED_ASSOC) {
3616 ret = wl1271_acx_set_ht_capabilities(wl,
3621 wl1271_warning("Set ht cap false failed %d",
3628 /* Handle HT information change. Done after join. */
3629 if ((changed & BSS_CHANGED_HT) &&
3630 (bss_conf->channel_type != NL80211_CHAN_NO_HT)) {
3631 ret = wl1271_acx_set_ht_information(wl, wlvif,
3632 bss_conf->ht_operation_mode);
3634 wl1271_warning("Set ht information failed %d", ret);
3639 /* Handle arp filtering. Done after join. */
3640 if ((changed & BSS_CHANGED_ARP_FILTER) ||
3641 (!is_ibss && (changed & BSS_CHANGED_QOS))) {
3642 __be32 addr = bss_conf->arp_addr_list[0];
3643 wlvif->sta.qos = bss_conf->qos;
3644 WARN_ON(wlvif->bss_type != BSS_TYPE_STA_BSS);
3646 if (bss_conf->arp_addr_cnt == 1 &&
3647 bss_conf->arp_filter_enabled) {
3648 wlvif->ip_addr = addr;
3650 * The template should have been configured only upon
3651 * association. however, it seems that the correct ip
3652 * isn't being set (when sending), so we have to
3653 * reconfigure the template upon every ip change.
3655 ret = wl1271_cmd_build_arp_rsp(wl, wlvif);
3657 wl1271_warning("build arp rsp failed: %d", ret);
3661 ret = wl1271_acx_arp_ip_filter(wl, wlvif,
3662 (ACX_ARP_FILTER_ARP_FILTERING |
3663 ACX_ARP_FILTER_AUTO_ARP),
3667 ret = wl1271_acx_arp_ip_filter(wl, wlvif, 0, addr);
3678 static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
3679 struct ieee80211_vif *vif,
3680 struct ieee80211_bss_conf *bss_conf,
3683 struct wl1271 *wl = hw->priv;
3684 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
3685 bool is_ap = (wlvif->bss_type == BSS_TYPE_AP_BSS);
3688 wl1271_debug(DEBUG_MAC80211, "mac80211 bss info changed 0x%x",
3691 mutex_lock(&wl->mutex);
3693 if (unlikely(wl->state == WL1271_STATE_OFF))
3696 if (unlikely(!test_bit(WLVIF_FLAG_INITIALIZED, &wlvif->flags)))
3699 ret = wl1271_ps_elp_wakeup(wl);
3704 wl1271_bss_info_changed_ap(wl, vif, bss_conf, changed);
3706 wl1271_bss_info_changed_sta(wl, vif, bss_conf, changed);
3708 wl1271_ps_elp_sleep(wl);
3711 mutex_unlock(&wl->mutex);
3714 static int wl1271_op_conf_tx(struct ieee80211_hw *hw,
3715 struct ieee80211_vif *vif, u16 queue,
3716 const struct ieee80211_tx_queue_params *params)
3718 struct wl1271 *wl = hw->priv;
3719 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
3723 mutex_lock(&wl->mutex);
3725 wl1271_debug(DEBUG_MAC80211, "mac80211 conf tx %d", queue);
3728 ps_scheme = CONF_PS_SCHEME_UPSD_TRIGGER;
3730 ps_scheme = CONF_PS_SCHEME_LEGACY;
3732 if (!test_bit(WLVIF_FLAG_INITIALIZED, &wlvif->flags))
3735 ret = wl1271_ps_elp_wakeup(wl);
3740 * the txop is confed in units of 32us by the mac80211,
3743 ret = wl1271_acx_ac_cfg(wl, wlvif, wl1271_tx_get_queue(queue),
3744 params->cw_min, params->cw_max,
3745 params->aifs, params->txop << 5);
3749 ret = wl1271_acx_tid_cfg(wl, wlvif, wl1271_tx_get_queue(queue),
3750 CONF_CHANNEL_TYPE_EDCF,
3751 wl1271_tx_get_queue(queue),
3752 ps_scheme, CONF_ACK_POLICY_LEGACY,
3756 wl1271_ps_elp_sleep(wl);
3759 mutex_unlock(&wl->mutex);
3764 static u64 wl1271_op_get_tsf(struct ieee80211_hw *hw,
3765 struct ieee80211_vif *vif)
3768 struct wl1271 *wl = hw->priv;
3769 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
3770 u64 mactime = ULLONG_MAX;
3773 wl1271_debug(DEBUG_MAC80211, "mac80211 get tsf");
3775 mutex_lock(&wl->mutex);
3777 if (unlikely(wl->state == WL1271_STATE_OFF))
3780 ret = wl1271_ps_elp_wakeup(wl);
3784 ret = wl12xx_acx_tsf_info(wl, wlvif, &mactime);
3789 wl1271_ps_elp_sleep(wl);
3792 mutex_unlock(&wl->mutex);
3796 static int wl1271_op_get_survey(struct ieee80211_hw *hw, int idx,
3797 struct survey_info *survey)
3799 struct wl1271 *wl = hw->priv;
3800 struct ieee80211_conf *conf = &hw->conf;
3805 survey->channel = conf->channel;
3806 survey->filled = SURVEY_INFO_NOISE_DBM;
3807 survey->noise = wl->noise;
3812 static int wl1271_allocate_sta(struct wl1271 *wl,
3813 struct wl12xx_vif *wlvif,
3814 struct ieee80211_sta *sta)
3816 struct wl1271_station *wl_sta;
3820 if (wl->active_sta_count >= AP_MAX_STATIONS) {
3821 wl1271_warning("could not allocate HLID - too much stations");
3825 wl_sta = (struct wl1271_station *)sta->drv_priv;
3826 ret = wl12xx_allocate_link(wl, wlvif, &wl_sta->hlid);
3828 wl1271_warning("could not allocate HLID - too many links");
3832 set_bit(wl_sta->hlid, wlvif->ap.sta_hlid_map);
3833 memcpy(wl->links[wl_sta->hlid].addr, sta->addr, ETH_ALEN);
3834 wl->active_sta_count++;
3838 void wl1271_free_sta(struct wl1271 *wl, struct wl12xx_vif *wlvif, u8 hlid)
3840 if (!test_bit(hlid, wlvif->ap.sta_hlid_map))
3843 clear_bit(hlid, wlvif->ap.sta_hlid_map);
3844 memset(wl->links[hlid].addr, 0, ETH_ALEN);
3845 wl->links[hlid].ba_bitmap = 0;
3846 __clear_bit(hlid, &wl->ap_ps_map);
3847 __clear_bit(hlid, (unsigned long *)&wl->ap_fw_ps_map);
3848 wl12xx_free_link(wl, wlvif, &hlid);
3849 wl->active_sta_count--;
3852 * rearm the tx watchdog when the last STA is freed - give the FW a
3853 * chance to return STA-buffered packets before complaining.
3855 if (wl->active_sta_count == 0)
3856 wl12xx_rearm_tx_watchdog_locked(wl);
3859 static int wl12xx_sta_add(struct wl1271 *wl,
3860 struct wl12xx_vif *wlvif,
3861 struct ieee80211_sta *sta)
3863 struct wl1271_station *wl_sta;
3867 wl1271_debug(DEBUG_MAC80211, "mac80211 add sta %d", (int)sta->aid);
3869 ret = wl1271_allocate_sta(wl, wlvif, sta);
3873 wl_sta = (struct wl1271_station *)sta->drv_priv;
3874 hlid = wl_sta->hlid;
3876 ret = wl12xx_cmd_add_peer(wl, wlvif, sta, hlid);
3878 wl1271_free_sta(wl, wlvif, hlid);
3883 static int wl12xx_sta_remove(struct wl1271 *wl,
3884 struct wl12xx_vif *wlvif,
3885 struct ieee80211_sta *sta)
3887 struct wl1271_station *wl_sta;
3890 wl1271_debug(DEBUG_MAC80211, "mac80211 remove sta %d", (int)sta->aid);
3892 wl_sta = (struct wl1271_station *)sta->drv_priv;
3894 if (WARN_ON(!test_bit(id, wlvif->ap.sta_hlid_map)))
3897 ret = wl12xx_cmd_remove_peer(wl, wl_sta->hlid);
3901 wl1271_free_sta(wl, wlvif, wl_sta->hlid);
3905 static int wl12xx_update_sta_state(struct wl1271 *wl,
3906 struct wl12xx_vif *wlvif,
3907 struct ieee80211_sta *sta,
3908 enum ieee80211_sta_state old_state,
3909 enum ieee80211_sta_state new_state)
3911 struct wl1271_station *wl_sta;
3913 bool is_ap = wlvif->bss_type == BSS_TYPE_AP_BSS;
3914 bool is_sta = wlvif->bss_type == BSS_TYPE_STA_BSS;
3917 wl_sta = (struct wl1271_station *)sta->drv_priv;
3918 hlid = wl_sta->hlid;
3920 /* Add station (AP mode) */
3922 old_state == IEEE80211_STA_NOTEXIST &&
3923 new_state == IEEE80211_STA_NONE)
3924 return wl12xx_sta_add(wl, wlvif, sta);
3926 /* Remove station (AP mode) */
3928 old_state == IEEE80211_STA_NONE &&
3929 new_state == IEEE80211_STA_NOTEXIST) {
3931 wl12xx_sta_remove(wl, wlvif, sta);
3935 /* Authorize station (AP mode) */
3937 new_state == IEEE80211_STA_AUTHORIZED) {
3938 ret = wl12xx_cmd_set_peer_state(wl, hlid);
3942 ret = wl1271_acx_set_ht_capabilities(wl, &sta->ht_cap, true,
3947 /* Authorize station */
3949 new_state == IEEE80211_STA_AUTHORIZED) {
3950 set_bit(WLVIF_FLAG_STA_AUTHORIZED, &wlvif->flags);
3951 return wl12xx_set_authorized(wl, wlvif);
3955 old_state == IEEE80211_STA_AUTHORIZED &&
3956 new_state == IEEE80211_STA_ASSOC) {
3957 clear_bit(WLVIF_FLAG_STA_AUTHORIZED, &wlvif->flags);
3964 static int wl12xx_op_sta_state(struct ieee80211_hw *hw,
3965 struct ieee80211_vif *vif,
3966 struct ieee80211_sta *sta,
3967 enum ieee80211_sta_state old_state,
3968 enum ieee80211_sta_state new_state)
3970 struct wl1271 *wl = hw->priv;
3971 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
3974 wl1271_debug(DEBUG_MAC80211, "mac80211 sta %d state=%d->%d",
3975 sta->aid, old_state, new_state);
3977 mutex_lock(&wl->mutex);
3979 if (unlikely(wl->state == WL1271_STATE_OFF)) {
3984 ret = wl1271_ps_elp_wakeup(wl);
3988 ret = wl12xx_update_sta_state(wl, wlvif, sta, old_state, new_state);
3990 wl1271_ps_elp_sleep(wl);
3992 mutex_unlock(&wl->mutex);
3993 if (new_state < old_state)
3998 static int wl1271_op_ampdu_action(struct ieee80211_hw *hw,
3999 struct ieee80211_vif *vif,
4000 enum ieee80211_ampdu_mlme_action action,
4001 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
4004 struct wl1271 *wl = hw->priv;
4005 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
4007 u8 hlid, *ba_bitmap;
4009 wl1271_debug(DEBUG_MAC80211, "mac80211 ampdu action %d tid %d", action,
4012 /* sanity check - the fields in FW are only 8bits wide */
4013 if (WARN_ON(tid > 0xFF))
4016 mutex_lock(&wl->mutex);
4018 if (unlikely(wl->state == WL1271_STATE_OFF)) {
4023 if (wlvif->bss_type == BSS_TYPE_STA_BSS) {
4024 hlid = wlvif->sta.hlid;
4025 ba_bitmap = &wlvif->sta.ba_rx_bitmap;
4026 } else if (wlvif->bss_type == BSS_TYPE_AP_BSS) {
4027 struct wl1271_station *wl_sta;
4029 wl_sta = (struct wl1271_station *)sta->drv_priv;
4030 hlid = wl_sta->hlid;
4031 ba_bitmap = &wl->links[hlid].ba_bitmap;
4037 ret = wl1271_ps_elp_wakeup(wl);
4041 wl1271_debug(DEBUG_MAC80211, "mac80211 ampdu: Rx tid %d action %d",
4045 case IEEE80211_AMPDU_RX_START:
4046 if (!wlvif->ba_support || !wlvif->ba_allowed) {
4051 if (wl->ba_rx_session_count >= RX_BA_MAX_SESSIONS) {
4053 wl1271_error("exceeded max RX BA sessions");
4057 if (*ba_bitmap & BIT(tid)) {
4059 wl1271_error("cannot enable RX BA session on active "
4064 ret = wl12xx_acx_set_ba_receiver_session(wl, tid, *ssn, true,
4067 *ba_bitmap |= BIT(tid);
4068 wl->ba_rx_session_count++;
4072 case IEEE80211_AMPDU_RX_STOP:
4073 if (!(*ba_bitmap & BIT(tid))) {
4075 wl1271_error("no active RX BA session on tid: %d",
4080 ret = wl12xx_acx_set_ba_receiver_session(wl, tid, 0, false,
4083 *ba_bitmap &= ~BIT(tid);
4084 wl->ba_rx_session_count--;
4089 * The BA initiator session management in FW independently.
4090 * Falling break here on purpose for all TX APDU commands.
4092 case IEEE80211_AMPDU_TX_START:
4093 case IEEE80211_AMPDU_TX_STOP:
4094 case IEEE80211_AMPDU_TX_OPERATIONAL:
4099 wl1271_error("Incorrect ampdu action id=%x\n", action);
4103 wl1271_ps_elp_sleep(wl);
4106 mutex_unlock(&wl->mutex);
4111 static int wl12xx_set_bitrate_mask(struct ieee80211_hw *hw,
4112 struct ieee80211_vif *vif,
4113 const struct cfg80211_bitrate_mask *mask)
4115 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
4116 struct wl1271 *wl = hw->priv;
4119 wl1271_debug(DEBUG_MAC80211, "mac80211 set_bitrate_mask 0x%x 0x%x",
4120 mask->control[NL80211_BAND_2GHZ].legacy,
4121 mask->control[NL80211_BAND_5GHZ].legacy);
4123 mutex_lock(&wl->mutex);
4125 for (i = 0; i < IEEE80211_NUM_BANDS; i++)
4126 wlvif->bitrate_masks[i] =
4127 wl1271_tx_enabled_rates_get(wl,
4128 mask->control[i].legacy,
4131 if (unlikely(wl->state == WL1271_STATE_OFF))
4134 if (wlvif->bss_type == BSS_TYPE_STA_BSS &&
4135 !test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags)) {
4137 ret = wl1271_ps_elp_wakeup(wl);
4141 wl1271_set_band_rate(wl, wlvif);
4143 wl1271_tx_min_rate_get(wl, wlvif->basic_rate_set);
4144 ret = wl1271_acx_sta_rate_policies(wl, wlvif);
4146 wl1271_ps_elp_sleep(wl);
4149 mutex_unlock(&wl->mutex);
4154 static void wl12xx_op_channel_switch(struct ieee80211_hw *hw,
4155 struct ieee80211_channel_switch *ch_switch)
4157 struct wl1271 *wl = hw->priv;
4158 struct wl12xx_vif *wlvif;
4161 wl1271_debug(DEBUG_MAC80211, "mac80211 channel switch");
4163 wl1271_tx_flush(wl);
4165 mutex_lock(&wl->mutex);
4167 if (unlikely(wl->state == WL1271_STATE_OFF)) {
4168 wl12xx_for_each_wlvif_sta(wl, wlvif) {
4169 struct ieee80211_vif *vif = wl12xx_wlvif_to_vif(wlvif);
4170 ieee80211_chswitch_done(vif, false);
4175 ret = wl1271_ps_elp_wakeup(wl);
4179 /* TODO: change mac80211 to pass vif as param */
4180 wl12xx_for_each_wlvif_sta(wl, wlvif) {
4181 ret = wl12xx_cmd_channel_switch(wl, wlvif, ch_switch);
4184 set_bit(WLVIF_FLAG_CS_PROGRESS, &wlvif->flags);
4187 wl1271_ps_elp_sleep(wl);
4190 mutex_unlock(&wl->mutex);
4193 static bool wl1271_tx_frames_pending(struct ieee80211_hw *hw)
4195 struct wl1271 *wl = hw->priv;
4198 mutex_lock(&wl->mutex);
4200 if (unlikely(wl->state == WL1271_STATE_OFF))
4203 /* packets are considered pending if in the TX queue or the FW */
4204 ret = (wl1271_tx_total_queue_count(wl) > 0) || (wl->tx_frames_cnt > 0);
4206 mutex_unlock(&wl->mutex);
4211 /* can't be const, mac80211 writes to this */
4212 static struct ieee80211_rate wl1271_rates[] = {
4214 .hw_value = CONF_HW_BIT_RATE_1MBPS,
4215 .hw_value_short = CONF_HW_BIT_RATE_1MBPS, },
4217 .hw_value = CONF_HW_BIT_RATE_2MBPS,
4218 .hw_value_short = CONF_HW_BIT_RATE_2MBPS,
4219 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
4221 .hw_value = CONF_HW_BIT_RATE_5_5MBPS,
4222 .hw_value_short = CONF_HW_BIT_RATE_5_5MBPS,
4223 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
4225 .hw_value = CONF_HW_BIT_RATE_11MBPS,
4226 .hw_value_short = CONF_HW_BIT_RATE_11MBPS,
4227 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
4229 .hw_value = CONF_HW_BIT_RATE_6MBPS,
4230 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
4232 .hw_value = CONF_HW_BIT_RATE_9MBPS,
4233 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
4235 .hw_value = CONF_HW_BIT_RATE_12MBPS,
4236 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
4238 .hw_value = CONF_HW_BIT_RATE_18MBPS,
4239 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
4241 .hw_value = CONF_HW_BIT_RATE_24MBPS,
4242 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
4244 .hw_value = CONF_HW_BIT_RATE_36MBPS,
4245 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
4247 .hw_value = CONF_HW_BIT_RATE_48MBPS,
4248 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
4250 .hw_value = CONF_HW_BIT_RATE_54MBPS,
4251 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
4254 /* can't be const, mac80211 writes to this */
4255 static struct ieee80211_channel wl1271_channels[] = {
4256 { .hw_value = 1, .center_freq = 2412, .max_power = 25 },
4257 { .hw_value = 2, .center_freq = 2417, .max_power = 25 },
4258 { .hw_value = 3, .center_freq = 2422, .max_power = 25 },
4259 { .hw_value = 4, .center_freq = 2427, .max_power = 25 },
4260 { .hw_value = 5, .center_freq = 2432, .max_power = 25 },
4261 { .hw_value = 6, .center_freq = 2437, .max_power = 25 },
4262 { .hw_value = 7, .center_freq = 2442, .max_power = 25 },
4263 { .hw_value = 8, .center_freq = 2447, .max_power = 25 },
4264 { .hw_value = 9, .center_freq = 2452, .max_power = 25 },
4265 { .hw_value = 10, .center_freq = 2457, .max_power = 25 },
4266 { .hw_value = 11, .center_freq = 2462, .max_power = 25 },
4267 { .hw_value = 12, .center_freq = 2467, .max_power = 25 },
4268 { .hw_value = 13, .center_freq = 2472, .max_power = 25 },
4269 { .hw_value = 14, .center_freq = 2484, .max_power = 25 },
4272 /* can't be const, mac80211 writes to this */
4273 static struct ieee80211_supported_band wl1271_band_2ghz = {
4274 .channels = wl1271_channels,
4275 .n_channels = ARRAY_SIZE(wl1271_channels),
4276 .bitrates = wl1271_rates,
4277 .n_bitrates = ARRAY_SIZE(wl1271_rates),
4280 /* 5 GHz data rates for WL1273 */
4281 static struct ieee80211_rate wl1271_rates_5ghz[] = {
4283 .hw_value = CONF_HW_BIT_RATE_6MBPS,
4284 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
4286 .hw_value = CONF_HW_BIT_RATE_9MBPS,
4287 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
4289 .hw_value = CONF_HW_BIT_RATE_12MBPS,
4290 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
4292 .hw_value = CONF_HW_BIT_RATE_18MBPS,
4293 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
4295 .hw_value = CONF_HW_BIT_RATE_24MBPS,
4296 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
4298 .hw_value = CONF_HW_BIT_RATE_36MBPS,
4299 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
4301 .hw_value = CONF_HW_BIT_RATE_48MBPS,
4302 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
4304 .hw_value = CONF_HW_BIT_RATE_54MBPS,
4305 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
4308 /* 5 GHz band channels for WL1273 */
4309 static struct ieee80211_channel wl1271_channels_5ghz[] = {
4310 { .hw_value = 7, .center_freq = 5035, .max_power = 25 },
4311 { .hw_value = 8, .center_freq = 5040, .max_power = 25 },
4312 { .hw_value = 9, .center_freq = 5045, .max_power = 25 },
4313 { .hw_value = 11, .center_freq = 5055, .max_power = 25 },
4314 { .hw_value = 12, .center_freq = 5060, .max_power = 25 },
4315 { .hw_value = 16, .center_freq = 5080, .max_power = 25 },
4316 { .hw_value = 34, .center_freq = 5170, .max_power = 25 },
4317 { .hw_value = 36, .center_freq = 5180, .max_power = 25 },
4318 { .hw_value = 38, .center_freq = 5190, .max_power = 25 },
4319 { .hw_value = 40, .center_freq = 5200, .max_power = 25 },
4320 { .hw_value = 42, .center_freq = 5210, .max_power = 25 },
4321 { .hw_value = 44, .center_freq = 5220, .max_power = 25 },
4322 { .hw_value = 46, .center_freq = 5230, .max_power = 25 },
4323 { .hw_value = 48, .center_freq = 5240, .max_power = 25 },
4324 { .hw_value = 52, .center_freq = 5260, .max_power = 25 },
4325 { .hw_value = 56, .center_freq = 5280, .max_power = 25 },
4326 { .hw_value = 60, .center_freq = 5300, .max_power = 25 },
4327 { .hw_value = 64, .center_freq = 5320, .max_power = 25 },
4328 { .hw_value = 100, .center_freq = 5500, .max_power = 25 },
4329 { .hw_value = 104, .center_freq = 5520, .max_power = 25 },
4330 { .hw_value = 108, .center_freq = 5540, .max_power = 25 },
4331 { .hw_value = 112, .center_freq = 5560, .max_power = 25 },
4332 { .hw_value = 116, .center_freq = 5580, .max_power = 25 },
4333 { .hw_value = 120, .center_freq = 5600, .max_power = 25 },
4334 { .hw_value = 124, .center_freq = 5620, .max_power = 25 },
4335 { .hw_value = 128, .center_freq = 5640, .max_power = 25 },
4336 { .hw_value = 132, .center_freq = 5660, .max_power = 25 },
4337 { .hw_value = 136, .center_freq = 5680, .max_power = 25 },
4338 { .hw_value = 140, .center_freq = 5700, .max_power = 25 },
4339 { .hw_value = 149, .center_freq = 5745, .max_power = 25 },
4340 { .hw_value = 153, .center_freq = 5765, .max_power = 25 },
4341 { .hw_value = 157, .center_freq = 5785, .max_power = 25 },
4342 { .hw_value = 161, .center_freq = 5805, .max_power = 25 },
4343 { .hw_value = 165, .center_freq = 5825, .max_power = 25 },
4346 static struct ieee80211_supported_band wl1271_band_5ghz = {
4347 .channels = wl1271_channels_5ghz,
4348 .n_channels = ARRAY_SIZE(wl1271_channels_5ghz),
4349 .bitrates = wl1271_rates_5ghz,
4350 .n_bitrates = ARRAY_SIZE(wl1271_rates_5ghz),
4353 static const struct ieee80211_ops wl1271_ops = {
4354 .start = wl1271_op_start,
4355 .stop = wl1271_op_stop,
4356 .add_interface = wl1271_op_add_interface,
4357 .remove_interface = wl1271_op_remove_interface,
4358 .change_interface = wl12xx_op_change_interface,
4360 .suspend = wl1271_op_suspend,
4361 .resume = wl1271_op_resume,
4363 .config = wl1271_op_config,
4364 .prepare_multicast = wl1271_op_prepare_multicast,
4365 .configure_filter = wl1271_op_configure_filter,
4367 .set_key = wl1271_op_set_key,
4368 .hw_scan = wl1271_op_hw_scan,
4369 .cancel_hw_scan = wl1271_op_cancel_hw_scan,
4370 .sched_scan_start = wl1271_op_sched_scan_start,
4371 .sched_scan_stop = wl1271_op_sched_scan_stop,
4372 .bss_info_changed = wl1271_op_bss_info_changed,
4373 .set_frag_threshold = wl1271_op_set_frag_threshold,
4374 .set_rts_threshold = wl1271_op_set_rts_threshold,
4375 .conf_tx = wl1271_op_conf_tx,
4376 .get_tsf = wl1271_op_get_tsf,
4377 .get_survey = wl1271_op_get_survey,
4378 .sta_state = wl12xx_op_sta_state,
4379 .ampdu_action = wl1271_op_ampdu_action,
4380 .tx_frames_pending = wl1271_tx_frames_pending,
4381 .set_bitrate_mask = wl12xx_set_bitrate_mask,
4382 .channel_switch = wl12xx_op_channel_switch,
4383 CFG80211_TESTMODE_CMD(wl1271_tm_cmd)
4387 u8 wlcore_rate_to_idx(struct wl1271 *wl, u8 rate, enum ieee80211_band band)
4393 if (unlikely(rate >= wl->hw_tx_rate_tbl_size)) {
4394 wl1271_error("Illegal RX rate from HW: %d", rate);
4398 idx = wl->band_rate_to_idx[band][rate];
4399 if (unlikely(idx == CONF_HW_RXTX_RATE_UNSUPPORTED)) {
4400 wl1271_error("Unsupported RX rate from HW: %d", rate);
4407 static ssize_t wl1271_sysfs_show_bt_coex_state(struct device *dev,
4408 struct device_attribute *attr,
4411 struct wl1271 *wl = dev_get_drvdata(dev);
4416 mutex_lock(&wl->mutex);
4417 len = snprintf(buf, len, "%d\n\n0 - off\n1 - on\n",
4419 mutex_unlock(&wl->mutex);
4425 static ssize_t wl1271_sysfs_store_bt_coex_state(struct device *dev,
4426 struct device_attribute *attr,
4427 const char *buf, size_t count)
4429 struct wl1271 *wl = dev_get_drvdata(dev);
4433 ret = kstrtoul(buf, 10, &res);
4435 wl1271_warning("incorrect value written to bt_coex_mode");
4439 mutex_lock(&wl->mutex);
4443 if (res == wl->sg_enabled)
4446 wl->sg_enabled = res;
4448 if (wl->state == WL1271_STATE_OFF)
4451 ret = wl1271_ps_elp_wakeup(wl);
4455 wl1271_acx_sg_enable(wl, wl->sg_enabled);
4456 wl1271_ps_elp_sleep(wl);
4459 mutex_unlock(&wl->mutex);
4463 static DEVICE_ATTR(bt_coex_state, S_IRUGO | S_IWUSR,
4464 wl1271_sysfs_show_bt_coex_state,
4465 wl1271_sysfs_store_bt_coex_state);
4467 static ssize_t wl1271_sysfs_show_hw_pg_ver(struct device *dev,
4468 struct device_attribute *attr,
4471 struct wl1271 *wl = dev_get_drvdata(dev);
4476 mutex_lock(&wl->mutex);
4477 if (wl->hw_pg_ver >= 0)
4478 len = snprintf(buf, len, "%d\n", wl->hw_pg_ver);
4480 len = snprintf(buf, len, "n/a\n");
4481 mutex_unlock(&wl->mutex);
4486 static DEVICE_ATTR(hw_pg_ver, S_IRUGO,
4487 wl1271_sysfs_show_hw_pg_ver, NULL);
4489 static ssize_t wl1271_sysfs_read_fwlog(struct file *filp, struct kobject *kobj,
4490 struct bin_attribute *bin_attr,
4491 char *buffer, loff_t pos, size_t count)
4493 struct device *dev = container_of(kobj, struct device, kobj);
4494 struct wl1271 *wl = dev_get_drvdata(dev);
4498 ret = mutex_lock_interruptible(&wl->mutex);
4500 return -ERESTARTSYS;
4502 /* Let only one thread read the log at a time, blocking others */
4503 while (wl->fwlog_size == 0) {
4506 prepare_to_wait_exclusive(&wl->fwlog_waitq,
4508 TASK_INTERRUPTIBLE);
4510 if (wl->fwlog_size != 0) {
4511 finish_wait(&wl->fwlog_waitq, &wait);
4515 mutex_unlock(&wl->mutex);
4518 finish_wait(&wl->fwlog_waitq, &wait);
4520 if (signal_pending(current))
4521 return -ERESTARTSYS;
4523 ret = mutex_lock_interruptible(&wl->mutex);
4525 return -ERESTARTSYS;
4528 /* Check if the fwlog is still valid */
4529 if (wl->fwlog_size < 0) {
4530 mutex_unlock(&wl->mutex);
4534 /* Seeking is not supported - old logs are not kept. Disregard pos. */
4535 len = min(count, (size_t)wl->fwlog_size);
4536 wl->fwlog_size -= len;
4537 memcpy(buffer, wl->fwlog, len);
4539 /* Make room for new messages */
4540 memmove(wl->fwlog, wl->fwlog + len, wl->fwlog_size);
4542 mutex_unlock(&wl->mutex);
4547 static struct bin_attribute fwlog_attr = {
4548 .attr = {.name = "fwlog", .mode = S_IRUSR},
4549 .read = wl1271_sysfs_read_fwlog,
4552 static void wl12xx_derive_mac_addresses(struct wl1271 *wl,
4553 u32 oui, u32 nic, int n)
4557 wl1271_debug(DEBUG_PROBE, "base address: oui %06x nic %06x, n %d",
4560 if (nic + n - 1 > 0xffffff)
4561 wl1271_warning("NIC part of the MAC address wraps around!");
4563 for (i = 0; i < n; i++) {
4564 wl->addresses[i].addr[0] = (u8)(oui >> 16);
4565 wl->addresses[i].addr[1] = (u8)(oui >> 8);
4566 wl->addresses[i].addr[2] = (u8) oui;
4567 wl->addresses[i].addr[3] = (u8)(nic >> 16);
4568 wl->addresses[i].addr[4] = (u8)(nic >> 8);
4569 wl->addresses[i].addr[5] = (u8) nic;
4573 wl->hw->wiphy->n_addresses = n;
4574 wl->hw->wiphy->addresses = wl->addresses;
4577 static int wl12xx_get_hw_info(struct wl1271 *wl)
4581 ret = wl12xx_set_power_on(wl);
4585 wl->chip.id = wlcore_read_reg(wl, REG_CHIP_ID_B);
4587 wl->fuse_oui_addr = 0;
4588 wl->fuse_nic_addr = 0;
4590 wl->hw_pg_ver = wl->ops->get_pg_ver(wl);
4592 if (wl->ops->get_mac)
4593 wl->ops->get_mac(wl);
4595 wl1271_power_off(wl);
4600 static int wl1271_register_hw(struct wl1271 *wl)
4603 u32 oui_addr = 0, nic_addr = 0;
4605 if (wl->mac80211_registered)
4608 ret = wl12xx_get_hw_info(wl);
4610 wl1271_error("couldn't get hw info");
4614 ret = wl1271_fetch_nvs(wl);
4616 /* NOTE: The wl->nvs->nvs element must be first, in
4617 * order to simplify the casting, we assume it is at
4618 * the beginning of the wl->nvs structure.
4620 u8 *nvs_ptr = (u8 *)wl->nvs;
4623 (nvs_ptr[11] << 16) + (nvs_ptr[10] << 8) + nvs_ptr[6];
4625 (nvs_ptr[5] << 16) + (nvs_ptr[4] << 8) + nvs_ptr[3];
4628 /* if the MAC address is zeroed in the NVS derive from fuse */
4629 if (oui_addr == 0 && nic_addr == 0) {
4630 oui_addr = wl->fuse_oui_addr;
4631 /* fuse has the BD_ADDR, the WLAN addresses are the next two */
4632 nic_addr = wl->fuse_nic_addr + 1;
4635 wl12xx_derive_mac_addresses(wl, oui_addr, nic_addr, 2);
4637 ret = ieee80211_register_hw(wl->hw);
4639 wl1271_error("unable to register mac80211 hw: %d", ret);
4643 wl->mac80211_registered = true;
4645 wl1271_debugfs_init(wl);
4647 wl1271_notice("loaded");
4653 static void wl1271_unregister_hw(struct wl1271 *wl)
4656 wl1271_plt_stop(wl);
4658 ieee80211_unregister_hw(wl->hw);
4659 wl->mac80211_registered = false;
4663 static int wl1271_init_ieee80211(struct wl1271 *wl)
4665 static const u32 cipher_suites[] = {
4666 WLAN_CIPHER_SUITE_WEP40,
4667 WLAN_CIPHER_SUITE_WEP104,
4668 WLAN_CIPHER_SUITE_TKIP,
4669 WLAN_CIPHER_SUITE_CCMP,
4670 WL1271_CIPHER_SUITE_GEM,
4673 /* The tx descriptor buffer and the TKIP space. */
4674 wl->hw->extra_tx_headroom = WL1271_EXTRA_SPACE_TKIP +
4675 sizeof(struct wl1271_tx_hw_descr);
4678 /* FIXME: find a proper value */
4679 wl->hw->channel_change_time = 10000;
4680 wl->hw->max_listen_interval = wl->conf.conn.max_listen_interval;
4682 wl->hw->flags = IEEE80211_HW_SIGNAL_DBM |
4683 IEEE80211_HW_SUPPORTS_PS |
4684 IEEE80211_HW_SUPPORTS_DYNAMIC_PS |
4685 IEEE80211_HW_SUPPORTS_UAPSD |
4686 IEEE80211_HW_HAS_RATE_CONTROL |
4687 IEEE80211_HW_CONNECTION_MONITOR |
4688 IEEE80211_HW_REPORTS_TX_ACK_STATUS |
4689 IEEE80211_HW_SPECTRUM_MGMT |
4690 IEEE80211_HW_AP_LINK_PS |
4691 IEEE80211_HW_AMPDU_AGGREGATION |
4692 IEEE80211_HW_TX_AMPDU_SETUP_IN_HW |
4693 IEEE80211_HW_SCAN_WHILE_IDLE;
4695 wl->hw->wiphy->cipher_suites = cipher_suites;
4696 wl->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
4698 wl->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
4699 BIT(NL80211_IFTYPE_ADHOC) | BIT(NL80211_IFTYPE_AP) |
4700 BIT(NL80211_IFTYPE_P2P_CLIENT) | BIT(NL80211_IFTYPE_P2P_GO);
4701 wl->hw->wiphy->max_scan_ssids = 1;
4702 wl->hw->wiphy->max_sched_scan_ssids = 16;
4703 wl->hw->wiphy->max_match_sets = 16;
4705 * Maximum length of elements in scanning probe request templates
4706 * should be the maximum length possible for a template, without
4707 * the IEEE80211 header of the template
4709 wl->hw->wiphy->max_scan_ie_len = WL1271_CMD_TEMPL_MAX_SIZE -
4710 sizeof(struct ieee80211_header);
4712 wl->hw->wiphy->max_sched_scan_ie_len = WL1271_CMD_TEMPL_MAX_SIZE -
4713 sizeof(struct ieee80211_header);
4715 wl->hw->wiphy->flags |= WIPHY_FLAG_AP_UAPSD |
4716 WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
4718 /* make sure all our channels fit in the scanned_ch bitmask */
4719 BUILD_BUG_ON(ARRAY_SIZE(wl1271_channels) +
4720 ARRAY_SIZE(wl1271_channels_5ghz) >
4721 WL1271_MAX_CHANNELS);
4723 * We keep local copies of the band structs because we need to
4724 * modify them on a per-device basis.
4726 memcpy(&wl->bands[IEEE80211_BAND_2GHZ], &wl1271_band_2ghz,
4727 sizeof(wl1271_band_2ghz));
4728 memcpy(&wl->bands[IEEE80211_BAND_2GHZ].ht_cap, &wl->ht_cap,
4729 sizeof(wl->ht_cap));
4730 memcpy(&wl->bands[IEEE80211_BAND_5GHZ], &wl1271_band_5ghz,
4731 sizeof(wl1271_band_5ghz));
4732 memcpy(&wl->bands[IEEE80211_BAND_5GHZ].ht_cap, &wl->ht_cap,
4733 sizeof(wl->ht_cap));
4735 wl->hw->wiphy->bands[IEEE80211_BAND_2GHZ] =
4736 &wl->bands[IEEE80211_BAND_2GHZ];
4737 wl->hw->wiphy->bands[IEEE80211_BAND_5GHZ] =
4738 &wl->bands[IEEE80211_BAND_5GHZ];
4741 wl->hw->max_rates = 1;
4743 wl->hw->wiphy->reg_notifier = wl1271_reg_notify;
4745 /* the FW answers probe-requests in AP-mode */
4746 wl->hw->wiphy->flags |= WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD;
4747 wl->hw->wiphy->probe_resp_offload =
4748 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS |
4749 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2 |
4750 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P;
4752 SET_IEEE80211_DEV(wl->hw, wl->dev);
4754 wl->hw->sta_data_size = sizeof(struct wl1271_station);
4755 wl->hw->vif_data_size = sizeof(struct wl12xx_vif);
4757 wl->hw->max_rx_aggregation_subframes = wl->conf.ht.rx_ba_win_size;
4762 #define WL1271_DEFAULT_CHANNEL 0
4764 struct ieee80211_hw *wlcore_alloc_hw(size_t priv_size)
4766 struct ieee80211_hw *hw;
4771 BUILD_BUG_ON(AP_MAX_STATIONS > WL12XX_MAX_LINKS);
4773 hw = ieee80211_alloc_hw(sizeof(*wl), &wl1271_ops);
4775 wl1271_error("could not alloc ieee80211_hw");
4781 memset(wl, 0, sizeof(*wl));
4783 wl->priv = kzalloc(priv_size, GFP_KERNEL);
4785 wl1271_error("could not alloc wl priv");
4787 goto err_priv_alloc;
4790 INIT_LIST_HEAD(&wl->wlvif_list);
4794 for (i = 0; i < NUM_TX_QUEUES; i++)
4795 for (j = 0; j < WL12XX_MAX_LINKS; j++)
4796 skb_queue_head_init(&wl->links[j].tx_queue[i]);
4798 skb_queue_head_init(&wl->deferred_rx_queue);
4799 skb_queue_head_init(&wl->deferred_tx_queue);
4801 INIT_DELAYED_WORK(&wl->elp_work, wl1271_elp_work);
4802 INIT_WORK(&wl->netstack_work, wl1271_netstack_work);
4803 INIT_WORK(&wl->tx_work, wl1271_tx_work);
4804 INIT_WORK(&wl->recovery_work, wl1271_recovery_work);
4805 INIT_DELAYED_WORK(&wl->scan_complete_work, wl1271_scan_complete_work);
4806 INIT_DELAYED_WORK(&wl->tx_watchdog_work, wl12xx_tx_watchdog_work);
4808 wl->freezable_wq = create_freezable_workqueue("wl12xx_wq");
4809 if (!wl->freezable_wq) {
4814 wl->channel = WL1271_DEFAULT_CHANNEL;
4816 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
4817 wl->band = IEEE80211_BAND_2GHZ;
4819 wl->sg_enabled = true;
4822 wl->ap_fw_ps_map = 0;
4824 wl->platform_quirks = 0;
4825 wl->sched_scanning = false;
4826 wl->system_hlid = WL12XX_SYSTEM_HLID;
4827 wl->active_sta_count = 0;
4829 init_waitqueue_head(&wl->fwlog_waitq);
4831 /* The system link is always allocated */
4832 __set_bit(WL12XX_SYSTEM_HLID, wl->links_map);
4834 memset(wl->tx_frames_map, 0, sizeof(wl->tx_frames_map));
4835 for (i = 0; i < wl->num_tx_desc; i++)
4836 wl->tx_frames[i] = NULL;
4838 spin_lock_init(&wl->wl_lock);
4840 wl->state = WL1271_STATE_OFF;
4841 wl->fw_type = WL12XX_FW_TYPE_NONE;
4842 mutex_init(&wl->mutex);
4844 order = get_order(WL1271_AGGR_BUFFER_SIZE);
4845 wl->aggr_buf = (u8 *)__get_free_pages(GFP_KERNEL, order);
4846 if (!wl->aggr_buf) {
4851 wl->dummy_packet = wl12xx_alloc_dummy_packet(wl);
4852 if (!wl->dummy_packet) {
4857 /* Allocate one page for the FW log */
4858 wl->fwlog = (u8 *)get_zeroed_page(GFP_KERNEL);
4861 goto err_dummy_packet;
4864 wl->mbox = kmalloc(sizeof(*wl->mbox), GFP_DMA);
4873 free_page((unsigned long)wl->fwlog);
4876 dev_kfree_skb(wl->dummy_packet);
4879 free_pages((unsigned long)wl->aggr_buf, order);
4882 destroy_workqueue(wl->freezable_wq);
4885 wl1271_debugfs_exit(wl);
4889 ieee80211_free_hw(hw);
4893 return ERR_PTR(ret);
4895 EXPORT_SYMBOL_GPL(wlcore_alloc_hw);
4897 int wlcore_free_hw(struct wl1271 *wl)
4899 /* Unblock any fwlog readers */
4900 mutex_lock(&wl->mutex);
4901 wl->fwlog_size = -1;
4902 wake_up_interruptible_all(&wl->fwlog_waitq);
4903 mutex_unlock(&wl->mutex);
4905 device_remove_bin_file(wl->dev, &fwlog_attr);
4907 device_remove_file(wl->dev, &dev_attr_hw_pg_ver);
4909 device_remove_file(wl->dev, &dev_attr_bt_coex_state);
4910 free_page((unsigned long)wl->fwlog);
4911 dev_kfree_skb(wl->dummy_packet);
4912 free_pages((unsigned long)wl->aggr_buf,
4913 get_order(WL1271_AGGR_BUFFER_SIZE));
4915 wl1271_debugfs_exit(wl);
4919 wl->fw_type = WL12XX_FW_TYPE_NONE;
4923 kfree(wl->fw_status);
4924 kfree(wl->tx_res_if);
4925 destroy_workqueue(wl->freezable_wq);
4928 ieee80211_free_hw(wl->hw);
4932 EXPORT_SYMBOL_GPL(wlcore_free_hw);
4934 static irqreturn_t wl12xx_hardirq(int irq, void *cookie)
4936 struct wl1271 *wl = cookie;
4937 unsigned long flags;
4939 wl1271_debug(DEBUG_IRQ, "IRQ");
4941 /* complete the ELP completion */
4942 spin_lock_irqsave(&wl->wl_lock, flags);
4943 set_bit(WL1271_FLAG_IRQ_RUNNING, &wl->flags);
4944 if (wl->elp_compl) {
4945 complete(wl->elp_compl);
4946 wl->elp_compl = NULL;
4949 if (test_bit(WL1271_FLAG_SUSPENDED, &wl->flags)) {
4950 /* don't enqueue a work right now. mark it as pending */
4951 set_bit(WL1271_FLAG_PENDING_WORK, &wl->flags);
4952 wl1271_debug(DEBUG_IRQ, "should not enqueue work");
4953 disable_irq_nosync(wl->irq);
4954 pm_wakeup_event(wl->dev, 0);
4955 spin_unlock_irqrestore(&wl->wl_lock, flags);
4958 spin_unlock_irqrestore(&wl->wl_lock, flags);
4960 return IRQ_WAKE_THREAD;
4963 int __devinit wlcore_probe(struct wl1271 *wl, struct platform_device *pdev)
4965 struct wl12xx_platform_data *pdata = pdev->dev.platform_data;
4966 unsigned long irqflags;
4969 if (!wl->ops || !wl->ptable) {
4974 BUG_ON(wl->num_tx_desc > WLCORE_MAX_TX_DESCRIPTORS);
4976 /* adjust some runtime configuration parameters */
4977 wlcore_adjust_conf(wl);
4979 wl->irq = platform_get_irq(pdev, 0);
4980 wl->ref_clock = pdata->board_ref_clock;
4981 wl->tcxo_clock = pdata->board_tcxo_clock;
4982 wl->platform_quirks = pdata->platform_quirks;
4983 wl->set_power = pdata->set_power;
4984 wl->dev = &pdev->dev;
4985 wl->if_ops = pdata->ops;
4987 platform_set_drvdata(pdev, wl);
4989 if (wl->platform_quirks & WL12XX_PLATFORM_QUIRK_EDGE_IRQ)
4990 irqflags = IRQF_TRIGGER_RISING;
4992 irqflags = IRQF_TRIGGER_HIGH | IRQF_ONESHOT;
4994 ret = request_threaded_irq(wl->irq, wl12xx_hardirq, wl1271_irq,
4998 wl1271_error("request_irq() failed: %d", ret);
5002 ret = enable_irq_wake(wl->irq);
5004 wl->irq_wake_enabled = true;
5005 device_init_wakeup(wl->dev, 1);
5006 if (pdata->pwr_in_suspend)
5007 wl->hw->wiphy->wowlan.flags = WIPHY_WOWLAN_ANY;
5010 disable_irq(wl->irq);
5012 ret = wl1271_init_ieee80211(wl);
5016 ret = wl1271_register_hw(wl);
5020 /* Create sysfs file to control bt coex state */
5021 ret = device_create_file(wl->dev, &dev_attr_bt_coex_state);
5023 wl1271_error("failed to create sysfs file bt_coex_state");
5027 /* Create sysfs file to get HW PG version */
5028 ret = device_create_file(wl->dev, &dev_attr_hw_pg_ver);
5030 wl1271_error("failed to create sysfs file hw_pg_ver");
5031 goto out_bt_coex_state;
5034 /* Create sysfs file for the FW log */
5035 ret = device_create_bin_file(wl->dev, &fwlog_attr);
5037 wl1271_error("failed to create sysfs file fwlog");
5044 device_remove_file(wl->dev, &dev_attr_hw_pg_ver);
5047 device_remove_file(wl->dev, &dev_attr_bt_coex_state);
5050 free_irq(wl->irq, wl);
5058 EXPORT_SYMBOL_GPL(wlcore_probe);
5060 int __devexit wlcore_remove(struct platform_device *pdev)
5062 struct wl1271 *wl = platform_get_drvdata(pdev);
5064 if (wl->irq_wake_enabled) {
5065 device_init_wakeup(wl->dev, 0);
5066 disable_irq_wake(wl->irq);
5068 wl1271_unregister_hw(wl);
5069 free_irq(wl->irq, wl);
5074 EXPORT_SYMBOL_GPL(wlcore_remove);
5076 u32 wl12xx_debug_level = DEBUG_NONE;
5077 EXPORT_SYMBOL_GPL(wl12xx_debug_level);
5078 module_param_named(debug_level, wl12xx_debug_level, uint, S_IRUSR | S_IWUSR);
5079 MODULE_PARM_DESC(debug_level, "wl12xx debugging level");
5081 module_param_named(fwlog, fwlog_param, charp, 0);
5082 MODULE_PARM_DESC(fwlog,
5083 "FW logger options: continuous, ondemand, dbgpins or disable");
5085 module_param(bug_on_recovery, bool, S_IRUSR | S_IWUSR);
5086 MODULE_PARM_DESC(bug_on_recovery, "BUG() on fw recovery");
5088 module_param(no_recovery, bool, S_IRUSR | S_IWUSR);
5089 MODULE_PARM_DESC(no_recovery, "Prevent HW recovery. FW will remain stuck.");
5091 MODULE_LICENSE("GPL");
5092 MODULE_AUTHOR("Luciano Coelho <coelho@ti.com>");
5093 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");