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 ret = wl12xx_cmd_role_enable(wl, role_type, &wl->role_id);
1873 ret = wl1271_hw_init(wl);
1881 mutex_unlock(&wl->mutex);
1882 /* Unlocking the mutex in the middle of handling is
1883 inherently unsafe. In this case we deem it safe to do,
1884 because we need to let any possibly pending IRQ out of
1885 the system (and while we are WL1271_STATE_OFF the IRQ
1886 work function will not do anything.) Also, any other
1887 possible concurrent operations will fail due to the
1888 current state, hence the wl1271 struct should be safe. */
1889 wl1271_disable_interrupts(wl);
1890 wl1271_flush_deferred_work(wl);
1891 cancel_work_sync(&wl->netstack_work);
1892 mutex_lock(&wl->mutex);
1894 wl1271_power_off(wl);
1898 wl1271_error("firmware boot failed despite %d retries",
1899 WL1271_BOOT_RETRIES);
1904 wl->state = WL1271_STATE_ON;
1905 set_bit(WL1271_FLAG_IF_INITIALIZED, &wl->flags);
1906 wl1271_info("firmware booted (%s)", wl->chip.fw_ver_str);
1908 /* update hw/fw version info in wiphy struct */
1909 wiphy->hw_version = wl->chip.id;
1910 strncpy(wiphy->fw_version, wl->chip.fw_ver_str,
1911 sizeof(wiphy->fw_version));
1914 * Now we know if 11a is supported (info from the NVS), so disable
1915 * 11a channels if not supported
1917 if (!wl->enable_11a)
1918 wiphy->bands[IEEE80211_BAND_5GHZ]->n_channels = 0;
1920 wl1271_debug(DEBUG_MAC80211, "11a is %ssupported",
1921 wl->enable_11a ? "" : "not ");
1924 mutex_unlock(&wl->mutex);
1926 mutex_lock(&wl_list_mutex);
1928 list_add(&wl->list, &wl_list);
1929 mutex_unlock(&wl_list_mutex);
1934 static void __wl1271_op_remove_interface(struct wl1271 *wl,
1935 bool reset_tx_queues)
1939 wl1271_debug(DEBUG_MAC80211, "mac80211 remove interface");
1941 /* because of hardware recovery, we may get here twice */
1942 if (wl->state != WL1271_STATE_ON)
1945 wl1271_info("down");
1947 mutex_lock(&wl_list_mutex);
1948 list_del(&wl->list);
1949 mutex_unlock(&wl_list_mutex);
1951 /* enable dyn ps just in case (if left on due to fw crash etc) */
1952 if (wl->bss_type == BSS_TYPE_STA_BSS)
1953 ieee80211_enable_dyn_ps(wl->vif);
1955 if (wl->scan.state != WL1271_SCAN_STATE_IDLE) {
1956 wl->scan.state = WL1271_SCAN_STATE_IDLE;
1957 memset(wl->scan.scanned_ch, 0, sizeof(wl->scan.scanned_ch));
1958 wl->scan.req = NULL;
1959 ieee80211_scan_completed(wl->hw, true);
1962 if (!test_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags)) {
1963 /* disable active roles */
1964 ret = wl1271_ps_elp_wakeup(wl);
1968 ret = wl12xx_cmd_role_disable(wl, &wl->role_id);
1972 wl1271_ps_elp_sleep(wl);
1975 wl->sta_hlid = WL12XX_INVALID_LINK_ID;
1978 * this must be before the cancel_work calls below, so that the work
1979 * functions don't perform further work.
1981 wl->state = WL1271_STATE_OFF;
1983 mutex_unlock(&wl->mutex);
1985 wl1271_disable_interrupts(wl);
1986 wl1271_flush_deferred_work(wl);
1987 cancel_delayed_work_sync(&wl->scan_complete_work);
1988 cancel_work_sync(&wl->netstack_work);
1989 cancel_work_sync(&wl->tx_work);
1990 del_timer_sync(&wl->rx_streaming_timer);
1991 cancel_work_sync(&wl->rx_streaming_enable_work);
1992 cancel_work_sync(&wl->rx_streaming_disable_work);
1993 cancel_delayed_work_sync(&wl->pspoll_work);
1994 cancel_delayed_work_sync(&wl->elp_work);
1996 mutex_lock(&wl->mutex);
1998 /* let's notify MAC80211 about the remaining pending TX frames */
1999 wl1271_tx_reset(wl, reset_tx_queues);
2000 wl1271_power_off(wl);
2002 memset(wl->bssid, 0, ETH_ALEN);
2003 memset(wl->ssid, 0, IEEE80211_MAX_SSID_LEN + 1);
2005 wl->bss_type = MAX_BSS_TYPE;
2006 wl->set_bss_type = MAX_BSS_TYPE;
2007 wl->band = IEEE80211_BAND_2GHZ;
2010 wl->psm_entry_retry = 0;
2011 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
2012 wl->tx_blocks_available = 0;
2013 wl->tx_allocated_blocks = 0;
2014 wl->tx_results_count = 0;
2015 wl->tx_packets_count = 0;
2016 wl->time_offset = 0;
2017 wl->session_counter = 0;
2018 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
2020 wl1271_free_ap_keys(wl);
2021 memset(wl->ap_hlid_map, 0, sizeof(wl->ap_hlid_map));
2022 wl->ap_fw_ps_map = 0;
2024 wl->sched_scanning = false;
2025 wl->role_id = WL12XX_INVALID_ROLE_ID;
2026 memset(wl->roles_map, 0, sizeof(wl->roles_map));
2027 memset(wl->links_map, 0, sizeof(wl->links_map));
2030 * this is performed after the cancel_work calls and the associated
2031 * mutex_lock, so that wl1271_op_add_interface does not accidentally
2032 * get executed before all these vars have been reset.
2036 wl->tx_blocks_freed = 0;
2038 wl1271_debugfs_reset(wl);
2040 kfree(wl->fw_status);
2041 wl->fw_status = NULL;
2042 kfree(wl->tx_res_if);
2043 wl->tx_res_if = NULL;
2044 kfree(wl->target_mem_map);
2045 wl->target_mem_map = NULL;
2048 static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
2049 struct ieee80211_vif *vif)
2051 struct wl1271 *wl = hw->priv;
2053 mutex_lock(&wl->mutex);
2055 * wl->vif can be null here if someone shuts down the interface
2056 * just when hardware recovery has been started.
2059 WARN_ON(wl->vif != vif);
2060 __wl1271_op_remove_interface(wl, true);
2063 mutex_unlock(&wl->mutex);
2064 cancel_work_sync(&wl->recovery_work);
2067 static int wl1271_dummy_join(struct wl1271 *wl)
2070 /* we need to use a dummy BSSID for now */
2071 static const u8 dummy_bssid[ETH_ALEN] = { 0x0b, 0xad, 0xde,
2074 memcpy(wl->bssid, dummy_bssid, ETH_ALEN);
2076 ret = wl12xx_cmd_role_start_sta(wl);
2080 set_bit(WL1271_FLAG_JOINED, &wl->flags);
2086 static int wl1271_join(struct wl1271 *wl, bool set_assoc)
2091 * One of the side effects of the JOIN command is that is clears
2092 * WPA/WPA2 keys from the chipset. Performing a JOIN while associated
2093 * to a WPA/WPA2 access point will therefore kill the data-path.
2094 * Currently the only valid scenario for JOIN during association
2095 * is on roaming, in which case we will also be given new keys.
2096 * Keep the below message for now, unless it starts bothering
2097 * users who really like to roam a lot :)
2099 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
2100 wl1271_info("JOIN while associated.");
2103 set_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
2105 ret = wl12xx_cmd_role_start_sta(wl);
2109 set_bit(WL1271_FLAG_JOINED, &wl->flags);
2111 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
2115 * The join command disable the keep-alive mode, shut down its process,
2116 * and also clear the template config, so we need to reset it all after
2117 * the join. The acx_aid starts the keep-alive process, and the order
2118 * of the commands below is relevant.
2120 ret = wl1271_acx_keep_alive_mode(wl, true);
2124 ret = wl1271_acx_aid(wl, wl->aid);
2128 ret = wl1271_cmd_build_klv_null_data(wl);
2132 ret = wl1271_acx_keep_alive_config(wl, CMD_TEMPL_KLV_IDX_NULL_DATA,
2133 ACX_KEEP_ALIVE_TPL_VALID);
2141 static int wl1271_unjoin(struct wl1271 *wl)
2145 /* to stop listening to a channel, we disconnect */
2146 ret = wl12xx_cmd_role_stop_sta(wl);
2150 clear_bit(WL1271_FLAG_JOINED, &wl->flags);
2151 memset(wl->bssid, 0, ETH_ALEN);
2153 /* reset TX security counters on a clean disconnect */
2154 wl->tx_security_last_seq_lsb = 0;
2155 wl->tx_security_seq = 0;
2161 static void wl1271_set_band_rate(struct wl1271 *wl)
2163 if (wl->band == IEEE80211_BAND_2GHZ)
2164 wl->basic_rate_set = wl->conf.tx.basic_rate;
2166 wl->basic_rate_set = wl->conf.tx.basic_rate_5;
2169 static int wl1271_sta_handle_idle(struct wl1271 *wl, bool idle)
2174 if (test_bit(WL1271_FLAG_JOINED, &wl->flags)) {
2175 ret = wl1271_unjoin(wl);
2179 wl->rate_set = wl1271_tx_min_rate_get(wl);
2180 ret = wl1271_acx_sta_rate_policies(wl);
2183 ret = wl1271_acx_keep_alive_config(
2184 wl, CMD_TEMPL_KLV_IDX_NULL_DATA,
2185 ACX_KEEP_ALIVE_TPL_INVALID);
2188 set_bit(WL1271_FLAG_IDLE, &wl->flags);
2190 /* increment the session counter */
2191 wl->session_counter++;
2192 if (wl->session_counter >= SESSION_COUNTER_MAX)
2193 wl->session_counter = 0;
2195 /* The current firmware only supports sched_scan in idle */
2196 if (wl->sched_scanning) {
2197 wl1271_scan_sched_scan_stop(wl);
2198 ieee80211_sched_scan_stopped(wl->hw);
2201 ret = wl1271_dummy_join(wl);
2204 clear_bit(WL1271_FLAG_IDLE, &wl->flags);
2211 static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed)
2213 struct wl1271 *wl = hw->priv;
2214 struct ieee80211_conf *conf = &hw->conf;
2215 int channel, ret = 0;
2218 channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
2220 wl1271_debug(DEBUG_MAC80211, "mac80211 config ch %d psm %s power %d %s"
2223 conf->flags & IEEE80211_CONF_PS ? "on" : "off",
2225 conf->flags & IEEE80211_CONF_IDLE ? "idle" : "in use",
2229 * mac80211 will go to idle nearly immediately after transmitting some
2230 * frames, such as the deauth. To make sure those frames reach the air,
2231 * wait here until the TX queue is fully flushed.
2233 if ((changed & IEEE80211_CONF_CHANGE_IDLE) &&
2234 (conf->flags & IEEE80211_CONF_IDLE))
2235 wl1271_tx_flush(wl);
2237 mutex_lock(&wl->mutex);
2239 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2240 /* we support configuring the channel and band while off */
2241 if ((changed & IEEE80211_CONF_CHANGE_CHANNEL)) {
2242 wl->band = conf->channel->band;
2243 wl->channel = channel;
2246 if ((changed & IEEE80211_CONF_CHANGE_POWER))
2247 wl->power_level = conf->power_level;
2252 is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
2254 ret = wl1271_ps_elp_wakeup(wl);
2258 /* if the channel changes while joined, join again */
2259 if (changed & IEEE80211_CONF_CHANGE_CHANNEL &&
2260 ((wl->band != conf->channel->band) ||
2261 (wl->channel != channel))) {
2262 wl->band = conf->channel->band;
2263 wl->channel = channel;
2267 * FIXME: the mac80211 should really provide a fixed
2268 * rate to use here. for now, just use the smallest
2269 * possible rate for the band as a fixed rate for
2270 * association frames and other control messages.
2272 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
2273 wl1271_set_band_rate(wl);
2275 wl->basic_rate = wl1271_tx_min_rate_get(wl);
2276 ret = wl1271_acx_sta_rate_policies(wl);
2278 wl1271_warning("rate policy for channel "
2281 if (test_bit(WL1271_FLAG_JOINED, &wl->flags)) {
2282 ret = wl1271_join(wl, false);
2284 wl1271_warning("cmd join on channel "
2290 if (changed & IEEE80211_CONF_CHANGE_IDLE && !is_ap) {
2291 ret = wl1271_sta_handle_idle(wl,
2292 conf->flags & IEEE80211_CONF_IDLE);
2294 wl1271_warning("idle mode change failed %d", ret);
2298 * if mac80211 changes the PSM mode, make sure the mode is not
2299 * incorrectly changed after the pspoll failure active window.
2301 if (changed & IEEE80211_CONF_CHANGE_PS)
2302 clear_bit(WL1271_FLAG_PSPOLL_FAILURE, &wl->flags);
2304 if (conf->flags & IEEE80211_CONF_PS &&
2305 !test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
2306 set_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
2309 * We enter PSM only if we're already associated.
2310 * If we're not, we'll enter it when joining an SSID,
2311 * through the bss_info_changed() hook.
2313 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags)) {
2314 wl1271_debug(DEBUG_PSM, "psm enabled");
2315 ret = wl1271_ps_set_mode(wl, STATION_POWER_SAVE_MODE,
2316 wl->basic_rate, true);
2318 } else if (!(conf->flags & IEEE80211_CONF_PS) &&
2319 test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
2320 wl1271_debug(DEBUG_PSM, "psm disabled");
2322 clear_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
2324 if (test_bit(WL1271_FLAG_PSM, &wl->flags))
2325 ret = wl1271_ps_set_mode(wl, STATION_ACTIVE_MODE,
2326 wl->basic_rate, true);
2329 if (conf->power_level != wl->power_level) {
2330 ret = wl1271_acx_tx_power(wl, conf->power_level);
2334 wl->power_level = conf->power_level;
2338 wl1271_ps_elp_sleep(wl);
2341 mutex_unlock(&wl->mutex);
2346 struct wl1271_filter_params {
2349 u8 mc_list[ACX_MC_ADDRESS_GROUP_MAX][ETH_ALEN];
2352 static u64 wl1271_op_prepare_multicast(struct ieee80211_hw *hw,
2353 struct netdev_hw_addr_list *mc_list)
2355 struct wl1271_filter_params *fp;
2356 struct netdev_hw_addr *ha;
2357 struct wl1271 *wl = hw->priv;
2359 if (unlikely(wl->state == WL1271_STATE_OFF))
2362 fp = kzalloc(sizeof(*fp), GFP_ATOMIC);
2364 wl1271_error("Out of memory setting filters.");
2368 /* update multicast filtering parameters */
2369 fp->mc_list_length = 0;
2370 if (netdev_hw_addr_list_count(mc_list) > ACX_MC_ADDRESS_GROUP_MAX) {
2371 fp->enabled = false;
2374 netdev_hw_addr_list_for_each(ha, mc_list) {
2375 memcpy(fp->mc_list[fp->mc_list_length],
2376 ha->addr, ETH_ALEN);
2377 fp->mc_list_length++;
2381 return (u64)(unsigned long)fp;
2384 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
2387 FIF_BCN_PRBRESP_PROMISC | \
2391 static void wl1271_op_configure_filter(struct ieee80211_hw *hw,
2392 unsigned int changed,
2393 unsigned int *total, u64 multicast)
2395 struct wl1271_filter_params *fp = (void *)(unsigned long)multicast;
2396 struct wl1271 *wl = hw->priv;
2399 wl1271_debug(DEBUG_MAC80211, "mac80211 configure filter changed %x"
2400 " total %x", changed, *total);
2402 mutex_lock(&wl->mutex);
2404 *total &= WL1271_SUPPORTED_FILTERS;
2405 changed &= WL1271_SUPPORTED_FILTERS;
2407 if (unlikely(wl->state == WL1271_STATE_OFF))
2410 ret = wl1271_ps_elp_wakeup(wl);
2414 if (wl->bss_type != BSS_TYPE_AP_BSS) {
2415 if (*total & FIF_ALLMULTI)
2416 ret = wl1271_acx_group_address_tbl(wl, false, NULL, 0);
2418 ret = wl1271_acx_group_address_tbl(wl, fp->enabled,
2420 fp->mc_list_length);
2426 * the fw doesn't provide an api to configure the filters. instead,
2427 * the filters configuration is based on the active roles / ROC
2432 wl1271_ps_elp_sleep(wl);
2435 mutex_unlock(&wl->mutex);
2439 static int wl1271_record_ap_key(struct wl1271 *wl, u8 id, u8 key_type,
2440 u8 key_size, const u8 *key, u8 hlid, u32 tx_seq_32,
2443 struct wl1271_ap_key *ap_key;
2446 wl1271_debug(DEBUG_CRYPT, "record ap key id %d", (int)id);
2448 if (key_size > MAX_KEY_SIZE)
2452 * Find next free entry in ap_keys. Also check we are not replacing
2455 for (i = 0; i < MAX_NUM_KEYS; i++) {
2456 if (wl->recorded_ap_keys[i] == NULL)
2459 if (wl->recorded_ap_keys[i]->id == id) {
2460 wl1271_warning("trying to record key replacement");
2465 if (i == MAX_NUM_KEYS)
2468 ap_key = kzalloc(sizeof(*ap_key), GFP_KERNEL);
2473 ap_key->key_type = key_type;
2474 ap_key->key_size = key_size;
2475 memcpy(ap_key->key, key, key_size);
2476 ap_key->hlid = hlid;
2477 ap_key->tx_seq_32 = tx_seq_32;
2478 ap_key->tx_seq_16 = tx_seq_16;
2480 wl->recorded_ap_keys[i] = ap_key;
2484 static void wl1271_free_ap_keys(struct wl1271 *wl)
2488 for (i = 0; i < MAX_NUM_KEYS; i++) {
2489 kfree(wl->recorded_ap_keys[i]);
2490 wl->recorded_ap_keys[i] = NULL;
2494 static int wl1271_ap_init_hwenc(struct wl1271 *wl)
2497 struct wl1271_ap_key *key;
2498 bool wep_key_added = false;
2500 for (i = 0; i < MAX_NUM_KEYS; i++) {
2501 if (wl->recorded_ap_keys[i] == NULL)
2504 key = wl->recorded_ap_keys[i];
2505 ret = wl1271_cmd_set_ap_key(wl, KEY_ADD_OR_REPLACE,
2506 key->id, key->key_type,
2507 key->key_size, key->key,
2508 key->hlid, key->tx_seq_32,
2513 if (key->key_type == KEY_WEP)
2514 wep_key_added = true;
2517 if (wep_key_added) {
2518 ret = wl12xx_cmd_set_default_wep_key(wl, wl->default_key,
2519 WL1271_AP_BROADCAST_HLID);
2525 wl1271_free_ap_keys(wl);
2529 static int wl1271_set_key(struct wl1271 *wl, u16 action, u8 id, u8 key_type,
2530 u8 key_size, const u8 *key, u32 tx_seq_32,
2531 u16 tx_seq_16, struct ieee80211_sta *sta)
2534 bool is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
2537 struct wl1271_station *wl_sta;
2541 wl_sta = (struct wl1271_station *)sta->drv_priv;
2542 hlid = wl_sta->hlid;
2544 hlid = WL1271_AP_BROADCAST_HLID;
2547 if (!test_bit(WL1271_FLAG_AP_STARTED, &wl->flags)) {
2549 * We do not support removing keys after AP shutdown.
2550 * Pretend we do to make mac80211 happy.
2552 if (action != KEY_ADD_OR_REPLACE)
2555 ret = wl1271_record_ap_key(wl, id,
2557 key, hlid, tx_seq_32,
2560 ret = wl1271_cmd_set_ap_key(wl, action,
2561 id, key_type, key_size,
2562 key, hlid, tx_seq_32,
2570 static const u8 bcast_addr[ETH_ALEN] = {
2571 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
2574 addr = sta ? sta->addr : bcast_addr;
2576 if (is_zero_ether_addr(addr)) {
2577 /* We dont support TX only encryption */
2581 /* The wl1271 does not allow to remove unicast keys - they
2582 will be cleared automatically on next CMD_JOIN. Ignore the
2583 request silently, as we dont want the mac80211 to emit
2584 an error message. */
2585 if (action == KEY_REMOVE && !is_broadcast_ether_addr(addr))
2588 ret = wl1271_cmd_set_sta_key(wl, action,
2589 id, key_type, key_size,
2590 key, addr, tx_seq_32,
2595 /* the default WEP key needs to be configured at least once */
2596 if (key_type == KEY_WEP) {
2597 ret = wl12xx_cmd_set_default_wep_key(wl,
2608 static int wl1271_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
2609 struct ieee80211_vif *vif,
2610 struct ieee80211_sta *sta,
2611 struct ieee80211_key_conf *key_conf)
2613 struct wl1271 *wl = hw->priv;
2619 wl1271_debug(DEBUG_MAC80211, "mac80211 set key");
2621 wl1271_debug(DEBUG_CRYPT, "CMD: 0x%x sta: %p", cmd, sta);
2622 wl1271_debug(DEBUG_CRYPT, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
2623 key_conf->cipher, key_conf->keyidx,
2624 key_conf->keylen, key_conf->flags);
2625 wl1271_dump(DEBUG_CRYPT, "KEY: ", key_conf->key, key_conf->keylen);
2627 mutex_lock(&wl->mutex);
2629 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2634 ret = wl1271_ps_elp_wakeup(wl);
2638 switch (key_conf->cipher) {
2639 case WLAN_CIPHER_SUITE_WEP40:
2640 case WLAN_CIPHER_SUITE_WEP104:
2643 key_conf->hw_key_idx = key_conf->keyidx;
2645 case WLAN_CIPHER_SUITE_TKIP:
2646 key_type = KEY_TKIP;
2648 key_conf->hw_key_idx = key_conf->keyidx;
2649 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
2650 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
2652 case WLAN_CIPHER_SUITE_CCMP:
2655 key_conf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
2656 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
2657 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
2659 case WL1271_CIPHER_SUITE_GEM:
2661 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
2662 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
2665 wl1271_error("Unknown key algo 0x%x", key_conf->cipher);
2673 ret = wl1271_set_key(wl, KEY_ADD_OR_REPLACE,
2674 key_conf->keyidx, key_type,
2675 key_conf->keylen, key_conf->key,
2676 tx_seq_32, tx_seq_16, sta);
2678 wl1271_error("Could not add or replace key");
2684 ret = wl1271_set_key(wl, KEY_REMOVE,
2685 key_conf->keyidx, key_type,
2686 key_conf->keylen, key_conf->key,
2689 wl1271_error("Could not remove key");
2695 wl1271_error("Unsupported key cmd 0x%x", cmd);
2701 wl1271_ps_elp_sleep(wl);
2704 mutex_unlock(&wl->mutex);
2709 static int wl1271_op_hw_scan(struct ieee80211_hw *hw,
2710 struct ieee80211_vif *vif,
2711 struct cfg80211_scan_request *req)
2713 struct wl1271 *wl = hw->priv;
2718 wl1271_debug(DEBUG_MAC80211, "mac80211 hw scan");
2721 ssid = req->ssids[0].ssid;
2722 len = req->ssids[0].ssid_len;
2725 mutex_lock(&wl->mutex);
2727 if (wl->state == WL1271_STATE_OFF) {
2729 * We cannot return -EBUSY here because cfg80211 will expect
2730 * a call to ieee80211_scan_completed if we do - in this case
2731 * there won't be any call.
2737 ret = wl1271_ps_elp_wakeup(wl);
2741 ret = wl1271_scan(hw->priv, ssid, len, req);
2743 wl1271_ps_elp_sleep(wl);
2746 mutex_unlock(&wl->mutex);
2751 static void wl1271_op_cancel_hw_scan(struct ieee80211_hw *hw,
2752 struct ieee80211_vif *vif)
2754 struct wl1271 *wl = hw->priv;
2757 wl1271_debug(DEBUG_MAC80211, "mac80211 cancel hw scan");
2759 mutex_lock(&wl->mutex);
2761 if (wl->state == WL1271_STATE_OFF)
2764 if (wl->scan.state == WL1271_SCAN_STATE_IDLE)
2767 ret = wl1271_ps_elp_wakeup(wl);
2771 if (wl->scan.state != WL1271_SCAN_STATE_DONE) {
2772 ret = wl1271_scan_stop(wl);
2776 wl->scan.state = WL1271_SCAN_STATE_IDLE;
2777 memset(wl->scan.scanned_ch, 0, sizeof(wl->scan.scanned_ch));
2778 wl->scan.req = NULL;
2779 ieee80211_scan_completed(wl->hw, true);
2782 wl1271_ps_elp_sleep(wl);
2784 mutex_unlock(&wl->mutex);
2786 cancel_delayed_work_sync(&wl->scan_complete_work);
2789 static int wl1271_op_sched_scan_start(struct ieee80211_hw *hw,
2790 struct ieee80211_vif *vif,
2791 struct cfg80211_sched_scan_request *req,
2792 struct ieee80211_sched_scan_ies *ies)
2794 struct wl1271 *wl = hw->priv;
2797 wl1271_debug(DEBUG_MAC80211, "wl1271_op_sched_scan_start");
2799 mutex_lock(&wl->mutex);
2801 ret = wl1271_ps_elp_wakeup(wl);
2805 ret = wl1271_scan_sched_scan_config(wl, req, ies);
2809 ret = wl1271_scan_sched_scan_start(wl);
2813 wl->sched_scanning = true;
2816 wl1271_ps_elp_sleep(wl);
2818 mutex_unlock(&wl->mutex);
2822 static void wl1271_op_sched_scan_stop(struct ieee80211_hw *hw,
2823 struct ieee80211_vif *vif)
2825 struct wl1271 *wl = hw->priv;
2828 wl1271_debug(DEBUG_MAC80211, "wl1271_op_sched_scan_stop");
2830 mutex_lock(&wl->mutex);
2832 ret = wl1271_ps_elp_wakeup(wl);
2836 wl1271_scan_sched_scan_stop(wl);
2838 wl1271_ps_elp_sleep(wl);
2840 mutex_unlock(&wl->mutex);
2843 static int wl1271_op_set_frag_threshold(struct ieee80211_hw *hw, u32 value)
2845 struct wl1271 *wl = hw->priv;
2848 mutex_lock(&wl->mutex);
2850 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2855 ret = wl1271_ps_elp_wakeup(wl);
2859 ret = wl1271_acx_frag_threshold(wl, value);
2861 wl1271_warning("wl1271_op_set_frag_threshold failed: %d", ret);
2863 wl1271_ps_elp_sleep(wl);
2866 mutex_unlock(&wl->mutex);
2871 static int wl1271_op_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
2873 struct wl1271 *wl = hw->priv;
2876 mutex_lock(&wl->mutex);
2878 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2883 ret = wl1271_ps_elp_wakeup(wl);
2887 ret = wl1271_acx_rts_threshold(wl, value);
2889 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret);
2891 wl1271_ps_elp_sleep(wl);
2894 mutex_unlock(&wl->mutex);
2899 static int wl1271_ssid_set(struct wl1271 *wl, struct sk_buff *skb,
2903 const u8 *ptr = cfg80211_find_ie(WLAN_EID_SSID, skb->data + offset,
2907 wl1271_error("No SSID in IEs!");
2912 if (ssid_len > IEEE80211_MAX_SSID_LEN) {
2913 wl1271_error("SSID is too long!");
2917 wl->ssid_len = ssid_len;
2918 memcpy(wl->ssid, ptr+2, ssid_len);
2922 static int wl1271_bss_erp_info_changed(struct wl1271 *wl,
2923 struct ieee80211_bss_conf *bss_conf,
2928 if (changed & BSS_CHANGED_ERP_SLOT) {
2929 if (bss_conf->use_short_slot)
2930 ret = wl1271_acx_slot(wl, SLOT_TIME_SHORT);
2932 ret = wl1271_acx_slot(wl, SLOT_TIME_LONG);
2934 wl1271_warning("Set slot time failed %d", ret);
2939 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
2940 if (bss_conf->use_short_preamble)
2941 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_SHORT);
2943 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_LONG);
2946 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
2947 if (bss_conf->use_cts_prot)
2948 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_ENABLE);
2950 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_DISABLE);
2952 wl1271_warning("Set ctsprotect failed %d", ret);
2961 static int wl1271_bss_beacon_info_changed(struct wl1271 *wl,
2962 struct ieee80211_vif *vif,
2963 struct ieee80211_bss_conf *bss_conf,
2966 bool is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
2969 if ((changed & BSS_CHANGED_BEACON_INT)) {
2970 wl1271_debug(DEBUG_MASTER, "beacon interval updated: %d",
2971 bss_conf->beacon_int);
2973 wl->beacon_int = bss_conf->beacon_int;
2976 if ((changed & BSS_CHANGED_BEACON)) {
2977 struct ieee80211_hdr *hdr;
2978 int ieoffset = offsetof(struct ieee80211_mgmt,
2980 struct sk_buff *beacon = ieee80211_beacon_get(wl->hw, vif);
2986 wl1271_debug(DEBUG_MASTER, "beacon updated");
2988 ret = wl1271_ssid_set(wl, beacon, ieoffset);
2990 dev_kfree_skb(beacon);
2993 tmpl_id = is_ap ? CMD_TEMPL_AP_BEACON :
2995 ret = wl1271_cmd_template_set(wl, tmpl_id,
2998 wl1271_tx_min_rate_get(wl));
3000 dev_kfree_skb(beacon);
3004 hdr = (struct ieee80211_hdr *) beacon->data;
3005 hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
3006 IEEE80211_STYPE_PROBE_RESP);
3008 tmpl_id = is_ap ? CMD_TEMPL_AP_PROBE_RESPONSE :
3009 CMD_TEMPL_PROBE_RESPONSE;
3010 ret = wl1271_cmd_template_set(wl,
3014 wl1271_tx_min_rate_get(wl));
3015 dev_kfree_skb(beacon);
3024 /* AP mode changes */
3025 static void wl1271_bss_info_changed_ap(struct wl1271 *wl,
3026 struct ieee80211_vif *vif,
3027 struct ieee80211_bss_conf *bss_conf,
3032 if ((changed & BSS_CHANGED_BASIC_RATES)) {
3033 u32 rates = bss_conf->basic_rates;
3035 wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl, rates);
3036 wl->basic_rate = wl1271_tx_min_rate_get(wl);
3038 ret = wl1271_init_ap_rates(wl);
3040 wl1271_error("AP rate policy change failed %d", ret);
3044 ret = wl1271_ap_init_templates(wl);
3049 ret = wl1271_bss_beacon_info_changed(wl, vif, bss_conf, changed);
3053 if ((changed & BSS_CHANGED_BEACON_ENABLED)) {
3054 if (bss_conf->enable_beacon) {
3055 if (!test_bit(WL1271_FLAG_AP_STARTED, &wl->flags)) {
3056 ret = wl12xx_cmd_role_start_ap(wl);
3060 set_bit(WL1271_FLAG_AP_STARTED, &wl->flags);
3061 wl1271_debug(DEBUG_AP, "started AP");
3063 ret = wl1271_ap_init_hwenc(wl);
3068 if (test_bit(WL1271_FLAG_AP_STARTED, &wl->flags)) {
3069 ret = wl12xx_cmd_role_stop_ap(wl);
3073 clear_bit(WL1271_FLAG_AP_STARTED, &wl->flags);
3074 wl1271_debug(DEBUG_AP, "stopped AP");
3079 ret = wl1271_bss_erp_info_changed(wl, bss_conf, changed);
3086 /* STA/IBSS mode changes */
3087 static void wl1271_bss_info_changed_sta(struct wl1271 *wl,
3088 struct ieee80211_vif *vif,
3089 struct ieee80211_bss_conf *bss_conf,
3092 bool do_join = false, set_assoc = false;
3093 bool is_ibss = (wl->bss_type == BSS_TYPE_IBSS);
3094 u32 sta_rate_set = 0;
3096 struct ieee80211_sta *sta;
3097 bool sta_exists = false;
3098 struct ieee80211_sta_ht_cap sta_ht_cap;
3101 ret = wl1271_bss_beacon_info_changed(wl, vif, bss_conf,
3107 if ((changed & BSS_CHANGED_BEACON_INT) && is_ibss)
3110 /* Need to update the SSID (for filtering etc) */
3111 if ((changed & BSS_CHANGED_BEACON) && is_ibss)
3114 if ((changed & BSS_CHANGED_BEACON_ENABLED) && is_ibss) {
3115 wl1271_debug(DEBUG_ADHOC, "ad-hoc beaconing: %s",
3116 bss_conf->enable_beacon ? "enabled" : "disabled");
3118 if (bss_conf->enable_beacon)
3119 wl->set_bss_type = BSS_TYPE_IBSS;
3121 wl->set_bss_type = BSS_TYPE_STA_BSS;
3125 if ((changed & BSS_CHANGED_CQM)) {
3126 bool enable = false;
3127 if (bss_conf->cqm_rssi_thold)
3129 ret = wl1271_acx_rssi_snr_trigger(wl, enable,
3130 bss_conf->cqm_rssi_thold,
3131 bss_conf->cqm_rssi_hyst);
3134 wl->rssi_thold = bss_conf->cqm_rssi_thold;
3137 if ((changed & BSS_CHANGED_BSSID) &&
3139 * Now we know the correct bssid, so we send a new join command
3140 * and enable the BSSID filter
3142 memcmp(wl->bssid, bss_conf->bssid, ETH_ALEN)) {
3143 memcpy(wl->bssid, bss_conf->bssid, ETH_ALEN);
3145 if (!is_zero_ether_addr(wl->bssid)) {
3146 ret = wl1271_cmd_build_null_data(wl);
3150 ret = wl1271_build_qos_null_data(wl);
3154 /* Need to update the BSSID (for filtering etc) */
3160 sta = ieee80211_find_sta(vif, bss_conf->bssid);
3162 /* save the supp_rates of the ap */
3163 sta_rate_set = sta->supp_rates[wl->hw->conf.channel->band];
3164 if (sta->ht_cap.ht_supported)
3166 (sta->ht_cap.mcs.rx_mask[0] << HW_HT_RATES_OFFSET);
3167 sta_ht_cap = sta->ht_cap;
3173 /* handle new association with HT and HT information change */
3174 if ((changed & BSS_CHANGED_HT) &&
3175 (bss_conf->channel_type != NL80211_CHAN_NO_HT)) {
3176 ret = wl1271_acx_set_ht_capabilities(wl, &sta_ht_cap,
3179 wl1271_warning("Set ht cap true failed %d",
3183 ret = wl1271_acx_set_ht_information(wl,
3184 bss_conf->ht_operation_mode);
3186 wl1271_warning("Set ht information failed %d",
3191 /* handle new association without HT and disassociation */
3192 else if (changed & BSS_CHANGED_ASSOC) {
3193 ret = wl1271_acx_set_ht_capabilities(wl, &sta_ht_cap,
3196 wl1271_warning("Set ht cap false failed %d",
3203 if ((changed & BSS_CHANGED_ASSOC)) {
3204 if (bss_conf->assoc) {
3207 wl->aid = bss_conf->aid;
3210 wl->ps_poll_failures = 0;
3213 * use basic rates from AP, and determine lowest rate
3214 * to use with control frames.
3216 rates = bss_conf->basic_rates;
3217 wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl,
3219 wl->basic_rate = wl1271_tx_min_rate_get(wl);
3221 wl->rate_set = wl1271_tx_enabled_rates_get(wl,
3223 ret = wl1271_acx_sta_rate_policies(wl);
3228 * with wl1271, we don't need to update the
3229 * beacon_int and dtim_period, because the firmware
3230 * updates it by itself when the first beacon is
3231 * received after a join.
3233 ret = wl1271_cmd_build_ps_poll(wl, wl->aid);
3238 * Get a template for hardware connection maintenance
3240 dev_kfree_skb(wl->probereq);
3241 wl->probereq = wl1271_cmd_build_ap_probe_req(wl, NULL);
3242 ieoffset = offsetof(struct ieee80211_mgmt,
3243 u.probe_req.variable);
3244 wl1271_ssid_set(wl, wl->probereq, ieoffset);
3246 /* enable the connection monitoring feature */
3247 ret = wl1271_acx_conn_monit_params(wl, true);
3251 /* If we want to go in PSM but we're not there yet */
3252 if (test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags) &&
3253 !test_bit(WL1271_FLAG_PSM, &wl->flags)) {
3254 enum wl1271_cmd_ps_mode mode;
3256 mode = STATION_POWER_SAVE_MODE;
3257 ret = wl1271_ps_set_mode(wl, mode,
3264 /* use defaults when not associated */
3266 !!test_and_clear_bit(WL1271_FLAG_STA_ASSOCIATED,
3268 clear_bit(WL1271_FLAG_STA_STATE_SENT, &wl->flags);
3271 /* free probe-request template */
3272 dev_kfree_skb(wl->probereq);
3273 wl->probereq = NULL;
3275 /* re-enable dynamic ps - just in case */
3276 ieee80211_enable_dyn_ps(wl->vif);
3278 /* revert back to minimum rates for the current band */
3279 wl1271_set_band_rate(wl);
3280 wl->basic_rate = wl1271_tx_min_rate_get(wl);
3281 ret = wl1271_acx_sta_rate_policies(wl);
3285 /* disable connection monitor features */
3286 ret = wl1271_acx_conn_monit_params(wl, false);
3288 /* Disable the keep-alive feature */
3289 ret = wl1271_acx_keep_alive_mode(wl, false);
3293 /* restore the bssid filter and go to dummy bssid */
3296 wl1271_dummy_join(wl);
3301 if (changed & BSS_CHANGED_IBSS) {
3302 wl1271_debug(DEBUG_ADHOC, "ibss_joined: %d",
3303 bss_conf->ibss_joined);
3305 if (bss_conf->ibss_joined) {
3306 u32 rates = bss_conf->basic_rates;
3307 wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl,
3309 wl->basic_rate = wl1271_tx_min_rate_get(wl);
3311 /* by default, use 11b rates */
3312 wl->rate_set = CONF_TX_IBSS_DEFAULT_RATES;
3313 ret = wl1271_acx_sta_rate_policies(wl);
3319 ret = wl1271_bss_erp_info_changed(wl, bss_conf, changed);
3323 if (changed & BSS_CHANGED_ARP_FILTER) {
3324 __be32 addr = bss_conf->arp_addr_list[0];
3325 WARN_ON(wl->bss_type != BSS_TYPE_STA_BSS);
3327 if (bss_conf->arp_addr_cnt == 1 &&
3328 bss_conf->arp_filter_enabled) {
3330 * The template should have been configured only upon
3331 * association. however, it seems that the correct ip
3332 * isn't being set (when sending), so we have to
3333 * reconfigure the template upon every ip change.
3335 ret = wl1271_cmd_build_arp_rsp(wl, addr);
3337 wl1271_warning("build arp rsp failed: %d", ret);
3341 ret = wl1271_acx_arp_ip_filter(wl,
3342 ACX_ARP_FILTER_ARP_FILTERING,
3345 ret = wl1271_acx_arp_ip_filter(wl, 0, addr);
3352 ret = wl1271_join(wl, set_assoc);
3354 wl1271_warning("cmd join failed %d", ret);
3357 wl1271_check_operstate(wl, ieee80211_get_operstate(vif));
3364 static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
3365 struct ieee80211_vif *vif,
3366 struct ieee80211_bss_conf *bss_conf,
3369 struct wl1271 *wl = hw->priv;
3370 bool is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
3373 wl1271_debug(DEBUG_MAC80211, "mac80211 bss info changed 0x%x",
3376 mutex_lock(&wl->mutex);
3378 if (unlikely(wl->state == WL1271_STATE_OFF))
3381 ret = wl1271_ps_elp_wakeup(wl);
3386 wl1271_bss_info_changed_ap(wl, vif, bss_conf, changed);
3388 wl1271_bss_info_changed_sta(wl, vif, bss_conf, changed);
3390 wl1271_ps_elp_sleep(wl);
3393 mutex_unlock(&wl->mutex);
3396 static int wl1271_op_conf_tx(struct ieee80211_hw *hw, u16 queue,
3397 const struct ieee80211_tx_queue_params *params)
3399 struct wl1271 *wl = hw->priv;
3403 mutex_lock(&wl->mutex);
3405 wl1271_debug(DEBUG_MAC80211, "mac80211 conf tx %d", queue);
3408 ps_scheme = CONF_PS_SCHEME_UPSD_TRIGGER;
3410 ps_scheme = CONF_PS_SCHEME_LEGACY;
3412 if (wl->state == WL1271_STATE_OFF) {
3414 * If the state is off, the parameters will be recorded and
3415 * configured on init. This happens in AP-mode.
3417 struct conf_tx_ac_category *conf_ac =
3418 &wl->conf.tx.ac_conf[wl1271_tx_get_queue(queue)];
3419 struct conf_tx_tid *conf_tid =
3420 &wl->conf.tx.tid_conf[wl1271_tx_get_queue(queue)];
3422 conf_ac->ac = wl1271_tx_get_queue(queue);
3423 conf_ac->cw_min = (u8)params->cw_min;
3424 conf_ac->cw_max = params->cw_max;
3425 conf_ac->aifsn = params->aifs;
3426 conf_ac->tx_op_limit = params->txop << 5;
3428 conf_tid->queue_id = wl1271_tx_get_queue(queue);
3429 conf_tid->channel_type = CONF_CHANNEL_TYPE_EDCF;
3430 conf_tid->tsid = wl1271_tx_get_queue(queue);
3431 conf_tid->ps_scheme = ps_scheme;
3432 conf_tid->ack_policy = CONF_ACK_POLICY_LEGACY;
3433 conf_tid->apsd_conf[0] = 0;
3434 conf_tid->apsd_conf[1] = 0;
3438 ret = wl1271_ps_elp_wakeup(wl);
3443 * the txop is confed in units of 32us by the mac80211,
3446 ret = wl1271_acx_ac_cfg(wl, wl1271_tx_get_queue(queue),
3447 params->cw_min, params->cw_max,
3448 params->aifs, params->txop << 5);
3452 ret = wl1271_acx_tid_cfg(wl, wl1271_tx_get_queue(queue),
3453 CONF_CHANNEL_TYPE_EDCF,
3454 wl1271_tx_get_queue(queue),
3455 ps_scheme, CONF_ACK_POLICY_LEGACY,
3459 wl1271_ps_elp_sleep(wl);
3462 mutex_unlock(&wl->mutex);
3467 static u64 wl1271_op_get_tsf(struct ieee80211_hw *hw)
3470 struct wl1271 *wl = hw->priv;
3471 u64 mactime = ULLONG_MAX;
3474 wl1271_debug(DEBUG_MAC80211, "mac80211 get tsf");
3476 mutex_lock(&wl->mutex);
3478 if (unlikely(wl->state == WL1271_STATE_OFF))
3481 ret = wl1271_ps_elp_wakeup(wl);
3485 ret = wl1271_acx_tsf_info(wl, &mactime);
3490 wl1271_ps_elp_sleep(wl);
3493 mutex_unlock(&wl->mutex);
3497 static int wl1271_op_get_survey(struct ieee80211_hw *hw, int idx,
3498 struct survey_info *survey)
3500 struct wl1271 *wl = hw->priv;
3501 struct ieee80211_conf *conf = &hw->conf;
3506 survey->channel = conf->channel;
3507 survey->filled = SURVEY_INFO_NOISE_DBM;
3508 survey->noise = wl->noise;
3513 static int wl1271_allocate_sta(struct wl1271 *wl,
3514 struct ieee80211_sta *sta,
3517 struct wl1271_station *wl_sta;
3520 id = find_first_zero_bit(wl->ap_hlid_map, AP_MAX_STATIONS);
3521 if (id >= AP_MAX_STATIONS) {
3522 wl1271_warning("could not allocate HLID - too much stations");
3526 wl_sta = (struct wl1271_station *)sta->drv_priv;
3527 __set_bit(id, wl->ap_hlid_map);
3528 wl_sta->hlid = WL1271_AP_STA_HLID_START + id;
3529 *hlid = wl_sta->hlid;
3530 memcpy(wl->links[wl_sta->hlid].addr, sta->addr, ETH_ALEN);
3534 static void wl1271_free_sta(struct wl1271 *wl, u8 hlid)
3536 int id = hlid - WL1271_AP_STA_HLID_START;
3538 if (WARN_ON(!test_bit(id, wl->ap_hlid_map)))
3541 __clear_bit(id, wl->ap_hlid_map);
3542 memset(wl->links[hlid].addr, 0, ETH_ALEN);
3543 wl1271_tx_reset_link_queues(wl, hlid);
3544 __clear_bit(hlid, &wl->ap_ps_map);
3545 __clear_bit(hlid, (unsigned long *)&wl->ap_fw_ps_map);
3548 bool wl1271_is_active_sta(struct wl1271 *wl, u8 hlid)
3550 int id = hlid - WL1271_AP_STA_HLID_START;
3551 return test_bit(id, wl->ap_hlid_map);
3554 static int wl1271_op_sta_add(struct ieee80211_hw *hw,
3555 struct ieee80211_vif *vif,
3556 struct ieee80211_sta *sta)
3558 struct wl1271 *wl = hw->priv;
3562 mutex_lock(&wl->mutex);
3564 if (unlikely(wl->state == WL1271_STATE_OFF))
3567 if (wl->bss_type != BSS_TYPE_AP_BSS)
3570 wl1271_debug(DEBUG_MAC80211, "mac80211 add sta %d", (int)sta->aid);
3572 ret = wl1271_allocate_sta(wl, sta, &hlid);
3576 ret = wl1271_ps_elp_wakeup(wl);
3580 ret = wl12xx_cmd_add_peer(wl, sta, hlid);
3585 wl1271_ps_elp_sleep(wl);
3589 wl1271_free_sta(wl, hlid);
3592 mutex_unlock(&wl->mutex);
3596 static int wl1271_op_sta_remove(struct ieee80211_hw *hw,
3597 struct ieee80211_vif *vif,
3598 struct ieee80211_sta *sta)
3600 struct wl1271 *wl = hw->priv;
3601 struct wl1271_station *wl_sta;
3604 mutex_lock(&wl->mutex);
3606 if (unlikely(wl->state == WL1271_STATE_OFF))
3609 if (wl->bss_type != BSS_TYPE_AP_BSS)
3612 wl1271_debug(DEBUG_MAC80211, "mac80211 remove sta %d", (int)sta->aid);
3614 wl_sta = (struct wl1271_station *)sta->drv_priv;
3615 id = wl_sta->hlid - WL1271_AP_STA_HLID_START;
3616 if (WARN_ON(!test_bit(id, wl->ap_hlid_map)))
3619 ret = wl1271_ps_elp_wakeup(wl);
3623 ret = wl12xx_cmd_remove_peer(wl, wl_sta->hlid);
3627 wl1271_free_sta(wl, wl_sta->hlid);
3630 wl1271_ps_elp_sleep(wl);
3633 mutex_unlock(&wl->mutex);
3637 static int wl1271_op_ampdu_action(struct ieee80211_hw *hw,
3638 struct ieee80211_vif *vif,
3639 enum ieee80211_ampdu_mlme_action action,
3640 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
3643 struct wl1271 *wl = hw->priv;
3646 mutex_lock(&wl->mutex);
3648 if (unlikely(wl->state == WL1271_STATE_OFF)) {
3653 ret = wl1271_ps_elp_wakeup(wl);
3657 wl1271_debug(DEBUG_MAC80211, "mac80211 ampdu: Rx tid %d action %d",
3661 case IEEE80211_AMPDU_RX_START:
3662 if ((wl->ba_support) && (wl->ba_allowed)) {
3663 ret = wl1271_acx_set_ba_receiver_session(wl, tid, *ssn,
3666 wl->ba_rx_bitmap |= BIT(tid);
3672 case IEEE80211_AMPDU_RX_STOP:
3673 ret = wl1271_acx_set_ba_receiver_session(wl, tid, 0, false);
3675 wl->ba_rx_bitmap &= ~BIT(tid);
3679 * The BA initiator session management in FW independently.
3680 * Falling break here on purpose for all TX APDU commands.
3682 case IEEE80211_AMPDU_TX_START:
3683 case IEEE80211_AMPDU_TX_STOP:
3684 case IEEE80211_AMPDU_TX_OPERATIONAL:
3689 wl1271_error("Incorrect ampdu action id=%x\n", action);
3693 wl1271_ps_elp_sleep(wl);
3696 mutex_unlock(&wl->mutex);
3701 static bool wl1271_tx_frames_pending(struct ieee80211_hw *hw)
3703 struct wl1271 *wl = hw->priv;
3706 mutex_lock(&wl->mutex);
3708 if (unlikely(wl->state == WL1271_STATE_OFF))
3711 /* packets are considered pending if in the TX queue or the FW */
3712 ret = (wl1271_tx_total_queue_count(wl) > 0) || (wl->tx_frames_cnt > 0);
3714 /* the above is appropriate for STA mode for PS purposes */
3715 WARN_ON(wl->bss_type != BSS_TYPE_STA_BSS);
3718 mutex_unlock(&wl->mutex);
3723 /* can't be const, mac80211 writes to this */
3724 static struct ieee80211_rate wl1271_rates[] = {
3726 .hw_value = CONF_HW_BIT_RATE_1MBPS,
3727 .hw_value_short = CONF_HW_BIT_RATE_1MBPS, },
3729 .hw_value = CONF_HW_BIT_RATE_2MBPS,
3730 .hw_value_short = CONF_HW_BIT_RATE_2MBPS,
3731 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
3733 .hw_value = CONF_HW_BIT_RATE_5_5MBPS,
3734 .hw_value_short = CONF_HW_BIT_RATE_5_5MBPS,
3735 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
3737 .hw_value = CONF_HW_BIT_RATE_11MBPS,
3738 .hw_value_short = CONF_HW_BIT_RATE_11MBPS,
3739 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
3741 .hw_value = CONF_HW_BIT_RATE_6MBPS,
3742 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
3744 .hw_value = CONF_HW_BIT_RATE_9MBPS,
3745 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
3747 .hw_value = CONF_HW_BIT_RATE_12MBPS,
3748 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
3750 .hw_value = CONF_HW_BIT_RATE_18MBPS,
3751 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
3753 .hw_value = CONF_HW_BIT_RATE_24MBPS,
3754 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
3756 .hw_value = CONF_HW_BIT_RATE_36MBPS,
3757 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
3759 .hw_value = CONF_HW_BIT_RATE_48MBPS,
3760 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
3762 .hw_value = CONF_HW_BIT_RATE_54MBPS,
3763 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
3766 /* can't be const, mac80211 writes to this */
3767 static struct ieee80211_channel wl1271_channels[] = {
3768 { .hw_value = 1, .center_freq = 2412, .max_power = 25 },
3769 { .hw_value = 2, .center_freq = 2417, .max_power = 25 },
3770 { .hw_value = 3, .center_freq = 2422, .max_power = 25 },
3771 { .hw_value = 4, .center_freq = 2427, .max_power = 25 },
3772 { .hw_value = 5, .center_freq = 2432, .max_power = 25 },
3773 { .hw_value = 6, .center_freq = 2437, .max_power = 25 },
3774 { .hw_value = 7, .center_freq = 2442, .max_power = 25 },
3775 { .hw_value = 8, .center_freq = 2447, .max_power = 25 },
3776 { .hw_value = 9, .center_freq = 2452, .max_power = 25 },
3777 { .hw_value = 10, .center_freq = 2457, .max_power = 25 },
3778 { .hw_value = 11, .center_freq = 2462, .max_power = 25 },
3779 { .hw_value = 12, .center_freq = 2467, .max_power = 25 },
3780 { .hw_value = 13, .center_freq = 2472, .max_power = 25 },
3781 { .hw_value = 14, .center_freq = 2484, .max_power = 25 },
3784 /* mapping to indexes for wl1271_rates */
3785 static const u8 wl1271_rate_to_idx_2ghz[] = {
3786 /* MCS rates are used only with 11n */
3787 7, /* CONF_HW_RXTX_RATE_MCS7 */
3788 6, /* CONF_HW_RXTX_RATE_MCS6 */
3789 5, /* CONF_HW_RXTX_RATE_MCS5 */
3790 4, /* CONF_HW_RXTX_RATE_MCS4 */
3791 3, /* CONF_HW_RXTX_RATE_MCS3 */
3792 2, /* CONF_HW_RXTX_RATE_MCS2 */
3793 1, /* CONF_HW_RXTX_RATE_MCS1 */
3794 0, /* CONF_HW_RXTX_RATE_MCS0 */
3796 11, /* CONF_HW_RXTX_RATE_54 */
3797 10, /* CONF_HW_RXTX_RATE_48 */
3798 9, /* CONF_HW_RXTX_RATE_36 */
3799 8, /* CONF_HW_RXTX_RATE_24 */
3801 /* TI-specific rate */
3802 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
3804 7, /* CONF_HW_RXTX_RATE_18 */
3805 6, /* CONF_HW_RXTX_RATE_12 */
3806 3, /* CONF_HW_RXTX_RATE_11 */
3807 5, /* CONF_HW_RXTX_RATE_9 */
3808 4, /* CONF_HW_RXTX_RATE_6 */
3809 2, /* CONF_HW_RXTX_RATE_5_5 */
3810 1, /* CONF_HW_RXTX_RATE_2 */
3811 0 /* CONF_HW_RXTX_RATE_1 */
3814 /* 11n STA capabilities */
3815 #define HW_RX_HIGHEST_RATE 72
3817 #ifdef CONFIG_WL12XX_HT
3818 #define WL12XX_HT_CAP { \
3819 .cap = IEEE80211_HT_CAP_GRN_FLD | IEEE80211_HT_CAP_SGI_20 | \
3820 (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT), \
3821 .ht_supported = true, \
3822 .ampdu_factor = IEEE80211_HT_MAX_AMPDU_8K, \
3823 .ampdu_density = IEEE80211_HT_MPDU_DENSITY_8, \
3825 .rx_mask = { 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, \
3826 .rx_highest = cpu_to_le16(HW_RX_HIGHEST_RATE), \
3827 .tx_params = IEEE80211_HT_MCS_TX_DEFINED, \
3831 #define WL12XX_HT_CAP { \
3832 .ht_supported = false, \
3836 /* can't be const, mac80211 writes to this */
3837 static struct ieee80211_supported_band wl1271_band_2ghz = {
3838 .channels = wl1271_channels,
3839 .n_channels = ARRAY_SIZE(wl1271_channels),
3840 .bitrates = wl1271_rates,
3841 .n_bitrates = ARRAY_SIZE(wl1271_rates),
3842 .ht_cap = WL12XX_HT_CAP,
3845 /* 5 GHz data rates for WL1273 */
3846 static struct ieee80211_rate wl1271_rates_5ghz[] = {
3848 .hw_value = CONF_HW_BIT_RATE_6MBPS,
3849 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
3851 .hw_value = CONF_HW_BIT_RATE_9MBPS,
3852 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
3854 .hw_value = CONF_HW_BIT_RATE_12MBPS,
3855 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
3857 .hw_value = CONF_HW_BIT_RATE_18MBPS,
3858 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
3860 .hw_value = CONF_HW_BIT_RATE_24MBPS,
3861 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
3863 .hw_value = CONF_HW_BIT_RATE_36MBPS,
3864 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
3866 .hw_value = CONF_HW_BIT_RATE_48MBPS,
3867 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
3869 .hw_value = CONF_HW_BIT_RATE_54MBPS,
3870 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
3873 /* 5 GHz band channels for WL1273 */
3874 static struct ieee80211_channel wl1271_channels_5ghz[] = {
3875 { .hw_value = 7, .center_freq = 5035, .max_power = 25 },
3876 { .hw_value = 8, .center_freq = 5040, .max_power = 25 },
3877 { .hw_value = 9, .center_freq = 5045, .max_power = 25 },
3878 { .hw_value = 11, .center_freq = 5055, .max_power = 25 },
3879 { .hw_value = 12, .center_freq = 5060, .max_power = 25 },
3880 { .hw_value = 16, .center_freq = 5080, .max_power = 25 },
3881 { .hw_value = 34, .center_freq = 5170, .max_power = 25 },
3882 { .hw_value = 36, .center_freq = 5180, .max_power = 25 },
3883 { .hw_value = 38, .center_freq = 5190, .max_power = 25 },
3884 { .hw_value = 40, .center_freq = 5200, .max_power = 25 },
3885 { .hw_value = 42, .center_freq = 5210, .max_power = 25 },
3886 { .hw_value = 44, .center_freq = 5220, .max_power = 25 },
3887 { .hw_value = 46, .center_freq = 5230, .max_power = 25 },
3888 { .hw_value = 48, .center_freq = 5240, .max_power = 25 },
3889 { .hw_value = 52, .center_freq = 5260, .max_power = 25 },
3890 { .hw_value = 56, .center_freq = 5280, .max_power = 25 },
3891 { .hw_value = 60, .center_freq = 5300, .max_power = 25 },
3892 { .hw_value = 64, .center_freq = 5320, .max_power = 25 },
3893 { .hw_value = 100, .center_freq = 5500, .max_power = 25 },
3894 { .hw_value = 104, .center_freq = 5520, .max_power = 25 },
3895 { .hw_value = 108, .center_freq = 5540, .max_power = 25 },
3896 { .hw_value = 112, .center_freq = 5560, .max_power = 25 },
3897 { .hw_value = 116, .center_freq = 5580, .max_power = 25 },
3898 { .hw_value = 120, .center_freq = 5600, .max_power = 25 },
3899 { .hw_value = 124, .center_freq = 5620, .max_power = 25 },
3900 { .hw_value = 128, .center_freq = 5640, .max_power = 25 },
3901 { .hw_value = 132, .center_freq = 5660, .max_power = 25 },
3902 { .hw_value = 136, .center_freq = 5680, .max_power = 25 },
3903 { .hw_value = 140, .center_freq = 5700, .max_power = 25 },
3904 { .hw_value = 149, .center_freq = 5745, .max_power = 25 },
3905 { .hw_value = 153, .center_freq = 5765, .max_power = 25 },
3906 { .hw_value = 157, .center_freq = 5785, .max_power = 25 },
3907 { .hw_value = 161, .center_freq = 5805, .max_power = 25 },
3908 { .hw_value = 165, .center_freq = 5825, .max_power = 25 },
3911 /* mapping to indexes for wl1271_rates_5ghz */
3912 static const u8 wl1271_rate_to_idx_5ghz[] = {
3913 /* MCS rates are used only with 11n */
3914 7, /* CONF_HW_RXTX_RATE_MCS7 */
3915 6, /* CONF_HW_RXTX_RATE_MCS6 */
3916 5, /* CONF_HW_RXTX_RATE_MCS5 */
3917 4, /* CONF_HW_RXTX_RATE_MCS4 */
3918 3, /* CONF_HW_RXTX_RATE_MCS3 */
3919 2, /* CONF_HW_RXTX_RATE_MCS2 */
3920 1, /* CONF_HW_RXTX_RATE_MCS1 */
3921 0, /* CONF_HW_RXTX_RATE_MCS0 */
3923 7, /* CONF_HW_RXTX_RATE_54 */
3924 6, /* CONF_HW_RXTX_RATE_48 */
3925 5, /* CONF_HW_RXTX_RATE_36 */
3926 4, /* CONF_HW_RXTX_RATE_24 */
3928 /* TI-specific rate */
3929 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
3931 3, /* CONF_HW_RXTX_RATE_18 */
3932 2, /* CONF_HW_RXTX_RATE_12 */
3933 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_11 */
3934 1, /* CONF_HW_RXTX_RATE_9 */
3935 0, /* CONF_HW_RXTX_RATE_6 */
3936 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_5_5 */
3937 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_2 */
3938 CONF_HW_RXTX_RATE_UNSUPPORTED /* CONF_HW_RXTX_RATE_1 */
3941 static struct ieee80211_supported_band wl1271_band_5ghz = {
3942 .channels = wl1271_channels_5ghz,
3943 .n_channels = ARRAY_SIZE(wl1271_channels_5ghz),
3944 .bitrates = wl1271_rates_5ghz,
3945 .n_bitrates = ARRAY_SIZE(wl1271_rates_5ghz),
3946 .ht_cap = WL12XX_HT_CAP,
3949 static const u8 *wl1271_band_rate_to_idx[] = {
3950 [IEEE80211_BAND_2GHZ] = wl1271_rate_to_idx_2ghz,
3951 [IEEE80211_BAND_5GHZ] = wl1271_rate_to_idx_5ghz
3954 static const struct ieee80211_ops wl1271_ops = {
3955 .start = wl1271_op_start,
3956 .stop = wl1271_op_stop,
3957 .add_interface = wl1271_op_add_interface,
3958 .remove_interface = wl1271_op_remove_interface,
3960 .suspend = wl1271_op_suspend,
3961 .resume = wl1271_op_resume,
3963 .config = wl1271_op_config,
3964 .prepare_multicast = wl1271_op_prepare_multicast,
3965 .configure_filter = wl1271_op_configure_filter,
3967 .set_key = wl1271_op_set_key,
3968 .hw_scan = wl1271_op_hw_scan,
3969 .cancel_hw_scan = wl1271_op_cancel_hw_scan,
3970 .sched_scan_start = wl1271_op_sched_scan_start,
3971 .sched_scan_stop = wl1271_op_sched_scan_stop,
3972 .bss_info_changed = wl1271_op_bss_info_changed,
3973 .set_frag_threshold = wl1271_op_set_frag_threshold,
3974 .set_rts_threshold = wl1271_op_set_rts_threshold,
3975 .conf_tx = wl1271_op_conf_tx,
3976 .get_tsf = wl1271_op_get_tsf,
3977 .get_survey = wl1271_op_get_survey,
3978 .sta_add = wl1271_op_sta_add,
3979 .sta_remove = wl1271_op_sta_remove,
3980 .ampdu_action = wl1271_op_ampdu_action,
3981 .tx_frames_pending = wl1271_tx_frames_pending,
3982 CFG80211_TESTMODE_CMD(wl1271_tm_cmd)
3986 u8 wl1271_rate_to_idx(int rate, enum ieee80211_band band)
3990 BUG_ON(band >= sizeof(wl1271_band_rate_to_idx)/sizeof(u8 *));
3992 if (unlikely(rate >= CONF_HW_RXTX_RATE_MAX)) {
3993 wl1271_error("Illegal RX rate from HW: %d", rate);
3997 idx = wl1271_band_rate_to_idx[band][rate];
3998 if (unlikely(idx == CONF_HW_RXTX_RATE_UNSUPPORTED)) {
3999 wl1271_error("Unsupported RX rate from HW: %d", rate);
4006 static ssize_t wl1271_sysfs_show_bt_coex_state(struct device *dev,
4007 struct device_attribute *attr,
4010 struct wl1271 *wl = dev_get_drvdata(dev);
4015 mutex_lock(&wl->mutex);
4016 len = snprintf(buf, len, "%d\n\n0 - off\n1 - on\n",
4018 mutex_unlock(&wl->mutex);
4024 static ssize_t wl1271_sysfs_store_bt_coex_state(struct device *dev,
4025 struct device_attribute *attr,
4026 const char *buf, size_t count)
4028 struct wl1271 *wl = dev_get_drvdata(dev);
4032 ret = kstrtoul(buf, 10, &res);
4034 wl1271_warning("incorrect value written to bt_coex_mode");
4038 mutex_lock(&wl->mutex);
4042 if (res == wl->sg_enabled)
4045 wl->sg_enabled = res;
4047 if (wl->state == WL1271_STATE_OFF)
4050 ret = wl1271_ps_elp_wakeup(wl);
4054 wl1271_acx_sg_enable(wl, wl->sg_enabled);
4055 wl1271_ps_elp_sleep(wl);
4058 mutex_unlock(&wl->mutex);
4062 static DEVICE_ATTR(bt_coex_state, S_IRUGO | S_IWUSR,
4063 wl1271_sysfs_show_bt_coex_state,
4064 wl1271_sysfs_store_bt_coex_state);
4066 static ssize_t wl1271_sysfs_show_hw_pg_ver(struct device *dev,
4067 struct device_attribute *attr,
4070 struct wl1271 *wl = dev_get_drvdata(dev);
4075 mutex_lock(&wl->mutex);
4076 if (wl->hw_pg_ver >= 0)
4077 len = snprintf(buf, len, "%d\n", wl->hw_pg_ver);
4079 len = snprintf(buf, len, "n/a\n");
4080 mutex_unlock(&wl->mutex);
4085 static DEVICE_ATTR(hw_pg_ver, S_IRUGO,
4086 wl1271_sysfs_show_hw_pg_ver, NULL);
4088 static ssize_t wl1271_sysfs_read_fwlog(struct file *filp, struct kobject *kobj,
4089 struct bin_attribute *bin_attr,
4090 char *buffer, loff_t pos, size_t count)
4092 struct device *dev = container_of(kobj, struct device, kobj);
4093 struct wl1271 *wl = dev_get_drvdata(dev);
4097 ret = mutex_lock_interruptible(&wl->mutex);
4099 return -ERESTARTSYS;
4101 /* Let only one thread read the log at a time, blocking others */
4102 while (wl->fwlog_size == 0) {
4105 prepare_to_wait_exclusive(&wl->fwlog_waitq,
4107 TASK_INTERRUPTIBLE);
4109 if (wl->fwlog_size != 0) {
4110 finish_wait(&wl->fwlog_waitq, &wait);
4114 mutex_unlock(&wl->mutex);
4117 finish_wait(&wl->fwlog_waitq, &wait);
4119 if (signal_pending(current))
4120 return -ERESTARTSYS;
4122 ret = mutex_lock_interruptible(&wl->mutex);
4124 return -ERESTARTSYS;
4127 /* Check if the fwlog is still valid */
4128 if (wl->fwlog_size < 0) {
4129 mutex_unlock(&wl->mutex);
4133 /* Seeking is not supported - old logs are not kept. Disregard pos. */
4134 len = min(count, (size_t)wl->fwlog_size);
4135 wl->fwlog_size -= len;
4136 memcpy(buffer, wl->fwlog, len);
4138 /* Make room for new messages */
4139 memmove(wl->fwlog, wl->fwlog + len, wl->fwlog_size);
4141 mutex_unlock(&wl->mutex);
4146 static struct bin_attribute fwlog_attr = {
4147 .attr = {.name = "fwlog", .mode = S_IRUSR},
4148 .read = wl1271_sysfs_read_fwlog,
4151 int wl1271_register_hw(struct wl1271 *wl)
4155 if (wl->mac80211_registered)
4158 ret = wl1271_fetch_nvs(wl);
4160 /* NOTE: The wl->nvs->nvs element must be first, in
4161 * order to simplify the casting, we assume it is at
4162 * the beginning of the wl->nvs structure.
4164 u8 *nvs_ptr = (u8 *)wl->nvs;
4166 wl->mac_addr[0] = nvs_ptr[11];
4167 wl->mac_addr[1] = nvs_ptr[10];
4168 wl->mac_addr[2] = nvs_ptr[6];
4169 wl->mac_addr[3] = nvs_ptr[5];
4170 wl->mac_addr[4] = nvs_ptr[4];
4171 wl->mac_addr[5] = nvs_ptr[3];
4174 SET_IEEE80211_PERM_ADDR(wl->hw, wl->mac_addr);
4176 ret = ieee80211_register_hw(wl->hw);
4178 wl1271_error("unable to register mac80211 hw: %d", ret);
4182 wl->mac80211_registered = true;
4184 wl1271_debugfs_init(wl);
4186 register_netdevice_notifier(&wl1271_dev_notifier);
4188 wl1271_notice("loaded");
4192 EXPORT_SYMBOL_GPL(wl1271_register_hw);
4194 void wl1271_unregister_hw(struct wl1271 *wl)
4196 if (wl->state == WL1271_STATE_PLT)
4197 __wl1271_plt_stop(wl);
4199 unregister_netdevice_notifier(&wl1271_dev_notifier);
4200 ieee80211_unregister_hw(wl->hw);
4201 wl->mac80211_registered = false;
4204 EXPORT_SYMBOL_GPL(wl1271_unregister_hw);
4206 int wl1271_init_ieee80211(struct wl1271 *wl)
4208 static const u32 cipher_suites[] = {
4209 WLAN_CIPHER_SUITE_WEP40,
4210 WLAN_CIPHER_SUITE_WEP104,
4211 WLAN_CIPHER_SUITE_TKIP,
4212 WLAN_CIPHER_SUITE_CCMP,
4213 WL1271_CIPHER_SUITE_GEM,
4216 /* The tx descriptor buffer and the TKIP space. */
4217 wl->hw->extra_tx_headroom = WL1271_TKIP_IV_SPACE +
4218 sizeof(struct wl1271_tx_hw_descr);
4221 /* FIXME: find a proper value */
4222 wl->hw->channel_change_time = 10000;
4223 wl->hw->max_listen_interval = wl->conf.conn.max_listen_interval;
4225 wl->hw->flags = IEEE80211_HW_SIGNAL_DBM |
4226 IEEE80211_HW_BEACON_FILTER |
4227 IEEE80211_HW_SUPPORTS_PS |
4228 IEEE80211_HW_SUPPORTS_UAPSD |
4229 IEEE80211_HW_HAS_RATE_CONTROL |
4230 IEEE80211_HW_CONNECTION_MONITOR |
4231 IEEE80211_HW_SUPPORTS_CQM_RSSI |
4232 IEEE80211_HW_REPORTS_TX_ACK_STATUS |
4233 IEEE80211_HW_SPECTRUM_MGMT |
4234 IEEE80211_HW_AP_LINK_PS;
4236 wl->hw->wiphy->cipher_suites = cipher_suites;
4237 wl->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
4239 wl->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
4240 BIT(NL80211_IFTYPE_ADHOC) | BIT(NL80211_IFTYPE_AP);
4241 wl->hw->wiphy->max_scan_ssids = 1;
4243 * Maximum length of elements in scanning probe request templates
4244 * should be the maximum length possible for a template, without
4245 * the IEEE80211 header of the template
4247 wl->hw->wiphy->max_scan_ie_len = WL1271_CMD_TEMPL_MAX_SIZE -
4248 sizeof(struct ieee80211_header);
4250 /* make sure all our channels fit in the scanned_ch bitmask */
4251 BUILD_BUG_ON(ARRAY_SIZE(wl1271_channels) +
4252 ARRAY_SIZE(wl1271_channels_5ghz) >
4253 WL1271_MAX_CHANNELS);
4255 * We keep local copies of the band structs because we need to
4256 * modify them on a per-device basis.
4258 memcpy(&wl->bands[IEEE80211_BAND_2GHZ], &wl1271_band_2ghz,
4259 sizeof(wl1271_band_2ghz));
4260 memcpy(&wl->bands[IEEE80211_BAND_5GHZ], &wl1271_band_5ghz,
4261 sizeof(wl1271_band_5ghz));
4263 wl->hw->wiphy->bands[IEEE80211_BAND_2GHZ] =
4264 &wl->bands[IEEE80211_BAND_2GHZ];
4265 wl->hw->wiphy->bands[IEEE80211_BAND_5GHZ] =
4266 &wl->bands[IEEE80211_BAND_5GHZ];
4269 wl->hw->max_rates = 1;
4271 wl->hw->wiphy->reg_notifier = wl1271_reg_notify;
4273 SET_IEEE80211_DEV(wl->hw, wl1271_wl_to_dev(wl));
4275 wl->hw->sta_data_size = sizeof(struct wl1271_station);
4277 wl->hw->max_rx_aggregation_subframes = 8;
4281 EXPORT_SYMBOL_GPL(wl1271_init_ieee80211);
4283 #define WL1271_DEFAULT_CHANNEL 0
4285 struct ieee80211_hw *wl1271_alloc_hw(void)
4287 struct ieee80211_hw *hw;
4288 struct platform_device *plat_dev = NULL;
4293 hw = ieee80211_alloc_hw(sizeof(*wl), &wl1271_ops);
4295 wl1271_error("could not alloc ieee80211_hw");
4300 plat_dev = kmemdup(&wl1271_device, sizeof(wl1271_device), GFP_KERNEL);
4302 wl1271_error("could not allocate platform_device");
4304 goto err_plat_alloc;
4308 memset(wl, 0, sizeof(*wl));
4310 INIT_LIST_HEAD(&wl->list);
4313 wl->plat_dev = plat_dev;
4315 for (i = 0; i < NUM_TX_QUEUES; i++)
4316 skb_queue_head_init(&wl->tx_queue[i]);
4318 for (i = 0; i < NUM_TX_QUEUES; i++)
4319 for (j = 0; j < AP_MAX_LINKS; j++)
4320 skb_queue_head_init(&wl->links[j].tx_queue[i]);
4322 skb_queue_head_init(&wl->deferred_rx_queue);
4323 skb_queue_head_init(&wl->deferred_tx_queue);
4325 INIT_DELAYED_WORK(&wl->elp_work, wl1271_elp_work);
4326 INIT_DELAYED_WORK(&wl->pspoll_work, wl1271_pspoll_work);
4327 INIT_WORK(&wl->netstack_work, wl1271_netstack_work);
4328 INIT_WORK(&wl->tx_work, wl1271_tx_work);
4329 INIT_WORK(&wl->recovery_work, wl1271_recovery_work);
4330 INIT_DELAYED_WORK(&wl->scan_complete_work, wl1271_scan_complete_work);
4331 INIT_WORK(&wl->rx_streaming_enable_work,
4332 wl1271_rx_streaming_enable_work);
4333 INIT_WORK(&wl->rx_streaming_disable_work,
4334 wl1271_rx_streaming_disable_work);
4336 wl->freezable_wq = create_freezable_workqueue("wl12xx_wq");
4337 if (!wl->freezable_wq) {
4342 wl->channel = WL1271_DEFAULT_CHANNEL;
4343 wl->beacon_int = WL1271_DEFAULT_BEACON_INT;
4344 wl->default_key = 0;
4346 wl->psm_entry_retry = 0;
4347 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
4348 wl->basic_rate_set = CONF_TX_RATE_MASK_BASIC;
4349 wl->basic_rate = CONF_TX_RATE_MASK_BASIC;
4350 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
4351 wl->band = IEEE80211_BAND_2GHZ;
4354 wl->sg_enabled = true;
4356 wl->bss_type = MAX_BSS_TYPE;
4357 wl->set_bss_type = MAX_BSS_TYPE;
4358 wl->last_tx_hlid = 0;
4360 wl->ap_fw_ps_map = 0;
4362 wl->platform_quirks = 0;
4363 wl->sched_scanning = false;
4364 wl->tx_security_seq = 0;
4365 wl->tx_security_last_seq_lsb = 0;
4366 wl->role_id = WL12XX_INVALID_ROLE_ID;
4367 wl->sta_hlid = WL12XX_INVALID_LINK_ID;
4369 setup_timer(&wl->rx_streaming_timer, wl1271_rx_streaming_timer,
4370 (unsigned long) wl);
4372 init_waitqueue_head(&wl->fwlog_waitq);
4374 memset(wl->tx_frames_map, 0, sizeof(wl->tx_frames_map));
4375 for (i = 0; i < ACX_TX_DESCRIPTORS; i++)
4376 wl->tx_frames[i] = NULL;
4378 spin_lock_init(&wl->wl_lock);
4380 wl->state = WL1271_STATE_OFF;
4381 mutex_init(&wl->mutex);
4383 /* Apply default driver configuration. */
4384 wl1271_conf_init(wl);
4386 order = get_order(WL1271_AGGR_BUFFER_SIZE);
4387 wl->aggr_buf = (u8 *)__get_free_pages(GFP_KERNEL, order);
4388 if (!wl->aggr_buf) {
4393 wl->dummy_packet = wl12xx_alloc_dummy_packet(wl);
4394 if (!wl->dummy_packet) {
4399 /* Allocate one page for the FW log */
4400 wl->fwlog = (u8 *)get_zeroed_page(GFP_KERNEL);
4403 goto err_dummy_packet;
4406 /* Register platform device */
4407 ret = platform_device_register(wl->plat_dev);
4409 wl1271_error("couldn't register platform device");
4412 dev_set_drvdata(&wl->plat_dev->dev, wl);
4414 /* Create sysfs file to control bt coex state */
4415 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
4417 wl1271_error("failed to create sysfs file bt_coex_state");
4421 /* Create sysfs file to get HW PG version */
4422 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_hw_pg_ver);
4424 wl1271_error("failed to create sysfs file hw_pg_ver");
4425 goto err_bt_coex_state;
4428 /* Create sysfs file for the FW log */
4429 ret = device_create_bin_file(&wl->plat_dev->dev, &fwlog_attr);
4431 wl1271_error("failed to create sysfs file fwlog");
4438 device_remove_file(&wl->plat_dev->dev, &dev_attr_hw_pg_ver);
4441 device_remove_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
4444 platform_device_unregister(wl->plat_dev);
4447 free_page((unsigned long)wl->fwlog);
4450 dev_kfree_skb(wl->dummy_packet);
4453 free_pages((unsigned long)wl->aggr_buf, order);
4456 destroy_workqueue(wl->freezable_wq);
4459 wl1271_debugfs_exit(wl);
4463 ieee80211_free_hw(hw);
4467 return ERR_PTR(ret);
4469 EXPORT_SYMBOL_GPL(wl1271_alloc_hw);
4471 int wl1271_free_hw(struct wl1271 *wl)
4473 /* Unblock any fwlog readers */
4474 mutex_lock(&wl->mutex);
4475 wl->fwlog_size = -1;
4476 wake_up_interruptible_all(&wl->fwlog_waitq);
4477 mutex_unlock(&wl->mutex);
4479 device_remove_bin_file(&wl->plat_dev->dev, &fwlog_attr);
4481 device_remove_file(&wl->plat_dev->dev, &dev_attr_hw_pg_ver);
4483 device_remove_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
4484 platform_device_unregister(wl->plat_dev);
4485 free_page((unsigned long)wl->fwlog);
4486 dev_kfree_skb(wl->dummy_packet);
4487 free_pages((unsigned long)wl->aggr_buf,
4488 get_order(WL1271_AGGR_BUFFER_SIZE));
4489 kfree(wl->plat_dev);
4491 wl1271_debugfs_exit(wl);
4498 kfree(wl->fw_status);
4499 kfree(wl->tx_res_if);
4500 destroy_workqueue(wl->freezable_wq);
4502 ieee80211_free_hw(wl->hw);
4506 EXPORT_SYMBOL_GPL(wl1271_free_hw);
4508 u32 wl12xx_debug_level = DEBUG_NONE;
4509 EXPORT_SYMBOL_GPL(wl12xx_debug_level);
4510 module_param_named(debug_level, wl12xx_debug_level, uint, S_IRUSR | S_IWUSR);
4511 MODULE_PARM_DESC(debug_level, "wl12xx debugging level");
4513 module_param_named(fwlog, fwlog_param, charp, 0);
4514 MODULE_PARM_DESC(keymap,
4515 "FW logger options: continuous, ondemand, dbgpins or disable");
4517 MODULE_LICENSE("GPL");
4518 MODULE_AUTHOR("Luciano Coelho <coelho@ti.com>");
4519 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");