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 /* end-of-transaction flag should be set in wl127x AP mode */
1015 if (wl->bss_type == BSS_TYPE_AP_BSS)
1016 wl->quirks |= WL12XX_QUIRK_END_OF_TRANSACTION;
1018 ret = wl1271_setup(wl);
1022 case CHIP_ID_1283_PG20:
1023 wl1271_debug(DEBUG_BOOT, "chip id 0x%x (1283 PG20)",
1026 ret = wl1271_setup(wl);
1029 if (wl1271_set_block_size(wl))
1030 wl->quirks |= WL12XX_QUIRK_BLOCKSIZE_ALIGNMENT;
1032 case CHIP_ID_1283_PG10:
1034 wl1271_warning("unsupported chip id: 0x%x", wl->chip.id);
1039 /* Make sure the firmware type matches the BSS type */
1040 if (wl->fw == NULL || wl->fw_bss_type != wl->bss_type) {
1041 ret = wl1271_fetch_firmware(wl);
1046 /* No NVS from netlink, try to get it from the filesystem */
1047 if (wl->nvs == NULL) {
1048 ret = wl1271_fetch_nvs(wl);
1057 static unsigned int wl1271_get_fw_ver_quirks(struct wl1271 *wl)
1059 unsigned int quirks = 0;
1060 unsigned int *fw_ver = wl->chip.fw_ver;
1062 /* Only for wl127x */
1063 if ((fw_ver[FW_VER_CHIP] == FW_VER_CHIP_WL127X) &&
1064 /* Check STA version */
1065 (((fw_ver[FW_VER_IF_TYPE] == FW_VER_IF_TYPE_STA) &&
1066 (fw_ver[FW_VER_MINOR] < FW_VER_MINOR_1_SPARE_STA_MIN)) ||
1067 /* Check AP version */
1068 ((fw_ver[FW_VER_IF_TYPE] == FW_VER_IF_TYPE_AP) &&
1069 (fw_ver[FW_VER_MINOR] < FW_VER_MINOR_1_SPARE_AP_MIN))))
1070 quirks |= WL12XX_QUIRK_USE_2_SPARE_BLOCKS;
1075 int wl1271_plt_start(struct wl1271 *wl)
1077 int retries = WL1271_BOOT_RETRIES;
1080 mutex_lock(&wl->mutex);
1082 wl1271_notice("power up");
1084 if (wl->state != WL1271_STATE_OFF) {
1085 wl1271_error("cannot go into PLT state because not "
1086 "in off state: %d", wl->state);
1091 wl->bss_type = BSS_TYPE_STA_BSS;
1095 ret = wl1271_chip_wakeup(wl);
1099 ret = wl1271_boot(wl);
1103 ret = wl1271_plt_init(wl);
1107 wl->state = WL1271_STATE_PLT;
1108 wl1271_notice("firmware booted in PLT mode (%s)",
1109 wl->chip.fw_ver_str);
1111 /* Check if any quirks are needed with older fw versions */
1112 wl->quirks |= wl1271_get_fw_ver_quirks(wl);
1116 mutex_unlock(&wl->mutex);
1117 /* Unlocking the mutex in the middle of handling is
1118 inherently unsafe. In this case we deem it safe to do,
1119 because we need to let any possibly pending IRQ out of
1120 the system (and while we are WL1271_STATE_OFF the IRQ
1121 work function will not do anything.) Also, any other
1122 possible concurrent operations will fail due to the
1123 current state, hence the wl1271 struct should be safe. */
1124 wl1271_disable_interrupts(wl);
1125 wl1271_flush_deferred_work(wl);
1126 cancel_work_sync(&wl->netstack_work);
1127 mutex_lock(&wl->mutex);
1129 wl1271_power_off(wl);
1132 wl1271_error("firmware boot in PLT mode failed despite %d retries",
1133 WL1271_BOOT_RETRIES);
1135 mutex_unlock(&wl->mutex);
1140 static int __wl1271_plt_stop(struct wl1271 *wl)
1144 wl1271_notice("power down");
1146 if (wl->state != WL1271_STATE_PLT) {
1147 wl1271_error("cannot power down because not in PLT "
1148 "state: %d", wl->state);
1153 wl1271_power_off(wl);
1155 wl->state = WL1271_STATE_OFF;
1158 mutex_unlock(&wl->mutex);
1159 wl1271_disable_interrupts(wl);
1160 wl1271_flush_deferred_work(wl);
1161 cancel_work_sync(&wl->netstack_work);
1162 cancel_work_sync(&wl->recovery_work);
1163 mutex_lock(&wl->mutex);
1168 int wl1271_plt_stop(struct wl1271 *wl)
1172 mutex_lock(&wl->mutex);
1173 ret = __wl1271_plt_stop(wl);
1174 mutex_unlock(&wl->mutex);
1178 static void wl1271_op_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
1180 struct wl1271 *wl = hw->priv;
1181 unsigned long flags;
1185 q = wl1271_tx_get_queue(skb_get_queue_mapping(skb));
1187 if (wl->bss_type == BSS_TYPE_AP_BSS)
1188 hlid = wl1271_tx_get_hlid(skb);
1190 spin_lock_irqsave(&wl->wl_lock, flags);
1192 wl->tx_queue_count++;
1195 * The workqueue is slow to process the tx_queue and we need stop
1196 * the queue here, otherwise the queue will get too long.
1198 if (wl->tx_queue_count >= WL1271_TX_QUEUE_HIGH_WATERMARK) {
1199 wl1271_debug(DEBUG_TX, "op_tx: stopping queues");
1200 ieee80211_stop_queues(wl->hw);
1201 set_bit(WL1271_FLAG_TX_QUEUE_STOPPED, &wl->flags);
1204 /* queue the packet */
1205 if (wl->bss_type == BSS_TYPE_AP_BSS) {
1206 wl1271_debug(DEBUG_TX, "queue skb hlid %d q %d", hlid, q);
1207 skb_queue_tail(&wl->links[hlid].tx_queue[q], skb);
1209 skb_queue_tail(&wl->tx_queue[q], skb);
1213 * The chip specific setup must run before the first TX packet -
1214 * before that, the tx_work will not be initialized!
1217 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags) &&
1218 !test_bit(WL1271_FLAG_TX_PENDING, &wl->flags))
1219 ieee80211_queue_work(wl->hw, &wl->tx_work);
1221 spin_unlock_irqrestore(&wl->wl_lock, flags);
1224 int wl1271_tx_dummy_packet(struct wl1271 *wl)
1226 unsigned long flags;
1228 spin_lock_irqsave(&wl->wl_lock, flags);
1229 set_bit(WL1271_FLAG_DUMMY_PACKET_PENDING, &wl->flags);
1230 wl->tx_queue_count++;
1231 spin_unlock_irqrestore(&wl->wl_lock, flags);
1233 /* The FW is low on RX memory blocks, so send the dummy packet asap */
1234 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags))
1235 wl1271_tx_work_locked(wl);
1238 * If the FW TX is busy, TX work will be scheduled by the threaded
1239 * interrupt handler function
1245 * The size of the dummy packet should be at least 1400 bytes. However, in
1246 * order to minimize the number of bus transactions, aligning it to 512 bytes
1247 * boundaries could be beneficial, performance wise
1249 #define TOTAL_TX_DUMMY_PACKET_SIZE (ALIGN(1400, 512))
1251 static struct sk_buff *wl12xx_alloc_dummy_packet(struct wl1271 *wl)
1253 struct sk_buff *skb;
1254 struct ieee80211_hdr_3addr *hdr;
1255 unsigned int dummy_packet_size;
1257 dummy_packet_size = TOTAL_TX_DUMMY_PACKET_SIZE -
1258 sizeof(struct wl1271_tx_hw_descr) - sizeof(*hdr);
1260 skb = dev_alloc_skb(TOTAL_TX_DUMMY_PACKET_SIZE);
1262 wl1271_warning("Failed to allocate a dummy packet skb");
1266 skb_reserve(skb, sizeof(struct wl1271_tx_hw_descr));
1268 hdr = (struct ieee80211_hdr_3addr *) skb_put(skb, sizeof(*hdr));
1269 memset(hdr, 0, sizeof(*hdr));
1270 hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_DATA |
1271 IEEE80211_STYPE_NULLFUNC |
1272 IEEE80211_FCTL_TODS);
1274 memset(skb_put(skb, dummy_packet_size), 0, dummy_packet_size);
1276 /* Dummy packets require the TID to be management */
1277 skb->priority = WL1271_TID_MGMT;
1279 /* Initialize all fields that might be used */
1280 skb->queue_mapping = 0;
1281 memset(IEEE80211_SKB_CB(skb), 0, sizeof(struct ieee80211_tx_info));
1287 static struct notifier_block wl1271_dev_notifier = {
1288 .notifier_call = wl1271_dev_notify,
1291 static int wl1271_op_start(struct ieee80211_hw *hw)
1293 wl1271_debug(DEBUG_MAC80211, "mac80211 start");
1296 * We have to delay the booting of the hardware because
1297 * we need to know the local MAC address before downloading and
1298 * initializing the firmware. The MAC address cannot be changed
1299 * after boot, and without the proper MAC address, the firmware
1300 * will not function properly.
1302 * The MAC address is first known when the corresponding interface
1303 * is added. That is where we will initialize the hardware.
1305 * In addition, we currently have different firmwares for AP and managed
1306 * operation. We will know which to boot according to interface type.
1312 static void wl1271_op_stop(struct ieee80211_hw *hw)
1314 wl1271_debug(DEBUG_MAC80211, "mac80211 stop");
1317 static int wl1271_op_add_interface(struct ieee80211_hw *hw,
1318 struct ieee80211_vif *vif)
1320 struct wl1271 *wl = hw->priv;
1321 struct wiphy *wiphy = hw->wiphy;
1322 int retries = WL1271_BOOT_RETRIES;
1324 bool booted = false;
1326 wl1271_debug(DEBUG_MAC80211, "mac80211 add interface type %d mac %pM",
1327 vif->type, vif->addr);
1329 mutex_lock(&wl->mutex);
1331 wl1271_debug(DEBUG_MAC80211,
1332 "multiple vifs are not supported yet");
1338 * in some very corner case HW recovery scenarios its possible to
1339 * get here before __wl1271_op_remove_interface is complete, so
1340 * opt out if that is the case.
1342 if (test_bit(WL1271_FLAG_IF_INITIALIZED, &wl->flags)) {
1347 switch (vif->type) {
1348 case NL80211_IFTYPE_STATION:
1349 wl->bss_type = BSS_TYPE_STA_BSS;
1350 wl->set_bss_type = BSS_TYPE_STA_BSS;
1352 case NL80211_IFTYPE_ADHOC:
1353 wl->bss_type = BSS_TYPE_IBSS;
1354 wl->set_bss_type = BSS_TYPE_STA_BSS;
1356 case NL80211_IFTYPE_AP:
1357 wl->bss_type = BSS_TYPE_AP_BSS;
1364 memcpy(wl->mac_addr, vif->addr, ETH_ALEN);
1366 if (wl->state != WL1271_STATE_OFF) {
1367 wl1271_error("cannot start because not in off state: %d",
1375 ret = wl1271_chip_wakeup(wl);
1379 ret = wl1271_boot(wl);
1383 ret = wl1271_hw_init(wl);
1391 mutex_unlock(&wl->mutex);
1392 /* Unlocking the mutex in the middle of handling is
1393 inherently unsafe. In this case we deem it safe to do,
1394 because we need to let any possibly pending IRQ out of
1395 the system (and while we are WL1271_STATE_OFF the IRQ
1396 work function will not do anything.) Also, any other
1397 possible concurrent operations will fail due to the
1398 current state, hence the wl1271 struct should be safe. */
1399 wl1271_disable_interrupts(wl);
1400 wl1271_flush_deferred_work(wl);
1401 cancel_work_sync(&wl->netstack_work);
1402 mutex_lock(&wl->mutex);
1404 wl1271_power_off(wl);
1408 wl1271_error("firmware boot failed despite %d retries",
1409 WL1271_BOOT_RETRIES);
1414 wl->state = WL1271_STATE_ON;
1415 set_bit(WL1271_FLAG_IF_INITIALIZED, &wl->flags);
1416 wl1271_info("firmware booted (%s)", wl->chip.fw_ver_str);
1418 /* update hw/fw version info in wiphy struct */
1419 wiphy->hw_version = wl->chip.id;
1420 strncpy(wiphy->fw_version, wl->chip.fw_ver_str,
1421 sizeof(wiphy->fw_version));
1423 /* Check if any quirks are needed with older fw versions */
1424 wl->quirks |= wl1271_get_fw_ver_quirks(wl);
1427 * Now we know if 11a is supported (info from the NVS), so disable
1428 * 11a channels if not supported
1430 if (!wl->enable_11a)
1431 wiphy->bands[IEEE80211_BAND_5GHZ]->n_channels = 0;
1433 wl1271_debug(DEBUG_MAC80211, "11a is %ssupported",
1434 wl->enable_11a ? "" : "not ");
1437 mutex_unlock(&wl->mutex);
1439 mutex_lock(&wl_list_mutex);
1441 list_add(&wl->list, &wl_list);
1442 mutex_unlock(&wl_list_mutex);
1447 static void __wl1271_op_remove_interface(struct wl1271 *wl)
1451 wl1271_debug(DEBUG_MAC80211, "mac80211 remove interface");
1453 /* because of hardware recovery, we may get here twice */
1454 if (wl->state != WL1271_STATE_ON)
1457 wl1271_info("down");
1459 mutex_lock(&wl_list_mutex);
1460 list_del(&wl->list);
1461 mutex_unlock(&wl_list_mutex);
1463 /* enable dyn ps just in case (if left on due to fw crash etc) */
1464 if (wl->bss_type == BSS_TYPE_STA_BSS)
1465 ieee80211_enable_dyn_ps(wl->vif);
1467 if (wl->scan.state != WL1271_SCAN_STATE_IDLE) {
1468 wl->scan.state = WL1271_SCAN_STATE_IDLE;
1469 memset(wl->scan.scanned_ch, 0, sizeof(wl->scan.scanned_ch));
1470 wl->scan.req = NULL;
1471 ieee80211_scan_completed(wl->hw, true);
1475 * this must be before the cancel_work calls below, so that the work
1476 * functions don't perform further work.
1478 wl->state = WL1271_STATE_OFF;
1480 mutex_unlock(&wl->mutex);
1482 wl1271_disable_interrupts(wl);
1483 wl1271_flush_deferred_work(wl);
1484 cancel_delayed_work_sync(&wl->scan_complete_work);
1485 cancel_work_sync(&wl->netstack_work);
1486 cancel_work_sync(&wl->tx_work);
1487 cancel_delayed_work_sync(&wl->pspoll_work);
1488 cancel_delayed_work_sync(&wl->elp_work);
1490 mutex_lock(&wl->mutex);
1492 /* let's notify MAC80211 about the remaining pending TX frames */
1493 wl1271_tx_reset(wl);
1494 wl1271_power_off(wl);
1496 memset(wl->bssid, 0, ETH_ALEN);
1497 memset(wl->ssid, 0, IW_ESSID_MAX_SIZE + 1);
1499 wl->bss_type = MAX_BSS_TYPE;
1500 wl->set_bss_type = MAX_BSS_TYPE;
1501 wl->band = IEEE80211_BAND_2GHZ;
1504 wl->psm_entry_retry = 0;
1505 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
1506 wl->tx_blocks_available = 0;
1507 wl->tx_allocated_blocks = 0;
1508 wl->tx_results_count = 0;
1509 wl->tx_packets_count = 0;
1510 wl->tx_security_last_seq = 0;
1511 wl->tx_security_seq = 0;
1512 wl->time_offset = 0;
1513 wl->session_counter = 0;
1514 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
1517 wl1271_free_ap_keys(wl);
1518 memset(wl->ap_hlid_map, 0, sizeof(wl->ap_hlid_map));
1519 wl->ap_fw_ps_map = 0;
1523 * this is performed after the cancel_work calls and the associated
1524 * mutex_lock, so that wl1271_op_add_interface does not accidentally
1525 * get executed before all these vars have been reset.
1529 for (i = 0; i < NUM_TX_QUEUES; i++)
1530 wl->tx_blocks_freed[i] = 0;
1532 wl1271_debugfs_reset(wl);
1534 kfree(wl->fw_status);
1535 wl->fw_status = NULL;
1536 kfree(wl->tx_res_if);
1537 wl->tx_res_if = NULL;
1538 kfree(wl->target_mem_map);
1539 wl->target_mem_map = NULL;
1542 static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
1543 struct ieee80211_vif *vif)
1545 struct wl1271 *wl = hw->priv;
1547 mutex_lock(&wl->mutex);
1549 * wl->vif can be null here if someone shuts down the interface
1550 * just when hardware recovery has been started.
1553 WARN_ON(wl->vif != vif);
1554 __wl1271_op_remove_interface(wl);
1557 mutex_unlock(&wl->mutex);
1558 cancel_work_sync(&wl->recovery_work);
1561 void wl1271_configure_filters(struct wl1271 *wl, unsigned int filters)
1563 wl1271_set_default_filters(wl);
1565 /* combine requested filters with current filter config */
1566 filters = wl->filters | filters;
1568 wl1271_debug(DEBUG_FILTERS, "RX filters set: ");
1570 if (filters & FIF_PROMISC_IN_BSS) {
1571 wl1271_debug(DEBUG_FILTERS, " - FIF_PROMISC_IN_BSS");
1572 wl->rx_config &= ~CFG_UNI_FILTER_EN;
1573 wl->rx_config |= CFG_BSSID_FILTER_EN;
1575 if (filters & FIF_BCN_PRBRESP_PROMISC) {
1576 wl1271_debug(DEBUG_FILTERS, " - FIF_BCN_PRBRESP_PROMISC");
1577 wl->rx_config &= ~CFG_BSSID_FILTER_EN;
1578 wl->rx_config &= ~CFG_SSID_FILTER_EN;
1580 if (filters & FIF_OTHER_BSS) {
1581 wl1271_debug(DEBUG_FILTERS, " - FIF_OTHER_BSS");
1582 wl->rx_config &= ~CFG_BSSID_FILTER_EN;
1584 if (filters & FIF_CONTROL) {
1585 wl1271_debug(DEBUG_FILTERS, " - FIF_CONTROL");
1586 wl->rx_filter |= CFG_RX_CTL_EN;
1588 if (filters & FIF_FCSFAIL) {
1589 wl1271_debug(DEBUG_FILTERS, " - FIF_FCSFAIL");
1590 wl->rx_filter |= CFG_RX_FCS_ERROR;
1594 static int wl1271_dummy_join(struct wl1271 *wl)
1597 /* we need to use a dummy BSSID for now */
1598 static const u8 dummy_bssid[ETH_ALEN] = { 0x0b, 0xad, 0xde,
1601 memcpy(wl->bssid, dummy_bssid, ETH_ALEN);
1603 /* pass through frames from all BSS */
1604 wl1271_configure_filters(wl, FIF_OTHER_BSS);
1606 ret = wl1271_cmd_join(wl, wl->set_bss_type);
1610 set_bit(WL1271_FLAG_JOINED, &wl->flags);
1616 static int wl1271_join(struct wl1271 *wl, bool set_assoc)
1621 * One of the side effects of the JOIN command is that is clears
1622 * WPA/WPA2 keys from the chipset. Performing a JOIN while associated
1623 * to a WPA/WPA2 access point will therefore kill the data-path.
1624 * Currently the only valid scenario for JOIN during association
1625 * is on roaming, in which case we will also be given new keys.
1626 * Keep the below message for now, unless it starts bothering
1627 * users who really like to roam a lot :)
1629 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1630 wl1271_info("JOIN while associated.");
1633 set_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
1635 ret = wl1271_cmd_join(wl, wl->set_bss_type);
1639 set_bit(WL1271_FLAG_JOINED, &wl->flags);
1641 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1645 * The join command disable the keep-alive mode, shut down its process,
1646 * and also clear the template config, so we need to reset it all after
1647 * the join. The acx_aid starts the keep-alive process, and the order
1648 * of the commands below is relevant.
1650 ret = wl1271_acx_keep_alive_mode(wl, true);
1654 ret = wl1271_acx_aid(wl, wl->aid);
1658 ret = wl1271_cmd_build_klv_null_data(wl);
1662 ret = wl1271_acx_keep_alive_config(wl, CMD_TEMPL_KLV_IDX_NULL_DATA,
1663 ACX_KEEP_ALIVE_TPL_VALID);
1671 static int wl1271_unjoin(struct wl1271 *wl)
1675 /* to stop listening to a channel, we disconnect */
1676 ret = wl1271_cmd_disconnect(wl);
1680 clear_bit(WL1271_FLAG_JOINED, &wl->flags);
1681 memset(wl->bssid, 0, ETH_ALEN);
1683 /* stop filtering packets based on bssid */
1684 wl1271_configure_filters(wl, FIF_OTHER_BSS);
1690 static void wl1271_set_band_rate(struct wl1271 *wl)
1692 if (wl->band == IEEE80211_BAND_2GHZ)
1693 wl->basic_rate_set = wl->conf.tx.basic_rate;
1695 wl->basic_rate_set = wl->conf.tx.basic_rate_5;
1698 static int wl1271_sta_handle_idle(struct wl1271 *wl, bool idle)
1703 if (test_bit(WL1271_FLAG_JOINED, &wl->flags)) {
1704 ret = wl1271_unjoin(wl);
1708 wl->rate_set = wl1271_tx_min_rate_get(wl);
1709 ret = wl1271_acx_sta_rate_policies(wl);
1712 ret = wl1271_acx_keep_alive_config(
1713 wl, CMD_TEMPL_KLV_IDX_NULL_DATA,
1714 ACX_KEEP_ALIVE_TPL_INVALID);
1717 set_bit(WL1271_FLAG_IDLE, &wl->flags);
1719 /* increment the session counter */
1720 wl->session_counter++;
1721 if (wl->session_counter >= SESSION_COUNTER_MAX)
1722 wl->session_counter = 0;
1723 ret = wl1271_dummy_join(wl);
1726 clear_bit(WL1271_FLAG_IDLE, &wl->flags);
1733 static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed)
1735 struct wl1271 *wl = hw->priv;
1736 struct ieee80211_conf *conf = &hw->conf;
1737 int channel, ret = 0;
1740 channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
1742 wl1271_debug(DEBUG_MAC80211, "mac80211 config ch %d psm %s power %d %s"
1745 conf->flags & IEEE80211_CONF_PS ? "on" : "off",
1747 conf->flags & IEEE80211_CONF_IDLE ? "idle" : "in use",
1751 * mac80211 will go to idle nearly immediately after transmitting some
1752 * frames, such as the deauth. To make sure those frames reach the air,
1753 * wait here until the TX queue is fully flushed.
1755 if ((changed & IEEE80211_CONF_CHANGE_IDLE) &&
1756 (conf->flags & IEEE80211_CONF_IDLE))
1757 wl1271_tx_flush(wl);
1759 mutex_lock(&wl->mutex);
1761 if (unlikely(wl->state == WL1271_STATE_OFF)) {
1762 /* we support configuring the channel and band while off */
1763 if ((changed & IEEE80211_CONF_CHANGE_CHANNEL)) {
1764 wl->band = conf->channel->band;
1765 wl->channel = channel;
1771 is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
1773 ret = wl1271_ps_elp_wakeup(wl);
1777 /* if the channel changes while joined, join again */
1778 if (changed & IEEE80211_CONF_CHANGE_CHANNEL &&
1779 ((wl->band != conf->channel->band) ||
1780 (wl->channel != channel))) {
1781 wl->band = conf->channel->band;
1782 wl->channel = channel;
1786 * FIXME: the mac80211 should really provide a fixed
1787 * rate to use here. for now, just use the smallest
1788 * possible rate for the band as a fixed rate for
1789 * association frames and other control messages.
1791 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1792 wl1271_set_band_rate(wl);
1794 wl->basic_rate = wl1271_tx_min_rate_get(wl);
1795 ret = wl1271_acx_sta_rate_policies(wl);
1797 wl1271_warning("rate policy for channel "
1800 if (test_bit(WL1271_FLAG_JOINED, &wl->flags)) {
1801 ret = wl1271_join(wl, false);
1803 wl1271_warning("cmd join on channel "
1809 if (changed & IEEE80211_CONF_CHANGE_IDLE && !is_ap) {
1810 ret = wl1271_sta_handle_idle(wl,
1811 conf->flags & IEEE80211_CONF_IDLE);
1813 wl1271_warning("idle mode change failed %d", ret);
1817 * if mac80211 changes the PSM mode, make sure the mode is not
1818 * incorrectly changed after the pspoll failure active window.
1820 if (changed & IEEE80211_CONF_CHANGE_PS)
1821 clear_bit(WL1271_FLAG_PSPOLL_FAILURE, &wl->flags);
1823 if (conf->flags & IEEE80211_CONF_PS &&
1824 !test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
1825 set_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
1828 * We enter PSM only if we're already associated.
1829 * If we're not, we'll enter it when joining an SSID,
1830 * through the bss_info_changed() hook.
1832 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags)) {
1833 wl1271_debug(DEBUG_PSM, "psm enabled");
1834 ret = wl1271_ps_set_mode(wl, STATION_POWER_SAVE_MODE,
1835 wl->basic_rate, true);
1837 } else if (!(conf->flags & IEEE80211_CONF_PS) &&
1838 test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
1839 wl1271_debug(DEBUG_PSM, "psm disabled");
1841 clear_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
1843 if (test_bit(WL1271_FLAG_PSM, &wl->flags))
1844 ret = wl1271_ps_set_mode(wl, STATION_ACTIVE_MODE,
1845 wl->basic_rate, true);
1848 if (conf->power_level != wl->power_level) {
1849 ret = wl1271_acx_tx_power(wl, conf->power_level);
1853 wl->power_level = conf->power_level;
1857 wl1271_ps_elp_sleep(wl);
1860 mutex_unlock(&wl->mutex);
1865 struct wl1271_filter_params {
1868 u8 mc_list[ACX_MC_ADDRESS_GROUP_MAX][ETH_ALEN];
1871 static u64 wl1271_op_prepare_multicast(struct ieee80211_hw *hw,
1872 struct netdev_hw_addr_list *mc_list)
1874 struct wl1271_filter_params *fp;
1875 struct netdev_hw_addr *ha;
1876 struct wl1271 *wl = hw->priv;
1878 if (unlikely(wl->state == WL1271_STATE_OFF))
1881 fp = kzalloc(sizeof(*fp), GFP_ATOMIC);
1883 wl1271_error("Out of memory setting filters.");
1887 /* update multicast filtering parameters */
1888 fp->mc_list_length = 0;
1889 if (netdev_hw_addr_list_count(mc_list) > ACX_MC_ADDRESS_GROUP_MAX) {
1890 fp->enabled = false;
1893 netdev_hw_addr_list_for_each(ha, mc_list) {
1894 memcpy(fp->mc_list[fp->mc_list_length],
1895 ha->addr, ETH_ALEN);
1896 fp->mc_list_length++;
1900 return (u64)(unsigned long)fp;
1903 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
1906 FIF_BCN_PRBRESP_PROMISC | \
1910 static void wl1271_op_configure_filter(struct ieee80211_hw *hw,
1911 unsigned int changed,
1912 unsigned int *total, u64 multicast)
1914 struct wl1271_filter_params *fp = (void *)(unsigned long)multicast;
1915 struct wl1271 *wl = hw->priv;
1918 wl1271_debug(DEBUG_MAC80211, "mac80211 configure filter changed %x"
1919 " total %x", changed, *total);
1921 mutex_lock(&wl->mutex);
1923 *total &= WL1271_SUPPORTED_FILTERS;
1924 changed &= WL1271_SUPPORTED_FILTERS;
1926 if (unlikely(wl->state == WL1271_STATE_OFF))
1929 ret = wl1271_ps_elp_wakeup(wl);
1933 if (wl->bss_type != BSS_TYPE_AP_BSS) {
1934 if (*total & FIF_ALLMULTI)
1935 ret = wl1271_acx_group_address_tbl(wl, false, NULL, 0);
1937 ret = wl1271_acx_group_address_tbl(wl, fp->enabled,
1939 fp->mc_list_length);
1944 /* determine, whether supported filter values have changed */
1948 /* configure filters */
1949 wl->filters = *total;
1950 wl1271_configure_filters(wl, 0);
1952 /* apply configured filters */
1953 ret = wl1271_acx_rx_config(wl, wl->rx_config, wl->rx_filter);
1958 wl1271_ps_elp_sleep(wl);
1961 mutex_unlock(&wl->mutex);
1965 static int wl1271_record_ap_key(struct wl1271 *wl, u8 id, u8 key_type,
1966 u8 key_size, const u8 *key, u8 hlid, u32 tx_seq_32,
1969 struct wl1271_ap_key *ap_key;
1972 wl1271_debug(DEBUG_CRYPT, "record ap key id %d", (int)id);
1974 if (key_size > MAX_KEY_SIZE)
1978 * Find next free entry in ap_keys. Also check we are not replacing
1981 for (i = 0; i < MAX_NUM_KEYS; i++) {
1982 if (wl->recorded_ap_keys[i] == NULL)
1985 if (wl->recorded_ap_keys[i]->id == id) {
1986 wl1271_warning("trying to record key replacement");
1991 if (i == MAX_NUM_KEYS)
1994 ap_key = kzalloc(sizeof(*ap_key), GFP_KERNEL);
1999 ap_key->key_type = key_type;
2000 ap_key->key_size = key_size;
2001 memcpy(ap_key->key, key, key_size);
2002 ap_key->hlid = hlid;
2003 ap_key->tx_seq_32 = tx_seq_32;
2004 ap_key->tx_seq_16 = tx_seq_16;
2006 wl->recorded_ap_keys[i] = ap_key;
2010 static void wl1271_free_ap_keys(struct wl1271 *wl)
2014 for (i = 0; i < MAX_NUM_KEYS; i++) {
2015 kfree(wl->recorded_ap_keys[i]);
2016 wl->recorded_ap_keys[i] = NULL;
2020 static int wl1271_ap_init_hwenc(struct wl1271 *wl)
2023 struct wl1271_ap_key *key;
2024 bool wep_key_added = false;
2026 for (i = 0; i < MAX_NUM_KEYS; i++) {
2027 if (wl->recorded_ap_keys[i] == NULL)
2030 key = wl->recorded_ap_keys[i];
2031 ret = wl1271_cmd_set_ap_key(wl, KEY_ADD_OR_REPLACE,
2032 key->id, key->key_type,
2033 key->key_size, key->key,
2034 key->hlid, key->tx_seq_32,
2039 if (key->key_type == KEY_WEP)
2040 wep_key_added = true;
2043 if (wep_key_added) {
2044 ret = wl1271_cmd_set_ap_default_wep_key(wl, wl->default_key);
2050 wl1271_free_ap_keys(wl);
2054 static int wl1271_set_key(struct wl1271 *wl, u16 action, u8 id, u8 key_type,
2055 u8 key_size, const u8 *key, u32 tx_seq_32,
2056 u16 tx_seq_16, struct ieee80211_sta *sta)
2059 bool is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
2062 struct wl1271_station *wl_sta;
2066 wl_sta = (struct wl1271_station *)sta->drv_priv;
2067 hlid = wl_sta->hlid;
2069 hlid = WL1271_AP_BROADCAST_HLID;
2072 if (!test_bit(WL1271_FLAG_AP_STARTED, &wl->flags)) {
2074 * We do not support removing keys after AP shutdown.
2075 * Pretend we do to make mac80211 happy.
2077 if (action != KEY_ADD_OR_REPLACE)
2080 ret = wl1271_record_ap_key(wl, id,
2082 key, hlid, tx_seq_32,
2085 ret = wl1271_cmd_set_ap_key(wl, action,
2086 id, key_type, key_size,
2087 key, hlid, tx_seq_32,
2095 static const u8 bcast_addr[ETH_ALEN] = {
2096 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
2099 addr = sta ? sta->addr : bcast_addr;
2101 if (is_zero_ether_addr(addr)) {
2102 /* We dont support TX only encryption */
2106 /* The wl1271 does not allow to remove unicast keys - they
2107 will be cleared automatically on next CMD_JOIN. Ignore the
2108 request silently, as we dont want the mac80211 to emit
2109 an error message. */
2110 if (action == KEY_REMOVE && !is_broadcast_ether_addr(addr))
2113 ret = wl1271_cmd_set_sta_key(wl, action,
2114 id, key_type, key_size,
2115 key, addr, tx_seq_32,
2120 /* the default WEP key needs to be configured at least once */
2121 if (key_type == KEY_WEP) {
2122 ret = wl1271_cmd_set_sta_default_wep_key(wl,
2132 static int wl1271_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
2133 struct ieee80211_vif *vif,
2134 struct ieee80211_sta *sta,
2135 struct ieee80211_key_conf *key_conf)
2137 struct wl1271 *wl = hw->priv;
2143 wl1271_debug(DEBUG_MAC80211, "mac80211 set key");
2145 wl1271_debug(DEBUG_CRYPT, "CMD: 0x%x sta: %p", cmd, sta);
2146 wl1271_debug(DEBUG_CRYPT, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
2147 key_conf->cipher, key_conf->keyidx,
2148 key_conf->keylen, key_conf->flags);
2149 wl1271_dump(DEBUG_CRYPT, "KEY: ", key_conf->key, key_conf->keylen);
2151 mutex_lock(&wl->mutex);
2153 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2158 ret = wl1271_ps_elp_wakeup(wl);
2162 switch (key_conf->cipher) {
2163 case WLAN_CIPHER_SUITE_WEP40:
2164 case WLAN_CIPHER_SUITE_WEP104:
2167 key_conf->hw_key_idx = key_conf->keyidx;
2169 case WLAN_CIPHER_SUITE_TKIP:
2170 key_type = KEY_TKIP;
2172 key_conf->hw_key_idx = key_conf->keyidx;
2173 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
2174 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
2176 case WLAN_CIPHER_SUITE_CCMP:
2179 key_conf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
2180 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
2181 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
2183 case WL1271_CIPHER_SUITE_GEM:
2185 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
2186 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
2189 wl1271_error("Unknown key algo 0x%x", key_conf->cipher);
2197 ret = wl1271_set_key(wl, KEY_ADD_OR_REPLACE,
2198 key_conf->keyidx, key_type,
2199 key_conf->keylen, key_conf->key,
2200 tx_seq_32, tx_seq_16, sta);
2202 wl1271_error("Could not add or replace key");
2208 ret = wl1271_set_key(wl, KEY_REMOVE,
2209 key_conf->keyidx, key_type,
2210 key_conf->keylen, key_conf->key,
2213 wl1271_error("Could not remove key");
2219 wl1271_error("Unsupported key cmd 0x%x", cmd);
2225 wl1271_ps_elp_sleep(wl);
2228 mutex_unlock(&wl->mutex);
2233 static int wl1271_op_hw_scan(struct ieee80211_hw *hw,
2234 struct ieee80211_vif *vif,
2235 struct cfg80211_scan_request *req)
2237 struct wl1271 *wl = hw->priv;
2242 wl1271_debug(DEBUG_MAC80211, "mac80211 hw scan");
2245 ssid = req->ssids[0].ssid;
2246 len = req->ssids[0].ssid_len;
2249 mutex_lock(&wl->mutex);
2251 if (wl->state == WL1271_STATE_OFF) {
2253 * We cannot return -EBUSY here because cfg80211 will expect
2254 * a call to ieee80211_scan_completed if we do - in this case
2255 * there won't be any call.
2261 ret = wl1271_ps_elp_wakeup(wl);
2265 ret = wl1271_scan(hw->priv, ssid, len, req);
2267 wl1271_ps_elp_sleep(wl);
2270 mutex_unlock(&wl->mutex);
2275 static int wl1271_op_set_frag_threshold(struct ieee80211_hw *hw, u32 value)
2277 struct wl1271 *wl = hw->priv;
2280 mutex_lock(&wl->mutex);
2282 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2287 ret = wl1271_ps_elp_wakeup(wl);
2291 ret = wl1271_acx_frag_threshold(wl, (u16)value);
2293 wl1271_warning("wl1271_op_set_frag_threshold failed: %d", ret);
2295 wl1271_ps_elp_sleep(wl);
2298 mutex_unlock(&wl->mutex);
2303 static int wl1271_op_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
2305 struct wl1271 *wl = hw->priv;
2308 mutex_lock(&wl->mutex);
2310 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2315 ret = wl1271_ps_elp_wakeup(wl);
2319 ret = wl1271_acx_rts_threshold(wl, (u16) value);
2321 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret);
2323 wl1271_ps_elp_sleep(wl);
2326 mutex_unlock(&wl->mutex);
2331 static int wl1271_ssid_set(struct wl1271 *wl, struct sk_buff *skb,
2334 u8 *ptr = skb->data + offset;
2336 /* find the location of the ssid in the beacon */
2337 while (ptr < skb->data + skb->len) {
2338 if (ptr[0] == WLAN_EID_SSID) {
2339 wl->ssid_len = ptr[1];
2340 memcpy(wl->ssid, ptr+2, wl->ssid_len);
2343 ptr += (ptr[1] + 2);
2346 wl1271_error("No SSID in IEs!\n");
2350 static int wl1271_bss_erp_info_changed(struct wl1271 *wl,
2351 struct ieee80211_bss_conf *bss_conf,
2356 if (changed & BSS_CHANGED_ERP_SLOT) {
2357 if (bss_conf->use_short_slot)
2358 ret = wl1271_acx_slot(wl, SLOT_TIME_SHORT);
2360 ret = wl1271_acx_slot(wl, SLOT_TIME_LONG);
2362 wl1271_warning("Set slot time failed %d", ret);
2367 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
2368 if (bss_conf->use_short_preamble)
2369 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_SHORT);
2371 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_LONG);
2374 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
2375 if (bss_conf->use_cts_prot)
2376 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_ENABLE);
2378 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_DISABLE);
2380 wl1271_warning("Set ctsprotect failed %d", ret);
2389 static int wl1271_bss_beacon_info_changed(struct wl1271 *wl,
2390 struct ieee80211_vif *vif,
2391 struct ieee80211_bss_conf *bss_conf,
2394 bool is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
2397 if ((changed & BSS_CHANGED_BEACON_INT)) {
2398 wl1271_debug(DEBUG_MASTER, "beacon interval updated: %d",
2399 bss_conf->beacon_int);
2401 wl->beacon_int = bss_conf->beacon_int;
2404 if ((changed & BSS_CHANGED_BEACON)) {
2405 struct ieee80211_hdr *hdr;
2406 int ieoffset = offsetof(struct ieee80211_mgmt,
2408 struct sk_buff *beacon = ieee80211_beacon_get(wl->hw, vif);
2414 wl1271_debug(DEBUG_MASTER, "beacon updated");
2416 ret = wl1271_ssid_set(wl, beacon, ieoffset);
2418 dev_kfree_skb(beacon);
2421 tmpl_id = is_ap ? CMD_TEMPL_AP_BEACON :
2423 ret = wl1271_cmd_template_set(wl, tmpl_id,
2426 wl1271_tx_min_rate_get(wl));
2428 dev_kfree_skb(beacon);
2432 hdr = (struct ieee80211_hdr *) beacon->data;
2433 hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
2434 IEEE80211_STYPE_PROBE_RESP);
2436 tmpl_id = is_ap ? CMD_TEMPL_AP_PROBE_RESPONSE :
2437 CMD_TEMPL_PROBE_RESPONSE;
2438 ret = wl1271_cmd_template_set(wl,
2442 wl1271_tx_min_rate_get(wl));
2443 dev_kfree_skb(beacon);
2452 /* AP mode changes */
2453 static void wl1271_bss_info_changed_ap(struct wl1271 *wl,
2454 struct ieee80211_vif *vif,
2455 struct ieee80211_bss_conf *bss_conf,
2460 if ((changed & BSS_CHANGED_BASIC_RATES)) {
2461 u32 rates = bss_conf->basic_rates;
2462 struct conf_tx_rate_class mgmt_rc;
2464 wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl, rates);
2465 wl->basic_rate = wl1271_tx_min_rate_get(wl);
2466 wl1271_debug(DEBUG_AP, "basic rates: 0x%x",
2467 wl->basic_rate_set);
2469 /* update the AP management rate policy with the new rates */
2470 mgmt_rc.enabled_rates = wl->basic_rate_set;
2471 mgmt_rc.long_retry_limit = 10;
2472 mgmt_rc.short_retry_limit = 10;
2474 ret = wl1271_acx_ap_rate_policy(wl, &mgmt_rc,
2475 ACX_TX_AP_MODE_MGMT_RATE);
2477 wl1271_error("AP mgmt policy change failed %d", ret);
2482 ret = wl1271_bss_beacon_info_changed(wl, vif, bss_conf, changed);
2486 if ((changed & BSS_CHANGED_BEACON_ENABLED)) {
2487 if (bss_conf->enable_beacon) {
2488 if (!test_bit(WL1271_FLAG_AP_STARTED, &wl->flags)) {
2489 ret = wl1271_cmd_start_bss(wl);
2493 set_bit(WL1271_FLAG_AP_STARTED, &wl->flags);
2494 wl1271_debug(DEBUG_AP, "started AP");
2496 ret = wl1271_ap_init_hwenc(wl);
2501 if (test_bit(WL1271_FLAG_AP_STARTED, &wl->flags)) {
2502 ret = wl1271_cmd_stop_bss(wl);
2506 clear_bit(WL1271_FLAG_AP_STARTED, &wl->flags);
2507 wl1271_debug(DEBUG_AP, "stopped AP");
2512 ret = wl1271_bss_erp_info_changed(wl, bss_conf, changed);
2519 /* STA/IBSS mode changes */
2520 static void wl1271_bss_info_changed_sta(struct wl1271 *wl,
2521 struct ieee80211_vif *vif,
2522 struct ieee80211_bss_conf *bss_conf,
2525 bool do_join = false, set_assoc = false;
2526 bool is_ibss = (wl->bss_type == BSS_TYPE_IBSS);
2527 u32 sta_rate_set = 0;
2529 struct ieee80211_sta *sta;
2530 bool sta_exists = false;
2531 struct ieee80211_sta_ht_cap sta_ht_cap;
2534 ret = wl1271_bss_beacon_info_changed(wl, vif, bss_conf,
2540 if ((changed & BSS_CHANGED_BEACON_INT) && is_ibss)
2543 /* Need to update the SSID (for filtering etc) */
2544 if ((changed & BSS_CHANGED_BEACON) && is_ibss)
2547 if ((changed & BSS_CHANGED_BEACON_ENABLED) && is_ibss) {
2548 wl1271_debug(DEBUG_ADHOC, "ad-hoc beaconing: %s",
2549 bss_conf->enable_beacon ? "enabled" : "disabled");
2551 if (bss_conf->enable_beacon)
2552 wl->set_bss_type = BSS_TYPE_IBSS;
2554 wl->set_bss_type = BSS_TYPE_STA_BSS;
2558 if ((changed & BSS_CHANGED_CQM)) {
2559 bool enable = false;
2560 if (bss_conf->cqm_rssi_thold)
2562 ret = wl1271_acx_rssi_snr_trigger(wl, enable,
2563 bss_conf->cqm_rssi_thold,
2564 bss_conf->cqm_rssi_hyst);
2567 wl->rssi_thold = bss_conf->cqm_rssi_thold;
2570 if ((changed & BSS_CHANGED_BSSID) &&
2572 * Now we know the correct bssid, so we send a new join command
2573 * and enable the BSSID filter
2575 memcmp(wl->bssid, bss_conf->bssid, ETH_ALEN)) {
2576 memcpy(wl->bssid, bss_conf->bssid, ETH_ALEN);
2578 if (!is_zero_ether_addr(wl->bssid)) {
2579 ret = wl1271_cmd_build_null_data(wl);
2583 ret = wl1271_build_qos_null_data(wl);
2587 /* filter out all packets not from this BSSID */
2588 wl1271_configure_filters(wl, 0);
2590 /* Need to update the BSSID (for filtering etc) */
2596 sta = ieee80211_find_sta(vif, bss_conf->bssid);
2598 /* save the supp_rates of the ap */
2599 sta_rate_set = sta->supp_rates[wl->hw->conf.channel->band];
2600 if (sta->ht_cap.ht_supported)
2602 (sta->ht_cap.mcs.rx_mask[0] << HW_HT_RATES_OFFSET);
2603 sta_ht_cap = sta->ht_cap;
2609 /* handle new association with HT and HT information change */
2610 if ((changed & BSS_CHANGED_HT) &&
2611 (bss_conf->channel_type != NL80211_CHAN_NO_HT)) {
2612 ret = wl1271_acx_set_ht_capabilities(wl, &sta_ht_cap,
2615 wl1271_warning("Set ht cap true failed %d",
2619 ret = wl1271_acx_set_ht_information(wl,
2620 bss_conf->ht_operation_mode);
2622 wl1271_warning("Set ht information failed %d",
2627 /* handle new association without HT and disassociation */
2628 else if (changed & BSS_CHANGED_ASSOC) {
2629 ret = wl1271_acx_set_ht_capabilities(wl, &sta_ht_cap,
2632 wl1271_warning("Set ht cap false failed %d",
2639 if ((changed & BSS_CHANGED_ASSOC)) {
2640 if (bss_conf->assoc) {
2643 wl->aid = bss_conf->aid;
2646 wl->ps_poll_failures = 0;
2649 * use basic rates from AP, and determine lowest rate
2650 * to use with control frames.
2652 rates = bss_conf->basic_rates;
2653 wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl,
2655 wl->basic_rate = wl1271_tx_min_rate_get(wl);
2657 wl->rate_set = wl1271_tx_enabled_rates_get(wl,
2659 ret = wl1271_acx_sta_rate_policies(wl);
2664 * with wl1271, we don't need to update the
2665 * beacon_int and dtim_period, because the firmware
2666 * updates it by itself when the first beacon is
2667 * received after a join.
2669 ret = wl1271_cmd_build_ps_poll(wl, wl->aid);
2674 * Get a template for hardware connection maintenance
2676 dev_kfree_skb(wl->probereq);
2677 wl->probereq = wl1271_cmd_build_ap_probe_req(wl, NULL);
2678 ieoffset = offsetof(struct ieee80211_mgmt,
2679 u.probe_req.variable);
2680 wl1271_ssid_set(wl, wl->probereq, ieoffset);
2682 /* enable the connection monitoring feature */
2683 ret = wl1271_acx_conn_monit_params(wl, true);
2687 /* If we want to go in PSM but we're not there yet */
2688 if (test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags) &&
2689 !test_bit(WL1271_FLAG_PSM, &wl->flags)) {
2690 enum wl1271_cmd_ps_mode mode;
2692 mode = STATION_POWER_SAVE_MODE;
2693 ret = wl1271_ps_set_mode(wl, mode,
2700 /* use defaults when not associated */
2702 !!test_and_clear_bit(WL1271_FLAG_STA_ASSOCIATED,
2704 clear_bit(WL1271_FLAG_STA_STATE_SENT, &wl->flags);
2707 /* free probe-request template */
2708 dev_kfree_skb(wl->probereq);
2709 wl->probereq = NULL;
2711 /* re-enable dynamic ps - just in case */
2712 ieee80211_enable_dyn_ps(wl->vif);
2714 /* revert back to minimum rates for the current band */
2715 wl1271_set_band_rate(wl);
2716 wl->basic_rate = wl1271_tx_min_rate_get(wl);
2717 ret = wl1271_acx_sta_rate_policies(wl);
2721 /* disable connection monitor features */
2722 ret = wl1271_acx_conn_monit_params(wl, false);
2724 /* Disable the keep-alive feature */
2725 ret = wl1271_acx_keep_alive_mode(wl, false);
2729 /* restore the bssid filter and go to dummy bssid */
2732 wl1271_dummy_join(wl);
2737 ret = wl1271_bss_erp_info_changed(wl, bss_conf, changed);
2741 if (changed & BSS_CHANGED_ARP_FILTER) {
2742 __be32 addr = bss_conf->arp_addr_list[0];
2743 WARN_ON(wl->bss_type != BSS_TYPE_STA_BSS);
2745 if (bss_conf->arp_addr_cnt == 1 &&
2746 bss_conf->arp_filter_enabled) {
2748 * The template should have been configured only upon
2749 * association. however, it seems that the correct ip
2750 * isn't being set (when sending), so we have to
2751 * reconfigure the template upon every ip change.
2753 ret = wl1271_cmd_build_arp_rsp(wl, addr);
2755 wl1271_warning("build arp rsp failed: %d", ret);
2759 ret = wl1271_acx_arp_ip_filter(wl,
2760 ACX_ARP_FILTER_ARP_FILTERING,
2763 ret = wl1271_acx_arp_ip_filter(wl, 0, addr);
2770 ret = wl1271_join(wl, set_assoc);
2772 wl1271_warning("cmd join failed %d", ret);
2781 static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
2782 struct ieee80211_vif *vif,
2783 struct ieee80211_bss_conf *bss_conf,
2786 struct wl1271 *wl = hw->priv;
2787 bool is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
2790 wl1271_debug(DEBUG_MAC80211, "mac80211 bss info changed 0x%x",
2793 mutex_lock(&wl->mutex);
2795 if (unlikely(wl->state == WL1271_STATE_OFF))
2798 ret = wl1271_ps_elp_wakeup(wl);
2803 wl1271_bss_info_changed_ap(wl, vif, bss_conf, changed);
2805 wl1271_bss_info_changed_sta(wl, vif, bss_conf, changed);
2807 wl1271_ps_elp_sleep(wl);
2810 mutex_unlock(&wl->mutex);
2813 static int wl1271_op_conf_tx(struct ieee80211_hw *hw, u16 queue,
2814 const struct ieee80211_tx_queue_params *params)
2816 struct wl1271 *wl = hw->priv;
2820 mutex_lock(&wl->mutex);
2822 wl1271_debug(DEBUG_MAC80211, "mac80211 conf tx %d", queue);
2825 ps_scheme = CONF_PS_SCHEME_UPSD_TRIGGER;
2827 ps_scheme = CONF_PS_SCHEME_LEGACY;
2829 if (wl->state == WL1271_STATE_OFF) {
2831 * If the state is off, the parameters will be recorded and
2832 * configured on init. This happens in AP-mode.
2834 struct conf_tx_ac_category *conf_ac =
2835 &wl->conf.tx.ac_conf[wl1271_tx_get_queue(queue)];
2836 struct conf_tx_tid *conf_tid =
2837 &wl->conf.tx.tid_conf[wl1271_tx_get_queue(queue)];
2839 conf_ac->ac = wl1271_tx_get_queue(queue);
2840 conf_ac->cw_min = (u8)params->cw_min;
2841 conf_ac->cw_max = params->cw_max;
2842 conf_ac->aifsn = params->aifs;
2843 conf_ac->tx_op_limit = params->txop << 5;
2845 conf_tid->queue_id = wl1271_tx_get_queue(queue);
2846 conf_tid->channel_type = CONF_CHANNEL_TYPE_EDCF;
2847 conf_tid->tsid = wl1271_tx_get_queue(queue);
2848 conf_tid->ps_scheme = ps_scheme;
2849 conf_tid->ack_policy = CONF_ACK_POLICY_LEGACY;
2850 conf_tid->apsd_conf[0] = 0;
2851 conf_tid->apsd_conf[1] = 0;
2855 ret = wl1271_ps_elp_wakeup(wl);
2860 * the txop is confed in units of 32us by the mac80211,
2863 ret = wl1271_acx_ac_cfg(wl, wl1271_tx_get_queue(queue),
2864 params->cw_min, params->cw_max,
2865 params->aifs, params->txop << 5);
2869 ret = wl1271_acx_tid_cfg(wl, wl1271_tx_get_queue(queue),
2870 CONF_CHANNEL_TYPE_EDCF,
2871 wl1271_tx_get_queue(queue),
2872 ps_scheme, CONF_ACK_POLICY_LEGACY,
2876 wl1271_ps_elp_sleep(wl);
2879 mutex_unlock(&wl->mutex);
2884 static u64 wl1271_op_get_tsf(struct ieee80211_hw *hw)
2887 struct wl1271 *wl = hw->priv;
2888 u64 mactime = ULLONG_MAX;
2891 wl1271_debug(DEBUG_MAC80211, "mac80211 get tsf");
2893 mutex_lock(&wl->mutex);
2895 if (unlikely(wl->state == WL1271_STATE_OFF))
2898 ret = wl1271_ps_elp_wakeup(wl);
2902 ret = wl1271_acx_tsf_info(wl, &mactime);
2907 wl1271_ps_elp_sleep(wl);
2910 mutex_unlock(&wl->mutex);
2914 static int wl1271_op_get_survey(struct ieee80211_hw *hw, int idx,
2915 struct survey_info *survey)
2917 struct wl1271 *wl = hw->priv;
2918 struct ieee80211_conf *conf = &hw->conf;
2923 survey->channel = conf->channel;
2924 survey->filled = SURVEY_INFO_NOISE_DBM;
2925 survey->noise = wl->noise;
2930 static int wl1271_allocate_sta(struct wl1271 *wl,
2931 struct ieee80211_sta *sta,
2934 struct wl1271_station *wl_sta;
2937 id = find_first_zero_bit(wl->ap_hlid_map, AP_MAX_STATIONS);
2938 if (id >= AP_MAX_STATIONS) {
2939 wl1271_warning("could not allocate HLID - too much stations");
2943 wl_sta = (struct wl1271_station *)sta->drv_priv;
2944 __set_bit(id, wl->ap_hlid_map);
2945 wl_sta->hlid = WL1271_AP_STA_HLID_START + id;
2946 *hlid = wl_sta->hlid;
2947 memcpy(wl->links[wl_sta->hlid].addr, sta->addr, ETH_ALEN);
2951 static void wl1271_free_sta(struct wl1271 *wl, u8 hlid)
2953 int id = hlid - WL1271_AP_STA_HLID_START;
2955 if (WARN_ON(!test_bit(id, wl->ap_hlid_map)))
2958 __clear_bit(id, wl->ap_hlid_map);
2959 memset(wl->links[hlid].addr, 0, ETH_ALEN);
2960 wl1271_tx_reset_link_queues(wl, hlid);
2961 __clear_bit(hlid, &wl->ap_ps_map);
2962 __clear_bit(hlid, (unsigned long *)&wl->ap_fw_ps_map);
2965 bool wl1271_is_active_sta(struct wl1271 *wl, u8 hlid)
2967 int id = hlid - WL1271_AP_STA_HLID_START;
2968 return test_bit(id, wl->ap_hlid_map);
2971 static int wl1271_op_sta_add(struct ieee80211_hw *hw,
2972 struct ieee80211_vif *vif,
2973 struct ieee80211_sta *sta)
2975 struct wl1271 *wl = hw->priv;
2979 mutex_lock(&wl->mutex);
2981 if (unlikely(wl->state == WL1271_STATE_OFF))
2984 if (wl->bss_type != BSS_TYPE_AP_BSS)
2987 wl1271_debug(DEBUG_MAC80211, "mac80211 add sta %d", (int)sta->aid);
2989 ret = wl1271_allocate_sta(wl, sta, &hlid);
2993 ret = wl1271_ps_elp_wakeup(wl);
2997 ret = wl1271_cmd_add_sta(wl, sta, hlid);
3002 wl1271_ps_elp_sleep(wl);
3006 wl1271_free_sta(wl, hlid);
3009 mutex_unlock(&wl->mutex);
3013 static int wl1271_op_sta_remove(struct ieee80211_hw *hw,
3014 struct ieee80211_vif *vif,
3015 struct ieee80211_sta *sta)
3017 struct wl1271 *wl = hw->priv;
3018 struct wl1271_station *wl_sta;
3021 mutex_lock(&wl->mutex);
3023 if (unlikely(wl->state == WL1271_STATE_OFF))
3026 if (wl->bss_type != BSS_TYPE_AP_BSS)
3029 wl1271_debug(DEBUG_MAC80211, "mac80211 remove sta %d", (int)sta->aid);
3031 wl_sta = (struct wl1271_station *)sta->drv_priv;
3032 id = wl_sta->hlid - WL1271_AP_STA_HLID_START;
3033 if (WARN_ON(!test_bit(id, wl->ap_hlid_map)))
3036 ret = wl1271_ps_elp_wakeup(wl);
3040 ret = wl1271_cmd_remove_sta(wl, wl_sta->hlid);
3044 wl1271_free_sta(wl, wl_sta->hlid);
3047 wl1271_ps_elp_sleep(wl);
3050 mutex_unlock(&wl->mutex);
3054 static int wl1271_op_ampdu_action(struct ieee80211_hw *hw,
3055 struct ieee80211_vif *vif,
3056 enum ieee80211_ampdu_mlme_action action,
3057 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
3060 struct wl1271 *wl = hw->priv;
3063 mutex_lock(&wl->mutex);
3065 if (unlikely(wl->state == WL1271_STATE_OFF)) {
3070 ret = wl1271_ps_elp_wakeup(wl);
3075 case IEEE80211_AMPDU_RX_START:
3076 if (wl->ba_support) {
3077 ret = wl1271_acx_set_ba_receiver_session(wl, tid, *ssn,
3080 wl->ba_rx_bitmap |= BIT(tid);
3086 case IEEE80211_AMPDU_RX_STOP:
3087 ret = wl1271_acx_set_ba_receiver_session(wl, tid, 0, false);
3089 wl->ba_rx_bitmap &= ~BIT(tid);
3093 * The BA initiator session management in FW independently.
3094 * Falling break here on purpose for all TX APDU commands.
3096 case IEEE80211_AMPDU_TX_START:
3097 case IEEE80211_AMPDU_TX_STOP:
3098 case IEEE80211_AMPDU_TX_OPERATIONAL:
3103 wl1271_error("Incorrect ampdu action id=%x\n", action);
3107 wl1271_ps_elp_sleep(wl);
3110 mutex_unlock(&wl->mutex);
3115 /* can't be const, mac80211 writes to this */
3116 static struct ieee80211_rate wl1271_rates[] = {
3118 .hw_value = CONF_HW_BIT_RATE_1MBPS,
3119 .hw_value_short = CONF_HW_BIT_RATE_1MBPS, },
3121 .hw_value = CONF_HW_BIT_RATE_2MBPS,
3122 .hw_value_short = CONF_HW_BIT_RATE_2MBPS,
3123 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
3125 .hw_value = CONF_HW_BIT_RATE_5_5MBPS,
3126 .hw_value_short = CONF_HW_BIT_RATE_5_5MBPS,
3127 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
3129 .hw_value = CONF_HW_BIT_RATE_11MBPS,
3130 .hw_value_short = CONF_HW_BIT_RATE_11MBPS,
3131 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
3133 .hw_value = CONF_HW_BIT_RATE_6MBPS,
3134 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
3136 .hw_value = CONF_HW_BIT_RATE_9MBPS,
3137 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
3139 .hw_value = CONF_HW_BIT_RATE_12MBPS,
3140 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
3142 .hw_value = CONF_HW_BIT_RATE_18MBPS,
3143 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
3145 .hw_value = CONF_HW_BIT_RATE_24MBPS,
3146 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
3148 .hw_value = CONF_HW_BIT_RATE_36MBPS,
3149 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
3151 .hw_value = CONF_HW_BIT_RATE_48MBPS,
3152 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
3154 .hw_value = CONF_HW_BIT_RATE_54MBPS,
3155 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
3158 /* can't be const, mac80211 writes to this */
3159 static struct ieee80211_channel wl1271_channels[] = {
3160 { .hw_value = 1, .center_freq = 2412, .max_power = 25 },
3161 { .hw_value = 2, .center_freq = 2417, .max_power = 25 },
3162 { .hw_value = 3, .center_freq = 2422, .max_power = 25 },
3163 { .hw_value = 4, .center_freq = 2427, .max_power = 25 },
3164 { .hw_value = 5, .center_freq = 2432, .max_power = 25 },
3165 { .hw_value = 6, .center_freq = 2437, .max_power = 25 },
3166 { .hw_value = 7, .center_freq = 2442, .max_power = 25 },
3167 { .hw_value = 8, .center_freq = 2447, .max_power = 25 },
3168 { .hw_value = 9, .center_freq = 2452, .max_power = 25 },
3169 { .hw_value = 10, .center_freq = 2457, .max_power = 25 },
3170 { .hw_value = 11, .center_freq = 2462, .max_power = 25 },
3171 { .hw_value = 12, .center_freq = 2467, .max_power = 25 },
3172 { .hw_value = 13, .center_freq = 2472, .max_power = 25 },
3173 { .hw_value = 14, .center_freq = 2484, .max_power = 25 },
3176 /* mapping to indexes for wl1271_rates */
3177 static const u8 wl1271_rate_to_idx_2ghz[] = {
3178 /* MCS rates are used only with 11n */
3179 7, /* CONF_HW_RXTX_RATE_MCS7 */
3180 6, /* CONF_HW_RXTX_RATE_MCS6 */
3181 5, /* CONF_HW_RXTX_RATE_MCS5 */
3182 4, /* CONF_HW_RXTX_RATE_MCS4 */
3183 3, /* CONF_HW_RXTX_RATE_MCS3 */
3184 2, /* CONF_HW_RXTX_RATE_MCS2 */
3185 1, /* CONF_HW_RXTX_RATE_MCS1 */
3186 0, /* CONF_HW_RXTX_RATE_MCS0 */
3188 11, /* CONF_HW_RXTX_RATE_54 */
3189 10, /* CONF_HW_RXTX_RATE_48 */
3190 9, /* CONF_HW_RXTX_RATE_36 */
3191 8, /* CONF_HW_RXTX_RATE_24 */
3193 /* TI-specific rate */
3194 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
3196 7, /* CONF_HW_RXTX_RATE_18 */
3197 6, /* CONF_HW_RXTX_RATE_12 */
3198 3, /* CONF_HW_RXTX_RATE_11 */
3199 5, /* CONF_HW_RXTX_RATE_9 */
3200 4, /* CONF_HW_RXTX_RATE_6 */
3201 2, /* CONF_HW_RXTX_RATE_5_5 */
3202 1, /* CONF_HW_RXTX_RATE_2 */
3203 0 /* CONF_HW_RXTX_RATE_1 */
3206 /* 11n STA capabilities */
3207 #define HW_RX_HIGHEST_RATE 72
3209 #ifdef CONFIG_WL12XX_HT
3210 #define WL12XX_HT_CAP { \
3211 .cap = IEEE80211_HT_CAP_GRN_FLD | IEEE80211_HT_CAP_SGI_20 | \
3212 (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT), \
3213 .ht_supported = true, \
3214 .ampdu_factor = IEEE80211_HT_MAX_AMPDU_8K, \
3215 .ampdu_density = IEEE80211_HT_MPDU_DENSITY_8, \
3217 .rx_mask = { 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, \
3218 .rx_highest = cpu_to_le16(HW_RX_HIGHEST_RATE), \
3219 .tx_params = IEEE80211_HT_MCS_TX_DEFINED, \
3223 #define WL12XX_HT_CAP { \
3224 .ht_supported = false, \
3228 /* can't be const, mac80211 writes to this */
3229 static struct ieee80211_supported_band wl1271_band_2ghz = {
3230 .channels = wl1271_channels,
3231 .n_channels = ARRAY_SIZE(wl1271_channels),
3232 .bitrates = wl1271_rates,
3233 .n_bitrates = ARRAY_SIZE(wl1271_rates),
3234 .ht_cap = WL12XX_HT_CAP,
3237 /* 5 GHz data rates for WL1273 */
3238 static struct ieee80211_rate wl1271_rates_5ghz[] = {
3240 .hw_value = CONF_HW_BIT_RATE_6MBPS,
3241 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
3243 .hw_value = CONF_HW_BIT_RATE_9MBPS,
3244 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
3246 .hw_value = CONF_HW_BIT_RATE_12MBPS,
3247 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
3249 .hw_value = CONF_HW_BIT_RATE_18MBPS,
3250 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
3252 .hw_value = CONF_HW_BIT_RATE_24MBPS,
3253 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
3255 .hw_value = CONF_HW_BIT_RATE_36MBPS,
3256 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
3258 .hw_value = CONF_HW_BIT_RATE_48MBPS,
3259 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
3261 .hw_value = CONF_HW_BIT_RATE_54MBPS,
3262 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
3265 /* 5 GHz band channels for WL1273 */
3266 static struct ieee80211_channel wl1271_channels_5ghz[] = {
3267 { .hw_value = 7, .center_freq = 5035},
3268 { .hw_value = 8, .center_freq = 5040},
3269 { .hw_value = 9, .center_freq = 5045},
3270 { .hw_value = 11, .center_freq = 5055},
3271 { .hw_value = 12, .center_freq = 5060},
3272 { .hw_value = 16, .center_freq = 5080},
3273 { .hw_value = 34, .center_freq = 5170},
3274 { .hw_value = 36, .center_freq = 5180},
3275 { .hw_value = 38, .center_freq = 5190},
3276 { .hw_value = 40, .center_freq = 5200},
3277 { .hw_value = 42, .center_freq = 5210},
3278 { .hw_value = 44, .center_freq = 5220},
3279 { .hw_value = 46, .center_freq = 5230},
3280 { .hw_value = 48, .center_freq = 5240},
3281 { .hw_value = 52, .center_freq = 5260},
3282 { .hw_value = 56, .center_freq = 5280},
3283 { .hw_value = 60, .center_freq = 5300},
3284 { .hw_value = 64, .center_freq = 5320},
3285 { .hw_value = 100, .center_freq = 5500},
3286 { .hw_value = 104, .center_freq = 5520},
3287 { .hw_value = 108, .center_freq = 5540},
3288 { .hw_value = 112, .center_freq = 5560},
3289 { .hw_value = 116, .center_freq = 5580},
3290 { .hw_value = 120, .center_freq = 5600},
3291 { .hw_value = 124, .center_freq = 5620},
3292 { .hw_value = 128, .center_freq = 5640},
3293 { .hw_value = 132, .center_freq = 5660},
3294 { .hw_value = 136, .center_freq = 5680},
3295 { .hw_value = 140, .center_freq = 5700},
3296 { .hw_value = 149, .center_freq = 5745},
3297 { .hw_value = 153, .center_freq = 5765},
3298 { .hw_value = 157, .center_freq = 5785},
3299 { .hw_value = 161, .center_freq = 5805},
3300 { .hw_value = 165, .center_freq = 5825},
3303 /* mapping to indexes for wl1271_rates_5ghz */
3304 static const u8 wl1271_rate_to_idx_5ghz[] = {
3305 /* MCS rates are used only with 11n */
3306 7, /* CONF_HW_RXTX_RATE_MCS7 */
3307 6, /* CONF_HW_RXTX_RATE_MCS6 */
3308 5, /* CONF_HW_RXTX_RATE_MCS5 */
3309 4, /* CONF_HW_RXTX_RATE_MCS4 */
3310 3, /* CONF_HW_RXTX_RATE_MCS3 */
3311 2, /* CONF_HW_RXTX_RATE_MCS2 */
3312 1, /* CONF_HW_RXTX_RATE_MCS1 */
3313 0, /* CONF_HW_RXTX_RATE_MCS0 */
3315 7, /* CONF_HW_RXTX_RATE_54 */
3316 6, /* CONF_HW_RXTX_RATE_48 */
3317 5, /* CONF_HW_RXTX_RATE_36 */
3318 4, /* CONF_HW_RXTX_RATE_24 */
3320 /* TI-specific rate */
3321 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
3323 3, /* CONF_HW_RXTX_RATE_18 */
3324 2, /* CONF_HW_RXTX_RATE_12 */
3325 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_11 */
3326 1, /* CONF_HW_RXTX_RATE_9 */
3327 0, /* CONF_HW_RXTX_RATE_6 */
3328 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_5_5 */
3329 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_2 */
3330 CONF_HW_RXTX_RATE_UNSUPPORTED /* CONF_HW_RXTX_RATE_1 */
3333 static struct ieee80211_supported_band wl1271_band_5ghz = {
3334 .channels = wl1271_channels_5ghz,
3335 .n_channels = ARRAY_SIZE(wl1271_channels_5ghz),
3336 .bitrates = wl1271_rates_5ghz,
3337 .n_bitrates = ARRAY_SIZE(wl1271_rates_5ghz),
3338 .ht_cap = WL12XX_HT_CAP,
3341 static const u8 *wl1271_band_rate_to_idx[] = {
3342 [IEEE80211_BAND_2GHZ] = wl1271_rate_to_idx_2ghz,
3343 [IEEE80211_BAND_5GHZ] = wl1271_rate_to_idx_5ghz
3346 static const struct ieee80211_ops wl1271_ops = {
3347 .start = wl1271_op_start,
3348 .stop = wl1271_op_stop,
3349 .add_interface = wl1271_op_add_interface,
3350 .remove_interface = wl1271_op_remove_interface,
3351 .config = wl1271_op_config,
3352 .prepare_multicast = wl1271_op_prepare_multicast,
3353 .configure_filter = wl1271_op_configure_filter,
3355 .set_key = wl1271_op_set_key,
3356 .hw_scan = wl1271_op_hw_scan,
3357 .bss_info_changed = wl1271_op_bss_info_changed,
3358 .set_frag_threshold = wl1271_op_set_frag_threshold,
3359 .set_rts_threshold = wl1271_op_set_rts_threshold,
3360 .conf_tx = wl1271_op_conf_tx,
3361 .get_tsf = wl1271_op_get_tsf,
3362 .get_survey = wl1271_op_get_survey,
3363 .sta_add = wl1271_op_sta_add,
3364 .sta_remove = wl1271_op_sta_remove,
3365 .ampdu_action = wl1271_op_ampdu_action,
3366 CFG80211_TESTMODE_CMD(wl1271_tm_cmd)
3370 u8 wl1271_rate_to_idx(int rate, enum ieee80211_band band)
3374 BUG_ON(band >= sizeof(wl1271_band_rate_to_idx)/sizeof(u8 *));
3376 if (unlikely(rate >= CONF_HW_RXTX_RATE_MAX)) {
3377 wl1271_error("Illegal RX rate from HW: %d", rate);
3381 idx = wl1271_band_rate_to_idx[band][rate];
3382 if (unlikely(idx == CONF_HW_RXTX_RATE_UNSUPPORTED)) {
3383 wl1271_error("Unsupported RX rate from HW: %d", rate);
3390 static ssize_t wl1271_sysfs_show_bt_coex_state(struct device *dev,
3391 struct device_attribute *attr,
3394 struct wl1271 *wl = dev_get_drvdata(dev);
3399 mutex_lock(&wl->mutex);
3400 len = snprintf(buf, len, "%d\n\n0 - off\n1 - on\n",
3402 mutex_unlock(&wl->mutex);
3408 static ssize_t wl1271_sysfs_store_bt_coex_state(struct device *dev,
3409 struct device_attribute *attr,
3410 const char *buf, size_t count)
3412 struct wl1271 *wl = dev_get_drvdata(dev);
3416 ret = kstrtoul(buf, 10, &res);
3418 wl1271_warning("incorrect value written to bt_coex_mode");
3422 mutex_lock(&wl->mutex);
3426 if (res == wl->sg_enabled)
3429 wl->sg_enabled = res;
3431 if (wl->state == WL1271_STATE_OFF)
3434 ret = wl1271_ps_elp_wakeup(wl);
3438 wl1271_acx_sg_enable(wl, wl->sg_enabled);
3439 wl1271_ps_elp_sleep(wl);
3442 mutex_unlock(&wl->mutex);
3446 static DEVICE_ATTR(bt_coex_state, S_IRUGO | S_IWUSR,
3447 wl1271_sysfs_show_bt_coex_state,
3448 wl1271_sysfs_store_bt_coex_state);
3450 static ssize_t wl1271_sysfs_show_hw_pg_ver(struct device *dev,
3451 struct device_attribute *attr,
3454 struct wl1271 *wl = dev_get_drvdata(dev);
3459 mutex_lock(&wl->mutex);
3460 if (wl->hw_pg_ver >= 0)
3461 len = snprintf(buf, len, "%d\n", wl->hw_pg_ver);
3463 len = snprintf(buf, len, "n/a\n");
3464 mutex_unlock(&wl->mutex);
3469 static DEVICE_ATTR(hw_pg_ver, S_IRUGO | S_IWUSR,
3470 wl1271_sysfs_show_hw_pg_ver, NULL);
3472 int wl1271_register_hw(struct wl1271 *wl)
3476 if (wl->mac80211_registered)
3479 ret = wl1271_fetch_nvs(wl);
3481 /* NOTE: The wl->nvs->nvs element must be first, in
3482 * order to simplify the casting, we assume it is at
3483 * the beginning of the wl->nvs structure.
3485 u8 *nvs_ptr = (u8 *)wl->nvs;
3487 wl->mac_addr[0] = nvs_ptr[11];
3488 wl->mac_addr[1] = nvs_ptr[10];
3489 wl->mac_addr[2] = nvs_ptr[6];
3490 wl->mac_addr[3] = nvs_ptr[5];
3491 wl->mac_addr[4] = nvs_ptr[4];
3492 wl->mac_addr[5] = nvs_ptr[3];
3495 SET_IEEE80211_PERM_ADDR(wl->hw, wl->mac_addr);
3497 ret = ieee80211_register_hw(wl->hw);
3499 wl1271_error("unable to register mac80211 hw: %d", ret);
3503 wl->mac80211_registered = true;
3505 wl1271_debugfs_init(wl);
3507 register_netdevice_notifier(&wl1271_dev_notifier);
3509 wl1271_notice("loaded");
3513 EXPORT_SYMBOL_GPL(wl1271_register_hw);
3515 void wl1271_unregister_hw(struct wl1271 *wl)
3517 if (wl->state == WL1271_STATE_PLT)
3518 __wl1271_plt_stop(wl);
3520 unregister_netdevice_notifier(&wl1271_dev_notifier);
3521 ieee80211_unregister_hw(wl->hw);
3522 wl->mac80211_registered = false;
3525 EXPORT_SYMBOL_GPL(wl1271_unregister_hw);
3527 int wl1271_init_ieee80211(struct wl1271 *wl)
3529 static const u32 cipher_suites[] = {
3530 WLAN_CIPHER_SUITE_WEP40,
3531 WLAN_CIPHER_SUITE_WEP104,
3532 WLAN_CIPHER_SUITE_TKIP,
3533 WLAN_CIPHER_SUITE_CCMP,
3534 WL1271_CIPHER_SUITE_GEM,
3537 /* The tx descriptor buffer and the TKIP space. */
3538 wl->hw->extra_tx_headroom = WL1271_TKIP_IV_SPACE +
3539 sizeof(struct wl1271_tx_hw_descr);
3542 /* FIXME: find a proper value */
3543 wl->hw->channel_change_time = 10000;
3544 wl->hw->max_listen_interval = wl->conf.conn.max_listen_interval;
3546 wl->hw->flags = IEEE80211_HW_SIGNAL_DBM |
3547 IEEE80211_HW_BEACON_FILTER |
3548 IEEE80211_HW_SUPPORTS_PS |
3549 IEEE80211_HW_SUPPORTS_UAPSD |
3550 IEEE80211_HW_HAS_RATE_CONTROL |
3551 IEEE80211_HW_CONNECTION_MONITOR |
3552 IEEE80211_HW_SUPPORTS_CQM_RSSI |
3553 IEEE80211_HW_AP_LINK_PS;
3555 wl->hw->wiphy->cipher_suites = cipher_suites;
3556 wl->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
3558 wl->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
3559 BIT(NL80211_IFTYPE_ADHOC) | BIT(NL80211_IFTYPE_AP);
3560 wl->hw->wiphy->max_scan_ssids = 1;
3562 * Maximum length of elements in scanning probe request templates
3563 * should be the maximum length possible for a template, without
3564 * the IEEE80211 header of the template
3566 wl->hw->wiphy->max_scan_ie_len = WL1271_CMD_TEMPL_MAX_SIZE -
3567 sizeof(struct ieee80211_header);
3569 /* make sure all our channels fit in the scanned_ch bitmask */
3570 BUILD_BUG_ON(ARRAY_SIZE(wl1271_channels) +
3571 ARRAY_SIZE(wl1271_channels_5ghz) >
3572 WL1271_MAX_CHANNELS);
3574 * We keep local copies of the band structs because we need to
3575 * modify them on a per-device basis.
3577 memcpy(&wl->bands[IEEE80211_BAND_2GHZ], &wl1271_band_2ghz,
3578 sizeof(wl1271_band_2ghz));
3579 memcpy(&wl->bands[IEEE80211_BAND_5GHZ], &wl1271_band_5ghz,
3580 sizeof(wl1271_band_5ghz));
3582 wl->hw->wiphy->bands[IEEE80211_BAND_2GHZ] =
3583 &wl->bands[IEEE80211_BAND_2GHZ];
3584 wl->hw->wiphy->bands[IEEE80211_BAND_5GHZ] =
3585 &wl->bands[IEEE80211_BAND_5GHZ];
3588 wl->hw->max_rates = 1;
3590 wl->hw->wiphy->reg_notifier = wl1271_reg_notify;
3592 SET_IEEE80211_DEV(wl->hw, wl1271_wl_to_dev(wl));
3594 wl->hw->sta_data_size = sizeof(struct wl1271_station);
3596 wl->hw->max_rx_aggregation_subframes = 8;
3600 EXPORT_SYMBOL_GPL(wl1271_init_ieee80211);
3602 #define WL1271_DEFAULT_CHANNEL 0
3604 struct ieee80211_hw *wl1271_alloc_hw(void)
3606 struct ieee80211_hw *hw;
3607 struct platform_device *plat_dev = NULL;
3612 hw = ieee80211_alloc_hw(sizeof(*wl), &wl1271_ops);
3614 wl1271_error("could not alloc ieee80211_hw");
3619 plat_dev = kmemdup(&wl1271_device, sizeof(wl1271_device), GFP_KERNEL);
3621 wl1271_error("could not allocate platform_device");
3623 goto err_plat_alloc;
3627 memset(wl, 0, sizeof(*wl));
3629 INIT_LIST_HEAD(&wl->list);
3632 wl->plat_dev = plat_dev;
3634 for (i = 0; i < NUM_TX_QUEUES; i++)
3635 skb_queue_head_init(&wl->tx_queue[i]);
3637 for (i = 0; i < NUM_TX_QUEUES; i++)
3638 for (j = 0; j < AP_MAX_LINKS; j++)
3639 skb_queue_head_init(&wl->links[j].tx_queue[i]);
3641 skb_queue_head_init(&wl->deferred_rx_queue);
3642 skb_queue_head_init(&wl->deferred_tx_queue);
3644 INIT_DELAYED_WORK(&wl->elp_work, wl1271_elp_work);
3645 INIT_DELAYED_WORK(&wl->pspoll_work, wl1271_pspoll_work);
3646 INIT_WORK(&wl->netstack_work, wl1271_netstack_work);
3647 INIT_WORK(&wl->tx_work, wl1271_tx_work);
3648 INIT_WORK(&wl->recovery_work, wl1271_recovery_work);
3649 INIT_DELAYED_WORK(&wl->scan_complete_work, wl1271_scan_complete_work);
3650 wl->channel = WL1271_DEFAULT_CHANNEL;
3651 wl->beacon_int = WL1271_DEFAULT_BEACON_INT;
3652 wl->default_key = 0;
3654 wl->rx_config = WL1271_DEFAULT_STA_RX_CONFIG;
3655 wl->rx_filter = WL1271_DEFAULT_STA_RX_FILTER;
3656 wl->psm_entry_retry = 0;
3657 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
3658 wl->basic_rate_set = CONF_TX_RATE_MASK_BASIC;
3659 wl->basic_rate = CONF_TX_RATE_MASK_BASIC;
3660 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
3661 wl->band = IEEE80211_BAND_2GHZ;
3664 wl->sg_enabled = true;
3666 wl->bss_type = MAX_BSS_TYPE;
3667 wl->set_bss_type = MAX_BSS_TYPE;
3668 wl->fw_bss_type = MAX_BSS_TYPE;
3669 wl->last_tx_hlid = 0;
3671 wl->ap_fw_ps_map = 0;
3673 wl->platform_quirks = 0;
3675 memset(wl->tx_frames_map, 0, sizeof(wl->tx_frames_map));
3676 for (i = 0; i < ACX_TX_DESCRIPTORS; i++)
3677 wl->tx_frames[i] = NULL;
3679 spin_lock_init(&wl->wl_lock);
3681 wl->state = WL1271_STATE_OFF;
3682 mutex_init(&wl->mutex);
3684 /* Apply default driver configuration. */
3685 wl1271_conf_init(wl);
3687 order = get_order(WL1271_AGGR_BUFFER_SIZE);
3688 wl->aggr_buf = (u8 *)__get_free_pages(GFP_KERNEL, order);
3689 if (!wl->aggr_buf) {
3694 wl->dummy_packet = wl12xx_alloc_dummy_packet(wl);
3695 if (!wl->dummy_packet) {
3700 /* Register platform device */
3701 ret = platform_device_register(wl->plat_dev);
3703 wl1271_error("couldn't register platform device");
3704 goto err_dummy_packet;
3706 dev_set_drvdata(&wl->plat_dev->dev, wl);
3708 /* Create sysfs file to control bt coex state */
3709 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
3711 wl1271_error("failed to create sysfs file bt_coex_state");
3715 /* Create sysfs file to get HW PG version */
3716 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_hw_pg_ver);
3718 wl1271_error("failed to create sysfs file hw_pg_ver");
3719 goto err_bt_coex_state;
3725 device_remove_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
3728 platform_device_unregister(wl->plat_dev);
3731 dev_kfree_skb(wl->dummy_packet);
3734 free_pages((unsigned long)wl->aggr_buf, order);
3737 wl1271_debugfs_exit(wl);
3741 ieee80211_free_hw(hw);
3745 return ERR_PTR(ret);
3747 EXPORT_SYMBOL_GPL(wl1271_alloc_hw);
3749 int wl1271_free_hw(struct wl1271 *wl)
3751 platform_device_unregister(wl->plat_dev);
3752 dev_kfree_skb(wl->dummy_packet);
3753 free_pages((unsigned long)wl->aggr_buf,
3754 get_order(WL1271_AGGR_BUFFER_SIZE));
3755 kfree(wl->plat_dev);
3757 wl1271_debugfs_exit(wl);
3764 kfree(wl->fw_status);
3765 kfree(wl->tx_res_if);
3767 ieee80211_free_hw(wl->hw);
3771 EXPORT_SYMBOL_GPL(wl1271_free_hw);
3773 u32 wl12xx_debug_level = DEBUG_NONE;
3774 EXPORT_SYMBOL_GPL(wl12xx_debug_level);
3775 module_param_named(debug_level, wl12xx_debug_level, uint, S_IRUSR | S_IWUSR);
3776 MODULE_PARM_DESC(debug_level, "wl12xx debugging level");
3778 MODULE_LICENSE("GPL");
3779 MODULE_AUTHOR("Luciano Coelho <coelho@ti.com>");
3780 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");