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,
246 .tx_per_channel_power_compensation_2 = {
247 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
249 .tx_per_channel_power_compensation_5 = {
250 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
251 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
252 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
257 static void __wl1271_op_remove_interface(struct wl1271 *wl);
260 static void wl1271_device_release(struct device *dev)
265 static struct platform_device wl1271_device = {
269 /* device model insists to have a release function */
271 .release = wl1271_device_release,
275 static LIST_HEAD(wl_list);
277 static int wl1271_dev_notify(struct notifier_block *me, unsigned long what,
280 struct net_device *dev = arg;
281 struct wireless_dev *wdev;
283 struct ieee80211_hw *hw;
285 struct wl1271 *wl_temp;
288 /* Check that this notification is for us. */
289 if (what != NETDEV_CHANGE)
292 wdev = dev->ieee80211_ptr;
300 hw = wiphy_priv(wiphy);
305 list_for_each_entry(wl, &wl_list, list) {
312 mutex_lock(&wl->mutex);
314 if (wl->state == WL1271_STATE_OFF)
317 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
320 ret = wl1271_ps_elp_wakeup(wl, false);
324 if ((dev->operstate == IF_OPER_UP) &&
325 !test_and_set_bit(WL1271_FLAG_STA_STATE_SENT, &wl->flags)) {
326 wl1271_cmd_set_sta_state(wl);
327 wl1271_info("Association completed.");
330 wl1271_ps_elp_sleep(wl);
333 mutex_unlock(&wl->mutex);
338 static void wl1271_conf_init(struct wl1271 *wl)
342 * This function applies the default configuration to the driver. This
343 * function is invoked upon driver load (spi probe.)
345 * The configuration is stored in a run-time structure in order to
346 * facilitate for run-time adjustment of any of the parameters. Making
347 * changes to the configuration structure will apply the new values on
348 * the next interface up (wl1271_op_start.)
351 /* apply driver default configuration */
352 memcpy(&wl->conf, &default_conf, sizeof(default_conf));
356 static int wl1271_plt_init(struct wl1271 *wl)
358 struct conf_tx_ac_category *conf_ac;
359 struct conf_tx_tid *conf_tid;
362 ret = wl1271_cmd_general_parms(wl);
366 ret = wl1271_cmd_radio_parms(wl);
370 ret = wl1271_cmd_ext_radio_parms(wl);
374 ret = wl1271_init_templates_config(wl);
378 ret = wl1271_acx_init_mem_config(wl);
382 /* PHY layer config */
383 ret = wl1271_init_phy_config(wl);
385 goto out_free_memmap;
387 ret = wl1271_acx_dco_itrim_params(wl);
389 goto out_free_memmap;
391 /* Initialize connection monitoring thresholds */
392 ret = wl1271_acx_conn_monit_params(wl, false);
394 goto out_free_memmap;
396 /* Bluetooth WLAN coexistence */
397 ret = wl1271_init_pta(wl);
399 goto out_free_memmap;
401 /* Energy detection */
402 ret = wl1271_init_energy_detection(wl);
404 goto out_free_memmap;
406 /* Default fragmentation threshold */
407 ret = wl1271_acx_frag_threshold(wl);
409 goto out_free_memmap;
411 /* Default TID/AC configuration */
412 BUG_ON(wl->conf.tx.tid_conf_count != wl->conf.tx.ac_conf_count);
413 for (i = 0; i < wl->conf.tx.tid_conf_count; i++) {
414 conf_ac = &wl->conf.tx.ac_conf[i];
415 ret = wl1271_acx_ac_cfg(wl, conf_ac->ac, conf_ac->cw_min,
416 conf_ac->cw_max, conf_ac->aifsn,
417 conf_ac->tx_op_limit);
419 goto out_free_memmap;
421 conf_tid = &wl->conf.tx.tid_conf[i];
422 ret = wl1271_acx_tid_cfg(wl, conf_tid->queue_id,
423 conf_tid->channel_type,
426 conf_tid->ack_policy,
427 conf_tid->apsd_conf[0],
428 conf_tid->apsd_conf[1]);
430 goto out_free_memmap;
433 /* Enable data path */
434 ret = wl1271_cmd_data_path(wl, 1);
436 goto out_free_memmap;
438 /* Configure for CAM power saving (ie. always active) */
439 ret = wl1271_acx_sleep_auth(wl, WL1271_PSM_CAM);
441 goto out_free_memmap;
444 ret = wl1271_acx_pm_config(wl);
446 goto out_free_memmap;
451 kfree(wl->target_mem_map);
452 wl->target_mem_map = NULL;
457 static void wl1271_fw_status(struct wl1271 *wl,
458 struct wl1271_fw_status *status)
464 wl1271_raw_read(wl, FW_STATUS_ADDR, status, sizeof(*status), false);
466 wl1271_debug(DEBUG_IRQ, "intr: 0x%x (fw_rx_counter = %d, "
467 "drv_rx_counter = %d, tx_results_counter = %d)",
469 status->fw_rx_counter,
470 status->drv_rx_counter,
471 status->tx_results_counter);
473 /* update number of available TX blocks */
474 for (i = 0; i < NUM_TX_QUEUES; i++) {
475 u32 cnt = le32_to_cpu(status->tx_released_blks[i]) -
476 wl->tx_blocks_freed[i];
478 wl->tx_blocks_freed[i] =
479 le32_to_cpu(status->tx_released_blks[i]);
480 wl->tx_blocks_available += cnt;
484 /* if more blocks are available now, tx work can be scheduled */
486 clear_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags);
488 /* update the host-chipset time offset */
490 wl->time_offset = (timespec_to_ns(&ts) >> 10) -
491 (s64)le32_to_cpu(status->fw_localtime);
494 #define WL1271_IRQ_MAX_LOOPS 10
496 static void wl1271_irq_work(struct work_struct *work)
500 int loopcount = WL1271_IRQ_MAX_LOOPS;
503 container_of(work, struct wl1271, irq_work);
505 mutex_lock(&wl->mutex);
507 wl1271_debug(DEBUG_IRQ, "IRQ work");
509 if (unlikely(wl->state == WL1271_STATE_OFF))
512 ret = wl1271_ps_elp_wakeup(wl, true);
516 spin_lock_irqsave(&wl->wl_lock, flags);
517 while (test_bit(WL1271_FLAG_IRQ_PENDING, &wl->flags) && loopcount) {
518 clear_bit(WL1271_FLAG_IRQ_PENDING, &wl->flags);
519 spin_unlock_irqrestore(&wl->wl_lock, flags);
522 wl1271_fw_status(wl, wl->fw_status);
523 intr = le32_to_cpu(wl->fw_status->intr);
525 wl1271_debug(DEBUG_IRQ, "Zero interrupt received.");
526 spin_lock_irqsave(&wl->wl_lock, flags);
530 intr &= WL1271_INTR_MASK;
532 if (intr & WL1271_ACX_INTR_DATA) {
533 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_DATA");
535 /* check for tx results */
536 if (wl->fw_status->tx_results_counter !=
537 (wl->tx_results_count & 0xff))
538 wl1271_tx_complete(wl);
540 /* Check if any tx blocks were freed */
541 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags) &&
542 !skb_queue_empty(&wl->tx_queue)) {
544 * In order to avoid starvation of the TX path,
545 * call the work function directly.
547 wl1271_tx_work_locked(wl);
550 wl1271_rx(wl, wl->fw_status);
553 if (intr & WL1271_ACX_INTR_EVENT_A) {
554 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_A");
555 wl1271_event_handle(wl, 0);
558 if (intr & WL1271_ACX_INTR_EVENT_B) {
559 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_B");
560 wl1271_event_handle(wl, 1);
563 if (intr & WL1271_ACX_INTR_INIT_COMPLETE)
564 wl1271_debug(DEBUG_IRQ,
565 "WL1271_ACX_INTR_INIT_COMPLETE");
567 if (intr & WL1271_ACX_INTR_HW_AVAILABLE)
568 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_HW_AVAILABLE");
570 spin_lock_irqsave(&wl->wl_lock, flags);
573 if (test_bit(WL1271_FLAG_IRQ_PENDING, &wl->flags))
574 ieee80211_queue_work(wl->hw, &wl->irq_work);
576 clear_bit(WL1271_FLAG_IRQ_RUNNING, &wl->flags);
577 spin_unlock_irqrestore(&wl->wl_lock, flags);
579 wl1271_ps_elp_sleep(wl);
582 mutex_unlock(&wl->mutex);
585 static int wl1271_fetch_firmware(struct wl1271 *wl)
587 const struct firmware *fw;
590 ret = request_firmware(&fw, WL1271_FW_NAME, wl1271_wl_to_dev(wl));
593 wl1271_error("could not get firmware: %d", ret);
598 wl1271_error("firmware size is not multiple of 32 bits: %zu",
604 wl->fw_len = fw->size;
605 wl->fw = vmalloc(wl->fw_len);
608 wl1271_error("could not allocate memory for the firmware");
613 memcpy(wl->fw, fw->data, wl->fw_len);
618 release_firmware(fw);
623 static int wl1271_fetch_nvs(struct wl1271 *wl)
625 const struct firmware *fw;
628 ret = request_firmware(&fw, WL1271_NVS_NAME, wl1271_wl_to_dev(wl));
631 wl1271_error("could not get nvs file: %d", ret);
635 wl->nvs = kmemdup(fw->data, sizeof(struct wl1271_nvs_file), GFP_KERNEL);
638 wl1271_error("could not allocate memory for the nvs file");
643 wl->nvs_len = fw->size;
646 release_firmware(fw);
651 static void wl1271_recovery_work(struct work_struct *work)
654 container_of(work, struct wl1271, recovery_work);
656 mutex_lock(&wl->mutex);
658 if (wl->state != WL1271_STATE_ON)
661 wl1271_info("Hardware recovery in progress.");
663 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
664 ieee80211_connection_loss(wl->vif);
666 /* reboot the chipset */
667 __wl1271_op_remove_interface(wl);
668 ieee80211_restart_hw(wl->hw);
671 mutex_unlock(&wl->mutex);
674 static void wl1271_fw_wakeup(struct wl1271 *wl)
678 elp_reg = ELPCTRL_WAKE_UP;
679 wl1271_raw_write32(wl, HW_ACCESS_ELP_CTRL_REG_ADDR, elp_reg);
682 static int wl1271_setup(struct wl1271 *wl)
684 wl->fw_status = kmalloc(sizeof(*wl->fw_status), GFP_KERNEL);
688 wl->tx_res_if = kmalloc(sizeof(*wl->tx_res_if), GFP_KERNEL);
689 if (!wl->tx_res_if) {
690 kfree(wl->fw_status);
697 static int wl1271_chip_wakeup(struct wl1271 *wl)
699 struct wl1271_partition_set partition;
702 msleep(WL1271_PRE_POWER_ON_SLEEP);
703 ret = wl1271_power_on(wl);
706 msleep(WL1271_POWER_ON_SLEEP);
710 /* We don't need a real memory partition here, because we only want
711 * to use the registers at this point. */
712 memset(&partition, 0, sizeof(partition));
713 partition.reg.start = REGISTERS_BASE;
714 partition.reg.size = REGISTERS_DOWN_SIZE;
715 wl1271_set_partition(wl, &partition);
717 /* ELP module wake up */
718 wl1271_fw_wakeup(wl);
720 /* whal_FwCtrl_BootSm() */
722 /* 0. read chip id from CHIP_ID */
723 wl->chip.id = wl1271_read32(wl, CHIP_ID_B);
725 /* 1. check if chip id is valid */
727 switch (wl->chip.id) {
728 case CHIP_ID_1271_PG10:
729 wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
732 ret = wl1271_setup(wl);
736 case CHIP_ID_1271_PG20:
737 wl1271_debug(DEBUG_BOOT, "chip id 0x%x (1271 PG20)",
740 ret = wl1271_setup(wl);
745 wl1271_warning("unsupported chip id: 0x%x", wl->chip.id);
750 if (wl->fw == NULL) {
751 ret = wl1271_fetch_firmware(wl);
756 /* No NVS from netlink, try to get it from the filesystem */
757 if (wl->nvs == NULL) {
758 ret = wl1271_fetch_nvs(wl);
767 int wl1271_plt_start(struct wl1271 *wl)
769 int retries = WL1271_BOOT_RETRIES;
772 mutex_lock(&wl->mutex);
774 wl1271_notice("power up");
776 if (wl->state != WL1271_STATE_OFF) {
777 wl1271_error("cannot go into PLT state because not "
778 "in off state: %d", wl->state);
785 ret = wl1271_chip_wakeup(wl);
789 ret = wl1271_boot(wl);
793 ret = wl1271_plt_init(wl);
797 wl->state = WL1271_STATE_PLT;
798 wl1271_notice("firmware booted in PLT mode (%s)",
803 wl1271_disable_interrupts(wl);
804 mutex_unlock(&wl->mutex);
805 /* Unlocking the mutex in the middle of handling is
806 inherently unsafe. In this case we deem it safe to do,
807 because we need to let any possibly pending IRQ out of
808 the system (and while we are WL1271_STATE_OFF the IRQ
809 work function will not do anything.) Also, any other
810 possible concurrent operations will fail due to the
811 current state, hence the wl1271 struct should be safe. */
812 cancel_work_sync(&wl->irq_work);
813 mutex_lock(&wl->mutex);
815 wl1271_power_off(wl);
818 wl1271_error("firmware boot in PLT mode failed despite %d retries",
819 WL1271_BOOT_RETRIES);
821 mutex_unlock(&wl->mutex);
826 int wl1271_plt_stop(struct wl1271 *wl)
830 mutex_lock(&wl->mutex);
832 wl1271_notice("power down");
834 if (wl->state != WL1271_STATE_PLT) {
835 wl1271_error("cannot power down because not in PLT "
836 "state: %d", wl->state);
841 wl1271_disable_interrupts(wl);
842 wl1271_power_off(wl);
844 wl->state = WL1271_STATE_OFF;
848 mutex_unlock(&wl->mutex);
850 cancel_work_sync(&wl->irq_work);
851 cancel_work_sync(&wl->recovery_work);
856 static int wl1271_op_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
858 struct wl1271 *wl = hw->priv;
859 struct ieee80211_conf *conf = &hw->conf;
860 struct ieee80211_tx_info *txinfo = IEEE80211_SKB_CB(skb);
861 struct ieee80211_sta *sta = txinfo->control.sta;
865 * peek into the rates configured in the STA entry.
866 * The rates set after connection stage, The first block only BG sets:
867 * the compare is for bit 0-16 of sta_rate_set. The second block add
868 * HT rates in case of HT supported.
870 spin_lock_irqsave(&wl->wl_lock, flags);
872 (sta->supp_rates[conf->channel->band] !=
873 (wl->sta_rate_set & HW_BG_RATES_MASK))) {
874 wl->sta_rate_set = sta->supp_rates[conf->channel->band];
875 set_bit(WL1271_FLAG_STA_RATES_CHANGED, &wl->flags);
878 #ifdef CONFIG_WL1271_HT
880 sta->ht_cap.ht_supported &&
881 ((wl->sta_rate_set >> HW_HT_RATES_OFFSET) !=
882 sta->ht_cap.mcs.rx_mask[0])) {
883 /* Clean MCS bits before setting them */
884 wl->sta_rate_set &= HW_BG_RATES_MASK;
886 (sta->ht_cap.mcs.rx_mask[0] << HW_HT_RATES_OFFSET);
887 set_bit(WL1271_FLAG_STA_RATES_CHANGED, &wl->flags);
890 spin_unlock_irqrestore(&wl->wl_lock, flags);
892 /* queue the packet */
893 skb_queue_tail(&wl->tx_queue, skb);
896 * The chip specific setup must run before the first TX packet -
897 * before that, the tx_work will not be initialized!
900 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags))
901 ieee80211_queue_work(wl->hw, &wl->tx_work);
904 * The workqueue is slow to process the tx_queue and we need stop
905 * the queue here, otherwise the queue will get too long.
907 if (skb_queue_len(&wl->tx_queue) >= WL1271_TX_QUEUE_HIGH_WATERMARK) {
908 wl1271_debug(DEBUG_TX, "op_tx: stopping queues");
910 spin_lock_irqsave(&wl->wl_lock, flags);
911 ieee80211_stop_queues(wl->hw);
912 set_bit(WL1271_FLAG_TX_QUEUE_STOPPED, &wl->flags);
913 spin_unlock_irqrestore(&wl->wl_lock, flags);
919 static struct notifier_block wl1271_dev_notifier = {
920 .notifier_call = wl1271_dev_notify,
923 static int wl1271_op_start(struct ieee80211_hw *hw)
925 wl1271_debug(DEBUG_MAC80211, "mac80211 start");
928 * We have to delay the booting of the hardware because
929 * we need to know the local MAC address before downloading and
930 * initializing the firmware. The MAC address cannot be changed
931 * after boot, and without the proper MAC address, the firmware
932 * will not function properly.
934 * The MAC address is first known when the corresponding interface
935 * is added. That is where we will initialize the hardware.
941 static void wl1271_op_stop(struct ieee80211_hw *hw)
943 wl1271_debug(DEBUG_MAC80211, "mac80211 stop");
946 static int wl1271_op_add_interface(struct ieee80211_hw *hw,
947 struct ieee80211_vif *vif)
949 struct wl1271 *wl = hw->priv;
950 struct wiphy *wiphy = hw->wiphy;
951 int retries = WL1271_BOOT_RETRIES;
954 wl1271_debug(DEBUG_MAC80211, "mac80211 add interface type %d mac %pM",
955 vif->type, vif->addr);
957 mutex_lock(&wl->mutex);
966 case NL80211_IFTYPE_STATION:
967 wl->bss_type = BSS_TYPE_STA_BSS;
968 wl->set_bss_type = BSS_TYPE_STA_BSS;
970 case NL80211_IFTYPE_ADHOC:
971 wl->bss_type = BSS_TYPE_IBSS;
972 wl->set_bss_type = BSS_TYPE_STA_BSS;
979 memcpy(wl->mac_addr, vif->addr, ETH_ALEN);
981 if (wl->state != WL1271_STATE_OFF) {
982 wl1271_error("cannot start because not in off state: %d",
990 ret = wl1271_chip_wakeup(wl);
994 ret = wl1271_boot(wl);
998 ret = wl1271_hw_init(wl);
1002 wl->state = WL1271_STATE_ON;
1003 wl1271_info("firmware booted (%s)", wl->chip.fw_ver);
1005 /* update hw/fw version info in wiphy struct */
1006 wiphy->hw_version = wl->chip.id;
1007 strncpy(wiphy->fw_version, wl->chip.fw_ver,
1008 sizeof(wiphy->fw_version));
1013 wl1271_disable_interrupts(wl);
1014 mutex_unlock(&wl->mutex);
1015 /* Unlocking the mutex in the middle of handling is
1016 inherently unsafe. In this case we deem it safe to do,
1017 because we need to let any possibly pending IRQ out of
1018 the system (and while we are WL1271_STATE_OFF the IRQ
1019 work function will not do anything.) Also, any other
1020 possible concurrent operations will fail due to the
1021 current state, hence the wl1271 struct should be safe. */
1022 cancel_work_sync(&wl->irq_work);
1023 mutex_lock(&wl->mutex);
1025 wl1271_power_off(wl);
1028 wl1271_error("firmware boot failed despite %d retries",
1029 WL1271_BOOT_RETRIES);
1031 mutex_unlock(&wl->mutex);
1034 list_add(&wl->list, &wl_list);
1039 static void __wl1271_op_remove_interface(struct wl1271 *wl)
1043 wl1271_debug(DEBUG_MAC80211, "mac80211 remove interface");
1045 wl1271_info("down");
1047 list_del(&wl->list);
1049 WARN_ON(wl->state != WL1271_STATE_ON);
1051 /* enable dyn ps just in case (if left on due to fw crash etc) */
1052 if (wl->bss_type == BSS_TYPE_STA_BSS)
1053 ieee80211_enable_dyn_ps(wl->vif);
1055 if (wl->scan.state != WL1271_SCAN_STATE_IDLE) {
1056 wl->scan.state = WL1271_SCAN_STATE_IDLE;
1057 kfree(wl->scan.scanned_ch);
1058 wl->scan.scanned_ch = NULL;
1059 ieee80211_scan_completed(wl->hw, true);
1062 wl->state = WL1271_STATE_OFF;
1064 wl1271_disable_interrupts(wl);
1066 mutex_unlock(&wl->mutex);
1068 cancel_delayed_work_sync(&wl->scan_complete_work);
1069 cancel_work_sync(&wl->irq_work);
1070 cancel_work_sync(&wl->tx_work);
1071 cancel_delayed_work_sync(&wl->pspoll_work);
1072 cancel_delayed_work_sync(&wl->elp_work);
1074 mutex_lock(&wl->mutex);
1076 /* let's notify MAC80211 about the remaining pending TX frames */
1077 wl1271_tx_reset(wl);
1078 wl1271_power_off(wl);
1080 memset(wl->bssid, 0, ETH_ALEN);
1081 memset(wl->ssid, 0, IW_ESSID_MAX_SIZE + 1);
1083 wl->bss_type = MAX_BSS_TYPE;
1084 wl->set_bss_type = MAX_BSS_TYPE;
1085 wl->band = IEEE80211_BAND_2GHZ;
1088 wl->psm_entry_retry = 0;
1089 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
1090 wl->tx_blocks_available = 0;
1091 wl->tx_results_count = 0;
1092 wl->tx_packets_count = 0;
1093 wl->tx_security_last_seq = 0;
1094 wl->tx_security_seq = 0;
1095 wl->time_offset = 0;
1096 wl->session_counter = 0;
1097 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
1098 wl->sta_rate_set = 0;
1103 for (i = 0; i < NUM_TX_QUEUES; i++)
1104 wl->tx_blocks_freed[i] = 0;
1106 wl1271_debugfs_reset(wl);
1108 kfree(wl->fw_status);
1109 wl->fw_status = NULL;
1110 kfree(wl->tx_res_if);
1111 wl->tx_res_if = NULL;
1112 kfree(wl->target_mem_map);
1113 wl->target_mem_map = NULL;
1116 static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
1117 struct ieee80211_vif *vif)
1119 struct wl1271 *wl = hw->priv;
1121 mutex_lock(&wl->mutex);
1122 WARN_ON(wl->vif != vif);
1123 __wl1271_op_remove_interface(wl);
1124 mutex_unlock(&wl->mutex);
1126 cancel_work_sync(&wl->recovery_work);
1129 static void wl1271_configure_filters(struct wl1271 *wl, unsigned int filters)
1131 wl->rx_config = WL1271_DEFAULT_RX_CONFIG;
1132 wl->rx_filter = WL1271_DEFAULT_RX_FILTER;
1134 /* combine requested filters with current filter config */
1135 filters = wl->filters | filters;
1137 wl1271_debug(DEBUG_FILTERS, "RX filters set: ");
1139 if (filters & FIF_PROMISC_IN_BSS) {
1140 wl1271_debug(DEBUG_FILTERS, " - FIF_PROMISC_IN_BSS");
1141 wl->rx_config &= ~CFG_UNI_FILTER_EN;
1142 wl->rx_config |= CFG_BSSID_FILTER_EN;
1144 if (filters & FIF_BCN_PRBRESP_PROMISC) {
1145 wl1271_debug(DEBUG_FILTERS, " - FIF_BCN_PRBRESP_PROMISC");
1146 wl->rx_config &= ~CFG_BSSID_FILTER_EN;
1147 wl->rx_config &= ~CFG_SSID_FILTER_EN;
1149 if (filters & FIF_OTHER_BSS) {
1150 wl1271_debug(DEBUG_FILTERS, " - FIF_OTHER_BSS");
1151 wl->rx_config &= ~CFG_BSSID_FILTER_EN;
1153 if (filters & FIF_CONTROL) {
1154 wl1271_debug(DEBUG_FILTERS, " - FIF_CONTROL");
1155 wl->rx_filter |= CFG_RX_CTL_EN;
1157 if (filters & FIF_FCSFAIL) {
1158 wl1271_debug(DEBUG_FILTERS, " - FIF_FCSFAIL");
1159 wl->rx_filter |= CFG_RX_FCS_ERROR;
1163 static int wl1271_dummy_join(struct wl1271 *wl)
1166 /* we need to use a dummy BSSID for now */
1167 static const u8 dummy_bssid[ETH_ALEN] = { 0x0b, 0xad, 0xde,
1170 memcpy(wl->bssid, dummy_bssid, ETH_ALEN);
1172 /* pass through frames from all BSS */
1173 wl1271_configure_filters(wl, FIF_OTHER_BSS);
1175 ret = wl1271_cmd_join(wl, wl->set_bss_type);
1179 set_bit(WL1271_FLAG_JOINED, &wl->flags);
1185 static int wl1271_join(struct wl1271 *wl, bool set_assoc)
1190 * One of the side effects of the JOIN command is that is clears
1191 * WPA/WPA2 keys from the chipset. Performing a JOIN while associated
1192 * to a WPA/WPA2 access point will therefore kill the data-path.
1193 * Currently there is no supported scenario for JOIN during
1194 * association - if it becomes a supported scenario, the WPA/WPA2 keys
1195 * must be handled somehow.
1198 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1199 wl1271_info("JOIN while associated.");
1202 set_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
1204 ret = wl1271_cmd_join(wl, wl->set_bss_type);
1208 set_bit(WL1271_FLAG_JOINED, &wl->flags);
1210 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1214 * The join command disable the keep-alive mode, shut down its process,
1215 * and also clear the template config, so we need to reset it all after
1216 * the join. The acx_aid starts the keep-alive process, and the order
1217 * of the commands below is relevant.
1219 ret = wl1271_acx_keep_alive_mode(wl, true);
1223 ret = wl1271_acx_aid(wl, wl->aid);
1227 ret = wl1271_cmd_build_klv_null_data(wl);
1231 ret = wl1271_acx_keep_alive_config(wl, CMD_TEMPL_KLV_IDX_NULL_DATA,
1232 ACX_KEEP_ALIVE_TPL_VALID);
1240 static int wl1271_unjoin(struct wl1271 *wl)
1244 /* to stop listening to a channel, we disconnect */
1245 ret = wl1271_cmd_disconnect(wl);
1249 clear_bit(WL1271_FLAG_JOINED, &wl->flags);
1250 memset(wl->bssid, 0, ETH_ALEN);
1252 /* stop filterting packets based on bssid */
1253 wl1271_configure_filters(wl, FIF_OTHER_BSS);
1259 static void wl1271_set_band_rate(struct wl1271 *wl)
1261 if (wl->band == IEEE80211_BAND_2GHZ)
1262 wl->basic_rate_set = wl->conf.tx.basic_rate;
1264 wl->basic_rate_set = wl->conf.tx.basic_rate_5;
1267 static u32 wl1271_min_rate_get(struct wl1271 *wl)
1272 if (!wl->basic_rate_set) {
1274 wl->basic_rate_set = wl->conf.tx.basic_rate;
1277 for (i = 0; !rate; i++) {
1278 if ((wl->basic_rate_set >> i) & 0x1)
1285 static int wl1271_handle_idle(struct wl1271 *wl, bool idle)
1290 if (test_bit(WL1271_FLAG_JOINED, &wl->flags)) {
1291 ret = wl1271_unjoin(wl);
1295 wl->rate_set = wl1271_min_rate_get(wl);
1296 wl->sta_rate_set = 0;
1297 ret = wl1271_acx_rate_policies(wl);
1300 ret = wl1271_acx_keep_alive_config(
1301 wl, CMD_TEMPL_KLV_IDX_NULL_DATA,
1302 ACX_KEEP_ALIVE_TPL_INVALID);
1305 set_bit(WL1271_FLAG_IDLE, &wl->flags);
1307 /* increment the session counter */
1308 wl->session_counter++;
1309 if (wl->session_counter >= SESSION_COUNTER_MAX)
1310 wl->session_counter = 0;
1311 ret = wl1271_dummy_join(wl);
1314 clear_bit(WL1271_FLAG_IDLE, &wl->flags);
1321 static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed)
1323 struct wl1271 *wl = hw->priv;
1324 struct ieee80211_conf *conf = &hw->conf;
1325 int channel, ret = 0;
1327 channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
1329 wl1271_debug(DEBUG_MAC80211, "mac80211 config ch %d psm %s power %d %s",
1331 conf->flags & IEEE80211_CONF_PS ? "on" : "off",
1333 conf->flags & IEEE80211_CONF_IDLE ? "idle" : "in use");
1336 * mac80211 will go to idle nearly immediately after transmitting some
1337 * frames, such as the deauth. To make sure those frames reach the air,
1338 * wait here until the TX queue is fully flushed.
1340 if ((changed & IEEE80211_CONF_CHANGE_IDLE) &&
1341 (conf->flags & IEEE80211_CONF_IDLE))
1342 wl1271_tx_flush(wl);
1344 mutex_lock(&wl->mutex);
1346 if (unlikely(wl->state == WL1271_STATE_OFF))
1349 ret = wl1271_ps_elp_wakeup(wl, false);
1353 /* if the channel changes while joined, join again */
1354 if (changed & IEEE80211_CONF_CHANGE_CHANNEL &&
1355 ((wl->band != conf->channel->band) ||
1356 (wl->channel != channel))) {
1357 wl->band = conf->channel->band;
1358 wl->channel = channel;
1361 * FIXME: the mac80211 should really provide a fixed rate
1362 * to use here. for now, just use the smallest possible rate
1363 * for the band as a fixed rate for association frames and
1364 * other control messages.
1366 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1367 wl1271_set_band_rate(wl);
1369 wl->basic_rate = wl1271_min_rate_get(wl);
1370 ret = wl1271_acx_rate_policies(wl);
1372 wl1271_warning("rate policy for update channel "
1375 if (test_bit(WL1271_FLAG_JOINED, &wl->flags)) {
1376 ret = wl1271_join(wl, false);
1378 wl1271_warning("cmd join to update channel "
1383 if (changed & IEEE80211_CONF_CHANGE_IDLE) {
1384 ret = wl1271_handle_idle(wl, conf->flags & IEEE80211_CONF_IDLE);
1386 wl1271_warning("idle mode change failed %d", ret);
1390 * if mac80211 changes the PSM mode, make sure the mode is not
1391 * incorrectly changed after the pspoll failure active window.
1393 if (changed & IEEE80211_CONF_CHANGE_PS)
1394 clear_bit(WL1271_FLAG_PSPOLL_FAILURE, &wl->flags);
1396 if (conf->flags & IEEE80211_CONF_PS &&
1397 !test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
1398 set_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
1401 * We enter PSM only if we're already associated.
1402 * If we're not, we'll enter it when joining an SSID,
1403 * through the bss_info_changed() hook.
1405 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags)) {
1406 wl1271_debug(DEBUG_PSM, "psm enabled");
1407 ret = wl1271_ps_set_mode(wl, STATION_POWER_SAVE_MODE,
1408 wl->basic_rate, true);
1410 } else if (!(conf->flags & IEEE80211_CONF_PS) &&
1411 test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
1412 wl1271_debug(DEBUG_PSM, "psm disabled");
1414 clear_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
1416 if (test_bit(WL1271_FLAG_PSM, &wl->flags))
1417 ret = wl1271_ps_set_mode(wl, STATION_ACTIVE_MODE,
1418 wl->basic_rate, true);
1421 if (conf->power_level != wl->power_level) {
1422 ret = wl1271_acx_tx_power(wl, conf->power_level);
1426 wl->power_level = conf->power_level;
1430 wl1271_ps_elp_sleep(wl);
1433 mutex_unlock(&wl->mutex);
1438 struct wl1271_filter_params {
1441 u8 mc_list[ACX_MC_ADDRESS_GROUP_MAX][ETH_ALEN];
1444 static u64 wl1271_op_prepare_multicast(struct ieee80211_hw *hw,
1445 struct netdev_hw_addr_list *mc_list)
1447 struct wl1271_filter_params *fp;
1448 struct netdev_hw_addr *ha;
1449 struct wl1271 *wl = hw->priv;
1451 if (unlikely(wl->state == WL1271_STATE_OFF))
1454 fp = kzalloc(sizeof(*fp), GFP_ATOMIC);
1456 wl1271_error("Out of memory setting filters.");
1460 /* update multicast filtering parameters */
1461 fp->mc_list_length = 0;
1462 if (netdev_hw_addr_list_count(mc_list) > ACX_MC_ADDRESS_GROUP_MAX) {
1463 fp->enabled = false;
1466 netdev_hw_addr_list_for_each(ha, mc_list) {
1467 memcpy(fp->mc_list[fp->mc_list_length],
1468 ha->addr, ETH_ALEN);
1469 fp->mc_list_length++;
1473 return (u64)(unsigned long)fp;
1476 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
1479 FIF_BCN_PRBRESP_PROMISC | \
1483 static void wl1271_op_configure_filter(struct ieee80211_hw *hw,
1484 unsigned int changed,
1485 unsigned int *total, u64 multicast)
1487 struct wl1271_filter_params *fp = (void *)(unsigned long)multicast;
1488 struct wl1271 *wl = hw->priv;
1491 wl1271_debug(DEBUG_MAC80211, "mac80211 configure filter");
1493 mutex_lock(&wl->mutex);
1495 *total &= WL1271_SUPPORTED_FILTERS;
1496 changed &= WL1271_SUPPORTED_FILTERS;
1498 if (unlikely(wl->state == WL1271_STATE_OFF))
1501 ret = wl1271_ps_elp_wakeup(wl, false);
1506 if (*total & FIF_ALLMULTI)
1507 ret = wl1271_acx_group_address_tbl(wl, false, NULL, 0);
1509 ret = wl1271_acx_group_address_tbl(wl, fp->enabled,
1511 fp->mc_list_length);
1515 /* determine, whether supported filter values have changed */
1519 /* configure filters */
1520 wl->filters = *total;
1521 wl1271_configure_filters(wl, 0);
1523 /* apply configured filters */
1524 ret = wl1271_acx_rx_config(wl, wl->rx_config, wl->rx_filter);
1529 wl1271_ps_elp_sleep(wl);
1532 mutex_unlock(&wl->mutex);
1536 static int wl1271_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
1537 struct ieee80211_vif *vif,
1538 struct ieee80211_sta *sta,
1539 struct ieee80211_key_conf *key_conf)
1541 struct wl1271 *wl = hw->priv;
1548 static const u8 bcast_addr[ETH_ALEN] =
1549 { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
1551 wl1271_debug(DEBUG_MAC80211, "mac80211 set key");
1553 addr = sta ? sta->addr : bcast_addr;
1555 wl1271_debug(DEBUG_CRYPT, "CMD: 0x%x", cmd);
1556 wl1271_dump(DEBUG_CRYPT, "ADDR: ", addr, ETH_ALEN);
1557 wl1271_debug(DEBUG_CRYPT, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
1558 key_conf->cipher, key_conf->keyidx,
1559 key_conf->keylen, key_conf->flags);
1560 wl1271_dump(DEBUG_CRYPT, "KEY: ", key_conf->key, key_conf->keylen);
1562 if (is_zero_ether_addr(addr)) {
1563 /* We dont support TX only encryption */
1568 mutex_lock(&wl->mutex);
1570 ret = wl1271_ps_elp_wakeup(wl, false);
1574 switch (key_conf->cipher) {
1575 case WLAN_CIPHER_SUITE_WEP40:
1576 case WLAN_CIPHER_SUITE_WEP104:
1579 key_conf->hw_key_idx = key_conf->keyidx;
1581 case WLAN_CIPHER_SUITE_TKIP:
1582 key_type = KEY_TKIP;
1584 key_conf->hw_key_idx = key_conf->keyidx;
1585 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
1586 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
1588 case WLAN_CIPHER_SUITE_CCMP:
1591 key_conf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
1592 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
1593 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
1595 case WL1271_CIPHER_SUITE_GEM:
1597 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
1598 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
1601 wl1271_error("Unknown key algo 0x%x", key_conf->cipher);
1609 ret = wl1271_cmd_set_key(wl, KEY_ADD_OR_REPLACE,
1610 key_conf->keyidx, key_type,
1611 key_conf->keylen, key_conf->key,
1612 addr, tx_seq_32, tx_seq_16);
1614 wl1271_error("Could not add or replace key");
1618 /* the default WEP key needs to be configured at least once */
1619 if (key_type == KEY_WEP) {
1620 ret = wl1271_cmd_set_default_wep_key(wl,
1628 /* The wl1271 does not allow to remove unicast keys - they
1629 will be cleared automatically on next CMD_JOIN. Ignore the
1630 request silently, as we dont want the mac80211 to emit
1631 an error message. */
1632 if (!is_broadcast_ether_addr(addr))
1635 ret = wl1271_cmd_set_key(wl, KEY_REMOVE,
1636 key_conf->keyidx, key_type,
1637 key_conf->keylen, key_conf->key,
1640 wl1271_error("Could not remove key");
1646 wl1271_error("Unsupported key cmd 0x%x", cmd);
1652 wl1271_ps_elp_sleep(wl);
1655 mutex_unlock(&wl->mutex);
1661 static int wl1271_op_hw_scan(struct ieee80211_hw *hw,
1662 struct ieee80211_vif *vif,
1663 struct cfg80211_scan_request *req)
1665 struct wl1271 *wl = hw->priv;
1670 wl1271_debug(DEBUG_MAC80211, "mac80211 hw scan");
1673 ssid = req->ssids[0].ssid;
1674 len = req->ssids[0].ssid_len;
1677 mutex_lock(&wl->mutex);
1679 ret = wl1271_ps_elp_wakeup(wl, false);
1683 ret = wl1271_scan(hw->priv, ssid, len, req);
1685 wl1271_ps_elp_sleep(wl);
1688 mutex_unlock(&wl->mutex);
1693 static int wl1271_op_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
1695 struct wl1271 *wl = hw->priv;
1698 mutex_lock(&wl->mutex);
1700 if (unlikely(wl->state == WL1271_STATE_OFF))
1703 ret = wl1271_ps_elp_wakeup(wl, false);
1707 ret = wl1271_acx_rts_threshold(wl, (u16) value);
1709 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret);
1711 wl1271_ps_elp_sleep(wl);
1714 mutex_unlock(&wl->mutex);
1719 static void wl1271_ssid_set(struct wl1271 *wl, struct sk_buff *beacon)
1721 u8 *ptr = beacon->data +
1722 offsetof(struct ieee80211_mgmt, u.beacon.variable);
1724 /* find the location of the ssid in the beacon */
1725 while (ptr < beacon->data + beacon->len) {
1726 if (ptr[0] == WLAN_EID_SSID) {
1727 wl->ssid_len = ptr[1];
1728 memcpy(wl->ssid, ptr+2, wl->ssid_len);
1733 wl1271_error("ad-hoc beacon template has no SSID!\n");
1736 static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
1737 struct ieee80211_vif *vif,
1738 struct ieee80211_bss_conf *bss_conf,
1741 enum wl1271_cmd_ps_mode mode;
1742 struct wl1271 *wl = hw->priv;
1743 struct ieee80211_sta *sta = ieee80211_find_sta(vif, bss_conf->bssid);
1744 bool do_join = false;
1745 bool set_assoc = false;
1748 wl1271_debug(DEBUG_MAC80211, "mac80211 bss info changed");
1750 mutex_lock(&wl->mutex);
1752 ret = wl1271_ps_elp_wakeup(wl, false);
1756 if ((changed & BSS_CHANGED_BEACON_INT) &&
1757 (wl->bss_type == BSS_TYPE_IBSS)) {
1758 wl1271_debug(DEBUG_ADHOC, "ad-hoc beacon interval updated: %d",
1759 bss_conf->beacon_int);
1761 wl->beacon_int = bss_conf->beacon_int;
1765 if ((changed & BSS_CHANGED_BEACON) &&
1766 (wl->bss_type == BSS_TYPE_IBSS)) {
1767 struct sk_buff *beacon = ieee80211_beacon_get(hw, vif);
1769 wl1271_debug(DEBUG_ADHOC, "ad-hoc beacon updated");
1772 struct ieee80211_hdr *hdr;
1774 wl1271_ssid_set(wl, beacon);
1775 ret = wl1271_cmd_template_set(wl, CMD_TEMPL_BEACON,
1778 wl1271_min_rate_get(wl));
1781 dev_kfree_skb(beacon);
1785 hdr = (struct ieee80211_hdr *) beacon->data;
1786 hdr->frame_control = cpu_to_le16(
1787 IEEE80211_FTYPE_MGMT |
1788 IEEE80211_STYPE_PROBE_RESP);
1790 ret = wl1271_cmd_template_set(wl,
1791 CMD_TEMPL_PROBE_RESPONSE,
1794 wl1271_min_rate_get(wl));
1795 dev_kfree_skb(beacon);
1799 /* Need to update the SSID (for filtering etc) */
1804 if ((changed & BSS_CHANGED_BEACON_ENABLED) &&
1805 (wl->bss_type == BSS_TYPE_IBSS)) {
1806 wl1271_debug(DEBUG_ADHOC, "ad-hoc beaconing: %s",
1807 bss_conf->enable_beacon ? "enabled" : "disabled");
1809 if (bss_conf->enable_beacon)
1810 wl->set_bss_type = BSS_TYPE_IBSS;
1812 wl->set_bss_type = BSS_TYPE_STA_BSS;
1816 if (changed & BSS_CHANGED_CQM) {
1817 bool enable = false;
1818 if (bss_conf->cqm_rssi_thold)
1820 ret = wl1271_acx_rssi_snr_trigger(wl, enable,
1821 bss_conf->cqm_rssi_thold,
1822 bss_conf->cqm_rssi_hyst);
1825 wl->rssi_thold = bss_conf->cqm_rssi_thold;
1828 if ((changed & BSS_CHANGED_BSSID) &&
1830 * Now we know the correct bssid, so we send a new join command
1831 * and enable the BSSID filter
1833 memcmp(wl->bssid, bss_conf->bssid, ETH_ALEN)) {
1834 memcpy(wl->bssid, bss_conf->bssid, ETH_ALEN);
1836 ret = wl1271_cmd_build_null_data(wl);
1840 ret = wl1271_build_qos_null_data(wl);
1844 /* filter out all packets not from this BSSID */
1845 wl1271_configure_filters(wl, 0);
1847 /* Need to update the BSSID (for filtering etc) */
1851 if (changed & BSS_CHANGED_ASSOC) {
1852 if (bss_conf->assoc) {
1854 wl->aid = bss_conf->aid;
1857 wl->ps_poll_failures = 0;
1860 * use basic rates from AP, and determine lowest rate
1861 * to use with control frames.
1863 rates = bss_conf->basic_rates;
1864 wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl,
1866 wl->basic_rate = wl1271_min_rate_get(wl);
1867 ret = wl1271_acx_rate_policies(wl);
1872 * with wl1271, we don't need to update the
1873 * beacon_int and dtim_period, because the firmware
1874 * updates it by itself when the first beacon is
1875 * received after a join.
1877 ret = wl1271_cmd_build_ps_poll(wl, wl->aid);
1882 * The SSID is intentionally set to NULL here - the
1883 * firmware will set the probe request with a
1884 * broadcast SSID regardless of what we set in the
1887 ret = wl1271_cmd_build_probe_req(wl, NULL, 0,
1890 /* enable the connection monitoring feature */
1891 ret = wl1271_acx_conn_monit_params(wl, true);
1895 /* If we want to go in PSM but we're not there yet */
1896 if (test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags) &&
1897 !test_bit(WL1271_FLAG_PSM, &wl->flags)) {
1898 mode = STATION_POWER_SAVE_MODE;
1899 ret = wl1271_ps_set_mode(wl, mode,
1906 /* use defaults when not associated */
1907 clear_bit(WL1271_FLAG_STA_STATE_SENT, &wl->flags);
1908 clear_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
1911 /* re-enable dynamic ps - just in case */
1912 ieee80211_enable_dyn_ps(wl->vif);
1914 /* revert back to minimum rates for the current band */
1915 wl1271_set_band_rate(wl);
1916 wl->basic_rate = wl1271_min_rate_get(wl);
1917 ret = wl1271_acx_rate_policies(wl);
1921 /* disable connection monitor features */
1922 ret = wl1271_acx_conn_monit_params(wl, false);
1924 /* Disable the keep-alive feature */
1925 ret = wl1271_acx_keep_alive_mode(wl, false);
1933 if (changed & BSS_CHANGED_ERP_SLOT) {
1934 if (bss_conf->use_short_slot)
1935 ret = wl1271_acx_slot(wl, SLOT_TIME_SHORT);
1937 ret = wl1271_acx_slot(wl, SLOT_TIME_LONG);
1939 wl1271_warning("Set slot time failed %d", ret);
1944 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
1945 if (bss_conf->use_short_preamble)
1946 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_SHORT);
1948 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_LONG);
1951 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
1952 if (bss_conf->use_cts_prot)
1953 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_ENABLE);
1955 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_DISABLE);
1957 wl1271_warning("Set ctsprotect failed %d", ret);
1963 * Takes care of: New association with HT enable,
1964 * HT information change in beacon.
1967 (changed & BSS_CHANGED_HT) &&
1968 (bss_conf->channel_type != NL80211_CHAN_NO_HT)) {
1969 ret = wl1271_acx_set_ht_capabilities(wl, &sta->ht_cap, true);
1971 wl1271_warning("Set ht cap true failed %d", ret);
1974 ret = wl1271_acx_set_ht_information(wl,
1975 bss_conf->ht_operation_mode);
1977 wl1271_warning("Set ht information failed %d", ret);
1982 * Takes care of: New association without HT,
1985 else if (sta && (changed & BSS_CHANGED_ASSOC)) {
1986 ret = wl1271_acx_set_ht_capabilities(wl, &sta->ht_cap, false);
1988 wl1271_warning("Set ht cap false failed %d", ret);
1993 if (changed & BSS_CHANGED_ARP_FILTER) {
1994 __be32 addr = bss_conf->arp_addr_list[0];
1995 WARN_ON(wl->bss_type != BSS_TYPE_STA_BSS);
1997 if (bss_conf->arp_addr_cnt == 1 && bss_conf->arp_filter_enabled)
1998 ret = wl1271_acx_arp_ip_filter(wl, true, addr);
2000 ret = wl1271_acx_arp_ip_filter(wl, false, addr);
2007 ret = wl1271_join(wl, set_assoc);
2009 wl1271_warning("cmd join failed %d", ret);
2015 wl1271_ps_elp_sleep(wl);
2018 mutex_unlock(&wl->mutex);
2021 static int wl1271_op_conf_tx(struct ieee80211_hw *hw, u16 queue,
2022 const struct ieee80211_tx_queue_params *params)
2024 struct wl1271 *wl = hw->priv;
2028 mutex_lock(&wl->mutex);
2030 wl1271_debug(DEBUG_MAC80211, "mac80211 conf tx %d", queue);
2032 ret = wl1271_ps_elp_wakeup(wl, false);
2036 /* the txop is confed in units of 32us by the mac80211, we need us */
2037 ret = wl1271_acx_ac_cfg(wl, wl1271_tx_get_queue(queue),
2038 params->cw_min, params->cw_max,
2039 params->aifs, params->txop << 5);
2044 ps_scheme = CONF_PS_SCHEME_UPSD_TRIGGER;
2046 ps_scheme = CONF_PS_SCHEME_LEGACY;
2048 ret = wl1271_acx_tid_cfg(wl, wl1271_tx_get_queue(queue),
2049 CONF_CHANNEL_TYPE_EDCF,
2050 wl1271_tx_get_queue(queue),
2051 ps_scheme, CONF_ACK_POLICY_LEGACY, 0, 0);
2056 wl1271_ps_elp_sleep(wl);
2059 mutex_unlock(&wl->mutex);
2064 static u64 wl1271_op_get_tsf(struct ieee80211_hw *hw)
2067 struct wl1271 *wl = hw->priv;
2068 u64 mactime = ULLONG_MAX;
2071 wl1271_debug(DEBUG_MAC80211, "mac80211 get tsf");
2073 mutex_lock(&wl->mutex);
2075 ret = wl1271_ps_elp_wakeup(wl, false);
2079 ret = wl1271_acx_tsf_info(wl, &mactime);
2084 wl1271_ps_elp_sleep(wl);
2087 mutex_unlock(&wl->mutex);
2091 static int wl1271_op_get_survey(struct ieee80211_hw *hw, int idx,
2092 struct survey_info *survey)
2094 struct wl1271 *wl = hw->priv;
2095 struct ieee80211_conf *conf = &hw->conf;
2100 survey->channel = conf->channel;
2101 survey->filled = SURVEY_INFO_NOISE_DBM;
2102 survey->noise = wl->noise;
2107 /* can't be const, mac80211 writes to this */
2108 static struct ieee80211_rate wl1271_rates[] = {
2110 .hw_value = CONF_HW_BIT_RATE_1MBPS,
2111 .hw_value_short = CONF_HW_BIT_RATE_1MBPS, },
2113 .hw_value = CONF_HW_BIT_RATE_2MBPS,
2114 .hw_value_short = CONF_HW_BIT_RATE_2MBPS,
2115 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
2117 .hw_value = CONF_HW_BIT_RATE_5_5MBPS,
2118 .hw_value_short = CONF_HW_BIT_RATE_5_5MBPS,
2119 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
2121 .hw_value = CONF_HW_BIT_RATE_11MBPS,
2122 .hw_value_short = CONF_HW_BIT_RATE_11MBPS,
2123 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
2125 .hw_value = CONF_HW_BIT_RATE_6MBPS,
2126 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
2128 .hw_value = CONF_HW_BIT_RATE_9MBPS,
2129 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
2131 .hw_value = CONF_HW_BIT_RATE_12MBPS,
2132 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
2134 .hw_value = CONF_HW_BIT_RATE_18MBPS,
2135 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
2137 .hw_value = CONF_HW_BIT_RATE_24MBPS,
2138 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
2140 .hw_value = CONF_HW_BIT_RATE_36MBPS,
2141 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
2143 .hw_value = CONF_HW_BIT_RATE_48MBPS,
2144 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
2146 .hw_value = CONF_HW_BIT_RATE_54MBPS,
2147 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
2151 * Can't be const, mac80211 writes to this. The order of the channels here
2152 * is designed to improve scanning.
2154 static struct ieee80211_channel wl1271_channels[] = {
2155 { .hw_value = 1, .center_freq = 2412, .max_power = 25 },
2156 { .hw_value = 5, .center_freq = 2432, .max_power = 25 },
2157 { .hw_value = 9, .center_freq = 2452, .max_power = 25 },
2158 { .hw_value = 13, .center_freq = 2472, .max_power = 25 },
2159 { .hw_value = 4, .center_freq = 2427, .max_power = 25 },
2160 { .hw_value = 8, .center_freq = 2447, .max_power = 25 },
2161 { .hw_value = 12, .center_freq = 2467, .max_power = 25 },
2162 { .hw_value = 3, .center_freq = 2422, .max_power = 25 },
2163 { .hw_value = 7, .center_freq = 2442, .max_power = 25 },
2164 { .hw_value = 11, .center_freq = 2462, .max_power = 25 },
2165 { .hw_value = 2, .center_freq = 2417, .max_power = 25 },
2166 { .hw_value = 6, .center_freq = 2437, .max_power = 25 },
2167 { .hw_value = 10, .center_freq = 2457, .max_power = 25 },
2170 /* mapping to indexes for wl1271_rates */
2171 static const u8 wl1271_rate_to_idx_2ghz[] = {
2172 /* MCS rates are used only with 11n */
2173 7, /* CONF_HW_RXTX_RATE_MCS7 */
2174 6, /* CONF_HW_RXTX_RATE_MCS6 */
2175 5, /* CONF_HW_RXTX_RATE_MCS5 */
2176 4, /* CONF_HW_RXTX_RATE_MCS4 */
2177 3, /* CONF_HW_RXTX_RATE_MCS3 */
2178 2, /* CONF_HW_RXTX_RATE_MCS2 */
2179 1, /* CONF_HW_RXTX_RATE_MCS1 */
2180 0, /* CONF_HW_RXTX_RATE_MCS0 */
2182 11, /* CONF_HW_RXTX_RATE_54 */
2183 10, /* CONF_HW_RXTX_RATE_48 */
2184 9, /* CONF_HW_RXTX_RATE_36 */
2185 8, /* CONF_HW_RXTX_RATE_24 */
2187 /* TI-specific rate */
2188 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
2190 7, /* CONF_HW_RXTX_RATE_18 */
2191 6, /* CONF_HW_RXTX_RATE_12 */
2192 3, /* CONF_HW_RXTX_RATE_11 */
2193 5, /* CONF_HW_RXTX_RATE_9 */
2194 4, /* CONF_HW_RXTX_RATE_6 */
2195 2, /* CONF_HW_RXTX_RATE_5_5 */
2196 1, /* CONF_HW_RXTX_RATE_2 */
2197 0 /* CONF_HW_RXTX_RATE_1 */
2200 /* 11n STA capabilities */
2201 #define HW_RX_HIGHEST_RATE 72
2203 #ifdef CONFIG_WL1271_HT
2204 #define WL1271_HT_CAP { \
2205 .cap = IEEE80211_HT_CAP_GRN_FLD | IEEE80211_HT_CAP_SGI_20, \
2206 .ht_supported = true, \
2207 .ampdu_factor = IEEE80211_HT_MAX_AMPDU_8K, \
2208 .ampdu_density = IEEE80211_HT_MPDU_DENSITY_8, \
2210 .rx_mask = { 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, \
2211 .rx_highest = cpu_to_le16(HW_RX_HIGHEST_RATE), \
2212 .tx_params = IEEE80211_HT_MCS_TX_DEFINED, \
2216 #define WL1271_HT_CAP { \
2217 .ht_supported = false, \
2221 /* can't be const, mac80211 writes to this */
2222 static struct ieee80211_supported_band wl1271_band_2ghz = {
2223 .channels = wl1271_channels,
2224 .n_channels = ARRAY_SIZE(wl1271_channels),
2225 .bitrates = wl1271_rates,
2226 .n_bitrates = ARRAY_SIZE(wl1271_rates),
2227 .ht_cap = WL1271_HT_CAP,
2230 /* 5 GHz data rates for WL1273 */
2231 static struct ieee80211_rate wl1271_rates_5ghz[] = {
2233 .hw_value = CONF_HW_BIT_RATE_6MBPS,
2234 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
2236 .hw_value = CONF_HW_BIT_RATE_9MBPS,
2237 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
2239 .hw_value = CONF_HW_BIT_RATE_12MBPS,
2240 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
2242 .hw_value = CONF_HW_BIT_RATE_18MBPS,
2243 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
2245 .hw_value = CONF_HW_BIT_RATE_24MBPS,
2246 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
2248 .hw_value = CONF_HW_BIT_RATE_36MBPS,
2249 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
2251 .hw_value = CONF_HW_BIT_RATE_48MBPS,
2252 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
2254 .hw_value = CONF_HW_BIT_RATE_54MBPS,
2255 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
2259 * 5 GHz band channels for WL1273 - can't be const, mac80211 writes to this.
2260 * The order of the channels here is designed to improve scanning.
2262 static struct ieee80211_channel wl1271_channels_5ghz[] = {
2263 { .hw_value = 183, .center_freq = 4915},
2264 { .hw_value = 188, .center_freq = 4940},
2265 { .hw_value = 8, .center_freq = 5040},
2266 { .hw_value = 34, .center_freq = 5170},
2267 { .hw_value = 44, .center_freq = 5220},
2268 { .hw_value = 60, .center_freq = 5300},
2269 { .hw_value = 112, .center_freq = 5560},
2270 { .hw_value = 132, .center_freq = 5660},
2271 { .hw_value = 157, .center_freq = 5785},
2272 { .hw_value = 184, .center_freq = 4920},
2273 { .hw_value = 189, .center_freq = 4945},
2274 { .hw_value = 9, .center_freq = 5045},
2275 { .hw_value = 36, .center_freq = 5180},
2276 { .hw_value = 46, .center_freq = 5230},
2277 { .hw_value = 64, .center_freq = 5320},
2278 { .hw_value = 116, .center_freq = 5580},
2279 { .hw_value = 136, .center_freq = 5680},
2280 { .hw_value = 192, .center_freq = 4960},
2281 { .hw_value = 11, .center_freq = 5055},
2282 { .hw_value = 38, .center_freq = 5190},
2283 { .hw_value = 48, .center_freq = 5240},
2284 { .hw_value = 100, .center_freq = 5500},
2285 { .hw_value = 120, .center_freq = 5600},
2286 { .hw_value = 140, .center_freq = 5700},
2287 { .hw_value = 185, .center_freq = 4925},
2288 { .hw_value = 196, .center_freq = 4980},
2289 { .hw_value = 12, .center_freq = 5060},
2290 { .hw_value = 40, .center_freq = 5200},
2291 { .hw_value = 52, .center_freq = 5260},
2292 { .hw_value = 104, .center_freq = 5520},
2293 { .hw_value = 124, .center_freq = 5620},
2294 { .hw_value = 149, .center_freq = 5745},
2295 { .hw_value = 161, .center_freq = 5805},
2296 { .hw_value = 187, .center_freq = 4935},
2297 { .hw_value = 7, .center_freq = 5035},
2298 { .hw_value = 16, .center_freq = 5080},
2299 { .hw_value = 42, .center_freq = 5210},
2300 { .hw_value = 56, .center_freq = 5280},
2301 { .hw_value = 108, .center_freq = 5540},
2302 { .hw_value = 128, .center_freq = 5640},
2303 { .hw_value = 153, .center_freq = 5765},
2304 { .hw_value = 165, .center_freq = 5825},
2307 /* mapping to indexes for wl1271_rates_5ghz */
2308 static const u8 wl1271_rate_to_idx_5ghz[] = {
2309 /* MCS rates are used only with 11n */
2310 7, /* CONF_HW_RXTX_RATE_MCS7 */
2311 6, /* CONF_HW_RXTX_RATE_MCS6 */
2312 5, /* CONF_HW_RXTX_RATE_MCS5 */
2313 4, /* CONF_HW_RXTX_RATE_MCS4 */
2314 3, /* CONF_HW_RXTX_RATE_MCS3 */
2315 2, /* CONF_HW_RXTX_RATE_MCS2 */
2316 1, /* CONF_HW_RXTX_RATE_MCS1 */
2317 0, /* CONF_HW_RXTX_RATE_MCS0 */
2319 7, /* CONF_HW_RXTX_RATE_54 */
2320 6, /* CONF_HW_RXTX_RATE_48 */
2321 5, /* CONF_HW_RXTX_RATE_36 */
2322 4, /* CONF_HW_RXTX_RATE_24 */
2324 /* TI-specific rate */
2325 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
2327 3, /* CONF_HW_RXTX_RATE_18 */
2328 2, /* CONF_HW_RXTX_RATE_12 */
2329 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_11 */
2330 1, /* CONF_HW_RXTX_RATE_9 */
2331 0, /* CONF_HW_RXTX_RATE_6 */
2332 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_5_5 */
2333 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_2 */
2334 CONF_HW_RXTX_RATE_UNSUPPORTED /* CONF_HW_RXTX_RATE_1 */
2337 static struct ieee80211_supported_band wl1271_band_5ghz = {
2338 .channels = wl1271_channels_5ghz,
2339 .n_channels = ARRAY_SIZE(wl1271_channels_5ghz),
2340 .bitrates = wl1271_rates_5ghz,
2341 .n_bitrates = ARRAY_SIZE(wl1271_rates_5ghz),
2342 .ht_cap = WL1271_HT_CAP,
2345 static const u8 *wl1271_band_rate_to_idx[] = {
2346 [IEEE80211_BAND_2GHZ] = wl1271_rate_to_idx_2ghz,
2347 [IEEE80211_BAND_5GHZ] = wl1271_rate_to_idx_5ghz
2350 static const struct ieee80211_ops wl1271_ops = {
2351 .start = wl1271_op_start,
2352 .stop = wl1271_op_stop,
2353 .add_interface = wl1271_op_add_interface,
2354 .remove_interface = wl1271_op_remove_interface,
2355 .config = wl1271_op_config,
2356 .prepare_multicast = wl1271_op_prepare_multicast,
2357 .configure_filter = wl1271_op_configure_filter,
2359 .set_key = wl1271_op_set_key,
2360 .hw_scan = wl1271_op_hw_scan,
2361 .bss_info_changed = wl1271_op_bss_info_changed,
2362 .set_rts_threshold = wl1271_op_set_rts_threshold,
2363 .conf_tx = wl1271_op_conf_tx,
2364 .get_tsf = wl1271_op_get_tsf,
2365 .get_survey = wl1271_op_get_survey,
2366 CFG80211_TESTMODE_CMD(wl1271_tm_cmd)
2370 u8 wl1271_rate_to_idx(int rate, enum ieee80211_band band)
2374 BUG_ON(band >= sizeof(wl1271_band_rate_to_idx)/sizeof(u8 *));
2376 if (unlikely(rate >= CONF_HW_RXTX_RATE_MAX)) {
2377 wl1271_error("Illegal RX rate from HW: %d", rate);
2381 idx = wl1271_band_rate_to_idx[band][rate];
2382 if (unlikely(idx == CONF_HW_RXTX_RATE_UNSUPPORTED)) {
2383 wl1271_error("Unsupported RX rate from HW: %d", rate);
2390 static ssize_t wl1271_sysfs_show_bt_coex_state(struct device *dev,
2391 struct device_attribute *attr,
2394 struct wl1271 *wl = dev_get_drvdata(dev);
2399 mutex_lock(&wl->mutex);
2400 len = snprintf(buf, len, "%d\n\n0 - off\n1 - on\n",
2402 mutex_unlock(&wl->mutex);
2408 static ssize_t wl1271_sysfs_store_bt_coex_state(struct device *dev,
2409 struct device_attribute *attr,
2410 const char *buf, size_t count)
2412 struct wl1271 *wl = dev_get_drvdata(dev);
2416 ret = strict_strtoul(buf, 10, &res);
2419 wl1271_warning("incorrect value written to bt_coex_mode");
2423 mutex_lock(&wl->mutex);
2427 if (res == wl->sg_enabled)
2430 wl->sg_enabled = res;
2432 if (wl->state == WL1271_STATE_OFF)
2435 ret = wl1271_ps_elp_wakeup(wl, false);
2439 wl1271_acx_sg_enable(wl, wl->sg_enabled);
2440 wl1271_ps_elp_sleep(wl);
2443 mutex_unlock(&wl->mutex);
2447 static DEVICE_ATTR(bt_coex_state, S_IRUGO | S_IWUSR,
2448 wl1271_sysfs_show_bt_coex_state,
2449 wl1271_sysfs_store_bt_coex_state);
2451 static ssize_t wl1271_sysfs_show_hw_pg_ver(struct device *dev,
2452 struct device_attribute *attr,
2455 struct wl1271 *wl = dev_get_drvdata(dev);
2460 mutex_lock(&wl->mutex);
2461 if (wl->hw_pg_ver >= 0)
2462 len = snprintf(buf, len, "%d\n", wl->hw_pg_ver);
2464 len = snprintf(buf, len, "n/a\n");
2465 mutex_unlock(&wl->mutex);
2470 static DEVICE_ATTR(hw_pg_ver, S_IRUGO | S_IWUSR,
2471 wl1271_sysfs_show_hw_pg_ver, NULL);
2473 int wl1271_register_hw(struct wl1271 *wl)
2477 if (wl->mac80211_registered)
2480 SET_IEEE80211_PERM_ADDR(wl->hw, wl->mac_addr);
2482 ret = ieee80211_register_hw(wl->hw);
2484 wl1271_error("unable to register mac80211 hw: %d", ret);
2488 wl->mac80211_registered = true;
2490 register_netdevice_notifier(&wl1271_dev_notifier);
2492 wl1271_notice("loaded");
2496 EXPORT_SYMBOL_GPL(wl1271_register_hw);
2498 void wl1271_unregister_hw(struct wl1271 *wl)
2500 unregister_netdevice_notifier(&wl1271_dev_notifier);
2501 ieee80211_unregister_hw(wl->hw);
2502 wl->mac80211_registered = false;
2505 EXPORT_SYMBOL_GPL(wl1271_unregister_hw);
2507 int wl1271_init_ieee80211(struct wl1271 *wl)
2509 static const u32 cipher_suites[] = {
2510 WLAN_CIPHER_SUITE_WEP40,
2511 WLAN_CIPHER_SUITE_WEP104,
2512 WLAN_CIPHER_SUITE_TKIP,
2513 WLAN_CIPHER_SUITE_CCMP,
2514 WL1271_CIPHER_SUITE_GEM,
2517 /* The tx descriptor buffer and the TKIP space. */
2518 wl->hw->extra_tx_headroom = WL1271_TKIP_IV_SPACE +
2519 sizeof(struct wl1271_tx_hw_descr);
2522 /* FIXME: find a proper value */
2523 wl->hw->channel_change_time = 10000;
2524 wl->hw->max_listen_interval = wl->conf.conn.max_listen_interval;
2526 wl->hw->flags = IEEE80211_HW_SIGNAL_DBM |
2527 IEEE80211_HW_BEACON_FILTER |
2528 IEEE80211_HW_SUPPORTS_PS |
2529 IEEE80211_HW_SUPPORTS_UAPSD |
2530 IEEE80211_HW_HAS_RATE_CONTROL |
2531 IEEE80211_HW_CONNECTION_MONITOR |
2532 IEEE80211_HW_SUPPORTS_CQM_RSSI;
2534 wl->hw->wiphy->cipher_suites = cipher_suites;
2535 wl->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
2537 wl->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
2538 BIT(NL80211_IFTYPE_ADHOC);
2539 wl->hw->wiphy->max_scan_ssids = 1;
2540 wl->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = &wl1271_band_2ghz;
2541 wl->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = &wl1271_band_5ghz;
2544 wl->hw->max_rates = 1;
2546 SET_IEEE80211_DEV(wl->hw, wl1271_wl_to_dev(wl));
2550 EXPORT_SYMBOL_GPL(wl1271_init_ieee80211);
2552 #define WL1271_DEFAULT_CHANNEL 0
2554 struct ieee80211_hw *wl1271_alloc_hw(void)
2556 struct ieee80211_hw *hw;
2557 struct platform_device *plat_dev = NULL;
2562 hw = ieee80211_alloc_hw(sizeof(*wl), &wl1271_ops);
2564 wl1271_error("could not alloc ieee80211_hw");
2569 plat_dev = kmemdup(&wl1271_device, sizeof(wl1271_device), GFP_KERNEL);
2571 wl1271_error("could not allocate platform_device");
2573 goto err_plat_alloc;
2577 memset(wl, 0, sizeof(*wl));
2579 INIT_LIST_HEAD(&wl->list);
2582 wl->plat_dev = plat_dev;
2584 skb_queue_head_init(&wl->tx_queue);
2586 INIT_DELAYED_WORK(&wl->elp_work, wl1271_elp_work);
2587 INIT_DELAYED_WORK(&wl->pspoll_work, wl1271_pspoll_work);
2588 INIT_WORK(&wl->irq_work, wl1271_irq_work);
2589 INIT_WORK(&wl->tx_work, wl1271_tx_work);
2590 INIT_WORK(&wl->recovery_work, wl1271_recovery_work);
2591 INIT_DELAYED_WORK(&wl->scan_complete_work, wl1271_scan_complete_work);
2592 wl->channel = WL1271_DEFAULT_CHANNEL;
2593 wl->beacon_int = WL1271_DEFAULT_BEACON_INT;
2594 wl->default_key = 0;
2596 wl->rx_config = WL1271_DEFAULT_RX_CONFIG;
2597 wl->rx_filter = WL1271_DEFAULT_RX_FILTER;
2598 wl->psm_entry_retry = 0;
2599 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
2600 wl->basic_rate_set = CONF_TX_RATE_MASK_BASIC;
2601 wl->basic_rate = CONF_TX_RATE_MASK_BASIC;
2602 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
2603 wl->sta_rate_set = 0;
2604 wl->band = IEEE80211_BAND_2GHZ;
2607 wl->sg_enabled = true;
2610 memset(wl->tx_frames_map, 0, sizeof(wl->tx_frames_map));
2611 for (i = 0; i < ACX_TX_DESCRIPTORS; i++)
2612 wl->tx_frames[i] = NULL;
2614 spin_lock_init(&wl->wl_lock);
2616 wl->state = WL1271_STATE_OFF;
2617 mutex_init(&wl->mutex);
2619 /* Apply default driver configuration. */
2620 wl1271_conf_init(wl);
2622 wl1271_debugfs_init(wl);
2624 order = get_order(WL1271_AGGR_BUFFER_SIZE);
2625 wl->aggr_buf = (u8 *)__get_free_pages(GFP_KERNEL, order);
2626 if (!wl->aggr_buf) {
2631 /* Register platform device */
2632 ret = platform_device_register(wl->plat_dev);
2634 wl1271_error("couldn't register platform device");
2637 dev_set_drvdata(&wl->plat_dev->dev, wl);
2639 /* Create sysfs file to control bt coex state */
2640 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
2642 wl1271_error("failed to create sysfs file bt_coex_state");
2646 /* Create sysfs file to get HW PG version */
2647 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_hw_pg_ver);
2649 wl1271_error("failed to create sysfs file hw_pg_ver");
2650 goto err_bt_coex_state;
2656 device_remove_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
2659 platform_device_unregister(wl->plat_dev);
2662 free_pages((unsigned long)wl->aggr_buf, order);
2665 wl1271_debugfs_exit(wl);
2669 ieee80211_free_hw(hw);
2673 return ERR_PTR(ret);
2675 EXPORT_SYMBOL_GPL(wl1271_alloc_hw);
2677 int wl1271_free_hw(struct wl1271 *wl)
2679 platform_device_unregister(wl->plat_dev);
2680 free_pages((unsigned long)wl->aggr_buf,
2681 get_order(WL1271_AGGR_BUFFER_SIZE));
2682 kfree(wl->plat_dev);
2684 wl1271_debugfs_exit(wl);
2691 kfree(wl->fw_status);
2692 kfree(wl->tx_res_if);
2694 ieee80211_free_hw(wl->hw);
2698 EXPORT_SYMBOL_GPL(wl1271_free_hw);
2700 MODULE_LICENSE("GPL");
2701 MODULE_AUTHOR("Luciano Coelho <luciano.coelho@nokia.com>");
2702 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");