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 = 3,
218 .keep_alive_interval = 55000,
219 .max_listen_interval = 20,
226 .host_clk_settling_time = 5000,
227 .host_fast_wakeup_support = false
231 .avg_weight_rssi_beacon = 20,
232 .avg_weight_rssi_data = 10,
233 .avg_weight_snr_beacon = 20,
234 .avg_weight_snr_data = 10
238 static void __wl1271_op_remove_interface(struct wl1271 *wl);
241 static void wl1271_device_release(struct device *dev)
246 static struct platform_device wl1271_device = {
250 /* device model insists to have a release function */
252 .release = wl1271_device_release,
256 static LIST_HEAD(wl_list);
258 static int wl1271_dev_notify(struct notifier_block *me, unsigned long what,
261 struct net_device *dev = arg;
262 struct wireless_dev *wdev;
264 struct ieee80211_hw *hw;
266 struct wl1271 *wl_temp;
269 /* Check that this notification is for us. */
270 if (what != NETDEV_CHANGE)
273 wdev = dev->ieee80211_ptr;
281 hw = wiphy_priv(wiphy);
286 list_for_each_entry(wl, &wl_list, list) {
293 mutex_lock(&wl->mutex);
295 if (wl->state == WL1271_STATE_OFF)
298 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
301 ret = wl1271_ps_elp_wakeup(wl, false);
305 if ((dev->operstate == IF_OPER_UP) &&
306 !test_and_set_bit(WL1271_FLAG_STA_STATE_SENT, &wl->flags)) {
307 wl1271_cmd_set_sta_state(wl);
308 wl1271_info("Association completed.");
311 wl1271_ps_elp_sleep(wl);
314 mutex_unlock(&wl->mutex);
319 static void wl1271_conf_init(struct wl1271 *wl)
323 * This function applies the default configuration to the driver. This
324 * function is invoked upon driver load (spi probe.)
326 * The configuration is stored in a run-time structure in order to
327 * facilitate for run-time adjustment of any of the parameters. Making
328 * changes to the configuration structure will apply the new values on
329 * the next interface up (wl1271_op_start.)
332 /* apply driver default configuration */
333 memcpy(&wl->conf, &default_conf, sizeof(default_conf));
337 static int wl1271_plt_init(struct wl1271 *wl)
339 struct conf_tx_ac_category *conf_ac;
340 struct conf_tx_tid *conf_tid;
343 ret = wl1271_cmd_general_parms(wl);
347 ret = wl1271_cmd_radio_parms(wl);
351 ret = wl1271_init_templates_config(wl);
355 ret = wl1271_acx_init_mem_config(wl);
359 /* PHY layer config */
360 ret = wl1271_init_phy_config(wl);
362 goto out_free_memmap;
364 ret = wl1271_acx_dco_itrim_params(wl);
366 goto out_free_memmap;
368 /* Initialize connection monitoring thresholds */
369 ret = wl1271_acx_conn_monit_params(wl, false);
371 goto out_free_memmap;
373 /* Bluetooth WLAN coexistence */
374 ret = wl1271_init_pta(wl);
376 goto out_free_memmap;
378 /* Energy detection */
379 ret = wl1271_init_energy_detection(wl);
381 goto out_free_memmap;
383 /* Default fragmentation threshold */
384 ret = wl1271_acx_frag_threshold(wl);
386 goto out_free_memmap;
388 /* Default TID/AC configuration */
389 BUG_ON(wl->conf.tx.tid_conf_count != wl->conf.tx.ac_conf_count);
390 for (i = 0; i < wl->conf.tx.tid_conf_count; i++) {
391 conf_ac = &wl->conf.tx.ac_conf[i];
392 ret = wl1271_acx_ac_cfg(wl, conf_ac->ac, conf_ac->cw_min,
393 conf_ac->cw_max, conf_ac->aifsn,
394 conf_ac->tx_op_limit);
396 goto out_free_memmap;
398 conf_tid = &wl->conf.tx.tid_conf[i];
399 ret = wl1271_acx_tid_cfg(wl, conf_tid->queue_id,
400 conf_tid->channel_type,
403 conf_tid->ack_policy,
404 conf_tid->apsd_conf[0],
405 conf_tid->apsd_conf[1]);
407 goto out_free_memmap;
410 /* Enable data path */
411 ret = wl1271_cmd_data_path(wl, 1);
413 goto out_free_memmap;
415 /* Configure for CAM power saving (ie. always active) */
416 ret = wl1271_acx_sleep_auth(wl, WL1271_PSM_CAM);
418 goto out_free_memmap;
421 ret = wl1271_acx_pm_config(wl);
423 goto out_free_memmap;
428 kfree(wl->target_mem_map);
429 wl->target_mem_map = NULL;
434 static void wl1271_fw_status(struct wl1271 *wl,
435 struct wl1271_fw_status *status)
441 wl1271_raw_read(wl, FW_STATUS_ADDR, status, sizeof(*status), false);
443 wl1271_debug(DEBUG_IRQ, "intr: 0x%x (fw_rx_counter = %d, "
444 "drv_rx_counter = %d, tx_results_counter = %d)",
446 status->fw_rx_counter,
447 status->drv_rx_counter,
448 status->tx_results_counter);
450 /* update number of available TX blocks */
451 for (i = 0; i < NUM_TX_QUEUES; i++) {
452 u32 cnt = le32_to_cpu(status->tx_released_blks[i]) -
453 wl->tx_blocks_freed[i];
455 wl->tx_blocks_freed[i] =
456 le32_to_cpu(status->tx_released_blks[i]);
457 wl->tx_blocks_available += cnt;
461 /* if more blocks are available now, schedule some tx work */
462 if (total && !skb_queue_empty(&wl->tx_queue))
463 ieee80211_queue_work(wl->hw, &wl->tx_work);
465 /* update the host-chipset time offset */
467 wl->time_offset = (timespec_to_ns(&ts) >> 10) -
468 (s64)le32_to_cpu(status->fw_localtime);
471 #define WL1271_IRQ_MAX_LOOPS 10
473 static void wl1271_irq_work(struct work_struct *work)
477 int loopcount = WL1271_IRQ_MAX_LOOPS;
480 container_of(work, struct wl1271, irq_work);
482 mutex_lock(&wl->mutex);
484 wl1271_debug(DEBUG_IRQ, "IRQ work");
486 if (unlikely(wl->state == WL1271_STATE_OFF))
489 ret = wl1271_ps_elp_wakeup(wl, true);
493 spin_lock_irqsave(&wl->wl_lock, flags);
494 while (test_bit(WL1271_FLAG_IRQ_PENDING, &wl->flags) && loopcount) {
495 clear_bit(WL1271_FLAG_IRQ_PENDING, &wl->flags);
496 spin_unlock_irqrestore(&wl->wl_lock, flags);
499 wl1271_fw_status(wl, wl->fw_status);
500 intr = le32_to_cpu(wl->fw_status->intr);
502 wl1271_debug(DEBUG_IRQ, "Zero interrupt received.");
503 spin_lock_irqsave(&wl->wl_lock, flags);
507 intr &= WL1271_INTR_MASK;
509 if (intr & WL1271_ACX_INTR_DATA) {
510 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_DATA");
512 /* check for tx results */
513 if (wl->fw_status->tx_results_counter !=
514 (wl->tx_results_count & 0xff))
515 wl1271_tx_complete(wl);
517 wl1271_rx(wl, wl->fw_status);
520 if (intr & WL1271_ACX_INTR_EVENT_A) {
521 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_A");
522 wl1271_event_handle(wl, 0);
525 if (intr & WL1271_ACX_INTR_EVENT_B) {
526 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_B");
527 wl1271_event_handle(wl, 1);
530 if (intr & WL1271_ACX_INTR_INIT_COMPLETE)
531 wl1271_debug(DEBUG_IRQ,
532 "WL1271_ACX_INTR_INIT_COMPLETE");
534 if (intr & WL1271_ACX_INTR_HW_AVAILABLE)
535 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_HW_AVAILABLE");
537 spin_lock_irqsave(&wl->wl_lock, flags);
540 if (test_bit(WL1271_FLAG_IRQ_PENDING, &wl->flags))
541 ieee80211_queue_work(wl->hw, &wl->irq_work);
543 clear_bit(WL1271_FLAG_IRQ_RUNNING, &wl->flags);
544 spin_unlock_irqrestore(&wl->wl_lock, flags);
546 wl1271_ps_elp_sleep(wl);
549 mutex_unlock(&wl->mutex);
552 static int wl1271_fetch_firmware(struct wl1271 *wl)
554 const struct firmware *fw;
557 ret = request_firmware(&fw, WL1271_FW_NAME, wl1271_wl_to_dev(wl));
560 wl1271_error("could not get firmware: %d", ret);
565 wl1271_error("firmware size is not multiple of 32 bits: %zu",
571 wl->fw_len = fw->size;
572 wl->fw = vmalloc(wl->fw_len);
575 wl1271_error("could not allocate memory for the firmware");
580 memcpy(wl->fw, fw->data, wl->fw_len);
585 release_firmware(fw);
590 static int wl1271_fetch_nvs(struct wl1271 *wl)
592 const struct firmware *fw;
595 ret = request_firmware(&fw, WL1271_NVS_NAME, wl1271_wl_to_dev(wl));
598 wl1271_error("could not get nvs file: %d", ret);
602 wl->nvs = kmemdup(fw->data, sizeof(struct wl1271_nvs_file), GFP_KERNEL);
605 wl1271_error("could not allocate memory for the nvs file");
610 wl->nvs_len = fw->size;
613 release_firmware(fw);
618 static void wl1271_recovery_work(struct work_struct *work)
621 container_of(work, struct wl1271, recovery_work);
623 mutex_lock(&wl->mutex);
625 if (wl->state != WL1271_STATE_ON)
628 wl1271_info("Hardware recovery in progress.");
630 /* reboot the chipset */
631 __wl1271_op_remove_interface(wl);
632 ieee80211_restart_hw(wl->hw);
635 mutex_unlock(&wl->mutex);
638 static void wl1271_fw_wakeup(struct wl1271 *wl)
642 elp_reg = ELPCTRL_WAKE_UP;
643 wl1271_raw_write32(wl, HW_ACCESS_ELP_CTRL_REG_ADDR, elp_reg);
646 static int wl1271_setup(struct wl1271 *wl)
648 wl->fw_status = kmalloc(sizeof(*wl->fw_status), GFP_KERNEL);
652 wl->tx_res_if = kmalloc(sizeof(*wl->tx_res_if), GFP_KERNEL);
653 if (!wl->tx_res_if) {
654 kfree(wl->fw_status);
658 INIT_WORK(&wl->irq_work, wl1271_irq_work);
659 INIT_WORK(&wl->tx_work, wl1271_tx_work);
660 INIT_WORK(&wl->recovery_work, wl1271_recovery_work);
661 INIT_DELAYED_WORK(&wl->scan_complete_work, wl1271_scan_complete_work);
666 static int wl1271_chip_wakeup(struct wl1271 *wl)
668 struct wl1271_partition_set partition;
671 msleep(WL1271_PRE_POWER_ON_SLEEP);
672 ret = wl1271_power_on(wl);
675 msleep(WL1271_POWER_ON_SLEEP);
679 /* We don't need a real memory partition here, because we only want
680 * to use the registers at this point. */
681 memset(&partition, 0, sizeof(partition));
682 partition.reg.start = REGISTERS_BASE;
683 partition.reg.size = REGISTERS_DOWN_SIZE;
684 wl1271_set_partition(wl, &partition);
686 /* ELP module wake up */
687 wl1271_fw_wakeup(wl);
689 /* whal_FwCtrl_BootSm() */
691 /* 0. read chip id from CHIP_ID */
692 wl->chip.id = wl1271_read32(wl, CHIP_ID_B);
694 /* 1. check if chip id is valid */
696 switch (wl->chip.id) {
697 case CHIP_ID_1271_PG10:
698 wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
701 ret = wl1271_setup(wl);
705 case CHIP_ID_1271_PG20:
706 wl1271_debug(DEBUG_BOOT, "chip id 0x%x (1271 PG20)",
709 ret = wl1271_setup(wl);
714 wl1271_warning("unsupported chip id: 0x%x", wl->chip.id);
719 if (wl->fw == NULL) {
720 ret = wl1271_fetch_firmware(wl);
725 /* No NVS from netlink, try to get it from the filesystem */
726 if (wl->nvs == NULL) {
727 ret = wl1271_fetch_nvs(wl);
736 int wl1271_plt_start(struct wl1271 *wl)
738 int retries = WL1271_BOOT_RETRIES;
741 mutex_lock(&wl->mutex);
743 wl1271_notice("power up");
745 if (wl->state != WL1271_STATE_OFF) {
746 wl1271_error("cannot go into PLT state because not "
747 "in off state: %d", wl->state);
754 ret = wl1271_chip_wakeup(wl);
758 ret = wl1271_boot(wl);
762 ret = wl1271_plt_init(wl);
766 wl->state = WL1271_STATE_PLT;
767 wl1271_notice("firmware booted in PLT mode (%s)",
772 wl1271_disable_interrupts(wl);
773 mutex_unlock(&wl->mutex);
774 /* Unlocking the mutex in the middle of handling is
775 inherently unsafe. In this case we deem it safe to do,
776 because we need to let any possibly pending IRQ out of
777 the system (and while we are WL1271_STATE_OFF the IRQ
778 work function will not do anything.) Also, any other
779 possible concurrent operations will fail due to the
780 current state, hence the wl1271 struct should be safe. */
781 cancel_work_sync(&wl->irq_work);
782 mutex_lock(&wl->mutex);
784 wl1271_power_off(wl);
787 wl1271_error("firmware boot in PLT mode failed despite %d retries",
788 WL1271_BOOT_RETRIES);
790 mutex_unlock(&wl->mutex);
795 int wl1271_plt_stop(struct wl1271 *wl)
799 mutex_lock(&wl->mutex);
801 wl1271_notice("power down");
803 if (wl->state != WL1271_STATE_PLT) {
804 wl1271_error("cannot power down because not in PLT "
805 "state: %d", wl->state);
810 wl1271_disable_interrupts(wl);
811 wl1271_power_off(wl);
813 wl->state = WL1271_STATE_OFF;
817 mutex_unlock(&wl->mutex);
819 cancel_work_sync(&wl->irq_work);
820 cancel_work_sync(&wl->recovery_work);
825 static int wl1271_op_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
827 struct wl1271 *wl = hw->priv;
828 struct ieee80211_conf *conf = &hw->conf;
829 struct ieee80211_tx_info *txinfo = IEEE80211_SKB_CB(skb);
830 struct ieee80211_sta *sta = txinfo->control.sta;
833 /* peek into the rates configured in the STA entry */
834 spin_lock_irqsave(&wl->wl_lock, flags);
835 if (sta && sta->supp_rates[conf->channel->band] != wl->sta_rate_set) {
836 wl->sta_rate_set = sta->supp_rates[conf->channel->band];
837 set_bit(WL1271_FLAG_STA_RATES_CHANGED, &wl->flags);
839 spin_unlock_irqrestore(&wl->wl_lock, flags);
841 /* queue the packet */
842 skb_queue_tail(&wl->tx_queue, skb);
845 * The chip specific setup must run before the first TX packet -
846 * before that, the tx_work will not be initialized!
849 ieee80211_queue_work(wl->hw, &wl->tx_work);
852 * The workqueue is slow to process the tx_queue and we need stop
853 * the queue here, otherwise the queue will get too long.
855 if (skb_queue_len(&wl->tx_queue) >= WL1271_TX_QUEUE_HIGH_WATERMARK) {
856 wl1271_debug(DEBUG_TX, "op_tx: stopping queues");
858 spin_lock_irqsave(&wl->wl_lock, flags);
859 ieee80211_stop_queues(wl->hw);
860 set_bit(WL1271_FLAG_TX_QUEUE_STOPPED, &wl->flags);
861 spin_unlock_irqrestore(&wl->wl_lock, flags);
867 static struct notifier_block wl1271_dev_notifier = {
868 .notifier_call = wl1271_dev_notify,
871 static int wl1271_op_start(struct ieee80211_hw *hw)
873 wl1271_debug(DEBUG_MAC80211, "mac80211 start");
876 * We have to delay the booting of the hardware because
877 * we need to know the local MAC address before downloading and
878 * initializing the firmware. The MAC address cannot be changed
879 * after boot, and without the proper MAC address, the firmware
880 * will not function properly.
882 * The MAC address is first known when the corresponding interface
883 * is added. That is where we will initialize the hardware.
889 static void wl1271_op_stop(struct ieee80211_hw *hw)
891 wl1271_debug(DEBUG_MAC80211, "mac80211 stop");
894 static int wl1271_op_add_interface(struct ieee80211_hw *hw,
895 struct ieee80211_vif *vif)
897 struct wl1271 *wl = hw->priv;
898 struct wiphy *wiphy = hw->wiphy;
899 int retries = WL1271_BOOT_RETRIES;
902 wl1271_debug(DEBUG_MAC80211, "mac80211 add interface type %d mac %pM",
903 vif->type, vif->addr);
905 mutex_lock(&wl->mutex);
914 case NL80211_IFTYPE_STATION:
915 wl->bss_type = BSS_TYPE_STA_BSS;
916 wl->set_bss_type = BSS_TYPE_STA_BSS;
918 case NL80211_IFTYPE_ADHOC:
919 wl->bss_type = BSS_TYPE_IBSS;
920 wl->set_bss_type = BSS_TYPE_STA_BSS;
927 memcpy(wl->mac_addr, vif->addr, ETH_ALEN);
929 if (wl->state != WL1271_STATE_OFF) {
930 wl1271_error("cannot start because not in off state: %d",
938 ret = wl1271_chip_wakeup(wl);
942 ret = wl1271_boot(wl);
946 ret = wl1271_hw_init(wl);
950 wl->state = WL1271_STATE_ON;
951 wl1271_info("firmware booted (%s)", wl->chip.fw_ver);
953 /* update hw/fw version info in wiphy struct */
954 wiphy->hw_version = wl->chip.id;
955 strncpy(wiphy->fw_version, wl->chip.fw_ver,
956 sizeof(wiphy->fw_version));
961 wl1271_disable_interrupts(wl);
962 mutex_unlock(&wl->mutex);
963 /* Unlocking the mutex in the middle of handling is
964 inherently unsafe. In this case we deem it safe to do,
965 because we need to let any possibly pending IRQ out of
966 the system (and while we are WL1271_STATE_OFF the IRQ
967 work function will not do anything.) Also, any other
968 possible concurrent operations will fail due to the
969 current state, hence the wl1271 struct should be safe. */
970 cancel_work_sync(&wl->irq_work);
971 mutex_lock(&wl->mutex);
973 wl1271_power_off(wl);
976 wl1271_error("firmware boot failed despite %d retries",
977 WL1271_BOOT_RETRIES);
979 mutex_unlock(&wl->mutex);
982 list_add(&wl->list, &wl_list);
987 static void __wl1271_op_remove_interface(struct wl1271 *wl)
991 wl1271_debug(DEBUG_MAC80211, "mac80211 remove interface");
997 WARN_ON(wl->state != WL1271_STATE_ON);
999 /* enable dyn ps just in case (if left on due to fw crash etc) */
1000 if (wl->bss_type == BSS_TYPE_STA_BSS)
1001 ieee80211_enable_dyn_ps(wl->vif);
1003 if (wl->scan.state != WL1271_SCAN_STATE_IDLE) {
1004 wl->scan.state = WL1271_SCAN_STATE_IDLE;
1005 kfree(wl->scan.scanned_ch);
1006 wl->scan.scanned_ch = NULL;
1007 ieee80211_scan_completed(wl->hw, true);
1010 wl->state = WL1271_STATE_OFF;
1012 wl1271_disable_interrupts(wl);
1014 mutex_unlock(&wl->mutex);
1016 cancel_delayed_work_sync(&wl->scan_complete_work);
1017 cancel_work_sync(&wl->irq_work);
1018 cancel_work_sync(&wl->tx_work);
1019 cancel_delayed_work_sync(&wl->pspoll_work);
1020 cancel_delayed_work_sync(&wl->elp_work);
1022 mutex_lock(&wl->mutex);
1024 /* let's notify MAC80211 about the remaining pending TX frames */
1025 wl1271_tx_reset(wl);
1026 wl1271_power_off(wl);
1028 memset(wl->bssid, 0, ETH_ALEN);
1029 memset(wl->ssid, 0, IW_ESSID_MAX_SIZE + 1);
1031 wl->bss_type = MAX_BSS_TYPE;
1032 wl->set_bss_type = MAX_BSS_TYPE;
1033 wl->band = IEEE80211_BAND_2GHZ;
1036 wl->psm_entry_retry = 0;
1037 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
1038 wl->tx_blocks_available = 0;
1039 wl->tx_results_count = 0;
1040 wl->tx_packets_count = 0;
1041 wl->tx_security_last_seq = 0;
1042 wl->tx_security_seq = 0;
1043 wl->time_offset = 0;
1044 wl->session_counter = 0;
1045 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
1046 wl->sta_rate_set = 0;
1051 for (i = 0; i < NUM_TX_QUEUES; i++)
1052 wl->tx_blocks_freed[i] = 0;
1054 wl1271_debugfs_reset(wl);
1056 kfree(wl->fw_status);
1057 wl->fw_status = NULL;
1058 kfree(wl->tx_res_if);
1059 wl->tx_res_if = NULL;
1060 kfree(wl->target_mem_map);
1061 wl->target_mem_map = NULL;
1064 static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
1065 struct ieee80211_vif *vif)
1067 struct wl1271 *wl = hw->priv;
1069 mutex_lock(&wl->mutex);
1070 WARN_ON(wl->vif != vif);
1071 __wl1271_op_remove_interface(wl);
1072 mutex_unlock(&wl->mutex);
1074 cancel_work_sync(&wl->recovery_work);
1077 static void wl1271_configure_filters(struct wl1271 *wl, unsigned int filters)
1079 wl->rx_config = WL1271_DEFAULT_RX_CONFIG;
1080 wl->rx_filter = WL1271_DEFAULT_RX_FILTER;
1082 /* combine requested filters with current filter config */
1083 filters = wl->filters | filters;
1085 wl1271_debug(DEBUG_FILTERS, "RX filters set: ");
1087 if (filters & FIF_PROMISC_IN_BSS) {
1088 wl1271_debug(DEBUG_FILTERS, " - FIF_PROMISC_IN_BSS");
1089 wl->rx_config &= ~CFG_UNI_FILTER_EN;
1090 wl->rx_config |= CFG_BSSID_FILTER_EN;
1092 if (filters & FIF_BCN_PRBRESP_PROMISC) {
1093 wl1271_debug(DEBUG_FILTERS, " - FIF_BCN_PRBRESP_PROMISC");
1094 wl->rx_config &= ~CFG_BSSID_FILTER_EN;
1095 wl->rx_config &= ~CFG_SSID_FILTER_EN;
1097 if (filters & FIF_OTHER_BSS) {
1098 wl1271_debug(DEBUG_FILTERS, " - FIF_OTHER_BSS");
1099 wl->rx_config &= ~CFG_BSSID_FILTER_EN;
1101 if (filters & FIF_CONTROL) {
1102 wl1271_debug(DEBUG_FILTERS, " - FIF_CONTROL");
1103 wl->rx_filter |= CFG_RX_CTL_EN;
1105 if (filters & FIF_FCSFAIL) {
1106 wl1271_debug(DEBUG_FILTERS, " - FIF_FCSFAIL");
1107 wl->rx_filter |= CFG_RX_FCS_ERROR;
1111 static int wl1271_dummy_join(struct wl1271 *wl)
1114 /* we need to use a dummy BSSID for now */
1115 static const u8 dummy_bssid[ETH_ALEN] = { 0x0b, 0xad, 0xde,
1118 memcpy(wl->bssid, dummy_bssid, ETH_ALEN);
1120 /* pass through frames from all BSS */
1121 wl1271_configure_filters(wl, FIF_OTHER_BSS);
1123 ret = wl1271_cmd_join(wl, wl->set_bss_type);
1127 set_bit(WL1271_FLAG_JOINED, &wl->flags);
1133 static int wl1271_join(struct wl1271 *wl, bool set_assoc)
1138 * One of the side effects of the JOIN command is that is clears
1139 * WPA/WPA2 keys from the chipset. Performing a JOIN while associated
1140 * to a WPA/WPA2 access point will therefore kill the data-path.
1141 * Currently there is no supported scenario for JOIN during
1142 * association - if it becomes a supported scenario, the WPA/WPA2 keys
1143 * must be handled somehow.
1146 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1147 wl1271_info("JOIN while associated.");
1150 set_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
1152 ret = wl1271_cmd_join(wl, wl->set_bss_type);
1156 set_bit(WL1271_FLAG_JOINED, &wl->flags);
1158 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1162 * The join command disable the keep-alive mode, shut down its process,
1163 * and also clear the template config, so we need to reset it all after
1164 * the join. The acx_aid starts the keep-alive process, and the order
1165 * of the commands below is relevant.
1167 ret = wl1271_acx_keep_alive_mode(wl, true);
1171 ret = wl1271_acx_aid(wl, wl->aid);
1175 ret = wl1271_cmd_build_klv_null_data(wl);
1179 ret = wl1271_acx_keep_alive_config(wl, CMD_TEMPL_KLV_IDX_NULL_DATA,
1180 ACX_KEEP_ALIVE_TPL_VALID);
1188 static int wl1271_unjoin(struct wl1271 *wl)
1192 /* to stop listening to a channel, we disconnect */
1193 ret = wl1271_cmd_disconnect(wl);
1197 clear_bit(WL1271_FLAG_JOINED, &wl->flags);
1198 memset(wl->bssid, 0, ETH_ALEN);
1200 /* stop filterting packets based on bssid */
1201 wl1271_configure_filters(wl, FIF_OTHER_BSS);
1207 static void wl1271_set_band_rate(struct wl1271 *wl)
1209 if (wl->band == IEEE80211_BAND_2GHZ)
1210 wl->basic_rate_set = wl->conf.tx.basic_rate;
1212 wl->basic_rate_set = wl->conf.tx.basic_rate_5;
1215 static u32 wl1271_min_rate_get(struct wl1271 *wl)
1220 if (!wl->basic_rate_set) {
1222 wl->basic_rate_set = wl->conf.tx.basic_rate;
1225 for (i = 0; !rate; i++) {
1226 if ((wl->basic_rate_set >> i) & 0x1)
1233 static int wl1271_handle_idle(struct wl1271 *wl, bool idle)
1238 if (test_bit(WL1271_FLAG_JOINED, &wl->flags)) {
1239 ret = wl1271_unjoin(wl);
1243 wl->rate_set = wl1271_min_rate_get(wl);
1244 wl->sta_rate_set = 0;
1245 ret = wl1271_acx_rate_policies(wl);
1248 ret = wl1271_acx_keep_alive_config(
1249 wl, CMD_TEMPL_KLV_IDX_NULL_DATA,
1250 ACX_KEEP_ALIVE_TPL_INVALID);
1253 set_bit(WL1271_FLAG_IDLE, &wl->flags);
1255 /* increment the session counter */
1256 wl->session_counter++;
1257 if (wl->session_counter >= SESSION_COUNTER_MAX)
1258 wl->session_counter = 0;
1259 ret = wl1271_dummy_join(wl);
1262 clear_bit(WL1271_FLAG_IDLE, &wl->flags);
1269 static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed)
1271 struct wl1271 *wl = hw->priv;
1272 struct ieee80211_conf *conf = &hw->conf;
1273 int channel, ret = 0;
1275 channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
1277 wl1271_debug(DEBUG_MAC80211, "mac80211 config ch %d psm %s power %d %s",
1279 conf->flags & IEEE80211_CONF_PS ? "on" : "off",
1281 conf->flags & IEEE80211_CONF_IDLE ? "idle" : "in use");
1284 * mac80211 will go to idle nearly immediately after transmitting some
1285 * frames, such as the deauth. To make sure those frames reach the air,
1286 * wait here until the TX queue is fully flushed.
1288 if ((changed & IEEE80211_CONF_CHANGE_IDLE) &&
1289 (conf->flags & IEEE80211_CONF_IDLE))
1290 wl1271_tx_flush(wl);
1292 mutex_lock(&wl->mutex);
1294 if (unlikely(wl->state == WL1271_STATE_OFF))
1297 ret = wl1271_ps_elp_wakeup(wl, false);
1301 /* if the channel changes while joined, join again */
1302 if (changed & IEEE80211_CONF_CHANGE_CHANNEL &&
1303 ((wl->band != conf->channel->band) ||
1304 (wl->channel != channel))) {
1305 wl->band = conf->channel->band;
1306 wl->channel = channel;
1309 * FIXME: the mac80211 should really provide a fixed rate
1310 * to use here. for now, just use the smallest possible rate
1311 * for the band as a fixed rate for association frames and
1312 * other control messages.
1314 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1315 wl1271_set_band_rate(wl);
1317 wl->basic_rate = wl1271_min_rate_get(wl);
1318 ret = wl1271_acx_rate_policies(wl);
1320 wl1271_warning("rate policy for update channel "
1323 if (test_bit(WL1271_FLAG_JOINED, &wl->flags)) {
1324 ret = wl1271_join(wl, false);
1326 wl1271_warning("cmd join to update channel "
1331 if (changed & IEEE80211_CONF_CHANGE_IDLE) {
1332 ret = wl1271_handle_idle(wl, conf->flags & IEEE80211_CONF_IDLE);
1334 wl1271_warning("idle mode change failed %d", ret);
1338 * if mac80211 changes the PSM mode, make sure the mode is not
1339 * incorrectly changed after the pspoll failure active window.
1341 if (changed & IEEE80211_CONF_CHANGE_PS)
1342 clear_bit(WL1271_FLAG_PSPOLL_FAILURE, &wl->flags);
1344 if (conf->flags & IEEE80211_CONF_PS &&
1345 !test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
1346 set_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
1349 * We enter PSM only if we're already associated.
1350 * If we're not, we'll enter it when joining an SSID,
1351 * through the bss_info_changed() hook.
1353 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags)) {
1354 wl1271_debug(DEBUG_PSM, "psm enabled");
1355 ret = wl1271_ps_set_mode(wl, STATION_POWER_SAVE_MODE,
1356 wl->basic_rate_set, true);
1358 } else if (!(conf->flags & IEEE80211_CONF_PS) &&
1359 test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
1360 wl1271_debug(DEBUG_PSM, "psm disabled");
1362 clear_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
1364 if (test_bit(WL1271_FLAG_PSM, &wl->flags))
1365 ret = wl1271_ps_set_mode(wl, STATION_ACTIVE_MODE,
1366 wl->basic_rate_set, true);
1369 if (conf->power_level != wl->power_level) {
1370 ret = wl1271_acx_tx_power(wl, conf->power_level);
1374 wl->power_level = conf->power_level;
1378 wl1271_ps_elp_sleep(wl);
1381 mutex_unlock(&wl->mutex);
1386 struct wl1271_filter_params {
1389 u8 mc_list[ACX_MC_ADDRESS_GROUP_MAX][ETH_ALEN];
1392 static u64 wl1271_op_prepare_multicast(struct ieee80211_hw *hw,
1393 struct netdev_hw_addr_list *mc_list)
1395 struct wl1271_filter_params *fp;
1396 struct netdev_hw_addr *ha;
1397 struct wl1271 *wl = hw->priv;
1399 if (unlikely(wl->state == WL1271_STATE_OFF))
1402 fp = kzalloc(sizeof(*fp), GFP_ATOMIC);
1404 wl1271_error("Out of memory setting filters.");
1408 /* update multicast filtering parameters */
1409 fp->mc_list_length = 0;
1410 if (netdev_hw_addr_list_count(mc_list) > ACX_MC_ADDRESS_GROUP_MAX) {
1411 fp->enabled = false;
1414 netdev_hw_addr_list_for_each(ha, mc_list) {
1415 memcpy(fp->mc_list[fp->mc_list_length],
1416 ha->addr, ETH_ALEN);
1417 fp->mc_list_length++;
1421 return (u64)(unsigned long)fp;
1424 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
1427 FIF_BCN_PRBRESP_PROMISC | \
1431 static void wl1271_op_configure_filter(struct ieee80211_hw *hw,
1432 unsigned int changed,
1433 unsigned int *total, u64 multicast)
1435 struct wl1271_filter_params *fp = (void *)(unsigned long)multicast;
1436 struct wl1271 *wl = hw->priv;
1439 wl1271_debug(DEBUG_MAC80211, "mac80211 configure filter");
1441 mutex_lock(&wl->mutex);
1443 *total &= WL1271_SUPPORTED_FILTERS;
1444 changed &= WL1271_SUPPORTED_FILTERS;
1446 if (unlikely(wl->state == WL1271_STATE_OFF))
1449 ret = wl1271_ps_elp_wakeup(wl, false);
1454 if (*total & FIF_ALLMULTI)
1455 ret = wl1271_acx_group_address_tbl(wl, false, NULL, 0);
1457 ret = wl1271_acx_group_address_tbl(wl, fp->enabled,
1459 fp->mc_list_length);
1463 /* determine, whether supported filter values have changed */
1467 /* configure filters */
1468 wl->filters = *total;
1469 wl1271_configure_filters(wl, 0);
1471 /* apply configured filters */
1472 ret = wl1271_acx_rx_config(wl, wl->rx_config, wl->rx_filter);
1477 wl1271_ps_elp_sleep(wl);
1480 mutex_unlock(&wl->mutex);
1484 static int wl1271_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
1485 struct ieee80211_vif *vif,
1486 struct ieee80211_sta *sta,
1487 struct ieee80211_key_conf *key_conf)
1489 struct wl1271 *wl = hw->priv;
1496 static const u8 bcast_addr[ETH_ALEN] =
1497 { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
1499 wl1271_debug(DEBUG_MAC80211, "mac80211 set key");
1501 addr = sta ? sta->addr : bcast_addr;
1503 wl1271_debug(DEBUG_CRYPT, "CMD: 0x%x", cmd);
1504 wl1271_dump(DEBUG_CRYPT, "ADDR: ", addr, ETH_ALEN);
1505 wl1271_debug(DEBUG_CRYPT, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
1506 key_conf->cipher, key_conf->keyidx,
1507 key_conf->keylen, key_conf->flags);
1508 wl1271_dump(DEBUG_CRYPT, "KEY: ", key_conf->key, key_conf->keylen);
1510 if (is_zero_ether_addr(addr)) {
1511 /* We dont support TX only encryption */
1516 mutex_lock(&wl->mutex);
1518 ret = wl1271_ps_elp_wakeup(wl, false);
1522 switch (key_conf->cipher) {
1523 case WLAN_CIPHER_SUITE_WEP40:
1524 case WLAN_CIPHER_SUITE_WEP104:
1527 key_conf->hw_key_idx = key_conf->keyidx;
1529 case WLAN_CIPHER_SUITE_TKIP:
1530 key_type = KEY_TKIP;
1532 key_conf->hw_key_idx = key_conf->keyidx;
1533 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
1534 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
1536 case WLAN_CIPHER_SUITE_CCMP:
1539 key_conf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
1540 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
1541 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
1544 wl1271_error("Unknown key algo 0x%x", key_conf->cipher);
1552 ret = wl1271_cmd_set_key(wl, KEY_ADD_OR_REPLACE,
1553 key_conf->keyidx, key_type,
1554 key_conf->keylen, key_conf->key,
1555 addr, tx_seq_32, tx_seq_16);
1557 wl1271_error("Could not add or replace key");
1561 /* the default WEP key needs to be configured at least once */
1562 if (key_type == KEY_WEP) {
1563 ret = wl1271_cmd_set_default_wep_key(wl,
1571 /* The wl1271 does not allow to remove unicast keys - they
1572 will be cleared automatically on next CMD_JOIN. Ignore the
1573 request silently, as we dont want the mac80211 to emit
1574 an error message. */
1575 if (!is_broadcast_ether_addr(addr))
1578 ret = wl1271_cmd_set_key(wl, KEY_REMOVE,
1579 key_conf->keyidx, key_type,
1580 key_conf->keylen, key_conf->key,
1583 wl1271_error("Could not remove key");
1589 wl1271_error("Unsupported key cmd 0x%x", cmd);
1595 wl1271_ps_elp_sleep(wl);
1598 mutex_unlock(&wl->mutex);
1604 static int wl1271_op_hw_scan(struct ieee80211_hw *hw,
1605 struct ieee80211_vif *vif,
1606 struct cfg80211_scan_request *req)
1608 struct wl1271 *wl = hw->priv;
1613 wl1271_debug(DEBUG_MAC80211, "mac80211 hw scan");
1616 ssid = req->ssids[0].ssid;
1617 len = req->ssids[0].ssid_len;
1620 mutex_lock(&wl->mutex);
1622 ret = wl1271_ps_elp_wakeup(wl, false);
1626 ret = wl1271_scan(hw->priv, ssid, len, req);
1628 wl1271_ps_elp_sleep(wl);
1631 mutex_unlock(&wl->mutex);
1636 static int wl1271_op_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
1638 struct wl1271 *wl = hw->priv;
1641 mutex_lock(&wl->mutex);
1643 if (unlikely(wl->state == WL1271_STATE_OFF))
1646 ret = wl1271_ps_elp_wakeup(wl, false);
1650 ret = wl1271_acx_rts_threshold(wl, (u16) value);
1652 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret);
1654 wl1271_ps_elp_sleep(wl);
1657 mutex_unlock(&wl->mutex);
1662 static void wl1271_ssid_set(struct wl1271 *wl, struct sk_buff *beacon)
1664 u8 *ptr = beacon->data +
1665 offsetof(struct ieee80211_mgmt, u.beacon.variable);
1667 /* find the location of the ssid in the beacon */
1668 while (ptr < beacon->data + beacon->len) {
1669 if (ptr[0] == WLAN_EID_SSID) {
1670 wl->ssid_len = ptr[1];
1671 memcpy(wl->ssid, ptr+2, wl->ssid_len);
1676 wl1271_error("ad-hoc beacon template has no SSID!\n");
1679 static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
1680 struct ieee80211_vif *vif,
1681 struct ieee80211_bss_conf *bss_conf,
1684 enum wl1271_cmd_ps_mode mode;
1685 struct wl1271 *wl = hw->priv;
1686 bool do_join = false;
1687 bool set_assoc = false;
1690 wl1271_debug(DEBUG_MAC80211, "mac80211 bss info changed");
1692 mutex_lock(&wl->mutex);
1694 ret = wl1271_ps_elp_wakeup(wl, false);
1698 if ((changed & BSS_CHANGED_BEACON_INT) &&
1699 (wl->bss_type == BSS_TYPE_IBSS)) {
1700 wl1271_debug(DEBUG_ADHOC, "ad-hoc beacon interval updated: %d",
1701 bss_conf->beacon_int);
1703 wl->beacon_int = bss_conf->beacon_int;
1707 if ((changed & BSS_CHANGED_BEACON) &&
1708 (wl->bss_type == BSS_TYPE_IBSS)) {
1709 struct sk_buff *beacon = ieee80211_beacon_get(hw, vif);
1711 wl1271_debug(DEBUG_ADHOC, "ad-hoc beacon updated");
1714 struct ieee80211_hdr *hdr;
1716 wl1271_ssid_set(wl, beacon);
1717 ret = wl1271_cmd_template_set(wl, CMD_TEMPL_BEACON,
1720 wl1271_min_rate_get(wl));
1723 dev_kfree_skb(beacon);
1727 hdr = (struct ieee80211_hdr *) beacon->data;
1728 hdr->frame_control = cpu_to_le16(
1729 IEEE80211_FTYPE_MGMT |
1730 IEEE80211_STYPE_PROBE_RESP);
1732 ret = wl1271_cmd_template_set(wl,
1733 CMD_TEMPL_PROBE_RESPONSE,
1736 wl1271_min_rate_get(wl));
1737 dev_kfree_skb(beacon);
1741 /* Need to update the SSID (for filtering etc) */
1746 if ((changed & BSS_CHANGED_BEACON_ENABLED) &&
1747 (wl->bss_type == BSS_TYPE_IBSS)) {
1748 wl1271_debug(DEBUG_ADHOC, "ad-hoc beaconing: %s",
1749 bss_conf->enable_beacon ? "enabled" : "disabled");
1751 if (bss_conf->enable_beacon)
1752 wl->set_bss_type = BSS_TYPE_IBSS;
1754 wl->set_bss_type = BSS_TYPE_STA_BSS;
1758 if (changed & BSS_CHANGED_CQM) {
1759 bool enable = false;
1760 if (bss_conf->cqm_rssi_thold)
1762 ret = wl1271_acx_rssi_snr_trigger(wl, enable,
1763 bss_conf->cqm_rssi_thold,
1764 bss_conf->cqm_rssi_hyst);
1767 wl->rssi_thold = bss_conf->cqm_rssi_thold;
1770 if ((changed & BSS_CHANGED_BSSID) &&
1772 * Now we know the correct bssid, so we send a new join command
1773 * and enable the BSSID filter
1775 memcmp(wl->bssid, bss_conf->bssid, ETH_ALEN)) {
1776 memcpy(wl->bssid, bss_conf->bssid, ETH_ALEN);
1778 ret = wl1271_cmd_build_null_data(wl);
1782 ret = wl1271_build_qos_null_data(wl);
1786 /* filter out all packets not from this BSSID */
1787 wl1271_configure_filters(wl, 0);
1789 /* Need to update the BSSID (for filtering etc) */
1793 if (changed & BSS_CHANGED_ASSOC) {
1794 if (bss_conf->assoc) {
1796 wl->aid = bss_conf->aid;
1799 wl->ps_poll_failures = 0;
1802 * use basic rates from AP, and determine lowest rate
1803 * to use with control frames.
1805 rates = bss_conf->basic_rates;
1806 wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl,
1808 wl->basic_rate = wl1271_min_rate_get(wl);
1809 ret = wl1271_acx_rate_policies(wl);
1814 * with wl1271, we don't need to update the
1815 * beacon_int and dtim_period, because the firmware
1816 * updates it by itself when the first beacon is
1817 * received after a join.
1819 ret = wl1271_cmd_build_ps_poll(wl, wl->aid);
1824 * The SSID is intentionally set to NULL here - the
1825 * firmware will set the probe request with a
1826 * broadcast SSID regardless of what we set in the
1829 ret = wl1271_cmd_build_probe_req(wl, NULL, 0,
1832 /* enable the connection monitoring feature */
1833 ret = wl1271_acx_conn_monit_params(wl, true);
1837 /* If we want to go in PSM but we're not there yet */
1838 if (test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags) &&
1839 !test_bit(WL1271_FLAG_PSM, &wl->flags)) {
1840 mode = STATION_POWER_SAVE_MODE;
1841 ret = wl1271_ps_set_mode(wl, mode,
1848 /* use defaults when not associated */
1849 clear_bit(WL1271_FLAG_STA_STATE_SENT, &wl->flags);
1850 clear_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
1853 /* re-enable dynamic ps - just in case */
1854 ieee80211_enable_dyn_ps(wl->vif);
1856 /* revert back to minimum rates for the current band */
1857 wl1271_set_band_rate(wl);
1858 wl->basic_rate = wl1271_min_rate_get(wl);
1859 ret = wl1271_acx_rate_policies(wl);
1863 /* disable connection monitor features */
1864 ret = wl1271_acx_conn_monit_params(wl, false);
1866 /* Disable the keep-alive feature */
1867 ret = wl1271_acx_keep_alive_mode(wl, false);
1875 if (changed & BSS_CHANGED_ERP_SLOT) {
1876 if (bss_conf->use_short_slot)
1877 ret = wl1271_acx_slot(wl, SLOT_TIME_SHORT);
1879 ret = wl1271_acx_slot(wl, SLOT_TIME_LONG);
1881 wl1271_warning("Set slot time failed %d", ret);
1886 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
1887 if (bss_conf->use_short_preamble)
1888 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_SHORT);
1890 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_LONG);
1893 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
1894 if (bss_conf->use_cts_prot)
1895 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_ENABLE);
1897 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_DISABLE);
1899 wl1271_warning("Set ctsprotect failed %d", ret);
1904 if (changed & BSS_CHANGED_ARP_FILTER) {
1905 __be32 addr = bss_conf->arp_addr_list[0];
1906 WARN_ON(wl->bss_type != BSS_TYPE_STA_BSS);
1908 if (bss_conf->arp_addr_cnt == 1 && bss_conf->arp_filter_enabled)
1909 ret = wl1271_acx_arp_ip_filter(wl, true, addr);
1911 ret = wl1271_acx_arp_ip_filter(wl, false, addr);
1918 ret = wl1271_join(wl, set_assoc);
1920 wl1271_warning("cmd join failed %d", ret);
1926 wl1271_ps_elp_sleep(wl);
1929 mutex_unlock(&wl->mutex);
1932 static int wl1271_op_conf_tx(struct ieee80211_hw *hw, u16 queue,
1933 const struct ieee80211_tx_queue_params *params)
1935 struct wl1271 *wl = hw->priv;
1939 mutex_lock(&wl->mutex);
1941 wl1271_debug(DEBUG_MAC80211, "mac80211 conf tx %d", queue);
1943 ret = wl1271_ps_elp_wakeup(wl, false);
1947 /* the txop is confed in units of 32us by the mac80211, we need us */
1948 ret = wl1271_acx_ac_cfg(wl, wl1271_tx_get_queue(queue),
1949 params->cw_min, params->cw_max,
1950 params->aifs, params->txop << 5);
1955 ps_scheme = CONF_PS_SCHEME_UPSD_TRIGGER;
1957 ps_scheme = CONF_PS_SCHEME_LEGACY;
1959 ret = wl1271_acx_tid_cfg(wl, wl1271_tx_get_queue(queue),
1960 CONF_CHANNEL_TYPE_EDCF,
1961 wl1271_tx_get_queue(queue),
1962 ps_scheme, CONF_ACK_POLICY_LEGACY, 0, 0);
1967 wl1271_ps_elp_sleep(wl);
1970 mutex_unlock(&wl->mutex);
1975 static u64 wl1271_op_get_tsf(struct ieee80211_hw *hw)
1978 struct wl1271 *wl = hw->priv;
1979 u64 mactime = ULLONG_MAX;
1982 wl1271_debug(DEBUG_MAC80211, "mac80211 get tsf");
1984 mutex_lock(&wl->mutex);
1986 ret = wl1271_ps_elp_wakeup(wl, false);
1990 ret = wl1271_acx_tsf_info(wl, &mactime);
1995 wl1271_ps_elp_sleep(wl);
1998 mutex_unlock(&wl->mutex);
2002 static int wl1271_op_get_survey(struct ieee80211_hw *hw, int idx,
2003 struct survey_info *survey)
2005 struct wl1271 *wl = hw->priv;
2006 struct ieee80211_conf *conf = &hw->conf;
2011 survey->channel = conf->channel;
2012 survey->filled = SURVEY_INFO_NOISE_DBM;
2013 survey->noise = wl->noise;
2018 /* can't be const, mac80211 writes to this */
2019 static struct ieee80211_rate wl1271_rates[] = {
2021 .hw_value = CONF_HW_BIT_RATE_1MBPS,
2022 .hw_value_short = CONF_HW_BIT_RATE_1MBPS, },
2024 .hw_value = CONF_HW_BIT_RATE_2MBPS,
2025 .hw_value_short = CONF_HW_BIT_RATE_2MBPS,
2026 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
2028 .hw_value = CONF_HW_BIT_RATE_5_5MBPS,
2029 .hw_value_short = CONF_HW_BIT_RATE_5_5MBPS,
2030 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
2032 .hw_value = CONF_HW_BIT_RATE_11MBPS,
2033 .hw_value_short = CONF_HW_BIT_RATE_11MBPS,
2034 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
2036 .hw_value = CONF_HW_BIT_RATE_6MBPS,
2037 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
2039 .hw_value = CONF_HW_BIT_RATE_9MBPS,
2040 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
2042 .hw_value = CONF_HW_BIT_RATE_12MBPS,
2043 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
2045 .hw_value = CONF_HW_BIT_RATE_18MBPS,
2046 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
2048 .hw_value = CONF_HW_BIT_RATE_24MBPS,
2049 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
2051 .hw_value = CONF_HW_BIT_RATE_36MBPS,
2052 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
2054 .hw_value = CONF_HW_BIT_RATE_48MBPS,
2055 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
2057 .hw_value = CONF_HW_BIT_RATE_54MBPS,
2058 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
2062 * Can't be const, mac80211 writes to this. The order of the channels here
2063 * is designed to improve scanning.
2065 static struct ieee80211_channel wl1271_channels[] = {
2066 { .hw_value = 1, .center_freq = 2412, .max_power = 25 },
2067 { .hw_value = 5, .center_freq = 2432, .max_power = 25 },
2068 { .hw_value = 9, .center_freq = 2452, .max_power = 25 },
2069 { .hw_value = 13, .center_freq = 2472, .max_power = 25 },
2070 { .hw_value = 4, .center_freq = 2427, .max_power = 25 },
2071 { .hw_value = 8, .center_freq = 2447, .max_power = 25 },
2072 { .hw_value = 12, .center_freq = 2467, .max_power = 25 },
2073 { .hw_value = 3, .center_freq = 2422, .max_power = 25 },
2074 { .hw_value = 7, .center_freq = 2442, .max_power = 25 },
2075 { .hw_value = 11, .center_freq = 2462, .max_power = 25 },
2076 { .hw_value = 2, .center_freq = 2417, .max_power = 25 },
2077 { .hw_value = 6, .center_freq = 2437, .max_power = 25 },
2078 { .hw_value = 10, .center_freq = 2457, .max_power = 25 },
2081 /* mapping to indexes for wl1271_rates */
2082 static const u8 wl1271_rate_to_idx_2ghz[] = {
2083 /* MCS rates are used only with 11n */
2084 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS7 */
2085 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS6 */
2086 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS5 */
2087 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS4 */
2088 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS3 */
2089 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS2 */
2090 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS1 */
2091 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS0 */
2093 11, /* CONF_HW_RXTX_RATE_54 */
2094 10, /* CONF_HW_RXTX_RATE_48 */
2095 9, /* CONF_HW_RXTX_RATE_36 */
2096 8, /* CONF_HW_RXTX_RATE_24 */
2098 /* TI-specific rate */
2099 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
2101 7, /* CONF_HW_RXTX_RATE_18 */
2102 6, /* CONF_HW_RXTX_RATE_12 */
2103 3, /* CONF_HW_RXTX_RATE_11 */
2104 5, /* CONF_HW_RXTX_RATE_9 */
2105 4, /* CONF_HW_RXTX_RATE_6 */
2106 2, /* CONF_HW_RXTX_RATE_5_5 */
2107 1, /* CONF_HW_RXTX_RATE_2 */
2108 0 /* CONF_HW_RXTX_RATE_1 */
2111 /* can't be const, mac80211 writes to this */
2112 static struct ieee80211_supported_band wl1271_band_2ghz = {
2113 .channels = wl1271_channels,
2114 .n_channels = ARRAY_SIZE(wl1271_channels),
2115 .bitrates = wl1271_rates,
2116 .n_bitrates = ARRAY_SIZE(wl1271_rates),
2119 /* 5 GHz data rates for WL1273 */
2120 static struct ieee80211_rate wl1271_rates_5ghz[] = {
2122 .hw_value = CONF_HW_BIT_RATE_6MBPS,
2123 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
2125 .hw_value = CONF_HW_BIT_RATE_9MBPS,
2126 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
2128 .hw_value = CONF_HW_BIT_RATE_12MBPS,
2129 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
2131 .hw_value = CONF_HW_BIT_RATE_18MBPS,
2132 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
2134 .hw_value = CONF_HW_BIT_RATE_24MBPS,
2135 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
2137 .hw_value = CONF_HW_BIT_RATE_36MBPS,
2138 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
2140 .hw_value = CONF_HW_BIT_RATE_48MBPS,
2141 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
2143 .hw_value = CONF_HW_BIT_RATE_54MBPS,
2144 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
2148 * 5 GHz band channels for WL1273 - can't be const, mac80211 writes to this.
2149 * The order of the channels here is designed to improve scanning.
2151 static struct ieee80211_channel wl1271_channels_5ghz[] = {
2152 { .hw_value = 183, .center_freq = 4915},
2153 { .hw_value = 188, .center_freq = 4940},
2154 { .hw_value = 8, .center_freq = 5040},
2155 { .hw_value = 34, .center_freq = 5170},
2156 { .hw_value = 44, .center_freq = 5220},
2157 { .hw_value = 60, .center_freq = 5300},
2158 { .hw_value = 112, .center_freq = 5560},
2159 { .hw_value = 132, .center_freq = 5660},
2160 { .hw_value = 157, .center_freq = 5785},
2161 { .hw_value = 184, .center_freq = 4920},
2162 { .hw_value = 189, .center_freq = 4945},
2163 { .hw_value = 9, .center_freq = 5045},
2164 { .hw_value = 36, .center_freq = 5180},
2165 { .hw_value = 46, .center_freq = 5230},
2166 { .hw_value = 64, .center_freq = 5320},
2167 { .hw_value = 116, .center_freq = 5580},
2168 { .hw_value = 136, .center_freq = 5680},
2169 { .hw_value = 192, .center_freq = 4960},
2170 { .hw_value = 11, .center_freq = 5055},
2171 { .hw_value = 38, .center_freq = 5190},
2172 { .hw_value = 48, .center_freq = 5240},
2173 { .hw_value = 100, .center_freq = 5500},
2174 { .hw_value = 120, .center_freq = 5600},
2175 { .hw_value = 140, .center_freq = 5700},
2176 { .hw_value = 185, .center_freq = 4925},
2177 { .hw_value = 196, .center_freq = 4980},
2178 { .hw_value = 12, .center_freq = 5060},
2179 { .hw_value = 40, .center_freq = 5200},
2180 { .hw_value = 52, .center_freq = 5260},
2181 { .hw_value = 104, .center_freq = 5520},
2182 { .hw_value = 124, .center_freq = 5620},
2183 { .hw_value = 149, .center_freq = 5745},
2184 { .hw_value = 161, .center_freq = 5805},
2185 { .hw_value = 187, .center_freq = 4935},
2186 { .hw_value = 7, .center_freq = 5035},
2187 { .hw_value = 16, .center_freq = 5080},
2188 { .hw_value = 42, .center_freq = 5210},
2189 { .hw_value = 56, .center_freq = 5280},
2190 { .hw_value = 108, .center_freq = 5540},
2191 { .hw_value = 128, .center_freq = 5640},
2192 { .hw_value = 153, .center_freq = 5765},
2193 { .hw_value = 165, .center_freq = 5825},
2196 /* mapping to indexes for wl1271_rates_5ghz */
2197 static const u8 wl1271_rate_to_idx_5ghz[] = {
2198 /* MCS rates are used only with 11n */
2199 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS7 */
2200 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS6 */
2201 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS5 */
2202 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS4 */
2203 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS3 */
2204 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS2 */
2205 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS1 */
2206 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS0 */
2208 7, /* CONF_HW_RXTX_RATE_54 */
2209 6, /* CONF_HW_RXTX_RATE_48 */
2210 5, /* CONF_HW_RXTX_RATE_36 */
2211 4, /* CONF_HW_RXTX_RATE_24 */
2213 /* TI-specific rate */
2214 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
2216 3, /* CONF_HW_RXTX_RATE_18 */
2217 2, /* CONF_HW_RXTX_RATE_12 */
2218 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_11 */
2219 1, /* CONF_HW_RXTX_RATE_9 */
2220 0, /* CONF_HW_RXTX_RATE_6 */
2221 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_5_5 */
2222 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_2 */
2223 CONF_HW_RXTX_RATE_UNSUPPORTED /* CONF_HW_RXTX_RATE_1 */
2226 static struct ieee80211_supported_band wl1271_band_5ghz = {
2227 .channels = wl1271_channels_5ghz,
2228 .n_channels = ARRAY_SIZE(wl1271_channels_5ghz),
2229 .bitrates = wl1271_rates_5ghz,
2230 .n_bitrates = ARRAY_SIZE(wl1271_rates_5ghz),
2233 static const u8 *wl1271_band_rate_to_idx[] = {
2234 [IEEE80211_BAND_2GHZ] = wl1271_rate_to_idx_2ghz,
2235 [IEEE80211_BAND_5GHZ] = wl1271_rate_to_idx_5ghz
2238 static const struct ieee80211_ops wl1271_ops = {
2239 .start = wl1271_op_start,
2240 .stop = wl1271_op_stop,
2241 .add_interface = wl1271_op_add_interface,
2242 .remove_interface = wl1271_op_remove_interface,
2243 .config = wl1271_op_config,
2244 .prepare_multicast = wl1271_op_prepare_multicast,
2245 .configure_filter = wl1271_op_configure_filter,
2247 .set_key = wl1271_op_set_key,
2248 .hw_scan = wl1271_op_hw_scan,
2249 .bss_info_changed = wl1271_op_bss_info_changed,
2250 .set_rts_threshold = wl1271_op_set_rts_threshold,
2251 .conf_tx = wl1271_op_conf_tx,
2252 .get_tsf = wl1271_op_get_tsf,
2253 .get_survey = wl1271_op_get_survey,
2254 CFG80211_TESTMODE_CMD(wl1271_tm_cmd)
2258 u8 wl1271_rate_to_idx(struct wl1271 *wl, int rate)
2262 BUG_ON(wl->band >= sizeof(wl1271_band_rate_to_idx)/sizeof(u8 *));
2264 if (unlikely(rate >= CONF_HW_RXTX_RATE_MAX)) {
2265 wl1271_error("Illegal RX rate from HW: %d", rate);
2269 idx = wl1271_band_rate_to_idx[wl->band][rate];
2270 if (unlikely(idx == CONF_HW_RXTX_RATE_UNSUPPORTED)) {
2271 wl1271_error("Unsupported RX rate from HW: %d", rate);
2278 static ssize_t wl1271_sysfs_show_bt_coex_state(struct device *dev,
2279 struct device_attribute *attr,
2282 struct wl1271 *wl = dev_get_drvdata(dev);
2287 mutex_lock(&wl->mutex);
2288 len = snprintf(buf, len, "%d\n\n0 - off\n1 - on\n",
2290 mutex_unlock(&wl->mutex);
2296 static ssize_t wl1271_sysfs_store_bt_coex_state(struct device *dev,
2297 struct device_attribute *attr,
2298 const char *buf, size_t count)
2300 struct wl1271 *wl = dev_get_drvdata(dev);
2304 ret = strict_strtoul(buf, 10, &res);
2307 wl1271_warning("incorrect value written to bt_coex_mode");
2311 mutex_lock(&wl->mutex);
2315 if (res == wl->sg_enabled)
2318 wl->sg_enabled = res;
2320 if (wl->state == WL1271_STATE_OFF)
2323 ret = wl1271_ps_elp_wakeup(wl, false);
2327 wl1271_acx_sg_enable(wl, wl->sg_enabled);
2328 wl1271_ps_elp_sleep(wl);
2331 mutex_unlock(&wl->mutex);
2335 static DEVICE_ATTR(bt_coex_state, S_IRUGO | S_IWUSR,
2336 wl1271_sysfs_show_bt_coex_state,
2337 wl1271_sysfs_store_bt_coex_state);
2339 static ssize_t wl1271_sysfs_show_hw_pg_ver(struct device *dev,
2340 struct device_attribute *attr,
2343 struct wl1271 *wl = dev_get_drvdata(dev);
2348 mutex_lock(&wl->mutex);
2349 if (wl->hw_pg_ver >= 0)
2350 len = snprintf(buf, len, "%d\n", wl->hw_pg_ver);
2352 len = snprintf(buf, len, "n/a\n");
2353 mutex_unlock(&wl->mutex);
2358 static DEVICE_ATTR(hw_pg_ver, S_IRUGO | S_IWUSR,
2359 wl1271_sysfs_show_hw_pg_ver, NULL);
2361 int wl1271_register_hw(struct wl1271 *wl)
2365 if (wl->mac80211_registered)
2368 SET_IEEE80211_PERM_ADDR(wl->hw, wl->mac_addr);
2370 ret = ieee80211_register_hw(wl->hw);
2372 wl1271_error("unable to register mac80211 hw: %d", ret);
2376 wl->mac80211_registered = true;
2378 register_netdevice_notifier(&wl1271_dev_notifier);
2380 wl1271_notice("loaded");
2384 EXPORT_SYMBOL_GPL(wl1271_register_hw);
2386 void wl1271_unregister_hw(struct wl1271 *wl)
2388 unregister_netdevice_notifier(&wl1271_dev_notifier);
2389 ieee80211_unregister_hw(wl->hw);
2390 wl->mac80211_registered = false;
2393 EXPORT_SYMBOL_GPL(wl1271_unregister_hw);
2395 int wl1271_init_ieee80211(struct wl1271 *wl)
2397 /* The tx descriptor buffer and the TKIP space. */
2398 wl->hw->extra_tx_headroom = WL1271_TKIP_IV_SPACE +
2399 sizeof(struct wl1271_tx_hw_descr);
2402 /* FIXME: find a proper value */
2403 wl->hw->channel_change_time = 10000;
2404 wl->hw->max_listen_interval = wl->conf.conn.max_listen_interval;
2406 wl->hw->flags = IEEE80211_HW_SIGNAL_DBM |
2407 IEEE80211_HW_BEACON_FILTER |
2408 IEEE80211_HW_SUPPORTS_PS |
2409 IEEE80211_HW_SUPPORTS_UAPSD |
2410 IEEE80211_HW_HAS_RATE_CONTROL |
2411 IEEE80211_HW_CONNECTION_MONITOR |
2412 IEEE80211_HW_SUPPORTS_CQM_RSSI;
2414 wl->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
2415 BIT(NL80211_IFTYPE_ADHOC);
2416 wl->hw->wiphy->max_scan_ssids = 1;
2417 wl->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = &wl1271_band_2ghz;
2418 wl->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = &wl1271_band_5ghz;
2421 wl->hw->max_rates = 1;
2423 SET_IEEE80211_DEV(wl->hw, wl1271_wl_to_dev(wl));
2427 EXPORT_SYMBOL_GPL(wl1271_init_ieee80211);
2429 #define WL1271_DEFAULT_CHANNEL 0
2431 struct ieee80211_hw *wl1271_alloc_hw(void)
2433 struct ieee80211_hw *hw;
2434 struct platform_device *plat_dev = NULL;
2438 hw = ieee80211_alloc_hw(sizeof(*wl), &wl1271_ops);
2440 wl1271_error("could not alloc ieee80211_hw");
2445 plat_dev = kmemdup(&wl1271_device, sizeof(wl1271_device), GFP_KERNEL);
2447 wl1271_error("could not allocate platform_device");
2449 goto err_plat_alloc;
2453 memset(wl, 0, sizeof(*wl));
2455 INIT_LIST_HEAD(&wl->list);
2458 wl->plat_dev = plat_dev;
2460 skb_queue_head_init(&wl->tx_queue);
2462 INIT_DELAYED_WORK(&wl->elp_work, wl1271_elp_work);
2463 INIT_DELAYED_WORK(&wl->pspoll_work, wl1271_pspoll_work);
2464 wl->channel = WL1271_DEFAULT_CHANNEL;
2465 wl->beacon_int = WL1271_DEFAULT_BEACON_INT;
2466 wl->default_key = 0;
2468 wl->rx_config = WL1271_DEFAULT_RX_CONFIG;
2469 wl->rx_filter = WL1271_DEFAULT_RX_FILTER;
2470 wl->psm_entry_retry = 0;
2471 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
2472 wl->basic_rate_set = CONF_TX_RATE_MASK_BASIC;
2473 wl->basic_rate = CONF_TX_RATE_MASK_BASIC;
2474 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
2475 wl->sta_rate_set = 0;
2476 wl->band = IEEE80211_BAND_2GHZ;
2479 wl->sg_enabled = true;
2482 for (i = 0; i < ACX_TX_DESCRIPTORS; i++)
2483 wl->tx_frames[i] = NULL;
2485 spin_lock_init(&wl->wl_lock);
2487 wl->state = WL1271_STATE_OFF;
2488 mutex_init(&wl->mutex);
2490 /* Apply default driver configuration. */
2491 wl1271_conf_init(wl);
2493 wl1271_debugfs_init(wl);
2495 /* Register platform device */
2496 ret = platform_device_register(wl->plat_dev);
2498 wl1271_error("couldn't register platform device");
2501 dev_set_drvdata(&wl->plat_dev->dev, wl);
2503 /* Create sysfs file to control bt coex state */
2504 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
2506 wl1271_error("failed to create sysfs file bt_coex_state");
2510 /* Create sysfs file to get HW PG version */
2511 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_hw_pg_ver);
2513 wl1271_error("failed to create sysfs file hw_pg_ver");
2514 goto err_bt_coex_state;
2520 device_remove_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
2523 platform_device_unregister(wl->plat_dev);
2526 wl1271_debugfs_exit(wl);
2530 ieee80211_free_hw(hw);
2534 return ERR_PTR(ret);
2536 EXPORT_SYMBOL_GPL(wl1271_alloc_hw);
2538 int wl1271_free_hw(struct wl1271 *wl)
2540 platform_device_unregister(wl->plat_dev);
2541 kfree(wl->plat_dev);
2543 wl1271_debugfs_exit(wl);
2550 kfree(wl->fw_status);
2551 kfree(wl->tx_res_if);
2553 ieee80211_free_hw(wl->hw);
2557 EXPORT_SYMBOL_GPL(wl1271_free_hw);
2559 MODULE_LICENSE("GPL");
2560 MODULE_AUTHOR("Luciano Coelho <luciano.coelho@nokia.com>");
2561 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");