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_BT_PER_THRESHOLD] = 7500,
57 [CONF_SG_HV3_MAX_OVERRIDE] = 0,
58 [CONF_SG_BT_NFS_SAMPLE_INTERVAL] = 400,
59 [CONF_SG_BT_LOAD_RATIO] = 200,
60 [CONF_SG_AUTO_PS_MODE] = 1,
61 [CONF_SG_AUTO_SCAN_PROBE_REQ] = 170,
62 [CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_HV3] = 50,
63 [CONF_SG_ANTENNA_CONFIGURATION] = 0,
64 [CONF_SG_BEACON_MISS_PERCENT] = 60,
65 [CONF_SG_RATE_ADAPT_THRESH] = 12,
66 [CONF_SG_RATE_ADAPT_SNR] = 0,
67 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MIN_BR] = 10,
68 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MAX_BR] = 30,
69 [CONF_SG_WLAN_PS_MAX_BT_ACL_MASTER_BR] = 8,
70 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MIN_BR] = 20,
71 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MAX_BR] = 50,
72 /* Note: with UPSD, this should be 4 */
73 [CONF_SG_WLAN_PS_MAX_BT_ACL_SLAVE_BR] = 8,
74 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MIN_EDR] = 7,
75 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MAX_EDR] = 25,
76 [CONF_SG_WLAN_PS_MAX_BT_ACL_MASTER_EDR] = 20,
77 /* Note: with UPDS, this should be 15 */
78 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MIN_EDR] = 8,
79 /* Note: with UPDS, this should be 50 */
80 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MAX_EDR] = 40,
81 /* Note: with UPDS, this should be 10 */
82 [CONF_SG_WLAN_PS_MAX_BT_ACL_SLAVE_EDR] = 20,
85 [CONF_SG_ADAPTIVE_RXT_TXT] = 1,
86 [CONF_SG_PS_POLL_TIMEOUT] = 10,
87 [CONF_SG_UPSD_TIMEOUT] = 10,
88 [CONF_SG_WLAN_ACTIVE_BT_ACL_MASTER_MIN_EDR] = 7,
89 [CONF_SG_WLAN_ACTIVE_BT_ACL_MASTER_MAX_EDR] = 15,
90 [CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_MASTER_EDR] = 15,
91 [CONF_SG_WLAN_ACTIVE_BT_ACL_SLAVE_MIN_EDR] = 8,
92 [CONF_SG_WLAN_ACTIVE_BT_ACL_SLAVE_MAX_EDR] = 20,
93 [CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_SLAVE_EDR] = 15,
94 [CONF_SG_WLAN_ACTIVE_BT_ACL_MIN_BR] = 20,
95 [CONF_SG_WLAN_ACTIVE_BT_ACL_MAX_BR] = 50,
96 [CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_BR] = 10,
97 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_HV3] = 200,
98 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_A2DP] = 800,
99 [CONF_SG_PASSIVE_SCAN_A2DP_BT_TIME] = 75,
100 [CONF_SG_PASSIVE_SCAN_A2DP_WLAN_TIME] = 15,
101 [CONF_SG_HV3_MAX_SERVED] = 6,
102 [CONF_SG_DHCP_TIME] = 5000,
103 [CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_A2DP] = 100,
106 [CONF_SG_BT_PER_THRESHOLD] = 7500,
107 [CONF_SG_HV3_MAX_OVERRIDE] = 0,
108 [CONF_SG_BT_NFS_SAMPLE_INTERVAL] = 400,
109 [CONF_SG_BT_LOAD_RATIO] = 50,
110 [CONF_SG_AUTO_PS_MODE] = 1,
111 [CONF_SG_AUTO_SCAN_PROBE_REQ] = 170,
112 [CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_HV3] = 50,
113 [CONF_SG_ANTENNA_CONFIGURATION] = 0,
114 [CONF_SG_BEACON_MISS_PERCENT] = 60,
115 [CONF_SG_RATE_ADAPT_THRESH] = 64,
116 [CONF_SG_RATE_ADAPT_SNR] = 1,
117 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MIN_BR] = 10,
118 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MAX_BR] = 25,
119 [CONF_SG_WLAN_PS_MAX_BT_ACL_MASTER_BR] = 25,
120 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MIN_BR] = 20,
121 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MAX_BR] = 25,
122 [CONF_SG_WLAN_PS_MAX_BT_ACL_SLAVE_BR] = 25,
123 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MIN_EDR] = 7,
124 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MAX_EDR] = 25,
125 [CONF_SG_WLAN_PS_MAX_BT_ACL_MASTER_EDR] = 25,
126 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MIN_EDR] = 8,
127 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MAX_EDR] = 25,
128 [CONF_SG_WLAN_PS_MAX_BT_ACL_SLAVE_EDR] = 25,
129 [CONF_SG_RXT] = 1200,
130 [CONF_SG_TXT] = 1000,
131 [CONF_SG_ADAPTIVE_RXT_TXT] = 1,
132 [CONF_SG_PS_POLL_TIMEOUT] = 10,
133 [CONF_SG_UPSD_TIMEOUT] = 10,
134 [CONF_SG_WLAN_ACTIVE_BT_ACL_MASTER_MIN_EDR] = 7,
135 [CONF_SG_WLAN_ACTIVE_BT_ACL_MASTER_MAX_EDR] = 15,
136 [CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_MASTER_EDR] = 15,
137 [CONF_SG_WLAN_ACTIVE_BT_ACL_SLAVE_MIN_EDR] = 8,
138 [CONF_SG_WLAN_ACTIVE_BT_ACL_SLAVE_MAX_EDR] = 20,
139 [CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_SLAVE_EDR] = 15,
140 [CONF_SG_WLAN_ACTIVE_BT_ACL_MIN_BR] = 20,
141 [CONF_SG_WLAN_ACTIVE_BT_ACL_MAX_BR] = 50,
142 [CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_BR] = 10,
143 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_HV3] = 200,
144 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_A2DP] = 800,
145 [CONF_SG_PASSIVE_SCAN_A2DP_BT_TIME] = 75,
146 [CONF_SG_PASSIVE_SCAN_A2DP_WLAN_TIME] = 15,
147 [CONF_SG_HV3_MAX_SERVED] = 6,
148 [CONF_SG_DHCP_TIME] = 5000,
149 [CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_A2DP] = 100,
150 [CONF_SG_TEMP_PARAM_1] = 0,
151 [CONF_SG_TEMP_PARAM_2] = 0,
152 [CONF_SG_TEMP_PARAM_3] = 0,
153 [CONF_SG_TEMP_PARAM_4] = 0,
154 [CONF_SG_TEMP_PARAM_5] = 0,
155 [CONF_SG_AP_BEACON_MISS_TX] = 3,
156 [CONF_SG_RX_WINDOW_LENGTH] = 6,
157 [CONF_SG_AP_CONNECTION_PROTECTION_TIME] = 50,
158 [CONF_SG_TEMP_PARAM_6] = 1,
160 .state = CONF_SG_PROTECTIVE,
163 .rx_msdu_life_time = 512000,
164 .packet_detection_threshold = 0,
165 .ps_poll_timeout = 15,
167 .rts_threshold = IEEE80211_MAX_RTS_THRESHOLD,
168 .rx_cca_threshold = 0,
169 .irq_blk_threshold = 0xFFFF,
170 .irq_pkt_threshold = 0,
172 .queue_type = CONF_RX_QUEUE_TYPE_LOW_PRIORITY,
175 .tx_energy_detection = 0,
178 .short_retry_limit = 10,
179 .long_retry_limit = 10,
202 .aifsn = CONF_TX_AIFS_PIFS,
209 .aifsn = CONF_TX_AIFS_PIFS,
213 .max_tx_retries = 100,
214 .ap_aging_period = 300,
218 .queue_id = CONF_TX_AC_BE,
219 .channel_type = CONF_CHANNEL_TYPE_EDCF,
220 .tsid = CONF_TX_AC_BE,
221 .ps_scheme = CONF_PS_SCHEME_LEGACY,
222 .ack_policy = CONF_ACK_POLICY_LEGACY,
226 .queue_id = CONF_TX_AC_BK,
227 .channel_type = CONF_CHANNEL_TYPE_EDCF,
228 .tsid = CONF_TX_AC_BK,
229 .ps_scheme = CONF_PS_SCHEME_LEGACY,
230 .ack_policy = CONF_ACK_POLICY_LEGACY,
234 .queue_id = CONF_TX_AC_VI,
235 .channel_type = CONF_CHANNEL_TYPE_EDCF,
236 .tsid = CONF_TX_AC_VI,
237 .ps_scheme = CONF_PS_SCHEME_LEGACY,
238 .ack_policy = CONF_ACK_POLICY_LEGACY,
242 .queue_id = CONF_TX_AC_VO,
243 .channel_type = CONF_CHANNEL_TYPE_EDCF,
244 .tsid = CONF_TX_AC_VO,
245 .ps_scheme = CONF_PS_SCHEME_LEGACY,
246 .ack_policy = CONF_ACK_POLICY_LEGACY,
250 .frag_threshold = IEEE80211_MAX_FRAG_THRESHOLD,
251 .tx_compl_timeout = 700,
252 .tx_compl_threshold = 4,
253 .basic_rate = CONF_HW_BIT_RATE_1MBPS,
254 .basic_rate_5 = CONF_HW_BIT_RATE_6MBPS,
255 .tmpl_short_retry_limit = 10,
256 .tmpl_long_retry_limit = 10,
259 .wake_up_event = CONF_WAKE_UP_EVENT_DTIM,
260 .listen_interval = 1,
261 .bcn_filt_mode = CONF_BCN_FILT_MODE_ENABLED,
262 .bcn_filt_ie_count = 2,
265 .ie = WLAN_EID_CHANNEL_SWITCH,
266 .rule = CONF_BCN_RULE_PASS_ON_APPEARANCE,
269 .ie = WLAN_EID_HT_INFORMATION,
270 .rule = CONF_BCN_RULE_PASS_ON_CHANGE,
273 .synch_fail_thold = 10,
274 .bss_lose_timeout = 100,
275 .beacon_rx_timeout = 10000,
276 .broadcast_timeout = 20000,
277 .rx_broadcast_in_ps = 1,
278 .ps_poll_threshold = 10,
279 .ps_poll_recovery_period = 700,
280 .bet_enable = CONF_BET_MODE_ENABLE,
281 .bet_max_consecutive = 50,
282 .psm_entry_retries = 5,
283 .psm_exit_retries = 16,
284 .psm_entry_nullfunc_retries = 3,
285 .psm_entry_hangover_period = 1,
286 .keep_alive_interval = 55000,
287 .max_listen_interval = 20,
294 .host_clk_settling_time = 5000,
295 .host_fast_wakeup_support = false
299 .avg_weight_rssi_beacon = 20,
300 .avg_weight_rssi_data = 10,
301 .avg_weight_snr_beacon = 20,
302 .avg_weight_snr_data = 10,
305 .min_dwell_time_active = 7500,
306 .max_dwell_time_active = 30000,
307 .min_dwell_time_passive = 100000,
308 .max_dwell_time_passive = 100000,
312 /* sched_scan requires dwell times in TU instead of TU/1000 */
313 .min_dwell_time_active = 8,
314 .max_dwell_time_active = 30,
315 .dwell_time_passive = 100,
316 .dwell_time_dfs = 150,
318 .rssi_threshold = -90,
322 .tx_per_channel_power_compensation_2 = {
323 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
325 .tx_per_channel_power_compensation_5 = {
326 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
327 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
328 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
332 .tx_ba_win_size = 64,
333 .inactivity_timeout = 10000,
339 .tx_min_block_num = 40,
341 .min_req_tx_blocks = 100,
342 .min_req_rx_blocks = 22,
349 .tx_min_block_num = 40,
351 .min_req_tx_blocks = 45,
352 .min_req_rx_blocks = 22,
358 .n_divider_fref_set_1 = 0xff, /* default */
359 .n_divider_fref_set_2 = 12,
360 .m_divider_fref_set_1 = 148,
361 .m_divider_fref_set_2 = 0xffff, /* default */
362 .coex_pll_stabilization_time = 0xffffffff, /* default */
363 .ldo_stabilization_time = 0xffff, /* default */
364 .fm_disturbed_band_margin = 0xff, /* default */
365 .swallow_clk_diff = 0xff, /* default */
374 .mode = WL12XX_FWLOG_ON_DEMAND,
377 .timestamp = WL12XX_FWLOG_TIMESTAMP_DISABLED,
378 .output = WL12XX_FWLOG_OUTPUT_HOST,
381 .hci_io_ds = HCI_IO_DS_6MA,
384 static char *fwlog_param;
386 static void __wl1271_op_remove_interface(struct wl1271 *wl,
387 bool reset_tx_queues);
388 static void wl1271_free_ap_keys(struct wl1271 *wl);
391 static void wl1271_device_release(struct device *dev)
396 static struct platform_device wl1271_device = {
400 /* device model insists to have a release function */
402 .release = wl1271_device_release,
406 static DEFINE_MUTEX(wl_list_mutex);
407 static LIST_HEAD(wl_list);
409 static int wl1271_check_operstate(struct wl1271 *wl, unsigned char operstate)
412 if (operstate != IF_OPER_UP)
415 if (test_and_set_bit(WL1271_FLAG_STA_STATE_SENT, &wl->flags))
418 ret = wl12xx_cmd_set_peer_state(wl);
422 wl1271_info("Association completed.");
425 static int wl1271_dev_notify(struct notifier_block *me, unsigned long what,
428 struct net_device *dev = arg;
429 struct wireless_dev *wdev;
431 struct ieee80211_hw *hw;
433 struct wl1271 *wl_temp;
436 /* Check that this notification is for us. */
437 if (what != NETDEV_CHANGE)
440 wdev = dev->ieee80211_ptr;
448 hw = wiphy_priv(wiphy);
453 mutex_lock(&wl_list_mutex);
454 list_for_each_entry(wl, &wl_list, list) {
458 mutex_unlock(&wl_list_mutex);
462 mutex_lock(&wl->mutex);
464 if (wl->state == WL1271_STATE_OFF)
467 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
470 ret = wl1271_ps_elp_wakeup(wl);
474 wl1271_check_operstate(wl, dev->operstate);
476 wl1271_ps_elp_sleep(wl);
479 mutex_unlock(&wl->mutex);
484 static int wl1271_reg_notify(struct wiphy *wiphy,
485 struct regulatory_request *request)
487 struct ieee80211_supported_band *band;
488 struct ieee80211_channel *ch;
491 band = wiphy->bands[IEEE80211_BAND_5GHZ];
492 for (i = 0; i < band->n_channels; i++) {
493 ch = &band->channels[i];
494 if (ch->flags & IEEE80211_CHAN_DISABLED)
497 if (ch->flags & IEEE80211_CHAN_RADAR)
498 ch->flags |= IEEE80211_CHAN_NO_IBSS |
499 IEEE80211_CHAN_PASSIVE_SCAN;
506 static int wl1271_set_rx_streaming(struct wl1271 *wl, bool enable)
510 /* we should hold wl->mutex */
511 ret = wl1271_acx_ps_rx_streaming(wl, enable);
516 set_bit(WL1271_FLAG_RX_STREAMING_STARTED, &wl->flags);
518 clear_bit(WL1271_FLAG_RX_STREAMING_STARTED, &wl->flags);
524 * this function is being called when the rx_streaming interval
525 * has beed changed or rx_streaming should be disabled
527 int wl1271_recalc_rx_streaming(struct wl1271 *wl)
530 int period = wl->conf.rx_streaming.interval;
532 /* don't reconfigure if rx_streaming is disabled */
533 if (!test_bit(WL1271_FLAG_RX_STREAMING_STARTED, &wl->flags))
536 /* reconfigure/disable according to new streaming_period */
538 test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags) &&
539 (wl->conf.rx_streaming.always ||
540 test_bit(WL1271_FLAG_SOFT_GEMINI, &wl->flags)))
541 ret = wl1271_set_rx_streaming(wl, true);
543 ret = wl1271_set_rx_streaming(wl, false);
544 /* don't cancel_work_sync since we might deadlock */
545 del_timer_sync(&wl->rx_streaming_timer);
551 static void wl1271_rx_streaming_enable_work(struct work_struct *work)
555 container_of(work, struct wl1271, rx_streaming_enable_work);
557 mutex_lock(&wl->mutex);
559 if (test_bit(WL1271_FLAG_RX_STREAMING_STARTED, &wl->flags) ||
560 !test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags) ||
561 (!wl->conf.rx_streaming.always &&
562 !test_bit(WL1271_FLAG_SOFT_GEMINI, &wl->flags)))
565 if (!wl->conf.rx_streaming.interval)
568 ret = wl1271_ps_elp_wakeup(wl);
572 ret = wl1271_set_rx_streaming(wl, true);
576 /* stop it after some time of inactivity */
577 mod_timer(&wl->rx_streaming_timer,
578 jiffies + msecs_to_jiffies(wl->conf.rx_streaming.duration));
581 wl1271_ps_elp_sleep(wl);
583 mutex_unlock(&wl->mutex);
586 static void wl1271_rx_streaming_disable_work(struct work_struct *work)
590 container_of(work, struct wl1271, rx_streaming_disable_work);
592 mutex_lock(&wl->mutex);
594 if (!test_bit(WL1271_FLAG_RX_STREAMING_STARTED, &wl->flags))
597 ret = wl1271_ps_elp_wakeup(wl);
601 ret = wl1271_set_rx_streaming(wl, false);
606 wl1271_ps_elp_sleep(wl);
608 mutex_unlock(&wl->mutex);
611 static void wl1271_rx_streaming_timer(unsigned long data)
613 struct wl1271 *wl = (struct wl1271 *)data;
614 ieee80211_queue_work(wl->hw, &wl->rx_streaming_disable_work);
617 static void wl1271_conf_init(struct wl1271 *wl)
621 * This function applies the default configuration to the driver. This
622 * function is invoked upon driver load (spi probe.)
624 * The configuration is stored in a run-time structure in order to
625 * facilitate for run-time adjustment of any of the parameters. Making
626 * changes to the configuration structure will apply the new values on
627 * the next interface up (wl1271_op_start.)
630 /* apply driver default configuration */
631 memcpy(&wl->conf, &default_conf, sizeof(default_conf));
633 /* Adjust settings according to optional module parameters */
635 if (!strcmp(fwlog_param, "continuous")) {
636 wl->conf.fwlog.mode = WL12XX_FWLOG_CONTINUOUS;
637 } else if (!strcmp(fwlog_param, "ondemand")) {
638 wl->conf.fwlog.mode = WL12XX_FWLOG_ON_DEMAND;
639 } else if (!strcmp(fwlog_param, "dbgpins")) {
640 wl->conf.fwlog.mode = WL12XX_FWLOG_CONTINUOUS;
641 wl->conf.fwlog.output = WL12XX_FWLOG_OUTPUT_DBG_PINS;
642 } else if (!strcmp(fwlog_param, "disable")) {
643 wl->conf.fwlog.mem_blocks = 0;
644 wl->conf.fwlog.output = WL12XX_FWLOG_OUTPUT_NONE;
646 wl1271_error("Unknown fwlog parameter %s", fwlog_param);
651 static int wl1271_plt_init(struct wl1271 *wl)
653 struct conf_tx_ac_category *conf_ac;
654 struct conf_tx_tid *conf_tid;
657 if (wl->chip.id == CHIP_ID_1283_PG20)
658 ret = wl128x_cmd_general_parms(wl);
660 ret = wl1271_cmd_general_parms(wl);
664 if (wl->chip.id == CHIP_ID_1283_PG20)
665 ret = wl128x_cmd_radio_parms(wl);
667 ret = wl1271_cmd_radio_parms(wl);
671 if (wl->chip.id != CHIP_ID_1283_PG20) {
672 ret = wl1271_cmd_ext_radio_parms(wl);
679 /* Chip-specific initializations */
680 ret = wl1271_chip_specific_init(wl);
684 ret = wl1271_sta_init_templates_config(wl);
688 ret = wl1271_acx_init_mem_config(wl);
692 /* PHY layer config */
693 ret = wl1271_init_phy_config(wl);
695 goto out_free_memmap;
697 ret = wl1271_acx_dco_itrim_params(wl);
699 goto out_free_memmap;
701 /* Initialize connection monitoring thresholds */
702 ret = wl1271_acx_conn_monit_params(wl, false);
704 goto out_free_memmap;
706 /* Bluetooth WLAN coexistence */
707 ret = wl1271_init_pta(wl);
709 goto out_free_memmap;
711 /* FM WLAN coexistence */
712 ret = wl1271_acx_fm_coex(wl);
714 goto out_free_memmap;
716 /* Energy detection */
717 ret = wl1271_init_energy_detection(wl);
719 goto out_free_memmap;
721 ret = wl12xx_acx_mem_cfg(wl);
723 goto out_free_memmap;
725 /* Default fragmentation threshold */
726 ret = wl1271_acx_frag_threshold(wl, wl->conf.tx.frag_threshold);
728 goto out_free_memmap;
730 /* Default TID/AC configuration */
731 BUG_ON(wl->conf.tx.tid_conf_count != wl->conf.tx.ac_conf_count);
732 for (i = 0; i < wl->conf.tx.tid_conf_count; i++) {
733 conf_ac = &wl->conf.tx.ac_conf[i];
734 ret = wl1271_acx_ac_cfg(wl, conf_ac->ac, conf_ac->cw_min,
735 conf_ac->cw_max, conf_ac->aifsn,
736 conf_ac->tx_op_limit);
738 goto out_free_memmap;
740 conf_tid = &wl->conf.tx.tid_conf[i];
741 ret = wl1271_acx_tid_cfg(wl, conf_tid->queue_id,
742 conf_tid->channel_type,
745 conf_tid->ack_policy,
746 conf_tid->apsd_conf[0],
747 conf_tid->apsd_conf[1]);
749 goto out_free_memmap;
752 /* Enable data path */
753 ret = wl1271_cmd_data_path(wl, 1);
755 goto out_free_memmap;
757 /* Configure for CAM power saving (ie. always active) */
758 ret = wl1271_acx_sleep_auth(wl, WL1271_PSM_CAM);
760 goto out_free_memmap;
763 ret = wl1271_acx_pm_config(wl);
765 goto out_free_memmap;
770 kfree(wl->target_mem_map);
771 wl->target_mem_map = NULL;
777 static void wl1271_irq_ps_regulate_link(struct wl1271 *wl, u8 hlid, u8 tx_blks)
781 /* only regulate station links */
782 if (hlid < WL1271_AP_STA_HLID_START)
785 fw_ps = test_bit(hlid, (unsigned long *)&wl->ap_fw_ps_map);
788 * Wake up from high level PS if the STA is asleep with too little
789 * blocks in FW or if the STA is awake.
791 if (!fw_ps || tx_blks < WL1271_PS_STA_MAX_BLOCKS)
792 wl1271_ps_link_end(wl, hlid);
794 /* Start high-level PS if the STA is asleep with enough blocks in FW */
795 else if (fw_ps && tx_blks >= WL1271_PS_STA_MAX_BLOCKS)
796 wl1271_ps_link_start(wl, hlid, true);
799 static void wl1271_irq_update_links_status(struct wl1271 *wl,
800 struct wl1271_fw_ap_status *status)
805 cur_fw_ps_map = le32_to_cpu(status->link_ps_bitmap);
806 if (wl->ap_fw_ps_map != cur_fw_ps_map) {
807 wl1271_debug(DEBUG_PSM,
808 "link ps prev 0x%x cur 0x%x changed 0x%x",
809 wl->ap_fw_ps_map, cur_fw_ps_map,
810 wl->ap_fw_ps_map ^ cur_fw_ps_map);
812 wl->ap_fw_ps_map = cur_fw_ps_map;
815 for (hlid = WL1271_AP_STA_HLID_START; hlid < AP_MAX_LINKS; hlid++) {
816 u8 cnt = status->tx_lnk_free_blks[hlid] -
817 wl->links[hlid].prev_freed_blks;
819 wl->links[hlid].prev_freed_blks =
820 status->tx_lnk_free_blks[hlid];
821 wl->links[hlid].allocated_blks -= cnt;
823 wl1271_irq_ps_regulate_link(wl, hlid,
824 wl->links[hlid].allocated_blks);
829 static void wl12xx_fw_status(struct wl1271 *wl,
830 struct wl12xx_fw_status *status)
833 u32 old_tx_blk_count = wl->tx_blocks_available;
834 int avail, freed_blocks;
836 wl1271_raw_read(wl, FW_STATUS_ADDR, status, sizeof(*status), false);
838 wl1271_debug(DEBUG_IRQ, "intr: 0x%x (fw_rx_counter = %d, "
839 "drv_rx_counter = %d, tx_results_counter = %d)",
841 status->fw_rx_counter,
842 status->drv_rx_counter,
843 status->tx_results_counter);
845 freed_blocks = le32_to_cpu(status->total_released_blks) -
847 wl->tx_blocks_freed = le32_to_cpu(status->total_released_blks);
849 wl->tx_allocated_blocks -= freed_blocks;
851 avail = le32_to_cpu(status->tx_total) - wl->tx_allocated_blocks;
854 * The FW might change the total number of TX memblocks before
855 * we get a notification about blocks being released. Thus, the
856 * available blocks calculation might yield a temporary result
857 * which is lower than the actual available blocks. Keeping in
858 * mind that only blocks that were allocated can be moved from
859 * TX to RX, tx_blocks_available should never decrease here.
861 wl->tx_blocks_available = max((int)wl->tx_blocks_available,
864 /* if more blocks are available now, tx work can be scheduled */
865 if (wl->tx_blocks_available > old_tx_blk_count)
866 clear_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags);
868 /* for AP update num of allocated TX blocks per link and ps status */
869 if (wl->bss_type == BSS_TYPE_AP_BSS) {
871 wl1271_irq_update_links_status(wl, status);
875 /* update the host-chipset time offset */
877 wl->time_offset = (timespec_to_ns(&ts) >> 10) -
878 (s64)le32_to_cpu(status->fw_localtime);
881 static void wl1271_flush_deferred_work(struct wl1271 *wl)
885 /* Pass all received frames to the network stack */
886 while ((skb = skb_dequeue(&wl->deferred_rx_queue)))
887 ieee80211_rx_ni(wl->hw, skb);
889 /* Return sent skbs to the network stack */
890 while ((skb = skb_dequeue(&wl->deferred_tx_queue)))
891 ieee80211_tx_status_ni(wl->hw, skb);
894 static void wl1271_netstack_work(struct work_struct *work)
897 container_of(work, struct wl1271, netstack_work);
900 wl1271_flush_deferred_work(wl);
901 } while (skb_queue_len(&wl->deferred_rx_queue));
904 #define WL1271_IRQ_MAX_LOOPS 256
906 irqreturn_t wl1271_irq(int irq, void *cookie)
910 int loopcount = WL1271_IRQ_MAX_LOOPS;
911 struct wl1271 *wl = (struct wl1271 *)cookie;
913 unsigned int defer_count;
916 /* TX might be handled here, avoid redundant work */
917 set_bit(WL1271_FLAG_TX_PENDING, &wl->flags);
918 cancel_work_sync(&wl->tx_work);
921 * In case edge triggered interrupt must be used, we cannot iterate
922 * more than once without introducing race conditions with the hardirq.
924 if (wl->platform_quirks & WL12XX_PLATFORM_QUIRK_EDGE_IRQ)
927 mutex_lock(&wl->mutex);
929 wl1271_debug(DEBUG_IRQ, "IRQ work");
931 if (unlikely(wl->state == WL1271_STATE_OFF))
934 ret = wl1271_ps_elp_wakeup(wl);
938 while (!done && loopcount--) {
940 * In order to avoid a race with the hardirq, clear the flag
941 * before acknowledging the chip. Since the mutex is held,
942 * wl1271_ps_elp_wakeup cannot be called concurrently.
944 clear_bit(WL1271_FLAG_IRQ_RUNNING, &wl->flags);
945 smp_mb__after_clear_bit();
947 wl12xx_fw_status(wl, wl->fw_status);
948 intr = le32_to_cpu(wl->fw_status->intr);
949 intr &= WL1271_INTR_MASK;
955 if (unlikely(intr & WL1271_ACX_INTR_WATCHDOG)) {
956 wl1271_error("watchdog interrupt received! "
957 "starting recovery.");
958 wl12xx_queue_recovery_work(wl);
960 /* restarting the chip. ignore any other interrupt. */
964 if (likely(intr & WL1271_ACX_INTR_DATA)) {
965 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_DATA");
967 wl12xx_rx(wl, wl->fw_status);
969 /* Check if any tx blocks were freed */
970 spin_lock_irqsave(&wl->wl_lock, flags);
971 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags) &&
972 wl1271_tx_total_queue_count(wl) > 0) {
973 spin_unlock_irqrestore(&wl->wl_lock, flags);
975 * In order to avoid starvation of the TX path,
976 * call the work function directly.
978 wl1271_tx_work_locked(wl);
980 spin_unlock_irqrestore(&wl->wl_lock, flags);
983 /* check for tx results */
984 if (wl->fw_status->tx_results_counter !=
985 (wl->tx_results_count & 0xff))
986 wl1271_tx_complete(wl);
988 /* Make sure the deferred queues don't get too long */
989 defer_count = skb_queue_len(&wl->deferred_tx_queue) +
990 skb_queue_len(&wl->deferred_rx_queue);
991 if (defer_count > WL1271_DEFERRED_QUEUE_LIMIT)
992 wl1271_flush_deferred_work(wl);
995 if (intr & WL1271_ACX_INTR_EVENT_A) {
996 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_A");
997 wl1271_event_handle(wl, 0);
1000 if (intr & WL1271_ACX_INTR_EVENT_B) {
1001 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_B");
1002 wl1271_event_handle(wl, 1);
1005 if (intr & WL1271_ACX_INTR_INIT_COMPLETE)
1006 wl1271_debug(DEBUG_IRQ,
1007 "WL1271_ACX_INTR_INIT_COMPLETE");
1009 if (intr & WL1271_ACX_INTR_HW_AVAILABLE)
1010 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_HW_AVAILABLE");
1013 wl1271_ps_elp_sleep(wl);
1016 spin_lock_irqsave(&wl->wl_lock, flags);
1017 /* In case TX was not handled here, queue TX work */
1018 clear_bit(WL1271_FLAG_TX_PENDING, &wl->flags);
1019 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags) &&
1020 wl1271_tx_total_queue_count(wl) > 0)
1021 ieee80211_queue_work(wl->hw, &wl->tx_work);
1022 spin_unlock_irqrestore(&wl->wl_lock, flags);
1024 mutex_unlock(&wl->mutex);
1028 EXPORT_SYMBOL_GPL(wl1271_irq);
1030 static int wl1271_fetch_firmware(struct wl1271 *wl)
1032 const struct firmware *fw;
1033 const char *fw_name;
1036 if (wl->chip.id == CHIP_ID_1283_PG20)
1037 fw_name = WL128X_FW_NAME;
1039 fw_name = WL127X_FW_NAME;
1041 wl1271_debug(DEBUG_BOOT, "booting firmware %s", fw_name);
1043 ret = request_firmware(&fw, fw_name, wl1271_wl_to_dev(wl));
1046 wl1271_error("could not get firmware: %d", ret);
1051 wl1271_error("firmware size is not multiple of 32 bits: %zu",
1058 wl->fw_len = fw->size;
1059 wl->fw = vmalloc(wl->fw_len);
1062 wl1271_error("could not allocate memory for the firmware");
1067 memcpy(wl->fw, fw->data, wl->fw_len);
1071 release_firmware(fw);
1076 static int wl1271_fetch_nvs(struct wl1271 *wl)
1078 const struct firmware *fw;
1081 ret = request_firmware(&fw, WL12XX_NVS_NAME, wl1271_wl_to_dev(wl));
1084 wl1271_error("could not get nvs file: %d", ret);
1088 wl->nvs = kmemdup(fw->data, fw->size, GFP_KERNEL);
1091 wl1271_error("could not allocate memory for the nvs file");
1096 wl->nvs_len = fw->size;
1099 release_firmware(fw);
1104 void wl12xx_queue_recovery_work(struct wl1271 *wl)
1106 if (!test_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags))
1107 ieee80211_queue_work(wl->hw, &wl->recovery_work);
1110 size_t wl12xx_copy_fwlog(struct wl1271 *wl, u8 *memblock, size_t maxlen)
1114 /* The FW log is a length-value list, find where the log end */
1115 while (len < maxlen) {
1116 if (memblock[len] == 0)
1118 if (len + memblock[len] + 1 > maxlen)
1120 len += memblock[len] + 1;
1123 /* Make sure we have enough room */
1124 len = min(len, (size_t)(PAGE_SIZE - wl->fwlog_size));
1126 /* Fill the FW log file, consumed by the sysfs fwlog entry */
1127 memcpy(wl->fwlog + wl->fwlog_size, memblock, len);
1128 wl->fwlog_size += len;
1133 static void wl12xx_read_fwlog_panic(struct wl1271 *wl)
1139 if ((wl->quirks & WL12XX_QUIRK_FWLOG_NOT_IMPLEMENTED) ||
1140 (wl->conf.fwlog.mode != WL12XX_FWLOG_ON_DEMAND) ||
1141 (wl->conf.fwlog.mem_blocks == 0))
1144 wl1271_info("Reading FW panic log");
1146 block = kmalloc(WL12XX_HW_BLOCK_SIZE, GFP_KERNEL);
1151 * Make sure the chip is awake and the logger isn't active.
1152 * This might fail if the firmware hanged.
1154 if (!wl1271_ps_elp_wakeup(wl))
1155 wl12xx_cmd_stop_fwlog(wl);
1157 /* Read the first memory block address */
1158 wl12xx_fw_status(wl, wl->fw_status);
1159 first_addr = le32_to_cpu(wl->fw_status->log_start_addr);
1163 /* Traverse the memory blocks linked list */
1166 memset(block, 0, WL12XX_HW_BLOCK_SIZE);
1167 wl1271_read_hwaddr(wl, addr, block, WL12XX_HW_BLOCK_SIZE,
1171 * Memory blocks are linked to one another. The first 4 bytes
1172 * of each memory block hold the hardware address of the next
1173 * one. The last memory block points to the first one.
1175 addr = le32_to_cpup((__le32 *)block);
1176 if (!wl12xx_copy_fwlog(wl, block + sizeof(addr),
1177 WL12XX_HW_BLOCK_SIZE - sizeof(addr)))
1179 } while (addr && (addr != first_addr));
1181 wake_up_interruptible(&wl->fwlog_waitq);
1187 static void wl1271_recovery_work(struct work_struct *work)
1190 container_of(work, struct wl1271, recovery_work);
1192 mutex_lock(&wl->mutex);
1194 if (wl->state != WL1271_STATE_ON)
1197 /* Avoid a recursive recovery */
1198 set_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags);
1200 wl12xx_read_fwlog_panic(wl);
1202 wl1271_info("Hardware recovery in progress. FW ver: %s pc: 0x%x",
1203 wl->chip.fw_ver_str, wl1271_read32(wl, SCR_PAD4));
1206 * Advance security sequence number to overcome potential progress
1207 * in the firmware during recovery. This doens't hurt if the network is
1210 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags) ||
1211 test_bit(WL1271_FLAG_AP_STARTED, &wl->flags))
1212 wl->tx_security_seq += WL1271_TX_SQN_POST_RECOVERY_PADDING;
1214 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1215 ieee80211_connection_loss(wl->vif);
1217 /* Prevent spurious TX during FW restart */
1218 ieee80211_stop_queues(wl->hw);
1220 if (wl->sched_scanning) {
1221 ieee80211_sched_scan_stopped(wl->hw);
1222 wl->sched_scanning = false;
1225 /* reboot the chipset */
1226 __wl1271_op_remove_interface(wl, false);
1228 clear_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags);
1230 ieee80211_restart_hw(wl->hw);
1233 * Its safe to enable TX now - the queues are stopped after a request
1234 * to restart the HW.
1236 ieee80211_wake_queues(wl->hw);
1239 mutex_unlock(&wl->mutex);
1242 static void wl1271_fw_wakeup(struct wl1271 *wl)
1246 elp_reg = ELPCTRL_WAKE_UP;
1247 wl1271_raw_write32(wl, HW_ACCESS_ELP_CTRL_REG_ADDR, elp_reg);
1250 static int wl1271_setup(struct wl1271 *wl)
1252 wl->fw_status = kmalloc(sizeof(*wl->fw_status), GFP_KERNEL);
1256 wl->tx_res_if = kmalloc(sizeof(*wl->tx_res_if), GFP_KERNEL);
1257 if (!wl->tx_res_if) {
1258 kfree(wl->fw_status);
1265 static int wl1271_chip_wakeup(struct wl1271 *wl)
1267 struct wl1271_partition_set partition;
1270 msleep(WL1271_PRE_POWER_ON_SLEEP);
1271 ret = wl1271_power_on(wl);
1274 msleep(WL1271_POWER_ON_SLEEP);
1275 wl1271_io_reset(wl);
1278 /* We don't need a real memory partition here, because we only want
1279 * to use the registers at this point. */
1280 memset(&partition, 0, sizeof(partition));
1281 partition.reg.start = REGISTERS_BASE;
1282 partition.reg.size = REGISTERS_DOWN_SIZE;
1283 wl1271_set_partition(wl, &partition);
1285 /* ELP module wake up */
1286 wl1271_fw_wakeup(wl);
1288 /* whal_FwCtrl_BootSm() */
1290 /* 0. read chip id from CHIP_ID */
1291 wl->chip.id = wl1271_read32(wl, CHIP_ID_B);
1293 /* 1. check if chip id is valid */
1295 switch (wl->chip.id) {
1296 case CHIP_ID_1271_PG10:
1297 wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
1300 ret = wl1271_setup(wl);
1304 case CHIP_ID_1271_PG20:
1305 wl1271_debug(DEBUG_BOOT, "chip id 0x%x (1271 PG20)",
1309 * 'end-of-transaction flag' and 'LPD mode flag'
1310 * should be set in wl127x AP mode only
1312 if (wl->bss_type == BSS_TYPE_AP_BSS)
1313 wl->quirks |= (WL12XX_QUIRK_END_OF_TRANSACTION |
1314 WL12XX_QUIRK_LPD_MODE);
1316 ret = wl1271_setup(wl);
1320 case CHIP_ID_1283_PG20:
1321 wl1271_debug(DEBUG_BOOT, "chip id 0x%x (1283 PG20)",
1324 ret = wl1271_setup(wl);
1328 if (wl1271_set_block_size(wl))
1329 wl->quirks |= WL12XX_QUIRK_BLOCKSIZE_ALIGNMENT;
1331 case CHIP_ID_1283_PG10:
1333 wl1271_warning("unsupported chip id: 0x%x", wl->chip.id);
1338 if (wl->fw == NULL) {
1339 ret = wl1271_fetch_firmware(wl);
1344 /* No NVS from netlink, try to get it from the filesystem */
1345 if (wl->nvs == NULL) {
1346 ret = wl1271_fetch_nvs(wl);
1355 int wl1271_plt_start(struct wl1271 *wl)
1357 int retries = WL1271_BOOT_RETRIES;
1358 struct wiphy *wiphy = wl->hw->wiphy;
1361 mutex_lock(&wl->mutex);
1363 wl1271_notice("power up");
1365 if (wl->state != WL1271_STATE_OFF) {
1366 wl1271_error("cannot go into PLT state because not "
1367 "in off state: %d", wl->state);
1372 wl->bss_type = BSS_TYPE_STA_BSS;
1376 ret = wl1271_chip_wakeup(wl);
1380 ret = wl1271_boot(wl);
1384 ret = wl1271_plt_init(wl);
1388 wl->state = WL1271_STATE_PLT;
1389 wl1271_notice("firmware booted in PLT mode (%s)",
1390 wl->chip.fw_ver_str);
1392 /* update hw/fw version info in wiphy struct */
1393 wiphy->hw_version = wl->chip.id;
1394 strncpy(wiphy->fw_version, wl->chip.fw_ver_str,
1395 sizeof(wiphy->fw_version));
1400 mutex_unlock(&wl->mutex);
1401 /* Unlocking the mutex in the middle of handling is
1402 inherently unsafe. In this case we deem it safe to do,
1403 because we need to let any possibly pending IRQ out of
1404 the system (and while we are WL1271_STATE_OFF the IRQ
1405 work function will not do anything.) Also, any other
1406 possible concurrent operations will fail due to the
1407 current state, hence the wl1271 struct should be safe. */
1408 wl1271_disable_interrupts(wl);
1409 wl1271_flush_deferred_work(wl);
1410 cancel_work_sync(&wl->netstack_work);
1411 mutex_lock(&wl->mutex);
1413 wl1271_power_off(wl);
1416 wl1271_error("firmware boot in PLT mode failed despite %d retries",
1417 WL1271_BOOT_RETRIES);
1419 mutex_unlock(&wl->mutex);
1424 static int __wl1271_plt_stop(struct wl1271 *wl)
1428 wl1271_notice("power down");
1430 if (wl->state != WL1271_STATE_PLT) {
1431 wl1271_error("cannot power down because not in PLT "
1432 "state: %d", wl->state);
1437 wl1271_power_off(wl);
1439 wl->state = WL1271_STATE_OFF;
1442 mutex_unlock(&wl->mutex);
1443 wl1271_disable_interrupts(wl);
1444 wl1271_flush_deferred_work(wl);
1445 cancel_work_sync(&wl->netstack_work);
1446 cancel_work_sync(&wl->recovery_work);
1447 mutex_lock(&wl->mutex);
1452 int wl1271_plt_stop(struct wl1271 *wl)
1456 mutex_lock(&wl->mutex);
1457 ret = __wl1271_plt_stop(wl);
1458 mutex_unlock(&wl->mutex);
1462 static void wl1271_op_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
1464 struct wl1271 *wl = hw->priv;
1465 unsigned long flags;
1469 mapping = skb_get_queue_mapping(skb);
1470 q = wl1271_tx_get_queue(mapping);
1472 if (wl->bss_type == BSS_TYPE_AP_BSS)
1473 hlid = wl1271_tx_get_hlid(skb);
1475 spin_lock_irqsave(&wl->wl_lock, flags);
1477 wl->tx_queue_count[q]++;
1480 * The workqueue is slow to process the tx_queue and we need stop
1481 * the queue here, otherwise the queue will get too long.
1483 if (wl->tx_queue_count[q] >= WL1271_TX_QUEUE_HIGH_WATERMARK) {
1484 wl1271_debug(DEBUG_TX, "op_tx: stopping queues for q %d", q);
1485 ieee80211_stop_queue(wl->hw, mapping);
1486 set_bit(q, &wl->stopped_queues_map);
1489 /* queue the packet */
1490 if (wl->bss_type == BSS_TYPE_AP_BSS) {
1491 wl1271_debug(DEBUG_TX, "queue skb hlid %d q %d", hlid, q);
1492 skb_queue_tail(&wl->links[hlid].tx_queue[q], skb);
1494 skb_queue_tail(&wl->tx_queue[q], skb);
1498 * The chip specific setup must run before the first TX packet -
1499 * before that, the tx_work will not be initialized!
1502 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags) &&
1503 !test_bit(WL1271_FLAG_TX_PENDING, &wl->flags))
1504 ieee80211_queue_work(wl->hw, &wl->tx_work);
1506 spin_unlock_irqrestore(&wl->wl_lock, flags);
1509 int wl1271_tx_dummy_packet(struct wl1271 *wl)
1511 unsigned long flags;
1512 int q = wl1271_tx_get_queue(skb_get_queue_mapping(wl->dummy_packet));
1514 spin_lock_irqsave(&wl->wl_lock, flags);
1515 set_bit(WL1271_FLAG_DUMMY_PACKET_PENDING, &wl->flags);
1516 wl->tx_queue_count[q]++;
1517 spin_unlock_irqrestore(&wl->wl_lock, flags);
1519 /* The FW is low on RX memory blocks, so send the dummy packet asap */
1520 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags))
1521 wl1271_tx_work_locked(wl);
1524 * If the FW TX is busy, TX work will be scheduled by the threaded
1525 * interrupt handler function
1531 * The size of the dummy packet should be at least 1400 bytes. However, in
1532 * order to minimize the number of bus transactions, aligning it to 512 bytes
1533 * boundaries could be beneficial, performance wise
1535 #define TOTAL_TX_DUMMY_PACKET_SIZE (ALIGN(1400, 512))
1537 static struct sk_buff *wl12xx_alloc_dummy_packet(struct wl1271 *wl)
1539 struct sk_buff *skb;
1540 struct ieee80211_hdr_3addr *hdr;
1541 unsigned int dummy_packet_size;
1543 dummy_packet_size = TOTAL_TX_DUMMY_PACKET_SIZE -
1544 sizeof(struct wl1271_tx_hw_descr) - sizeof(*hdr);
1546 skb = dev_alloc_skb(TOTAL_TX_DUMMY_PACKET_SIZE);
1548 wl1271_warning("Failed to allocate a dummy packet skb");
1552 skb_reserve(skb, sizeof(struct wl1271_tx_hw_descr));
1554 hdr = (struct ieee80211_hdr_3addr *) skb_put(skb, sizeof(*hdr));
1555 memset(hdr, 0, sizeof(*hdr));
1556 hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_DATA |
1557 IEEE80211_STYPE_NULLFUNC |
1558 IEEE80211_FCTL_TODS);
1560 memset(skb_put(skb, dummy_packet_size), 0, dummy_packet_size);
1562 /* Dummy packets require the TID to be management */
1563 skb->priority = WL1271_TID_MGMT;
1565 /* Initialize all fields that might be used */
1566 skb_set_queue_mapping(skb, 0);
1567 memset(IEEE80211_SKB_CB(skb), 0, sizeof(struct ieee80211_tx_info));
1573 static struct notifier_block wl1271_dev_notifier = {
1574 .notifier_call = wl1271_dev_notify,
1578 static int wl1271_configure_suspend_sta(struct wl1271 *wl)
1582 mutex_lock(&wl->mutex);
1584 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1587 ret = wl1271_ps_elp_wakeup(wl);
1591 /* enter psm if needed*/
1592 if (!test_bit(WL1271_FLAG_PSM, &wl->flags)) {
1593 DECLARE_COMPLETION_ONSTACK(compl);
1595 wl->ps_compl = &compl;
1596 ret = wl1271_ps_set_mode(wl, STATION_POWER_SAVE_MODE,
1597 wl->basic_rate, true);
1601 /* we must unlock here so we will be able to get events */
1602 wl1271_ps_elp_sleep(wl);
1603 mutex_unlock(&wl->mutex);
1605 ret = wait_for_completion_timeout(
1606 &compl, msecs_to_jiffies(WL1271_PS_COMPLETE_TIMEOUT));
1608 wl1271_warning("couldn't enter ps mode!");
1613 /* take mutex again, and wakeup */
1614 mutex_lock(&wl->mutex);
1616 ret = wl1271_ps_elp_wakeup(wl);
1621 wl1271_ps_elp_sleep(wl);
1623 mutex_unlock(&wl->mutex);
1629 static int wl1271_configure_suspend_ap(struct wl1271 *wl)
1633 mutex_lock(&wl->mutex);
1635 if (!test_bit(WL1271_FLAG_AP_STARTED, &wl->flags))
1638 ret = wl1271_ps_elp_wakeup(wl);
1642 ret = wl1271_acx_set_ap_beacon_filter(wl, true);
1644 wl1271_ps_elp_sleep(wl);
1646 mutex_unlock(&wl->mutex);
1651 static int wl1271_configure_suspend(struct wl1271 *wl)
1653 if (wl->bss_type == BSS_TYPE_STA_BSS)
1654 return wl1271_configure_suspend_sta(wl);
1655 if (wl->bss_type == BSS_TYPE_AP_BSS)
1656 return wl1271_configure_suspend_ap(wl);
1660 static void wl1271_configure_resume(struct wl1271 *wl)
1663 bool is_sta = wl->bss_type == BSS_TYPE_STA_BSS;
1664 bool is_ap = wl->bss_type == BSS_TYPE_AP_BSS;
1666 if (!is_sta && !is_ap)
1669 mutex_lock(&wl->mutex);
1670 ret = wl1271_ps_elp_wakeup(wl);
1675 /* exit psm if it wasn't configured */
1676 if (!test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags))
1677 wl1271_ps_set_mode(wl, STATION_ACTIVE_MODE,
1678 wl->basic_rate, true);
1680 wl1271_acx_set_ap_beacon_filter(wl, false);
1683 wl1271_ps_elp_sleep(wl);
1685 mutex_unlock(&wl->mutex);
1688 static int wl1271_op_suspend(struct ieee80211_hw *hw,
1689 struct cfg80211_wowlan *wow)
1691 struct wl1271 *wl = hw->priv;
1694 wl1271_debug(DEBUG_MAC80211, "mac80211 suspend wow=%d", !!wow);
1695 WARN_ON(!wow || !wow->any);
1697 wl->wow_enabled = true;
1698 ret = wl1271_configure_suspend(wl);
1700 wl1271_warning("couldn't prepare device to suspend");
1703 /* flush any remaining work */
1704 wl1271_debug(DEBUG_MAC80211, "flushing remaining works");
1707 * disable and re-enable interrupts in order to flush
1710 wl1271_disable_interrupts(wl);
1713 * set suspended flag to avoid triggering a new threaded_irq
1714 * work. no need for spinlock as interrupts are disabled.
1716 set_bit(WL1271_FLAG_SUSPENDED, &wl->flags);
1718 wl1271_enable_interrupts(wl);
1719 flush_work(&wl->tx_work);
1720 flush_delayed_work(&wl->pspoll_work);
1721 flush_delayed_work(&wl->elp_work);
1726 static int wl1271_op_resume(struct ieee80211_hw *hw)
1728 struct wl1271 *wl = hw->priv;
1729 unsigned long flags;
1730 bool run_irq_work = false;
1732 wl1271_debug(DEBUG_MAC80211, "mac80211 resume wow=%d",
1734 WARN_ON(!wl->wow_enabled);
1737 * re-enable irq_work enqueuing, and call irq_work directly if
1738 * there is a pending work.
1740 spin_lock_irqsave(&wl->wl_lock, flags);
1741 clear_bit(WL1271_FLAG_SUSPENDED, &wl->flags);
1742 if (test_and_clear_bit(WL1271_FLAG_PENDING_WORK, &wl->flags))
1743 run_irq_work = true;
1744 spin_unlock_irqrestore(&wl->wl_lock, flags);
1747 wl1271_debug(DEBUG_MAC80211,
1748 "run postponed irq_work directly");
1750 wl1271_enable_interrupts(wl);
1752 wl1271_configure_resume(wl);
1753 wl->wow_enabled = false;
1759 static int wl1271_op_start(struct ieee80211_hw *hw)
1761 wl1271_debug(DEBUG_MAC80211, "mac80211 start");
1764 * We have to delay the booting of the hardware because
1765 * we need to know the local MAC address before downloading and
1766 * initializing the firmware. The MAC address cannot be changed
1767 * after boot, and without the proper MAC address, the firmware
1768 * will not function properly.
1770 * The MAC address is first known when the corresponding interface
1771 * is added. That is where we will initialize the hardware.
1777 static void wl1271_op_stop(struct ieee80211_hw *hw)
1779 wl1271_debug(DEBUG_MAC80211, "mac80211 stop");
1782 static u8 wl12xx_get_role_type(struct wl1271 *wl)
1784 switch (wl->bss_type) {
1785 case BSS_TYPE_AP_BSS:
1786 return WL1271_ROLE_AP;
1788 case BSS_TYPE_STA_BSS:
1789 return WL1271_ROLE_STA;
1792 wl1271_error("invalid bss_type: %d", wl->bss_type);
1794 return WL12XX_INVALID_ROLE_TYPE;
1797 static int wl1271_op_add_interface(struct ieee80211_hw *hw,
1798 struct ieee80211_vif *vif)
1800 struct wl1271 *wl = hw->priv;
1801 struct wiphy *wiphy = hw->wiphy;
1802 int retries = WL1271_BOOT_RETRIES;
1805 bool booted = false;
1807 wl1271_debug(DEBUG_MAC80211, "mac80211 add interface type %d mac %pM",
1808 vif->type, vif->addr);
1810 mutex_lock(&wl->mutex);
1812 wl1271_debug(DEBUG_MAC80211,
1813 "multiple vifs are not supported yet");
1819 * in some very corner case HW recovery scenarios its possible to
1820 * get here before __wl1271_op_remove_interface is complete, so
1821 * opt out if that is the case.
1823 if (test_bit(WL1271_FLAG_IF_INITIALIZED, &wl->flags)) {
1828 switch (vif->type) {
1829 case NL80211_IFTYPE_STATION:
1830 wl->bss_type = BSS_TYPE_STA_BSS;
1831 wl->set_bss_type = BSS_TYPE_STA_BSS;
1833 case NL80211_IFTYPE_ADHOC:
1834 wl->bss_type = BSS_TYPE_IBSS;
1835 wl->set_bss_type = BSS_TYPE_STA_BSS;
1837 case NL80211_IFTYPE_AP:
1838 wl->bss_type = BSS_TYPE_AP_BSS;
1845 role_type = wl12xx_get_role_type(wl);
1846 if (role_type == WL12XX_INVALID_ROLE_TYPE) {
1850 memcpy(wl->mac_addr, vif->addr, ETH_ALEN);
1852 if (wl->state != WL1271_STATE_OFF) {
1853 wl1271_error("cannot start because not in off state: %d",
1861 ret = wl1271_chip_wakeup(wl);
1865 ret = wl1271_boot(wl);
1869 if (wl->bss_type == BSS_TYPE_STA_BSS) {
1871 * The device role is a special role used for
1872 * rx and tx frames prior to association (as
1873 * the STA role can get packets only from
1874 * its associated bssid)
1876 ret = wl12xx_cmd_role_enable(wl,
1883 ret = wl12xx_cmd_role_enable(wl, role_type, &wl->role_id);
1887 ret = wl1271_hw_init(wl);
1895 mutex_unlock(&wl->mutex);
1896 /* Unlocking the mutex in the middle of handling is
1897 inherently unsafe. In this case we deem it safe to do,
1898 because we need to let any possibly pending IRQ out of
1899 the system (and while we are WL1271_STATE_OFF the IRQ
1900 work function will not do anything.) Also, any other
1901 possible concurrent operations will fail due to the
1902 current state, hence the wl1271 struct should be safe. */
1903 wl1271_disable_interrupts(wl);
1904 wl1271_flush_deferred_work(wl);
1905 cancel_work_sync(&wl->netstack_work);
1906 mutex_lock(&wl->mutex);
1908 wl1271_power_off(wl);
1912 wl1271_error("firmware boot failed despite %d retries",
1913 WL1271_BOOT_RETRIES);
1918 wl->state = WL1271_STATE_ON;
1919 set_bit(WL1271_FLAG_IF_INITIALIZED, &wl->flags);
1920 wl1271_info("firmware booted (%s)", wl->chip.fw_ver_str);
1922 /* update hw/fw version info in wiphy struct */
1923 wiphy->hw_version = wl->chip.id;
1924 strncpy(wiphy->fw_version, wl->chip.fw_ver_str,
1925 sizeof(wiphy->fw_version));
1928 * Now we know if 11a is supported (info from the NVS), so disable
1929 * 11a channels if not supported
1931 if (!wl->enable_11a)
1932 wiphy->bands[IEEE80211_BAND_5GHZ]->n_channels = 0;
1934 wl1271_debug(DEBUG_MAC80211, "11a is %ssupported",
1935 wl->enable_11a ? "" : "not ");
1938 mutex_unlock(&wl->mutex);
1940 mutex_lock(&wl_list_mutex);
1942 list_add(&wl->list, &wl_list);
1943 mutex_unlock(&wl_list_mutex);
1948 static void __wl1271_op_remove_interface(struct wl1271 *wl,
1949 bool reset_tx_queues)
1953 wl1271_debug(DEBUG_MAC80211, "mac80211 remove interface");
1955 /* because of hardware recovery, we may get here twice */
1956 if (wl->state != WL1271_STATE_ON)
1959 wl1271_info("down");
1961 mutex_lock(&wl_list_mutex);
1962 list_del(&wl->list);
1963 mutex_unlock(&wl_list_mutex);
1965 /* enable dyn ps just in case (if left on due to fw crash etc) */
1966 if (wl->bss_type == BSS_TYPE_STA_BSS)
1967 ieee80211_enable_dyn_ps(wl->vif);
1969 if (wl->scan.state != WL1271_SCAN_STATE_IDLE) {
1970 wl->scan.state = WL1271_SCAN_STATE_IDLE;
1971 memset(wl->scan.scanned_ch, 0, sizeof(wl->scan.scanned_ch));
1972 wl->scan.req = NULL;
1973 ieee80211_scan_completed(wl->hw, true);
1976 if (!test_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags)) {
1977 /* disable active roles */
1978 ret = wl1271_ps_elp_wakeup(wl);
1982 if (wl->bss_type == BSS_TYPE_STA_BSS) {
1983 ret = wl12xx_cmd_role_disable(wl, &wl->dev_role_id);
1988 ret = wl12xx_cmd_role_disable(wl, &wl->role_id);
1992 wl1271_ps_elp_sleep(wl);
1995 wl->sta_hlid = WL12XX_INVALID_LINK_ID;
1996 wl->dev_hlid = WL12XX_INVALID_LINK_ID;
1999 * this must be before the cancel_work calls below, so that the work
2000 * functions don't perform further work.
2002 wl->state = WL1271_STATE_OFF;
2004 mutex_unlock(&wl->mutex);
2006 wl1271_disable_interrupts(wl);
2007 wl1271_flush_deferred_work(wl);
2008 cancel_delayed_work_sync(&wl->scan_complete_work);
2009 cancel_work_sync(&wl->netstack_work);
2010 cancel_work_sync(&wl->tx_work);
2011 del_timer_sync(&wl->rx_streaming_timer);
2012 cancel_work_sync(&wl->rx_streaming_enable_work);
2013 cancel_work_sync(&wl->rx_streaming_disable_work);
2014 cancel_delayed_work_sync(&wl->pspoll_work);
2015 cancel_delayed_work_sync(&wl->elp_work);
2017 mutex_lock(&wl->mutex);
2019 /* let's notify MAC80211 about the remaining pending TX frames */
2020 wl1271_tx_reset(wl, reset_tx_queues);
2021 wl1271_power_off(wl);
2023 memset(wl->bssid, 0, ETH_ALEN);
2024 memset(wl->ssid, 0, IEEE80211_MAX_SSID_LEN + 1);
2026 wl->bss_type = MAX_BSS_TYPE;
2027 wl->set_bss_type = MAX_BSS_TYPE;
2028 wl->band = IEEE80211_BAND_2GHZ;
2031 wl->psm_entry_retry = 0;
2032 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
2033 wl->tx_blocks_available = 0;
2034 wl->tx_allocated_blocks = 0;
2035 wl->tx_results_count = 0;
2036 wl->tx_packets_count = 0;
2037 wl->time_offset = 0;
2038 wl->session_counter = 0;
2039 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
2041 wl1271_free_ap_keys(wl);
2042 memset(wl->ap_hlid_map, 0, sizeof(wl->ap_hlid_map));
2043 wl->ap_fw_ps_map = 0;
2045 wl->sched_scanning = false;
2046 wl->role_id = WL12XX_INVALID_ROLE_ID;
2047 wl->dev_role_id = WL12XX_INVALID_ROLE_ID;
2048 memset(wl->roles_map, 0, sizeof(wl->roles_map));
2049 memset(wl->links_map, 0, sizeof(wl->links_map));
2052 * this is performed after the cancel_work calls and the associated
2053 * mutex_lock, so that wl1271_op_add_interface does not accidentally
2054 * get executed before all these vars have been reset.
2058 wl->tx_blocks_freed = 0;
2060 wl1271_debugfs_reset(wl);
2062 kfree(wl->fw_status);
2063 wl->fw_status = NULL;
2064 kfree(wl->tx_res_if);
2065 wl->tx_res_if = NULL;
2066 kfree(wl->target_mem_map);
2067 wl->target_mem_map = NULL;
2070 static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
2071 struct ieee80211_vif *vif)
2073 struct wl1271 *wl = hw->priv;
2075 mutex_lock(&wl->mutex);
2077 * wl->vif can be null here if someone shuts down the interface
2078 * just when hardware recovery has been started.
2081 WARN_ON(wl->vif != vif);
2082 __wl1271_op_remove_interface(wl, true);
2085 mutex_unlock(&wl->mutex);
2086 cancel_work_sync(&wl->recovery_work);
2089 static int wl1271_dummy_join(struct wl1271 *wl)
2092 /* we need to use a dummy BSSID for now */
2093 static const u8 dummy_bssid[ETH_ALEN] = { 0x0b, 0xad, 0xde,
2096 memcpy(wl->bssid, dummy_bssid, ETH_ALEN);
2098 ret = wl12xx_cmd_role_start_sta(wl);
2102 set_bit(WL1271_FLAG_JOINED, &wl->flags);
2108 static int wl1271_join(struct wl1271 *wl, bool set_assoc)
2113 * One of the side effects of the JOIN command is that is clears
2114 * WPA/WPA2 keys from the chipset. Performing a JOIN while associated
2115 * to a WPA/WPA2 access point will therefore kill the data-path.
2116 * Currently the only valid scenario for JOIN during association
2117 * is on roaming, in which case we will also be given new keys.
2118 * Keep the below message for now, unless it starts bothering
2119 * users who really like to roam a lot :)
2121 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
2122 wl1271_info("JOIN while associated.");
2125 set_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
2127 ret = wl12xx_cmd_role_start_sta(wl);
2131 set_bit(WL1271_FLAG_JOINED, &wl->flags);
2133 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
2137 * The join command disable the keep-alive mode, shut down its process,
2138 * and also clear the template config, so we need to reset it all after
2139 * the join. The acx_aid starts the keep-alive process, and the order
2140 * of the commands below is relevant.
2142 ret = wl1271_acx_keep_alive_mode(wl, true);
2146 ret = wl1271_acx_aid(wl, wl->aid);
2150 ret = wl1271_cmd_build_klv_null_data(wl);
2154 ret = wl1271_acx_keep_alive_config(wl, CMD_TEMPL_KLV_IDX_NULL_DATA,
2155 ACX_KEEP_ALIVE_TPL_VALID);
2163 static int wl1271_unjoin(struct wl1271 *wl)
2167 /* to stop listening to a channel, we disconnect */
2168 ret = wl12xx_cmd_role_stop_sta(wl);
2172 clear_bit(WL1271_FLAG_JOINED, &wl->flags);
2173 memset(wl->bssid, 0, ETH_ALEN);
2175 /* reset TX security counters on a clean disconnect */
2176 wl->tx_security_last_seq_lsb = 0;
2177 wl->tx_security_seq = 0;
2183 static void wl1271_set_band_rate(struct wl1271 *wl)
2185 if (wl->band == IEEE80211_BAND_2GHZ)
2186 wl->basic_rate_set = wl->conf.tx.basic_rate;
2188 wl->basic_rate_set = wl->conf.tx.basic_rate_5;
2191 static int wl1271_sta_handle_idle(struct wl1271 *wl, bool idle)
2196 if (test_bit(WL1271_FLAG_JOINED, &wl->flags)) {
2197 ret = wl1271_unjoin(wl);
2201 wl->rate_set = wl1271_tx_min_rate_get(wl);
2202 ret = wl1271_acx_sta_rate_policies(wl);
2205 ret = wl1271_acx_keep_alive_config(
2206 wl, CMD_TEMPL_KLV_IDX_NULL_DATA,
2207 ACX_KEEP_ALIVE_TPL_INVALID);
2210 set_bit(WL1271_FLAG_IDLE, &wl->flags);
2212 /* increment the session counter */
2213 wl->session_counter++;
2214 if (wl->session_counter >= SESSION_COUNTER_MAX)
2215 wl->session_counter = 0;
2217 /* The current firmware only supports sched_scan in idle */
2218 if (wl->sched_scanning) {
2219 wl1271_scan_sched_scan_stop(wl);
2220 ieee80211_sched_scan_stopped(wl->hw);
2223 ret = wl1271_dummy_join(wl);
2226 clear_bit(WL1271_FLAG_IDLE, &wl->flags);
2233 static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed)
2235 struct wl1271 *wl = hw->priv;
2236 struct ieee80211_conf *conf = &hw->conf;
2237 int channel, ret = 0;
2240 channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
2242 wl1271_debug(DEBUG_MAC80211, "mac80211 config ch %d psm %s power %d %s"
2245 conf->flags & IEEE80211_CONF_PS ? "on" : "off",
2247 conf->flags & IEEE80211_CONF_IDLE ? "idle" : "in use",
2251 * mac80211 will go to idle nearly immediately after transmitting some
2252 * frames, such as the deauth. To make sure those frames reach the air,
2253 * wait here until the TX queue is fully flushed.
2255 if ((changed & IEEE80211_CONF_CHANGE_IDLE) &&
2256 (conf->flags & IEEE80211_CONF_IDLE))
2257 wl1271_tx_flush(wl);
2259 mutex_lock(&wl->mutex);
2261 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2262 /* we support configuring the channel and band while off */
2263 if ((changed & IEEE80211_CONF_CHANGE_CHANNEL)) {
2264 wl->band = conf->channel->band;
2265 wl->channel = channel;
2268 if ((changed & IEEE80211_CONF_CHANGE_POWER))
2269 wl->power_level = conf->power_level;
2274 is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
2276 ret = wl1271_ps_elp_wakeup(wl);
2280 /* if the channel changes while joined, join again */
2281 if (changed & IEEE80211_CONF_CHANGE_CHANNEL &&
2282 ((wl->band != conf->channel->band) ||
2283 (wl->channel != channel))) {
2284 wl->band = conf->channel->band;
2285 wl->channel = channel;
2289 * FIXME: the mac80211 should really provide a fixed
2290 * rate to use here. for now, just use the smallest
2291 * possible rate for the band as a fixed rate for
2292 * association frames and other control messages.
2294 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
2295 wl1271_set_band_rate(wl);
2297 wl->basic_rate = wl1271_tx_min_rate_get(wl);
2298 ret = wl1271_acx_sta_rate_policies(wl);
2300 wl1271_warning("rate policy for channel "
2303 if (test_bit(WL1271_FLAG_JOINED, &wl->flags)) {
2304 ret = wl1271_join(wl, false);
2306 wl1271_warning("cmd join on channel "
2312 if (changed & IEEE80211_CONF_CHANGE_IDLE && !is_ap) {
2313 ret = wl1271_sta_handle_idle(wl,
2314 conf->flags & IEEE80211_CONF_IDLE);
2316 wl1271_warning("idle mode change failed %d", ret);
2320 * if mac80211 changes the PSM mode, make sure the mode is not
2321 * incorrectly changed after the pspoll failure active window.
2323 if (changed & IEEE80211_CONF_CHANGE_PS)
2324 clear_bit(WL1271_FLAG_PSPOLL_FAILURE, &wl->flags);
2326 if (conf->flags & IEEE80211_CONF_PS &&
2327 !test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
2328 set_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
2331 * We enter PSM only if we're already associated.
2332 * If we're not, we'll enter it when joining an SSID,
2333 * through the bss_info_changed() hook.
2335 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags)) {
2336 wl1271_debug(DEBUG_PSM, "psm enabled");
2337 ret = wl1271_ps_set_mode(wl, STATION_POWER_SAVE_MODE,
2338 wl->basic_rate, true);
2340 } else if (!(conf->flags & IEEE80211_CONF_PS) &&
2341 test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
2342 wl1271_debug(DEBUG_PSM, "psm disabled");
2344 clear_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
2346 if (test_bit(WL1271_FLAG_PSM, &wl->flags))
2347 ret = wl1271_ps_set_mode(wl, STATION_ACTIVE_MODE,
2348 wl->basic_rate, true);
2351 if (conf->power_level != wl->power_level) {
2352 ret = wl1271_acx_tx_power(wl, conf->power_level);
2356 wl->power_level = conf->power_level;
2360 wl1271_ps_elp_sleep(wl);
2363 mutex_unlock(&wl->mutex);
2368 struct wl1271_filter_params {
2371 u8 mc_list[ACX_MC_ADDRESS_GROUP_MAX][ETH_ALEN];
2374 static u64 wl1271_op_prepare_multicast(struct ieee80211_hw *hw,
2375 struct netdev_hw_addr_list *mc_list)
2377 struct wl1271_filter_params *fp;
2378 struct netdev_hw_addr *ha;
2379 struct wl1271 *wl = hw->priv;
2381 if (unlikely(wl->state == WL1271_STATE_OFF))
2384 fp = kzalloc(sizeof(*fp), GFP_ATOMIC);
2386 wl1271_error("Out of memory setting filters.");
2390 /* update multicast filtering parameters */
2391 fp->mc_list_length = 0;
2392 if (netdev_hw_addr_list_count(mc_list) > ACX_MC_ADDRESS_GROUP_MAX) {
2393 fp->enabled = false;
2396 netdev_hw_addr_list_for_each(ha, mc_list) {
2397 memcpy(fp->mc_list[fp->mc_list_length],
2398 ha->addr, ETH_ALEN);
2399 fp->mc_list_length++;
2403 return (u64)(unsigned long)fp;
2406 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
2409 FIF_BCN_PRBRESP_PROMISC | \
2413 static void wl1271_op_configure_filter(struct ieee80211_hw *hw,
2414 unsigned int changed,
2415 unsigned int *total, u64 multicast)
2417 struct wl1271_filter_params *fp = (void *)(unsigned long)multicast;
2418 struct wl1271 *wl = hw->priv;
2421 wl1271_debug(DEBUG_MAC80211, "mac80211 configure filter changed %x"
2422 " total %x", changed, *total);
2424 mutex_lock(&wl->mutex);
2426 *total &= WL1271_SUPPORTED_FILTERS;
2427 changed &= WL1271_SUPPORTED_FILTERS;
2429 if (unlikely(wl->state == WL1271_STATE_OFF))
2432 ret = wl1271_ps_elp_wakeup(wl);
2436 if (wl->bss_type != BSS_TYPE_AP_BSS) {
2437 if (*total & FIF_ALLMULTI)
2438 ret = wl1271_acx_group_address_tbl(wl, false, NULL, 0);
2440 ret = wl1271_acx_group_address_tbl(wl, fp->enabled,
2442 fp->mc_list_length);
2448 * the fw doesn't provide an api to configure the filters. instead,
2449 * the filters configuration is based on the active roles / ROC
2454 wl1271_ps_elp_sleep(wl);
2457 mutex_unlock(&wl->mutex);
2461 static int wl1271_record_ap_key(struct wl1271 *wl, u8 id, u8 key_type,
2462 u8 key_size, const u8 *key, u8 hlid, u32 tx_seq_32,
2465 struct wl1271_ap_key *ap_key;
2468 wl1271_debug(DEBUG_CRYPT, "record ap key id %d", (int)id);
2470 if (key_size > MAX_KEY_SIZE)
2474 * Find next free entry in ap_keys. Also check we are not replacing
2477 for (i = 0; i < MAX_NUM_KEYS; i++) {
2478 if (wl->recorded_ap_keys[i] == NULL)
2481 if (wl->recorded_ap_keys[i]->id == id) {
2482 wl1271_warning("trying to record key replacement");
2487 if (i == MAX_NUM_KEYS)
2490 ap_key = kzalloc(sizeof(*ap_key), GFP_KERNEL);
2495 ap_key->key_type = key_type;
2496 ap_key->key_size = key_size;
2497 memcpy(ap_key->key, key, key_size);
2498 ap_key->hlid = hlid;
2499 ap_key->tx_seq_32 = tx_seq_32;
2500 ap_key->tx_seq_16 = tx_seq_16;
2502 wl->recorded_ap_keys[i] = ap_key;
2506 static void wl1271_free_ap_keys(struct wl1271 *wl)
2510 for (i = 0; i < MAX_NUM_KEYS; i++) {
2511 kfree(wl->recorded_ap_keys[i]);
2512 wl->recorded_ap_keys[i] = NULL;
2516 static int wl1271_ap_init_hwenc(struct wl1271 *wl)
2519 struct wl1271_ap_key *key;
2520 bool wep_key_added = false;
2522 for (i = 0; i < MAX_NUM_KEYS; i++) {
2523 if (wl->recorded_ap_keys[i] == NULL)
2526 key = wl->recorded_ap_keys[i];
2527 ret = wl1271_cmd_set_ap_key(wl, KEY_ADD_OR_REPLACE,
2528 key->id, key->key_type,
2529 key->key_size, key->key,
2530 key->hlid, key->tx_seq_32,
2535 if (key->key_type == KEY_WEP)
2536 wep_key_added = true;
2539 if (wep_key_added) {
2540 ret = wl12xx_cmd_set_default_wep_key(wl, wl->default_key,
2541 WL1271_AP_BROADCAST_HLID);
2547 wl1271_free_ap_keys(wl);
2551 static int wl1271_set_key(struct wl1271 *wl, u16 action, u8 id, u8 key_type,
2552 u8 key_size, const u8 *key, u32 tx_seq_32,
2553 u16 tx_seq_16, struct ieee80211_sta *sta)
2556 bool is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
2559 struct wl1271_station *wl_sta;
2563 wl_sta = (struct wl1271_station *)sta->drv_priv;
2564 hlid = wl_sta->hlid;
2566 hlid = WL1271_AP_BROADCAST_HLID;
2569 if (!test_bit(WL1271_FLAG_AP_STARTED, &wl->flags)) {
2571 * We do not support removing keys after AP shutdown.
2572 * Pretend we do to make mac80211 happy.
2574 if (action != KEY_ADD_OR_REPLACE)
2577 ret = wl1271_record_ap_key(wl, id,
2579 key, hlid, tx_seq_32,
2582 ret = wl1271_cmd_set_ap_key(wl, action,
2583 id, key_type, key_size,
2584 key, hlid, tx_seq_32,
2592 static const u8 bcast_addr[ETH_ALEN] = {
2593 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
2596 addr = sta ? sta->addr : bcast_addr;
2598 if (is_zero_ether_addr(addr)) {
2599 /* We dont support TX only encryption */
2603 /* The wl1271 does not allow to remove unicast keys - they
2604 will be cleared automatically on next CMD_JOIN. Ignore the
2605 request silently, as we dont want the mac80211 to emit
2606 an error message. */
2607 if (action == KEY_REMOVE && !is_broadcast_ether_addr(addr))
2610 ret = wl1271_cmd_set_sta_key(wl, action,
2611 id, key_type, key_size,
2612 key, addr, tx_seq_32,
2617 /* the default WEP key needs to be configured at least once */
2618 if (key_type == KEY_WEP) {
2619 ret = wl12xx_cmd_set_default_wep_key(wl,
2630 static int wl1271_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
2631 struct ieee80211_vif *vif,
2632 struct ieee80211_sta *sta,
2633 struct ieee80211_key_conf *key_conf)
2635 struct wl1271 *wl = hw->priv;
2641 wl1271_debug(DEBUG_MAC80211, "mac80211 set key");
2643 wl1271_debug(DEBUG_CRYPT, "CMD: 0x%x sta: %p", cmd, sta);
2644 wl1271_debug(DEBUG_CRYPT, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
2645 key_conf->cipher, key_conf->keyidx,
2646 key_conf->keylen, key_conf->flags);
2647 wl1271_dump(DEBUG_CRYPT, "KEY: ", key_conf->key, key_conf->keylen);
2649 mutex_lock(&wl->mutex);
2651 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2656 ret = wl1271_ps_elp_wakeup(wl);
2660 switch (key_conf->cipher) {
2661 case WLAN_CIPHER_SUITE_WEP40:
2662 case WLAN_CIPHER_SUITE_WEP104:
2665 key_conf->hw_key_idx = key_conf->keyidx;
2667 case WLAN_CIPHER_SUITE_TKIP:
2668 key_type = KEY_TKIP;
2670 key_conf->hw_key_idx = key_conf->keyidx;
2671 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
2672 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
2674 case WLAN_CIPHER_SUITE_CCMP:
2677 key_conf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
2678 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
2679 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
2681 case WL1271_CIPHER_SUITE_GEM:
2683 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
2684 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
2687 wl1271_error("Unknown key algo 0x%x", key_conf->cipher);
2695 ret = wl1271_set_key(wl, KEY_ADD_OR_REPLACE,
2696 key_conf->keyidx, key_type,
2697 key_conf->keylen, key_conf->key,
2698 tx_seq_32, tx_seq_16, sta);
2700 wl1271_error("Could not add or replace key");
2706 ret = wl1271_set_key(wl, KEY_REMOVE,
2707 key_conf->keyidx, key_type,
2708 key_conf->keylen, key_conf->key,
2711 wl1271_error("Could not remove key");
2717 wl1271_error("Unsupported key cmd 0x%x", cmd);
2723 wl1271_ps_elp_sleep(wl);
2726 mutex_unlock(&wl->mutex);
2731 static int wl1271_op_hw_scan(struct ieee80211_hw *hw,
2732 struct ieee80211_vif *vif,
2733 struct cfg80211_scan_request *req)
2735 struct wl1271 *wl = hw->priv;
2740 wl1271_debug(DEBUG_MAC80211, "mac80211 hw scan");
2743 ssid = req->ssids[0].ssid;
2744 len = req->ssids[0].ssid_len;
2747 mutex_lock(&wl->mutex);
2749 if (wl->state == WL1271_STATE_OFF) {
2751 * We cannot return -EBUSY here because cfg80211 will expect
2752 * a call to ieee80211_scan_completed if we do - in this case
2753 * there won't be any call.
2759 ret = wl1271_ps_elp_wakeup(wl);
2763 ret = wl1271_scan(hw->priv, ssid, len, req);
2765 wl1271_ps_elp_sleep(wl);
2768 mutex_unlock(&wl->mutex);
2773 static void wl1271_op_cancel_hw_scan(struct ieee80211_hw *hw,
2774 struct ieee80211_vif *vif)
2776 struct wl1271 *wl = hw->priv;
2779 wl1271_debug(DEBUG_MAC80211, "mac80211 cancel hw scan");
2781 mutex_lock(&wl->mutex);
2783 if (wl->state == WL1271_STATE_OFF)
2786 if (wl->scan.state == WL1271_SCAN_STATE_IDLE)
2789 ret = wl1271_ps_elp_wakeup(wl);
2793 if (wl->scan.state != WL1271_SCAN_STATE_DONE) {
2794 ret = wl1271_scan_stop(wl);
2798 wl->scan.state = WL1271_SCAN_STATE_IDLE;
2799 memset(wl->scan.scanned_ch, 0, sizeof(wl->scan.scanned_ch));
2800 wl->scan.req = NULL;
2801 ieee80211_scan_completed(wl->hw, true);
2804 wl1271_ps_elp_sleep(wl);
2806 mutex_unlock(&wl->mutex);
2808 cancel_delayed_work_sync(&wl->scan_complete_work);
2811 static int wl1271_op_sched_scan_start(struct ieee80211_hw *hw,
2812 struct ieee80211_vif *vif,
2813 struct cfg80211_sched_scan_request *req,
2814 struct ieee80211_sched_scan_ies *ies)
2816 struct wl1271 *wl = hw->priv;
2819 wl1271_debug(DEBUG_MAC80211, "wl1271_op_sched_scan_start");
2821 mutex_lock(&wl->mutex);
2823 ret = wl1271_ps_elp_wakeup(wl);
2827 ret = wl1271_scan_sched_scan_config(wl, req, ies);
2831 ret = wl1271_scan_sched_scan_start(wl);
2835 wl->sched_scanning = true;
2838 wl1271_ps_elp_sleep(wl);
2840 mutex_unlock(&wl->mutex);
2844 static void wl1271_op_sched_scan_stop(struct ieee80211_hw *hw,
2845 struct ieee80211_vif *vif)
2847 struct wl1271 *wl = hw->priv;
2850 wl1271_debug(DEBUG_MAC80211, "wl1271_op_sched_scan_stop");
2852 mutex_lock(&wl->mutex);
2854 ret = wl1271_ps_elp_wakeup(wl);
2858 wl1271_scan_sched_scan_stop(wl);
2860 wl1271_ps_elp_sleep(wl);
2862 mutex_unlock(&wl->mutex);
2865 static int wl1271_op_set_frag_threshold(struct ieee80211_hw *hw, u32 value)
2867 struct wl1271 *wl = hw->priv;
2870 mutex_lock(&wl->mutex);
2872 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2877 ret = wl1271_ps_elp_wakeup(wl);
2881 ret = wl1271_acx_frag_threshold(wl, value);
2883 wl1271_warning("wl1271_op_set_frag_threshold failed: %d", ret);
2885 wl1271_ps_elp_sleep(wl);
2888 mutex_unlock(&wl->mutex);
2893 static int wl1271_op_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
2895 struct wl1271 *wl = hw->priv;
2898 mutex_lock(&wl->mutex);
2900 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2905 ret = wl1271_ps_elp_wakeup(wl);
2909 ret = wl1271_acx_rts_threshold(wl, value);
2911 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret);
2913 wl1271_ps_elp_sleep(wl);
2916 mutex_unlock(&wl->mutex);
2921 static int wl1271_ssid_set(struct wl1271 *wl, struct sk_buff *skb,
2925 const u8 *ptr = cfg80211_find_ie(WLAN_EID_SSID, skb->data + offset,
2929 wl1271_error("No SSID in IEs!");
2934 if (ssid_len > IEEE80211_MAX_SSID_LEN) {
2935 wl1271_error("SSID is too long!");
2939 wl->ssid_len = ssid_len;
2940 memcpy(wl->ssid, ptr+2, ssid_len);
2944 static int wl1271_bss_erp_info_changed(struct wl1271 *wl,
2945 struct ieee80211_bss_conf *bss_conf,
2950 if (changed & BSS_CHANGED_ERP_SLOT) {
2951 if (bss_conf->use_short_slot)
2952 ret = wl1271_acx_slot(wl, SLOT_TIME_SHORT);
2954 ret = wl1271_acx_slot(wl, SLOT_TIME_LONG);
2956 wl1271_warning("Set slot time failed %d", ret);
2961 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
2962 if (bss_conf->use_short_preamble)
2963 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_SHORT);
2965 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_LONG);
2968 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
2969 if (bss_conf->use_cts_prot)
2970 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_ENABLE);
2972 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_DISABLE);
2974 wl1271_warning("Set ctsprotect failed %d", ret);
2983 static int wl1271_bss_beacon_info_changed(struct wl1271 *wl,
2984 struct ieee80211_vif *vif,
2985 struct ieee80211_bss_conf *bss_conf,
2988 bool is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
2991 if ((changed & BSS_CHANGED_BEACON_INT)) {
2992 wl1271_debug(DEBUG_MASTER, "beacon interval updated: %d",
2993 bss_conf->beacon_int);
2995 wl->beacon_int = bss_conf->beacon_int;
2998 if ((changed & BSS_CHANGED_BEACON)) {
2999 struct ieee80211_hdr *hdr;
3000 int ieoffset = offsetof(struct ieee80211_mgmt,
3002 struct sk_buff *beacon = ieee80211_beacon_get(wl->hw, vif);
3008 wl1271_debug(DEBUG_MASTER, "beacon updated");
3010 ret = wl1271_ssid_set(wl, beacon, ieoffset);
3012 dev_kfree_skb(beacon);
3015 tmpl_id = is_ap ? CMD_TEMPL_AP_BEACON :
3017 ret = wl1271_cmd_template_set(wl, tmpl_id,
3020 wl1271_tx_min_rate_get(wl));
3022 dev_kfree_skb(beacon);
3026 hdr = (struct ieee80211_hdr *) beacon->data;
3027 hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
3028 IEEE80211_STYPE_PROBE_RESP);
3030 tmpl_id = is_ap ? CMD_TEMPL_AP_PROBE_RESPONSE :
3031 CMD_TEMPL_PROBE_RESPONSE;
3032 ret = wl1271_cmd_template_set(wl,
3036 wl1271_tx_min_rate_get(wl));
3037 dev_kfree_skb(beacon);
3046 /* AP mode changes */
3047 static void wl1271_bss_info_changed_ap(struct wl1271 *wl,
3048 struct ieee80211_vif *vif,
3049 struct ieee80211_bss_conf *bss_conf,
3054 if ((changed & BSS_CHANGED_BASIC_RATES)) {
3055 u32 rates = bss_conf->basic_rates;
3057 wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl, rates);
3058 wl->basic_rate = wl1271_tx_min_rate_get(wl);
3060 ret = wl1271_init_ap_rates(wl);
3062 wl1271_error("AP rate policy change failed %d", ret);
3066 ret = wl1271_ap_init_templates(wl);
3071 ret = wl1271_bss_beacon_info_changed(wl, vif, bss_conf, changed);
3075 if ((changed & BSS_CHANGED_BEACON_ENABLED)) {
3076 if (bss_conf->enable_beacon) {
3077 if (!test_bit(WL1271_FLAG_AP_STARTED, &wl->flags)) {
3078 ret = wl12xx_cmd_role_start_ap(wl);
3082 set_bit(WL1271_FLAG_AP_STARTED, &wl->flags);
3083 wl1271_debug(DEBUG_AP, "started AP");
3085 ret = wl1271_ap_init_hwenc(wl);
3090 if (test_bit(WL1271_FLAG_AP_STARTED, &wl->flags)) {
3091 ret = wl12xx_cmd_role_stop_ap(wl);
3095 clear_bit(WL1271_FLAG_AP_STARTED, &wl->flags);
3096 wl1271_debug(DEBUG_AP, "stopped AP");
3101 ret = wl1271_bss_erp_info_changed(wl, bss_conf, changed);
3108 /* STA/IBSS mode changes */
3109 static void wl1271_bss_info_changed_sta(struct wl1271 *wl,
3110 struct ieee80211_vif *vif,
3111 struct ieee80211_bss_conf *bss_conf,
3114 bool do_join = false, set_assoc = false;
3115 bool is_ibss = (wl->bss_type == BSS_TYPE_IBSS);
3116 u32 sta_rate_set = 0;
3118 struct ieee80211_sta *sta;
3119 bool sta_exists = false;
3120 struct ieee80211_sta_ht_cap sta_ht_cap;
3123 ret = wl1271_bss_beacon_info_changed(wl, vif, bss_conf,
3129 if ((changed & BSS_CHANGED_BEACON_INT) && is_ibss)
3132 /* Need to update the SSID (for filtering etc) */
3133 if ((changed & BSS_CHANGED_BEACON) && is_ibss)
3136 if ((changed & BSS_CHANGED_BEACON_ENABLED) && is_ibss) {
3137 wl1271_debug(DEBUG_ADHOC, "ad-hoc beaconing: %s",
3138 bss_conf->enable_beacon ? "enabled" : "disabled");
3140 if (bss_conf->enable_beacon)
3141 wl->set_bss_type = BSS_TYPE_IBSS;
3143 wl->set_bss_type = BSS_TYPE_STA_BSS;
3147 if ((changed & BSS_CHANGED_CQM)) {
3148 bool enable = false;
3149 if (bss_conf->cqm_rssi_thold)
3151 ret = wl1271_acx_rssi_snr_trigger(wl, enable,
3152 bss_conf->cqm_rssi_thold,
3153 bss_conf->cqm_rssi_hyst);
3156 wl->rssi_thold = bss_conf->cqm_rssi_thold;
3159 if ((changed & BSS_CHANGED_BSSID) &&
3161 * Now we know the correct bssid, so we send a new join command
3162 * and enable the BSSID filter
3164 memcmp(wl->bssid, bss_conf->bssid, ETH_ALEN)) {
3165 memcpy(wl->bssid, bss_conf->bssid, ETH_ALEN);
3167 if (!is_zero_ether_addr(wl->bssid)) {
3168 ret = wl1271_cmd_build_null_data(wl);
3172 ret = wl1271_build_qos_null_data(wl);
3176 /* Need to update the BSSID (for filtering etc) */
3182 sta = ieee80211_find_sta(vif, bss_conf->bssid);
3184 /* save the supp_rates of the ap */
3185 sta_rate_set = sta->supp_rates[wl->hw->conf.channel->band];
3186 if (sta->ht_cap.ht_supported)
3188 (sta->ht_cap.mcs.rx_mask[0] << HW_HT_RATES_OFFSET);
3189 sta_ht_cap = sta->ht_cap;
3195 /* handle new association with HT and HT information change */
3196 if ((changed & BSS_CHANGED_HT) &&
3197 (bss_conf->channel_type != NL80211_CHAN_NO_HT)) {
3198 ret = wl1271_acx_set_ht_capabilities(wl, &sta_ht_cap,
3201 wl1271_warning("Set ht cap true failed %d",
3205 ret = wl1271_acx_set_ht_information(wl,
3206 bss_conf->ht_operation_mode);
3208 wl1271_warning("Set ht information failed %d",
3213 /* handle new association without HT and disassociation */
3214 else if (changed & BSS_CHANGED_ASSOC) {
3215 ret = wl1271_acx_set_ht_capabilities(wl, &sta_ht_cap,
3218 wl1271_warning("Set ht cap false failed %d",
3225 if ((changed & BSS_CHANGED_ASSOC)) {
3226 if (bss_conf->assoc) {
3229 wl->aid = bss_conf->aid;
3232 wl->ps_poll_failures = 0;
3235 * use basic rates from AP, and determine lowest rate
3236 * to use with control frames.
3238 rates = bss_conf->basic_rates;
3239 wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl,
3241 wl->basic_rate = wl1271_tx_min_rate_get(wl);
3243 wl->rate_set = wl1271_tx_enabled_rates_get(wl,
3245 ret = wl1271_acx_sta_rate_policies(wl);
3250 * with wl1271, we don't need to update the
3251 * beacon_int and dtim_period, because the firmware
3252 * updates it by itself when the first beacon is
3253 * received after a join.
3255 ret = wl1271_cmd_build_ps_poll(wl, wl->aid);
3260 * Get a template for hardware connection maintenance
3262 dev_kfree_skb(wl->probereq);
3263 wl->probereq = wl1271_cmd_build_ap_probe_req(wl, NULL);
3264 ieoffset = offsetof(struct ieee80211_mgmt,
3265 u.probe_req.variable);
3266 wl1271_ssid_set(wl, wl->probereq, ieoffset);
3268 /* enable the connection monitoring feature */
3269 ret = wl1271_acx_conn_monit_params(wl, true);
3273 /* If we want to go in PSM but we're not there yet */
3274 if (test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags) &&
3275 !test_bit(WL1271_FLAG_PSM, &wl->flags)) {
3276 enum wl1271_cmd_ps_mode mode;
3278 mode = STATION_POWER_SAVE_MODE;
3279 ret = wl1271_ps_set_mode(wl, mode,
3286 /* use defaults when not associated */
3288 !!test_and_clear_bit(WL1271_FLAG_STA_ASSOCIATED,
3290 clear_bit(WL1271_FLAG_STA_STATE_SENT, &wl->flags);
3293 /* free probe-request template */
3294 dev_kfree_skb(wl->probereq);
3295 wl->probereq = NULL;
3297 /* re-enable dynamic ps - just in case */
3298 ieee80211_enable_dyn_ps(wl->vif);
3300 /* revert back to minimum rates for the current band */
3301 wl1271_set_band_rate(wl);
3302 wl->basic_rate = wl1271_tx_min_rate_get(wl);
3303 ret = wl1271_acx_sta_rate_policies(wl);
3307 /* disable connection monitor features */
3308 ret = wl1271_acx_conn_monit_params(wl, false);
3310 /* Disable the keep-alive feature */
3311 ret = wl1271_acx_keep_alive_mode(wl, false);
3315 /* restore the bssid filter and go to dummy bssid */
3318 wl1271_dummy_join(wl);
3323 if (changed & BSS_CHANGED_IBSS) {
3324 wl1271_debug(DEBUG_ADHOC, "ibss_joined: %d",
3325 bss_conf->ibss_joined);
3327 if (bss_conf->ibss_joined) {
3328 u32 rates = bss_conf->basic_rates;
3329 wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl,
3331 wl->basic_rate = wl1271_tx_min_rate_get(wl);
3333 /* by default, use 11b rates */
3334 wl->rate_set = CONF_TX_IBSS_DEFAULT_RATES;
3335 ret = wl1271_acx_sta_rate_policies(wl);
3341 ret = wl1271_bss_erp_info_changed(wl, bss_conf, changed);
3345 if (changed & BSS_CHANGED_ARP_FILTER) {
3346 __be32 addr = bss_conf->arp_addr_list[0];
3347 WARN_ON(wl->bss_type != BSS_TYPE_STA_BSS);
3349 if (bss_conf->arp_addr_cnt == 1 &&
3350 bss_conf->arp_filter_enabled) {
3352 * The template should have been configured only upon
3353 * association. however, it seems that the correct ip
3354 * isn't being set (when sending), so we have to
3355 * reconfigure the template upon every ip change.
3357 ret = wl1271_cmd_build_arp_rsp(wl, addr);
3359 wl1271_warning("build arp rsp failed: %d", ret);
3363 ret = wl1271_acx_arp_ip_filter(wl,
3364 ACX_ARP_FILTER_ARP_FILTERING,
3367 ret = wl1271_acx_arp_ip_filter(wl, 0, addr);
3374 ret = wl1271_join(wl, set_assoc);
3376 wl1271_warning("cmd join failed %d", ret);
3379 wl1271_check_operstate(wl, ieee80211_get_operstate(vif));
3386 static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
3387 struct ieee80211_vif *vif,
3388 struct ieee80211_bss_conf *bss_conf,
3391 struct wl1271 *wl = hw->priv;
3392 bool is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
3395 wl1271_debug(DEBUG_MAC80211, "mac80211 bss info changed 0x%x",
3398 mutex_lock(&wl->mutex);
3400 if (unlikely(wl->state == WL1271_STATE_OFF))
3403 ret = wl1271_ps_elp_wakeup(wl);
3408 wl1271_bss_info_changed_ap(wl, vif, bss_conf, changed);
3410 wl1271_bss_info_changed_sta(wl, vif, bss_conf, changed);
3412 wl1271_ps_elp_sleep(wl);
3415 mutex_unlock(&wl->mutex);
3418 static int wl1271_op_conf_tx(struct ieee80211_hw *hw, u16 queue,
3419 const struct ieee80211_tx_queue_params *params)
3421 struct wl1271 *wl = hw->priv;
3425 mutex_lock(&wl->mutex);
3427 wl1271_debug(DEBUG_MAC80211, "mac80211 conf tx %d", queue);
3430 ps_scheme = CONF_PS_SCHEME_UPSD_TRIGGER;
3432 ps_scheme = CONF_PS_SCHEME_LEGACY;
3434 if (wl->state == WL1271_STATE_OFF) {
3436 * If the state is off, the parameters will be recorded and
3437 * configured on init. This happens in AP-mode.
3439 struct conf_tx_ac_category *conf_ac =
3440 &wl->conf.tx.ac_conf[wl1271_tx_get_queue(queue)];
3441 struct conf_tx_tid *conf_tid =
3442 &wl->conf.tx.tid_conf[wl1271_tx_get_queue(queue)];
3444 conf_ac->ac = wl1271_tx_get_queue(queue);
3445 conf_ac->cw_min = (u8)params->cw_min;
3446 conf_ac->cw_max = params->cw_max;
3447 conf_ac->aifsn = params->aifs;
3448 conf_ac->tx_op_limit = params->txop << 5;
3450 conf_tid->queue_id = wl1271_tx_get_queue(queue);
3451 conf_tid->channel_type = CONF_CHANNEL_TYPE_EDCF;
3452 conf_tid->tsid = wl1271_tx_get_queue(queue);
3453 conf_tid->ps_scheme = ps_scheme;
3454 conf_tid->ack_policy = CONF_ACK_POLICY_LEGACY;
3455 conf_tid->apsd_conf[0] = 0;
3456 conf_tid->apsd_conf[1] = 0;
3460 ret = wl1271_ps_elp_wakeup(wl);
3465 * the txop is confed in units of 32us by the mac80211,
3468 ret = wl1271_acx_ac_cfg(wl, wl1271_tx_get_queue(queue),
3469 params->cw_min, params->cw_max,
3470 params->aifs, params->txop << 5);
3474 ret = wl1271_acx_tid_cfg(wl, wl1271_tx_get_queue(queue),
3475 CONF_CHANNEL_TYPE_EDCF,
3476 wl1271_tx_get_queue(queue),
3477 ps_scheme, CONF_ACK_POLICY_LEGACY,
3481 wl1271_ps_elp_sleep(wl);
3484 mutex_unlock(&wl->mutex);
3489 static u64 wl1271_op_get_tsf(struct ieee80211_hw *hw)
3492 struct wl1271 *wl = hw->priv;
3493 u64 mactime = ULLONG_MAX;
3496 wl1271_debug(DEBUG_MAC80211, "mac80211 get tsf");
3498 mutex_lock(&wl->mutex);
3500 if (unlikely(wl->state == WL1271_STATE_OFF))
3503 ret = wl1271_ps_elp_wakeup(wl);
3507 ret = wl1271_acx_tsf_info(wl, &mactime);
3512 wl1271_ps_elp_sleep(wl);
3515 mutex_unlock(&wl->mutex);
3519 static int wl1271_op_get_survey(struct ieee80211_hw *hw, int idx,
3520 struct survey_info *survey)
3522 struct wl1271 *wl = hw->priv;
3523 struct ieee80211_conf *conf = &hw->conf;
3528 survey->channel = conf->channel;
3529 survey->filled = SURVEY_INFO_NOISE_DBM;
3530 survey->noise = wl->noise;
3535 static int wl1271_allocate_sta(struct wl1271 *wl,
3536 struct ieee80211_sta *sta,
3539 struct wl1271_station *wl_sta;
3542 id = find_first_zero_bit(wl->ap_hlid_map, AP_MAX_STATIONS);
3543 if (id >= AP_MAX_STATIONS) {
3544 wl1271_warning("could not allocate HLID - too much stations");
3548 wl_sta = (struct wl1271_station *)sta->drv_priv;
3549 __set_bit(id, wl->ap_hlid_map);
3550 wl_sta->hlid = WL1271_AP_STA_HLID_START + id;
3551 *hlid = wl_sta->hlid;
3552 memcpy(wl->links[wl_sta->hlid].addr, sta->addr, ETH_ALEN);
3556 static void wl1271_free_sta(struct wl1271 *wl, u8 hlid)
3558 int id = hlid - WL1271_AP_STA_HLID_START;
3560 if (WARN_ON(!test_bit(id, wl->ap_hlid_map)))
3563 __clear_bit(id, wl->ap_hlid_map);
3564 memset(wl->links[hlid].addr, 0, ETH_ALEN);
3565 wl1271_tx_reset_link_queues(wl, hlid);
3566 __clear_bit(hlid, &wl->ap_ps_map);
3567 __clear_bit(hlid, (unsigned long *)&wl->ap_fw_ps_map);
3570 bool wl1271_is_active_sta(struct wl1271 *wl, u8 hlid)
3572 int id = hlid - WL1271_AP_STA_HLID_START;
3573 return test_bit(id, wl->ap_hlid_map);
3576 static int wl1271_op_sta_add(struct ieee80211_hw *hw,
3577 struct ieee80211_vif *vif,
3578 struct ieee80211_sta *sta)
3580 struct wl1271 *wl = hw->priv;
3584 mutex_lock(&wl->mutex);
3586 if (unlikely(wl->state == WL1271_STATE_OFF))
3589 if (wl->bss_type != BSS_TYPE_AP_BSS)
3592 wl1271_debug(DEBUG_MAC80211, "mac80211 add sta %d", (int)sta->aid);
3594 ret = wl1271_allocate_sta(wl, sta, &hlid);
3598 ret = wl1271_ps_elp_wakeup(wl);
3602 ret = wl12xx_cmd_add_peer(wl, sta, hlid);
3607 wl1271_ps_elp_sleep(wl);
3611 wl1271_free_sta(wl, hlid);
3614 mutex_unlock(&wl->mutex);
3618 static int wl1271_op_sta_remove(struct ieee80211_hw *hw,
3619 struct ieee80211_vif *vif,
3620 struct ieee80211_sta *sta)
3622 struct wl1271 *wl = hw->priv;
3623 struct wl1271_station *wl_sta;
3626 mutex_lock(&wl->mutex);
3628 if (unlikely(wl->state == WL1271_STATE_OFF))
3631 if (wl->bss_type != BSS_TYPE_AP_BSS)
3634 wl1271_debug(DEBUG_MAC80211, "mac80211 remove sta %d", (int)sta->aid);
3636 wl_sta = (struct wl1271_station *)sta->drv_priv;
3637 id = wl_sta->hlid - WL1271_AP_STA_HLID_START;
3638 if (WARN_ON(!test_bit(id, wl->ap_hlid_map)))
3641 ret = wl1271_ps_elp_wakeup(wl);
3645 ret = wl12xx_cmd_remove_peer(wl, wl_sta->hlid);
3649 wl1271_free_sta(wl, wl_sta->hlid);
3652 wl1271_ps_elp_sleep(wl);
3655 mutex_unlock(&wl->mutex);
3659 static int wl1271_op_ampdu_action(struct ieee80211_hw *hw,
3660 struct ieee80211_vif *vif,
3661 enum ieee80211_ampdu_mlme_action action,
3662 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
3665 struct wl1271 *wl = hw->priv;
3668 mutex_lock(&wl->mutex);
3670 if (unlikely(wl->state == WL1271_STATE_OFF)) {
3675 ret = wl1271_ps_elp_wakeup(wl);
3679 wl1271_debug(DEBUG_MAC80211, "mac80211 ampdu: Rx tid %d action %d",
3683 case IEEE80211_AMPDU_RX_START:
3684 if ((wl->ba_support) && (wl->ba_allowed)) {
3685 ret = wl1271_acx_set_ba_receiver_session(wl, tid, *ssn,
3688 wl->ba_rx_bitmap |= BIT(tid);
3694 case IEEE80211_AMPDU_RX_STOP:
3695 ret = wl1271_acx_set_ba_receiver_session(wl, tid, 0, false);
3697 wl->ba_rx_bitmap &= ~BIT(tid);
3701 * The BA initiator session management in FW independently.
3702 * Falling break here on purpose for all TX APDU commands.
3704 case IEEE80211_AMPDU_TX_START:
3705 case IEEE80211_AMPDU_TX_STOP:
3706 case IEEE80211_AMPDU_TX_OPERATIONAL:
3711 wl1271_error("Incorrect ampdu action id=%x\n", action);
3715 wl1271_ps_elp_sleep(wl);
3718 mutex_unlock(&wl->mutex);
3723 static bool wl1271_tx_frames_pending(struct ieee80211_hw *hw)
3725 struct wl1271 *wl = hw->priv;
3728 mutex_lock(&wl->mutex);
3730 if (unlikely(wl->state == WL1271_STATE_OFF))
3733 /* packets are considered pending if in the TX queue or the FW */
3734 ret = (wl1271_tx_total_queue_count(wl) > 0) || (wl->tx_frames_cnt > 0);
3736 /* the above is appropriate for STA mode for PS purposes */
3737 WARN_ON(wl->bss_type != BSS_TYPE_STA_BSS);
3740 mutex_unlock(&wl->mutex);
3745 /* can't be const, mac80211 writes to this */
3746 static struct ieee80211_rate wl1271_rates[] = {
3748 .hw_value = CONF_HW_BIT_RATE_1MBPS,
3749 .hw_value_short = CONF_HW_BIT_RATE_1MBPS, },
3751 .hw_value = CONF_HW_BIT_RATE_2MBPS,
3752 .hw_value_short = CONF_HW_BIT_RATE_2MBPS,
3753 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
3755 .hw_value = CONF_HW_BIT_RATE_5_5MBPS,
3756 .hw_value_short = CONF_HW_BIT_RATE_5_5MBPS,
3757 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
3759 .hw_value = CONF_HW_BIT_RATE_11MBPS,
3760 .hw_value_short = CONF_HW_BIT_RATE_11MBPS,
3761 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
3763 .hw_value = CONF_HW_BIT_RATE_6MBPS,
3764 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
3766 .hw_value = CONF_HW_BIT_RATE_9MBPS,
3767 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
3769 .hw_value = CONF_HW_BIT_RATE_12MBPS,
3770 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
3772 .hw_value = CONF_HW_BIT_RATE_18MBPS,
3773 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
3775 .hw_value = CONF_HW_BIT_RATE_24MBPS,
3776 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
3778 .hw_value = CONF_HW_BIT_RATE_36MBPS,
3779 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
3781 .hw_value = CONF_HW_BIT_RATE_48MBPS,
3782 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
3784 .hw_value = CONF_HW_BIT_RATE_54MBPS,
3785 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
3788 /* can't be const, mac80211 writes to this */
3789 static struct ieee80211_channel wl1271_channels[] = {
3790 { .hw_value = 1, .center_freq = 2412, .max_power = 25 },
3791 { .hw_value = 2, .center_freq = 2417, .max_power = 25 },
3792 { .hw_value = 3, .center_freq = 2422, .max_power = 25 },
3793 { .hw_value = 4, .center_freq = 2427, .max_power = 25 },
3794 { .hw_value = 5, .center_freq = 2432, .max_power = 25 },
3795 { .hw_value = 6, .center_freq = 2437, .max_power = 25 },
3796 { .hw_value = 7, .center_freq = 2442, .max_power = 25 },
3797 { .hw_value = 8, .center_freq = 2447, .max_power = 25 },
3798 { .hw_value = 9, .center_freq = 2452, .max_power = 25 },
3799 { .hw_value = 10, .center_freq = 2457, .max_power = 25 },
3800 { .hw_value = 11, .center_freq = 2462, .max_power = 25 },
3801 { .hw_value = 12, .center_freq = 2467, .max_power = 25 },
3802 { .hw_value = 13, .center_freq = 2472, .max_power = 25 },
3803 { .hw_value = 14, .center_freq = 2484, .max_power = 25 },
3806 /* mapping to indexes for wl1271_rates */
3807 static const u8 wl1271_rate_to_idx_2ghz[] = {
3808 /* MCS rates are used only with 11n */
3809 7, /* CONF_HW_RXTX_RATE_MCS7 */
3810 6, /* CONF_HW_RXTX_RATE_MCS6 */
3811 5, /* CONF_HW_RXTX_RATE_MCS5 */
3812 4, /* CONF_HW_RXTX_RATE_MCS4 */
3813 3, /* CONF_HW_RXTX_RATE_MCS3 */
3814 2, /* CONF_HW_RXTX_RATE_MCS2 */
3815 1, /* CONF_HW_RXTX_RATE_MCS1 */
3816 0, /* CONF_HW_RXTX_RATE_MCS0 */
3818 11, /* CONF_HW_RXTX_RATE_54 */
3819 10, /* CONF_HW_RXTX_RATE_48 */
3820 9, /* CONF_HW_RXTX_RATE_36 */
3821 8, /* CONF_HW_RXTX_RATE_24 */
3823 /* TI-specific rate */
3824 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
3826 7, /* CONF_HW_RXTX_RATE_18 */
3827 6, /* CONF_HW_RXTX_RATE_12 */
3828 3, /* CONF_HW_RXTX_RATE_11 */
3829 5, /* CONF_HW_RXTX_RATE_9 */
3830 4, /* CONF_HW_RXTX_RATE_6 */
3831 2, /* CONF_HW_RXTX_RATE_5_5 */
3832 1, /* CONF_HW_RXTX_RATE_2 */
3833 0 /* CONF_HW_RXTX_RATE_1 */
3836 /* 11n STA capabilities */
3837 #define HW_RX_HIGHEST_RATE 72
3839 #ifdef CONFIG_WL12XX_HT
3840 #define WL12XX_HT_CAP { \
3841 .cap = IEEE80211_HT_CAP_GRN_FLD | IEEE80211_HT_CAP_SGI_20 | \
3842 (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT), \
3843 .ht_supported = true, \
3844 .ampdu_factor = IEEE80211_HT_MAX_AMPDU_8K, \
3845 .ampdu_density = IEEE80211_HT_MPDU_DENSITY_8, \
3847 .rx_mask = { 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, \
3848 .rx_highest = cpu_to_le16(HW_RX_HIGHEST_RATE), \
3849 .tx_params = IEEE80211_HT_MCS_TX_DEFINED, \
3853 #define WL12XX_HT_CAP { \
3854 .ht_supported = false, \
3858 /* can't be const, mac80211 writes to this */
3859 static struct ieee80211_supported_band wl1271_band_2ghz = {
3860 .channels = wl1271_channels,
3861 .n_channels = ARRAY_SIZE(wl1271_channels),
3862 .bitrates = wl1271_rates,
3863 .n_bitrates = ARRAY_SIZE(wl1271_rates),
3864 .ht_cap = WL12XX_HT_CAP,
3867 /* 5 GHz data rates for WL1273 */
3868 static struct ieee80211_rate wl1271_rates_5ghz[] = {
3870 .hw_value = CONF_HW_BIT_RATE_6MBPS,
3871 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
3873 .hw_value = CONF_HW_BIT_RATE_9MBPS,
3874 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
3876 .hw_value = CONF_HW_BIT_RATE_12MBPS,
3877 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
3879 .hw_value = CONF_HW_BIT_RATE_18MBPS,
3880 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
3882 .hw_value = CONF_HW_BIT_RATE_24MBPS,
3883 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
3885 .hw_value = CONF_HW_BIT_RATE_36MBPS,
3886 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
3888 .hw_value = CONF_HW_BIT_RATE_48MBPS,
3889 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
3891 .hw_value = CONF_HW_BIT_RATE_54MBPS,
3892 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
3895 /* 5 GHz band channels for WL1273 */
3896 static struct ieee80211_channel wl1271_channels_5ghz[] = {
3897 { .hw_value = 7, .center_freq = 5035, .max_power = 25 },
3898 { .hw_value = 8, .center_freq = 5040, .max_power = 25 },
3899 { .hw_value = 9, .center_freq = 5045, .max_power = 25 },
3900 { .hw_value = 11, .center_freq = 5055, .max_power = 25 },
3901 { .hw_value = 12, .center_freq = 5060, .max_power = 25 },
3902 { .hw_value = 16, .center_freq = 5080, .max_power = 25 },
3903 { .hw_value = 34, .center_freq = 5170, .max_power = 25 },
3904 { .hw_value = 36, .center_freq = 5180, .max_power = 25 },
3905 { .hw_value = 38, .center_freq = 5190, .max_power = 25 },
3906 { .hw_value = 40, .center_freq = 5200, .max_power = 25 },
3907 { .hw_value = 42, .center_freq = 5210, .max_power = 25 },
3908 { .hw_value = 44, .center_freq = 5220, .max_power = 25 },
3909 { .hw_value = 46, .center_freq = 5230, .max_power = 25 },
3910 { .hw_value = 48, .center_freq = 5240, .max_power = 25 },
3911 { .hw_value = 52, .center_freq = 5260, .max_power = 25 },
3912 { .hw_value = 56, .center_freq = 5280, .max_power = 25 },
3913 { .hw_value = 60, .center_freq = 5300, .max_power = 25 },
3914 { .hw_value = 64, .center_freq = 5320, .max_power = 25 },
3915 { .hw_value = 100, .center_freq = 5500, .max_power = 25 },
3916 { .hw_value = 104, .center_freq = 5520, .max_power = 25 },
3917 { .hw_value = 108, .center_freq = 5540, .max_power = 25 },
3918 { .hw_value = 112, .center_freq = 5560, .max_power = 25 },
3919 { .hw_value = 116, .center_freq = 5580, .max_power = 25 },
3920 { .hw_value = 120, .center_freq = 5600, .max_power = 25 },
3921 { .hw_value = 124, .center_freq = 5620, .max_power = 25 },
3922 { .hw_value = 128, .center_freq = 5640, .max_power = 25 },
3923 { .hw_value = 132, .center_freq = 5660, .max_power = 25 },
3924 { .hw_value = 136, .center_freq = 5680, .max_power = 25 },
3925 { .hw_value = 140, .center_freq = 5700, .max_power = 25 },
3926 { .hw_value = 149, .center_freq = 5745, .max_power = 25 },
3927 { .hw_value = 153, .center_freq = 5765, .max_power = 25 },
3928 { .hw_value = 157, .center_freq = 5785, .max_power = 25 },
3929 { .hw_value = 161, .center_freq = 5805, .max_power = 25 },
3930 { .hw_value = 165, .center_freq = 5825, .max_power = 25 },
3933 /* mapping to indexes for wl1271_rates_5ghz */
3934 static const u8 wl1271_rate_to_idx_5ghz[] = {
3935 /* MCS rates are used only with 11n */
3936 7, /* CONF_HW_RXTX_RATE_MCS7 */
3937 6, /* CONF_HW_RXTX_RATE_MCS6 */
3938 5, /* CONF_HW_RXTX_RATE_MCS5 */
3939 4, /* CONF_HW_RXTX_RATE_MCS4 */
3940 3, /* CONF_HW_RXTX_RATE_MCS3 */
3941 2, /* CONF_HW_RXTX_RATE_MCS2 */
3942 1, /* CONF_HW_RXTX_RATE_MCS1 */
3943 0, /* CONF_HW_RXTX_RATE_MCS0 */
3945 7, /* CONF_HW_RXTX_RATE_54 */
3946 6, /* CONF_HW_RXTX_RATE_48 */
3947 5, /* CONF_HW_RXTX_RATE_36 */
3948 4, /* CONF_HW_RXTX_RATE_24 */
3950 /* TI-specific rate */
3951 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
3953 3, /* CONF_HW_RXTX_RATE_18 */
3954 2, /* CONF_HW_RXTX_RATE_12 */
3955 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_11 */
3956 1, /* CONF_HW_RXTX_RATE_9 */
3957 0, /* CONF_HW_RXTX_RATE_6 */
3958 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_5_5 */
3959 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_2 */
3960 CONF_HW_RXTX_RATE_UNSUPPORTED /* CONF_HW_RXTX_RATE_1 */
3963 static struct ieee80211_supported_band wl1271_band_5ghz = {
3964 .channels = wl1271_channels_5ghz,
3965 .n_channels = ARRAY_SIZE(wl1271_channels_5ghz),
3966 .bitrates = wl1271_rates_5ghz,
3967 .n_bitrates = ARRAY_SIZE(wl1271_rates_5ghz),
3968 .ht_cap = WL12XX_HT_CAP,
3971 static const u8 *wl1271_band_rate_to_idx[] = {
3972 [IEEE80211_BAND_2GHZ] = wl1271_rate_to_idx_2ghz,
3973 [IEEE80211_BAND_5GHZ] = wl1271_rate_to_idx_5ghz
3976 static const struct ieee80211_ops wl1271_ops = {
3977 .start = wl1271_op_start,
3978 .stop = wl1271_op_stop,
3979 .add_interface = wl1271_op_add_interface,
3980 .remove_interface = wl1271_op_remove_interface,
3982 .suspend = wl1271_op_suspend,
3983 .resume = wl1271_op_resume,
3985 .config = wl1271_op_config,
3986 .prepare_multicast = wl1271_op_prepare_multicast,
3987 .configure_filter = wl1271_op_configure_filter,
3989 .set_key = wl1271_op_set_key,
3990 .hw_scan = wl1271_op_hw_scan,
3991 .cancel_hw_scan = wl1271_op_cancel_hw_scan,
3992 .sched_scan_start = wl1271_op_sched_scan_start,
3993 .sched_scan_stop = wl1271_op_sched_scan_stop,
3994 .bss_info_changed = wl1271_op_bss_info_changed,
3995 .set_frag_threshold = wl1271_op_set_frag_threshold,
3996 .set_rts_threshold = wl1271_op_set_rts_threshold,
3997 .conf_tx = wl1271_op_conf_tx,
3998 .get_tsf = wl1271_op_get_tsf,
3999 .get_survey = wl1271_op_get_survey,
4000 .sta_add = wl1271_op_sta_add,
4001 .sta_remove = wl1271_op_sta_remove,
4002 .ampdu_action = wl1271_op_ampdu_action,
4003 .tx_frames_pending = wl1271_tx_frames_pending,
4004 CFG80211_TESTMODE_CMD(wl1271_tm_cmd)
4008 u8 wl1271_rate_to_idx(int rate, enum ieee80211_band band)
4012 BUG_ON(band >= sizeof(wl1271_band_rate_to_idx)/sizeof(u8 *));
4014 if (unlikely(rate >= CONF_HW_RXTX_RATE_MAX)) {
4015 wl1271_error("Illegal RX rate from HW: %d", rate);
4019 idx = wl1271_band_rate_to_idx[band][rate];
4020 if (unlikely(idx == CONF_HW_RXTX_RATE_UNSUPPORTED)) {
4021 wl1271_error("Unsupported RX rate from HW: %d", rate);
4028 static ssize_t wl1271_sysfs_show_bt_coex_state(struct device *dev,
4029 struct device_attribute *attr,
4032 struct wl1271 *wl = dev_get_drvdata(dev);
4037 mutex_lock(&wl->mutex);
4038 len = snprintf(buf, len, "%d\n\n0 - off\n1 - on\n",
4040 mutex_unlock(&wl->mutex);
4046 static ssize_t wl1271_sysfs_store_bt_coex_state(struct device *dev,
4047 struct device_attribute *attr,
4048 const char *buf, size_t count)
4050 struct wl1271 *wl = dev_get_drvdata(dev);
4054 ret = kstrtoul(buf, 10, &res);
4056 wl1271_warning("incorrect value written to bt_coex_mode");
4060 mutex_lock(&wl->mutex);
4064 if (res == wl->sg_enabled)
4067 wl->sg_enabled = res;
4069 if (wl->state == WL1271_STATE_OFF)
4072 ret = wl1271_ps_elp_wakeup(wl);
4076 wl1271_acx_sg_enable(wl, wl->sg_enabled);
4077 wl1271_ps_elp_sleep(wl);
4080 mutex_unlock(&wl->mutex);
4084 static DEVICE_ATTR(bt_coex_state, S_IRUGO | S_IWUSR,
4085 wl1271_sysfs_show_bt_coex_state,
4086 wl1271_sysfs_store_bt_coex_state);
4088 static ssize_t wl1271_sysfs_show_hw_pg_ver(struct device *dev,
4089 struct device_attribute *attr,
4092 struct wl1271 *wl = dev_get_drvdata(dev);
4097 mutex_lock(&wl->mutex);
4098 if (wl->hw_pg_ver >= 0)
4099 len = snprintf(buf, len, "%d\n", wl->hw_pg_ver);
4101 len = snprintf(buf, len, "n/a\n");
4102 mutex_unlock(&wl->mutex);
4107 static DEVICE_ATTR(hw_pg_ver, S_IRUGO,
4108 wl1271_sysfs_show_hw_pg_ver, NULL);
4110 static ssize_t wl1271_sysfs_read_fwlog(struct file *filp, struct kobject *kobj,
4111 struct bin_attribute *bin_attr,
4112 char *buffer, loff_t pos, size_t count)
4114 struct device *dev = container_of(kobj, struct device, kobj);
4115 struct wl1271 *wl = dev_get_drvdata(dev);
4119 ret = mutex_lock_interruptible(&wl->mutex);
4121 return -ERESTARTSYS;
4123 /* Let only one thread read the log at a time, blocking others */
4124 while (wl->fwlog_size == 0) {
4127 prepare_to_wait_exclusive(&wl->fwlog_waitq,
4129 TASK_INTERRUPTIBLE);
4131 if (wl->fwlog_size != 0) {
4132 finish_wait(&wl->fwlog_waitq, &wait);
4136 mutex_unlock(&wl->mutex);
4139 finish_wait(&wl->fwlog_waitq, &wait);
4141 if (signal_pending(current))
4142 return -ERESTARTSYS;
4144 ret = mutex_lock_interruptible(&wl->mutex);
4146 return -ERESTARTSYS;
4149 /* Check if the fwlog is still valid */
4150 if (wl->fwlog_size < 0) {
4151 mutex_unlock(&wl->mutex);
4155 /* Seeking is not supported - old logs are not kept. Disregard pos. */
4156 len = min(count, (size_t)wl->fwlog_size);
4157 wl->fwlog_size -= len;
4158 memcpy(buffer, wl->fwlog, len);
4160 /* Make room for new messages */
4161 memmove(wl->fwlog, wl->fwlog + len, wl->fwlog_size);
4163 mutex_unlock(&wl->mutex);
4168 static struct bin_attribute fwlog_attr = {
4169 .attr = {.name = "fwlog", .mode = S_IRUSR},
4170 .read = wl1271_sysfs_read_fwlog,
4173 int wl1271_register_hw(struct wl1271 *wl)
4177 if (wl->mac80211_registered)
4180 ret = wl1271_fetch_nvs(wl);
4182 /* NOTE: The wl->nvs->nvs element must be first, in
4183 * order to simplify the casting, we assume it is at
4184 * the beginning of the wl->nvs structure.
4186 u8 *nvs_ptr = (u8 *)wl->nvs;
4188 wl->mac_addr[0] = nvs_ptr[11];
4189 wl->mac_addr[1] = nvs_ptr[10];
4190 wl->mac_addr[2] = nvs_ptr[6];
4191 wl->mac_addr[3] = nvs_ptr[5];
4192 wl->mac_addr[4] = nvs_ptr[4];
4193 wl->mac_addr[5] = nvs_ptr[3];
4196 SET_IEEE80211_PERM_ADDR(wl->hw, wl->mac_addr);
4198 ret = ieee80211_register_hw(wl->hw);
4200 wl1271_error("unable to register mac80211 hw: %d", ret);
4204 wl->mac80211_registered = true;
4206 wl1271_debugfs_init(wl);
4208 register_netdevice_notifier(&wl1271_dev_notifier);
4210 wl1271_notice("loaded");
4214 EXPORT_SYMBOL_GPL(wl1271_register_hw);
4216 void wl1271_unregister_hw(struct wl1271 *wl)
4218 if (wl->state == WL1271_STATE_PLT)
4219 __wl1271_plt_stop(wl);
4221 unregister_netdevice_notifier(&wl1271_dev_notifier);
4222 ieee80211_unregister_hw(wl->hw);
4223 wl->mac80211_registered = false;
4226 EXPORT_SYMBOL_GPL(wl1271_unregister_hw);
4228 int wl1271_init_ieee80211(struct wl1271 *wl)
4230 static const u32 cipher_suites[] = {
4231 WLAN_CIPHER_SUITE_WEP40,
4232 WLAN_CIPHER_SUITE_WEP104,
4233 WLAN_CIPHER_SUITE_TKIP,
4234 WLAN_CIPHER_SUITE_CCMP,
4235 WL1271_CIPHER_SUITE_GEM,
4238 /* The tx descriptor buffer and the TKIP space. */
4239 wl->hw->extra_tx_headroom = WL1271_TKIP_IV_SPACE +
4240 sizeof(struct wl1271_tx_hw_descr);
4243 /* FIXME: find a proper value */
4244 wl->hw->channel_change_time = 10000;
4245 wl->hw->max_listen_interval = wl->conf.conn.max_listen_interval;
4247 wl->hw->flags = IEEE80211_HW_SIGNAL_DBM |
4248 IEEE80211_HW_BEACON_FILTER |
4249 IEEE80211_HW_SUPPORTS_PS |
4250 IEEE80211_HW_SUPPORTS_UAPSD |
4251 IEEE80211_HW_HAS_RATE_CONTROL |
4252 IEEE80211_HW_CONNECTION_MONITOR |
4253 IEEE80211_HW_SUPPORTS_CQM_RSSI |
4254 IEEE80211_HW_REPORTS_TX_ACK_STATUS |
4255 IEEE80211_HW_SPECTRUM_MGMT |
4256 IEEE80211_HW_AP_LINK_PS;
4258 wl->hw->wiphy->cipher_suites = cipher_suites;
4259 wl->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
4261 wl->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
4262 BIT(NL80211_IFTYPE_ADHOC) | BIT(NL80211_IFTYPE_AP);
4263 wl->hw->wiphy->max_scan_ssids = 1;
4265 * Maximum length of elements in scanning probe request templates
4266 * should be the maximum length possible for a template, without
4267 * the IEEE80211 header of the template
4269 wl->hw->wiphy->max_scan_ie_len = WL1271_CMD_TEMPL_MAX_SIZE -
4270 sizeof(struct ieee80211_header);
4272 /* make sure all our channels fit in the scanned_ch bitmask */
4273 BUILD_BUG_ON(ARRAY_SIZE(wl1271_channels) +
4274 ARRAY_SIZE(wl1271_channels_5ghz) >
4275 WL1271_MAX_CHANNELS);
4277 * We keep local copies of the band structs because we need to
4278 * modify them on a per-device basis.
4280 memcpy(&wl->bands[IEEE80211_BAND_2GHZ], &wl1271_band_2ghz,
4281 sizeof(wl1271_band_2ghz));
4282 memcpy(&wl->bands[IEEE80211_BAND_5GHZ], &wl1271_band_5ghz,
4283 sizeof(wl1271_band_5ghz));
4285 wl->hw->wiphy->bands[IEEE80211_BAND_2GHZ] =
4286 &wl->bands[IEEE80211_BAND_2GHZ];
4287 wl->hw->wiphy->bands[IEEE80211_BAND_5GHZ] =
4288 &wl->bands[IEEE80211_BAND_5GHZ];
4291 wl->hw->max_rates = 1;
4293 wl->hw->wiphy->reg_notifier = wl1271_reg_notify;
4295 SET_IEEE80211_DEV(wl->hw, wl1271_wl_to_dev(wl));
4297 wl->hw->sta_data_size = sizeof(struct wl1271_station);
4299 wl->hw->max_rx_aggregation_subframes = 8;
4303 EXPORT_SYMBOL_GPL(wl1271_init_ieee80211);
4305 #define WL1271_DEFAULT_CHANNEL 0
4307 struct ieee80211_hw *wl1271_alloc_hw(void)
4309 struct ieee80211_hw *hw;
4310 struct platform_device *plat_dev = NULL;
4315 hw = ieee80211_alloc_hw(sizeof(*wl), &wl1271_ops);
4317 wl1271_error("could not alloc ieee80211_hw");
4322 plat_dev = kmemdup(&wl1271_device, sizeof(wl1271_device), GFP_KERNEL);
4324 wl1271_error("could not allocate platform_device");
4326 goto err_plat_alloc;
4330 memset(wl, 0, sizeof(*wl));
4332 INIT_LIST_HEAD(&wl->list);
4335 wl->plat_dev = plat_dev;
4337 for (i = 0; i < NUM_TX_QUEUES; i++)
4338 skb_queue_head_init(&wl->tx_queue[i]);
4340 for (i = 0; i < NUM_TX_QUEUES; i++)
4341 for (j = 0; j < AP_MAX_LINKS; j++)
4342 skb_queue_head_init(&wl->links[j].tx_queue[i]);
4344 skb_queue_head_init(&wl->deferred_rx_queue);
4345 skb_queue_head_init(&wl->deferred_tx_queue);
4347 INIT_DELAYED_WORK(&wl->elp_work, wl1271_elp_work);
4348 INIT_DELAYED_WORK(&wl->pspoll_work, wl1271_pspoll_work);
4349 INIT_WORK(&wl->netstack_work, wl1271_netstack_work);
4350 INIT_WORK(&wl->tx_work, wl1271_tx_work);
4351 INIT_WORK(&wl->recovery_work, wl1271_recovery_work);
4352 INIT_DELAYED_WORK(&wl->scan_complete_work, wl1271_scan_complete_work);
4353 INIT_WORK(&wl->rx_streaming_enable_work,
4354 wl1271_rx_streaming_enable_work);
4355 INIT_WORK(&wl->rx_streaming_disable_work,
4356 wl1271_rx_streaming_disable_work);
4358 wl->freezable_wq = create_freezable_workqueue("wl12xx_wq");
4359 if (!wl->freezable_wq) {
4364 wl->channel = WL1271_DEFAULT_CHANNEL;
4365 wl->beacon_int = WL1271_DEFAULT_BEACON_INT;
4366 wl->default_key = 0;
4368 wl->psm_entry_retry = 0;
4369 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
4370 wl->basic_rate_set = CONF_TX_RATE_MASK_BASIC;
4371 wl->basic_rate = CONF_TX_RATE_MASK_BASIC;
4372 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
4373 wl->band = IEEE80211_BAND_2GHZ;
4376 wl->sg_enabled = true;
4378 wl->bss_type = MAX_BSS_TYPE;
4379 wl->set_bss_type = MAX_BSS_TYPE;
4380 wl->last_tx_hlid = 0;
4382 wl->ap_fw_ps_map = 0;
4384 wl->platform_quirks = 0;
4385 wl->sched_scanning = false;
4386 wl->tx_security_seq = 0;
4387 wl->tx_security_last_seq_lsb = 0;
4388 wl->role_id = WL12XX_INVALID_ROLE_ID;
4389 wl->sta_hlid = WL12XX_INVALID_LINK_ID;
4390 wl->dev_role_id = WL12XX_INVALID_ROLE_ID;
4391 wl->dev_hlid = WL12XX_INVALID_LINK_ID;
4392 setup_timer(&wl->rx_streaming_timer, wl1271_rx_streaming_timer,
4393 (unsigned long) wl);
4395 init_waitqueue_head(&wl->fwlog_waitq);
4397 memset(wl->tx_frames_map, 0, sizeof(wl->tx_frames_map));
4398 for (i = 0; i < ACX_TX_DESCRIPTORS; i++)
4399 wl->tx_frames[i] = NULL;
4401 spin_lock_init(&wl->wl_lock);
4403 wl->state = WL1271_STATE_OFF;
4404 mutex_init(&wl->mutex);
4406 /* Apply default driver configuration. */
4407 wl1271_conf_init(wl);
4409 order = get_order(WL1271_AGGR_BUFFER_SIZE);
4410 wl->aggr_buf = (u8 *)__get_free_pages(GFP_KERNEL, order);
4411 if (!wl->aggr_buf) {
4416 wl->dummy_packet = wl12xx_alloc_dummy_packet(wl);
4417 if (!wl->dummy_packet) {
4422 /* Allocate one page for the FW log */
4423 wl->fwlog = (u8 *)get_zeroed_page(GFP_KERNEL);
4426 goto err_dummy_packet;
4429 /* Register platform device */
4430 ret = platform_device_register(wl->plat_dev);
4432 wl1271_error("couldn't register platform device");
4435 dev_set_drvdata(&wl->plat_dev->dev, wl);
4437 /* Create sysfs file to control bt coex state */
4438 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
4440 wl1271_error("failed to create sysfs file bt_coex_state");
4444 /* Create sysfs file to get HW PG version */
4445 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_hw_pg_ver);
4447 wl1271_error("failed to create sysfs file hw_pg_ver");
4448 goto err_bt_coex_state;
4451 /* Create sysfs file for the FW log */
4452 ret = device_create_bin_file(&wl->plat_dev->dev, &fwlog_attr);
4454 wl1271_error("failed to create sysfs file fwlog");
4461 device_remove_file(&wl->plat_dev->dev, &dev_attr_hw_pg_ver);
4464 device_remove_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
4467 platform_device_unregister(wl->plat_dev);
4470 free_page((unsigned long)wl->fwlog);
4473 dev_kfree_skb(wl->dummy_packet);
4476 free_pages((unsigned long)wl->aggr_buf, order);
4479 destroy_workqueue(wl->freezable_wq);
4482 wl1271_debugfs_exit(wl);
4486 ieee80211_free_hw(hw);
4490 return ERR_PTR(ret);
4492 EXPORT_SYMBOL_GPL(wl1271_alloc_hw);
4494 int wl1271_free_hw(struct wl1271 *wl)
4496 /* Unblock any fwlog readers */
4497 mutex_lock(&wl->mutex);
4498 wl->fwlog_size = -1;
4499 wake_up_interruptible_all(&wl->fwlog_waitq);
4500 mutex_unlock(&wl->mutex);
4502 device_remove_bin_file(&wl->plat_dev->dev, &fwlog_attr);
4504 device_remove_file(&wl->plat_dev->dev, &dev_attr_hw_pg_ver);
4506 device_remove_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
4507 platform_device_unregister(wl->plat_dev);
4508 free_page((unsigned long)wl->fwlog);
4509 dev_kfree_skb(wl->dummy_packet);
4510 free_pages((unsigned long)wl->aggr_buf,
4511 get_order(WL1271_AGGR_BUFFER_SIZE));
4512 kfree(wl->plat_dev);
4514 wl1271_debugfs_exit(wl);
4521 kfree(wl->fw_status);
4522 kfree(wl->tx_res_if);
4523 destroy_workqueue(wl->freezable_wq);
4525 ieee80211_free_hw(wl->hw);
4529 EXPORT_SYMBOL_GPL(wl1271_free_hw);
4531 u32 wl12xx_debug_level = DEBUG_NONE;
4532 EXPORT_SYMBOL_GPL(wl12xx_debug_level);
4533 module_param_named(debug_level, wl12xx_debug_level, uint, S_IRUSR | S_IWUSR);
4534 MODULE_PARM_DESC(debug_level, "wl12xx debugging level");
4536 module_param_named(fwlog, fwlog_param, charp, 0);
4537 MODULE_PARM_DESC(keymap,
4538 "FW logger options: continuous, ondemand, dbgpins or disable");
4540 MODULE_LICENSE("GPL");
4541 MODULE_AUTHOR("Luciano Coelho <coelho@ti.com>");
4542 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");