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/inetdevice.h>
32 #include <linux/platform_device.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"
48 #define WL1271_BOOT_RETRIES 3
50 static struct conf_drv_settings default_conf = {
53 [CONF_SG_BT_PER_THRESHOLD] = 7500,
54 [CONF_SG_HV3_MAX_OVERRIDE] = 0,
55 [CONF_SG_BT_NFS_SAMPLE_INTERVAL] = 400,
56 [CONF_SG_BT_LOAD_RATIO] = 50,
57 [CONF_SG_AUTO_PS_MODE] = 0,
58 [CONF_SG_AUTO_SCAN_PROBE_REQ] = 170,
59 [CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_HV3] = 50,
60 [CONF_SG_ANTENNA_CONFIGURATION] = 0,
61 [CONF_SG_BEACON_MISS_PERCENT] = 60,
62 [CONF_SG_RATE_ADAPT_THRESH] = 12,
63 [CONF_SG_RATE_ADAPT_SNR] = 0,
64 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MIN_BR] = 10,
65 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MAX_BR] = 30,
66 [CONF_SG_WLAN_PS_MAX_BT_ACL_MASTER_BR] = 8,
67 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MIN_BR] = 20,
68 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MAX_BR] = 50,
69 /* Note: with UPSD, this should be 4 */
70 [CONF_SG_WLAN_PS_MAX_BT_ACL_SLAVE_BR] = 8,
71 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MIN_EDR] = 7,
72 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MAX_EDR] = 25,
73 [CONF_SG_WLAN_PS_MAX_BT_ACL_MASTER_EDR] = 20,
74 /* Note: with UPDS, this should be 15 */
75 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MIN_EDR] = 8,
76 /* Note: with UPDS, this should be 50 */
77 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MAX_EDR] = 40,
78 /* Note: with UPDS, this should be 10 */
79 [CONF_SG_WLAN_PS_MAX_BT_ACL_SLAVE_EDR] = 20,
82 [CONF_SG_ADAPTIVE_RXT_TXT] = 1,
83 [CONF_SG_PS_POLL_TIMEOUT] = 10,
84 [CONF_SG_UPSD_TIMEOUT] = 10,
85 [CONF_SG_WLAN_ACTIVE_BT_ACL_MASTER_MIN_EDR] = 7,
86 [CONF_SG_WLAN_ACTIVE_BT_ACL_MASTER_MAX_EDR] = 15,
87 [CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_MASTER_EDR] = 15,
88 [CONF_SG_WLAN_ACTIVE_BT_ACL_SLAVE_MIN_EDR] = 8,
89 [CONF_SG_WLAN_ACTIVE_BT_ACL_SLAVE_MAX_EDR] = 20,
90 [CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_SLAVE_EDR] = 15,
91 [CONF_SG_WLAN_ACTIVE_BT_ACL_MIN_BR] = 20,
92 [CONF_SG_WLAN_ACTIVE_BT_ACL_MAX_BR] = 50,
93 [CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_BR] = 10,
94 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_HV3] = 200,
95 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_A2DP] = 800,
96 [CONF_SG_PASSIVE_SCAN_A2DP_BT_TIME] = 75,
97 [CONF_SG_PASSIVE_SCAN_A2DP_WLAN_TIME] = 15,
98 [CONF_SG_HV3_MAX_SERVED] = 6,
99 [CONF_SG_DHCP_TIME] = 5000,
100 [CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_A2DP] = 100,
102 .state = CONF_SG_PROTECTIVE,
105 .rx_msdu_life_time = 512000,
106 .packet_detection_threshold = 0,
107 .ps_poll_timeout = 15,
109 .rts_threshold = 2347,
110 .rx_cca_threshold = 0,
111 .irq_blk_threshold = 0xFFFF,
112 .irq_pkt_threshold = 0,
114 .queue_type = CONF_RX_QUEUE_TYPE_LOW_PRIORITY,
117 .tx_energy_detection = 0,
119 .enabled_rates = CONF_HW_BIT_RATE_1MBPS |
120 CONF_HW_BIT_RATE_2MBPS,
121 .short_retry_limit = 10,
122 .long_retry_limit = 10,
145 .aifsn = CONF_TX_AIFS_PIFS,
152 .aifsn = CONF_TX_AIFS_PIFS,
160 .channel_type = CONF_CHANNEL_TYPE_DCF,
161 .tsid = CONF_TX_AC_BE,
162 .ps_scheme = CONF_PS_SCHEME_LEGACY,
163 .ack_policy = CONF_ACK_POLICY_LEGACY,
168 .channel_type = CONF_CHANNEL_TYPE_DCF,
169 .tsid = CONF_TX_AC_BE,
170 .ps_scheme = CONF_PS_SCHEME_LEGACY,
171 .ack_policy = CONF_ACK_POLICY_LEGACY,
176 .channel_type = CONF_CHANNEL_TYPE_DCF,
177 .tsid = CONF_TX_AC_BE,
178 .ps_scheme = CONF_PS_SCHEME_LEGACY,
179 .ack_policy = CONF_ACK_POLICY_LEGACY,
184 .channel_type = CONF_CHANNEL_TYPE_DCF,
185 .tsid = CONF_TX_AC_BE,
186 .ps_scheme = CONF_PS_SCHEME_LEGACY,
187 .ack_policy = CONF_ACK_POLICY_LEGACY,
192 .channel_type = CONF_CHANNEL_TYPE_DCF,
193 .tsid = CONF_TX_AC_BE,
194 .ps_scheme = CONF_PS_SCHEME_LEGACY,
195 .ack_policy = CONF_ACK_POLICY_LEGACY,
200 .channel_type = CONF_CHANNEL_TYPE_DCF,
201 .tsid = CONF_TX_AC_BE,
202 .ps_scheme = CONF_PS_SCHEME_LEGACY,
203 .ack_policy = CONF_ACK_POLICY_LEGACY,
208 .channel_type = CONF_CHANNEL_TYPE_DCF,
209 .tsid = CONF_TX_AC_BE,
210 .ps_scheme = CONF_PS_SCHEME_LEGACY,
211 .ack_policy = CONF_ACK_POLICY_LEGACY,
215 .frag_threshold = IEEE80211_MAX_FRAG_THRESHOLD,
216 .tx_compl_timeout = 700,
217 .tx_compl_threshold = 4
220 .wake_up_event = CONF_WAKE_UP_EVENT_DTIM,
221 .listen_interval = 0,
222 .bcn_filt_mode = CONF_BCN_FILT_MODE_ENABLED,
223 .bcn_filt_ie_count = 1,
226 .ie = WLAN_EID_CHANNEL_SWITCH,
227 .rule = CONF_BCN_RULE_PASS_ON_APPEARANCE,
230 .synch_fail_thold = 10,
231 .bss_lose_timeout = 100,
232 .beacon_rx_timeout = 10000,
233 .broadcast_timeout = 20000,
234 .rx_broadcast_in_ps = 1,
235 .ps_poll_threshold = 20,
236 .sig_trigger_count = 2,
241 .metric = CONF_TRIG_METRIC_RSSI_BEACON,
242 .type = CONF_TRIG_EVENT_TYPE_EDGE,
243 .direction = CONF_TRIG_EVENT_DIR_LOW,
251 .metric = CONF_TRIG_METRIC_RSSI_BEACON,
252 .type = CONF_TRIG_EVENT_TYPE_EDGE,
253 .direction = CONF_TRIG_EVENT_DIR_HIGH,
260 .rssi_bcn_avg_weight = 10,
261 .rssi_pkt_avg_weight = 10,
262 .snr_bcn_avg_weight = 10,
263 .snr_pkt_avg_weight = 10
265 .bet_enable = CONF_BET_MODE_ENABLE,
266 .bet_max_consecutive = 10,
267 .psm_entry_retries = 3
279 .host_clk_settling_time = 5000,
280 .host_fast_wakeup_support = false
284 static void wl1271_device_release(struct device *dev)
289 static struct platform_device wl1271_device = {
293 /* device model insists to have a release function */
295 .release = wl1271_device_release,
299 static LIST_HEAD(wl_list);
301 static void wl1271_conf_init(struct wl1271 *wl)
305 * This function applies the default configuration to the driver. This
306 * function is invoked upon driver load (spi probe.)
308 * The configuration is stored in a run-time structure in order to
309 * facilitate for run-time adjustment of any of the parameters. Making
310 * changes to the configuration structure will apply the new values on
311 * the next interface up (wl1271_op_start.)
314 /* apply driver default configuration */
315 memcpy(&wl->conf, &default_conf, sizeof(default_conf));
319 static int wl1271_plt_init(struct wl1271 *wl)
321 struct conf_tx_ac_category *conf_ac;
322 struct conf_tx_tid *conf_tid;
325 ret = wl1271_cmd_general_parms(wl);
329 ret = wl1271_cmd_radio_parms(wl);
333 ret = wl1271_init_templates_config(wl);
337 ret = wl1271_acx_init_mem_config(wl);
341 /* PHY layer config */
342 ret = wl1271_init_phy_config(wl);
344 goto out_free_memmap;
346 ret = wl1271_acx_dco_itrim_params(wl);
348 goto out_free_memmap;
350 /* Initialize connection monitoring thresholds */
351 ret = wl1271_acx_conn_monit_params(wl, false);
353 goto out_free_memmap;
355 /* Bluetooth WLAN coexistence */
356 ret = wl1271_init_pta(wl);
358 goto out_free_memmap;
360 /* Energy detection */
361 ret = wl1271_init_energy_detection(wl);
363 goto out_free_memmap;
365 /* Default fragmentation threshold */
366 ret = wl1271_acx_frag_threshold(wl);
368 goto out_free_memmap;
370 /* Default TID configuration */
371 for (i = 0; i < wl->conf.tx.tid_conf_count; i++) {
372 conf_tid = &wl->conf.tx.tid_conf[i];
373 ret = wl1271_acx_tid_cfg(wl, conf_tid->queue_id,
374 conf_tid->channel_type,
377 conf_tid->ack_policy,
378 conf_tid->apsd_conf[0],
379 conf_tid->apsd_conf[1]);
381 goto out_free_memmap;
384 /* Default AC configuration */
385 for (i = 0; i < wl->conf.tx.ac_conf_count; i++) {
386 conf_ac = &wl->conf.tx.ac_conf[i];
387 ret = wl1271_acx_ac_cfg(wl, conf_ac->ac, conf_ac->cw_min,
388 conf_ac->cw_max, conf_ac->aifsn,
389 conf_ac->tx_op_limit);
391 goto out_free_memmap;
394 /* Enable data path */
395 ret = wl1271_cmd_data_path(wl, 1);
397 goto out_free_memmap;
399 /* Configure for CAM power saving (ie. always active) */
400 ret = wl1271_acx_sleep_auth(wl, WL1271_PSM_CAM);
402 goto out_free_memmap;
405 ret = wl1271_acx_pm_config(wl);
407 goto out_free_memmap;
412 kfree(wl->target_mem_map);
413 wl->target_mem_map = NULL;
418 static void wl1271_fw_status(struct wl1271 *wl,
419 struct wl1271_fw_status *status)
425 wl1271_raw_read(wl, FW_STATUS_ADDR, status, sizeof(*status), false);
427 wl1271_debug(DEBUG_IRQ, "intr: 0x%x (fw_rx_counter = %d, "
428 "drv_rx_counter = %d, tx_results_counter = %d)",
430 status->fw_rx_counter,
431 status->drv_rx_counter,
432 status->tx_results_counter);
434 /* update number of available TX blocks */
435 for (i = 0; i < NUM_TX_QUEUES; i++) {
436 u32 cnt = le32_to_cpu(status->tx_released_blks[i]) -
437 wl->tx_blocks_freed[i];
439 wl->tx_blocks_freed[i] =
440 le32_to_cpu(status->tx_released_blks[i]);
441 wl->tx_blocks_available += cnt;
445 /* if more blocks are available now, schedule some tx work */
446 if (total && !skb_queue_empty(&wl->tx_queue))
447 ieee80211_queue_work(wl->hw, &wl->tx_work);
449 /* update the host-chipset time offset */
451 wl->time_offset = (timespec_to_ns(&ts) >> 10) -
452 (s64)le32_to_cpu(status->fw_localtime);
455 #define WL1271_IRQ_MAX_LOOPS 10
457 static void wl1271_irq_work(struct work_struct *work)
461 int loopcount = WL1271_IRQ_MAX_LOOPS;
464 container_of(work, struct wl1271, irq_work);
466 mutex_lock(&wl->mutex);
468 wl1271_debug(DEBUG_IRQ, "IRQ work");
470 if (unlikely(wl->state == WL1271_STATE_OFF))
473 ret = wl1271_ps_elp_wakeup(wl, true);
477 spin_lock_irqsave(&wl->wl_lock, flags);
478 while (test_bit(WL1271_FLAG_IRQ_PENDING, &wl->flags) && loopcount) {
479 clear_bit(WL1271_FLAG_IRQ_PENDING, &wl->flags);
480 spin_unlock_irqrestore(&wl->wl_lock, flags);
483 wl1271_fw_status(wl, wl->fw_status);
484 intr = le32_to_cpu(wl->fw_status->intr);
486 wl1271_debug(DEBUG_IRQ, "Zero interrupt received.");
490 intr &= WL1271_INTR_MASK;
492 if (intr & WL1271_ACX_INTR_DATA) {
493 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_DATA");
495 /* check for tx results */
496 if (wl->fw_status->tx_results_counter !=
497 (wl->tx_results_count & 0xff))
498 wl1271_tx_complete(wl);
500 wl1271_rx(wl, wl->fw_status);
503 if (intr & WL1271_ACX_INTR_EVENT_A) {
504 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_A");
505 wl1271_event_handle(wl, 0);
508 if (intr & WL1271_ACX_INTR_EVENT_B) {
509 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_B");
510 wl1271_event_handle(wl, 1);
513 if (intr & WL1271_ACX_INTR_INIT_COMPLETE)
514 wl1271_debug(DEBUG_IRQ,
515 "WL1271_ACX_INTR_INIT_COMPLETE");
517 if (intr & WL1271_ACX_INTR_HW_AVAILABLE)
518 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_HW_AVAILABLE");
520 spin_lock_irqsave(&wl->wl_lock, flags);
523 if (test_bit(WL1271_FLAG_IRQ_PENDING, &wl->flags))
524 ieee80211_queue_work(wl->hw, &wl->irq_work);
526 clear_bit(WL1271_FLAG_IRQ_RUNNING, &wl->flags);
527 spin_unlock_irqrestore(&wl->wl_lock, flags);
529 wl1271_ps_elp_sleep(wl);
532 mutex_unlock(&wl->mutex);
535 static int wl1271_fetch_firmware(struct wl1271 *wl)
537 const struct firmware *fw;
540 ret = request_firmware(&fw, WL1271_FW_NAME, wl1271_wl_to_dev(wl));
543 wl1271_error("could not get firmware: %d", ret);
548 wl1271_error("firmware size is not multiple of 32 bits: %zu",
554 wl->fw_len = fw->size;
555 wl->fw = vmalloc(wl->fw_len);
558 wl1271_error("could not allocate memory for the firmware");
563 memcpy(wl->fw, fw->data, wl->fw_len);
568 release_firmware(fw);
573 static int wl1271_fetch_nvs(struct wl1271 *wl)
575 const struct firmware *fw;
578 ret = request_firmware(&fw, WL1271_NVS_NAME, wl1271_wl_to_dev(wl));
581 wl1271_error("could not get nvs file: %d", ret);
585 if (fw->size != sizeof(struct wl1271_nvs_file)) {
586 wl1271_error("nvs size is not as expected: %zu != %zu",
587 fw->size, sizeof(struct wl1271_nvs_file));
592 wl->nvs = kmalloc(sizeof(struct wl1271_nvs_file), GFP_KERNEL);
595 wl1271_error("could not allocate memory for the nvs file");
600 memcpy(wl->nvs, fw->data, sizeof(struct wl1271_nvs_file));
603 release_firmware(fw);
608 static void wl1271_fw_wakeup(struct wl1271 *wl)
612 elp_reg = ELPCTRL_WAKE_UP;
613 wl1271_raw_write32(wl, HW_ACCESS_ELP_CTRL_REG_ADDR, elp_reg);
616 static int wl1271_setup(struct wl1271 *wl)
618 wl->fw_status = kmalloc(sizeof(*wl->fw_status), GFP_KERNEL);
622 wl->tx_res_if = kmalloc(sizeof(*wl->tx_res_if), GFP_KERNEL);
623 if (!wl->tx_res_if) {
624 kfree(wl->fw_status);
628 INIT_WORK(&wl->irq_work, wl1271_irq_work);
629 INIT_WORK(&wl->tx_work, wl1271_tx_work);
633 static int wl1271_chip_wakeup(struct wl1271 *wl)
635 struct wl1271_partition_set partition;
638 msleep(WL1271_PRE_POWER_ON_SLEEP);
640 msleep(WL1271_POWER_ON_SLEEP);
644 /* We don't need a real memory partition here, because we only want
645 * to use the registers at this point. */
646 memset(&partition, 0, sizeof(partition));
647 partition.reg.start = REGISTERS_BASE;
648 partition.reg.size = REGISTERS_DOWN_SIZE;
649 wl1271_set_partition(wl, &partition);
651 /* ELP module wake up */
652 wl1271_fw_wakeup(wl);
654 /* whal_FwCtrl_BootSm() */
656 /* 0. read chip id from CHIP_ID */
657 wl->chip.id = wl1271_read32(wl, CHIP_ID_B);
659 /* 1. check if chip id is valid */
661 switch (wl->chip.id) {
662 case CHIP_ID_1271_PG10:
663 wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
666 ret = wl1271_setup(wl);
670 case CHIP_ID_1271_PG20:
671 wl1271_debug(DEBUG_BOOT, "chip id 0x%x (1271 PG20)",
674 ret = wl1271_setup(wl);
679 wl1271_warning("unsupported chip id: 0x%x", wl->chip.id);
684 if (wl->fw == NULL) {
685 ret = wl1271_fetch_firmware(wl);
690 /* No NVS from netlink, try to get it from the filesystem */
691 if (wl->nvs == NULL) {
692 ret = wl1271_fetch_nvs(wl);
701 int wl1271_plt_start(struct wl1271 *wl)
703 int retries = WL1271_BOOT_RETRIES;
706 mutex_lock(&wl->mutex);
708 wl1271_notice("power up");
710 if (wl->state != WL1271_STATE_OFF) {
711 wl1271_error("cannot go into PLT state because not "
712 "in off state: %d", wl->state);
719 ret = wl1271_chip_wakeup(wl);
723 ret = wl1271_boot(wl);
727 ret = wl1271_plt_init(wl);
731 wl->state = WL1271_STATE_PLT;
732 wl1271_notice("firmware booted in PLT mode (%s)",
737 wl1271_disable_interrupts(wl);
738 mutex_unlock(&wl->mutex);
739 /* Unlocking the mutex in the middle of handling is
740 inherently unsafe. In this case we deem it safe to do,
741 because we need to let any possibly pending IRQ out of
742 the system (and while we are WL1271_STATE_OFF the IRQ
743 work function will not do anything.) Also, any other
744 possible concurrent operations will fail due to the
745 current state, hence the wl1271 struct should be safe. */
746 cancel_work_sync(&wl->irq_work);
747 mutex_lock(&wl->mutex);
749 wl1271_power_off(wl);
752 wl1271_error("firmware boot in PLT mode failed despite %d retries",
753 WL1271_BOOT_RETRIES);
755 mutex_unlock(&wl->mutex);
760 int wl1271_plt_stop(struct wl1271 *wl)
764 mutex_lock(&wl->mutex);
766 wl1271_notice("power down");
768 if (wl->state != WL1271_STATE_PLT) {
769 wl1271_error("cannot power down because not in PLT "
770 "state: %d", wl->state);
775 wl1271_disable_interrupts(wl);
776 wl1271_power_off(wl);
778 wl->state = WL1271_STATE_OFF;
782 mutex_unlock(&wl->mutex);
788 static int wl1271_op_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
790 struct wl1271 *wl = hw->priv;
791 struct ieee80211_conf *conf = &hw->conf;
792 struct ieee80211_tx_info *txinfo = IEEE80211_SKB_CB(skb);
793 struct ieee80211_sta *sta = txinfo->control.sta;
796 /* peek into the rates configured in the STA entry */
797 spin_lock_irqsave(&wl->wl_lock, flags);
798 if (sta && sta->supp_rates[conf->channel->band] != wl->sta_rate_set) {
799 wl->sta_rate_set = sta->supp_rates[conf->channel->band];
800 set_bit(WL1271_FLAG_STA_RATES_CHANGED, &wl->flags);
802 spin_unlock_irqrestore(&wl->wl_lock, flags);
804 /* queue the packet */
805 skb_queue_tail(&wl->tx_queue, skb);
808 * The chip specific setup must run before the first TX packet -
809 * before that, the tx_work will not be initialized!
812 ieee80211_queue_work(wl->hw, &wl->tx_work);
815 * The workqueue is slow to process the tx_queue and we need stop
816 * the queue here, otherwise the queue will get too long.
818 if (skb_queue_len(&wl->tx_queue) >= WL1271_TX_QUEUE_HIGH_WATERMARK) {
819 wl1271_debug(DEBUG_TX, "op_tx: stopping queues");
821 spin_lock_irqsave(&wl->wl_lock, flags);
822 ieee80211_stop_queues(wl->hw);
823 set_bit(WL1271_FLAG_TX_QUEUE_STOPPED, &wl->flags);
824 spin_unlock_irqrestore(&wl->wl_lock, flags);
830 static int wl1271_dev_notify(struct notifier_block *me, unsigned long what,
833 struct net_device *dev;
834 struct wireless_dev *wdev;
836 struct ieee80211_hw *hw;
838 struct wl1271 *wl_temp;
839 struct in_device *idev;
840 struct in_ifaddr *ifa = arg;
843 /* FIXME: this ugly function should probably be implemented in the
844 * mac80211, and here should only be a simple callback handling actual
845 * setting of the filters. Now we need to dig up references to
846 * various structures to gain access to what we need.
847 * Also, because of this, there is no "initial" setting of the filter
848 * in "op_start", because we don't want to dig up struct net_device
849 * there - the filter will be set upon first change of the interface
852 dev = ifa->ifa_dev->dev;
854 wdev = dev->ieee80211_ptr;
862 hw = wiphy_priv(wiphy);
866 /* Check that the interface is one supported by this driver. */
868 list_for_each_entry(wl, &wl_list, list) {
875 /* Get the interface IP address for the device. "ifa" will become
877 - there is no IPV4 protocol address configured
878 - there are multiple (virtual) IPV4 addresses configured
879 When "ifa" is NULL, filtering will be disabled.
884 ifa = idev->ifa_list;
886 if (ifa && ifa->ifa_next)
889 mutex_lock(&wl->mutex);
891 if (wl->state == WL1271_STATE_OFF)
894 ret = wl1271_ps_elp_wakeup(wl, false);
898 ret = wl1271_acx_arp_ip_filter(wl, true,
899 (u8 *)&ifa->ifa_address,
902 ret = wl1271_acx_arp_ip_filter(wl, false, NULL,
904 wl1271_ps_elp_sleep(wl);
907 mutex_unlock(&wl->mutex);
912 static struct notifier_block wl1271_dev_notifier = {
913 .notifier_call = wl1271_dev_notify,
917 static int wl1271_op_start(struct ieee80211_hw *hw)
919 wl1271_debug(DEBUG_MAC80211, "mac80211 start");
922 * We have to delay the booting of the hardware because
923 * we need to know the local MAC address before downloading and
924 * initializing the firmware. The MAC address cannot be changed
925 * after boot, and without the proper MAC address, the firmware
926 * will not function properly.
928 * The MAC address is first known when the corresponding interface
929 * is added. That is where we will initialize the hardware.
935 static void wl1271_op_stop(struct ieee80211_hw *hw)
937 wl1271_debug(DEBUG_MAC80211, "mac80211 stop");
940 static int wl1271_op_add_interface(struct ieee80211_hw *hw,
941 struct ieee80211_vif *vif)
943 struct wl1271 *wl = hw->priv;
944 int retries = WL1271_BOOT_RETRIES;
947 wl1271_debug(DEBUG_MAC80211, "mac80211 add interface type %d mac %pM",
948 vif->type, vif->addr);
950 mutex_lock(&wl->mutex);
959 case NL80211_IFTYPE_STATION:
960 wl->bss_type = BSS_TYPE_STA_BSS;
961 wl->set_bss_type = BSS_TYPE_STA_BSS;
963 case NL80211_IFTYPE_ADHOC:
964 wl->bss_type = BSS_TYPE_IBSS;
965 wl->set_bss_type = BSS_TYPE_STA_BSS;
972 memcpy(wl->mac_addr, vif->addr, ETH_ALEN);
974 if (wl->state != WL1271_STATE_OFF) {
975 wl1271_error("cannot start because not in off state: %d",
983 ret = wl1271_chip_wakeup(wl);
987 ret = wl1271_boot(wl);
991 ret = wl1271_hw_init(wl);
995 wl->state = WL1271_STATE_ON;
996 wl1271_info("firmware booted (%s)", wl->chip.fw_ver);
1000 wl1271_disable_interrupts(wl);
1001 mutex_unlock(&wl->mutex);
1002 /* Unlocking the mutex in the middle of handling is
1003 inherently unsafe. In this case we deem it safe to do,
1004 because we need to let any possibly pending IRQ out of
1005 the system (and while we are WL1271_STATE_OFF the IRQ
1006 work function will not do anything.) Also, any other
1007 possible concurrent operations will fail due to the
1008 current state, hence the wl1271 struct should be safe. */
1009 cancel_work_sync(&wl->irq_work);
1010 mutex_lock(&wl->mutex);
1012 wl1271_power_off(wl);
1015 wl1271_error("firmware boot failed despite %d retries",
1016 WL1271_BOOT_RETRIES);
1018 mutex_unlock(&wl->mutex);
1021 list_add(&wl->list, &wl_list);
1022 register_inetaddr_notifier(&wl1271_dev_notifier);
1028 static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
1029 struct ieee80211_vif *vif)
1031 struct wl1271 *wl = hw->priv;
1034 unregister_inetaddr_notifier(&wl1271_dev_notifier);
1036 mutex_lock(&wl->mutex);
1037 wl1271_debug(DEBUG_MAC80211, "mac80211 remove interface");
1039 wl1271_info("down");
1041 list_del(&wl->list);
1043 WARN_ON(wl->state != WL1271_STATE_ON);
1045 if (test_and_clear_bit(WL1271_FLAG_SCANNING, &wl->flags)) {
1046 mutex_unlock(&wl->mutex);
1047 ieee80211_scan_completed(wl->hw, true);
1048 mutex_lock(&wl->mutex);
1051 wl->state = WL1271_STATE_OFF;
1053 wl1271_disable_interrupts(wl);
1055 mutex_unlock(&wl->mutex);
1057 cancel_work_sync(&wl->irq_work);
1058 cancel_work_sync(&wl->tx_work);
1060 mutex_lock(&wl->mutex);
1062 /* let's notify MAC80211 about the remaining pending TX frames */
1063 wl1271_tx_flush(wl);
1064 wl1271_power_off(wl);
1066 memset(wl->bssid, 0, ETH_ALEN);
1067 memset(wl->ssid, 0, IW_ESSID_MAX_SIZE + 1);
1069 wl->bss_type = MAX_BSS_TYPE;
1070 wl->set_bss_type = MAX_BSS_TYPE;
1071 wl->band = IEEE80211_BAND_2GHZ;
1074 wl->psm_entry_retry = 0;
1075 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
1076 wl->tx_blocks_available = 0;
1077 wl->tx_results_count = 0;
1078 wl->tx_packets_count = 0;
1079 wl->tx_security_last_seq = 0;
1080 wl->tx_security_seq = 0;
1081 wl->time_offset = 0;
1082 wl->session_counter = 0;
1083 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
1084 wl->sta_rate_set = 0;
1089 for (i = 0; i < NUM_TX_QUEUES; i++)
1090 wl->tx_blocks_freed[i] = 0;
1092 wl1271_debugfs_reset(wl);
1093 mutex_unlock(&wl->mutex);
1096 static void wl1271_configure_filters(struct wl1271 *wl, unsigned int filters)
1098 wl->rx_config = WL1271_DEFAULT_RX_CONFIG;
1099 wl->rx_filter = WL1271_DEFAULT_RX_FILTER;
1101 /* combine requested filters with current filter config */
1102 filters = wl->filters | filters;
1104 wl1271_debug(DEBUG_FILTERS, "RX filters set: ");
1106 if (filters & FIF_PROMISC_IN_BSS) {
1107 wl1271_debug(DEBUG_FILTERS, " - FIF_PROMISC_IN_BSS");
1108 wl->rx_config &= ~CFG_UNI_FILTER_EN;
1109 wl->rx_config |= CFG_BSSID_FILTER_EN;
1111 if (filters & FIF_BCN_PRBRESP_PROMISC) {
1112 wl1271_debug(DEBUG_FILTERS, " - FIF_BCN_PRBRESP_PROMISC");
1113 wl->rx_config &= ~CFG_BSSID_FILTER_EN;
1114 wl->rx_config &= ~CFG_SSID_FILTER_EN;
1116 if (filters & FIF_OTHER_BSS) {
1117 wl1271_debug(DEBUG_FILTERS, " - FIF_OTHER_BSS");
1118 wl->rx_config &= ~CFG_BSSID_FILTER_EN;
1120 if (filters & FIF_CONTROL) {
1121 wl1271_debug(DEBUG_FILTERS, " - FIF_CONTROL");
1122 wl->rx_filter |= CFG_RX_CTL_EN;
1124 if (filters & FIF_FCSFAIL) {
1125 wl1271_debug(DEBUG_FILTERS, " - FIF_FCSFAIL");
1126 wl->rx_filter |= CFG_RX_FCS_ERROR;
1130 static int wl1271_join_channel(struct wl1271 *wl, int channel)
1133 /* we need to use a dummy BSSID for now */
1134 static const u8 dummy_bssid[ETH_ALEN] = { 0x0b, 0xad, 0xde,
1137 wl->channel = channel;
1138 memcpy(wl->bssid, dummy_bssid, ETH_ALEN);
1140 /* pass through frames from all BSS */
1141 wl1271_configure_filters(wl, FIF_OTHER_BSS);
1143 ret = wl1271_cmd_join(wl, wl->set_bss_type);
1147 set_bit(WL1271_FLAG_JOINED, &wl->flags);
1153 static int wl1271_unjoin_channel(struct wl1271 *wl)
1157 /* to stop listening to a channel, we disconnect */
1158 ret = wl1271_cmd_disconnect(wl);
1162 clear_bit(WL1271_FLAG_JOINED, &wl->flags);
1164 memset(wl->bssid, 0, ETH_ALEN);
1166 /* stop filterting packets based on bssid */
1167 wl1271_configure_filters(wl, FIF_OTHER_BSS);
1173 static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed)
1175 struct wl1271 *wl = hw->priv;
1176 struct ieee80211_conf *conf = &hw->conf;
1177 int channel, ret = 0;
1179 channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
1181 wl1271_debug(DEBUG_MAC80211, "mac80211 config ch %d psm %s power %d %s",
1183 conf->flags & IEEE80211_CONF_PS ? "on" : "off",
1185 conf->flags & IEEE80211_CONF_IDLE ? "idle" : "in use");
1187 mutex_lock(&wl->mutex);
1189 wl->band = conf->channel->band;
1191 ret = wl1271_ps_elp_wakeup(wl, false);
1195 if (changed & IEEE80211_CONF_CHANGE_IDLE) {
1196 if (conf->flags & IEEE80211_CONF_IDLE &&
1197 test_bit(WL1271_FLAG_JOINED, &wl->flags))
1198 wl1271_unjoin_channel(wl);
1199 else if (!(conf->flags & IEEE80211_CONF_IDLE))
1200 wl1271_join_channel(wl, channel);
1202 if (conf->flags & IEEE80211_CONF_IDLE) {
1203 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
1204 wl->sta_rate_set = 0;
1205 wl1271_acx_rate_policies(wl);
1209 /* if the channel changes while joined, join again */
1210 if (channel != wl->channel &&
1211 test_bit(WL1271_FLAG_JOINED, &wl->flags)) {
1212 wl->channel = channel;
1213 /* FIXME: maybe use CMD_CHANNEL_SWITCH for this? */
1214 ret = wl1271_cmd_join(wl, wl->set_bss_type);
1216 wl1271_warning("cmd join to update channel failed %d",
1219 wl->channel = channel;
1221 if (conf->flags & IEEE80211_CONF_PS &&
1222 !test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
1223 set_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
1226 * We enter PSM only if we're already associated.
1227 * If we're not, we'll enter it when joining an SSID,
1228 * through the bss_info_changed() hook.
1230 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags)) {
1231 wl1271_debug(DEBUG_PSM, "psm enabled");
1232 ret = wl1271_ps_set_mode(wl, STATION_POWER_SAVE_MODE,
1235 } else if (!(conf->flags & IEEE80211_CONF_PS) &&
1236 test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
1237 wl1271_debug(DEBUG_PSM, "psm disabled");
1239 clear_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
1241 if (test_bit(WL1271_FLAG_PSM, &wl->flags))
1242 ret = wl1271_ps_set_mode(wl, STATION_ACTIVE_MODE,
1246 if (conf->power_level != wl->power_level) {
1247 ret = wl1271_acx_tx_power(wl, conf->power_level);
1251 wl->power_level = conf->power_level;
1255 wl1271_ps_elp_sleep(wl);
1258 mutex_unlock(&wl->mutex);
1263 struct wl1271_filter_params {
1266 u8 mc_list[ACX_MC_ADDRESS_GROUP_MAX][ETH_ALEN];
1269 static u64 wl1271_op_prepare_multicast(struct ieee80211_hw *hw, int mc_count,
1270 struct dev_addr_list *mc_list)
1272 struct wl1271_filter_params *fp;
1275 fp = kzalloc(sizeof(*fp), GFP_ATOMIC);
1277 wl1271_error("Out of memory setting filters.");
1281 /* update multicast filtering parameters */
1283 if (mc_count > ACX_MC_ADDRESS_GROUP_MAX) {
1285 fp->enabled = false;
1288 fp->mc_list_length = 0;
1289 for (i = 0; i < mc_count; i++) {
1290 if (mc_list->da_addrlen == ETH_ALEN) {
1291 memcpy(fp->mc_list[fp->mc_list_length],
1292 mc_list->da_addr, ETH_ALEN);
1293 fp->mc_list_length++;
1295 wl1271_warning("Unknown mc address length.");
1296 mc_list = mc_list->next;
1299 return (u64)(unsigned long)fp;
1302 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
1305 FIF_BCN_PRBRESP_PROMISC | \
1309 static void wl1271_op_configure_filter(struct ieee80211_hw *hw,
1310 unsigned int changed,
1311 unsigned int *total, u64 multicast)
1313 struct wl1271_filter_params *fp = (void *)(unsigned long)multicast;
1314 struct wl1271 *wl = hw->priv;
1317 wl1271_debug(DEBUG_MAC80211, "mac80211 configure filter");
1319 mutex_lock(&wl->mutex);
1321 if (wl->state == WL1271_STATE_OFF)
1324 ret = wl1271_ps_elp_wakeup(wl, false);
1328 *total &= WL1271_SUPPORTED_FILTERS;
1329 changed &= WL1271_SUPPORTED_FILTERS;
1331 if (*total & FIF_ALLMULTI)
1332 ret = wl1271_acx_group_address_tbl(wl, false, NULL, 0);
1334 ret = wl1271_acx_group_address_tbl(wl, fp->enabled,
1336 fp->mc_list_length);
1340 /* determine, whether supported filter values have changed */
1344 /* configure filters */
1345 wl->filters = *total;
1346 wl1271_configure_filters(wl, 0);
1348 /* apply configured filters */
1349 ret = wl1271_acx_rx_config(wl, wl->rx_config, wl->rx_filter);
1354 wl1271_ps_elp_sleep(wl);
1357 mutex_unlock(&wl->mutex);
1361 static int wl1271_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
1362 struct ieee80211_vif *vif,
1363 struct ieee80211_sta *sta,
1364 struct ieee80211_key_conf *key_conf)
1366 struct wl1271 *wl = hw->priv;
1373 static const u8 bcast_addr[ETH_ALEN] =
1374 { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
1376 wl1271_debug(DEBUG_MAC80211, "mac80211 set key");
1378 addr = sta ? sta->addr : bcast_addr;
1380 wl1271_debug(DEBUG_CRYPT, "CMD: 0x%x", cmd);
1381 wl1271_dump(DEBUG_CRYPT, "ADDR: ", addr, ETH_ALEN);
1382 wl1271_debug(DEBUG_CRYPT, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
1383 key_conf->alg, key_conf->keyidx,
1384 key_conf->keylen, key_conf->flags);
1385 wl1271_dump(DEBUG_CRYPT, "KEY: ", key_conf->key, key_conf->keylen);
1387 if (is_zero_ether_addr(addr)) {
1388 /* We dont support TX only encryption */
1393 mutex_lock(&wl->mutex);
1395 ret = wl1271_ps_elp_wakeup(wl, false);
1399 switch (key_conf->alg) {
1403 key_conf->hw_key_idx = key_conf->keyidx;
1406 key_type = KEY_TKIP;
1408 key_conf->hw_key_idx = key_conf->keyidx;
1409 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
1410 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
1415 key_conf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
1416 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
1417 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
1420 wl1271_error("Unknown key algo 0x%x", key_conf->alg);
1428 ret = wl1271_cmd_set_key(wl, KEY_ADD_OR_REPLACE,
1429 key_conf->keyidx, key_type,
1430 key_conf->keylen, key_conf->key,
1431 addr, tx_seq_32, tx_seq_16);
1433 wl1271_error("Could not add or replace key");
1437 /* the default WEP key needs to be configured at least once */
1438 if (key_type == KEY_WEP) {
1439 ret = wl1271_cmd_set_default_wep_key(wl,
1447 /* The wl1271 does not allow to remove unicast keys - they
1448 will be cleared automatically on next CMD_JOIN. Ignore the
1449 request silently, as we dont want the mac80211 to emit
1450 an error message. */
1451 if (!is_broadcast_ether_addr(addr))
1454 ret = wl1271_cmd_set_key(wl, KEY_REMOVE,
1455 key_conf->keyidx, key_type,
1456 key_conf->keylen, key_conf->key,
1459 wl1271_error("Could not remove key");
1465 wl1271_error("Unsupported key cmd 0x%x", cmd);
1473 wl1271_ps_elp_sleep(wl);
1476 mutex_unlock(&wl->mutex);
1482 static int wl1271_op_hw_scan(struct ieee80211_hw *hw,
1483 struct cfg80211_scan_request *req)
1485 struct wl1271 *wl = hw->priv;
1490 wl1271_debug(DEBUG_MAC80211, "mac80211 hw scan");
1493 ssid = req->ssids[0].ssid;
1494 len = req->ssids[0].ssid_len;
1497 mutex_lock(&wl->mutex);
1499 ret = wl1271_ps_elp_wakeup(wl, false);
1503 if (wl1271_11a_enabled())
1504 ret = wl1271_cmd_scan(hw->priv, ssid, len,
1505 req->ie, req->ie_len, 1, 0,
1506 WL1271_SCAN_BAND_DUAL, 3);
1508 ret = wl1271_cmd_scan(hw->priv, ssid, len,
1509 req->ie, req->ie_len, 1, 0,
1510 WL1271_SCAN_BAND_2_4_GHZ, 3);
1512 wl1271_ps_elp_sleep(wl);
1515 mutex_unlock(&wl->mutex);
1520 static int wl1271_op_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
1522 struct wl1271 *wl = hw->priv;
1525 mutex_lock(&wl->mutex);
1527 ret = wl1271_ps_elp_wakeup(wl, false);
1531 ret = wl1271_acx_rts_threshold(wl, (u16) value);
1533 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret);
1535 wl1271_ps_elp_sleep(wl);
1538 mutex_unlock(&wl->mutex);
1543 static void wl1271_ssid_set(struct wl1271 *wl, struct sk_buff *beacon)
1545 u8 *ptr = beacon->data +
1546 offsetof(struct ieee80211_mgmt, u.beacon.variable);
1548 /* find the location of the ssid in the beacon */
1549 while (ptr < beacon->data + beacon->len) {
1550 if (ptr[0] == WLAN_EID_SSID) {
1551 wl->ssid_len = ptr[1];
1552 memcpy(wl->ssid, ptr+2, wl->ssid_len);
1557 wl1271_error("ad-hoc beacon template has no SSID!\n");
1560 static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
1561 struct ieee80211_vif *vif,
1562 struct ieee80211_bss_conf *bss_conf,
1565 enum wl1271_cmd_ps_mode mode;
1566 struct wl1271 *wl = hw->priv;
1567 bool do_join = false;
1570 wl1271_debug(DEBUG_MAC80211, "mac80211 bss info changed");
1572 mutex_lock(&wl->mutex);
1574 ret = wl1271_ps_elp_wakeup(wl, false);
1578 if ((changed && BSS_CHANGED_BEACON_INT) &&
1579 (wl->bss_type == BSS_TYPE_IBSS)) {
1580 wl1271_debug(DEBUG_ADHOC, "ad-hoc beacon interval updated: %d",
1581 bss_conf->beacon_int);
1583 wl->beacon_int = bss_conf->beacon_int;
1587 if ((changed && BSS_CHANGED_BEACON) &&
1588 (wl->bss_type == BSS_TYPE_IBSS)) {
1589 struct sk_buff *beacon = ieee80211_beacon_get(hw, vif);
1591 wl1271_debug(DEBUG_ADHOC, "ad-hoc beacon updated");
1594 struct ieee80211_hdr *hdr;
1596 wl1271_ssid_set(wl, beacon);
1597 ret = wl1271_cmd_template_set(wl, CMD_TEMPL_BEACON,
1602 dev_kfree_skb(beacon);
1606 hdr = (struct ieee80211_hdr *) beacon->data;
1607 hdr->frame_control = cpu_to_le16(
1608 IEEE80211_FTYPE_MGMT |
1609 IEEE80211_STYPE_PROBE_RESP);
1611 ret = wl1271_cmd_template_set(wl,
1612 CMD_TEMPL_PROBE_RESPONSE,
1615 dev_kfree_skb(beacon);
1619 /* Need to update the SSID (for filtering etc) */
1624 if ((changed & BSS_CHANGED_BEACON_ENABLED) &&
1625 (wl->bss_type == BSS_TYPE_IBSS)) {
1626 wl1271_debug(DEBUG_ADHOC, "ad-hoc beaconing: %s",
1627 bss_conf->enable_beacon ? "enabled" : "disabled");
1629 if (bss_conf->enable_beacon)
1630 wl->set_bss_type = BSS_TYPE_IBSS;
1632 wl->set_bss_type = BSS_TYPE_STA_BSS;
1636 if ((changed & BSS_CHANGED_BSSID) &&
1638 * Now we know the correct bssid, so we send a new join command
1639 * and enable the BSSID filter
1641 memcmp(wl->bssid, bss_conf->bssid, ETH_ALEN)) {
1642 memcpy(wl->bssid, bss_conf->bssid, ETH_ALEN);
1644 ret = wl1271_cmd_build_null_data(wl);
1648 /* filter out all packets not from this BSSID */
1649 wl1271_configure_filters(wl, 0);
1651 /* Need to update the BSSID (for filtering etc) */
1655 if (changed & BSS_CHANGED_ASSOC) {
1656 if (bss_conf->assoc) {
1657 wl->aid = bss_conf->aid;
1658 set_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
1661 * with wl1271, we don't need to update the
1662 * beacon_int and dtim_period, because the firmware
1663 * updates it by itself when the first beacon is
1664 * received after a join.
1666 ret = wl1271_cmd_build_ps_poll(wl, wl->aid);
1671 * The SSID is intentionally set to NULL here - the
1672 * firmware will set the probe request with a
1673 * broadcast SSID regardless of what we set in the
1676 ret = wl1271_cmd_build_probe_req(wl, NULL, 0,
1679 ret = wl1271_acx_aid(wl, wl->aid);
1683 /* enable the connection monitoring feature */
1684 ret = wl1271_acx_conn_monit_params(wl, true);
1688 /* If we want to go in PSM but we're not there yet */
1689 if (test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags) &&
1690 !test_bit(WL1271_FLAG_PSM, &wl->flags)) {
1691 mode = STATION_POWER_SAVE_MODE;
1692 ret = wl1271_ps_set_mode(wl, mode, true);
1697 /* use defaults when not associated */
1698 clear_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
1701 /* disable connection monitor features */
1702 ret = wl1271_acx_conn_monit_params(wl, false);
1709 if (changed & BSS_CHANGED_ERP_SLOT) {
1710 if (bss_conf->use_short_slot)
1711 ret = wl1271_acx_slot(wl, SLOT_TIME_SHORT);
1713 ret = wl1271_acx_slot(wl, SLOT_TIME_LONG);
1715 wl1271_warning("Set slot time failed %d", ret);
1720 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
1721 if (bss_conf->use_short_preamble)
1722 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_SHORT);
1724 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_LONG);
1727 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
1728 if (bss_conf->use_cts_prot)
1729 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_ENABLE);
1731 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_DISABLE);
1733 wl1271_warning("Set ctsprotect failed %d", ret);
1739 ret = wl1271_cmd_join(wl, wl->set_bss_type);
1741 wl1271_warning("cmd join failed %d", ret);
1744 set_bit(WL1271_FLAG_JOINED, &wl->flags);
1748 wl1271_ps_elp_sleep(wl);
1751 mutex_unlock(&wl->mutex);
1754 static int wl1271_op_conf_tx(struct ieee80211_hw *hw, u16 queue,
1755 const struct ieee80211_tx_queue_params *params)
1757 struct wl1271 *wl = hw->priv;
1761 mutex_lock(&wl->mutex);
1763 wl1271_debug(DEBUG_MAC80211, "mac80211 conf tx %d", queue);
1765 ret = wl1271_ps_elp_wakeup(wl, false);
1769 /* the txop is confed in units of 32us by the mac80211, we need us */
1770 ret = wl1271_acx_ac_cfg(wl, wl1271_tx_get_queue(queue),
1771 params->cw_min, params->cw_max,
1772 params->aifs, params->txop << 5);
1777 ps_scheme = CONF_PS_SCHEME_UPSD_TRIGGER;
1779 ps_scheme = CONF_PS_SCHEME_LEGACY;
1781 ret = wl1271_acx_tid_cfg(wl, wl1271_tx_get_queue(queue),
1782 CONF_CHANNEL_TYPE_EDCF,
1783 wl1271_tx_get_queue(queue),
1784 ps_scheme, CONF_ACK_POLICY_LEGACY, 0, 0);
1789 wl1271_ps_elp_sleep(wl);
1792 mutex_unlock(&wl->mutex);
1798 /* can't be const, mac80211 writes to this */
1799 static struct ieee80211_rate wl1271_rates[] = {
1801 .hw_value = CONF_HW_BIT_RATE_1MBPS,
1802 .hw_value_short = CONF_HW_BIT_RATE_1MBPS, },
1804 .hw_value = CONF_HW_BIT_RATE_2MBPS,
1805 .hw_value_short = CONF_HW_BIT_RATE_2MBPS,
1806 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
1808 .hw_value = CONF_HW_BIT_RATE_5_5MBPS,
1809 .hw_value_short = CONF_HW_BIT_RATE_5_5MBPS,
1810 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
1812 .hw_value = CONF_HW_BIT_RATE_11MBPS,
1813 .hw_value_short = CONF_HW_BIT_RATE_11MBPS,
1814 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
1816 .hw_value = CONF_HW_BIT_RATE_6MBPS,
1817 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
1819 .hw_value = CONF_HW_BIT_RATE_9MBPS,
1820 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
1822 .hw_value = CONF_HW_BIT_RATE_12MBPS,
1823 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
1825 .hw_value = CONF_HW_BIT_RATE_18MBPS,
1826 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
1828 .hw_value = CONF_HW_BIT_RATE_24MBPS,
1829 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
1831 .hw_value = CONF_HW_BIT_RATE_36MBPS,
1832 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
1834 .hw_value = CONF_HW_BIT_RATE_48MBPS,
1835 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
1837 .hw_value = CONF_HW_BIT_RATE_54MBPS,
1838 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
1841 /* can't be const, mac80211 writes to this */
1842 static struct ieee80211_channel wl1271_channels[] = {
1843 { .hw_value = 1, .center_freq = 2412, .max_power = 25 },
1844 { .hw_value = 2, .center_freq = 2417, .max_power = 25 },
1845 { .hw_value = 3, .center_freq = 2422, .max_power = 25 },
1846 { .hw_value = 4, .center_freq = 2427, .max_power = 25 },
1847 { .hw_value = 5, .center_freq = 2432, .max_power = 25 },
1848 { .hw_value = 6, .center_freq = 2437, .max_power = 25 },
1849 { .hw_value = 7, .center_freq = 2442, .max_power = 25 },
1850 { .hw_value = 8, .center_freq = 2447, .max_power = 25 },
1851 { .hw_value = 9, .center_freq = 2452, .max_power = 25 },
1852 { .hw_value = 10, .center_freq = 2457, .max_power = 25 },
1853 { .hw_value = 11, .center_freq = 2462, .max_power = 25 },
1854 { .hw_value = 12, .center_freq = 2467, .max_power = 25 },
1855 { .hw_value = 13, .center_freq = 2472, .max_power = 25 },
1858 /* mapping to indexes for wl1271_rates */
1859 const static u8 wl1271_rate_to_idx_2ghz[] = {
1860 /* MCS rates are used only with 11n */
1861 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS7 */
1862 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS6 */
1863 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS5 */
1864 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS4 */
1865 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS3 */
1866 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS2 */
1867 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS1 */
1868 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS0 */
1870 11, /* CONF_HW_RXTX_RATE_54 */
1871 10, /* CONF_HW_RXTX_RATE_48 */
1872 9, /* CONF_HW_RXTX_RATE_36 */
1873 8, /* CONF_HW_RXTX_RATE_24 */
1875 /* TI-specific rate */
1876 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
1878 7, /* CONF_HW_RXTX_RATE_18 */
1879 6, /* CONF_HW_RXTX_RATE_12 */
1880 3, /* CONF_HW_RXTX_RATE_11 */
1881 5, /* CONF_HW_RXTX_RATE_9 */
1882 4, /* CONF_HW_RXTX_RATE_6 */
1883 2, /* CONF_HW_RXTX_RATE_5_5 */
1884 1, /* CONF_HW_RXTX_RATE_2 */
1885 0 /* CONF_HW_RXTX_RATE_1 */
1888 /* can't be const, mac80211 writes to this */
1889 static struct ieee80211_supported_band wl1271_band_2ghz = {
1890 .channels = wl1271_channels,
1891 .n_channels = ARRAY_SIZE(wl1271_channels),
1892 .bitrates = wl1271_rates,
1893 .n_bitrates = ARRAY_SIZE(wl1271_rates),
1896 /* 5 GHz data rates for WL1273 */
1897 static struct ieee80211_rate wl1271_rates_5ghz[] = {
1899 .hw_value = CONF_HW_BIT_RATE_6MBPS,
1900 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
1902 .hw_value = CONF_HW_BIT_RATE_9MBPS,
1903 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
1905 .hw_value = CONF_HW_BIT_RATE_12MBPS,
1906 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
1908 .hw_value = CONF_HW_BIT_RATE_18MBPS,
1909 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
1911 .hw_value = CONF_HW_BIT_RATE_24MBPS,
1912 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
1914 .hw_value = CONF_HW_BIT_RATE_36MBPS,
1915 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
1917 .hw_value = CONF_HW_BIT_RATE_48MBPS,
1918 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
1920 .hw_value = CONF_HW_BIT_RATE_54MBPS,
1921 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
1924 /* 5 GHz band channels for WL1273 */
1925 static struct ieee80211_channel wl1271_channels_5ghz[] = {
1926 { .hw_value = 183, .center_freq = 4915},
1927 { .hw_value = 184, .center_freq = 4920},
1928 { .hw_value = 185, .center_freq = 4925},
1929 { .hw_value = 187, .center_freq = 4935},
1930 { .hw_value = 188, .center_freq = 4940},
1931 { .hw_value = 189, .center_freq = 4945},
1932 { .hw_value = 192, .center_freq = 4960},
1933 { .hw_value = 196, .center_freq = 4980},
1934 { .hw_value = 7, .center_freq = 5035},
1935 { .hw_value = 8, .center_freq = 5040},
1936 { .hw_value = 9, .center_freq = 5045},
1937 { .hw_value = 11, .center_freq = 5055},
1938 { .hw_value = 12, .center_freq = 5060},
1939 { .hw_value = 16, .center_freq = 5080},
1940 { .hw_value = 34, .center_freq = 5170},
1941 { .hw_value = 36, .center_freq = 5180},
1942 { .hw_value = 38, .center_freq = 5190},
1943 { .hw_value = 40, .center_freq = 5200},
1944 { .hw_value = 42, .center_freq = 5210},
1945 { .hw_value = 44, .center_freq = 5220},
1946 { .hw_value = 46, .center_freq = 5230},
1947 { .hw_value = 48, .center_freq = 5240},
1948 { .hw_value = 52, .center_freq = 5260},
1949 { .hw_value = 56, .center_freq = 5280},
1950 { .hw_value = 60, .center_freq = 5300},
1951 { .hw_value = 64, .center_freq = 5320},
1952 { .hw_value = 100, .center_freq = 5500},
1953 { .hw_value = 104, .center_freq = 5520},
1954 { .hw_value = 108, .center_freq = 5540},
1955 { .hw_value = 112, .center_freq = 5560},
1956 { .hw_value = 116, .center_freq = 5580},
1957 { .hw_value = 120, .center_freq = 5600},
1958 { .hw_value = 124, .center_freq = 5620},
1959 { .hw_value = 128, .center_freq = 5640},
1960 { .hw_value = 132, .center_freq = 5660},
1961 { .hw_value = 136, .center_freq = 5680},
1962 { .hw_value = 140, .center_freq = 5700},
1963 { .hw_value = 149, .center_freq = 5745},
1964 { .hw_value = 153, .center_freq = 5765},
1965 { .hw_value = 157, .center_freq = 5785},
1966 { .hw_value = 161, .center_freq = 5805},
1967 { .hw_value = 165, .center_freq = 5825},
1970 /* mapping to indexes for wl1271_rates_5ghz */
1971 const static u8 wl1271_rate_to_idx_5ghz[] = {
1972 /* MCS rates are used only with 11n */
1973 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS7 */
1974 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS6 */
1975 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS5 */
1976 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS4 */
1977 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS3 */
1978 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS2 */
1979 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS1 */
1980 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS0 */
1982 7, /* CONF_HW_RXTX_RATE_54 */
1983 6, /* CONF_HW_RXTX_RATE_48 */
1984 5, /* CONF_HW_RXTX_RATE_36 */
1985 4, /* CONF_HW_RXTX_RATE_24 */
1987 /* TI-specific rate */
1988 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
1990 3, /* CONF_HW_RXTX_RATE_18 */
1991 2, /* CONF_HW_RXTX_RATE_12 */
1992 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_11 */
1993 1, /* CONF_HW_RXTX_RATE_9 */
1994 0, /* CONF_HW_RXTX_RATE_6 */
1995 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_5_5 */
1996 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_2 */
1997 CONF_HW_RXTX_RATE_UNSUPPORTED /* CONF_HW_RXTX_RATE_1 */
2000 static struct ieee80211_supported_band wl1271_band_5ghz = {
2001 .channels = wl1271_channels_5ghz,
2002 .n_channels = ARRAY_SIZE(wl1271_channels_5ghz),
2003 .bitrates = wl1271_rates_5ghz,
2004 .n_bitrates = ARRAY_SIZE(wl1271_rates_5ghz),
2007 const static u8 *wl1271_band_rate_to_idx[] = {
2008 [IEEE80211_BAND_2GHZ] = wl1271_rate_to_idx_2ghz,
2009 [IEEE80211_BAND_5GHZ] = wl1271_rate_to_idx_5ghz
2012 static const struct ieee80211_ops wl1271_ops = {
2013 .start = wl1271_op_start,
2014 .stop = wl1271_op_stop,
2015 .add_interface = wl1271_op_add_interface,
2016 .remove_interface = wl1271_op_remove_interface,
2017 .config = wl1271_op_config,
2018 .prepare_multicast = wl1271_op_prepare_multicast,
2019 .configure_filter = wl1271_op_configure_filter,
2021 .set_key = wl1271_op_set_key,
2022 .hw_scan = wl1271_op_hw_scan,
2023 .bss_info_changed = wl1271_op_bss_info_changed,
2024 .set_rts_threshold = wl1271_op_set_rts_threshold,
2025 .conf_tx = wl1271_op_conf_tx,
2026 CFG80211_TESTMODE_CMD(wl1271_tm_cmd)
2030 u8 wl1271_rate_to_idx(struct wl1271 *wl, int rate)
2034 BUG_ON(wl->band >= sizeof(wl1271_band_rate_to_idx)/sizeof(u8 *));
2036 if (unlikely(rate >= CONF_HW_RXTX_RATE_MAX)) {
2037 wl1271_error("Illegal RX rate from HW: %d", rate);
2041 idx = wl1271_band_rate_to_idx[wl->band][rate];
2042 if (unlikely(idx == CONF_HW_RXTX_RATE_UNSUPPORTED)) {
2043 wl1271_error("Unsupported RX rate from HW: %d", rate);
2050 static ssize_t wl1271_sysfs_show_bt_coex_state(struct device *dev,
2051 struct device_attribute *attr,
2054 struct wl1271 *wl = dev_get_drvdata(dev);
2057 /* FIXME: what's the maximum length of buf? page size?*/
2060 mutex_lock(&wl->mutex);
2061 len = snprintf(buf, len, "%d\n\n0 - off\n1 - on\n",
2063 mutex_unlock(&wl->mutex);
2069 static ssize_t wl1271_sysfs_store_bt_coex_state(struct device *dev,
2070 struct device_attribute *attr,
2071 const char *buf, size_t count)
2073 struct wl1271 *wl = dev_get_drvdata(dev);
2077 ret = strict_strtoul(buf, 10, &res);
2080 wl1271_warning("incorrect value written to bt_coex_mode");
2084 mutex_lock(&wl->mutex);
2088 if (res == wl->sg_enabled)
2091 wl->sg_enabled = res;
2093 if (wl->state == WL1271_STATE_OFF)
2096 ret = wl1271_ps_elp_wakeup(wl, false);
2100 wl1271_acx_sg_enable(wl, wl->sg_enabled);
2101 wl1271_ps_elp_sleep(wl);
2104 mutex_unlock(&wl->mutex);
2108 static DEVICE_ATTR(bt_coex_state, S_IRUGO | S_IWUSR,
2109 wl1271_sysfs_show_bt_coex_state,
2110 wl1271_sysfs_store_bt_coex_state);
2112 int wl1271_register_hw(struct wl1271 *wl)
2116 if (wl->mac80211_registered)
2119 SET_IEEE80211_PERM_ADDR(wl->hw, wl->mac_addr);
2121 ret = ieee80211_register_hw(wl->hw);
2123 wl1271_error("unable to register mac80211 hw: %d", ret);
2127 wl->mac80211_registered = true;
2129 wl1271_notice("loaded");
2133 EXPORT_SYMBOL_GPL(wl1271_register_hw);
2135 void wl1271_unregister_hw(struct wl1271 *wl)
2137 ieee80211_unregister_hw(wl->hw);
2138 wl->mac80211_registered = false;
2141 EXPORT_SYMBOL_GPL(wl1271_unregister_hw);
2143 int wl1271_init_ieee80211(struct wl1271 *wl)
2145 /* The tx descriptor buffer and the TKIP space. */
2146 wl->hw->extra_tx_headroom = WL1271_TKIP_IV_SPACE +
2147 sizeof(struct wl1271_tx_hw_descr);
2150 /* FIXME: find a proper value */
2151 wl->hw->channel_change_time = 10000;
2153 wl->hw->flags = IEEE80211_HW_SIGNAL_DBM |
2154 IEEE80211_HW_NOISE_DBM |
2155 IEEE80211_HW_BEACON_FILTER |
2156 IEEE80211_HW_SUPPORTS_PS |
2157 IEEE80211_HW_SUPPORTS_UAPSD |
2158 IEEE80211_HW_HAS_RATE_CONTROL |
2159 IEEE80211_HW_CONNECTION_MONITOR;
2161 wl->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
2162 BIT(NL80211_IFTYPE_ADHOC);
2163 wl->hw->wiphy->max_scan_ssids = 1;
2164 wl->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = &wl1271_band_2ghz;
2166 if (wl1271_11a_enabled())
2167 wl->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = &wl1271_band_5ghz;
2170 wl->hw->max_rates = 1;
2172 SET_IEEE80211_DEV(wl->hw, wl1271_wl_to_dev(wl));
2176 EXPORT_SYMBOL_GPL(wl1271_init_ieee80211);
2178 #define WL1271_DEFAULT_CHANNEL 0
2180 struct ieee80211_hw *wl1271_alloc_hw(void)
2182 struct ieee80211_hw *hw;
2183 struct platform_device *plat_dev = NULL;
2187 hw = ieee80211_alloc_hw(sizeof(*wl), &wl1271_ops);
2189 wl1271_error("could not alloc ieee80211_hw");
2194 plat_dev = kmalloc(sizeof(wl1271_device), GFP_KERNEL);
2196 wl1271_error("could not allocate platform_device");
2198 goto err_plat_alloc;
2201 memcpy(plat_dev, &wl1271_device, sizeof(wl1271_device));
2204 memset(wl, 0, sizeof(*wl));
2206 INIT_LIST_HEAD(&wl->list);
2209 wl->plat_dev = plat_dev;
2211 skb_queue_head_init(&wl->tx_queue);
2213 INIT_DELAYED_WORK(&wl->elp_work, wl1271_elp_work);
2214 wl->channel = WL1271_DEFAULT_CHANNEL;
2215 wl->beacon_int = WL1271_DEFAULT_BEACON_INT;
2216 wl->default_key = 0;
2218 wl->rx_config = WL1271_DEFAULT_RX_CONFIG;
2219 wl->rx_filter = WL1271_DEFAULT_RX_FILTER;
2220 wl->psm_entry_retry = 0;
2221 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
2222 wl->basic_rate_set = CONF_TX_RATE_MASK_BASIC;
2223 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
2224 wl->sta_rate_set = 0;
2225 wl->band = IEEE80211_BAND_2GHZ;
2228 wl->sg_enabled = true;
2230 for (i = 0; i < ACX_TX_DESCRIPTORS; i++)
2231 wl->tx_frames[i] = NULL;
2233 spin_lock_init(&wl->wl_lock);
2235 wl->state = WL1271_STATE_OFF;
2236 mutex_init(&wl->mutex);
2238 /* Apply default driver configuration. */
2239 wl1271_conf_init(wl);
2241 wl1271_debugfs_init(wl);
2243 /* Register platform device */
2244 ret = platform_device_register(wl->plat_dev);
2246 wl1271_error("couldn't register platform device");
2249 dev_set_drvdata(&wl->plat_dev->dev, wl);
2251 /* Create sysfs file to control bt coex state */
2252 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
2254 wl1271_error("failed to create sysfs file bt_coex_state");
2261 platform_device_unregister(wl->plat_dev);
2264 wl1271_debugfs_exit(wl);
2268 ieee80211_free_hw(hw);
2272 return ERR_PTR(ret);
2274 EXPORT_SYMBOL_GPL(wl1271_alloc_hw);
2276 int wl1271_free_hw(struct wl1271 *wl)
2278 platform_device_unregister(wl->plat_dev);
2279 kfree(wl->plat_dev);
2281 wl1271_debugfs_exit(wl);
2283 kfree(wl->target_mem_map);
2289 kfree(wl->fw_status);
2290 kfree(wl->tx_res_if);
2292 ieee80211_free_hw(wl->hw);
2296 EXPORT_SYMBOL_GPL(wl1271_free_hw);
2298 MODULE_LICENSE("GPL");
2299 MODULE_AUTHOR("Luciano Coelho <luciano.coelho@nokia.com>");
2300 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");