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 int wl1271_op_add_interface(struct ieee80211_hw *hw,
1783 struct ieee80211_vif *vif)
1785 struct wl1271 *wl = hw->priv;
1786 struct wiphy *wiphy = hw->wiphy;
1787 int retries = WL1271_BOOT_RETRIES;
1789 bool booted = false;
1791 wl1271_debug(DEBUG_MAC80211, "mac80211 add interface type %d mac %pM",
1792 vif->type, vif->addr);
1794 mutex_lock(&wl->mutex);
1796 wl1271_debug(DEBUG_MAC80211,
1797 "multiple vifs are not supported yet");
1803 * in some very corner case HW recovery scenarios its possible to
1804 * get here before __wl1271_op_remove_interface is complete, so
1805 * opt out if that is the case.
1807 if (test_bit(WL1271_FLAG_IF_INITIALIZED, &wl->flags)) {
1812 switch (vif->type) {
1813 case NL80211_IFTYPE_STATION:
1814 wl->bss_type = BSS_TYPE_STA_BSS;
1815 wl->set_bss_type = BSS_TYPE_STA_BSS;
1817 case NL80211_IFTYPE_ADHOC:
1818 wl->bss_type = BSS_TYPE_IBSS;
1819 wl->set_bss_type = BSS_TYPE_STA_BSS;
1821 case NL80211_IFTYPE_AP:
1822 wl->bss_type = BSS_TYPE_AP_BSS;
1829 memcpy(wl->mac_addr, vif->addr, ETH_ALEN);
1831 if (wl->state != WL1271_STATE_OFF) {
1832 wl1271_error("cannot start because not in off state: %d",
1840 ret = wl1271_chip_wakeup(wl);
1844 ret = wl1271_boot(wl);
1848 ret = wl1271_hw_init(wl);
1856 mutex_unlock(&wl->mutex);
1857 /* Unlocking the mutex in the middle of handling is
1858 inherently unsafe. In this case we deem it safe to do,
1859 because we need to let any possibly pending IRQ out of
1860 the system (and while we are WL1271_STATE_OFF the IRQ
1861 work function will not do anything.) Also, any other
1862 possible concurrent operations will fail due to the
1863 current state, hence the wl1271 struct should be safe. */
1864 wl1271_disable_interrupts(wl);
1865 wl1271_flush_deferred_work(wl);
1866 cancel_work_sync(&wl->netstack_work);
1867 mutex_lock(&wl->mutex);
1869 wl1271_power_off(wl);
1873 wl1271_error("firmware boot failed despite %d retries",
1874 WL1271_BOOT_RETRIES);
1879 wl->state = WL1271_STATE_ON;
1880 set_bit(WL1271_FLAG_IF_INITIALIZED, &wl->flags);
1881 wl1271_info("firmware booted (%s)", wl->chip.fw_ver_str);
1883 /* update hw/fw version info in wiphy struct */
1884 wiphy->hw_version = wl->chip.id;
1885 strncpy(wiphy->fw_version, wl->chip.fw_ver_str,
1886 sizeof(wiphy->fw_version));
1889 * Now we know if 11a is supported (info from the NVS), so disable
1890 * 11a channels if not supported
1892 if (!wl->enable_11a)
1893 wiphy->bands[IEEE80211_BAND_5GHZ]->n_channels = 0;
1895 wl1271_debug(DEBUG_MAC80211, "11a is %ssupported",
1896 wl->enable_11a ? "" : "not ");
1899 mutex_unlock(&wl->mutex);
1901 mutex_lock(&wl_list_mutex);
1903 list_add(&wl->list, &wl_list);
1904 mutex_unlock(&wl_list_mutex);
1909 static void __wl1271_op_remove_interface(struct wl1271 *wl,
1910 bool reset_tx_queues)
1913 wl1271_debug(DEBUG_MAC80211, "mac80211 remove interface");
1915 /* because of hardware recovery, we may get here twice */
1916 if (wl->state != WL1271_STATE_ON)
1919 wl1271_info("down");
1921 mutex_lock(&wl_list_mutex);
1922 list_del(&wl->list);
1923 mutex_unlock(&wl_list_mutex);
1925 /* enable dyn ps just in case (if left on due to fw crash etc) */
1926 if (wl->bss_type == BSS_TYPE_STA_BSS)
1927 ieee80211_enable_dyn_ps(wl->vif);
1929 if (wl->scan.state != WL1271_SCAN_STATE_IDLE) {
1930 wl->scan.state = WL1271_SCAN_STATE_IDLE;
1931 memset(wl->scan.scanned_ch, 0, sizeof(wl->scan.scanned_ch));
1932 wl->scan.req = NULL;
1933 ieee80211_scan_completed(wl->hw, true);
1937 * this must be before the cancel_work calls below, so that the work
1938 * functions don't perform further work.
1940 wl->state = WL1271_STATE_OFF;
1942 mutex_unlock(&wl->mutex);
1944 wl1271_disable_interrupts(wl);
1945 wl1271_flush_deferred_work(wl);
1946 cancel_delayed_work_sync(&wl->scan_complete_work);
1947 cancel_work_sync(&wl->netstack_work);
1948 cancel_work_sync(&wl->tx_work);
1949 del_timer_sync(&wl->rx_streaming_timer);
1950 cancel_work_sync(&wl->rx_streaming_enable_work);
1951 cancel_work_sync(&wl->rx_streaming_disable_work);
1952 cancel_delayed_work_sync(&wl->pspoll_work);
1953 cancel_delayed_work_sync(&wl->elp_work);
1955 mutex_lock(&wl->mutex);
1957 /* let's notify MAC80211 about the remaining pending TX frames */
1958 wl1271_tx_reset(wl, reset_tx_queues);
1959 wl1271_power_off(wl);
1961 memset(wl->bssid, 0, ETH_ALEN);
1962 memset(wl->ssid, 0, IEEE80211_MAX_SSID_LEN + 1);
1964 wl->bss_type = MAX_BSS_TYPE;
1965 wl->set_bss_type = MAX_BSS_TYPE;
1966 wl->band = IEEE80211_BAND_2GHZ;
1969 wl->psm_entry_retry = 0;
1970 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
1971 wl->tx_blocks_available = 0;
1972 wl->tx_allocated_blocks = 0;
1973 wl->tx_results_count = 0;
1974 wl->tx_packets_count = 0;
1975 wl->time_offset = 0;
1976 wl->session_counter = 0;
1977 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
1979 wl1271_free_ap_keys(wl);
1980 memset(wl->ap_hlid_map, 0, sizeof(wl->ap_hlid_map));
1981 wl->ap_fw_ps_map = 0;
1983 wl->sched_scanning = false;
1984 wl->role_id = WL12XX_INVALID_ROLE_ID;
1985 memset(wl->roles_map, 0, sizeof(wl->roles_map));
1986 memset(wl->links_map, 0, sizeof(wl->links_map));
1989 * this is performed after the cancel_work calls and the associated
1990 * mutex_lock, so that wl1271_op_add_interface does not accidentally
1991 * get executed before all these vars have been reset.
1995 wl->tx_blocks_freed = 0;
1997 wl1271_debugfs_reset(wl);
1999 kfree(wl->fw_status);
2000 wl->fw_status = NULL;
2001 kfree(wl->tx_res_if);
2002 wl->tx_res_if = NULL;
2003 kfree(wl->target_mem_map);
2004 wl->target_mem_map = NULL;
2007 static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
2008 struct ieee80211_vif *vif)
2010 struct wl1271 *wl = hw->priv;
2012 mutex_lock(&wl->mutex);
2014 * wl->vif can be null here if someone shuts down the interface
2015 * just when hardware recovery has been started.
2018 WARN_ON(wl->vif != vif);
2019 __wl1271_op_remove_interface(wl, true);
2022 mutex_unlock(&wl->mutex);
2023 cancel_work_sync(&wl->recovery_work);
2026 static int wl1271_dummy_join(struct wl1271 *wl)
2029 /* we need to use a dummy BSSID for now */
2030 static const u8 dummy_bssid[ETH_ALEN] = { 0x0b, 0xad, 0xde,
2033 memcpy(wl->bssid, dummy_bssid, ETH_ALEN);
2035 ret = wl12xx_cmd_role_start_sta(wl);
2039 set_bit(WL1271_FLAG_JOINED, &wl->flags);
2045 static int wl1271_join(struct wl1271 *wl, bool set_assoc)
2050 * One of the side effects of the JOIN command is that is clears
2051 * WPA/WPA2 keys from the chipset. Performing a JOIN while associated
2052 * to a WPA/WPA2 access point will therefore kill the data-path.
2053 * Currently the only valid scenario for JOIN during association
2054 * is on roaming, in which case we will also be given new keys.
2055 * Keep the below message for now, unless it starts bothering
2056 * users who really like to roam a lot :)
2058 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
2059 wl1271_info("JOIN while associated.");
2062 set_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
2064 ret = wl12xx_cmd_role_start_sta(wl);
2068 set_bit(WL1271_FLAG_JOINED, &wl->flags);
2070 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
2074 * The join command disable the keep-alive mode, shut down its process,
2075 * and also clear the template config, so we need to reset it all after
2076 * the join. The acx_aid starts the keep-alive process, and the order
2077 * of the commands below is relevant.
2079 ret = wl1271_acx_keep_alive_mode(wl, true);
2083 ret = wl1271_acx_aid(wl, wl->aid);
2087 ret = wl1271_cmd_build_klv_null_data(wl);
2091 ret = wl1271_acx_keep_alive_config(wl, CMD_TEMPL_KLV_IDX_NULL_DATA,
2092 ACX_KEEP_ALIVE_TPL_VALID);
2100 static int wl1271_unjoin(struct wl1271 *wl)
2104 /* to stop listening to a channel, we disconnect */
2105 ret = wl12xx_cmd_role_stop_sta(wl);
2109 clear_bit(WL1271_FLAG_JOINED, &wl->flags);
2110 memset(wl->bssid, 0, ETH_ALEN);
2112 /* reset TX security counters on a clean disconnect */
2113 wl->tx_security_last_seq_lsb = 0;
2114 wl->tx_security_seq = 0;
2120 static void wl1271_set_band_rate(struct wl1271 *wl)
2122 if (wl->band == IEEE80211_BAND_2GHZ)
2123 wl->basic_rate_set = wl->conf.tx.basic_rate;
2125 wl->basic_rate_set = wl->conf.tx.basic_rate_5;
2128 static int wl1271_sta_handle_idle(struct wl1271 *wl, bool idle)
2133 if (test_bit(WL1271_FLAG_JOINED, &wl->flags)) {
2134 ret = wl1271_unjoin(wl);
2138 wl->rate_set = wl1271_tx_min_rate_get(wl);
2139 ret = wl1271_acx_sta_rate_policies(wl);
2142 ret = wl1271_acx_keep_alive_config(
2143 wl, CMD_TEMPL_KLV_IDX_NULL_DATA,
2144 ACX_KEEP_ALIVE_TPL_INVALID);
2147 set_bit(WL1271_FLAG_IDLE, &wl->flags);
2149 /* increment the session counter */
2150 wl->session_counter++;
2151 if (wl->session_counter >= SESSION_COUNTER_MAX)
2152 wl->session_counter = 0;
2154 /* The current firmware only supports sched_scan in idle */
2155 if (wl->sched_scanning) {
2156 wl1271_scan_sched_scan_stop(wl);
2157 ieee80211_sched_scan_stopped(wl->hw);
2160 ret = wl1271_dummy_join(wl);
2163 clear_bit(WL1271_FLAG_IDLE, &wl->flags);
2170 static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed)
2172 struct wl1271 *wl = hw->priv;
2173 struct ieee80211_conf *conf = &hw->conf;
2174 int channel, ret = 0;
2177 channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
2179 wl1271_debug(DEBUG_MAC80211, "mac80211 config ch %d psm %s power %d %s"
2182 conf->flags & IEEE80211_CONF_PS ? "on" : "off",
2184 conf->flags & IEEE80211_CONF_IDLE ? "idle" : "in use",
2188 * mac80211 will go to idle nearly immediately after transmitting some
2189 * frames, such as the deauth. To make sure those frames reach the air,
2190 * wait here until the TX queue is fully flushed.
2192 if ((changed & IEEE80211_CONF_CHANGE_IDLE) &&
2193 (conf->flags & IEEE80211_CONF_IDLE))
2194 wl1271_tx_flush(wl);
2196 mutex_lock(&wl->mutex);
2198 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2199 /* we support configuring the channel and band while off */
2200 if ((changed & IEEE80211_CONF_CHANGE_CHANNEL)) {
2201 wl->band = conf->channel->band;
2202 wl->channel = channel;
2205 if ((changed & IEEE80211_CONF_CHANGE_POWER))
2206 wl->power_level = conf->power_level;
2211 is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
2213 ret = wl1271_ps_elp_wakeup(wl);
2217 /* if the channel changes while joined, join again */
2218 if (changed & IEEE80211_CONF_CHANGE_CHANNEL &&
2219 ((wl->band != conf->channel->band) ||
2220 (wl->channel != channel))) {
2221 wl->band = conf->channel->band;
2222 wl->channel = channel;
2226 * FIXME: the mac80211 should really provide a fixed
2227 * rate to use here. for now, just use the smallest
2228 * possible rate for the band as a fixed rate for
2229 * association frames and other control messages.
2231 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
2232 wl1271_set_band_rate(wl);
2234 wl->basic_rate = wl1271_tx_min_rate_get(wl);
2235 ret = wl1271_acx_sta_rate_policies(wl);
2237 wl1271_warning("rate policy for channel "
2240 if (test_bit(WL1271_FLAG_JOINED, &wl->flags)) {
2241 ret = wl1271_join(wl, false);
2243 wl1271_warning("cmd join on channel "
2249 if (changed & IEEE80211_CONF_CHANGE_IDLE && !is_ap) {
2250 ret = wl1271_sta_handle_idle(wl,
2251 conf->flags & IEEE80211_CONF_IDLE);
2253 wl1271_warning("idle mode change failed %d", ret);
2257 * if mac80211 changes the PSM mode, make sure the mode is not
2258 * incorrectly changed after the pspoll failure active window.
2260 if (changed & IEEE80211_CONF_CHANGE_PS)
2261 clear_bit(WL1271_FLAG_PSPOLL_FAILURE, &wl->flags);
2263 if (conf->flags & IEEE80211_CONF_PS &&
2264 !test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
2265 set_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
2268 * We enter PSM only if we're already associated.
2269 * If we're not, we'll enter it when joining an SSID,
2270 * through the bss_info_changed() hook.
2272 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags)) {
2273 wl1271_debug(DEBUG_PSM, "psm enabled");
2274 ret = wl1271_ps_set_mode(wl, STATION_POWER_SAVE_MODE,
2275 wl->basic_rate, true);
2277 } else if (!(conf->flags & IEEE80211_CONF_PS) &&
2278 test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
2279 wl1271_debug(DEBUG_PSM, "psm disabled");
2281 clear_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
2283 if (test_bit(WL1271_FLAG_PSM, &wl->flags))
2284 ret = wl1271_ps_set_mode(wl, STATION_ACTIVE_MODE,
2285 wl->basic_rate, true);
2288 if (conf->power_level != wl->power_level) {
2289 ret = wl1271_acx_tx_power(wl, conf->power_level);
2293 wl->power_level = conf->power_level;
2297 wl1271_ps_elp_sleep(wl);
2300 mutex_unlock(&wl->mutex);
2305 struct wl1271_filter_params {
2308 u8 mc_list[ACX_MC_ADDRESS_GROUP_MAX][ETH_ALEN];
2311 static u64 wl1271_op_prepare_multicast(struct ieee80211_hw *hw,
2312 struct netdev_hw_addr_list *mc_list)
2314 struct wl1271_filter_params *fp;
2315 struct netdev_hw_addr *ha;
2316 struct wl1271 *wl = hw->priv;
2318 if (unlikely(wl->state == WL1271_STATE_OFF))
2321 fp = kzalloc(sizeof(*fp), GFP_ATOMIC);
2323 wl1271_error("Out of memory setting filters.");
2327 /* update multicast filtering parameters */
2328 fp->mc_list_length = 0;
2329 if (netdev_hw_addr_list_count(mc_list) > ACX_MC_ADDRESS_GROUP_MAX) {
2330 fp->enabled = false;
2333 netdev_hw_addr_list_for_each(ha, mc_list) {
2334 memcpy(fp->mc_list[fp->mc_list_length],
2335 ha->addr, ETH_ALEN);
2336 fp->mc_list_length++;
2340 return (u64)(unsigned long)fp;
2343 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
2346 FIF_BCN_PRBRESP_PROMISC | \
2350 static void wl1271_op_configure_filter(struct ieee80211_hw *hw,
2351 unsigned int changed,
2352 unsigned int *total, u64 multicast)
2354 struct wl1271_filter_params *fp = (void *)(unsigned long)multicast;
2355 struct wl1271 *wl = hw->priv;
2358 wl1271_debug(DEBUG_MAC80211, "mac80211 configure filter changed %x"
2359 " total %x", changed, *total);
2361 mutex_lock(&wl->mutex);
2363 *total &= WL1271_SUPPORTED_FILTERS;
2364 changed &= WL1271_SUPPORTED_FILTERS;
2366 if (unlikely(wl->state == WL1271_STATE_OFF))
2369 ret = wl1271_ps_elp_wakeup(wl);
2373 if (wl->bss_type != BSS_TYPE_AP_BSS) {
2374 if (*total & FIF_ALLMULTI)
2375 ret = wl1271_acx_group_address_tbl(wl, false, NULL, 0);
2377 ret = wl1271_acx_group_address_tbl(wl, fp->enabled,
2379 fp->mc_list_length);
2385 * the fw doesn't provide an api to configure the filters. instead,
2386 * the filters configuration is based on the active roles / ROC
2391 wl1271_ps_elp_sleep(wl);
2394 mutex_unlock(&wl->mutex);
2398 static int wl1271_record_ap_key(struct wl1271 *wl, u8 id, u8 key_type,
2399 u8 key_size, const u8 *key, u8 hlid, u32 tx_seq_32,
2402 struct wl1271_ap_key *ap_key;
2405 wl1271_debug(DEBUG_CRYPT, "record ap key id %d", (int)id);
2407 if (key_size > MAX_KEY_SIZE)
2411 * Find next free entry in ap_keys. Also check we are not replacing
2414 for (i = 0; i < MAX_NUM_KEYS; i++) {
2415 if (wl->recorded_ap_keys[i] == NULL)
2418 if (wl->recorded_ap_keys[i]->id == id) {
2419 wl1271_warning("trying to record key replacement");
2424 if (i == MAX_NUM_KEYS)
2427 ap_key = kzalloc(sizeof(*ap_key), GFP_KERNEL);
2432 ap_key->key_type = key_type;
2433 ap_key->key_size = key_size;
2434 memcpy(ap_key->key, key, key_size);
2435 ap_key->hlid = hlid;
2436 ap_key->tx_seq_32 = tx_seq_32;
2437 ap_key->tx_seq_16 = tx_seq_16;
2439 wl->recorded_ap_keys[i] = ap_key;
2443 static void wl1271_free_ap_keys(struct wl1271 *wl)
2447 for (i = 0; i < MAX_NUM_KEYS; i++) {
2448 kfree(wl->recorded_ap_keys[i]);
2449 wl->recorded_ap_keys[i] = NULL;
2453 static int wl1271_ap_init_hwenc(struct wl1271 *wl)
2456 struct wl1271_ap_key *key;
2457 bool wep_key_added = false;
2459 for (i = 0; i < MAX_NUM_KEYS; i++) {
2460 if (wl->recorded_ap_keys[i] == NULL)
2463 key = wl->recorded_ap_keys[i];
2464 ret = wl1271_cmd_set_ap_key(wl, KEY_ADD_OR_REPLACE,
2465 key->id, key->key_type,
2466 key->key_size, key->key,
2467 key->hlid, key->tx_seq_32,
2472 if (key->key_type == KEY_WEP)
2473 wep_key_added = true;
2476 if (wep_key_added) {
2477 ret = wl12xx_cmd_set_default_wep_key(wl, wl->default_key,
2478 WL1271_AP_BROADCAST_HLID);
2484 wl1271_free_ap_keys(wl);
2488 static int wl1271_set_key(struct wl1271 *wl, u16 action, u8 id, u8 key_type,
2489 u8 key_size, const u8 *key, u32 tx_seq_32,
2490 u16 tx_seq_16, struct ieee80211_sta *sta)
2493 bool is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
2496 struct wl1271_station *wl_sta;
2500 wl_sta = (struct wl1271_station *)sta->drv_priv;
2501 hlid = wl_sta->hlid;
2503 hlid = WL1271_AP_BROADCAST_HLID;
2506 if (!test_bit(WL1271_FLAG_AP_STARTED, &wl->flags)) {
2508 * We do not support removing keys after AP shutdown.
2509 * Pretend we do to make mac80211 happy.
2511 if (action != KEY_ADD_OR_REPLACE)
2514 ret = wl1271_record_ap_key(wl, id,
2516 key, hlid, tx_seq_32,
2519 ret = wl1271_cmd_set_ap_key(wl, action,
2520 id, key_type, key_size,
2521 key, hlid, tx_seq_32,
2529 static const u8 bcast_addr[ETH_ALEN] = {
2530 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
2533 addr = sta ? sta->addr : bcast_addr;
2535 if (is_zero_ether_addr(addr)) {
2536 /* We dont support TX only encryption */
2540 /* The wl1271 does not allow to remove unicast keys - they
2541 will be cleared automatically on next CMD_JOIN. Ignore the
2542 request silently, as we dont want the mac80211 to emit
2543 an error message. */
2544 if (action == KEY_REMOVE && !is_broadcast_ether_addr(addr))
2547 ret = wl1271_cmd_set_sta_key(wl, action,
2548 id, key_type, key_size,
2549 key, addr, tx_seq_32,
2554 /* the default WEP key needs to be configured at least once */
2555 if (key_type == KEY_WEP) {
2556 ret = wl12xx_cmd_set_default_wep_key(wl,
2567 static int wl1271_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
2568 struct ieee80211_vif *vif,
2569 struct ieee80211_sta *sta,
2570 struct ieee80211_key_conf *key_conf)
2572 struct wl1271 *wl = hw->priv;
2578 wl1271_debug(DEBUG_MAC80211, "mac80211 set key");
2580 wl1271_debug(DEBUG_CRYPT, "CMD: 0x%x sta: %p", cmd, sta);
2581 wl1271_debug(DEBUG_CRYPT, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
2582 key_conf->cipher, key_conf->keyidx,
2583 key_conf->keylen, key_conf->flags);
2584 wl1271_dump(DEBUG_CRYPT, "KEY: ", key_conf->key, key_conf->keylen);
2586 mutex_lock(&wl->mutex);
2588 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2593 ret = wl1271_ps_elp_wakeup(wl);
2597 switch (key_conf->cipher) {
2598 case WLAN_CIPHER_SUITE_WEP40:
2599 case WLAN_CIPHER_SUITE_WEP104:
2602 key_conf->hw_key_idx = key_conf->keyidx;
2604 case WLAN_CIPHER_SUITE_TKIP:
2605 key_type = KEY_TKIP;
2607 key_conf->hw_key_idx = key_conf->keyidx;
2608 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
2609 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
2611 case WLAN_CIPHER_SUITE_CCMP:
2614 key_conf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
2615 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
2616 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
2618 case WL1271_CIPHER_SUITE_GEM:
2620 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
2621 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
2624 wl1271_error("Unknown key algo 0x%x", key_conf->cipher);
2632 ret = wl1271_set_key(wl, KEY_ADD_OR_REPLACE,
2633 key_conf->keyidx, key_type,
2634 key_conf->keylen, key_conf->key,
2635 tx_seq_32, tx_seq_16, sta);
2637 wl1271_error("Could not add or replace key");
2643 ret = wl1271_set_key(wl, KEY_REMOVE,
2644 key_conf->keyidx, key_type,
2645 key_conf->keylen, key_conf->key,
2648 wl1271_error("Could not remove key");
2654 wl1271_error("Unsupported key cmd 0x%x", cmd);
2660 wl1271_ps_elp_sleep(wl);
2663 mutex_unlock(&wl->mutex);
2668 static int wl1271_op_hw_scan(struct ieee80211_hw *hw,
2669 struct ieee80211_vif *vif,
2670 struct cfg80211_scan_request *req)
2672 struct wl1271 *wl = hw->priv;
2677 wl1271_debug(DEBUG_MAC80211, "mac80211 hw scan");
2680 ssid = req->ssids[0].ssid;
2681 len = req->ssids[0].ssid_len;
2684 mutex_lock(&wl->mutex);
2686 if (wl->state == WL1271_STATE_OFF) {
2688 * We cannot return -EBUSY here because cfg80211 will expect
2689 * a call to ieee80211_scan_completed if we do - in this case
2690 * there won't be any call.
2696 ret = wl1271_ps_elp_wakeup(wl);
2700 ret = wl1271_scan(hw->priv, ssid, len, req);
2702 wl1271_ps_elp_sleep(wl);
2705 mutex_unlock(&wl->mutex);
2710 static void wl1271_op_cancel_hw_scan(struct ieee80211_hw *hw,
2711 struct ieee80211_vif *vif)
2713 struct wl1271 *wl = hw->priv;
2716 wl1271_debug(DEBUG_MAC80211, "mac80211 cancel hw scan");
2718 mutex_lock(&wl->mutex);
2720 if (wl->state == WL1271_STATE_OFF)
2723 if (wl->scan.state == WL1271_SCAN_STATE_IDLE)
2726 ret = wl1271_ps_elp_wakeup(wl);
2730 if (wl->scan.state != WL1271_SCAN_STATE_DONE) {
2731 ret = wl1271_scan_stop(wl);
2735 wl->scan.state = WL1271_SCAN_STATE_IDLE;
2736 memset(wl->scan.scanned_ch, 0, sizeof(wl->scan.scanned_ch));
2737 wl->scan.req = NULL;
2738 ieee80211_scan_completed(wl->hw, true);
2741 wl1271_ps_elp_sleep(wl);
2743 mutex_unlock(&wl->mutex);
2745 cancel_delayed_work_sync(&wl->scan_complete_work);
2748 static int wl1271_op_sched_scan_start(struct ieee80211_hw *hw,
2749 struct ieee80211_vif *vif,
2750 struct cfg80211_sched_scan_request *req,
2751 struct ieee80211_sched_scan_ies *ies)
2753 struct wl1271 *wl = hw->priv;
2756 wl1271_debug(DEBUG_MAC80211, "wl1271_op_sched_scan_start");
2758 mutex_lock(&wl->mutex);
2760 ret = wl1271_ps_elp_wakeup(wl);
2764 ret = wl1271_scan_sched_scan_config(wl, req, ies);
2768 ret = wl1271_scan_sched_scan_start(wl);
2772 wl->sched_scanning = true;
2775 wl1271_ps_elp_sleep(wl);
2777 mutex_unlock(&wl->mutex);
2781 static void wl1271_op_sched_scan_stop(struct ieee80211_hw *hw,
2782 struct ieee80211_vif *vif)
2784 struct wl1271 *wl = hw->priv;
2787 wl1271_debug(DEBUG_MAC80211, "wl1271_op_sched_scan_stop");
2789 mutex_lock(&wl->mutex);
2791 ret = wl1271_ps_elp_wakeup(wl);
2795 wl1271_scan_sched_scan_stop(wl);
2797 wl1271_ps_elp_sleep(wl);
2799 mutex_unlock(&wl->mutex);
2802 static int wl1271_op_set_frag_threshold(struct ieee80211_hw *hw, u32 value)
2804 struct wl1271 *wl = hw->priv;
2807 mutex_lock(&wl->mutex);
2809 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2814 ret = wl1271_ps_elp_wakeup(wl);
2818 ret = wl1271_acx_frag_threshold(wl, value);
2820 wl1271_warning("wl1271_op_set_frag_threshold failed: %d", ret);
2822 wl1271_ps_elp_sleep(wl);
2825 mutex_unlock(&wl->mutex);
2830 static int wl1271_op_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
2832 struct wl1271 *wl = hw->priv;
2835 mutex_lock(&wl->mutex);
2837 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2842 ret = wl1271_ps_elp_wakeup(wl);
2846 ret = wl1271_acx_rts_threshold(wl, value);
2848 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret);
2850 wl1271_ps_elp_sleep(wl);
2853 mutex_unlock(&wl->mutex);
2858 static int wl1271_ssid_set(struct wl1271 *wl, struct sk_buff *skb,
2862 const u8 *ptr = cfg80211_find_ie(WLAN_EID_SSID, skb->data + offset,
2866 wl1271_error("No SSID in IEs!");
2871 if (ssid_len > IEEE80211_MAX_SSID_LEN) {
2872 wl1271_error("SSID is too long!");
2876 wl->ssid_len = ssid_len;
2877 memcpy(wl->ssid, ptr+2, ssid_len);
2881 static int wl1271_bss_erp_info_changed(struct wl1271 *wl,
2882 struct ieee80211_bss_conf *bss_conf,
2887 if (changed & BSS_CHANGED_ERP_SLOT) {
2888 if (bss_conf->use_short_slot)
2889 ret = wl1271_acx_slot(wl, SLOT_TIME_SHORT);
2891 ret = wl1271_acx_slot(wl, SLOT_TIME_LONG);
2893 wl1271_warning("Set slot time failed %d", ret);
2898 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
2899 if (bss_conf->use_short_preamble)
2900 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_SHORT);
2902 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_LONG);
2905 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
2906 if (bss_conf->use_cts_prot)
2907 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_ENABLE);
2909 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_DISABLE);
2911 wl1271_warning("Set ctsprotect failed %d", ret);
2920 static int wl1271_bss_beacon_info_changed(struct wl1271 *wl,
2921 struct ieee80211_vif *vif,
2922 struct ieee80211_bss_conf *bss_conf,
2925 bool is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
2928 if ((changed & BSS_CHANGED_BEACON_INT)) {
2929 wl1271_debug(DEBUG_MASTER, "beacon interval updated: %d",
2930 bss_conf->beacon_int);
2932 wl->beacon_int = bss_conf->beacon_int;
2935 if ((changed & BSS_CHANGED_BEACON)) {
2936 struct ieee80211_hdr *hdr;
2937 int ieoffset = offsetof(struct ieee80211_mgmt,
2939 struct sk_buff *beacon = ieee80211_beacon_get(wl->hw, vif);
2945 wl1271_debug(DEBUG_MASTER, "beacon updated");
2947 ret = wl1271_ssid_set(wl, beacon, ieoffset);
2949 dev_kfree_skb(beacon);
2952 tmpl_id = is_ap ? CMD_TEMPL_AP_BEACON :
2954 ret = wl1271_cmd_template_set(wl, tmpl_id,
2957 wl1271_tx_min_rate_get(wl));
2959 dev_kfree_skb(beacon);
2963 hdr = (struct ieee80211_hdr *) beacon->data;
2964 hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
2965 IEEE80211_STYPE_PROBE_RESP);
2967 tmpl_id = is_ap ? CMD_TEMPL_AP_PROBE_RESPONSE :
2968 CMD_TEMPL_PROBE_RESPONSE;
2969 ret = wl1271_cmd_template_set(wl,
2973 wl1271_tx_min_rate_get(wl));
2974 dev_kfree_skb(beacon);
2983 /* AP mode changes */
2984 static void wl1271_bss_info_changed_ap(struct wl1271 *wl,
2985 struct ieee80211_vif *vif,
2986 struct ieee80211_bss_conf *bss_conf,
2991 if ((changed & BSS_CHANGED_BASIC_RATES)) {
2992 u32 rates = bss_conf->basic_rates;
2994 wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl, rates);
2995 wl->basic_rate = wl1271_tx_min_rate_get(wl);
2997 ret = wl1271_init_ap_rates(wl);
2999 wl1271_error("AP rate policy change failed %d", ret);
3003 ret = wl1271_ap_init_templates(wl);
3008 ret = wl1271_bss_beacon_info_changed(wl, vif, bss_conf, changed);
3012 if ((changed & BSS_CHANGED_BEACON_ENABLED)) {
3013 if (bss_conf->enable_beacon) {
3014 if (!test_bit(WL1271_FLAG_AP_STARTED, &wl->flags)) {
3015 ret = wl12xx_cmd_role_start_ap(wl);
3019 set_bit(WL1271_FLAG_AP_STARTED, &wl->flags);
3020 wl1271_debug(DEBUG_AP, "started AP");
3022 ret = wl1271_ap_init_hwenc(wl);
3027 if (test_bit(WL1271_FLAG_AP_STARTED, &wl->flags)) {
3028 ret = wl12xx_cmd_role_stop_ap(wl);
3032 clear_bit(WL1271_FLAG_AP_STARTED, &wl->flags);
3033 wl1271_debug(DEBUG_AP, "stopped AP");
3038 ret = wl1271_bss_erp_info_changed(wl, bss_conf, changed);
3045 /* STA/IBSS mode changes */
3046 static void wl1271_bss_info_changed_sta(struct wl1271 *wl,
3047 struct ieee80211_vif *vif,
3048 struct ieee80211_bss_conf *bss_conf,
3051 bool do_join = false, set_assoc = false;
3052 bool is_ibss = (wl->bss_type == BSS_TYPE_IBSS);
3053 u32 sta_rate_set = 0;
3055 struct ieee80211_sta *sta;
3056 bool sta_exists = false;
3057 struct ieee80211_sta_ht_cap sta_ht_cap;
3060 ret = wl1271_bss_beacon_info_changed(wl, vif, bss_conf,
3066 if ((changed & BSS_CHANGED_BEACON_INT) && is_ibss)
3069 /* Need to update the SSID (for filtering etc) */
3070 if ((changed & BSS_CHANGED_BEACON) && is_ibss)
3073 if ((changed & BSS_CHANGED_BEACON_ENABLED) && is_ibss) {
3074 wl1271_debug(DEBUG_ADHOC, "ad-hoc beaconing: %s",
3075 bss_conf->enable_beacon ? "enabled" : "disabled");
3077 if (bss_conf->enable_beacon)
3078 wl->set_bss_type = BSS_TYPE_IBSS;
3080 wl->set_bss_type = BSS_TYPE_STA_BSS;
3084 if ((changed & BSS_CHANGED_CQM)) {
3085 bool enable = false;
3086 if (bss_conf->cqm_rssi_thold)
3088 ret = wl1271_acx_rssi_snr_trigger(wl, enable,
3089 bss_conf->cqm_rssi_thold,
3090 bss_conf->cqm_rssi_hyst);
3093 wl->rssi_thold = bss_conf->cqm_rssi_thold;
3096 if ((changed & BSS_CHANGED_BSSID) &&
3098 * Now we know the correct bssid, so we send a new join command
3099 * and enable the BSSID filter
3101 memcmp(wl->bssid, bss_conf->bssid, ETH_ALEN)) {
3102 memcpy(wl->bssid, bss_conf->bssid, ETH_ALEN);
3104 if (!is_zero_ether_addr(wl->bssid)) {
3105 ret = wl1271_cmd_build_null_data(wl);
3109 ret = wl1271_build_qos_null_data(wl);
3113 /* Need to update the BSSID (for filtering etc) */
3119 sta = ieee80211_find_sta(vif, bss_conf->bssid);
3121 /* save the supp_rates of the ap */
3122 sta_rate_set = sta->supp_rates[wl->hw->conf.channel->band];
3123 if (sta->ht_cap.ht_supported)
3125 (sta->ht_cap.mcs.rx_mask[0] << HW_HT_RATES_OFFSET);
3126 sta_ht_cap = sta->ht_cap;
3132 /* handle new association with HT and HT information change */
3133 if ((changed & BSS_CHANGED_HT) &&
3134 (bss_conf->channel_type != NL80211_CHAN_NO_HT)) {
3135 ret = wl1271_acx_set_ht_capabilities(wl, &sta_ht_cap,
3138 wl1271_warning("Set ht cap true failed %d",
3142 ret = wl1271_acx_set_ht_information(wl,
3143 bss_conf->ht_operation_mode);
3145 wl1271_warning("Set ht information failed %d",
3150 /* handle new association without HT and disassociation */
3151 else if (changed & BSS_CHANGED_ASSOC) {
3152 ret = wl1271_acx_set_ht_capabilities(wl, &sta_ht_cap,
3155 wl1271_warning("Set ht cap false failed %d",
3162 if ((changed & BSS_CHANGED_ASSOC)) {
3163 if (bss_conf->assoc) {
3166 wl->aid = bss_conf->aid;
3169 wl->ps_poll_failures = 0;
3172 * use basic rates from AP, and determine lowest rate
3173 * to use with control frames.
3175 rates = bss_conf->basic_rates;
3176 wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl,
3178 wl->basic_rate = wl1271_tx_min_rate_get(wl);
3180 wl->rate_set = wl1271_tx_enabled_rates_get(wl,
3182 ret = wl1271_acx_sta_rate_policies(wl);
3187 * with wl1271, we don't need to update the
3188 * beacon_int and dtim_period, because the firmware
3189 * updates it by itself when the first beacon is
3190 * received after a join.
3192 ret = wl1271_cmd_build_ps_poll(wl, wl->aid);
3197 * Get a template for hardware connection maintenance
3199 dev_kfree_skb(wl->probereq);
3200 wl->probereq = wl1271_cmd_build_ap_probe_req(wl, NULL);
3201 ieoffset = offsetof(struct ieee80211_mgmt,
3202 u.probe_req.variable);
3203 wl1271_ssid_set(wl, wl->probereq, ieoffset);
3205 /* enable the connection monitoring feature */
3206 ret = wl1271_acx_conn_monit_params(wl, true);
3210 /* If we want to go in PSM but we're not there yet */
3211 if (test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags) &&
3212 !test_bit(WL1271_FLAG_PSM, &wl->flags)) {
3213 enum wl1271_cmd_ps_mode mode;
3215 mode = STATION_POWER_SAVE_MODE;
3216 ret = wl1271_ps_set_mode(wl, mode,
3223 /* use defaults when not associated */
3225 !!test_and_clear_bit(WL1271_FLAG_STA_ASSOCIATED,
3227 clear_bit(WL1271_FLAG_STA_STATE_SENT, &wl->flags);
3230 /* free probe-request template */
3231 dev_kfree_skb(wl->probereq);
3232 wl->probereq = NULL;
3234 /* re-enable dynamic ps - just in case */
3235 ieee80211_enable_dyn_ps(wl->vif);
3237 /* revert back to minimum rates for the current band */
3238 wl1271_set_band_rate(wl);
3239 wl->basic_rate = wl1271_tx_min_rate_get(wl);
3240 ret = wl1271_acx_sta_rate_policies(wl);
3244 /* disable connection monitor features */
3245 ret = wl1271_acx_conn_monit_params(wl, false);
3247 /* Disable the keep-alive feature */
3248 ret = wl1271_acx_keep_alive_mode(wl, false);
3252 /* restore the bssid filter and go to dummy bssid */
3255 wl1271_dummy_join(wl);
3260 if (changed & BSS_CHANGED_IBSS) {
3261 wl1271_debug(DEBUG_ADHOC, "ibss_joined: %d",
3262 bss_conf->ibss_joined);
3264 if (bss_conf->ibss_joined) {
3265 u32 rates = bss_conf->basic_rates;
3266 wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl,
3268 wl->basic_rate = wl1271_tx_min_rate_get(wl);
3270 /* by default, use 11b rates */
3271 wl->rate_set = CONF_TX_IBSS_DEFAULT_RATES;
3272 ret = wl1271_acx_sta_rate_policies(wl);
3278 ret = wl1271_bss_erp_info_changed(wl, bss_conf, changed);
3282 if (changed & BSS_CHANGED_ARP_FILTER) {
3283 __be32 addr = bss_conf->arp_addr_list[0];
3284 WARN_ON(wl->bss_type != BSS_TYPE_STA_BSS);
3286 if (bss_conf->arp_addr_cnt == 1 &&
3287 bss_conf->arp_filter_enabled) {
3289 * The template should have been configured only upon
3290 * association. however, it seems that the correct ip
3291 * isn't being set (when sending), so we have to
3292 * reconfigure the template upon every ip change.
3294 ret = wl1271_cmd_build_arp_rsp(wl, addr);
3296 wl1271_warning("build arp rsp failed: %d", ret);
3300 ret = wl1271_acx_arp_ip_filter(wl,
3301 ACX_ARP_FILTER_ARP_FILTERING,
3304 ret = wl1271_acx_arp_ip_filter(wl, 0, addr);
3311 ret = wl1271_join(wl, set_assoc);
3313 wl1271_warning("cmd join failed %d", ret);
3316 wl1271_check_operstate(wl, ieee80211_get_operstate(vif));
3323 static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
3324 struct ieee80211_vif *vif,
3325 struct ieee80211_bss_conf *bss_conf,
3328 struct wl1271 *wl = hw->priv;
3329 bool is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
3332 wl1271_debug(DEBUG_MAC80211, "mac80211 bss info changed 0x%x",
3335 mutex_lock(&wl->mutex);
3337 if (unlikely(wl->state == WL1271_STATE_OFF))
3340 ret = wl1271_ps_elp_wakeup(wl);
3345 wl1271_bss_info_changed_ap(wl, vif, bss_conf, changed);
3347 wl1271_bss_info_changed_sta(wl, vif, bss_conf, changed);
3349 wl1271_ps_elp_sleep(wl);
3352 mutex_unlock(&wl->mutex);
3355 static int wl1271_op_conf_tx(struct ieee80211_hw *hw, u16 queue,
3356 const struct ieee80211_tx_queue_params *params)
3358 struct wl1271 *wl = hw->priv;
3362 mutex_lock(&wl->mutex);
3364 wl1271_debug(DEBUG_MAC80211, "mac80211 conf tx %d", queue);
3367 ps_scheme = CONF_PS_SCHEME_UPSD_TRIGGER;
3369 ps_scheme = CONF_PS_SCHEME_LEGACY;
3371 if (wl->state == WL1271_STATE_OFF) {
3373 * If the state is off, the parameters will be recorded and
3374 * configured on init. This happens in AP-mode.
3376 struct conf_tx_ac_category *conf_ac =
3377 &wl->conf.tx.ac_conf[wl1271_tx_get_queue(queue)];
3378 struct conf_tx_tid *conf_tid =
3379 &wl->conf.tx.tid_conf[wl1271_tx_get_queue(queue)];
3381 conf_ac->ac = wl1271_tx_get_queue(queue);
3382 conf_ac->cw_min = (u8)params->cw_min;
3383 conf_ac->cw_max = params->cw_max;
3384 conf_ac->aifsn = params->aifs;
3385 conf_ac->tx_op_limit = params->txop << 5;
3387 conf_tid->queue_id = wl1271_tx_get_queue(queue);
3388 conf_tid->channel_type = CONF_CHANNEL_TYPE_EDCF;
3389 conf_tid->tsid = wl1271_tx_get_queue(queue);
3390 conf_tid->ps_scheme = ps_scheme;
3391 conf_tid->ack_policy = CONF_ACK_POLICY_LEGACY;
3392 conf_tid->apsd_conf[0] = 0;
3393 conf_tid->apsd_conf[1] = 0;
3397 ret = wl1271_ps_elp_wakeup(wl);
3402 * the txop is confed in units of 32us by the mac80211,
3405 ret = wl1271_acx_ac_cfg(wl, wl1271_tx_get_queue(queue),
3406 params->cw_min, params->cw_max,
3407 params->aifs, params->txop << 5);
3411 ret = wl1271_acx_tid_cfg(wl, wl1271_tx_get_queue(queue),
3412 CONF_CHANNEL_TYPE_EDCF,
3413 wl1271_tx_get_queue(queue),
3414 ps_scheme, CONF_ACK_POLICY_LEGACY,
3418 wl1271_ps_elp_sleep(wl);
3421 mutex_unlock(&wl->mutex);
3426 static u64 wl1271_op_get_tsf(struct ieee80211_hw *hw)
3429 struct wl1271 *wl = hw->priv;
3430 u64 mactime = ULLONG_MAX;
3433 wl1271_debug(DEBUG_MAC80211, "mac80211 get tsf");
3435 mutex_lock(&wl->mutex);
3437 if (unlikely(wl->state == WL1271_STATE_OFF))
3440 ret = wl1271_ps_elp_wakeup(wl);
3444 ret = wl1271_acx_tsf_info(wl, &mactime);
3449 wl1271_ps_elp_sleep(wl);
3452 mutex_unlock(&wl->mutex);
3456 static int wl1271_op_get_survey(struct ieee80211_hw *hw, int idx,
3457 struct survey_info *survey)
3459 struct wl1271 *wl = hw->priv;
3460 struct ieee80211_conf *conf = &hw->conf;
3465 survey->channel = conf->channel;
3466 survey->filled = SURVEY_INFO_NOISE_DBM;
3467 survey->noise = wl->noise;
3472 static int wl1271_allocate_sta(struct wl1271 *wl,
3473 struct ieee80211_sta *sta,
3476 struct wl1271_station *wl_sta;
3479 id = find_first_zero_bit(wl->ap_hlid_map, AP_MAX_STATIONS);
3480 if (id >= AP_MAX_STATIONS) {
3481 wl1271_warning("could not allocate HLID - too much stations");
3485 wl_sta = (struct wl1271_station *)sta->drv_priv;
3486 __set_bit(id, wl->ap_hlid_map);
3487 wl_sta->hlid = WL1271_AP_STA_HLID_START + id;
3488 *hlid = wl_sta->hlid;
3489 memcpy(wl->links[wl_sta->hlid].addr, sta->addr, ETH_ALEN);
3493 static void wl1271_free_sta(struct wl1271 *wl, u8 hlid)
3495 int id = hlid - WL1271_AP_STA_HLID_START;
3497 if (WARN_ON(!test_bit(id, wl->ap_hlid_map)))
3500 __clear_bit(id, wl->ap_hlid_map);
3501 memset(wl->links[hlid].addr, 0, ETH_ALEN);
3502 wl1271_tx_reset_link_queues(wl, hlid);
3503 __clear_bit(hlid, &wl->ap_ps_map);
3504 __clear_bit(hlid, (unsigned long *)&wl->ap_fw_ps_map);
3507 bool wl1271_is_active_sta(struct wl1271 *wl, u8 hlid)
3509 int id = hlid - WL1271_AP_STA_HLID_START;
3510 return test_bit(id, wl->ap_hlid_map);
3513 static int wl1271_op_sta_add(struct ieee80211_hw *hw,
3514 struct ieee80211_vif *vif,
3515 struct ieee80211_sta *sta)
3517 struct wl1271 *wl = hw->priv;
3521 mutex_lock(&wl->mutex);
3523 if (unlikely(wl->state == WL1271_STATE_OFF))
3526 if (wl->bss_type != BSS_TYPE_AP_BSS)
3529 wl1271_debug(DEBUG_MAC80211, "mac80211 add sta %d", (int)sta->aid);
3531 ret = wl1271_allocate_sta(wl, sta, &hlid);
3535 ret = wl1271_ps_elp_wakeup(wl);
3539 ret = wl12xx_cmd_add_peer(wl, sta, hlid);
3544 wl1271_ps_elp_sleep(wl);
3548 wl1271_free_sta(wl, hlid);
3551 mutex_unlock(&wl->mutex);
3555 static int wl1271_op_sta_remove(struct ieee80211_hw *hw,
3556 struct ieee80211_vif *vif,
3557 struct ieee80211_sta *sta)
3559 struct wl1271 *wl = hw->priv;
3560 struct wl1271_station *wl_sta;
3563 mutex_lock(&wl->mutex);
3565 if (unlikely(wl->state == WL1271_STATE_OFF))
3568 if (wl->bss_type != BSS_TYPE_AP_BSS)
3571 wl1271_debug(DEBUG_MAC80211, "mac80211 remove sta %d", (int)sta->aid);
3573 wl_sta = (struct wl1271_station *)sta->drv_priv;
3574 id = wl_sta->hlid - WL1271_AP_STA_HLID_START;
3575 if (WARN_ON(!test_bit(id, wl->ap_hlid_map)))
3578 ret = wl1271_ps_elp_wakeup(wl);
3582 ret = wl12xx_cmd_remove_peer(wl, wl_sta->hlid);
3586 wl1271_free_sta(wl, wl_sta->hlid);
3589 wl1271_ps_elp_sleep(wl);
3592 mutex_unlock(&wl->mutex);
3596 static int wl1271_op_ampdu_action(struct ieee80211_hw *hw,
3597 struct ieee80211_vif *vif,
3598 enum ieee80211_ampdu_mlme_action action,
3599 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
3602 struct wl1271 *wl = hw->priv;
3605 mutex_lock(&wl->mutex);
3607 if (unlikely(wl->state == WL1271_STATE_OFF)) {
3612 ret = wl1271_ps_elp_wakeup(wl);
3616 wl1271_debug(DEBUG_MAC80211, "mac80211 ampdu: Rx tid %d action %d",
3620 case IEEE80211_AMPDU_RX_START:
3621 if ((wl->ba_support) && (wl->ba_allowed)) {
3622 ret = wl1271_acx_set_ba_receiver_session(wl, tid, *ssn,
3625 wl->ba_rx_bitmap |= BIT(tid);
3631 case IEEE80211_AMPDU_RX_STOP:
3632 ret = wl1271_acx_set_ba_receiver_session(wl, tid, 0, false);
3634 wl->ba_rx_bitmap &= ~BIT(tid);
3638 * The BA initiator session management in FW independently.
3639 * Falling break here on purpose for all TX APDU commands.
3641 case IEEE80211_AMPDU_TX_START:
3642 case IEEE80211_AMPDU_TX_STOP:
3643 case IEEE80211_AMPDU_TX_OPERATIONAL:
3648 wl1271_error("Incorrect ampdu action id=%x\n", action);
3652 wl1271_ps_elp_sleep(wl);
3655 mutex_unlock(&wl->mutex);
3660 static bool wl1271_tx_frames_pending(struct ieee80211_hw *hw)
3662 struct wl1271 *wl = hw->priv;
3665 mutex_lock(&wl->mutex);
3667 if (unlikely(wl->state == WL1271_STATE_OFF))
3670 /* packets are considered pending if in the TX queue or the FW */
3671 ret = (wl1271_tx_total_queue_count(wl) > 0) || (wl->tx_frames_cnt > 0);
3673 /* the above is appropriate for STA mode for PS purposes */
3674 WARN_ON(wl->bss_type != BSS_TYPE_STA_BSS);
3677 mutex_unlock(&wl->mutex);
3682 /* can't be const, mac80211 writes to this */
3683 static struct ieee80211_rate wl1271_rates[] = {
3685 .hw_value = CONF_HW_BIT_RATE_1MBPS,
3686 .hw_value_short = CONF_HW_BIT_RATE_1MBPS, },
3688 .hw_value = CONF_HW_BIT_RATE_2MBPS,
3689 .hw_value_short = CONF_HW_BIT_RATE_2MBPS,
3690 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
3692 .hw_value = CONF_HW_BIT_RATE_5_5MBPS,
3693 .hw_value_short = CONF_HW_BIT_RATE_5_5MBPS,
3694 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
3696 .hw_value = CONF_HW_BIT_RATE_11MBPS,
3697 .hw_value_short = CONF_HW_BIT_RATE_11MBPS,
3698 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
3700 .hw_value = CONF_HW_BIT_RATE_6MBPS,
3701 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
3703 .hw_value = CONF_HW_BIT_RATE_9MBPS,
3704 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
3706 .hw_value = CONF_HW_BIT_RATE_12MBPS,
3707 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
3709 .hw_value = CONF_HW_BIT_RATE_18MBPS,
3710 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
3712 .hw_value = CONF_HW_BIT_RATE_24MBPS,
3713 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
3715 .hw_value = CONF_HW_BIT_RATE_36MBPS,
3716 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
3718 .hw_value = CONF_HW_BIT_RATE_48MBPS,
3719 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
3721 .hw_value = CONF_HW_BIT_RATE_54MBPS,
3722 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
3725 /* can't be const, mac80211 writes to this */
3726 static struct ieee80211_channel wl1271_channels[] = {
3727 { .hw_value = 1, .center_freq = 2412, .max_power = 25 },
3728 { .hw_value = 2, .center_freq = 2417, .max_power = 25 },
3729 { .hw_value = 3, .center_freq = 2422, .max_power = 25 },
3730 { .hw_value = 4, .center_freq = 2427, .max_power = 25 },
3731 { .hw_value = 5, .center_freq = 2432, .max_power = 25 },
3732 { .hw_value = 6, .center_freq = 2437, .max_power = 25 },
3733 { .hw_value = 7, .center_freq = 2442, .max_power = 25 },
3734 { .hw_value = 8, .center_freq = 2447, .max_power = 25 },
3735 { .hw_value = 9, .center_freq = 2452, .max_power = 25 },
3736 { .hw_value = 10, .center_freq = 2457, .max_power = 25 },
3737 { .hw_value = 11, .center_freq = 2462, .max_power = 25 },
3738 { .hw_value = 12, .center_freq = 2467, .max_power = 25 },
3739 { .hw_value = 13, .center_freq = 2472, .max_power = 25 },
3740 { .hw_value = 14, .center_freq = 2484, .max_power = 25 },
3743 /* mapping to indexes for wl1271_rates */
3744 static const u8 wl1271_rate_to_idx_2ghz[] = {
3745 /* MCS rates are used only with 11n */
3746 7, /* CONF_HW_RXTX_RATE_MCS7 */
3747 6, /* CONF_HW_RXTX_RATE_MCS6 */
3748 5, /* CONF_HW_RXTX_RATE_MCS5 */
3749 4, /* CONF_HW_RXTX_RATE_MCS4 */
3750 3, /* CONF_HW_RXTX_RATE_MCS3 */
3751 2, /* CONF_HW_RXTX_RATE_MCS2 */
3752 1, /* CONF_HW_RXTX_RATE_MCS1 */
3753 0, /* CONF_HW_RXTX_RATE_MCS0 */
3755 11, /* CONF_HW_RXTX_RATE_54 */
3756 10, /* CONF_HW_RXTX_RATE_48 */
3757 9, /* CONF_HW_RXTX_RATE_36 */
3758 8, /* CONF_HW_RXTX_RATE_24 */
3760 /* TI-specific rate */
3761 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
3763 7, /* CONF_HW_RXTX_RATE_18 */
3764 6, /* CONF_HW_RXTX_RATE_12 */
3765 3, /* CONF_HW_RXTX_RATE_11 */
3766 5, /* CONF_HW_RXTX_RATE_9 */
3767 4, /* CONF_HW_RXTX_RATE_6 */
3768 2, /* CONF_HW_RXTX_RATE_5_5 */
3769 1, /* CONF_HW_RXTX_RATE_2 */
3770 0 /* CONF_HW_RXTX_RATE_1 */
3773 /* 11n STA capabilities */
3774 #define HW_RX_HIGHEST_RATE 72
3776 #ifdef CONFIG_WL12XX_HT
3777 #define WL12XX_HT_CAP { \
3778 .cap = IEEE80211_HT_CAP_GRN_FLD | IEEE80211_HT_CAP_SGI_20 | \
3779 (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT), \
3780 .ht_supported = true, \
3781 .ampdu_factor = IEEE80211_HT_MAX_AMPDU_8K, \
3782 .ampdu_density = IEEE80211_HT_MPDU_DENSITY_8, \
3784 .rx_mask = { 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, \
3785 .rx_highest = cpu_to_le16(HW_RX_HIGHEST_RATE), \
3786 .tx_params = IEEE80211_HT_MCS_TX_DEFINED, \
3790 #define WL12XX_HT_CAP { \
3791 .ht_supported = false, \
3795 /* can't be const, mac80211 writes to this */
3796 static struct ieee80211_supported_band wl1271_band_2ghz = {
3797 .channels = wl1271_channels,
3798 .n_channels = ARRAY_SIZE(wl1271_channels),
3799 .bitrates = wl1271_rates,
3800 .n_bitrates = ARRAY_SIZE(wl1271_rates),
3801 .ht_cap = WL12XX_HT_CAP,
3804 /* 5 GHz data rates for WL1273 */
3805 static struct ieee80211_rate wl1271_rates_5ghz[] = {
3807 .hw_value = CONF_HW_BIT_RATE_6MBPS,
3808 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
3810 .hw_value = CONF_HW_BIT_RATE_9MBPS,
3811 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
3813 .hw_value = CONF_HW_BIT_RATE_12MBPS,
3814 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
3816 .hw_value = CONF_HW_BIT_RATE_18MBPS,
3817 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
3819 .hw_value = CONF_HW_BIT_RATE_24MBPS,
3820 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
3822 .hw_value = CONF_HW_BIT_RATE_36MBPS,
3823 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
3825 .hw_value = CONF_HW_BIT_RATE_48MBPS,
3826 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
3828 .hw_value = CONF_HW_BIT_RATE_54MBPS,
3829 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
3832 /* 5 GHz band channels for WL1273 */
3833 static struct ieee80211_channel wl1271_channels_5ghz[] = {
3834 { .hw_value = 7, .center_freq = 5035, .max_power = 25 },
3835 { .hw_value = 8, .center_freq = 5040, .max_power = 25 },
3836 { .hw_value = 9, .center_freq = 5045, .max_power = 25 },
3837 { .hw_value = 11, .center_freq = 5055, .max_power = 25 },
3838 { .hw_value = 12, .center_freq = 5060, .max_power = 25 },
3839 { .hw_value = 16, .center_freq = 5080, .max_power = 25 },
3840 { .hw_value = 34, .center_freq = 5170, .max_power = 25 },
3841 { .hw_value = 36, .center_freq = 5180, .max_power = 25 },
3842 { .hw_value = 38, .center_freq = 5190, .max_power = 25 },
3843 { .hw_value = 40, .center_freq = 5200, .max_power = 25 },
3844 { .hw_value = 42, .center_freq = 5210, .max_power = 25 },
3845 { .hw_value = 44, .center_freq = 5220, .max_power = 25 },
3846 { .hw_value = 46, .center_freq = 5230, .max_power = 25 },
3847 { .hw_value = 48, .center_freq = 5240, .max_power = 25 },
3848 { .hw_value = 52, .center_freq = 5260, .max_power = 25 },
3849 { .hw_value = 56, .center_freq = 5280, .max_power = 25 },
3850 { .hw_value = 60, .center_freq = 5300, .max_power = 25 },
3851 { .hw_value = 64, .center_freq = 5320, .max_power = 25 },
3852 { .hw_value = 100, .center_freq = 5500, .max_power = 25 },
3853 { .hw_value = 104, .center_freq = 5520, .max_power = 25 },
3854 { .hw_value = 108, .center_freq = 5540, .max_power = 25 },
3855 { .hw_value = 112, .center_freq = 5560, .max_power = 25 },
3856 { .hw_value = 116, .center_freq = 5580, .max_power = 25 },
3857 { .hw_value = 120, .center_freq = 5600, .max_power = 25 },
3858 { .hw_value = 124, .center_freq = 5620, .max_power = 25 },
3859 { .hw_value = 128, .center_freq = 5640, .max_power = 25 },
3860 { .hw_value = 132, .center_freq = 5660, .max_power = 25 },
3861 { .hw_value = 136, .center_freq = 5680, .max_power = 25 },
3862 { .hw_value = 140, .center_freq = 5700, .max_power = 25 },
3863 { .hw_value = 149, .center_freq = 5745, .max_power = 25 },
3864 { .hw_value = 153, .center_freq = 5765, .max_power = 25 },
3865 { .hw_value = 157, .center_freq = 5785, .max_power = 25 },
3866 { .hw_value = 161, .center_freq = 5805, .max_power = 25 },
3867 { .hw_value = 165, .center_freq = 5825, .max_power = 25 },
3870 /* mapping to indexes for wl1271_rates_5ghz */
3871 static const u8 wl1271_rate_to_idx_5ghz[] = {
3872 /* MCS rates are used only with 11n */
3873 7, /* CONF_HW_RXTX_RATE_MCS7 */
3874 6, /* CONF_HW_RXTX_RATE_MCS6 */
3875 5, /* CONF_HW_RXTX_RATE_MCS5 */
3876 4, /* CONF_HW_RXTX_RATE_MCS4 */
3877 3, /* CONF_HW_RXTX_RATE_MCS3 */
3878 2, /* CONF_HW_RXTX_RATE_MCS2 */
3879 1, /* CONF_HW_RXTX_RATE_MCS1 */
3880 0, /* CONF_HW_RXTX_RATE_MCS0 */
3882 7, /* CONF_HW_RXTX_RATE_54 */
3883 6, /* CONF_HW_RXTX_RATE_48 */
3884 5, /* CONF_HW_RXTX_RATE_36 */
3885 4, /* CONF_HW_RXTX_RATE_24 */
3887 /* TI-specific rate */
3888 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
3890 3, /* CONF_HW_RXTX_RATE_18 */
3891 2, /* CONF_HW_RXTX_RATE_12 */
3892 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_11 */
3893 1, /* CONF_HW_RXTX_RATE_9 */
3894 0, /* CONF_HW_RXTX_RATE_6 */
3895 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_5_5 */
3896 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_2 */
3897 CONF_HW_RXTX_RATE_UNSUPPORTED /* CONF_HW_RXTX_RATE_1 */
3900 static struct ieee80211_supported_band wl1271_band_5ghz = {
3901 .channels = wl1271_channels_5ghz,
3902 .n_channels = ARRAY_SIZE(wl1271_channels_5ghz),
3903 .bitrates = wl1271_rates_5ghz,
3904 .n_bitrates = ARRAY_SIZE(wl1271_rates_5ghz),
3905 .ht_cap = WL12XX_HT_CAP,
3908 static const u8 *wl1271_band_rate_to_idx[] = {
3909 [IEEE80211_BAND_2GHZ] = wl1271_rate_to_idx_2ghz,
3910 [IEEE80211_BAND_5GHZ] = wl1271_rate_to_idx_5ghz
3913 static const struct ieee80211_ops wl1271_ops = {
3914 .start = wl1271_op_start,
3915 .stop = wl1271_op_stop,
3916 .add_interface = wl1271_op_add_interface,
3917 .remove_interface = wl1271_op_remove_interface,
3919 .suspend = wl1271_op_suspend,
3920 .resume = wl1271_op_resume,
3922 .config = wl1271_op_config,
3923 .prepare_multicast = wl1271_op_prepare_multicast,
3924 .configure_filter = wl1271_op_configure_filter,
3926 .set_key = wl1271_op_set_key,
3927 .hw_scan = wl1271_op_hw_scan,
3928 .cancel_hw_scan = wl1271_op_cancel_hw_scan,
3929 .sched_scan_start = wl1271_op_sched_scan_start,
3930 .sched_scan_stop = wl1271_op_sched_scan_stop,
3931 .bss_info_changed = wl1271_op_bss_info_changed,
3932 .set_frag_threshold = wl1271_op_set_frag_threshold,
3933 .set_rts_threshold = wl1271_op_set_rts_threshold,
3934 .conf_tx = wl1271_op_conf_tx,
3935 .get_tsf = wl1271_op_get_tsf,
3936 .get_survey = wl1271_op_get_survey,
3937 .sta_add = wl1271_op_sta_add,
3938 .sta_remove = wl1271_op_sta_remove,
3939 .ampdu_action = wl1271_op_ampdu_action,
3940 .tx_frames_pending = wl1271_tx_frames_pending,
3941 CFG80211_TESTMODE_CMD(wl1271_tm_cmd)
3945 u8 wl1271_rate_to_idx(int rate, enum ieee80211_band band)
3949 BUG_ON(band >= sizeof(wl1271_band_rate_to_idx)/sizeof(u8 *));
3951 if (unlikely(rate >= CONF_HW_RXTX_RATE_MAX)) {
3952 wl1271_error("Illegal RX rate from HW: %d", rate);
3956 idx = wl1271_band_rate_to_idx[band][rate];
3957 if (unlikely(idx == CONF_HW_RXTX_RATE_UNSUPPORTED)) {
3958 wl1271_error("Unsupported RX rate from HW: %d", rate);
3965 static ssize_t wl1271_sysfs_show_bt_coex_state(struct device *dev,
3966 struct device_attribute *attr,
3969 struct wl1271 *wl = dev_get_drvdata(dev);
3974 mutex_lock(&wl->mutex);
3975 len = snprintf(buf, len, "%d\n\n0 - off\n1 - on\n",
3977 mutex_unlock(&wl->mutex);
3983 static ssize_t wl1271_sysfs_store_bt_coex_state(struct device *dev,
3984 struct device_attribute *attr,
3985 const char *buf, size_t count)
3987 struct wl1271 *wl = dev_get_drvdata(dev);
3991 ret = kstrtoul(buf, 10, &res);
3993 wl1271_warning("incorrect value written to bt_coex_mode");
3997 mutex_lock(&wl->mutex);
4001 if (res == wl->sg_enabled)
4004 wl->sg_enabled = res;
4006 if (wl->state == WL1271_STATE_OFF)
4009 ret = wl1271_ps_elp_wakeup(wl);
4013 wl1271_acx_sg_enable(wl, wl->sg_enabled);
4014 wl1271_ps_elp_sleep(wl);
4017 mutex_unlock(&wl->mutex);
4021 static DEVICE_ATTR(bt_coex_state, S_IRUGO | S_IWUSR,
4022 wl1271_sysfs_show_bt_coex_state,
4023 wl1271_sysfs_store_bt_coex_state);
4025 static ssize_t wl1271_sysfs_show_hw_pg_ver(struct device *dev,
4026 struct device_attribute *attr,
4029 struct wl1271 *wl = dev_get_drvdata(dev);
4034 mutex_lock(&wl->mutex);
4035 if (wl->hw_pg_ver >= 0)
4036 len = snprintf(buf, len, "%d\n", wl->hw_pg_ver);
4038 len = snprintf(buf, len, "n/a\n");
4039 mutex_unlock(&wl->mutex);
4044 static DEVICE_ATTR(hw_pg_ver, S_IRUGO,
4045 wl1271_sysfs_show_hw_pg_ver, NULL);
4047 static ssize_t wl1271_sysfs_read_fwlog(struct file *filp, struct kobject *kobj,
4048 struct bin_attribute *bin_attr,
4049 char *buffer, loff_t pos, size_t count)
4051 struct device *dev = container_of(kobj, struct device, kobj);
4052 struct wl1271 *wl = dev_get_drvdata(dev);
4056 ret = mutex_lock_interruptible(&wl->mutex);
4058 return -ERESTARTSYS;
4060 /* Let only one thread read the log at a time, blocking others */
4061 while (wl->fwlog_size == 0) {
4064 prepare_to_wait_exclusive(&wl->fwlog_waitq,
4066 TASK_INTERRUPTIBLE);
4068 if (wl->fwlog_size != 0) {
4069 finish_wait(&wl->fwlog_waitq, &wait);
4073 mutex_unlock(&wl->mutex);
4076 finish_wait(&wl->fwlog_waitq, &wait);
4078 if (signal_pending(current))
4079 return -ERESTARTSYS;
4081 ret = mutex_lock_interruptible(&wl->mutex);
4083 return -ERESTARTSYS;
4086 /* Check if the fwlog is still valid */
4087 if (wl->fwlog_size < 0) {
4088 mutex_unlock(&wl->mutex);
4092 /* Seeking is not supported - old logs are not kept. Disregard pos. */
4093 len = min(count, (size_t)wl->fwlog_size);
4094 wl->fwlog_size -= len;
4095 memcpy(buffer, wl->fwlog, len);
4097 /* Make room for new messages */
4098 memmove(wl->fwlog, wl->fwlog + len, wl->fwlog_size);
4100 mutex_unlock(&wl->mutex);
4105 static struct bin_attribute fwlog_attr = {
4106 .attr = {.name = "fwlog", .mode = S_IRUSR},
4107 .read = wl1271_sysfs_read_fwlog,
4110 int wl1271_register_hw(struct wl1271 *wl)
4114 if (wl->mac80211_registered)
4117 ret = wl1271_fetch_nvs(wl);
4119 /* NOTE: The wl->nvs->nvs element must be first, in
4120 * order to simplify the casting, we assume it is at
4121 * the beginning of the wl->nvs structure.
4123 u8 *nvs_ptr = (u8 *)wl->nvs;
4125 wl->mac_addr[0] = nvs_ptr[11];
4126 wl->mac_addr[1] = nvs_ptr[10];
4127 wl->mac_addr[2] = nvs_ptr[6];
4128 wl->mac_addr[3] = nvs_ptr[5];
4129 wl->mac_addr[4] = nvs_ptr[4];
4130 wl->mac_addr[5] = nvs_ptr[3];
4133 SET_IEEE80211_PERM_ADDR(wl->hw, wl->mac_addr);
4135 ret = ieee80211_register_hw(wl->hw);
4137 wl1271_error("unable to register mac80211 hw: %d", ret);
4141 wl->mac80211_registered = true;
4143 wl1271_debugfs_init(wl);
4145 register_netdevice_notifier(&wl1271_dev_notifier);
4147 wl1271_notice("loaded");
4151 EXPORT_SYMBOL_GPL(wl1271_register_hw);
4153 void wl1271_unregister_hw(struct wl1271 *wl)
4155 if (wl->state == WL1271_STATE_PLT)
4156 __wl1271_plt_stop(wl);
4158 unregister_netdevice_notifier(&wl1271_dev_notifier);
4159 ieee80211_unregister_hw(wl->hw);
4160 wl->mac80211_registered = false;
4163 EXPORT_SYMBOL_GPL(wl1271_unregister_hw);
4165 int wl1271_init_ieee80211(struct wl1271 *wl)
4167 static const u32 cipher_suites[] = {
4168 WLAN_CIPHER_SUITE_WEP40,
4169 WLAN_CIPHER_SUITE_WEP104,
4170 WLAN_CIPHER_SUITE_TKIP,
4171 WLAN_CIPHER_SUITE_CCMP,
4172 WL1271_CIPHER_SUITE_GEM,
4175 /* The tx descriptor buffer and the TKIP space. */
4176 wl->hw->extra_tx_headroom = WL1271_TKIP_IV_SPACE +
4177 sizeof(struct wl1271_tx_hw_descr);
4180 /* FIXME: find a proper value */
4181 wl->hw->channel_change_time = 10000;
4182 wl->hw->max_listen_interval = wl->conf.conn.max_listen_interval;
4184 wl->hw->flags = IEEE80211_HW_SIGNAL_DBM |
4185 IEEE80211_HW_BEACON_FILTER |
4186 IEEE80211_HW_SUPPORTS_PS |
4187 IEEE80211_HW_SUPPORTS_UAPSD |
4188 IEEE80211_HW_HAS_RATE_CONTROL |
4189 IEEE80211_HW_CONNECTION_MONITOR |
4190 IEEE80211_HW_SUPPORTS_CQM_RSSI |
4191 IEEE80211_HW_REPORTS_TX_ACK_STATUS |
4192 IEEE80211_HW_SPECTRUM_MGMT |
4193 IEEE80211_HW_AP_LINK_PS;
4195 wl->hw->wiphy->cipher_suites = cipher_suites;
4196 wl->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
4198 wl->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
4199 BIT(NL80211_IFTYPE_ADHOC) | BIT(NL80211_IFTYPE_AP);
4200 wl->hw->wiphy->max_scan_ssids = 1;
4202 * Maximum length of elements in scanning probe request templates
4203 * should be the maximum length possible for a template, without
4204 * the IEEE80211 header of the template
4206 wl->hw->wiphy->max_scan_ie_len = WL1271_CMD_TEMPL_MAX_SIZE -
4207 sizeof(struct ieee80211_header);
4209 /* make sure all our channels fit in the scanned_ch bitmask */
4210 BUILD_BUG_ON(ARRAY_SIZE(wl1271_channels) +
4211 ARRAY_SIZE(wl1271_channels_5ghz) >
4212 WL1271_MAX_CHANNELS);
4214 * We keep local copies of the band structs because we need to
4215 * modify them on a per-device basis.
4217 memcpy(&wl->bands[IEEE80211_BAND_2GHZ], &wl1271_band_2ghz,
4218 sizeof(wl1271_band_2ghz));
4219 memcpy(&wl->bands[IEEE80211_BAND_5GHZ], &wl1271_band_5ghz,
4220 sizeof(wl1271_band_5ghz));
4222 wl->hw->wiphy->bands[IEEE80211_BAND_2GHZ] =
4223 &wl->bands[IEEE80211_BAND_2GHZ];
4224 wl->hw->wiphy->bands[IEEE80211_BAND_5GHZ] =
4225 &wl->bands[IEEE80211_BAND_5GHZ];
4228 wl->hw->max_rates = 1;
4230 wl->hw->wiphy->reg_notifier = wl1271_reg_notify;
4232 SET_IEEE80211_DEV(wl->hw, wl1271_wl_to_dev(wl));
4234 wl->hw->sta_data_size = sizeof(struct wl1271_station);
4236 wl->hw->max_rx_aggregation_subframes = 8;
4240 EXPORT_SYMBOL_GPL(wl1271_init_ieee80211);
4242 #define WL1271_DEFAULT_CHANNEL 0
4244 struct ieee80211_hw *wl1271_alloc_hw(void)
4246 struct ieee80211_hw *hw;
4247 struct platform_device *plat_dev = NULL;
4252 hw = ieee80211_alloc_hw(sizeof(*wl), &wl1271_ops);
4254 wl1271_error("could not alloc ieee80211_hw");
4259 plat_dev = kmemdup(&wl1271_device, sizeof(wl1271_device), GFP_KERNEL);
4261 wl1271_error("could not allocate platform_device");
4263 goto err_plat_alloc;
4267 memset(wl, 0, sizeof(*wl));
4269 INIT_LIST_HEAD(&wl->list);
4272 wl->plat_dev = plat_dev;
4274 for (i = 0; i < NUM_TX_QUEUES; i++)
4275 skb_queue_head_init(&wl->tx_queue[i]);
4277 for (i = 0; i < NUM_TX_QUEUES; i++)
4278 for (j = 0; j < AP_MAX_LINKS; j++)
4279 skb_queue_head_init(&wl->links[j].tx_queue[i]);
4281 skb_queue_head_init(&wl->deferred_rx_queue);
4282 skb_queue_head_init(&wl->deferred_tx_queue);
4284 INIT_DELAYED_WORK(&wl->elp_work, wl1271_elp_work);
4285 INIT_DELAYED_WORK(&wl->pspoll_work, wl1271_pspoll_work);
4286 INIT_WORK(&wl->netstack_work, wl1271_netstack_work);
4287 INIT_WORK(&wl->tx_work, wl1271_tx_work);
4288 INIT_WORK(&wl->recovery_work, wl1271_recovery_work);
4289 INIT_DELAYED_WORK(&wl->scan_complete_work, wl1271_scan_complete_work);
4290 INIT_WORK(&wl->rx_streaming_enable_work,
4291 wl1271_rx_streaming_enable_work);
4292 INIT_WORK(&wl->rx_streaming_disable_work,
4293 wl1271_rx_streaming_disable_work);
4295 wl->freezable_wq = create_freezable_workqueue("wl12xx_wq");
4296 if (!wl->freezable_wq) {
4301 wl->channel = WL1271_DEFAULT_CHANNEL;
4302 wl->beacon_int = WL1271_DEFAULT_BEACON_INT;
4303 wl->default_key = 0;
4305 wl->psm_entry_retry = 0;
4306 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
4307 wl->basic_rate_set = CONF_TX_RATE_MASK_BASIC;
4308 wl->basic_rate = CONF_TX_RATE_MASK_BASIC;
4309 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
4310 wl->band = IEEE80211_BAND_2GHZ;
4313 wl->sg_enabled = true;
4315 wl->bss_type = MAX_BSS_TYPE;
4316 wl->set_bss_type = MAX_BSS_TYPE;
4317 wl->last_tx_hlid = 0;
4319 wl->ap_fw_ps_map = 0;
4321 wl->platform_quirks = 0;
4322 wl->sched_scanning = false;
4323 wl->tx_security_seq = 0;
4324 wl->tx_security_last_seq_lsb = 0;
4325 wl->role_id = WL12XX_INVALID_ROLE_ID;
4326 wl->sta_hlid = WL12XX_INVALID_LINK_ID;
4328 setup_timer(&wl->rx_streaming_timer, wl1271_rx_streaming_timer,
4329 (unsigned long) wl);
4331 init_waitqueue_head(&wl->fwlog_waitq);
4333 memset(wl->tx_frames_map, 0, sizeof(wl->tx_frames_map));
4334 for (i = 0; i < ACX_TX_DESCRIPTORS; i++)
4335 wl->tx_frames[i] = NULL;
4337 spin_lock_init(&wl->wl_lock);
4339 wl->state = WL1271_STATE_OFF;
4340 mutex_init(&wl->mutex);
4342 /* Apply default driver configuration. */
4343 wl1271_conf_init(wl);
4345 order = get_order(WL1271_AGGR_BUFFER_SIZE);
4346 wl->aggr_buf = (u8 *)__get_free_pages(GFP_KERNEL, order);
4347 if (!wl->aggr_buf) {
4352 wl->dummy_packet = wl12xx_alloc_dummy_packet(wl);
4353 if (!wl->dummy_packet) {
4358 /* Allocate one page for the FW log */
4359 wl->fwlog = (u8 *)get_zeroed_page(GFP_KERNEL);
4362 goto err_dummy_packet;
4365 /* Register platform device */
4366 ret = platform_device_register(wl->plat_dev);
4368 wl1271_error("couldn't register platform device");
4371 dev_set_drvdata(&wl->plat_dev->dev, wl);
4373 /* Create sysfs file to control bt coex state */
4374 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
4376 wl1271_error("failed to create sysfs file bt_coex_state");
4380 /* Create sysfs file to get HW PG version */
4381 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_hw_pg_ver);
4383 wl1271_error("failed to create sysfs file hw_pg_ver");
4384 goto err_bt_coex_state;
4387 /* Create sysfs file for the FW log */
4388 ret = device_create_bin_file(&wl->plat_dev->dev, &fwlog_attr);
4390 wl1271_error("failed to create sysfs file fwlog");
4397 device_remove_file(&wl->plat_dev->dev, &dev_attr_hw_pg_ver);
4400 device_remove_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
4403 platform_device_unregister(wl->plat_dev);
4406 free_page((unsigned long)wl->fwlog);
4409 dev_kfree_skb(wl->dummy_packet);
4412 free_pages((unsigned long)wl->aggr_buf, order);
4415 destroy_workqueue(wl->freezable_wq);
4418 wl1271_debugfs_exit(wl);
4422 ieee80211_free_hw(hw);
4426 return ERR_PTR(ret);
4428 EXPORT_SYMBOL_GPL(wl1271_alloc_hw);
4430 int wl1271_free_hw(struct wl1271 *wl)
4432 /* Unblock any fwlog readers */
4433 mutex_lock(&wl->mutex);
4434 wl->fwlog_size = -1;
4435 wake_up_interruptible_all(&wl->fwlog_waitq);
4436 mutex_unlock(&wl->mutex);
4438 device_remove_bin_file(&wl->plat_dev->dev, &fwlog_attr);
4440 device_remove_file(&wl->plat_dev->dev, &dev_attr_hw_pg_ver);
4442 device_remove_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
4443 platform_device_unregister(wl->plat_dev);
4444 free_page((unsigned long)wl->fwlog);
4445 dev_kfree_skb(wl->dummy_packet);
4446 free_pages((unsigned long)wl->aggr_buf,
4447 get_order(WL1271_AGGR_BUFFER_SIZE));
4448 kfree(wl->plat_dev);
4450 wl1271_debugfs_exit(wl);
4457 kfree(wl->fw_status);
4458 kfree(wl->tx_res_if);
4459 destroy_workqueue(wl->freezable_wq);
4461 ieee80211_free_hw(wl->hw);
4465 EXPORT_SYMBOL_GPL(wl1271_free_hw);
4467 u32 wl12xx_debug_level = DEBUG_NONE;
4468 EXPORT_SYMBOL_GPL(wl12xx_debug_level);
4469 module_param_named(debug_level, wl12xx_debug_level, uint, S_IRUSR | S_IWUSR);
4470 MODULE_PARM_DESC(debug_level, "wl12xx debugging level");
4472 module_param_named(fwlog, fwlog_param, charp, 0);
4473 MODULE_PARM_DESC(keymap,
4474 "FW logger options: continuous, ondemand, dbgpins or disable");
4476 MODULE_LICENSE("GPL");
4477 MODULE_AUTHOR("Luciano Coelho <coelho@ti.com>");
4478 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");