2 * This file is part of wl1271
4 * Copyright (C) 2008-2010 Nokia Corporation
6 * Contact: Luciano Coelho <luciano.coelho@nokia.com>
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * version 2 as published by the Free Software Foundation.
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
24 #include <linux/module.h>
25 #include <linux/firmware.h>
26 #include <linux/delay.h>
27 #include <linux/spi/spi.h>
28 #include <linux/crc32.h>
29 #include <linux/etherdevice.h>
30 #include <linux/vmalloc.h>
31 #include <linux/inetdevice.h>
32 #include <linux/platform_device.h>
35 #include "wl12xx_80211.h"
36 #include "wl1271_reg.h"
37 #include "wl1271_io.h"
38 #include "wl1271_event.h"
39 #include "wl1271_tx.h"
40 #include "wl1271_rx.h"
41 #include "wl1271_ps.h"
42 #include "wl1271_init.h"
43 #include "wl1271_debugfs.h"
44 #include "wl1271_cmd.h"
45 #include "wl1271_boot.h"
46 #include "wl1271_testmode.h"
48 #define WL1271_BOOT_RETRIES 3
50 static struct conf_drv_settings default_conf = {
53 [CONF_SG_BT_PER_THRESHOLD] = 7500,
54 [CONF_SG_HV3_MAX_OVERRIDE] = 0,
55 [CONF_SG_BT_NFS_SAMPLE_INTERVAL] = 400,
56 [CONF_SG_BT_LOAD_RATIO] = 50,
57 [CONF_SG_AUTO_PS_MODE] = 0,
58 [CONF_SG_AUTO_SCAN_PROBE_REQ] = 170,
59 [CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_HV3] = 50,
60 [CONF_SG_ANTENNA_CONFIGURATION] = 0,
61 [CONF_SG_BEACON_MISS_PERCENT] = 60,
62 [CONF_SG_RATE_ADAPT_THRESH] = 12,
63 [CONF_SG_RATE_ADAPT_SNR] = 0,
64 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MIN_BR] = 10,
65 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MAX_BR] = 30,
66 [CONF_SG_WLAN_PS_MAX_BT_ACL_MASTER_BR] = 8,
67 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MIN_BR] = 20,
68 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MAX_BR] = 50,
69 /* Note: with UPSD, this should be 4 */
70 [CONF_SG_WLAN_PS_MAX_BT_ACL_SLAVE_BR] = 8,
71 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MIN_EDR] = 7,
72 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MAX_EDR] = 25,
73 [CONF_SG_WLAN_PS_MAX_BT_ACL_MASTER_EDR] = 20,
74 /* Note: with UPDS, this should be 15 */
75 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MIN_EDR] = 8,
76 /* Note: with UPDS, this should be 50 */
77 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MAX_EDR] = 40,
78 /* Note: with UPDS, this should be 10 */
79 [CONF_SG_WLAN_PS_MAX_BT_ACL_SLAVE_EDR] = 20,
82 [CONF_SG_ADAPTIVE_RXT_TXT] = 1,
83 [CONF_SG_PS_POLL_TIMEOUT] = 10,
84 [CONF_SG_UPSD_TIMEOUT] = 10,
85 [CONF_SG_WLAN_ACTIVE_BT_ACL_MASTER_MIN_EDR] = 7,
86 [CONF_SG_WLAN_ACTIVE_BT_ACL_MASTER_MAX_EDR] = 15,
87 [CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_MASTER_EDR] = 15,
88 [CONF_SG_WLAN_ACTIVE_BT_ACL_SLAVE_MIN_EDR] = 8,
89 [CONF_SG_WLAN_ACTIVE_BT_ACL_SLAVE_MAX_EDR] = 20,
90 [CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_SLAVE_EDR] = 15,
91 [CONF_SG_WLAN_ACTIVE_BT_ACL_MIN_BR] = 20,
92 [CONF_SG_WLAN_ACTIVE_BT_ACL_MAX_BR] = 50,
93 [CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_BR] = 10,
94 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_HV3] = 200,
95 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_A2DP] = 800,
96 [CONF_SG_PASSIVE_SCAN_A2DP_BT_TIME] = 75,
97 [CONF_SG_PASSIVE_SCAN_A2DP_WLAN_TIME] = 15,
98 [CONF_SG_HV3_MAX_SERVED] = 6,
99 [CONF_SG_DHCP_TIME] = 5000,
100 [CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_A2DP] = 100,
102 .state = CONF_SG_PROTECTIVE,
105 .rx_msdu_life_time = 512000,
106 .packet_detection_threshold = 0,
107 .ps_poll_timeout = 15,
109 .rts_threshold = 2347,
110 .rx_cca_threshold = 0,
111 .irq_blk_threshold = 0xFFFF,
112 .irq_pkt_threshold = 0,
114 .queue_type = CONF_RX_QUEUE_TYPE_LOW_PRIORITY,
117 .tx_energy_detection = 0,
120 .short_retry_limit = 10,
121 .long_retry_limit = 10,
144 .aifsn = CONF_TX_AIFS_PIFS,
151 .aifsn = CONF_TX_AIFS_PIFS,
159 .channel_type = CONF_CHANNEL_TYPE_DCF,
160 .tsid = CONF_TX_AC_BE,
161 .ps_scheme = CONF_PS_SCHEME_LEGACY,
162 .ack_policy = CONF_ACK_POLICY_LEGACY,
167 .channel_type = CONF_CHANNEL_TYPE_DCF,
168 .tsid = CONF_TX_AC_BE,
169 .ps_scheme = CONF_PS_SCHEME_LEGACY,
170 .ack_policy = CONF_ACK_POLICY_LEGACY,
175 .channel_type = CONF_CHANNEL_TYPE_DCF,
176 .tsid = CONF_TX_AC_BE,
177 .ps_scheme = CONF_PS_SCHEME_LEGACY,
178 .ack_policy = CONF_ACK_POLICY_LEGACY,
183 .channel_type = CONF_CHANNEL_TYPE_DCF,
184 .tsid = CONF_TX_AC_BE,
185 .ps_scheme = CONF_PS_SCHEME_LEGACY,
186 .ack_policy = CONF_ACK_POLICY_LEGACY,
191 .channel_type = CONF_CHANNEL_TYPE_DCF,
192 .tsid = CONF_TX_AC_BE,
193 .ps_scheme = CONF_PS_SCHEME_LEGACY,
194 .ack_policy = CONF_ACK_POLICY_LEGACY,
199 .channel_type = CONF_CHANNEL_TYPE_DCF,
200 .tsid = CONF_TX_AC_BE,
201 .ps_scheme = CONF_PS_SCHEME_LEGACY,
202 .ack_policy = CONF_ACK_POLICY_LEGACY,
207 .channel_type = CONF_CHANNEL_TYPE_DCF,
208 .tsid = CONF_TX_AC_BE,
209 .ps_scheme = CONF_PS_SCHEME_LEGACY,
210 .ack_policy = CONF_ACK_POLICY_LEGACY,
214 .frag_threshold = IEEE80211_MAX_FRAG_THRESHOLD,
215 .tx_compl_timeout = 700,
216 .tx_compl_threshold = 4,
217 .basic_rate = CONF_HW_BIT_RATE_1MBPS,
218 .basic_rate_5 = CONF_HW_BIT_RATE_6MBPS,
221 .wake_up_event = CONF_WAKE_UP_EVENT_DTIM,
222 .listen_interval = 1,
223 .bcn_filt_mode = CONF_BCN_FILT_MODE_ENABLED,
224 .bcn_filt_ie_count = 1,
227 .ie = WLAN_EID_CHANNEL_SWITCH,
228 .rule = CONF_BCN_RULE_PASS_ON_APPEARANCE,
231 .synch_fail_thold = 10,
232 .bss_lose_timeout = 100,
233 .beacon_rx_timeout = 10000,
234 .broadcast_timeout = 20000,
235 .rx_broadcast_in_ps = 1,
236 .ps_poll_threshold = 20,
237 .bet_enable = CONF_BET_MODE_ENABLE,
238 .bet_max_consecutive = 10,
239 .psm_entry_retries = 3,
240 .keep_alive_interval = 55000,
241 .max_listen_interval = 20,
253 .host_clk_settling_time = 5000,
254 .host_fast_wakeup_support = false
257 /* FIXME: due to firmware bug, must use value 1 for now */
259 .avg_weight_rssi_beacon = 20,
260 .avg_weight_rssi_data = 10,
261 .avg_weight_snr_beacon = 20,
262 .avg_weight_snr_data = 10
266 static void wl1271_device_release(struct device *dev)
271 static struct platform_device wl1271_device = {
275 /* device model insists to have a release function */
277 .release = wl1271_device_release,
281 static LIST_HEAD(wl_list);
283 static void wl1271_conf_init(struct wl1271 *wl)
287 * This function applies the default configuration to the driver. This
288 * function is invoked upon driver load (spi probe.)
290 * The configuration is stored in a run-time structure in order to
291 * facilitate for run-time adjustment of any of the parameters. Making
292 * changes to the configuration structure will apply the new values on
293 * the next interface up (wl1271_op_start.)
296 /* apply driver default configuration */
297 memcpy(&wl->conf, &default_conf, sizeof(default_conf));
301 static int wl1271_plt_init(struct wl1271 *wl)
303 struct conf_tx_ac_category *conf_ac;
304 struct conf_tx_tid *conf_tid;
307 ret = wl1271_cmd_general_parms(wl);
311 ret = wl1271_cmd_radio_parms(wl);
315 ret = wl1271_init_templates_config(wl);
319 ret = wl1271_acx_init_mem_config(wl);
323 /* PHY layer config */
324 ret = wl1271_init_phy_config(wl);
326 goto out_free_memmap;
328 ret = wl1271_acx_dco_itrim_params(wl);
330 goto out_free_memmap;
332 /* Initialize connection monitoring thresholds */
333 ret = wl1271_acx_conn_monit_params(wl, false);
335 goto out_free_memmap;
337 /* Bluetooth WLAN coexistence */
338 ret = wl1271_init_pta(wl);
340 goto out_free_memmap;
342 /* Energy detection */
343 ret = wl1271_init_energy_detection(wl);
345 goto out_free_memmap;
347 /* Default fragmentation threshold */
348 ret = wl1271_acx_frag_threshold(wl);
350 goto out_free_memmap;
352 /* Default TID configuration */
353 for (i = 0; i < wl->conf.tx.tid_conf_count; i++) {
354 conf_tid = &wl->conf.tx.tid_conf[i];
355 ret = wl1271_acx_tid_cfg(wl, conf_tid->queue_id,
356 conf_tid->channel_type,
359 conf_tid->ack_policy,
360 conf_tid->apsd_conf[0],
361 conf_tid->apsd_conf[1]);
363 goto out_free_memmap;
366 /* Default AC configuration */
367 for (i = 0; i < wl->conf.tx.ac_conf_count; i++) {
368 conf_ac = &wl->conf.tx.ac_conf[i];
369 ret = wl1271_acx_ac_cfg(wl, conf_ac->ac, conf_ac->cw_min,
370 conf_ac->cw_max, conf_ac->aifsn,
371 conf_ac->tx_op_limit);
373 goto out_free_memmap;
376 /* Enable data path */
377 ret = wl1271_cmd_data_path(wl, 1);
379 goto out_free_memmap;
381 /* Configure for CAM power saving (ie. always active) */
382 ret = wl1271_acx_sleep_auth(wl, WL1271_PSM_CAM);
384 goto out_free_memmap;
387 ret = wl1271_acx_pm_config(wl);
389 goto out_free_memmap;
394 kfree(wl->target_mem_map);
395 wl->target_mem_map = NULL;
400 static void wl1271_fw_status(struct wl1271 *wl,
401 struct wl1271_fw_status *status)
407 wl1271_raw_read(wl, FW_STATUS_ADDR, status, sizeof(*status), false);
409 wl1271_debug(DEBUG_IRQ, "intr: 0x%x (fw_rx_counter = %d, "
410 "drv_rx_counter = %d, tx_results_counter = %d)",
412 status->fw_rx_counter,
413 status->drv_rx_counter,
414 status->tx_results_counter);
416 /* update number of available TX blocks */
417 for (i = 0; i < NUM_TX_QUEUES; i++) {
418 u32 cnt = le32_to_cpu(status->tx_released_blks[i]) -
419 wl->tx_blocks_freed[i];
421 wl->tx_blocks_freed[i] =
422 le32_to_cpu(status->tx_released_blks[i]);
423 wl->tx_blocks_available += cnt;
427 /* if more blocks are available now, schedule some tx work */
428 if (total && !skb_queue_empty(&wl->tx_queue))
429 ieee80211_queue_work(wl->hw, &wl->tx_work);
431 /* update the host-chipset time offset */
433 wl->time_offset = (timespec_to_ns(&ts) >> 10) -
434 (s64)le32_to_cpu(status->fw_localtime);
437 #define WL1271_IRQ_MAX_LOOPS 10
439 static void wl1271_irq_work(struct work_struct *work)
443 int loopcount = WL1271_IRQ_MAX_LOOPS;
446 container_of(work, struct wl1271, irq_work);
448 mutex_lock(&wl->mutex);
450 wl1271_debug(DEBUG_IRQ, "IRQ work");
452 if (unlikely(wl->state == WL1271_STATE_OFF))
455 ret = wl1271_ps_elp_wakeup(wl, true);
459 spin_lock_irqsave(&wl->wl_lock, flags);
460 while (test_bit(WL1271_FLAG_IRQ_PENDING, &wl->flags) && loopcount) {
461 clear_bit(WL1271_FLAG_IRQ_PENDING, &wl->flags);
462 spin_unlock_irqrestore(&wl->wl_lock, flags);
465 wl1271_fw_status(wl, wl->fw_status);
466 intr = le32_to_cpu(wl->fw_status->intr);
468 wl1271_debug(DEBUG_IRQ, "Zero interrupt received.");
472 intr &= WL1271_INTR_MASK;
474 if (intr & WL1271_ACX_INTR_DATA) {
475 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_DATA");
477 /* check for tx results */
478 if (wl->fw_status->tx_results_counter !=
479 (wl->tx_results_count & 0xff))
480 wl1271_tx_complete(wl);
482 wl1271_rx(wl, wl->fw_status);
485 if (intr & WL1271_ACX_INTR_EVENT_A) {
486 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_A");
487 wl1271_event_handle(wl, 0);
490 if (intr & WL1271_ACX_INTR_EVENT_B) {
491 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_B");
492 wl1271_event_handle(wl, 1);
495 if (intr & WL1271_ACX_INTR_INIT_COMPLETE)
496 wl1271_debug(DEBUG_IRQ,
497 "WL1271_ACX_INTR_INIT_COMPLETE");
499 if (intr & WL1271_ACX_INTR_HW_AVAILABLE)
500 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_HW_AVAILABLE");
502 spin_lock_irqsave(&wl->wl_lock, flags);
505 if (test_bit(WL1271_FLAG_IRQ_PENDING, &wl->flags))
506 ieee80211_queue_work(wl->hw, &wl->irq_work);
508 clear_bit(WL1271_FLAG_IRQ_RUNNING, &wl->flags);
509 spin_unlock_irqrestore(&wl->wl_lock, flags);
511 wl1271_ps_elp_sleep(wl);
514 mutex_unlock(&wl->mutex);
517 static int wl1271_fetch_firmware(struct wl1271 *wl)
519 const struct firmware *fw;
522 ret = request_firmware(&fw, WL1271_FW_NAME, wl1271_wl_to_dev(wl));
525 wl1271_error("could not get firmware: %d", ret);
530 wl1271_error("firmware size is not multiple of 32 bits: %zu",
536 wl->fw_len = fw->size;
537 wl->fw = vmalloc(wl->fw_len);
540 wl1271_error("could not allocate memory for the firmware");
545 memcpy(wl->fw, fw->data, wl->fw_len);
550 release_firmware(fw);
555 static int wl1271_fetch_nvs(struct wl1271 *wl)
557 const struct firmware *fw;
560 ret = request_firmware(&fw, WL1271_NVS_NAME, wl1271_wl_to_dev(wl));
563 wl1271_error("could not get nvs file: %d", ret);
567 if (fw->size != sizeof(struct wl1271_nvs_file)) {
568 wl1271_error("nvs size is not as expected: %zu != %zu",
569 fw->size, sizeof(struct wl1271_nvs_file));
574 wl->nvs = kmalloc(sizeof(struct wl1271_nvs_file), GFP_KERNEL);
577 wl1271_error("could not allocate memory for the nvs file");
582 memcpy(wl->nvs, fw->data, sizeof(struct wl1271_nvs_file));
585 release_firmware(fw);
590 static void wl1271_fw_wakeup(struct wl1271 *wl)
594 elp_reg = ELPCTRL_WAKE_UP;
595 wl1271_raw_write32(wl, HW_ACCESS_ELP_CTRL_REG_ADDR, elp_reg);
598 static int wl1271_setup(struct wl1271 *wl)
600 wl->fw_status = kmalloc(sizeof(*wl->fw_status), GFP_KERNEL);
604 wl->tx_res_if = kmalloc(sizeof(*wl->tx_res_if), GFP_KERNEL);
605 if (!wl->tx_res_if) {
606 kfree(wl->fw_status);
610 INIT_WORK(&wl->irq_work, wl1271_irq_work);
611 INIT_WORK(&wl->tx_work, wl1271_tx_work);
615 static int wl1271_chip_wakeup(struct wl1271 *wl)
617 struct wl1271_partition_set partition;
620 msleep(WL1271_PRE_POWER_ON_SLEEP);
622 msleep(WL1271_POWER_ON_SLEEP);
626 /* We don't need a real memory partition here, because we only want
627 * to use the registers at this point. */
628 memset(&partition, 0, sizeof(partition));
629 partition.reg.start = REGISTERS_BASE;
630 partition.reg.size = REGISTERS_DOWN_SIZE;
631 wl1271_set_partition(wl, &partition);
633 /* ELP module wake up */
634 wl1271_fw_wakeup(wl);
636 /* whal_FwCtrl_BootSm() */
638 /* 0. read chip id from CHIP_ID */
639 wl->chip.id = wl1271_read32(wl, CHIP_ID_B);
641 /* 1. check if chip id is valid */
643 switch (wl->chip.id) {
644 case CHIP_ID_1271_PG10:
645 wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
648 ret = wl1271_setup(wl);
652 case CHIP_ID_1271_PG20:
653 wl1271_debug(DEBUG_BOOT, "chip id 0x%x (1271 PG20)",
656 ret = wl1271_setup(wl);
661 wl1271_warning("unsupported chip id: 0x%x", wl->chip.id);
666 if (wl->fw == NULL) {
667 ret = wl1271_fetch_firmware(wl);
672 /* No NVS from netlink, try to get it from the filesystem */
673 if (wl->nvs == NULL) {
674 ret = wl1271_fetch_nvs(wl);
683 int wl1271_plt_start(struct wl1271 *wl)
685 int retries = WL1271_BOOT_RETRIES;
688 mutex_lock(&wl->mutex);
690 wl1271_notice("power up");
692 if (wl->state != WL1271_STATE_OFF) {
693 wl1271_error("cannot go into PLT state because not "
694 "in off state: %d", wl->state);
701 ret = wl1271_chip_wakeup(wl);
705 ret = wl1271_boot(wl);
709 ret = wl1271_plt_init(wl);
713 wl->state = WL1271_STATE_PLT;
714 wl1271_notice("firmware booted in PLT mode (%s)",
719 wl1271_disable_interrupts(wl);
720 mutex_unlock(&wl->mutex);
721 /* Unlocking the mutex in the middle of handling is
722 inherently unsafe. In this case we deem it safe to do,
723 because we need to let any possibly pending IRQ out of
724 the system (and while we are WL1271_STATE_OFF the IRQ
725 work function will not do anything.) Also, any other
726 possible concurrent operations will fail due to the
727 current state, hence the wl1271 struct should be safe. */
728 cancel_work_sync(&wl->irq_work);
729 mutex_lock(&wl->mutex);
731 wl1271_power_off(wl);
734 wl1271_error("firmware boot in PLT mode failed despite %d retries",
735 WL1271_BOOT_RETRIES);
737 mutex_unlock(&wl->mutex);
742 int wl1271_plt_stop(struct wl1271 *wl)
746 mutex_lock(&wl->mutex);
748 wl1271_notice("power down");
750 if (wl->state != WL1271_STATE_PLT) {
751 wl1271_error("cannot power down because not in PLT "
752 "state: %d", wl->state);
757 wl1271_disable_interrupts(wl);
758 wl1271_power_off(wl);
760 wl->state = WL1271_STATE_OFF;
764 mutex_unlock(&wl->mutex);
770 static int wl1271_op_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
772 struct wl1271 *wl = hw->priv;
773 struct ieee80211_conf *conf = &hw->conf;
774 struct ieee80211_tx_info *txinfo = IEEE80211_SKB_CB(skb);
775 struct ieee80211_sta *sta = txinfo->control.sta;
778 /* peek into the rates configured in the STA entry */
779 spin_lock_irqsave(&wl->wl_lock, flags);
780 if (sta && sta->supp_rates[conf->channel->band] != wl->sta_rate_set) {
781 wl->sta_rate_set = sta->supp_rates[conf->channel->band];
782 set_bit(WL1271_FLAG_STA_RATES_CHANGED, &wl->flags);
784 spin_unlock_irqrestore(&wl->wl_lock, flags);
786 /* queue the packet */
787 skb_queue_tail(&wl->tx_queue, skb);
790 * The chip specific setup must run before the first TX packet -
791 * before that, the tx_work will not be initialized!
794 ieee80211_queue_work(wl->hw, &wl->tx_work);
797 * The workqueue is slow to process the tx_queue and we need stop
798 * the queue here, otherwise the queue will get too long.
800 if (skb_queue_len(&wl->tx_queue) >= WL1271_TX_QUEUE_HIGH_WATERMARK) {
801 wl1271_debug(DEBUG_TX, "op_tx: stopping queues");
803 spin_lock_irqsave(&wl->wl_lock, flags);
804 ieee80211_stop_queues(wl->hw);
805 set_bit(WL1271_FLAG_TX_QUEUE_STOPPED, &wl->flags);
806 spin_unlock_irqrestore(&wl->wl_lock, flags);
812 static int wl1271_dev_notify(struct notifier_block *me, unsigned long what,
815 struct net_device *dev;
816 struct wireless_dev *wdev;
818 struct ieee80211_hw *hw;
820 struct wl1271 *wl_temp;
821 struct in_device *idev;
822 struct in_ifaddr *ifa = arg;
825 /* FIXME: this ugly function should probably be implemented in the
826 * mac80211, and here should only be a simple callback handling actual
827 * setting of the filters. Now we need to dig up references to
828 * various structures to gain access to what we need.
829 * Also, because of this, there is no "initial" setting of the filter
830 * in "op_start", because we don't want to dig up struct net_device
831 * there - the filter will be set upon first change of the interface
834 dev = ifa->ifa_dev->dev;
836 wdev = dev->ieee80211_ptr;
844 hw = wiphy_priv(wiphy);
848 /* Check that the interface is one supported by this driver. */
850 list_for_each_entry(wl, &wl_list, list) {
857 /* Get the interface IP address for the device. "ifa" will become
859 - there is no IPV4 protocol address configured
860 - there are multiple (virtual) IPV4 addresses configured
861 When "ifa" is NULL, filtering will be disabled.
866 ifa = idev->ifa_list;
868 if (ifa && ifa->ifa_next)
871 mutex_lock(&wl->mutex);
873 if (wl->state == WL1271_STATE_OFF)
876 ret = wl1271_ps_elp_wakeup(wl, false);
880 ret = wl1271_acx_arp_ip_filter(wl, true,
881 (u8 *)&ifa->ifa_address,
884 ret = wl1271_acx_arp_ip_filter(wl, false, NULL,
886 wl1271_ps_elp_sleep(wl);
889 mutex_unlock(&wl->mutex);
894 static struct notifier_block wl1271_dev_notifier = {
895 .notifier_call = wl1271_dev_notify,
899 static int wl1271_op_start(struct ieee80211_hw *hw)
901 wl1271_debug(DEBUG_MAC80211, "mac80211 start");
904 * We have to delay the booting of the hardware because
905 * we need to know the local MAC address before downloading and
906 * initializing the firmware. The MAC address cannot be changed
907 * after boot, and without the proper MAC address, the firmware
908 * will not function properly.
910 * The MAC address is first known when the corresponding interface
911 * is added. That is where we will initialize the hardware.
917 static void wl1271_op_stop(struct ieee80211_hw *hw)
919 wl1271_debug(DEBUG_MAC80211, "mac80211 stop");
922 static int wl1271_op_add_interface(struct ieee80211_hw *hw,
923 struct ieee80211_vif *vif)
925 struct wl1271 *wl = hw->priv;
926 int retries = WL1271_BOOT_RETRIES;
929 wl1271_debug(DEBUG_MAC80211, "mac80211 add interface type %d mac %pM",
930 vif->type, vif->addr);
932 mutex_lock(&wl->mutex);
941 case NL80211_IFTYPE_STATION:
942 wl->bss_type = BSS_TYPE_STA_BSS;
943 wl->set_bss_type = BSS_TYPE_STA_BSS;
945 case NL80211_IFTYPE_ADHOC:
946 wl->bss_type = BSS_TYPE_IBSS;
947 wl->set_bss_type = BSS_TYPE_STA_BSS;
954 memcpy(wl->mac_addr, vif->addr, ETH_ALEN);
956 if (wl->state != WL1271_STATE_OFF) {
957 wl1271_error("cannot start because not in off state: %d",
965 ret = wl1271_chip_wakeup(wl);
969 ret = wl1271_boot(wl);
973 ret = wl1271_hw_init(wl);
977 wl->state = WL1271_STATE_ON;
978 wl1271_info("firmware booted (%s)", wl->chip.fw_ver);
982 wl1271_disable_interrupts(wl);
983 mutex_unlock(&wl->mutex);
984 /* Unlocking the mutex in the middle of handling is
985 inherently unsafe. In this case we deem it safe to do,
986 because we need to let any possibly pending IRQ out of
987 the system (and while we are WL1271_STATE_OFF the IRQ
988 work function will not do anything.) Also, any other
989 possible concurrent operations will fail due to the
990 current state, hence the wl1271 struct should be safe. */
991 cancel_work_sync(&wl->irq_work);
992 mutex_lock(&wl->mutex);
994 wl1271_power_off(wl);
997 wl1271_error("firmware boot failed despite %d retries",
998 WL1271_BOOT_RETRIES);
1000 mutex_unlock(&wl->mutex);
1003 list_add(&wl->list, &wl_list);
1004 register_inetaddr_notifier(&wl1271_dev_notifier);
1010 static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
1011 struct ieee80211_vif *vif)
1013 struct wl1271 *wl = hw->priv;
1016 unregister_inetaddr_notifier(&wl1271_dev_notifier);
1018 mutex_lock(&wl->mutex);
1019 wl1271_debug(DEBUG_MAC80211, "mac80211 remove interface");
1021 wl1271_info("down");
1023 list_del(&wl->list);
1025 WARN_ON(wl->state != WL1271_STATE_ON);
1027 if (test_and_clear_bit(WL1271_FLAG_SCANNING, &wl->flags)) {
1028 mutex_unlock(&wl->mutex);
1029 ieee80211_scan_completed(wl->hw, true);
1030 mutex_lock(&wl->mutex);
1033 wl->state = WL1271_STATE_OFF;
1035 wl1271_disable_interrupts(wl);
1037 mutex_unlock(&wl->mutex);
1039 cancel_work_sync(&wl->irq_work);
1040 cancel_work_sync(&wl->tx_work);
1042 mutex_lock(&wl->mutex);
1044 /* let's notify MAC80211 about the remaining pending TX frames */
1045 wl1271_tx_flush(wl);
1046 wl1271_power_off(wl);
1048 memset(wl->bssid, 0, ETH_ALEN);
1049 memset(wl->ssid, 0, IW_ESSID_MAX_SIZE + 1);
1051 wl->bss_type = MAX_BSS_TYPE;
1052 wl->set_bss_type = MAX_BSS_TYPE;
1053 wl->band = IEEE80211_BAND_2GHZ;
1056 wl->psm_entry_retry = 0;
1057 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
1058 wl->tx_blocks_available = 0;
1059 wl->tx_results_count = 0;
1060 wl->tx_packets_count = 0;
1061 wl->tx_security_last_seq = 0;
1062 wl->tx_security_seq = 0;
1063 wl->time_offset = 0;
1064 wl->session_counter = 0;
1065 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
1066 wl->sta_rate_set = 0;
1071 for (i = 0; i < NUM_TX_QUEUES; i++)
1072 wl->tx_blocks_freed[i] = 0;
1074 wl1271_debugfs_reset(wl);
1076 kfree(wl->fw_status);
1077 wl->fw_status = NULL;
1078 kfree(wl->tx_res_if);
1079 wl->tx_res_if = NULL;
1080 kfree(wl->target_mem_map);
1081 wl->target_mem_map = NULL;
1083 mutex_unlock(&wl->mutex);
1086 static void wl1271_configure_filters(struct wl1271 *wl, unsigned int filters)
1088 wl->rx_config = WL1271_DEFAULT_RX_CONFIG;
1089 wl->rx_filter = WL1271_DEFAULT_RX_FILTER;
1091 /* combine requested filters with current filter config */
1092 filters = wl->filters | filters;
1094 wl1271_debug(DEBUG_FILTERS, "RX filters set: ");
1096 if (filters & FIF_PROMISC_IN_BSS) {
1097 wl1271_debug(DEBUG_FILTERS, " - FIF_PROMISC_IN_BSS");
1098 wl->rx_config &= ~CFG_UNI_FILTER_EN;
1099 wl->rx_config |= CFG_BSSID_FILTER_EN;
1101 if (filters & FIF_BCN_PRBRESP_PROMISC) {
1102 wl1271_debug(DEBUG_FILTERS, " - FIF_BCN_PRBRESP_PROMISC");
1103 wl->rx_config &= ~CFG_BSSID_FILTER_EN;
1104 wl->rx_config &= ~CFG_SSID_FILTER_EN;
1106 if (filters & FIF_OTHER_BSS) {
1107 wl1271_debug(DEBUG_FILTERS, " - FIF_OTHER_BSS");
1108 wl->rx_config &= ~CFG_BSSID_FILTER_EN;
1110 if (filters & FIF_CONTROL) {
1111 wl1271_debug(DEBUG_FILTERS, " - FIF_CONTROL");
1112 wl->rx_filter |= CFG_RX_CTL_EN;
1114 if (filters & FIF_FCSFAIL) {
1115 wl1271_debug(DEBUG_FILTERS, " - FIF_FCSFAIL");
1116 wl->rx_filter |= CFG_RX_FCS_ERROR;
1120 static int wl1271_dummy_join(struct wl1271 *wl)
1123 /* we need to use a dummy BSSID for now */
1124 static const u8 dummy_bssid[ETH_ALEN] = { 0x0b, 0xad, 0xde,
1127 memcpy(wl->bssid, dummy_bssid, ETH_ALEN);
1129 /* pass through frames from all BSS */
1130 wl1271_configure_filters(wl, FIF_OTHER_BSS);
1132 ret = wl1271_cmd_join(wl, wl->set_bss_type);
1136 set_bit(WL1271_FLAG_JOINED, &wl->flags);
1142 static int wl1271_join(struct wl1271 *wl)
1146 ret = wl1271_cmd_join(wl, wl->set_bss_type);
1150 set_bit(WL1271_FLAG_JOINED, &wl->flags);
1152 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1156 * The join command disable the keep-alive mode, shut down its process,
1157 * and also clear the template config, so we need to reset it all after
1158 * the join. The acx_aid starts the keep-alive process, and the order
1159 * of the commands below is relevant.
1161 ret = wl1271_acx_keep_alive_mode(wl, true);
1165 ret = wl1271_acx_aid(wl, wl->aid);
1169 ret = wl1271_cmd_build_klv_null_data(wl);
1173 ret = wl1271_acx_keep_alive_config(wl, CMD_TEMPL_KLV_IDX_NULL_DATA,
1174 ACX_KEEP_ALIVE_TPL_VALID);
1182 static int wl1271_unjoin(struct wl1271 *wl)
1186 /* to stop listening to a channel, we disconnect */
1187 ret = wl1271_cmd_disconnect(wl);
1191 clear_bit(WL1271_FLAG_JOINED, &wl->flags);
1193 memset(wl->bssid, 0, ETH_ALEN);
1195 /* stop filterting packets based on bssid */
1196 wl1271_configure_filters(wl, FIF_OTHER_BSS);
1202 static void wl1271_set_band_rate(struct wl1271 *wl)
1204 if (wl->band == IEEE80211_BAND_2GHZ)
1205 wl->basic_rate_set = wl->conf.tx.basic_rate;
1207 wl->basic_rate_set = wl->conf.tx.basic_rate_5;
1210 static u32 wl1271_min_rate_get(struct wl1271 *wl)
1215 if (!wl->basic_rate_set) {
1217 wl->basic_rate_set = wl->conf.tx.basic_rate;
1220 for (i = 0; !rate; i++) {
1221 if ((wl->basic_rate_set >> i) & 0x1)
1228 static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed)
1230 struct wl1271 *wl = hw->priv;
1231 struct ieee80211_conf *conf = &hw->conf;
1232 int channel, ret = 0;
1234 channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
1236 wl1271_debug(DEBUG_MAC80211, "mac80211 config ch %d psm %s power %d %s",
1238 conf->flags & IEEE80211_CONF_PS ? "on" : "off",
1240 conf->flags & IEEE80211_CONF_IDLE ? "idle" : "in use");
1242 mutex_lock(&wl->mutex);
1244 if (unlikely(wl->state == WL1271_STATE_OFF))
1247 ret = wl1271_ps_elp_wakeup(wl, false);
1251 /* if the channel changes while joined, join again */
1252 if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
1253 wl->band = conf->channel->band;
1254 wl->channel = channel;
1257 * FIXME: the mac80211 should really provide a fixed rate
1258 * to use here. for now, just use the smallest possible rate
1259 * for the band as a fixed rate for association frames and
1260 * other control messages.
1262 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1263 wl1271_set_band_rate(wl);
1265 wl->basic_rate = wl1271_min_rate_get(wl);
1266 ret = wl1271_acx_rate_policies(wl);
1268 wl1271_warning("rate policy for update channel "
1271 if (test_bit(WL1271_FLAG_JOINED, &wl->flags)) {
1272 ret = wl1271_join(wl);
1274 wl1271_warning("cmd join to update channel "
1279 if (changed & IEEE80211_CONF_CHANGE_IDLE) {
1280 if (conf->flags & IEEE80211_CONF_IDLE &&
1281 test_bit(WL1271_FLAG_JOINED, &wl->flags))
1283 else if (!(conf->flags & IEEE80211_CONF_IDLE))
1284 wl1271_dummy_join(wl);
1286 if (conf->flags & IEEE80211_CONF_IDLE) {
1287 wl->rate_set = wl1271_min_rate_get(wl);
1288 wl->sta_rate_set = 0;
1289 wl1271_acx_rate_policies(wl);
1290 wl1271_acx_keep_alive_config(
1291 wl, CMD_TEMPL_KLV_IDX_NULL_DATA,
1292 ACX_KEEP_ALIVE_TPL_INVALID);
1293 set_bit(WL1271_FLAG_IDLE, &wl->flags);
1295 clear_bit(WL1271_FLAG_IDLE, &wl->flags);
1298 if (conf->flags & IEEE80211_CONF_PS &&
1299 !test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
1300 set_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
1303 * We enter PSM only if we're already associated.
1304 * If we're not, we'll enter it when joining an SSID,
1305 * through the bss_info_changed() hook.
1307 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags)) {
1308 wl1271_debug(DEBUG_PSM, "psm enabled");
1309 ret = wl1271_ps_set_mode(wl, STATION_POWER_SAVE_MODE,
1312 } else if (!(conf->flags & IEEE80211_CONF_PS) &&
1313 test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
1314 wl1271_debug(DEBUG_PSM, "psm disabled");
1316 clear_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
1318 if (test_bit(WL1271_FLAG_PSM, &wl->flags))
1319 ret = wl1271_ps_set_mode(wl, STATION_ACTIVE_MODE,
1323 if (conf->power_level != wl->power_level) {
1324 ret = wl1271_acx_tx_power(wl, conf->power_level);
1328 wl->power_level = conf->power_level;
1332 wl1271_ps_elp_sleep(wl);
1335 mutex_unlock(&wl->mutex);
1340 struct wl1271_filter_params {
1343 u8 mc_list[ACX_MC_ADDRESS_GROUP_MAX][ETH_ALEN];
1346 static u64 wl1271_op_prepare_multicast(struct ieee80211_hw *hw, int mc_count,
1347 struct dev_addr_list *mc_list)
1349 struct wl1271_filter_params *fp;
1350 struct wl1271 *wl = hw->priv;
1353 if (unlikely(wl->state == WL1271_STATE_OFF))
1356 fp = kzalloc(sizeof(*fp), GFP_ATOMIC);
1358 wl1271_error("Out of memory setting filters.");
1362 /* update multicast filtering parameters */
1364 if (mc_count > ACX_MC_ADDRESS_GROUP_MAX) {
1366 fp->enabled = false;
1369 fp->mc_list_length = 0;
1370 for (i = 0; i < mc_count; i++) {
1371 if (mc_list->da_addrlen == ETH_ALEN) {
1372 memcpy(fp->mc_list[fp->mc_list_length],
1373 mc_list->da_addr, ETH_ALEN);
1374 fp->mc_list_length++;
1376 wl1271_warning("Unknown mc address length.");
1377 mc_list = mc_list->next;
1380 return (u64)(unsigned long)fp;
1383 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
1386 FIF_BCN_PRBRESP_PROMISC | \
1390 static void wl1271_op_configure_filter(struct ieee80211_hw *hw,
1391 unsigned int changed,
1392 unsigned int *total, u64 multicast)
1394 struct wl1271_filter_params *fp = (void *)(unsigned long)multicast;
1395 struct wl1271 *wl = hw->priv;
1398 wl1271_debug(DEBUG_MAC80211, "mac80211 configure filter");
1400 mutex_lock(&wl->mutex);
1402 *total &= WL1271_SUPPORTED_FILTERS;
1403 changed &= WL1271_SUPPORTED_FILTERS;
1405 if (unlikely(wl->state == WL1271_STATE_OFF))
1408 ret = wl1271_ps_elp_wakeup(wl, false);
1413 if (*total & FIF_ALLMULTI)
1414 ret = wl1271_acx_group_address_tbl(wl, false, NULL, 0);
1416 ret = wl1271_acx_group_address_tbl(wl, fp->enabled,
1418 fp->mc_list_length);
1422 /* determine, whether supported filter values have changed */
1426 /* configure filters */
1427 wl->filters = *total;
1428 wl1271_configure_filters(wl, 0);
1430 /* apply configured filters */
1431 ret = wl1271_acx_rx_config(wl, wl->rx_config, wl->rx_filter);
1436 wl1271_ps_elp_sleep(wl);
1439 mutex_unlock(&wl->mutex);
1443 static int wl1271_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
1444 struct ieee80211_vif *vif,
1445 struct ieee80211_sta *sta,
1446 struct ieee80211_key_conf *key_conf)
1448 struct wl1271 *wl = hw->priv;
1455 static const u8 bcast_addr[ETH_ALEN] =
1456 { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
1458 wl1271_debug(DEBUG_MAC80211, "mac80211 set key");
1460 addr = sta ? sta->addr : bcast_addr;
1462 wl1271_debug(DEBUG_CRYPT, "CMD: 0x%x", cmd);
1463 wl1271_dump(DEBUG_CRYPT, "ADDR: ", addr, ETH_ALEN);
1464 wl1271_debug(DEBUG_CRYPT, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
1465 key_conf->alg, key_conf->keyidx,
1466 key_conf->keylen, key_conf->flags);
1467 wl1271_dump(DEBUG_CRYPT, "KEY: ", key_conf->key, key_conf->keylen);
1469 if (is_zero_ether_addr(addr)) {
1470 /* We dont support TX only encryption */
1475 mutex_lock(&wl->mutex);
1477 ret = wl1271_ps_elp_wakeup(wl, false);
1481 switch (key_conf->alg) {
1485 key_conf->hw_key_idx = key_conf->keyidx;
1488 key_type = KEY_TKIP;
1490 key_conf->hw_key_idx = key_conf->keyidx;
1491 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
1492 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
1497 key_conf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
1498 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
1499 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
1502 wl1271_error("Unknown key algo 0x%x", key_conf->alg);
1510 ret = wl1271_cmd_set_key(wl, KEY_ADD_OR_REPLACE,
1511 key_conf->keyidx, key_type,
1512 key_conf->keylen, key_conf->key,
1513 addr, tx_seq_32, tx_seq_16);
1515 wl1271_error("Could not add or replace key");
1519 /* the default WEP key needs to be configured at least once */
1520 if (key_type == KEY_WEP) {
1521 ret = wl1271_cmd_set_default_wep_key(wl,
1529 /* The wl1271 does not allow to remove unicast keys - they
1530 will be cleared automatically on next CMD_JOIN. Ignore the
1531 request silently, as we dont want the mac80211 to emit
1532 an error message. */
1533 if (!is_broadcast_ether_addr(addr))
1536 ret = wl1271_cmd_set_key(wl, KEY_REMOVE,
1537 key_conf->keyidx, key_type,
1538 key_conf->keylen, key_conf->key,
1541 wl1271_error("Could not remove key");
1547 wl1271_error("Unsupported key cmd 0x%x", cmd);
1555 wl1271_ps_elp_sleep(wl);
1558 mutex_unlock(&wl->mutex);
1564 static int wl1271_op_hw_scan(struct ieee80211_hw *hw,
1565 struct ieee80211_vif *vif,
1566 struct cfg80211_scan_request *req)
1568 struct wl1271 *wl = hw->priv;
1573 wl1271_debug(DEBUG_MAC80211, "mac80211 hw scan");
1576 ssid = req->ssids[0].ssid;
1577 len = req->ssids[0].ssid_len;
1580 mutex_lock(&wl->mutex);
1582 ret = wl1271_ps_elp_wakeup(wl, false);
1586 if (wl1271_11a_enabled())
1587 ret = wl1271_cmd_scan(hw->priv, ssid, len,
1588 req->ie, req->ie_len, 1, 0,
1589 WL1271_SCAN_BAND_DUAL, 3);
1591 ret = wl1271_cmd_scan(hw->priv, ssid, len,
1592 req->ie, req->ie_len, 1, 0,
1593 WL1271_SCAN_BAND_2_4_GHZ, 3);
1595 wl1271_ps_elp_sleep(wl);
1598 mutex_unlock(&wl->mutex);
1603 static int wl1271_op_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
1605 struct wl1271 *wl = hw->priv;
1608 mutex_lock(&wl->mutex);
1610 if (unlikely(wl->state == WL1271_STATE_OFF))
1613 ret = wl1271_ps_elp_wakeup(wl, false);
1617 ret = wl1271_acx_rts_threshold(wl, (u16) value);
1619 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret);
1621 wl1271_ps_elp_sleep(wl);
1624 mutex_unlock(&wl->mutex);
1629 static void wl1271_ssid_set(struct wl1271 *wl, struct sk_buff *beacon)
1631 u8 *ptr = beacon->data +
1632 offsetof(struct ieee80211_mgmt, u.beacon.variable);
1634 /* find the location of the ssid in the beacon */
1635 while (ptr < beacon->data + beacon->len) {
1636 if (ptr[0] == WLAN_EID_SSID) {
1637 wl->ssid_len = ptr[1];
1638 memcpy(wl->ssid, ptr+2, wl->ssid_len);
1643 wl1271_error("ad-hoc beacon template has no SSID!\n");
1646 static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
1647 struct ieee80211_vif *vif,
1648 struct ieee80211_bss_conf *bss_conf,
1651 enum wl1271_cmd_ps_mode mode;
1652 struct wl1271 *wl = hw->priv;
1653 bool do_join = false;
1656 wl1271_debug(DEBUG_MAC80211, "mac80211 bss info changed");
1658 mutex_lock(&wl->mutex);
1660 ret = wl1271_ps_elp_wakeup(wl, false);
1664 if ((changed && BSS_CHANGED_BEACON_INT) &&
1665 (wl->bss_type == BSS_TYPE_IBSS)) {
1666 wl1271_debug(DEBUG_ADHOC, "ad-hoc beacon interval updated: %d",
1667 bss_conf->beacon_int);
1669 wl->beacon_int = bss_conf->beacon_int;
1673 if ((changed && BSS_CHANGED_BEACON) &&
1674 (wl->bss_type == BSS_TYPE_IBSS)) {
1675 struct sk_buff *beacon = ieee80211_beacon_get(hw, vif);
1677 wl1271_debug(DEBUG_ADHOC, "ad-hoc beacon updated");
1680 struct ieee80211_hdr *hdr;
1682 wl1271_ssid_set(wl, beacon);
1683 ret = wl1271_cmd_template_set(wl, CMD_TEMPL_BEACON,
1686 wl1271_min_rate_get(wl));
1689 dev_kfree_skb(beacon);
1693 hdr = (struct ieee80211_hdr *) beacon->data;
1694 hdr->frame_control = cpu_to_le16(
1695 IEEE80211_FTYPE_MGMT |
1696 IEEE80211_STYPE_PROBE_RESP);
1698 ret = wl1271_cmd_template_set(wl,
1699 CMD_TEMPL_PROBE_RESPONSE,
1702 wl1271_min_rate_get(wl));
1703 dev_kfree_skb(beacon);
1707 /* Need to update the SSID (for filtering etc) */
1712 if ((changed & BSS_CHANGED_BEACON_ENABLED) &&
1713 (wl->bss_type == BSS_TYPE_IBSS)) {
1714 wl1271_debug(DEBUG_ADHOC, "ad-hoc beaconing: %s",
1715 bss_conf->enable_beacon ? "enabled" : "disabled");
1717 if (bss_conf->enable_beacon)
1718 wl->set_bss_type = BSS_TYPE_IBSS;
1720 wl->set_bss_type = BSS_TYPE_STA_BSS;
1724 if (changed & BSS_CHANGED_CQM) {
1725 bool enable = false;
1726 if (bss_conf->cqm_rssi_thold)
1728 ret = wl1271_acx_rssi_snr_trigger(wl, enable,
1729 bss_conf->cqm_rssi_thold,
1730 bss_conf->cqm_rssi_hyst);
1733 wl->rssi_thold = bss_conf->cqm_rssi_thold;
1736 if ((changed & BSS_CHANGED_BSSID) &&
1738 * Now we know the correct bssid, so we send a new join command
1739 * and enable the BSSID filter
1741 memcmp(wl->bssid, bss_conf->bssid, ETH_ALEN)) {
1742 memcpy(wl->bssid, bss_conf->bssid, ETH_ALEN);
1744 ret = wl1271_cmd_build_null_data(wl);
1748 ret = wl1271_build_qos_null_data(wl);
1752 /* filter out all packets not from this BSSID */
1753 wl1271_configure_filters(wl, 0);
1755 /* Need to update the BSSID (for filtering etc) */
1759 if (changed & BSS_CHANGED_ASSOC) {
1760 if (bss_conf->assoc) {
1762 wl->aid = bss_conf->aid;
1763 set_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
1766 * use basic rates from AP, and determine lowest rate
1767 * to use with control frames.
1769 rates = bss_conf->basic_rates;
1770 wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl,
1772 wl->basic_rate = wl1271_min_rate_get(wl);
1773 ret = wl1271_acx_rate_policies(wl);
1778 * with wl1271, we don't need to update the
1779 * beacon_int and dtim_period, because the firmware
1780 * updates it by itself when the first beacon is
1781 * received after a join.
1783 ret = wl1271_cmd_build_ps_poll(wl, wl->aid);
1788 * The SSID is intentionally set to NULL here - the
1789 * firmware will set the probe request with a
1790 * broadcast SSID regardless of what we set in the
1793 ret = wl1271_cmd_build_probe_req(wl, NULL, 0,
1796 /* enable the connection monitoring feature */
1797 ret = wl1271_acx_conn_monit_params(wl, true);
1801 /* If we want to go in PSM but we're not there yet */
1802 if (test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags) &&
1803 !test_bit(WL1271_FLAG_PSM, &wl->flags)) {
1804 mode = STATION_POWER_SAVE_MODE;
1805 ret = wl1271_ps_set_mode(wl, mode, true);
1810 /* use defaults when not associated */
1811 clear_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
1814 /* revert back to minimum rates for the current band */
1815 wl1271_set_band_rate(wl);
1816 wl->basic_rate = wl1271_min_rate_get(wl);
1817 ret = wl1271_acx_rate_policies(wl);
1821 /* disable connection monitor features */
1822 ret = wl1271_acx_conn_monit_params(wl, false);
1824 /* Disable the keep-alive feature */
1825 ret = wl1271_acx_keep_alive_mode(wl, false);
1833 if (changed & BSS_CHANGED_ERP_SLOT) {
1834 if (bss_conf->use_short_slot)
1835 ret = wl1271_acx_slot(wl, SLOT_TIME_SHORT);
1837 ret = wl1271_acx_slot(wl, SLOT_TIME_LONG);
1839 wl1271_warning("Set slot time failed %d", ret);
1844 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
1845 if (bss_conf->use_short_preamble)
1846 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_SHORT);
1848 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_LONG);
1851 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
1852 if (bss_conf->use_cts_prot)
1853 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_ENABLE);
1855 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_DISABLE);
1857 wl1271_warning("Set ctsprotect failed %d", ret);
1863 ret = wl1271_join(wl);
1865 wl1271_warning("cmd join failed %d", ret);
1871 wl1271_ps_elp_sleep(wl);
1874 mutex_unlock(&wl->mutex);
1877 static int wl1271_op_conf_tx(struct ieee80211_hw *hw, u16 queue,
1878 const struct ieee80211_tx_queue_params *params)
1880 struct wl1271 *wl = hw->priv;
1884 mutex_lock(&wl->mutex);
1886 wl1271_debug(DEBUG_MAC80211, "mac80211 conf tx %d", queue);
1888 ret = wl1271_ps_elp_wakeup(wl, false);
1892 /* the txop is confed in units of 32us by the mac80211, we need us */
1893 ret = wl1271_acx_ac_cfg(wl, wl1271_tx_get_queue(queue),
1894 params->cw_min, params->cw_max,
1895 params->aifs, params->txop << 5);
1900 ps_scheme = CONF_PS_SCHEME_UPSD_TRIGGER;
1902 ps_scheme = CONF_PS_SCHEME_LEGACY;
1904 ret = wl1271_acx_tid_cfg(wl, wl1271_tx_get_queue(queue),
1905 CONF_CHANNEL_TYPE_EDCF,
1906 wl1271_tx_get_queue(queue),
1907 ps_scheme, CONF_ACK_POLICY_LEGACY, 0, 0);
1912 wl1271_ps_elp_sleep(wl);
1915 mutex_unlock(&wl->mutex);
1921 /* can't be const, mac80211 writes to this */
1922 static struct ieee80211_rate wl1271_rates[] = {
1924 .hw_value = CONF_HW_BIT_RATE_1MBPS,
1925 .hw_value_short = CONF_HW_BIT_RATE_1MBPS, },
1927 .hw_value = CONF_HW_BIT_RATE_2MBPS,
1928 .hw_value_short = CONF_HW_BIT_RATE_2MBPS,
1929 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
1931 .hw_value = CONF_HW_BIT_RATE_5_5MBPS,
1932 .hw_value_short = CONF_HW_BIT_RATE_5_5MBPS,
1933 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
1935 .hw_value = CONF_HW_BIT_RATE_11MBPS,
1936 .hw_value_short = CONF_HW_BIT_RATE_11MBPS,
1937 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
1939 .hw_value = CONF_HW_BIT_RATE_6MBPS,
1940 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
1942 .hw_value = CONF_HW_BIT_RATE_9MBPS,
1943 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
1945 .hw_value = CONF_HW_BIT_RATE_12MBPS,
1946 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
1948 .hw_value = CONF_HW_BIT_RATE_18MBPS,
1949 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
1951 .hw_value = CONF_HW_BIT_RATE_24MBPS,
1952 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
1954 .hw_value = CONF_HW_BIT_RATE_36MBPS,
1955 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
1957 .hw_value = CONF_HW_BIT_RATE_48MBPS,
1958 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
1960 .hw_value = CONF_HW_BIT_RATE_54MBPS,
1961 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
1964 /* can't be const, mac80211 writes to this */
1965 static struct ieee80211_channel wl1271_channels[] = {
1966 { .hw_value = 1, .center_freq = 2412, .max_power = 25 },
1967 { .hw_value = 2, .center_freq = 2417, .max_power = 25 },
1968 { .hw_value = 3, .center_freq = 2422, .max_power = 25 },
1969 { .hw_value = 4, .center_freq = 2427, .max_power = 25 },
1970 { .hw_value = 5, .center_freq = 2432, .max_power = 25 },
1971 { .hw_value = 6, .center_freq = 2437, .max_power = 25 },
1972 { .hw_value = 7, .center_freq = 2442, .max_power = 25 },
1973 { .hw_value = 8, .center_freq = 2447, .max_power = 25 },
1974 { .hw_value = 9, .center_freq = 2452, .max_power = 25 },
1975 { .hw_value = 10, .center_freq = 2457, .max_power = 25 },
1976 { .hw_value = 11, .center_freq = 2462, .max_power = 25 },
1977 { .hw_value = 12, .center_freq = 2467, .max_power = 25 },
1978 { .hw_value = 13, .center_freq = 2472, .max_power = 25 },
1981 /* mapping to indexes for wl1271_rates */
1982 const static u8 wl1271_rate_to_idx_2ghz[] = {
1983 /* MCS rates are used only with 11n */
1984 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS7 */
1985 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS6 */
1986 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS5 */
1987 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS4 */
1988 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS3 */
1989 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS2 */
1990 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS1 */
1991 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS0 */
1993 11, /* CONF_HW_RXTX_RATE_54 */
1994 10, /* CONF_HW_RXTX_RATE_48 */
1995 9, /* CONF_HW_RXTX_RATE_36 */
1996 8, /* CONF_HW_RXTX_RATE_24 */
1998 /* TI-specific rate */
1999 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
2001 7, /* CONF_HW_RXTX_RATE_18 */
2002 6, /* CONF_HW_RXTX_RATE_12 */
2003 3, /* CONF_HW_RXTX_RATE_11 */
2004 5, /* CONF_HW_RXTX_RATE_9 */
2005 4, /* CONF_HW_RXTX_RATE_6 */
2006 2, /* CONF_HW_RXTX_RATE_5_5 */
2007 1, /* CONF_HW_RXTX_RATE_2 */
2008 0 /* CONF_HW_RXTX_RATE_1 */
2011 /* can't be const, mac80211 writes to this */
2012 static struct ieee80211_supported_band wl1271_band_2ghz = {
2013 .channels = wl1271_channels,
2014 .n_channels = ARRAY_SIZE(wl1271_channels),
2015 .bitrates = wl1271_rates,
2016 .n_bitrates = ARRAY_SIZE(wl1271_rates),
2019 /* 5 GHz data rates for WL1273 */
2020 static struct ieee80211_rate wl1271_rates_5ghz[] = {
2022 .hw_value = CONF_HW_BIT_RATE_6MBPS,
2023 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
2025 .hw_value = CONF_HW_BIT_RATE_9MBPS,
2026 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
2028 .hw_value = CONF_HW_BIT_RATE_12MBPS,
2029 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
2031 .hw_value = CONF_HW_BIT_RATE_18MBPS,
2032 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
2034 .hw_value = CONF_HW_BIT_RATE_24MBPS,
2035 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
2037 .hw_value = CONF_HW_BIT_RATE_36MBPS,
2038 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
2040 .hw_value = CONF_HW_BIT_RATE_48MBPS,
2041 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
2043 .hw_value = CONF_HW_BIT_RATE_54MBPS,
2044 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
2047 /* 5 GHz band channels for WL1273 */
2048 static struct ieee80211_channel wl1271_channels_5ghz[] = {
2049 { .hw_value = 183, .center_freq = 4915},
2050 { .hw_value = 184, .center_freq = 4920},
2051 { .hw_value = 185, .center_freq = 4925},
2052 { .hw_value = 187, .center_freq = 4935},
2053 { .hw_value = 188, .center_freq = 4940},
2054 { .hw_value = 189, .center_freq = 4945},
2055 { .hw_value = 192, .center_freq = 4960},
2056 { .hw_value = 196, .center_freq = 4980},
2057 { .hw_value = 7, .center_freq = 5035},
2058 { .hw_value = 8, .center_freq = 5040},
2059 { .hw_value = 9, .center_freq = 5045},
2060 { .hw_value = 11, .center_freq = 5055},
2061 { .hw_value = 12, .center_freq = 5060},
2062 { .hw_value = 16, .center_freq = 5080},
2063 { .hw_value = 34, .center_freq = 5170},
2064 { .hw_value = 36, .center_freq = 5180},
2065 { .hw_value = 38, .center_freq = 5190},
2066 { .hw_value = 40, .center_freq = 5200},
2067 { .hw_value = 42, .center_freq = 5210},
2068 { .hw_value = 44, .center_freq = 5220},
2069 { .hw_value = 46, .center_freq = 5230},
2070 { .hw_value = 48, .center_freq = 5240},
2071 { .hw_value = 52, .center_freq = 5260},
2072 { .hw_value = 56, .center_freq = 5280},
2073 { .hw_value = 60, .center_freq = 5300},
2074 { .hw_value = 64, .center_freq = 5320},
2075 { .hw_value = 100, .center_freq = 5500},
2076 { .hw_value = 104, .center_freq = 5520},
2077 { .hw_value = 108, .center_freq = 5540},
2078 { .hw_value = 112, .center_freq = 5560},
2079 { .hw_value = 116, .center_freq = 5580},
2080 { .hw_value = 120, .center_freq = 5600},
2081 { .hw_value = 124, .center_freq = 5620},
2082 { .hw_value = 128, .center_freq = 5640},
2083 { .hw_value = 132, .center_freq = 5660},
2084 { .hw_value = 136, .center_freq = 5680},
2085 { .hw_value = 140, .center_freq = 5700},
2086 { .hw_value = 149, .center_freq = 5745},
2087 { .hw_value = 153, .center_freq = 5765},
2088 { .hw_value = 157, .center_freq = 5785},
2089 { .hw_value = 161, .center_freq = 5805},
2090 { .hw_value = 165, .center_freq = 5825},
2093 /* mapping to indexes for wl1271_rates_5ghz */
2094 const static u8 wl1271_rate_to_idx_5ghz[] = {
2095 /* MCS rates are used only with 11n */
2096 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS7 */
2097 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS6 */
2098 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS5 */
2099 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS4 */
2100 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS3 */
2101 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS2 */
2102 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS1 */
2103 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS0 */
2105 7, /* CONF_HW_RXTX_RATE_54 */
2106 6, /* CONF_HW_RXTX_RATE_48 */
2107 5, /* CONF_HW_RXTX_RATE_36 */
2108 4, /* CONF_HW_RXTX_RATE_24 */
2110 /* TI-specific rate */
2111 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
2113 3, /* CONF_HW_RXTX_RATE_18 */
2114 2, /* CONF_HW_RXTX_RATE_12 */
2115 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_11 */
2116 1, /* CONF_HW_RXTX_RATE_9 */
2117 0, /* CONF_HW_RXTX_RATE_6 */
2118 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_5_5 */
2119 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_2 */
2120 CONF_HW_RXTX_RATE_UNSUPPORTED /* CONF_HW_RXTX_RATE_1 */
2123 static struct ieee80211_supported_band wl1271_band_5ghz = {
2124 .channels = wl1271_channels_5ghz,
2125 .n_channels = ARRAY_SIZE(wl1271_channels_5ghz),
2126 .bitrates = wl1271_rates_5ghz,
2127 .n_bitrates = ARRAY_SIZE(wl1271_rates_5ghz),
2130 const static u8 *wl1271_band_rate_to_idx[] = {
2131 [IEEE80211_BAND_2GHZ] = wl1271_rate_to_idx_2ghz,
2132 [IEEE80211_BAND_5GHZ] = wl1271_rate_to_idx_5ghz
2135 static const struct ieee80211_ops wl1271_ops = {
2136 .start = wl1271_op_start,
2137 .stop = wl1271_op_stop,
2138 .add_interface = wl1271_op_add_interface,
2139 .remove_interface = wl1271_op_remove_interface,
2140 .config = wl1271_op_config,
2141 .prepare_multicast = wl1271_op_prepare_multicast,
2142 .configure_filter = wl1271_op_configure_filter,
2144 .set_key = wl1271_op_set_key,
2145 .hw_scan = wl1271_op_hw_scan,
2146 .bss_info_changed = wl1271_op_bss_info_changed,
2147 .set_rts_threshold = wl1271_op_set_rts_threshold,
2148 .conf_tx = wl1271_op_conf_tx,
2149 CFG80211_TESTMODE_CMD(wl1271_tm_cmd)
2153 u8 wl1271_rate_to_idx(struct wl1271 *wl, int rate)
2157 BUG_ON(wl->band >= sizeof(wl1271_band_rate_to_idx)/sizeof(u8 *));
2159 if (unlikely(rate >= CONF_HW_RXTX_RATE_MAX)) {
2160 wl1271_error("Illegal RX rate from HW: %d", rate);
2164 idx = wl1271_band_rate_to_idx[wl->band][rate];
2165 if (unlikely(idx == CONF_HW_RXTX_RATE_UNSUPPORTED)) {
2166 wl1271_error("Unsupported RX rate from HW: %d", rate);
2173 static ssize_t wl1271_sysfs_show_bt_coex_state(struct device *dev,
2174 struct device_attribute *attr,
2177 struct wl1271 *wl = dev_get_drvdata(dev);
2180 /* FIXME: what's the maximum length of buf? page size?*/
2183 mutex_lock(&wl->mutex);
2184 len = snprintf(buf, len, "%d\n\n0 - off\n1 - on\n",
2186 mutex_unlock(&wl->mutex);
2192 static ssize_t wl1271_sysfs_store_bt_coex_state(struct device *dev,
2193 struct device_attribute *attr,
2194 const char *buf, size_t count)
2196 struct wl1271 *wl = dev_get_drvdata(dev);
2200 ret = strict_strtoul(buf, 10, &res);
2203 wl1271_warning("incorrect value written to bt_coex_mode");
2207 mutex_lock(&wl->mutex);
2211 if (res == wl->sg_enabled)
2214 wl->sg_enabled = res;
2216 if (wl->state == WL1271_STATE_OFF)
2219 ret = wl1271_ps_elp_wakeup(wl, false);
2223 wl1271_acx_sg_enable(wl, wl->sg_enabled);
2224 wl1271_ps_elp_sleep(wl);
2227 mutex_unlock(&wl->mutex);
2231 static DEVICE_ATTR(bt_coex_state, S_IRUGO | S_IWUSR,
2232 wl1271_sysfs_show_bt_coex_state,
2233 wl1271_sysfs_store_bt_coex_state);
2235 int wl1271_register_hw(struct wl1271 *wl)
2239 if (wl->mac80211_registered)
2242 SET_IEEE80211_PERM_ADDR(wl->hw, wl->mac_addr);
2244 ret = ieee80211_register_hw(wl->hw);
2246 wl1271_error("unable to register mac80211 hw: %d", ret);
2250 wl->mac80211_registered = true;
2252 wl1271_notice("loaded");
2256 EXPORT_SYMBOL_GPL(wl1271_register_hw);
2258 void wl1271_unregister_hw(struct wl1271 *wl)
2260 ieee80211_unregister_hw(wl->hw);
2261 wl->mac80211_registered = false;
2264 EXPORT_SYMBOL_GPL(wl1271_unregister_hw);
2266 int wl1271_init_ieee80211(struct wl1271 *wl)
2268 /* The tx descriptor buffer and the TKIP space. */
2269 wl->hw->extra_tx_headroom = WL1271_TKIP_IV_SPACE +
2270 sizeof(struct wl1271_tx_hw_descr);
2273 /* FIXME: find a proper value */
2274 wl->hw->channel_change_time = 10000;
2275 wl->hw->max_listen_interval = wl->conf.conn.max_listen_interval;
2277 wl->hw->flags = IEEE80211_HW_SIGNAL_DBM |
2278 IEEE80211_HW_NOISE_DBM |
2279 IEEE80211_HW_BEACON_FILTER |
2280 IEEE80211_HW_SUPPORTS_PS |
2281 IEEE80211_HW_SUPPORTS_UAPSD |
2282 IEEE80211_HW_HAS_RATE_CONTROL |
2283 IEEE80211_HW_CONNECTION_MONITOR |
2284 IEEE80211_HW_SUPPORTS_CQM_RSSI;
2286 wl->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
2287 BIT(NL80211_IFTYPE_ADHOC);
2288 wl->hw->wiphy->max_scan_ssids = 1;
2289 wl->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = &wl1271_band_2ghz;
2291 if (wl1271_11a_enabled())
2292 wl->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = &wl1271_band_5ghz;
2295 wl->hw->max_rates = 1;
2297 SET_IEEE80211_DEV(wl->hw, wl1271_wl_to_dev(wl));
2301 EXPORT_SYMBOL_GPL(wl1271_init_ieee80211);
2303 #define WL1271_DEFAULT_CHANNEL 0
2305 struct ieee80211_hw *wl1271_alloc_hw(void)
2307 struct ieee80211_hw *hw;
2308 struct platform_device *plat_dev = NULL;
2312 hw = ieee80211_alloc_hw(sizeof(*wl), &wl1271_ops);
2314 wl1271_error("could not alloc ieee80211_hw");
2319 plat_dev = kmalloc(sizeof(wl1271_device), GFP_KERNEL);
2321 wl1271_error("could not allocate platform_device");
2323 goto err_plat_alloc;
2326 memcpy(plat_dev, &wl1271_device, sizeof(wl1271_device));
2329 memset(wl, 0, sizeof(*wl));
2331 INIT_LIST_HEAD(&wl->list);
2334 wl->plat_dev = plat_dev;
2336 skb_queue_head_init(&wl->tx_queue);
2338 INIT_DELAYED_WORK(&wl->elp_work, wl1271_elp_work);
2339 wl->channel = WL1271_DEFAULT_CHANNEL;
2340 wl->beacon_int = WL1271_DEFAULT_BEACON_INT;
2341 wl->default_key = 0;
2343 wl->rx_config = WL1271_DEFAULT_RX_CONFIG;
2344 wl->rx_filter = WL1271_DEFAULT_RX_FILTER;
2345 wl->psm_entry_retry = 0;
2346 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
2347 wl->basic_rate_set = CONF_TX_RATE_MASK_BASIC;
2348 wl->basic_rate = CONF_TX_RATE_MASK_BASIC;
2349 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
2350 wl->sta_rate_set = 0;
2351 wl->band = IEEE80211_BAND_2GHZ;
2354 wl->sg_enabled = true;
2356 for (i = 0; i < ACX_TX_DESCRIPTORS; i++)
2357 wl->tx_frames[i] = NULL;
2359 spin_lock_init(&wl->wl_lock);
2361 wl->state = WL1271_STATE_OFF;
2362 mutex_init(&wl->mutex);
2364 /* Apply default driver configuration. */
2365 wl1271_conf_init(wl);
2367 wl1271_debugfs_init(wl);
2369 /* Register platform device */
2370 ret = platform_device_register(wl->plat_dev);
2372 wl1271_error("couldn't register platform device");
2375 dev_set_drvdata(&wl->plat_dev->dev, wl);
2377 /* Create sysfs file to control bt coex state */
2378 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
2380 wl1271_error("failed to create sysfs file bt_coex_state");
2387 platform_device_unregister(wl->plat_dev);
2390 wl1271_debugfs_exit(wl);
2394 ieee80211_free_hw(hw);
2398 return ERR_PTR(ret);
2400 EXPORT_SYMBOL_GPL(wl1271_alloc_hw);
2402 int wl1271_free_hw(struct wl1271 *wl)
2404 platform_device_unregister(wl->plat_dev);
2405 kfree(wl->plat_dev);
2407 wl1271_debugfs_exit(wl);
2414 kfree(wl->fw_status);
2415 kfree(wl->tx_res_if);
2417 ieee80211_free_hw(wl->hw);
2421 EXPORT_SYMBOL_GPL(wl1271_free_hw);
2423 MODULE_LICENSE("GPL");
2424 MODULE_AUTHOR("Luciano Coelho <luciano.coelho@nokia.com>");
2425 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");