2 * This file is part of wl1271
4 * Copyright (C) 2008-2010 Nokia Corporation
6 * Contact: Luciano Coelho <luciano.coelho@nokia.com>
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * version 2 as published by the Free Software Foundation.
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
24 #include <linux/module.h>
25 #include <linux/firmware.h>
26 #include <linux/delay.h>
27 #include <linux/spi/spi.h>
28 #include <linux/crc32.h>
29 #include <linux/etherdevice.h>
30 #include <linux/vmalloc.h>
31 #include <linux/platform_device.h>
32 #include <linux/slab.h>
33 #include <linux/wl12xx.h>
36 #include "wl12xx_80211.h"
50 #define WL1271_BOOT_RETRIES 3
52 static struct conf_drv_settings default_conf = {
55 [CONF_SG_BT_PER_THRESHOLD] = 7500,
56 [CONF_SG_HV3_MAX_OVERRIDE] = 0,
57 [CONF_SG_BT_NFS_SAMPLE_INTERVAL] = 400,
58 [CONF_SG_BT_LOAD_RATIO] = 200,
59 [CONF_SG_AUTO_PS_MODE] = 1,
60 [CONF_SG_AUTO_SCAN_PROBE_REQ] = 170,
61 [CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_HV3] = 50,
62 [CONF_SG_ANTENNA_CONFIGURATION] = 0,
63 [CONF_SG_BEACON_MISS_PERCENT] = 60,
64 [CONF_SG_RATE_ADAPT_THRESH] = 12,
65 [CONF_SG_RATE_ADAPT_SNR] = 0,
66 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MIN_BR] = 10,
67 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MAX_BR] = 30,
68 [CONF_SG_WLAN_PS_MAX_BT_ACL_MASTER_BR] = 8,
69 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MIN_BR] = 20,
70 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MAX_BR] = 50,
71 /* Note: with UPSD, this should be 4 */
72 [CONF_SG_WLAN_PS_MAX_BT_ACL_SLAVE_BR] = 8,
73 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MIN_EDR] = 7,
74 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MAX_EDR] = 25,
75 [CONF_SG_WLAN_PS_MAX_BT_ACL_MASTER_EDR] = 20,
76 /* Note: with UPDS, this should be 15 */
77 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MIN_EDR] = 8,
78 /* Note: with UPDS, this should be 50 */
79 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MAX_EDR] = 40,
80 /* Note: with UPDS, this should be 10 */
81 [CONF_SG_WLAN_PS_MAX_BT_ACL_SLAVE_EDR] = 20,
84 [CONF_SG_ADAPTIVE_RXT_TXT] = 1,
85 [CONF_SG_PS_POLL_TIMEOUT] = 10,
86 [CONF_SG_UPSD_TIMEOUT] = 10,
87 [CONF_SG_WLAN_ACTIVE_BT_ACL_MASTER_MIN_EDR] = 7,
88 [CONF_SG_WLAN_ACTIVE_BT_ACL_MASTER_MAX_EDR] = 15,
89 [CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_MASTER_EDR] = 15,
90 [CONF_SG_WLAN_ACTIVE_BT_ACL_SLAVE_MIN_EDR] = 8,
91 [CONF_SG_WLAN_ACTIVE_BT_ACL_SLAVE_MAX_EDR] = 20,
92 [CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_SLAVE_EDR] = 15,
93 [CONF_SG_WLAN_ACTIVE_BT_ACL_MIN_BR] = 20,
94 [CONF_SG_WLAN_ACTIVE_BT_ACL_MAX_BR] = 50,
95 [CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_BR] = 10,
96 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_HV3] = 200,
97 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_A2DP] = 800,
98 [CONF_SG_PASSIVE_SCAN_A2DP_BT_TIME] = 75,
99 [CONF_SG_PASSIVE_SCAN_A2DP_WLAN_TIME] = 15,
100 [CONF_SG_HV3_MAX_SERVED] = 6,
101 [CONF_SG_DHCP_TIME] = 5000,
102 [CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_A2DP] = 100,
104 .state = CONF_SG_PROTECTIVE,
107 .rx_msdu_life_time = 512000,
108 .packet_detection_threshold = 0,
109 .ps_poll_timeout = 15,
111 .rts_threshold = 2347,
112 .rx_cca_threshold = 0,
113 .irq_blk_threshold = 0xFFFF,
114 .irq_pkt_threshold = 0,
116 .queue_type = CONF_RX_QUEUE_TYPE_LOW_PRIORITY,
119 .tx_energy_detection = 0,
122 .short_retry_limit = 10,
123 .long_retry_limit = 10,
146 .aifsn = CONF_TX_AIFS_PIFS,
153 .aifsn = CONF_TX_AIFS_PIFS,
159 .enabled_rates = CONF_TX_AP_ENABLED_RATES,
160 .short_retry_limit = 10,
161 .long_retry_limit = 10,
165 .enabled_rates = CONF_TX_AP_ENABLED_RATES,
166 .short_retry_limit = 10,
167 .long_retry_limit = 10,
171 .enabled_rates = CONF_TX_AP_ENABLED_RATES,
172 .short_retry_limit = 10,
173 .long_retry_limit = 10,
177 .enabled_rates = CONF_TX_AP_ENABLED_RATES,
178 .short_retry_limit = 10,
179 .long_retry_limit = 10,
184 .enabled_rates = CONF_TX_AP_DEFAULT_MGMT_RATES,
185 .short_retry_limit = 10,
186 .long_retry_limit = 10,
190 .enabled_rates = CONF_HW_BIT_RATE_1MBPS,
191 .short_retry_limit = 10,
192 .long_retry_limit = 10,
195 .max_tx_retries = 100,
196 .ap_aging_period = 300,
200 .queue_id = CONF_TX_AC_BE,
201 .channel_type = CONF_CHANNEL_TYPE_EDCF,
202 .tsid = CONF_TX_AC_BE,
203 .ps_scheme = CONF_PS_SCHEME_LEGACY,
204 .ack_policy = CONF_ACK_POLICY_LEGACY,
208 .queue_id = CONF_TX_AC_BK,
209 .channel_type = CONF_CHANNEL_TYPE_EDCF,
210 .tsid = CONF_TX_AC_BK,
211 .ps_scheme = CONF_PS_SCHEME_LEGACY,
212 .ack_policy = CONF_ACK_POLICY_LEGACY,
216 .queue_id = CONF_TX_AC_VI,
217 .channel_type = CONF_CHANNEL_TYPE_EDCF,
218 .tsid = CONF_TX_AC_VI,
219 .ps_scheme = CONF_PS_SCHEME_LEGACY,
220 .ack_policy = CONF_ACK_POLICY_LEGACY,
224 .queue_id = CONF_TX_AC_VO,
225 .channel_type = CONF_CHANNEL_TYPE_EDCF,
226 .tsid = CONF_TX_AC_VO,
227 .ps_scheme = CONF_PS_SCHEME_LEGACY,
228 .ack_policy = CONF_ACK_POLICY_LEGACY,
232 .frag_threshold = IEEE80211_MAX_FRAG_THRESHOLD,
233 .tx_compl_timeout = 700,
234 .tx_compl_threshold = 4,
235 .basic_rate = CONF_HW_BIT_RATE_1MBPS,
236 .basic_rate_5 = CONF_HW_BIT_RATE_6MBPS,
237 .tmpl_short_retry_limit = 10,
238 .tmpl_long_retry_limit = 10,
241 .wake_up_event = CONF_WAKE_UP_EVENT_DTIM,
242 .listen_interval = 1,
243 .bcn_filt_mode = CONF_BCN_FILT_MODE_ENABLED,
244 .bcn_filt_ie_count = 1,
247 .ie = WLAN_EID_CHANNEL_SWITCH,
248 .rule = CONF_BCN_RULE_PASS_ON_APPEARANCE,
251 .synch_fail_thold = 10,
252 .bss_lose_timeout = 100,
253 .beacon_rx_timeout = 10000,
254 .broadcast_timeout = 20000,
255 .rx_broadcast_in_ps = 1,
256 .ps_poll_threshold = 10,
257 .ps_poll_recovery_period = 700,
258 .bet_enable = CONF_BET_MODE_ENABLE,
259 .bet_max_consecutive = 50,
260 .psm_entry_retries = 5,
261 .psm_exit_retries = 255,
262 .psm_entry_nullfunc_retries = 3,
263 .psm_entry_hangover_period = 1,
264 .keep_alive_interval = 55000,
265 .max_listen_interval = 20,
272 .host_clk_settling_time = 5000,
273 .host_fast_wakeup_support = false
277 .avg_weight_rssi_beacon = 20,
278 .avg_weight_rssi_data = 10,
279 .avg_weight_snr_beacon = 20,
280 .avg_weight_snr_data = 10,
283 .min_dwell_time_active = 7500,
284 .max_dwell_time_active = 30000,
285 .min_dwell_time_passive = 100000,
286 .max_dwell_time_passive = 100000,
290 .tx_per_channel_power_compensation_2 = {
291 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
293 .tx_per_channel_power_compensation_5 = {
294 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
295 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
296 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
300 .tx_ba_win_size = 64,
301 .inactivity_timeout = 10000,
307 .tx_min_block_num = 40,
309 .min_req_tx_blocks = 100,
310 .min_req_rx_blocks = 22,
317 .tx_min_block_num = 40,
319 .min_req_tx_blocks = 45,
320 .min_req_rx_blocks = 22,
323 .hci_io_ds = HCI_IO_DS_6MA,
326 static void __wl1271_op_remove_interface(struct wl1271 *wl);
327 static void wl1271_free_ap_keys(struct wl1271 *wl);
330 static void wl1271_device_release(struct device *dev)
335 static struct platform_device wl1271_device = {
339 /* device model insists to have a release function */
341 .release = wl1271_device_release,
345 static DEFINE_MUTEX(wl_list_mutex);
346 static LIST_HEAD(wl_list);
348 static int wl1271_dev_notify(struct notifier_block *me, unsigned long what,
351 struct net_device *dev = arg;
352 struct wireless_dev *wdev;
354 struct ieee80211_hw *hw;
356 struct wl1271 *wl_temp;
359 /* Check that this notification is for us. */
360 if (what != NETDEV_CHANGE)
363 wdev = dev->ieee80211_ptr;
371 hw = wiphy_priv(wiphy);
376 mutex_lock(&wl_list_mutex);
377 list_for_each_entry(wl, &wl_list, list) {
381 mutex_unlock(&wl_list_mutex);
385 mutex_lock(&wl->mutex);
387 if (wl->state == WL1271_STATE_OFF)
390 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
393 ret = wl1271_ps_elp_wakeup(wl);
397 if ((dev->operstate == IF_OPER_UP) &&
398 !test_and_set_bit(WL1271_FLAG_STA_STATE_SENT, &wl->flags)) {
399 wl1271_cmd_set_sta_state(wl);
400 wl1271_info("Association completed.");
403 wl1271_ps_elp_sleep(wl);
406 mutex_unlock(&wl->mutex);
411 static int wl1271_reg_notify(struct wiphy *wiphy,
412 struct regulatory_request *request)
414 struct ieee80211_supported_band *band;
415 struct ieee80211_channel *ch;
418 band = wiphy->bands[IEEE80211_BAND_5GHZ];
419 for (i = 0; i < band->n_channels; i++) {
420 ch = &band->channels[i];
421 if (ch->flags & IEEE80211_CHAN_DISABLED)
424 if (ch->flags & IEEE80211_CHAN_RADAR)
425 ch->flags |= IEEE80211_CHAN_NO_IBSS |
426 IEEE80211_CHAN_PASSIVE_SCAN;
433 static void wl1271_conf_init(struct wl1271 *wl)
437 * This function applies the default configuration to the driver. This
438 * function is invoked upon driver load (spi probe.)
440 * The configuration is stored in a run-time structure in order to
441 * facilitate for run-time adjustment of any of the parameters. Making
442 * changes to the configuration structure will apply the new values on
443 * the next interface up (wl1271_op_start.)
446 /* apply driver default configuration */
447 memcpy(&wl->conf, &default_conf, sizeof(default_conf));
451 static int wl1271_plt_init(struct wl1271 *wl)
453 struct conf_tx_ac_category *conf_ac;
454 struct conf_tx_tid *conf_tid;
457 if (wl->chip.id == CHIP_ID_1283_PG20)
458 ret = wl128x_cmd_general_parms(wl);
460 ret = wl1271_cmd_general_parms(wl);
464 if (wl->chip.id == CHIP_ID_1283_PG20)
465 ret = wl128x_cmd_radio_parms(wl);
467 ret = wl1271_cmd_radio_parms(wl);
471 if (wl->chip.id != CHIP_ID_1283_PG20) {
472 ret = wl1271_cmd_ext_radio_parms(wl);
479 /* Chip-specific initializations */
480 ret = wl1271_chip_specific_init(wl);
484 ret = wl1271_sta_init_templates_config(wl);
488 ret = wl1271_acx_init_mem_config(wl);
492 /* PHY layer config */
493 ret = wl1271_init_phy_config(wl);
495 goto out_free_memmap;
497 ret = wl1271_acx_dco_itrim_params(wl);
499 goto out_free_memmap;
501 /* Initialize connection monitoring thresholds */
502 ret = wl1271_acx_conn_monit_params(wl, false);
504 goto out_free_memmap;
506 /* Bluetooth WLAN coexistence */
507 ret = wl1271_init_pta(wl);
509 goto out_free_memmap;
511 /* Energy detection */
512 ret = wl1271_init_energy_detection(wl);
514 goto out_free_memmap;
516 ret = wl1271_acx_sta_mem_cfg(wl);
518 goto out_free_memmap;
520 /* Default fragmentation threshold */
521 ret = wl1271_acx_frag_threshold(wl, wl->conf.tx.frag_threshold);
523 goto out_free_memmap;
525 /* Default TID/AC configuration */
526 BUG_ON(wl->conf.tx.tid_conf_count != wl->conf.tx.ac_conf_count);
527 for (i = 0; i < wl->conf.tx.tid_conf_count; i++) {
528 conf_ac = &wl->conf.tx.ac_conf[i];
529 ret = wl1271_acx_ac_cfg(wl, conf_ac->ac, conf_ac->cw_min,
530 conf_ac->cw_max, conf_ac->aifsn,
531 conf_ac->tx_op_limit);
533 goto out_free_memmap;
535 conf_tid = &wl->conf.tx.tid_conf[i];
536 ret = wl1271_acx_tid_cfg(wl, conf_tid->queue_id,
537 conf_tid->channel_type,
540 conf_tid->ack_policy,
541 conf_tid->apsd_conf[0],
542 conf_tid->apsd_conf[1]);
544 goto out_free_memmap;
547 /* Enable data path */
548 ret = wl1271_cmd_data_path(wl, 1);
550 goto out_free_memmap;
552 /* Configure for CAM power saving (ie. always active) */
553 ret = wl1271_acx_sleep_auth(wl, WL1271_PSM_CAM);
555 goto out_free_memmap;
558 ret = wl1271_acx_pm_config(wl);
560 goto out_free_memmap;
565 kfree(wl->target_mem_map);
566 wl->target_mem_map = NULL;
571 static void wl1271_irq_ps_regulate_link(struct wl1271 *wl, u8 hlid, u8 tx_blks)
575 /* only regulate station links */
576 if (hlid < WL1271_AP_STA_HLID_START)
579 fw_ps = test_bit(hlid, (unsigned long *)&wl->ap_fw_ps_map);
582 * Wake up from high level PS if the STA is asleep with too little
583 * blocks in FW or if the STA is awake.
585 if (!fw_ps || tx_blks < WL1271_PS_STA_MAX_BLOCKS)
586 wl1271_ps_link_end(wl, hlid);
588 /* Start high-level PS if the STA is asleep with enough blocks in FW */
589 else if (fw_ps && tx_blks >= WL1271_PS_STA_MAX_BLOCKS)
590 wl1271_ps_link_start(wl, hlid, true);
593 static void wl1271_irq_update_links_status(struct wl1271 *wl,
594 struct wl1271_fw_ap_status *status)
599 cur_fw_ps_map = le32_to_cpu(status->link_ps_bitmap);
600 if (wl->ap_fw_ps_map != cur_fw_ps_map) {
601 wl1271_debug(DEBUG_PSM,
602 "link ps prev 0x%x cur 0x%x changed 0x%x",
603 wl->ap_fw_ps_map, cur_fw_ps_map,
604 wl->ap_fw_ps_map ^ cur_fw_ps_map);
606 wl->ap_fw_ps_map = cur_fw_ps_map;
609 for (hlid = WL1271_AP_STA_HLID_START; hlid < AP_MAX_LINKS; hlid++) {
610 u8 cnt = status->tx_lnk_free_blks[hlid] -
611 wl->links[hlid].prev_freed_blks;
613 wl->links[hlid].prev_freed_blks =
614 status->tx_lnk_free_blks[hlid];
615 wl->links[hlid].allocated_blks -= cnt;
617 wl1271_irq_ps_regulate_link(wl, hlid,
618 wl->links[hlid].allocated_blks);
622 static void wl1271_fw_status(struct wl1271 *wl,
623 struct wl1271_fw_full_status *full_status)
625 struct wl1271_fw_common_status *status = &full_status->common;
627 u32 old_tx_blk_count = wl->tx_blocks_available;
628 u32 freed_blocks = 0;
631 if (wl->bss_type == BSS_TYPE_AP_BSS) {
632 wl1271_raw_read(wl, FW_STATUS_ADDR, status,
633 sizeof(struct wl1271_fw_ap_status), false);
635 wl1271_raw_read(wl, FW_STATUS_ADDR, status,
636 sizeof(struct wl1271_fw_sta_status), false);
639 wl1271_debug(DEBUG_IRQ, "intr: 0x%x (fw_rx_counter = %d, "
640 "drv_rx_counter = %d, tx_results_counter = %d)",
642 status->fw_rx_counter,
643 status->drv_rx_counter,
644 status->tx_results_counter);
646 /* update number of available TX blocks */
647 for (i = 0; i < NUM_TX_QUEUES; i++) {
648 freed_blocks += le32_to_cpu(status->tx_released_blks[i]) -
649 wl->tx_blocks_freed[i];
651 wl->tx_blocks_freed[i] =
652 le32_to_cpu(status->tx_released_blks[i]);
655 wl->tx_allocated_blocks -= freed_blocks;
657 if (wl->bss_type == BSS_TYPE_AP_BSS) {
658 /* Update num of allocated TX blocks per link and ps status */
659 wl1271_irq_update_links_status(wl, &full_status->ap);
660 wl->tx_blocks_available += freed_blocks;
662 int avail = full_status->sta.tx_total - wl->tx_allocated_blocks;
665 * The FW might change the total number of TX memblocks before
666 * we get a notification about blocks being released. Thus, the
667 * available blocks calculation might yield a temporary result
668 * which is lower than the actual available blocks. Keeping in
669 * mind that only blocks that were allocated can be moved from
670 * TX to RX, tx_blocks_available should never decrease here.
672 wl->tx_blocks_available = max((int)wl->tx_blocks_available,
676 /* if more blocks are available now, tx work can be scheduled */
677 if (wl->tx_blocks_available > old_tx_blk_count)
678 clear_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags);
680 /* update the host-chipset time offset */
682 wl->time_offset = (timespec_to_ns(&ts) >> 10) -
683 (s64)le32_to_cpu(status->fw_localtime);
686 static void wl1271_flush_deferred_work(struct wl1271 *wl)
690 /* Pass all received frames to the network stack */
691 while ((skb = skb_dequeue(&wl->deferred_rx_queue)))
692 ieee80211_rx_ni(wl->hw, skb);
694 /* Return sent skbs to the network stack */
695 while ((skb = skb_dequeue(&wl->deferred_tx_queue)))
696 ieee80211_tx_status(wl->hw, skb);
699 static void wl1271_netstack_work(struct work_struct *work)
702 container_of(work, struct wl1271, netstack_work);
705 wl1271_flush_deferred_work(wl);
706 } while (skb_queue_len(&wl->deferred_rx_queue));
709 #define WL1271_IRQ_MAX_LOOPS 256
711 irqreturn_t wl1271_irq(int irq, void *cookie)
715 int loopcount = WL1271_IRQ_MAX_LOOPS;
716 struct wl1271 *wl = (struct wl1271 *)cookie;
718 unsigned int defer_count;
721 /* TX might be handled here, avoid redundant work */
722 set_bit(WL1271_FLAG_TX_PENDING, &wl->flags);
723 cancel_work_sync(&wl->tx_work);
726 * In case edge triggered interrupt must be used, we cannot iterate
727 * more than once without introducing race conditions with the hardirq.
729 if (wl->platform_quirks & WL12XX_PLATFORM_QUIRK_EDGE_IRQ)
732 mutex_lock(&wl->mutex);
734 wl1271_debug(DEBUG_IRQ, "IRQ work");
736 if (unlikely(wl->state == WL1271_STATE_OFF))
739 ret = wl1271_ps_elp_wakeup(wl);
743 while (!done && loopcount--) {
745 * In order to avoid a race with the hardirq, clear the flag
746 * before acknowledging the chip. Since the mutex is held,
747 * wl1271_ps_elp_wakeup cannot be called concurrently.
749 clear_bit(WL1271_FLAG_IRQ_RUNNING, &wl->flags);
750 smp_mb__after_clear_bit();
752 wl1271_fw_status(wl, wl->fw_status);
753 intr = le32_to_cpu(wl->fw_status->common.intr);
754 intr &= WL1271_INTR_MASK;
760 if (unlikely(intr & WL1271_ACX_INTR_WATCHDOG)) {
761 wl1271_error("watchdog interrupt received! "
762 "starting recovery.");
763 ieee80211_queue_work(wl->hw, &wl->recovery_work);
765 /* restarting the chip. ignore any other interrupt. */
769 if (likely(intr & WL1271_ACX_INTR_DATA)) {
770 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_DATA");
772 wl1271_rx(wl, &wl->fw_status->common);
774 /* Check if any tx blocks were freed */
775 spin_lock_irqsave(&wl->wl_lock, flags);
776 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags) &&
777 wl->tx_queue_count) {
778 spin_unlock_irqrestore(&wl->wl_lock, flags);
780 * In order to avoid starvation of the TX path,
781 * call the work function directly.
783 wl1271_tx_work_locked(wl);
785 spin_unlock_irqrestore(&wl->wl_lock, flags);
788 /* check for tx results */
789 if (wl->fw_status->common.tx_results_counter !=
790 (wl->tx_results_count & 0xff))
791 wl1271_tx_complete(wl);
793 /* Make sure the deferred queues don't get too long */
794 defer_count = skb_queue_len(&wl->deferred_tx_queue) +
795 skb_queue_len(&wl->deferred_rx_queue);
796 if (defer_count > WL1271_DEFERRED_QUEUE_LIMIT)
797 wl1271_flush_deferred_work(wl);
800 if (intr & WL1271_ACX_INTR_EVENT_A) {
801 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_A");
802 wl1271_event_handle(wl, 0);
805 if (intr & WL1271_ACX_INTR_EVENT_B) {
806 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_B");
807 wl1271_event_handle(wl, 1);
810 if (intr & WL1271_ACX_INTR_INIT_COMPLETE)
811 wl1271_debug(DEBUG_IRQ,
812 "WL1271_ACX_INTR_INIT_COMPLETE");
814 if (intr & WL1271_ACX_INTR_HW_AVAILABLE)
815 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_HW_AVAILABLE");
818 wl1271_ps_elp_sleep(wl);
821 spin_lock_irqsave(&wl->wl_lock, flags);
822 /* In case TX was not handled here, queue TX work */
823 clear_bit(WL1271_FLAG_TX_PENDING, &wl->flags);
824 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags) &&
826 ieee80211_queue_work(wl->hw, &wl->tx_work);
827 spin_unlock_irqrestore(&wl->wl_lock, flags);
829 mutex_unlock(&wl->mutex);
833 EXPORT_SYMBOL_GPL(wl1271_irq);
835 static int wl1271_fetch_firmware(struct wl1271 *wl)
837 const struct firmware *fw;
841 switch (wl->bss_type) {
842 case BSS_TYPE_AP_BSS:
843 if (wl->chip.id == CHIP_ID_1283_PG20)
844 fw_name = WL128X_AP_FW_NAME;
846 fw_name = WL127X_AP_FW_NAME;
849 case BSS_TYPE_STA_BSS:
850 if (wl->chip.id == CHIP_ID_1283_PG20)
851 fw_name = WL128X_FW_NAME;
853 fw_name = WL1271_FW_NAME;
856 wl1271_error("no compatible firmware for bss_type %d",
861 wl1271_debug(DEBUG_BOOT, "booting firmware %s", fw_name);
863 ret = request_firmware(&fw, fw_name, wl1271_wl_to_dev(wl));
866 wl1271_error("could not get firmware: %d", ret);
871 wl1271_error("firmware size is not multiple of 32 bits: %zu",
878 wl->fw_len = fw->size;
879 wl->fw = vmalloc(wl->fw_len);
882 wl1271_error("could not allocate memory for the firmware");
887 memcpy(wl->fw, fw->data, wl->fw_len);
888 wl->fw_bss_type = wl->bss_type;
892 release_firmware(fw);
897 static int wl1271_fetch_nvs(struct wl1271 *wl)
899 const struct firmware *fw;
902 ret = request_firmware(&fw, WL12XX_NVS_NAME, wl1271_wl_to_dev(wl));
905 wl1271_error("could not get nvs file: %d", ret);
909 wl->nvs = kmemdup(fw->data, fw->size, GFP_KERNEL);
912 wl1271_error("could not allocate memory for the nvs file");
917 wl->nvs_len = fw->size;
920 release_firmware(fw);
925 static void wl1271_recovery_work(struct work_struct *work)
928 container_of(work, struct wl1271, recovery_work);
930 mutex_lock(&wl->mutex);
932 if (wl->state != WL1271_STATE_ON)
935 wl1271_info("Hardware recovery in progress.");
937 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
938 ieee80211_connection_loss(wl->vif);
940 /* reboot the chipset */
941 __wl1271_op_remove_interface(wl);
942 ieee80211_restart_hw(wl->hw);
945 mutex_unlock(&wl->mutex);
948 static void wl1271_fw_wakeup(struct wl1271 *wl)
952 elp_reg = ELPCTRL_WAKE_UP;
953 wl1271_raw_write32(wl, HW_ACCESS_ELP_CTRL_REG_ADDR, elp_reg);
956 static int wl1271_setup(struct wl1271 *wl)
958 wl->fw_status = kmalloc(sizeof(*wl->fw_status), GFP_KERNEL);
962 wl->tx_res_if = kmalloc(sizeof(*wl->tx_res_if), GFP_KERNEL);
963 if (!wl->tx_res_if) {
964 kfree(wl->fw_status);
971 static int wl1271_chip_wakeup(struct wl1271 *wl)
973 struct wl1271_partition_set partition;
976 msleep(WL1271_PRE_POWER_ON_SLEEP);
977 ret = wl1271_power_on(wl);
980 msleep(WL1271_POWER_ON_SLEEP);
984 /* We don't need a real memory partition here, because we only want
985 * to use the registers at this point. */
986 memset(&partition, 0, sizeof(partition));
987 partition.reg.start = REGISTERS_BASE;
988 partition.reg.size = REGISTERS_DOWN_SIZE;
989 wl1271_set_partition(wl, &partition);
991 /* ELP module wake up */
992 wl1271_fw_wakeup(wl);
994 /* whal_FwCtrl_BootSm() */
996 /* 0. read chip id from CHIP_ID */
997 wl->chip.id = wl1271_read32(wl, CHIP_ID_B);
999 /* 1. check if chip id is valid */
1001 switch (wl->chip.id) {
1002 case CHIP_ID_1271_PG10:
1003 wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
1006 ret = wl1271_setup(wl);
1010 case CHIP_ID_1271_PG20:
1011 wl1271_debug(DEBUG_BOOT, "chip id 0x%x (1271 PG20)",
1014 ret = wl1271_setup(wl);
1018 case CHIP_ID_1283_PG20:
1019 wl1271_debug(DEBUG_BOOT, "chip id 0x%x (1283 PG20)",
1022 ret = wl1271_setup(wl);
1025 if (wl1271_set_block_size(wl))
1026 wl->quirks |= WL12XX_QUIRK_BLOCKSIZE_ALIGNMENT;
1028 case CHIP_ID_1283_PG10:
1030 wl1271_warning("unsupported chip id: 0x%x", wl->chip.id);
1035 /* Make sure the firmware type matches the BSS type */
1036 if (wl->fw == NULL || wl->fw_bss_type != wl->bss_type) {
1037 ret = wl1271_fetch_firmware(wl);
1042 /* No NVS from netlink, try to get it from the filesystem */
1043 if (wl->nvs == NULL) {
1044 ret = wl1271_fetch_nvs(wl);
1053 static unsigned int wl1271_get_fw_ver_quirks(struct wl1271 *wl)
1055 unsigned int quirks = 0;
1056 unsigned int *fw_ver = wl->chip.fw_ver;
1058 /* Only for wl127x */
1059 if ((fw_ver[FW_VER_CHIP] == FW_VER_CHIP_WL127X) &&
1060 /* Check STA version */
1061 (((fw_ver[FW_VER_IF_TYPE] == FW_VER_IF_TYPE_STA) &&
1062 (fw_ver[FW_VER_MINOR] < FW_VER_MINOR_1_SPARE_STA_MIN)) ||
1063 /* Check AP version */
1064 ((fw_ver[FW_VER_IF_TYPE] == FW_VER_IF_TYPE_AP) &&
1065 (fw_ver[FW_VER_MINOR] < FW_VER_MINOR_1_SPARE_AP_MIN))))
1066 quirks |= WL12XX_QUIRK_USE_2_SPARE_BLOCKS;
1071 int wl1271_plt_start(struct wl1271 *wl)
1073 int retries = WL1271_BOOT_RETRIES;
1076 mutex_lock(&wl->mutex);
1078 wl1271_notice("power up");
1080 if (wl->state != WL1271_STATE_OFF) {
1081 wl1271_error("cannot go into PLT state because not "
1082 "in off state: %d", wl->state);
1087 wl->bss_type = BSS_TYPE_STA_BSS;
1091 ret = wl1271_chip_wakeup(wl);
1095 ret = wl1271_boot(wl);
1099 ret = wl1271_plt_init(wl);
1103 wl->state = WL1271_STATE_PLT;
1104 wl1271_notice("firmware booted in PLT mode (%s)",
1105 wl->chip.fw_ver_str);
1107 /* Check if any quirks are needed with older fw versions */
1108 wl->quirks |= wl1271_get_fw_ver_quirks(wl);
1112 mutex_unlock(&wl->mutex);
1113 /* Unlocking the mutex in the middle of handling is
1114 inherently unsafe. In this case we deem it safe to do,
1115 because we need to let any possibly pending IRQ out of
1116 the system (and while we are WL1271_STATE_OFF the IRQ
1117 work function will not do anything.) Also, any other
1118 possible concurrent operations will fail due to the
1119 current state, hence the wl1271 struct should be safe. */
1120 wl1271_disable_interrupts(wl);
1121 wl1271_flush_deferred_work(wl);
1122 cancel_work_sync(&wl->netstack_work);
1123 mutex_lock(&wl->mutex);
1125 wl1271_power_off(wl);
1128 wl1271_error("firmware boot in PLT mode failed despite %d retries",
1129 WL1271_BOOT_RETRIES);
1131 mutex_unlock(&wl->mutex);
1136 static int __wl1271_plt_stop(struct wl1271 *wl)
1140 wl1271_notice("power down");
1142 if (wl->state != WL1271_STATE_PLT) {
1143 wl1271_error("cannot power down because not in PLT "
1144 "state: %d", wl->state);
1149 wl1271_power_off(wl);
1151 wl->state = WL1271_STATE_OFF;
1154 mutex_unlock(&wl->mutex);
1155 wl1271_disable_interrupts(wl);
1156 wl1271_flush_deferred_work(wl);
1157 cancel_work_sync(&wl->netstack_work);
1158 cancel_work_sync(&wl->recovery_work);
1159 mutex_lock(&wl->mutex);
1164 int wl1271_plt_stop(struct wl1271 *wl)
1168 mutex_lock(&wl->mutex);
1169 ret = __wl1271_plt_stop(wl);
1170 mutex_unlock(&wl->mutex);
1174 static void wl1271_op_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
1176 struct wl1271 *wl = hw->priv;
1177 unsigned long flags;
1181 q = wl1271_tx_get_queue(skb_get_queue_mapping(skb));
1183 if (wl->bss_type == BSS_TYPE_AP_BSS)
1184 hlid = wl1271_tx_get_hlid(skb);
1186 spin_lock_irqsave(&wl->wl_lock, flags);
1188 wl->tx_queue_count++;
1191 * The workqueue is slow to process the tx_queue and we need stop
1192 * the queue here, otherwise the queue will get too long.
1194 if (wl->tx_queue_count >= WL1271_TX_QUEUE_HIGH_WATERMARK) {
1195 wl1271_debug(DEBUG_TX, "op_tx: stopping queues");
1196 ieee80211_stop_queues(wl->hw);
1197 set_bit(WL1271_FLAG_TX_QUEUE_STOPPED, &wl->flags);
1200 /* queue the packet */
1201 if (wl->bss_type == BSS_TYPE_AP_BSS) {
1202 wl1271_debug(DEBUG_TX, "queue skb hlid %d q %d", hlid, q);
1203 skb_queue_tail(&wl->links[hlid].tx_queue[q], skb);
1205 skb_queue_tail(&wl->tx_queue[q], skb);
1209 * The chip specific setup must run before the first TX packet -
1210 * before that, the tx_work will not be initialized!
1213 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags) &&
1214 !test_bit(WL1271_FLAG_TX_PENDING, &wl->flags))
1215 ieee80211_queue_work(wl->hw, &wl->tx_work);
1217 spin_unlock_irqrestore(&wl->wl_lock, flags);
1220 int wl1271_tx_dummy_packet(struct wl1271 *wl)
1222 unsigned long flags;
1224 spin_lock_irqsave(&wl->wl_lock, flags);
1225 set_bit(WL1271_FLAG_DUMMY_PACKET_PENDING, &wl->flags);
1226 wl->tx_queue_count++;
1227 spin_unlock_irqrestore(&wl->wl_lock, flags);
1229 /* The FW is low on RX memory blocks, so send the dummy packet asap */
1230 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags))
1231 wl1271_tx_work_locked(wl);
1234 * If the FW TX is busy, TX work will be scheduled by the threaded
1235 * interrupt handler function
1241 * The size of the dummy packet should be at least 1400 bytes. However, in
1242 * order to minimize the number of bus transactions, aligning it to 512 bytes
1243 * boundaries could be beneficial, performance wise
1245 #define TOTAL_TX_DUMMY_PACKET_SIZE (ALIGN(1400, 512))
1247 static struct sk_buff *wl12xx_alloc_dummy_packet(struct wl1271 *wl)
1249 struct sk_buff *skb;
1250 struct ieee80211_hdr_3addr *hdr;
1251 unsigned int dummy_packet_size;
1253 dummy_packet_size = TOTAL_TX_DUMMY_PACKET_SIZE -
1254 sizeof(struct wl1271_tx_hw_descr) - sizeof(*hdr);
1256 skb = dev_alloc_skb(TOTAL_TX_DUMMY_PACKET_SIZE);
1258 wl1271_warning("Failed to allocate a dummy packet skb");
1262 skb_reserve(skb, sizeof(struct wl1271_tx_hw_descr));
1264 hdr = (struct ieee80211_hdr_3addr *) skb_put(skb, sizeof(*hdr));
1265 memset(hdr, 0, sizeof(*hdr));
1266 hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_DATA |
1267 IEEE80211_STYPE_NULLFUNC |
1268 IEEE80211_FCTL_TODS);
1270 memset(skb_put(skb, dummy_packet_size), 0, dummy_packet_size);
1272 /* Dummy packets require the TID to be management */
1273 skb->priority = WL1271_TID_MGMT;
1275 /* Initialize all fields that might be used */
1276 skb->queue_mapping = 0;
1277 memset(IEEE80211_SKB_CB(skb), 0, sizeof(struct ieee80211_tx_info));
1283 static struct notifier_block wl1271_dev_notifier = {
1284 .notifier_call = wl1271_dev_notify,
1287 static int wl1271_op_start(struct ieee80211_hw *hw)
1289 wl1271_debug(DEBUG_MAC80211, "mac80211 start");
1292 * We have to delay the booting of the hardware because
1293 * we need to know the local MAC address before downloading and
1294 * initializing the firmware. The MAC address cannot be changed
1295 * after boot, and without the proper MAC address, the firmware
1296 * will not function properly.
1298 * The MAC address is first known when the corresponding interface
1299 * is added. That is where we will initialize the hardware.
1301 * In addition, we currently have different firmwares for AP and managed
1302 * operation. We will know which to boot according to interface type.
1308 static void wl1271_op_stop(struct ieee80211_hw *hw)
1310 wl1271_debug(DEBUG_MAC80211, "mac80211 stop");
1313 static int wl1271_op_add_interface(struct ieee80211_hw *hw,
1314 struct ieee80211_vif *vif)
1316 struct wl1271 *wl = hw->priv;
1317 struct wiphy *wiphy = hw->wiphy;
1318 int retries = WL1271_BOOT_RETRIES;
1320 bool booted = false;
1322 wl1271_debug(DEBUG_MAC80211, "mac80211 add interface type %d mac %pM",
1323 vif->type, vif->addr);
1325 mutex_lock(&wl->mutex);
1327 wl1271_debug(DEBUG_MAC80211,
1328 "multiple vifs are not supported yet");
1334 * in some very corner case HW recovery scenarios its possible to
1335 * get here before __wl1271_op_remove_interface is complete, so
1336 * opt out if that is the case.
1338 if (test_bit(WL1271_FLAG_IF_INITIALIZED, &wl->flags)) {
1343 switch (vif->type) {
1344 case NL80211_IFTYPE_STATION:
1345 wl->bss_type = BSS_TYPE_STA_BSS;
1346 wl->set_bss_type = BSS_TYPE_STA_BSS;
1348 case NL80211_IFTYPE_ADHOC:
1349 wl->bss_type = BSS_TYPE_IBSS;
1350 wl->set_bss_type = BSS_TYPE_STA_BSS;
1352 case NL80211_IFTYPE_AP:
1353 wl->bss_type = BSS_TYPE_AP_BSS;
1360 memcpy(wl->mac_addr, vif->addr, ETH_ALEN);
1362 if (wl->state != WL1271_STATE_OFF) {
1363 wl1271_error("cannot start because not in off state: %d",
1371 ret = wl1271_chip_wakeup(wl);
1375 ret = wl1271_boot(wl);
1379 ret = wl1271_hw_init(wl);
1387 mutex_unlock(&wl->mutex);
1388 /* Unlocking the mutex in the middle of handling is
1389 inherently unsafe. In this case we deem it safe to do,
1390 because we need to let any possibly pending IRQ out of
1391 the system (and while we are WL1271_STATE_OFF the IRQ
1392 work function will not do anything.) Also, any other
1393 possible concurrent operations will fail due to the
1394 current state, hence the wl1271 struct should be safe. */
1395 wl1271_disable_interrupts(wl);
1396 wl1271_flush_deferred_work(wl);
1397 cancel_work_sync(&wl->netstack_work);
1398 mutex_lock(&wl->mutex);
1400 wl1271_power_off(wl);
1404 wl1271_error("firmware boot failed despite %d retries",
1405 WL1271_BOOT_RETRIES);
1410 wl->state = WL1271_STATE_ON;
1411 set_bit(WL1271_FLAG_IF_INITIALIZED, &wl->flags);
1412 wl1271_info("firmware booted (%s)", wl->chip.fw_ver_str);
1414 /* update hw/fw version info in wiphy struct */
1415 wiphy->hw_version = wl->chip.id;
1416 strncpy(wiphy->fw_version, wl->chip.fw_ver_str,
1417 sizeof(wiphy->fw_version));
1419 /* Check if any quirks are needed with older fw versions */
1420 wl->quirks |= wl1271_get_fw_ver_quirks(wl);
1423 * Now we know if 11a is supported (info from the NVS), so disable
1424 * 11a channels if not supported
1426 if (!wl->enable_11a)
1427 wiphy->bands[IEEE80211_BAND_5GHZ]->n_channels = 0;
1429 wl1271_debug(DEBUG_MAC80211, "11a is %ssupported",
1430 wl->enable_11a ? "" : "not ");
1433 mutex_unlock(&wl->mutex);
1435 mutex_lock(&wl_list_mutex);
1437 list_add(&wl->list, &wl_list);
1438 mutex_unlock(&wl_list_mutex);
1443 static void __wl1271_op_remove_interface(struct wl1271 *wl)
1447 wl1271_debug(DEBUG_MAC80211, "mac80211 remove interface");
1449 /* because of hardware recovery, we may get here twice */
1450 if (wl->state != WL1271_STATE_ON)
1453 wl1271_info("down");
1455 mutex_lock(&wl_list_mutex);
1456 list_del(&wl->list);
1457 mutex_unlock(&wl_list_mutex);
1459 /* enable dyn ps just in case (if left on due to fw crash etc) */
1460 if (wl->bss_type == BSS_TYPE_STA_BSS)
1461 ieee80211_enable_dyn_ps(wl->vif);
1463 if (wl->scan.state != WL1271_SCAN_STATE_IDLE) {
1464 wl->scan.state = WL1271_SCAN_STATE_IDLE;
1465 memset(wl->scan.scanned_ch, 0, sizeof(wl->scan.scanned_ch));
1466 wl->scan.req = NULL;
1467 ieee80211_scan_completed(wl->hw, true);
1471 * this must be before the cancel_work calls below, so that the work
1472 * functions don't perform further work.
1474 wl->state = WL1271_STATE_OFF;
1476 mutex_unlock(&wl->mutex);
1478 wl1271_disable_interrupts(wl);
1479 wl1271_flush_deferred_work(wl);
1480 cancel_delayed_work_sync(&wl->scan_complete_work);
1481 cancel_work_sync(&wl->netstack_work);
1482 cancel_work_sync(&wl->tx_work);
1483 cancel_delayed_work_sync(&wl->pspoll_work);
1484 cancel_delayed_work_sync(&wl->elp_work);
1486 mutex_lock(&wl->mutex);
1488 /* let's notify MAC80211 about the remaining pending TX frames */
1489 wl1271_tx_reset(wl);
1490 wl1271_power_off(wl);
1492 memset(wl->bssid, 0, ETH_ALEN);
1493 memset(wl->ssid, 0, IW_ESSID_MAX_SIZE + 1);
1495 wl->bss_type = MAX_BSS_TYPE;
1496 wl->set_bss_type = MAX_BSS_TYPE;
1497 wl->band = IEEE80211_BAND_2GHZ;
1500 wl->psm_entry_retry = 0;
1501 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
1502 wl->tx_blocks_available = 0;
1503 wl->tx_allocated_blocks = 0;
1504 wl->tx_results_count = 0;
1505 wl->tx_packets_count = 0;
1506 wl->tx_security_last_seq = 0;
1507 wl->tx_security_seq = 0;
1508 wl->time_offset = 0;
1509 wl->session_counter = 0;
1510 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
1513 wl1271_free_ap_keys(wl);
1514 memset(wl->ap_hlid_map, 0, sizeof(wl->ap_hlid_map));
1515 wl->ap_fw_ps_map = 0;
1519 * this is performed after the cancel_work calls and the associated
1520 * mutex_lock, so that wl1271_op_add_interface does not accidentally
1521 * get executed before all these vars have been reset.
1525 for (i = 0; i < NUM_TX_QUEUES; i++)
1526 wl->tx_blocks_freed[i] = 0;
1528 wl1271_debugfs_reset(wl);
1530 kfree(wl->fw_status);
1531 wl->fw_status = NULL;
1532 kfree(wl->tx_res_if);
1533 wl->tx_res_if = NULL;
1534 kfree(wl->target_mem_map);
1535 wl->target_mem_map = NULL;
1538 static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
1539 struct ieee80211_vif *vif)
1541 struct wl1271 *wl = hw->priv;
1543 mutex_lock(&wl->mutex);
1545 * wl->vif can be null here if someone shuts down the interface
1546 * just when hardware recovery has been started.
1549 WARN_ON(wl->vif != vif);
1550 __wl1271_op_remove_interface(wl);
1553 mutex_unlock(&wl->mutex);
1554 cancel_work_sync(&wl->recovery_work);
1557 void wl1271_configure_filters(struct wl1271 *wl, unsigned int filters)
1559 wl1271_set_default_filters(wl);
1561 /* combine requested filters with current filter config */
1562 filters = wl->filters | filters;
1564 wl1271_debug(DEBUG_FILTERS, "RX filters set: ");
1566 if (filters & FIF_PROMISC_IN_BSS) {
1567 wl1271_debug(DEBUG_FILTERS, " - FIF_PROMISC_IN_BSS");
1568 wl->rx_config &= ~CFG_UNI_FILTER_EN;
1569 wl->rx_config |= CFG_BSSID_FILTER_EN;
1571 if (filters & FIF_BCN_PRBRESP_PROMISC) {
1572 wl1271_debug(DEBUG_FILTERS, " - FIF_BCN_PRBRESP_PROMISC");
1573 wl->rx_config &= ~CFG_BSSID_FILTER_EN;
1574 wl->rx_config &= ~CFG_SSID_FILTER_EN;
1576 if (filters & FIF_OTHER_BSS) {
1577 wl1271_debug(DEBUG_FILTERS, " - FIF_OTHER_BSS");
1578 wl->rx_config &= ~CFG_BSSID_FILTER_EN;
1580 if (filters & FIF_CONTROL) {
1581 wl1271_debug(DEBUG_FILTERS, " - FIF_CONTROL");
1582 wl->rx_filter |= CFG_RX_CTL_EN;
1584 if (filters & FIF_FCSFAIL) {
1585 wl1271_debug(DEBUG_FILTERS, " - FIF_FCSFAIL");
1586 wl->rx_filter |= CFG_RX_FCS_ERROR;
1590 static int wl1271_dummy_join(struct wl1271 *wl)
1593 /* we need to use a dummy BSSID for now */
1594 static const u8 dummy_bssid[ETH_ALEN] = { 0x0b, 0xad, 0xde,
1597 memcpy(wl->bssid, dummy_bssid, ETH_ALEN);
1599 /* pass through frames from all BSS */
1600 wl1271_configure_filters(wl, FIF_OTHER_BSS);
1602 ret = wl1271_cmd_join(wl, wl->set_bss_type);
1606 set_bit(WL1271_FLAG_JOINED, &wl->flags);
1612 static int wl1271_join(struct wl1271 *wl, bool set_assoc)
1617 * One of the side effects of the JOIN command is that is clears
1618 * WPA/WPA2 keys from the chipset. Performing a JOIN while associated
1619 * to a WPA/WPA2 access point will therefore kill the data-path.
1620 * Currently the only valid scenario for JOIN during association
1621 * is on roaming, in which case we will also be given new keys.
1622 * Keep the below message for now, unless it starts bothering
1623 * users who really like to roam a lot :)
1625 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1626 wl1271_info("JOIN while associated.");
1629 set_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
1631 ret = wl1271_cmd_join(wl, wl->set_bss_type);
1635 set_bit(WL1271_FLAG_JOINED, &wl->flags);
1637 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1641 * The join command disable the keep-alive mode, shut down its process,
1642 * and also clear the template config, so we need to reset it all after
1643 * the join. The acx_aid starts the keep-alive process, and the order
1644 * of the commands below is relevant.
1646 ret = wl1271_acx_keep_alive_mode(wl, true);
1650 ret = wl1271_acx_aid(wl, wl->aid);
1654 ret = wl1271_cmd_build_klv_null_data(wl);
1658 ret = wl1271_acx_keep_alive_config(wl, CMD_TEMPL_KLV_IDX_NULL_DATA,
1659 ACX_KEEP_ALIVE_TPL_VALID);
1667 static int wl1271_unjoin(struct wl1271 *wl)
1671 /* to stop listening to a channel, we disconnect */
1672 ret = wl1271_cmd_disconnect(wl);
1676 clear_bit(WL1271_FLAG_JOINED, &wl->flags);
1677 memset(wl->bssid, 0, ETH_ALEN);
1679 /* stop filtering packets based on bssid */
1680 wl1271_configure_filters(wl, FIF_OTHER_BSS);
1686 static void wl1271_set_band_rate(struct wl1271 *wl)
1688 if (wl->band == IEEE80211_BAND_2GHZ)
1689 wl->basic_rate_set = wl->conf.tx.basic_rate;
1691 wl->basic_rate_set = wl->conf.tx.basic_rate_5;
1694 static int wl1271_sta_handle_idle(struct wl1271 *wl, bool idle)
1699 if (test_bit(WL1271_FLAG_JOINED, &wl->flags)) {
1700 ret = wl1271_unjoin(wl);
1704 wl->rate_set = wl1271_tx_min_rate_get(wl);
1705 ret = wl1271_acx_sta_rate_policies(wl);
1708 ret = wl1271_acx_keep_alive_config(
1709 wl, CMD_TEMPL_KLV_IDX_NULL_DATA,
1710 ACX_KEEP_ALIVE_TPL_INVALID);
1713 set_bit(WL1271_FLAG_IDLE, &wl->flags);
1715 /* increment the session counter */
1716 wl->session_counter++;
1717 if (wl->session_counter >= SESSION_COUNTER_MAX)
1718 wl->session_counter = 0;
1719 ret = wl1271_dummy_join(wl);
1722 clear_bit(WL1271_FLAG_IDLE, &wl->flags);
1729 static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed)
1731 struct wl1271 *wl = hw->priv;
1732 struct ieee80211_conf *conf = &hw->conf;
1733 int channel, ret = 0;
1736 channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
1738 wl1271_debug(DEBUG_MAC80211, "mac80211 config ch %d psm %s power %d %s"
1741 conf->flags & IEEE80211_CONF_PS ? "on" : "off",
1743 conf->flags & IEEE80211_CONF_IDLE ? "idle" : "in use",
1747 * mac80211 will go to idle nearly immediately after transmitting some
1748 * frames, such as the deauth. To make sure those frames reach the air,
1749 * wait here until the TX queue is fully flushed.
1751 if ((changed & IEEE80211_CONF_CHANGE_IDLE) &&
1752 (conf->flags & IEEE80211_CONF_IDLE))
1753 wl1271_tx_flush(wl);
1755 mutex_lock(&wl->mutex);
1757 if (unlikely(wl->state == WL1271_STATE_OFF)) {
1758 /* we support configuring the channel and band while off */
1759 if ((changed & IEEE80211_CONF_CHANGE_CHANNEL)) {
1760 wl->band = conf->channel->band;
1761 wl->channel = channel;
1767 is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
1769 ret = wl1271_ps_elp_wakeup(wl);
1773 /* if the channel changes while joined, join again */
1774 if (changed & IEEE80211_CONF_CHANGE_CHANNEL &&
1775 ((wl->band != conf->channel->band) ||
1776 (wl->channel != channel))) {
1777 wl->band = conf->channel->band;
1778 wl->channel = channel;
1782 * FIXME: the mac80211 should really provide a fixed
1783 * rate to use here. for now, just use the smallest
1784 * possible rate for the band as a fixed rate for
1785 * association frames and other control messages.
1787 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1788 wl1271_set_band_rate(wl);
1790 wl->basic_rate = wl1271_tx_min_rate_get(wl);
1791 ret = wl1271_acx_sta_rate_policies(wl);
1793 wl1271_warning("rate policy for channel "
1796 if (test_bit(WL1271_FLAG_JOINED, &wl->flags)) {
1797 ret = wl1271_join(wl, false);
1799 wl1271_warning("cmd join on channel "
1805 if (changed & IEEE80211_CONF_CHANGE_IDLE && !is_ap) {
1806 ret = wl1271_sta_handle_idle(wl,
1807 conf->flags & IEEE80211_CONF_IDLE);
1809 wl1271_warning("idle mode change failed %d", ret);
1813 * if mac80211 changes the PSM mode, make sure the mode is not
1814 * incorrectly changed after the pspoll failure active window.
1816 if (changed & IEEE80211_CONF_CHANGE_PS)
1817 clear_bit(WL1271_FLAG_PSPOLL_FAILURE, &wl->flags);
1819 if (conf->flags & IEEE80211_CONF_PS &&
1820 !test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
1821 set_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
1824 * We enter PSM only if we're already associated.
1825 * If we're not, we'll enter it when joining an SSID,
1826 * through the bss_info_changed() hook.
1828 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags)) {
1829 wl1271_debug(DEBUG_PSM, "psm enabled");
1830 ret = wl1271_ps_set_mode(wl, STATION_POWER_SAVE_MODE,
1831 wl->basic_rate, true);
1833 } else if (!(conf->flags & IEEE80211_CONF_PS) &&
1834 test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
1835 wl1271_debug(DEBUG_PSM, "psm disabled");
1837 clear_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
1839 if (test_bit(WL1271_FLAG_PSM, &wl->flags))
1840 ret = wl1271_ps_set_mode(wl, STATION_ACTIVE_MODE,
1841 wl->basic_rate, true);
1844 if (conf->power_level != wl->power_level) {
1845 ret = wl1271_acx_tx_power(wl, conf->power_level);
1849 wl->power_level = conf->power_level;
1853 wl1271_ps_elp_sleep(wl);
1856 mutex_unlock(&wl->mutex);
1861 struct wl1271_filter_params {
1864 u8 mc_list[ACX_MC_ADDRESS_GROUP_MAX][ETH_ALEN];
1867 static u64 wl1271_op_prepare_multicast(struct ieee80211_hw *hw,
1868 struct netdev_hw_addr_list *mc_list)
1870 struct wl1271_filter_params *fp;
1871 struct netdev_hw_addr *ha;
1872 struct wl1271 *wl = hw->priv;
1874 if (unlikely(wl->state == WL1271_STATE_OFF))
1877 fp = kzalloc(sizeof(*fp), GFP_ATOMIC);
1879 wl1271_error("Out of memory setting filters.");
1883 /* update multicast filtering parameters */
1884 fp->mc_list_length = 0;
1885 if (netdev_hw_addr_list_count(mc_list) > ACX_MC_ADDRESS_GROUP_MAX) {
1886 fp->enabled = false;
1889 netdev_hw_addr_list_for_each(ha, mc_list) {
1890 memcpy(fp->mc_list[fp->mc_list_length],
1891 ha->addr, ETH_ALEN);
1892 fp->mc_list_length++;
1896 return (u64)(unsigned long)fp;
1899 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
1902 FIF_BCN_PRBRESP_PROMISC | \
1906 static void wl1271_op_configure_filter(struct ieee80211_hw *hw,
1907 unsigned int changed,
1908 unsigned int *total, u64 multicast)
1910 struct wl1271_filter_params *fp = (void *)(unsigned long)multicast;
1911 struct wl1271 *wl = hw->priv;
1914 wl1271_debug(DEBUG_MAC80211, "mac80211 configure filter changed %x"
1915 " total %x", changed, *total);
1917 mutex_lock(&wl->mutex);
1919 *total &= WL1271_SUPPORTED_FILTERS;
1920 changed &= WL1271_SUPPORTED_FILTERS;
1922 if (unlikely(wl->state == WL1271_STATE_OFF))
1925 ret = wl1271_ps_elp_wakeup(wl);
1929 if (wl->bss_type != BSS_TYPE_AP_BSS) {
1930 if (*total & FIF_ALLMULTI)
1931 ret = wl1271_acx_group_address_tbl(wl, false, NULL, 0);
1933 ret = wl1271_acx_group_address_tbl(wl, fp->enabled,
1935 fp->mc_list_length);
1940 /* determine, whether supported filter values have changed */
1944 /* configure filters */
1945 wl->filters = *total;
1946 wl1271_configure_filters(wl, 0);
1948 /* apply configured filters */
1949 ret = wl1271_acx_rx_config(wl, wl->rx_config, wl->rx_filter);
1954 wl1271_ps_elp_sleep(wl);
1957 mutex_unlock(&wl->mutex);
1961 static int wl1271_record_ap_key(struct wl1271 *wl, u8 id, u8 key_type,
1962 u8 key_size, const u8 *key, u8 hlid, u32 tx_seq_32,
1965 struct wl1271_ap_key *ap_key;
1968 wl1271_debug(DEBUG_CRYPT, "record ap key id %d", (int)id);
1970 if (key_size > MAX_KEY_SIZE)
1974 * Find next free entry in ap_keys. Also check we are not replacing
1977 for (i = 0; i < MAX_NUM_KEYS; i++) {
1978 if (wl->recorded_ap_keys[i] == NULL)
1981 if (wl->recorded_ap_keys[i]->id == id) {
1982 wl1271_warning("trying to record key replacement");
1987 if (i == MAX_NUM_KEYS)
1990 ap_key = kzalloc(sizeof(*ap_key), GFP_KERNEL);
1995 ap_key->key_type = key_type;
1996 ap_key->key_size = key_size;
1997 memcpy(ap_key->key, key, key_size);
1998 ap_key->hlid = hlid;
1999 ap_key->tx_seq_32 = tx_seq_32;
2000 ap_key->tx_seq_16 = tx_seq_16;
2002 wl->recorded_ap_keys[i] = ap_key;
2006 static void wl1271_free_ap_keys(struct wl1271 *wl)
2010 for (i = 0; i < MAX_NUM_KEYS; i++) {
2011 kfree(wl->recorded_ap_keys[i]);
2012 wl->recorded_ap_keys[i] = NULL;
2016 static int wl1271_ap_init_hwenc(struct wl1271 *wl)
2019 struct wl1271_ap_key *key;
2020 bool wep_key_added = false;
2022 for (i = 0; i < MAX_NUM_KEYS; i++) {
2023 if (wl->recorded_ap_keys[i] == NULL)
2026 key = wl->recorded_ap_keys[i];
2027 ret = wl1271_cmd_set_ap_key(wl, KEY_ADD_OR_REPLACE,
2028 key->id, key->key_type,
2029 key->key_size, key->key,
2030 key->hlid, key->tx_seq_32,
2035 if (key->key_type == KEY_WEP)
2036 wep_key_added = true;
2039 if (wep_key_added) {
2040 ret = wl1271_cmd_set_ap_default_wep_key(wl, wl->default_key);
2046 wl1271_free_ap_keys(wl);
2050 static int wl1271_set_key(struct wl1271 *wl, u16 action, u8 id, u8 key_type,
2051 u8 key_size, const u8 *key, u32 tx_seq_32,
2052 u16 tx_seq_16, struct ieee80211_sta *sta)
2055 bool is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
2058 struct wl1271_station *wl_sta;
2062 wl_sta = (struct wl1271_station *)sta->drv_priv;
2063 hlid = wl_sta->hlid;
2065 hlid = WL1271_AP_BROADCAST_HLID;
2068 if (!test_bit(WL1271_FLAG_AP_STARTED, &wl->flags)) {
2070 * We do not support removing keys after AP shutdown.
2071 * Pretend we do to make mac80211 happy.
2073 if (action != KEY_ADD_OR_REPLACE)
2076 ret = wl1271_record_ap_key(wl, id,
2078 key, hlid, tx_seq_32,
2081 ret = wl1271_cmd_set_ap_key(wl, action,
2082 id, key_type, key_size,
2083 key, hlid, tx_seq_32,
2091 static const u8 bcast_addr[ETH_ALEN] = {
2092 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
2095 addr = sta ? sta->addr : bcast_addr;
2097 if (is_zero_ether_addr(addr)) {
2098 /* We dont support TX only encryption */
2102 /* The wl1271 does not allow to remove unicast keys - they
2103 will be cleared automatically on next CMD_JOIN. Ignore the
2104 request silently, as we dont want the mac80211 to emit
2105 an error message. */
2106 if (action == KEY_REMOVE && !is_broadcast_ether_addr(addr))
2109 ret = wl1271_cmd_set_sta_key(wl, action,
2110 id, key_type, key_size,
2111 key, addr, tx_seq_32,
2116 /* the default WEP key needs to be configured at least once */
2117 if (key_type == KEY_WEP) {
2118 ret = wl1271_cmd_set_sta_default_wep_key(wl,
2128 static int wl1271_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
2129 struct ieee80211_vif *vif,
2130 struct ieee80211_sta *sta,
2131 struct ieee80211_key_conf *key_conf)
2133 struct wl1271 *wl = hw->priv;
2139 wl1271_debug(DEBUG_MAC80211, "mac80211 set key");
2141 wl1271_debug(DEBUG_CRYPT, "CMD: 0x%x sta: %p", cmd, sta);
2142 wl1271_debug(DEBUG_CRYPT, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
2143 key_conf->cipher, key_conf->keyidx,
2144 key_conf->keylen, key_conf->flags);
2145 wl1271_dump(DEBUG_CRYPT, "KEY: ", key_conf->key, key_conf->keylen);
2147 mutex_lock(&wl->mutex);
2149 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2154 ret = wl1271_ps_elp_wakeup(wl);
2158 switch (key_conf->cipher) {
2159 case WLAN_CIPHER_SUITE_WEP40:
2160 case WLAN_CIPHER_SUITE_WEP104:
2163 key_conf->hw_key_idx = key_conf->keyidx;
2165 case WLAN_CIPHER_SUITE_TKIP:
2166 key_type = KEY_TKIP;
2168 key_conf->hw_key_idx = key_conf->keyidx;
2169 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
2170 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
2172 case WLAN_CIPHER_SUITE_CCMP:
2175 key_conf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
2176 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
2177 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
2179 case WL1271_CIPHER_SUITE_GEM:
2181 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
2182 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
2185 wl1271_error("Unknown key algo 0x%x", key_conf->cipher);
2193 ret = wl1271_set_key(wl, KEY_ADD_OR_REPLACE,
2194 key_conf->keyidx, key_type,
2195 key_conf->keylen, key_conf->key,
2196 tx_seq_32, tx_seq_16, sta);
2198 wl1271_error("Could not add or replace key");
2204 ret = wl1271_set_key(wl, KEY_REMOVE,
2205 key_conf->keyidx, key_type,
2206 key_conf->keylen, key_conf->key,
2209 wl1271_error("Could not remove key");
2215 wl1271_error("Unsupported key cmd 0x%x", cmd);
2221 wl1271_ps_elp_sleep(wl);
2224 mutex_unlock(&wl->mutex);
2229 static int wl1271_op_hw_scan(struct ieee80211_hw *hw,
2230 struct ieee80211_vif *vif,
2231 struct cfg80211_scan_request *req)
2233 struct wl1271 *wl = hw->priv;
2238 wl1271_debug(DEBUG_MAC80211, "mac80211 hw scan");
2241 ssid = req->ssids[0].ssid;
2242 len = req->ssids[0].ssid_len;
2245 mutex_lock(&wl->mutex);
2247 if (wl->state == WL1271_STATE_OFF) {
2249 * We cannot return -EBUSY here because cfg80211 will expect
2250 * a call to ieee80211_scan_completed if we do - in this case
2251 * there won't be any call.
2257 ret = wl1271_ps_elp_wakeup(wl);
2261 ret = wl1271_scan(hw->priv, ssid, len, req);
2263 wl1271_ps_elp_sleep(wl);
2266 mutex_unlock(&wl->mutex);
2271 static int wl1271_op_set_frag_threshold(struct ieee80211_hw *hw, u32 value)
2273 struct wl1271 *wl = hw->priv;
2276 mutex_lock(&wl->mutex);
2278 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2283 ret = wl1271_ps_elp_wakeup(wl);
2287 ret = wl1271_acx_frag_threshold(wl, (u16)value);
2289 wl1271_warning("wl1271_op_set_frag_threshold failed: %d", ret);
2291 wl1271_ps_elp_sleep(wl);
2294 mutex_unlock(&wl->mutex);
2299 static int wl1271_op_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
2301 struct wl1271 *wl = hw->priv;
2304 mutex_lock(&wl->mutex);
2306 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2311 ret = wl1271_ps_elp_wakeup(wl);
2315 ret = wl1271_acx_rts_threshold(wl, (u16) value);
2317 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret);
2319 wl1271_ps_elp_sleep(wl);
2322 mutex_unlock(&wl->mutex);
2327 static int wl1271_ssid_set(struct wl1271 *wl, struct sk_buff *skb,
2330 u8 *ptr = skb->data + offset;
2332 /* find the location of the ssid in the beacon */
2333 while (ptr < skb->data + skb->len) {
2334 if (ptr[0] == WLAN_EID_SSID) {
2335 wl->ssid_len = ptr[1];
2336 memcpy(wl->ssid, ptr+2, wl->ssid_len);
2339 ptr += (ptr[1] + 2);
2342 wl1271_error("No SSID in IEs!\n");
2346 static int wl1271_bss_erp_info_changed(struct wl1271 *wl,
2347 struct ieee80211_bss_conf *bss_conf,
2352 if (changed & BSS_CHANGED_ERP_SLOT) {
2353 if (bss_conf->use_short_slot)
2354 ret = wl1271_acx_slot(wl, SLOT_TIME_SHORT);
2356 ret = wl1271_acx_slot(wl, SLOT_TIME_LONG);
2358 wl1271_warning("Set slot time failed %d", ret);
2363 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
2364 if (bss_conf->use_short_preamble)
2365 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_SHORT);
2367 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_LONG);
2370 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
2371 if (bss_conf->use_cts_prot)
2372 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_ENABLE);
2374 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_DISABLE);
2376 wl1271_warning("Set ctsprotect failed %d", ret);
2385 static int wl1271_bss_beacon_info_changed(struct wl1271 *wl,
2386 struct ieee80211_vif *vif,
2387 struct ieee80211_bss_conf *bss_conf,
2390 bool is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
2393 if ((changed & BSS_CHANGED_BEACON_INT)) {
2394 wl1271_debug(DEBUG_MASTER, "beacon interval updated: %d",
2395 bss_conf->beacon_int);
2397 wl->beacon_int = bss_conf->beacon_int;
2400 if ((changed & BSS_CHANGED_BEACON)) {
2401 struct ieee80211_hdr *hdr;
2402 int ieoffset = offsetof(struct ieee80211_mgmt,
2404 struct sk_buff *beacon = ieee80211_beacon_get(wl->hw, vif);
2410 wl1271_debug(DEBUG_MASTER, "beacon updated");
2412 ret = wl1271_ssid_set(wl, beacon, ieoffset);
2414 dev_kfree_skb(beacon);
2417 tmpl_id = is_ap ? CMD_TEMPL_AP_BEACON :
2419 ret = wl1271_cmd_template_set(wl, tmpl_id,
2422 wl1271_tx_min_rate_get(wl));
2424 dev_kfree_skb(beacon);
2428 hdr = (struct ieee80211_hdr *) beacon->data;
2429 hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
2430 IEEE80211_STYPE_PROBE_RESP);
2432 tmpl_id = is_ap ? CMD_TEMPL_AP_PROBE_RESPONSE :
2433 CMD_TEMPL_PROBE_RESPONSE;
2434 ret = wl1271_cmd_template_set(wl,
2438 wl1271_tx_min_rate_get(wl));
2439 dev_kfree_skb(beacon);
2448 /* AP mode changes */
2449 static void wl1271_bss_info_changed_ap(struct wl1271 *wl,
2450 struct ieee80211_vif *vif,
2451 struct ieee80211_bss_conf *bss_conf,
2456 if ((changed & BSS_CHANGED_BASIC_RATES)) {
2457 u32 rates = bss_conf->basic_rates;
2458 struct conf_tx_rate_class mgmt_rc;
2460 wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl, rates);
2461 wl->basic_rate = wl1271_tx_min_rate_get(wl);
2462 wl1271_debug(DEBUG_AP, "basic rates: 0x%x",
2463 wl->basic_rate_set);
2465 /* update the AP management rate policy with the new rates */
2466 mgmt_rc.enabled_rates = wl->basic_rate_set;
2467 mgmt_rc.long_retry_limit = 10;
2468 mgmt_rc.short_retry_limit = 10;
2470 ret = wl1271_acx_ap_rate_policy(wl, &mgmt_rc,
2471 ACX_TX_AP_MODE_MGMT_RATE);
2473 wl1271_error("AP mgmt policy change failed %d", ret);
2478 ret = wl1271_bss_beacon_info_changed(wl, vif, bss_conf, changed);
2482 if ((changed & BSS_CHANGED_BEACON_ENABLED)) {
2483 if (bss_conf->enable_beacon) {
2484 if (!test_bit(WL1271_FLAG_AP_STARTED, &wl->flags)) {
2485 ret = wl1271_cmd_start_bss(wl);
2489 set_bit(WL1271_FLAG_AP_STARTED, &wl->flags);
2490 wl1271_debug(DEBUG_AP, "started AP");
2492 ret = wl1271_ap_init_hwenc(wl);
2497 if (test_bit(WL1271_FLAG_AP_STARTED, &wl->flags)) {
2498 ret = wl1271_cmd_stop_bss(wl);
2502 clear_bit(WL1271_FLAG_AP_STARTED, &wl->flags);
2503 wl1271_debug(DEBUG_AP, "stopped AP");
2508 ret = wl1271_bss_erp_info_changed(wl, bss_conf, changed);
2515 /* STA/IBSS mode changes */
2516 static void wl1271_bss_info_changed_sta(struct wl1271 *wl,
2517 struct ieee80211_vif *vif,
2518 struct ieee80211_bss_conf *bss_conf,
2521 bool do_join = false, set_assoc = false;
2522 bool is_ibss = (wl->bss_type == BSS_TYPE_IBSS);
2523 u32 sta_rate_set = 0;
2525 struct ieee80211_sta *sta;
2526 bool sta_exists = false;
2527 struct ieee80211_sta_ht_cap sta_ht_cap;
2530 ret = wl1271_bss_beacon_info_changed(wl, vif, bss_conf,
2536 if ((changed & BSS_CHANGED_BEACON_INT) && is_ibss)
2539 /* Need to update the SSID (for filtering etc) */
2540 if ((changed & BSS_CHANGED_BEACON) && is_ibss)
2543 if ((changed & BSS_CHANGED_BEACON_ENABLED) && is_ibss) {
2544 wl1271_debug(DEBUG_ADHOC, "ad-hoc beaconing: %s",
2545 bss_conf->enable_beacon ? "enabled" : "disabled");
2547 if (bss_conf->enable_beacon)
2548 wl->set_bss_type = BSS_TYPE_IBSS;
2550 wl->set_bss_type = BSS_TYPE_STA_BSS;
2554 if ((changed & BSS_CHANGED_CQM)) {
2555 bool enable = false;
2556 if (bss_conf->cqm_rssi_thold)
2558 ret = wl1271_acx_rssi_snr_trigger(wl, enable,
2559 bss_conf->cqm_rssi_thold,
2560 bss_conf->cqm_rssi_hyst);
2563 wl->rssi_thold = bss_conf->cqm_rssi_thold;
2566 if ((changed & BSS_CHANGED_BSSID) &&
2568 * Now we know the correct bssid, so we send a new join command
2569 * and enable the BSSID filter
2571 memcmp(wl->bssid, bss_conf->bssid, ETH_ALEN)) {
2572 memcpy(wl->bssid, bss_conf->bssid, ETH_ALEN);
2574 if (!is_zero_ether_addr(wl->bssid)) {
2575 ret = wl1271_cmd_build_null_data(wl);
2579 ret = wl1271_build_qos_null_data(wl);
2583 /* filter out all packets not from this BSSID */
2584 wl1271_configure_filters(wl, 0);
2586 /* Need to update the BSSID (for filtering etc) */
2592 sta = ieee80211_find_sta(vif, bss_conf->bssid);
2594 /* save the supp_rates of the ap */
2595 sta_rate_set = sta->supp_rates[wl->hw->conf.channel->band];
2596 if (sta->ht_cap.ht_supported)
2598 (sta->ht_cap.mcs.rx_mask[0] << HW_HT_RATES_OFFSET);
2599 sta_ht_cap = sta->ht_cap;
2605 /* handle new association with HT and HT information change */
2606 if ((changed & BSS_CHANGED_HT) &&
2607 (bss_conf->channel_type != NL80211_CHAN_NO_HT)) {
2608 ret = wl1271_acx_set_ht_capabilities(wl, &sta_ht_cap,
2611 wl1271_warning("Set ht cap true failed %d",
2615 ret = wl1271_acx_set_ht_information(wl,
2616 bss_conf->ht_operation_mode);
2618 wl1271_warning("Set ht information failed %d",
2623 /* handle new association without HT and disassociation */
2624 else if (changed & BSS_CHANGED_ASSOC) {
2625 ret = wl1271_acx_set_ht_capabilities(wl, &sta_ht_cap,
2628 wl1271_warning("Set ht cap false failed %d",
2635 if ((changed & BSS_CHANGED_ASSOC)) {
2636 if (bss_conf->assoc) {
2639 wl->aid = bss_conf->aid;
2642 wl->ps_poll_failures = 0;
2645 * use basic rates from AP, and determine lowest rate
2646 * to use with control frames.
2648 rates = bss_conf->basic_rates;
2649 wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl,
2651 wl->basic_rate = wl1271_tx_min_rate_get(wl);
2653 wl->rate_set = wl1271_tx_enabled_rates_get(wl,
2655 ret = wl1271_acx_sta_rate_policies(wl);
2660 * with wl1271, we don't need to update the
2661 * beacon_int and dtim_period, because the firmware
2662 * updates it by itself when the first beacon is
2663 * received after a join.
2665 ret = wl1271_cmd_build_ps_poll(wl, wl->aid);
2670 * Get a template for hardware connection maintenance
2672 dev_kfree_skb(wl->probereq);
2673 wl->probereq = wl1271_cmd_build_ap_probe_req(wl, NULL);
2674 ieoffset = offsetof(struct ieee80211_mgmt,
2675 u.probe_req.variable);
2676 wl1271_ssid_set(wl, wl->probereq, ieoffset);
2678 /* enable the connection monitoring feature */
2679 ret = wl1271_acx_conn_monit_params(wl, true);
2683 /* If we want to go in PSM but we're not there yet */
2684 if (test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags) &&
2685 !test_bit(WL1271_FLAG_PSM, &wl->flags)) {
2686 enum wl1271_cmd_ps_mode mode;
2688 mode = STATION_POWER_SAVE_MODE;
2689 ret = wl1271_ps_set_mode(wl, mode,
2696 /* use defaults when not associated */
2697 clear_bit(WL1271_FLAG_STA_STATE_SENT, &wl->flags);
2698 clear_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
2701 /* free probe-request template */
2702 dev_kfree_skb(wl->probereq);
2703 wl->probereq = NULL;
2705 /* re-enable dynamic ps - just in case */
2706 ieee80211_enable_dyn_ps(wl->vif);
2708 /* revert back to minimum rates for the current band */
2709 wl1271_set_band_rate(wl);
2710 wl->basic_rate = wl1271_tx_min_rate_get(wl);
2711 ret = wl1271_acx_sta_rate_policies(wl);
2715 /* disable connection monitor features */
2716 ret = wl1271_acx_conn_monit_params(wl, false);
2718 /* Disable the keep-alive feature */
2719 ret = wl1271_acx_keep_alive_mode(wl, false);
2723 /* restore the bssid filter and go to dummy bssid */
2725 wl1271_dummy_join(wl);
2729 ret = wl1271_bss_erp_info_changed(wl, bss_conf, changed);
2733 if (changed & BSS_CHANGED_ARP_FILTER) {
2734 __be32 addr = bss_conf->arp_addr_list[0];
2735 WARN_ON(wl->bss_type != BSS_TYPE_STA_BSS);
2737 if (bss_conf->arp_addr_cnt == 1 &&
2738 bss_conf->arp_filter_enabled) {
2740 * The template should have been configured only upon
2741 * association. however, it seems that the correct ip
2742 * isn't being set (when sending), so we have to
2743 * reconfigure the template upon every ip change.
2745 ret = wl1271_cmd_build_arp_rsp(wl, addr);
2747 wl1271_warning("build arp rsp failed: %d", ret);
2751 ret = wl1271_acx_arp_ip_filter(wl,
2752 ACX_ARP_FILTER_ARP_FILTERING,
2755 ret = wl1271_acx_arp_ip_filter(wl, 0, addr);
2762 ret = wl1271_join(wl, set_assoc);
2764 wl1271_warning("cmd join failed %d", ret);
2773 static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
2774 struct ieee80211_vif *vif,
2775 struct ieee80211_bss_conf *bss_conf,
2778 struct wl1271 *wl = hw->priv;
2779 bool is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
2782 wl1271_debug(DEBUG_MAC80211, "mac80211 bss info changed 0x%x",
2785 mutex_lock(&wl->mutex);
2787 if (unlikely(wl->state == WL1271_STATE_OFF))
2790 ret = wl1271_ps_elp_wakeup(wl);
2795 wl1271_bss_info_changed_ap(wl, vif, bss_conf, changed);
2797 wl1271_bss_info_changed_sta(wl, vif, bss_conf, changed);
2799 wl1271_ps_elp_sleep(wl);
2802 mutex_unlock(&wl->mutex);
2805 static int wl1271_op_conf_tx(struct ieee80211_hw *hw, u16 queue,
2806 const struct ieee80211_tx_queue_params *params)
2808 struct wl1271 *wl = hw->priv;
2812 mutex_lock(&wl->mutex);
2814 wl1271_debug(DEBUG_MAC80211, "mac80211 conf tx %d", queue);
2817 ps_scheme = CONF_PS_SCHEME_UPSD_TRIGGER;
2819 ps_scheme = CONF_PS_SCHEME_LEGACY;
2821 if (wl->state == WL1271_STATE_OFF) {
2823 * If the state is off, the parameters will be recorded and
2824 * configured on init. This happens in AP-mode.
2826 struct conf_tx_ac_category *conf_ac =
2827 &wl->conf.tx.ac_conf[wl1271_tx_get_queue(queue)];
2828 struct conf_tx_tid *conf_tid =
2829 &wl->conf.tx.tid_conf[wl1271_tx_get_queue(queue)];
2831 conf_ac->ac = wl1271_tx_get_queue(queue);
2832 conf_ac->cw_min = (u8)params->cw_min;
2833 conf_ac->cw_max = params->cw_max;
2834 conf_ac->aifsn = params->aifs;
2835 conf_ac->tx_op_limit = params->txop << 5;
2837 conf_tid->queue_id = wl1271_tx_get_queue(queue);
2838 conf_tid->channel_type = CONF_CHANNEL_TYPE_EDCF;
2839 conf_tid->tsid = wl1271_tx_get_queue(queue);
2840 conf_tid->ps_scheme = ps_scheme;
2841 conf_tid->ack_policy = CONF_ACK_POLICY_LEGACY;
2842 conf_tid->apsd_conf[0] = 0;
2843 conf_tid->apsd_conf[1] = 0;
2847 ret = wl1271_ps_elp_wakeup(wl);
2852 * the txop is confed in units of 32us by the mac80211,
2855 ret = wl1271_acx_ac_cfg(wl, wl1271_tx_get_queue(queue),
2856 params->cw_min, params->cw_max,
2857 params->aifs, params->txop << 5);
2861 ret = wl1271_acx_tid_cfg(wl, wl1271_tx_get_queue(queue),
2862 CONF_CHANNEL_TYPE_EDCF,
2863 wl1271_tx_get_queue(queue),
2864 ps_scheme, CONF_ACK_POLICY_LEGACY,
2868 wl1271_ps_elp_sleep(wl);
2871 mutex_unlock(&wl->mutex);
2876 static u64 wl1271_op_get_tsf(struct ieee80211_hw *hw)
2879 struct wl1271 *wl = hw->priv;
2880 u64 mactime = ULLONG_MAX;
2883 wl1271_debug(DEBUG_MAC80211, "mac80211 get tsf");
2885 mutex_lock(&wl->mutex);
2887 if (unlikely(wl->state == WL1271_STATE_OFF))
2890 ret = wl1271_ps_elp_wakeup(wl);
2894 ret = wl1271_acx_tsf_info(wl, &mactime);
2899 wl1271_ps_elp_sleep(wl);
2902 mutex_unlock(&wl->mutex);
2906 static int wl1271_op_get_survey(struct ieee80211_hw *hw, int idx,
2907 struct survey_info *survey)
2909 struct wl1271 *wl = hw->priv;
2910 struct ieee80211_conf *conf = &hw->conf;
2915 survey->channel = conf->channel;
2916 survey->filled = SURVEY_INFO_NOISE_DBM;
2917 survey->noise = wl->noise;
2922 static int wl1271_allocate_sta(struct wl1271 *wl,
2923 struct ieee80211_sta *sta,
2926 struct wl1271_station *wl_sta;
2929 id = find_first_zero_bit(wl->ap_hlid_map, AP_MAX_STATIONS);
2930 if (id >= AP_MAX_STATIONS) {
2931 wl1271_warning("could not allocate HLID - too much stations");
2935 wl_sta = (struct wl1271_station *)sta->drv_priv;
2936 __set_bit(id, wl->ap_hlid_map);
2937 wl_sta->hlid = WL1271_AP_STA_HLID_START + id;
2938 *hlid = wl_sta->hlid;
2939 memcpy(wl->links[wl_sta->hlid].addr, sta->addr, ETH_ALEN);
2943 static void wl1271_free_sta(struct wl1271 *wl, u8 hlid)
2945 int id = hlid - WL1271_AP_STA_HLID_START;
2947 if (WARN_ON(!test_bit(id, wl->ap_hlid_map)))
2950 __clear_bit(id, wl->ap_hlid_map);
2951 memset(wl->links[hlid].addr, 0, ETH_ALEN);
2952 wl1271_tx_reset_link_queues(wl, hlid);
2953 __clear_bit(hlid, &wl->ap_ps_map);
2954 __clear_bit(hlid, (unsigned long *)&wl->ap_fw_ps_map);
2957 bool wl1271_is_active_sta(struct wl1271 *wl, u8 hlid)
2959 int id = hlid - WL1271_AP_STA_HLID_START;
2960 return test_bit(id, wl->ap_hlid_map);
2963 static int wl1271_op_sta_add(struct ieee80211_hw *hw,
2964 struct ieee80211_vif *vif,
2965 struct ieee80211_sta *sta)
2967 struct wl1271 *wl = hw->priv;
2971 mutex_lock(&wl->mutex);
2973 if (unlikely(wl->state == WL1271_STATE_OFF))
2976 if (wl->bss_type != BSS_TYPE_AP_BSS)
2979 wl1271_debug(DEBUG_MAC80211, "mac80211 add sta %d", (int)sta->aid);
2981 ret = wl1271_allocate_sta(wl, sta, &hlid);
2985 ret = wl1271_ps_elp_wakeup(wl);
2989 ret = wl1271_cmd_add_sta(wl, sta, hlid);
2994 wl1271_ps_elp_sleep(wl);
2998 wl1271_free_sta(wl, hlid);
3001 mutex_unlock(&wl->mutex);
3005 static int wl1271_op_sta_remove(struct ieee80211_hw *hw,
3006 struct ieee80211_vif *vif,
3007 struct ieee80211_sta *sta)
3009 struct wl1271 *wl = hw->priv;
3010 struct wl1271_station *wl_sta;
3013 mutex_lock(&wl->mutex);
3015 if (unlikely(wl->state == WL1271_STATE_OFF))
3018 if (wl->bss_type != BSS_TYPE_AP_BSS)
3021 wl1271_debug(DEBUG_MAC80211, "mac80211 remove sta %d", (int)sta->aid);
3023 wl_sta = (struct wl1271_station *)sta->drv_priv;
3024 id = wl_sta->hlid - WL1271_AP_STA_HLID_START;
3025 if (WARN_ON(!test_bit(id, wl->ap_hlid_map)))
3028 ret = wl1271_ps_elp_wakeup(wl);
3032 ret = wl1271_cmd_remove_sta(wl, wl_sta->hlid);
3036 wl1271_free_sta(wl, wl_sta->hlid);
3039 wl1271_ps_elp_sleep(wl);
3042 mutex_unlock(&wl->mutex);
3046 static int wl1271_op_ampdu_action(struct ieee80211_hw *hw,
3047 struct ieee80211_vif *vif,
3048 enum ieee80211_ampdu_mlme_action action,
3049 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
3052 struct wl1271 *wl = hw->priv;
3055 mutex_lock(&wl->mutex);
3057 if (unlikely(wl->state == WL1271_STATE_OFF)) {
3062 ret = wl1271_ps_elp_wakeup(wl);
3067 case IEEE80211_AMPDU_RX_START:
3068 if (wl->ba_support) {
3069 ret = wl1271_acx_set_ba_receiver_session(wl, tid, *ssn,
3072 wl->ba_rx_bitmap |= BIT(tid);
3078 case IEEE80211_AMPDU_RX_STOP:
3079 ret = wl1271_acx_set_ba_receiver_session(wl, tid, 0, false);
3081 wl->ba_rx_bitmap &= ~BIT(tid);
3085 * The BA initiator session management in FW independently.
3086 * Falling break here on purpose for all TX APDU commands.
3088 case IEEE80211_AMPDU_TX_START:
3089 case IEEE80211_AMPDU_TX_STOP:
3090 case IEEE80211_AMPDU_TX_OPERATIONAL:
3095 wl1271_error("Incorrect ampdu action id=%x\n", action);
3099 wl1271_ps_elp_sleep(wl);
3102 mutex_unlock(&wl->mutex);
3107 /* can't be const, mac80211 writes to this */
3108 static struct ieee80211_rate wl1271_rates[] = {
3110 .hw_value = CONF_HW_BIT_RATE_1MBPS,
3111 .hw_value_short = CONF_HW_BIT_RATE_1MBPS, },
3113 .hw_value = CONF_HW_BIT_RATE_2MBPS,
3114 .hw_value_short = CONF_HW_BIT_RATE_2MBPS,
3115 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
3117 .hw_value = CONF_HW_BIT_RATE_5_5MBPS,
3118 .hw_value_short = CONF_HW_BIT_RATE_5_5MBPS,
3119 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
3121 .hw_value = CONF_HW_BIT_RATE_11MBPS,
3122 .hw_value_short = CONF_HW_BIT_RATE_11MBPS,
3123 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
3125 .hw_value = CONF_HW_BIT_RATE_6MBPS,
3126 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
3128 .hw_value = CONF_HW_BIT_RATE_9MBPS,
3129 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
3131 .hw_value = CONF_HW_BIT_RATE_12MBPS,
3132 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
3134 .hw_value = CONF_HW_BIT_RATE_18MBPS,
3135 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
3137 .hw_value = CONF_HW_BIT_RATE_24MBPS,
3138 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
3140 .hw_value = CONF_HW_BIT_RATE_36MBPS,
3141 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
3143 .hw_value = CONF_HW_BIT_RATE_48MBPS,
3144 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
3146 .hw_value = CONF_HW_BIT_RATE_54MBPS,
3147 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
3150 /* can't be const, mac80211 writes to this */
3151 static struct ieee80211_channel wl1271_channels[] = {
3152 { .hw_value = 1, .center_freq = 2412, .max_power = 25 },
3153 { .hw_value = 2, .center_freq = 2417, .max_power = 25 },
3154 { .hw_value = 3, .center_freq = 2422, .max_power = 25 },
3155 { .hw_value = 4, .center_freq = 2427, .max_power = 25 },
3156 { .hw_value = 5, .center_freq = 2432, .max_power = 25 },
3157 { .hw_value = 6, .center_freq = 2437, .max_power = 25 },
3158 { .hw_value = 7, .center_freq = 2442, .max_power = 25 },
3159 { .hw_value = 8, .center_freq = 2447, .max_power = 25 },
3160 { .hw_value = 9, .center_freq = 2452, .max_power = 25 },
3161 { .hw_value = 10, .center_freq = 2457, .max_power = 25 },
3162 { .hw_value = 11, .center_freq = 2462, .max_power = 25 },
3163 { .hw_value = 12, .center_freq = 2467, .max_power = 25 },
3164 { .hw_value = 13, .center_freq = 2472, .max_power = 25 },
3165 { .hw_value = 14, .center_freq = 2484, .max_power = 25 },
3168 /* mapping to indexes for wl1271_rates */
3169 static const u8 wl1271_rate_to_idx_2ghz[] = {
3170 /* MCS rates are used only with 11n */
3171 7, /* CONF_HW_RXTX_RATE_MCS7 */
3172 6, /* CONF_HW_RXTX_RATE_MCS6 */
3173 5, /* CONF_HW_RXTX_RATE_MCS5 */
3174 4, /* CONF_HW_RXTX_RATE_MCS4 */
3175 3, /* CONF_HW_RXTX_RATE_MCS3 */
3176 2, /* CONF_HW_RXTX_RATE_MCS2 */
3177 1, /* CONF_HW_RXTX_RATE_MCS1 */
3178 0, /* CONF_HW_RXTX_RATE_MCS0 */
3180 11, /* CONF_HW_RXTX_RATE_54 */
3181 10, /* CONF_HW_RXTX_RATE_48 */
3182 9, /* CONF_HW_RXTX_RATE_36 */
3183 8, /* CONF_HW_RXTX_RATE_24 */
3185 /* TI-specific rate */
3186 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
3188 7, /* CONF_HW_RXTX_RATE_18 */
3189 6, /* CONF_HW_RXTX_RATE_12 */
3190 3, /* CONF_HW_RXTX_RATE_11 */
3191 5, /* CONF_HW_RXTX_RATE_9 */
3192 4, /* CONF_HW_RXTX_RATE_6 */
3193 2, /* CONF_HW_RXTX_RATE_5_5 */
3194 1, /* CONF_HW_RXTX_RATE_2 */
3195 0 /* CONF_HW_RXTX_RATE_1 */
3198 /* 11n STA capabilities */
3199 #define HW_RX_HIGHEST_RATE 72
3201 #ifdef CONFIG_WL12XX_HT
3202 #define WL12XX_HT_CAP { \
3203 .cap = IEEE80211_HT_CAP_GRN_FLD | IEEE80211_HT_CAP_SGI_20 | \
3204 (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT), \
3205 .ht_supported = true, \
3206 .ampdu_factor = IEEE80211_HT_MAX_AMPDU_8K, \
3207 .ampdu_density = IEEE80211_HT_MPDU_DENSITY_8, \
3209 .rx_mask = { 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, \
3210 .rx_highest = cpu_to_le16(HW_RX_HIGHEST_RATE), \
3211 .tx_params = IEEE80211_HT_MCS_TX_DEFINED, \
3215 #define WL12XX_HT_CAP { \
3216 .ht_supported = false, \
3220 /* can't be const, mac80211 writes to this */
3221 static struct ieee80211_supported_band wl1271_band_2ghz = {
3222 .channels = wl1271_channels,
3223 .n_channels = ARRAY_SIZE(wl1271_channels),
3224 .bitrates = wl1271_rates,
3225 .n_bitrates = ARRAY_SIZE(wl1271_rates),
3226 .ht_cap = WL12XX_HT_CAP,
3229 /* 5 GHz data rates for WL1273 */
3230 static struct ieee80211_rate wl1271_rates_5ghz[] = {
3232 .hw_value = CONF_HW_BIT_RATE_6MBPS,
3233 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
3235 .hw_value = CONF_HW_BIT_RATE_9MBPS,
3236 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
3238 .hw_value = CONF_HW_BIT_RATE_12MBPS,
3239 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
3241 .hw_value = CONF_HW_BIT_RATE_18MBPS,
3242 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
3244 .hw_value = CONF_HW_BIT_RATE_24MBPS,
3245 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
3247 .hw_value = CONF_HW_BIT_RATE_36MBPS,
3248 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
3250 .hw_value = CONF_HW_BIT_RATE_48MBPS,
3251 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
3253 .hw_value = CONF_HW_BIT_RATE_54MBPS,
3254 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
3257 /* 5 GHz band channels for WL1273 */
3258 static struct ieee80211_channel wl1271_channels_5ghz[] = {
3259 { .hw_value = 7, .center_freq = 5035},
3260 { .hw_value = 8, .center_freq = 5040},
3261 { .hw_value = 9, .center_freq = 5045},
3262 { .hw_value = 11, .center_freq = 5055},
3263 { .hw_value = 12, .center_freq = 5060},
3264 { .hw_value = 16, .center_freq = 5080},
3265 { .hw_value = 34, .center_freq = 5170},
3266 { .hw_value = 36, .center_freq = 5180},
3267 { .hw_value = 38, .center_freq = 5190},
3268 { .hw_value = 40, .center_freq = 5200},
3269 { .hw_value = 42, .center_freq = 5210},
3270 { .hw_value = 44, .center_freq = 5220},
3271 { .hw_value = 46, .center_freq = 5230},
3272 { .hw_value = 48, .center_freq = 5240},
3273 { .hw_value = 52, .center_freq = 5260},
3274 { .hw_value = 56, .center_freq = 5280},
3275 { .hw_value = 60, .center_freq = 5300},
3276 { .hw_value = 64, .center_freq = 5320},
3277 { .hw_value = 100, .center_freq = 5500},
3278 { .hw_value = 104, .center_freq = 5520},
3279 { .hw_value = 108, .center_freq = 5540},
3280 { .hw_value = 112, .center_freq = 5560},
3281 { .hw_value = 116, .center_freq = 5580},
3282 { .hw_value = 120, .center_freq = 5600},
3283 { .hw_value = 124, .center_freq = 5620},
3284 { .hw_value = 128, .center_freq = 5640},
3285 { .hw_value = 132, .center_freq = 5660},
3286 { .hw_value = 136, .center_freq = 5680},
3287 { .hw_value = 140, .center_freq = 5700},
3288 { .hw_value = 149, .center_freq = 5745},
3289 { .hw_value = 153, .center_freq = 5765},
3290 { .hw_value = 157, .center_freq = 5785},
3291 { .hw_value = 161, .center_freq = 5805},
3292 { .hw_value = 165, .center_freq = 5825},
3295 /* mapping to indexes for wl1271_rates_5ghz */
3296 static const u8 wl1271_rate_to_idx_5ghz[] = {
3297 /* MCS rates are used only with 11n */
3298 7, /* CONF_HW_RXTX_RATE_MCS7 */
3299 6, /* CONF_HW_RXTX_RATE_MCS6 */
3300 5, /* CONF_HW_RXTX_RATE_MCS5 */
3301 4, /* CONF_HW_RXTX_RATE_MCS4 */
3302 3, /* CONF_HW_RXTX_RATE_MCS3 */
3303 2, /* CONF_HW_RXTX_RATE_MCS2 */
3304 1, /* CONF_HW_RXTX_RATE_MCS1 */
3305 0, /* CONF_HW_RXTX_RATE_MCS0 */
3307 7, /* CONF_HW_RXTX_RATE_54 */
3308 6, /* CONF_HW_RXTX_RATE_48 */
3309 5, /* CONF_HW_RXTX_RATE_36 */
3310 4, /* CONF_HW_RXTX_RATE_24 */
3312 /* TI-specific rate */
3313 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
3315 3, /* CONF_HW_RXTX_RATE_18 */
3316 2, /* CONF_HW_RXTX_RATE_12 */
3317 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_11 */
3318 1, /* CONF_HW_RXTX_RATE_9 */
3319 0, /* CONF_HW_RXTX_RATE_6 */
3320 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_5_5 */
3321 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_2 */
3322 CONF_HW_RXTX_RATE_UNSUPPORTED /* CONF_HW_RXTX_RATE_1 */
3325 static struct ieee80211_supported_band wl1271_band_5ghz = {
3326 .channels = wl1271_channels_5ghz,
3327 .n_channels = ARRAY_SIZE(wl1271_channels_5ghz),
3328 .bitrates = wl1271_rates_5ghz,
3329 .n_bitrates = ARRAY_SIZE(wl1271_rates_5ghz),
3330 .ht_cap = WL12XX_HT_CAP,
3333 static const u8 *wl1271_band_rate_to_idx[] = {
3334 [IEEE80211_BAND_2GHZ] = wl1271_rate_to_idx_2ghz,
3335 [IEEE80211_BAND_5GHZ] = wl1271_rate_to_idx_5ghz
3338 static const struct ieee80211_ops wl1271_ops = {
3339 .start = wl1271_op_start,
3340 .stop = wl1271_op_stop,
3341 .add_interface = wl1271_op_add_interface,
3342 .remove_interface = wl1271_op_remove_interface,
3343 .config = wl1271_op_config,
3344 .prepare_multicast = wl1271_op_prepare_multicast,
3345 .configure_filter = wl1271_op_configure_filter,
3347 .set_key = wl1271_op_set_key,
3348 .hw_scan = wl1271_op_hw_scan,
3349 .bss_info_changed = wl1271_op_bss_info_changed,
3350 .set_frag_threshold = wl1271_op_set_frag_threshold,
3351 .set_rts_threshold = wl1271_op_set_rts_threshold,
3352 .conf_tx = wl1271_op_conf_tx,
3353 .get_tsf = wl1271_op_get_tsf,
3354 .get_survey = wl1271_op_get_survey,
3355 .sta_add = wl1271_op_sta_add,
3356 .sta_remove = wl1271_op_sta_remove,
3357 .ampdu_action = wl1271_op_ampdu_action,
3358 CFG80211_TESTMODE_CMD(wl1271_tm_cmd)
3362 u8 wl1271_rate_to_idx(int rate, enum ieee80211_band band)
3366 BUG_ON(band >= sizeof(wl1271_band_rate_to_idx)/sizeof(u8 *));
3368 if (unlikely(rate >= CONF_HW_RXTX_RATE_MAX)) {
3369 wl1271_error("Illegal RX rate from HW: %d", rate);
3373 idx = wl1271_band_rate_to_idx[band][rate];
3374 if (unlikely(idx == CONF_HW_RXTX_RATE_UNSUPPORTED)) {
3375 wl1271_error("Unsupported RX rate from HW: %d", rate);
3382 static ssize_t wl1271_sysfs_show_bt_coex_state(struct device *dev,
3383 struct device_attribute *attr,
3386 struct wl1271 *wl = dev_get_drvdata(dev);
3391 mutex_lock(&wl->mutex);
3392 len = snprintf(buf, len, "%d\n\n0 - off\n1 - on\n",
3394 mutex_unlock(&wl->mutex);
3400 static ssize_t wl1271_sysfs_store_bt_coex_state(struct device *dev,
3401 struct device_attribute *attr,
3402 const char *buf, size_t count)
3404 struct wl1271 *wl = dev_get_drvdata(dev);
3408 ret = kstrtoul(buf, 10, &res);
3410 wl1271_warning("incorrect value written to bt_coex_mode");
3414 mutex_lock(&wl->mutex);
3418 if (res == wl->sg_enabled)
3421 wl->sg_enabled = res;
3423 if (wl->state == WL1271_STATE_OFF)
3426 ret = wl1271_ps_elp_wakeup(wl);
3430 wl1271_acx_sg_enable(wl, wl->sg_enabled);
3431 wl1271_ps_elp_sleep(wl);
3434 mutex_unlock(&wl->mutex);
3438 static DEVICE_ATTR(bt_coex_state, S_IRUGO | S_IWUSR,
3439 wl1271_sysfs_show_bt_coex_state,
3440 wl1271_sysfs_store_bt_coex_state);
3442 static ssize_t wl1271_sysfs_show_hw_pg_ver(struct device *dev,
3443 struct device_attribute *attr,
3446 struct wl1271 *wl = dev_get_drvdata(dev);
3451 mutex_lock(&wl->mutex);
3452 if (wl->hw_pg_ver >= 0)
3453 len = snprintf(buf, len, "%d\n", wl->hw_pg_ver);
3455 len = snprintf(buf, len, "n/a\n");
3456 mutex_unlock(&wl->mutex);
3461 static DEVICE_ATTR(hw_pg_ver, S_IRUGO | S_IWUSR,
3462 wl1271_sysfs_show_hw_pg_ver, NULL);
3464 int wl1271_register_hw(struct wl1271 *wl)
3468 if (wl->mac80211_registered)
3471 ret = wl1271_fetch_nvs(wl);
3473 /* NOTE: The wl->nvs->nvs element must be first, in
3474 * order to simplify the casting, we assume it is at
3475 * the beginning of the wl->nvs structure.
3477 u8 *nvs_ptr = (u8 *)wl->nvs;
3479 wl->mac_addr[0] = nvs_ptr[11];
3480 wl->mac_addr[1] = nvs_ptr[10];
3481 wl->mac_addr[2] = nvs_ptr[6];
3482 wl->mac_addr[3] = nvs_ptr[5];
3483 wl->mac_addr[4] = nvs_ptr[4];
3484 wl->mac_addr[5] = nvs_ptr[3];
3487 SET_IEEE80211_PERM_ADDR(wl->hw, wl->mac_addr);
3489 ret = ieee80211_register_hw(wl->hw);
3491 wl1271_error("unable to register mac80211 hw: %d", ret);
3495 wl->mac80211_registered = true;
3497 wl1271_debugfs_init(wl);
3499 register_netdevice_notifier(&wl1271_dev_notifier);
3501 wl1271_notice("loaded");
3505 EXPORT_SYMBOL_GPL(wl1271_register_hw);
3507 void wl1271_unregister_hw(struct wl1271 *wl)
3509 if (wl->state == WL1271_STATE_PLT)
3510 __wl1271_plt_stop(wl);
3512 unregister_netdevice_notifier(&wl1271_dev_notifier);
3513 ieee80211_unregister_hw(wl->hw);
3514 wl->mac80211_registered = false;
3517 EXPORT_SYMBOL_GPL(wl1271_unregister_hw);
3519 int wl1271_init_ieee80211(struct wl1271 *wl)
3521 static const u32 cipher_suites[] = {
3522 WLAN_CIPHER_SUITE_WEP40,
3523 WLAN_CIPHER_SUITE_WEP104,
3524 WLAN_CIPHER_SUITE_TKIP,
3525 WLAN_CIPHER_SUITE_CCMP,
3526 WL1271_CIPHER_SUITE_GEM,
3529 /* The tx descriptor buffer and the TKIP space. */
3530 wl->hw->extra_tx_headroom = WL1271_TKIP_IV_SPACE +
3531 sizeof(struct wl1271_tx_hw_descr);
3534 /* FIXME: find a proper value */
3535 wl->hw->channel_change_time = 10000;
3536 wl->hw->max_listen_interval = wl->conf.conn.max_listen_interval;
3538 wl->hw->flags = IEEE80211_HW_SIGNAL_DBM |
3539 IEEE80211_HW_BEACON_FILTER |
3540 IEEE80211_HW_SUPPORTS_PS |
3541 IEEE80211_HW_SUPPORTS_UAPSD |
3542 IEEE80211_HW_HAS_RATE_CONTROL |
3543 IEEE80211_HW_CONNECTION_MONITOR |
3544 IEEE80211_HW_SUPPORTS_CQM_RSSI |
3545 IEEE80211_HW_AP_LINK_PS;
3547 wl->hw->wiphy->cipher_suites = cipher_suites;
3548 wl->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
3550 wl->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
3551 BIT(NL80211_IFTYPE_ADHOC) | BIT(NL80211_IFTYPE_AP);
3552 wl->hw->wiphy->max_scan_ssids = 1;
3554 * Maximum length of elements in scanning probe request templates
3555 * should be the maximum length possible for a template, without
3556 * the IEEE80211 header of the template
3558 wl->hw->wiphy->max_scan_ie_len = WL1271_CMD_TEMPL_MAX_SIZE -
3559 sizeof(struct ieee80211_header);
3561 /* make sure all our channels fit in the scanned_ch bitmask */
3562 BUILD_BUG_ON(ARRAY_SIZE(wl1271_channels) +
3563 ARRAY_SIZE(wl1271_channels_5ghz) >
3564 WL1271_MAX_CHANNELS);
3566 * We keep local copies of the band structs because we need to
3567 * modify them on a per-device basis.
3569 memcpy(&wl->bands[IEEE80211_BAND_2GHZ], &wl1271_band_2ghz,
3570 sizeof(wl1271_band_2ghz));
3571 memcpy(&wl->bands[IEEE80211_BAND_5GHZ], &wl1271_band_5ghz,
3572 sizeof(wl1271_band_5ghz));
3574 wl->hw->wiphy->bands[IEEE80211_BAND_2GHZ] =
3575 &wl->bands[IEEE80211_BAND_2GHZ];
3576 wl->hw->wiphy->bands[IEEE80211_BAND_5GHZ] =
3577 &wl->bands[IEEE80211_BAND_5GHZ];
3580 wl->hw->max_rates = 1;
3582 wl->hw->wiphy->reg_notifier = wl1271_reg_notify;
3584 SET_IEEE80211_DEV(wl->hw, wl1271_wl_to_dev(wl));
3586 wl->hw->sta_data_size = sizeof(struct wl1271_station);
3588 wl->hw->max_rx_aggregation_subframes = 8;
3592 EXPORT_SYMBOL_GPL(wl1271_init_ieee80211);
3594 #define WL1271_DEFAULT_CHANNEL 0
3596 struct ieee80211_hw *wl1271_alloc_hw(void)
3598 struct ieee80211_hw *hw;
3599 struct platform_device *plat_dev = NULL;
3604 hw = ieee80211_alloc_hw(sizeof(*wl), &wl1271_ops);
3606 wl1271_error("could not alloc ieee80211_hw");
3611 plat_dev = kmemdup(&wl1271_device, sizeof(wl1271_device), GFP_KERNEL);
3613 wl1271_error("could not allocate platform_device");
3615 goto err_plat_alloc;
3619 memset(wl, 0, sizeof(*wl));
3621 INIT_LIST_HEAD(&wl->list);
3624 wl->plat_dev = plat_dev;
3626 for (i = 0; i < NUM_TX_QUEUES; i++)
3627 skb_queue_head_init(&wl->tx_queue[i]);
3629 for (i = 0; i < NUM_TX_QUEUES; i++)
3630 for (j = 0; j < AP_MAX_LINKS; j++)
3631 skb_queue_head_init(&wl->links[j].tx_queue[i]);
3633 skb_queue_head_init(&wl->deferred_rx_queue);
3634 skb_queue_head_init(&wl->deferred_tx_queue);
3636 INIT_DELAYED_WORK(&wl->elp_work, wl1271_elp_work);
3637 INIT_DELAYED_WORK(&wl->pspoll_work, wl1271_pspoll_work);
3638 INIT_WORK(&wl->netstack_work, wl1271_netstack_work);
3639 INIT_WORK(&wl->tx_work, wl1271_tx_work);
3640 INIT_WORK(&wl->recovery_work, wl1271_recovery_work);
3641 INIT_DELAYED_WORK(&wl->scan_complete_work, wl1271_scan_complete_work);
3642 wl->channel = WL1271_DEFAULT_CHANNEL;
3643 wl->beacon_int = WL1271_DEFAULT_BEACON_INT;
3644 wl->default_key = 0;
3646 wl->rx_config = WL1271_DEFAULT_STA_RX_CONFIG;
3647 wl->rx_filter = WL1271_DEFAULT_STA_RX_FILTER;
3648 wl->psm_entry_retry = 0;
3649 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
3650 wl->basic_rate_set = CONF_TX_RATE_MASK_BASIC;
3651 wl->basic_rate = CONF_TX_RATE_MASK_BASIC;
3652 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
3653 wl->band = IEEE80211_BAND_2GHZ;
3656 wl->sg_enabled = true;
3658 wl->bss_type = MAX_BSS_TYPE;
3659 wl->set_bss_type = MAX_BSS_TYPE;
3660 wl->fw_bss_type = MAX_BSS_TYPE;
3661 wl->last_tx_hlid = 0;
3663 wl->ap_fw_ps_map = 0;
3665 wl->platform_quirks = 0;
3667 memset(wl->tx_frames_map, 0, sizeof(wl->tx_frames_map));
3668 for (i = 0; i < ACX_TX_DESCRIPTORS; i++)
3669 wl->tx_frames[i] = NULL;
3671 spin_lock_init(&wl->wl_lock);
3673 wl->state = WL1271_STATE_OFF;
3674 mutex_init(&wl->mutex);
3676 /* Apply default driver configuration. */
3677 wl1271_conf_init(wl);
3679 order = get_order(WL1271_AGGR_BUFFER_SIZE);
3680 wl->aggr_buf = (u8 *)__get_free_pages(GFP_KERNEL, order);
3681 if (!wl->aggr_buf) {
3686 wl->dummy_packet = wl12xx_alloc_dummy_packet(wl);
3687 if (!wl->dummy_packet) {
3692 /* Register platform device */
3693 ret = platform_device_register(wl->plat_dev);
3695 wl1271_error("couldn't register platform device");
3696 goto err_dummy_packet;
3698 dev_set_drvdata(&wl->plat_dev->dev, wl);
3700 /* Create sysfs file to control bt coex state */
3701 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
3703 wl1271_error("failed to create sysfs file bt_coex_state");
3707 /* Create sysfs file to get HW PG version */
3708 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_hw_pg_ver);
3710 wl1271_error("failed to create sysfs file hw_pg_ver");
3711 goto err_bt_coex_state;
3717 device_remove_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
3720 platform_device_unregister(wl->plat_dev);
3723 dev_kfree_skb(wl->dummy_packet);
3726 free_pages((unsigned long)wl->aggr_buf, order);
3729 wl1271_debugfs_exit(wl);
3733 ieee80211_free_hw(hw);
3737 return ERR_PTR(ret);
3739 EXPORT_SYMBOL_GPL(wl1271_alloc_hw);
3741 int wl1271_free_hw(struct wl1271 *wl)
3743 platform_device_unregister(wl->plat_dev);
3744 dev_kfree_skb(wl->dummy_packet);
3745 free_pages((unsigned long)wl->aggr_buf,
3746 get_order(WL1271_AGGR_BUFFER_SIZE));
3747 kfree(wl->plat_dev);
3749 wl1271_debugfs_exit(wl);
3756 kfree(wl->fw_status);
3757 kfree(wl->tx_res_if);
3759 ieee80211_free_hw(wl->hw);
3763 EXPORT_SYMBOL_GPL(wl1271_free_hw);
3765 u32 wl12xx_debug_level = DEBUG_NONE;
3766 EXPORT_SYMBOL_GPL(wl12xx_debug_level);
3767 module_param_named(debug_level, wl12xx_debug_level, uint, S_IRUSR | S_IWUSR);
3768 MODULE_PARM_DESC(debug_level, "wl12xx debugging level");
3770 MODULE_LICENSE("GPL");
3771 MODULE_AUTHOR("Luciano Coelho <coelho@ti.com>");
3772 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");