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,
160 .channel_type = CONF_CHANNEL_TYPE_DCF,
161 .tsid = CONF_TX_AC_BE,
162 .ps_scheme = CONF_PS_SCHEME_LEGACY,
163 .ack_policy = CONF_ACK_POLICY_LEGACY,
168 .channel_type = CONF_CHANNEL_TYPE_DCF,
169 .tsid = CONF_TX_AC_BE,
170 .ps_scheme = CONF_PS_SCHEME_LEGACY,
171 .ack_policy = CONF_ACK_POLICY_LEGACY,
176 .channel_type = CONF_CHANNEL_TYPE_DCF,
177 .tsid = CONF_TX_AC_BE,
178 .ps_scheme = CONF_PS_SCHEME_LEGACY,
179 .ack_policy = CONF_ACK_POLICY_LEGACY,
184 .channel_type = CONF_CHANNEL_TYPE_DCF,
185 .tsid = CONF_TX_AC_BE,
186 .ps_scheme = CONF_PS_SCHEME_LEGACY,
187 .ack_policy = CONF_ACK_POLICY_LEGACY,
192 .channel_type = CONF_CHANNEL_TYPE_DCF,
193 .tsid = CONF_TX_AC_BE,
194 .ps_scheme = CONF_PS_SCHEME_LEGACY,
195 .ack_policy = CONF_ACK_POLICY_LEGACY,
200 .channel_type = CONF_CHANNEL_TYPE_DCF,
201 .tsid = CONF_TX_AC_BE,
202 .ps_scheme = CONF_PS_SCHEME_LEGACY,
203 .ack_policy = CONF_ACK_POLICY_LEGACY,
208 .channel_type = CONF_CHANNEL_TYPE_DCF,
209 .tsid = CONF_TX_AC_BE,
210 .ps_scheme = CONF_PS_SCHEME_LEGACY,
211 .ack_policy = CONF_ACK_POLICY_LEGACY,
215 .frag_threshold = IEEE80211_MAX_FRAG_THRESHOLD,
216 .tx_compl_timeout = 700,
217 .tx_compl_threshold = 4,
218 .basic_rate = CONF_HW_BIT_RATE_1MBPS,
219 .basic_rate_5 = CONF_HW_BIT_RATE_6MBPS,
222 .wake_up_event = CONF_WAKE_UP_EVENT_DTIM,
223 .listen_interval = 1,
224 .bcn_filt_mode = CONF_BCN_FILT_MODE_ENABLED,
225 .bcn_filt_ie_count = 1,
228 .ie = WLAN_EID_CHANNEL_SWITCH,
229 .rule = CONF_BCN_RULE_PASS_ON_APPEARANCE,
232 .synch_fail_thold = 10,
233 .bss_lose_timeout = 100,
234 .beacon_rx_timeout = 10000,
235 .broadcast_timeout = 20000,
236 .rx_broadcast_in_ps = 1,
237 .ps_poll_threshold = 10,
238 .ps_poll_recovery_period = 700,
239 .bet_enable = CONF_BET_MODE_ENABLE,
240 .bet_max_consecutive = 10,
241 .psm_entry_retries = 3,
242 .keep_alive_interval = 55000,
243 .max_listen_interval = 20,
250 .host_clk_settling_time = 5000,
251 .host_fast_wakeup_support = false
254 /* FIXME: due to firmware bug, must use value 1 for now */
256 .avg_weight_rssi_beacon = 20,
257 .avg_weight_rssi_data = 10,
258 .avg_weight_snr_beacon = 20,
259 .avg_weight_snr_data = 10
263 static void wl1271_device_release(struct device *dev)
268 static struct platform_device wl1271_device = {
272 /* device model insists to have a release function */
274 .release = wl1271_device_release,
278 static LIST_HEAD(wl_list);
280 static void wl1271_conf_init(struct wl1271 *wl)
284 * This function applies the default configuration to the driver. This
285 * function is invoked upon driver load (spi probe.)
287 * The configuration is stored in a run-time structure in order to
288 * facilitate for run-time adjustment of any of the parameters. Making
289 * changes to the configuration structure will apply the new values on
290 * the next interface up (wl1271_op_start.)
293 /* apply driver default configuration */
294 memcpy(&wl->conf, &default_conf, sizeof(default_conf));
298 static int wl1271_plt_init(struct wl1271 *wl)
300 struct conf_tx_ac_category *conf_ac;
301 struct conf_tx_tid *conf_tid;
304 ret = wl1271_cmd_general_parms(wl);
308 ret = wl1271_cmd_radio_parms(wl);
312 ret = wl1271_init_templates_config(wl);
316 ret = wl1271_acx_init_mem_config(wl);
320 /* PHY layer config */
321 ret = wl1271_init_phy_config(wl);
323 goto out_free_memmap;
325 ret = wl1271_acx_dco_itrim_params(wl);
327 goto out_free_memmap;
329 /* Initialize connection monitoring thresholds */
330 ret = wl1271_acx_conn_monit_params(wl, false);
332 goto out_free_memmap;
334 /* Bluetooth WLAN coexistence */
335 ret = wl1271_init_pta(wl);
337 goto out_free_memmap;
339 /* Energy detection */
340 ret = wl1271_init_energy_detection(wl);
342 goto out_free_memmap;
344 /* Default fragmentation threshold */
345 ret = wl1271_acx_frag_threshold(wl);
347 goto out_free_memmap;
349 /* Default TID configuration */
350 for (i = 0; i < wl->conf.tx.tid_conf_count; i++) {
351 conf_tid = &wl->conf.tx.tid_conf[i];
352 ret = wl1271_acx_tid_cfg(wl, conf_tid->queue_id,
353 conf_tid->channel_type,
356 conf_tid->ack_policy,
357 conf_tid->apsd_conf[0],
358 conf_tid->apsd_conf[1]);
360 goto out_free_memmap;
363 /* Default AC configuration */
364 for (i = 0; i < wl->conf.tx.ac_conf_count; i++) {
365 conf_ac = &wl->conf.tx.ac_conf[i];
366 ret = wl1271_acx_ac_cfg(wl, conf_ac->ac, conf_ac->cw_min,
367 conf_ac->cw_max, conf_ac->aifsn,
368 conf_ac->tx_op_limit);
370 goto out_free_memmap;
373 /* Enable data path */
374 ret = wl1271_cmd_data_path(wl, 1);
376 goto out_free_memmap;
378 /* Configure for CAM power saving (ie. always active) */
379 ret = wl1271_acx_sleep_auth(wl, WL1271_PSM_CAM);
381 goto out_free_memmap;
384 ret = wl1271_acx_pm_config(wl);
386 goto out_free_memmap;
391 kfree(wl->target_mem_map);
392 wl->target_mem_map = NULL;
397 static void wl1271_fw_status(struct wl1271 *wl,
398 struct wl1271_fw_status *status)
404 wl1271_raw_read(wl, FW_STATUS_ADDR, status, sizeof(*status), false);
406 wl1271_debug(DEBUG_IRQ, "intr: 0x%x (fw_rx_counter = %d, "
407 "drv_rx_counter = %d, tx_results_counter = %d)",
409 status->fw_rx_counter,
410 status->drv_rx_counter,
411 status->tx_results_counter);
413 /* update number of available TX blocks */
414 for (i = 0; i < NUM_TX_QUEUES; i++) {
415 u32 cnt = le32_to_cpu(status->tx_released_blks[i]) -
416 wl->tx_blocks_freed[i];
418 wl->tx_blocks_freed[i] =
419 le32_to_cpu(status->tx_released_blks[i]);
420 wl->tx_blocks_available += cnt;
424 /* if more blocks are available now, schedule some tx work */
425 if (total && !skb_queue_empty(&wl->tx_queue))
426 ieee80211_queue_work(wl->hw, &wl->tx_work);
428 /* update the host-chipset time offset */
430 wl->time_offset = (timespec_to_ns(&ts) >> 10) -
431 (s64)le32_to_cpu(status->fw_localtime);
434 #define WL1271_IRQ_MAX_LOOPS 10
436 static void wl1271_irq_work(struct work_struct *work)
440 int loopcount = WL1271_IRQ_MAX_LOOPS;
443 container_of(work, struct wl1271, irq_work);
445 mutex_lock(&wl->mutex);
447 wl1271_debug(DEBUG_IRQ, "IRQ work");
449 if (unlikely(wl->state == WL1271_STATE_OFF))
452 ret = wl1271_ps_elp_wakeup(wl, true);
456 spin_lock_irqsave(&wl->wl_lock, flags);
457 while (test_bit(WL1271_FLAG_IRQ_PENDING, &wl->flags) && loopcount) {
458 clear_bit(WL1271_FLAG_IRQ_PENDING, &wl->flags);
459 spin_unlock_irqrestore(&wl->wl_lock, flags);
462 wl1271_fw_status(wl, wl->fw_status);
463 intr = le32_to_cpu(wl->fw_status->intr);
465 wl1271_debug(DEBUG_IRQ, "Zero interrupt received.");
466 spin_lock_irqsave(&wl->wl_lock, flags);
470 intr &= WL1271_INTR_MASK;
472 if (intr & WL1271_ACX_INTR_DATA) {
473 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_DATA");
475 /* check for tx results */
476 if (wl->fw_status->tx_results_counter !=
477 (wl->tx_results_count & 0xff))
478 wl1271_tx_complete(wl);
480 wl1271_rx(wl, wl->fw_status);
483 if (intr & WL1271_ACX_INTR_EVENT_A) {
484 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_A");
485 wl1271_event_handle(wl, 0);
488 if (intr & WL1271_ACX_INTR_EVENT_B) {
489 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_B");
490 wl1271_event_handle(wl, 1);
493 if (intr & WL1271_ACX_INTR_INIT_COMPLETE)
494 wl1271_debug(DEBUG_IRQ,
495 "WL1271_ACX_INTR_INIT_COMPLETE");
497 if (intr & WL1271_ACX_INTR_HW_AVAILABLE)
498 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_HW_AVAILABLE");
500 spin_lock_irqsave(&wl->wl_lock, flags);
503 if (test_bit(WL1271_FLAG_IRQ_PENDING, &wl->flags))
504 ieee80211_queue_work(wl->hw, &wl->irq_work);
506 clear_bit(WL1271_FLAG_IRQ_RUNNING, &wl->flags);
507 spin_unlock_irqrestore(&wl->wl_lock, flags);
509 wl1271_ps_elp_sleep(wl);
512 mutex_unlock(&wl->mutex);
515 static int wl1271_fetch_firmware(struct wl1271 *wl)
517 const struct firmware *fw;
520 ret = request_firmware(&fw, WL1271_FW_NAME, wl1271_wl_to_dev(wl));
523 wl1271_error("could not get firmware: %d", ret);
528 wl1271_error("firmware size is not multiple of 32 bits: %zu",
534 wl->fw_len = fw->size;
535 wl->fw = vmalloc(wl->fw_len);
538 wl1271_error("could not allocate memory for the firmware");
543 memcpy(wl->fw, fw->data, wl->fw_len);
548 release_firmware(fw);
553 static int wl1271_fetch_nvs(struct wl1271 *wl)
555 const struct firmware *fw;
558 ret = request_firmware(&fw, WL1271_NVS_NAME, wl1271_wl_to_dev(wl));
561 wl1271_error("could not get nvs file: %d", ret);
566 * FIXME: the LEGACY NVS image support (NVS's missing the 5GHz band
567 * configurations) can be removed when those NVS files stop floating
570 if (fw->size != sizeof(struct wl1271_nvs_file) &&
571 (fw->size != WL1271_INI_LEGACY_NVS_FILE_SIZE ||
572 wl1271_11a_enabled())) {
573 wl1271_error("nvs size is not as expected: %zu != %zu",
574 fw->size, sizeof(struct wl1271_nvs_file));
579 wl->nvs = kmemdup(fw->data, sizeof(struct wl1271_nvs_file), GFP_KERNEL);
582 wl1271_error("could not allocate memory for the nvs file");
588 release_firmware(fw);
593 static void wl1271_fw_wakeup(struct wl1271 *wl)
597 elp_reg = ELPCTRL_WAKE_UP;
598 wl1271_raw_write32(wl, HW_ACCESS_ELP_CTRL_REG_ADDR, elp_reg);
601 static int wl1271_setup(struct wl1271 *wl)
603 wl->fw_status = kmalloc(sizeof(*wl->fw_status), GFP_KERNEL);
607 wl->tx_res_if = kmalloc(sizeof(*wl->tx_res_if), GFP_KERNEL);
608 if (!wl->tx_res_if) {
609 kfree(wl->fw_status);
613 INIT_WORK(&wl->irq_work, wl1271_irq_work);
614 INIT_WORK(&wl->tx_work, wl1271_tx_work);
618 static int wl1271_chip_wakeup(struct wl1271 *wl)
620 struct wl1271_partition_set partition;
623 msleep(WL1271_PRE_POWER_ON_SLEEP);
625 msleep(WL1271_POWER_ON_SLEEP);
629 /* We don't need a real memory partition here, because we only want
630 * to use the registers at this point. */
631 memset(&partition, 0, sizeof(partition));
632 partition.reg.start = REGISTERS_BASE;
633 partition.reg.size = REGISTERS_DOWN_SIZE;
634 wl1271_set_partition(wl, &partition);
636 /* ELP module wake up */
637 wl1271_fw_wakeup(wl);
639 /* whal_FwCtrl_BootSm() */
641 /* 0. read chip id from CHIP_ID */
642 wl->chip.id = wl1271_read32(wl, CHIP_ID_B);
644 /* 1. check if chip id is valid */
646 switch (wl->chip.id) {
647 case CHIP_ID_1271_PG10:
648 wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
651 ret = wl1271_setup(wl);
655 case CHIP_ID_1271_PG20:
656 wl1271_debug(DEBUG_BOOT, "chip id 0x%x (1271 PG20)",
659 ret = wl1271_setup(wl);
664 wl1271_warning("unsupported chip id: 0x%x", wl->chip.id);
669 if (wl->fw == NULL) {
670 ret = wl1271_fetch_firmware(wl);
675 /* No NVS from netlink, try to get it from the filesystem */
676 if (wl->nvs == NULL) {
677 ret = wl1271_fetch_nvs(wl);
686 int wl1271_plt_start(struct wl1271 *wl)
688 int retries = WL1271_BOOT_RETRIES;
691 mutex_lock(&wl->mutex);
693 wl1271_notice("power up");
695 if (wl->state != WL1271_STATE_OFF) {
696 wl1271_error("cannot go into PLT state because not "
697 "in off state: %d", wl->state);
704 ret = wl1271_chip_wakeup(wl);
708 ret = wl1271_boot(wl);
712 ret = wl1271_plt_init(wl);
716 wl->state = WL1271_STATE_PLT;
717 wl1271_notice("firmware booted in PLT mode (%s)",
722 wl1271_disable_interrupts(wl);
723 mutex_unlock(&wl->mutex);
724 /* Unlocking the mutex in the middle of handling is
725 inherently unsafe. In this case we deem it safe to do,
726 because we need to let any possibly pending IRQ out of
727 the system (and while we are WL1271_STATE_OFF the IRQ
728 work function will not do anything.) Also, any other
729 possible concurrent operations will fail due to the
730 current state, hence the wl1271 struct should be safe. */
731 cancel_work_sync(&wl->irq_work);
732 mutex_lock(&wl->mutex);
734 wl1271_power_off(wl);
737 wl1271_error("firmware boot in PLT mode failed despite %d retries",
738 WL1271_BOOT_RETRIES);
740 mutex_unlock(&wl->mutex);
745 int wl1271_plt_stop(struct wl1271 *wl)
749 mutex_lock(&wl->mutex);
751 wl1271_notice("power down");
753 if (wl->state != WL1271_STATE_PLT) {
754 wl1271_error("cannot power down because not in PLT "
755 "state: %d", wl->state);
760 wl1271_disable_interrupts(wl);
761 wl1271_power_off(wl);
763 wl->state = WL1271_STATE_OFF;
767 mutex_unlock(&wl->mutex);
773 static int wl1271_op_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
775 struct wl1271 *wl = hw->priv;
776 struct ieee80211_conf *conf = &hw->conf;
777 struct ieee80211_tx_info *txinfo = IEEE80211_SKB_CB(skb);
778 struct ieee80211_sta *sta = txinfo->control.sta;
781 /* peek into the rates configured in the STA entry */
782 spin_lock_irqsave(&wl->wl_lock, flags);
783 if (sta && sta->supp_rates[conf->channel->band] != wl->sta_rate_set) {
784 wl->sta_rate_set = sta->supp_rates[conf->channel->band];
785 set_bit(WL1271_FLAG_STA_RATES_CHANGED, &wl->flags);
787 spin_unlock_irqrestore(&wl->wl_lock, flags);
789 /* queue the packet */
790 skb_queue_tail(&wl->tx_queue, skb);
793 * The chip specific setup must run before the first TX packet -
794 * before that, the tx_work will not be initialized!
797 ieee80211_queue_work(wl->hw, &wl->tx_work);
800 * The workqueue is slow to process the tx_queue and we need stop
801 * the queue here, otherwise the queue will get too long.
803 if (skb_queue_len(&wl->tx_queue) >= WL1271_TX_QUEUE_HIGH_WATERMARK) {
804 wl1271_debug(DEBUG_TX, "op_tx: stopping queues");
806 spin_lock_irqsave(&wl->wl_lock, flags);
807 ieee80211_stop_queues(wl->hw);
808 set_bit(WL1271_FLAG_TX_QUEUE_STOPPED, &wl->flags);
809 spin_unlock_irqrestore(&wl->wl_lock, flags);
815 static int wl1271_op_start(struct ieee80211_hw *hw)
817 wl1271_debug(DEBUG_MAC80211, "mac80211 start");
820 * We have to delay the booting of the hardware because
821 * we need to know the local MAC address before downloading and
822 * initializing the firmware. The MAC address cannot be changed
823 * after boot, and without the proper MAC address, the firmware
824 * will not function properly.
826 * The MAC address is first known when the corresponding interface
827 * is added. That is where we will initialize the hardware.
833 static void wl1271_op_stop(struct ieee80211_hw *hw)
835 wl1271_debug(DEBUG_MAC80211, "mac80211 stop");
838 static int wl1271_op_add_interface(struct ieee80211_hw *hw,
839 struct ieee80211_vif *vif)
841 struct wl1271 *wl = hw->priv;
842 struct wiphy *wiphy = hw->wiphy;
843 int retries = WL1271_BOOT_RETRIES;
846 wl1271_debug(DEBUG_MAC80211, "mac80211 add interface type %d mac %pM",
847 vif->type, vif->addr);
849 mutex_lock(&wl->mutex);
858 case NL80211_IFTYPE_STATION:
859 wl->bss_type = BSS_TYPE_STA_BSS;
860 wl->set_bss_type = BSS_TYPE_STA_BSS;
862 case NL80211_IFTYPE_ADHOC:
863 wl->bss_type = BSS_TYPE_IBSS;
864 wl->set_bss_type = BSS_TYPE_STA_BSS;
871 memcpy(wl->mac_addr, vif->addr, ETH_ALEN);
873 if (wl->state != WL1271_STATE_OFF) {
874 wl1271_error("cannot start because not in off state: %d",
882 ret = wl1271_chip_wakeup(wl);
886 ret = wl1271_boot(wl);
890 ret = wl1271_hw_init(wl);
894 wl->state = WL1271_STATE_ON;
895 wl1271_info("firmware booted (%s)", wl->chip.fw_ver);
897 /* update hw/fw version info in wiphy struct */
898 wiphy->hw_version = wl->chip.id;
899 strncpy(wiphy->fw_version, wl->chip.fw_ver,
900 sizeof(wiphy->fw_version));
905 wl1271_disable_interrupts(wl);
906 mutex_unlock(&wl->mutex);
907 /* Unlocking the mutex in the middle of handling is
908 inherently unsafe. In this case we deem it safe to do,
909 because we need to let any possibly pending IRQ out of
910 the system (and while we are WL1271_STATE_OFF the IRQ
911 work function will not do anything.) Also, any other
912 possible concurrent operations will fail due to the
913 current state, hence the wl1271 struct should be safe. */
914 cancel_work_sync(&wl->irq_work);
915 mutex_lock(&wl->mutex);
917 wl1271_power_off(wl);
920 wl1271_error("firmware boot failed despite %d retries",
921 WL1271_BOOT_RETRIES);
923 mutex_unlock(&wl->mutex);
926 list_add(&wl->list, &wl_list);
931 static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
932 struct ieee80211_vif *vif)
934 struct wl1271 *wl = hw->priv;
937 mutex_lock(&wl->mutex);
938 wl1271_debug(DEBUG_MAC80211, "mac80211 remove interface");
944 WARN_ON(wl->state != WL1271_STATE_ON);
946 /* enable dyn ps just in case (if left on due to fw crash etc) */
947 if (wl->bss_type == BSS_TYPE_STA_BSS)
948 ieee80211_enable_dyn_ps(wl->vif);
950 if (wl->scan.state != WL1271_SCAN_STATE_IDLE) {
951 ieee80211_scan_completed(wl->hw, true);
952 wl->scan.state = WL1271_SCAN_STATE_IDLE;
953 kfree(wl->scan.scanned_ch);
954 wl->scan.scanned_ch = NULL;
957 wl->state = WL1271_STATE_OFF;
959 wl1271_disable_interrupts(wl);
961 mutex_unlock(&wl->mutex);
963 cancel_work_sync(&wl->irq_work);
964 cancel_work_sync(&wl->tx_work);
965 cancel_delayed_work_sync(&wl->pspoll_work);
967 mutex_lock(&wl->mutex);
969 /* let's notify MAC80211 about the remaining pending TX frames */
971 wl1271_power_off(wl);
973 memset(wl->bssid, 0, ETH_ALEN);
974 memset(wl->ssid, 0, IW_ESSID_MAX_SIZE + 1);
976 wl->bss_type = MAX_BSS_TYPE;
977 wl->set_bss_type = MAX_BSS_TYPE;
978 wl->band = IEEE80211_BAND_2GHZ;
981 wl->psm_entry_retry = 0;
982 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
983 wl->tx_blocks_available = 0;
984 wl->tx_results_count = 0;
985 wl->tx_packets_count = 0;
986 wl->tx_security_last_seq = 0;
987 wl->tx_security_seq = 0;
989 wl->session_counter = 0;
990 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
991 wl->sta_rate_set = 0;
996 for (i = 0; i < NUM_TX_QUEUES; i++)
997 wl->tx_blocks_freed[i] = 0;
999 wl1271_debugfs_reset(wl);
1001 kfree(wl->fw_status);
1002 wl->fw_status = NULL;
1003 kfree(wl->tx_res_if);
1004 wl->tx_res_if = NULL;
1005 kfree(wl->target_mem_map);
1006 wl->target_mem_map = NULL;
1008 mutex_unlock(&wl->mutex);
1011 static void wl1271_configure_filters(struct wl1271 *wl, unsigned int filters)
1013 wl->rx_config = WL1271_DEFAULT_RX_CONFIG;
1014 wl->rx_filter = WL1271_DEFAULT_RX_FILTER;
1016 /* combine requested filters with current filter config */
1017 filters = wl->filters | filters;
1019 wl1271_debug(DEBUG_FILTERS, "RX filters set: ");
1021 if (filters & FIF_PROMISC_IN_BSS) {
1022 wl1271_debug(DEBUG_FILTERS, " - FIF_PROMISC_IN_BSS");
1023 wl->rx_config &= ~CFG_UNI_FILTER_EN;
1024 wl->rx_config |= CFG_BSSID_FILTER_EN;
1026 if (filters & FIF_BCN_PRBRESP_PROMISC) {
1027 wl1271_debug(DEBUG_FILTERS, " - FIF_BCN_PRBRESP_PROMISC");
1028 wl->rx_config &= ~CFG_BSSID_FILTER_EN;
1029 wl->rx_config &= ~CFG_SSID_FILTER_EN;
1031 if (filters & FIF_OTHER_BSS) {
1032 wl1271_debug(DEBUG_FILTERS, " - FIF_OTHER_BSS");
1033 wl->rx_config &= ~CFG_BSSID_FILTER_EN;
1035 if (filters & FIF_CONTROL) {
1036 wl1271_debug(DEBUG_FILTERS, " - FIF_CONTROL");
1037 wl->rx_filter |= CFG_RX_CTL_EN;
1039 if (filters & FIF_FCSFAIL) {
1040 wl1271_debug(DEBUG_FILTERS, " - FIF_FCSFAIL");
1041 wl->rx_filter |= CFG_RX_FCS_ERROR;
1045 static int wl1271_dummy_join(struct wl1271 *wl)
1048 /* we need to use a dummy BSSID for now */
1049 static const u8 dummy_bssid[ETH_ALEN] = { 0x0b, 0xad, 0xde,
1052 memcpy(wl->bssid, dummy_bssid, ETH_ALEN);
1054 /* pass through frames from all BSS */
1055 wl1271_configure_filters(wl, FIF_OTHER_BSS);
1057 ret = wl1271_cmd_join(wl, wl->set_bss_type);
1061 set_bit(WL1271_FLAG_JOINED, &wl->flags);
1067 static int wl1271_join(struct wl1271 *wl, bool set_assoc)
1072 * One of the side effects of the JOIN command is that is clears
1073 * WPA/WPA2 keys from the chipset. Performing a JOIN while associated
1074 * to a WPA/WPA2 access point will therefore kill the data-path.
1075 * Currently there is no supported scenario for JOIN during
1076 * association - if it becomes a supported scenario, the WPA/WPA2 keys
1077 * must be handled somehow.
1080 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1081 wl1271_info("JOIN while associated.");
1084 set_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
1086 ret = wl1271_cmd_join(wl, wl->set_bss_type);
1090 set_bit(WL1271_FLAG_JOINED, &wl->flags);
1092 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1096 * The join command disable the keep-alive mode, shut down its process,
1097 * and also clear the template config, so we need to reset it all after
1098 * the join. The acx_aid starts the keep-alive process, and the order
1099 * of the commands below is relevant.
1101 ret = wl1271_acx_keep_alive_mode(wl, true);
1105 ret = wl1271_acx_aid(wl, wl->aid);
1109 ret = wl1271_cmd_build_klv_null_data(wl);
1113 ret = wl1271_acx_keep_alive_config(wl, CMD_TEMPL_KLV_IDX_NULL_DATA,
1114 ACX_KEEP_ALIVE_TPL_VALID);
1122 static int wl1271_unjoin(struct wl1271 *wl)
1126 /* to stop listening to a channel, we disconnect */
1127 ret = wl1271_cmd_disconnect(wl);
1131 clear_bit(WL1271_FLAG_JOINED, &wl->flags);
1132 memset(wl->bssid, 0, ETH_ALEN);
1134 /* stop filterting packets based on bssid */
1135 wl1271_configure_filters(wl, FIF_OTHER_BSS);
1141 static void wl1271_set_band_rate(struct wl1271 *wl)
1143 if (wl->band == IEEE80211_BAND_2GHZ)
1144 wl->basic_rate_set = wl->conf.tx.basic_rate;
1146 wl->basic_rate_set = wl->conf.tx.basic_rate_5;
1149 static u32 wl1271_min_rate_get(struct wl1271 *wl)
1154 if (!wl->basic_rate_set) {
1156 wl->basic_rate_set = wl->conf.tx.basic_rate;
1159 for (i = 0; !rate; i++) {
1160 if ((wl->basic_rate_set >> i) & 0x1)
1167 static int wl1271_handle_idle(struct wl1271 *wl, bool idle)
1172 if (test_bit(WL1271_FLAG_JOINED, &wl->flags)) {
1173 ret = wl1271_unjoin(wl);
1177 wl->rate_set = wl1271_min_rate_get(wl);
1178 wl->sta_rate_set = 0;
1179 ret = wl1271_acx_rate_policies(wl);
1182 ret = wl1271_acx_keep_alive_config(
1183 wl, CMD_TEMPL_KLV_IDX_NULL_DATA,
1184 ACX_KEEP_ALIVE_TPL_INVALID);
1187 set_bit(WL1271_FLAG_IDLE, &wl->flags);
1189 /* increment the session counter */
1190 wl->session_counter++;
1191 if (wl->session_counter >= SESSION_COUNTER_MAX)
1192 wl->session_counter = 0;
1193 ret = wl1271_dummy_join(wl);
1196 clear_bit(WL1271_FLAG_IDLE, &wl->flags);
1203 static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed)
1205 struct wl1271 *wl = hw->priv;
1206 struct ieee80211_conf *conf = &hw->conf;
1207 int channel, ret = 0;
1209 channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
1211 wl1271_debug(DEBUG_MAC80211, "mac80211 config ch %d psm %s power %d %s",
1213 conf->flags & IEEE80211_CONF_PS ? "on" : "off",
1215 conf->flags & IEEE80211_CONF_IDLE ? "idle" : "in use");
1218 * mac80211 will go to idle nearly immediately after transmitting some
1219 * frames, such as the deauth. To make sure those frames reach the air,
1220 * wait here until the TX queue is fully flushed.
1222 if ((changed & IEEE80211_CONF_CHANGE_IDLE) &&
1223 (conf->flags & IEEE80211_CONF_IDLE))
1224 wl1271_tx_flush(wl);
1226 mutex_lock(&wl->mutex);
1228 if (unlikely(wl->state == WL1271_STATE_OFF))
1231 ret = wl1271_ps_elp_wakeup(wl, false);
1235 /* if the channel changes while joined, join again */
1236 if (changed & IEEE80211_CONF_CHANGE_CHANNEL &&
1237 ((wl->band != conf->channel->band) ||
1238 (wl->channel != channel))) {
1239 wl->band = conf->channel->band;
1240 wl->channel = channel;
1243 * FIXME: the mac80211 should really provide a fixed rate
1244 * to use here. for now, just use the smallest possible rate
1245 * for the band as a fixed rate for association frames and
1246 * other control messages.
1248 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1249 wl1271_set_band_rate(wl);
1251 wl->basic_rate = wl1271_min_rate_get(wl);
1252 ret = wl1271_acx_rate_policies(wl);
1254 wl1271_warning("rate policy for update channel "
1257 if (test_bit(WL1271_FLAG_JOINED, &wl->flags)) {
1258 ret = wl1271_join(wl, false);
1260 wl1271_warning("cmd join to update channel "
1265 if (changed & IEEE80211_CONF_CHANGE_IDLE) {
1266 ret = wl1271_handle_idle(wl, conf->flags & IEEE80211_CONF_IDLE);
1268 wl1271_warning("idle mode change failed %d", ret);
1272 * if mac80211 changes the PSM mode, make sure the mode is not
1273 * incorrectly changed after the pspoll failure active window.
1275 if (changed & IEEE80211_CONF_CHANGE_PS)
1276 clear_bit(WL1271_FLAG_PSPOLL_FAILURE, &wl->flags);
1278 if (conf->flags & IEEE80211_CONF_PS &&
1279 !test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
1280 set_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
1283 * We enter PSM only if we're already associated.
1284 * If we're not, we'll enter it when joining an SSID,
1285 * through the bss_info_changed() hook.
1287 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags)) {
1288 wl1271_debug(DEBUG_PSM, "psm enabled");
1289 ret = wl1271_ps_set_mode(wl, STATION_POWER_SAVE_MODE,
1292 } else if (!(conf->flags & IEEE80211_CONF_PS) &&
1293 test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
1294 wl1271_debug(DEBUG_PSM, "psm disabled");
1296 clear_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
1298 if (test_bit(WL1271_FLAG_PSM, &wl->flags))
1299 ret = wl1271_ps_set_mode(wl, STATION_ACTIVE_MODE,
1303 if (conf->power_level != wl->power_level) {
1304 ret = wl1271_acx_tx_power(wl, conf->power_level);
1308 wl->power_level = conf->power_level;
1312 wl1271_ps_elp_sleep(wl);
1315 mutex_unlock(&wl->mutex);
1320 struct wl1271_filter_params {
1323 u8 mc_list[ACX_MC_ADDRESS_GROUP_MAX][ETH_ALEN];
1326 static u64 wl1271_op_prepare_multicast(struct ieee80211_hw *hw,
1327 struct netdev_hw_addr_list *mc_list)
1329 struct wl1271_filter_params *fp;
1330 struct netdev_hw_addr *ha;
1331 struct wl1271 *wl = hw->priv;
1333 if (unlikely(wl->state == WL1271_STATE_OFF))
1336 fp = kzalloc(sizeof(*fp), GFP_ATOMIC);
1338 wl1271_error("Out of memory setting filters.");
1342 /* update multicast filtering parameters */
1343 fp->mc_list_length = 0;
1344 if (netdev_hw_addr_list_count(mc_list) > ACX_MC_ADDRESS_GROUP_MAX) {
1345 fp->enabled = false;
1348 netdev_hw_addr_list_for_each(ha, mc_list) {
1349 memcpy(fp->mc_list[fp->mc_list_length],
1350 ha->addr, ETH_ALEN);
1351 fp->mc_list_length++;
1355 return (u64)(unsigned long)fp;
1358 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
1361 FIF_BCN_PRBRESP_PROMISC | \
1365 static void wl1271_op_configure_filter(struct ieee80211_hw *hw,
1366 unsigned int changed,
1367 unsigned int *total, u64 multicast)
1369 struct wl1271_filter_params *fp = (void *)(unsigned long)multicast;
1370 struct wl1271 *wl = hw->priv;
1373 wl1271_debug(DEBUG_MAC80211, "mac80211 configure filter");
1375 mutex_lock(&wl->mutex);
1377 *total &= WL1271_SUPPORTED_FILTERS;
1378 changed &= WL1271_SUPPORTED_FILTERS;
1380 if (unlikely(wl->state == WL1271_STATE_OFF))
1383 ret = wl1271_ps_elp_wakeup(wl, false);
1388 if (*total & FIF_ALLMULTI)
1389 ret = wl1271_acx_group_address_tbl(wl, false, NULL, 0);
1391 ret = wl1271_acx_group_address_tbl(wl, fp->enabled,
1393 fp->mc_list_length);
1397 /* determine, whether supported filter values have changed */
1401 /* configure filters */
1402 wl->filters = *total;
1403 wl1271_configure_filters(wl, 0);
1405 /* apply configured filters */
1406 ret = wl1271_acx_rx_config(wl, wl->rx_config, wl->rx_filter);
1411 wl1271_ps_elp_sleep(wl);
1414 mutex_unlock(&wl->mutex);
1418 static int wl1271_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
1419 struct ieee80211_vif *vif,
1420 struct ieee80211_sta *sta,
1421 struct ieee80211_key_conf *key_conf)
1423 struct wl1271 *wl = hw->priv;
1430 static const u8 bcast_addr[ETH_ALEN] =
1431 { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
1433 wl1271_debug(DEBUG_MAC80211, "mac80211 set key");
1435 addr = sta ? sta->addr : bcast_addr;
1437 wl1271_debug(DEBUG_CRYPT, "CMD: 0x%x", cmd);
1438 wl1271_dump(DEBUG_CRYPT, "ADDR: ", addr, ETH_ALEN);
1439 wl1271_debug(DEBUG_CRYPT, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
1440 key_conf->cipher, key_conf->keyidx,
1441 key_conf->keylen, key_conf->flags);
1442 wl1271_dump(DEBUG_CRYPT, "KEY: ", key_conf->key, key_conf->keylen);
1444 if (is_zero_ether_addr(addr)) {
1445 /* We dont support TX only encryption */
1450 mutex_lock(&wl->mutex);
1452 ret = wl1271_ps_elp_wakeup(wl, false);
1456 switch (key_conf->cipher) {
1457 case WLAN_CIPHER_SUITE_WEP40:
1458 case WLAN_CIPHER_SUITE_WEP104:
1461 key_conf->hw_key_idx = key_conf->keyidx;
1463 case WLAN_CIPHER_SUITE_TKIP:
1464 key_type = KEY_TKIP;
1466 key_conf->hw_key_idx = key_conf->keyidx;
1467 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
1468 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
1470 case WLAN_CIPHER_SUITE_CCMP:
1473 key_conf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
1474 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
1475 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
1478 wl1271_error("Unknown key algo 0x%x", key_conf->cipher);
1486 ret = wl1271_cmd_set_key(wl, KEY_ADD_OR_REPLACE,
1487 key_conf->keyidx, key_type,
1488 key_conf->keylen, key_conf->key,
1489 addr, tx_seq_32, tx_seq_16);
1491 wl1271_error("Could not add or replace key");
1495 /* the default WEP key needs to be configured at least once */
1496 if (key_type == KEY_WEP) {
1497 ret = wl1271_cmd_set_default_wep_key(wl,
1505 /* The wl1271 does not allow to remove unicast keys - they
1506 will be cleared automatically on next CMD_JOIN. Ignore the
1507 request silently, as we dont want the mac80211 to emit
1508 an error message. */
1509 if (!is_broadcast_ether_addr(addr))
1512 ret = wl1271_cmd_set_key(wl, KEY_REMOVE,
1513 key_conf->keyidx, key_type,
1514 key_conf->keylen, key_conf->key,
1517 wl1271_error("Could not remove key");
1523 wl1271_error("Unsupported key cmd 0x%x", cmd);
1529 wl1271_ps_elp_sleep(wl);
1532 mutex_unlock(&wl->mutex);
1538 static int wl1271_op_hw_scan(struct ieee80211_hw *hw,
1539 struct ieee80211_vif *vif,
1540 struct cfg80211_scan_request *req)
1542 struct wl1271 *wl = hw->priv;
1547 wl1271_debug(DEBUG_MAC80211, "mac80211 hw scan");
1550 ssid = req->ssids[0].ssid;
1551 len = req->ssids[0].ssid_len;
1554 mutex_lock(&wl->mutex);
1556 ret = wl1271_ps_elp_wakeup(wl, false);
1560 if (wl1271_11a_enabled())
1561 ret = wl1271_scan(hw->priv, ssid, len, req);
1563 ret = wl1271_scan(hw->priv, ssid, len, req);
1565 wl1271_ps_elp_sleep(wl);
1568 mutex_unlock(&wl->mutex);
1573 static int wl1271_op_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
1575 struct wl1271 *wl = hw->priv;
1578 mutex_lock(&wl->mutex);
1580 if (unlikely(wl->state == WL1271_STATE_OFF))
1583 ret = wl1271_ps_elp_wakeup(wl, false);
1587 ret = wl1271_acx_rts_threshold(wl, (u16) value);
1589 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret);
1591 wl1271_ps_elp_sleep(wl);
1594 mutex_unlock(&wl->mutex);
1599 static void wl1271_ssid_set(struct wl1271 *wl, struct sk_buff *beacon)
1601 u8 *ptr = beacon->data +
1602 offsetof(struct ieee80211_mgmt, u.beacon.variable);
1604 /* find the location of the ssid in the beacon */
1605 while (ptr < beacon->data + beacon->len) {
1606 if (ptr[0] == WLAN_EID_SSID) {
1607 wl->ssid_len = ptr[1];
1608 memcpy(wl->ssid, ptr+2, wl->ssid_len);
1613 wl1271_error("ad-hoc beacon template has no SSID!\n");
1616 static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
1617 struct ieee80211_vif *vif,
1618 struct ieee80211_bss_conf *bss_conf,
1621 enum wl1271_cmd_ps_mode mode;
1622 struct wl1271 *wl = hw->priv;
1623 bool do_join = false;
1624 bool set_assoc = false;
1627 wl1271_debug(DEBUG_MAC80211, "mac80211 bss info changed");
1629 mutex_lock(&wl->mutex);
1631 ret = wl1271_ps_elp_wakeup(wl, false);
1635 if ((changed && BSS_CHANGED_BEACON_INT) &&
1636 (wl->bss_type == BSS_TYPE_IBSS)) {
1637 wl1271_debug(DEBUG_ADHOC, "ad-hoc beacon interval updated: %d",
1638 bss_conf->beacon_int);
1640 wl->beacon_int = bss_conf->beacon_int;
1644 if ((changed && BSS_CHANGED_BEACON) &&
1645 (wl->bss_type == BSS_TYPE_IBSS)) {
1646 struct sk_buff *beacon = ieee80211_beacon_get(hw, vif);
1648 wl1271_debug(DEBUG_ADHOC, "ad-hoc beacon updated");
1651 struct ieee80211_hdr *hdr;
1653 wl1271_ssid_set(wl, beacon);
1654 ret = wl1271_cmd_template_set(wl, CMD_TEMPL_BEACON,
1657 wl1271_min_rate_get(wl));
1660 dev_kfree_skb(beacon);
1664 hdr = (struct ieee80211_hdr *) beacon->data;
1665 hdr->frame_control = cpu_to_le16(
1666 IEEE80211_FTYPE_MGMT |
1667 IEEE80211_STYPE_PROBE_RESP);
1669 ret = wl1271_cmd_template_set(wl,
1670 CMD_TEMPL_PROBE_RESPONSE,
1673 wl1271_min_rate_get(wl));
1674 dev_kfree_skb(beacon);
1678 /* Need to update the SSID (for filtering etc) */
1683 if ((changed & BSS_CHANGED_BEACON_ENABLED) &&
1684 (wl->bss_type == BSS_TYPE_IBSS)) {
1685 wl1271_debug(DEBUG_ADHOC, "ad-hoc beaconing: %s",
1686 bss_conf->enable_beacon ? "enabled" : "disabled");
1688 if (bss_conf->enable_beacon)
1689 wl->set_bss_type = BSS_TYPE_IBSS;
1691 wl->set_bss_type = BSS_TYPE_STA_BSS;
1695 if (changed & BSS_CHANGED_CQM) {
1696 bool enable = false;
1697 if (bss_conf->cqm_rssi_thold)
1699 ret = wl1271_acx_rssi_snr_trigger(wl, enable,
1700 bss_conf->cqm_rssi_thold,
1701 bss_conf->cqm_rssi_hyst);
1704 wl->rssi_thold = bss_conf->cqm_rssi_thold;
1707 if ((changed & BSS_CHANGED_BSSID) &&
1709 * Now we know the correct bssid, so we send a new join command
1710 * and enable the BSSID filter
1712 memcmp(wl->bssid, bss_conf->bssid, ETH_ALEN)) {
1713 memcpy(wl->bssid, bss_conf->bssid, ETH_ALEN);
1715 ret = wl1271_cmd_build_null_data(wl);
1719 ret = wl1271_build_qos_null_data(wl);
1723 /* filter out all packets not from this BSSID */
1724 wl1271_configure_filters(wl, 0);
1726 /* Need to update the BSSID (for filtering etc) */
1730 if (changed & BSS_CHANGED_ASSOC) {
1731 if (bss_conf->assoc) {
1733 wl->aid = bss_conf->aid;
1736 wl->ps_poll_failures = 0;
1739 * use basic rates from AP, and determine lowest rate
1740 * to use with control frames.
1742 rates = bss_conf->basic_rates;
1743 wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl,
1745 wl->basic_rate = wl1271_min_rate_get(wl);
1746 ret = wl1271_acx_rate_policies(wl);
1751 * with wl1271, we don't need to update the
1752 * beacon_int and dtim_period, because the firmware
1753 * updates it by itself when the first beacon is
1754 * received after a join.
1756 ret = wl1271_cmd_build_ps_poll(wl, wl->aid);
1761 * The SSID is intentionally set to NULL here - the
1762 * firmware will set the probe request with a
1763 * broadcast SSID regardless of what we set in the
1766 ret = wl1271_cmd_build_probe_req(wl, NULL, 0,
1769 /* enable the connection monitoring feature */
1770 ret = wl1271_acx_conn_monit_params(wl, true);
1774 /* If we want to go in PSM but we're not there yet */
1775 if (test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags) &&
1776 !test_bit(WL1271_FLAG_PSM, &wl->flags)) {
1777 mode = STATION_POWER_SAVE_MODE;
1778 ret = wl1271_ps_set_mode(wl, mode, true);
1783 /* use defaults when not associated */
1784 clear_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
1787 /* re-enable dynamic ps - just in case */
1788 ieee80211_enable_dyn_ps(wl->vif);
1790 /* revert back to minimum rates for the current band */
1791 wl1271_set_band_rate(wl);
1792 wl->basic_rate = wl1271_min_rate_get(wl);
1793 ret = wl1271_acx_rate_policies(wl);
1797 /* disable connection monitor features */
1798 ret = wl1271_acx_conn_monit_params(wl, false);
1800 /* Disable the keep-alive feature */
1801 ret = wl1271_acx_keep_alive_mode(wl, false);
1809 if (changed & BSS_CHANGED_ERP_SLOT) {
1810 if (bss_conf->use_short_slot)
1811 ret = wl1271_acx_slot(wl, SLOT_TIME_SHORT);
1813 ret = wl1271_acx_slot(wl, SLOT_TIME_LONG);
1815 wl1271_warning("Set slot time failed %d", ret);
1820 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
1821 if (bss_conf->use_short_preamble)
1822 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_SHORT);
1824 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_LONG);
1827 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
1828 if (bss_conf->use_cts_prot)
1829 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_ENABLE);
1831 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_DISABLE);
1833 wl1271_warning("Set ctsprotect failed %d", ret);
1838 if (changed & BSS_CHANGED_ARP_FILTER) {
1839 __be32 addr = bss_conf->arp_addr_list[0];
1840 WARN_ON(wl->bss_type != BSS_TYPE_STA_BSS);
1842 if (bss_conf->arp_addr_cnt == 1 && bss_conf->arp_filter_enabled)
1843 ret = wl1271_acx_arp_ip_filter(wl, true, addr);
1845 ret = wl1271_acx_arp_ip_filter(wl, false, addr);
1852 ret = wl1271_join(wl, set_assoc);
1854 wl1271_warning("cmd join failed %d", ret);
1860 wl1271_ps_elp_sleep(wl);
1863 mutex_unlock(&wl->mutex);
1866 static int wl1271_op_conf_tx(struct ieee80211_hw *hw, u16 queue,
1867 const struct ieee80211_tx_queue_params *params)
1869 struct wl1271 *wl = hw->priv;
1873 mutex_lock(&wl->mutex);
1875 wl1271_debug(DEBUG_MAC80211, "mac80211 conf tx %d", queue);
1877 ret = wl1271_ps_elp_wakeup(wl, false);
1881 /* the txop is confed in units of 32us by the mac80211, we need us */
1882 ret = wl1271_acx_ac_cfg(wl, wl1271_tx_get_queue(queue),
1883 params->cw_min, params->cw_max,
1884 params->aifs, params->txop << 5);
1889 ps_scheme = CONF_PS_SCHEME_UPSD_TRIGGER;
1891 ps_scheme = CONF_PS_SCHEME_LEGACY;
1893 ret = wl1271_acx_tid_cfg(wl, wl1271_tx_get_queue(queue),
1894 CONF_CHANNEL_TYPE_EDCF,
1895 wl1271_tx_get_queue(queue),
1896 ps_scheme, CONF_ACK_POLICY_LEGACY, 0, 0);
1901 wl1271_ps_elp_sleep(wl);
1904 mutex_unlock(&wl->mutex);
1909 static u64 wl1271_op_get_tsf(struct ieee80211_hw *hw)
1912 struct wl1271 *wl = hw->priv;
1913 u64 mactime = ULLONG_MAX;
1916 wl1271_debug(DEBUG_MAC80211, "mac80211 get tsf");
1918 mutex_lock(&wl->mutex);
1920 ret = wl1271_ps_elp_wakeup(wl, false);
1924 ret = wl1271_acx_tsf_info(wl, &mactime);
1929 wl1271_ps_elp_sleep(wl);
1932 mutex_unlock(&wl->mutex);
1936 static int wl1271_op_get_survey(struct ieee80211_hw *hw, int idx,
1937 struct survey_info *survey)
1939 struct wl1271 *wl = hw->priv;
1940 struct ieee80211_conf *conf = &hw->conf;
1945 survey->channel = conf->channel;
1946 survey->filled = SURVEY_INFO_NOISE_DBM;
1947 survey->noise = wl->noise;
1952 /* can't be const, mac80211 writes to this */
1953 static struct ieee80211_rate wl1271_rates[] = {
1955 .hw_value = CONF_HW_BIT_RATE_1MBPS,
1956 .hw_value_short = CONF_HW_BIT_RATE_1MBPS, },
1958 .hw_value = CONF_HW_BIT_RATE_2MBPS,
1959 .hw_value_short = CONF_HW_BIT_RATE_2MBPS,
1960 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
1962 .hw_value = CONF_HW_BIT_RATE_5_5MBPS,
1963 .hw_value_short = CONF_HW_BIT_RATE_5_5MBPS,
1964 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
1966 .hw_value = CONF_HW_BIT_RATE_11MBPS,
1967 .hw_value_short = CONF_HW_BIT_RATE_11MBPS,
1968 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
1970 .hw_value = CONF_HW_BIT_RATE_6MBPS,
1971 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
1973 .hw_value = CONF_HW_BIT_RATE_9MBPS,
1974 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
1976 .hw_value = CONF_HW_BIT_RATE_12MBPS,
1977 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
1979 .hw_value = CONF_HW_BIT_RATE_18MBPS,
1980 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
1982 .hw_value = CONF_HW_BIT_RATE_24MBPS,
1983 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
1985 .hw_value = CONF_HW_BIT_RATE_36MBPS,
1986 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
1988 .hw_value = CONF_HW_BIT_RATE_48MBPS,
1989 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
1991 .hw_value = CONF_HW_BIT_RATE_54MBPS,
1992 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
1995 /* can't be const, mac80211 writes to this */
1996 static struct ieee80211_channel wl1271_channels[] = {
1997 { .hw_value = 1, .center_freq = 2412, .max_power = 25 },
1998 { .hw_value = 2, .center_freq = 2417, .max_power = 25 },
1999 { .hw_value = 3, .center_freq = 2422, .max_power = 25 },
2000 { .hw_value = 4, .center_freq = 2427, .max_power = 25 },
2001 { .hw_value = 5, .center_freq = 2432, .max_power = 25 },
2002 { .hw_value = 6, .center_freq = 2437, .max_power = 25 },
2003 { .hw_value = 7, .center_freq = 2442, .max_power = 25 },
2004 { .hw_value = 8, .center_freq = 2447, .max_power = 25 },
2005 { .hw_value = 9, .center_freq = 2452, .max_power = 25 },
2006 { .hw_value = 10, .center_freq = 2457, .max_power = 25 },
2007 { .hw_value = 11, .center_freq = 2462, .max_power = 25 },
2008 { .hw_value = 12, .center_freq = 2467, .max_power = 25 },
2009 { .hw_value = 13, .center_freq = 2472, .max_power = 25 },
2012 /* mapping to indexes for wl1271_rates */
2013 static const u8 wl1271_rate_to_idx_2ghz[] = {
2014 /* MCS rates are used only with 11n */
2015 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS7 */
2016 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS6 */
2017 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS5 */
2018 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS4 */
2019 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS3 */
2020 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS2 */
2021 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS1 */
2022 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS0 */
2024 11, /* CONF_HW_RXTX_RATE_54 */
2025 10, /* CONF_HW_RXTX_RATE_48 */
2026 9, /* CONF_HW_RXTX_RATE_36 */
2027 8, /* CONF_HW_RXTX_RATE_24 */
2029 /* TI-specific rate */
2030 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
2032 7, /* CONF_HW_RXTX_RATE_18 */
2033 6, /* CONF_HW_RXTX_RATE_12 */
2034 3, /* CONF_HW_RXTX_RATE_11 */
2035 5, /* CONF_HW_RXTX_RATE_9 */
2036 4, /* CONF_HW_RXTX_RATE_6 */
2037 2, /* CONF_HW_RXTX_RATE_5_5 */
2038 1, /* CONF_HW_RXTX_RATE_2 */
2039 0 /* CONF_HW_RXTX_RATE_1 */
2042 /* can't be const, mac80211 writes to this */
2043 static struct ieee80211_supported_band wl1271_band_2ghz = {
2044 .channels = wl1271_channels,
2045 .n_channels = ARRAY_SIZE(wl1271_channels),
2046 .bitrates = wl1271_rates,
2047 .n_bitrates = ARRAY_SIZE(wl1271_rates),
2050 /* 5 GHz data rates for WL1273 */
2051 static struct ieee80211_rate wl1271_rates_5ghz[] = {
2053 .hw_value = CONF_HW_BIT_RATE_6MBPS,
2054 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
2056 .hw_value = CONF_HW_BIT_RATE_9MBPS,
2057 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
2059 .hw_value = CONF_HW_BIT_RATE_12MBPS,
2060 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
2062 .hw_value = CONF_HW_BIT_RATE_18MBPS,
2063 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
2065 .hw_value = CONF_HW_BIT_RATE_24MBPS,
2066 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
2068 .hw_value = CONF_HW_BIT_RATE_36MBPS,
2069 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
2071 .hw_value = CONF_HW_BIT_RATE_48MBPS,
2072 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
2074 .hw_value = CONF_HW_BIT_RATE_54MBPS,
2075 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
2078 /* 5 GHz band channels for WL1273 */
2079 static struct ieee80211_channel wl1271_channels_5ghz[] = {
2080 { .hw_value = 183, .center_freq = 4915},
2081 { .hw_value = 184, .center_freq = 4920},
2082 { .hw_value = 185, .center_freq = 4925},
2083 { .hw_value = 187, .center_freq = 4935},
2084 { .hw_value = 188, .center_freq = 4940},
2085 { .hw_value = 189, .center_freq = 4945},
2086 { .hw_value = 192, .center_freq = 4960},
2087 { .hw_value = 196, .center_freq = 4980},
2088 { .hw_value = 7, .center_freq = 5035},
2089 { .hw_value = 8, .center_freq = 5040},
2090 { .hw_value = 9, .center_freq = 5045},
2091 { .hw_value = 11, .center_freq = 5055},
2092 { .hw_value = 12, .center_freq = 5060},
2093 { .hw_value = 16, .center_freq = 5080},
2094 { .hw_value = 34, .center_freq = 5170},
2095 { .hw_value = 36, .center_freq = 5180},
2096 { .hw_value = 38, .center_freq = 5190},
2097 { .hw_value = 40, .center_freq = 5200},
2098 { .hw_value = 42, .center_freq = 5210},
2099 { .hw_value = 44, .center_freq = 5220},
2100 { .hw_value = 46, .center_freq = 5230},
2101 { .hw_value = 48, .center_freq = 5240},
2102 { .hw_value = 52, .center_freq = 5260},
2103 { .hw_value = 56, .center_freq = 5280},
2104 { .hw_value = 60, .center_freq = 5300},
2105 { .hw_value = 64, .center_freq = 5320},
2106 { .hw_value = 100, .center_freq = 5500},
2107 { .hw_value = 104, .center_freq = 5520},
2108 { .hw_value = 108, .center_freq = 5540},
2109 { .hw_value = 112, .center_freq = 5560},
2110 { .hw_value = 116, .center_freq = 5580},
2111 { .hw_value = 120, .center_freq = 5600},
2112 { .hw_value = 124, .center_freq = 5620},
2113 { .hw_value = 128, .center_freq = 5640},
2114 { .hw_value = 132, .center_freq = 5660},
2115 { .hw_value = 136, .center_freq = 5680},
2116 { .hw_value = 140, .center_freq = 5700},
2117 { .hw_value = 149, .center_freq = 5745},
2118 { .hw_value = 153, .center_freq = 5765},
2119 { .hw_value = 157, .center_freq = 5785},
2120 { .hw_value = 161, .center_freq = 5805},
2121 { .hw_value = 165, .center_freq = 5825},
2124 /* mapping to indexes for wl1271_rates_5ghz */
2125 static const u8 wl1271_rate_to_idx_5ghz[] = {
2126 /* MCS rates are used only with 11n */
2127 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS7 */
2128 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS6 */
2129 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS5 */
2130 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS4 */
2131 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS3 */
2132 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS2 */
2133 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS1 */
2134 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS0 */
2136 7, /* CONF_HW_RXTX_RATE_54 */
2137 6, /* CONF_HW_RXTX_RATE_48 */
2138 5, /* CONF_HW_RXTX_RATE_36 */
2139 4, /* CONF_HW_RXTX_RATE_24 */
2141 /* TI-specific rate */
2142 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
2144 3, /* CONF_HW_RXTX_RATE_18 */
2145 2, /* CONF_HW_RXTX_RATE_12 */
2146 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_11 */
2147 1, /* CONF_HW_RXTX_RATE_9 */
2148 0, /* CONF_HW_RXTX_RATE_6 */
2149 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_5_5 */
2150 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_2 */
2151 CONF_HW_RXTX_RATE_UNSUPPORTED /* CONF_HW_RXTX_RATE_1 */
2154 static struct ieee80211_supported_band wl1271_band_5ghz = {
2155 .channels = wl1271_channels_5ghz,
2156 .n_channels = ARRAY_SIZE(wl1271_channels_5ghz),
2157 .bitrates = wl1271_rates_5ghz,
2158 .n_bitrates = ARRAY_SIZE(wl1271_rates_5ghz),
2161 static const u8 *wl1271_band_rate_to_idx[] = {
2162 [IEEE80211_BAND_2GHZ] = wl1271_rate_to_idx_2ghz,
2163 [IEEE80211_BAND_5GHZ] = wl1271_rate_to_idx_5ghz
2166 static const struct ieee80211_ops wl1271_ops = {
2167 .start = wl1271_op_start,
2168 .stop = wl1271_op_stop,
2169 .add_interface = wl1271_op_add_interface,
2170 .remove_interface = wl1271_op_remove_interface,
2171 .config = wl1271_op_config,
2172 .prepare_multicast = wl1271_op_prepare_multicast,
2173 .configure_filter = wl1271_op_configure_filter,
2175 .set_key = wl1271_op_set_key,
2176 .hw_scan = wl1271_op_hw_scan,
2177 .bss_info_changed = wl1271_op_bss_info_changed,
2178 .set_rts_threshold = wl1271_op_set_rts_threshold,
2179 .conf_tx = wl1271_op_conf_tx,
2180 .get_tsf = wl1271_op_get_tsf,
2181 .get_survey = wl1271_op_get_survey,
2182 CFG80211_TESTMODE_CMD(wl1271_tm_cmd)
2186 u8 wl1271_rate_to_idx(struct wl1271 *wl, int rate)
2190 BUG_ON(wl->band >= sizeof(wl1271_band_rate_to_idx)/sizeof(u8 *));
2192 if (unlikely(rate >= CONF_HW_RXTX_RATE_MAX)) {
2193 wl1271_error("Illegal RX rate from HW: %d", rate);
2197 idx = wl1271_band_rate_to_idx[wl->band][rate];
2198 if (unlikely(idx == CONF_HW_RXTX_RATE_UNSUPPORTED)) {
2199 wl1271_error("Unsupported RX rate from HW: %d", rate);
2206 static ssize_t wl1271_sysfs_show_bt_coex_state(struct device *dev,
2207 struct device_attribute *attr,
2210 struct wl1271 *wl = dev_get_drvdata(dev);
2213 /* FIXME: what's the maximum length of buf? page size?*/
2216 mutex_lock(&wl->mutex);
2217 len = snprintf(buf, len, "%d\n\n0 - off\n1 - on\n",
2219 mutex_unlock(&wl->mutex);
2225 static ssize_t wl1271_sysfs_store_bt_coex_state(struct device *dev,
2226 struct device_attribute *attr,
2227 const char *buf, size_t count)
2229 struct wl1271 *wl = dev_get_drvdata(dev);
2233 ret = strict_strtoul(buf, 10, &res);
2236 wl1271_warning("incorrect value written to bt_coex_mode");
2240 mutex_lock(&wl->mutex);
2244 if (res == wl->sg_enabled)
2247 wl->sg_enabled = res;
2249 if (wl->state == WL1271_STATE_OFF)
2252 ret = wl1271_ps_elp_wakeup(wl, false);
2256 wl1271_acx_sg_enable(wl, wl->sg_enabled);
2257 wl1271_ps_elp_sleep(wl);
2260 mutex_unlock(&wl->mutex);
2264 static DEVICE_ATTR(bt_coex_state, S_IRUGO | S_IWUSR,
2265 wl1271_sysfs_show_bt_coex_state,
2266 wl1271_sysfs_store_bt_coex_state);
2268 static ssize_t wl1271_sysfs_show_hw_pg_ver(struct device *dev,
2269 struct device_attribute *attr,
2272 struct wl1271 *wl = dev_get_drvdata(dev);
2275 /* FIXME: what's the maximum length of buf? page size?*/
2278 mutex_lock(&wl->mutex);
2279 if (wl->hw_pg_ver >= 0)
2280 len = snprintf(buf, len, "%d\n", wl->hw_pg_ver);
2282 len = snprintf(buf, len, "n/a\n");
2283 mutex_unlock(&wl->mutex);
2288 static DEVICE_ATTR(hw_pg_ver, S_IRUGO | S_IWUSR,
2289 wl1271_sysfs_show_hw_pg_ver, NULL);
2291 int wl1271_register_hw(struct wl1271 *wl)
2295 if (wl->mac80211_registered)
2298 SET_IEEE80211_PERM_ADDR(wl->hw, wl->mac_addr);
2300 ret = ieee80211_register_hw(wl->hw);
2302 wl1271_error("unable to register mac80211 hw: %d", ret);
2306 wl->mac80211_registered = true;
2308 wl1271_notice("loaded");
2312 EXPORT_SYMBOL_GPL(wl1271_register_hw);
2314 void wl1271_unregister_hw(struct wl1271 *wl)
2316 ieee80211_unregister_hw(wl->hw);
2317 wl->mac80211_registered = false;
2320 EXPORT_SYMBOL_GPL(wl1271_unregister_hw);
2322 int wl1271_init_ieee80211(struct wl1271 *wl)
2324 /* The tx descriptor buffer and the TKIP space. */
2325 wl->hw->extra_tx_headroom = WL1271_TKIP_IV_SPACE +
2326 sizeof(struct wl1271_tx_hw_descr);
2329 /* FIXME: find a proper value */
2330 wl->hw->channel_change_time = 10000;
2331 wl->hw->max_listen_interval = wl->conf.conn.max_listen_interval;
2333 wl->hw->flags = IEEE80211_HW_SIGNAL_DBM |
2334 IEEE80211_HW_BEACON_FILTER |
2335 IEEE80211_HW_SUPPORTS_PS |
2336 IEEE80211_HW_SUPPORTS_UAPSD |
2337 IEEE80211_HW_HAS_RATE_CONTROL |
2338 IEEE80211_HW_CONNECTION_MONITOR |
2339 IEEE80211_HW_SUPPORTS_CQM_RSSI;
2341 wl->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
2342 BIT(NL80211_IFTYPE_ADHOC);
2343 wl->hw->wiphy->max_scan_ssids = 1;
2344 wl->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = &wl1271_band_2ghz;
2346 if (wl1271_11a_enabled())
2347 wl->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = &wl1271_band_5ghz;
2350 wl->hw->max_rates = 1;
2352 SET_IEEE80211_DEV(wl->hw, wl1271_wl_to_dev(wl));
2356 EXPORT_SYMBOL_GPL(wl1271_init_ieee80211);
2358 #define WL1271_DEFAULT_CHANNEL 0
2360 struct ieee80211_hw *wl1271_alloc_hw(void)
2362 struct ieee80211_hw *hw;
2363 struct platform_device *plat_dev = NULL;
2367 hw = ieee80211_alloc_hw(sizeof(*wl), &wl1271_ops);
2369 wl1271_error("could not alloc ieee80211_hw");
2374 plat_dev = kmemdup(&wl1271_device, sizeof(wl1271_device), GFP_KERNEL);
2376 wl1271_error("could not allocate platform_device");
2378 goto err_plat_alloc;
2382 memset(wl, 0, sizeof(*wl));
2384 INIT_LIST_HEAD(&wl->list);
2387 wl->plat_dev = plat_dev;
2389 skb_queue_head_init(&wl->tx_queue);
2391 INIT_DELAYED_WORK(&wl->elp_work, wl1271_elp_work);
2392 INIT_DELAYED_WORK(&wl->pspoll_work, wl1271_pspoll_work);
2393 wl->channel = WL1271_DEFAULT_CHANNEL;
2394 wl->beacon_int = WL1271_DEFAULT_BEACON_INT;
2395 wl->default_key = 0;
2397 wl->rx_config = WL1271_DEFAULT_RX_CONFIG;
2398 wl->rx_filter = WL1271_DEFAULT_RX_FILTER;
2399 wl->psm_entry_retry = 0;
2400 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
2401 wl->basic_rate_set = CONF_TX_RATE_MASK_BASIC;
2402 wl->basic_rate = CONF_TX_RATE_MASK_BASIC;
2403 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
2404 wl->sta_rate_set = 0;
2405 wl->band = IEEE80211_BAND_2GHZ;
2408 wl->sg_enabled = true;
2411 for (i = 0; i < ACX_TX_DESCRIPTORS; i++)
2412 wl->tx_frames[i] = NULL;
2414 spin_lock_init(&wl->wl_lock);
2416 wl->state = WL1271_STATE_OFF;
2417 mutex_init(&wl->mutex);
2419 /* Apply default driver configuration. */
2420 wl1271_conf_init(wl);
2422 wl1271_debugfs_init(wl);
2424 /* Register platform device */
2425 ret = platform_device_register(wl->plat_dev);
2427 wl1271_error("couldn't register platform device");
2430 dev_set_drvdata(&wl->plat_dev->dev, wl);
2432 /* Create sysfs file to control bt coex state */
2433 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
2435 wl1271_error("failed to create sysfs file bt_coex_state");
2439 /* Create sysfs file to get HW PG version */
2440 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_hw_pg_ver);
2442 wl1271_error("failed to create sysfs file hw_pg_ver");
2443 goto err_bt_coex_state;
2449 device_remove_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
2452 platform_device_unregister(wl->plat_dev);
2455 wl1271_debugfs_exit(wl);
2459 ieee80211_free_hw(hw);
2463 return ERR_PTR(ret);
2465 EXPORT_SYMBOL_GPL(wl1271_alloc_hw);
2467 int wl1271_free_hw(struct wl1271 *wl)
2469 platform_device_unregister(wl->plat_dev);
2470 kfree(wl->plat_dev);
2472 wl1271_debugfs_exit(wl);
2479 kfree(wl->fw_status);
2480 kfree(wl->tx_res_if);
2482 ieee80211_free_hw(wl->hw);
2486 EXPORT_SYMBOL_GPL(wl1271_free_hw);
2488 MODULE_LICENSE("GPL");
2489 MODULE_AUTHOR("Luciano Coelho <luciano.coelho@nokia.com>");
2490 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");