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>
33 #include <linux/slab.h>
36 #include "wl12xx_80211.h"
37 #include "wl1271_reg.h"
38 #include "wl1271_io.h"
39 #include "wl1271_event.h"
40 #include "wl1271_tx.h"
41 #include "wl1271_rx.h"
42 #include "wl1271_ps.h"
43 #include "wl1271_init.h"
44 #include "wl1271_debugfs.h"
45 #include "wl1271_cmd.h"
46 #include "wl1271_boot.h"
47 #include "wl1271_testmode.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] = 0,
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,
120 .enabled_rates = CONF_HW_BIT_RATE_1MBPS |
121 CONF_HW_BIT_RATE_2MBPS,
122 .short_retry_limit = 10,
123 .long_retry_limit = 10,
146 .aifsn = CONF_TX_AIFS_PIFS,
153 .aifsn = CONF_TX_AIFS_PIFS,
161 .channel_type = CONF_CHANNEL_TYPE_DCF,
162 .tsid = CONF_TX_AC_BE,
163 .ps_scheme = CONF_PS_SCHEME_LEGACY,
164 .ack_policy = CONF_ACK_POLICY_LEGACY,
169 .channel_type = CONF_CHANNEL_TYPE_DCF,
170 .tsid = CONF_TX_AC_BE,
171 .ps_scheme = CONF_PS_SCHEME_LEGACY,
172 .ack_policy = CONF_ACK_POLICY_LEGACY,
177 .channel_type = CONF_CHANNEL_TYPE_DCF,
178 .tsid = CONF_TX_AC_BE,
179 .ps_scheme = CONF_PS_SCHEME_LEGACY,
180 .ack_policy = CONF_ACK_POLICY_LEGACY,
185 .channel_type = CONF_CHANNEL_TYPE_DCF,
186 .tsid = CONF_TX_AC_BE,
187 .ps_scheme = CONF_PS_SCHEME_LEGACY,
188 .ack_policy = CONF_ACK_POLICY_LEGACY,
193 .channel_type = CONF_CHANNEL_TYPE_DCF,
194 .tsid = CONF_TX_AC_BE,
195 .ps_scheme = CONF_PS_SCHEME_LEGACY,
196 .ack_policy = CONF_ACK_POLICY_LEGACY,
201 .channel_type = CONF_CHANNEL_TYPE_DCF,
202 .tsid = CONF_TX_AC_BE,
203 .ps_scheme = CONF_PS_SCHEME_LEGACY,
204 .ack_policy = CONF_ACK_POLICY_LEGACY,
209 .channel_type = CONF_CHANNEL_TYPE_DCF,
210 .tsid = CONF_TX_AC_BE,
211 .ps_scheme = CONF_PS_SCHEME_LEGACY,
212 .ack_policy = CONF_ACK_POLICY_LEGACY,
216 .frag_threshold = IEEE80211_MAX_FRAG_THRESHOLD,
217 .tx_compl_timeout = 700,
218 .tx_compl_threshold = 4
221 .wake_up_event = CONF_WAKE_UP_EVENT_DTIM,
222 .listen_interval = 0,
223 .bcn_filt_mode = CONF_BCN_FILT_MODE_ENABLED,
224 .bcn_filt_ie_count = 1,
227 .ie = WLAN_EID_CHANNEL_SWITCH,
228 .rule = CONF_BCN_RULE_PASS_ON_APPEARANCE,
231 .synch_fail_thold = 10,
232 .bss_lose_timeout = 100,
233 .beacon_rx_timeout = 10000,
234 .broadcast_timeout = 20000,
235 .rx_broadcast_in_ps = 1,
236 .ps_poll_threshold = 20,
237 .sig_trigger_count = 2,
242 .metric = CONF_TRIG_METRIC_RSSI_BEACON,
243 .type = CONF_TRIG_EVENT_TYPE_EDGE,
244 .direction = CONF_TRIG_EVENT_DIR_LOW,
252 .metric = CONF_TRIG_METRIC_RSSI_BEACON,
253 .type = CONF_TRIG_EVENT_TYPE_EDGE,
254 .direction = CONF_TRIG_EVENT_DIR_HIGH,
261 .rssi_bcn_avg_weight = 10,
262 .rssi_pkt_avg_weight = 10,
263 .snr_bcn_avg_weight = 10,
264 .snr_pkt_avg_weight = 10
266 .bet_enable = CONF_BET_MODE_ENABLE,
267 .bet_max_consecutive = 10,
268 .psm_entry_retries = 3
280 .host_clk_settling_time = 5000,
281 .host_fast_wakeup_support = false
285 static void wl1271_device_release(struct device *dev)
290 static struct platform_device wl1271_device = {
294 /* device model insists to have a release function */
296 .release = wl1271_device_release,
300 static LIST_HEAD(wl_list);
302 static void wl1271_conf_init(struct wl1271 *wl)
306 * This function applies the default configuration to the driver. This
307 * function is invoked upon driver load (spi probe.)
309 * The configuration is stored in a run-time structure in order to
310 * facilitate for run-time adjustment of any of the parameters. Making
311 * changes to the configuration structure will apply the new values on
312 * the next interface up (wl1271_op_start.)
315 /* apply driver default configuration */
316 memcpy(&wl->conf, &default_conf, sizeof(default_conf));
320 static int wl1271_plt_init(struct wl1271 *wl)
322 struct conf_tx_ac_category *conf_ac;
323 struct conf_tx_tid *conf_tid;
326 ret = wl1271_cmd_general_parms(wl);
330 ret = wl1271_cmd_radio_parms(wl);
334 ret = wl1271_init_templates_config(wl);
338 ret = wl1271_acx_init_mem_config(wl);
342 /* PHY layer config */
343 ret = wl1271_init_phy_config(wl);
345 goto out_free_memmap;
347 ret = wl1271_acx_dco_itrim_params(wl);
349 goto out_free_memmap;
351 /* Initialize connection monitoring thresholds */
352 ret = wl1271_acx_conn_monit_params(wl);
354 goto out_free_memmap;
356 /* Bluetooth WLAN coexistence */
357 ret = wl1271_init_pta(wl);
359 goto out_free_memmap;
361 /* Energy detection */
362 ret = wl1271_init_energy_detection(wl);
364 goto out_free_memmap;
366 /* Default fragmentation threshold */
367 ret = wl1271_acx_frag_threshold(wl);
369 goto out_free_memmap;
371 /* Default TID configuration */
372 for (i = 0; i < wl->conf.tx.tid_conf_count; i++) {
373 conf_tid = &wl->conf.tx.tid_conf[i];
374 ret = wl1271_acx_tid_cfg(wl, conf_tid->queue_id,
375 conf_tid->channel_type,
378 conf_tid->ack_policy,
379 conf_tid->apsd_conf[0],
380 conf_tid->apsd_conf[1]);
382 goto out_free_memmap;
385 /* Default AC configuration */
386 for (i = 0; i < wl->conf.tx.ac_conf_count; i++) {
387 conf_ac = &wl->conf.tx.ac_conf[i];
388 ret = wl1271_acx_ac_cfg(wl, conf_ac->ac, conf_ac->cw_min,
389 conf_ac->cw_max, conf_ac->aifsn,
390 conf_ac->tx_op_limit);
392 goto out_free_memmap;
395 /* Enable data path */
396 ret = wl1271_cmd_data_path(wl, 1);
398 goto out_free_memmap;
400 /* Configure for CAM power saving (ie. always active) */
401 ret = wl1271_acx_sleep_auth(wl, WL1271_PSM_CAM);
403 goto out_free_memmap;
406 ret = wl1271_acx_pm_config(wl);
408 goto out_free_memmap;
413 kfree(wl->target_mem_map);
414 wl->target_mem_map = NULL;
419 static void wl1271_fw_status(struct wl1271 *wl,
420 struct wl1271_fw_status *status)
426 wl1271_raw_read(wl, FW_STATUS_ADDR, status, sizeof(*status), false);
428 wl1271_debug(DEBUG_IRQ, "intr: 0x%x (fw_rx_counter = %d, "
429 "drv_rx_counter = %d, tx_results_counter = %d)",
431 status->fw_rx_counter,
432 status->drv_rx_counter,
433 status->tx_results_counter);
435 /* update number of available TX blocks */
436 for (i = 0; i < NUM_TX_QUEUES; i++) {
437 u32 cnt = le32_to_cpu(status->tx_released_blks[i]) -
438 wl->tx_blocks_freed[i];
440 wl->tx_blocks_freed[i] =
441 le32_to_cpu(status->tx_released_blks[i]);
442 wl->tx_blocks_available += cnt;
446 /* if more blocks are available now, schedule some tx work */
447 if (total && !skb_queue_empty(&wl->tx_queue))
448 ieee80211_queue_work(wl->hw, &wl->tx_work);
450 /* update the host-chipset time offset */
452 wl->time_offset = (timespec_to_ns(&ts) >> 10) -
453 (s64)le32_to_cpu(status->fw_localtime);
456 #define WL1271_IRQ_MAX_LOOPS 10
458 static void wl1271_irq_work(struct work_struct *work)
462 int loopcount = WL1271_IRQ_MAX_LOOPS;
465 container_of(work, struct wl1271, irq_work);
467 mutex_lock(&wl->mutex);
469 wl1271_debug(DEBUG_IRQ, "IRQ work");
471 if (unlikely(wl->state == WL1271_STATE_OFF))
474 ret = wl1271_ps_elp_wakeup(wl, true);
478 spin_lock_irqsave(&wl->wl_lock, flags);
479 while (test_bit(WL1271_FLAG_IRQ_PENDING, &wl->flags) && loopcount) {
480 clear_bit(WL1271_FLAG_IRQ_PENDING, &wl->flags);
481 spin_unlock_irqrestore(&wl->wl_lock, flags);
484 wl1271_fw_status(wl, wl->fw_status);
485 intr = le32_to_cpu(wl->fw_status->intr);
487 wl1271_debug(DEBUG_IRQ, "Zero interrupt received.");
491 intr &= WL1271_INTR_MASK;
493 if (intr & WL1271_ACX_INTR_DATA) {
494 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_DATA");
496 /* check for tx results */
497 if (wl->fw_status->tx_results_counter !=
498 (wl->tx_results_count & 0xff))
499 wl1271_tx_complete(wl);
501 wl1271_rx(wl, wl->fw_status);
504 if (intr & WL1271_ACX_INTR_EVENT_A) {
505 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_A");
506 wl1271_event_handle(wl, 0);
509 if (intr & WL1271_ACX_INTR_EVENT_B) {
510 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_B");
511 wl1271_event_handle(wl, 1);
514 if (intr & WL1271_ACX_INTR_INIT_COMPLETE)
515 wl1271_debug(DEBUG_IRQ,
516 "WL1271_ACX_INTR_INIT_COMPLETE");
518 if (intr & WL1271_ACX_INTR_HW_AVAILABLE)
519 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_HW_AVAILABLE");
521 spin_lock_irqsave(&wl->wl_lock, flags);
524 if (test_bit(WL1271_FLAG_IRQ_PENDING, &wl->flags))
525 ieee80211_queue_work(wl->hw, &wl->irq_work);
527 clear_bit(WL1271_FLAG_IRQ_RUNNING, &wl->flags);
528 spin_unlock_irqrestore(&wl->wl_lock, flags);
530 wl1271_ps_elp_sleep(wl);
533 mutex_unlock(&wl->mutex);
536 static int wl1271_fetch_firmware(struct wl1271 *wl)
538 const struct firmware *fw;
541 ret = request_firmware(&fw, WL1271_FW_NAME, wl1271_wl_to_dev(wl));
544 wl1271_error("could not get firmware: %d", ret);
549 wl1271_error("firmware size is not multiple of 32 bits: %zu",
555 wl->fw_len = fw->size;
556 wl->fw = vmalloc(wl->fw_len);
559 wl1271_error("could not allocate memory for the firmware");
564 memcpy(wl->fw, fw->data, wl->fw_len);
569 release_firmware(fw);
574 static int wl1271_fetch_nvs(struct wl1271 *wl)
576 const struct firmware *fw;
579 ret = request_firmware(&fw, WL1271_NVS_NAME, wl1271_wl_to_dev(wl));
582 wl1271_error("could not get nvs file: %d", ret);
586 if (fw->size != sizeof(struct wl1271_nvs_file)) {
587 wl1271_error("nvs size is not as expected: %zu != %zu",
588 fw->size, sizeof(struct wl1271_nvs_file));
593 wl->nvs = kmalloc(sizeof(struct wl1271_nvs_file), GFP_KERNEL);
596 wl1271_error("could not allocate memory for the nvs file");
601 memcpy(wl->nvs, fw->data, sizeof(struct wl1271_nvs_file));
604 release_firmware(fw);
609 static void wl1271_fw_wakeup(struct wl1271 *wl)
613 elp_reg = ELPCTRL_WAKE_UP;
614 wl1271_raw_write32(wl, HW_ACCESS_ELP_CTRL_REG_ADDR, elp_reg);
617 static int wl1271_setup(struct wl1271 *wl)
619 wl->fw_status = kmalloc(sizeof(*wl->fw_status), GFP_KERNEL);
623 wl->tx_res_if = kmalloc(sizeof(*wl->tx_res_if), GFP_KERNEL);
624 if (!wl->tx_res_if) {
625 kfree(wl->fw_status);
629 INIT_WORK(&wl->irq_work, wl1271_irq_work);
630 INIT_WORK(&wl->tx_work, wl1271_tx_work);
634 static int wl1271_chip_wakeup(struct wl1271 *wl)
636 struct wl1271_partition_set partition;
639 msleep(WL1271_PRE_POWER_ON_SLEEP);
641 msleep(WL1271_POWER_ON_SLEEP);
645 /* We don't need a real memory partition here, because we only want
646 * to use the registers at this point. */
647 memset(&partition, 0, sizeof(partition));
648 partition.reg.start = REGISTERS_BASE;
649 partition.reg.size = REGISTERS_DOWN_SIZE;
650 wl1271_set_partition(wl, &partition);
652 /* ELP module wake up */
653 wl1271_fw_wakeup(wl);
655 /* whal_FwCtrl_BootSm() */
657 /* 0. read chip id from CHIP_ID */
658 wl->chip.id = wl1271_read32(wl, CHIP_ID_B);
660 /* 1. check if chip id is valid */
662 switch (wl->chip.id) {
663 case CHIP_ID_1271_PG10:
664 wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
667 ret = wl1271_setup(wl);
671 case CHIP_ID_1271_PG20:
672 wl1271_debug(DEBUG_BOOT, "chip id 0x%x (1271 PG20)",
675 ret = wl1271_setup(wl);
680 wl1271_warning("unsupported chip id: 0x%x", wl->chip.id);
685 if (wl->fw == NULL) {
686 ret = wl1271_fetch_firmware(wl);
691 /* No NVS from netlink, try to get it from the filesystem */
692 if (wl->nvs == NULL) {
693 ret = wl1271_fetch_nvs(wl);
702 int wl1271_plt_start(struct wl1271 *wl)
704 int retries = WL1271_BOOT_RETRIES;
707 mutex_lock(&wl->mutex);
709 wl1271_notice("power up");
711 if (wl->state != WL1271_STATE_OFF) {
712 wl1271_error("cannot go into PLT state because not "
713 "in off state: %d", wl->state);
720 ret = wl1271_chip_wakeup(wl);
724 ret = wl1271_boot(wl);
728 ret = wl1271_plt_init(wl);
732 wl->state = WL1271_STATE_PLT;
733 wl1271_notice("firmware booted in PLT mode (%s)",
738 wl1271_disable_interrupts(wl);
739 mutex_unlock(&wl->mutex);
740 /* Unlocking the mutex in the middle of handling is
741 inherently unsafe. In this case we deem it safe to do,
742 because we need to let any possibly pending IRQ out of
743 the system (and while we are WL1271_STATE_OFF the IRQ
744 work function will not do anything.) Also, any other
745 possible concurrent operations will fail due to the
746 current state, hence the wl1271 struct should be safe. */
747 cancel_work_sync(&wl->irq_work);
748 mutex_lock(&wl->mutex);
750 wl1271_power_off(wl);
753 wl1271_error("firmware boot in PLT mode failed despite %d retries",
754 WL1271_BOOT_RETRIES);
756 mutex_unlock(&wl->mutex);
761 int wl1271_plt_stop(struct wl1271 *wl)
765 mutex_lock(&wl->mutex);
767 wl1271_notice("power down");
769 if (wl->state != WL1271_STATE_PLT) {
770 wl1271_error("cannot power down because not in PLT "
771 "state: %d", wl->state);
776 wl1271_disable_interrupts(wl);
777 wl1271_power_off(wl);
779 wl->state = WL1271_STATE_OFF;
783 mutex_unlock(&wl->mutex);
789 static int wl1271_op_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
791 struct wl1271 *wl = hw->priv;
792 struct ieee80211_conf *conf = &hw->conf;
793 struct ieee80211_tx_info *txinfo = IEEE80211_SKB_CB(skb);
794 struct ieee80211_sta *sta = txinfo->control.sta;
797 /* peek into the rates configured in the STA entry */
798 spin_lock_irqsave(&wl->wl_lock, flags);
799 if (sta && sta->supp_rates[conf->channel->band] != wl->sta_rate_set) {
800 wl->sta_rate_set = sta->supp_rates[conf->channel->band];
801 set_bit(WL1271_FLAG_STA_RATES_CHANGED, &wl->flags);
803 spin_unlock_irqrestore(&wl->wl_lock, flags);
805 /* queue the packet */
806 skb_queue_tail(&wl->tx_queue, skb);
809 * The chip specific setup must run before the first TX packet -
810 * before that, the tx_work will not be initialized!
813 ieee80211_queue_work(wl->hw, &wl->tx_work);
816 * The workqueue is slow to process the tx_queue and we need stop
817 * the queue here, otherwise the queue will get too long.
819 if (skb_queue_len(&wl->tx_queue) >= WL1271_TX_QUEUE_HIGH_WATERMARK) {
820 wl1271_debug(DEBUG_TX, "op_tx: stopping queues");
822 spin_lock_irqsave(&wl->wl_lock, flags);
823 ieee80211_stop_queues(wl->hw);
824 set_bit(WL1271_FLAG_TX_QUEUE_STOPPED, &wl->flags);
825 spin_unlock_irqrestore(&wl->wl_lock, flags);
831 static int wl1271_dev_notify(struct notifier_block *me, unsigned long what,
834 struct net_device *dev;
835 struct wireless_dev *wdev;
837 struct ieee80211_hw *hw;
839 struct wl1271 *wl_temp;
840 struct in_device *idev;
841 struct in_ifaddr *ifa = arg;
844 /* FIXME: this ugly function should probably be implemented in the
845 * mac80211, and here should only be a simple callback handling actual
846 * setting of the filters. Now we need to dig up references to
847 * various structures to gain access to what we need.
848 * Also, because of this, there is no "initial" setting of the filter
849 * in "op_start", because we don't want to dig up struct net_device
850 * there - the filter will be set upon first change of the interface
853 dev = ifa->ifa_dev->dev;
855 wdev = dev->ieee80211_ptr;
863 hw = wiphy_priv(wiphy);
867 /* Check that the interface is one supported by this driver. */
869 list_for_each_entry(wl, &wl_list, list) {
876 /* Get the interface IP address for the device. "ifa" will become
878 - there is no IPV4 protocol address configured
879 - there are multiple (virtual) IPV4 addresses configured
880 When "ifa" is NULL, filtering will be disabled.
885 ifa = idev->ifa_list;
887 if (ifa && ifa->ifa_next)
890 mutex_lock(&wl->mutex);
892 if (wl->state == WL1271_STATE_OFF)
895 ret = wl1271_ps_elp_wakeup(wl, false);
899 ret = wl1271_acx_arp_ip_filter(wl, true,
900 (u8 *)&ifa->ifa_address,
903 ret = wl1271_acx_arp_ip_filter(wl, false, NULL,
905 wl1271_ps_elp_sleep(wl);
908 mutex_unlock(&wl->mutex);
913 static struct notifier_block wl1271_dev_notifier = {
914 .notifier_call = wl1271_dev_notify,
918 static int wl1271_op_start(struct ieee80211_hw *hw)
920 wl1271_debug(DEBUG_MAC80211, "mac80211 start");
923 * We have to delay the booting of the hardware because
924 * we need to know the local MAC address before downloading and
925 * initializing the firmware. The MAC address cannot be changed
926 * after boot, and without the proper MAC address, the firmware
927 * will not function properly.
929 * The MAC address is first known when the corresponding interface
930 * is added. That is where we will initialize the hardware.
936 static void wl1271_op_stop(struct ieee80211_hw *hw)
938 wl1271_debug(DEBUG_MAC80211, "mac80211 stop");
941 static int wl1271_op_add_interface(struct ieee80211_hw *hw,
942 struct ieee80211_vif *vif)
944 struct wl1271 *wl = hw->priv;
945 int retries = WL1271_BOOT_RETRIES;
948 wl1271_debug(DEBUG_MAC80211, "mac80211 add interface type %d mac %pM",
949 vif->type, vif->addr);
951 mutex_lock(&wl->mutex);
960 case NL80211_IFTYPE_STATION:
961 wl->bss_type = BSS_TYPE_STA_BSS;
963 case NL80211_IFTYPE_ADHOC:
964 wl->bss_type = BSS_TYPE_IBSS;
971 memcpy(wl->mac_addr, vif->addr, ETH_ALEN);
973 if (wl->state != WL1271_STATE_OFF) {
974 wl1271_error("cannot start because not in off state: %d",
982 ret = wl1271_chip_wakeup(wl);
986 ret = wl1271_boot(wl);
990 ret = wl1271_hw_init(wl);
994 wl->state = WL1271_STATE_ON;
995 wl1271_info("firmware booted (%s)", wl->chip.fw_ver);
999 wl1271_disable_interrupts(wl);
1000 mutex_unlock(&wl->mutex);
1001 /* Unlocking the mutex in the middle of handling is
1002 inherently unsafe. In this case we deem it safe to do,
1003 because we need to let any possibly pending IRQ out of
1004 the system (and while we are WL1271_STATE_OFF the IRQ
1005 work function will not do anything.) Also, any other
1006 possible concurrent operations will fail due to the
1007 current state, hence the wl1271 struct should be safe. */
1008 cancel_work_sync(&wl->irq_work);
1009 mutex_lock(&wl->mutex);
1011 wl1271_power_off(wl);
1014 wl1271_error("firmware boot failed despite %d retries",
1015 WL1271_BOOT_RETRIES);
1017 mutex_unlock(&wl->mutex);
1020 list_add(&wl->list, &wl_list);
1021 register_inetaddr_notifier(&wl1271_dev_notifier);
1027 static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
1028 struct ieee80211_vif *vif)
1030 struct wl1271 *wl = hw->priv;
1033 unregister_inetaddr_notifier(&wl1271_dev_notifier);
1035 mutex_lock(&wl->mutex);
1036 wl1271_debug(DEBUG_MAC80211, "mac80211 remove interface");
1038 wl1271_info("down");
1040 list_del(&wl->list);
1042 WARN_ON(wl->state != WL1271_STATE_ON);
1044 if (test_and_clear_bit(WL1271_FLAG_SCANNING, &wl->flags)) {
1045 mutex_unlock(&wl->mutex);
1046 ieee80211_scan_completed(wl->hw, true);
1047 mutex_lock(&wl->mutex);
1050 wl->state = WL1271_STATE_OFF;
1052 wl1271_disable_interrupts(wl);
1054 mutex_unlock(&wl->mutex);
1056 cancel_work_sync(&wl->irq_work);
1057 cancel_work_sync(&wl->tx_work);
1059 mutex_lock(&wl->mutex);
1061 /* let's notify MAC80211 about the remaining pending TX frames */
1062 wl1271_tx_flush(wl);
1063 wl1271_power_off(wl);
1065 memset(wl->bssid, 0, ETH_ALEN);
1066 memset(wl->ssid, 0, IW_ESSID_MAX_SIZE + 1);
1068 wl->bss_type = MAX_BSS_TYPE;
1069 wl->band = IEEE80211_BAND_2GHZ;
1072 wl->psm_entry_retry = 0;
1073 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
1074 wl->tx_blocks_available = 0;
1075 wl->tx_results_count = 0;
1076 wl->tx_packets_count = 0;
1077 wl->tx_security_last_seq = 0;
1078 wl->tx_security_seq = 0;
1079 wl->time_offset = 0;
1080 wl->session_counter = 0;
1081 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
1082 wl->sta_rate_set = 0;
1087 for (i = 0; i < NUM_TX_QUEUES; i++)
1088 wl->tx_blocks_freed[i] = 0;
1090 wl1271_debugfs_reset(wl);
1091 mutex_unlock(&wl->mutex);
1094 static void wl1271_configure_filters(struct wl1271 *wl, unsigned int filters)
1096 wl->rx_config = WL1271_DEFAULT_RX_CONFIG;
1097 wl->rx_filter = WL1271_DEFAULT_RX_FILTER;
1099 /* combine requested filters with current filter config */
1100 filters = wl->filters | filters;
1102 wl1271_debug(DEBUG_FILTERS, "RX filters set: ");
1104 if (filters & FIF_PROMISC_IN_BSS) {
1105 wl1271_debug(DEBUG_FILTERS, " - FIF_PROMISC_IN_BSS");
1106 wl->rx_config &= ~CFG_UNI_FILTER_EN;
1107 wl->rx_config |= CFG_BSSID_FILTER_EN;
1109 if (filters & FIF_BCN_PRBRESP_PROMISC) {
1110 wl1271_debug(DEBUG_FILTERS, " - FIF_BCN_PRBRESP_PROMISC");
1111 wl->rx_config &= ~CFG_BSSID_FILTER_EN;
1112 wl->rx_config &= ~CFG_SSID_FILTER_EN;
1114 if (filters & FIF_OTHER_BSS) {
1115 wl1271_debug(DEBUG_FILTERS, " - FIF_OTHER_BSS");
1116 wl->rx_config &= ~CFG_BSSID_FILTER_EN;
1118 if (filters & FIF_CONTROL) {
1119 wl1271_debug(DEBUG_FILTERS, " - FIF_CONTROL");
1120 wl->rx_filter |= CFG_RX_CTL_EN;
1122 if (filters & FIF_FCSFAIL) {
1123 wl1271_debug(DEBUG_FILTERS, " - FIF_FCSFAIL");
1124 wl->rx_filter |= CFG_RX_FCS_ERROR;
1128 static int wl1271_join_channel(struct wl1271 *wl, int channel)
1131 /* we need to use a dummy BSSID for now */
1132 static const u8 dummy_bssid[ETH_ALEN] = { 0x0b, 0xad, 0xde,
1135 wl->channel = channel;
1136 memcpy(wl->bssid, dummy_bssid, ETH_ALEN);
1138 /* pass through frames from all BSS */
1139 wl1271_configure_filters(wl, FIF_OTHER_BSS);
1141 /* the dummy join is performed always with STATION BSS type to allow
1142 also ad-hoc mode to listen to the surroundings without sending any
1144 ret = wl1271_cmd_join(wl, BSS_TYPE_STA_BSS);
1148 set_bit(WL1271_FLAG_JOINED, &wl->flags);
1154 static int wl1271_unjoin_channel(struct wl1271 *wl)
1158 /* to stop listening to a channel, we disconnect */
1159 ret = wl1271_cmd_disconnect(wl);
1163 clear_bit(WL1271_FLAG_JOINED, &wl->flags);
1165 memset(wl->bssid, 0, ETH_ALEN);
1167 /* stop filterting packets based on bssid */
1168 wl1271_configure_filters(wl, FIF_OTHER_BSS);
1174 static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed)
1176 struct wl1271 *wl = hw->priv;
1177 struct ieee80211_conf *conf = &hw->conf;
1178 int channel, ret = 0;
1180 channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
1182 wl1271_debug(DEBUG_MAC80211, "mac80211 config ch %d psm %s power %d %s",
1184 conf->flags & IEEE80211_CONF_PS ? "on" : "off",
1186 conf->flags & IEEE80211_CONF_IDLE ? "idle" : "in use");
1188 mutex_lock(&wl->mutex);
1190 wl->band = conf->channel->band;
1192 ret = wl1271_ps_elp_wakeup(wl, false);
1196 if (changed & IEEE80211_CONF_CHANGE_IDLE) {
1197 if (conf->flags & IEEE80211_CONF_IDLE &&
1198 test_bit(WL1271_FLAG_JOINED, &wl->flags))
1199 wl1271_unjoin_channel(wl);
1200 else if (!(conf->flags & IEEE80211_CONF_IDLE))
1201 wl1271_join_channel(wl, channel);
1203 if (conf->flags & IEEE80211_CONF_IDLE) {
1204 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
1205 wl->sta_rate_set = 0;
1206 wl1271_acx_rate_policies(wl);
1210 /* if the channel changes while joined, join again */
1211 if (channel != wl->channel &&
1212 test_bit(WL1271_FLAG_JOINED, &wl->flags)) {
1213 wl->channel = channel;
1214 /* FIXME: maybe use CMD_CHANNEL_SWITCH for this? */
1215 ret = wl1271_cmd_join(wl, wl->bss_type);
1217 wl1271_warning("cmd join to update channel failed %d",
1220 wl->channel = channel;
1222 if (conf->flags & IEEE80211_CONF_PS &&
1223 !test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
1224 set_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
1227 * We enter PSM only if we're already associated.
1228 * If we're not, we'll enter it when joining an SSID,
1229 * through the bss_info_changed() hook.
1231 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags)) {
1232 wl1271_debug(DEBUG_PSM, "psm enabled");
1233 ret = wl1271_ps_set_mode(wl, STATION_POWER_SAVE_MODE,
1236 } else if (!(conf->flags & IEEE80211_CONF_PS) &&
1237 test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
1238 wl1271_debug(DEBUG_PSM, "psm disabled");
1240 clear_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
1242 if (test_bit(WL1271_FLAG_PSM, &wl->flags))
1243 ret = wl1271_ps_set_mode(wl, STATION_ACTIVE_MODE,
1247 if (conf->power_level != wl->power_level) {
1248 ret = wl1271_acx_tx_power(wl, conf->power_level);
1252 wl->power_level = conf->power_level;
1256 wl1271_ps_elp_sleep(wl);
1259 mutex_unlock(&wl->mutex);
1264 struct wl1271_filter_params {
1267 u8 mc_list[ACX_MC_ADDRESS_GROUP_MAX][ETH_ALEN];
1270 static u64 wl1271_op_prepare_multicast(struct ieee80211_hw *hw,
1271 struct netdev_hw_addr_list *mc_list)
1273 struct wl1271_filter_params *fp;
1274 struct netdev_hw_addr *ha;
1276 fp = kzalloc(sizeof(*fp), GFP_ATOMIC);
1278 wl1271_error("Out of memory setting filters.");
1282 /* update multicast filtering parameters */
1283 fp->mc_list_length = 0;
1284 if (netdev_hw_addr_list_count(mc_list) > ACX_MC_ADDRESS_GROUP_MAX) {
1285 fp->enabled = false;
1288 netdev_hw_addr_list_for_each(ha, mc_list) {
1289 memcpy(fp->mc_list[fp->mc_list_length],
1290 ha->addr, ETH_ALEN);
1291 fp->mc_list_length++;
1295 return (u64)(unsigned long)fp;
1298 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
1301 FIF_BCN_PRBRESP_PROMISC | \
1305 static void wl1271_op_configure_filter(struct ieee80211_hw *hw,
1306 unsigned int changed,
1307 unsigned int *total, u64 multicast)
1309 struct wl1271_filter_params *fp = (void *)(unsigned long)multicast;
1310 struct wl1271 *wl = hw->priv;
1313 wl1271_debug(DEBUG_MAC80211, "mac80211 configure filter");
1315 mutex_lock(&wl->mutex);
1317 if (wl->state == WL1271_STATE_OFF)
1320 ret = wl1271_ps_elp_wakeup(wl, false);
1324 *total &= WL1271_SUPPORTED_FILTERS;
1325 changed &= WL1271_SUPPORTED_FILTERS;
1327 if (*total & FIF_ALLMULTI)
1328 ret = wl1271_acx_group_address_tbl(wl, false, NULL, 0);
1330 ret = wl1271_acx_group_address_tbl(wl, fp->enabled,
1332 fp->mc_list_length);
1336 /* determine, whether supported filter values have changed */
1340 /* configure filters */
1341 wl->filters = *total;
1342 wl1271_configure_filters(wl, 0);
1344 /* apply configured filters */
1345 ret = wl1271_acx_rx_config(wl, wl->rx_config, wl->rx_filter);
1350 wl1271_ps_elp_sleep(wl);
1353 mutex_unlock(&wl->mutex);
1357 static int wl1271_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
1358 struct ieee80211_vif *vif,
1359 struct ieee80211_sta *sta,
1360 struct ieee80211_key_conf *key_conf)
1362 struct wl1271 *wl = hw->priv;
1369 static const u8 bcast_addr[ETH_ALEN] =
1370 { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
1372 wl1271_debug(DEBUG_MAC80211, "mac80211 set key");
1374 addr = sta ? sta->addr : bcast_addr;
1376 wl1271_debug(DEBUG_CRYPT, "CMD: 0x%x", cmd);
1377 wl1271_dump(DEBUG_CRYPT, "ADDR: ", addr, ETH_ALEN);
1378 wl1271_debug(DEBUG_CRYPT, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
1379 key_conf->alg, key_conf->keyidx,
1380 key_conf->keylen, key_conf->flags);
1381 wl1271_dump(DEBUG_CRYPT, "KEY: ", key_conf->key, key_conf->keylen);
1383 if (is_zero_ether_addr(addr)) {
1384 /* We dont support TX only encryption */
1389 mutex_lock(&wl->mutex);
1391 ret = wl1271_ps_elp_wakeup(wl, false);
1395 switch (key_conf->alg) {
1399 key_conf->hw_key_idx = key_conf->keyidx;
1402 key_type = KEY_TKIP;
1404 key_conf->hw_key_idx = key_conf->keyidx;
1405 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
1406 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
1411 key_conf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
1412 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
1413 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
1416 wl1271_error("Unknown key algo 0x%x", key_conf->alg);
1424 ret = wl1271_cmd_set_key(wl, KEY_ADD_OR_REPLACE,
1425 key_conf->keyidx, key_type,
1426 key_conf->keylen, key_conf->key,
1427 addr, tx_seq_32, tx_seq_16);
1429 wl1271_error("Could not add or replace key");
1433 /* the default WEP key needs to be configured at least once */
1434 if (key_type == KEY_WEP) {
1435 ret = wl1271_cmd_set_default_wep_key(wl,
1443 /* The wl1271 does not allow to remove unicast keys - they
1444 will be cleared automatically on next CMD_JOIN. Ignore the
1445 request silently, as we dont want the mac80211 to emit
1446 an error message. */
1447 if (!is_broadcast_ether_addr(addr))
1450 ret = wl1271_cmd_set_key(wl, KEY_REMOVE,
1451 key_conf->keyidx, key_type,
1452 key_conf->keylen, key_conf->key,
1455 wl1271_error("Could not remove key");
1461 wl1271_error("Unsupported key cmd 0x%x", cmd);
1469 wl1271_ps_elp_sleep(wl);
1472 mutex_unlock(&wl->mutex);
1478 static int wl1271_op_hw_scan(struct ieee80211_hw *hw,
1479 struct cfg80211_scan_request *req)
1481 struct wl1271 *wl = hw->priv;
1486 wl1271_debug(DEBUG_MAC80211, "mac80211 hw scan");
1489 ssid = req->ssids[0].ssid;
1490 len = req->ssids[0].ssid_len;
1493 mutex_lock(&wl->mutex);
1495 ret = wl1271_ps_elp_wakeup(wl, false);
1499 if (wl1271_11a_enabled())
1500 ret = wl1271_cmd_scan(hw->priv, ssid, len,
1501 req->ie, req->ie_len, 1, 0,
1502 WL1271_SCAN_BAND_DUAL, 3);
1504 ret = wl1271_cmd_scan(hw->priv, ssid, len,
1505 req->ie, req->ie_len, 1, 0,
1506 WL1271_SCAN_BAND_2_4_GHZ, 3);
1508 wl1271_ps_elp_sleep(wl);
1511 mutex_unlock(&wl->mutex);
1516 static int wl1271_op_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
1518 struct wl1271 *wl = hw->priv;
1521 mutex_lock(&wl->mutex);
1523 ret = wl1271_ps_elp_wakeup(wl, false);
1527 ret = wl1271_acx_rts_threshold(wl, (u16) value);
1529 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret);
1531 wl1271_ps_elp_sleep(wl);
1534 mutex_unlock(&wl->mutex);
1539 static void wl1271_ssid_set(struct wl1271 *wl, struct sk_buff *beacon)
1541 u8 *ptr = beacon->data +
1542 offsetof(struct ieee80211_mgmt, u.beacon.variable);
1544 /* find the location of the ssid in the beacon */
1545 while (ptr < beacon->data + beacon->len) {
1546 if (ptr[0] == WLAN_EID_SSID) {
1547 wl->ssid_len = ptr[1];
1548 memcpy(wl->ssid, ptr+2, wl->ssid_len);
1553 wl1271_error("ad-hoc beacon template has no SSID!\n");
1556 static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
1557 struct ieee80211_vif *vif,
1558 struct ieee80211_bss_conf *bss_conf,
1561 enum wl1271_cmd_ps_mode mode;
1562 struct wl1271 *wl = hw->priv;
1563 bool do_join = false;
1566 wl1271_debug(DEBUG_MAC80211, "mac80211 bss info changed");
1568 mutex_lock(&wl->mutex);
1570 ret = wl1271_ps_elp_wakeup(wl, false);
1574 if (wl->bss_type == BSS_TYPE_IBSS) {
1575 /* FIXME: This implements rudimentary ad-hoc support -
1576 proper templates are on the wish list and notification
1577 on when they change. This patch will update the templates
1578 on every call to this function. */
1579 struct sk_buff *beacon = ieee80211_beacon_get(hw, vif);
1582 struct ieee80211_hdr *hdr;
1584 wl1271_ssid_set(wl, beacon);
1585 ret = wl1271_cmd_template_set(wl, CMD_TEMPL_BEACON,
1590 dev_kfree_skb(beacon);
1594 hdr = (struct ieee80211_hdr *) beacon->data;
1595 hdr->frame_control = cpu_to_le16(
1596 IEEE80211_FTYPE_MGMT |
1597 IEEE80211_STYPE_PROBE_RESP);
1599 ret = wl1271_cmd_template_set(wl,
1600 CMD_TEMPL_PROBE_RESPONSE,
1603 dev_kfree_skb(beacon);
1607 /* Need to update the SSID (for filtering etc) */
1612 if ((changed & BSS_CHANGED_BSSID) &&
1614 * Now we know the correct bssid, so we send a new join command
1615 * and enable the BSSID filter
1617 memcmp(wl->bssid, bss_conf->bssid, ETH_ALEN)) {
1618 memcpy(wl->bssid, bss_conf->bssid, ETH_ALEN);
1620 ret = wl1271_cmd_build_null_data(wl);
1624 /* filter out all packets not from this BSSID */
1625 wl1271_configure_filters(wl, 0);
1627 /* Need to update the BSSID (for filtering etc) */
1631 if (changed & BSS_CHANGED_ASSOC) {
1632 if (bss_conf->assoc) {
1633 wl->aid = bss_conf->aid;
1634 set_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
1637 * with wl1271, we don't need to update the
1638 * beacon_int and dtim_period, because the firmware
1639 * updates it by itself when the first beacon is
1640 * received after a join.
1642 ret = wl1271_cmd_build_ps_poll(wl, wl->aid);
1646 ret = wl1271_acx_aid(wl, wl->aid);
1650 /* If we want to go in PSM but we're not there yet */
1651 if (test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags) &&
1652 !test_bit(WL1271_FLAG_PSM, &wl->flags)) {
1653 mode = STATION_POWER_SAVE_MODE;
1654 ret = wl1271_ps_set_mode(wl, mode, true);
1659 /* use defaults when not associated */
1660 clear_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
1666 if (changed & BSS_CHANGED_ERP_SLOT) {
1667 if (bss_conf->use_short_slot)
1668 ret = wl1271_acx_slot(wl, SLOT_TIME_SHORT);
1670 ret = wl1271_acx_slot(wl, SLOT_TIME_LONG);
1672 wl1271_warning("Set slot time failed %d", ret);
1677 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
1678 if (bss_conf->use_short_preamble)
1679 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_SHORT);
1681 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_LONG);
1684 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
1685 if (bss_conf->use_cts_prot)
1686 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_ENABLE);
1688 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_DISABLE);
1690 wl1271_warning("Set ctsprotect failed %d", ret);
1696 ret = wl1271_cmd_join(wl, wl->bss_type);
1698 wl1271_warning("cmd join failed %d", ret);
1701 set_bit(WL1271_FLAG_JOINED, &wl->flags);
1705 wl1271_ps_elp_sleep(wl);
1708 mutex_unlock(&wl->mutex);
1711 static int wl1271_op_conf_tx(struct ieee80211_hw *hw, u16 queue,
1712 const struct ieee80211_tx_queue_params *params)
1714 struct wl1271 *wl = hw->priv;
1718 mutex_lock(&wl->mutex);
1720 wl1271_debug(DEBUG_MAC80211, "mac80211 conf tx %d", queue);
1722 ret = wl1271_ps_elp_wakeup(wl, false);
1726 /* the txop is confed in units of 32us by the mac80211, we need us */
1727 ret = wl1271_acx_ac_cfg(wl, wl1271_tx_get_queue(queue),
1728 params->cw_min, params->cw_max,
1729 params->aifs, params->txop << 5);
1734 ps_scheme = CONF_PS_SCHEME_UPSD_TRIGGER;
1736 ps_scheme = CONF_PS_SCHEME_LEGACY;
1738 ret = wl1271_acx_tid_cfg(wl, wl1271_tx_get_queue(queue),
1739 CONF_CHANNEL_TYPE_EDCF,
1740 wl1271_tx_get_queue(queue),
1741 ps_scheme, CONF_ACK_POLICY_LEGACY, 0, 0);
1746 wl1271_ps_elp_sleep(wl);
1749 mutex_unlock(&wl->mutex);
1755 /* can't be const, mac80211 writes to this */
1756 static struct ieee80211_rate wl1271_rates[] = {
1758 .hw_value = CONF_HW_BIT_RATE_1MBPS,
1759 .hw_value_short = CONF_HW_BIT_RATE_1MBPS, },
1761 .hw_value = CONF_HW_BIT_RATE_2MBPS,
1762 .hw_value_short = CONF_HW_BIT_RATE_2MBPS,
1763 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
1765 .hw_value = CONF_HW_BIT_RATE_5_5MBPS,
1766 .hw_value_short = CONF_HW_BIT_RATE_5_5MBPS,
1767 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
1769 .hw_value = CONF_HW_BIT_RATE_11MBPS,
1770 .hw_value_short = CONF_HW_BIT_RATE_11MBPS,
1771 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
1773 .hw_value = CONF_HW_BIT_RATE_6MBPS,
1774 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
1776 .hw_value = CONF_HW_BIT_RATE_9MBPS,
1777 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
1779 .hw_value = CONF_HW_BIT_RATE_12MBPS,
1780 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
1782 .hw_value = CONF_HW_BIT_RATE_18MBPS,
1783 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
1785 .hw_value = CONF_HW_BIT_RATE_24MBPS,
1786 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
1788 .hw_value = CONF_HW_BIT_RATE_36MBPS,
1789 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
1791 .hw_value = CONF_HW_BIT_RATE_48MBPS,
1792 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
1794 .hw_value = CONF_HW_BIT_RATE_54MBPS,
1795 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
1798 /* can't be const, mac80211 writes to this */
1799 static struct ieee80211_channel wl1271_channels[] = {
1800 { .hw_value = 1, .center_freq = 2412, .max_power = 25 },
1801 { .hw_value = 2, .center_freq = 2417, .max_power = 25 },
1802 { .hw_value = 3, .center_freq = 2422, .max_power = 25 },
1803 { .hw_value = 4, .center_freq = 2427, .max_power = 25 },
1804 { .hw_value = 5, .center_freq = 2432, .max_power = 25 },
1805 { .hw_value = 6, .center_freq = 2437, .max_power = 25 },
1806 { .hw_value = 7, .center_freq = 2442, .max_power = 25 },
1807 { .hw_value = 8, .center_freq = 2447, .max_power = 25 },
1808 { .hw_value = 9, .center_freq = 2452, .max_power = 25 },
1809 { .hw_value = 10, .center_freq = 2457, .max_power = 25 },
1810 { .hw_value = 11, .center_freq = 2462, .max_power = 25 },
1811 { .hw_value = 12, .center_freq = 2467, .max_power = 25 },
1812 { .hw_value = 13, .center_freq = 2472, .max_power = 25 },
1815 /* can't be const, mac80211 writes to this */
1816 static struct ieee80211_supported_band wl1271_band_2ghz = {
1817 .channels = wl1271_channels,
1818 .n_channels = ARRAY_SIZE(wl1271_channels),
1819 .bitrates = wl1271_rates,
1820 .n_bitrates = ARRAY_SIZE(wl1271_rates),
1823 /* 5 GHz data rates for WL1273 */
1824 static struct ieee80211_rate wl1271_rates_5ghz[] = {
1826 .hw_value = CONF_HW_BIT_RATE_6MBPS,
1827 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
1829 .hw_value = CONF_HW_BIT_RATE_9MBPS,
1830 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
1832 .hw_value = CONF_HW_BIT_RATE_12MBPS,
1833 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
1835 .hw_value = CONF_HW_BIT_RATE_18MBPS,
1836 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
1838 .hw_value = CONF_HW_BIT_RATE_24MBPS,
1839 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
1841 .hw_value = CONF_HW_BIT_RATE_36MBPS,
1842 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
1844 .hw_value = CONF_HW_BIT_RATE_48MBPS,
1845 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
1847 .hw_value = CONF_HW_BIT_RATE_54MBPS,
1848 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
1851 /* 5 GHz band channels for WL1273 */
1852 static struct ieee80211_channel wl1271_channels_5ghz[] = {
1853 { .hw_value = 183, .center_freq = 4915},
1854 { .hw_value = 184, .center_freq = 4920},
1855 { .hw_value = 185, .center_freq = 4925},
1856 { .hw_value = 187, .center_freq = 4935},
1857 { .hw_value = 188, .center_freq = 4940},
1858 { .hw_value = 189, .center_freq = 4945},
1859 { .hw_value = 192, .center_freq = 4960},
1860 { .hw_value = 196, .center_freq = 4980},
1861 { .hw_value = 7, .center_freq = 5035},
1862 { .hw_value = 8, .center_freq = 5040},
1863 { .hw_value = 9, .center_freq = 5045},
1864 { .hw_value = 11, .center_freq = 5055},
1865 { .hw_value = 12, .center_freq = 5060},
1866 { .hw_value = 16, .center_freq = 5080},
1867 { .hw_value = 34, .center_freq = 5170},
1868 { .hw_value = 36, .center_freq = 5180},
1869 { .hw_value = 38, .center_freq = 5190},
1870 { .hw_value = 40, .center_freq = 5200},
1871 { .hw_value = 42, .center_freq = 5210},
1872 { .hw_value = 44, .center_freq = 5220},
1873 { .hw_value = 46, .center_freq = 5230},
1874 { .hw_value = 48, .center_freq = 5240},
1875 { .hw_value = 52, .center_freq = 5260},
1876 { .hw_value = 56, .center_freq = 5280},
1877 { .hw_value = 60, .center_freq = 5300},
1878 { .hw_value = 64, .center_freq = 5320},
1879 { .hw_value = 100, .center_freq = 5500},
1880 { .hw_value = 104, .center_freq = 5520},
1881 { .hw_value = 108, .center_freq = 5540},
1882 { .hw_value = 112, .center_freq = 5560},
1883 { .hw_value = 116, .center_freq = 5580},
1884 { .hw_value = 120, .center_freq = 5600},
1885 { .hw_value = 124, .center_freq = 5620},
1886 { .hw_value = 128, .center_freq = 5640},
1887 { .hw_value = 132, .center_freq = 5660},
1888 { .hw_value = 136, .center_freq = 5680},
1889 { .hw_value = 140, .center_freq = 5700},
1890 { .hw_value = 149, .center_freq = 5745},
1891 { .hw_value = 153, .center_freq = 5765},
1892 { .hw_value = 157, .center_freq = 5785},
1893 { .hw_value = 161, .center_freq = 5805},
1894 { .hw_value = 165, .center_freq = 5825},
1898 static struct ieee80211_supported_band wl1271_band_5ghz = {
1899 .channels = wl1271_channels_5ghz,
1900 .n_channels = ARRAY_SIZE(wl1271_channels_5ghz),
1901 .bitrates = wl1271_rates_5ghz,
1902 .n_bitrates = ARRAY_SIZE(wl1271_rates_5ghz),
1905 static const struct ieee80211_ops wl1271_ops = {
1906 .start = wl1271_op_start,
1907 .stop = wl1271_op_stop,
1908 .add_interface = wl1271_op_add_interface,
1909 .remove_interface = wl1271_op_remove_interface,
1910 .config = wl1271_op_config,
1911 .prepare_multicast = wl1271_op_prepare_multicast,
1912 .configure_filter = wl1271_op_configure_filter,
1914 .set_key = wl1271_op_set_key,
1915 .hw_scan = wl1271_op_hw_scan,
1916 .bss_info_changed = wl1271_op_bss_info_changed,
1917 .set_rts_threshold = wl1271_op_set_rts_threshold,
1918 .conf_tx = wl1271_op_conf_tx,
1919 CFG80211_TESTMODE_CMD(wl1271_tm_cmd)
1922 static ssize_t wl1271_sysfs_show_bt_coex_state(struct device *dev,
1923 struct device_attribute *attr,
1926 struct wl1271 *wl = dev_get_drvdata(dev);
1929 /* FIXME: what's the maximum length of buf? page size?*/
1932 mutex_lock(&wl->mutex);
1933 len = snprintf(buf, len, "%d\n\n0 - off\n1 - on\n",
1935 mutex_unlock(&wl->mutex);
1941 static ssize_t wl1271_sysfs_store_bt_coex_state(struct device *dev,
1942 struct device_attribute *attr,
1943 const char *buf, size_t count)
1945 struct wl1271 *wl = dev_get_drvdata(dev);
1949 ret = strict_strtoul(buf, 10, &res);
1952 wl1271_warning("incorrect value written to bt_coex_mode");
1956 mutex_lock(&wl->mutex);
1960 if (res == wl->sg_enabled)
1963 wl->sg_enabled = res;
1965 if (wl->state == WL1271_STATE_OFF)
1968 ret = wl1271_ps_elp_wakeup(wl, false);
1972 wl1271_acx_sg_enable(wl, wl->sg_enabled);
1973 wl1271_ps_elp_sleep(wl);
1976 mutex_unlock(&wl->mutex);
1980 static DEVICE_ATTR(bt_coex_state, S_IRUGO | S_IWUSR,
1981 wl1271_sysfs_show_bt_coex_state,
1982 wl1271_sysfs_store_bt_coex_state);
1984 int wl1271_register_hw(struct wl1271 *wl)
1988 if (wl->mac80211_registered)
1991 SET_IEEE80211_PERM_ADDR(wl->hw, wl->mac_addr);
1993 ret = ieee80211_register_hw(wl->hw);
1995 wl1271_error("unable to register mac80211 hw: %d", ret);
1999 wl->mac80211_registered = true;
2001 wl1271_notice("loaded");
2005 EXPORT_SYMBOL_GPL(wl1271_register_hw);
2007 void wl1271_unregister_hw(struct wl1271 *wl)
2009 ieee80211_unregister_hw(wl->hw);
2010 wl->mac80211_registered = false;
2013 EXPORT_SYMBOL_GPL(wl1271_unregister_hw);
2015 int wl1271_init_ieee80211(struct wl1271 *wl)
2017 /* The tx descriptor buffer and the TKIP space. */
2018 wl->hw->extra_tx_headroom = WL1271_TKIP_IV_SPACE +
2019 sizeof(struct wl1271_tx_hw_descr);
2022 /* FIXME: find a proper value */
2023 wl->hw->channel_change_time = 10000;
2025 wl->hw->flags = IEEE80211_HW_SIGNAL_DBM |
2026 IEEE80211_HW_NOISE_DBM |
2027 IEEE80211_HW_BEACON_FILTER |
2028 IEEE80211_HW_SUPPORTS_PS |
2029 IEEE80211_HW_SUPPORTS_UAPSD |
2030 IEEE80211_HW_HAS_RATE_CONTROL;
2032 wl->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
2033 BIT(NL80211_IFTYPE_ADHOC);
2034 wl->hw->wiphy->max_scan_ssids = 1;
2035 wl->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = &wl1271_band_2ghz;
2037 if (wl1271_11a_enabled())
2038 wl->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = &wl1271_band_5ghz;
2042 SET_IEEE80211_DEV(wl->hw, wl1271_wl_to_dev(wl));
2046 EXPORT_SYMBOL_GPL(wl1271_init_ieee80211);
2048 #define WL1271_DEFAULT_CHANNEL 0
2050 struct ieee80211_hw *wl1271_alloc_hw(void)
2052 struct ieee80211_hw *hw;
2053 struct platform_device *plat_dev = NULL;
2056 static const u8 nokia_oui[3] = {0x00, 0x1f, 0xdf};
2058 hw = ieee80211_alloc_hw(sizeof(*wl), &wl1271_ops);
2060 wl1271_error("could not alloc ieee80211_hw");
2065 plat_dev = kmalloc(sizeof(wl1271_device), GFP_KERNEL);
2067 wl1271_error("could not allocate platform_device");
2069 goto err_plat_alloc;
2072 memcpy(plat_dev, &wl1271_device, sizeof(wl1271_device));
2075 memset(wl, 0, sizeof(*wl));
2077 INIT_LIST_HEAD(&wl->list);
2080 wl->plat_dev = plat_dev;
2082 skb_queue_head_init(&wl->tx_queue);
2084 INIT_DELAYED_WORK(&wl->elp_work, wl1271_elp_work);
2085 wl->channel = WL1271_DEFAULT_CHANNEL;
2086 wl->default_key = 0;
2088 wl->rx_config = WL1271_DEFAULT_RX_CONFIG;
2089 wl->rx_filter = WL1271_DEFAULT_RX_FILTER;
2090 wl->psm_entry_retry = 0;
2091 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
2092 wl->basic_rate_set = CONF_TX_RATE_MASK_BASIC;
2093 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
2094 wl->sta_rate_set = 0;
2095 wl->band = IEEE80211_BAND_2GHZ;
2098 wl->sg_enabled = true;
2100 for (i = 0; i < ACX_TX_DESCRIPTORS; i++)
2101 wl->tx_frames[i] = NULL;
2103 spin_lock_init(&wl->wl_lock);
2105 wl->state = WL1271_STATE_OFF;
2106 mutex_init(&wl->mutex);
2109 * FIXME: we should use a zero MAC address here, but for now we
2110 * generate a random Nokia address.
2112 memcpy(wl->mac_addr, nokia_oui, 3);
2113 get_random_bytes(wl->mac_addr + 3, 3);
2115 /* Apply default driver configuration. */
2116 wl1271_conf_init(wl);
2118 wl1271_debugfs_init(wl);
2120 /* Register platform device */
2121 ret = platform_device_register(wl->plat_dev);
2123 wl1271_error("couldn't register platform device");
2126 dev_set_drvdata(&wl->plat_dev->dev, wl);
2128 /* Create sysfs file to control bt coex state */
2129 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
2131 wl1271_error("failed to create sysfs file bt_coex_state");
2138 platform_device_unregister(wl->plat_dev);
2141 wl1271_debugfs_exit(wl);
2145 ieee80211_free_hw(hw);
2149 return ERR_PTR(ret);
2151 EXPORT_SYMBOL_GPL(wl1271_alloc_hw);
2153 int wl1271_free_hw(struct wl1271 *wl)
2155 platform_device_unregister(wl->plat_dev);
2156 kfree(wl->plat_dev);
2158 wl1271_debugfs_exit(wl);
2160 kfree(wl->target_mem_map);
2166 kfree(wl->fw_status);
2167 kfree(wl->tx_res_if);
2169 ieee80211_free_hw(wl->hw);
2173 EXPORT_SYMBOL_GPL(wl1271_free_hw);
2175 MODULE_LICENSE("GPL");
2176 MODULE_AUTHOR("Luciano Coelho <luciano.coelho@nokia.com>");
2177 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");