2 * This file is part of wl1271
4 * Copyright (C) 2008-2010 Nokia Corporation
6 * Contact: Luciano Coelho <luciano.coelho@nokia.com>
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * version 2 as published by the Free Software Foundation.
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
24 #include <linux/module.h>
25 #include <linux/firmware.h>
26 #include <linux/delay.h>
27 #include <linux/spi/spi.h>
28 #include <linux/crc32.h>
29 #include <linux/etherdevice.h>
30 #include <linux/vmalloc.h>
31 #include <linux/platform_device.h>
32 #include <linux/slab.h>
35 #include "wl12xx_80211.h"
36 #include "wl1271_reg.h"
37 #include "wl1271_io.h"
38 #include "wl1271_event.h"
39 #include "wl1271_tx.h"
40 #include "wl1271_rx.h"
41 #include "wl1271_ps.h"
42 #include "wl1271_init.h"
43 #include "wl1271_debugfs.h"
44 #include "wl1271_cmd.h"
45 #include "wl1271_boot.h"
46 #include "wl1271_testmode.h"
47 #include "wl1271_scan.h"
49 #define WL1271_BOOT_RETRIES 3
51 static struct conf_drv_settings default_conf = {
54 [CONF_SG_BT_PER_THRESHOLD] = 7500,
55 [CONF_SG_HV3_MAX_OVERRIDE] = 0,
56 [CONF_SG_BT_NFS_SAMPLE_INTERVAL] = 400,
57 [CONF_SG_BT_LOAD_RATIO] = 50,
58 [CONF_SG_AUTO_PS_MODE] = 1,
59 [CONF_SG_AUTO_SCAN_PROBE_REQ] = 170,
60 [CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_HV3] = 50,
61 [CONF_SG_ANTENNA_CONFIGURATION] = 0,
62 [CONF_SG_BEACON_MISS_PERCENT] = 60,
63 [CONF_SG_RATE_ADAPT_THRESH] = 12,
64 [CONF_SG_RATE_ADAPT_SNR] = 0,
65 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MIN_BR] = 10,
66 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MAX_BR] = 30,
67 [CONF_SG_WLAN_PS_MAX_BT_ACL_MASTER_BR] = 8,
68 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MIN_BR] = 20,
69 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MAX_BR] = 50,
70 /* Note: with UPSD, this should be 4 */
71 [CONF_SG_WLAN_PS_MAX_BT_ACL_SLAVE_BR] = 8,
72 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MIN_EDR] = 7,
73 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MAX_EDR] = 25,
74 [CONF_SG_WLAN_PS_MAX_BT_ACL_MASTER_EDR] = 20,
75 /* Note: with UPDS, this should be 15 */
76 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MIN_EDR] = 8,
77 /* Note: with UPDS, this should be 50 */
78 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MAX_EDR] = 40,
79 /* Note: with UPDS, this should be 10 */
80 [CONF_SG_WLAN_PS_MAX_BT_ACL_SLAVE_EDR] = 20,
83 [CONF_SG_ADAPTIVE_RXT_TXT] = 1,
84 [CONF_SG_PS_POLL_TIMEOUT] = 10,
85 [CONF_SG_UPSD_TIMEOUT] = 10,
86 [CONF_SG_WLAN_ACTIVE_BT_ACL_MASTER_MIN_EDR] = 7,
87 [CONF_SG_WLAN_ACTIVE_BT_ACL_MASTER_MAX_EDR] = 15,
88 [CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_MASTER_EDR] = 15,
89 [CONF_SG_WLAN_ACTIVE_BT_ACL_SLAVE_MIN_EDR] = 8,
90 [CONF_SG_WLAN_ACTIVE_BT_ACL_SLAVE_MAX_EDR] = 20,
91 [CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_SLAVE_EDR] = 15,
92 [CONF_SG_WLAN_ACTIVE_BT_ACL_MIN_BR] = 20,
93 [CONF_SG_WLAN_ACTIVE_BT_ACL_MAX_BR] = 50,
94 [CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_BR] = 10,
95 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_HV3] = 200,
96 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_A2DP] = 800,
97 [CONF_SG_PASSIVE_SCAN_A2DP_BT_TIME] = 75,
98 [CONF_SG_PASSIVE_SCAN_A2DP_WLAN_TIME] = 15,
99 [CONF_SG_HV3_MAX_SERVED] = 6,
100 [CONF_SG_DHCP_TIME] = 5000,
101 [CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_A2DP] = 100,
103 .state = CONF_SG_PROTECTIVE,
106 .rx_msdu_life_time = 512000,
107 .packet_detection_threshold = 0,
108 .ps_poll_timeout = 15,
110 .rts_threshold = 2347,
111 .rx_cca_threshold = 0,
112 .irq_blk_threshold = 0xFFFF,
113 .irq_pkt_threshold = 0,
115 .queue_type = CONF_RX_QUEUE_TYPE_LOW_PRIORITY,
118 .tx_energy_detection = 0,
121 .short_retry_limit = 10,
122 .long_retry_limit = 10,
145 .aifsn = CONF_TX_AIFS_PIFS,
152 .aifsn = CONF_TX_AIFS_PIFS,
159 .queue_id = CONF_TX_AC_BE,
160 .channel_type = CONF_CHANNEL_TYPE_EDCF,
161 .tsid = CONF_TX_AC_BE,
162 .ps_scheme = CONF_PS_SCHEME_LEGACY,
163 .ack_policy = CONF_ACK_POLICY_LEGACY,
167 .queue_id = CONF_TX_AC_BK,
168 .channel_type = CONF_CHANNEL_TYPE_EDCF,
169 .tsid = CONF_TX_AC_BK,
170 .ps_scheme = CONF_PS_SCHEME_LEGACY,
171 .ack_policy = CONF_ACK_POLICY_LEGACY,
175 .queue_id = CONF_TX_AC_VI,
176 .channel_type = CONF_CHANNEL_TYPE_EDCF,
177 .tsid = CONF_TX_AC_VI,
178 .ps_scheme = CONF_PS_SCHEME_LEGACY,
179 .ack_policy = CONF_ACK_POLICY_LEGACY,
183 .queue_id = CONF_TX_AC_VO,
184 .channel_type = CONF_CHANNEL_TYPE_EDCF,
185 .tsid = CONF_TX_AC_VO,
186 .ps_scheme = CONF_PS_SCHEME_LEGACY,
187 .ack_policy = CONF_ACK_POLICY_LEGACY,
191 .frag_threshold = IEEE80211_MAX_FRAG_THRESHOLD,
192 .tx_compl_timeout = 700,
193 .tx_compl_threshold = 4,
194 .basic_rate = CONF_HW_BIT_RATE_1MBPS,
195 .basic_rate_5 = CONF_HW_BIT_RATE_6MBPS,
198 .wake_up_event = CONF_WAKE_UP_EVENT_DTIM,
199 .listen_interval = 1,
200 .bcn_filt_mode = CONF_BCN_FILT_MODE_ENABLED,
201 .bcn_filt_ie_count = 1,
204 .ie = WLAN_EID_CHANNEL_SWITCH,
205 .rule = CONF_BCN_RULE_PASS_ON_APPEARANCE,
208 .synch_fail_thold = 10,
209 .bss_lose_timeout = 100,
210 .beacon_rx_timeout = 10000,
211 .broadcast_timeout = 20000,
212 .rx_broadcast_in_ps = 1,
213 .ps_poll_threshold = 10,
214 .ps_poll_recovery_period = 700,
215 .bet_enable = CONF_BET_MODE_ENABLE,
216 .bet_max_consecutive = 10,
217 .psm_entry_retries = 3,
218 .keep_alive_interval = 55000,
219 .max_listen_interval = 20,
226 .host_clk_settling_time = 5000,
227 .host_fast_wakeup_support = false
231 .avg_weight_rssi_beacon = 20,
232 .avg_weight_rssi_data = 10,
233 .avg_weight_snr_beacon = 20,
234 .avg_weight_snr_data = 10
238 static void wl1271_device_release(struct device *dev)
243 static struct platform_device wl1271_device = {
247 /* device model insists to have a release function */
249 .release = wl1271_device_release,
253 static LIST_HEAD(wl_list);
255 static int wl1271_dev_notify(struct notifier_block *me, unsigned long what,
258 struct net_device *dev = arg;
259 struct wireless_dev *wdev;
261 struct ieee80211_hw *hw;
263 struct wl1271 *wl_temp;
266 /* Check that this notification is for us. */
267 if (what != NETDEV_CHANGE)
270 wdev = dev->ieee80211_ptr;
278 hw = wiphy_priv(wiphy);
283 list_for_each_entry(wl, &wl_list, list) {
290 mutex_lock(&wl->mutex);
292 if (wl->state == WL1271_STATE_OFF)
295 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
298 ret = wl1271_ps_elp_wakeup(wl, false);
302 if ((dev->operstate == IF_OPER_UP) &&
303 !test_and_set_bit(WL1271_FLAG_STA_STATE_SENT, &wl->flags)) {
304 wl1271_cmd_set_sta_state(wl);
305 wl1271_info("Association completed.");
308 wl1271_ps_elp_sleep(wl);
311 mutex_unlock(&wl->mutex);
316 static void wl1271_conf_init(struct wl1271 *wl)
320 * This function applies the default configuration to the driver. This
321 * function is invoked upon driver load (spi probe.)
323 * The configuration is stored in a run-time structure in order to
324 * facilitate for run-time adjustment of any of the parameters. Making
325 * changes to the configuration structure will apply the new values on
326 * the next interface up (wl1271_op_start.)
329 /* apply driver default configuration */
330 memcpy(&wl->conf, &default_conf, sizeof(default_conf));
334 static int wl1271_plt_init(struct wl1271 *wl)
336 struct conf_tx_ac_category *conf_ac;
337 struct conf_tx_tid *conf_tid;
340 ret = wl1271_cmd_general_parms(wl);
344 ret = wl1271_cmd_radio_parms(wl);
348 ret = wl1271_init_templates_config(wl);
352 ret = wl1271_acx_init_mem_config(wl);
356 /* PHY layer config */
357 ret = wl1271_init_phy_config(wl);
359 goto out_free_memmap;
361 ret = wl1271_acx_dco_itrim_params(wl);
363 goto out_free_memmap;
365 /* Initialize connection monitoring thresholds */
366 ret = wl1271_acx_conn_monit_params(wl, false);
368 goto out_free_memmap;
370 /* Bluetooth WLAN coexistence */
371 ret = wl1271_init_pta(wl);
373 goto out_free_memmap;
375 /* Energy detection */
376 ret = wl1271_init_energy_detection(wl);
378 goto out_free_memmap;
380 /* Default fragmentation threshold */
381 ret = wl1271_acx_frag_threshold(wl);
383 goto out_free_memmap;
385 /* Default TID/AC configuration */
386 BUG_ON(wl->conf.tx.tid_conf_count != wl->conf.tx.ac_conf_count);
387 for (i = 0; i < wl->conf.tx.tid_conf_count; i++) {
388 conf_ac = &wl->conf.tx.ac_conf[i];
389 ret = wl1271_acx_ac_cfg(wl, conf_ac->ac, conf_ac->cw_min,
390 conf_ac->cw_max, conf_ac->aifsn,
391 conf_ac->tx_op_limit);
393 goto out_free_memmap;
395 conf_tid = &wl->conf.tx.tid_conf[i];
396 ret = wl1271_acx_tid_cfg(wl, conf_tid->queue_id,
397 conf_tid->channel_type,
400 conf_tid->ack_policy,
401 conf_tid->apsd_conf[0],
402 conf_tid->apsd_conf[1]);
404 goto out_free_memmap;
407 /* Enable data path */
408 ret = wl1271_cmd_data_path(wl, 1);
410 goto out_free_memmap;
412 /* Configure for CAM power saving (ie. always active) */
413 ret = wl1271_acx_sleep_auth(wl, WL1271_PSM_CAM);
415 goto out_free_memmap;
418 ret = wl1271_acx_pm_config(wl);
420 goto out_free_memmap;
425 kfree(wl->target_mem_map);
426 wl->target_mem_map = NULL;
431 static void wl1271_fw_status(struct wl1271 *wl,
432 struct wl1271_fw_status *status)
438 wl1271_raw_read(wl, FW_STATUS_ADDR, status, sizeof(*status), false);
440 wl1271_debug(DEBUG_IRQ, "intr: 0x%x (fw_rx_counter = %d, "
441 "drv_rx_counter = %d, tx_results_counter = %d)",
443 status->fw_rx_counter,
444 status->drv_rx_counter,
445 status->tx_results_counter);
447 /* update number of available TX blocks */
448 for (i = 0; i < NUM_TX_QUEUES; i++) {
449 u32 cnt = le32_to_cpu(status->tx_released_blks[i]) -
450 wl->tx_blocks_freed[i];
452 wl->tx_blocks_freed[i] =
453 le32_to_cpu(status->tx_released_blks[i]);
454 wl->tx_blocks_available += cnt;
458 /* if more blocks are available now, schedule some tx work */
459 if (total && !skb_queue_empty(&wl->tx_queue))
460 ieee80211_queue_work(wl->hw, &wl->tx_work);
462 /* update the host-chipset time offset */
464 wl->time_offset = (timespec_to_ns(&ts) >> 10) -
465 (s64)le32_to_cpu(status->fw_localtime);
468 #define WL1271_IRQ_MAX_LOOPS 10
470 static void wl1271_irq_work(struct work_struct *work)
474 int loopcount = WL1271_IRQ_MAX_LOOPS;
477 container_of(work, struct wl1271, irq_work);
479 mutex_lock(&wl->mutex);
481 wl1271_debug(DEBUG_IRQ, "IRQ work");
483 if (unlikely(wl->state == WL1271_STATE_OFF))
486 ret = wl1271_ps_elp_wakeup(wl, true);
490 spin_lock_irqsave(&wl->wl_lock, flags);
491 while (test_bit(WL1271_FLAG_IRQ_PENDING, &wl->flags) && loopcount) {
492 clear_bit(WL1271_FLAG_IRQ_PENDING, &wl->flags);
493 spin_unlock_irqrestore(&wl->wl_lock, flags);
496 wl1271_fw_status(wl, wl->fw_status);
497 intr = le32_to_cpu(wl->fw_status->intr);
499 wl1271_debug(DEBUG_IRQ, "Zero interrupt received.");
500 spin_lock_irqsave(&wl->wl_lock, flags);
504 intr &= WL1271_INTR_MASK;
506 if (intr & WL1271_ACX_INTR_DATA) {
507 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_DATA");
509 /* check for tx results */
510 if (wl->fw_status->tx_results_counter !=
511 (wl->tx_results_count & 0xff))
512 wl1271_tx_complete(wl);
514 wl1271_rx(wl, wl->fw_status);
517 if (intr & WL1271_ACX_INTR_EVENT_A) {
518 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_A");
519 wl1271_event_handle(wl, 0);
522 if (intr & WL1271_ACX_INTR_EVENT_B) {
523 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_B");
524 wl1271_event_handle(wl, 1);
527 if (intr & WL1271_ACX_INTR_INIT_COMPLETE)
528 wl1271_debug(DEBUG_IRQ,
529 "WL1271_ACX_INTR_INIT_COMPLETE");
531 if (intr & WL1271_ACX_INTR_HW_AVAILABLE)
532 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_HW_AVAILABLE");
534 spin_lock_irqsave(&wl->wl_lock, flags);
537 if (test_bit(WL1271_FLAG_IRQ_PENDING, &wl->flags))
538 ieee80211_queue_work(wl->hw, &wl->irq_work);
540 clear_bit(WL1271_FLAG_IRQ_RUNNING, &wl->flags);
541 spin_unlock_irqrestore(&wl->wl_lock, flags);
543 wl1271_ps_elp_sleep(wl);
546 mutex_unlock(&wl->mutex);
549 static int wl1271_fetch_firmware(struct wl1271 *wl)
551 const struct firmware *fw;
554 ret = request_firmware(&fw, WL1271_FW_NAME, wl1271_wl_to_dev(wl));
557 wl1271_error("could not get firmware: %d", ret);
562 wl1271_error("firmware size is not multiple of 32 bits: %zu",
568 wl->fw_len = fw->size;
569 wl->fw = vmalloc(wl->fw_len);
572 wl1271_error("could not allocate memory for the firmware");
577 memcpy(wl->fw, fw->data, wl->fw_len);
582 release_firmware(fw);
587 static int wl1271_fetch_nvs(struct wl1271 *wl)
589 const struct firmware *fw;
592 ret = request_firmware(&fw, WL1271_NVS_NAME, wl1271_wl_to_dev(wl));
595 wl1271_error("could not get nvs file: %d", ret);
599 wl->nvs = kmemdup(fw->data, sizeof(struct wl1271_nvs_file), GFP_KERNEL);
602 wl1271_error("could not allocate memory for the nvs file");
607 wl->nvs_len = fw->size;
610 release_firmware(fw);
615 static void wl1271_fw_wakeup(struct wl1271 *wl)
619 elp_reg = ELPCTRL_WAKE_UP;
620 wl1271_raw_write32(wl, HW_ACCESS_ELP_CTRL_REG_ADDR, elp_reg);
623 static int wl1271_setup(struct wl1271 *wl)
625 wl->fw_status = kmalloc(sizeof(*wl->fw_status), GFP_KERNEL);
629 wl->tx_res_if = kmalloc(sizeof(*wl->tx_res_if), GFP_KERNEL);
630 if (!wl->tx_res_if) {
631 kfree(wl->fw_status);
635 INIT_WORK(&wl->irq_work, wl1271_irq_work);
636 INIT_WORK(&wl->tx_work, wl1271_tx_work);
637 INIT_WORK(&wl->scan_complete_work, wl1271_scan_complete_work);
642 static int wl1271_chip_wakeup(struct wl1271 *wl)
644 struct wl1271_partition_set partition;
647 msleep(WL1271_PRE_POWER_ON_SLEEP);
648 ret = wl1271_power_on(wl);
651 msleep(WL1271_POWER_ON_SLEEP);
655 /* We don't need a real memory partition here, because we only want
656 * to use the registers at this point. */
657 memset(&partition, 0, sizeof(partition));
658 partition.reg.start = REGISTERS_BASE;
659 partition.reg.size = REGISTERS_DOWN_SIZE;
660 wl1271_set_partition(wl, &partition);
662 /* ELP module wake up */
663 wl1271_fw_wakeup(wl);
665 /* whal_FwCtrl_BootSm() */
667 /* 0. read chip id from CHIP_ID */
668 wl->chip.id = wl1271_read32(wl, CHIP_ID_B);
670 /* 1. check if chip id is valid */
672 switch (wl->chip.id) {
673 case CHIP_ID_1271_PG10:
674 wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
677 ret = wl1271_setup(wl);
681 case CHIP_ID_1271_PG20:
682 wl1271_debug(DEBUG_BOOT, "chip id 0x%x (1271 PG20)",
685 ret = wl1271_setup(wl);
690 wl1271_warning("unsupported chip id: 0x%x", wl->chip.id);
695 if (wl->fw == NULL) {
696 ret = wl1271_fetch_firmware(wl);
701 /* No NVS from netlink, try to get it from the filesystem */
702 if (wl->nvs == NULL) {
703 ret = wl1271_fetch_nvs(wl);
712 int wl1271_plt_start(struct wl1271 *wl)
714 int retries = WL1271_BOOT_RETRIES;
717 mutex_lock(&wl->mutex);
719 wl1271_notice("power up");
721 if (wl->state != WL1271_STATE_OFF) {
722 wl1271_error("cannot go into PLT state because not "
723 "in off state: %d", wl->state);
730 ret = wl1271_chip_wakeup(wl);
734 ret = wl1271_boot(wl);
738 ret = wl1271_plt_init(wl);
742 wl->state = WL1271_STATE_PLT;
743 wl1271_notice("firmware booted in PLT mode (%s)",
748 wl1271_disable_interrupts(wl);
749 mutex_unlock(&wl->mutex);
750 /* Unlocking the mutex in the middle of handling is
751 inherently unsafe. In this case we deem it safe to do,
752 because we need to let any possibly pending IRQ out of
753 the system (and while we are WL1271_STATE_OFF the IRQ
754 work function will not do anything.) Also, any other
755 possible concurrent operations will fail due to the
756 current state, hence the wl1271 struct should be safe. */
757 cancel_work_sync(&wl->irq_work);
758 mutex_lock(&wl->mutex);
760 wl1271_power_off(wl);
763 wl1271_error("firmware boot in PLT mode failed despite %d retries",
764 WL1271_BOOT_RETRIES);
766 mutex_unlock(&wl->mutex);
771 int wl1271_plt_stop(struct wl1271 *wl)
775 mutex_lock(&wl->mutex);
777 wl1271_notice("power down");
779 if (wl->state != WL1271_STATE_PLT) {
780 wl1271_error("cannot power down because not in PLT "
781 "state: %d", wl->state);
786 wl1271_disable_interrupts(wl);
787 wl1271_power_off(wl);
789 wl->state = WL1271_STATE_OFF;
793 mutex_unlock(&wl->mutex);
795 cancel_work_sync(&wl->irq_work);
801 static int wl1271_op_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
803 struct wl1271 *wl = hw->priv;
804 struct ieee80211_conf *conf = &hw->conf;
805 struct ieee80211_tx_info *txinfo = IEEE80211_SKB_CB(skb);
806 struct ieee80211_sta *sta = txinfo->control.sta;
809 /* peek into the rates configured in the STA entry */
810 spin_lock_irqsave(&wl->wl_lock, flags);
811 if (sta && sta->supp_rates[conf->channel->band] != wl->sta_rate_set) {
812 wl->sta_rate_set = sta->supp_rates[conf->channel->band];
813 set_bit(WL1271_FLAG_STA_RATES_CHANGED, &wl->flags);
815 spin_unlock_irqrestore(&wl->wl_lock, flags);
817 /* queue the packet */
818 skb_queue_tail(&wl->tx_queue, skb);
821 * The chip specific setup must run before the first TX packet -
822 * before that, the tx_work will not be initialized!
825 ieee80211_queue_work(wl->hw, &wl->tx_work);
828 * The workqueue is slow to process the tx_queue and we need stop
829 * the queue here, otherwise the queue will get too long.
831 if (skb_queue_len(&wl->tx_queue) >= WL1271_TX_QUEUE_HIGH_WATERMARK) {
832 wl1271_debug(DEBUG_TX, "op_tx: stopping queues");
834 spin_lock_irqsave(&wl->wl_lock, flags);
835 ieee80211_stop_queues(wl->hw);
836 set_bit(WL1271_FLAG_TX_QUEUE_STOPPED, &wl->flags);
837 spin_unlock_irqrestore(&wl->wl_lock, flags);
843 static struct notifier_block wl1271_dev_notifier = {
844 .notifier_call = wl1271_dev_notify,
847 static int wl1271_op_start(struct ieee80211_hw *hw)
849 wl1271_debug(DEBUG_MAC80211, "mac80211 start");
852 * We have to delay the booting of the hardware because
853 * we need to know the local MAC address before downloading and
854 * initializing the firmware. The MAC address cannot be changed
855 * after boot, and without the proper MAC address, the firmware
856 * will not function properly.
858 * The MAC address is first known when the corresponding interface
859 * is added. That is where we will initialize the hardware.
865 static void wl1271_op_stop(struct ieee80211_hw *hw)
867 wl1271_debug(DEBUG_MAC80211, "mac80211 stop");
870 static int wl1271_op_add_interface(struct ieee80211_hw *hw,
871 struct ieee80211_vif *vif)
873 struct wl1271 *wl = hw->priv;
874 struct wiphy *wiphy = hw->wiphy;
875 int retries = WL1271_BOOT_RETRIES;
878 wl1271_debug(DEBUG_MAC80211, "mac80211 add interface type %d mac %pM",
879 vif->type, vif->addr);
881 mutex_lock(&wl->mutex);
890 case NL80211_IFTYPE_STATION:
891 wl->bss_type = BSS_TYPE_STA_BSS;
892 wl->set_bss_type = BSS_TYPE_STA_BSS;
894 case NL80211_IFTYPE_ADHOC:
895 wl->bss_type = BSS_TYPE_IBSS;
896 wl->set_bss_type = BSS_TYPE_STA_BSS;
903 memcpy(wl->mac_addr, vif->addr, ETH_ALEN);
905 if (wl->state != WL1271_STATE_OFF) {
906 wl1271_error("cannot start because not in off state: %d",
914 ret = wl1271_chip_wakeup(wl);
918 ret = wl1271_boot(wl);
922 ret = wl1271_hw_init(wl);
926 wl->state = WL1271_STATE_ON;
927 wl1271_info("firmware booted (%s)", wl->chip.fw_ver);
929 /* update hw/fw version info in wiphy struct */
930 wiphy->hw_version = wl->chip.id;
931 strncpy(wiphy->fw_version, wl->chip.fw_ver,
932 sizeof(wiphy->fw_version));
937 wl1271_disable_interrupts(wl);
938 mutex_unlock(&wl->mutex);
939 /* Unlocking the mutex in the middle of handling is
940 inherently unsafe. In this case we deem it safe to do,
941 because we need to let any possibly pending IRQ out of
942 the system (and while we are WL1271_STATE_OFF the IRQ
943 work function will not do anything.) Also, any other
944 possible concurrent operations will fail due to the
945 current state, hence the wl1271 struct should be safe. */
946 cancel_work_sync(&wl->irq_work);
947 mutex_lock(&wl->mutex);
949 wl1271_power_off(wl);
952 wl1271_error("firmware boot failed despite %d retries",
953 WL1271_BOOT_RETRIES);
955 mutex_unlock(&wl->mutex);
958 list_add(&wl->list, &wl_list);
963 static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
964 struct ieee80211_vif *vif)
966 struct wl1271 *wl = hw->priv;
969 cancel_work_sync(&wl->scan_complete_work);
971 mutex_lock(&wl->mutex);
972 wl1271_debug(DEBUG_MAC80211, "mac80211 remove interface");
978 WARN_ON(wl->state != WL1271_STATE_ON);
980 /* enable dyn ps just in case (if left on due to fw crash etc) */
981 if (wl->bss_type == BSS_TYPE_STA_BSS)
982 ieee80211_enable_dyn_ps(wl->vif);
984 if (wl->scan.state != WL1271_SCAN_STATE_IDLE) {
985 wl->scan.state = WL1271_SCAN_STATE_IDLE;
986 kfree(wl->scan.scanned_ch);
987 wl->scan.scanned_ch = NULL;
988 ieee80211_scan_completed(wl->hw, true);
991 wl->state = WL1271_STATE_OFF;
993 wl1271_disable_interrupts(wl);
995 mutex_unlock(&wl->mutex);
997 cancel_work_sync(&wl->irq_work);
998 cancel_work_sync(&wl->tx_work);
999 cancel_delayed_work_sync(&wl->pspoll_work);
1000 cancel_delayed_work_sync(&wl->elp_work);
1002 mutex_lock(&wl->mutex);
1004 /* let's notify MAC80211 about the remaining pending TX frames */
1005 wl1271_tx_reset(wl);
1006 wl1271_power_off(wl);
1008 memset(wl->bssid, 0, ETH_ALEN);
1009 memset(wl->ssid, 0, IW_ESSID_MAX_SIZE + 1);
1011 wl->bss_type = MAX_BSS_TYPE;
1012 wl->set_bss_type = MAX_BSS_TYPE;
1013 wl->band = IEEE80211_BAND_2GHZ;
1016 wl->psm_entry_retry = 0;
1017 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
1018 wl->tx_blocks_available = 0;
1019 wl->tx_results_count = 0;
1020 wl->tx_packets_count = 0;
1021 wl->tx_security_last_seq = 0;
1022 wl->tx_security_seq = 0;
1023 wl->time_offset = 0;
1024 wl->session_counter = 0;
1025 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
1026 wl->sta_rate_set = 0;
1031 for (i = 0; i < NUM_TX_QUEUES; i++)
1032 wl->tx_blocks_freed[i] = 0;
1034 wl1271_debugfs_reset(wl);
1036 kfree(wl->fw_status);
1037 wl->fw_status = NULL;
1038 kfree(wl->tx_res_if);
1039 wl->tx_res_if = NULL;
1040 kfree(wl->target_mem_map);
1041 wl->target_mem_map = NULL;
1043 mutex_unlock(&wl->mutex);
1046 static void wl1271_configure_filters(struct wl1271 *wl, unsigned int filters)
1048 wl->rx_config = WL1271_DEFAULT_RX_CONFIG;
1049 wl->rx_filter = WL1271_DEFAULT_RX_FILTER;
1051 /* combine requested filters with current filter config */
1052 filters = wl->filters | filters;
1054 wl1271_debug(DEBUG_FILTERS, "RX filters set: ");
1056 if (filters & FIF_PROMISC_IN_BSS) {
1057 wl1271_debug(DEBUG_FILTERS, " - FIF_PROMISC_IN_BSS");
1058 wl->rx_config &= ~CFG_UNI_FILTER_EN;
1059 wl->rx_config |= CFG_BSSID_FILTER_EN;
1061 if (filters & FIF_BCN_PRBRESP_PROMISC) {
1062 wl1271_debug(DEBUG_FILTERS, " - FIF_BCN_PRBRESP_PROMISC");
1063 wl->rx_config &= ~CFG_BSSID_FILTER_EN;
1064 wl->rx_config &= ~CFG_SSID_FILTER_EN;
1066 if (filters & FIF_OTHER_BSS) {
1067 wl1271_debug(DEBUG_FILTERS, " - FIF_OTHER_BSS");
1068 wl->rx_config &= ~CFG_BSSID_FILTER_EN;
1070 if (filters & FIF_CONTROL) {
1071 wl1271_debug(DEBUG_FILTERS, " - FIF_CONTROL");
1072 wl->rx_filter |= CFG_RX_CTL_EN;
1074 if (filters & FIF_FCSFAIL) {
1075 wl1271_debug(DEBUG_FILTERS, " - FIF_FCSFAIL");
1076 wl->rx_filter |= CFG_RX_FCS_ERROR;
1080 static int wl1271_dummy_join(struct wl1271 *wl)
1083 /* we need to use a dummy BSSID for now */
1084 static const u8 dummy_bssid[ETH_ALEN] = { 0x0b, 0xad, 0xde,
1087 memcpy(wl->bssid, dummy_bssid, ETH_ALEN);
1089 /* pass through frames from all BSS */
1090 wl1271_configure_filters(wl, FIF_OTHER_BSS);
1092 ret = wl1271_cmd_join(wl, wl->set_bss_type);
1096 set_bit(WL1271_FLAG_JOINED, &wl->flags);
1102 static int wl1271_join(struct wl1271 *wl, bool set_assoc)
1107 * One of the side effects of the JOIN command is that is clears
1108 * WPA/WPA2 keys from the chipset. Performing a JOIN while associated
1109 * to a WPA/WPA2 access point will therefore kill the data-path.
1110 * Currently there is no supported scenario for JOIN during
1111 * association - if it becomes a supported scenario, the WPA/WPA2 keys
1112 * must be handled somehow.
1115 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1116 wl1271_info("JOIN while associated.");
1119 set_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
1121 ret = wl1271_cmd_join(wl, wl->set_bss_type);
1125 set_bit(WL1271_FLAG_JOINED, &wl->flags);
1127 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1131 * The join command disable the keep-alive mode, shut down its process,
1132 * and also clear the template config, so we need to reset it all after
1133 * the join. The acx_aid starts the keep-alive process, and the order
1134 * of the commands below is relevant.
1136 ret = wl1271_acx_keep_alive_mode(wl, true);
1140 ret = wl1271_acx_aid(wl, wl->aid);
1144 ret = wl1271_cmd_build_klv_null_data(wl);
1148 ret = wl1271_acx_keep_alive_config(wl, CMD_TEMPL_KLV_IDX_NULL_DATA,
1149 ACX_KEEP_ALIVE_TPL_VALID);
1157 static int wl1271_unjoin(struct wl1271 *wl)
1161 /* to stop listening to a channel, we disconnect */
1162 ret = wl1271_cmd_disconnect(wl);
1166 clear_bit(WL1271_FLAG_JOINED, &wl->flags);
1167 memset(wl->bssid, 0, ETH_ALEN);
1169 /* stop filterting packets based on bssid */
1170 wl1271_configure_filters(wl, FIF_OTHER_BSS);
1176 static void wl1271_set_band_rate(struct wl1271 *wl)
1178 if (wl->band == IEEE80211_BAND_2GHZ)
1179 wl->basic_rate_set = wl->conf.tx.basic_rate;
1181 wl->basic_rate_set = wl->conf.tx.basic_rate_5;
1184 static u32 wl1271_min_rate_get(struct wl1271 *wl)
1189 if (!wl->basic_rate_set) {
1191 wl->basic_rate_set = wl->conf.tx.basic_rate;
1194 for (i = 0; !rate; i++) {
1195 if ((wl->basic_rate_set >> i) & 0x1)
1202 static int wl1271_handle_idle(struct wl1271 *wl, bool idle)
1207 if (test_bit(WL1271_FLAG_JOINED, &wl->flags)) {
1208 ret = wl1271_unjoin(wl);
1212 wl->rate_set = wl1271_min_rate_get(wl);
1213 wl->sta_rate_set = 0;
1214 ret = wl1271_acx_rate_policies(wl);
1217 ret = wl1271_acx_keep_alive_config(
1218 wl, CMD_TEMPL_KLV_IDX_NULL_DATA,
1219 ACX_KEEP_ALIVE_TPL_INVALID);
1222 set_bit(WL1271_FLAG_IDLE, &wl->flags);
1224 /* increment the session counter */
1225 wl->session_counter++;
1226 if (wl->session_counter >= SESSION_COUNTER_MAX)
1227 wl->session_counter = 0;
1228 ret = wl1271_dummy_join(wl);
1231 clear_bit(WL1271_FLAG_IDLE, &wl->flags);
1238 static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed)
1240 struct wl1271 *wl = hw->priv;
1241 struct ieee80211_conf *conf = &hw->conf;
1242 int channel, ret = 0;
1244 channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
1246 wl1271_debug(DEBUG_MAC80211, "mac80211 config ch %d psm %s power %d %s",
1248 conf->flags & IEEE80211_CONF_PS ? "on" : "off",
1250 conf->flags & IEEE80211_CONF_IDLE ? "idle" : "in use");
1253 * mac80211 will go to idle nearly immediately after transmitting some
1254 * frames, such as the deauth. To make sure those frames reach the air,
1255 * wait here until the TX queue is fully flushed.
1257 if ((changed & IEEE80211_CONF_CHANGE_IDLE) &&
1258 (conf->flags & IEEE80211_CONF_IDLE))
1259 wl1271_tx_flush(wl);
1261 mutex_lock(&wl->mutex);
1263 if (unlikely(wl->state == WL1271_STATE_OFF))
1266 ret = wl1271_ps_elp_wakeup(wl, false);
1270 /* if the channel changes while joined, join again */
1271 if (changed & IEEE80211_CONF_CHANGE_CHANNEL &&
1272 ((wl->band != conf->channel->band) ||
1273 (wl->channel != channel))) {
1274 wl->band = conf->channel->band;
1275 wl->channel = channel;
1278 * FIXME: the mac80211 should really provide a fixed rate
1279 * to use here. for now, just use the smallest possible rate
1280 * for the band as a fixed rate for association frames and
1281 * other control messages.
1283 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1284 wl1271_set_band_rate(wl);
1286 wl->basic_rate = wl1271_min_rate_get(wl);
1287 ret = wl1271_acx_rate_policies(wl);
1289 wl1271_warning("rate policy for update channel "
1292 if (test_bit(WL1271_FLAG_JOINED, &wl->flags)) {
1293 ret = wl1271_join(wl, false);
1295 wl1271_warning("cmd join to update channel "
1300 if (changed & IEEE80211_CONF_CHANGE_IDLE) {
1301 ret = wl1271_handle_idle(wl, conf->flags & IEEE80211_CONF_IDLE);
1303 wl1271_warning("idle mode change failed %d", ret);
1307 * if mac80211 changes the PSM mode, make sure the mode is not
1308 * incorrectly changed after the pspoll failure active window.
1310 if (changed & IEEE80211_CONF_CHANGE_PS)
1311 clear_bit(WL1271_FLAG_PSPOLL_FAILURE, &wl->flags);
1313 if (conf->flags & IEEE80211_CONF_PS &&
1314 !test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
1315 set_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
1318 * We enter PSM only if we're already associated.
1319 * If we're not, we'll enter it when joining an SSID,
1320 * through the bss_info_changed() hook.
1322 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags)) {
1323 wl1271_debug(DEBUG_PSM, "psm enabled");
1324 ret = wl1271_ps_set_mode(wl, STATION_POWER_SAVE_MODE,
1325 wl->basic_rate_set, true);
1327 } else if (!(conf->flags & IEEE80211_CONF_PS) &&
1328 test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
1329 wl1271_debug(DEBUG_PSM, "psm disabled");
1331 clear_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
1333 if (test_bit(WL1271_FLAG_PSM, &wl->flags))
1334 ret = wl1271_ps_set_mode(wl, STATION_ACTIVE_MODE,
1335 wl->basic_rate_set, true);
1338 if (conf->power_level != wl->power_level) {
1339 ret = wl1271_acx_tx_power(wl, conf->power_level);
1343 wl->power_level = conf->power_level;
1347 wl1271_ps_elp_sleep(wl);
1350 mutex_unlock(&wl->mutex);
1355 struct wl1271_filter_params {
1358 u8 mc_list[ACX_MC_ADDRESS_GROUP_MAX][ETH_ALEN];
1361 static u64 wl1271_op_prepare_multicast(struct ieee80211_hw *hw,
1362 struct netdev_hw_addr_list *mc_list)
1364 struct wl1271_filter_params *fp;
1365 struct netdev_hw_addr *ha;
1366 struct wl1271 *wl = hw->priv;
1368 if (unlikely(wl->state == WL1271_STATE_OFF))
1371 fp = kzalloc(sizeof(*fp), GFP_ATOMIC);
1373 wl1271_error("Out of memory setting filters.");
1377 /* update multicast filtering parameters */
1378 fp->mc_list_length = 0;
1379 if (netdev_hw_addr_list_count(mc_list) > ACX_MC_ADDRESS_GROUP_MAX) {
1380 fp->enabled = false;
1383 netdev_hw_addr_list_for_each(ha, mc_list) {
1384 memcpy(fp->mc_list[fp->mc_list_length],
1385 ha->addr, ETH_ALEN);
1386 fp->mc_list_length++;
1390 return (u64)(unsigned long)fp;
1393 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
1396 FIF_BCN_PRBRESP_PROMISC | \
1400 static void wl1271_op_configure_filter(struct ieee80211_hw *hw,
1401 unsigned int changed,
1402 unsigned int *total, u64 multicast)
1404 struct wl1271_filter_params *fp = (void *)(unsigned long)multicast;
1405 struct wl1271 *wl = hw->priv;
1408 wl1271_debug(DEBUG_MAC80211, "mac80211 configure filter");
1410 mutex_lock(&wl->mutex);
1412 *total &= WL1271_SUPPORTED_FILTERS;
1413 changed &= WL1271_SUPPORTED_FILTERS;
1415 if (unlikely(wl->state == WL1271_STATE_OFF))
1418 ret = wl1271_ps_elp_wakeup(wl, false);
1423 if (*total & FIF_ALLMULTI)
1424 ret = wl1271_acx_group_address_tbl(wl, false, NULL, 0);
1426 ret = wl1271_acx_group_address_tbl(wl, fp->enabled,
1428 fp->mc_list_length);
1432 /* determine, whether supported filter values have changed */
1436 /* configure filters */
1437 wl->filters = *total;
1438 wl1271_configure_filters(wl, 0);
1440 /* apply configured filters */
1441 ret = wl1271_acx_rx_config(wl, wl->rx_config, wl->rx_filter);
1446 wl1271_ps_elp_sleep(wl);
1449 mutex_unlock(&wl->mutex);
1453 static int wl1271_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
1454 struct ieee80211_vif *vif,
1455 struct ieee80211_sta *sta,
1456 struct ieee80211_key_conf *key_conf)
1458 struct wl1271 *wl = hw->priv;
1465 static const u8 bcast_addr[ETH_ALEN] =
1466 { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
1468 wl1271_debug(DEBUG_MAC80211, "mac80211 set key");
1470 addr = sta ? sta->addr : bcast_addr;
1472 wl1271_debug(DEBUG_CRYPT, "CMD: 0x%x", cmd);
1473 wl1271_dump(DEBUG_CRYPT, "ADDR: ", addr, ETH_ALEN);
1474 wl1271_debug(DEBUG_CRYPT, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
1475 key_conf->cipher, key_conf->keyidx,
1476 key_conf->keylen, key_conf->flags);
1477 wl1271_dump(DEBUG_CRYPT, "KEY: ", key_conf->key, key_conf->keylen);
1479 if (is_zero_ether_addr(addr)) {
1480 /* We dont support TX only encryption */
1485 mutex_lock(&wl->mutex);
1487 ret = wl1271_ps_elp_wakeup(wl, false);
1491 switch (key_conf->cipher) {
1492 case WLAN_CIPHER_SUITE_WEP40:
1493 case WLAN_CIPHER_SUITE_WEP104:
1496 key_conf->hw_key_idx = key_conf->keyidx;
1498 case WLAN_CIPHER_SUITE_TKIP:
1499 key_type = KEY_TKIP;
1501 key_conf->hw_key_idx = key_conf->keyidx;
1502 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
1503 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
1505 case WLAN_CIPHER_SUITE_CCMP:
1508 key_conf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
1509 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
1510 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
1513 wl1271_error("Unknown key algo 0x%x", key_conf->cipher);
1521 ret = wl1271_cmd_set_key(wl, KEY_ADD_OR_REPLACE,
1522 key_conf->keyidx, key_type,
1523 key_conf->keylen, key_conf->key,
1524 addr, tx_seq_32, tx_seq_16);
1526 wl1271_error("Could not add or replace key");
1530 /* the default WEP key needs to be configured at least once */
1531 if (key_type == KEY_WEP) {
1532 ret = wl1271_cmd_set_default_wep_key(wl,
1540 /* The wl1271 does not allow to remove unicast keys - they
1541 will be cleared automatically on next CMD_JOIN. Ignore the
1542 request silently, as we dont want the mac80211 to emit
1543 an error message. */
1544 if (!is_broadcast_ether_addr(addr))
1547 ret = wl1271_cmd_set_key(wl, KEY_REMOVE,
1548 key_conf->keyidx, key_type,
1549 key_conf->keylen, key_conf->key,
1552 wl1271_error("Could not remove key");
1558 wl1271_error("Unsupported key cmd 0x%x", cmd);
1564 wl1271_ps_elp_sleep(wl);
1567 mutex_unlock(&wl->mutex);
1573 static int wl1271_op_hw_scan(struct ieee80211_hw *hw,
1574 struct ieee80211_vif *vif,
1575 struct cfg80211_scan_request *req)
1577 struct wl1271 *wl = hw->priv;
1582 wl1271_debug(DEBUG_MAC80211, "mac80211 hw scan");
1585 ssid = req->ssids[0].ssid;
1586 len = req->ssids[0].ssid_len;
1589 mutex_lock(&wl->mutex);
1591 ret = wl1271_ps_elp_wakeup(wl, false);
1595 ret = wl1271_scan(hw->priv, ssid, len, req);
1597 wl1271_ps_elp_sleep(wl);
1600 mutex_unlock(&wl->mutex);
1605 static int wl1271_op_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
1607 struct wl1271 *wl = hw->priv;
1610 mutex_lock(&wl->mutex);
1612 if (unlikely(wl->state == WL1271_STATE_OFF))
1615 ret = wl1271_ps_elp_wakeup(wl, false);
1619 ret = wl1271_acx_rts_threshold(wl, (u16) value);
1621 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret);
1623 wl1271_ps_elp_sleep(wl);
1626 mutex_unlock(&wl->mutex);
1631 static void wl1271_ssid_set(struct wl1271 *wl, struct sk_buff *beacon)
1633 u8 *ptr = beacon->data +
1634 offsetof(struct ieee80211_mgmt, u.beacon.variable);
1636 /* find the location of the ssid in the beacon */
1637 while (ptr < beacon->data + beacon->len) {
1638 if (ptr[0] == WLAN_EID_SSID) {
1639 wl->ssid_len = ptr[1];
1640 memcpy(wl->ssid, ptr+2, wl->ssid_len);
1645 wl1271_error("ad-hoc beacon template has no SSID!\n");
1648 static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
1649 struct ieee80211_vif *vif,
1650 struct ieee80211_bss_conf *bss_conf,
1653 enum wl1271_cmd_ps_mode mode;
1654 struct wl1271 *wl = hw->priv;
1655 bool do_join = false;
1656 bool set_assoc = false;
1659 wl1271_debug(DEBUG_MAC80211, "mac80211 bss info changed");
1661 mutex_lock(&wl->mutex);
1663 ret = wl1271_ps_elp_wakeup(wl, false);
1667 if ((changed & BSS_CHANGED_BEACON_INT) &&
1668 (wl->bss_type == BSS_TYPE_IBSS)) {
1669 wl1271_debug(DEBUG_ADHOC, "ad-hoc beacon interval updated: %d",
1670 bss_conf->beacon_int);
1672 wl->beacon_int = bss_conf->beacon_int;
1676 if ((changed & BSS_CHANGED_BEACON) &&
1677 (wl->bss_type == BSS_TYPE_IBSS)) {
1678 struct sk_buff *beacon = ieee80211_beacon_get(hw, vif);
1680 wl1271_debug(DEBUG_ADHOC, "ad-hoc beacon updated");
1683 struct ieee80211_hdr *hdr;
1685 wl1271_ssid_set(wl, beacon);
1686 ret = wl1271_cmd_template_set(wl, CMD_TEMPL_BEACON,
1689 wl1271_min_rate_get(wl));
1692 dev_kfree_skb(beacon);
1696 hdr = (struct ieee80211_hdr *) beacon->data;
1697 hdr->frame_control = cpu_to_le16(
1698 IEEE80211_FTYPE_MGMT |
1699 IEEE80211_STYPE_PROBE_RESP);
1701 ret = wl1271_cmd_template_set(wl,
1702 CMD_TEMPL_PROBE_RESPONSE,
1705 wl1271_min_rate_get(wl));
1706 dev_kfree_skb(beacon);
1710 /* Need to update the SSID (for filtering etc) */
1715 if ((changed & BSS_CHANGED_BEACON_ENABLED) &&
1716 (wl->bss_type == BSS_TYPE_IBSS)) {
1717 wl1271_debug(DEBUG_ADHOC, "ad-hoc beaconing: %s",
1718 bss_conf->enable_beacon ? "enabled" : "disabled");
1720 if (bss_conf->enable_beacon)
1721 wl->set_bss_type = BSS_TYPE_IBSS;
1723 wl->set_bss_type = BSS_TYPE_STA_BSS;
1727 if (changed & BSS_CHANGED_CQM) {
1728 bool enable = false;
1729 if (bss_conf->cqm_rssi_thold)
1731 ret = wl1271_acx_rssi_snr_trigger(wl, enable,
1732 bss_conf->cqm_rssi_thold,
1733 bss_conf->cqm_rssi_hyst);
1736 wl->rssi_thold = bss_conf->cqm_rssi_thold;
1739 if ((changed & BSS_CHANGED_BSSID) &&
1741 * Now we know the correct bssid, so we send a new join command
1742 * and enable the BSSID filter
1744 memcmp(wl->bssid, bss_conf->bssid, ETH_ALEN)) {
1745 memcpy(wl->bssid, bss_conf->bssid, ETH_ALEN);
1747 ret = wl1271_cmd_build_null_data(wl);
1751 ret = wl1271_build_qos_null_data(wl);
1755 /* filter out all packets not from this BSSID */
1756 wl1271_configure_filters(wl, 0);
1758 /* Need to update the BSSID (for filtering etc) */
1762 if (changed & BSS_CHANGED_ASSOC) {
1763 if (bss_conf->assoc) {
1765 wl->aid = bss_conf->aid;
1768 wl->ps_poll_failures = 0;
1771 * use basic rates from AP, and determine lowest rate
1772 * to use with control frames.
1774 rates = bss_conf->basic_rates;
1775 wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl,
1777 wl->basic_rate = wl1271_min_rate_get(wl);
1778 ret = wl1271_acx_rate_policies(wl);
1783 * with wl1271, we don't need to update the
1784 * beacon_int and dtim_period, because the firmware
1785 * updates it by itself when the first beacon is
1786 * received after a join.
1788 ret = wl1271_cmd_build_ps_poll(wl, wl->aid);
1793 * The SSID is intentionally set to NULL here - the
1794 * firmware will set the probe request with a
1795 * broadcast SSID regardless of what we set in the
1798 ret = wl1271_cmd_build_probe_req(wl, NULL, 0,
1801 /* enable the connection monitoring feature */
1802 ret = wl1271_acx_conn_monit_params(wl, true);
1806 /* If we want to go in PSM but we're not there yet */
1807 if (test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags) &&
1808 !test_bit(WL1271_FLAG_PSM, &wl->flags)) {
1809 mode = STATION_POWER_SAVE_MODE;
1810 ret = wl1271_ps_set_mode(wl, mode,
1817 /* use defaults when not associated */
1818 clear_bit(WL1271_FLAG_STA_STATE_SENT, &wl->flags);
1819 clear_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
1822 /* re-enable dynamic ps - just in case */
1823 ieee80211_enable_dyn_ps(wl->vif);
1825 /* revert back to minimum rates for the current band */
1826 wl1271_set_band_rate(wl);
1827 wl->basic_rate = wl1271_min_rate_get(wl);
1828 ret = wl1271_acx_rate_policies(wl);
1832 /* disable connection monitor features */
1833 ret = wl1271_acx_conn_monit_params(wl, false);
1835 /* Disable the keep-alive feature */
1836 ret = wl1271_acx_keep_alive_mode(wl, false);
1844 if (changed & BSS_CHANGED_ERP_SLOT) {
1845 if (bss_conf->use_short_slot)
1846 ret = wl1271_acx_slot(wl, SLOT_TIME_SHORT);
1848 ret = wl1271_acx_slot(wl, SLOT_TIME_LONG);
1850 wl1271_warning("Set slot time failed %d", ret);
1855 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
1856 if (bss_conf->use_short_preamble)
1857 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_SHORT);
1859 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_LONG);
1862 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
1863 if (bss_conf->use_cts_prot)
1864 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_ENABLE);
1866 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_DISABLE);
1868 wl1271_warning("Set ctsprotect failed %d", ret);
1873 if (changed & BSS_CHANGED_ARP_FILTER) {
1874 __be32 addr = bss_conf->arp_addr_list[0];
1875 WARN_ON(wl->bss_type != BSS_TYPE_STA_BSS);
1877 if (bss_conf->arp_addr_cnt == 1 && bss_conf->arp_filter_enabled)
1878 ret = wl1271_acx_arp_ip_filter(wl, true, addr);
1880 ret = wl1271_acx_arp_ip_filter(wl, false, addr);
1887 ret = wl1271_join(wl, set_assoc);
1889 wl1271_warning("cmd join failed %d", ret);
1895 wl1271_ps_elp_sleep(wl);
1898 mutex_unlock(&wl->mutex);
1901 static int wl1271_op_conf_tx(struct ieee80211_hw *hw, u16 queue,
1902 const struct ieee80211_tx_queue_params *params)
1904 struct wl1271 *wl = hw->priv;
1908 mutex_lock(&wl->mutex);
1910 wl1271_debug(DEBUG_MAC80211, "mac80211 conf tx %d", queue);
1912 ret = wl1271_ps_elp_wakeup(wl, false);
1916 /* the txop is confed in units of 32us by the mac80211, we need us */
1917 ret = wl1271_acx_ac_cfg(wl, wl1271_tx_get_queue(queue),
1918 params->cw_min, params->cw_max,
1919 params->aifs, params->txop << 5);
1924 ps_scheme = CONF_PS_SCHEME_UPSD_TRIGGER;
1926 ps_scheme = CONF_PS_SCHEME_LEGACY;
1928 ret = wl1271_acx_tid_cfg(wl, wl1271_tx_get_queue(queue),
1929 CONF_CHANNEL_TYPE_EDCF,
1930 wl1271_tx_get_queue(queue),
1931 ps_scheme, CONF_ACK_POLICY_LEGACY, 0, 0);
1936 wl1271_ps_elp_sleep(wl);
1939 mutex_unlock(&wl->mutex);
1944 static u64 wl1271_op_get_tsf(struct ieee80211_hw *hw)
1947 struct wl1271 *wl = hw->priv;
1948 u64 mactime = ULLONG_MAX;
1951 wl1271_debug(DEBUG_MAC80211, "mac80211 get tsf");
1953 mutex_lock(&wl->mutex);
1955 ret = wl1271_ps_elp_wakeup(wl, false);
1959 ret = wl1271_acx_tsf_info(wl, &mactime);
1964 wl1271_ps_elp_sleep(wl);
1967 mutex_unlock(&wl->mutex);
1971 static int wl1271_op_get_survey(struct ieee80211_hw *hw, int idx,
1972 struct survey_info *survey)
1974 struct wl1271 *wl = hw->priv;
1975 struct ieee80211_conf *conf = &hw->conf;
1980 survey->channel = conf->channel;
1981 survey->filled = SURVEY_INFO_NOISE_DBM;
1982 survey->noise = wl->noise;
1987 /* can't be const, mac80211 writes to this */
1988 static struct ieee80211_rate wl1271_rates[] = {
1990 .hw_value = CONF_HW_BIT_RATE_1MBPS,
1991 .hw_value_short = CONF_HW_BIT_RATE_1MBPS, },
1993 .hw_value = CONF_HW_BIT_RATE_2MBPS,
1994 .hw_value_short = CONF_HW_BIT_RATE_2MBPS,
1995 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
1997 .hw_value = CONF_HW_BIT_RATE_5_5MBPS,
1998 .hw_value_short = CONF_HW_BIT_RATE_5_5MBPS,
1999 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
2001 .hw_value = CONF_HW_BIT_RATE_11MBPS,
2002 .hw_value_short = CONF_HW_BIT_RATE_11MBPS,
2003 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
2005 .hw_value = CONF_HW_BIT_RATE_6MBPS,
2006 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
2008 .hw_value = CONF_HW_BIT_RATE_9MBPS,
2009 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
2011 .hw_value = CONF_HW_BIT_RATE_12MBPS,
2012 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
2014 .hw_value = CONF_HW_BIT_RATE_18MBPS,
2015 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
2017 .hw_value = CONF_HW_BIT_RATE_24MBPS,
2018 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
2020 .hw_value = CONF_HW_BIT_RATE_36MBPS,
2021 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
2023 .hw_value = CONF_HW_BIT_RATE_48MBPS,
2024 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
2026 .hw_value = CONF_HW_BIT_RATE_54MBPS,
2027 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
2031 * Can't be const, mac80211 writes to this. The order of the channels here
2032 * is designed to improve scanning.
2034 static struct ieee80211_channel wl1271_channels[] = {
2035 { .hw_value = 1, .center_freq = 2412, .max_power = 25 },
2036 { .hw_value = 5, .center_freq = 2432, .max_power = 25 },
2037 { .hw_value = 9, .center_freq = 2452, .max_power = 25 },
2038 { .hw_value = 13, .center_freq = 2472, .max_power = 25 },
2039 { .hw_value = 4, .center_freq = 2427, .max_power = 25 },
2040 { .hw_value = 8, .center_freq = 2447, .max_power = 25 },
2041 { .hw_value = 12, .center_freq = 2467, .max_power = 25 },
2042 { .hw_value = 3, .center_freq = 2422, .max_power = 25 },
2043 { .hw_value = 7, .center_freq = 2442, .max_power = 25 },
2044 { .hw_value = 11, .center_freq = 2462, .max_power = 25 },
2045 { .hw_value = 2, .center_freq = 2417, .max_power = 25 },
2046 { .hw_value = 6, .center_freq = 2437, .max_power = 25 },
2047 { .hw_value = 10, .center_freq = 2457, .max_power = 25 },
2050 /* mapping to indexes for wl1271_rates */
2051 static const u8 wl1271_rate_to_idx_2ghz[] = {
2052 /* MCS rates are used only with 11n */
2053 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS7 */
2054 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS6 */
2055 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS5 */
2056 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS4 */
2057 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS3 */
2058 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS2 */
2059 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS1 */
2060 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS0 */
2062 11, /* CONF_HW_RXTX_RATE_54 */
2063 10, /* CONF_HW_RXTX_RATE_48 */
2064 9, /* CONF_HW_RXTX_RATE_36 */
2065 8, /* CONF_HW_RXTX_RATE_24 */
2067 /* TI-specific rate */
2068 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
2070 7, /* CONF_HW_RXTX_RATE_18 */
2071 6, /* CONF_HW_RXTX_RATE_12 */
2072 3, /* CONF_HW_RXTX_RATE_11 */
2073 5, /* CONF_HW_RXTX_RATE_9 */
2074 4, /* CONF_HW_RXTX_RATE_6 */
2075 2, /* CONF_HW_RXTX_RATE_5_5 */
2076 1, /* CONF_HW_RXTX_RATE_2 */
2077 0 /* CONF_HW_RXTX_RATE_1 */
2080 /* can't be const, mac80211 writes to this */
2081 static struct ieee80211_supported_band wl1271_band_2ghz = {
2082 .channels = wl1271_channels,
2083 .n_channels = ARRAY_SIZE(wl1271_channels),
2084 .bitrates = wl1271_rates,
2085 .n_bitrates = ARRAY_SIZE(wl1271_rates),
2088 /* 5 GHz data rates for WL1273 */
2089 static struct ieee80211_rate wl1271_rates_5ghz[] = {
2091 .hw_value = CONF_HW_BIT_RATE_6MBPS,
2092 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
2094 .hw_value = CONF_HW_BIT_RATE_9MBPS,
2095 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
2097 .hw_value = CONF_HW_BIT_RATE_12MBPS,
2098 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
2100 .hw_value = CONF_HW_BIT_RATE_18MBPS,
2101 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
2103 .hw_value = CONF_HW_BIT_RATE_24MBPS,
2104 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
2106 .hw_value = CONF_HW_BIT_RATE_36MBPS,
2107 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
2109 .hw_value = CONF_HW_BIT_RATE_48MBPS,
2110 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
2112 .hw_value = CONF_HW_BIT_RATE_54MBPS,
2113 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
2117 * 5 GHz band channels for WL1273 - can't be const, mac80211 writes to this.
2118 * The order of the channels here is designed to improve scanning.
2120 static struct ieee80211_channel wl1271_channels_5ghz[] = {
2121 { .hw_value = 183, .center_freq = 4915},
2122 { .hw_value = 188, .center_freq = 4940},
2123 { .hw_value = 8, .center_freq = 5040},
2124 { .hw_value = 34, .center_freq = 5170},
2125 { .hw_value = 44, .center_freq = 5220},
2126 { .hw_value = 60, .center_freq = 5300},
2127 { .hw_value = 112, .center_freq = 5560},
2128 { .hw_value = 132, .center_freq = 5660},
2129 { .hw_value = 157, .center_freq = 5785},
2130 { .hw_value = 184, .center_freq = 4920},
2131 { .hw_value = 189, .center_freq = 4945},
2132 { .hw_value = 9, .center_freq = 5045},
2133 { .hw_value = 36, .center_freq = 5180},
2134 { .hw_value = 46, .center_freq = 5230},
2135 { .hw_value = 64, .center_freq = 5320},
2136 { .hw_value = 116, .center_freq = 5580},
2137 { .hw_value = 136, .center_freq = 5680},
2138 { .hw_value = 192, .center_freq = 4960},
2139 { .hw_value = 11, .center_freq = 5055},
2140 { .hw_value = 38, .center_freq = 5190},
2141 { .hw_value = 48, .center_freq = 5240},
2142 { .hw_value = 100, .center_freq = 5500},
2143 { .hw_value = 120, .center_freq = 5600},
2144 { .hw_value = 140, .center_freq = 5700},
2145 { .hw_value = 185, .center_freq = 4925},
2146 { .hw_value = 196, .center_freq = 4980},
2147 { .hw_value = 12, .center_freq = 5060},
2148 { .hw_value = 40, .center_freq = 5200},
2149 { .hw_value = 52, .center_freq = 5260},
2150 { .hw_value = 104, .center_freq = 5520},
2151 { .hw_value = 124, .center_freq = 5620},
2152 { .hw_value = 149, .center_freq = 5745},
2153 { .hw_value = 161, .center_freq = 5805},
2154 { .hw_value = 187, .center_freq = 4935},
2155 { .hw_value = 7, .center_freq = 5035},
2156 { .hw_value = 16, .center_freq = 5080},
2157 { .hw_value = 42, .center_freq = 5210},
2158 { .hw_value = 56, .center_freq = 5280},
2159 { .hw_value = 108, .center_freq = 5540},
2160 { .hw_value = 128, .center_freq = 5640},
2161 { .hw_value = 153, .center_freq = 5765},
2162 { .hw_value = 165, .center_freq = 5825},
2165 /* mapping to indexes for wl1271_rates_5ghz */
2166 static const u8 wl1271_rate_to_idx_5ghz[] = {
2167 /* MCS rates are used only with 11n */
2168 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS7 */
2169 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS6 */
2170 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS5 */
2171 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS4 */
2172 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS3 */
2173 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS2 */
2174 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS1 */
2175 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS0 */
2177 7, /* CONF_HW_RXTX_RATE_54 */
2178 6, /* CONF_HW_RXTX_RATE_48 */
2179 5, /* CONF_HW_RXTX_RATE_36 */
2180 4, /* CONF_HW_RXTX_RATE_24 */
2182 /* TI-specific rate */
2183 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
2185 3, /* CONF_HW_RXTX_RATE_18 */
2186 2, /* CONF_HW_RXTX_RATE_12 */
2187 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_11 */
2188 1, /* CONF_HW_RXTX_RATE_9 */
2189 0, /* CONF_HW_RXTX_RATE_6 */
2190 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_5_5 */
2191 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_2 */
2192 CONF_HW_RXTX_RATE_UNSUPPORTED /* CONF_HW_RXTX_RATE_1 */
2195 static struct ieee80211_supported_band wl1271_band_5ghz = {
2196 .channels = wl1271_channels_5ghz,
2197 .n_channels = ARRAY_SIZE(wl1271_channels_5ghz),
2198 .bitrates = wl1271_rates_5ghz,
2199 .n_bitrates = ARRAY_SIZE(wl1271_rates_5ghz),
2202 static const u8 *wl1271_band_rate_to_idx[] = {
2203 [IEEE80211_BAND_2GHZ] = wl1271_rate_to_idx_2ghz,
2204 [IEEE80211_BAND_5GHZ] = wl1271_rate_to_idx_5ghz
2207 static const struct ieee80211_ops wl1271_ops = {
2208 .start = wl1271_op_start,
2209 .stop = wl1271_op_stop,
2210 .add_interface = wl1271_op_add_interface,
2211 .remove_interface = wl1271_op_remove_interface,
2212 .config = wl1271_op_config,
2213 .prepare_multicast = wl1271_op_prepare_multicast,
2214 .configure_filter = wl1271_op_configure_filter,
2216 .set_key = wl1271_op_set_key,
2217 .hw_scan = wl1271_op_hw_scan,
2218 .bss_info_changed = wl1271_op_bss_info_changed,
2219 .set_rts_threshold = wl1271_op_set_rts_threshold,
2220 .conf_tx = wl1271_op_conf_tx,
2221 .get_tsf = wl1271_op_get_tsf,
2222 .get_survey = wl1271_op_get_survey,
2223 CFG80211_TESTMODE_CMD(wl1271_tm_cmd)
2227 u8 wl1271_rate_to_idx(struct wl1271 *wl, int rate)
2231 BUG_ON(wl->band >= sizeof(wl1271_band_rate_to_idx)/sizeof(u8 *));
2233 if (unlikely(rate >= CONF_HW_RXTX_RATE_MAX)) {
2234 wl1271_error("Illegal RX rate from HW: %d", rate);
2238 idx = wl1271_band_rate_to_idx[wl->band][rate];
2239 if (unlikely(idx == CONF_HW_RXTX_RATE_UNSUPPORTED)) {
2240 wl1271_error("Unsupported RX rate from HW: %d", rate);
2247 static ssize_t wl1271_sysfs_show_bt_coex_state(struct device *dev,
2248 struct device_attribute *attr,
2251 struct wl1271 *wl = dev_get_drvdata(dev);
2256 mutex_lock(&wl->mutex);
2257 len = snprintf(buf, len, "%d\n\n0 - off\n1 - on\n",
2259 mutex_unlock(&wl->mutex);
2265 static ssize_t wl1271_sysfs_store_bt_coex_state(struct device *dev,
2266 struct device_attribute *attr,
2267 const char *buf, size_t count)
2269 struct wl1271 *wl = dev_get_drvdata(dev);
2273 ret = strict_strtoul(buf, 10, &res);
2276 wl1271_warning("incorrect value written to bt_coex_mode");
2280 mutex_lock(&wl->mutex);
2284 if (res == wl->sg_enabled)
2287 wl->sg_enabled = res;
2289 if (wl->state == WL1271_STATE_OFF)
2292 ret = wl1271_ps_elp_wakeup(wl, false);
2296 wl1271_acx_sg_enable(wl, wl->sg_enabled);
2297 wl1271_ps_elp_sleep(wl);
2300 mutex_unlock(&wl->mutex);
2304 static DEVICE_ATTR(bt_coex_state, S_IRUGO | S_IWUSR,
2305 wl1271_sysfs_show_bt_coex_state,
2306 wl1271_sysfs_store_bt_coex_state);
2308 static ssize_t wl1271_sysfs_show_hw_pg_ver(struct device *dev,
2309 struct device_attribute *attr,
2312 struct wl1271 *wl = dev_get_drvdata(dev);
2317 mutex_lock(&wl->mutex);
2318 if (wl->hw_pg_ver >= 0)
2319 len = snprintf(buf, len, "%d\n", wl->hw_pg_ver);
2321 len = snprintf(buf, len, "n/a\n");
2322 mutex_unlock(&wl->mutex);
2327 static DEVICE_ATTR(hw_pg_ver, S_IRUGO | S_IWUSR,
2328 wl1271_sysfs_show_hw_pg_ver, NULL);
2330 int wl1271_register_hw(struct wl1271 *wl)
2334 if (wl->mac80211_registered)
2337 SET_IEEE80211_PERM_ADDR(wl->hw, wl->mac_addr);
2339 ret = ieee80211_register_hw(wl->hw);
2341 wl1271_error("unable to register mac80211 hw: %d", ret);
2345 wl->mac80211_registered = true;
2347 register_netdevice_notifier(&wl1271_dev_notifier);
2349 wl1271_notice("loaded");
2353 EXPORT_SYMBOL_GPL(wl1271_register_hw);
2355 void wl1271_unregister_hw(struct wl1271 *wl)
2357 unregister_netdevice_notifier(&wl1271_dev_notifier);
2358 ieee80211_unregister_hw(wl->hw);
2359 wl->mac80211_registered = false;
2362 EXPORT_SYMBOL_GPL(wl1271_unregister_hw);
2364 int wl1271_init_ieee80211(struct wl1271 *wl)
2366 /* The tx descriptor buffer and the TKIP space. */
2367 wl->hw->extra_tx_headroom = WL1271_TKIP_IV_SPACE +
2368 sizeof(struct wl1271_tx_hw_descr);
2371 /* FIXME: find a proper value */
2372 wl->hw->channel_change_time = 10000;
2373 wl->hw->max_listen_interval = wl->conf.conn.max_listen_interval;
2375 wl->hw->flags = IEEE80211_HW_SIGNAL_DBM |
2376 IEEE80211_HW_BEACON_FILTER |
2377 IEEE80211_HW_SUPPORTS_PS |
2378 IEEE80211_HW_SUPPORTS_UAPSD |
2379 IEEE80211_HW_HAS_RATE_CONTROL |
2380 IEEE80211_HW_CONNECTION_MONITOR |
2381 IEEE80211_HW_SUPPORTS_CQM_RSSI;
2383 wl->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
2384 BIT(NL80211_IFTYPE_ADHOC);
2385 wl->hw->wiphy->max_scan_ssids = 1;
2386 wl->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = &wl1271_band_2ghz;
2387 wl->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = &wl1271_band_5ghz;
2390 wl->hw->max_rates = 1;
2392 SET_IEEE80211_DEV(wl->hw, wl1271_wl_to_dev(wl));
2396 EXPORT_SYMBOL_GPL(wl1271_init_ieee80211);
2398 #define WL1271_DEFAULT_CHANNEL 0
2400 struct ieee80211_hw *wl1271_alloc_hw(void)
2402 struct ieee80211_hw *hw;
2403 struct platform_device *plat_dev = NULL;
2407 hw = ieee80211_alloc_hw(sizeof(*wl), &wl1271_ops);
2409 wl1271_error("could not alloc ieee80211_hw");
2414 plat_dev = kmemdup(&wl1271_device, sizeof(wl1271_device), GFP_KERNEL);
2416 wl1271_error("could not allocate platform_device");
2418 goto err_plat_alloc;
2422 memset(wl, 0, sizeof(*wl));
2424 INIT_LIST_HEAD(&wl->list);
2427 wl->plat_dev = plat_dev;
2429 skb_queue_head_init(&wl->tx_queue);
2431 INIT_DELAYED_WORK(&wl->elp_work, wl1271_elp_work);
2432 INIT_DELAYED_WORK(&wl->pspoll_work, wl1271_pspoll_work);
2433 wl->channel = WL1271_DEFAULT_CHANNEL;
2434 wl->beacon_int = WL1271_DEFAULT_BEACON_INT;
2435 wl->default_key = 0;
2437 wl->rx_config = WL1271_DEFAULT_RX_CONFIG;
2438 wl->rx_filter = WL1271_DEFAULT_RX_FILTER;
2439 wl->psm_entry_retry = 0;
2440 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
2441 wl->basic_rate_set = CONF_TX_RATE_MASK_BASIC;
2442 wl->basic_rate = CONF_TX_RATE_MASK_BASIC;
2443 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
2444 wl->sta_rate_set = 0;
2445 wl->band = IEEE80211_BAND_2GHZ;
2448 wl->sg_enabled = true;
2451 for (i = 0; i < ACX_TX_DESCRIPTORS; i++)
2452 wl->tx_frames[i] = NULL;
2454 spin_lock_init(&wl->wl_lock);
2456 wl->state = WL1271_STATE_OFF;
2457 mutex_init(&wl->mutex);
2459 /* Apply default driver configuration. */
2460 wl1271_conf_init(wl);
2462 wl1271_debugfs_init(wl);
2464 /* Register platform device */
2465 ret = platform_device_register(wl->plat_dev);
2467 wl1271_error("couldn't register platform device");
2470 dev_set_drvdata(&wl->plat_dev->dev, wl);
2472 /* Create sysfs file to control bt coex state */
2473 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
2475 wl1271_error("failed to create sysfs file bt_coex_state");
2479 /* Create sysfs file to get HW PG version */
2480 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_hw_pg_ver);
2482 wl1271_error("failed to create sysfs file hw_pg_ver");
2483 goto err_bt_coex_state;
2489 device_remove_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
2492 platform_device_unregister(wl->plat_dev);
2495 wl1271_debugfs_exit(wl);
2499 ieee80211_free_hw(hw);
2503 return ERR_PTR(ret);
2505 EXPORT_SYMBOL_GPL(wl1271_alloc_hw);
2507 int wl1271_free_hw(struct wl1271 *wl)
2509 platform_device_unregister(wl->plat_dev);
2510 kfree(wl->plat_dev);
2512 wl1271_debugfs_exit(wl);
2519 kfree(wl->fw_status);
2520 kfree(wl->tx_res_if);
2522 ieee80211_free_hw(wl->hw);
2526 EXPORT_SYMBOL_GPL(wl1271_free_hw);
2528 MODULE_LICENSE("GPL");
2529 MODULE_AUTHOR("Luciano Coelho <luciano.coelho@nokia.com>");
2530 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");