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>
33 #include <linux/wl12xx.h>
34 #include <linux/sched.h>
37 #include "wl12xx_80211.h"
51 #define WL1271_BOOT_RETRIES 3
53 static struct conf_drv_settings default_conf = {
56 [CONF_SG_ACL_BT_MASTER_MIN_BR] = 10,
57 [CONF_SG_ACL_BT_MASTER_MAX_BR] = 180,
58 [CONF_SG_ACL_BT_SLAVE_MIN_BR] = 10,
59 [CONF_SG_ACL_BT_SLAVE_MAX_BR] = 180,
60 [CONF_SG_ACL_BT_MASTER_MIN_EDR] = 10,
61 [CONF_SG_ACL_BT_MASTER_MAX_EDR] = 80,
62 [CONF_SG_ACL_BT_SLAVE_MIN_EDR] = 10,
63 [CONF_SG_ACL_BT_SLAVE_MAX_EDR] = 80,
64 [CONF_SG_ACL_WLAN_PS_MASTER_BR] = 8,
65 [CONF_SG_ACL_WLAN_PS_SLAVE_BR] = 8,
66 [CONF_SG_ACL_WLAN_PS_MASTER_EDR] = 20,
67 [CONF_SG_ACL_WLAN_PS_SLAVE_EDR] = 20,
68 [CONF_SG_ACL_WLAN_ACTIVE_MASTER_MIN_BR] = 20,
69 [CONF_SG_ACL_WLAN_ACTIVE_MASTER_MAX_BR] = 35,
70 [CONF_SG_ACL_WLAN_ACTIVE_SLAVE_MIN_BR] = 16,
71 [CONF_SG_ACL_WLAN_ACTIVE_SLAVE_MAX_BR] = 35,
72 [CONF_SG_ACL_WLAN_ACTIVE_MASTER_MIN_EDR] = 32,
73 [CONF_SG_ACL_WLAN_ACTIVE_MASTER_MAX_EDR] = 50,
74 [CONF_SG_ACL_WLAN_ACTIVE_SLAVE_MIN_EDR] = 28,
75 [CONF_SG_ACL_WLAN_ACTIVE_SLAVE_MAX_EDR] = 50,
76 [CONF_SG_ACL_ACTIVE_SCAN_WLAN_BR] = 10,
77 [CONF_SG_ACL_ACTIVE_SCAN_WLAN_EDR] = 20,
78 [CONF_SG_ACL_PASSIVE_SCAN_BT_BR] = 75,
79 [CONF_SG_ACL_PASSIVE_SCAN_WLAN_BR] = 15,
80 [CONF_SG_ACL_PASSIVE_SCAN_BT_EDR] = 27,
81 [CONF_SG_ACL_PASSIVE_SCAN_WLAN_EDR] = 17,
82 /* active scan params */
83 [CONF_SG_AUTO_SCAN_PROBE_REQ] = 170,
84 [CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_HV3] = 50,
85 [CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_A2DP] = 100,
86 /* passive scan params */
87 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_A2DP_BR] = 800,
88 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_A2DP_EDR] = 200,
89 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_HV3] = 200,
90 /* passive scan in dual antenna params */
91 [CONF_SG_CONSECUTIVE_HV3_IN_PASSIVE_SCAN] = 0,
92 [CONF_SG_BCN_HV3_COLLISION_THRESH_IN_PASSIVE_SCAN] = 0,
93 [CONF_SG_TX_RX_PROTECTION_BWIDTH_IN_PASSIVE_SCAN] = 0,
95 [CONF_SG_STA_FORCE_PS_IN_BT_SCO] = 1,
96 [CONF_SG_ANTENNA_CONFIGURATION] = 0,
97 [CONF_SG_BEACON_MISS_PERCENT] = 60,
98 [CONF_SG_DHCP_TIME] = 5000,
100 [CONF_SG_TXT] = 1000,
101 [CONF_SG_ADAPTIVE_RXT_TXT] = 1,
102 [CONF_SG_GENERAL_USAGE_BIT_MAP] = 3,
103 [CONF_SG_HV3_MAX_SERVED] = 6,
104 [CONF_SG_PS_POLL_TIMEOUT] = 10,
105 [CONF_SG_UPSD_TIMEOUT] = 10,
106 [CONF_SG_CONSECUTIVE_CTS_THRESHOLD] = 2,
107 [CONF_SG_STA_RX_WINDOW_AFTER_DTIM] = 5,
108 [CONF_SG_STA_CONNECTION_PROTECTION_TIME] = 30,
110 [CONF_AP_BEACON_MISS_TX] = 3,
111 [CONF_AP_RX_WINDOW_AFTER_BEACON] = 10,
112 [CONF_AP_BEACON_WINDOW_INTERVAL] = 2,
113 [CONF_AP_CONNECTION_PROTECTION_TIME] = 0,
114 [CONF_AP_BT_ACL_VAL_BT_SERVE_TIME] = 25,
115 [CONF_AP_BT_ACL_VAL_WL_SERVE_TIME] = 25,
117 .state = CONF_SG_PROTECTIVE,
120 .rx_msdu_life_time = 512000,
121 .packet_detection_threshold = 0,
122 .ps_poll_timeout = 15,
124 .rts_threshold = IEEE80211_MAX_RTS_THRESHOLD,
125 .rx_cca_threshold = 0,
126 .irq_blk_threshold = 0xFFFF,
127 .irq_pkt_threshold = 0,
129 .queue_type = CONF_RX_QUEUE_TYPE_LOW_PRIORITY,
132 .tx_energy_detection = 0,
135 .short_retry_limit = 10,
136 .long_retry_limit = 10,
159 .aifsn = CONF_TX_AIFS_PIFS,
166 .aifsn = CONF_TX_AIFS_PIFS,
170 .max_tx_retries = 100,
171 .ap_aging_period = 300,
175 .queue_id = CONF_TX_AC_BE,
176 .channel_type = CONF_CHANNEL_TYPE_EDCF,
177 .tsid = CONF_TX_AC_BE,
178 .ps_scheme = CONF_PS_SCHEME_LEGACY,
179 .ack_policy = CONF_ACK_POLICY_LEGACY,
183 .queue_id = CONF_TX_AC_BK,
184 .channel_type = CONF_CHANNEL_TYPE_EDCF,
185 .tsid = CONF_TX_AC_BK,
186 .ps_scheme = CONF_PS_SCHEME_LEGACY,
187 .ack_policy = CONF_ACK_POLICY_LEGACY,
191 .queue_id = CONF_TX_AC_VI,
192 .channel_type = CONF_CHANNEL_TYPE_EDCF,
193 .tsid = CONF_TX_AC_VI,
194 .ps_scheme = CONF_PS_SCHEME_LEGACY,
195 .ack_policy = CONF_ACK_POLICY_LEGACY,
199 .queue_id = CONF_TX_AC_VO,
200 .channel_type = CONF_CHANNEL_TYPE_EDCF,
201 .tsid = CONF_TX_AC_VO,
202 .ps_scheme = CONF_PS_SCHEME_LEGACY,
203 .ack_policy = CONF_ACK_POLICY_LEGACY,
207 .frag_threshold = IEEE80211_MAX_FRAG_THRESHOLD,
208 .tx_compl_timeout = 700,
209 .tx_compl_threshold = 4,
210 .basic_rate = CONF_HW_BIT_RATE_1MBPS,
211 .basic_rate_5 = CONF_HW_BIT_RATE_6MBPS,
212 .tmpl_short_retry_limit = 10,
213 .tmpl_long_retry_limit = 10,
216 .wake_up_event = CONF_WAKE_UP_EVENT_DTIM,
217 .listen_interval = 1,
218 .bcn_filt_mode = CONF_BCN_FILT_MODE_ENABLED,
219 .bcn_filt_ie_count = 2,
222 .ie = WLAN_EID_CHANNEL_SWITCH,
223 .rule = CONF_BCN_RULE_PASS_ON_APPEARANCE,
226 .ie = WLAN_EID_HT_INFORMATION,
227 .rule = CONF_BCN_RULE_PASS_ON_CHANGE,
230 .synch_fail_thold = 10,
231 .bss_lose_timeout = 100,
232 .beacon_rx_timeout = 10000,
233 .broadcast_timeout = 20000,
234 .rx_broadcast_in_ps = 1,
235 .ps_poll_threshold = 10,
236 .ps_poll_recovery_period = 700,
237 .bet_enable = CONF_BET_MODE_ENABLE,
238 .bet_max_consecutive = 50,
239 .psm_entry_retries = 8,
240 .psm_exit_retries = 16,
241 .psm_entry_nullfunc_retries = 3,
242 .psm_entry_hangover_period = 1,
243 .keep_alive_interval = 55000,
244 .max_listen_interval = 20,
251 .host_clk_settling_time = 5000,
252 .host_fast_wakeup_support = false
256 .avg_weight_rssi_beacon = 20,
257 .avg_weight_rssi_data = 10,
258 .avg_weight_snr_beacon = 20,
259 .avg_weight_snr_data = 10,
262 .min_dwell_time_active = 7500,
263 .max_dwell_time_active = 30000,
264 .min_dwell_time_passive = 100000,
265 .max_dwell_time_passive = 100000,
269 /* sched_scan requires dwell times in TU instead of TU/1000 */
270 .min_dwell_time_active = 8,
271 .max_dwell_time_active = 30,
272 .dwell_time_passive = 100,
273 .dwell_time_dfs = 150,
275 .rssi_threshold = -90,
279 .tx_per_channel_power_compensation_2 = {
280 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
282 .tx_per_channel_power_compensation_5 = {
283 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
284 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
285 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
290 .tx_ba_win_size = 64,
291 .inactivity_timeout = 10000,
292 .tx_ba_tid_bitmap = CONF_TX_BA_ENABLED_TID_BITMAP,
298 .tx_min_block_num = 40,
300 .min_req_tx_blocks = 100,
301 .min_req_rx_blocks = 22,
308 .tx_min_block_num = 40,
310 .min_req_tx_blocks = 45,
311 .min_req_rx_blocks = 22,
317 .n_divider_fref_set_1 = 0xff, /* default */
318 .n_divider_fref_set_2 = 12,
319 .m_divider_fref_set_1 = 148,
320 .m_divider_fref_set_2 = 0xffff, /* default */
321 .coex_pll_stabilization_time = 0xffffffff, /* default */
322 .ldo_stabilization_time = 0xffff, /* default */
323 .fm_disturbed_band_margin = 0xff, /* default */
324 .swallow_clk_diff = 0xff, /* default */
333 .mode = WL12XX_FWLOG_ON_DEMAND,
336 .timestamp = WL12XX_FWLOG_TIMESTAMP_DISABLED,
337 .output = WL12XX_FWLOG_OUTPUT_HOST,
340 .hci_io_ds = HCI_IO_DS_6MA,
342 .rate_retry_score = 32000,
347 .inverse_curiosity_factor = 5,
349 .tx_fail_high_th = 10,
350 .per_alpha_shift = 4,
352 .per_beta1_shift = 10,
353 .per_beta2_shift = 8,
355 .rate_check_down = 12,
356 .rate_retry_policy = {
357 0x00, 0x00, 0x00, 0x00, 0x00,
358 0x00, 0x00, 0x00, 0x00, 0x00,
364 static char *fwlog_param;
366 static void __wl1271_op_remove_interface(struct wl1271 *wl,
367 bool reset_tx_queues);
368 static void wl1271_free_ap_keys(struct wl1271 *wl);
371 static void wl1271_device_release(struct device *dev)
376 static struct platform_device wl1271_device = {
380 /* device model insists to have a release function */
382 .release = wl1271_device_release,
386 static DEFINE_MUTEX(wl_list_mutex);
387 static LIST_HEAD(wl_list);
389 static int wl1271_check_operstate(struct wl1271 *wl, unsigned char operstate)
392 if (operstate != IF_OPER_UP)
395 if (test_and_set_bit(WL1271_FLAG_STA_STATE_SENT, &wl->flags))
398 ret = wl12xx_cmd_set_peer_state(wl, wl->sta_hlid);
402 wl12xx_croc(wl, wl->role_id);
404 wl1271_info("Association completed.");
407 static int wl1271_dev_notify(struct notifier_block *me, unsigned long what,
410 struct net_device *dev = arg;
411 struct wireless_dev *wdev;
413 struct ieee80211_hw *hw;
415 struct wl1271 *wl_temp;
418 /* Check that this notification is for us. */
419 if (what != NETDEV_CHANGE)
422 wdev = dev->ieee80211_ptr;
430 hw = wiphy_priv(wiphy);
435 mutex_lock(&wl_list_mutex);
436 list_for_each_entry(wl, &wl_list, list) {
440 mutex_unlock(&wl_list_mutex);
444 mutex_lock(&wl->mutex);
446 if (wl->state == WL1271_STATE_OFF)
449 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
452 ret = wl1271_ps_elp_wakeup(wl);
456 wl1271_check_operstate(wl, dev->operstate);
458 wl1271_ps_elp_sleep(wl);
461 mutex_unlock(&wl->mutex);
466 static int wl1271_reg_notify(struct wiphy *wiphy,
467 struct regulatory_request *request)
469 struct ieee80211_supported_band *band;
470 struct ieee80211_channel *ch;
473 band = wiphy->bands[IEEE80211_BAND_5GHZ];
474 for (i = 0; i < band->n_channels; i++) {
475 ch = &band->channels[i];
476 if (ch->flags & IEEE80211_CHAN_DISABLED)
479 if (ch->flags & IEEE80211_CHAN_RADAR)
480 ch->flags |= IEEE80211_CHAN_NO_IBSS |
481 IEEE80211_CHAN_PASSIVE_SCAN;
488 static int wl1271_set_rx_streaming(struct wl1271 *wl, bool enable)
492 /* we should hold wl->mutex */
493 ret = wl1271_acx_ps_rx_streaming(wl, enable);
498 set_bit(WL1271_FLAG_RX_STREAMING_STARTED, &wl->flags);
500 clear_bit(WL1271_FLAG_RX_STREAMING_STARTED, &wl->flags);
506 * this function is being called when the rx_streaming interval
507 * has beed changed or rx_streaming should be disabled
509 int wl1271_recalc_rx_streaming(struct wl1271 *wl)
512 int period = wl->conf.rx_streaming.interval;
514 /* don't reconfigure if rx_streaming is disabled */
515 if (!test_bit(WL1271_FLAG_RX_STREAMING_STARTED, &wl->flags))
518 /* reconfigure/disable according to new streaming_period */
520 test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags) &&
521 (wl->conf.rx_streaming.always ||
522 test_bit(WL1271_FLAG_SOFT_GEMINI, &wl->flags)))
523 ret = wl1271_set_rx_streaming(wl, true);
525 ret = wl1271_set_rx_streaming(wl, false);
526 /* don't cancel_work_sync since we might deadlock */
527 del_timer_sync(&wl->rx_streaming_timer);
533 static void wl1271_rx_streaming_enable_work(struct work_struct *work)
537 container_of(work, struct wl1271, rx_streaming_enable_work);
539 mutex_lock(&wl->mutex);
541 if (test_bit(WL1271_FLAG_RX_STREAMING_STARTED, &wl->flags) ||
542 !test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags) ||
543 (!wl->conf.rx_streaming.always &&
544 !test_bit(WL1271_FLAG_SOFT_GEMINI, &wl->flags)))
547 if (!wl->conf.rx_streaming.interval)
550 ret = wl1271_ps_elp_wakeup(wl);
554 ret = wl1271_set_rx_streaming(wl, true);
558 /* stop it after some time of inactivity */
559 mod_timer(&wl->rx_streaming_timer,
560 jiffies + msecs_to_jiffies(wl->conf.rx_streaming.duration));
563 wl1271_ps_elp_sleep(wl);
565 mutex_unlock(&wl->mutex);
568 static void wl1271_rx_streaming_disable_work(struct work_struct *work)
572 container_of(work, struct wl1271, rx_streaming_disable_work);
574 mutex_lock(&wl->mutex);
576 if (!test_bit(WL1271_FLAG_RX_STREAMING_STARTED, &wl->flags))
579 ret = wl1271_ps_elp_wakeup(wl);
583 ret = wl1271_set_rx_streaming(wl, false);
588 wl1271_ps_elp_sleep(wl);
590 mutex_unlock(&wl->mutex);
593 static void wl1271_rx_streaming_timer(unsigned long data)
595 struct wl1271 *wl = (struct wl1271 *)data;
596 ieee80211_queue_work(wl->hw, &wl->rx_streaming_disable_work);
599 static void wl1271_conf_init(struct wl1271 *wl)
603 * This function applies the default configuration to the driver. This
604 * function is invoked upon driver load (spi probe.)
606 * The configuration is stored in a run-time structure in order to
607 * facilitate for run-time adjustment of any of the parameters. Making
608 * changes to the configuration structure will apply the new values on
609 * the next interface up (wl1271_op_start.)
612 /* apply driver default configuration */
613 memcpy(&wl->conf, &default_conf, sizeof(default_conf));
615 /* Adjust settings according to optional module parameters */
617 if (!strcmp(fwlog_param, "continuous")) {
618 wl->conf.fwlog.mode = WL12XX_FWLOG_CONTINUOUS;
619 } else if (!strcmp(fwlog_param, "ondemand")) {
620 wl->conf.fwlog.mode = WL12XX_FWLOG_ON_DEMAND;
621 } else if (!strcmp(fwlog_param, "dbgpins")) {
622 wl->conf.fwlog.mode = WL12XX_FWLOG_CONTINUOUS;
623 wl->conf.fwlog.output = WL12XX_FWLOG_OUTPUT_DBG_PINS;
624 } else if (!strcmp(fwlog_param, "disable")) {
625 wl->conf.fwlog.mem_blocks = 0;
626 wl->conf.fwlog.output = WL12XX_FWLOG_OUTPUT_NONE;
628 wl1271_error("Unknown fwlog parameter %s", fwlog_param);
633 static int wl1271_plt_init(struct wl1271 *wl)
635 struct conf_tx_ac_category *conf_ac;
636 struct conf_tx_tid *conf_tid;
639 if (wl->chip.id == CHIP_ID_1283_PG20)
640 ret = wl128x_cmd_general_parms(wl);
642 ret = wl1271_cmd_general_parms(wl);
646 if (wl->chip.id == CHIP_ID_1283_PG20)
647 ret = wl128x_cmd_radio_parms(wl);
649 ret = wl1271_cmd_radio_parms(wl);
653 if (wl->chip.id != CHIP_ID_1283_PG20) {
654 ret = wl1271_cmd_ext_radio_parms(wl);
661 /* Chip-specific initializations */
662 ret = wl1271_chip_specific_init(wl);
666 ret = wl1271_sta_init_templates_config(wl);
670 ret = wl1271_acx_init_mem_config(wl);
674 /* PHY layer config */
675 ret = wl1271_init_phy_config(wl);
677 goto out_free_memmap;
679 ret = wl1271_acx_dco_itrim_params(wl);
681 goto out_free_memmap;
683 /* Initialize connection monitoring thresholds */
684 ret = wl1271_acx_conn_monit_params(wl, false);
686 goto out_free_memmap;
688 /* Bluetooth WLAN coexistence */
689 ret = wl1271_init_pta(wl);
691 goto out_free_memmap;
693 /* FM WLAN coexistence */
694 ret = wl1271_acx_fm_coex(wl);
696 goto out_free_memmap;
698 /* Energy detection */
699 ret = wl1271_init_energy_detection(wl);
701 goto out_free_memmap;
703 ret = wl12xx_acx_mem_cfg(wl);
705 goto out_free_memmap;
707 /* Default fragmentation threshold */
708 ret = wl1271_acx_frag_threshold(wl, wl->conf.tx.frag_threshold);
710 goto out_free_memmap;
712 /* Default TID/AC configuration */
713 BUG_ON(wl->conf.tx.tid_conf_count != wl->conf.tx.ac_conf_count);
714 for (i = 0; i < wl->conf.tx.tid_conf_count; i++) {
715 conf_ac = &wl->conf.tx.ac_conf[i];
716 ret = wl1271_acx_ac_cfg(wl, conf_ac->ac, conf_ac->cw_min,
717 conf_ac->cw_max, conf_ac->aifsn,
718 conf_ac->tx_op_limit);
720 goto out_free_memmap;
722 conf_tid = &wl->conf.tx.tid_conf[i];
723 ret = wl1271_acx_tid_cfg(wl, conf_tid->queue_id,
724 conf_tid->channel_type,
727 conf_tid->ack_policy,
728 conf_tid->apsd_conf[0],
729 conf_tid->apsd_conf[1]);
731 goto out_free_memmap;
734 /* Enable data path */
735 ret = wl1271_cmd_data_path(wl, 1);
737 goto out_free_memmap;
739 /* Configure for CAM power saving (ie. always active) */
740 ret = wl1271_acx_sleep_auth(wl, WL1271_PSM_CAM);
742 goto out_free_memmap;
745 ret = wl1271_acx_pm_config(wl);
747 goto out_free_memmap;
752 kfree(wl->target_mem_map);
753 wl->target_mem_map = NULL;
758 static void wl12xx_irq_ps_regulate_link(struct wl1271 *wl, u8 hlid, u8 tx_pkts)
762 /* only regulate station links */
763 if (hlid < WL1271_AP_STA_HLID_START)
766 fw_ps = test_bit(hlid, (unsigned long *)&wl->ap_fw_ps_map);
769 * Wake up from high level PS if the STA is asleep with too little
770 * packets in FW or if the STA is awake.
772 if (!fw_ps || tx_pkts < WL1271_PS_STA_MAX_PACKETS)
773 wl1271_ps_link_end(wl, hlid);
775 /* Start high-level PS if the STA is asleep with enough blocks in FW */
776 else if (fw_ps && tx_pkts >= WL1271_PS_STA_MAX_PACKETS)
777 wl1271_ps_link_start(wl, hlid, true);
780 bool wl1271_is_active_sta(struct wl1271 *wl, u8 hlid)
784 /* global/broadcast "stations" are always active */
785 if (hlid < WL1271_AP_STA_HLID_START)
788 id = hlid - WL1271_AP_STA_HLID_START;
789 return test_bit(id, wl->ap_hlid_map);
792 static void wl12xx_irq_update_links_status(struct wl1271 *wl,
793 struct wl12xx_fw_status *status)
798 /* TODO: also use link_fast_bitmap here */
800 cur_fw_ps_map = le32_to_cpu(status->link_ps_bitmap);
801 if (wl->ap_fw_ps_map != cur_fw_ps_map) {
802 wl1271_debug(DEBUG_PSM,
803 "link ps prev 0x%x cur 0x%x changed 0x%x",
804 wl->ap_fw_ps_map, cur_fw_ps_map,
805 wl->ap_fw_ps_map ^ cur_fw_ps_map);
807 wl->ap_fw_ps_map = cur_fw_ps_map;
810 for (hlid = WL1271_AP_STA_HLID_START; hlid < AP_MAX_LINKS; hlid++) {
811 if (!wl1271_is_active_sta(wl, hlid))
814 cnt = status->tx_lnk_free_pkts[hlid] -
815 wl->links[hlid].prev_freed_pkts;
817 wl->links[hlid].prev_freed_pkts =
818 status->tx_lnk_free_pkts[hlid];
819 wl->links[hlid].allocated_pkts -= cnt;
821 wl12xx_irq_ps_regulate_link(wl, hlid,
822 wl->links[hlid].allocated_pkts);
826 static void wl12xx_fw_status(struct wl1271 *wl,
827 struct wl12xx_fw_status *status)
830 u32 old_tx_blk_count = wl->tx_blocks_available;
831 int avail, freed_blocks;
834 wl1271_raw_read(wl, FW_STATUS_ADDR, status, sizeof(*status), false);
836 wl1271_debug(DEBUG_IRQ, "intr: 0x%x (fw_rx_counter = %d, "
837 "drv_rx_counter = %d, tx_results_counter = %d)",
839 status->fw_rx_counter,
840 status->drv_rx_counter,
841 status->tx_results_counter);
843 for (i = 0; i < NUM_TX_QUEUES; i++) {
844 /* prevent wrap-around in freed-packets counter */
845 wl->tx_allocated_pkts[i] -=
846 (status->tx_released_pkts[i] -
847 wl->tx_pkts_freed[i]) & 0xff;
849 wl->tx_pkts_freed[i] = status->tx_released_pkts[i];
852 /* prevent wrap-around in total blocks counter */
853 if (likely(wl->tx_blocks_freed <=
854 le32_to_cpu(status->total_released_blks)))
855 freed_blocks = le32_to_cpu(status->total_released_blks) -
858 freed_blocks = 0x100000000LL - wl->tx_blocks_freed +
859 le32_to_cpu(status->total_released_blks);
861 wl->tx_blocks_freed = le32_to_cpu(status->total_released_blks);
863 wl->tx_allocated_blocks -= freed_blocks;
865 avail = le32_to_cpu(status->tx_total) - wl->tx_allocated_blocks;
868 * The FW might change the total number of TX memblocks before
869 * we get a notification about blocks being released. Thus, the
870 * available blocks calculation might yield a temporary result
871 * which is lower than the actual available blocks. Keeping in
872 * mind that only blocks that were allocated can be moved from
873 * TX to RX, tx_blocks_available should never decrease here.
875 wl->tx_blocks_available = max((int)wl->tx_blocks_available,
878 /* if more blocks are available now, tx work can be scheduled */
879 if (wl->tx_blocks_available > old_tx_blk_count)
880 clear_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags);
882 /* for AP update num of allocated TX blocks per link and ps status */
883 if (wl->bss_type == BSS_TYPE_AP_BSS)
884 wl12xx_irq_update_links_status(wl, status);
886 /* update the host-chipset time offset */
888 wl->time_offset = (timespec_to_ns(&ts) >> 10) -
889 (s64)le32_to_cpu(status->fw_localtime);
892 static void wl1271_flush_deferred_work(struct wl1271 *wl)
896 /* Pass all received frames to the network stack */
897 while ((skb = skb_dequeue(&wl->deferred_rx_queue)))
898 ieee80211_rx_ni(wl->hw, skb);
900 /* Return sent skbs to the network stack */
901 while ((skb = skb_dequeue(&wl->deferred_tx_queue)))
902 ieee80211_tx_status_ni(wl->hw, skb);
905 static void wl1271_netstack_work(struct work_struct *work)
908 container_of(work, struct wl1271, netstack_work);
911 wl1271_flush_deferred_work(wl);
912 } while (skb_queue_len(&wl->deferred_rx_queue));
915 #define WL1271_IRQ_MAX_LOOPS 256
917 irqreturn_t wl1271_irq(int irq, void *cookie)
921 int loopcount = WL1271_IRQ_MAX_LOOPS;
922 struct wl1271 *wl = (struct wl1271 *)cookie;
924 unsigned int defer_count;
927 /* TX might be handled here, avoid redundant work */
928 set_bit(WL1271_FLAG_TX_PENDING, &wl->flags);
929 cancel_work_sync(&wl->tx_work);
932 * In case edge triggered interrupt must be used, we cannot iterate
933 * more than once without introducing race conditions with the hardirq.
935 if (wl->platform_quirks & WL12XX_PLATFORM_QUIRK_EDGE_IRQ)
938 mutex_lock(&wl->mutex);
940 wl1271_debug(DEBUG_IRQ, "IRQ work");
942 if (unlikely(wl->state == WL1271_STATE_OFF))
945 ret = wl1271_ps_elp_wakeup(wl);
949 while (!done && loopcount--) {
951 * In order to avoid a race with the hardirq, clear the flag
952 * before acknowledging the chip. Since the mutex is held,
953 * wl1271_ps_elp_wakeup cannot be called concurrently.
955 clear_bit(WL1271_FLAG_IRQ_RUNNING, &wl->flags);
956 smp_mb__after_clear_bit();
958 wl12xx_fw_status(wl, wl->fw_status);
959 intr = le32_to_cpu(wl->fw_status->intr);
960 intr &= WL1271_INTR_MASK;
966 if (unlikely(intr & WL1271_ACX_INTR_WATCHDOG)) {
967 wl1271_error("watchdog interrupt received! "
968 "starting recovery.");
969 wl12xx_queue_recovery_work(wl);
971 /* restarting the chip. ignore any other interrupt. */
975 if (likely(intr & WL1271_ACX_INTR_DATA)) {
976 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_DATA");
978 wl12xx_rx(wl, wl->fw_status);
980 /* Check if any tx blocks were freed */
981 spin_lock_irqsave(&wl->wl_lock, flags);
982 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags) &&
983 wl1271_tx_total_queue_count(wl) > 0) {
984 spin_unlock_irqrestore(&wl->wl_lock, flags);
986 * In order to avoid starvation of the TX path,
987 * call the work function directly.
989 wl1271_tx_work_locked(wl);
991 spin_unlock_irqrestore(&wl->wl_lock, flags);
994 /* check for tx results */
995 if (wl->fw_status->tx_results_counter !=
996 (wl->tx_results_count & 0xff))
997 wl1271_tx_complete(wl);
999 /* Make sure the deferred queues don't get too long */
1000 defer_count = skb_queue_len(&wl->deferred_tx_queue) +
1001 skb_queue_len(&wl->deferred_rx_queue);
1002 if (defer_count > WL1271_DEFERRED_QUEUE_LIMIT)
1003 wl1271_flush_deferred_work(wl);
1006 if (intr & WL1271_ACX_INTR_EVENT_A) {
1007 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_A");
1008 wl1271_event_handle(wl, 0);
1011 if (intr & WL1271_ACX_INTR_EVENT_B) {
1012 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_B");
1013 wl1271_event_handle(wl, 1);
1016 if (intr & WL1271_ACX_INTR_INIT_COMPLETE)
1017 wl1271_debug(DEBUG_IRQ,
1018 "WL1271_ACX_INTR_INIT_COMPLETE");
1020 if (intr & WL1271_ACX_INTR_HW_AVAILABLE)
1021 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_HW_AVAILABLE");
1024 wl1271_ps_elp_sleep(wl);
1027 spin_lock_irqsave(&wl->wl_lock, flags);
1028 /* In case TX was not handled here, queue TX work */
1029 clear_bit(WL1271_FLAG_TX_PENDING, &wl->flags);
1030 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags) &&
1031 wl1271_tx_total_queue_count(wl) > 0)
1032 ieee80211_queue_work(wl->hw, &wl->tx_work);
1033 spin_unlock_irqrestore(&wl->wl_lock, flags);
1035 mutex_unlock(&wl->mutex);
1039 EXPORT_SYMBOL_GPL(wl1271_irq);
1041 static int wl1271_fetch_firmware(struct wl1271 *wl)
1043 const struct firmware *fw;
1044 const char *fw_name;
1047 if (wl->chip.id == CHIP_ID_1283_PG20)
1048 fw_name = WL128X_FW_NAME;
1050 fw_name = WL127X_FW_NAME;
1052 wl1271_debug(DEBUG_BOOT, "booting firmware %s", fw_name);
1054 ret = request_firmware(&fw, fw_name, wl1271_wl_to_dev(wl));
1057 wl1271_error("could not get firmware: %d", ret);
1062 wl1271_error("firmware size is not multiple of 32 bits: %zu",
1069 wl->fw_len = fw->size;
1070 wl->fw = vmalloc(wl->fw_len);
1073 wl1271_error("could not allocate memory for the firmware");
1078 memcpy(wl->fw, fw->data, wl->fw_len);
1082 release_firmware(fw);
1087 static int wl1271_fetch_nvs(struct wl1271 *wl)
1089 const struct firmware *fw;
1092 ret = request_firmware(&fw, WL12XX_NVS_NAME, wl1271_wl_to_dev(wl));
1095 wl1271_error("could not get nvs file: %d", ret);
1099 wl->nvs = kmemdup(fw->data, fw->size, GFP_KERNEL);
1102 wl1271_error("could not allocate memory for the nvs file");
1107 wl->nvs_len = fw->size;
1110 release_firmware(fw);
1115 void wl12xx_queue_recovery_work(struct wl1271 *wl)
1117 if (!test_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags))
1118 ieee80211_queue_work(wl->hw, &wl->recovery_work);
1121 size_t wl12xx_copy_fwlog(struct wl1271 *wl, u8 *memblock, size_t maxlen)
1125 /* The FW log is a length-value list, find where the log end */
1126 while (len < maxlen) {
1127 if (memblock[len] == 0)
1129 if (len + memblock[len] + 1 > maxlen)
1131 len += memblock[len] + 1;
1134 /* Make sure we have enough room */
1135 len = min(len, (size_t)(PAGE_SIZE - wl->fwlog_size));
1137 /* Fill the FW log file, consumed by the sysfs fwlog entry */
1138 memcpy(wl->fwlog + wl->fwlog_size, memblock, len);
1139 wl->fwlog_size += len;
1144 static void wl12xx_read_fwlog_panic(struct wl1271 *wl)
1150 if ((wl->quirks & WL12XX_QUIRK_FWLOG_NOT_IMPLEMENTED) ||
1151 (wl->conf.fwlog.mode != WL12XX_FWLOG_ON_DEMAND) ||
1152 (wl->conf.fwlog.mem_blocks == 0))
1155 wl1271_info("Reading FW panic log");
1157 block = kmalloc(WL12XX_HW_BLOCK_SIZE, GFP_KERNEL);
1162 * Make sure the chip is awake and the logger isn't active.
1163 * This might fail if the firmware hanged.
1165 if (!wl1271_ps_elp_wakeup(wl))
1166 wl12xx_cmd_stop_fwlog(wl);
1168 /* Read the first memory block address */
1169 wl12xx_fw_status(wl, wl->fw_status);
1170 first_addr = le32_to_cpu(wl->fw_status->log_start_addr);
1174 /* Traverse the memory blocks linked list */
1177 memset(block, 0, WL12XX_HW_BLOCK_SIZE);
1178 wl1271_read_hwaddr(wl, addr, block, WL12XX_HW_BLOCK_SIZE,
1182 * Memory blocks are linked to one another. The first 4 bytes
1183 * of each memory block hold the hardware address of the next
1184 * one. The last memory block points to the first one.
1186 addr = le32_to_cpup((__le32 *)block);
1187 if (!wl12xx_copy_fwlog(wl, block + sizeof(addr),
1188 WL12XX_HW_BLOCK_SIZE - sizeof(addr)))
1190 } while (addr && (addr != first_addr));
1192 wake_up_interruptible(&wl->fwlog_waitq);
1198 static void wl1271_recovery_work(struct work_struct *work)
1201 container_of(work, struct wl1271, recovery_work);
1203 mutex_lock(&wl->mutex);
1205 if (wl->state != WL1271_STATE_ON)
1208 /* Avoid a recursive recovery */
1209 set_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags);
1211 wl12xx_read_fwlog_panic(wl);
1213 wl1271_info("Hardware recovery in progress. FW ver: %s pc: 0x%x",
1214 wl->chip.fw_ver_str, wl1271_read32(wl, SCR_PAD4));
1217 * Advance security sequence number to overcome potential progress
1218 * in the firmware during recovery. This doens't hurt if the network is
1221 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags) ||
1222 test_bit(WL1271_FLAG_AP_STARTED, &wl->flags))
1223 wl->tx_security_seq += WL1271_TX_SQN_POST_RECOVERY_PADDING;
1225 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1226 ieee80211_connection_loss(wl->vif);
1228 /* Prevent spurious TX during FW restart */
1229 ieee80211_stop_queues(wl->hw);
1231 if (wl->sched_scanning) {
1232 ieee80211_sched_scan_stopped(wl->hw);
1233 wl->sched_scanning = false;
1236 /* reboot the chipset */
1237 __wl1271_op_remove_interface(wl, false);
1239 clear_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags);
1241 ieee80211_restart_hw(wl->hw);
1244 * Its safe to enable TX now - the queues are stopped after a request
1245 * to restart the HW.
1247 ieee80211_wake_queues(wl->hw);
1250 mutex_unlock(&wl->mutex);
1253 static void wl1271_fw_wakeup(struct wl1271 *wl)
1257 elp_reg = ELPCTRL_WAKE_UP;
1258 wl1271_raw_write32(wl, HW_ACCESS_ELP_CTRL_REG_ADDR, elp_reg);
1261 static int wl1271_setup(struct wl1271 *wl)
1263 wl->fw_status = kmalloc(sizeof(*wl->fw_status), GFP_KERNEL);
1267 wl->tx_res_if = kmalloc(sizeof(*wl->tx_res_if), GFP_KERNEL);
1268 if (!wl->tx_res_if) {
1269 kfree(wl->fw_status);
1276 static int wl1271_chip_wakeup(struct wl1271 *wl)
1278 struct wl1271_partition_set partition;
1281 msleep(WL1271_PRE_POWER_ON_SLEEP);
1282 ret = wl1271_power_on(wl);
1285 msleep(WL1271_POWER_ON_SLEEP);
1286 wl1271_io_reset(wl);
1289 /* We don't need a real memory partition here, because we only want
1290 * to use the registers at this point. */
1291 memset(&partition, 0, sizeof(partition));
1292 partition.reg.start = REGISTERS_BASE;
1293 partition.reg.size = REGISTERS_DOWN_SIZE;
1294 wl1271_set_partition(wl, &partition);
1296 /* ELP module wake up */
1297 wl1271_fw_wakeup(wl);
1299 /* whal_FwCtrl_BootSm() */
1301 /* 0. read chip id from CHIP_ID */
1302 wl->chip.id = wl1271_read32(wl, CHIP_ID_B);
1304 /* 1. check if chip id is valid */
1306 switch (wl->chip.id) {
1307 case CHIP_ID_1271_PG10:
1308 wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
1311 ret = wl1271_setup(wl);
1315 case CHIP_ID_1271_PG20:
1316 wl1271_debug(DEBUG_BOOT, "chip id 0x%x (1271 PG20)",
1320 * 'end-of-transaction flag' and 'LPD mode flag'
1321 * should be set in wl127x AP mode only
1323 if (wl->bss_type == BSS_TYPE_AP_BSS)
1324 wl->quirks |= (WL12XX_QUIRK_END_OF_TRANSACTION |
1325 WL12XX_QUIRK_LPD_MODE);
1327 ret = wl1271_setup(wl);
1331 case CHIP_ID_1283_PG20:
1332 wl1271_debug(DEBUG_BOOT, "chip id 0x%x (1283 PG20)",
1335 ret = wl1271_setup(wl);
1339 if (wl1271_set_block_size(wl))
1340 wl->quirks |= WL12XX_QUIRK_BLOCKSIZE_ALIGNMENT;
1342 case CHIP_ID_1283_PG10:
1344 wl1271_warning("unsupported chip id: 0x%x", wl->chip.id);
1349 if (wl->fw == NULL) {
1350 ret = wl1271_fetch_firmware(wl);
1355 /* No NVS from netlink, try to get it from the filesystem */
1356 if (wl->nvs == NULL) {
1357 ret = wl1271_fetch_nvs(wl);
1366 int wl1271_plt_start(struct wl1271 *wl)
1368 int retries = WL1271_BOOT_RETRIES;
1369 struct wiphy *wiphy = wl->hw->wiphy;
1372 mutex_lock(&wl->mutex);
1374 wl1271_notice("power up");
1376 if (wl->state != WL1271_STATE_OFF) {
1377 wl1271_error("cannot go into PLT state because not "
1378 "in off state: %d", wl->state);
1383 wl->bss_type = BSS_TYPE_STA_BSS;
1387 ret = wl1271_chip_wakeup(wl);
1391 ret = wl1271_boot(wl);
1395 ret = wl1271_plt_init(wl);
1399 wl->state = WL1271_STATE_PLT;
1400 wl1271_notice("firmware booted in PLT mode (%s)",
1401 wl->chip.fw_ver_str);
1403 /* update hw/fw version info in wiphy struct */
1404 wiphy->hw_version = wl->chip.id;
1405 strncpy(wiphy->fw_version, wl->chip.fw_ver_str,
1406 sizeof(wiphy->fw_version));
1411 mutex_unlock(&wl->mutex);
1412 /* Unlocking the mutex in the middle of handling is
1413 inherently unsafe. In this case we deem it safe to do,
1414 because we need to let any possibly pending IRQ out of
1415 the system (and while we are WL1271_STATE_OFF the IRQ
1416 work function will not do anything.) Also, any other
1417 possible concurrent operations will fail due to the
1418 current state, hence the wl1271 struct should be safe. */
1419 wl1271_disable_interrupts(wl);
1420 wl1271_flush_deferred_work(wl);
1421 cancel_work_sync(&wl->netstack_work);
1422 mutex_lock(&wl->mutex);
1424 wl1271_power_off(wl);
1427 wl1271_error("firmware boot in PLT mode failed despite %d retries",
1428 WL1271_BOOT_RETRIES);
1430 mutex_unlock(&wl->mutex);
1435 static int __wl1271_plt_stop(struct wl1271 *wl)
1439 wl1271_notice("power down");
1441 if (wl->state != WL1271_STATE_PLT) {
1442 wl1271_error("cannot power down because not in PLT "
1443 "state: %d", wl->state);
1448 wl1271_power_off(wl);
1450 wl->state = WL1271_STATE_OFF;
1453 mutex_unlock(&wl->mutex);
1454 wl1271_disable_interrupts(wl);
1455 wl1271_flush_deferred_work(wl);
1456 cancel_work_sync(&wl->netstack_work);
1457 cancel_work_sync(&wl->recovery_work);
1458 mutex_lock(&wl->mutex);
1463 int wl1271_plt_stop(struct wl1271 *wl)
1467 mutex_lock(&wl->mutex);
1468 ret = __wl1271_plt_stop(wl);
1469 mutex_unlock(&wl->mutex);
1473 static void wl1271_op_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
1475 struct wl1271 *wl = hw->priv;
1476 unsigned long flags;
1480 mapping = skb_get_queue_mapping(skb);
1481 q = wl1271_tx_get_queue(mapping);
1483 if (wl->bss_type == BSS_TYPE_AP_BSS)
1484 hlid = wl12xx_tx_get_hlid_ap(wl, skb);
1486 spin_lock_irqsave(&wl->wl_lock, flags);
1488 /* queue the packet */
1489 if (wl->bss_type == BSS_TYPE_AP_BSS) {
1490 if (!wl1271_is_active_sta(wl, hlid)) {
1491 wl1271_debug(DEBUG_TX, "DROP skb hlid %d q %d",
1497 wl1271_debug(DEBUG_TX, "queue skb hlid %d q %d", hlid, q);
1498 skb_queue_tail(&wl->links[hlid].tx_queue[q], skb);
1500 skb_queue_tail(&wl->tx_queue[q], skb);
1503 wl->tx_queue_count[q]++;
1506 * The workqueue is slow to process the tx_queue and we need stop
1507 * the queue here, otherwise the queue will get too long.
1509 if (wl->tx_queue_count[q] >= WL1271_TX_QUEUE_HIGH_WATERMARK) {
1510 wl1271_debug(DEBUG_TX, "op_tx: stopping queues for q %d", q);
1511 ieee80211_stop_queue(wl->hw, mapping);
1512 set_bit(q, &wl->stopped_queues_map);
1516 * The chip specific setup must run before the first TX packet -
1517 * before that, the tx_work will not be initialized!
1520 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags) &&
1521 !test_bit(WL1271_FLAG_TX_PENDING, &wl->flags))
1522 ieee80211_queue_work(wl->hw, &wl->tx_work);
1525 spin_unlock_irqrestore(&wl->wl_lock, flags);
1528 int wl1271_tx_dummy_packet(struct wl1271 *wl)
1530 unsigned long flags;
1531 int q = wl1271_tx_get_queue(skb_get_queue_mapping(wl->dummy_packet));
1533 spin_lock_irqsave(&wl->wl_lock, flags);
1534 set_bit(WL1271_FLAG_DUMMY_PACKET_PENDING, &wl->flags);
1535 wl->tx_queue_count[q]++;
1536 spin_unlock_irqrestore(&wl->wl_lock, flags);
1538 /* The FW is low on RX memory blocks, so send the dummy packet asap */
1539 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags))
1540 wl1271_tx_work_locked(wl);
1543 * If the FW TX is busy, TX work will be scheduled by the threaded
1544 * interrupt handler function
1550 * The size of the dummy packet should be at least 1400 bytes. However, in
1551 * order to minimize the number of bus transactions, aligning it to 512 bytes
1552 * boundaries could be beneficial, performance wise
1554 #define TOTAL_TX_DUMMY_PACKET_SIZE (ALIGN(1400, 512))
1556 static struct sk_buff *wl12xx_alloc_dummy_packet(struct wl1271 *wl)
1558 struct sk_buff *skb;
1559 struct ieee80211_hdr_3addr *hdr;
1560 unsigned int dummy_packet_size;
1562 dummy_packet_size = TOTAL_TX_DUMMY_PACKET_SIZE -
1563 sizeof(struct wl1271_tx_hw_descr) - sizeof(*hdr);
1565 skb = dev_alloc_skb(TOTAL_TX_DUMMY_PACKET_SIZE);
1567 wl1271_warning("Failed to allocate a dummy packet skb");
1571 skb_reserve(skb, sizeof(struct wl1271_tx_hw_descr));
1573 hdr = (struct ieee80211_hdr_3addr *) skb_put(skb, sizeof(*hdr));
1574 memset(hdr, 0, sizeof(*hdr));
1575 hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_DATA |
1576 IEEE80211_STYPE_NULLFUNC |
1577 IEEE80211_FCTL_TODS);
1579 memset(skb_put(skb, dummy_packet_size), 0, dummy_packet_size);
1581 /* Dummy packets require the TID to be management */
1582 skb->priority = WL1271_TID_MGMT;
1584 /* Initialize all fields that might be used */
1585 skb_set_queue_mapping(skb, 0);
1586 memset(IEEE80211_SKB_CB(skb), 0, sizeof(struct ieee80211_tx_info));
1592 static struct notifier_block wl1271_dev_notifier = {
1593 .notifier_call = wl1271_dev_notify,
1597 static int wl1271_configure_suspend_sta(struct wl1271 *wl)
1601 mutex_lock(&wl->mutex);
1603 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1606 ret = wl1271_ps_elp_wakeup(wl);
1610 /* enter psm if needed*/
1611 if (!test_bit(WL1271_FLAG_PSM, &wl->flags)) {
1612 DECLARE_COMPLETION_ONSTACK(compl);
1614 wl->ps_compl = &compl;
1615 ret = wl1271_ps_set_mode(wl, STATION_POWER_SAVE_MODE,
1616 wl->basic_rate, true);
1620 /* we must unlock here so we will be able to get events */
1621 wl1271_ps_elp_sleep(wl);
1622 mutex_unlock(&wl->mutex);
1624 ret = wait_for_completion_timeout(
1625 &compl, msecs_to_jiffies(WL1271_PS_COMPLETE_TIMEOUT));
1627 wl1271_warning("couldn't enter ps mode!");
1632 /* take mutex again, and wakeup */
1633 mutex_lock(&wl->mutex);
1635 ret = wl1271_ps_elp_wakeup(wl);
1640 wl1271_ps_elp_sleep(wl);
1642 mutex_unlock(&wl->mutex);
1648 static int wl1271_configure_suspend_ap(struct wl1271 *wl)
1652 mutex_lock(&wl->mutex);
1654 if (!test_bit(WL1271_FLAG_AP_STARTED, &wl->flags))
1657 ret = wl1271_ps_elp_wakeup(wl);
1661 ret = wl1271_acx_beacon_filter_opt(wl, true);
1663 wl1271_ps_elp_sleep(wl);
1665 mutex_unlock(&wl->mutex);
1670 static int wl1271_configure_suspend(struct wl1271 *wl)
1672 if (wl->bss_type == BSS_TYPE_STA_BSS)
1673 return wl1271_configure_suspend_sta(wl);
1674 if (wl->bss_type == BSS_TYPE_AP_BSS)
1675 return wl1271_configure_suspend_ap(wl);
1679 static void wl1271_configure_resume(struct wl1271 *wl)
1682 bool is_sta = wl->bss_type == BSS_TYPE_STA_BSS;
1683 bool is_ap = wl->bss_type == BSS_TYPE_AP_BSS;
1685 if (!is_sta && !is_ap)
1688 mutex_lock(&wl->mutex);
1689 ret = wl1271_ps_elp_wakeup(wl);
1694 /* exit psm if it wasn't configured */
1695 if (!test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags))
1696 wl1271_ps_set_mode(wl, STATION_ACTIVE_MODE,
1697 wl->basic_rate, true);
1699 wl1271_acx_beacon_filter_opt(wl, false);
1702 wl1271_ps_elp_sleep(wl);
1704 mutex_unlock(&wl->mutex);
1707 static int wl1271_op_suspend(struct ieee80211_hw *hw,
1708 struct cfg80211_wowlan *wow)
1710 struct wl1271 *wl = hw->priv;
1713 wl1271_debug(DEBUG_MAC80211, "mac80211 suspend wow=%d", !!wow);
1714 WARN_ON(!wow || !wow->any);
1716 wl->wow_enabled = true;
1717 ret = wl1271_configure_suspend(wl);
1719 wl1271_warning("couldn't prepare device to suspend");
1722 /* flush any remaining work */
1723 wl1271_debug(DEBUG_MAC80211, "flushing remaining works");
1726 * disable and re-enable interrupts in order to flush
1729 wl1271_disable_interrupts(wl);
1732 * set suspended flag to avoid triggering a new threaded_irq
1733 * work. no need for spinlock as interrupts are disabled.
1735 set_bit(WL1271_FLAG_SUSPENDED, &wl->flags);
1737 wl1271_enable_interrupts(wl);
1738 flush_work(&wl->tx_work);
1739 flush_delayed_work(&wl->pspoll_work);
1740 flush_delayed_work(&wl->elp_work);
1745 static int wl1271_op_resume(struct ieee80211_hw *hw)
1747 struct wl1271 *wl = hw->priv;
1748 unsigned long flags;
1749 bool run_irq_work = false;
1751 wl1271_debug(DEBUG_MAC80211, "mac80211 resume wow=%d",
1753 WARN_ON(!wl->wow_enabled);
1756 * re-enable irq_work enqueuing, and call irq_work directly if
1757 * there is a pending work.
1759 spin_lock_irqsave(&wl->wl_lock, flags);
1760 clear_bit(WL1271_FLAG_SUSPENDED, &wl->flags);
1761 if (test_and_clear_bit(WL1271_FLAG_PENDING_WORK, &wl->flags))
1762 run_irq_work = true;
1763 spin_unlock_irqrestore(&wl->wl_lock, flags);
1766 wl1271_debug(DEBUG_MAC80211,
1767 "run postponed irq_work directly");
1769 wl1271_enable_interrupts(wl);
1771 wl1271_configure_resume(wl);
1772 wl->wow_enabled = false;
1778 static int wl1271_op_start(struct ieee80211_hw *hw)
1780 wl1271_debug(DEBUG_MAC80211, "mac80211 start");
1783 * We have to delay the booting of the hardware because
1784 * we need to know the local MAC address before downloading and
1785 * initializing the firmware. The MAC address cannot be changed
1786 * after boot, and without the proper MAC address, the firmware
1787 * will not function properly.
1789 * The MAC address is first known when the corresponding interface
1790 * is added. That is where we will initialize the hardware.
1796 static void wl1271_op_stop(struct ieee80211_hw *hw)
1798 wl1271_debug(DEBUG_MAC80211, "mac80211 stop");
1801 static u8 wl12xx_get_role_type(struct wl1271 *wl)
1803 switch (wl->bss_type) {
1804 case BSS_TYPE_AP_BSS:
1805 return WL1271_ROLE_AP;
1807 case BSS_TYPE_STA_BSS:
1808 return WL1271_ROLE_STA;
1811 return WL1271_ROLE_IBSS;
1814 wl1271_error("invalid bss_type: %d", wl->bss_type);
1816 return WL12XX_INVALID_ROLE_TYPE;
1819 static int wl1271_op_add_interface(struct ieee80211_hw *hw,
1820 struct ieee80211_vif *vif)
1822 struct wl1271 *wl = hw->priv;
1823 struct wiphy *wiphy = hw->wiphy;
1824 int retries = WL1271_BOOT_RETRIES;
1827 bool booted = false;
1829 wl1271_debug(DEBUG_MAC80211, "mac80211 add interface type %d mac %pM",
1830 vif->type, vif->addr);
1832 mutex_lock(&wl->mutex);
1834 wl1271_debug(DEBUG_MAC80211,
1835 "multiple vifs are not supported yet");
1841 * in some very corner case HW recovery scenarios its possible to
1842 * get here before __wl1271_op_remove_interface is complete, so
1843 * opt out if that is the case.
1845 if (test_bit(WL1271_FLAG_IF_INITIALIZED, &wl->flags)) {
1850 switch (vif->type) {
1851 case NL80211_IFTYPE_STATION:
1852 wl->bss_type = BSS_TYPE_STA_BSS;
1853 wl->set_bss_type = BSS_TYPE_STA_BSS;
1855 case NL80211_IFTYPE_ADHOC:
1856 wl->bss_type = BSS_TYPE_IBSS;
1857 wl->set_bss_type = BSS_TYPE_STA_BSS;
1859 case NL80211_IFTYPE_AP:
1860 wl->bss_type = BSS_TYPE_AP_BSS;
1867 role_type = wl12xx_get_role_type(wl);
1868 if (role_type == WL12XX_INVALID_ROLE_TYPE) {
1872 memcpy(wl->mac_addr, vif->addr, ETH_ALEN);
1874 if (wl->state != WL1271_STATE_OFF) {
1875 wl1271_error("cannot start because not in off state: %d",
1883 ret = wl1271_chip_wakeup(wl);
1887 ret = wl1271_boot(wl);
1891 if (wl->bss_type == BSS_TYPE_STA_BSS ||
1892 wl->bss_type == BSS_TYPE_IBSS) {
1894 * The device role is a special role used for
1895 * rx and tx frames prior to association (as
1896 * the STA role can get packets only from
1897 * its associated bssid)
1899 ret = wl12xx_cmd_role_enable(wl,
1906 ret = wl12xx_cmd_role_enable(wl, role_type, &wl->role_id);
1910 ret = wl1271_hw_init(wl);
1918 mutex_unlock(&wl->mutex);
1919 /* Unlocking the mutex in the middle of handling is
1920 inherently unsafe. In this case we deem it safe to do,
1921 because we need to let any possibly pending IRQ out of
1922 the system (and while we are WL1271_STATE_OFF the IRQ
1923 work function will not do anything.) Also, any other
1924 possible concurrent operations will fail due to the
1925 current state, hence the wl1271 struct should be safe. */
1926 wl1271_disable_interrupts(wl);
1927 wl1271_flush_deferred_work(wl);
1928 cancel_work_sync(&wl->netstack_work);
1929 mutex_lock(&wl->mutex);
1931 wl1271_power_off(wl);
1935 wl1271_error("firmware boot failed despite %d retries",
1936 WL1271_BOOT_RETRIES);
1941 wl->state = WL1271_STATE_ON;
1942 set_bit(WL1271_FLAG_IF_INITIALIZED, &wl->flags);
1943 wl1271_info("firmware booted (%s)", wl->chip.fw_ver_str);
1945 /* update hw/fw version info in wiphy struct */
1946 wiphy->hw_version = wl->chip.id;
1947 strncpy(wiphy->fw_version, wl->chip.fw_ver_str,
1948 sizeof(wiphy->fw_version));
1951 * Now we know if 11a is supported (info from the NVS), so disable
1952 * 11a channels if not supported
1954 if (!wl->enable_11a)
1955 wiphy->bands[IEEE80211_BAND_5GHZ]->n_channels = 0;
1957 wl1271_debug(DEBUG_MAC80211, "11a is %ssupported",
1958 wl->enable_11a ? "" : "not ");
1961 mutex_unlock(&wl->mutex);
1963 mutex_lock(&wl_list_mutex);
1965 list_add(&wl->list, &wl_list);
1966 mutex_unlock(&wl_list_mutex);
1971 static void __wl1271_op_remove_interface(struct wl1271 *wl,
1972 bool reset_tx_queues)
1976 wl1271_debug(DEBUG_MAC80211, "mac80211 remove interface");
1978 /* because of hardware recovery, we may get here twice */
1979 if (wl->state != WL1271_STATE_ON)
1982 wl1271_info("down");
1984 mutex_lock(&wl_list_mutex);
1985 list_del(&wl->list);
1986 mutex_unlock(&wl_list_mutex);
1988 /* enable dyn ps just in case (if left on due to fw crash etc) */
1989 if (wl->bss_type == BSS_TYPE_STA_BSS)
1990 ieee80211_enable_dyn_ps(wl->vif);
1992 if (wl->scan.state != WL1271_SCAN_STATE_IDLE) {
1993 wl->scan.state = WL1271_SCAN_STATE_IDLE;
1994 memset(wl->scan.scanned_ch, 0, sizeof(wl->scan.scanned_ch));
1995 wl->scan.req = NULL;
1996 ieee80211_scan_completed(wl->hw, true);
1999 if (!test_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags)) {
2000 /* disable active roles */
2001 ret = wl1271_ps_elp_wakeup(wl);
2005 if (wl->bss_type == BSS_TYPE_STA_BSS) {
2006 ret = wl12xx_cmd_role_disable(wl, &wl->dev_role_id);
2011 ret = wl12xx_cmd_role_disable(wl, &wl->role_id);
2015 wl1271_ps_elp_sleep(wl);
2018 /* clear all hlids (except system_hlid) */
2019 wl->sta_hlid = WL12XX_INVALID_LINK_ID;
2020 wl->dev_hlid = WL12XX_INVALID_LINK_ID;
2021 wl->ap_bcast_hlid = WL12XX_INVALID_LINK_ID;
2022 wl->ap_global_hlid = WL12XX_INVALID_LINK_ID;
2025 * this must be before the cancel_work calls below, so that the work
2026 * functions don't perform further work.
2028 wl->state = WL1271_STATE_OFF;
2030 mutex_unlock(&wl->mutex);
2032 wl1271_disable_interrupts(wl);
2033 wl1271_flush_deferred_work(wl);
2034 cancel_delayed_work_sync(&wl->scan_complete_work);
2035 cancel_work_sync(&wl->netstack_work);
2036 cancel_work_sync(&wl->tx_work);
2037 del_timer_sync(&wl->rx_streaming_timer);
2038 cancel_work_sync(&wl->rx_streaming_enable_work);
2039 cancel_work_sync(&wl->rx_streaming_disable_work);
2040 cancel_delayed_work_sync(&wl->pspoll_work);
2041 cancel_delayed_work_sync(&wl->elp_work);
2043 mutex_lock(&wl->mutex);
2045 /* let's notify MAC80211 about the remaining pending TX frames */
2046 wl1271_tx_reset(wl, reset_tx_queues);
2047 wl1271_power_off(wl);
2049 memset(wl->bssid, 0, ETH_ALEN);
2050 memset(wl->ssid, 0, IEEE80211_MAX_SSID_LEN + 1);
2052 wl->bss_type = MAX_BSS_TYPE;
2053 wl->set_bss_type = MAX_BSS_TYPE;
2054 wl->band = IEEE80211_BAND_2GHZ;
2057 wl->psm_entry_retry = 0;
2058 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
2059 wl->tx_blocks_available = 0;
2060 wl->tx_allocated_blocks = 0;
2061 wl->tx_results_count = 0;
2062 wl->tx_packets_count = 0;
2063 wl->time_offset = 0;
2064 wl->session_counter = 0;
2065 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
2067 wl->tx_spare_blocks = TX_HW_BLOCK_SPARE_DEFAULT;
2068 wl1271_free_ap_keys(wl);
2069 memset(wl->ap_hlid_map, 0, sizeof(wl->ap_hlid_map));
2070 wl->ap_fw_ps_map = 0;
2072 wl->sched_scanning = false;
2073 wl->role_id = WL12XX_INVALID_ROLE_ID;
2074 wl->dev_role_id = WL12XX_INVALID_ROLE_ID;
2075 memset(wl->roles_map, 0, sizeof(wl->roles_map));
2076 memset(wl->links_map, 0, sizeof(wl->links_map));
2077 memset(wl->roc_map, 0, sizeof(wl->roc_map));
2079 /* The system link is always allocated */
2080 __set_bit(WL12XX_SYSTEM_HLID, wl->links_map);
2083 * this is performed after the cancel_work calls and the associated
2084 * mutex_lock, so that wl1271_op_add_interface does not accidentally
2085 * get executed before all these vars have been reset.
2089 wl->tx_blocks_freed = 0;
2091 for (i = 0; i < NUM_TX_QUEUES; i++) {
2092 wl->tx_pkts_freed[i] = 0;
2093 wl->tx_allocated_pkts[i] = 0;
2096 wl1271_debugfs_reset(wl);
2098 kfree(wl->fw_status);
2099 wl->fw_status = NULL;
2100 kfree(wl->tx_res_if);
2101 wl->tx_res_if = NULL;
2102 kfree(wl->target_mem_map);
2103 wl->target_mem_map = NULL;
2106 static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
2107 struct ieee80211_vif *vif)
2109 struct wl1271 *wl = hw->priv;
2111 mutex_lock(&wl->mutex);
2113 * wl->vif can be null here if someone shuts down the interface
2114 * just when hardware recovery has been started.
2117 WARN_ON(wl->vif != vif);
2118 __wl1271_op_remove_interface(wl, true);
2121 mutex_unlock(&wl->mutex);
2122 cancel_work_sync(&wl->recovery_work);
2125 static int wl1271_join(struct wl1271 *wl, bool set_assoc)
2128 bool is_ibss = (wl->bss_type == BSS_TYPE_IBSS);
2131 * One of the side effects of the JOIN command is that is clears
2132 * WPA/WPA2 keys from the chipset. Performing a JOIN while associated
2133 * to a WPA/WPA2 access point will therefore kill the data-path.
2134 * Currently the only valid scenario for JOIN during association
2135 * is on roaming, in which case we will also be given new keys.
2136 * Keep the below message for now, unless it starts bothering
2137 * users who really like to roam a lot :)
2139 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
2140 wl1271_info("JOIN while associated.");
2143 set_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
2146 ret = wl12xx_cmd_role_start_ibss(wl);
2148 ret = wl12xx_cmd_role_start_sta(wl);
2152 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
2156 * The join command disable the keep-alive mode, shut down its process,
2157 * and also clear the template config, so we need to reset it all after
2158 * the join. The acx_aid starts the keep-alive process, and the order
2159 * of the commands below is relevant.
2161 ret = wl1271_acx_keep_alive_mode(wl, true);
2165 ret = wl1271_acx_aid(wl, wl->aid);
2169 ret = wl1271_cmd_build_klv_null_data(wl);
2173 ret = wl1271_acx_keep_alive_config(wl, CMD_TEMPL_KLV_IDX_NULL_DATA,
2174 ACX_KEEP_ALIVE_TPL_VALID);
2182 static int wl1271_unjoin(struct wl1271 *wl)
2186 /* to stop listening to a channel, we disconnect */
2187 ret = wl12xx_cmd_role_stop_sta(wl);
2191 memset(wl->bssid, 0, ETH_ALEN);
2193 /* reset TX security counters on a clean disconnect */
2194 wl->tx_security_last_seq_lsb = 0;
2195 wl->tx_security_seq = 0;
2201 static void wl1271_set_band_rate(struct wl1271 *wl)
2203 if (wl->band == IEEE80211_BAND_2GHZ) {
2204 wl->basic_rate_set = wl->conf.tx.basic_rate;
2205 wl->rate_set = wl->conf.tx.basic_rate;
2207 wl->basic_rate_set = wl->conf.tx.basic_rate_5;
2208 wl->rate_set = wl->conf.tx.basic_rate_5;
2213 static bool wl12xx_is_roc(struct wl1271 *wl)
2217 role_id = find_first_bit(wl->roc_map, WL12XX_MAX_ROLES);
2218 if (role_id >= WL12XX_MAX_ROLES)
2224 static int wl1271_sta_handle_idle(struct wl1271 *wl, bool idle)
2229 /* no need to croc if we weren't busy (e.g. during boot) */
2230 if (wl12xx_is_roc(wl)) {
2231 ret = wl12xx_croc(wl, wl->dev_role_id);
2235 ret = wl12xx_cmd_role_stop_dev(wl);
2239 wl->rate_set = wl1271_tx_min_rate_get(wl);
2240 ret = wl1271_acx_sta_rate_policies(wl);
2243 ret = wl1271_acx_keep_alive_config(
2244 wl, CMD_TEMPL_KLV_IDX_NULL_DATA,
2245 ACX_KEEP_ALIVE_TPL_INVALID);
2248 set_bit(WL1271_FLAG_IDLE, &wl->flags);
2250 /* The current firmware only supports sched_scan in idle */
2251 if (wl->sched_scanning) {
2252 wl1271_scan_sched_scan_stop(wl);
2253 ieee80211_sched_scan_stopped(wl->hw);
2256 ret = wl12xx_cmd_role_start_dev(wl);
2260 ret = wl12xx_roc(wl, wl->dev_role_id);
2263 clear_bit(WL1271_FLAG_IDLE, &wl->flags);
2270 static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed)
2272 struct wl1271 *wl = hw->priv;
2273 struct ieee80211_conf *conf = &hw->conf;
2274 int channel, ret = 0;
2277 channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
2279 wl1271_debug(DEBUG_MAC80211, "mac80211 config ch %d psm %s power %d %s"
2282 conf->flags & IEEE80211_CONF_PS ? "on" : "off",
2284 conf->flags & IEEE80211_CONF_IDLE ? "idle" : "in use",
2288 * mac80211 will go to idle nearly immediately after transmitting some
2289 * frames, such as the deauth. To make sure those frames reach the air,
2290 * wait here until the TX queue is fully flushed.
2292 if ((changed & IEEE80211_CONF_CHANGE_IDLE) &&
2293 (conf->flags & IEEE80211_CONF_IDLE))
2294 wl1271_tx_flush(wl);
2296 mutex_lock(&wl->mutex);
2298 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2299 /* we support configuring the channel and band while off */
2300 if ((changed & IEEE80211_CONF_CHANGE_CHANNEL)) {
2301 wl->band = conf->channel->band;
2302 wl->channel = channel;
2305 if ((changed & IEEE80211_CONF_CHANGE_POWER))
2306 wl->power_level = conf->power_level;
2311 is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
2313 ret = wl1271_ps_elp_wakeup(wl);
2317 /* if the channel changes while joined, join again */
2318 if (changed & IEEE80211_CONF_CHANGE_CHANNEL &&
2319 ((wl->band != conf->channel->band) ||
2320 (wl->channel != channel))) {
2321 wl->band = conf->channel->band;
2322 wl->channel = channel;
2326 * FIXME: the mac80211 should really provide a fixed
2327 * rate to use here. for now, just use the smallest
2328 * possible rate for the band as a fixed rate for
2329 * association frames and other control messages.
2331 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
2332 wl1271_set_band_rate(wl);
2334 wl->basic_rate = wl1271_tx_min_rate_get(wl);
2335 ret = wl1271_acx_sta_rate_policies(wl);
2337 wl1271_warning("rate policy for channel "
2340 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags)) {
2341 if (wl12xx_is_roc(wl)) {
2343 ret = wl12xx_croc(wl, wl->dev_role_id);
2347 ret = wl1271_join(wl, false);
2349 wl1271_warning("cmd join on channel "
2353 * change the ROC channel. do it only if we are
2354 * not idle. otherwise, CROC will be called
2357 if (wl12xx_is_roc(wl) &&
2358 !(conf->flags & IEEE80211_CONF_IDLE)) {
2359 ret = wl12xx_croc(wl, wl->dev_role_id);
2363 ret = wl12xx_roc(wl, wl->dev_role_id);
2365 wl1271_warning("roc failed %d",
2372 if (changed & IEEE80211_CONF_CHANGE_IDLE && !is_ap) {
2373 ret = wl1271_sta_handle_idle(wl,
2374 conf->flags & IEEE80211_CONF_IDLE);
2376 wl1271_warning("idle mode change failed %d", ret);
2380 * if mac80211 changes the PSM mode, make sure the mode is not
2381 * incorrectly changed after the pspoll failure active window.
2383 if (changed & IEEE80211_CONF_CHANGE_PS)
2384 clear_bit(WL1271_FLAG_PSPOLL_FAILURE, &wl->flags);
2386 if (conf->flags & IEEE80211_CONF_PS &&
2387 !test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
2388 set_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
2391 * We enter PSM only if we're already associated.
2392 * If we're not, we'll enter it when joining an SSID,
2393 * through the bss_info_changed() hook.
2395 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags)) {
2396 wl1271_debug(DEBUG_PSM, "psm enabled");
2397 ret = wl1271_ps_set_mode(wl, STATION_POWER_SAVE_MODE,
2398 wl->basic_rate, true);
2400 } else if (!(conf->flags & IEEE80211_CONF_PS) &&
2401 test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
2402 wl1271_debug(DEBUG_PSM, "psm disabled");
2404 clear_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
2406 if (test_bit(WL1271_FLAG_PSM, &wl->flags))
2407 ret = wl1271_ps_set_mode(wl, STATION_ACTIVE_MODE,
2408 wl->basic_rate, true);
2411 if (conf->power_level != wl->power_level) {
2412 ret = wl1271_acx_tx_power(wl, conf->power_level);
2416 wl->power_level = conf->power_level;
2420 wl1271_ps_elp_sleep(wl);
2423 mutex_unlock(&wl->mutex);
2428 struct wl1271_filter_params {
2431 u8 mc_list[ACX_MC_ADDRESS_GROUP_MAX][ETH_ALEN];
2434 static u64 wl1271_op_prepare_multicast(struct ieee80211_hw *hw,
2435 struct netdev_hw_addr_list *mc_list)
2437 struct wl1271_filter_params *fp;
2438 struct netdev_hw_addr *ha;
2439 struct wl1271 *wl = hw->priv;
2441 if (unlikely(wl->state == WL1271_STATE_OFF))
2444 fp = kzalloc(sizeof(*fp), GFP_ATOMIC);
2446 wl1271_error("Out of memory setting filters.");
2450 /* update multicast filtering parameters */
2451 fp->mc_list_length = 0;
2452 if (netdev_hw_addr_list_count(mc_list) > ACX_MC_ADDRESS_GROUP_MAX) {
2453 fp->enabled = false;
2456 netdev_hw_addr_list_for_each(ha, mc_list) {
2457 memcpy(fp->mc_list[fp->mc_list_length],
2458 ha->addr, ETH_ALEN);
2459 fp->mc_list_length++;
2463 return (u64)(unsigned long)fp;
2466 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
2469 FIF_BCN_PRBRESP_PROMISC | \
2473 static void wl1271_op_configure_filter(struct ieee80211_hw *hw,
2474 unsigned int changed,
2475 unsigned int *total, u64 multicast)
2477 struct wl1271_filter_params *fp = (void *)(unsigned long)multicast;
2478 struct wl1271 *wl = hw->priv;
2481 wl1271_debug(DEBUG_MAC80211, "mac80211 configure filter changed %x"
2482 " total %x", changed, *total);
2484 mutex_lock(&wl->mutex);
2486 *total &= WL1271_SUPPORTED_FILTERS;
2487 changed &= WL1271_SUPPORTED_FILTERS;
2489 if (unlikely(wl->state == WL1271_STATE_OFF))
2492 ret = wl1271_ps_elp_wakeup(wl);
2496 if (wl->bss_type != BSS_TYPE_AP_BSS) {
2497 if (*total & FIF_ALLMULTI)
2498 ret = wl1271_acx_group_address_tbl(wl, false, NULL, 0);
2500 ret = wl1271_acx_group_address_tbl(wl, fp->enabled,
2502 fp->mc_list_length);
2508 * the fw doesn't provide an api to configure the filters. instead,
2509 * the filters configuration is based on the active roles / ROC
2514 wl1271_ps_elp_sleep(wl);
2517 mutex_unlock(&wl->mutex);
2521 static int wl1271_record_ap_key(struct wl1271 *wl, u8 id, u8 key_type,
2522 u8 key_size, const u8 *key, u8 hlid, u32 tx_seq_32,
2525 struct wl1271_ap_key *ap_key;
2528 wl1271_debug(DEBUG_CRYPT, "record ap key id %d", (int)id);
2530 if (key_size > MAX_KEY_SIZE)
2534 * Find next free entry in ap_keys. Also check we are not replacing
2537 for (i = 0; i < MAX_NUM_KEYS; i++) {
2538 if (wl->recorded_ap_keys[i] == NULL)
2541 if (wl->recorded_ap_keys[i]->id == id) {
2542 wl1271_warning("trying to record key replacement");
2547 if (i == MAX_NUM_KEYS)
2550 ap_key = kzalloc(sizeof(*ap_key), GFP_KERNEL);
2555 ap_key->key_type = key_type;
2556 ap_key->key_size = key_size;
2557 memcpy(ap_key->key, key, key_size);
2558 ap_key->hlid = hlid;
2559 ap_key->tx_seq_32 = tx_seq_32;
2560 ap_key->tx_seq_16 = tx_seq_16;
2562 wl->recorded_ap_keys[i] = ap_key;
2566 static void wl1271_free_ap_keys(struct wl1271 *wl)
2570 for (i = 0; i < MAX_NUM_KEYS; i++) {
2571 kfree(wl->recorded_ap_keys[i]);
2572 wl->recorded_ap_keys[i] = NULL;
2576 static int wl1271_ap_init_hwenc(struct wl1271 *wl)
2579 struct wl1271_ap_key *key;
2580 bool wep_key_added = false;
2582 for (i = 0; i < MAX_NUM_KEYS; i++) {
2584 if (wl->recorded_ap_keys[i] == NULL)
2587 key = wl->recorded_ap_keys[i];
2589 if (hlid == WL12XX_INVALID_LINK_ID)
2590 hlid = wl->ap_bcast_hlid;
2592 ret = wl1271_cmd_set_ap_key(wl, KEY_ADD_OR_REPLACE,
2593 key->id, key->key_type,
2594 key->key_size, key->key,
2595 hlid, key->tx_seq_32,
2600 if (key->key_type == KEY_WEP)
2601 wep_key_added = true;
2604 if (wep_key_added) {
2605 ret = wl12xx_cmd_set_default_wep_key(wl, wl->default_key,
2612 wl1271_free_ap_keys(wl);
2616 static int wl1271_set_key(struct wl1271 *wl, u16 action, u8 id, u8 key_type,
2617 u8 key_size, const u8 *key, u32 tx_seq_32,
2618 u16 tx_seq_16, struct ieee80211_sta *sta)
2621 bool is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
2624 struct wl1271_station *wl_sta;
2628 wl_sta = (struct wl1271_station *)sta->drv_priv;
2629 hlid = wl_sta->hlid;
2631 hlid = wl->ap_bcast_hlid;
2634 if (!test_bit(WL1271_FLAG_AP_STARTED, &wl->flags)) {
2636 * We do not support removing keys after AP shutdown.
2637 * Pretend we do to make mac80211 happy.
2639 if (action != KEY_ADD_OR_REPLACE)
2642 ret = wl1271_record_ap_key(wl, id,
2644 key, hlid, tx_seq_32,
2647 ret = wl1271_cmd_set_ap_key(wl, action,
2648 id, key_type, key_size,
2649 key, hlid, tx_seq_32,
2657 static const u8 bcast_addr[ETH_ALEN] = {
2658 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
2662 * A STA set to GEM cipher requires 2 tx spare blocks.
2663 * Return to default value when GEM cipher key is removed
2665 if (key_type == KEY_GEM) {
2666 if (action == KEY_ADD_OR_REPLACE)
2667 wl->tx_spare_blocks = 2;
2668 else if (action == KEY_REMOVE)
2669 wl->tx_spare_blocks = TX_HW_BLOCK_SPARE_DEFAULT;
2672 addr = sta ? sta->addr : bcast_addr;
2674 if (is_zero_ether_addr(addr)) {
2675 /* We dont support TX only encryption */
2679 /* The wl1271 does not allow to remove unicast keys - they
2680 will be cleared automatically on next CMD_JOIN. Ignore the
2681 request silently, as we dont want the mac80211 to emit
2682 an error message. */
2683 if (action == KEY_REMOVE && !is_broadcast_ether_addr(addr))
2686 /* don't remove key if hlid was already deleted */
2687 if (action == KEY_REMOVE &&
2688 wl->sta_hlid == WL12XX_INVALID_LINK_ID)
2691 ret = wl1271_cmd_set_sta_key(wl, action,
2692 id, key_type, key_size,
2693 key, addr, tx_seq_32,
2698 /* the default WEP key needs to be configured at least once */
2699 if (key_type == KEY_WEP) {
2700 ret = wl12xx_cmd_set_default_wep_key(wl,
2711 static int wl1271_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
2712 struct ieee80211_vif *vif,
2713 struct ieee80211_sta *sta,
2714 struct ieee80211_key_conf *key_conf)
2716 struct wl1271 *wl = hw->priv;
2722 wl1271_debug(DEBUG_MAC80211, "mac80211 set key");
2724 wl1271_debug(DEBUG_CRYPT, "CMD: 0x%x sta: %p", cmd, sta);
2725 wl1271_debug(DEBUG_CRYPT, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
2726 key_conf->cipher, key_conf->keyidx,
2727 key_conf->keylen, key_conf->flags);
2728 wl1271_dump(DEBUG_CRYPT, "KEY: ", key_conf->key, key_conf->keylen);
2730 mutex_lock(&wl->mutex);
2732 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2737 ret = wl1271_ps_elp_wakeup(wl);
2741 switch (key_conf->cipher) {
2742 case WLAN_CIPHER_SUITE_WEP40:
2743 case WLAN_CIPHER_SUITE_WEP104:
2746 key_conf->hw_key_idx = key_conf->keyidx;
2748 case WLAN_CIPHER_SUITE_TKIP:
2749 key_type = KEY_TKIP;
2751 key_conf->hw_key_idx = key_conf->keyidx;
2752 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
2753 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
2755 case WLAN_CIPHER_SUITE_CCMP:
2758 key_conf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
2759 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
2760 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
2762 case WL1271_CIPHER_SUITE_GEM:
2764 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
2765 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
2768 wl1271_error("Unknown key algo 0x%x", key_conf->cipher);
2776 ret = wl1271_set_key(wl, KEY_ADD_OR_REPLACE,
2777 key_conf->keyidx, key_type,
2778 key_conf->keylen, key_conf->key,
2779 tx_seq_32, tx_seq_16, sta);
2781 wl1271_error("Could not add or replace key");
2787 ret = wl1271_set_key(wl, KEY_REMOVE,
2788 key_conf->keyidx, key_type,
2789 key_conf->keylen, key_conf->key,
2792 wl1271_error("Could not remove key");
2798 wl1271_error("Unsupported key cmd 0x%x", cmd);
2804 wl1271_ps_elp_sleep(wl);
2807 mutex_unlock(&wl->mutex);
2812 static int wl1271_op_hw_scan(struct ieee80211_hw *hw,
2813 struct ieee80211_vif *vif,
2814 struct cfg80211_scan_request *req)
2816 struct wl1271 *wl = hw->priv;
2821 wl1271_debug(DEBUG_MAC80211, "mac80211 hw scan");
2824 ssid = req->ssids[0].ssid;
2825 len = req->ssids[0].ssid_len;
2828 mutex_lock(&wl->mutex);
2830 if (wl->state == WL1271_STATE_OFF) {
2832 * We cannot return -EBUSY here because cfg80211 will expect
2833 * a call to ieee80211_scan_completed if we do - in this case
2834 * there won't be any call.
2840 ret = wl1271_ps_elp_wakeup(wl);
2844 /* cancel ROC before scanning */
2845 if (wl12xx_is_roc(wl)) {
2846 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags)) {
2847 /* don't allow scanning right now */
2851 wl12xx_croc(wl, wl->dev_role_id);
2852 wl12xx_cmd_role_stop_dev(wl);
2855 ret = wl1271_scan(hw->priv, ssid, len, req);
2857 wl1271_ps_elp_sleep(wl);
2859 mutex_unlock(&wl->mutex);
2864 static void wl1271_op_cancel_hw_scan(struct ieee80211_hw *hw,
2865 struct ieee80211_vif *vif)
2867 struct wl1271 *wl = hw->priv;
2870 wl1271_debug(DEBUG_MAC80211, "mac80211 cancel hw scan");
2872 mutex_lock(&wl->mutex);
2874 if (wl->state == WL1271_STATE_OFF)
2877 if (wl->scan.state == WL1271_SCAN_STATE_IDLE)
2880 ret = wl1271_ps_elp_wakeup(wl);
2884 if (wl->scan.state != WL1271_SCAN_STATE_DONE) {
2885 ret = wl1271_scan_stop(wl);
2889 wl->scan.state = WL1271_SCAN_STATE_IDLE;
2890 memset(wl->scan.scanned_ch, 0, sizeof(wl->scan.scanned_ch));
2891 wl->scan.req = NULL;
2892 ieee80211_scan_completed(wl->hw, true);
2895 wl1271_ps_elp_sleep(wl);
2897 mutex_unlock(&wl->mutex);
2899 cancel_delayed_work_sync(&wl->scan_complete_work);
2902 static int wl1271_op_sched_scan_start(struct ieee80211_hw *hw,
2903 struct ieee80211_vif *vif,
2904 struct cfg80211_sched_scan_request *req,
2905 struct ieee80211_sched_scan_ies *ies)
2907 struct wl1271 *wl = hw->priv;
2910 wl1271_debug(DEBUG_MAC80211, "wl1271_op_sched_scan_start");
2912 mutex_lock(&wl->mutex);
2914 ret = wl1271_ps_elp_wakeup(wl);
2918 ret = wl1271_scan_sched_scan_config(wl, req, ies);
2922 ret = wl1271_scan_sched_scan_start(wl);
2926 wl->sched_scanning = true;
2929 wl1271_ps_elp_sleep(wl);
2931 mutex_unlock(&wl->mutex);
2935 static void wl1271_op_sched_scan_stop(struct ieee80211_hw *hw,
2936 struct ieee80211_vif *vif)
2938 struct wl1271 *wl = hw->priv;
2941 wl1271_debug(DEBUG_MAC80211, "wl1271_op_sched_scan_stop");
2943 mutex_lock(&wl->mutex);
2945 ret = wl1271_ps_elp_wakeup(wl);
2949 wl1271_scan_sched_scan_stop(wl);
2951 wl1271_ps_elp_sleep(wl);
2953 mutex_unlock(&wl->mutex);
2956 static int wl1271_op_set_frag_threshold(struct ieee80211_hw *hw, u32 value)
2958 struct wl1271 *wl = hw->priv;
2961 mutex_lock(&wl->mutex);
2963 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2968 ret = wl1271_ps_elp_wakeup(wl);
2972 ret = wl1271_acx_frag_threshold(wl, value);
2974 wl1271_warning("wl1271_op_set_frag_threshold failed: %d", ret);
2976 wl1271_ps_elp_sleep(wl);
2979 mutex_unlock(&wl->mutex);
2984 static int wl1271_op_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
2986 struct wl1271 *wl = hw->priv;
2989 mutex_lock(&wl->mutex);
2991 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2996 ret = wl1271_ps_elp_wakeup(wl);
3000 ret = wl1271_acx_rts_threshold(wl, value);
3002 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret);
3004 wl1271_ps_elp_sleep(wl);
3007 mutex_unlock(&wl->mutex);
3012 static int wl1271_ssid_set(struct wl1271 *wl, struct sk_buff *skb,
3016 const u8 *ptr = cfg80211_find_ie(WLAN_EID_SSID, skb->data + offset,
3020 wl1271_error("No SSID in IEs!");
3025 if (ssid_len > IEEE80211_MAX_SSID_LEN) {
3026 wl1271_error("SSID is too long!");
3030 wl->ssid_len = ssid_len;
3031 memcpy(wl->ssid, ptr+2, ssid_len);
3035 static int wl1271_bss_erp_info_changed(struct wl1271 *wl,
3036 struct ieee80211_bss_conf *bss_conf,
3041 if (changed & BSS_CHANGED_ERP_SLOT) {
3042 if (bss_conf->use_short_slot)
3043 ret = wl1271_acx_slot(wl, SLOT_TIME_SHORT);
3045 ret = wl1271_acx_slot(wl, SLOT_TIME_LONG);
3047 wl1271_warning("Set slot time failed %d", ret);
3052 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
3053 if (bss_conf->use_short_preamble)
3054 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_SHORT);
3056 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_LONG);
3059 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
3060 if (bss_conf->use_cts_prot)
3061 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_ENABLE);
3063 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_DISABLE);
3065 wl1271_warning("Set ctsprotect failed %d", ret);
3074 static int wl1271_bss_beacon_info_changed(struct wl1271 *wl,
3075 struct ieee80211_vif *vif,
3076 struct ieee80211_bss_conf *bss_conf,
3079 bool is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
3082 if ((changed & BSS_CHANGED_BEACON_INT)) {
3083 wl1271_debug(DEBUG_MASTER, "beacon interval updated: %d",
3084 bss_conf->beacon_int);
3086 wl->beacon_int = bss_conf->beacon_int;
3089 if ((changed & BSS_CHANGED_BEACON)) {
3090 struct ieee80211_hdr *hdr;
3091 int ieoffset = offsetof(struct ieee80211_mgmt,
3093 struct sk_buff *beacon = ieee80211_beacon_get(wl->hw, vif);
3099 wl1271_debug(DEBUG_MASTER, "beacon updated");
3101 ret = wl1271_ssid_set(wl, beacon, ieoffset);
3103 dev_kfree_skb(beacon);
3106 tmpl_id = is_ap ? CMD_TEMPL_AP_BEACON :
3108 ret = wl1271_cmd_template_set(wl, tmpl_id,
3111 wl1271_tx_min_rate_get(wl));
3113 dev_kfree_skb(beacon);
3117 hdr = (struct ieee80211_hdr *) beacon->data;
3118 hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
3119 IEEE80211_STYPE_PROBE_RESP);
3121 tmpl_id = is_ap ? CMD_TEMPL_AP_PROBE_RESPONSE :
3122 CMD_TEMPL_PROBE_RESPONSE;
3123 ret = wl1271_cmd_template_set(wl,
3127 wl1271_tx_min_rate_get(wl));
3128 dev_kfree_skb(beacon);
3137 /* AP mode changes */
3138 static void wl1271_bss_info_changed_ap(struct wl1271 *wl,
3139 struct ieee80211_vif *vif,
3140 struct ieee80211_bss_conf *bss_conf,
3145 if ((changed & BSS_CHANGED_BASIC_RATES)) {
3146 u32 rates = bss_conf->basic_rates;
3148 wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl, rates);
3149 wl->basic_rate = wl1271_tx_min_rate_get(wl);
3151 ret = wl1271_init_ap_rates(wl);
3153 wl1271_error("AP rate policy change failed %d", ret);
3157 ret = wl1271_ap_init_templates(wl);
3162 ret = wl1271_bss_beacon_info_changed(wl, vif, bss_conf, changed);
3166 if ((changed & BSS_CHANGED_BEACON_ENABLED)) {
3167 if (bss_conf->enable_beacon) {
3168 if (!test_bit(WL1271_FLAG_AP_STARTED, &wl->flags)) {
3169 ret = wl12xx_cmd_role_start_ap(wl);
3173 ret = wl1271_ap_init_hwenc(wl);
3177 set_bit(WL1271_FLAG_AP_STARTED, &wl->flags);
3178 wl1271_debug(DEBUG_AP, "started AP");
3181 if (test_bit(WL1271_FLAG_AP_STARTED, &wl->flags)) {
3182 ret = wl12xx_cmd_role_stop_ap(wl);
3186 clear_bit(WL1271_FLAG_AP_STARTED, &wl->flags);
3187 wl1271_debug(DEBUG_AP, "stopped AP");
3192 ret = wl1271_bss_erp_info_changed(wl, bss_conf, changed);
3196 /* Handle HT information change */
3197 if ((changed & BSS_CHANGED_HT) &&
3198 (bss_conf->channel_type != NL80211_CHAN_NO_HT)) {
3199 ret = wl1271_acx_set_ht_information(wl,
3200 bss_conf->ht_operation_mode);
3202 wl1271_warning("Set ht information failed %d", ret);
3211 /* STA/IBSS mode changes */
3212 static void wl1271_bss_info_changed_sta(struct wl1271 *wl,
3213 struct ieee80211_vif *vif,
3214 struct ieee80211_bss_conf *bss_conf,
3217 bool do_join = false, set_assoc = false;
3218 bool is_ibss = (wl->bss_type == BSS_TYPE_IBSS);
3219 bool ibss_joined = false;
3220 u32 sta_rate_set = 0;
3222 struct ieee80211_sta *sta;
3223 bool sta_exists = false;
3224 struct ieee80211_sta_ht_cap sta_ht_cap;
3227 ret = wl1271_bss_beacon_info_changed(wl, vif, bss_conf,
3233 if (changed & BSS_CHANGED_IBSS) {
3234 if (bss_conf->ibss_joined) {
3235 set_bit(WL1271_FLAG_IBSS_JOINED, &wl->flags);
3238 if (test_and_clear_bit(WL1271_FLAG_IBSS_JOINED,
3241 wl12xx_cmd_role_start_dev(wl);
3242 wl12xx_roc(wl, wl->dev_role_id);
3247 if ((changed & BSS_CHANGED_BEACON_INT) && ibss_joined)
3250 /* Need to update the SSID (for filtering etc) */
3251 if ((changed & BSS_CHANGED_BEACON) && ibss_joined)
3254 if ((changed & BSS_CHANGED_BEACON_ENABLED) && ibss_joined) {
3255 wl1271_debug(DEBUG_ADHOC, "ad-hoc beaconing: %s",
3256 bss_conf->enable_beacon ? "enabled" : "disabled");
3258 if (bss_conf->enable_beacon)
3259 wl->set_bss_type = BSS_TYPE_IBSS;
3261 wl->set_bss_type = BSS_TYPE_STA_BSS;
3265 if ((changed & BSS_CHANGED_CQM)) {
3266 bool enable = false;
3267 if (bss_conf->cqm_rssi_thold)
3269 ret = wl1271_acx_rssi_snr_trigger(wl, enable,
3270 bss_conf->cqm_rssi_thold,
3271 bss_conf->cqm_rssi_hyst);
3274 wl->rssi_thold = bss_conf->cqm_rssi_thold;
3277 if ((changed & BSS_CHANGED_BSSID) &&
3279 * Now we know the correct bssid, so we send a new join command
3280 * and enable the BSSID filter
3282 memcmp(wl->bssid, bss_conf->bssid, ETH_ALEN)) {
3283 memcpy(wl->bssid, bss_conf->bssid, ETH_ALEN);
3285 if (!is_zero_ether_addr(wl->bssid)) {
3286 ret = wl1271_cmd_build_null_data(wl);
3290 ret = wl1271_build_qos_null_data(wl);
3294 /* Need to update the BSSID (for filtering etc) */
3299 if (changed & (BSS_CHANGED_ASSOC | BSS_CHANGED_HT)) {
3301 sta = ieee80211_find_sta(vif, bss_conf->bssid);
3305 /* save the supp_rates of the ap */
3306 sta_rate_set = sta->supp_rates[wl->hw->conf.channel->band];
3307 if (sta->ht_cap.ht_supported)
3309 (sta->ht_cap.mcs.rx_mask[0] << HW_HT_RATES_OFFSET);
3310 sta_ht_cap = sta->ht_cap;
3317 if ((changed & BSS_CHANGED_ASSOC)) {
3318 if (bss_conf->assoc) {
3321 wl->aid = bss_conf->aid;
3324 wl->ps_poll_failures = 0;
3327 * use basic rates from AP, and determine lowest rate
3328 * to use with control frames.
3330 rates = bss_conf->basic_rates;
3331 wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl,
3333 wl->basic_rate = wl1271_tx_min_rate_get(wl);
3335 wl->rate_set = wl1271_tx_enabled_rates_get(wl,
3337 ret = wl1271_acx_sta_rate_policies(wl);
3342 * with wl1271, we don't need to update the
3343 * beacon_int and dtim_period, because the firmware
3344 * updates it by itself when the first beacon is
3345 * received after a join.
3347 ret = wl1271_cmd_build_ps_poll(wl, wl->aid);
3352 * Get a template for hardware connection maintenance
3354 dev_kfree_skb(wl->probereq);
3355 wl->probereq = wl1271_cmd_build_ap_probe_req(wl, NULL);
3356 ieoffset = offsetof(struct ieee80211_mgmt,
3357 u.probe_req.variable);
3358 wl1271_ssid_set(wl, wl->probereq, ieoffset);
3360 /* enable the connection monitoring feature */
3361 ret = wl1271_acx_conn_monit_params(wl, true);
3365 /* use defaults when not associated */
3367 !!test_and_clear_bit(WL1271_FLAG_STA_ASSOCIATED,
3370 !!test_and_clear_bit(WL1271_FLAG_STA_STATE_SENT,
3374 /* free probe-request template */
3375 dev_kfree_skb(wl->probereq);
3376 wl->probereq = NULL;
3378 /* re-enable dynamic ps - just in case */
3379 ieee80211_enable_dyn_ps(wl->vif);
3381 /* revert back to minimum rates for the current band */
3382 wl1271_set_band_rate(wl);
3383 wl->basic_rate = wl1271_tx_min_rate_get(wl);
3384 ret = wl1271_acx_sta_rate_policies(wl);
3388 /* disable connection monitor features */
3389 ret = wl1271_acx_conn_monit_params(wl, false);
3391 /* Disable the keep-alive feature */
3392 ret = wl1271_acx_keep_alive_mode(wl, false);
3396 /* restore the bssid filter and go to dummy bssid */
3398 u32 conf_flags = wl->hw->conf.flags;
3400 * we might have to disable roc, if there was
3401 * no IF_OPER_UP notification.
3404 ret = wl12xx_croc(wl, wl->role_id);
3409 * (we also need to disable roc in case of
3410 * roaming on the same channel. until we will
3411 * have a better flow...)
3413 if (test_bit(wl->dev_role_id, wl->roc_map)) {
3414 ret = wl12xx_croc(wl, wl->dev_role_id);
3420 if (!(conf_flags & IEEE80211_CONF_IDLE)) {
3421 wl12xx_cmd_role_start_dev(wl);
3422 wl12xx_roc(wl, wl->dev_role_id);
3428 if (changed & BSS_CHANGED_IBSS) {
3429 wl1271_debug(DEBUG_ADHOC, "ibss_joined: %d",
3430 bss_conf->ibss_joined);
3432 if (bss_conf->ibss_joined) {
3433 u32 rates = bss_conf->basic_rates;
3434 wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl,
3436 wl->basic_rate = wl1271_tx_min_rate_get(wl);
3438 /* by default, use 11b rates */
3439 wl->rate_set = CONF_TX_IBSS_DEFAULT_RATES;
3440 ret = wl1271_acx_sta_rate_policies(wl);
3446 ret = wl1271_bss_erp_info_changed(wl, bss_conf, changed);
3450 if (changed & BSS_CHANGED_ARP_FILTER) {
3451 __be32 addr = bss_conf->arp_addr_list[0];
3452 WARN_ON(wl->bss_type != BSS_TYPE_STA_BSS);
3454 if (bss_conf->arp_addr_cnt == 1 &&
3455 bss_conf->arp_filter_enabled) {
3457 * The template should have been configured only upon
3458 * association. however, it seems that the correct ip
3459 * isn't being set (when sending), so we have to
3460 * reconfigure the template upon every ip change.
3462 ret = wl1271_cmd_build_arp_rsp(wl, addr);
3464 wl1271_warning("build arp rsp failed: %d", ret);
3468 ret = wl1271_acx_arp_ip_filter(wl,
3469 ACX_ARP_FILTER_ARP_FILTERING,
3472 ret = wl1271_acx_arp_ip_filter(wl, 0, addr);
3479 ret = wl1271_join(wl, set_assoc);
3481 wl1271_warning("cmd join failed %d", ret);
3485 /* ROC until connected (after EAPOL exchange) */
3487 ret = wl12xx_roc(wl, wl->role_id);
3491 wl1271_check_operstate(wl,
3492 ieee80211_get_operstate(vif));
3495 * stop device role if started (we might already be in
3496 * STA role). TODO: make it better.
3498 if (wl->dev_role_id != WL12XX_INVALID_ROLE_ID) {
3499 ret = wl12xx_croc(wl, wl->dev_role_id);
3503 ret = wl12xx_cmd_role_stop_dev(wl);
3508 /* If we want to go in PSM but we're not there yet */
3509 if (test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags) &&
3510 !test_bit(WL1271_FLAG_PSM, &wl->flags)) {
3511 enum wl1271_cmd_ps_mode mode;
3513 mode = STATION_POWER_SAVE_MODE;
3514 ret = wl1271_ps_set_mode(wl, mode,
3522 /* Handle new association with HT. Do this after join. */
3524 if ((changed & BSS_CHANGED_HT) &&
3525 (bss_conf->channel_type != NL80211_CHAN_NO_HT)) {
3526 ret = wl1271_acx_set_ht_capabilities(wl,
3531 wl1271_warning("Set ht cap true failed %d",
3536 /* handle new association without HT and disassociation */
3537 else if (changed & BSS_CHANGED_ASSOC) {
3538 ret = wl1271_acx_set_ht_capabilities(wl,
3543 wl1271_warning("Set ht cap false failed %d",
3550 /* Handle HT information change. Done after join. */
3551 if ((changed & BSS_CHANGED_HT) &&
3552 (bss_conf->channel_type != NL80211_CHAN_NO_HT)) {
3553 ret = wl1271_acx_set_ht_information(wl,
3554 bss_conf->ht_operation_mode);
3556 wl1271_warning("Set ht information failed %d", ret);
3565 static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
3566 struct ieee80211_vif *vif,
3567 struct ieee80211_bss_conf *bss_conf,
3570 struct wl1271 *wl = hw->priv;
3571 bool is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
3574 wl1271_debug(DEBUG_MAC80211, "mac80211 bss info changed 0x%x",
3577 mutex_lock(&wl->mutex);
3579 if (unlikely(wl->state == WL1271_STATE_OFF))
3582 ret = wl1271_ps_elp_wakeup(wl);
3587 wl1271_bss_info_changed_ap(wl, vif, bss_conf, changed);
3589 wl1271_bss_info_changed_sta(wl, vif, bss_conf, changed);
3591 wl1271_ps_elp_sleep(wl);
3594 mutex_unlock(&wl->mutex);
3597 static int wl1271_op_conf_tx(struct ieee80211_hw *hw, u16 queue,
3598 const struct ieee80211_tx_queue_params *params)
3600 struct wl1271 *wl = hw->priv;
3604 mutex_lock(&wl->mutex);
3606 wl1271_debug(DEBUG_MAC80211, "mac80211 conf tx %d", queue);
3609 ps_scheme = CONF_PS_SCHEME_UPSD_TRIGGER;
3611 ps_scheme = CONF_PS_SCHEME_LEGACY;
3613 if (wl->state == WL1271_STATE_OFF) {
3615 * If the state is off, the parameters will be recorded and
3616 * configured on init. This happens in AP-mode.
3618 struct conf_tx_ac_category *conf_ac =
3619 &wl->conf.tx.ac_conf[wl1271_tx_get_queue(queue)];
3620 struct conf_tx_tid *conf_tid =
3621 &wl->conf.tx.tid_conf[wl1271_tx_get_queue(queue)];
3623 conf_ac->ac = wl1271_tx_get_queue(queue);
3624 conf_ac->cw_min = (u8)params->cw_min;
3625 conf_ac->cw_max = params->cw_max;
3626 conf_ac->aifsn = params->aifs;
3627 conf_ac->tx_op_limit = params->txop << 5;
3629 conf_tid->queue_id = wl1271_tx_get_queue(queue);
3630 conf_tid->channel_type = CONF_CHANNEL_TYPE_EDCF;
3631 conf_tid->tsid = wl1271_tx_get_queue(queue);
3632 conf_tid->ps_scheme = ps_scheme;
3633 conf_tid->ack_policy = CONF_ACK_POLICY_LEGACY;
3634 conf_tid->apsd_conf[0] = 0;
3635 conf_tid->apsd_conf[1] = 0;
3639 ret = wl1271_ps_elp_wakeup(wl);
3644 * the txop is confed in units of 32us by the mac80211,
3647 ret = wl1271_acx_ac_cfg(wl, wl1271_tx_get_queue(queue),
3648 params->cw_min, params->cw_max,
3649 params->aifs, params->txop << 5);
3653 ret = wl1271_acx_tid_cfg(wl, wl1271_tx_get_queue(queue),
3654 CONF_CHANNEL_TYPE_EDCF,
3655 wl1271_tx_get_queue(queue),
3656 ps_scheme, CONF_ACK_POLICY_LEGACY,
3660 wl1271_ps_elp_sleep(wl);
3663 mutex_unlock(&wl->mutex);
3668 static u64 wl1271_op_get_tsf(struct ieee80211_hw *hw)
3671 struct wl1271 *wl = hw->priv;
3672 u64 mactime = ULLONG_MAX;
3675 wl1271_debug(DEBUG_MAC80211, "mac80211 get tsf");
3677 mutex_lock(&wl->mutex);
3679 if (unlikely(wl->state == WL1271_STATE_OFF))
3682 ret = wl1271_ps_elp_wakeup(wl);
3686 ret = wl1271_acx_tsf_info(wl, &mactime);
3691 wl1271_ps_elp_sleep(wl);
3694 mutex_unlock(&wl->mutex);
3698 static int wl1271_op_get_survey(struct ieee80211_hw *hw, int idx,
3699 struct survey_info *survey)
3701 struct wl1271 *wl = hw->priv;
3702 struct ieee80211_conf *conf = &hw->conf;
3707 survey->channel = conf->channel;
3708 survey->filled = SURVEY_INFO_NOISE_DBM;
3709 survey->noise = wl->noise;
3714 static int wl1271_allocate_sta(struct wl1271 *wl,
3715 struct ieee80211_sta *sta,
3718 struct wl1271_station *wl_sta;
3721 id = find_first_zero_bit(wl->ap_hlid_map, AP_MAX_STATIONS);
3722 if (id >= AP_MAX_STATIONS) {
3723 wl1271_warning("could not allocate HLID - too much stations");
3727 wl_sta = (struct wl1271_station *)sta->drv_priv;
3728 set_bit(id, wl->ap_hlid_map);
3729 wl_sta->hlid = WL1271_AP_STA_HLID_START + id;
3730 *hlid = wl_sta->hlid;
3731 memcpy(wl->links[wl_sta->hlid].addr, sta->addr, ETH_ALEN);
3735 static void wl1271_free_sta(struct wl1271 *wl, u8 hlid)
3737 int id = hlid - WL1271_AP_STA_HLID_START;
3739 if (WARN_ON(!test_bit(id, wl->ap_hlid_map)))
3742 clear_bit(id, wl->ap_hlid_map);
3743 memset(wl->links[hlid].addr, 0, ETH_ALEN);
3744 wl->links[hlid].ba_bitmap = 0;
3745 wl1271_tx_reset_link_queues(wl, hlid);
3746 __clear_bit(hlid, &wl->ap_ps_map);
3747 __clear_bit(hlid, (unsigned long *)&wl->ap_fw_ps_map);
3750 static int wl1271_op_sta_add(struct ieee80211_hw *hw,
3751 struct ieee80211_vif *vif,
3752 struct ieee80211_sta *sta)
3754 struct wl1271 *wl = hw->priv;
3758 mutex_lock(&wl->mutex);
3760 if (unlikely(wl->state == WL1271_STATE_OFF))
3763 if (wl->bss_type != BSS_TYPE_AP_BSS)
3766 wl1271_debug(DEBUG_MAC80211, "mac80211 add sta %d", (int)sta->aid);
3768 ret = wl1271_allocate_sta(wl, sta, &hlid);
3772 ret = wl1271_ps_elp_wakeup(wl);
3776 ret = wl12xx_cmd_add_peer(wl, sta, hlid);
3780 ret = wl12xx_cmd_set_peer_state(wl, hlid);
3784 ret = wl1271_acx_set_ht_capabilities(wl, &sta->ht_cap, true, hlid);
3789 wl1271_ps_elp_sleep(wl);
3793 wl1271_free_sta(wl, hlid);
3796 mutex_unlock(&wl->mutex);
3800 static int wl1271_op_sta_remove(struct ieee80211_hw *hw,
3801 struct ieee80211_vif *vif,
3802 struct ieee80211_sta *sta)
3804 struct wl1271 *wl = hw->priv;
3805 struct wl1271_station *wl_sta;
3808 mutex_lock(&wl->mutex);
3810 if (unlikely(wl->state == WL1271_STATE_OFF))
3813 if (wl->bss_type != BSS_TYPE_AP_BSS)
3816 wl1271_debug(DEBUG_MAC80211, "mac80211 remove sta %d", (int)sta->aid);
3818 wl_sta = (struct wl1271_station *)sta->drv_priv;
3819 id = wl_sta->hlid - WL1271_AP_STA_HLID_START;
3820 if (WARN_ON(!test_bit(id, wl->ap_hlid_map)))
3823 ret = wl1271_ps_elp_wakeup(wl);
3827 ret = wl12xx_cmd_remove_peer(wl, wl_sta->hlid);
3831 wl1271_free_sta(wl, wl_sta->hlid);
3834 wl1271_ps_elp_sleep(wl);
3837 mutex_unlock(&wl->mutex);
3841 static int wl1271_op_ampdu_action(struct ieee80211_hw *hw,
3842 struct ieee80211_vif *vif,
3843 enum ieee80211_ampdu_mlme_action action,
3844 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
3847 struct wl1271 *wl = hw->priv;
3849 u8 hlid, *ba_bitmap;
3851 wl1271_debug(DEBUG_MAC80211, "mac80211 ampdu action %d tid %d", action,
3854 /* sanity check - the fields in FW are only 8bits wide */
3855 if (WARN_ON(tid > 0xFF))
3858 mutex_lock(&wl->mutex);
3860 if (unlikely(wl->state == WL1271_STATE_OFF)) {
3865 if (wl->bss_type == BSS_TYPE_STA_BSS) {
3866 hlid = wl->sta_hlid;
3867 ba_bitmap = &wl->ba_rx_bitmap;
3868 } else if (wl->bss_type == BSS_TYPE_AP_BSS) {
3869 struct wl1271_station *wl_sta;
3871 wl_sta = (struct wl1271_station *)sta->drv_priv;
3872 hlid = wl_sta->hlid;
3873 ba_bitmap = &wl->links[hlid].ba_bitmap;
3879 ret = wl1271_ps_elp_wakeup(wl);
3883 wl1271_debug(DEBUG_MAC80211, "mac80211 ampdu: Rx tid %d action %d",
3887 case IEEE80211_AMPDU_RX_START:
3888 if (!wl->ba_support || !wl->ba_allowed) {
3893 if (wl->ba_rx_session_count >= RX_BA_MAX_SESSIONS) {
3895 wl1271_error("exceeded max RX BA sessions");
3899 if (*ba_bitmap & BIT(tid)) {
3901 wl1271_error("cannot enable RX BA session on active "
3906 ret = wl12xx_acx_set_ba_receiver_session(wl, tid, *ssn, true,
3909 *ba_bitmap |= BIT(tid);
3910 wl->ba_rx_session_count++;
3914 case IEEE80211_AMPDU_RX_STOP:
3915 if (!(*ba_bitmap & BIT(tid))) {
3917 wl1271_error("no active RX BA session on tid: %d",
3922 ret = wl12xx_acx_set_ba_receiver_session(wl, tid, 0, false,
3925 *ba_bitmap &= ~BIT(tid);
3926 wl->ba_rx_session_count--;
3931 * The BA initiator session management in FW independently.
3932 * Falling break here on purpose for all TX APDU commands.
3934 case IEEE80211_AMPDU_TX_START:
3935 case IEEE80211_AMPDU_TX_STOP:
3936 case IEEE80211_AMPDU_TX_OPERATIONAL:
3941 wl1271_error("Incorrect ampdu action id=%x\n", action);
3945 wl1271_ps_elp_sleep(wl);
3948 mutex_unlock(&wl->mutex);
3953 static bool wl1271_tx_frames_pending(struct ieee80211_hw *hw)
3955 struct wl1271 *wl = hw->priv;
3958 mutex_lock(&wl->mutex);
3960 if (unlikely(wl->state == WL1271_STATE_OFF))
3963 /* packets are considered pending if in the TX queue or the FW */
3964 ret = (wl1271_tx_total_queue_count(wl) > 0) || (wl->tx_frames_cnt > 0);
3966 /* the above is appropriate for STA mode for PS purposes */
3967 WARN_ON(wl->bss_type != BSS_TYPE_STA_BSS);
3970 mutex_unlock(&wl->mutex);
3975 /* can't be const, mac80211 writes to this */
3976 static struct ieee80211_rate wl1271_rates[] = {
3978 .hw_value = CONF_HW_BIT_RATE_1MBPS,
3979 .hw_value_short = CONF_HW_BIT_RATE_1MBPS, },
3981 .hw_value = CONF_HW_BIT_RATE_2MBPS,
3982 .hw_value_short = CONF_HW_BIT_RATE_2MBPS,
3983 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
3985 .hw_value = CONF_HW_BIT_RATE_5_5MBPS,
3986 .hw_value_short = CONF_HW_BIT_RATE_5_5MBPS,
3987 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
3989 .hw_value = CONF_HW_BIT_RATE_11MBPS,
3990 .hw_value_short = CONF_HW_BIT_RATE_11MBPS,
3991 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
3993 .hw_value = CONF_HW_BIT_RATE_6MBPS,
3994 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
3996 .hw_value = CONF_HW_BIT_RATE_9MBPS,
3997 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
3999 .hw_value = CONF_HW_BIT_RATE_12MBPS,
4000 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
4002 .hw_value = CONF_HW_BIT_RATE_18MBPS,
4003 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
4005 .hw_value = CONF_HW_BIT_RATE_24MBPS,
4006 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
4008 .hw_value = CONF_HW_BIT_RATE_36MBPS,
4009 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
4011 .hw_value = CONF_HW_BIT_RATE_48MBPS,
4012 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
4014 .hw_value = CONF_HW_BIT_RATE_54MBPS,
4015 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
4018 /* can't be const, mac80211 writes to this */
4019 static struct ieee80211_channel wl1271_channels[] = {
4020 { .hw_value = 1, .center_freq = 2412, .max_power = 25 },
4021 { .hw_value = 2, .center_freq = 2417, .max_power = 25 },
4022 { .hw_value = 3, .center_freq = 2422, .max_power = 25 },
4023 { .hw_value = 4, .center_freq = 2427, .max_power = 25 },
4024 { .hw_value = 5, .center_freq = 2432, .max_power = 25 },
4025 { .hw_value = 6, .center_freq = 2437, .max_power = 25 },
4026 { .hw_value = 7, .center_freq = 2442, .max_power = 25 },
4027 { .hw_value = 8, .center_freq = 2447, .max_power = 25 },
4028 { .hw_value = 9, .center_freq = 2452, .max_power = 25 },
4029 { .hw_value = 10, .center_freq = 2457, .max_power = 25 },
4030 { .hw_value = 11, .center_freq = 2462, .max_power = 25 },
4031 { .hw_value = 12, .center_freq = 2467, .max_power = 25 },
4032 { .hw_value = 13, .center_freq = 2472, .max_power = 25 },
4033 { .hw_value = 14, .center_freq = 2484, .max_power = 25 },
4036 /* mapping to indexes for wl1271_rates */
4037 static const u8 wl1271_rate_to_idx_2ghz[] = {
4038 /* MCS rates are used only with 11n */
4039 7, /* CONF_HW_RXTX_RATE_MCS7 */
4040 6, /* CONF_HW_RXTX_RATE_MCS6 */
4041 5, /* CONF_HW_RXTX_RATE_MCS5 */
4042 4, /* CONF_HW_RXTX_RATE_MCS4 */
4043 3, /* CONF_HW_RXTX_RATE_MCS3 */
4044 2, /* CONF_HW_RXTX_RATE_MCS2 */
4045 1, /* CONF_HW_RXTX_RATE_MCS1 */
4046 0, /* CONF_HW_RXTX_RATE_MCS0 */
4048 11, /* CONF_HW_RXTX_RATE_54 */
4049 10, /* CONF_HW_RXTX_RATE_48 */
4050 9, /* CONF_HW_RXTX_RATE_36 */
4051 8, /* CONF_HW_RXTX_RATE_24 */
4053 /* TI-specific rate */
4054 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
4056 7, /* CONF_HW_RXTX_RATE_18 */
4057 6, /* CONF_HW_RXTX_RATE_12 */
4058 3, /* CONF_HW_RXTX_RATE_11 */
4059 5, /* CONF_HW_RXTX_RATE_9 */
4060 4, /* CONF_HW_RXTX_RATE_6 */
4061 2, /* CONF_HW_RXTX_RATE_5_5 */
4062 1, /* CONF_HW_RXTX_RATE_2 */
4063 0 /* CONF_HW_RXTX_RATE_1 */
4066 /* 11n STA capabilities */
4067 #define HW_RX_HIGHEST_RATE 72
4069 #ifdef CONFIG_WL12XX_HT
4070 #define WL12XX_HT_CAP { \
4071 .cap = IEEE80211_HT_CAP_GRN_FLD | IEEE80211_HT_CAP_SGI_20 | \
4072 (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT), \
4073 .ht_supported = true, \
4074 .ampdu_factor = IEEE80211_HT_MAX_AMPDU_8K, \
4075 .ampdu_density = IEEE80211_HT_MPDU_DENSITY_8, \
4077 .rx_mask = { 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, \
4078 .rx_highest = cpu_to_le16(HW_RX_HIGHEST_RATE), \
4079 .tx_params = IEEE80211_HT_MCS_TX_DEFINED, \
4083 #define WL12XX_HT_CAP { \
4084 .ht_supported = false, \
4088 /* can't be const, mac80211 writes to this */
4089 static struct ieee80211_supported_band wl1271_band_2ghz = {
4090 .channels = wl1271_channels,
4091 .n_channels = ARRAY_SIZE(wl1271_channels),
4092 .bitrates = wl1271_rates,
4093 .n_bitrates = ARRAY_SIZE(wl1271_rates),
4094 .ht_cap = WL12XX_HT_CAP,
4097 /* 5 GHz data rates for WL1273 */
4098 static struct ieee80211_rate wl1271_rates_5ghz[] = {
4100 .hw_value = CONF_HW_BIT_RATE_6MBPS,
4101 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
4103 .hw_value = CONF_HW_BIT_RATE_9MBPS,
4104 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
4106 .hw_value = CONF_HW_BIT_RATE_12MBPS,
4107 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
4109 .hw_value = CONF_HW_BIT_RATE_18MBPS,
4110 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
4112 .hw_value = CONF_HW_BIT_RATE_24MBPS,
4113 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
4115 .hw_value = CONF_HW_BIT_RATE_36MBPS,
4116 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
4118 .hw_value = CONF_HW_BIT_RATE_48MBPS,
4119 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
4121 .hw_value = CONF_HW_BIT_RATE_54MBPS,
4122 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
4125 /* 5 GHz band channels for WL1273 */
4126 static struct ieee80211_channel wl1271_channels_5ghz[] = {
4127 { .hw_value = 7, .center_freq = 5035, .max_power = 25 },
4128 { .hw_value = 8, .center_freq = 5040, .max_power = 25 },
4129 { .hw_value = 9, .center_freq = 5045, .max_power = 25 },
4130 { .hw_value = 11, .center_freq = 5055, .max_power = 25 },
4131 { .hw_value = 12, .center_freq = 5060, .max_power = 25 },
4132 { .hw_value = 16, .center_freq = 5080, .max_power = 25 },
4133 { .hw_value = 34, .center_freq = 5170, .max_power = 25 },
4134 { .hw_value = 36, .center_freq = 5180, .max_power = 25 },
4135 { .hw_value = 38, .center_freq = 5190, .max_power = 25 },
4136 { .hw_value = 40, .center_freq = 5200, .max_power = 25 },
4137 { .hw_value = 42, .center_freq = 5210, .max_power = 25 },
4138 { .hw_value = 44, .center_freq = 5220, .max_power = 25 },
4139 { .hw_value = 46, .center_freq = 5230, .max_power = 25 },
4140 { .hw_value = 48, .center_freq = 5240, .max_power = 25 },
4141 { .hw_value = 52, .center_freq = 5260, .max_power = 25 },
4142 { .hw_value = 56, .center_freq = 5280, .max_power = 25 },
4143 { .hw_value = 60, .center_freq = 5300, .max_power = 25 },
4144 { .hw_value = 64, .center_freq = 5320, .max_power = 25 },
4145 { .hw_value = 100, .center_freq = 5500, .max_power = 25 },
4146 { .hw_value = 104, .center_freq = 5520, .max_power = 25 },
4147 { .hw_value = 108, .center_freq = 5540, .max_power = 25 },
4148 { .hw_value = 112, .center_freq = 5560, .max_power = 25 },
4149 { .hw_value = 116, .center_freq = 5580, .max_power = 25 },
4150 { .hw_value = 120, .center_freq = 5600, .max_power = 25 },
4151 { .hw_value = 124, .center_freq = 5620, .max_power = 25 },
4152 { .hw_value = 128, .center_freq = 5640, .max_power = 25 },
4153 { .hw_value = 132, .center_freq = 5660, .max_power = 25 },
4154 { .hw_value = 136, .center_freq = 5680, .max_power = 25 },
4155 { .hw_value = 140, .center_freq = 5700, .max_power = 25 },
4156 { .hw_value = 149, .center_freq = 5745, .max_power = 25 },
4157 { .hw_value = 153, .center_freq = 5765, .max_power = 25 },
4158 { .hw_value = 157, .center_freq = 5785, .max_power = 25 },
4159 { .hw_value = 161, .center_freq = 5805, .max_power = 25 },
4160 { .hw_value = 165, .center_freq = 5825, .max_power = 25 },
4163 /* mapping to indexes for wl1271_rates_5ghz */
4164 static const u8 wl1271_rate_to_idx_5ghz[] = {
4165 /* MCS rates are used only with 11n */
4166 7, /* CONF_HW_RXTX_RATE_MCS7 */
4167 6, /* CONF_HW_RXTX_RATE_MCS6 */
4168 5, /* CONF_HW_RXTX_RATE_MCS5 */
4169 4, /* CONF_HW_RXTX_RATE_MCS4 */
4170 3, /* CONF_HW_RXTX_RATE_MCS3 */
4171 2, /* CONF_HW_RXTX_RATE_MCS2 */
4172 1, /* CONF_HW_RXTX_RATE_MCS1 */
4173 0, /* CONF_HW_RXTX_RATE_MCS0 */
4175 7, /* CONF_HW_RXTX_RATE_54 */
4176 6, /* CONF_HW_RXTX_RATE_48 */
4177 5, /* CONF_HW_RXTX_RATE_36 */
4178 4, /* CONF_HW_RXTX_RATE_24 */
4180 /* TI-specific rate */
4181 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
4183 3, /* CONF_HW_RXTX_RATE_18 */
4184 2, /* CONF_HW_RXTX_RATE_12 */
4185 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_11 */
4186 1, /* CONF_HW_RXTX_RATE_9 */
4187 0, /* CONF_HW_RXTX_RATE_6 */
4188 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_5_5 */
4189 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_2 */
4190 CONF_HW_RXTX_RATE_UNSUPPORTED /* CONF_HW_RXTX_RATE_1 */
4193 static struct ieee80211_supported_band wl1271_band_5ghz = {
4194 .channels = wl1271_channels_5ghz,
4195 .n_channels = ARRAY_SIZE(wl1271_channels_5ghz),
4196 .bitrates = wl1271_rates_5ghz,
4197 .n_bitrates = ARRAY_SIZE(wl1271_rates_5ghz),
4198 .ht_cap = WL12XX_HT_CAP,
4201 static const u8 *wl1271_band_rate_to_idx[] = {
4202 [IEEE80211_BAND_2GHZ] = wl1271_rate_to_idx_2ghz,
4203 [IEEE80211_BAND_5GHZ] = wl1271_rate_to_idx_5ghz
4206 static const struct ieee80211_ops wl1271_ops = {
4207 .start = wl1271_op_start,
4208 .stop = wl1271_op_stop,
4209 .add_interface = wl1271_op_add_interface,
4210 .remove_interface = wl1271_op_remove_interface,
4212 .suspend = wl1271_op_suspend,
4213 .resume = wl1271_op_resume,
4215 .config = wl1271_op_config,
4216 .prepare_multicast = wl1271_op_prepare_multicast,
4217 .configure_filter = wl1271_op_configure_filter,
4219 .set_key = wl1271_op_set_key,
4220 .hw_scan = wl1271_op_hw_scan,
4221 .cancel_hw_scan = wl1271_op_cancel_hw_scan,
4222 .sched_scan_start = wl1271_op_sched_scan_start,
4223 .sched_scan_stop = wl1271_op_sched_scan_stop,
4224 .bss_info_changed = wl1271_op_bss_info_changed,
4225 .set_frag_threshold = wl1271_op_set_frag_threshold,
4226 .set_rts_threshold = wl1271_op_set_rts_threshold,
4227 .conf_tx = wl1271_op_conf_tx,
4228 .get_tsf = wl1271_op_get_tsf,
4229 .get_survey = wl1271_op_get_survey,
4230 .sta_add = wl1271_op_sta_add,
4231 .sta_remove = wl1271_op_sta_remove,
4232 .ampdu_action = wl1271_op_ampdu_action,
4233 .tx_frames_pending = wl1271_tx_frames_pending,
4234 CFG80211_TESTMODE_CMD(wl1271_tm_cmd)
4238 u8 wl1271_rate_to_idx(int rate, enum ieee80211_band band)
4242 BUG_ON(band >= sizeof(wl1271_band_rate_to_idx)/sizeof(u8 *));
4244 if (unlikely(rate >= CONF_HW_RXTX_RATE_MAX)) {
4245 wl1271_error("Illegal RX rate from HW: %d", rate);
4249 idx = wl1271_band_rate_to_idx[band][rate];
4250 if (unlikely(idx == CONF_HW_RXTX_RATE_UNSUPPORTED)) {
4251 wl1271_error("Unsupported RX rate from HW: %d", rate);
4258 static ssize_t wl1271_sysfs_show_bt_coex_state(struct device *dev,
4259 struct device_attribute *attr,
4262 struct wl1271 *wl = dev_get_drvdata(dev);
4267 mutex_lock(&wl->mutex);
4268 len = snprintf(buf, len, "%d\n\n0 - off\n1 - on\n",
4270 mutex_unlock(&wl->mutex);
4276 static ssize_t wl1271_sysfs_store_bt_coex_state(struct device *dev,
4277 struct device_attribute *attr,
4278 const char *buf, size_t count)
4280 struct wl1271 *wl = dev_get_drvdata(dev);
4284 ret = kstrtoul(buf, 10, &res);
4286 wl1271_warning("incorrect value written to bt_coex_mode");
4290 mutex_lock(&wl->mutex);
4294 if (res == wl->sg_enabled)
4297 wl->sg_enabled = res;
4299 if (wl->state == WL1271_STATE_OFF)
4302 ret = wl1271_ps_elp_wakeup(wl);
4306 wl1271_acx_sg_enable(wl, wl->sg_enabled);
4307 wl1271_ps_elp_sleep(wl);
4310 mutex_unlock(&wl->mutex);
4314 static DEVICE_ATTR(bt_coex_state, S_IRUGO | S_IWUSR,
4315 wl1271_sysfs_show_bt_coex_state,
4316 wl1271_sysfs_store_bt_coex_state);
4318 static ssize_t wl1271_sysfs_show_hw_pg_ver(struct device *dev,
4319 struct device_attribute *attr,
4322 struct wl1271 *wl = dev_get_drvdata(dev);
4327 mutex_lock(&wl->mutex);
4328 if (wl->hw_pg_ver >= 0)
4329 len = snprintf(buf, len, "%d\n", wl->hw_pg_ver);
4331 len = snprintf(buf, len, "n/a\n");
4332 mutex_unlock(&wl->mutex);
4337 static DEVICE_ATTR(hw_pg_ver, S_IRUGO,
4338 wl1271_sysfs_show_hw_pg_ver, NULL);
4340 static ssize_t wl1271_sysfs_read_fwlog(struct file *filp, struct kobject *kobj,
4341 struct bin_attribute *bin_attr,
4342 char *buffer, loff_t pos, size_t count)
4344 struct device *dev = container_of(kobj, struct device, kobj);
4345 struct wl1271 *wl = dev_get_drvdata(dev);
4349 ret = mutex_lock_interruptible(&wl->mutex);
4351 return -ERESTARTSYS;
4353 /* Let only one thread read the log at a time, blocking others */
4354 while (wl->fwlog_size == 0) {
4357 prepare_to_wait_exclusive(&wl->fwlog_waitq,
4359 TASK_INTERRUPTIBLE);
4361 if (wl->fwlog_size != 0) {
4362 finish_wait(&wl->fwlog_waitq, &wait);
4366 mutex_unlock(&wl->mutex);
4369 finish_wait(&wl->fwlog_waitq, &wait);
4371 if (signal_pending(current))
4372 return -ERESTARTSYS;
4374 ret = mutex_lock_interruptible(&wl->mutex);
4376 return -ERESTARTSYS;
4379 /* Check if the fwlog is still valid */
4380 if (wl->fwlog_size < 0) {
4381 mutex_unlock(&wl->mutex);
4385 /* Seeking is not supported - old logs are not kept. Disregard pos. */
4386 len = min(count, (size_t)wl->fwlog_size);
4387 wl->fwlog_size -= len;
4388 memcpy(buffer, wl->fwlog, len);
4390 /* Make room for new messages */
4391 memmove(wl->fwlog, wl->fwlog + len, wl->fwlog_size);
4393 mutex_unlock(&wl->mutex);
4398 static struct bin_attribute fwlog_attr = {
4399 .attr = {.name = "fwlog", .mode = S_IRUSR},
4400 .read = wl1271_sysfs_read_fwlog,
4403 int wl1271_register_hw(struct wl1271 *wl)
4407 if (wl->mac80211_registered)
4410 ret = wl1271_fetch_nvs(wl);
4412 /* NOTE: The wl->nvs->nvs element must be first, in
4413 * order to simplify the casting, we assume it is at
4414 * the beginning of the wl->nvs structure.
4416 u8 *nvs_ptr = (u8 *)wl->nvs;
4418 wl->mac_addr[0] = nvs_ptr[11];
4419 wl->mac_addr[1] = nvs_ptr[10];
4420 wl->mac_addr[2] = nvs_ptr[6];
4421 wl->mac_addr[3] = nvs_ptr[5];
4422 wl->mac_addr[4] = nvs_ptr[4];
4423 wl->mac_addr[5] = nvs_ptr[3];
4426 SET_IEEE80211_PERM_ADDR(wl->hw, wl->mac_addr);
4428 ret = ieee80211_register_hw(wl->hw);
4430 wl1271_error("unable to register mac80211 hw: %d", ret);
4434 wl->mac80211_registered = true;
4436 wl1271_debugfs_init(wl);
4438 register_netdevice_notifier(&wl1271_dev_notifier);
4440 wl1271_notice("loaded");
4444 EXPORT_SYMBOL_GPL(wl1271_register_hw);
4446 void wl1271_unregister_hw(struct wl1271 *wl)
4448 if (wl->state == WL1271_STATE_PLT)
4449 __wl1271_plt_stop(wl);
4451 unregister_netdevice_notifier(&wl1271_dev_notifier);
4452 ieee80211_unregister_hw(wl->hw);
4453 wl->mac80211_registered = false;
4456 EXPORT_SYMBOL_GPL(wl1271_unregister_hw);
4458 int wl1271_init_ieee80211(struct wl1271 *wl)
4460 static const u32 cipher_suites[] = {
4461 WLAN_CIPHER_SUITE_WEP40,
4462 WLAN_CIPHER_SUITE_WEP104,
4463 WLAN_CIPHER_SUITE_TKIP,
4464 WLAN_CIPHER_SUITE_CCMP,
4465 WL1271_CIPHER_SUITE_GEM,
4468 /* The tx descriptor buffer and the TKIP space. */
4469 wl->hw->extra_tx_headroom = WL1271_TKIP_IV_SPACE +
4470 sizeof(struct wl1271_tx_hw_descr);
4473 /* FIXME: find a proper value */
4474 wl->hw->channel_change_time = 10000;
4475 wl->hw->max_listen_interval = wl->conf.conn.max_listen_interval;
4477 wl->hw->flags = IEEE80211_HW_SIGNAL_DBM |
4478 IEEE80211_HW_BEACON_FILTER |
4479 IEEE80211_HW_SUPPORTS_PS |
4480 IEEE80211_HW_SUPPORTS_UAPSD |
4481 IEEE80211_HW_HAS_RATE_CONTROL |
4482 IEEE80211_HW_CONNECTION_MONITOR |
4483 IEEE80211_HW_SUPPORTS_CQM_RSSI |
4484 IEEE80211_HW_REPORTS_TX_ACK_STATUS |
4485 IEEE80211_HW_SPECTRUM_MGMT |
4486 IEEE80211_HW_AP_LINK_PS;
4488 wl->hw->wiphy->cipher_suites = cipher_suites;
4489 wl->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
4491 wl->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
4492 BIT(NL80211_IFTYPE_ADHOC) | BIT(NL80211_IFTYPE_AP);
4493 wl->hw->wiphy->max_scan_ssids = 1;
4494 wl->hw->wiphy->max_sched_scan_ssids = 8;
4496 * Maximum length of elements in scanning probe request templates
4497 * should be the maximum length possible for a template, without
4498 * the IEEE80211 header of the template
4500 wl->hw->wiphy->max_scan_ie_len = WL1271_CMD_TEMPL_DFLT_SIZE -
4501 sizeof(struct ieee80211_header);
4503 /* make sure all our channels fit in the scanned_ch bitmask */
4504 BUILD_BUG_ON(ARRAY_SIZE(wl1271_channels) +
4505 ARRAY_SIZE(wl1271_channels_5ghz) >
4506 WL1271_MAX_CHANNELS);
4508 * We keep local copies of the band structs because we need to
4509 * modify them on a per-device basis.
4511 memcpy(&wl->bands[IEEE80211_BAND_2GHZ], &wl1271_band_2ghz,
4512 sizeof(wl1271_band_2ghz));
4513 memcpy(&wl->bands[IEEE80211_BAND_5GHZ], &wl1271_band_5ghz,
4514 sizeof(wl1271_band_5ghz));
4516 wl->hw->wiphy->bands[IEEE80211_BAND_2GHZ] =
4517 &wl->bands[IEEE80211_BAND_2GHZ];
4518 wl->hw->wiphy->bands[IEEE80211_BAND_5GHZ] =
4519 &wl->bands[IEEE80211_BAND_5GHZ];
4522 wl->hw->max_rates = 1;
4524 wl->hw->wiphy->reg_notifier = wl1271_reg_notify;
4526 SET_IEEE80211_DEV(wl->hw, wl1271_wl_to_dev(wl));
4528 wl->hw->sta_data_size = sizeof(struct wl1271_station);
4530 wl->hw->max_rx_aggregation_subframes = 8;
4534 EXPORT_SYMBOL_GPL(wl1271_init_ieee80211);
4536 #define WL1271_DEFAULT_CHANNEL 0
4538 struct ieee80211_hw *wl1271_alloc_hw(void)
4540 struct ieee80211_hw *hw;
4541 struct platform_device *plat_dev = NULL;
4546 hw = ieee80211_alloc_hw(sizeof(*wl), &wl1271_ops);
4548 wl1271_error("could not alloc ieee80211_hw");
4553 plat_dev = kmemdup(&wl1271_device, sizeof(wl1271_device), GFP_KERNEL);
4555 wl1271_error("could not allocate platform_device");
4557 goto err_plat_alloc;
4561 memset(wl, 0, sizeof(*wl));
4563 INIT_LIST_HEAD(&wl->list);
4566 wl->plat_dev = plat_dev;
4568 for (i = 0; i < NUM_TX_QUEUES; i++)
4569 skb_queue_head_init(&wl->tx_queue[i]);
4571 for (i = 0; i < NUM_TX_QUEUES; i++)
4572 for (j = 0; j < AP_MAX_LINKS; j++)
4573 skb_queue_head_init(&wl->links[j].tx_queue[i]);
4575 skb_queue_head_init(&wl->deferred_rx_queue);
4576 skb_queue_head_init(&wl->deferred_tx_queue);
4578 INIT_DELAYED_WORK(&wl->elp_work, wl1271_elp_work);
4579 INIT_DELAYED_WORK(&wl->pspoll_work, wl1271_pspoll_work);
4580 INIT_WORK(&wl->netstack_work, wl1271_netstack_work);
4581 INIT_WORK(&wl->tx_work, wl1271_tx_work);
4582 INIT_WORK(&wl->recovery_work, wl1271_recovery_work);
4583 INIT_DELAYED_WORK(&wl->scan_complete_work, wl1271_scan_complete_work);
4584 INIT_WORK(&wl->rx_streaming_enable_work,
4585 wl1271_rx_streaming_enable_work);
4586 INIT_WORK(&wl->rx_streaming_disable_work,
4587 wl1271_rx_streaming_disable_work);
4589 wl->freezable_wq = create_freezable_workqueue("wl12xx_wq");
4590 if (!wl->freezable_wq) {
4595 wl->channel = WL1271_DEFAULT_CHANNEL;
4596 wl->beacon_int = WL1271_DEFAULT_BEACON_INT;
4597 wl->default_key = 0;
4599 wl->psm_entry_retry = 0;
4600 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
4601 wl->basic_rate_set = CONF_TX_RATE_MASK_BASIC;
4602 wl->basic_rate = CONF_TX_RATE_MASK_BASIC;
4603 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
4604 wl->band = IEEE80211_BAND_2GHZ;
4607 wl->sg_enabled = true;
4609 wl->bss_type = MAX_BSS_TYPE;
4610 wl->set_bss_type = MAX_BSS_TYPE;
4611 wl->last_tx_hlid = 0;
4613 wl->ap_fw_ps_map = 0;
4615 wl->platform_quirks = 0;
4616 wl->sched_scanning = false;
4617 wl->tx_security_seq = 0;
4618 wl->tx_security_last_seq_lsb = 0;
4619 wl->tx_spare_blocks = TX_HW_BLOCK_SPARE_DEFAULT;
4620 wl->role_id = WL12XX_INVALID_ROLE_ID;
4621 wl->system_hlid = WL12XX_SYSTEM_HLID;
4622 wl->sta_hlid = WL12XX_INVALID_LINK_ID;
4623 wl->dev_role_id = WL12XX_INVALID_ROLE_ID;
4624 wl->dev_hlid = WL12XX_INVALID_LINK_ID;
4625 wl->session_counter = 0;
4626 wl->ap_bcast_hlid = WL12XX_INVALID_LINK_ID;
4627 wl->ap_global_hlid = WL12XX_INVALID_LINK_ID;
4628 setup_timer(&wl->rx_streaming_timer, wl1271_rx_streaming_timer,
4629 (unsigned long) wl);
4631 init_waitqueue_head(&wl->fwlog_waitq);
4633 /* The system link is always allocated */
4634 __set_bit(WL12XX_SYSTEM_HLID, wl->links_map);
4636 memset(wl->tx_frames_map, 0, sizeof(wl->tx_frames_map));
4637 for (i = 0; i < ACX_TX_DESCRIPTORS; i++)
4638 wl->tx_frames[i] = NULL;
4640 spin_lock_init(&wl->wl_lock);
4642 wl->state = WL1271_STATE_OFF;
4643 mutex_init(&wl->mutex);
4645 /* Apply default driver configuration. */
4646 wl1271_conf_init(wl);
4648 order = get_order(WL1271_AGGR_BUFFER_SIZE);
4649 wl->aggr_buf = (u8 *)__get_free_pages(GFP_KERNEL, order);
4650 if (!wl->aggr_buf) {
4655 wl->dummy_packet = wl12xx_alloc_dummy_packet(wl);
4656 if (!wl->dummy_packet) {
4661 /* Allocate one page for the FW log */
4662 wl->fwlog = (u8 *)get_zeroed_page(GFP_KERNEL);
4665 goto err_dummy_packet;
4668 /* Register platform device */
4669 ret = platform_device_register(wl->plat_dev);
4671 wl1271_error("couldn't register platform device");
4674 dev_set_drvdata(&wl->plat_dev->dev, wl);
4676 /* Create sysfs file to control bt coex state */
4677 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
4679 wl1271_error("failed to create sysfs file bt_coex_state");
4683 /* Create sysfs file to get HW PG version */
4684 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_hw_pg_ver);
4686 wl1271_error("failed to create sysfs file hw_pg_ver");
4687 goto err_bt_coex_state;
4690 /* Create sysfs file for the FW log */
4691 ret = device_create_bin_file(&wl->plat_dev->dev, &fwlog_attr);
4693 wl1271_error("failed to create sysfs file fwlog");
4700 device_remove_file(&wl->plat_dev->dev, &dev_attr_hw_pg_ver);
4703 device_remove_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
4706 platform_device_unregister(wl->plat_dev);
4709 free_page((unsigned long)wl->fwlog);
4712 dev_kfree_skb(wl->dummy_packet);
4715 free_pages((unsigned long)wl->aggr_buf, order);
4718 destroy_workqueue(wl->freezable_wq);
4721 wl1271_debugfs_exit(wl);
4725 ieee80211_free_hw(hw);
4729 return ERR_PTR(ret);
4731 EXPORT_SYMBOL_GPL(wl1271_alloc_hw);
4733 int wl1271_free_hw(struct wl1271 *wl)
4735 /* Unblock any fwlog readers */
4736 mutex_lock(&wl->mutex);
4737 wl->fwlog_size = -1;
4738 wake_up_interruptible_all(&wl->fwlog_waitq);
4739 mutex_unlock(&wl->mutex);
4741 device_remove_bin_file(&wl->plat_dev->dev, &fwlog_attr);
4743 device_remove_file(&wl->plat_dev->dev, &dev_attr_hw_pg_ver);
4745 device_remove_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
4746 platform_device_unregister(wl->plat_dev);
4747 free_page((unsigned long)wl->fwlog);
4748 dev_kfree_skb(wl->dummy_packet);
4749 free_pages((unsigned long)wl->aggr_buf,
4750 get_order(WL1271_AGGR_BUFFER_SIZE));
4751 kfree(wl->plat_dev);
4753 wl1271_debugfs_exit(wl);
4760 kfree(wl->fw_status);
4761 kfree(wl->tx_res_if);
4762 destroy_workqueue(wl->freezable_wq);
4764 ieee80211_free_hw(wl->hw);
4768 EXPORT_SYMBOL_GPL(wl1271_free_hw);
4770 u32 wl12xx_debug_level = DEBUG_NONE;
4771 EXPORT_SYMBOL_GPL(wl12xx_debug_level);
4772 module_param_named(debug_level, wl12xx_debug_level, uint, S_IRUSR | S_IWUSR);
4773 MODULE_PARM_DESC(debug_level, "wl12xx debugging level");
4775 module_param_named(fwlog, fwlog_param, charp, 0);
4776 MODULE_PARM_DESC(keymap,
4777 "FW logger options: continuous, ondemand, dbgpins or disable");
4779 MODULE_LICENSE("GPL");
4780 MODULE_AUTHOR("Luciano Coelho <coelho@ti.com>");
4781 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");