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 wl1271 *wl)
967 wl1271_debug(DEBUG_MAC80211, "mac80211 remove interface");
973 WARN_ON(wl->state != WL1271_STATE_ON);
975 /* enable dyn ps just in case (if left on due to fw crash etc) */
976 if (wl->bss_type == BSS_TYPE_STA_BSS)
977 ieee80211_enable_dyn_ps(wl->vif);
979 if (wl->scan.state != WL1271_SCAN_STATE_IDLE) {
980 wl->scan.state = WL1271_SCAN_STATE_IDLE;
981 kfree(wl->scan.scanned_ch);
982 wl->scan.scanned_ch = NULL;
983 ieee80211_scan_completed(wl->hw, true);
986 wl->state = WL1271_STATE_OFF;
988 wl1271_disable_interrupts(wl);
990 mutex_unlock(&wl->mutex);
992 cancel_work_sync(&wl->scan_complete_work);
993 cancel_work_sync(&wl->irq_work);
994 cancel_work_sync(&wl->tx_work);
995 cancel_delayed_work_sync(&wl->pspoll_work);
996 cancel_delayed_work_sync(&wl->elp_work);
998 mutex_lock(&wl->mutex);
1000 /* let's notify MAC80211 about the remaining pending TX frames */
1001 wl1271_tx_reset(wl);
1002 wl1271_power_off(wl);
1004 memset(wl->bssid, 0, ETH_ALEN);
1005 memset(wl->ssid, 0, IW_ESSID_MAX_SIZE + 1);
1007 wl->bss_type = MAX_BSS_TYPE;
1008 wl->set_bss_type = MAX_BSS_TYPE;
1009 wl->band = IEEE80211_BAND_2GHZ;
1012 wl->psm_entry_retry = 0;
1013 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
1014 wl->tx_blocks_available = 0;
1015 wl->tx_results_count = 0;
1016 wl->tx_packets_count = 0;
1017 wl->tx_security_last_seq = 0;
1018 wl->tx_security_seq = 0;
1019 wl->time_offset = 0;
1020 wl->session_counter = 0;
1021 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
1022 wl->sta_rate_set = 0;
1027 for (i = 0; i < NUM_TX_QUEUES; i++)
1028 wl->tx_blocks_freed[i] = 0;
1030 wl1271_debugfs_reset(wl);
1032 kfree(wl->fw_status);
1033 wl->fw_status = NULL;
1034 kfree(wl->tx_res_if);
1035 wl->tx_res_if = NULL;
1036 kfree(wl->target_mem_map);
1037 wl->target_mem_map = NULL;
1040 static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
1041 struct ieee80211_vif *vif)
1043 struct wl1271 *wl = hw->priv;
1045 mutex_lock(&wl->mutex);
1046 WARN_ON(wl->vif != vif);
1047 __wl1271_op_remove_interface(wl);
1048 mutex_unlock(&wl->mutex);
1051 static void wl1271_configure_filters(struct wl1271 *wl, unsigned int filters)
1053 wl->rx_config = WL1271_DEFAULT_RX_CONFIG;
1054 wl->rx_filter = WL1271_DEFAULT_RX_FILTER;
1056 /* combine requested filters with current filter config */
1057 filters = wl->filters | filters;
1059 wl1271_debug(DEBUG_FILTERS, "RX filters set: ");
1061 if (filters & FIF_PROMISC_IN_BSS) {
1062 wl1271_debug(DEBUG_FILTERS, " - FIF_PROMISC_IN_BSS");
1063 wl->rx_config &= ~CFG_UNI_FILTER_EN;
1064 wl->rx_config |= CFG_BSSID_FILTER_EN;
1066 if (filters & FIF_BCN_PRBRESP_PROMISC) {
1067 wl1271_debug(DEBUG_FILTERS, " - FIF_BCN_PRBRESP_PROMISC");
1068 wl->rx_config &= ~CFG_BSSID_FILTER_EN;
1069 wl->rx_config &= ~CFG_SSID_FILTER_EN;
1071 if (filters & FIF_OTHER_BSS) {
1072 wl1271_debug(DEBUG_FILTERS, " - FIF_OTHER_BSS");
1073 wl->rx_config &= ~CFG_BSSID_FILTER_EN;
1075 if (filters & FIF_CONTROL) {
1076 wl1271_debug(DEBUG_FILTERS, " - FIF_CONTROL");
1077 wl->rx_filter |= CFG_RX_CTL_EN;
1079 if (filters & FIF_FCSFAIL) {
1080 wl1271_debug(DEBUG_FILTERS, " - FIF_FCSFAIL");
1081 wl->rx_filter |= CFG_RX_FCS_ERROR;
1085 static int wl1271_dummy_join(struct wl1271 *wl)
1088 /* we need to use a dummy BSSID for now */
1089 static const u8 dummy_bssid[ETH_ALEN] = { 0x0b, 0xad, 0xde,
1092 memcpy(wl->bssid, dummy_bssid, ETH_ALEN);
1094 /* pass through frames from all BSS */
1095 wl1271_configure_filters(wl, FIF_OTHER_BSS);
1097 ret = wl1271_cmd_join(wl, wl->set_bss_type);
1101 set_bit(WL1271_FLAG_JOINED, &wl->flags);
1107 static int wl1271_join(struct wl1271 *wl, bool set_assoc)
1112 * One of the side effects of the JOIN command is that is clears
1113 * WPA/WPA2 keys from the chipset. Performing a JOIN while associated
1114 * to a WPA/WPA2 access point will therefore kill the data-path.
1115 * Currently there is no supported scenario for JOIN during
1116 * association - if it becomes a supported scenario, the WPA/WPA2 keys
1117 * must be handled somehow.
1120 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1121 wl1271_info("JOIN while associated.");
1124 set_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
1126 ret = wl1271_cmd_join(wl, wl->set_bss_type);
1130 set_bit(WL1271_FLAG_JOINED, &wl->flags);
1132 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1136 * The join command disable the keep-alive mode, shut down its process,
1137 * and also clear the template config, so we need to reset it all after
1138 * the join. The acx_aid starts the keep-alive process, and the order
1139 * of the commands below is relevant.
1141 ret = wl1271_acx_keep_alive_mode(wl, true);
1145 ret = wl1271_acx_aid(wl, wl->aid);
1149 ret = wl1271_cmd_build_klv_null_data(wl);
1153 ret = wl1271_acx_keep_alive_config(wl, CMD_TEMPL_KLV_IDX_NULL_DATA,
1154 ACX_KEEP_ALIVE_TPL_VALID);
1162 static int wl1271_unjoin(struct wl1271 *wl)
1166 /* to stop listening to a channel, we disconnect */
1167 ret = wl1271_cmd_disconnect(wl);
1171 clear_bit(WL1271_FLAG_JOINED, &wl->flags);
1172 memset(wl->bssid, 0, ETH_ALEN);
1174 /* stop filterting packets based on bssid */
1175 wl1271_configure_filters(wl, FIF_OTHER_BSS);
1181 static void wl1271_set_band_rate(struct wl1271 *wl)
1183 if (wl->band == IEEE80211_BAND_2GHZ)
1184 wl->basic_rate_set = wl->conf.tx.basic_rate;
1186 wl->basic_rate_set = wl->conf.tx.basic_rate_5;
1189 static u32 wl1271_min_rate_get(struct wl1271 *wl)
1194 if (!wl->basic_rate_set) {
1196 wl->basic_rate_set = wl->conf.tx.basic_rate;
1199 for (i = 0; !rate; i++) {
1200 if ((wl->basic_rate_set >> i) & 0x1)
1207 static int wl1271_handle_idle(struct wl1271 *wl, bool idle)
1212 if (test_bit(WL1271_FLAG_JOINED, &wl->flags)) {
1213 ret = wl1271_unjoin(wl);
1217 wl->rate_set = wl1271_min_rate_get(wl);
1218 wl->sta_rate_set = 0;
1219 ret = wl1271_acx_rate_policies(wl);
1222 ret = wl1271_acx_keep_alive_config(
1223 wl, CMD_TEMPL_KLV_IDX_NULL_DATA,
1224 ACX_KEEP_ALIVE_TPL_INVALID);
1227 set_bit(WL1271_FLAG_IDLE, &wl->flags);
1229 /* increment the session counter */
1230 wl->session_counter++;
1231 if (wl->session_counter >= SESSION_COUNTER_MAX)
1232 wl->session_counter = 0;
1233 ret = wl1271_dummy_join(wl);
1236 clear_bit(WL1271_FLAG_IDLE, &wl->flags);
1243 static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed)
1245 struct wl1271 *wl = hw->priv;
1246 struct ieee80211_conf *conf = &hw->conf;
1247 int channel, ret = 0;
1249 channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
1251 wl1271_debug(DEBUG_MAC80211, "mac80211 config ch %d psm %s power %d %s",
1253 conf->flags & IEEE80211_CONF_PS ? "on" : "off",
1255 conf->flags & IEEE80211_CONF_IDLE ? "idle" : "in use");
1258 * mac80211 will go to idle nearly immediately after transmitting some
1259 * frames, such as the deauth. To make sure those frames reach the air,
1260 * wait here until the TX queue is fully flushed.
1262 if ((changed & IEEE80211_CONF_CHANGE_IDLE) &&
1263 (conf->flags & IEEE80211_CONF_IDLE))
1264 wl1271_tx_flush(wl);
1266 mutex_lock(&wl->mutex);
1268 if (unlikely(wl->state == WL1271_STATE_OFF))
1271 ret = wl1271_ps_elp_wakeup(wl, false);
1275 /* if the channel changes while joined, join again */
1276 if (changed & IEEE80211_CONF_CHANGE_CHANNEL &&
1277 ((wl->band != conf->channel->band) ||
1278 (wl->channel != channel))) {
1279 wl->band = conf->channel->band;
1280 wl->channel = channel;
1283 * FIXME: the mac80211 should really provide a fixed rate
1284 * to use here. for now, just use the smallest possible rate
1285 * for the band as a fixed rate for association frames and
1286 * other control messages.
1288 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1289 wl1271_set_band_rate(wl);
1291 wl->basic_rate = wl1271_min_rate_get(wl);
1292 ret = wl1271_acx_rate_policies(wl);
1294 wl1271_warning("rate policy for update channel "
1297 if (test_bit(WL1271_FLAG_JOINED, &wl->flags)) {
1298 ret = wl1271_join(wl, false);
1300 wl1271_warning("cmd join to update channel "
1305 if (changed & IEEE80211_CONF_CHANGE_IDLE) {
1306 ret = wl1271_handle_idle(wl, conf->flags & IEEE80211_CONF_IDLE);
1308 wl1271_warning("idle mode change failed %d", ret);
1312 * if mac80211 changes the PSM mode, make sure the mode is not
1313 * incorrectly changed after the pspoll failure active window.
1315 if (changed & IEEE80211_CONF_CHANGE_PS)
1316 clear_bit(WL1271_FLAG_PSPOLL_FAILURE, &wl->flags);
1318 if (conf->flags & IEEE80211_CONF_PS &&
1319 !test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
1320 set_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
1323 * We enter PSM only if we're already associated.
1324 * If we're not, we'll enter it when joining an SSID,
1325 * through the bss_info_changed() hook.
1327 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags)) {
1328 wl1271_debug(DEBUG_PSM, "psm enabled");
1329 ret = wl1271_ps_set_mode(wl, STATION_POWER_SAVE_MODE,
1330 wl->basic_rate_set, true);
1332 } else if (!(conf->flags & IEEE80211_CONF_PS) &&
1333 test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
1334 wl1271_debug(DEBUG_PSM, "psm disabled");
1336 clear_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
1338 if (test_bit(WL1271_FLAG_PSM, &wl->flags))
1339 ret = wl1271_ps_set_mode(wl, STATION_ACTIVE_MODE,
1340 wl->basic_rate_set, true);
1343 if (conf->power_level != wl->power_level) {
1344 ret = wl1271_acx_tx_power(wl, conf->power_level);
1348 wl->power_level = conf->power_level;
1352 wl1271_ps_elp_sleep(wl);
1355 mutex_unlock(&wl->mutex);
1360 struct wl1271_filter_params {
1363 u8 mc_list[ACX_MC_ADDRESS_GROUP_MAX][ETH_ALEN];
1366 static u64 wl1271_op_prepare_multicast(struct ieee80211_hw *hw,
1367 struct netdev_hw_addr_list *mc_list)
1369 struct wl1271_filter_params *fp;
1370 struct netdev_hw_addr *ha;
1371 struct wl1271 *wl = hw->priv;
1373 if (unlikely(wl->state == WL1271_STATE_OFF))
1376 fp = kzalloc(sizeof(*fp), GFP_ATOMIC);
1378 wl1271_error("Out of memory setting filters.");
1382 /* update multicast filtering parameters */
1383 fp->mc_list_length = 0;
1384 if (netdev_hw_addr_list_count(mc_list) > ACX_MC_ADDRESS_GROUP_MAX) {
1385 fp->enabled = false;
1388 netdev_hw_addr_list_for_each(ha, mc_list) {
1389 memcpy(fp->mc_list[fp->mc_list_length],
1390 ha->addr, ETH_ALEN);
1391 fp->mc_list_length++;
1395 return (u64)(unsigned long)fp;
1398 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
1401 FIF_BCN_PRBRESP_PROMISC | \
1405 static void wl1271_op_configure_filter(struct ieee80211_hw *hw,
1406 unsigned int changed,
1407 unsigned int *total, u64 multicast)
1409 struct wl1271_filter_params *fp = (void *)(unsigned long)multicast;
1410 struct wl1271 *wl = hw->priv;
1413 wl1271_debug(DEBUG_MAC80211, "mac80211 configure filter");
1415 mutex_lock(&wl->mutex);
1417 *total &= WL1271_SUPPORTED_FILTERS;
1418 changed &= WL1271_SUPPORTED_FILTERS;
1420 if (unlikely(wl->state == WL1271_STATE_OFF))
1423 ret = wl1271_ps_elp_wakeup(wl, false);
1428 if (*total & FIF_ALLMULTI)
1429 ret = wl1271_acx_group_address_tbl(wl, false, NULL, 0);
1431 ret = wl1271_acx_group_address_tbl(wl, fp->enabled,
1433 fp->mc_list_length);
1437 /* determine, whether supported filter values have changed */
1441 /* configure filters */
1442 wl->filters = *total;
1443 wl1271_configure_filters(wl, 0);
1445 /* apply configured filters */
1446 ret = wl1271_acx_rx_config(wl, wl->rx_config, wl->rx_filter);
1451 wl1271_ps_elp_sleep(wl);
1454 mutex_unlock(&wl->mutex);
1458 static int wl1271_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
1459 struct ieee80211_vif *vif,
1460 struct ieee80211_sta *sta,
1461 struct ieee80211_key_conf *key_conf)
1463 struct wl1271 *wl = hw->priv;
1470 static const u8 bcast_addr[ETH_ALEN] =
1471 { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
1473 wl1271_debug(DEBUG_MAC80211, "mac80211 set key");
1475 addr = sta ? sta->addr : bcast_addr;
1477 wl1271_debug(DEBUG_CRYPT, "CMD: 0x%x", cmd);
1478 wl1271_dump(DEBUG_CRYPT, "ADDR: ", addr, ETH_ALEN);
1479 wl1271_debug(DEBUG_CRYPT, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
1480 key_conf->cipher, key_conf->keyidx,
1481 key_conf->keylen, key_conf->flags);
1482 wl1271_dump(DEBUG_CRYPT, "KEY: ", key_conf->key, key_conf->keylen);
1484 if (is_zero_ether_addr(addr)) {
1485 /* We dont support TX only encryption */
1490 mutex_lock(&wl->mutex);
1492 ret = wl1271_ps_elp_wakeup(wl, false);
1496 switch (key_conf->cipher) {
1497 case WLAN_CIPHER_SUITE_WEP40:
1498 case WLAN_CIPHER_SUITE_WEP104:
1501 key_conf->hw_key_idx = key_conf->keyidx;
1503 case WLAN_CIPHER_SUITE_TKIP:
1504 key_type = KEY_TKIP;
1506 key_conf->hw_key_idx = key_conf->keyidx;
1507 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
1508 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
1510 case WLAN_CIPHER_SUITE_CCMP:
1513 key_conf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
1514 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
1515 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
1518 wl1271_error("Unknown key algo 0x%x", key_conf->cipher);
1526 ret = wl1271_cmd_set_key(wl, KEY_ADD_OR_REPLACE,
1527 key_conf->keyidx, key_type,
1528 key_conf->keylen, key_conf->key,
1529 addr, tx_seq_32, tx_seq_16);
1531 wl1271_error("Could not add or replace key");
1535 /* the default WEP key needs to be configured at least once */
1536 if (key_type == KEY_WEP) {
1537 ret = wl1271_cmd_set_default_wep_key(wl,
1545 /* The wl1271 does not allow to remove unicast keys - they
1546 will be cleared automatically on next CMD_JOIN. Ignore the
1547 request silently, as we dont want the mac80211 to emit
1548 an error message. */
1549 if (!is_broadcast_ether_addr(addr))
1552 ret = wl1271_cmd_set_key(wl, KEY_REMOVE,
1553 key_conf->keyidx, key_type,
1554 key_conf->keylen, key_conf->key,
1557 wl1271_error("Could not remove key");
1563 wl1271_error("Unsupported key cmd 0x%x", cmd);
1569 wl1271_ps_elp_sleep(wl);
1572 mutex_unlock(&wl->mutex);
1578 static int wl1271_op_hw_scan(struct ieee80211_hw *hw,
1579 struct ieee80211_vif *vif,
1580 struct cfg80211_scan_request *req)
1582 struct wl1271 *wl = hw->priv;
1587 wl1271_debug(DEBUG_MAC80211, "mac80211 hw scan");
1590 ssid = req->ssids[0].ssid;
1591 len = req->ssids[0].ssid_len;
1594 mutex_lock(&wl->mutex);
1596 ret = wl1271_ps_elp_wakeup(wl, false);
1600 ret = wl1271_scan(hw->priv, ssid, len, req);
1602 wl1271_ps_elp_sleep(wl);
1605 mutex_unlock(&wl->mutex);
1610 static int wl1271_op_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
1612 struct wl1271 *wl = hw->priv;
1615 mutex_lock(&wl->mutex);
1617 if (unlikely(wl->state == WL1271_STATE_OFF))
1620 ret = wl1271_ps_elp_wakeup(wl, false);
1624 ret = wl1271_acx_rts_threshold(wl, (u16) value);
1626 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret);
1628 wl1271_ps_elp_sleep(wl);
1631 mutex_unlock(&wl->mutex);
1636 static void wl1271_ssid_set(struct wl1271 *wl, struct sk_buff *beacon)
1638 u8 *ptr = beacon->data +
1639 offsetof(struct ieee80211_mgmt, u.beacon.variable);
1641 /* find the location of the ssid in the beacon */
1642 while (ptr < beacon->data + beacon->len) {
1643 if (ptr[0] == WLAN_EID_SSID) {
1644 wl->ssid_len = ptr[1];
1645 memcpy(wl->ssid, ptr+2, wl->ssid_len);
1650 wl1271_error("ad-hoc beacon template has no SSID!\n");
1653 static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
1654 struct ieee80211_vif *vif,
1655 struct ieee80211_bss_conf *bss_conf,
1658 enum wl1271_cmd_ps_mode mode;
1659 struct wl1271 *wl = hw->priv;
1660 bool do_join = false;
1661 bool set_assoc = false;
1664 wl1271_debug(DEBUG_MAC80211, "mac80211 bss info changed");
1666 mutex_lock(&wl->mutex);
1668 ret = wl1271_ps_elp_wakeup(wl, false);
1672 if ((changed & BSS_CHANGED_BEACON_INT) &&
1673 (wl->bss_type == BSS_TYPE_IBSS)) {
1674 wl1271_debug(DEBUG_ADHOC, "ad-hoc beacon interval updated: %d",
1675 bss_conf->beacon_int);
1677 wl->beacon_int = bss_conf->beacon_int;
1681 if ((changed & BSS_CHANGED_BEACON) &&
1682 (wl->bss_type == BSS_TYPE_IBSS)) {
1683 struct sk_buff *beacon = ieee80211_beacon_get(hw, vif);
1685 wl1271_debug(DEBUG_ADHOC, "ad-hoc beacon updated");
1688 struct ieee80211_hdr *hdr;
1690 wl1271_ssid_set(wl, beacon);
1691 ret = wl1271_cmd_template_set(wl, CMD_TEMPL_BEACON,
1694 wl1271_min_rate_get(wl));
1697 dev_kfree_skb(beacon);
1701 hdr = (struct ieee80211_hdr *) beacon->data;
1702 hdr->frame_control = cpu_to_le16(
1703 IEEE80211_FTYPE_MGMT |
1704 IEEE80211_STYPE_PROBE_RESP);
1706 ret = wl1271_cmd_template_set(wl,
1707 CMD_TEMPL_PROBE_RESPONSE,
1710 wl1271_min_rate_get(wl));
1711 dev_kfree_skb(beacon);
1715 /* Need to update the SSID (for filtering etc) */
1720 if ((changed & BSS_CHANGED_BEACON_ENABLED) &&
1721 (wl->bss_type == BSS_TYPE_IBSS)) {
1722 wl1271_debug(DEBUG_ADHOC, "ad-hoc beaconing: %s",
1723 bss_conf->enable_beacon ? "enabled" : "disabled");
1725 if (bss_conf->enable_beacon)
1726 wl->set_bss_type = BSS_TYPE_IBSS;
1728 wl->set_bss_type = BSS_TYPE_STA_BSS;
1732 if (changed & BSS_CHANGED_CQM) {
1733 bool enable = false;
1734 if (bss_conf->cqm_rssi_thold)
1736 ret = wl1271_acx_rssi_snr_trigger(wl, enable,
1737 bss_conf->cqm_rssi_thold,
1738 bss_conf->cqm_rssi_hyst);
1741 wl->rssi_thold = bss_conf->cqm_rssi_thold;
1744 if ((changed & BSS_CHANGED_BSSID) &&
1746 * Now we know the correct bssid, so we send a new join command
1747 * and enable the BSSID filter
1749 memcmp(wl->bssid, bss_conf->bssid, ETH_ALEN)) {
1750 memcpy(wl->bssid, bss_conf->bssid, ETH_ALEN);
1752 ret = wl1271_cmd_build_null_data(wl);
1756 ret = wl1271_build_qos_null_data(wl);
1760 /* filter out all packets not from this BSSID */
1761 wl1271_configure_filters(wl, 0);
1763 /* Need to update the BSSID (for filtering etc) */
1767 if (changed & BSS_CHANGED_ASSOC) {
1768 if (bss_conf->assoc) {
1770 wl->aid = bss_conf->aid;
1773 wl->ps_poll_failures = 0;
1776 * use basic rates from AP, and determine lowest rate
1777 * to use with control frames.
1779 rates = bss_conf->basic_rates;
1780 wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl,
1782 wl->basic_rate = wl1271_min_rate_get(wl);
1783 ret = wl1271_acx_rate_policies(wl);
1788 * with wl1271, we don't need to update the
1789 * beacon_int and dtim_period, because the firmware
1790 * updates it by itself when the first beacon is
1791 * received after a join.
1793 ret = wl1271_cmd_build_ps_poll(wl, wl->aid);
1798 * The SSID is intentionally set to NULL here - the
1799 * firmware will set the probe request with a
1800 * broadcast SSID regardless of what we set in the
1803 ret = wl1271_cmd_build_probe_req(wl, NULL, 0,
1806 /* enable the connection monitoring feature */
1807 ret = wl1271_acx_conn_monit_params(wl, true);
1811 /* If we want to go in PSM but we're not there yet */
1812 if (test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags) &&
1813 !test_bit(WL1271_FLAG_PSM, &wl->flags)) {
1814 mode = STATION_POWER_SAVE_MODE;
1815 ret = wl1271_ps_set_mode(wl, mode,
1822 /* use defaults when not associated */
1823 clear_bit(WL1271_FLAG_STA_STATE_SENT, &wl->flags);
1824 clear_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
1827 /* re-enable dynamic ps - just in case */
1828 ieee80211_enable_dyn_ps(wl->vif);
1830 /* revert back to minimum rates for the current band */
1831 wl1271_set_band_rate(wl);
1832 wl->basic_rate = wl1271_min_rate_get(wl);
1833 ret = wl1271_acx_rate_policies(wl);
1837 /* disable connection monitor features */
1838 ret = wl1271_acx_conn_monit_params(wl, false);
1840 /* Disable the keep-alive feature */
1841 ret = wl1271_acx_keep_alive_mode(wl, false);
1849 if (changed & BSS_CHANGED_ERP_SLOT) {
1850 if (bss_conf->use_short_slot)
1851 ret = wl1271_acx_slot(wl, SLOT_TIME_SHORT);
1853 ret = wl1271_acx_slot(wl, SLOT_TIME_LONG);
1855 wl1271_warning("Set slot time failed %d", ret);
1860 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
1861 if (bss_conf->use_short_preamble)
1862 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_SHORT);
1864 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_LONG);
1867 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
1868 if (bss_conf->use_cts_prot)
1869 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_ENABLE);
1871 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_DISABLE);
1873 wl1271_warning("Set ctsprotect failed %d", ret);
1878 if (changed & BSS_CHANGED_ARP_FILTER) {
1879 __be32 addr = bss_conf->arp_addr_list[0];
1880 WARN_ON(wl->bss_type != BSS_TYPE_STA_BSS);
1882 if (bss_conf->arp_addr_cnt == 1 && bss_conf->arp_filter_enabled)
1883 ret = wl1271_acx_arp_ip_filter(wl, true, addr);
1885 ret = wl1271_acx_arp_ip_filter(wl, false, addr);
1892 ret = wl1271_join(wl, set_assoc);
1894 wl1271_warning("cmd join failed %d", ret);
1900 wl1271_ps_elp_sleep(wl);
1903 mutex_unlock(&wl->mutex);
1906 static int wl1271_op_conf_tx(struct ieee80211_hw *hw, u16 queue,
1907 const struct ieee80211_tx_queue_params *params)
1909 struct wl1271 *wl = hw->priv;
1913 mutex_lock(&wl->mutex);
1915 wl1271_debug(DEBUG_MAC80211, "mac80211 conf tx %d", queue);
1917 ret = wl1271_ps_elp_wakeup(wl, false);
1921 /* the txop is confed in units of 32us by the mac80211, we need us */
1922 ret = wl1271_acx_ac_cfg(wl, wl1271_tx_get_queue(queue),
1923 params->cw_min, params->cw_max,
1924 params->aifs, params->txop << 5);
1929 ps_scheme = CONF_PS_SCHEME_UPSD_TRIGGER;
1931 ps_scheme = CONF_PS_SCHEME_LEGACY;
1933 ret = wl1271_acx_tid_cfg(wl, wl1271_tx_get_queue(queue),
1934 CONF_CHANNEL_TYPE_EDCF,
1935 wl1271_tx_get_queue(queue),
1936 ps_scheme, CONF_ACK_POLICY_LEGACY, 0, 0);
1941 wl1271_ps_elp_sleep(wl);
1944 mutex_unlock(&wl->mutex);
1949 static u64 wl1271_op_get_tsf(struct ieee80211_hw *hw)
1952 struct wl1271 *wl = hw->priv;
1953 u64 mactime = ULLONG_MAX;
1956 wl1271_debug(DEBUG_MAC80211, "mac80211 get tsf");
1958 mutex_lock(&wl->mutex);
1960 ret = wl1271_ps_elp_wakeup(wl, false);
1964 ret = wl1271_acx_tsf_info(wl, &mactime);
1969 wl1271_ps_elp_sleep(wl);
1972 mutex_unlock(&wl->mutex);
1976 static int wl1271_op_get_survey(struct ieee80211_hw *hw, int idx,
1977 struct survey_info *survey)
1979 struct wl1271 *wl = hw->priv;
1980 struct ieee80211_conf *conf = &hw->conf;
1985 survey->channel = conf->channel;
1986 survey->filled = SURVEY_INFO_NOISE_DBM;
1987 survey->noise = wl->noise;
1992 /* can't be const, mac80211 writes to this */
1993 static struct ieee80211_rate wl1271_rates[] = {
1995 .hw_value = CONF_HW_BIT_RATE_1MBPS,
1996 .hw_value_short = CONF_HW_BIT_RATE_1MBPS, },
1998 .hw_value = CONF_HW_BIT_RATE_2MBPS,
1999 .hw_value_short = CONF_HW_BIT_RATE_2MBPS,
2000 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
2002 .hw_value = CONF_HW_BIT_RATE_5_5MBPS,
2003 .hw_value_short = CONF_HW_BIT_RATE_5_5MBPS,
2004 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
2006 .hw_value = CONF_HW_BIT_RATE_11MBPS,
2007 .hw_value_short = CONF_HW_BIT_RATE_11MBPS,
2008 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
2010 .hw_value = CONF_HW_BIT_RATE_6MBPS,
2011 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
2013 .hw_value = CONF_HW_BIT_RATE_9MBPS,
2014 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
2016 .hw_value = CONF_HW_BIT_RATE_12MBPS,
2017 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
2019 .hw_value = CONF_HW_BIT_RATE_18MBPS,
2020 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
2022 .hw_value = CONF_HW_BIT_RATE_24MBPS,
2023 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
2025 .hw_value = CONF_HW_BIT_RATE_36MBPS,
2026 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
2028 .hw_value = CONF_HW_BIT_RATE_48MBPS,
2029 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
2031 .hw_value = CONF_HW_BIT_RATE_54MBPS,
2032 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
2036 * Can't be const, mac80211 writes to this. The order of the channels here
2037 * is designed to improve scanning.
2039 static struct ieee80211_channel wl1271_channels[] = {
2040 { .hw_value = 1, .center_freq = 2412, .max_power = 25 },
2041 { .hw_value = 5, .center_freq = 2432, .max_power = 25 },
2042 { .hw_value = 9, .center_freq = 2452, .max_power = 25 },
2043 { .hw_value = 13, .center_freq = 2472, .max_power = 25 },
2044 { .hw_value = 4, .center_freq = 2427, .max_power = 25 },
2045 { .hw_value = 8, .center_freq = 2447, .max_power = 25 },
2046 { .hw_value = 12, .center_freq = 2467, .max_power = 25 },
2047 { .hw_value = 3, .center_freq = 2422, .max_power = 25 },
2048 { .hw_value = 7, .center_freq = 2442, .max_power = 25 },
2049 { .hw_value = 11, .center_freq = 2462, .max_power = 25 },
2050 { .hw_value = 2, .center_freq = 2417, .max_power = 25 },
2051 { .hw_value = 6, .center_freq = 2437, .max_power = 25 },
2052 { .hw_value = 10, .center_freq = 2457, .max_power = 25 },
2055 /* mapping to indexes for wl1271_rates */
2056 static const u8 wl1271_rate_to_idx_2ghz[] = {
2057 /* MCS rates are used only with 11n */
2058 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS7 */
2059 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS6 */
2060 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS5 */
2061 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS4 */
2062 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS3 */
2063 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS2 */
2064 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS1 */
2065 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS0 */
2067 11, /* CONF_HW_RXTX_RATE_54 */
2068 10, /* CONF_HW_RXTX_RATE_48 */
2069 9, /* CONF_HW_RXTX_RATE_36 */
2070 8, /* CONF_HW_RXTX_RATE_24 */
2072 /* TI-specific rate */
2073 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
2075 7, /* CONF_HW_RXTX_RATE_18 */
2076 6, /* CONF_HW_RXTX_RATE_12 */
2077 3, /* CONF_HW_RXTX_RATE_11 */
2078 5, /* CONF_HW_RXTX_RATE_9 */
2079 4, /* CONF_HW_RXTX_RATE_6 */
2080 2, /* CONF_HW_RXTX_RATE_5_5 */
2081 1, /* CONF_HW_RXTX_RATE_2 */
2082 0 /* CONF_HW_RXTX_RATE_1 */
2085 /* can't be const, mac80211 writes to this */
2086 static struct ieee80211_supported_band wl1271_band_2ghz = {
2087 .channels = wl1271_channels,
2088 .n_channels = ARRAY_SIZE(wl1271_channels),
2089 .bitrates = wl1271_rates,
2090 .n_bitrates = ARRAY_SIZE(wl1271_rates),
2093 /* 5 GHz data rates for WL1273 */
2094 static struct ieee80211_rate wl1271_rates_5ghz[] = {
2096 .hw_value = CONF_HW_BIT_RATE_6MBPS,
2097 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
2099 .hw_value = CONF_HW_BIT_RATE_9MBPS,
2100 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
2102 .hw_value = CONF_HW_BIT_RATE_12MBPS,
2103 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
2105 .hw_value = CONF_HW_BIT_RATE_18MBPS,
2106 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
2108 .hw_value = CONF_HW_BIT_RATE_24MBPS,
2109 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
2111 .hw_value = CONF_HW_BIT_RATE_36MBPS,
2112 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
2114 .hw_value = CONF_HW_BIT_RATE_48MBPS,
2115 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
2117 .hw_value = CONF_HW_BIT_RATE_54MBPS,
2118 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
2122 * 5 GHz band channels for WL1273 - can't be const, mac80211 writes to this.
2123 * The order of the channels here is designed to improve scanning.
2125 static struct ieee80211_channel wl1271_channels_5ghz[] = {
2126 { .hw_value = 183, .center_freq = 4915},
2127 { .hw_value = 188, .center_freq = 4940},
2128 { .hw_value = 8, .center_freq = 5040},
2129 { .hw_value = 34, .center_freq = 5170},
2130 { .hw_value = 44, .center_freq = 5220},
2131 { .hw_value = 60, .center_freq = 5300},
2132 { .hw_value = 112, .center_freq = 5560},
2133 { .hw_value = 132, .center_freq = 5660},
2134 { .hw_value = 157, .center_freq = 5785},
2135 { .hw_value = 184, .center_freq = 4920},
2136 { .hw_value = 189, .center_freq = 4945},
2137 { .hw_value = 9, .center_freq = 5045},
2138 { .hw_value = 36, .center_freq = 5180},
2139 { .hw_value = 46, .center_freq = 5230},
2140 { .hw_value = 64, .center_freq = 5320},
2141 { .hw_value = 116, .center_freq = 5580},
2142 { .hw_value = 136, .center_freq = 5680},
2143 { .hw_value = 192, .center_freq = 4960},
2144 { .hw_value = 11, .center_freq = 5055},
2145 { .hw_value = 38, .center_freq = 5190},
2146 { .hw_value = 48, .center_freq = 5240},
2147 { .hw_value = 100, .center_freq = 5500},
2148 { .hw_value = 120, .center_freq = 5600},
2149 { .hw_value = 140, .center_freq = 5700},
2150 { .hw_value = 185, .center_freq = 4925},
2151 { .hw_value = 196, .center_freq = 4980},
2152 { .hw_value = 12, .center_freq = 5060},
2153 { .hw_value = 40, .center_freq = 5200},
2154 { .hw_value = 52, .center_freq = 5260},
2155 { .hw_value = 104, .center_freq = 5520},
2156 { .hw_value = 124, .center_freq = 5620},
2157 { .hw_value = 149, .center_freq = 5745},
2158 { .hw_value = 161, .center_freq = 5805},
2159 { .hw_value = 187, .center_freq = 4935},
2160 { .hw_value = 7, .center_freq = 5035},
2161 { .hw_value = 16, .center_freq = 5080},
2162 { .hw_value = 42, .center_freq = 5210},
2163 { .hw_value = 56, .center_freq = 5280},
2164 { .hw_value = 108, .center_freq = 5540},
2165 { .hw_value = 128, .center_freq = 5640},
2166 { .hw_value = 153, .center_freq = 5765},
2167 { .hw_value = 165, .center_freq = 5825},
2170 /* mapping to indexes for wl1271_rates_5ghz */
2171 static const u8 wl1271_rate_to_idx_5ghz[] = {
2172 /* MCS rates are used only with 11n */
2173 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS7 */
2174 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS6 */
2175 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS5 */
2176 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS4 */
2177 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS3 */
2178 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS2 */
2179 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS1 */
2180 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS0 */
2182 7, /* CONF_HW_RXTX_RATE_54 */
2183 6, /* CONF_HW_RXTX_RATE_48 */
2184 5, /* CONF_HW_RXTX_RATE_36 */
2185 4, /* CONF_HW_RXTX_RATE_24 */
2187 /* TI-specific rate */
2188 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
2190 3, /* CONF_HW_RXTX_RATE_18 */
2191 2, /* CONF_HW_RXTX_RATE_12 */
2192 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_11 */
2193 1, /* CONF_HW_RXTX_RATE_9 */
2194 0, /* CONF_HW_RXTX_RATE_6 */
2195 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_5_5 */
2196 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_2 */
2197 CONF_HW_RXTX_RATE_UNSUPPORTED /* CONF_HW_RXTX_RATE_1 */
2200 static struct ieee80211_supported_band wl1271_band_5ghz = {
2201 .channels = wl1271_channels_5ghz,
2202 .n_channels = ARRAY_SIZE(wl1271_channels_5ghz),
2203 .bitrates = wl1271_rates_5ghz,
2204 .n_bitrates = ARRAY_SIZE(wl1271_rates_5ghz),
2207 static const u8 *wl1271_band_rate_to_idx[] = {
2208 [IEEE80211_BAND_2GHZ] = wl1271_rate_to_idx_2ghz,
2209 [IEEE80211_BAND_5GHZ] = wl1271_rate_to_idx_5ghz
2212 static const struct ieee80211_ops wl1271_ops = {
2213 .start = wl1271_op_start,
2214 .stop = wl1271_op_stop,
2215 .add_interface = wl1271_op_add_interface,
2216 .remove_interface = wl1271_op_remove_interface,
2217 .config = wl1271_op_config,
2218 .prepare_multicast = wl1271_op_prepare_multicast,
2219 .configure_filter = wl1271_op_configure_filter,
2221 .set_key = wl1271_op_set_key,
2222 .hw_scan = wl1271_op_hw_scan,
2223 .bss_info_changed = wl1271_op_bss_info_changed,
2224 .set_rts_threshold = wl1271_op_set_rts_threshold,
2225 .conf_tx = wl1271_op_conf_tx,
2226 .get_tsf = wl1271_op_get_tsf,
2227 .get_survey = wl1271_op_get_survey,
2228 CFG80211_TESTMODE_CMD(wl1271_tm_cmd)
2232 u8 wl1271_rate_to_idx(struct wl1271 *wl, int rate)
2236 BUG_ON(wl->band >= sizeof(wl1271_band_rate_to_idx)/sizeof(u8 *));
2238 if (unlikely(rate >= CONF_HW_RXTX_RATE_MAX)) {
2239 wl1271_error("Illegal RX rate from HW: %d", rate);
2243 idx = wl1271_band_rate_to_idx[wl->band][rate];
2244 if (unlikely(idx == CONF_HW_RXTX_RATE_UNSUPPORTED)) {
2245 wl1271_error("Unsupported RX rate from HW: %d", rate);
2252 static ssize_t wl1271_sysfs_show_bt_coex_state(struct device *dev,
2253 struct device_attribute *attr,
2256 struct wl1271 *wl = dev_get_drvdata(dev);
2261 mutex_lock(&wl->mutex);
2262 len = snprintf(buf, len, "%d\n\n0 - off\n1 - on\n",
2264 mutex_unlock(&wl->mutex);
2270 static ssize_t wl1271_sysfs_store_bt_coex_state(struct device *dev,
2271 struct device_attribute *attr,
2272 const char *buf, size_t count)
2274 struct wl1271 *wl = dev_get_drvdata(dev);
2278 ret = strict_strtoul(buf, 10, &res);
2281 wl1271_warning("incorrect value written to bt_coex_mode");
2285 mutex_lock(&wl->mutex);
2289 if (res == wl->sg_enabled)
2292 wl->sg_enabled = res;
2294 if (wl->state == WL1271_STATE_OFF)
2297 ret = wl1271_ps_elp_wakeup(wl, false);
2301 wl1271_acx_sg_enable(wl, wl->sg_enabled);
2302 wl1271_ps_elp_sleep(wl);
2305 mutex_unlock(&wl->mutex);
2309 static DEVICE_ATTR(bt_coex_state, S_IRUGO | S_IWUSR,
2310 wl1271_sysfs_show_bt_coex_state,
2311 wl1271_sysfs_store_bt_coex_state);
2313 static ssize_t wl1271_sysfs_show_hw_pg_ver(struct device *dev,
2314 struct device_attribute *attr,
2317 struct wl1271 *wl = dev_get_drvdata(dev);
2322 mutex_lock(&wl->mutex);
2323 if (wl->hw_pg_ver >= 0)
2324 len = snprintf(buf, len, "%d\n", wl->hw_pg_ver);
2326 len = snprintf(buf, len, "n/a\n");
2327 mutex_unlock(&wl->mutex);
2332 static DEVICE_ATTR(hw_pg_ver, S_IRUGO | S_IWUSR,
2333 wl1271_sysfs_show_hw_pg_ver, NULL);
2335 int wl1271_register_hw(struct wl1271 *wl)
2339 if (wl->mac80211_registered)
2342 SET_IEEE80211_PERM_ADDR(wl->hw, wl->mac_addr);
2344 ret = ieee80211_register_hw(wl->hw);
2346 wl1271_error("unable to register mac80211 hw: %d", ret);
2350 wl->mac80211_registered = true;
2352 register_netdevice_notifier(&wl1271_dev_notifier);
2354 wl1271_notice("loaded");
2358 EXPORT_SYMBOL_GPL(wl1271_register_hw);
2360 void wl1271_unregister_hw(struct wl1271 *wl)
2362 unregister_netdevice_notifier(&wl1271_dev_notifier);
2363 ieee80211_unregister_hw(wl->hw);
2364 wl->mac80211_registered = false;
2367 EXPORT_SYMBOL_GPL(wl1271_unregister_hw);
2369 int wl1271_init_ieee80211(struct wl1271 *wl)
2371 /* The tx descriptor buffer and the TKIP space. */
2372 wl->hw->extra_tx_headroom = WL1271_TKIP_IV_SPACE +
2373 sizeof(struct wl1271_tx_hw_descr);
2376 /* FIXME: find a proper value */
2377 wl->hw->channel_change_time = 10000;
2378 wl->hw->max_listen_interval = wl->conf.conn.max_listen_interval;
2380 wl->hw->flags = IEEE80211_HW_SIGNAL_DBM |
2381 IEEE80211_HW_BEACON_FILTER |
2382 IEEE80211_HW_SUPPORTS_PS |
2383 IEEE80211_HW_SUPPORTS_UAPSD |
2384 IEEE80211_HW_HAS_RATE_CONTROL |
2385 IEEE80211_HW_CONNECTION_MONITOR |
2386 IEEE80211_HW_SUPPORTS_CQM_RSSI;
2388 wl->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
2389 BIT(NL80211_IFTYPE_ADHOC);
2390 wl->hw->wiphy->max_scan_ssids = 1;
2391 wl->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = &wl1271_band_2ghz;
2392 wl->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = &wl1271_band_5ghz;
2395 wl->hw->max_rates = 1;
2397 SET_IEEE80211_DEV(wl->hw, wl1271_wl_to_dev(wl));
2401 EXPORT_SYMBOL_GPL(wl1271_init_ieee80211);
2403 #define WL1271_DEFAULT_CHANNEL 0
2405 struct ieee80211_hw *wl1271_alloc_hw(void)
2407 struct ieee80211_hw *hw;
2408 struct platform_device *plat_dev = NULL;
2412 hw = ieee80211_alloc_hw(sizeof(*wl), &wl1271_ops);
2414 wl1271_error("could not alloc ieee80211_hw");
2419 plat_dev = kmemdup(&wl1271_device, sizeof(wl1271_device), GFP_KERNEL);
2421 wl1271_error("could not allocate platform_device");
2423 goto err_plat_alloc;
2427 memset(wl, 0, sizeof(*wl));
2429 INIT_LIST_HEAD(&wl->list);
2432 wl->plat_dev = plat_dev;
2434 skb_queue_head_init(&wl->tx_queue);
2436 INIT_DELAYED_WORK(&wl->elp_work, wl1271_elp_work);
2437 INIT_DELAYED_WORK(&wl->pspoll_work, wl1271_pspoll_work);
2438 wl->channel = WL1271_DEFAULT_CHANNEL;
2439 wl->beacon_int = WL1271_DEFAULT_BEACON_INT;
2440 wl->default_key = 0;
2442 wl->rx_config = WL1271_DEFAULT_RX_CONFIG;
2443 wl->rx_filter = WL1271_DEFAULT_RX_FILTER;
2444 wl->psm_entry_retry = 0;
2445 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
2446 wl->basic_rate_set = CONF_TX_RATE_MASK_BASIC;
2447 wl->basic_rate = CONF_TX_RATE_MASK_BASIC;
2448 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
2449 wl->sta_rate_set = 0;
2450 wl->band = IEEE80211_BAND_2GHZ;
2453 wl->sg_enabled = true;
2456 for (i = 0; i < ACX_TX_DESCRIPTORS; i++)
2457 wl->tx_frames[i] = NULL;
2459 spin_lock_init(&wl->wl_lock);
2461 wl->state = WL1271_STATE_OFF;
2462 mutex_init(&wl->mutex);
2464 /* Apply default driver configuration. */
2465 wl1271_conf_init(wl);
2467 wl1271_debugfs_init(wl);
2469 /* Register platform device */
2470 ret = platform_device_register(wl->plat_dev);
2472 wl1271_error("couldn't register platform device");
2475 dev_set_drvdata(&wl->plat_dev->dev, wl);
2477 /* Create sysfs file to control bt coex state */
2478 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
2480 wl1271_error("failed to create sysfs file bt_coex_state");
2484 /* Create sysfs file to get HW PG version */
2485 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_hw_pg_ver);
2487 wl1271_error("failed to create sysfs file hw_pg_ver");
2488 goto err_bt_coex_state;
2494 device_remove_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
2497 platform_device_unregister(wl->plat_dev);
2500 wl1271_debugfs_exit(wl);
2504 ieee80211_free_hw(hw);
2508 return ERR_PTR(ret);
2510 EXPORT_SYMBOL_GPL(wl1271_alloc_hw);
2512 int wl1271_free_hw(struct wl1271 *wl)
2514 platform_device_unregister(wl->plat_dev);
2515 kfree(wl->plat_dev);
2517 wl1271_debugfs_exit(wl);
2524 kfree(wl->fw_status);
2525 kfree(wl->tx_res_if);
2527 ieee80211_free_hw(wl->hw);
2531 EXPORT_SYMBOL_GPL(wl1271_free_hw);
2533 MODULE_LICENSE("GPL");
2534 MODULE_AUTHOR("Luciano Coelho <luciano.coelho@nokia.com>");
2535 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");