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 = 5,
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;
2206 wl->basic_rate_set = wl->conf.tx.basic_rate_5;
2209 static bool wl12xx_is_roc(struct wl1271 *wl)
2213 role_id = find_first_bit(wl->roc_map, WL12XX_MAX_ROLES);
2214 if (role_id >= WL12XX_MAX_ROLES)
2220 static int wl1271_sta_handle_idle(struct wl1271 *wl, bool idle)
2225 /* no need to croc if we weren't busy (e.g. during boot) */
2226 if (wl12xx_is_roc(wl)) {
2227 ret = wl12xx_croc(wl, wl->dev_role_id);
2231 ret = wl12xx_cmd_role_stop_dev(wl);
2235 wl->rate_set = wl1271_tx_min_rate_get(wl);
2236 ret = wl1271_acx_sta_rate_policies(wl);
2239 ret = wl1271_acx_keep_alive_config(
2240 wl, CMD_TEMPL_KLV_IDX_NULL_DATA,
2241 ACX_KEEP_ALIVE_TPL_INVALID);
2244 set_bit(WL1271_FLAG_IDLE, &wl->flags);
2246 /* The current firmware only supports sched_scan in idle */
2247 if (wl->sched_scanning) {
2248 wl1271_scan_sched_scan_stop(wl);
2249 ieee80211_sched_scan_stopped(wl->hw);
2252 ret = wl12xx_cmd_role_start_dev(wl);
2256 ret = wl12xx_roc(wl, wl->dev_role_id);
2259 clear_bit(WL1271_FLAG_IDLE, &wl->flags);
2266 static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed)
2268 struct wl1271 *wl = hw->priv;
2269 struct ieee80211_conf *conf = &hw->conf;
2270 int channel, ret = 0;
2273 channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
2275 wl1271_debug(DEBUG_MAC80211, "mac80211 config ch %d psm %s power %d %s"
2278 conf->flags & IEEE80211_CONF_PS ? "on" : "off",
2280 conf->flags & IEEE80211_CONF_IDLE ? "idle" : "in use",
2284 * mac80211 will go to idle nearly immediately after transmitting some
2285 * frames, such as the deauth. To make sure those frames reach the air,
2286 * wait here until the TX queue is fully flushed.
2288 if ((changed & IEEE80211_CONF_CHANGE_IDLE) &&
2289 (conf->flags & IEEE80211_CONF_IDLE))
2290 wl1271_tx_flush(wl);
2292 mutex_lock(&wl->mutex);
2294 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2295 /* we support configuring the channel and band while off */
2296 if ((changed & IEEE80211_CONF_CHANGE_CHANNEL)) {
2297 wl->band = conf->channel->band;
2298 wl->channel = channel;
2301 if ((changed & IEEE80211_CONF_CHANGE_POWER))
2302 wl->power_level = conf->power_level;
2307 is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
2309 ret = wl1271_ps_elp_wakeup(wl);
2313 /* if the channel changes while joined, join again */
2314 if (changed & IEEE80211_CONF_CHANGE_CHANNEL &&
2315 ((wl->band != conf->channel->band) ||
2316 (wl->channel != channel))) {
2317 wl->band = conf->channel->band;
2318 wl->channel = channel;
2322 * FIXME: the mac80211 should really provide a fixed
2323 * rate to use here. for now, just use the smallest
2324 * possible rate for the band as a fixed rate for
2325 * association frames and other control messages.
2327 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
2328 wl1271_set_band_rate(wl);
2330 wl->basic_rate = wl1271_tx_min_rate_get(wl);
2331 ret = wl1271_acx_sta_rate_policies(wl);
2333 wl1271_warning("rate policy for channel "
2336 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags)) {
2337 if (wl12xx_is_roc(wl)) {
2339 ret = wl12xx_croc(wl, wl->dev_role_id);
2343 ret = wl1271_join(wl, false);
2345 wl1271_warning("cmd join on channel "
2349 * change the ROC channel. do it only if we are
2350 * not idle. otherwise, CROC will be called
2353 if (wl12xx_is_roc(wl) &&
2354 !(conf->flags & IEEE80211_CONF_IDLE)) {
2355 ret = wl12xx_croc(wl, wl->dev_role_id);
2359 ret = wl12xx_roc(wl, wl->dev_role_id);
2361 wl1271_warning("roc failed %d",
2368 if (changed & IEEE80211_CONF_CHANGE_IDLE && !is_ap) {
2369 ret = wl1271_sta_handle_idle(wl,
2370 conf->flags & IEEE80211_CONF_IDLE);
2372 wl1271_warning("idle mode change failed %d", ret);
2376 * if mac80211 changes the PSM mode, make sure the mode is not
2377 * incorrectly changed after the pspoll failure active window.
2379 if (changed & IEEE80211_CONF_CHANGE_PS)
2380 clear_bit(WL1271_FLAG_PSPOLL_FAILURE, &wl->flags);
2382 if (conf->flags & IEEE80211_CONF_PS &&
2383 !test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
2384 set_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
2387 * We enter PSM only if we're already associated.
2388 * If we're not, we'll enter it when joining an SSID,
2389 * through the bss_info_changed() hook.
2391 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags)) {
2392 wl1271_debug(DEBUG_PSM, "psm enabled");
2393 ret = wl1271_ps_set_mode(wl, STATION_POWER_SAVE_MODE,
2394 wl->basic_rate, true);
2396 } else if (!(conf->flags & IEEE80211_CONF_PS) &&
2397 test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
2398 wl1271_debug(DEBUG_PSM, "psm disabled");
2400 clear_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
2402 if (test_bit(WL1271_FLAG_PSM, &wl->flags))
2403 ret = wl1271_ps_set_mode(wl, STATION_ACTIVE_MODE,
2404 wl->basic_rate, true);
2407 if (conf->power_level != wl->power_level) {
2408 ret = wl1271_acx_tx_power(wl, conf->power_level);
2412 wl->power_level = conf->power_level;
2416 wl1271_ps_elp_sleep(wl);
2419 mutex_unlock(&wl->mutex);
2424 struct wl1271_filter_params {
2427 u8 mc_list[ACX_MC_ADDRESS_GROUP_MAX][ETH_ALEN];
2430 static u64 wl1271_op_prepare_multicast(struct ieee80211_hw *hw,
2431 struct netdev_hw_addr_list *mc_list)
2433 struct wl1271_filter_params *fp;
2434 struct netdev_hw_addr *ha;
2435 struct wl1271 *wl = hw->priv;
2437 if (unlikely(wl->state == WL1271_STATE_OFF))
2440 fp = kzalloc(sizeof(*fp), GFP_ATOMIC);
2442 wl1271_error("Out of memory setting filters.");
2446 /* update multicast filtering parameters */
2447 fp->mc_list_length = 0;
2448 if (netdev_hw_addr_list_count(mc_list) > ACX_MC_ADDRESS_GROUP_MAX) {
2449 fp->enabled = false;
2452 netdev_hw_addr_list_for_each(ha, mc_list) {
2453 memcpy(fp->mc_list[fp->mc_list_length],
2454 ha->addr, ETH_ALEN);
2455 fp->mc_list_length++;
2459 return (u64)(unsigned long)fp;
2462 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
2465 FIF_BCN_PRBRESP_PROMISC | \
2469 static void wl1271_op_configure_filter(struct ieee80211_hw *hw,
2470 unsigned int changed,
2471 unsigned int *total, u64 multicast)
2473 struct wl1271_filter_params *fp = (void *)(unsigned long)multicast;
2474 struct wl1271 *wl = hw->priv;
2477 wl1271_debug(DEBUG_MAC80211, "mac80211 configure filter changed %x"
2478 " total %x", changed, *total);
2480 mutex_lock(&wl->mutex);
2482 *total &= WL1271_SUPPORTED_FILTERS;
2483 changed &= WL1271_SUPPORTED_FILTERS;
2485 if (unlikely(wl->state == WL1271_STATE_OFF))
2488 ret = wl1271_ps_elp_wakeup(wl);
2492 if (wl->bss_type != BSS_TYPE_AP_BSS) {
2493 if (*total & FIF_ALLMULTI)
2494 ret = wl1271_acx_group_address_tbl(wl, false, NULL, 0);
2496 ret = wl1271_acx_group_address_tbl(wl, fp->enabled,
2498 fp->mc_list_length);
2504 * the fw doesn't provide an api to configure the filters. instead,
2505 * the filters configuration is based on the active roles / ROC
2510 wl1271_ps_elp_sleep(wl);
2513 mutex_unlock(&wl->mutex);
2517 static int wl1271_record_ap_key(struct wl1271 *wl, u8 id, u8 key_type,
2518 u8 key_size, const u8 *key, u8 hlid, u32 tx_seq_32,
2521 struct wl1271_ap_key *ap_key;
2524 wl1271_debug(DEBUG_CRYPT, "record ap key id %d", (int)id);
2526 if (key_size > MAX_KEY_SIZE)
2530 * Find next free entry in ap_keys. Also check we are not replacing
2533 for (i = 0; i < MAX_NUM_KEYS; i++) {
2534 if (wl->recorded_ap_keys[i] == NULL)
2537 if (wl->recorded_ap_keys[i]->id == id) {
2538 wl1271_warning("trying to record key replacement");
2543 if (i == MAX_NUM_KEYS)
2546 ap_key = kzalloc(sizeof(*ap_key), GFP_KERNEL);
2551 ap_key->key_type = key_type;
2552 ap_key->key_size = key_size;
2553 memcpy(ap_key->key, key, key_size);
2554 ap_key->hlid = hlid;
2555 ap_key->tx_seq_32 = tx_seq_32;
2556 ap_key->tx_seq_16 = tx_seq_16;
2558 wl->recorded_ap_keys[i] = ap_key;
2562 static void wl1271_free_ap_keys(struct wl1271 *wl)
2566 for (i = 0; i < MAX_NUM_KEYS; i++) {
2567 kfree(wl->recorded_ap_keys[i]);
2568 wl->recorded_ap_keys[i] = NULL;
2572 static int wl1271_ap_init_hwenc(struct wl1271 *wl)
2575 struct wl1271_ap_key *key;
2576 bool wep_key_added = false;
2578 for (i = 0; i < MAX_NUM_KEYS; i++) {
2580 if (wl->recorded_ap_keys[i] == NULL)
2583 key = wl->recorded_ap_keys[i];
2585 if (hlid == WL12XX_INVALID_LINK_ID)
2586 hlid = wl->ap_bcast_hlid;
2588 ret = wl1271_cmd_set_ap_key(wl, KEY_ADD_OR_REPLACE,
2589 key->id, key->key_type,
2590 key->key_size, key->key,
2591 hlid, key->tx_seq_32,
2596 if (key->key_type == KEY_WEP)
2597 wep_key_added = true;
2600 if (wep_key_added) {
2601 ret = wl12xx_cmd_set_default_wep_key(wl, wl->default_key,
2608 wl1271_free_ap_keys(wl);
2612 static int wl1271_set_key(struct wl1271 *wl, u16 action, u8 id, u8 key_type,
2613 u8 key_size, const u8 *key, u32 tx_seq_32,
2614 u16 tx_seq_16, struct ieee80211_sta *sta)
2617 bool is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
2620 struct wl1271_station *wl_sta;
2624 wl_sta = (struct wl1271_station *)sta->drv_priv;
2625 hlid = wl_sta->hlid;
2627 hlid = wl->ap_bcast_hlid;
2630 if (!test_bit(WL1271_FLAG_AP_STARTED, &wl->flags)) {
2632 * We do not support removing keys after AP shutdown.
2633 * Pretend we do to make mac80211 happy.
2635 if (action != KEY_ADD_OR_REPLACE)
2638 ret = wl1271_record_ap_key(wl, id,
2640 key, hlid, tx_seq_32,
2643 ret = wl1271_cmd_set_ap_key(wl, action,
2644 id, key_type, key_size,
2645 key, hlid, tx_seq_32,
2653 static const u8 bcast_addr[ETH_ALEN] = {
2654 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
2658 * A STA set to GEM cipher requires 2 tx spare blocks.
2659 * Return to default value when GEM cipher key is removed
2661 if (key_type == KEY_GEM) {
2662 if (action == KEY_ADD_OR_REPLACE)
2663 wl->tx_spare_blocks = 2;
2664 else if (action == KEY_REMOVE)
2665 wl->tx_spare_blocks = TX_HW_BLOCK_SPARE_DEFAULT;
2668 addr = sta ? sta->addr : bcast_addr;
2670 if (is_zero_ether_addr(addr)) {
2671 /* We dont support TX only encryption */
2675 /* The wl1271 does not allow to remove unicast keys - they
2676 will be cleared automatically on next CMD_JOIN. Ignore the
2677 request silently, as we dont want the mac80211 to emit
2678 an error message. */
2679 if (action == KEY_REMOVE && !is_broadcast_ether_addr(addr))
2682 /* don't remove key if hlid was already deleted */
2683 if (action == KEY_REMOVE &&
2684 wl->sta_hlid == WL12XX_INVALID_LINK_ID)
2687 ret = wl1271_cmd_set_sta_key(wl, action,
2688 id, key_type, key_size,
2689 key, addr, tx_seq_32,
2694 /* the default WEP key needs to be configured at least once */
2695 if (key_type == KEY_WEP) {
2696 ret = wl12xx_cmd_set_default_wep_key(wl,
2707 static int wl1271_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
2708 struct ieee80211_vif *vif,
2709 struct ieee80211_sta *sta,
2710 struct ieee80211_key_conf *key_conf)
2712 struct wl1271 *wl = hw->priv;
2718 wl1271_debug(DEBUG_MAC80211, "mac80211 set key");
2720 wl1271_debug(DEBUG_CRYPT, "CMD: 0x%x sta: %p", cmd, sta);
2721 wl1271_debug(DEBUG_CRYPT, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
2722 key_conf->cipher, key_conf->keyidx,
2723 key_conf->keylen, key_conf->flags);
2724 wl1271_dump(DEBUG_CRYPT, "KEY: ", key_conf->key, key_conf->keylen);
2726 mutex_lock(&wl->mutex);
2728 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2733 ret = wl1271_ps_elp_wakeup(wl);
2737 switch (key_conf->cipher) {
2738 case WLAN_CIPHER_SUITE_WEP40:
2739 case WLAN_CIPHER_SUITE_WEP104:
2742 key_conf->hw_key_idx = key_conf->keyidx;
2744 case WLAN_CIPHER_SUITE_TKIP:
2745 key_type = KEY_TKIP;
2747 key_conf->hw_key_idx = key_conf->keyidx;
2748 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
2749 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
2751 case WLAN_CIPHER_SUITE_CCMP:
2754 key_conf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
2755 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
2756 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
2758 case WL1271_CIPHER_SUITE_GEM:
2760 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
2761 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
2764 wl1271_error("Unknown key algo 0x%x", key_conf->cipher);
2772 ret = wl1271_set_key(wl, KEY_ADD_OR_REPLACE,
2773 key_conf->keyidx, key_type,
2774 key_conf->keylen, key_conf->key,
2775 tx_seq_32, tx_seq_16, sta);
2777 wl1271_error("Could not add or replace key");
2783 ret = wl1271_set_key(wl, KEY_REMOVE,
2784 key_conf->keyidx, key_type,
2785 key_conf->keylen, key_conf->key,
2788 wl1271_error("Could not remove key");
2794 wl1271_error("Unsupported key cmd 0x%x", cmd);
2800 wl1271_ps_elp_sleep(wl);
2803 mutex_unlock(&wl->mutex);
2808 static int wl1271_op_hw_scan(struct ieee80211_hw *hw,
2809 struct ieee80211_vif *vif,
2810 struct cfg80211_scan_request *req)
2812 struct wl1271 *wl = hw->priv;
2817 wl1271_debug(DEBUG_MAC80211, "mac80211 hw scan");
2820 ssid = req->ssids[0].ssid;
2821 len = req->ssids[0].ssid_len;
2824 mutex_lock(&wl->mutex);
2826 if (wl->state == WL1271_STATE_OFF) {
2828 * We cannot return -EBUSY here because cfg80211 will expect
2829 * a call to ieee80211_scan_completed if we do - in this case
2830 * there won't be any call.
2836 ret = wl1271_ps_elp_wakeup(wl);
2840 /* cancel ROC before scanning */
2841 if (wl12xx_is_roc(wl)) {
2842 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags)) {
2843 /* don't allow scanning right now */
2847 wl12xx_croc(wl, wl->dev_role_id);
2848 wl12xx_cmd_role_stop_dev(wl);
2851 ret = wl1271_scan(hw->priv, ssid, len, req);
2853 wl1271_ps_elp_sleep(wl);
2855 mutex_unlock(&wl->mutex);
2860 static void wl1271_op_cancel_hw_scan(struct ieee80211_hw *hw,
2861 struct ieee80211_vif *vif)
2863 struct wl1271 *wl = hw->priv;
2866 wl1271_debug(DEBUG_MAC80211, "mac80211 cancel hw scan");
2868 mutex_lock(&wl->mutex);
2870 if (wl->state == WL1271_STATE_OFF)
2873 if (wl->scan.state == WL1271_SCAN_STATE_IDLE)
2876 ret = wl1271_ps_elp_wakeup(wl);
2880 if (wl->scan.state != WL1271_SCAN_STATE_DONE) {
2881 ret = wl1271_scan_stop(wl);
2885 wl->scan.state = WL1271_SCAN_STATE_IDLE;
2886 memset(wl->scan.scanned_ch, 0, sizeof(wl->scan.scanned_ch));
2887 wl->scan.req = NULL;
2888 ieee80211_scan_completed(wl->hw, true);
2891 wl1271_ps_elp_sleep(wl);
2893 mutex_unlock(&wl->mutex);
2895 cancel_delayed_work_sync(&wl->scan_complete_work);
2898 static int wl1271_op_sched_scan_start(struct ieee80211_hw *hw,
2899 struct ieee80211_vif *vif,
2900 struct cfg80211_sched_scan_request *req,
2901 struct ieee80211_sched_scan_ies *ies)
2903 struct wl1271 *wl = hw->priv;
2906 wl1271_debug(DEBUG_MAC80211, "wl1271_op_sched_scan_start");
2908 mutex_lock(&wl->mutex);
2910 ret = wl1271_ps_elp_wakeup(wl);
2914 ret = wl1271_scan_sched_scan_config(wl, req, ies);
2918 ret = wl1271_scan_sched_scan_start(wl);
2922 wl->sched_scanning = true;
2925 wl1271_ps_elp_sleep(wl);
2927 mutex_unlock(&wl->mutex);
2931 static void wl1271_op_sched_scan_stop(struct ieee80211_hw *hw,
2932 struct ieee80211_vif *vif)
2934 struct wl1271 *wl = hw->priv;
2937 wl1271_debug(DEBUG_MAC80211, "wl1271_op_sched_scan_stop");
2939 mutex_lock(&wl->mutex);
2941 ret = wl1271_ps_elp_wakeup(wl);
2945 wl1271_scan_sched_scan_stop(wl);
2947 wl1271_ps_elp_sleep(wl);
2949 mutex_unlock(&wl->mutex);
2952 static int wl1271_op_set_frag_threshold(struct ieee80211_hw *hw, u32 value)
2954 struct wl1271 *wl = hw->priv;
2957 mutex_lock(&wl->mutex);
2959 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2964 ret = wl1271_ps_elp_wakeup(wl);
2968 ret = wl1271_acx_frag_threshold(wl, value);
2970 wl1271_warning("wl1271_op_set_frag_threshold failed: %d", ret);
2972 wl1271_ps_elp_sleep(wl);
2975 mutex_unlock(&wl->mutex);
2980 static int wl1271_op_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
2982 struct wl1271 *wl = hw->priv;
2985 mutex_lock(&wl->mutex);
2987 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2992 ret = wl1271_ps_elp_wakeup(wl);
2996 ret = wl1271_acx_rts_threshold(wl, value);
2998 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret);
3000 wl1271_ps_elp_sleep(wl);
3003 mutex_unlock(&wl->mutex);
3008 static int wl1271_ssid_set(struct wl1271 *wl, struct sk_buff *skb,
3012 const u8 *ptr = cfg80211_find_ie(WLAN_EID_SSID, skb->data + offset,
3016 wl1271_error("No SSID in IEs!");
3021 if (ssid_len > IEEE80211_MAX_SSID_LEN) {
3022 wl1271_error("SSID is too long!");
3026 wl->ssid_len = ssid_len;
3027 memcpy(wl->ssid, ptr+2, ssid_len);
3031 static int wl1271_bss_erp_info_changed(struct wl1271 *wl,
3032 struct ieee80211_bss_conf *bss_conf,
3037 if (changed & BSS_CHANGED_ERP_SLOT) {
3038 if (bss_conf->use_short_slot)
3039 ret = wl1271_acx_slot(wl, SLOT_TIME_SHORT);
3041 ret = wl1271_acx_slot(wl, SLOT_TIME_LONG);
3043 wl1271_warning("Set slot time failed %d", ret);
3048 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
3049 if (bss_conf->use_short_preamble)
3050 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_SHORT);
3052 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_LONG);
3055 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
3056 if (bss_conf->use_cts_prot)
3057 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_ENABLE);
3059 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_DISABLE);
3061 wl1271_warning("Set ctsprotect failed %d", ret);
3070 static int wl1271_bss_beacon_info_changed(struct wl1271 *wl,
3071 struct ieee80211_vif *vif,
3072 struct ieee80211_bss_conf *bss_conf,
3075 bool is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
3078 if ((changed & BSS_CHANGED_BEACON_INT)) {
3079 wl1271_debug(DEBUG_MASTER, "beacon interval updated: %d",
3080 bss_conf->beacon_int);
3082 wl->beacon_int = bss_conf->beacon_int;
3085 if ((changed & BSS_CHANGED_BEACON)) {
3086 struct ieee80211_hdr *hdr;
3087 int ieoffset = offsetof(struct ieee80211_mgmt,
3089 struct sk_buff *beacon = ieee80211_beacon_get(wl->hw, vif);
3095 wl1271_debug(DEBUG_MASTER, "beacon updated");
3097 ret = wl1271_ssid_set(wl, beacon, ieoffset);
3099 dev_kfree_skb(beacon);
3102 tmpl_id = is_ap ? CMD_TEMPL_AP_BEACON :
3104 ret = wl1271_cmd_template_set(wl, tmpl_id,
3107 wl1271_tx_min_rate_get(wl));
3109 dev_kfree_skb(beacon);
3113 hdr = (struct ieee80211_hdr *) beacon->data;
3114 hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
3115 IEEE80211_STYPE_PROBE_RESP);
3117 tmpl_id = is_ap ? CMD_TEMPL_AP_PROBE_RESPONSE :
3118 CMD_TEMPL_PROBE_RESPONSE;
3119 ret = wl1271_cmd_template_set(wl,
3123 wl1271_tx_min_rate_get(wl));
3124 dev_kfree_skb(beacon);
3133 /* AP mode changes */
3134 static void wl1271_bss_info_changed_ap(struct wl1271 *wl,
3135 struct ieee80211_vif *vif,
3136 struct ieee80211_bss_conf *bss_conf,
3141 if ((changed & BSS_CHANGED_BASIC_RATES)) {
3142 u32 rates = bss_conf->basic_rates;
3144 wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl, rates);
3145 wl->basic_rate = wl1271_tx_min_rate_get(wl);
3147 ret = wl1271_init_ap_rates(wl);
3149 wl1271_error("AP rate policy change failed %d", ret);
3153 ret = wl1271_ap_init_templates(wl);
3158 ret = wl1271_bss_beacon_info_changed(wl, vif, bss_conf, changed);
3162 if ((changed & BSS_CHANGED_BEACON_ENABLED)) {
3163 if (bss_conf->enable_beacon) {
3164 if (!test_bit(WL1271_FLAG_AP_STARTED, &wl->flags)) {
3165 ret = wl12xx_cmd_role_start_ap(wl);
3169 ret = wl1271_ap_init_hwenc(wl);
3173 set_bit(WL1271_FLAG_AP_STARTED, &wl->flags);
3174 wl1271_debug(DEBUG_AP, "started AP");
3177 if (test_bit(WL1271_FLAG_AP_STARTED, &wl->flags)) {
3178 ret = wl12xx_cmd_role_stop_ap(wl);
3182 clear_bit(WL1271_FLAG_AP_STARTED, &wl->flags);
3183 wl1271_debug(DEBUG_AP, "stopped AP");
3188 ret = wl1271_bss_erp_info_changed(wl, bss_conf, changed);
3192 /* Handle HT information change */
3193 if ((changed & BSS_CHANGED_HT) &&
3194 (bss_conf->channel_type != NL80211_CHAN_NO_HT)) {
3195 ret = wl1271_acx_set_ht_information(wl,
3196 bss_conf->ht_operation_mode);
3198 wl1271_warning("Set ht information failed %d", ret);
3207 /* STA/IBSS mode changes */
3208 static void wl1271_bss_info_changed_sta(struct wl1271 *wl,
3209 struct ieee80211_vif *vif,
3210 struct ieee80211_bss_conf *bss_conf,
3213 bool do_join = false, set_assoc = false;
3214 bool is_ibss = (wl->bss_type == BSS_TYPE_IBSS);
3215 bool ibss_joined = false;
3216 u32 sta_rate_set = 0;
3218 struct ieee80211_sta *sta;
3219 bool sta_exists = false;
3220 struct ieee80211_sta_ht_cap sta_ht_cap;
3223 ret = wl1271_bss_beacon_info_changed(wl, vif, bss_conf,
3229 if (changed & BSS_CHANGED_IBSS) {
3230 if (bss_conf->ibss_joined) {
3231 set_bit(WL1271_FLAG_IBSS_JOINED, &wl->flags);
3234 if (test_and_clear_bit(WL1271_FLAG_IBSS_JOINED,
3237 wl12xx_cmd_role_start_dev(wl);
3238 wl12xx_roc(wl, wl->dev_role_id);
3243 if ((changed & BSS_CHANGED_BEACON_INT) && ibss_joined)
3246 /* Need to update the SSID (for filtering etc) */
3247 if ((changed & BSS_CHANGED_BEACON) && ibss_joined)
3250 if ((changed & BSS_CHANGED_BEACON_ENABLED) && ibss_joined) {
3251 wl1271_debug(DEBUG_ADHOC, "ad-hoc beaconing: %s",
3252 bss_conf->enable_beacon ? "enabled" : "disabled");
3254 if (bss_conf->enable_beacon)
3255 wl->set_bss_type = BSS_TYPE_IBSS;
3257 wl->set_bss_type = BSS_TYPE_STA_BSS;
3261 if ((changed & BSS_CHANGED_CQM)) {
3262 bool enable = false;
3263 if (bss_conf->cqm_rssi_thold)
3265 ret = wl1271_acx_rssi_snr_trigger(wl, enable,
3266 bss_conf->cqm_rssi_thold,
3267 bss_conf->cqm_rssi_hyst);
3270 wl->rssi_thold = bss_conf->cqm_rssi_thold;
3273 if ((changed & BSS_CHANGED_BSSID) &&
3275 * Now we know the correct bssid, so we send a new join command
3276 * and enable the BSSID filter
3278 memcmp(wl->bssid, bss_conf->bssid, ETH_ALEN)) {
3279 memcpy(wl->bssid, bss_conf->bssid, ETH_ALEN);
3281 if (!is_zero_ether_addr(wl->bssid)) {
3282 ret = wl1271_cmd_build_null_data(wl);
3286 ret = wl1271_build_qos_null_data(wl);
3290 /* Need to update the BSSID (for filtering etc) */
3295 if (changed & (BSS_CHANGED_ASSOC | BSS_CHANGED_HT)) {
3297 sta = ieee80211_find_sta(vif, bss_conf->bssid);
3301 /* save the supp_rates of the ap */
3302 sta_rate_set = sta->supp_rates[wl->hw->conf.channel->band];
3303 if (sta->ht_cap.ht_supported)
3305 (sta->ht_cap.mcs.rx_mask[0] << HW_HT_RATES_OFFSET);
3306 sta_ht_cap = sta->ht_cap;
3313 if ((changed & BSS_CHANGED_ASSOC)) {
3314 if (bss_conf->assoc) {
3317 wl->aid = bss_conf->aid;
3320 wl->ps_poll_failures = 0;
3323 * use basic rates from AP, and determine lowest rate
3324 * to use with control frames.
3326 rates = bss_conf->basic_rates;
3327 wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl,
3329 wl->basic_rate = wl1271_tx_min_rate_get(wl);
3331 wl->rate_set = wl1271_tx_enabled_rates_get(wl,
3333 ret = wl1271_acx_sta_rate_policies(wl);
3338 * with wl1271, we don't need to update the
3339 * beacon_int and dtim_period, because the firmware
3340 * updates it by itself when the first beacon is
3341 * received after a join.
3343 ret = wl1271_cmd_build_ps_poll(wl, wl->aid);
3348 * Get a template for hardware connection maintenance
3350 dev_kfree_skb(wl->probereq);
3351 wl->probereq = wl1271_cmd_build_ap_probe_req(wl, NULL);
3352 ieoffset = offsetof(struct ieee80211_mgmt,
3353 u.probe_req.variable);
3354 wl1271_ssid_set(wl, wl->probereq, ieoffset);
3356 /* enable the connection monitoring feature */
3357 ret = wl1271_acx_conn_monit_params(wl, true);
3361 /* If we want to go in PSM but we're not there yet */
3362 if (test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags) &&
3363 !test_bit(WL1271_FLAG_PSM, &wl->flags)) {
3364 enum wl1271_cmd_ps_mode mode;
3366 mode = STATION_POWER_SAVE_MODE;
3367 ret = wl1271_ps_set_mode(wl, mode,
3374 /* use defaults when not associated */
3376 !!test_and_clear_bit(WL1271_FLAG_STA_ASSOCIATED,
3379 !!test_and_clear_bit(WL1271_FLAG_STA_STATE_SENT,
3383 /* free probe-request template */
3384 dev_kfree_skb(wl->probereq);
3385 wl->probereq = NULL;
3387 /* re-enable dynamic ps - just in case */
3388 ieee80211_enable_dyn_ps(wl->vif);
3390 /* revert back to minimum rates for the current band */
3391 wl1271_set_band_rate(wl);
3392 wl->basic_rate = wl1271_tx_min_rate_get(wl);
3393 ret = wl1271_acx_sta_rate_policies(wl);
3397 /* disable connection monitor features */
3398 ret = wl1271_acx_conn_monit_params(wl, false);
3400 /* Disable the keep-alive feature */
3401 ret = wl1271_acx_keep_alive_mode(wl, false);
3405 /* restore the bssid filter and go to dummy bssid */
3407 u32 conf_flags = wl->hw->conf.flags;
3409 * we might have to disable roc, if there was
3410 * no IF_OPER_UP notification.
3413 ret = wl12xx_croc(wl, wl->role_id);
3418 * (we also need to disable roc in case of
3419 * roaming on the same channel. until we will
3420 * have a better flow...)
3422 if (test_bit(wl->dev_role_id, wl->roc_map)) {
3423 ret = wl12xx_croc(wl, wl->dev_role_id);
3429 if (!(conf_flags & IEEE80211_CONF_IDLE)) {
3430 wl12xx_cmd_role_start_dev(wl);
3431 wl12xx_roc(wl, wl->dev_role_id);
3437 if (changed & BSS_CHANGED_IBSS) {
3438 wl1271_debug(DEBUG_ADHOC, "ibss_joined: %d",
3439 bss_conf->ibss_joined);
3441 if (bss_conf->ibss_joined) {
3442 u32 rates = bss_conf->basic_rates;
3443 wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl,
3445 wl->basic_rate = wl1271_tx_min_rate_get(wl);
3447 /* by default, use 11b rates */
3448 wl->rate_set = CONF_TX_IBSS_DEFAULT_RATES;
3449 ret = wl1271_acx_sta_rate_policies(wl);
3455 ret = wl1271_bss_erp_info_changed(wl, bss_conf, changed);
3459 if (changed & BSS_CHANGED_ARP_FILTER) {
3460 __be32 addr = bss_conf->arp_addr_list[0];
3461 WARN_ON(wl->bss_type != BSS_TYPE_STA_BSS);
3463 if (bss_conf->arp_addr_cnt == 1 &&
3464 bss_conf->arp_filter_enabled) {
3466 * The template should have been configured only upon
3467 * association. however, it seems that the correct ip
3468 * isn't being set (when sending), so we have to
3469 * reconfigure the template upon every ip change.
3471 ret = wl1271_cmd_build_arp_rsp(wl, addr);
3473 wl1271_warning("build arp rsp failed: %d", ret);
3477 ret = wl1271_acx_arp_ip_filter(wl,
3478 ACX_ARP_FILTER_ARP_FILTERING,
3481 ret = wl1271_acx_arp_ip_filter(wl, 0, addr);
3488 ret = wl1271_join(wl, set_assoc);
3490 wl1271_warning("cmd join failed %d", ret);
3494 /* ROC until connected (after EAPOL exchange) */
3496 ret = wl12xx_roc(wl, wl->role_id);
3500 wl1271_check_operstate(wl,
3501 ieee80211_get_operstate(vif));
3504 * stop device role if started (we might already be in
3505 * STA role). TODO: make it better.
3507 if (wl->dev_role_id != WL12XX_INVALID_ROLE_ID) {
3508 ret = wl12xx_croc(wl, wl->dev_role_id);
3512 ret = wl12xx_cmd_role_stop_dev(wl);
3518 /* Handle new association with HT. Do this after join. */
3520 if ((changed & BSS_CHANGED_HT) &&
3521 (bss_conf->channel_type != NL80211_CHAN_NO_HT)) {
3522 ret = wl1271_acx_set_ht_capabilities(wl,
3527 wl1271_warning("Set ht cap true failed %d",
3532 /* handle new association without HT and disassociation */
3533 else if (changed & BSS_CHANGED_ASSOC) {
3534 ret = wl1271_acx_set_ht_capabilities(wl,
3539 wl1271_warning("Set ht cap false failed %d",
3546 /* Handle HT information change. Done after join. */
3547 if ((changed & BSS_CHANGED_HT) &&
3548 (bss_conf->channel_type != NL80211_CHAN_NO_HT)) {
3549 ret = wl1271_acx_set_ht_information(wl,
3550 bss_conf->ht_operation_mode);
3552 wl1271_warning("Set ht information failed %d", ret);
3561 static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
3562 struct ieee80211_vif *vif,
3563 struct ieee80211_bss_conf *bss_conf,
3566 struct wl1271 *wl = hw->priv;
3567 bool is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
3570 wl1271_debug(DEBUG_MAC80211, "mac80211 bss info changed 0x%x",
3573 mutex_lock(&wl->mutex);
3575 if (unlikely(wl->state == WL1271_STATE_OFF))
3578 ret = wl1271_ps_elp_wakeup(wl);
3583 wl1271_bss_info_changed_ap(wl, vif, bss_conf, changed);
3585 wl1271_bss_info_changed_sta(wl, vif, bss_conf, changed);
3587 wl1271_ps_elp_sleep(wl);
3590 mutex_unlock(&wl->mutex);
3593 static int wl1271_op_conf_tx(struct ieee80211_hw *hw, u16 queue,
3594 const struct ieee80211_tx_queue_params *params)
3596 struct wl1271 *wl = hw->priv;
3600 mutex_lock(&wl->mutex);
3602 wl1271_debug(DEBUG_MAC80211, "mac80211 conf tx %d", queue);
3605 ps_scheme = CONF_PS_SCHEME_UPSD_TRIGGER;
3607 ps_scheme = CONF_PS_SCHEME_LEGACY;
3609 if (wl->state == WL1271_STATE_OFF) {
3611 * If the state is off, the parameters will be recorded and
3612 * configured on init. This happens in AP-mode.
3614 struct conf_tx_ac_category *conf_ac =
3615 &wl->conf.tx.ac_conf[wl1271_tx_get_queue(queue)];
3616 struct conf_tx_tid *conf_tid =
3617 &wl->conf.tx.tid_conf[wl1271_tx_get_queue(queue)];
3619 conf_ac->ac = wl1271_tx_get_queue(queue);
3620 conf_ac->cw_min = (u8)params->cw_min;
3621 conf_ac->cw_max = params->cw_max;
3622 conf_ac->aifsn = params->aifs;
3623 conf_ac->tx_op_limit = params->txop << 5;
3625 conf_tid->queue_id = wl1271_tx_get_queue(queue);
3626 conf_tid->channel_type = CONF_CHANNEL_TYPE_EDCF;
3627 conf_tid->tsid = wl1271_tx_get_queue(queue);
3628 conf_tid->ps_scheme = ps_scheme;
3629 conf_tid->ack_policy = CONF_ACK_POLICY_LEGACY;
3630 conf_tid->apsd_conf[0] = 0;
3631 conf_tid->apsd_conf[1] = 0;
3635 ret = wl1271_ps_elp_wakeup(wl);
3640 * the txop is confed in units of 32us by the mac80211,
3643 ret = wl1271_acx_ac_cfg(wl, wl1271_tx_get_queue(queue),
3644 params->cw_min, params->cw_max,
3645 params->aifs, params->txop << 5);
3649 ret = wl1271_acx_tid_cfg(wl, wl1271_tx_get_queue(queue),
3650 CONF_CHANNEL_TYPE_EDCF,
3651 wl1271_tx_get_queue(queue),
3652 ps_scheme, CONF_ACK_POLICY_LEGACY,
3656 wl1271_ps_elp_sleep(wl);
3659 mutex_unlock(&wl->mutex);
3664 static u64 wl1271_op_get_tsf(struct ieee80211_hw *hw)
3667 struct wl1271 *wl = hw->priv;
3668 u64 mactime = ULLONG_MAX;
3671 wl1271_debug(DEBUG_MAC80211, "mac80211 get tsf");
3673 mutex_lock(&wl->mutex);
3675 if (unlikely(wl->state == WL1271_STATE_OFF))
3678 ret = wl1271_ps_elp_wakeup(wl);
3682 ret = wl1271_acx_tsf_info(wl, &mactime);
3687 wl1271_ps_elp_sleep(wl);
3690 mutex_unlock(&wl->mutex);
3694 static int wl1271_op_get_survey(struct ieee80211_hw *hw, int idx,
3695 struct survey_info *survey)
3697 struct wl1271 *wl = hw->priv;
3698 struct ieee80211_conf *conf = &hw->conf;
3703 survey->channel = conf->channel;
3704 survey->filled = SURVEY_INFO_NOISE_DBM;
3705 survey->noise = wl->noise;
3710 static int wl1271_allocate_sta(struct wl1271 *wl,
3711 struct ieee80211_sta *sta,
3714 struct wl1271_station *wl_sta;
3717 id = find_first_zero_bit(wl->ap_hlid_map, AP_MAX_STATIONS);
3718 if (id >= AP_MAX_STATIONS) {
3719 wl1271_warning("could not allocate HLID - too much stations");
3723 wl_sta = (struct wl1271_station *)sta->drv_priv;
3724 set_bit(id, wl->ap_hlid_map);
3725 wl_sta->hlid = WL1271_AP_STA_HLID_START + id;
3726 *hlid = wl_sta->hlid;
3727 memcpy(wl->links[wl_sta->hlid].addr, sta->addr, ETH_ALEN);
3731 static void wl1271_free_sta(struct wl1271 *wl, u8 hlid)
3733 int id = hlid - WL1271_AP_STA_HLID_START;
3735 if (WARN_ON(!test_bit(id, wl->ap_hlid_map)))
3738 clear_bit(id, wl->ap_hlid_map);
3739 memset(wl->links[hlid].addr, 0, ETH_ALEN);
3740 wl->links[hlid].ba_bitmap = 0;
3741 wl1271_tx_reset_link_queues(wl, hlid);
3742 __clear_bit(hlid, &wl->ap_ps_map);
3743 __clear_bit(hlid, (unsigned long *)&wl->ap_fw_ps_map);
3746 static int wl1271_op_sta_add(struct ieee80211_hw *hw,
3747 struct ieee80211_vif *vif,
3748 struct ieee80211_sta *sta)
3750 struct wl1271 *wl = hw->priv;
3754 mutex_lock(&wl->mutex);
3756 if (unlikely(wl->state == WL1271_STATE_OFF))
3759 if (wl->bss_type != BSS_TYPE_AP_BSS)
3762 wl1271_debug(DEBUG_MAC80211, "mac80211 add sta %d", (int)sta->aid);
3764 ret = wl1271_allocate_sta(wl, sta, &hlid);
3768 ret = wl1271_ps_elp_wakeup(wl);
3772 ret = wl12xx_cmd_add_peer(wl, sta, hlid);
3776 ret = wl12xx_cmd_set_peer_state(wl, hlid);
3780 ret = wl1271_acx_set_ht_capabilities(wl, &sta->ht_cap, true, hlid);
3785 wl1271_ps_elp_sleep(wl);
3789 wl1271_free_sta(wl, hlid);
3792 mutex_unlock(&wl->mutex);
3796 static int wl1271_op_sta_remove(struct ieee80211_hw *hw,
3797 struct ieee80211_vif *vif,
3798 struct ieee80211_sta *sta)
3800 struct wl1271 *wl = hw->priv;
3801 struct wl1271_station *wl_sta;
3804 mutex_lock(&wl->mutex);
3806 if (unlikely(wl->state == WL1271_STATE_OFF))
3809 if (wl->bss_type != BSS_TYPE_AP_BSS)
3812 wl1271_debug(DEBUG_MAC80211, "mac80211 remove sta %d", (int)sta->aid);
3814 wl_sta = (struct wl1271_station *)sta->drv_priv;
3815 id = wl_sta->hlid - WL1271_AP_STA_HLID_START;
3816 if (WARN_ON(!test_bit(id, wl->ap_hlid_map)))
3819 ret = wl1271_ps_elp_wakeup(wl);
3823 ret = wl12xx_cmd_remove_peer(wl, wl_sta->hlid);
3827 wl1271_free_sta(wl, wl_sta->hlid);
3830 wl1271_ps_elp_sleep(wl);
3833 mutex_unlock(&wl->mutex);
3837 static int wl1271_op_ampdu_action(struct ieee80211_hw *hw,
3838 struct ieee80211_vif *vif,
3839 enum ieee80211_ampdu_mlme_action action,
3840 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
3843 struct wl1271 *wl = hw->priv;
3845 u8 hlid, *ba_bitmap;
3847 wl1271_debug(DEBUG_MAC80211, "mac80211 ampdu action %d tid %d", action,
3850 /* sanity check - the fields in FW are only 8bits wide */
3851 if (WARN_ON(tid > 0xFF))
3854 mutex_lock(&wl->mutex);
3856 if (unlikely(wl->state == WL1271_STATE_OFF)) {
3861 if (wl->bss_type == BSS_TYPE_STA_BSS) {
3862 hlid = wl->sta_hlid;
3863 ba_bitmap = &wl->ba_rx_bitmap;
3864 } else if (wl->bss_type == BSS_TYPE_AP_BSS) {
3865 struct wl1271_station *wl_sta;
3867 wl_sta = (struct wl1271_station *)sta->drv_priv;
3868 hlid = wl_sta->hlid;
3869 ba_bitmap = &wl->links[hlid].ba_bitmap;
3875 ret = wl1271_ps_elp_wakeup(wl);
3879 wl1271_debug(DEBUG_MAC80211, "mac80211 ampdu: Rx tid %d action %d",
3883 case IEEE80211_AMPDU_RX_START:
3884 if (!wl->ba_support || !wl->ba_allowed) {
3889 if (wl->ba_rx_session_count >= RX_BA_MAX_SESSIONS) {
3891 wl1271_error("exceeded max RX BA sessions");
3895 if (*ba_bitmap & BIT(tid)) {
3897 wl1271_error("cannot enable RX BA session on active "
3902 ret = wl12xx_acx_set_ba_receiver_session(wl, tid, *ssn, true,
3905 *ba_bitmap |= BIT(tid);
3906 wl->ba_rx_session_count++;
3910 case IEEE80211_AMPDU_RX_STOP:
3911 if (!(*ba_bitmap & BIT(tid))) {
3913 wl1271_error("no active RX BA session on tid: %d",
3918 ret = wl12xx_acx_set_ba_receiver_session(wl, tid, 0, false,
3921 *ba_bitmap &= ~BIT(tid);
3922 wl->ba_rx_session_count--;
3927 * The BA initiator session management in FW independently.
3928 * Falling break here on purpose for all TX APDU commands.
3930 case IEEE80211_AMPDU_TX_START:
3931 case IEEE80211_AMPDU_TX_STOP:
3932 case IEEE80211_AMPDU_TX_OPERATIONAL:
3937 wl1271_error("Incorrect ampdu action id=%x\n", action);
3941 wl1271_ps_elp_sleep(wl);
3944 mutex_unlock(&wl->mutex);
3949 static bool wl1271_tx_frames_pending(struct ieee80211_hw *hw)
3951 struct wl1271 *wl = hw->priv;
3954 mutex_lock(&wl->mutex);
3956 if (unlikely(wl->state == WL1271_STATE_OFF))
3959 /* packets are considered pending if in the TX queue or the FW */
3960 ret = (wl1271_tx_total_queue_count(wl) > 0) || (wl->tx_frames_cnt > 0);
3962 /* the above is appropriate for STA mode for PS purposes */
3963 WARN_ON(wl->bss_type != BSS_TYPE_STA_BSS);
3966 mutex_unlock(&wl->mutex);
3971 /* can't be const, mac80211 writes to this */
3972 static struct ieee80211_rate wl1271_rates[] = {
3974 .hw_value = CONF_HW_BIT_RATE_1MBPS,
3975 .hw_value_short = CONF_HW_BIT_RATE_1MBPS, },
3977 .hw_value = CONF_HW_BIT_RATE_2MBPS,
3978 .hw_value_short = CONF_HW_BIT_RATE_2MBPS,
3979 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
3981 .hw_value = CONF_HW_BIT_RATE_5_5MBPS,
3982 .hw_value_short = CONF_HW_BIT_RATE_5_5MBPS,
3983 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
3985 .hw_value = CONF_HW_BIT_RATE_11MBPS,
3986 .hw_value_short = CONF_HW_BIT_RATE_11MBPS,
3987 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
3989 .hw_value = CONF_HW_BIT_RATE_6MBPS,
3990 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
3992 .hw_value = CONF_HW_BIT_RATE_9MBPS,
3993 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
3995 .hw_value = CONF_HW_BIT_RATE_12MBPS,
3996 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
3998 .hw_value = CONF_HW_BIT_RATE_18MBPS,
3999 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
4001 .hw_value = CONF_HW_BIT_RATE_24MBPS,
4002 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
4004 .hw_value = CONF_HW_BIT_RATE_36MBPS,
4005 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
4007 .hw_value = CONF_HW_BIT_RATE_48MBPS,
4008 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
4010 .hw_value = CONF_HW_BIT_RATE_54MBPS,
4011 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
4014 /* can't be const, mac80211 writes to this */
4015 static struct ieee80211_channel wl1271_channels[] = {
4016 { .hw_value = 1, .center_freq = 2412, .max_power = 25 },
4017 { .hw_value = 2, .center_freq = 2417, .max_power = 25 },
4018 { .hw_value = 3, .center_freq = 2422, .max_power = 25 },
4019 { .hw_value = 4, .center_freq = 2427, .max_power = 25 },
4020 { .hw_value = 5, .center_freq = 2432, .max_power = 25 },
4021 { .hw_value = 6, .center_freq = 2437, .max_power = 25 },
4022 { .hw_value = 7, .center_freq = 2442, .max_power = 25 },
4023 { .hw_value = 8, .center_freq = 2447, .max_power = 25 },
4024 { .hw_value = 9, .center_freq = 2452, .max_power = 25 },
4025 { .hw_value = 10, .center_freq = 2457, .max_power = 25 },
4026 { .hw_value = 11, .center_freq = 2462, .max_power = 25 },
4027 { .hw_value = 12, .center_freq = 2467, .max_power = 25 },
4028 { .hw_value = 13, .center_freq = 2472, .max_power = 25 },
4029 { .hw_value = 14, .center_freq = 2484, .max_power = 25 },
4032 /* mapping to indexes for wl1271_rates */
4033 static const u8 wl1271_rate_to_idx_2ghz[] = {
4034 /* MCS rates are used only with 11n */
4035 7, /* CONF_HW_RXTX_RATE_MCS7 */
4036 6, /* CONF_HW_RXTX_RATE_MCS6 */
4037 5, /* CONF_HW_RXTX_RATE_MCS5 */
4038 4, /* CONF_HW_RXTX_RATE_MCS4 */
4039 3, /* CONF_HW_RXTX_RATE_MCS3 */
4040 2, /* CONF_HW_RXTX_RATE_MCS2 */
4041 1, /* CONF_HW_RXTX_RATE_MCS1 */
4042 0, /* CONF_HW_RXTX_RATE_MCS0 */
4044 11, /* CONF_HW_RXTX_RATE_54 */
4045 10, /* CONF_HW_RXTX_RATE_48 */
4046 9, /* CONF_HW_RXTX_RATE_36 */
4047 8, /* CONF_HW_RXTX_RATE_24 */
4049 /* TI-specific rate */
4050 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
4052 7, /* CONF_HW_RXTX_RATE_18 */
4053 6, /* CONF_HW_RXTX_RATE_12 */
4054 3, /* CONF_HW_RXTX_RATE_11 */
4055 5, /* CONF_HW_RXTX_RATE_9 */
4056 4, /* CONF_HW_RXTX_RATE_6 */
4057 2, /* CONF_HW_RXTX_RATE_5_5 */
4058 1, /* CONF_HW_RXTX_RATE_2 */
4059 0 /* CONF_HW_RXTX_RATE_1 */
4062 /* 11n STA capabilities */
4063 #define HW_RX_HIGHEST_RATE 72
4065 #ifdef CONFIG_WL12XX_HT
4066 #define WL12XX_HT_CAP { \
4067 .cap = IEEE80211_HT_CAP_GRN_FLD | IEEE80211_HT_CAP_SGI_20 | \
4068 (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT), \
4069 .ht_supported = true, \
4070 .ampdu_factor = IEEE80211_HT_MAX_AMPDU_8K, \
4071 .ampdu_density = IEEE80211_HT_MPDU_DENSITY_8, \
4073 .rx_mask = { 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, \
4074 .rx_highest = cpu_to_le16(HW_RX_HIGHEST_RATE), \
4075 .tx_params = IEEE80211_HT_MCS_TX_DEFINED, \
4079 #define WL12XX_HT_CAP { \
4080 .ht_supported = false, \
4084 /* can't be const, mac80211 writes to this */
4085 static struct ieee80211_supported_band wl1271_band_2ghz = {
4086 .channels = wl1271_channels,
4087 .n_channels = ARRAY_SIZE(wl1271_channels),
4088 .bitrates = wl1271_rates,
4089 .n_bitrates = ARRAY_SIZE(wl1271_rates),
4090 .ht_cap = WL12XX_HT_CAP,
4093 /* 5 GHz data rates for WL1273 */
4094 static struct ieee80211_rate wl1271_rates_5ghz[] = {
4096 .hw_value = CONF_HW_BIT_RATE_6MBPS,
4097 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
4099 .hw_value = CONF_HW_BIT_RATE_9MBPS,
4100 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
4102 .hw_value = CONF_HW_BIT_RATE_12MBPS,
4103 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
4105 .hw_value = CONF_HW_BIT_RATE_18MBPS,
4106 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
4108 .hw_value = CONF_HW_BIT_RATE_24MBPS,
4109 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
4111 .hw_value = CONF_HW_BIT_RATE_36MBPS,
4112 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
4114 .hw_value = CONF_HW_BIT_RATE_48MBPS,
4115 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
4117 .hw_value = CONF_HW_BIT_RATE_54MBPS,
4118 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
4121 /* 5 GHz band channels for WL1273 */
4122 static struct ieee80211_channel wl1271_channels_5ghz[] = {
4123 { .hw_value = 7, .center_freq = 5035, .max_power = 25 },
4124 { .hw_value = 8, .center_freq = 5040, .max_power = 25 },
4125 { .hw_value = 9, .center_freq = 5045, .max_power = 25 },
4126 { .hw_value = 11, .center_freq = 5055, .max_power = 25 },
4127 { .hw_value = 12, .center_freq = 5060, .max_power = 25 },
4128 { .hw_value = 16, .center_freq = 5080, .max_power = 25 },
4129 { .hw_value = 34, .center_freq = 5170, .max_power = 25 },
4130 { .hw_value = 36, .center_freq = 5180, .max_power = 25 },
4131 { .hw_value = 38, .center_freq = 5190, .max_power = 25 },
4132 { .hw_value = 40, .center_freq = 5200, .max_power = 25 },
4133 { .hw_value = 42, .center_freq = 5210, .max_power = 25 },
4134 { .hw_value = 44, .center_freq = 5220, .max_power = 25 },
4135 { .hw_value = 46, .center_freq = 5230, .max_power = 25 },
4136 { .hw_value = 48, .center_freq = 5240, .max_power = 25 },
4137 { .hw_value = 52, .center_freq = 5260, .max_power = 25 },
4138 { .hw_value = 56, .center_freq = 5280, .max_power = 25 },
4139 { .hw_value = 60, .center_freq = 5300, .max_power = 25 },
4140 { .hw_value = 64, .center_freq = 5320, .max_power = 25 },
4141 { .hw_value = 100, .center_freq = 5500, .max_power = 25 },
4142 { .hw_value = 104, .center_freq = 5520, .max_power = 25 },
4143 { .hw_value = 108, .center_freq = 5540, .max_power = 25 },
4144 { .hw_value = 112, .center_freq = 5560, .max_power = 25 },
4145 { .hw_value = 116, .center_freq = 5580, .max_power = 25 },
4146 { .hw_value = 120, .center_freq = 5600, .max_power = 25 },
4147 { .hw_value = 124, .center_freq = 5620, .max_power = 25 },
4148 { .hw_value = 128, .center_freq = 5640, .max_power = 25 },
4149 { .hw_value = 132, .center_freq = 5660, .max_power = 25 },
4150 { .hw_value = 136, .center_freq = 5680, .max_power = 25 },
4151 { .hw_value = 140, .center_freq = 5700, .max_power = 25 },
4152 { .hw_value = 149, .center_freq = 5745, .max_power = 25 },
4153 { .hw_value = 153, .center_freq = 5765, .max_power = 25 },
4154 { .hw_value = 157, .center_freq = 5785, .max_power = 25 },
4155 { .hw_value = 161, .center_freq = 5805, .max_power = 25 },
4156 { .hw_value = 165, .center_freq = 5825, .max_power = 25 },
4159 /* mapping to indexes for wl1271_rates_5ghz */
4160 static const u8 wl1271_rate_to_idx_5ghz[] = {
4161 /* MCS rates are used only with 11n */
4162 7, /* CONF_HW_RXTX_RATE_MCS7 */
4163 6, /* CONF_HW_RXTX_RATE_MCS6 */
4164 5, /* CONF_HW_RXTX_RATE_MCS5 */
4165 4, /* CONF_HW_RXTX_RATE_MCS4 */
4166 3, /* CONF_HW_RXTX_RATE_MCS3 */
4167 2, /* CONF_HW_RXTX_RATE_MCS2 */
4168 1, /* CONF_HW_RXTX_RATE_MCS1 */
4169 0, /* CONF_HW_RXTX_RATE_MCS0 */
4171 7, /* CONF_HW_RXTX_RATE_54 */
4172 6, /* CONF_HW_RXTX_RATE_48 */
4173 5, /* CONF_HW_RXTX_RATE_36 */
4174 4, /* CONF_HW_RXTX_RATE_24 */
4176 /* TI-specific rate */
4177 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
4179 3, /* CONF_HW_RXTX_RATE_18 */
4180 2, /* CONF_HW_RXTX_RATE_12 */
4181 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_11 */
4182 1, /* CONF_HW_RXTX_RATE_9 */
4183 0, /* CONF_HW_RXTX_RATE_6 */
4184 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_5_5 */
4185 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_2 */
4186 CONF_HW_RXTX_RATE_UNSUPPORTED /* CONF_HW_RXTX_RATE_1 */
4189 static struct ieee80211_supported_band wl1271_band_5ghz = {
4190 .channels = wl1271_channels_5ghz,
4191 .n_channels = ARRAY_SIZE(wl1271_channels_5ghz),
4192 .bitrates = wl1271_rates_5ghz,
4193 .n_bitrates = ARRAY_SIZE(wl1271_rates_5ghz),
4194 .ht_cap = WL12XX_HT_CAP,
4197 static const u8 *wl1271_band_rate_to_idx[] = {
4198 [IEEE80211_BAND_2GHZ] = wl1271_rate_to_idx_2ghz,
4199 [IEEE80211_BAND_5GHZ] = wl1271_rate_to_idx_5ghz
4202 static const struct ieee80211_ops wl1271_ops = {
4203 .start = wl1271_op_start,
4204 .stop = wl1271_op_stop,
4205 .add_interface = wl1271_op_add_interface,
4206 .remove_interface = wl1271_op_remove_interface,
4208 .suspend = wl1271_op_suspend,
4209 .resume = wl1271_op_resume,
4211 .config = wl1271_op_config,
4212 .prepare_multicast = wl1271_op_prepare_multicast,
4213 .configure_filter = wl1271_op_configure_filter,
4215 .set_key = wl1271_op_set_key,
4216 .hw_scan = wl1271_op_hw_scan,
4217 .cancel_hw_scan = wl1271_op_cancel_hw_scan,
4218 .sched_scan_start = wl1271_op_sched_scan_start,
4219 .sched_scan_stop = wl1271_op_sched_scan_stop,
4220 .bss_info_changed = wl1271_op_bss_info_changed,
4221 .set_frag_threshold = wl1271_op_set_frag_threshold,
4222 .set_rts_threshold = wl1271_op_set_rts_threshold,
4223 .conf_tx = wl1271_op_conf_tx,
4224 .get_tsf = wl1271_op_get_tsf,
4225 .get_survey = wl1271_op_get_survey,
4226 .sta_add = wl1271_op_sta_add,
4227 .sta_remove = wl1271_op_sta_remove,
4228 .ampdu_action = wl1271_op_ampdu_action,
4229 .tx_frames_pending = wl1271_tx_frames_pending,
4230 CFG80211_TESTMODE_CMD(wl1271_tm_cmd)
4234 u8 wl1271_rate_to_idx(int rate, enum ieee80211_band band)
4238 BUG_ON(band >= sizeof(wl1271_band_rate_to_idx)/sizeof(u8 *));
4240 if (unlikely(rate >= CONF_HW_RXTX_RATE_MAX)) {
4241 wl1271_error("Illegal RX rate from HW: %d", rate);
4245 idx = wl1271_band_rate_to_idx[band][rate];
4246 if (unlikely(idx == CONF_HW_RXTX_RATE_UNSUPPORTED)) {
4247 wl1271_error("Unsupported RX rate from HW: %d", rate);
4254 static ssize_t wl1271_sysfs_show_bt_coex_state(struct device *dev,
4255 struct device_attribute *attr,
4258 struct wl1271 *wl = dev_get_drvdata(dev);
4263 mutex_lock(&wl->mutex);
4264 len = snprintf(buf, len, "%d\n\n0 - off\n1 - on\n",
4266 mutex_unlock(&wl->mutex);
4272 static ssize_t wl1271_sysfs_store_bt_coex_state(struct device *dev,
4273 struct device_attribute *attr,
4274 const char *buf, size_t count)
4276 struct wl1271 *wl = dev_get_drvdata(dev);
4280 ret = kstrtoul(buf, 10, &res);
4282 wl1271_warning("incorrect value written to bt_coex_mode");
4286 mutex_lock(&wl->mutex);
4290 if (res == wl->sg_enabled)
4293 wl->sg_enabled = res;
4295 if (wl->state == WL1271_STATE_OFF)
4298 ret = wl1271_ps_elp_wakeup(wl);
4302 wl1271_acx_sg_enable(wl, wl->sg_enabled);
4303 wl1271_ps_elp_sleep(wl);
4306 mutex_unlock(&wl->mutex);
4310 static DEVICE_ATTR(bt_coex_state, S_IRUGO | S_IWUSR,
4311 wl1271_sysfs_show_bt_coex_state,
4312 wl1271_sysfs_store_bt_coex_state);
4314 static ssize_t wl1271_sysfs_show_hw_pg_ver(struct device *dev,
4315 struct device_attribute *attr,
4318 struct wl1271 *wl = dev_get_drvdata(dev);
4323 mutex_lock(&wl->mutex);
4324 if (wl->hw_pg_ver >= 0)
4325 len = snprintf(buf, len, "%d\n", wl->hw_pg_ver);
4327 len = snprintf(buf, len, "n/a\n");
4328 mutex_unlock(&wl->mutex);
4333 static DEVICE_ATTR(hw_pg_ver, S_IRUGO,
4334 wl1271_sysfs_show_hw_pg_ver, NULL);
4336 static ssize_t wl1271_sysfs_read_fwlog(struct file *filp, struct kobject *kobj,
4337 struct bin_attribute *bin_attr,
4338 char *buffer, loff_t pos, size_t count)
4340 struct device *dev = container_of(kobj, struct device, kobj);
4341 struct wl1271 *wl = dev_get_drvdata(dev);
4345 ret = mutex_lock_interruptible(&wl->mutex);
4347 return -ERESTARTSYS;
4349 /* Let only one thread read the log at a time, blocking others */
4350 while (wl->fwlog_size == 0) {
4353 prepare_to_wait_exclusive(&wl->fwlog_waitq,
4355 TASK_INTERRUPTIBLE);
4357 if (wl->fwlog_size != 0) {
4358 finish_wait(&wl->fwlog_waitq, &wait);
4362 mutex_unlock(&wl->mutex);
4365 finish_wait(&wl->fwlog_waitq, &wait);
4367 if (signal_pending(current))
4368 return -ERESTARTSYS;
4370 ret = mutex_lock_interruptible(&wl->mutex);
4372 return -ERESTARTSYS;
4375 /* Check if the fwlog is still valid */
4376 if (wl->fwlog_size < 0) {
4377 mutex_unlock(&wl->mutex);
4381 /* Seeking is not supported - old logs are not kept. Disregard pos. */
4382 len = min(count, (size_t)wl->fwlog_size);
4383 wl->fwlog_size -= len;
4384 memcpy(buffer, wl->fwlog, len);
4386 /* Make room for new messages */
4387 memmove(wl->fwlog, wl->fwlog + len, wl->fwlog_size);
4389 mutex_unlock(&wl->mutex);
4394 static struct bin_attribute fwlog_attr = {
4395 .attr = {.name = "fwlog", .mode = S_IRUSR},
4396 .read = wl1271_sysfs_read_fwlog,
4399 int wl1271_register_hw(struct wl1271 *wl)
4403 if (wl->mac80211_registered)
4406 ret = wl1271_fetch_nvs(wl);
4408 /* NOTE: The wl->nvs->nvs element must be first, in
4409 * order to simplify the casting, we assume it is at
4410 * the beginning of the wl->nvs structure.
4412 u8 *nvs_ptr = (u8 *)wl->nvs;
4414 wl->mac_addr[0] = nvs_ptr[11];
4415 wl->mac_addr[1] = nvs_ptr[10];
4416 wl->mac_addr[2] = nvs_ptr[6];
4417 wl->mac_addr[3] = nvs_ptr[5];
4418 wl->mac_addr[4] = nvs_ptr[4];
4419 wl->mac_addr[5] = nvs_ptr[3];
4422 SET_IEEE80211_PERM_ADDR(wl->hw, wl->mac_addr);
4424 ret = ieee80211_register_hw(wl->hw);
4426 wl1271_error("unable to register mac80211 hw: %d", ret);
4430 wl->mac80211_registered = true;
4432 wl1271_debugfs_init(wl);
4434 register_netdevice_notifier(&wl1271_dev_notifier);
4436 wl1271_notice("loaded");
4440 EXPORT_SYMBOL_GPL(wl1271_register_hw);
4442 void wl1271_unregister_hw(struct wl1271 *wl)
4444 if (wl->state == WL1271_STATE_PLT)
4445 __wl1271_plt_stop(wl);
4447 unregister_netdevice_notifier(&wl1271_dev_notifier);
4448 ieee80211_unregister_hw(wl->hw);
4449 wl->mac80211_registered = false;
4452 EXPORT_SYMBOL_GPL(wl1271_unregister_hw);
4454 int wl1271_init_ieee80211(struct wl1271 *wl)
4456 static const u32 cipher_suites[] = {
4457 WLAN_CIPHER_SUITE_WEP40,
4458 WLAN_CIPHER_SUITE_WEP104,
4459 WLAN_CIPHER_SUITE_TKIP,
4460 WLAN_CIPHER_SUITE_CCMP,
4461 WL1271_CIPHER_SUITE_GEM,
4464 /* The tx descriptor buffer and the TKIP space. */
4465 wl->hw->extra_tx_headroom = WL1271_TKIP_IV_SPACE +
4466 sizeof(struct wl1271_tx_hw_descr);
4469 /* FIXME: find a proper value */
4470 wl->hw->channel_change_time = 10000;
4471 wl->hw->max_listen_interval = wl->conf.conn.max_listen_interval;
4473 wl->hw->flags = IEEE80211_HW_SIGNAL_DBM |
4474 IEEE80211_HW_BEACON_FILTER |
4475 IEEE80211_HW_SUPPORTS_PS |
4476 IEEE80211_HW_SUPPORTS_UAPSD |
4477 IEEE80211_HW_HAS_RATE_CONTROL |
4478 IEEE80211_HW_CONNECTION_MONITOR |
4479 IEEE80211_HW_SUPPORTS_CQM_RSSI |
4480 IEEE80211_HW_REPORTS_TX_ACK_STATUS |
4481 IEEE80211_HW_SPECTRUM_MGMT |
4482 IEEE80211_HW_AP_LINK_PS;
4484 wl->hw->wiphy->cipher_suites = cipher_suites;
4485 wl->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
4487 wl->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
4488 BIT(NL80211_IFTYPE_ADHOC) | BIT(NL80211_IFTYPE_AP);
4489 wl->hw->wiphy->max_scan_ssids = 1;
4491 * Maximum length of elements in scanning probe request templates
4492 * should be the maximum length possible for a template, without
4493 * the IEEE80211 header of the template
4495 wl->hw->wiphy->max_scan_ie_len = WL1271_CMD_TEMPL_DFLT_SIZE -
4496 sizeof(struct ieee80211_header);
4498 /* make sure all our channels fit in the scanned_ch bitmask */
4499 BUILD_BUG_ON(ARRAY_SIZE(wl1271_channels) +
4500 ARRAY_SIZE(wl1271_channels_5ghz) >
4501 WL1271_MAX_CHANNELS);
4503 * We keep local copies of the band structs because we need to
4504 * modify them on a per-device basis.
4506 memcpy(&wl->bands[IEEE80211_BAND_2GHZ], &wl1271_band_2ghz,
4507 sizeof(wl1271_band_2ghz));
4508 memcpy(&wl->bands[IEEE80211_BAND_5GHZ], &wl1271_band_5ghz,
4509 sizeof(wl1271_band_5ghz));
4511 wl->hw->wiphy->bands[IEEE80211_BAND_2GHZ] =
4512 &wl->bands[IEEE80211_BAND_2GHZ];
4513 wl->hw->wiphy->bands[IEEE80211_BAND_5GHZ] =
4514 &wl->bands[IEEE80211_BAND_5GHZ];
4517 wl->hw->max_rates = 1;
4519 wl->hw->wiphy->reg_notifier = wl1271_reg_notify;
4521 SET_IEEE80211_DEV(wl->hw, wl1271_wl_to_dev(wl));
4523 wl->hw->sta_data_size = sizeof(struct wl1271_station);
4525 wl->hw->max_rx_aggregation_subframes = 8;
4529 EXPORT_SYMBOL_GPL(wl1271_init_ieee80211);
4531 #define WL1271_DEFAULT_CHANNEL 0
4533 struct ieee80211_hw *wl1271_alloc_hw(void)
4535 struct ieee80211_hw *hw;
4536 struct platform_device *plat_dev = NULL;
4541 hw = ieee80211_alloc_hw(sizeof(*wl), &wl1271_ops);
4543 wl1271_error("could not alloc ieee80211_hw");
4548 plat_dev = kmemdup(&wl1271_device, sizeof(wl1271_device), GFP_KERNEL);
4550 wl1271_error("could not allocate platform_device");
4552 goto err_plat_alloc;
4556 memset(wl, 0, sizeof(*wl));
4558 INIT_LIST_HEAD(&wl->list);
4561 wl->plat_dev = plat_dev;
4563 for (i = 0; i < NUM_TX_QUEUES; i++)
4564 skb_queue_head_init(&wl->tx_queue[i]);
4566 for (i = 0; i < NUM_TX_QUEUES; i++)
4567 for (j = 0; j < AP_MAX_LINKS; j++)
4568 skb_queue_head_init(&wl->links[j].tx_queue[i]);
4570 skb_queue_head_init(&wl->deferred_rx_queue);
4571 skb_queue_head_init(&wl->deferred_tx_queue);
4573 INIT_DELAYED_WORK(&wl->elp_work, wl1271_elp_work);
4574 INIT_DELAYED_WORK(&wl->pspoll_work, wl1271_pspoll_work);
4575 INIT_WORK(&wl->netstack_work, wl1271_netstack_work);
4576 INIT_WORK(&wl->tx_work, wl1271_tx_work);
4577 INIT_WORK(&wl->recovery_work, wl1271_recovery_work);
4578 INIT_DELAYED_WORK(&wl->scan_complete_work, wl1271_scan_complete_work);
4579 INIT_WORK(&wl->rx_streaming_enable_work,
4580 wl1271_rx_streaming_enable_work);
4581 INIT_WORK(&wl->rx_streaming_disable_work,
4582 wl1271_rx_streaming_disable_work);
4584 wl->freezable_wq = create_freezable_workqueue("wl12xx_wq");
4585 if (!wl->freezable_wq) {
4590 wl->channel = WL1271_DEFAULT_CHANNEL;
4591 wl->beacon_int = WL1271_DEFAULT_BEACON_INT;
4592 wl->default_key = 0;
4594 wl->psm_entry_retry = 0;
4595 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
4596 wl->basic_rate_set = CONF_TX_RATE_MASK_BASIC;
4597 wl->basic_rate = CONF_TX_RATE_MASK_BASIC;
4598 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
4599 wl->band = IEEE80211_BAND_2GHZ;
4602 wl->sg_enabled = true;
4604 wl->bss_type = MAX_BSS_TYPE;
4605 wl->set_bss_type = MAX_BSS_TYPE;
4606 wl->last_tx_hlid = 0;
4608 wl->ap_fw_ps_map = 0;
4610 wl->platform_quirks = 0;
4611 wl->sched_scanning = false;
4612 wl->tx_security_seq = 0;
4613 wl->tx_security_last_seq_lsb = 0;
4614 wl->tx_spare_blocks = TX_HW_BLOCK_SPARE_DEFAULT;
4615 wl->role_id = WL12XX_INVALID_ROLE_ID;
4616 wl->system_hlid = WL12XX_SYSTEM_HLID;
4617 wl->sta_hlid = WL12XX_INVALID_LINK_ID;
4618 wl->dev_role_id = WL12XX_INVALID_ROLE_ID;
4619 wl->dev_hlid = WL12XX_INVALID_LINK_ID;
4620 wl->session_counter = 0;
4621 wl->ap_bcast_hlid = WL12XX_INVALID_LINK_ID;
4622 wl->ap_global_hlid = WL12XX_INVALID_LINK_ID;
4623 setup_timer(&wl->rx_streaming_timer, wl1271_rx_streaming_timer,
4624 (unsigned long) wl);
4626 init_waitqueue_head(&wl->fwlog_waitq);
4628 /* The system link is always allocated */
4629 __set_bit(WL12XX_SYSTEM_HLID, wl->links_map);
4631 memset(wl->tx_frames_map, 0, sizeof(wl->tx_frames_map));
4632 for (i = 0; i < ACX_TX_DESCRIPTORS; i++)
4633 wl->tx_frames[i] = NULL;
4635 spin_lock_init(&wl->wl_lock);
4637 wl->state = WL1271_STATE_OFF;
4638 mutex_init(&wl->mutex);
4640 /* Apply default driver configuration. */
4641 wl1271_conf_init(wl);
4643 order = get_order(WL1271_AGGR_BUFFER_SIZE);
4644 wl->aggr_buf = (u8 *)__get_free_pages(GFP_KERNEL, order);
4645 if (!wl->aggr_buf) {
4650 wl->dummy_packet = wl12xx_alloc_dummy_packet(wl);
4651 if (!wl->dummy_packet) {
4656 /* Allocate one page for the FW log */
4657 wl->fwlog = (u8 *)get_zeroed_page(GFP_KERNEL);
4660 goto err_dummy_packet;
4663 /* Register platform device */
4664 ret = platform_device_register(wl->plat_dev);
4666 wl1271_error("couldn't register platform device");
4669 dev_set_drvdata(&wl->plat_dev->dev, wl);
4671 /* Create sysfs file to control bt coex state */
4672 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
4674 wl1271_error("failed to create sysfs file bt_coex_state");
4678 /* Create sysfs file to get HW PG version */
4679 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_hw_pg_ver);
4681 wl1271_error("failed to create sysfs file hw_pg_ver");
4682 goto err_bt_coex_state;
4685 /* Create sysfs file for the FW log */
4686 ret = device_create_bin_file(&wl->plat_dev->dev, &fwlog_attr);
4688 wl1271_error("failed to create sysfs file fwlog");
4695 device_remove_file(&wl->plat_dev->dev, &dev_attr_hw_pg_ver);
4698 device_remove_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
4701 platform_device_unregister(wl->plat_dev);
4704 free_page((unsigned long)wl->fwlog);
4707 dev_kfree_skb(wl->dummy_packet);
4710 free_pages((unsigned long)wl->aggr_buf, order);
4713 destroy_workqueue(wl->freezable_wq);
4716 wl1271_debugfs_exit(wl);
4720 ieee80211_free_hw(hw);
4724 return ERR_PTR(ret);
4726 EXPORT_SYMBOL_GPL(wl1271_alloc_hw);
4728 int wl1271_free_hw(struct wl1271 *wl)
4730 /* Unblock any fwlog readers */
4731 mutex_lock(&wl->mutex);
4732 wl->fwlog_size = -1;
4733 wake_up_interruptible_all(&wl->fwlog_waitq);
4734 mutex_unlock(&wl->mutex);
4736 device_remove_bin_file(&wl->plat_dev->dev, &fwlog_attr);
4738 device_remove_file(&wl->plat_dev->dev, &dev_attr_hw_pg_ver);
4740 device_remove_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
4741 platform_device_unregister(wl->plat_dev);
4742 free_page((unsigned long)wl->fwlog);
4743 dev_kfree_skb(wl->dummy_packet);
4744 free_pages((unsigned long)wl->aggr_buf,
4745 get_order(WL1271_AGGR_BUFFER_SIZE));
4746 kfree(wl->plat_dev);
4748 wl1271_debugfs_exit(wl);
4755 kfree(wl->fw_status);
4756 kfree(wl->tx_res_if);
4757 destroy_workqueue(wl->freezable_wq);
4759 ieee80211_free_hw(wl->hw);
4763 EXPORT_SYMBOL_GPL(wl1271_free_hw);
4765 u32 wl12xx_debug_level = DEBUG_NONE;
4766 EXPORT_SYMBOL_GPL(wl12xx_debug_level);
4767 module_param_named(debug_level, wl12xx_debug_level, uint, S_IRUSR | S_IWUSR);
4768 MODULE_PARM_DESC(debug_level, "wl12xx debugging level");
4770 module_param_named(fwlog, fwlog_param, charp, 0);
4771 MODULE_PARM_DESC(keymap,
4772 "FW logger options: continuous, ondemand, dbgpins or disable");
4774 MODULE_LICENSE("GPL");
4775 MODULE_AUTHOR("Luciano Coelho <coelho@ti.com>");
4776 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");