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>
35 #include "wl12xx_80211.h"
36 #include "wl1271_reg.h"
37 #include "wl1271_io.h"
38 #include "wl1271_event.h"
39 #include "wl1271_tx.h"
40 #include "wl1271_rx.h"
41 #include "wl1271_ps.h"
42 #include "wl1271_init.h"
43 #include "wl1271_debugfs.h"
44 #include "wl1271_cmd.h"
45 #include "wl1271_boot.h"
46 #include "wl1271_testmode.h"
47 #include "wl1271_scan.h"
49 #define WL1271_BOOT_RETRIES 3
51 static struct conf_drv_settings default_conf = {
54 [CONF_SG_BT_PER_THRESHOLD] = 7500,
55 [CONF_SG_HV3_MAX_OVERRIDE] = 0,
56 [CONF_SG_BT_NFS_SAMPLE_INTERVAL] = 400,
57 [CONF_SG_BT_LOAD_RATIO] = 50,
58 [CONF_SG_AUTO_PS_MODE] = 1,
59 [CONF_SG_AUTO_SCAN_PROBE_REQ] = 170,
60 [CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_HV3] = 50,
61 [CONF_SG_ANTENNA_CONFIGURATION] = 0,
62 [CONF_SG_BEACON_MISS_PERCENT] = 60,
63 [CONF_SG_RATE_ADAPT_THRESH] = 12,
64 [CONF_SG_RATE_ADAPT_SNR] = 0,
65 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MIN_BR] = 10,
66 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MAX_BR] = 30,
67 [CONF_SG_WLAN_PS_MAX_BT_ACL_MASTER_BR] = 8,
68 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MIN_BR] = 20,
69 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MAX_BR] = 50,
70 /* Note: with UPSD, this should be 4 */
71 [CONF_SG_WLAN_PS_MAX_BT_ACL_SLAVE_BR] = 8,
72 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MIN_EDR] = 7,
73 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MAX_EDR] = 25,
74 [CONF_SG_WLAN_PS_MAX_BT_ACL_MASTER_EDR] = 20,
75 /* Note: with UPDS, this should be 15 */
76 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MIN_EDR] = 8,
77 /* Note: with UPDS, this should be 50 */
78 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MAX_EDR] = 40,
79 /* Note: with UPDS, this should be 10 */
80 [CONF_SG_WLAN_PS_MAX_BT_ACL_SLAVE_EDR] = 20,
83 [CONF_SG_ADAPTIVE_RXT_TXT] = 1,
84 [CONF_SG_PS_POLL_TIMEOUT] = 10,
85 [CONF_SG_UPSD_TIMEOUT] = 10,
86 [CONF_SG_WLAN_ACTIVE_BT_ACL_MASTER_MIN_EDR] = 7,
87 [CONF_SG_WLAN_ACTIVE_BT_ACL_MASTER_MAX_EDR] = 15,
88 [CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_MASTER_EDR] = 15,
89 [CONF_SG_WLAN_ACTIVE_BT_ACL_SLAVE_MIN_EDR] = 8,
90 [CONF_SG_WLAN_ACTIVE_BT_ACL_SLAVE_MAX_EDR] = 20,
91 [CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_SLAVE_EDR] = 15,
92 [CONF_SG_WLAN_ACTIVE_BT_ACL_MIN_BR] = 20,
93 [CONF_SG_WLAN_ACTIVE_BT_ACL_MAX_BR] = 50,
94 [CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_BR] = 10,
95 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_HV3] = 200,
96 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_A2DP] = 800,
97 [CONF_SG_PASSIVE_SCAN_A2DP_BT_TIME] = 75,
98 [CONF_SG_PASSIVE_SCAN_A2DP_WLAN_TIME] = 15,
99 [CONF_SG_HV3_MAX_SERVED] = 6,
100 [CONF_SG_DHCP_TIME] = 5000,
101 [CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_A2DP] = 100,
103 .state = CONF_SG_PROTECTIVE,
106 .rx_msdu_life_time = 512000,
107 .packet_detection_threshold = 0,
108 .ps_poll_timeout = 15,
110 .rts_threshold = 2347,
111 .rx_cca_threshold = 0,
112 .irq_blk_threshold = 0xFFFF,
113 .irq_pkt_threshold = 0,
115 .queue_type = CONF_RX_QUEUE_TYPE_LOW_PRIORITY,
118 .tx_energy_detection = 0,
121 .short_retry_limit = 10,
122 .long_retry_limit = 10,
145 .aifsn = CONF_TX_AIFS_PIFS,
152 .aifsn = CONF_TX_AIFS_PIFS,
159 .queue_id = CONF_TX_AC_BE,
160 .channel_type = CONF_CHANNEL_TYPE_EDCF,
161 .tsid = CONF_TX_AC_BE,
162 .ps_scheme = CONF_PS_SCHEME_LEGACY,
163 .ack_policy = CONF_ACK_POLICY_LEGACY,
167 .queue_id = CONF_TX_AC_BK,
168 .channel_type = CONF_CHANNEL_TYPE_EDCF,
169 .tsid = CONF_TX_AC_BK,
170 .ps_scheme = CONF_PS_SCHEME_LEGACY,
171 .ack_policy = CONF_ACK_POLICY_LEGACY,
175 .queue_id = CONF_TX_AC_VI,
176 .channel_type = CONF_CHANNEL_TYPE_EDCF,
177 .tsid = CONF_TX_AC_VI,
178 .ps_scheme = CONF_PS_SCHEME_LEGACY,
179 .ack_policy = CONF_ACK_POLICY_LEGACY,
183 .queue_id = CONF_TX_AC_VO,
184 .channel_type = CONF_CHANNEL_TYPE_EDCF,
185 .tsid = CONF_TX_AC_VO,
186 .ps_scheme = CONF_PS_SCHEME_LEGACY,
187 .ack_policy = CONF_ACK_POLICY_LEGACY,
191 .frag_threshold = IEEE80211_MAX_FRAG_THRESHOLD,
192 .tx_compl_timeout = 700,
193 .tx_compl_threshold = 4,
194 .basic_rate = CONF_HW_BIT_RATE_1MBPS,
195 .basic_rate_5 = CONF_HW_BIT_RATE_6MBPS,
198 .wake_up_event = CONF_WAKE_UP_EVENT_DTIM,
199 .listen_interval = 1,
200 .bcn_filt_mode = CONF_BCN_FILT_MODE_ENABLED,
201 .bcn_filt_ie_count = 1,
204 .ie = WLAN_EID_CHANNEL_SWITCH,
205 .rule = CONF_BCN_RULE_PASS_ON_APPEARANCE,
208 .synch_fail_thold = 10,
209 .bss_lose_timeout = 100,
210 .beacon_rx_timeout = 10000,
211 .broadcast_timeout = 20000,
212 .rx_broadcast_in_ps = 1,
213 .ps_poll_threshold = 10,
214 .ps_poll_recovery_period = 700,
215 .bet_enable = CONF_BET_MODE_ENABLE,
216 .bet_max_consecutive = 10,
217 .psm_entry_retries = 5,
218 .psm_entry_nullfunc_retries = 3,
219 .psm_entry_hangover_period = 1,
220 .keep_alive_interval = 55000,
221 .max_listen_interval = 20,
228 .host_clk_settling_time = 5000,
229 .host_fast_wakeup_support = false
233 .avg_weight_rssi_beacon = 20,
234 .avg_weight_rssi_data = 10,
235 .avg_weight_snr_beacon = 20,
236 .avg_weight_snr_data = 10
239 .min_dwell_time_active = 7500,
240 .max_dwell_time_active = 30000,
241 .min_dwell_time_passive = 30000,
242 .max_dwell_time_passive = 60000,
247 static void __wl1271_op_remove_interface(struct wl1271 *wl);
250 static void wl1271_device_release(struct device *dev)
255 static struct platform_device wl1271_device = {
259 /* device model insists to have a release function */
261 .release = wl1271_device_release,
265 static LIST_HEAD(wl_list);
267 static int wl1271_dev_notify(struct notifier_block *me, unsigned long what,
270 struct net_device *dev = arg;
271 struct wireless_dev *wdev;
273 struct ieee80211_hw *hw;
275 struct wl1271 *wl_temp;
278 /* Check that this notification is for us. */
279 if (what != NETDEV_CHANGE)
282 wdev = dev->ieee80211_ptr;
290 hw = wiphy_priv(wiphy);
295 list_for_each_entry(wl, &wl_list, list) {
302 mutex_lock(&wl->mutex);
304 if (wl->state == WL1271_STATE_OFF)
307 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
310 ret = wl1271_ps_elp_wakeup(wl, false);
314 if ((dev->operstate == IF_OPER_UP) &&
315 !test_and_set_bit(WL1271_FLAG_STA_STATE_SENT, &wl->flags)) {
316 wl1271_cmd_set_sta_state(wl);
317 wl1271_info("Association completed.");
320 wl1271_ps_elp_sleep(wl);
323 mutex_unlock(&wl->mutex);
328 static void wl1271_conf_init(struct wl1271 *wl)
332 * This function applies the default configuration to the driver. This
333 * function is invoked upon driver load (spi probe.)
335 * The configuration is stored in a run-time structure in order to
336 * facilitate for run-time adjustment of any of the parameters. Making
337 * changes to the configuration structure will apply the new values on
338 * the next interface up (wl1271_op_start.)
341 /* apply driver default configuration */
342 memcpy(&wl->conf, &default_conf, sizeof(default_conf));
346 static int wl1271_plt_init(struct wl1271 *wl)
348 struct conf_tx_ac_category *conf_ac;
349 struct conf_tx_tid *conf_tid;
352 ret = wl1271_cmd_general_parms(wl);
356 ret = wl1271_cmd_radio_parms(wl);
360 ret = wl1271_init_templates_config(wl);
364 ret = wl1271_acx_init_mem_config(wl);
368 /* PHY layer config */
369 ret = wl1271_init_phy_config(wl);
371 goto out_free_memmap;
373 ret = wl1271_acx_dco_itrim_params(wl);
375 goto out_free_memmap;
377 /* Initialize connection monitoring thresholds */
378 ret = wl1271_acx_conn_monit_params(wl, false);
380 goto out_free_memmap;
382 /* Bluetooth WLAN coexistence */
383 ret = wl1271_init_pta(wl);
385 goto out_free_memmap;
387 /* Energy detection */
388 ret = wl1271_init_energy_detection(wl);
390 goto out_free_memmap;
392 /* Default fragmentation threshold */
393 ret = wl1271_acx_frag_threshold(wl);
395 goto out_free_memmap;
397 /* Default TID/AC configuration */
398 BUG_ON(wl->conf.tx.tid_conf_count != wl->conf.tx.ac_conf_count);
399 for (i = 0; i < wl->conf.tx.tid_conf_count; i++) {
400 conf_ac = &wl->conf.tx.ac_conf[i];
401 ret = wl1271_acx_ac_cfg(wl, conf_ac->ac, conf_ac->cw_min,
402 conf_ac->cw_max, conf_ac->aifsn,
403 conf_ac->tx_op_limit);
405 goto out_free_memmap;
407 conf_tid = &wl->conf.tx.tid_conf[i];
408 ret = wl1271_acx_tid_cfg(wl, conf_tid->queue_id,
409 conf_tid->channel_type,
412 conf_tid->ack_policy,
413 conf_tid->apsd_conf[0],
414 conf_tid->apsd_conf[1]);
416 goto out_free_memmap;
419 /* Enable data path */
420 ret = wl1271_cmd_data_path(wl, 1);
422 goto out_free_memmap;
424 /* Configure for CAM power saving (ie. always active) */
425 ret = wl1271_acx_sleep_auth(wl, WL1271_PSM_CAM);
427 goto out_free_memmap;
430 ret = wl1271_acx_pm_config(wl);
432 goto out_free_memmap;
437 kfree(wl->target_mem_map);
438 wl->target_mem_map = NULL;
443 static void wl1271_fw_status(struct wl1271 *wl,
444 struct wl1271_fw_status *status)
450 wl1271_raw_read(wl, FW_STATUS_ADDR, status, sizeof(*status), false);
452 wl1271_debug(DEBUG_IRQ, "intr: 0x%x (fw_rx_counter = %d, "
453 "drv_rx_counter = %d, tx_results_counter = %d)",
455 status->fw_rx_counter,
456 status->drv_rx_counter,
457 status->tx_results_counter);
459 /* update number of available TX blocks */
460 for (i = 0; i < NUM_TX_QUEUES; i++) {
461 u32 cnt = le32_to_cpu(status->tx_released_blks[i]) -
462 wl->tx_blocks_freed[i];
464 wl->tx_blocks_freed[i] =
465 le32_to_cpu(status->tx_released_blks[i]);
466 wl->tx_blocks_available += cnt;
470 /* if more blocks are available now, schedule some tx work */
471 if (total && !skb_queue_empty(&wl->tx_queue))
472 ieee80211_queue_work(wl->hw, &wl->tx_work);
474 /* update the host-chipset time offset */
476 wl->time_offset = (timespec_to_ns(&ts) >> 10) -
477 (s64)le32_to_cpu(status->fw_localtime);
480 #define WL1271_IRQ_MAX_LOOPS 10
482 static void wl1271_irq_work(struct work_struct *work)
486 int loopcount = WL1271_IRQ_MAX_LOOPS;
489 container_of(work, struct wl1271, irq_work);
491 mutex_lock(&wl->mutex);
493 wl1271_debug(DEBUG_IRQ, "IRQ work");
495 if (unlikely(wl->state == WL1271_STATE_OFF))
498 ret = wl1271_ps_elp_wakeup(wl, true);
502 spin_lock_irqsave(&wl->wl_lock, flags);
503 while (test_bit(WL1271_FLAG_IRQ_PENDING, &wl->flags) && loopcount) {
504 clear_bit(WL1271_FLAG_IRQ_PENDING, &wl->flags);
505 spin_unlock_irqrestore(&wl->wl_lock, flags);
508 wl1271_fw_status(wl, wl->fw_status);
509 intr = le32_to_cpu(wl->fw_status->intr);
511 wl1271_debug(DEBUG_IRQ, "Zero interrupt received.");
512 spin_lock_irqsave(&wl->wl_lock, flags);
516 intr &= WL1271_INTR_MASK;
518 if (intr & WL1271_ACX_INTR_DATA) {
519 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_DATA");
521 /* check for tx results */
522 if (wl->fw_status->tx_results_counter !=
523 (wl->tx_results_count & 0xff))
524 wl1271_tx_complete(wl);
526 wl1271_rx(wl, wl->fw_status);
529 if (intr & WL1271_ACX_INTR_EVENT_A) {
530 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_A");
531 wl1271_event_handle(wl, 0);
534 if (intr & WL1271_ACX_INTR_EVENT_B) {
535 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_B");
536 wl1271_event_handle(wl, 1);
539 if (intr & WL1271_ACX_INTR_INIT_COMPLETE)
540 wl1271_debug(DEBUG_IRQ,
541 "WL1271_ACX_INTR_INIT_COMPLETE");
543 if (intr & WL1271_ACX_INTR_HW_AVAILABLE)
544 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_HW_AVAILABLE");
546 spin_lock_irqsave(&wl->wl_lock, flags);
549 if (test_bit(WL1271_FLAG_IRQ_PENDING, &wl->flags))
550 ieee80211_queue_work(wl->hw, &wl->irq_work);
552 clear_bit(WL1271_FLAG_IRQ_RUNNING, &wl->flags);
553 spin_unlock_irqrestore(&wl->wl_lock, flags);
555 wl1271_ps_elp_sleep(wl);
558 mutex_unlock(&wl->mutex);
561 static int wl1271_fetch_firmware(struct wl1271 *wl)
563 const struct firmware *fw;
566 ret = request_firmware(&fw, WL1271_FW_NAME, wl1271_wl_to_dev(wl));
569 wl1271_error("could not get firmware: %d", ret);
574 wl1271_error("firmware size is not multiple of 32 bits: %zu",
580 wl->fw_len = fw->size;
581 wl->fw = vmalloc(wl->fw_len);
584 wl1271_error("could not allocate memory for the firmware");
589 memcpy(wl->fw, fw->data, wl->fw_len);
594 release_firmware(fw);
599 static int wl1271_fetch_nvs(struct wl1271 *wl)
601 const struct firmware *fw;
604 ret = request_firmware(&fw, WL1271_NVS_NAME, wl1271_wl_to_dev(wl));
607 wl1271_error("could not get nvs file: %d", ret);
611 wl->nvs = kmemdup(fw->data, sizeof(struct wl1271_nvs_file), GFP_KERNEL);
614 wl1271_error("could not allocate memory for the nvs file");
619 wl->nvs_len = fw->size;
622 release_firmware(fw);
627 static void wl1271_recovery_work(struct work_struct *work)
630 container_of(work, struct wl1271, recovery_work);
632 mutex_lock(&wl->mutex);
634 if (wl->state != WL1271_STATE_ON)
637 wl1271_info("Hardware recovery in progress.");
639 /* reboot the chipset */
640 __wl1271_op_remove_interface(wl);
641 ieee80211_restart_hw(wl->hw);
644 mutex_unlock(&wl->mutex);
647 static void wl1271_fw_wakeup(struct wl1271 *wl)
651 elp_reg = ELPCTRL_WAKE_UP;
652 wl1271_raw_write32(wl, HW_ACCESS_ELP_CTRL_REG_ADDR, elp_reg);
655 static int wl1271_setup(struct wl1271 *wl)
657 wl->fw_status = kmalloc(sizeof(*wl->fw_status), GFP_KERNEL);
661 wl->tx_res_if = kmalloc(sizeof(*wl->tx_res_if), GFP_KERNEL);
662 if (!wl->tx_res_if) {
663 kfree(wl->fw_status);
667 INIT_WORK(&wl->irq_work, wl1271_irq_work);
668 INIT_WORK(&wl->tx_work, wl1271_tx_work);
669 INIT_WORK(&wl->recovery_work, wl1271_recovery_work);
670 INIT_DELAYED_WORK(&wl->scan_complete_work, wl1271_scan_complete_work);
675 static int wl1271_chip_wakeup(struct wl1271 *wl)
677 struct wl1271_partition_set partition;
680 msleep(WL1271_PRE_POWER_ON_SLEEP);
681 ret = wl1271_power_on(wl);
684 msleep(WL1271_POWER_ON_SLEEP);
688 /* We don't need a real memory partition here, because we only want
689 * to use the registers at this point. */
690 memset(&partition, 0, sizeof(partition));
691 partition.reg.start = REGISTERS_BASE;
692 partition.reg.size = REGISTERS_DOWN_SIZE;
693 wl1271_set_partition(wl, &partition);
695 /* ELP module wake up */
696 wl1271_fw_wakeup(wl);
698 /* whal_FwCtrl_BootSm() */
700 /* 0. read chip id from CHIP_ID */
701 wl->chip.id = wl1271_read32(wl, CHIP_ID_B);
703 /* 1. check if chip id is valid */
705 switch (wl->chip.id) {
706 case CHIP_ID_1271_PG10:
707 wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
710 ret = wl1271_setup(wl);
714 case CHIP_ID_1271_PG20:
715 wl1271_debug(DEBUG_BOOT, "chip id 0x%x (1271 PG20)",
718 ret = wl1271_setup(wl);
723 wl1271_warning("unsupported chip id: 0x%x", wl->chip.id);
728 if (wl->fw == NULL) {
729 ret = wl1271_fetch_firmware(wl);
734 /* No NVS from netlink, try to get it from the filesystem */
735 if (wl->nvs == NULL) {
736 ret = wl1271_fetch_nvs(wl);
745 int wl1271_plt_start(struct wl1271 *wl)
747 int retries = WL1271_BOOT_RETRIES;
750 mutex_lock(&wl->mutex);
752 wl1271_notice("power up");
754 if (wl->state != WL1271_STATE_OFF) {
755 wl1271_error("cannot go into PLT state because not "
756 "in off state: %d", wl->state);
763 ret = wl1271_chip_wakeup(wl);
767 ret = wl1271_boot(wl);
771 ret = wl1271_plt_init(wl);
775 wl->state = WL1271_STATE_PLT;
776 wl1271_notice("firmware booted in PLT mode (%s)",
781 wl1271_disable_interrupts(wl);
782 mutex_unlock(&wl->mutex);
783 /* Unlocking the mutex in the middle of handling is
784 inherently unsafe. In this case we deem it safe to do,
785 because we need to let any possibly pending IRQ out of
786 the system (and while we are WL1271_STATE_OFF the IRQ
787 work function will not do anything.) Also, any other
788 possible concurrent operations will fail due to the
789 current state, hence the wl1271 struct should be safe. */
790 cancel_work_sync(&wl->irq_work);
791 mutex_lock(&wl->mutex);
793 wl1271_power_off(wl);
796 wl1271_error("firmware boot in PLT mode failed despite %d retries",
797 WL1271_BOOT_RETRIES);
799 mutex_unlock(&wl->mutex);
804 int wl1271_plt_stop(struct wl1271 *wl)
808 mutex_lock(&wl->mutex);
810 wl1271_notice("power down");
812 if (wl->state != WL1271_STATE_PLT) {
813 wl1271_error("cannot power down because not in PLT "
814 "state: %d", wl->state);
819 wl1271_disable_interrupts(wl);
820 wl1271_power_off(wl);
822 wl->state = WL1271_STATE_OFF;
826 mutex_unlock(&wl->mutex);
828 cancel_work_sync(&wl->irq_work);
829 cancel_work_sync(&wl->recovery_work);
834 static int wl1271_op_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
836 struct wl1271 *wl = hw->priv;
837 struct ieee80211_conf *conf = &hw->conf;
838 struct ieee80211_tx_info *txinfo = IEEE80211_SKB_CB(skb);
839 struct ieee80211_sta *sta = txinfo->control.sta;
842 /* peek into the rates configured in the STA entry */
843 spin_lock_irqsave(&wl->wl_lock, flags);
844 if (sta && sta->supp_rates[conf->channel->band] != wl->sta_rate_set) {
845 wl->sta_rate_set = sta->supp_rates[conf->channel->band];
846 set_bit(WL1271_FLAG_STA_RATES_CHANGED, &wl->flags);
848 spin_unlock_irqrestore(&wl->wl_lock, flags);
850 /* queue the packet */
851 skb_queue_tail(&wl->tx_queue, skb);
854 * The chip specific setup must run before the first TX packet -
855 * before that, the tx_work will not be initialized!
858 ieee80211_queue_work(wl->hw, &wl->tx_work);
861 * The workqueue is slow to process the tx_queue and we need stop
862 * the queue here, otherwise the queue will get too long.
864 if (skb_queue_len(&wl->tx_queue) >= WL1271_TX_QUEUE_HIGH_WATERMARK) {
865 wl1271_debug(DEBUG_TX, "op_tx: stopping queues");
867 spin_lock_irqsave(&wl->wl_lock, flags);
868 ieee80211_stop_queues(wl->hw);
869 set_bit(WL1271_FLAG_TX_QUEUE_STOPPED, &wl->flags);
870 spin_unlock_irqrestore(&wl->wl_lock, flags);
876 static struct notifier_block wl1271_dev_notifier = {
877 .notifier_call = wl1271_dev_notify,
880 static int wl1271_op_start(struct ieee80211_hw *hw)
882 wl1271_debug(DEBUG_MAC80211, "mac80211 start");
885 * We have to delay the booting of the hardware because
886 * we need to know the local MAC address before downloading and
887 * initializing the firmware. The MAC address cannot be changed
888 * after boot, and without the proper MAC address, the firmware
889 * will not function properly.
891 * The MAC address is first known when the corresponding interface
892 * is added. That is where we will initialize the hardware.
898 static void wl1271_op_stop(struct ieee80211_hw *hw)
900 wl1271_debug(DEBUG_MAC80211, "mac80211 stop");
903 static int wl1271_op_add_interface(struct ieee80211_hw *hw,
904 struct ieee80211_vif *vif)
906 struct wl1271 *wl = hw->priv;
907 struct wiphy *wiphy = hw->wiphy;
908 int retries = WL1271_BOOT_RETRIES;
911 wl1271_debug(DEBUG_MAC80211, "mac80211 add interface type %d mac %pM",
912 vif->type, vif->addr);
914 mutex_lock(&wl->mutex);
923 case NL80211_IFTYPE_STATION:
924 wl->bss_type = BSS_TYPE_STA_BSS;
925 wl->set_bss_type = BSS_TYPE_STA_BSS;
927 case NL80211_IFTYPE_ADHOC:
928 wl->bss_type = BSS_TYPE_IBSS;
929 wl->set_bss_type = BSS_TYPE_STA_BSS;
936 memcpy(wl->mac_addr, vif->addr, ETH_ALEN);
938 if (wl->state != WL1271_STATE_OFF) {
939 wl1271_error("cannot start because not in off state: %d",
947 ret = wl1271_chip_wakeup(wl);
951 ret = wl1271_boot(wl);
955 ret = wl1271_hw_init(wl);
959 wl->state = WL1271_STATE_ON;
960 wl1271_info("firmware booted (%s)", wl->chip.fw_ver);
962 /* update hw/fw version info in wiphy struct */
963 wiphy->hw_version = wl->chip.id;
964 strncpy(wiphy->fw_version, wl->chip.fw_ver,
965 sizeof(wiphy->fw_version));
970 wl1271_disable_interrupts(wl);
971 mutex_unlock(&wl->mutex);
972 /* Unlocking the mutex in the middle of handling is
973 inherently unsafe. In this case we deem it safe to do,
974 because we need to let any possibly pending IRQ out of
975 the system (and while we are WL1271_STATE_OFF the IRQ
976 work function will not do anything.) Also, any other
977 possible concurrent operations will fail due to the
978 current state, hence the wl1271 struct should be safe. */
979 cancel_work_sync(&wl->irq_work);
980 mutex_lock(&wl->mutex);
982 wl1271_power_off(wl);
985 wl1271_error("firmware boot failed despite %d retries",
986 WL1271_BOOT_RETRIES);
988 mutex_unlock(&wl->mutex);
991 list_add(&wl->list, &wl_list);
996 static void __wl1271_op_remove_interface(struct wl1271 *wl)
1000 wl1271_debug(DEBUG_MAC80211, "mac80211 remove interface");
1002 wl1271_info("down");
1004 list_del(&wl->list);
1006 WARN_ON(wl->state != WL1271_STATE_ON);
1008 /* enable dyn ps just in case (if left on due to fw crash etc) */
1009 if (wl->bss_type == BSS_TYPE_STA_BSS)
1010 ieee80211_enable_dyn_ps(wl->vif);
1012 if (wl->scan.state != WL1271_SCAN_STATE_IDLE) {
1013 wl->scan.state = WL1271_SCAN_STATE_IDLE;
1014 kfree(wl->scan.scanned_ch);
1015 wl->scan.scanned_ch = NULL;
1016 ieee80211_scan_completed(wl->hw, true);
1019 wl->state = WL1271_STATE_OFF;
1021 wl1271_disable_interrupts(wl);
1023 mutex_unlock(&wl->mutex);
1025 cancel_delayed_work_sync(&wl->scan_complete_work);
1026 cancel_work_sync(&wl->irq_work);
1027 cancel_work_sync(&wl->tx_work);
1028 cancel_delayed_work_sync(&wl->pspoll_work);
1029 cancel_delayed_work_sync(&wl->elp_work);
1031 mutex_lock(&wl->mutex);
1033 /* let's notify MAC80211 about the remaining pending TX frames */
1034 wl1271_tx_reset(wl);
1035 wl1271_power_off(wl);
1037 memset(wl->bssid, 0, ETH_ALEN);
1038 memset(wl->ssid, 0, IW_ESSID_MAX_SIZE + 1);
1040 wl->bss_type = MAX_BSS_TYPE;
1041 wl->set_bss_type = MAX_BSS_TYPE;
1042 wl->band = IEEE80211_BAND_2GHZ;
1045 wl->psm_entry_retry = 0;
1046 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
1047 wl->tx_blocks_available = 0;
1048 wl->tx_results_count = 0;
1049 wl->tx_packets_count = 0;
1050 wl->tx_security_last_seq = 0;
1051 wl->tx_security_seq = 0;
1052 wl->time_offset = 0;
1053 wl->session_counter = 0;
1054 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
1055 wl->sta_rate_set = 0;
1060 for (i = 0; i < NUM_TX_QUEUES; i++)
1061 wl->tx_blocks_freed[i] = 0;
1063 wl1271_debugfs_reset(wl);
1065 kfree(wl->fw_status);
1066 wl->fw_status = NULL;
1067 kfree(wl->tx_res_if);
1068 wl->tx_res_if = NULL;
1069 kfree(wl->target_mem_map);
1070 wl->target_mem_map = NULL;
1073 static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
1074 struct ieee80211_vif *vif)
1076 struct wl1271 *wl = hw->priv;
1078 mutex_lock(&wl->mutex);
1079 WARN_ON(wl->vif != vif);
1080 __wl1271_op_remove_interface(wl);
1081 mutex_unlock(&wl->mutex);
1083 cancel_work_sync(&wl->recovery_work);
1086 static void wl1271_configure_filters(struct wl1271 *wl, unsigned int filters)
1088 wl->rx_config = WL1271_DEFAULT_RX_CONFIG;
1089 wl->rx_filter = WL1271_DEFAULT_RX_FILTER;
1091 /* combine requested filters with current filter config */
1092 filters = wl->filters | filters;
1094 wl1271_debug(DEBUG_FILTERS, "RX filters set: ");
1096 if (filters & FIF_PROMISC_IN_BSS) {
1097 wl1271_debug(DEBUG_FILTERS, " - FIF_PROMISC_IN_BSS");
1098 wl->rx_config &= ~CFG_UNI_FILTER_EN;
1099 wl->rx_config |= CFG_BSSID_FILTER_EN;
1101 if (filters & FIF_BCN_PRBRESP_PROMISC) {
1102 wl1271_debug(DEBUG_FILTERS, " - FIF_BCN_PRBRESP_PROMISC");
1103 wl->rx_config &= ~CFG_BSSID_FILTER_EN;
1104 wl->rx_config &= ~CFG_SSID_FILTER_EN;
1106 if (filters & FIF_OTHER_BSS) {
1107 wl1271_debug(DEBUG_FILTERS, " - FIF_OTHER_BSS");
1108 wl->rx_config &= ~CFG_BSSID_FILTER_EN;
1110 if (filters & FIF_CONTROL) {
1111 wl1271_debug(DEBUG_FILTERS, " - FIF_CONTROL");
1112 wl->rx_filter |= CFG_RX_CTL_EN;
1114 if (filters & FIF_FCSFAIL) {
1115 wl1271_debug(DEBUG_FILTERS, " - FIF_FCSFAIL");
1116 wl->rx_filter |= CFG_RX_FCS_ERROR;
1120 static int wl1271_dummy_join(struct wl1271 *wl)
1123 /* we need to use a dummy BSSID for now */
1124 static const u8 dummy_bssid[ETH_ALEN] = { 0x0b, 0xad, 0xde,
1127 memcpy(wl->bssid, dummy_bssid, ETH_ALEN);
1129 /* pass through frames from all BSS */
1130 wl1271_configure_filters(wl, FIF_OTHER_BSS);
1132 ret = wl1271_cmd_join(wl, wl->set_bss_type);
1136 set_bit(WL1271_FLAG_JOINED, &wl->flags);
1142 static int wl1271_join(struct wl1271 *wl, bool set_assoc)
1147 * One of the side effects of the JOIN command is that is clears
1148 * WPA/WPA2 keys from the chipset. Performing a JOIN while associated
1149 * to a WPA/WPA2 access point will therefore kill the data-path.
1150 * Currently there is no supported scenario for JOIN during
1151 * association - if it becomes a supported scenario, the WPA/WPA2 keys
1152 * must be handled somehow.
1155 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1156 wl1271_info("JOIN while associated.");
1159 set_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
1161 ret = wl1271_cmd_join(wl, wl->set_bss_type);
1165 set_bit(WL1271_FLAG_JOINED, &wl->flags);
1167 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1171 * The join command disable the keep-alive mode, shut down its process,
1172 * and also clear the template config, so we need to reset it all after
1173 * the join. The acx_aid starts the keep-alive process, and the order
1174 * of the commands below is relevant.
1176 ret = wl1271_acx_keep_alive_mode(wl, true);
1180 ret = wl1271_acx_aid(wl, wl->aid);
1184 ret = wl1271_cmd_build_klv_null_data(wl);
1188 ret = wl1271_acx_keep_alive_config(wl, CMD_TEMPL_KLV_IDX_NULL_DATA,
1189 ACX_KEEP_ALIVE_TPL_VALID);
1197 static int wl1271_unjoin(struct wl1271 *wl)
1201 /* to stop listening to a channel, we disconnect */
1202 ret = wl1271_cmd_disconnect(wl);
1206 clear_bit(WL1271_FLAG_JOINED, &wl->flags);
1207 memset(wl->bssid, 0, ETH_ALEN);
1209 /* stop filterting packets based on bssid */
1210 wl1271_configure_filters(wl, FIF_OTHER_BSS);
1216 static void wl1271_set_band_rate(struct wl1271 *wl)
1218 if (wl->band == IEEE80211_BAND_2GHZ)
1219 wl->basic_rate_set = wl->conf.tx.basic_rate;
1221 wl->basic_rate_set = wl->conf.tx.basic_rate_5;
1224 static u32 wl1271_min_rate_get(struct wl1271 *wl)
1229 if (!wl->basic_rate_set) {
1231 wl->basic_rate_set = wl->conf.tx.basic_rate;
1234 for (i = 0; !rate; i++) {
1235 if ((wl->basic_rate_set >> i) & 0x1)
1242 static int wl1271_handle_idle(struct wl1271 *wl, bool idle)
1247 if (test_bit(WL1271_FLAG_JOINED, &wl->flags)) {
1248 ret = wl1271_unjoin(wl);
1252 wl->rate_set = wl1271_min_rate_get(wl);
1253 wl->sta_rate_set = 0;
1254 ret = wl1271_acx_rate_policies(wl);
1257 ret = wl1271_acx_keep_alive_config(
1258 wl, CMD_TEMPL_KLV_IDX_NULL_DATA,
1259 ACX_KEEP_ALIVE_TPL_INVALID);
1262 set_bit(WL1271_FLAG_IDLE, &wl->flags);
1264 /* increment the session counter */
1265 wl->session_counter++;
1266 if (wl->session_counter >= SESSION_COUNTER_MAX)
1267 wl->session_counter = 0;
1268 ret = wl1271_dummy_join(wl);
1271 clear_bit(WL1271_FLAG_IDLE, &wl->flags);
1278 static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed)
1280 struct wl1271 *wl = hw->priv;
1281 struct ieee80211_conf *conf = &hw->conf;
1282 int channel, ret = 0;
1284 channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
1286 wl1271_debug(DEBUG_MAC80211, "mac80211 config ch %d psm %s power %d %s",
1288 conf->flags & IEEE80211_CONF_PS ? "on" : "off",
1290 conf->flags & IEEE80211_CONF_IDLE ? "idle" : "in use");
1293 * mac80211 will go to idle nearly immediately after transmitting some
1294 * frames, such as the deauth. To make sure those frames reach the air,
1295 * wait here until the TX queue is fully flushed.
1297 if ((changed & IEEE80211_CONF_CHANGE_IDLE) &&
1298 (conf->flags & IEEE80211_CONF_IDLE))
1299 wl1271_tx_flush(wl);
1301 mutex_lock(&wl->mutex);
1303 if (unlikely(wl->state == WL1271_STATE_OFF))
1306 ret = wl1271_ps_elp_wakeup(wl, false);
1310 /* if the channel changes while joined, join again */
1311 if (changed & IEEE80211_CONF_CHANGE_CHANNEL &&
1312 ((wl->band != conf->channel->band) ||
1313 (wl->channel != channel))) {
1314 wl->band = conf->channel->band;
1315 wl->channel = channel;
1318 * FIXME: the mac80211 should really provide a fixed rate
1319 * to use here. for now, just use the smallest possible rate
1320 * for the band as a fixed rate for association frames and
1321 * other control messages.
1323 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1324 wl1271_set_band_rate(wl);
1326 wl->basic_rate = wl1271_min_rate_get(wl);
1327 ret = wl1271_acx_rate_policies(wl);
1329 wl1271_warning("rate policy for update channel "
1332 if (test_bit(WL1271_FLAG_JOINED, &wl->flags)) {
1333 ret = wl1271_join(wl, false);
1335 wl1271_warning("cmd join to update channel "
1340 if (changed & IEEE80211_CONF_CHANGE_IDLE) {
1341 ret = wl1271_handle_idle(wl, conf->flags & IEEE80211_CONF_IDLE);
1343 wl1271_warning("idle mode change failed %d", ret);
1347 * if mac80211 changes the PSM mode, make sure the mode is not
1348 * incorrectly changed after the pspoll failure active window.
1350 if (changed & IEEE80211_CONF_CHANGE_PS)
1351 clear_bit(WL1271_FLAG_PSPOLL_FAILURE, &wl->flags);
1353 if (conf->flags & IEEE80211_CONF_PS &&
1354 !test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
1355 set_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
1358 * We enter PSM only if we're already associated.
1359 * If we're not, we'll enter it when joining an SSID,
1360 * through the bss_info_changed() hook.
1362 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags)) {
1363 wl1271_debug(DEBUG_PSM, "psm enabled");
1364 ret = wl1271_ps_set_mode(wl, STATION_POWER_SAVE_MODE,
1365 wl->basic_rate, true);
1367 } else if (!(conf->flags & IEEE80211_CONF_PS) &&
1368 test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
1369 wl1271_debug(DEBUG_PSM, "psm disabled");
1371 clear_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
1373 if (test_bit(WL1271_FLAG_PSM, &wl->flags))
1374 ret = wl1271_ps_set_mode(wl, STATION_ACTIVE_MODE,
1375 wl->basic_rate, true);
1378 if (conf->power_level != wl->power_level) {
1379 ret = wl1271_acx_tx_power(wl, conf->power_level);
1383 wl->power_level = conf->power_level;
1387 wl1271_ps_elp_sleep(wl);
1390 mutex_unlock(&wl->mutex);
1395 struct wl1271_filter_params {
1398 u8 mc_list[ACX_MC_ADDRESS_GROUP_MAX][ETH_ALEN];
1401 static u64 wl1271_op_prepare_multicast(struct ieee80211_hw *hw,
1402 struct netdev_hw_addr_list *mc_list)
1404 struct wl1271_filter_params *fp;
1405 struct netdev_hw_addr *ha;
1406 struct wl1271 *wl = hw->priv;
1408 if (unlikely(wl->state == WL1271_STATE_OFF))
1411 fp = kzalloc(sizeof(*fp), GFP_ATOMIC);
1413 wl1271_error("Out of memory setting filters.");
1417 /* update multicast filtering parameters */
1418 fp->mc_list_length = 0;
1419 if (netdev_hw_addr_list_count(mc_list) > ACX_MC_ADDRESS_GROUP_MAX) {
1420 fp->enabled = false;
1423 netdev_hw_addr_list_for_each(ha, mc_list) {
1424 memcpy(fp->mc_list[fp->mc_list_length],
1425 ha->addr, ETH_ALEN);
1426 fp->mc_list_length++;
1430 return (u64)(unsigned long)fp;
1433 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
1436 FIF_BCN_PRBRESP_PROMISC | \
1440 static void wl1271_op_configure_filter(struct ieee80211_hw *hw,
1441 unsigned int changed,
1442 unsigned int *total, u64 multicast)
1444 struct wl1271_filter_params *fp = (void *)(unsigned long)multicast;
1445 struct wl1271 *wl = hw->priv;
1448 wl1271_debug(DEBUG_MAC80211, "mac80211 configure filter");
1450 mutex_lock(&wl->mutex);
1452 *total &= WL1271_SUPPORTED_FILTERS;
1453 changed &= WL1271_SUPPORTED_FILTERS;
1455 if (unlikely(wl->state == WL1271_STATE_OFF))
1458 ret = wl1271_ps_elp_wakeup(wl, false);
1463 if (*total & FIF_ALLMULTI)
1464 ret = wl1271_acx_group_address_tbl(wl, false, NULL, 0);
1466 ret = wl1271_acx_group_address_tbl(wl, fp->enabled,
1468 fp->mc_list_length);
1472 /* determine, whether supported filter values have changed */
1476 /* configure filters */
1477 wl->filters = *total;
1478 wl1271_configure_filters(wl, 0);
1480 /* apply configured filters */
1481 ret = wl1271_acx_rx_config(wl, wl->rx_config, wl->rx_filter);
1486 wl1271_ps_elp_sleep(wl);
1489 mutex_unlock(&wl->mutex);
1493 static int wl1271_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
1494 struct ieee80211_vif *vif,
1495 struct ieee80211_sta *sta,
1496 struct ieee80211_key_conf *key_conf)
1498 struct wl1271 *wl = hw->priv;
1505 static const u8 bcast_addr[ETH_ALEN] =
1506 { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
1508 wl1271_debug(DEBUG_MAC80211, "mac80211 set key");
1510 addr = sta ? sta->addr : bcast_addr;
1512 wl1271_debug(DEBUG_CRYPT, "CMD: 0x%x", cmd);
1513 wl1271_dump(DEBUG_CRYPT, "ADDR: ", addr, ETH_ALEN);
1514 wl1271_debug(DEBUG_CRYPT, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
1515 key_conf->cipher, key_conf->keyidx,
1516 key_conf->keylen, key_conf->flags);
1517 wl1271_dump(DEBUG_CRYPT, "KEY: ", key_conf->key, key_conf->keylen);
1519 if (is_zero_ether_addr(addr)) {
1520 /* We dont support TX only encryption */
1525 mutex_lock(&wl->mutex);
1527 ret = wl1271_ps_elp_wakeup(wl, false);
1531 switch (key_conf->cipher) {
1532 case WLAN_CIPHER_SUITE_WEP40:
1533 case WLAN_CIPHER_SUITE_WEP104:
1536 key_conf->hw_key_idx = key_conf->keyidx;
1538 case WLAN_CIPHER_SUITE_TKIP:
1539 key_type = KEY_TKIP;
1541 key_conf->hw_key_idx = key_conf->keyidx;
1542 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
1543 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
1545 case WLAN_CIPHER_SUITE_CCMP:
1548 key_conf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
1549 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
1550 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
1552 case WL1271_CIPHER_SUITE_GEM:
1554 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
1555 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
1558 wl1271_error("Unknown key algo 0x%x", key_conf->cipher);
1566 ret = wl1271_cmd_set_key(wl, KEY_ADD_OR_REPLACE,
1567 key_conf->keyidx, key_type,
1568 key_conf->keylen, key_conf->key,
1569 addr, tx_seq_32, tx_seq_16);
1571 wl1271_error("Could not add or replace key");
1575 /* the default WEP key needs to be configured at least once */
1576 if (key_type == KEY_WEP) {
1577 ret = wl1271_cmd_set_default_wep_key(wl,
1585 /* The wl1271 does not allow to remove unicast keys - they
1586 will be cleared automatically on next CMD_JOIN. Ignore the
1587 request silently, as we dont want the mac80211 to emit
1588 an error message. */
1589 if (!is_broadcast_ether_addr(addr))
1592 ret = wl1271_cmd_set_key(wl, KEY_REMOVE,
1593 key_conf->keyidx, key_type,
1594 key_conf->keylen, key_conf->key,
1597 wl1271_error("Could not remove key");
1603 wl1271_error("Unsupported key cmd 0x%x", cmd);
1609 wl1271_ps_elp_sleep(wl);
1612 mutex_unlock(&wl->mutex);
1618 static int wl1271_op_hw_scan(struct ieee80211_hw *hw,
1619 struct ieee80211_vif *vif,
1620 struct cfg80211_scan_request *req)
1622 struct wl1271 *wl = hw->priv;
1627 wl1271_debug(DEBUG_MAC80211, "mac80211 hw scan");
1630 ssid = req->ssids[0].ssid;
1631 len = req->ssids[0].ssid_len;
1634 mutex_lock(&wl->mutex);
1636 ret = wl1271_ps_elp_wakeup(wl, false);
1640 ret = wl1271_scan(hw->priv, ssid, len, req);
1642 wl1271_ps_elp_sleep(wl);
1645 mutex_unlock(&wl->mutex);
1650 static int wl1271_op_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
1652 struct wl1271 *wl = hw->priv;
1655 mutex_lock(&wl->mutex);
1657 if (unlikely(wl->state == WL1271_STATE_OFF))
1660 ret = wl1271_ps_elp_wakeup(wl, false);
1664 ret = wl1271_acx_rts_threshold(wl, (u16) value);
1666 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret);
1668 wl1271_ps_elp_sleep(wl);
1671 mutex_unlock(&wl->mutex);
1676 static void wl1271_ssid_set(struct wl1271 *wl, struct sk_buff *beacon)
1678 u8 *ptr = beacon->data +
1679 offsetof(struct ieee80211_mgmt, u.beacon.variable);
1681 /* find the location of the ssid in the beacon */
1682 while (ptr < beacon->data + beacon->len) {
1683 if (ptr[0] == WLAN_EID_SSID) {
1684 wl->ssid_len = ptr[1];
1685 memcpy(wl->ssid, ptr+2, wl->ssid_len);
1690 wl1271_error("ad-hoc beacon template has no SSID!\n");
1693 static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
1694 struct ieee80211_vif *vif,
1695 struct ieee80211_bss_conf *bss_conf,
1698 enum wl1271_cmd_ps_mode mode;
1699 struct wl1271 *wl = hw->priv;
1700 bool do_join = false;
1701 bool set_assoc = false;
1704 wl1271_debug(DEBUG_MAC80211, "mac80211 bss info changed");
1706 mutex_lock(&wl->mutex);
1708 ret = wl1271_ps_elp_wakeup(wl, false);
1712 if ((changed & BSS_CHANGED_BEACON_INT) &&
1713 (wl->bss_type == BSS_TYPE_IBSS)) {
1714 wl1271_debug(DEBUG_ADHOC, "ad-hoc beacon interval updated: %d",
1715 bss_conf->beacon_int);
1717 wl->beacon_int = bss_conf->beacon_int;
1721 if ((changed & BSS_CHANGED_BEACON) &&
1722 (wl->bss_type == BSS_TYPE_IBSS)) {
1723 struct sk_buff *beacon = ieee80211_beacon_get(hw, vif);
1725 wl1271_debug(DEBUG_ADHOC, "ad-hoc beacon updated");
1728 struct ieee80211_hdr *hdr;
1730 wl1271_ssid_set(wl, beacon);
1731 ret = wl1271_cmd_template_set(wl, CMD_TEMPL_BEACON,
1734 wl1271_min_rate_get(wl));
1737 dev_kfree_skb(beacon);
1741 hdr = (struct ieee80211_hdr *) beacon->data;
1742 hdr->frame_control = cpu_to_le16(
1743 IEEE80211_FTYPE_MGMT |
1744 IEEE80211_STYPE_PROBE_RESP);
1746 ret = wl1271_cmd_template_set(wl,
1747 CMD_TEMPL_PROBE_RESPONSE,
1750 wl1271_min_rate_get(wl));
1751 dev_kfree_skb(beacon);
1755 /* Need to update the SSID (for filtering etc) */
1760 if ((changed & BSS_CHANGED_BEACON_ENABLED) &&
1761 (wl->bss_type == BSS_TYPE_IBSS)) {
1762 wl1271_debug(DEBUG_ADHOC, "ad-hoc beaconing: %s",
1763 bss_conf->enable_beacon ? "enabled" : "disabled");
1765 if (bss_conf->enable_beacon)
1766 wl->set_bss_type = BSS_TYPE_IBSS;
1768 wl->set_bss_type = BSS_TYPE_STA_BSS;
1772 if (changed & BSS_CHANGED_CQM) {
1773 bool enable = false;
1774 if (bss_conf->cqm_rssi_thold)
1776 ret = wl1271_acx_rssi_snr_trigger(wl, enable,
1777 bss_conf->cqm_rssi_thold,
1778 bss_conf->cqm_rssi_hyst);
1781 wl->rssi_thold = bss_conf->cqm_rssi_thold;
1784 if ((changed & BSS_CHANGED_BSSID) &&
1786 * Now we know the correct bssid, so we send a new join command
1787 * and enable the BSSID filter
1789 memcmp(wl->bssid, bss_conf->bssid, ETH_ALEN)) {
1790 memcpy(wl->bssid, bss_conf->bssid, ETH_ALEN);
1792 ret = wl1271_cmd_build_null_data(wl);
1796 ret = wl1271_build_qos_null_data(wl);
1800 /* filter out all packets not from this BSSID */
1801 wl1271_configure_filters(wl, 0);
1803 /* Need to update the BSSID (for filtering etc) */
1807 if (changed & BSS_CHANGED_ASSOC) {
1808 if (bss_conf->assoc) {
1810 wl->aid = bss_conf->aid;
1813 wl->ps_poll_failures = 0;
1816 * use basic rates from AP, and determine lowest rate
1817 * to use with control frames.
1819 rates = bss_conf->basic_rates;
1820 wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl,
1822 wl->basic_rate = wl1271_min_rate_get(wl);
1823 ret = wl1271_acx_rate_policies(wl);
1828 * with wl1271, we don't need to update the
1829 * beacon_int and dtim_period, because the firmware
1830 * updates it by itself when the first beacon is
1831 * received after a join.
1833 ret = wl1271_cmd_build_ps_poll(wl, wl->aid);
1838 * The SSID is intentionally set to NULL here - the
1839 * firmware will set the probe request with a
1840 * broadcast SSID regardless of what we set in the
1843 ret = wl1271_cmd_build_probe_req(wl, NULL, 0,
1846 /* enable the connection monitoring feature */
1847 ret = wl1271_acx_conn_monit_params(wl, true);
1851 /* If we want to go in PSM but we're not there yet */
1852 if (test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags) &&
1853 !test_bit(WL1271_FLAG_PSM, &wl->flags)) {
1854 mode = STATION_POWER_SAVE_MODE;
1855 ret = wl1271_ps_set_mode(wl, mode,
1862 /* use defaults when not associated */
1863 clear_bit(WL1271_FLAG_STA_STATE_SENT, &wl->flags);
1864 clear_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
1867 /* re-enable dynamic ps - just in case */
1868 ieee80211_enable_dyn_ps(wl->vif);
1870 /* revert back to minimum rates for the current band */
1871 wl1271_set_band_rate(wl);
1872 wl->basic_rate = wl1271_min_rate_get(wl);
1873 ret = wl1271_acx_rate_policies(wl);
1877 /* disable connection monitor features */
1878 ret = wl1271_acx_conn_monit_params(wl, false);
1880 /* Disable the keep-alive feature */
1881 ret = wl1271_acx_keep_alive_mode(wl, false);
1889 if (changed & BSS_CHANGED_ERP_SLOT) {
1890 if (bss_conf->use_short_slot)
1891 ret = wl1271_acx_slot(wl, SLOT_TIME_SHORT);
1893 ret = wl1271_acx_slot(wl, SLOT_TIME_LONG);
1895 wl1271_warning("Set slot time failed %d", ret);
1900 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
1901 if (bss_conf->use_short_preamble)
1902 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_SHORT);
1904 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_LONG);
1907 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
1908 if (bss_conf->use_cts_prot)
1909 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_ENABLE);
1911 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_DISABLE);
1913 wl1271_warning("Set ctsprotect failed %d", ret);
1918 if (changed & BSS_CHANGED_ARP_FILTER) {
1919 __be32 addr = bss_conf->arp_addr_list[0];
1920 WARN_ON(wl->bss_type != BSS_TYPE_STA_BSS);
1922 if (bss_conf->arp_addr_cnt == 1 && bss_conf->arp_filter_enabled)
1923 ret = wl1271_acx_arp_ip_filter(wl, true, addr);
1925 ret = wl1271_acx_arp_ip_filter(wl, false, addr);
1932 ret = wl1271_join(wl, set_assoc);
1934 wl1271_warning("cmd join failed %d", ret);
1940 wl1271_ps_elp_sleep(wl);
1943 mutex_unlock(&wl->mutex);
1946 static int wl1271_op_conf_tx(struct ieee80211_hw *hw, u16 queue,
1947 const struct ieee80211_tx_queue_params *params)
1949 struct wl1271 *wl = hw->priv;
1953 mutex_lock(&wl->mutex);
1955 wl1271_debug(DEBUG_MAC80211, "mac80211 conf tx %d", queue);
1957 ret = wl1271_ps_elp_wakeup(wl, false);
1961 /* the txop is confed in units of 32us by the mac80211, we need us */
1962 ret = wl1271_acx_ac_cfg(wl, wl1271_tx_get_queue(queue),
1963 params->cw_min, params->cw_max,
1964 params->aifs, params->txop << 5);
1969 ps_scheme = CONF_PS_SCHEME_UPSD_TRIGGER;
1971 ps_scheme = CONF_PS_SCHEME_LEGACY;
1973 ret = wl1271_acx_tid_cfg(wl, wl1271_tx_get_queue(queue),
1974 CONF_CHANNEL_TYPE_EDCF,
1975 wl1271_tx_get_queue(queue),
1976 ps_scheme, CONF_ACK_POLICY_LEGACY, 0, 0);
1981 wl1271_ps_elp_sleep(wl);
1984 mutex_unlock(&wl->mutex);
1989 static u64 wl1271_op_get_tsf(struct ieee80211_hw *hw)
1992 struct wl1271 *wl = hw->priv;
1993 u64 mactime = ULLONG_MAX;
1996 wl1271_debug(DEBUG_MAC80211, "mac80211 get tsf");
1998 mutex_lock(&wl->mutex);
2000 ret = wl1271_ps_elp_wakeup(wl, false);
2004 ret = wl1271_acx_tsf_info(wl, &mactime);
2009 wl1271_ps_elp_sleep(wl);
2012 mutex_unlock(&wl->mutex);
2016 static int wl1271_op_get_survey(struct ieee80211_hw *hw, int idx,
2017 struct survey_info *survey)
2019 struct wl1271 *wl = hw->priv;
2020 struct ieee80211_conf *conf = &hw->conf;
2025 survey->channel = conf->channel;
2026 survey->filled = SURVEY_INFO_NOISE_DBM;
2027 survey->noise = wl->noise;
2032 /* can't be const, mac80211 writes to this */
2033 static struct ieee80211_rate wl1271_rates[] = {
2035 .hw_value = CONF_HW_BIT_RATE_1MBPS,
2036 .hw_value_short = CONF_HW_BIT_RATE_1MBPS, },
2038 .hw_value = CONF_HW_BIT_RATE_2MBPS,
2039 .hw_value_short = CONF_HW_BIT_RATE_2MBPS,
2040 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
2042 .hw_value = CONF_HW_BIT_RATE_5_5MBPS,
2043 .hw_value_short = CONF_HW_BIT_RATE_5_5MBPS,
2044 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
2046 .hw_value = CONF_HW_BIT_RATE_11MBPS,
2047 .hw_value_short = CONF_HW_BIT_RATE_11MBPS,
2048 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
2050 .hw_value = CONF_HW_BIT_RATE_6MBPS,
2051 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
2053 .hw_value = CONF_HW_BIT_RATE_9MBPS,
2054 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
2056 .hw_value = CONF_HW_BIT_RATE_12MBPS,
2057 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
2059 .hw_value = CONF_HW_BIT_RATE_18MBPS,
2060 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
2062 .hw_value = CONF_HW_BIT_RATE_24MBPS,
2063 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
2065 .hw_value = CONF_HW_BIT_RATE_36MBPS,
2066 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
2068 .hw_value = CONF_HW_BIT_RATE_48MBPS,
2069 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
2071 .hw_value = CONF_HW_BIT_RATE_54MBPS,
2072 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
2076 * Can't be const, mac80211 writes to this. The order of the channels here
2077 * is designed to improve scanning.
2079 static struct ieee80211_channel wl1271_channels[] = {
2080 { .hw_value = 1, .center_freq = 2412, .max_power = 25 },
2081 { .hw_value = 5, .center_freq = 2432, .max_power = 25 },
2082 { .hw_value = 9, .center_freq = 2452, .max_power = 25 },
2083 { .hw_value = 13, .center_freq = 2472, .max_power = 25 },
2084 { .hw_value = 4, .center_freq = 2427, .max_power = 25 },
2085 { .hw_value = 8, .center_freq = 2447, .max_power = 25 },
2086 { .hw_value = 12, .center_freq = 2467, .max_power = 25 },
2087 { .hw_value = 3, .center_freq = 2422, .max_power = 25 },
2088 { .hw_value = 7, .center_freq = 2442, .max_power = 25 },
2089 { .hw_value = 11, .center_freq = 2462, .max_power = 25 },
2090 { .hw_value = 2, .center_freq = 2417, .max_power = 25 },
2091 { .hw_value = 6, .center_freq = 2437, .max_power = 25 },
2092 { .hw_value = 10, .center_freq = 2457, .max_power = 25 },
2095 /* mapping to indexes for wl1271_rates */
2096 static const u8 wl1271_rate_to_idx_2ghz[] = {
2097 /* MCS rates are used only with 11n */
2098 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS7 */
2099 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS6 */
2100 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS5 */
2101 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS4 */
2102 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS3 */
2103 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS2 */
2104 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS1 */
2105 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS0 */
2107 11, /* CONF_HW_RXTX_RATE_54 */
2108 10, /* CONF_HW_RXTX_RATE_48 */
2109 9, /* CONF_HW_RXTX_RATE_36 */
2110 8, /* CONF_HW_RXTX_RATE_24 */
2112 /* TI-specific rate */
2113 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
2115 7, /* CONF_HW_RXTX_RATE_18 */
2116 6, /* CONF_HW_RXTX_RATE_12 */
2117 3, /* CONF_HW_RXTX_RATE_11 */
2118 5, /* CONF_HW_RXTX_RATE_9 */
2119 4, /* CONF_HW_RXTX_RATE_6 */
2120 2, /* CONF_HW_RXTX_RATE_5_5 */
2121 1, /* CONF_HW_RXTX_RATE_2 */
2122 0 /* CONF_HW_RXTX_RATE_1 */
2125 /* can't be const, mac80211 writes to this */
2126 static struct ieee80211_supported_band wl1271_band_2ghz = {
2127 .channels = wl1271_channels,
2128 .n_channels = ARRAY_SIZE(wl1271_channels),
2129 .bitrates = wl1271_rates,
2130 .n_bitrates = ARRAY_SIZE(wl1271_rates),
2133 /* 5 GHz data rates for WL1273 */
2134 static struct ieee80211_rate wl1271_rates_5ghz[] = {
2136 .hw_value = CONF_HW_BIT_RATE_6MBPS,
2137 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
2139 .hw_value = CONF_HW_BIT_RATE_9MBPS,
2140 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
2142 .hw_value = CONF_HW_BIT_RATE_12MBPS,
2143 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
2145 .hw_value = CONF_HW_BIT_RATE_18MBPS,
2146 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
2148 .hw_value = CONF_HW_BIT_RATE_24MBPS,
2149 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
2151 .hw_value = CONF_HW_BIT_RATE_36MBPS,
2152 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
2154 .hw_value = CONF_HW_BIT_RATE_48MBPS,
2155 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
2157 .hw_value = CONF_HW_BIT_RATE_54MBPS,
2158 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
2162 * 5 GHz band channels for WL1273 - can't be const, mac80211 writes to this.
2163 * The order of the channels here is designed to improve scanning.
2165 static struct ieee80211_channel wl1271_channels_5ghz[] = {
2166 { .hw_value = 183, .center_freq = 4915},
2167 { .hw_value = 188, .center_freq = 4940},
2168 { .hw_value = 8, .center_freq = 5040},
2169 { .hw_value = 34, .center_freq = 5170},
2170 { .hw_value = 44, .center_freq = 5220},
2171 { .hw_value = 60, .center_freq = 5300},
2172 { .hw_value = 112, .center_freq = 5560},
2173 { .hw_value = 132, .center_freq = 5660},
2174 { .hw_value = 157, .center_freq = 5785},
2175 { .hw_value = 184, .center_freq = 4920},
2176 { .hw_value = 189, .center_freq = 4945},
2177 { .hw_value = 9, .center_freq = 5045},
2178 { .hw_value = 36, .center_freq = 5180},
2179 { .hw_value = 46, .center_freq = 5230},
2180 { .hw_value = 64, .center_freq = 5320},
2181 { .hw_value = 116, .center_freq = 5580},
2182 { .hw_value = 136, .center_freq = 5680},
2183 { .hw_value = 192, .center_freq = 4960},
2184 { .hw_value = 11, .center_freq = 5055},
2185 { .hw_value = 38, .center_freq = 5190},
2186 { .hw_value = 48, .center_freq = 5240},
2187 { .hw_value = 100, .center_freq = 5500},
2188 { .hw_value = 120, .center_freq = 5600},
2189 { .hw_value = 140, .center_freq = 5700},
2190 { .hw_value = 185, .center_freq = 4925},
2191 { .hw_value = 196, .center_freq = 4980},
2192 { .hw_value = 12, .center_freq = 5060},
2193 { .hw_value = 40, .center_freq = 5200},
2194 { .hw_value = 52, .center_freq = 5260},
2195 { .hw_value = 104, .center_freq = 5520},
2196 { .hw_value = 124, .center_freq = 5620},
2197 { .hw_value = 149, .center_freq = 5745},
2198 { .hw_value = 161, .center_freq = 5805},
2199 { .hw_value = 187, .center_freq = 4935},
2200 { .hw_value = 7, .center_freq = 5035},
2201 { .hw_value = 16, .center_freq = 5080},
2202 { .hw_value = 42, .center_freq = 5210},
2203 { .hw_value = 56, .center_freq = 5280},
2204 { .hw_value = 108, .center_freq = 5540},
2205 { .hw_value = 128, .center_freq = 5640},
2206 { .hw_value = 153, .center_freq = 5765},
2207 { .hw_value = 165, .center_freq = 5825},
2210 /* mapping to indexes for wl1271_rates_5ghz */
2211 static const u8 wl1271_rate_to_idx_5ghz[] = {
2212 /* MCS rates are used only with 11n */
2213 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS7 */
2214 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS6 */
2215 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS5 */
2216 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS4 */
2217 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS3 */
2218 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS2 */
2219 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS1 */
2220 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS0 */
2222 7, /* CONF_HW_RXTX_RATE_54 */
2223 6, /* CONF_HW_RXTX_RATE_48 */
2224 5, /* CONF_HW_RXTX_RATE_36 */
2225 4, /* CONF_HW_RXTX_RATE_24 */
2227 /* TI-specific rate */
2228 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
2230 3, /* CONF_HW_RXTX_RATE_18 */
2231 2, /* CONF_HW_RXTX_RATE_12 */
2232 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_11 */
2233 1, /* CONF_HW_RXTX_RATE_9 */
2234 0, /* CONF_HW_RXTX_RATE_6 */
2235 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_5_5 */
2236 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_2 */
2237 CONF_HW_RXTX_RATE_UNSUPPORTED /* CONF_HW_RXTX_RATE_1 */
2240 static struct ieee80211_supported_band wl1271_band_5ghz = {
2241 .channels = wl1271_channels_5ghz,
2242 .n_channels = ARRAY_SIZE(wl1271_channels_5ghz),
2243 .bitrates = wl1271_rates_5ghz,
2244 .n_bitrates = ARRAY_SIZE(wl1271_rates_5ghz),
2247 static const u8 *wl1271_band_rate_to_idx[] = {
2248 [IEEE80211_BAND_2GHZ] = wl1271_rate_to_idx_2ghz,
2249 [IEEE80211_BAND_5GHZ] = wl1271_rate_to_idx_5ghz
2252 static const struct ieee80211_ops wl1271_ops = {
2253 .start = wl1271_op_start,
2254 .stop = wl1271_op_stop,
2255 .add_interface = wl1271_op_add_interface,
2256 .remove_interface = wl1271_op_remove_interface,
2257 .config = wl1271_op_config,
2258 .prepare_multicast = wl1271_op_prepare_multicast,
2259 .configure_filter = wl1271_op_configure_filter,
2261 .set_key = wl1271_op_set_key,
2262 .hw_scan = wl1271_op_hw_scan,
2263 .bss_info_changed = wl1271_op_bss_info_changed,
2264 .set_rts_threshold = wl1271_op_set_rts_threshold,
2265 .conf_tx = wl1271_op_conf_tx,
2266 .get_tsf = wl1271_op_get_tsf,
2267 .get_survey = wl1271_op_get_survey,
2268 CFG80211_TESTMODE_CMD(wl1271_tm_cmd)
2272 u8 wl1271_rate_to_idx(struct wl1271 *wl, int rate)
2276 BUG_ON(wl->band >= sizeof(wl1271_band_rate_to_idx)/sizeof(u8 *));
2278 if (unlikely(rate >= CONF_HW_RXTX_RATE_MAX)) {
2279 wl1271_error("Illegal RX rate from HW: %d", rate);
2283 idx = wl1271_band_rate_to_idx[wl->band][rate];
2284 if (unlikely(idx == CONF_HW_RXTX_RATE_UNSUPPORTED)) {
2285 wl1271_error("Unsupported RX rate from HW: %d", rate);
2292 static ssize_t wl1271_sysfs_show_bt_coex_state(struct device *dev,
2293 struct device_attribute *attr,
2296 struct wl1271 *wl = dev_get_drvdata(dev);
2301 mutex_lock(&wl->mutex);
2302 len = snprintf(buf, len, "%d\n\n0 - off\n1 - on\n",
2304 mutex_unlock(&wl->mutex);
2310 static ssize_t wl1271_sysfs_store_bt_coex_state(struct device *dev,
2311 struct device_attribute *attr,
2312 const char *buf, size_t count)
2314 struct wl1271 *wl = dev_get_drvdata(dev);
2318 ret = strict_strtoul(buf, 10, &res);
2321 wl1271_warning("incorrect value written to bt_coex_mode");
2325 mutex_lock(&wl->mutex);
2329 if (res == wl->sg_enabled)
2332 wl->sg_enabled = res;
2334 if (wl->state == WL1271_STATE_OFF)
2337 ret = wl1271_ps_elp_wakeup(wl, false);
2341 wl1271_acx_sg_enable(wl, wl->sg_enabled);
2342 wl1271_ps_elp_sleep(wl);
2345 mutex_unlock(&wl->mutex);
2349 static DEVICE_ATTR(bt_coex_state, S_IRUGO | S_IWUSR,
2350 wl1271_sysfs_show_bt_coex_state,
2351 wl1271_sysfs_store_bt_coex_state);
2353 static ssize_t wl1271_sysfs_show_hw_pg_ver(struct device *dev,
2354 struct device_attribute *attr,
2357 struct wl1271 *wl = dev_get_drvdata(dev);
2362 mutex_lock(&wl->mutex);
2363 if (wl->hw_pg_ver >= 0)
2364 len = snprintf(buf, len, "%d\n", wl->hw_pg_ver);
2366 len = snprintf(buf, len, "n/a\n");
2367 mutex_unlock(&wl->mutex);
2372 static DEVICE_ATTR(hw_pg_ver, S_IRUGO | S_IWUSR,
2373 wl1271_sysfs_show_hw_pg_ver, NULL);
2375 int wl1271_register_hw(struct wl1271 *wl)
2379 if (wl->mac80211_registered)
2382 SET_IEEE80211_PERM_ADDR(wl->hw, wl->mac_addr);
2384 ret = ieee80211_register_hw(wl->hw);
2386 wl1271_error("unable to register mac80211 hw: %d", ret);
2390 wl->mac80211_registered = true;
2392 register_netdevice_notifier(&wl1271_dev_notifier);
2394 wl1271_notice("loaded");
2398 EXPORT_SYMBOL_GPL(wl1271_register_hw);
2400 void wl1271_unregister_hw(struct wl1271 *wl)
2402 unregister_netdevice_notifier(&wl1271_dev_notifier);
2403 ieee80211_unregister_hw(wl->hw);
2404 wl->mac80211_registered = false;
2407 EXPORT_SYMBOL_GPL(wl1271_unregister_hw);
2409 int wl1271_init_ieee80211(struct wl1271 *wl)
2411 static const u32 cipher_suites[] = {
2412 WLAN_CIPHER_SUITE_WEP40,
2413 WLAN_CIPHER_SUITE_WEP104,
2414 WLAN_CIPHER_SUITE_TKIP,
2415 WLAN_CIPHER_SUITE_CCMP,
2416 WL1271_CIPHER_SUITE_GEM,
2419 /* The tx descriptor buffer and the TKIP space. */
2420 wl->hw->extra_tx_headroom = WL1271_TKIP_IV_SPACE +
2421 sizeof(struct wl1271_tx_hw_descr);
2424 /* FIXME: find a proper value */
2425 wl->hw->channel_change_time = 10000;
2426 wl->hw->max_listen_interval = wl->conf.conn.max_listen_interval;
2428 wl->hw->flags = IEEE80211_HW_SIGNAL_DBM |
2429 IEEE80211_HW_BEACON_FILTER |
2430 IEEE80211_HW_SUPPORTS_PS |
2431 IEEE80211_HW_SUPPORTS_UAPSD |
2432 IEEE80211_HW_HAS_RATE_CONTROL |
2433 IEEE80211_HW_CONNECTION_MONITOR |
2434 IEEE80211_HW_SUPPORTS_CQM_RSSI;
2436 wl->hw->wiphy->cipher_suites = cipher_suites;
2437 wl->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
2439 wl->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
2440 BIT(NL80211_IFTYPE_ADHOC);
2441 wl->hw->wiphy->max_scan_ssids = 1;
2442 wl->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = &wl1271_band_2ghz;
2443 wl->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = &wl1271_band_5ghz;
2446 wl->hw->max_rates = 1;
2448 SET_IEEE80211_DEV(wl->hw, wl1271_wl_to_dev(wl));
2452 EXPORT_SYMBOL_GPL(wl1271_init_ieee80211);
2454 #define WL1271_DEFAULT_CHANNEL 0
2456 struct ieee80211_hw *wl1271_alloc_hw(void)
2458 struct ieee80211_hw *hw;
2459 struct platform_device *plat_dev = NULL;
2464 hw = ieee80211_alloc_hw(sizeof(*wl), &wl1271_ops);
2466 wl1271_error("could not alloc ieee80211_hw");
2471 plat_dev = kmemdup(&wl1271_device, sizeof(wl1271_device), GFP_KERNEL);
2473 wl1271_error("could not allocate platform_device");
2475 goto err_plat_alloc;
2479 memset(wl, 0, sizeof(*wl));
2481 INIT_LIST_HEAD(&wl->list);
2484 wl->plat_dev = plat_dev;
2486 skb_queue_head_init(&wl->tx_queue);
2488 INIT_DELAYED_WORK(&wl->elp_work, wl1271_elp_work);
2489 INIT_DELAYED_WORK(&wl->pspoll_work, wl1271_pspoll_work);
2490 wl->channel = WL1271_DEFAULT_CHANNEL;
2491 wl->beacon_int = WL1271_DEFAULT_BEACON_INT;
2492 wl->default_key = 0;
2494 wl->rx_config = WL1271_DEFAULT_RX_CONFIG;
2495 wl->rx_filter = WL1271_DEFAULT_RX_FILTER;
2496 wl->psm_entry_retry = 0;
2497 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
2498 wl->basic_rate_set = CONF_TX_RATE_MASK_BASIC;
2499 wl->basic_rate = CONF_TX_RATE_MASK_BASIC;
2500 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
2501 wl->sta_rate_set = 0;
2502 wl->band = IEEE80211_BAND_2GHZ;
2505 wl->sg_enabled = true;
2508 for (i = 0; i < ACX_TX_DESCRIPTORS; i++)
2509 wl->tx_frames[i] = NULL;
2511 spin_lock_init(&wl->wl_lock);
2513 wl->state = WL1271_STATE_OFF;
2514 mutex_init(&wl->mutex);
2516 /* Apply default driver configuration. */
2517 wl1271_conf_init(wl);
2519 wl1271_debugfs_init(wl);
2521 order = get_order(WL1271_AGGR_BUFFER_SIZE);
2522 wl->aggr_buf = (u8 *)__get_free_pages(GFP_KERNEL, order);
2523 if (!wl->aggr_buf) {
2528 /* Register platform device */
2529 ret = platform_device_register(wl->plat_dev);
2531 wl1271_error("couldn't register platform device");
2534 dev_set_drvdata(&wl->plat_dev->dev, wl);
2536 /* Create sysfs file to control bt coex state */
2537 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
2539 wl1271_error("failed to create sysfs file bt_coex_state");
2543 /* Create sysfs file to get HW PG version */
2544 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_hw_pg_ver);
2546 wl1271_error("failed to create sysfs file hw_pg_ver");
2547 goto err_bt_coex_state;
2553 device_remove_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
2556 platform_device_unregister(wl->plat_dev);
2559 free_pages((unsigned long)wl->aggr_buf, order);
2562 wl1271_debugfs_exit(wl);
2566 ieee80211_free_hw(hw);
2570 return ERR_PTR(ret);
2572 EXPORT_SYMBOL_GPL(wl1271_alloc_hw);
2574 int wl1271_free_hw(struct wl1271 *wl)
2576 platform_device_unregister(wl->plat_dev);
2577 free_pages((unsigned long)wl->aggr_buf,
2578 get_order(WL1271_AGGR_BUFFER_SIZE));
2579 kfree(wl->plat_dev);
2581 wl1271_debugfs_exit(wl);
2588 kfree(wl->fw_status);
2589 kfree(wl->tx_res_if);
2591 ieee80211_free_hw(wl->hw);
2595 EXPORT_SYMBOL_GPL(wl1271_free_hw);
2597 MODULE_LICENSE("GPL");
2598 MODULE_AUTHOR("Luciano Coelho <luciano.coelho@nokia.com>");
2599 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");