2 * This file is part of wl1271
4 * Copyright (C) 2008-2010 Nokia Corporation
6 * Contact: Luciano Coelho <luciano.coelho@nokia.com>
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * version 2 as published by the Free Software Foundation.
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
24 #include <linux/module.h>
25 #include <linux/firmware.h>
26 #include <linux/delay.h>
27 #include <linux/spi/spi.h>
28 #include <linux/crc32.h>
29 #include <linux/etherdevice.h>
30 #include <linux/vmalloc.h>
31 #include <linux/platform_device.h>
32 #include <linux/slab.h>
33 #include <linux/wl12xx.h>
34 #include <linux/sched.h>
37 #include "wl12xx_80211.h"
51 #define WL1271_BOOT_RETRIES 3
53 static struct conf_drv_settings default_conf = {
56 [CONF_SG_ACL_BT_MASTER_MIN_BR] = 10,
57 [CONF_SG_ACL_BT_MASTER_MAX_BR] = 180,
58 [CONF_SG_ACL_BT_SLAVE_MIN_BR] = 10,
59 [CONF_SG_ACL_BT_SLAVE_MAX_BR] = 180,
60 [CONF_SG_ACL_BT_MASTER_MIN_EDR] = 10,
61 [CONF_SG_ACL_BT_MASTER_MAX_EDR] = 80,
62 [CONF_SG_ACL_BT_SLAVE_MIN_EDR] = 10,
63 [CONF_SG_ACL_BT_SLAVE_MAX_EDR] = 80,
64 [CONF_SG_ACL_WLAN_PS_MASTER_BR] = 8,
65 [CONF_SG_ACL_WLAN_PS_SLAVE_BR] = 8,
66 [CONF_SG_ACL_WLAN_PS_MASTER_EDR] = 20,
67 [CONF_SG_ACL_WLAN_PS_SLAVE_EDR] = 20,
68 [CONF_SG_ACL_WLAN_ACTIVE_MASTER_MIN_BR] = 20,
69 [CONF_SG_ACL_WLAN_ACTIVE_MASTER_MAX_BR] = 35,
70 [CONF_SG_ACL_WLAN_ACTIVE_SLAVE_MIN_BR] = 16,
71 [CONF_SG_ACL_WLAN_ACTIVE_SLAVE_MAX_BR] = 35,
72 [CONF_SG_ACL_WLAN_ACTIVE_MASTER_MIN_EDR] = 32,
73 [CONF_SG_ACL_WLAN_ACTIVE_MASTER_MAX_EDR] = 50,
74 [CONF_SG_ACL_WLAN_ACTIVE_SLAVE_MIN_EDR] = 28,
75 [CONF_SG_ACL_WLAN_ACTIVE_SLAVE_MAX_EDR] = 50,
76 [CONF_SG_ACL_ACTIVE_SCAN_WLAN_BR] = 10,
77 [CONF_SG_ACL_ACTIVE_SCAN_WLAN_EDR] = 20,
78 [CONF_SG_ACL_PASSIVE_SCAN_BT_BR] = 75,
79 [CONF_SG_ACL_PASSIVE_SCAN_WLAN_BR] = 15,
80 [CONF_SG_ACL_PASSIVE_SCAN_BT_EDR] = 27,
81 [CONF_SG_ACL_PASSIVE_SCAN_WLAN_EDR] = 17,
82 /* active scan params */
83 [CONF_SG_AUTO_SCAN_PROBE_REQ] = 170,
84 [CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_HV3] = 50,
85 [CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_A2DP] = 100,
86 /* passive scan params */
87 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_A2DP_BR] = 800,
88 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_A2DP_EDR] = 200,
89 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_HV3] = 200,
90 /* passive scan in dual antenna params */
91 [CONF_SG_CONSECUTIVE_HV3_IN_PASSIVE_SCAN] = 0,
92 [CONF_SG_BCN_HV3_COLLISION_THRESH_IN_PASSIVE_SCAN] = 0,
93 [CONF_SG_TX_RX_PROTECTION_BWIDTH_IN_PASSIVE_SCAN] = 0,
95 [CONF_SG_STA_FORCE_PS_IN_BT_SCO] = 1,
96 [CONF_SG_ANTENNA_CONFIGURATION] = 0,
97 [CONF_SG_BEACON_MISS_PERCENT] = 60,
98 [CONF_SG_DHCP_TIME] = 5000,
100 [CONF_SG_TXT] = 1000,
101 [CONF_SG_ADAPTIVE_RXT_TXT] = 1,
102 [CONF_SG_GENERAL_USAGE_BIT_MAP] = 3,
103 [CONF_SG_HV3_MAX_SERVED] = 6,
104 [CONF_SG_PS_POLL_TIMEOUT] = 10,
105 [CONF_SG_UPSD_TIMEOUT] = 10,
106 [CONF_SG_CONSECUTIVE_CTS_THRESHOLD] = 2,
107 [CONF_SG_STA_RX_WINDOW_AFTER_DTIM] = 5,
108 [CONF_SG_STA_CONNECTION_PROTECTION_TIME] = 30,
110 [CONF_AP_BEACON_MISS_TX] = 3,
111 [CONF_AP_RX_WINDOW_AFTER_BEACON] = 10,
112 [CONF_AP_BEACON_WINDOW_INTERVAL] = 2,
113 [CONF_AP_CONNECTION_PROTECTION_TIME] = 0,
114 [CONF_AP_BT_ACL_VAL_BT_SERVE_TIME] = 25,
115 [CONF_AP_BT_ACL_VAL_WL_SERVE_TIME] = 25,
117 .state = CONF_SG_PROTECTIVE,
120 .rx_msdu_life_time = 512000,
121 .packet_detection_threshold = 0,
122 .ps_poll_timeout = 15,
124 .rts_threshold = IEEE80211_MAX_RTS_THRESHOLD,
125 .rx_cca_threshold = 0,
126 .irq_blk_threshold = 0xFFFF,
127 .irq_pkt_threshold = 0,
129 .queue_type = CONF_RX_QUEUE_TYPE_LOW_PRIORITY,
132 .tx_energy_detection = 0,
135 .short_retry_limit = 10,
136 .long_retry_limit = 10,
159 .aifsn = CONF_TX_AIFS_PIFS,
166 .aifsn = CONF_TX_AIFS_PIFS,
170 .max_tx_retries = 100,
171 .ap_aging_period = 300,
175 .queue_id = CONF_TX_AC_BE,
176 .channel_type = CONF_CHANNEL_TYPE_EDCF,
177 .tsid = CONF_TX_AC_BE,
178 .ps_scheme = CONF_PS_SCHEME_LEGACY,
179 .ack_policy = CONF_ACK_POLICY_LEGACY,
183 .queue_id = CONF_TX_AC_BK,
184 .channel_type = CONF_CHANNEL_TYPE_EDCF,
185 .tsid = CONF_TX_AC_BK,
186 .ps_scheme = CONF_PS_SCHEME_LEGACY,
187 .ack_policy = CONF_ACK_POLICY_LEGACY,
191 .queue_id = CONF_TX_AC_VI,
192 .channel_type = CONF_CHANNEL_TYPE_EDCF,
193 .tsid = CONF_TX_AC_VI,
194 .ps_scheme = CONF_PS_SCHEME_LEGACY,
195 .ack_policy = CONF_ACK_POLICY_LEGACY,
199 .queue_id = CONF_TX_AC_VO,
200 .channel_type = CONF_CHANNEL_TYPE_EDCF,
201 .tsid = CONF_TX_AC_VO,
202 .ps_scheme = CONF_PS_SCHEME_LEGACY,
203 .ack_policy = CONF_ACK_POLICY_LEGACY,
207 .frag_threshold = IEEE80211_MAX_FRAG_THRESHOLD,
208 .tx_compl_timeout = 700,
209 .tx_compl_threshold = 4,
210 .basic_rate = CONF_HW_BIT_RATE_1MBPS,
211 .basic_rate_5 = CONF_HW_BIT_RATE_6MBPS,
212 .tmpl_short_retry_limit = 10,
213 .tmpl_long_retry_limit = 10,
216 .wake_up_event = CONF_WAKE_UP_EVENT_DTIM,
217 .listen_interval = 1,
218 .bcn_filt_mode = CONF_BCN_FILT_MODE_ENABLED,
219 .bcn_filt_ie_count = 2,
222 .ie = WLAN_EID_CHANNEL_SWITCH,
223 .rule = CONF_BCN_RULE_PASS_ON_APPEARANCE,
226 .ie = WLAN_EID_HT_INFORMATION,
227 .rule = CONF_BCN_RULE_PASS_ON_CHANGE,
230 .synch_fail_thold = 10,
231 .bss_lose_timeout = 100,
232 .beacon_rx_timeout = 10000,
233 .broadcast_timeout = 20000,
234 .rx_broadcast_in_ps = 1,
235 .ps_poll_threshold = 10,
236 .ps_poll_recovery_period = 700,
237 .bet_enable = CONF_BET_MODE_ENABLE,
238 .bet_max_consecutive = 50,
239 .psm_entry_retries = 5,
240 .psm_exit_retries = 16,
241 .psm_entry_nullfunc_retries = 3,
242 .psm_entry_hangover_period = 1,
243 .keep_alive_interval = 55000,
244 .max_listen_interval = 20,
251 .host_clk_settling_time = 5000,
252 .host_fast_wakeup_support = false
256 .avg_weight_rssi_beacon = 20,
257 .avg_weight_rssi_data = 10,
258 .avg_weight_snr_beacon = 20,
259 .avg_weight_snr_data = 10,
262 .min_dwell_time_active = 7500,
263 .max_dwell_time_active = 30000,
264 .min_dwell_time_passive = 100000,
265 .max_dwell_time_passive = 100000,
269 /* sched_scan requires dwell times in TU instead of TU/1000 */
270 .min_dwell_time_active = 8,
271 .max_dwell_time_active = 30,
272 .dwell_time_passive = 100,
273 .dwell_time_dfs = 150,
275 .rssi_threshold = -90,
279 .tx_per_channel_power_compensation_2 = {
280 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
282 .tx_per_channel_power_compensation_5 = {
283 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
284 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
285 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
289 .tx_ba_win_size = 64,
290 .inactivity_timeout = 10000,
296 .tx_min_block_num = 40,
298 .min_req_tx_blocks = 100,
299 .min_req_rx_blocks = 22,
306 .tx_min_block_num = 40,
308 .min_req_tx_blocks = 45,
309 .min_req_rx_blocks = 22,
315 .n_divider_fref_set_1 = 0xff, /* default */
316 .n_divider_fref_set_2 = 12,
317 .m_divider_fref_set_1 = 148,
318 .m_divider_fref_set_2 = 0xffff, /* default */
319 .coex_pll_stabilization_time = 0xffffffff, /* default */
320 .ldo_stabilization_time = 0xffff, /* default */
321 .fm_disturbed_band_margin = 0xff, /* default */
322 .swallow_clk_diff = 0xff, /* default */
331 .mode = WL12XX_FWLOG_ON_DEMAND,
334 .timestamp = WL12XX_FWLOG_TIMESTAMP_DISABLED,
335 .output = WL12XX_FWLOG_OUTPUT_HOST,
338 .hci_io_ds = HCI_IO_DS_6MA,
340 .rate_retry_score = 32000,
345 .inverse_curiosity_factor = 5,
347 .tx_fail_high_th = 10,
348 .per_alpha_shift = 4,
350 .per_beta1_shift = 10,
351 .per_beta2_shift = 8,
353 .rate_check_down = 12,
354 .rate_retry_policy = {
355 0x00, 0x00, 0x00, 0x00, 0x00,
356 0x00, 0x00, 0x00, 0x00, 0x00,
362 static char *fwlog_param;
364 static void __wl1271_op_remove_interface(struct wl1271 *wl,
365 bool reset_tx_queues);
366 static void wl1271_free_ap_keys(struct wl1271 *wl);
369 static void wl1271_device_release(struct device *dev)
374 static struct platform_device wl1271_device = {
378 /* device model insists to have a release function */
380 .release = wl1271_device_release,
384 static DEFINE_MUTEX(wl_list_mutex);
385 static LIST_HEAD(wl_list);
387 static int wl1271_check_operstate(struct wl1271 *wl, unsigned char operstate)
390 if (operstate != IF_OPER_UP)
393 if (test_and_set_bit(WL1271_FLAG_STA_STATE_SENT, &wl->flags))
396 ret = wl12xx_cmd_set_peer_state(wl);
400 wl12xx_croc(wl, wl->role_id);
402 wl1271_info("Association completed.");
405 static int wl1271_dev_notify(struct notifier_block *me, unsigned long what,
408 struct net_device *dev = arg;
409 struct wireless_dev *wdev;
411 struct ieee80211_hw *hw;
413 struct wl1271 *wl_temp;
416 /* Check that this notification is for us. */
417 if (what != NETDEV_CHANGE)
420 wdev = dev->ieee80211_ptr;
428 hw = wiphy_priv(wiphy);
433 mutex_lock(&wl_list_mutex);
434 list_for_each_entry(wl, &wl_list, list) {
438 mutex_unlock(&wl_list_mutex);
442 mutex_lock(&wl->mutex);
444 if (wl->state == WL1271_STATE_OFF)
447 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
450 ret = wl1271_ps_elp_wakeup(wl);
454 wl1271_check_operstate(wl, dev->operstate);
456 wl1271_ps_elp_sleep(wl);
459 mutex_unlock(&wl->mutex);
464 static int wl1271_reg_notify(struct wiphy *wiphy,
465 struct regulatory_request *request)
467 struct ieee80211_supported_band *band;
468 struct ieee80211_channel *ch;
471 band = wiphy->bands[IEEE80211_BAND_5GHZ];
472 for (i = 0; i < band->n_channels; i++) {
473 ch = &band->channels[i];
474 if (ch->flags & IEEE80211_CHAN_DISABLED)
477 if (ch->flags & IEEE80211_CHAN_RADAR)
478 ch->flags |= IEEE80211_CHAN_NO_IBSS |
479 IEEE80211_CHAN_PASSIVE_SCAN;
486 static int wl1271_set_rx_streaming(struct wl1271 *wl, bool enable)
490 /* we should hold wl->mutex */
491 ret = wl1271_acx_ps_rx_streaming(wl, enable);
496 set_bit(WL1271_FLAG_RX_STREAMING_STARTED, &wl->flags);
498 clear_bit(WL1271_FLAG_RX_STREAMING_STARTED, &wl->flags);
504 * this function is being called when the rx_streaming interval
505 * has beed changed or rx_streaming should be disabled
507 int wl1271_recalc_rx_streaming(struct wl1271 *wl)
510 int period = wl->conf.rx_streaming.interval;
512 /* don't reconfigure if rx_streaming is disabled */
513 if (!test_bit(WL1271_FLAG_RX_STREAMING_STARTED, &wl->flags))
516 /* reconfigure/disable according to new streaming_period */
518 test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags) &&
519 (wl->conf.rx_streaming.always ||
520 test_bit(WL1271_FLAG_SOFT_GEMINI, &wl->flags)))
521 ret = wl1271_set_rx_streaming(wl, true);
523 ret = wl1271_set_rx_streaming(wl, false);
524 /* don't cancel_work_sync since we might deadlock */
525 del_timer_sync(&wl->rx_streaming_timer);
531 static void wl1271_rx_streaming_enable_work(struct work_struct *work)
535 container_of(work, struct wl1271, rx_streaming_enable_work);
537 mutex_lock(&wl->mutex);
539 if (test_bit(WL1271_FLAG_RX_STREAMING_STARTED, &wl->flags) ||
540 !test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags) ||
541 (!wl->conf.rx_streaming.always &&
542 !test_bit(WL1271_FLAG_SOFT_GEMINI, &wl->flags)))
545 if (!wl->conf.rx_streaming.interval)
548 ret = wl1271_ps_elp_wakeup(wl);
552 ret = wl1271_set_rx_streaming(wl, true);
556 /* stop it after some time of inactivity */
557 mod_timer(&wl->rx_streaming_timer,
558 jiffies + msecs_to_jiffies(wl->conf.rx_streaming.duration));
561 wl1271_ps_elp_sleep(wl);
563 mutex_unlock(&wl->mutex);
566 static void wl1271_rx_streaming_disable_work(struct work_struct *work)
570 container_of(work, struct wl1271, rx_streaming_disable_work);
572 mutex_lock(&wl->mutex);
574 if (!test_bit(WL1271_FLAG_RX_STREAMING_STARTED, &wl->flags))
577 ret = wl1271_ps_elp_wakeup(wl);
581 ret = wl1271_set_rx_streaming(wl, false);
586 wl1271_ps_elp_sleep(wl);
588 mutex_unlock(&wl->mutex);
591 static void wl1271_rx_streaming_timer(unsigned long data)
593 struct wl1271 *wl = (struct wl1271 *)data;
594 ieee80211_queue_work(wl->hw, &wl->rx_streaming_disable_work);
597 static void wl1271_conf_init(struct wl1271 *wl)
601 * This function applies the default configuration to the driver. This
602 * function is invoked upon driver load (spi probe.)
604 * The configuration is stored in a run-time structure in order to
605 * facilitate for run-time adjustment of any of the parameters. Making
606 * changes to the configuration structure will apply the new values on
607 * the next interface up (wl1271_op_start.)
610 /* apply driver default configuration */
611 memcpy(&wl->conf, &default_conf, sizeof(default_conf));
613 /* Adjust settings according to optional module parameters */
615 if (!strcmp(fwlog_param, "continuous")) {
616 wl->conf.fwlog.mode = WL12XX_FWLOG_CONTINUOUS;
617 } else if (!strcmp(fwlog_param, "ondemand")) {
618 wl->conf.fwlog.mode = WL12XX_FWLOG_ON_DEMAND;
619 } else if (!strcmp(fwlog_param, "dbgpins")) {
620 wl->conf.fwlog.mode = WL12XX_FWLOG_CONTINUOUS;
621 wl->conf.fwlog.output = WL12XX_FWLOG_OUTPUT_DBG_PINS;
622 } else if (!strcmp(fwlog_param, "disable")) {
623 wl->conf.fwlog.mem_blocks = 0;
624 wl->conf.fwlog.output = WL12XX_FWLOG_OUTPUT_NONE;
626 wl1271_error("Unknown fwlog parameter %s", fwlog_param);
631 static int wl1271_plt_init(struct wl1271 *wl)
633 struct conf_tx_ac_category *conf_ac;
634 struct conf_tx_tid *conf_tid;
637 if (wl->chip.id == CHIP_ID_1283_PG20)
638 ret = wl128x_cmd_general_parms(wl);
640 ret = wl1271_cmd_general_parms(wl);
644 if (wl->chip.id == CHIP_ID_1283_PG20)
645 ret = wl128x_cmd_radio_parms(wl);
647 ret = wl1271_cmd_radio_parms(wl);
651 if (wl->chip.id != CHIP_ID_1283_PG20) {
652 ret = wl1271_cmd_ext_radio_parms(wl);
659 /* Chip-specific initializations */
660 ret = wl1271_chip_specific_init(wl);
664 ret = wl1271_sta_init_templates_config(wl);
668 ret = wl1271_acx_init_mem_config(wl);
672 /* PHY layer config */
673 ret = wl1271_init_phy_config(wl);
675 goto out_free_memmap;
677 ret = wl1271_acx_dco_itrim_params(wl);
679 goto out_free_memmap;
681 /* Initialize connection monitoring thresholds */
682 ret = wl1271_acx_conn_monit_params(wl, false);
684 goto out_free_memmap;
686 /* Bluetooth WLAN coexistence */
687 ret = wl1271_init_pta(wl);
689 goto out_free_memmap;
691 /* FM WLAN coexistence */
692 ret = wl1271_acx_fm_coex(wl);
694 goto out_free_memmap;
696 /* Energy detection */
697 ret = wl1271_init_energy_detection(wl);
699 goto out_free_memmap;
701 ret = wl12xx_acx_mem_cfg(wl);
703 goto out_free_memmap;
705 /* Default fragmentation threshold */
706 ret = wl1271_acx_frag_threshold(wl, wl->conf.tx.frag_threshold);
708 goto out_free_memmap;
710 /* Default TID/AC configuration */
711 BUG_ON(wl->conf.tx.tid_conf_count != wl->conf.tx.ac_conf_count);
712 for (i = 0; i < wl->conf.tx.tid_conf_count; i++) {
713 conf_ac = &wl->conf.tx.ac_conf[i];
714 ret = wl1271_acx_ac_cfg(wl, conf_ac->ac, conf_ac->cw_min,
715 conf_ac->cw_max, conf_ac->aifsn,
716 conf_ac->tx_op_limit);
718 goto out_free_memmap;
720 conf_tid = &wl->conf.tx.tid_conf[i];
721 ret = wl1271_acx_tid_cfg(wl, conf_tid->queue_id,
722 conf_tid->channel_type,
725 conf_tid->ack_policy,
726 conf_tid->apsd_conf[0],
727 conf_tid->apsd_conf[1]);
729 goto out_free_memmap;
732 /* Enable data path */
733 ret = wl1271_cmd_data_path(wl, 1);
735 goto out_free_memmap;
737 /* Configure for CAM power saving (ie. always active) */
738 ret = wl1271_acx_sleep_auth(wl, WL1271_PSM_CAM);
740 goto out_free_memmap;
743 ret = wl1271_acx_pm_config(wl);
745 goto out_free_memmap;
750 kfree(wl->target_mem_map);
751 wl->target_mem_map = NULL;
757 static void wl1271_irq_ps_regulate_link(struct wl1271 *wl, u8 hlid, u8 tx_blks)
761 /* only regulate station links */
762 if (hlid < WL1271_AP_STA_HLID_START)
765 fw_ps = test_bit(hlid, (unsigned long *)&wl->ap_fw_ps_map);
768 * Wake up from high level PS if the STA is asleep with too little
769 * blocks in FW or if the STA is awake.
771 if (!fw_ps || tx_blks < WL1271_PS_STA_MAX_BLOCKS)
772 wl1271_ps_link_end(wl, hlid);
774 /* Start high-level PS if the STA is asleep with enough blocks in FW */
775 else if (fw_ps && tx_blks >= WL1271_PS_STA_MAX_BLOCKS)
776 wl1271_ps_link_start(wl, hlid, true);
779 static void wl1271_irq_update_links_status(struct wl1271 *wl,
780 struct wl1271_fw_ap_status *status)
785 cur_fw_ps_map = le32_to_cpu(status->link_ps_bitmap);
786 if (wl->ap_fw_ps_map != cur_fw_ps_map) {
787 wl1271_debug(DEBUG_PSM,
788 "link ps prev 0x%x cur 0x%x changed 0x%x",
789 wl->ap_fw_ps_map, cur_fw_ps_map,
790 wl->ap_fw_ps_map ^ cur_fw_ps_map);
792 wl->ap_fw_ps_map = cur_fw_ps_map;
795 for (hlid = WL1271_AP_STA_HLID_START; hlid < AP_MAX_LINKS; hlid++) {
796 u8 cnt = status->tx_lnk_free_blks[hlid] -
797 wl->links[hlid].prev_freed_blks;
799 wl->links[hlid].prev_freed_blks =
800 status->tx_lnk_free_blks[hlid];
801 wl->links[hlid].allocated_blks -= cnt;
803 wl1271_irq_ps_regulate_link(wl, hlid,
804 wl->links[hlid].allocated_blks);
809 static void wl12xx_fw_status(struct wl1271 *wl,
810 struct wl12xx_fw_status *status)
813 u32 old_tx_blk_count = wl->tx_blocks_available;
814 int avail, freed_blocks;
816 wl1271_raw_read(wl, FW_STATUS_ADDR, status, sizeof(*status), false);
818 wl1271_debug(DEBUG_IRQ, "intr: 0x%x (fw_rx_counter = %d, "
819 "drv_rx_counter = %d, tx_results_counter = %d)",
821 status->fw_rx_counter,
822 status->drv_rx_counter,
823 status->tx_results_counter);
825 freed_blocks = le32_to_cpu(status->total_released_blks) -
827 wl->tx_blocks_freed = le32_to_cpu(status->total_released_blks);
829 wl->tx_allocated_blocks -= freed_blocks;
831 avail = le32_to_cpu(status->tx_total) - wl->tx_allocated_blocks;
834 * The FW might change the total number of TX memblocks before
835 * we get a notification about blocks being released. Thus, the
836 * available blocks calculation might yield a temporary result
837 * which is lower than the actual available blocks. Keeping in
838 * mind that only blocks that were allocated can be moved from
839 * TX to RX, tx_blocks_available should never decrease here.
841 wl->tx_blocks_available = max((int)wl->tx_blocks_available,
844 /* if more blocks are available now, tx work can be scheduled */
845 if (wl->tx_blocks_available > old_tx_blk_count)
846 clear_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags);
848 /* for AP update num of allocated TX blocks per link and ps status */
849 if (wl->bss_type == BSS_TYPE_AP_BSS) {
851 wl1271_irq_update_links_status(wl, status);
855 /* update the host-chipset time offset */
857 wl->time_offset = (timespec_to_ns(&ts) >> 10) -
858 (s64)le32_to_cpu(status->fw_localtime);
861 static void wl1271_flush_deferred_work(struct wl1271 *wl)
865 /* Pass all received frames to the network stack */
866 while ((skb = skb_dequeue(&wl->deferred_rx_queue)))
867 ieee80211_rx_ni(wl->hw, skb);
869 /* Return sent skbs to the network stack */
870 while ((skb = skb_dequeue(&wl->deferred_tx_queue)))
871 ieee80211_tx_status_ni(wl->hw, skb);
874 static void wl1271_netstack_work(struct work_struct *work)
877 container_of(work, struct wl1271, netstack_work);
880 wl1271_flush_deferred_work(wl);
881 } while (skb_queue_len(&wl->deferred_rx_queue));
884 #define WL1271_IRQ_MAX_LOOPS 256
886 irqreturn_t wl1271_irq(int irq, void *cookie)
890 int loopcount = WL1271_IRQ_MAX_LOOPS;
891 struct wl1271 *wl = (struct wl1271 *)cookie;
893 unsigned int defer_count;
896 /* TX might be handled here, avoid redundant work */
897 set_bit(WL1271_FLAG_TX_PENDING, &wl->flags);
898 cancel_work_sync(&wl->tx_work);
901 * In case edge triggered interrupt must be used, we cannot iterate
902 * more than once without introducing race conditions with the hardirq.
904 if (wl->platform_quirks & WL12XX_PLATFORM_QUIRK_EDGE_IRQ)
907 mutex_lock(&wl->mutex);
909 wl1271_debug(DEBUG_IRQ, "IRQ work");
911 if (unlikely(wl->state == WL1271_STATE_OFF))
914 ret = wl1271_ps_elp_wakeup(wl);
918 while (!done && loopcount--) {
920 * In order to avoid a race with the hardirq, clear the flag
921 * before acknowledging the chip. Since the mutex is held,
922 * wl1271_ps_elp_wakeup cannot be called concurrently.
924 clear_bit(WL1271_FLAG_IRQ_RUNNING, &wl->flags);
925 smp_mb__after_clear_bit();
927 wl12xx_fw_status(wl, wl->fw_status);
928 intr = le32_to_cpu(wl->fw_status->intr);
929 intr &= WL1271_INTR_MASK;
935 if (unlikely(intr & WL1271_ACX_INTR_WATCHDOG)) {
936 wl1271_error("watchdog interrupt received! "
937 "starting recovery.");
938 wl12xx_queue_recovery_work(wl);
940 /* restarting the chip. ignore any other interrupt. */
944 if (likely(intr & WL1271_ACX_INTR_DATA)) {
945 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_DATA");
947 wl12xx_rx(wl, wl->fw_status);
949 /* Check if any tx blocks were freed */
950 spin_lock_irqsave(&wl->wl_lock, flags);
951 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags) &&
952 wl1271_tx_total_queue_count(wl) > 0) {
953 spin_unlock_irqrestore(&wl->wl_lock, flags);
955 * In order to avoid starvation of the TX path,
956 * call the work function directly.
958 wl1271_tx_work_locked(wl);
960 spin_unlock_irqrestore(&wl->wl_lock, flags);
963 /* check for tx results */
964 if (wl->fw_status->tx_results_counter !=
965 (wl->tx_results_count & 0xff))
966 wl1271_tx_complete(wl);
968 /* Make sure the deferred queues don't get too long */
969 defer_count = skb_queue_len(&wl->deferred_tx_queue) +
970 skb_queue_len(&wl->deferred_rx_queue);
971 if (defer_count > WL1271_DEFERRED_QUEUE_LIMIT)
972 wl1271_flush_deferred_work(wl);
975 if (intr & WL1271_ACX_INTR_EVENT_A) {
976 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_A");
977 wl1271_event_handle(wl, 0);
980 if (intr & WL1271_ACX_INTR_EVENT_B) {
981 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_B");
982 wl1271_event_handle(wl, 1);
985 if (intr & WL1271_ACX_INTR_INIT_COMPLETE)
986 wl1271_debug(DEBUG_IRQ,
987 "WL1271_ACX_INTR_INIT_COMPLETE");
989 if (intr & WL1271_ACX_INTR_HW_AVAILABLE)
990 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_HW_AVAILABLE");
993 wl1271_ps_elp_sleep(wl);
996 spin_lock_irqsave(&wl->wl_lock, flags);
997 /* In case TX was not handled here, queue TX work */
998 clear_bit(WL1271_FLAG_TX_PENDING, &wl->flags);
999 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags) &&
1000 wl1271_tx_total_queue_count(wl) > 0)
1001 ieee80211_queue_work(wl->hw, &wl->tx_work);
1002 spin_unlock_irqrestore(&wl->wl_lock, flags);
1004 mutex_unlock(&wl->mutex);
1008 EXPORT_SYMBOL_GPL(wl1271_irq);
1010 static int wl1271_fetch_firmware(struct wl1271 *wl)
1012 const struct firmware *fw;
1013 const char *fw_name;
1016 if (wl->chip.id == CHIP_ID_1283_PG20)
1017 fw_name = WL128X_FW_NAME;
1019 fw_name = WL127X_FW_NAME;
1021 wl1271_debug(DEBUG_BOOT, "booting firmware %s", fw_name);
1023 ret = request_firmware(&fw, fw_name, wl1271_wl_to_dev(wl));
1026 wl1271_error("could not get firmware: %d", ret);
1031 wl1271_error("firmware size is not multiple of 32 bits: %zu",
1038 wl->fw_len = fw->size;
1039 wl->fw = vmalloc(wl->fw_len);
1042 wl1271_error("could not allocate memory for the firmware");
1047 memcpy(wl->fw, fw->data, wl->fw_len);
1051 release_firmware(fw);
1056 static int wl1271_fetch_nvs(struct wl1271 *wl)
1058 const struct firmware *fw;
1061 ret = request_firmware(&fw, WL12XX_NVS_NAME, wl1271_wl_to_dev(wl));
1064 wl1271_error("could not get nvs file: %d", ret);
1068 wl->nvs = kmemdup(fw->data, fw->size, GFP_KERNEL);
1071 wl1271_error("could not allocate memory for the nvs file");
1076 wl->nvs_len = fw->size;
1079 release_firmware(fw);
1084 void wl12xx_queue_recovery_work(struct wl1271 *wl)
1086 if (!test_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags))
1087 ieee80211_queue_work(wl->hw, &wl->recovery_work);
1090 size_t wl12xx_copy_fwlog(struct wl1271 *wl, u8 *memblock, size_t maxlen)
1094 /* The FW log is a length-value list, find where the log end */
1095 while (len < maxlen) {
1096 if (memblock[len] == 0)
1098 if (len + memblock[len] + 1 > maxlen)
1100 len += memblock[len] + 1;
1103 /* Make sure we have enough room */
1104 len = min(len, (size_t)(PAGE_SIZE - wl->fwlog_size));
1106 /* Fill the FW log file, consumed by the sysfs fwlog entry */
1107 memcpy(wl->fwlog + wl->fwlog_size, memblock, len);
1108 wl->fwlog_size += len;
1113 static void wl12xx_read_fwlog_panic(struct wl1271 *wl)
1119 if ((wl->quirks & WL12XX_QUIRK_FWLOG_NOT_IMPLEMENTED) ||
1120 (wl->conf.fwlog.mode != WL12XX_FWLOG_ON_DEMAND) ||
1121 (wl->conf.fwlog.mem_blocks == 0))
1124 wl1271_info("Reading FW panic log");
1126 block = kmalloc(WL12XX_HW_BLOCK_SIZE, GFP_KERNEL);
1131 * Make sure the chip is awake and the logger isn't active.
1132 * This might fail if the firmware hanged.
1134 if (!wl1271_ps_elp_wakeup(wl))
1135 wl12xx_cmd_stop_fwlog(wl);
1137 /* Read the first memory block address */
1138 wl12xx_fw_status(wl, wl->fw_status);
1139 first_addr = le32_to_cpu(wl->fw_status->log_start_addr);
1143 /* Traverse the memory blocks linked list */
1146 memset(block, 0, WL12XX_HW_BLOCK_SIZE);
1147 wl1271_read_hwaddr(wl, addr, block, WL12XX_HW_BLOCK_SIZE,
1151 * Memory blocks are linked to one another. The first 4 bytes
1152 * of each memory block hold the hardware address of the next
1153 * one. The last memory block points to the first one.
1155 addr = le32_to_cpup((__le32 *)block);
1156 if (!wl12xx_copy_fwlog(wl, block + sizeof(addr),
1157 WL12XX_HW_BLOCK_SIZE - sizeof(addr)))
1159 } while (addr && (addr != first_addr));
1161 wake_up_interruptible(&wl->fwlog_waitq);
1167 static void wl1271_recovery_work(struct work_struct *work)
1170 container_of(work, struct wl1271, recovery_work);
1172 mutex_lock(&wl->mutex);
1174 if (wl->state != WL1271_STATE_ON)
1177 /* Avoid a recursive recovery */
1178 set_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags);
1180 wl12xx_read_fwlog_panic(wl);
1182 wl1271_info("Hardware recovery in progress. FW ver: %s pc: 0x%x",
1183 wl->chip.fw_ver_str, wl1271_read32(wl, SCR_PAD4));
1186 * Advance security sequence number to overcome potential progress
1187 * in the firmware during recovery. This doens't hurt if the network is
1190 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags) ||
1191 test_bit(WL1271_FLAG_AP_STARTED, &wl->flags))
1192 wl->tx_security_seq += WL1271_TX_SQN_POST_RECOVERY_PADDING;
1194 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1195 ieee80211_connection_loss(wl->vif);
1197 /* Prevent spurious TX during FW restart */
1198 ieee80211_stop_queues(wl->hw);
1200 if (wl->sched_scanning) {
1201 ieee80211_sched_scan_stopped(wl->hw);
1202 wl->sched_scanning = false;
1205 /* reboot the chipset */
1206 __wl1271_op_remove_interface(wl, false);
1208 clear_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags);
1210 ieee80211_restart_hw(wl->hw);
1213 * Its safe to enable TX now - the queues are stopped after a request
1214 * to restart the HW.
1216 ieee80211_wake_queues(wl->hw);
1219 mutex_unlock(&wl->mutex);
1222 static void wl1271_fw_wakeup(struct wl1271 *wl)
1226 elp_reg = ELPCTRL_WAKE_UP;
1227 wl1271_raw_write32(wl, HW_ACCESS_ELP_CTRL_REG_ADDR, elp_reg);
1230 static int wl1271_setup(struct wl1271 *wl)
1232 wl->fw_status = kmalloc(sizeof(*wl->fw_status), GFP_KERNEL);
1236 wl->tx_res_if = kmalloc(sizeof(*wl->tx_res_if), GFP_KERNEL);
1237 if (!wl->tx_res_if) {
1238 kfree(wl->fw_status);
1245 static int wl1271_chip_wakeup(struct wl1271 *wl)
1247 struct wl1271_partition_set partition;
1250 msleep(WL1271_PRE_POWER_ON_SLEEP);
1251 ret = wl1271_power_on(wl);
1254 msleep(WL1271_POWER_ON_SLEEP);
1255 wl1271_io_reset(wl);
1258 /* We don't need a real memory partition here, because we only want
1259 * to use the registers at this point. */
1260 memset(&partition, 0, sizeof(partition));
1261 partition.reg.start = REGISTERS_BASE;
1262 partition.reg.size = REGISTERS_DOWN_SIZE;
1263 wl1271_set_partition(wl, &partition);
1265 /* ELP module wake up */
1266 wl1271_fw_wakeup(wl);
1268 /* whal_FwCtrl_BootSm() */
1270 /* 0. read chip id from CHIP_ID */
1271 wl->chip.id = wl1271_read32(wl, CHIP_ID_B);
1273 /* 1. check if chip id is valid */
1275 switch (wl->chip.id) {
1276 case CHIP_ID_1271_PG10:
1277 wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
1280 ret = wl1271_setup(wl);
1284 case CHIP_ID_1271_PG20:
1285 wl1271_debug(DEBUG_BOOT, "chip id 0x%x (1271 PG20)",
1289 * 'end-of-transaction flag' and 'LPD mode flag'
1290 * should be set in wl127x AP mode only
1292 if (wl->bss_type == BSS_TYPE_AP_BSS)
1293 wl->quirks |= (WL12XX_QUIRK_END_OF_TRANSACTION |
1294 WL12XX_QUIRK_LPD_MODE);
1296 ret = wl1271_setup(wl);
1300 case CHIP_ID_1283_PG20:
1301 wl1271_debug(DEBUG_BOOT, "chip id 0x%x (1283 PG20)",
1304 ret = wl1271_setup(wl);
1308 if (wl1271_set_block_size(wl))
1309 wl->quirks |= WL12XX_QUIRK_BLOCKSIZE_ALIGNMENT;
1311 case CHIP_ID_1283_PG10:
1313 wl1271_warning("unsupported chip id: 0x%x", wl->chip.id);
1318 if (wl->fw == NULL) {
1319 ret = wl1271_fetch_firmware(wl);
1324 /* No NVS from netlink, try to get it from the filesystem */
1325 if (wl->nvs == NULL) {
1326 ret = wl1271_fetch_nvs(wl);
1335 int wl1271_plt_start(struct wl1271 *wl)
1337 int retries = WL1271_BOOT_RETRIES;
1338 struct wiphy *wiphy = wl->hw->wiphy;
1341 mutex_lock(&wl->mutex);
1343 wl1271_notice("power up");
1345 if (wl->state != WL1271_STATE_OFF) {
1346 wl1271_error("cannot go into PLT state because not "
1347 "in off state: %d", wl->state);
1352 wl->bss_type = BSS_TYPE_STA_BSS;
1356 ret = wl1271_chip_wakeup(wl);
1360 ret = wl1271_boot(wl);
1364 ret = wl1271_plt_init(wl);
1368 wl->state = WL1271_STATE_PLT;
1369 wl1271_notice("firmware booted in PLT mode (%s)",
1370 wl->chip.fw_ver_str);
1372 /* update hw/fw version info in wiphy struct */
1373 wiphy->hw_version = wl->chip.id;
1374 strncpy(wiphy->fw_version, wl->chip.fw_ver_str,
1375 sizeof(wiphy->fw_version));
1380 mutex_unlock(&wl->mutex);
1381 /* Unlocking the mutex in the middle of handling is
1382 inherently unsafe. In this case we deem it safe to do,
1383 because we need to let any possibly pending IRQ out of
1384 the system (and while we are WL1271_STATE_OFF the IRQ
1385 work function will not do anything.) Also, any other
1386 possible concurrent operations will fail due to the
1387 current state, hence the wl1271 struct should be safe. */
1388 wl1271_disable_interrupts(wl);
1389 wl1271_flush_deferred_work(wl);
1390 cancel_work_sync(&wl->netstack_work);
1391 mutex_lock(&wl->mutex);
1393 wl1271_power_off(wl);
1396 wl1271_error("firmware boot in PLT mode failed despite %d retries",
1397 WL1271_BOOT_RETRIES);
1399 mutex_unlock(&wl->mutex);
1404 static int __wl1271_plt_stop(struct wl1271 *wl)
1408 wl1271_notice("power down");
1410 if (wl->state != WL1271_STATE_PLT) {
1411 wl1271_error("cannot power down because not in PLT "
1412 "state: %d", wl->state);
1417 wl1271_power_off(wl);
1419 wl->state = WL1271_STATE_OFF;
1422 mutex_unlock(&wl->mutex);
1423 wl1271_disable_interrupts(wl);
1424 wl1271_flush_deferred_work(wl);
1425 cancel_work_sync(&wl->netstack_work);
1426 cancel_work_sync(&wl->recovery_work);
1427 mutex_lock(&wl->mutex);
1432 int wl1271_plt_stop(struct wl1271 *wl)
1436 mutex_lock(&wl->mutex);
1437 ret = __wl1271_plt_stop(wl);
1438 mutex_unlock(&wl->mutex);
1442 static void wl1271_op_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
1444 struct wl1271 *wl = hw->priv;
1445 unsigned long flags;
1449 mapping = skb_get_queue_mapping(skb);
1450 q = wl1271_tx_get_queue(mapping);
1452 if (wl->bss_type == BSS_TYPE_AP_BSS)
1453 hlid = wl12xx_tx_get_hlid_ap(wl, skb);
1455 spin_lock_irqsave(&wl->wl_lock, flags);
1457 wl->tx_queue_count[q]++;
1460 * The workqueue is slow to process the tx_queue and we need stop
1461 * the queue here, otherwise the queue will get too long.
1463 if (wl->tx_queue_count[q] >= WL1271_TX_QUEUE_HIGH_WATERMARK) {
1464 wl1271_debug(DEBUG_TX, "op_tx: stopping queues for q %d", q);
1465 ieee80211_stop_queue(wl->hw, mapping);
1466 set_bit(q, &wl->stopped_queues_map);
1469 /* queue the packet */
1470 if (wl->bss_type == BSS_TYPE_AP_BSS) {
1471 wl1271_debug(DEBUG_TX, "queue skb hlid %d q %d", hlid, q);
1472 skb_queue_tail(&wl->links[hlid].tx_queue[q], skb);
1474 skb_queue_tail(&wl->tx_queue[q], skb);
1478 * The chip specific setup must run before the first TX packet -
1479 * before that, the tx_work will not be initialized!
1482 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags) &&
1483 !test_bit(WL1271_FLAG_TX_PENDING, &wl->flags))
1484 ieee80211_queue_work(wl->hw, &wl->tx_work);
1486 spin_unlock_irqrestore(&wl->wl_lock, flags);
1489 int wl1271_tx_dummy_packet(struct wl1271 *wl)
1491 unsigned long flags;
1492 int q = wl1271_tx_get_queue(skb_get_queue_mapping(wl->dummy_packet));
1494 spin_lock_irqsave(&wl->wl_lock, flags);
1495 set_bit(WL1271_FLAG_DUMMY_PACKET_PENDING, &wl->flags);
1496 wl->tx_queue_count[q]++;
1497 spin_unlock_irqrestore(&wl->wl_lock, flags);
1499 /* The FW is low on RX memory blocks, so send the dummy packet asap */
1500 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags))
1501 wl1271_tx_work_locked(wl);
1504 * If the FW TX is busy, TX work will be scheduled by the threaded
1505 * interrupt handler function
1511 * The size of the dummy packet should be at least 1400 bytes. However, in
1512 * order to minimize the number of bus transactions, aligning it to 512 bytes
1513 * boundaries could be beneficial, performance wise
1515 #define TOTAL_TX_DUMMY_PACKET_SIZE (ALIGN(1400, 512))
1517 static struct sk_buff *wl12xx_alloc_dummy_packet(struct wl1271 *wl)
1519 struct sk_buff *skb;
1520 struct ieee80211_hdr_3addr *hdr;
1521 unsigned int dummy_packet_size;
1523 dummy_packet_size = TOTAL_TX_DUMMY_PACKET_SIZE -
1524 sizeof(struct wl1271_tx_hw_descr) - sizeof(*hdr);
1526 skb = dev_alloc_skb(TOTAL_TX_DUMMY_PACKET_SIZE);
1528 wl1271_warning("Failed to allocate a dummy packet skb");
1532 skb_reserve(skb, sizeof(struct wl1271_tx_hw_descr));
1534 hdr = (struct ieee80211_hdr_3addr *) skb_put(skb, sizeof(*hdr));
1535 memset(hdr, 0, sizeof(*hdr));
1536 hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_DATA |
1537 IEEE80211_STYPE_NULLFUNC |
1538 IEEE80211_FCTL_TODS);
1540 memset(skb_put(skb, dummy_packet_size), 0, dummy_packet_size);
1542 /* Dummy packets require the TID to be management */
1543 skb->priority = WL1271_TID_MGMT;
1545 /* Initialize all fields that might be used */
1546 skb_set_queue_mapping(skb, 0);
1547 memset(IEEE80211_SKB_CB(skb), 0, sizeof(struct ieee80211_tx_info));
1553 static struct notifier_block wl1271_dev_notifier = {
1554 .notifier_call = wl1271_dev_notify,
1558 static int wl1271_configure_suspend_sta(struct wl1271 *wl)
1562 mutex_lock(&wl->mutex);
1564 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
1567 ret = wl1271_ps_elp_wakeup(wl);
1571 /* enter psm if needed*/
1572 if (!test_bit(WL1271_FLAG_PSM, &wl->flags)) {
1573 DECLARE_COMPLETION_ONSTACK(compl);
1575 wl->ps_compl = &compl;
1576 ret = wl1271_ps_set_mode(wl, STATION_POWER_SAVE_MODE,
1577 wl->basic_rate, true);
1581 /* we must unlock here so we will be able to get events */
1582 wl1271_ps_elp_sleep(wl);
1583 mutex_unlock(&wl->mutex);
1585 ret = wait_for_completion_timeout(
1586 &compl, msecs_to_jiffies(WL1271_PS_COMPLETE_TIMEOUT));
1588 wl1271_warning("couldn't enter ps mode!");
1593 /* take mutex again, and wakeup */
1594 mutex_lock(&wl->mutex);
1596 ret = wl1271_ps_elp_wakeup(wl);
1601 wl1271_ps_elp_sleep(wl);
1603 mutex_unlock(&wl->mutex);
1609 static int wl1271_configure_suspend_ap(struct wl1271 *wl)
1613 mutex_lock(&wl->mutex);
1615 if (!test_bit(WL1271_FLAG_AP_STARTED, &wl->flags))
1618 ret = wl1271_ps_elp_wakeup(wl);
1622 ret = wl1271_acx_beacon_filter_opt(wl, true);
1624 wl1271_ps_elp_sleep(wl);
1626 mutex_unlock(&wl->mutex);
1631 static int wl1271_configure_suspend(struct wl1271 *wl)
1633 if (wl->bss_type == BSS_TYPE_STA_BSS)
1634 return wl1271_configure_suspend_sta(wl);
1635 if (wl->bss_type == BSS_TYPE_AP_BSS)
1636 return wl1271_configure_suspend_ap(wl);
1640 static void wl1271_configure_resume(struct wl1271 *wl)
1643 bool is_sta = wl->bss_type == BSS_TYPE_STA_BSS;
1644 bool is_ap = wl->bss_type == BSS_TYPE_AP_BSS;
1646 if (!is_sta && !is_ap)
1649 mutex_lock(&wl->mutex);
1650 ret = wl1271_ps_elp_wakeup(wl);
1655 /* exit psm if it wasn't configured */
1656 if (!test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags))
1657 wl1271_ps_set_mode(wl, STATION_ACTIVE_MODE,
1658 wl->basic_rate, true);
1660 wl1271_acx_beacon_filter_opt(wl, false);
1663 wl1271_ps_elp_sleep(wl);
1665 mutex_unlock(&wl->mutex);
1668 static int wl1271_op_suspend(struct ieee80211_hw *hw,
1669 struct cfg80211_wowlan *wow)
1671 struct wl1271 *wl = hw->priv;
1674 wl1271_debug(DEBUG_MAC80211, "mac80211 suspend wow=%d", !!wow);
1675 WARN_ON(!wow || !wow->any);
1677 wl->wow_enabled = true;
1678 ret = wl1271_configure_suspend(wl);
1680 wl1271_warning("couldn't prepare device to suspend");
1683 /* flush any remaining work */
1684 wl1271_debug(DEBUG_MAC80211, "flushing remaining works");
1687 * disable and re-enable interrupts in order to flush
1690 wl1271_disable_interrupts(wl);
1693 * set suspended flag to avoid triggering a new threaded_irq
1694 * work. no need for spinlock as interrupts are disabled.
1696 set_bit(WL1271_FLAG_SUSPENDED, &wl->flags);
1698 wl1271_enable_interrupts(wl);
1699 flush_work(&wl->tx_work);
1700 flush_delayed_work(&wl->pspoll_work);
1701 flush_delayed_work(&wl->elp_work);
1706 static int wl1271_op_resume(struct ieee80211_hw *hw)
1708 struct wl1271 *wl = hw->priv;
1709 unsigned long flags;
1710 bool run_irq_work = false;
1712 wl1271_debug(DEBUG_MAC80211, "mac80211 resume wow=%d",
1714 WARN_ON(!wl->wow_enabled);
1717 * re-enable irq_work enqueuing, and call irq_work directly if
1718 * there is a pending work.
1720 spin_lock_irqsave(&wl->wl_lock, flags);
1721 clear_bit(WL1271_FLAG_SUSPENDED, &wl->flags);
1722 if (test_and_clear_bit(WL1271_FLAG_PENDING_WORK, &wl->flags))
1723 run_irq_work = true;
1724 spin_unlock_irqrestore(&wl->wl_lock, flags);
1727 wl1271_debug(DEBUG_MAC80211,
1728 "run postponed irq_work directly");
1730 wl1271_enable_interrupts(wl);
1732 wl1271_configure_resume(wl);
1733 wl->wow_enabled = false;
1739 static int wl1271_op_start(struct ieee80211_hw *hw)
1741 wl1271_debug(DEBUG_MAC80211, "mac80211 start");
1744 * We have to delay the booting of the hardware because
1745 * we need to know the local MAC address before downloading and
1746 * initializing the firmware. The MAC address cannot be changed
1747 * after boot, and without the proper MAC address, the firmware
1748 * will not function properly.
1750 * The MAC address is first known when the corresponding interface
1751 * is added. That is where we will initialize the hardware.
1757 static void wl1271_op_stop(struct ieee80211_hw *hw)
1759 wl1271_debug(DEBUG_MAC80211, "mac80211 stop");
1762 static u8 wl12xx_get_role_type(struct wl1271 *wl)
1764 switch (wl->bss_type) {
1765 case BSS_TYPE_AP_BSS:
1766 return WL1271_ROLE_AP;
1768 case BSS_TYPE_STA_BSS:
1769 return WL1271_ROLE_STA;
1772 wl1271_error("invalid bss_type: %d", wl->bss_type);
1774 return WL12XX_INVALID_ROLE_TYPE;
1777 static int wl1271_op_add_interface(struct ieee80211_hw *hw,
1778 struct ieee80211_vif *vif)
1780 struct wl1271 *wl = hw->priv;
1781 struct wiphy *wiphy = hw->wiphy;
1782 int retries = WL1271_BOOT_RETRIES;
1785 bool booted = false;
1787 wl1271_debug(DEBUG_MAC80211, "mac80211 add interface type %d mac %pM",
1788 vif->type, vif->addr);
1790 mutex_lock(&wl->mutex);
1792 wl1271_debug(DEBUG_MAC80211,
1793 "multiple vifs are not supported yet");
1799 * in some very corner case HW recovery scenarios its possible to
1800 * get here before __wl1271_op_remove_interface is complete, so
1801 * opt out if that is the case.
1803 if (test_bit(WL1271_FLAG_IF_INITIALIZED, &wl->flags)) {
1808 switch (vif->type) {
1809 case NL80211_IFTYPE_STATION:
1810 wl->bss_type = BSS_TYPE_STA_BSS;
1811 wl->set_bss_type = BSS_TYPE_STA_BSS;
1813 case NL80211_IFTYPE_ADHOC:
1814 wl->bss_type = BSS_TYPE_IBSS;
1815 wl->set_bss_type = BSS_TYPE_STA_BSS;
1817 case NL80211_IFTYPE_AP:
1818 wl->bss_type = BSS_TYPE_AP_BSS;
1825 role_type = wl12xx_get_role_type(wl);
1826 if (role_type == WL12XX_INVALID_ROLE_TYPE) {
1830 memcpy(wl->mac_addr, vif->addr, ETH_ALEN);
1832 if (wl->state != WL1271_STATE_OFF) {
1833 wl1271_error("cannot start because not in off state: %d",
1841 ret = wl1271_chip_wakeup(wl);
1845 ret = wl1271_boot(wl);
1849 if (wl->bss_type == BSS_TYPE_STA_BSS) {
1851 * The device role is a special role used for
1852 * rx and tx frames prior to association (as
1853 * the STA role can get packets only from
1854 * its associated bssid)
1856 ret = wl12xx_cmd_role_enable(wl,
1863 ret = wl12xx_cmd_role_enable(wl, role_type, &wl->role_id);
1867 ret = wl1271_hw_init(wl);
1875 mutex_unlock(&wl->mutex);
1876 /* Unlocking the mutex in the middle of handling is
1877 inherently unsafe. In this case we deem it safe to do,
1878 because we need to let any possibly pending IRQ out of
1879 the system (and while we are WL1271_STATE_OFF the IRQ
1880 work function will not do anything.) Also, any other
1881 possible concurrent operations will fail due to the
1882 current state, hence the wl1271 struct should be safe. */
1883 wl1271_disable_interrupts(wl);
1884 wl1271_flush_deferred_work(wl);
1885 cancel_work_sync(&wl->netstack_work);
1886 mutex_lock(&wl->mutex);
1888 wl1271_power_off(wl);
1892 wl1271_error("firmware boot failed despite %d retries",
1893 WL1271_BOOT_RETRIES);
1898 wl->state = WL1271_STATE_ON;
1899 set_bit(WL1271_FLAG_IF_INITIALIZED, &wl->flags);
1900 wl1271_info("firmware booted (%s)", wl->chip.fw_ver_str);
1902 /* update hw/fw version info in wiphy struct */
1903 wiphy->hw_version = wl->chip.id;
1904 strncpy(wiphy->fw_version, wl->chip.fw_ver_str,
1905 sizeof(wiphy->fw_version));
1908 * Now we know if 11a is supported (info from the NVS), so disable
1909 * 11a channels if not supported
1911 if (!wl->enable_11a)
1912 wiphy->bands[IEEE80211_BAND_5GHZ]->n_channels = 0;
1914 wl1271_debug(DEBUG_MAC80211, "11a is %ssupported",
1915 wl->enable_11a ? "" : "not ");
1918 mutex_unlock(&wl->mutex);
1920 mutex_lock(&wl_list_mutex);
1922 list_add(&wl->list, &wl_list);
1923 mutex_unlock(&wl_list_mutex);
1928 static void __wl1271_op_remove_interface(struct wl1271 *wl,
1929 bool reset_tx_queues)
1933 wl1271_debug(DEBUG_MAC80211, "mac80211 remove interface");
1935 /* because of hardware recovery, we may get here twice */
1936 if (wl->state != WL1271_STATE_ON)
1939 wl1271_info("down");
1941 mutex_lock(&wl_list_mutex);
1942 list_del(&wl->list);
1943 mutex_unlock(&wl_list_mutex);
1945 /* enable dyn ps just in case (if left on due to fw crash etc) */
1946 if (wl->bss_type == BSS_TYPE_STA_BSS)
1947 ieee80211_enable_dyn_ps(wl->vif);
1949 if (wl->scan.state != WL1271_SCAN_STATE_IDLE) {
1950 wl->scan.state = WL1271_SCAN_STATE_IDLE;
1951 memset(wl->scan.scanned_ch, 0, sizeof(wl->scan.scanned_ch));
1952 wl->scan.req = NULL;
1953 ieee80211_scan_completed(wl->hw, true);
1956 if (!test_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags)) {
1957 /* disable active roles */
1958 ret = wl1271_ps_elp_wakeup(wl);
1962 if (wl->bss_type == BSS_TYPE_STA_BSS) {
1963 ret = wl12xx_cmd_role_disable(wl, &wl->dev_role_id);
1968 ret = wl12xx_cmd_role_disable(wl, &wl->role_id);
1972 wl1271_ps_elp_sleep(wl);
1975 /* clear all hlids (except system_hlid) */
1976 wl->sta_hlid = WL12XX_INVALID_LINK_ID;
1977 wl->dev_hlid = WL12XX_INVALID_LINK_ID;
1978 wl->ap_bcast_hlid = WL12XX_INVALID_LINK_ID;
1979 wl->ap_global_hlid = WL12XX_INVALID_LINK_ID;
1982 * this must be before the cancel_work calls below, so that the work
1983 * functions don't perform further work.
1985 wl->state = WL1271_STATE_OFF;
1987 mutex_unlock(&wl->mutex);
1989 wl1271_disable_interrupts(wl);
1990 wl1271_flush_deferred_work(wl);
1991 cancel_delayed_work_sync(&wl->scan_complete_work);
1992 cancel_work_sync(&wl->netstack_work);
1993 cancel_work_sync(&wl->tx_work);
1994 del_timer_sync(&wl->rx_streaming_timer);
1995 cancel_work_sync(&wl->rx_streaming_enable_work);
1996 cancel_work_sync(&wl->rx_streaming_disable_work);
1997 cancel_delayed_work_sync(&wl->pspoll_work);
1998 cancel_delayed_work_sync(&wl->elp_work);
2000 mutex_lock(&wl->mutex);
2002 /* let's notify MAC80211 about the remaining pending TX frames */
2003 wl1271_tx_reset(wl, reset_tx_queues);
2004 wl1271_power_off(wl);
2006 memset(wl->bssid, 0, ETH_ALEN);
2007 memset(wl->ssid, 0, IEEE80211_MAX_SSID_LEN + 1);
2009 wl->bss_type = MAX_BSS_TYPE;
2010 wl->set_bss_type = MAX_BSS_TYPE;
2011 wl->band = IEEE80211_BAND_2GHZ;
2014 wl->psm_entry_retry = 0;
2015 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
2016 wl->tx_blocks_available = 0;
2017 wl->tx_allocated_blocks = 0;
2018 wl->tx_results_count = 0;
2019 wl->tx_packets_count = 0;
2020 wl->time_offset = 0;
2021 wl->session_counter = 0;
2022 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
2024 wl1271_free_ap_keys(wl);
2025 memset(wl->ap_hlid_map, 0, sizeof(wl->ap_hlid_map));
2026 wl->ap_fw_ps_map = 0;
2028 wl->sched_scanning = false;
2029 wl->role_id = WL12XX_INVALID_ROLE_ID;
2030 wl->dev_role_id = WL12XX_INVALID_ROLE_ID;
2031 memset(wl->roles_map, 0, sizeof(wl->roles_map));
2032 memset(wl->links_map, 0, sizeof(wl->links_map));
2033 memset(wl->roc_map, 0, sizeof(wl->roc_map));
2035 /* The system link is always allocated */
2036 __set_bit(WL12XX_SYSTEM_HLID, wl->links_map);
2039 * this is performed after the cancel_work calls and the associated
2040 * mutex_lock, so that wl1271_op_add_interface does not accidentally
2041 * get executed before all these vars have been reset.
2045 wl->tx_blocks_freed = 0;
2047 wl1271_debugfs_reset(wl);
2049 kfree(wl->fw_status);
2050 wl->fw_status = NULL;
2051 kfree(wl->tx_res_if);
2052 wl->tx_res_if = NULL;
2053 kfree(wl->target_mem_map);
2054 wl->target_mem_map = NULL;
2057 static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
2058 struct ieee80211_vif *vif)
2060 struct wl1271 *wl = hw->priv;
2062 mutex_lock(&wl->mutex);
2064 * wl->vif can be null here if someone shuts down the interface
2065 * just when hardware recovery has been started.
2068 WARN_ON(wl->vif != vif);
2069 __wl1271_op_remove_interface(wl, true);
2072 mutex_unlock(&wl->mutex);
2073 cancel_work_sync(&wl->recovery_work);
2076 static int wl1271_join(struct wl1271 *wl, bool set_assoc)
2081 * One of the side effects of the JOIN command is that is clears
2082 * WPA/WPA2 keys from the chipset. Performing a JOIN while associated
2083 * to a WPA/WPA2 access point will therefore kill the data-path.
2084 * Currently the only valid scenario for JOIN during association
2085 * is on roaming, in which case we will also be given new keys.
2086 * Keep the below message for now, unless it starts bothering
2087 * users who really like to roam a lot :)
2089 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
2090 wl1271_info("JOIN while associated.");
2093 set_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
2095 ret = wl12xx_cmd_role_start_sta(wl);
2099 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
2103 * The join command disable the keep-alive mode, shut down its process,
2104 * and also clear the template config, so we need to reset it all after
2105 * the join. The acx_aid starts the keep-alive process, and the order
2106 * of the commands below is relevant.
2108 ret = wl1271_acx_keep_alive_mode(wl, true);
2112 ret = wl1271_acx_aid(wl, wl->aid);
2116 ret = wl1271_cmd_build_klv_null_data(wl);
2120 ret = wl1271_acx_keep_alive_config(wl, CMD_TEMPL_KLV_IDX_NULL_DATA,
2121 ACX_KEEP_ALIVE_TPL_VALID);
2129 static int wl1271_unjoin(struct wl1271 *wl)
2133 /* to stop listening to a channel, we disconnect */
2134 ret = wl12xx_cmd_role_stop_sta(wl);
2138 memset(wl->bssid, 0, ETH_ALEN);
2140 /* reset TX security counters on a clean disconnect */
2141 wl->tx_security_last_seq_lsb = 0;
2142 wl->tx_security_seq = 0;
2148 static void wl1271_set_band_rate(struct wl1271 *wl)
2150 if (wl->band == IEEE80211_BAND_2GHZ)
2151 wl->basic_rate_set = wl->conf.tx.basic_rate;
2153 wl->basic_rate_set = wl->conf.tx.basic_rate_5;
2156 static bool wl12xx_is_roc(struct wl1271 *wl)
2160 role_id = find_first_bit(wl->roc_map, WL12XX_MAX_ROLES);
2161 if (role_id >= WL12XX_MAX_ROLES)
2167 static int wl1271_sta_handle_idle(struct wl1271 *wl, bool idle)
2172 /* no need to croc if we weren't busy (e.g. during boot) */
2173 if (wl12xx_is_roc(wl)) {
2174 ret = wl12xx_croc(wl, wl->dev_role_id);
2178 ret = wl12xx_cmd_role_stop_dev(wl);
2182 wl->rate_set = wl1271_tx_min_rate_get(wl);
2183 ret = wl1271_acx_sta_rate_policies(wl);
2186 ret = wl1271_acx_keep_alive_config(
2187 wl, CMD_TEMPL_KLV_IDX_NULL_DATA,
2188 ACX_KEEP_ALIVE_TPL_INVALID);
2191 set_bit(WL1271_FLAG_IDLE, &wl->flags);
2193 /* The current firmware only supports sched_scan in idle */
2194 if (wl->sched_scanning) {
2195 wl1271_scan_sched_scan_stop(wl);
2196 ieee80211_sched_scan_stopped(wl->hw);
2199 ret = wl12xx_cmd_role_start_dev(wl);
2203 ret = wl12xx_roc(wl, wl->dev_role_id);
2206 clear_bit(WL1271_FLAG_IDLE, &wl->flags);
2213 static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed)
2215 struct wl1271 *wl = hw->priv;
2216 struct ieee80211_conf *conf = &hw->conf;
2217 int channel, ret = 0;
2220 channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
2222 wl1271_debug(DEBUG_MAC80211, "mac80211 config ch %d psm %s power %d %s"
2225 conf->flags & IEEE80211_CONF_PS ? "on" : "off",
2227 conf->flags & IEEE80211_CONF_IDLE ? "idle" : "in use",
2231 * mac80211 will go to idle nearly immediately after transmitting some
2232 * frames, such as the deauth. To make sure those frames reach the air,
2233 * wait here until the TX queue is fully flushed.
2235 if ((changed & IEEE80211_CONF_CHANGE_IDLE) &&
2236 (conf->flags & IEEE80211_CONF_IDLE))
2237 wl1271_tx_flush(wl);
2239 mutex_lock(&wl->mutex);
2241 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2242 /* we support configuring the channel and band while off */
2243 if ((changed & IEEE80211_CONF_CHANGE_CHANNEL)) {
2244 wl->band = conf->channel->band;
2245 wl->channel = channel;
2248 if ((changed & IEEE80211_CONF_CHANGE_POWER))
2249 wl->power_level = conf->power_level;
2254 is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
2256 ret = wl1271_ps_elp_wakeup(wl);
2260 /* if the channel changes while joined, join again */
2261 if (changed & IEEE80211_CONF_CHANGE_CHANNEL &&
2262 ((wl->band != conf->channel->band) ||
2263 (wl->channel != channel))) {
2264 wl->band = conf->channel->band;
2265 wl->channel = channel;
2269 * FIXME: the mac80211 should really provide a fixed
2270 * rate to use here. for now, just use the smallest
2271 * possible rate for the band as a fixed rate for
2272 * association frames and other control messages.
2274 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
2275 wl1271_set_band_rate(wl);
2277 wl->basic_rate = wl1271_tx_min_rate_get(wl);
2278 ret = wl1271_acx_sta_rate_policies(wl);
2280 wl1271_warning("rate policy for channel "
2283 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags)) {
2284 if (wl12xx_is_roc(wl)) {
2286 ret = wl12xx_croc(wl, wl->dev_role_id);
2290 ret = wl1271_join(wl, false);
2292 wl1271_warning("cmd join on channel "
2296 * change the ROC channel. do it only if we are
2297 * not idle. otherwise, CROC will be called
2300 if (wl12xx_is_roc(wl) &&
2301 !(conf->flags & IEEE80211_CONF_IDLE)) {
2302 ret = wl12xx_croc(wl, wl->dev_role_id);
2306 ret = wl12xx_roc(wl, wl->dev_role_id);
2308 wl1271_warning("roc failed %d",
2315 if (changed & IEEE80211_CONF_CHANGE_IDLE && !is_ap) {
2316 ret = wl1271_sta_handle_idle(wl,
2317 conf->flags & IEEE80211_CONF_IDLE);
2319 wl1271_warning("idle mode change failed %d", ret);
2323 * if mac80211 changes the PSM mode, make sure the mode is not
2324 * incorrectly changed after the pspoll failure active window.
2326 if (changed & IEEE80211_CONF_CHANGE_PS)
2327 clear_bit(WL1271_FLAG_PSPOLL_FAILURE, &wl->flags);
2329 if (conf->flags & IEEE80211_CONF_PS &&
2330 !test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
2331 set_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
2334 * We enter PSM only if we're already associated.
2335 * If we're not, we'll enter it when joining an SSID,
2336 * through the bss_info_changed() hook.
2338 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags)) {
2339 wl1271_debug(DEBUG_PSM, "psm enabled");
2340 ret = wl1271_ps_set_mode(wl, STATION_POWER_SAVE_MODE,
2341 wl->basic_rate, true);
2343 } else if (!(conf->flags & IEEE80211_CONF_PS) &&
2344 test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
2345 wl1271_debug(DEBUG_PSM, "psm disabled");
2347 clear_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
2349 if (test_bit(WL1271_FLAG_PSM, &wl->flags))
2350 ret = wl1271_ps_set_mode(wl, STATION_ACTIVE_MODE,
2351 wl->basic_rate, true);
2354 if (conf->power_level != wl->power_level) {
2355 ret = wl1271_acx_tx_power(wl, conf->power_level);
2359 wl->power_level = conf->power_level;
2363 wl1271_ps_elp_sleep(wl);
2366 mutex_unlock(&wl->mutex);
2371 struct wl1271_filter_params {
2374 u8 mc_list[ACX_MC_ADDRESS_GROUP_MAX][ETH_ALEN];
2377 static u64 wl1271_op_prepare_multicast(struct ieee80211_hw *hw,
2378 struct netdev_hw_addr_list *mc_list)
2380 struct wl1271_filter_params *fp;
2381 struct netdev_hw_addr *ha;
2382 struct wl1271 *wl = hw->priv;
2384 if (unlikely(wl->state == WL1271_STATE_OFF))
2387 fp = kzalloc(sizeof(*fp), GFP_ATOMIC);
2389 wl1271_error("Out of memory setting filters.");
2393 /* update multicast filtering parameters */
2394 fp->mc_list_length = 0;
2395 if (netdev_hw_addr_list_count(mc_list) > ACX_MC_ADDRESS_GROUP_MAX) {
2396 fp->enabled = false;
2399 netdev_hw_addr_list_for_each(ha, mc_list) {
2400 memcpy(fp->mc_list[fp->mc_list_length],
2401 ha->addr, ETH_ALEN);
2402 fp->mc_list_length++;
2406 return (u64)(unsigned long)fp;
2409 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
2412 FIF_BCN_PRBRESP_PROMISC | \
2416 static void wl1271_op_configure_filter(struct ieee80211_hw *hw,
2417 unsigned int changed,
2418 unsigned int *total, u64 multicast)
2420 struct wl1271_filter_params *fp = (void *)(unsigned long)multicast;
2421 struct wl1271 *wl = hw->priv;
2424 wl1271_debug(DEBUG_MAC80211, "mac80211 configure filter changed %x"
2425 " total %x", changed, *total);
2427 mutex_lock(&wl->mutex);
2429 *total &= WL1271_SUPPORTED_FILTERS;
2430 changed &= WL1271_SUPPORTED_FILTERS;
2432 if (unlikely(wl->state == WL1271_STATE_OFF))
2435 ret = wl1271_ps_elp_wakeup(wl);
2439 if (wl->bss_type != BSS_TYPE_AP_BSS) {
2440 if (*total & FIF_ALLMULTI)
2441 ret = wl1271_acx_group_address_tbl(wl, false, NULL, 0);
2443 ret = wl1271_acx_group_address_tbl(wl, fp->enabled,
2445 fp->mc_list_length);
2451 * the fw doesn't provide an api to configure the filters. instead,
2452 * the filters configuration is based on the active roles / ROC
2457 wl1271_ps_elp_sleep(wl);
2460 mutex_unlock(&wl->mutex);
2464 static int wl1271_record_ap_key(struct wl1271 *wl, u8 id, u8 key_type,
2465 u8 key_size, const u8 *key, u8 hlid, u32 tx_seq_32,
2468 struct wl1271_ap_key *ap_key;
2471 wl1271_debug(DEBUG_CRYPT, "record ap key id %d", (int)id);
2473 if (key_size > MAX_KEY_SIZE)
2477 * Find next free entry in ap_keys. Also check we are not replacing
2480 for (i = 0; i < MAX_NUM_KEYS; i++) {
2481 if (wl->recorded_ap_keys[i] == NULL)
2484 if (wl->recorded_ap_keys[i]->id == id) {
2485 wl1271_warning("trying to record key replacement");
2490 if (i == MAX_NUM_KEYS)
2493 ap_key = kzalloc(sizeof(*ap_key), GFP_KERNEL);
2498 ap_key->key_type = key_type;
2499 ap_key->key_size = key_size;
2500 memcpy(ap_key->key, key, key_size);
2501 ap_key->hlid = hlid;
2502 ap_key->tx_seq_32 = tx_seq_32;
2503 ap_key->tx_seq_16 = tx_seq_16;
2505 wl->recorded_ap_keys[i] = ap_key;
2509 static void wl1271_free_ap_keys(struct wl1271 *wl)
2513 for (i = 0; i < MAX_NUM_KEYS; i++) {
2514 kfree(wl->recorded_ap_keys[i]);
2515 wl->recorded_ap_keys[i] = NULL;
2519 static int wl1271_ap_init_hwenc(struct wl1271 *wl)
2522 struct wl1271_ap_key *key;
2523 bool wep_key_added = false;
2525 for (i = 0; i < MAX_NUM_KEYS; i++) {
2526 if (wl->recorded_ap_keys[i] == NULL)
2529 key = wl->recorded_ap_keys[i];
2530 ret = wl1271_cmd_set_ap_key(wl, KEY_ADD_OR_REPLACE,
2531 key->id, key->key_type,
2532 key->key_size, key->key,
2533 key->hlid, key->tx_seq_32,
2538 if (key->key_type == KEY_WEP)
2539 wep_key_added = true;
2542 if (wep_key_added) {
2543 ret = wl12xx_cmd_set_default_wep_key(wl, wl->default_key,
2550 wl1271_free_ap_keys(wl);
2554 static int wl1271_set_key(struct wl1271 *wl, u16 action, u8 id, u8 key_type,
2555 u8 key_size, const u8 *key, u32 tx_seq_32,
2556 u16 tx_seq_16, struct ieee80211_sta *sta)
2559 bool is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
2562 struct wl1271_station *wl_sta;
2566 wl_sta = (struct wl1271_station *)sta->drv_priv;
2567 hlid = wl_sta->hlid;
2569 hlid = wl->ap_bcast_hlid;
2572 if (!test_bit(WL1271_FLAG_AP_STARTED, &wl->flags)) {
2574 * We do not support removing keys after AP shutdown.
2575 * Pretend we do to make mac80211 happy.
2577 if (action != KEY_ADD_OR_REPLACE)
2580 ret = wl1271_record_ap_key(wl, id,
2582 key, hlid, tx_seq_32,
2585 ret = wl1271_cmd_set_ap_key(wl, action,
2586 id, key_type, key_size,
2587 key, hlid, tx_seq_32,
2595 static const u8 bcast_addr[ETH_ALEN] = {
2596 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
2599 addr = sta ? sta->addr : bcast_addr;
2601 if (is_zero_ether_addr(addr)) {
2602 /* We dont support TX only encryption */
2606 /* The wl1271 does not allow to remove unicast keys - they
2607 will be cleared automatically on next CMD_JOIN. Ignore the
2608 request silently, as we dont want the mac80211 to emit
2609 an error message. */
2610 if (action == KEY_REMOVE && !is_broadcast_ether_addr(addr))
2613 ret = wl1271_cmd_set_sta_key(wl, action,
2614 id, key_type, key_size,
2615 key, addr, tx_seq_32,
2620 /* the default WEP key needs to be configured at least once */
2621 if (key_type == KEY_WEP) {
2622 ret = wl12xx_cmd_set_default_wep_key(wl,
2633 static int wl1271_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
2634 struct ieee80211_vif *vif,
2635 struct ieee80211_sta *sta,
2636 struct ieee80211_key_conf *key_conf)
2638 struct wl1271 *wl = hw->priv;
2644 wl1271_debug(DEBUG_MAC80211, "mac80211 set key");
2646 wl1271_debug(DEBUG_CRYPT, "CMD: 0x%x sta: %p", cmd, sta);
2647 wl1271_debug(DEBUG_CRYPT, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
2648 key_conf->cipher, key_conf->keyidx,
2649 key_conf->keylen, key_conf->flags);
2650 wl1271_dump(DEBUG_CRYPT, "KEY: ", key_conf->key, key_conf->keylen);
2652 mutex_lock(&wl->mutex);
2654 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2659 ret = wl1271_ps_elp_wakeup(wl);
2663 switch (key_conf->cipher) {
2664 case WLAN_CIPHER_SUITE_WEP40:
2665 case WLAN_CIPHER_SUITE_WEP104:
2668 key_conf->hw_key_idx = key_conf->keyidx;
2670 case WLAN_CIPHER_SUITE_TKIP:
2671 key_type = KEY_TKIP;
2673 key_conf->hw_key_idx = key_conf->keyidx;
2674 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
2675 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
2677 case WLAN_CIPHER_SUITE_CCMP:
2680 key_conf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
2681 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
2682 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
2684 case WL1271_CIPHER_SUITE_GEM:
2686 tx_seq_32 = WL1271_TX_SECURITY_HI32(wl->tx_security_seq);
2687 tx_seq_16 = WL1271_TX_SECURITY_LO16(wl->tx_security_seq);
2690 wl1271_error("Unknown key algo 0x%x", key_conf->cipher);
2698 ret = wl1271_set_key(wl, KEY_ADD_OR_REPLACE,
2699 key_conf->keyidx, key_type,
2700 key_conf->keylen, key_conf->key,
2701 tx_seq_32, tx_seq_16, sta);
2703 wl1271_error("Could not add or replace key");
2709 ret = wl1271_set_key(wl, KEY_REMOVE,
2710 key_conf->keyidx, key_type,
2711 key_conf->keylen, key_conf->key,
2714 wl1271_error("Could not remove key");
2720 wl1271_error("Unsupported key cmd 0x%x", cmd);
2726 wl1271_ps_elp_sleep(wl);
2729 mutex_unlock(&wl->mutex);
2734 static int wl1271_op_hw_scan(struct ieee80211_hw *hw,
2735 struct ieee80211_vif *vif,
2736 struct cfg80211_scan_request *req)
2738 struct wl1271 *wl = hw->priv;
2743 wl1271_debug(DEBUG_MAC80211, "mac80211 hw scan");
2746 ssid = req->ssids[0].ssid;
2747 len = req->ssids[0].ssid_len;
2750 mutex_lock(&wl->mutex);
2752 if (wl->state == WL1271_STATE_OFF) {
2754 * We cannot return -EBUSY here because cfg80211 will expect
2755 * a call to ieee80211_scan_completed if we do - in this case
2756 * there won't be any call.
2762 ret = wl1271_ps_elp_wakeup(wl);
2766 /* cancel ROC before scanning */
2767 if (wl12xx_is_roc(wl)) {
2768 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags)) {
2769 /* don't allow scanning right now */
2773 wl12xx_croc(wl, wl->dev_role_id);
2774 wl12xx_cmd_role_stop_dev(wl);
2777 ret = wl1271_scan(hw->priv, ssid, len, req);
2779 wl1271_ps_elp_sleep(wl);
2781 mutex_unlock(&wl->mutex);
2786 static void wl1271_op_cancel_hw_scan(struct ieee80211_hw *hw,
2787 struct ieee80211_vif *vif)
2789 struct wl1271 *wl = hw->priv;
2792 wl1271_debug(DEBUG_MAC80211, "mac80211 cancel hw scan");
2794 mutex_lock(&wl->mutex);
2796 if (wl->state == WL1271_STATE_OFF)
2799 if (wl->scan.state == WL1271_SCAN_STATE_IDLE)
2802 ret = wl1271_ps_elp_wakeup(wl);
2806 if (wl->scan.state != WL1271_SCAN_STATE_DONE) {
2807 ret = wl1271_scan_stop(wl);
2811 wl->scan.state = WL1271_SCAN_STATE_IDLE;
2812 memset(wl->scan.scanned_ch, 0, sizeof(wl->scan.scanned_ch));
2813 wl->scan.req = NULL;
2814 ieee80211_scan_completed(wl->hw, true);
2817 wl1271_ps_elp_sleep(wl);
2819 mutex_unlock(&wl->mutex);
2821 cancel_delayed_work_sync(&wl->scan_complete_work);
2824 static int wl1271_op_sched_scan_start(struct ieee80211_hw *hw,
2825 struct ieee80211_vif *vif,
2826 struct cfg80211_sched_scan_request *req,
2827 struct ieee80211_sched_scan_ies *ies)
2829 struct wl1271 *wl = hw->priv;
2832 wl1271_debug(DEBUG_MAC80211, "wl1271_op_sched_scan_start");
2834 mutex_lock(&wl->mutex);
2836 ret = wl1271_ps_elp_wakeup(wl);
2840 ret = wl1271_scan_sched_scan_config(wl, req, ies);
2844 ret = wl1271_scan_sched_scan_start(wl);
2848 wl->sched_scanning = true;
2851 wl1271_ps_elp_sleep(wl);
2853 mutex_unlock(&wl->mutex);
2857 static void wl1271_op_sched_scan_stop(struct ieee80211_hw *hw,
2858 struct ieee80211_vif *vif)
2860 struct wl1271 *wl = hw->priv;
2863 wl1271_debug(DEBUG_MAC80211, "wl1271_op_sched_scan_stop");
2865 mutex_lock(&wl->mutex);
2867 ret = wl1271_ps_elp_wakeup(wl);
2871 wl1271_scan_sched_scan_stop(wl);
2873 wl1271_ps_elp_sleep(wl);
2875 mutex_unlock(&wl->mutex);
2878 static int wl1271_op_set_frag_threshold(struct ieee80211_hw *hw, u32 value)
2880 struct wl1271 *wl = hw->priv;
2883 mutex_lock(&wl->mutex);
2885 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2890 ret = wl1271_ps_elp_wakeup(wl);
2894 ret = wl1271_acx_frag_threshold(wl, value);
2896 wl1271_warning("wl1271_op_set_frag_threshold failed: %d", ret);
2898 wl1271_ps_elp_sleep(wl);
2901 mutex_unlock(&wl->mutex);
2906 static int wl1271_op_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
2908 struct wl1271 *wl = hw->priv;
2911 mutex_lock(&wl->mutex);
2913 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2918 ret = wl1271_ps_elp_wakeup(wl);
2922 ret = wl1271_acx_rts_threshold(wl, value);
2924 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret);
2926 wl1271_ps_elp_sleep(wl);
2929 mutex_unlock(&wl->mutex);
2934 static int wl1271_ssid_set(struct wl1271 *wl, struct sk_buff *skb,
2938 const u8 *ptr = cfg80211_find_ie(WLAN_EID_SSID, skb->data + offset,
2942 wl1271_error("No SSID in IEs!");
2947 if (ssid_len > IEEE80211_MAX_SSID_LEN) {
2948 wl1271_error("SSID is too long!");
2952 wl->ssid_len = ssid_len;
2953 memcpy(wl->ssid, ptr+2, ssid_len);
2957 static int wl1271_bss_erp_info_changed(struct wl1271 *wl,
2958 struct ieee80211_bss_conf *bss_conf,
2963 if (changed & BSS_CHANGED_ERP_SLOT) {
2964 if (bss_conf->use_short_slot)
2965 ret = wl1271_acx_slot(wl, SLOT_TIME_SHORT);
2967 ret = wl1271_acx_slot(wl, SLOT_TIME_LONG);
2969 wl1271_warning("Set slot time failed %d", ret);
2974 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
2975 if (bss_conf->use_short_preamble)
2976 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_SHORT);
2978 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_LONG);
2981 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
2982 if (bss_conf->use_cts_prot)
2983 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_ENABLE);
2985 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_DISABLE);
2987 wl1271_warning("Set ctsprotect failed %d", ret);
2996 static int wl1271_bss_beacon_info_changed(struct wl1271 *wl,
2997 struct ieee80211_vif *vif,
2998 struct ieee80211_bss_conf *bss_conf,
3001 bool is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
3004 if ((changed & BSS_CHANGED_BEACON_INT)) {
3005 wl1271_debug(DEBUG_MASTER, "beacon interval updated: %d",
3006 bss_conf->beacon_int);
3008 wl->beacon_int = bss_conf->beacon_int;
3011 if ((changed & BSS_CHANGED_BEACON)) {
3012 struct ieee80211_hdr *hdr;
3013 int ieoffset = offsetof(struct ieee80211_mgmt,
3015 struct sk_buff *beacon = ieee80211_beacon_get(wl->hw, vif);
3021 wl1271_debug(DEBUG_MASTER, "beacon updated");
3023 ret = wl1271_ssid_set(wl, beacon, ieoffset);
3025 dev_kfree_skb(beacon);
3028 tmpl_id = is_ap ? CMD_TEMPL_AP_BEACON :
3030 ret = wl1271_cmd_template_set(wl, tmpl_id,
3033 wl1271_tx_min_rate_get(wl));
3035 dev_kfree_skb(beacon);
3039 hdr = (struct ieee80211_hdr *) beacon->data;
3040 hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
3041 IEEE80211_STYPE_PROBE_RESP);
3043 tmpl_id = is_ap ? CMD_TEMPL_AP_PROBE_RESPONSE :
3044 CMD_TEMPL_PROBE_RESPONSE;
3045 ret = wl1271_cmd_template_set(wl,
3049 wl1271_tx_min_rate_get(wl));
3050 dev_kfree_skb(beacon);
3059 /* AP mode changes */
3060 static void wl1271_bss_info_changed_ap(struct wl1271 *wl,
3061 struct ieee80211_vif *vif,
3062 struct ieee80211_bss_conf *bss_conf,
3067 if ((changed & BSS_CHANGED_BASIC_RATES)) {
3068 u32 rates = bss_conf->basic_rates;
3070 wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl, rates);
3071 wl->basic_rate = wl1271_tx_min_rate_get(wl);
3073 ret = wl1271_init_ap_rates(wl);
3075 wl1271_error("AP rate policy change failed %d", ret);
3079 ret = wl1271_ap_init_templates(wl);
3084 ret = wl1271_bss_beacon_info_changed(wl, vif, bss_conf, changed);
3088 if ((changed & BSS_CHANGED_BEACON_ENABLED)) {
3089 if (bss_conf->enable_beacon) {
3090 if (!test_bit(WL1271_FLAG_AP_STARTED, &wl->flags)) {
3091 ret = wl12xx_cmd_role_start_ap(wl);
3095 set_bit(WL1271_FLAG_AP_STARTED, &wl->flags);
3096 wl1271_debug(DEBUG_AP, "started AP");
3098 ret = wl1271_ap_init_hwenc(wl);
3103 if (test_bit(WL1271_FLAG_AP_STARTED, &wl->flags)) {
3104 ret = wl12xx_cmd_role_stop_ap(wl);
3108 clear_bit(WL1271_FLAG_AP_STARTED, &wl->flags);
3109 wl1271_debug(DEBUG_AP, "stopped AP");
3114 ret = wl1271_bss_erp_info_changed(wl, bss_conf, changed);
3121 /* STA/IBSS mode changes */
3122 static void wl1271_bss_info_changed_sta(struct wl1271 *wl,
3123 struct ieee80211_vif *vif,
3124 struct ieee80211_bss_conf *bss_conf,
3127 bool do_join = false, set_assoc = false;
3128 bool is_ibss = (wl->bss_type == BSS_TYPE_IBSS);
3129 u32 sta_rate_set = 0;
3131 struct ieee80211_sta *sta;
3132 bool sta_exists = false;
3133 struct ieee80211_sta_ht_cap sta_ht_cap;
3136 ret = wl1271_bss_beacon_info_changed(wl, vif, bss_conf,
3142 if ((changed & BSS_CHANGED_BEACON_INT) && is_ibss)
3145 /* Need to update the SSID (for filtering etc) */
3146 if ((changed & BSS_CHANGED_BEACON) && is_ibss)
3149 if ((changed & BSS_CHANGED_BEACON_ENABLED) && is_ibss) {
3150 wl1271_debug(DEBUG_ADHOC, "ad-hoc beaconing: %s",
3151 bss_conf->enable_beacon ? "enabled" : "disabled");
3153 if (bss_conf->enable_beacon)
3154 wl->set_bss_type = BSS_TYPE_IBSS;
3156 wl->set_bss_type = BSS_TYPE_STA_BSS;
3160 if ((changed & BSS_CHANGED_CQM)) {
3161 bool enable = false;
3162 if (bss_conf->cqm_rssi_thold)
3164 ret = wl1271_acx_rssi_snr_trigger(wl, enable,
3165 bss_conf->cqm_rssi_thold,
3166 bss_conf->cqm_rssi_hyst);
3169 wl->rssi_thold = bss_conf->cqm_rssi_thold;
3172 if ((changed & BSS_CHANGED_BSSID) &&
3174 * Now we know the correct bssid, so we send a new join command
3175 * and enable the BSSID filter
3177 memcmp(wl->bssid, bss_conf->bssid, ETH_ALEN)) {
3178 memcpy(wl->bssid, bss_conf->bssid, ETH_ALEN);
3180 if (!is_zero_ether_addr(wl->bssid)) {
3181 ret = wl1271_cmd_build_null_data(wl);
3185 ret = wl1271_build_qos_null_data(wl);
3189 /* Need to update the BSSID (for filtering etc) */
3195 sta = ieee80211_find_sta(vif, bss_conf->bssid);
3197 /* save the supp_rates of the ap */
3198 sta_rate_set = sta->supp_rates[wl->hw->conf.channel->band];
3199 if (sta->ht_cap.ht_supported)
3201 (sta->ht_cap.mcs.rx_mask[0] << HW_HT_RATES_OFFSET);
3202 sta_ht_cap = sta->ht_cap;
3208 /* handle new association with HT and HT information change */
3209 if ((changed & BSS_CHANGED_HT) &&
3210 (bss_conf->channel_type != NL80211_CHAN_NO_HT)) {
3211 ret = wl1271_acx_set_ht_capabilities(wl, &sta_ht_cap,
3214 wl1271_warning("Set ht cap true failed %d",
3218 ret = wl1271_acx_set_ht_information(wl,
3219 bss_conf->ht_operation_mode);
3221 wl1271_warning("Set ht information failed %d",
3226 /* handle new association without HT and disassociation */
3227 else if (changed & BSS_CHANGED_ASSOC) {
3228 ret = wl1271_acx_set_ht_capabilities(wl, &sta_ht_cap,
3231 wl1271_warning("Set ht cap false failed %d",
3238 if ((changed & BSS_CHANGED_ASSOC)) {
3239 if (bss_conf->assoc) {
3242 wl->aid = bss_conf->aid;
3245 wl->ps_poll_failures = 0;
3248 * use basic rates from AP, and determine lowest rate
3249 * to use with control frames.
3251 rates = bss_conf->basic_rates;
3252 wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl,
3254 wl->basic_rate = wl1271_tx_min_rate_get(wl);
3256 wl->rate_set = wl1271_tx_enabled_rates_get(wl,
3258 ret = wl1271_acx_sta_rate_policies(wl);
3263 * with wl1271, we don't need to update the
3264 * beacon_int and dtim_period, because the firmware
3265 * updates it by itself when the first beacon is
3266 * received after a join.
3268 ret = wl1271_cmd_build_ps_poll(wl, wl->aid);
3273 * Get a template for hardware connection maintenance
3275 dev_kfree_skb(wl->probereq);
3276 wl->probereq = wl1271_cmd_build_ap_probe_req(wl, NULL);
3277 ieoffset = offsetof(struct ieee80211_mgmt,
3278 u.probe_req.variable);
3279 wl1271_ssid_set(wl, wl->probereq, ieoffset);
3281 /* enable the connection monitoring feature */
3282 ret = wl1271_acx_conn_monit_params(wl, true);
3286 /* If we want to go in PSM but we're not there yet */
3287 if (test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags) &&
3288 !test_bit(WL1271_FLAG_PSM, &wl->flags)) {
3289 enum wl1271_cmd_ps_mode mode;
3291 mode = STATION_POWER_SAVE_MODE;
3292 ret = wl1271_ps_set_mode(wl, mode,
3299 /* use defaults when not associated */
3301 !!test_and_clear_bit(WL1271_FLAG_STA_ASSOCIATED,
3304 !!test_and_clear_bit(WL1271_FLAG_STA_STATE_SENT,
3308 /* free probe-request template */
3309 dev_kfree_skb(wl->probereq);
3310 wl->probereq = NULL;
3312 /* re-enable dynamic ps - just in case */
3313 ieee80211_enable_dyn_ps(wl->vif);
3315 /* revert back to minimum rates for the current band */
3316 wl1271_set_band_rate(wl);
3317 wl->basic_rate = wl1271_tx_min_rate_get(wl);
3318 ret = wl1271_acx_sta_rate_policies(wl);
3322 /* disable connection monitor features */
3323 ret = wl1271_acx_conn_monit_params(wl, false);
3325 /* Disable the keep-alive feature */
3326 ret = wl1271_acx_keep_alive_mode(wl, false);
3330 /* restore the bssid filter and go to dummy bssid */
3332 u32 conf_flags = wl->hw->conf.flags;
3334 * we might have to disable roc, if there was
3335 * no IF_OPER_UP notification.
3338 ret = wl12xx_croc(wl, wl->role_id);
3343 * (we also need to disable roc in case of
3344 * roaming on the same channel. until we will
3345 * have a better flow...)
3347 if (test_bit(wl->dev_role_id, wl->roc_map)) {
3348 ret = wl12xx_croc(wl, wl->dev_role_id);
3354 if (!(conf_flags & IEEE80211_CONF_IDLE)) {
3355 wl12xx_cmd_role_start_dev(wl);
3356 wl12xx_roc(wl, wl->dev_role_id);
3362 if (changed & BSS_CHANGED_IBSS) {
3363 wl1271_debug(DEBUG_ADHOC, "ibss_joined: %d",
3364 bss_conf->ibss_joined);
3366 if (bss_conf->ibss_joined) {
3367 u32 rates = bss_conf->basic_rates;
3368 wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl,
3370 wl->basic_rate = wl1271_tx_min_rate_get(wl);
3372 /* by default, use 11b rates */
3373 wl->rate_set = CONF_TX_IBSS_DEFAULT_RATES;
3374 ret = wl1271_acx_sta_rate_policies(wl);
3380 ret = wl1271_bss_erp_info_changed(wl, bss_conf, changed);
3384 if (changed & BSS_CHANGED_ARP_FILTER) {
3385 __be32 addr = bss_conf->arp_addr_list[0];
3386 WARN_ON(wl->bss_type != BSS_TYPE_STA_BSS);
3388 if (bss_conf->arp_addr_cnt == 1 &&
3389 bss_conf->arp_filter_enabled) {
3391 * The template should have been configured only upon
3392 * association. however, it seems that the correct ip
3393 * isn't being set (when sending), so we have to
3394 * reconfigure the template upon every ip change.
3396 ret = wl1271_cmd_build_arp_rsp(wl, addr);
3398 wl1271_warning("build arp rsp failed: %d", ret);
3402 ret = wl1271_acx_arp_ip_filter(wl,
3403 ACX_ARP_FILTER_ARP_FILTERING,
3406 ret = wl1271_acx_arp_ip_filter(wl, 0, addr);
3413 ret = wl1271_join(wl, set_assoc);
3415 wl1271_warning("cmd join failed %d", ret);
3419 /* ROC until connected (after EAPOL exchange) */
3421 ret = wl12xx_roc(wl, wl->role_id);
3425 wl1271_check_operstate(wl,
3426 ieee80211_get_operstate(vif));
3429 * stop device role if started (we might already be in
3430 * STA role). TODO: make it better.
3432 if (wl->dev_role_id != WL12XX_INVALID_ROLE_ID) {
3433 ret = wl12xx_croc(wl, wl->dev_role_id);
3437 ret = wl12xx_cmd_role_stop_dev(wl);
3447 static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
3448 struct ieee80211_vif *vif,
3449 struct ieee80211_bss_conf *bss_conf,
3452 struct wl1271 *wl = hw->priv;
3453 bool is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
3456 wl1271_debug(DEBUG_MAC80211, "mac80211 bss info changed 0x%x",
3459 mutex_lock(&wl->mutex);
3461 if (unlikely(wl->state == WL1271_STATE_OFF))
3464 ret = wl1271_ps_elp_wakeup(wl);
3469 wl1271_bss_info_changed_ap(wl, vif, bss_conf, changed);
3471 wl1271_bss_info_changed_sta(wl, vif, bss_conf, changed);
3473 wl1271_ps_elp_sleep(wl);
3476 mutex_unlock(&wl->mutex);
3479 static int wl1271_op_conf_tx(struct ieee80211_hw *hw, u16 queue,
3480 const struct ieee80211_tx_queue_params *params)
3482 struct wl1271 *wl = hw->priv;
3486 mutex_lock(&wl->mutex);
3488 wl1271_debug(DEBUG_MAC80211, "mac80211 conf tx %d", queue);
3491 ps_scheme = CONF_PS_SCHEME_UPSD_TRIGGER;
3493 ps_scheme = CONF_PS_SCHEME_LEGACY;
3495 if (wl->state == WL1271_STATE_OFF) {
3497 * If the state is off, the parameters will be recorded and
3498 * configured on init. This happens in AP-mode.
3500 struct conf_tx_ac_category *conf_ac =
3501 &wl->conf.tx.ac_conf[wl1271_tx_get_queue(queue)];
3502 struct conf_tx_tid *conf_tid =
3503 &wl->conf.tx.tid_conf[wl1271_tx_get_queue(queue)];
3505 conf_ac->ac = wl1271_tx_get_queue(queue);
3506 conf_ac->cw_min = (u8)params->cw_min;
3507 conf_ac->cw_max = params->cw_max;
3508 conf_ac->aifsn = params->aifs;
3509 conf_ac->tx_op_limit = params->txop << 5;
3511 conf_tid->queue_id = wl1271_tx_get_queue(queue);
3512 conf_tid->channel_type = CONF_CHANNEL_TYPE_EDCF;
3513 conf_tid->tsid = wl1271_tx_get_queue(queue);
3514 conf_tid->ps_scheme = ps_scheme;
3515 conf_tid->ack_policy = CONF_ACK_POLICY_LEGACY;
3516 conf_tid->apsd_conf[0] = 0;
3517 conf_tid->apsd_conf[1] = 0;
3521 ret = wl1271_ps_elp_wakeup(wl);
3526 * the txop is confed in units of 32us by the mac80211,
3529 ret = wl1271_acx_ac_cfg(wl, wl1271_tx_get_queue(queue),
3530 params->cw_min, params->cw_max,
3531 params->aifs, params->txop << 5);
3535 ret = wl1271_acx_tid_cfg(wl, wl1271_tx_get_queue(queue),
3536 CONF_CHANNEL_TYPE_EDCF,
3537 wl1271_tx_get_queue(queue),
3538 ps_scheme, CONF_ACK_POLICY_LEGACY,
3542 wl1271_ps_elp_sleep(wl);
3545 mutex_unlock(&wl->mutex);
3550 static u64 wl1271_op_get_tsf(struct ieee80211_hw *hw)
3553 struct wl1271 *wl = hw->priv;
3554 u64 mactime = ULLONG_MAX;
3557 wl1271_debug(DEBUG_MAC80211, "mac80211 get tsf");
3559 mutex_lock(&wl->mutex);
3561 if (unlikely(wl->state == WL1271_STATE_OFF))
3564 ret = wl1271_ps_elp_wakeup(wl);
3568 ret = wl1271_acx_tsf_info(wl, &mactime);
3573 wl1271_ps_elp_sleep(wl);
3576 mutex_unlock(&wl->mutex);
3580 static int wl1271_op_get_survey(struct ieee80211_hw *hw, int idx,
3581 struct survey_info *survey)
3583 struct wl1271 *wl = hw->priv;
3584 struct ieee80211_conf *conf = &hw->conf;
3589 survey->channel = conf->channel;
3590 survey->filled = SURVEY_INFO_NOISE_DBM;
3591 survey->noise = wl->noise;
3596 static int wl1271_allocate_sta(struct wl1271 *wl,
3597 struct ieee80211_sta *sta,
3600 struct wl1271_station *wl_sta;
3603 id = find_first_zero_bit(wl->ap_hlid_map, AP_MAX_STATIONS);
3604 if (id >= AP_MAX_STATIONS) {
3605 wl1271_warning("could not allocate HLID - too much stations");
3609 wl_sta = (struct wl1271_station *)sta->drv_priv;
3610 __set_bit(id, wl->ap_hlid_map);
3611 wl_sta->hlid = WL1271_AP_STA_HLID_START + id;
3612 *hlid = wl_sta->hlid;
3613 memcpy(wl->links[wl_sta->hlid].addr, sta->addr, ETH_ALEN);
3617 static void wl1271_free_sta(struct wl1271 *wl, u8 hlid)
3619 int id = hlid - WL1271_AP_STA_HLID_START;
3621 if (WARN_ON(!test_bit(id, wl->ap_hlid_map)))
3624 __clear_bit(id, wl->ap_hlid_map);
3625 memset(wl->links[hlid].addr, 0, ETH_ALEN);
3626 wl1271_tx_reset_link_queues(wl, hlid);
3627 __clear_bit(hlid, &wl->ap_ps_map);
3628 __clear_bit(hlid, (unsigned long *)&wl->ap_fw_ps_map);
3631 bool wl1271_is_active_sta(struct wl1271 *wl, u8 hlid)
3633 int id = hlid - WL1271_AP_STA_HLID_START;
3634 return test_bit(id, wl->ap_hlid_map);
3637 static int wl1271_op_sta_add(struct ieee80211_hw *hw,
3638 struct ieee80211_vif *vif,
3639 struct ieee80211_sta *sta)
3641 struct wl1271 *wl = hw->priv;
3645 mutex_lock(&wl->mutex);
3647 if (unlikely(wl->state == WL1271_STATE_OFF))
3650 if (wl->bss_type != BSS_TYPE_AP_BSS)
3653 wl1271_debug(DEBUG_MAC80211, "mac80211 add sta %d", (int)sta->aid);
3655 ret = wl1271_allocate_sta(wl, sta, &hlid);
3659 ret = wl1271_ps_elp_wakeup(wl);
3663 ret = wl12xx_cmd_add_peer(wl, sta, hlid);
3668 wl1271_ps_elp_sleep(wl);
3672 wl1271_free_sta(wl, hlid);
3675 mutex_unlock(&wl->mutex);
3679 static int wl1271_op_sta_remove(struct ieee80211_hw *hw,
3680 struct ieee80211_vif *vif,
3681 struct ieee80211_sta *sta)
3683 struct wl1271 *wl = hw->priv;
3684 struct wl1271_station *wl_sta;
3687 mutex_lock(&wl->mutex);
3689 if (unlikely(wl->state == WL1271_STATE_OFF))
3692 if (wl->bss_type != BSS_TYPE_AP_BSS)
3695 wl1271_debug(DEBUG_MAC80211, "mac80211 remove sta %d", (int)sta->aid);
3697 wl_sta = (struct wl1271_station *)sta->drv_priv;
3698 id = wl_sta->hlid - WL1271_AP_STA_HLID_START;
3699 if (WARN_ON(!test_bit(id, wl->ap_hlid_map)))
3702 ret = wl1271_ps_elp_wakeup(wl);
3706 ret = wl12xx_cmd_remove_peer(wl, wl_sta->hlid);
3710 wl1271_free_sta(wl, wl_sta->hlid);
3713 wl1271_ps_elp_sleep(wl);
3716 mutex_unlock(&wl->mutex);
3720 static int wl1271_op_ampdu_action(struct ieee80211_hw *hw,
3721 struct ieee80211_vif *vif,
3722 enum ieee80211_ampdu_mlme_action action,
3723 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
3726 struct wl1271 *wl = hw->priv;
3729 mutex_lock(&wl->mutex);
3731 if (unlikely(wl->state == WL1271_STATE_OFF)) {
3736 ret = wl1271_ps_elp_wakeup(wl);
3740 wl1271_debug(DEBUG_MAC80211, "mac80211 ampdu: Rx tid %d action %d",
3744 case IEEE80211_AMPDU_RX_START:
3745 if ((wl->ba_support) && (wl->ba_allowed)) {
3746 ret = wl1271_acx_set_ba_receiver_session(wl, tid, *ssn,
3749 wl->ba_rx_bitmap |= BIT(tid);
3755 case IEEE80211_AMPDU_RX_STOP:
3756 ret = wl1271_acx_set_ba_receiver_session(wl, tid, 0, false);
3758 wl->ba_rx_bitmap &= ~BIT(tid);
3762 * The BA initiator session management in FW independently.
3763 * Falling break here on purpose for all TX APDU commands.
3765 case IEEE80211_AMPDU_TX_START:
3766 case IEEE80211_AMPDU_TX_STOP:
3767 case IEEE80211_AMPDU_TX_OPERATIONAL:
3772 wl1271_error("Incorrect ampdu action id=%x\n", action);
3776 wl1271_ps_elp_sleep(wl);
3779 mutex_unlock(&wl->mutex);
3784 static bool wl1271_tx_frames_pending(struct ieee80211_hw *hw)
3786 struct wl1271 *wl = hw->priv;
3789 mutex_lock(&wl->mutex);
3791 if (unlikely(wl->state == WL1271_STATE_OFF))
3794 /* packets are considered pending if in the TX queue or the FW */
3795 ret = (wl1271_tx_total_queue_count(wl) > 0) || (wl->tx_frames_cnt > 0);
3797 /* the above is appropriate for STA mode for PS purposes */
3798 WARN_ON(wl->bss_type != BSS_TYPE_STA_BSS);
3801 mutex_unlock(&wl->mutex);
3806 /* can't be const, mac80211 writes to this */
3807 static struct ieee80211_rate wl1271_rates[] = {
3809 .hw_value = CONF_HW_BIT_RATE_1MBPS,
3810 .hw_value_short = CONF_HW_BIT_RATE_1MBPS, },
3812 .hw_value = CONF_HW_BIT_RATE_2MBPS,
3813 .hw_value_short = CONF_HW_BIT_RATE_2MBPS,
3814 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
3816 .hw_value = CONF_HW_BIT_RATE_5_5MBPS,
3817 .hw_value_short = CONF_HW_BIT_RATE_5_5MBPS,
3818 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
3820 .hw_value = CONF_HW_BIT_RATE_11MBPS,
3821 .hw_value_short = CONF_HW_BIT_RATE_11MBPS,
3822 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
3824 .hw_value = CONF_HW_BIT_RATE_6MBPS,
3825 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
3827 .hw_value = CONF_HW_BIT_RATE_9MBPS,
3828 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
3830 .hw_value = CONF_HW_BIT_RATE_12MBPS,
3831 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
3833 .hw_value = CONF_HW_BIT_RATE_18MBPS,
3834 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
3836 .hw_value = CONF_HW_BIT_RATE_24MBPS,
3837 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
3839 .hw_value = CONF_HW_BIT_RATE_36MBPS,
3840 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
3842 .hw_value = CONF_HW_BIT_RATE_48MBPS,
3843 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
3845 .hw_value = CONF_HW_BIT_RATE_54MBPS,
3846 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
3849 /* can't be const, mac80211 writes to this */
3850 static struct ieee80211_channel wl1271_channels[] = {
3851 { .hw_value = 1, .center_freq = 2412, .max_power = 25 },
3852 { .hw_value = 2, .center_freq = 2417, .max_power = 25 },
3853 { .hw_value = 3, .center_freq = 2422, .max_power = 25 },
3854 { .hw_value = 4, .center_freq = 2427, .max_power = 25 },
3855 { .hw_value = 5, .center_freq = 2432, .max_power = 25 },
3856 { .hw_value = 6, .center_freq = 2437, .max_power = 25 },
3857 { .hw_value = 7, .center_freq = 2442, .max_power = 25 },
3858 { .hw_value = 8, .center_freq = 2447, .max_power = 25 },
3859 { .hw_value = 9, .center_freq = 2452, .max_power = 25 },
3860 { .hw_value = 10, .center_freq = 2457, .max_power = 25 },
3861 { .hw_value = 11, .center_freq = 2462, .max_power = 25 },
3862 { .hw_value = 12, .center_freq = 2467, .max_power = 25 },
3863 { .hw_value = 13, .center_freq = 2472, .max_power = 25 },
3864 { .hw_value = 14, .center_freq = 2484, .max_power = 25 },
3867 /* mapping to indexes for wl1271_rates */
3868 static const u8 wl1271_rate_to_idx_2ghz[] = {
3869 /* MCS rates are used only with 11n */
3870 7, /* CONF_HW_RXTX_RATE_MCS7 */
3871 6, /* CONF_HW_RXTX_RATE_MCS6 */
3872 5, /* CONF_HW_RXTX_RATE_MCS5 */
3873 4, /* CONF_HW_RXTX_RATE_MCS4 */
3874 3, /* CONF_HW_RXTX_RATE_MCS3 */
3875 2, /* CONF_HW_RXTX_RATE_MCS2 */
3876 1, /* CONF_HW_RXTX_RATE_MCS1 */
3877 0, /* CONF_HW_RXTX_RATE_MCS0 */
3879 11, /* CONF_HW_RXTX_RATE_54 */
3880 10, /* CONF_HW_RXTX_RATE_48 */
3881 9, /* CONF_HW_RXTX_RATE_36 */
3882 8, /* CONF_HW_RXTX_RATE_24 */
3884 /* TI-specific rate */
3885 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
3887 7, /* CONF_HW_RXTX_RATE_18 */
3888 6, /* CONF_HW_RXTX_RATE_12 */
3889 3, /* CONF_HW_RXTX_RATE_11 */
3890 5, /* CONF_HW_RXTX_RATE_9 */
3891 4, /* CONF_HW_RXTX_RATE_6 */
3892 2, /* CONF_HW_RXTX_RATE_5_5 */
3893 1, /* CONF_HW_RXTX_RATE_2 */
3894 0 /* CONF_HW_RXTX_RATE_1 */
3897 /* 11n STA capabilities */
3898 #define HW_RX_HIGHEST_RATE 72
3900 #ifdef CONFIG_WL12XX_HT
3901 #define WL12XX_HT_CAP { \
3902 .cap = IEEE80211_HT_CAP_GRN_FLD | IEEE80211_HT_CAP_SGI_20 | \
3903 (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT), \
3904 .ht_supported = true, \
3905 .ampdu_factor = IEEE80211_HT_MAX_AMPDU_8K, \
3906 .ampdu_density = IEEE80211_HT_MPDU_DENSITY_8, \
3908 .rx_mask = { 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, \
3909 .rx_highest = cpu_to_le16(HW_RX_HIGHEST_RATE), \
3910 .tx_params = IEEE80211_HT_MCS_TX_DEFINED, \
3914 #define WL12XX_HT_CAP { \
3915 .ht_supported = false, \
3919 /* can't be const, mac80211 writes to this */
3920 static struct ieee80211_supported_band wl1271_band_2ghz = {
3921 .channels = wl1271_channels,
3922 .n_channels = ARRAY_SIZE(wl1271_channels),
3923 .bitrates = wl1271_rates,
3924 .n_bitrates = ARRAY_SIZE(wl1271_rates),
3925 .ht_cap = WL12XX_HT_CAP,
3928 /* 5 GHz data rates for WL1273 */
3929 static struct ieee80211_rate wl1271_rates_5ghz[] = {
3931 .hw_value = CONF_HW_BIT_RATE_6MBPS,
3932 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
3934 .hw_value = CONF_HW_BIT_RATE_9MBPS,
3935 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
3937 .hw_value = CONF_HW_BIT_RATE_12MBPS,
3938 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
3940 .hw_value = CONF_HW_BIT_RATE_18MBPS,
3941 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
3943 .hw_value = CONF_HW_BIT_RATE_24MBPS,
3944 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
3946 .hw_value = CONF_HW_BIT_RATE_36MBPS,
3947 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
3949 .hw_value = CONF_HW_BIT_RATE_48MBPS,
3950 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
3952 .hw_value = CONF_HW_BIT_RATE_54MBPS,
3953 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
3956 /* 5 GHz band channels for WL1273 */
3957 static struct ieee80211_channel wl1271_channels_5ghz[] = {
3958 { .hw_value = 7, .center_freq = 5035, .max_power = 25 },
3959 { .hw_value = 8, .center_freq = 5040, .max_power = 25 },
3960 { .hw_value = 9, .center_freq = 5045, .max_power = 25 },
3961 { .hw_value = 11, .center_freq = 5055, .max_power = 25 },
3962 { .hw_value = 12, .center_freq = 5060, .max_power = 25 },
3963 { .hw_value = 16, .center_freq = 5080, .max_power = 25 },
3964 { .hw_value = 34, .center_freq = 5170, .max_power = 25 },
3965 { .hw_value = 36, .center_freq = 5180, .max_power = 25 },
3966 { .hw_value = 38, .center_freq = 5190, .max_power = 25 },
3967 { .hw_value = 40, .center_freq = 5200, .max_power = 25 },
3968 { .hw_value = 42, .center_freq = 5210, .max_power = 25 },
3969 { .hw_value = 44, .center_freq = 5220, .max_power = 25 },
3970 { .hw_value = 46, .center_freq = 5230, .max_power = 25 },
3971 { .hw_value = 48, .center_freq = 5240, .max_power = 25 },
3972 { .hw_value = 52, .center_freq = 5260, .max_power = 25 },
3973 { .hw_value = 56, .center_freq = 5280, .max_power = 25 },
3974 { .hw_value = 60, .center_freq = 5300, .max_power = 25 },
3975 { .hw_value = 64, .center_freq = 5320, .max_power = 25 },
3976 { .hw_value = 100, .center_freq = 5500, .max_power = 25 },
3977 { .hw_value = 104, .center_freq = 5520, .max_power = 25 },
3978 { .hw_value = 108, .center_freq = 5540, .max_power = 25 },
3979 { .hw_value = 112, .center_freq = 5560, .max_power = 25 },
3980 { .hw_value = 116, .center_freq = 5580, .max_power = 25 },
3981 { .hw_value = 120, .center_freq = 5600, .max_power = 25 },
3982 { .hw_value = 124, .center_freq = 5620, .max_power = 25 },
3983 { .hw_value = 128, .center_freq = 5640, .max_power = 25 },
3984 { .hw_value = 132, .center_freq = 5660, .max_power = 25 },
3985 { .hw_value = 136, .center_freq = 5680, .max_power = 25 },
3986 { .hw_value = 140, .center_freq = 5700, .max_power = 25 },
3987 { .hw_value = 149, .center_freq = 5745, .max_power = 25 },
3988 { .hw_value = 153, .center_freq = 5765, .max_power = 25 },
3989 { .hw_value = 157, .center_freq = 5785, .max_power = 25 },
3990 { .hw_value = 161, .center_freq = 5805, .max_power = 25 },
3991 { .hw_value = 165, .center_freq = 5825, .max_power = 25 },
3994 /* mapping to indexes for wl1271_rates_5ghz */
3995 static const u8 wl1271_rate_to_idx_5ghz[] = {
3996 /* MCS rates are used only with 11n */
3997 7, /* CONF_HW_RXTX_RATE_MCS7 */
3998 6, /* CONF_HW_RXTX_RATE_MCS6 */
3999 5, /* CONF_HW_RXTX_RATE_MCS5 */
4000 4, /* CONF_HW_RXTX_RATE_MCS4 */
4001 3, /* CONF_HW_RXTX_RATE_MCS3 */
4002 2, /* CONF_HW_RXTX_RATE_MCS2 */
4003 1, /* CONF_HW_RXTX_RATE_MCS1 */
4004 0, /* CONF_HW_RXTX_RATE_MCS0 */
4006 7, /* CONF_HW_RXTX_RATE_54 */
4007 6, /* CONF_HW_RXTX_RATE_48 */
4008 5, /* CONF_HW_RXTX_RATE_36 */
4009 4, /* CONF_HW_RXTX_RATE_24 */
4011 /* TI-specific rate */
4012 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
4014 3, /* CONF_HW_RXTX_RATE_18 */
4015 2, /* CONF_HW_RXTX_RATE_12 */
4016 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_11 */
4017 1, /* CONF_HW_RXTX_RATE_9 */
4018 0, /* CONF_HW_RXTX_RATE_6 */
4019 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_5_5 */
4020 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_2 */
4021 CONF_HW_RXTX_RATE_UNSUPPORTED /* CONF_HW_RXTX_RATE_1 */
4024 static struct ieee80211_supported_band wl1271_band_5ghz = {
4025 .channels = wl1271_channels_5ghz,
4026 .n_channels = ARRAY_SIZE(wl1271_channels_5ghz),
4027 .bitrates = wl1271_rates_5ghz,
4028 .n_bitrates = ARRAY_SIZE(wl1271_rates_5ghz),
4029 .ht_cap = WL12XX_HT_CAP,
4032 static const u8 *wl1271_band_rate_to_idx[] = {
4033 [IEEE80211_BAND_2GHZ] = wl1271_rate_to_idx_2ghz,
4034 [IEEE80211_BAND_5GHZ] = wl1271_rate_to_idx_5ghz
4037 static const struct ieee80211_ops wl1271_ops = {
4038 .start = wl1271_op_start,
4039 .stop = wl1271_op_stop,
4040 .add_interface = wl1271_op_add_interface,
4041 .remove_interface = wl1271_op_remove_interface,
4043 .suspend = wl1271_op_suspend,
4044 .resume = wl1271_op_resume,
4046 .config = wl1271_op_config,
4047 .prepare_multicast = wl1271_op_prepare_multicast,
4048 .configure_filter = wl1271_op_configure_filter,
4050 .set_key = wl1271_op_set_key,
4051 .hw_scan = wl1271_op_hw_scan,
4052 .cancel_hw_scan = wl1271_op_cancel_hw_scan,
4053 .sched_scan_start = wl1271_op_sched_scan_start,
4054 .sched_scan_stop = wl1271_op_sched_scan_stop,
4055 .bss_info_changed = wl1271_op_bss_info_changed,
4056 .set_frag_threshold = wl1271_op_set_frag_threshold,
4057 .set_rts_threshold = wl1271_op_set_rts_threshold,
4058 .conf_tx = wl1271_op_conf_tx,
4059 .get_tsf = wl1271_op_get_tsf,
4060 .get_survey = wl1271_op_get_survey,
4061 .sta_add = wl1271_op_sta_add,
4062 .sta_remove = wl1271_op_sta_remove,
4063 .ampdu_action = wl1271_op_ampdu_action,
4064 .tx_frames_pending = wl1271_tx_frames_pending,
4065 CFG80211_TESTMODE_CMD(wl1271_tm_cmd)
4069 u8 wl1271_rate_to_idx(int rate, enum ieee80211_band band)
4073 BUG_ON(band >= sizeof(wl1271_band_rate_to_idx)/sizeof(u8 *));
4075 if (unlikely(rate >= CONF_HW_RXTX_RATE_MAX)) {
4076 wl1271_error("Illegal RX rate from HW: %d", rate);
4080 idx = wl1271_band_rate_to_idx[band][rate];
4081 if (unlikely(idx == CONF_HW_RXTX_RATE_UNSUPPORTED)) {
4082 wl1271_error("Unsupported RX rate from HW: %d", rate);
4089 static ssize_t wl1271_sysfs_show_bt_coex_state(struct device *dev,
4090 struct device_attribute *attr,
4093 struct wl1271 *wl = dev_get_drvdata(dev);
4098 mutex_lock(&wl->mutex);
4099 len = snprintf(buf, len, "%d\n\n0 - off\n1 - on\n",
4101 mutex_unlock(&wl->mutex);
4107 static ssize_t wl1271_sysfs_store_bt_coex_state(struct device *dev,
4108 struct device_attribute *attr,
4109 const char *buf, size_t count)
4111 struct wl1271 *wl = dev_get_drvdata(dev);
4115 ret = kstrtoul(buf, 10, &res);
4117 wl1271_warning("incorrect value written to bt_coex_mode");
4121 mutex_lock(&wl->mutex);
4125 if (res == wl->sg_enabled)
4128 wl->sg_enabled = res;
4130 if (wl->state == WL1271_STATE_OFF)
4133 ret = wl1271_ps_elp_wakeup(wl);
4137 wl1271_acx_sg_enable(wl, wl->sg_enabled);
4138 wl1271_ps_elp_sleep(wl);
4141 mutex_unlock(&wl->mutex);
4145 static DEVICE_ATTR(bt_coex_state, S_IRUGO | S_IWUSR,
4146 wl1271_sysfs_show_bt_coex_state,
4147 wl1271_sysfs_store_bt_coex_state);
4149 static ssize_t wl1271_sysfs_show_hw_pg_ver(struct device *dev,
4150 struct device_attribute *attr,
4153 struct wl1271 *wl = dev_get_drvdata(dev);
4158 mutex_lock(&wl->mutex);
4159 if (wl->hw_pg_ver >= 0)
4160 len = snprintf(buf, len, "%d\n", wl->hw_pg_ver);
4162 len = snprintf(buf, len, "n/a\n");
4163 mutex_unlock(&wl->mutex);
4168 static DEVICE_ATTR(hw_pg_ver, S_IRUGO,
4169 wl1271_sysfs_show_hw_pg_ver, NULL);
4171 static ssize_t wl1271_sysfs_read_fwlog(struct file *filp, struct kobject *kobj,
4172 struct bin_attribute *bin_attr,
4173 char *buffer, loff_t pos, size_t count)
4175 struct device *dev = container_of(kobj, struct device, kobj);
4176 struct wl1271 *wl = dev_get_drvdata(dev);
4180 ret = mutex_lock_interruptible(&wl->mutex);
4182 return -ERESTARTSYS;
4184 /* Let only one thread read the log at a time, blocking others */
4185 while (wl->fwlog_size == 0) {
4188 prepare_to_wait_exclusive(&wl->fwlog_waitq,
4190 TASK_INTERRUPTIBLE);
4192 if (wl->fwlog_size != 0) {
4193 finish_wait(&wl->fwlog_waitq, &wait);
4197 mutex_unlock(&wl->mutex);
4200 finish_wait(&wl->fwlog_waitq, &wait);
4202 if (signal_pending(current))
4203 return -ERESTARTSYS;
4205 ret = mutex_lock_interruptible(&wl->mutex);
4207 return -ERESTARTSYS;
4210 /* Check if the fwlog is still valid */
4211 if (wl->fwlog_size < 0) {
4212 mutex_unlock(&wl->mutex);
4216 /* Seeking is not supported - old logs are not kept. Disregard pos. */
4217 len = min(count, (size_t)wl->fwlog_size);
4218 wl->fwlog_size -= len;
4219 memcpy(buffer, wl->fwlog, len);
4221 /* Make room for new messages */
4222 memmove(wl->fwlog, wl->fwlog + len, wl->fwlog_size);
4224 mutex_unlock(&wl->mutex);
4229 static struct bin_attribute fwlog_attr = {
4230 .attr = {.name = "fwlog", .mode = S_IRUSR},
4231 .read = wl1271_sysfs_read_fwlog,
4234 int wl1271_register_hw(struct wl1271 *wl)
4238 if (wl->mac80211_registered)
4241 ret = wl1271_fetch_nvs(wl);
4243 /* NOTE: The wl->nvs->nvs element must be first, in
4244 * order to simplify the casting, we assume it is at
4245 * the beginning of the wl->nvs structure.
4247 u8 *nvs_ptr = (u8 *)wl->nvs;
4249 wl->mac_addr[0] = nvs_ptr[11];
4250 wl->mac_addr[1] = nvs_ptr[10];
4251 wl->mac_addr[2] = nvs_ptr[6];
4252 wl->mac_addr[3] = nvs_ptr[5];
4253 wl->mac_addr[4] = nvs_ptr[4];
4254 wl->mac_addr[5] = nvs_ptr[3];
4257 SET_IEEE80211_PERM_ADDR(wl->hw, wl->mac_addr);
4259 ret = ieee80211_register_hw(wl->hw);
4261 wl1271_error("unable to register mac80211 hw: %d", ret);
4265 wl->mac80211_registered = true;
4267 wl1271_debugfs_init(wl);
4269 register_netdevice_notifier(&wl1271_dev_notifier);
4271 wl1271_notice("loaded");
4275 EXPORT_SYMBOL_GPL(wl1271_register_hw);
4277 void wl1271_unregister_hw(struct wl1271 *wl)
4279 if (wl->state == WL1271_STATE_PLT)
4280 __wl1271_plt_stop(wl);
4282 unregister_netdevice_notifier(&wl1271_dev_notifier);
4283 ieee80211_unregister_hw(wl->hw);
4284 wl->mac80211_registered = false;
4287 EXPORT_SYMBOL_GPL(wl1271_unregister_hw);
4289 int wl1271_init_ieee80211(struct wl1271 *wl)
4291 static const u32 cipher_suites[] = {
4292 WLAN_CIPHER_SUITE_WEP40,
4293 WLAN_CIPHER_SUITE_WEP104,
4294 WLAN_CIPHER_SUITE_TKIP,
4295 WLAN_CIPHER_SUITE_CCMP,
4296 WL1271_CIPHER_SUITE_GEM,
4299 /* The tx descriptor buffer and the TKIP space. */
4300 wl->hw->extra_tx_headroom = WL1271_TKIP_IV_SPACE +
4301 sizeof(struct wl1271_tx_hw_descr);
4304 /* FIXME: find a proper value */
4305 wl->hw->channel_change_time = 10000;
4306 wl->hw->max_listen_interval = wl->conf.conn.max_listen_interval;
4308 wl->hw->flags = IEEE80211_HW_SIGNAL_DBM |
4309 IEEE80211_HW_BEACON_FILTER |
4310 IEEE80211_HW_SUPPORTS_PS |
4311 IEEE80211_HW_SUPPORTS_UAPSD |
4312 IEEE80211_HW_HAS_RATE_CONTROL |
4313 IEEE80211_HW_CONNECTION_MONITOR |
4314 IEEE80211_HW_SUPPORTS_CQM_RSSI |
4315 IEEE80211_HW_REPORTS_TX_ACK_STATUS |
4316 IEEE80211_HW_SPECTRUM_MGMT |
4317 IEEE80211_HW_AP_LINK_PS;
4319 wl->hw->wiphy->cipher_suites = cipher_suites;
4320 wl->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
4322 wl->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
4323 BIT(NL80211_IFTYPE_ADHOC) | BIT(NL80211_IFTYPE_AP);
4324 wl->hw->wiphy->max_scan_ssids = 1;
4326 * Maximum length of elements in scanning probe request templates
4327 * should be the maximum length possible for a template, without
4328 * the IEEE80211 header of the template
4330 wl->hw->wiphy->max_scan_ie_len = WL1271_CMD_TEMPL_DFLT_SIZE -
4331 sizeof(struct ieee80211_header);
4333 /* make sure all our channels fit in the scanned_ch bitmask */
4334 BUILD_BUG_ON(ARRAY_SIZE(wl1271_channels) +
4335 ARRAY_SIZE(wl1271_channels_5ghz) >
4336 WL1271_MAX_CHANNELS);
4338 * We keep local copies of the band structs because we need to
4339 * modify them on a per-device basis.
4341 memcpy(&wl->bands[IEEE80211_BAND_2GHZ], &wl1271_band_2ghz,
4342 sizeof(wl1271_band_2ghz));
4343 memcpy(&wl->bands[IEEE80211_BAND_5GHZ], &wl1271_band_5ghz,
4344 sizeof(wl1271_band_5ghz));
4346 wl->hw->wiphy->bands[IEEE80211_BAND_2GHZ] =
4347 &wl->bands[IEEE80211_BAND_2GHZ];
4348 wl->hw->wiphy->bands[IEEE80211_BAND_5GHZ] =
4349 &wl->bands[IEEE80211_BAND_5GHZ];
4352 wl->hw->max_rates = 1;
4354 wl->hw->wiphy->reg_notifier = wl1271_reg_notify;
4356 SET_IEEE80211_DEV(wl->hw, wl1271_wl_to_dev(wl));
4358 wl->hw->sta_data_size = sizeof(struct wl1271_station);
4360 wl->hw->max_rx_aggregation_subframes = 8;
4364 EXPORT_SYMBOL_GPL(wl1271_init_ieee80211);
4366 #define WL1271_DEFAULT_CHANNEL 0
4368 struct ieee80211_hw *wl1271_alloc_hw(void)
4370 struct ieee80211_hw *hw;
4371 struct platform_device *plat_dev = NULL;
4376 hw = ieee80211_alloc_hw(sizeof(*wl), &wl1271_ops);
4378 wl1271_error("could not alloc ieee80211_hw");
4383 plat_dev = kmemdup(&wl1271_device, sizeof(wl1271_device), GFP_KERNEL);
4385 wl1271_error("could not allocate platform_device");
4387 goto err_plat_alloc;
4391 memset(wl, 0, sizeof(*wl));
4393 INIT_LIST_HEAD(&wl->list);
4396 wl->plat_dev = plat_dev;
4398 for (i = 0; i < NUM_TX_QUEUES; i++)
4399 skb_queue_head_init(&wl->tx_queue[i]);
4401 for (i = 0; i < NUM_TX_QUEUES; i++)
4402 for (j = 0; j < AP_MAX_LINKS; j++)
4403 skb_queue_head_init(&wl->links[j].tx_queue[i]);
4405 skb_queue_head_init(&wl->deferred_rx_queue);
4406 skb_queue_head_init(&wl->deferred_tx_queue);
4408 INIT_DELAYED_WORK(&wl->elp_work, wl1271_elp_work);
4409 INIT_DELAYED_WORK(&wl->pspoll_work, wl1271_pspoll_work);
4410 INIT_WORK(&wl->netstack_work, wl1271_netstack_work);
4411 INIT_WORK(&wl->tx_work, wl1271_tx_work);
4412 INIT_WORK(&wl->recovery_work, wl1271_recovery_work);
4413 INIT_DELAYED_WORK(&wl->scan_complete_work, wl1271_scan_complete_work);
4414 INIT_WORK(&wl->rx_streaming_enable_work,
4415 wl1271_rx_streaming_enable_work);
4416 INIT_WORK(&wl->rx_streaming_disable_work,
4417 wl1271_rx_streaming_disable_work);
4419 wl->freezable_wq = create_freezable_workqueue("wl12xx_wq");
4420 if (!wl->freezable_wq) {
4425 wl->channel = WL1271_DEFAULT_CHANNEL;
4426 wl->beacon_int = WL1271_DEFAULT_BEACON_INT;
4427 wl->default_key = 0;
4429 wl->psm_entry_retry = 0;
4430 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
4431 wl->basic_rate_set = CONF_TX_RATE_MASK_BASIC;
4432 wl->basic_rate = CONF_TX_RATE_MASK_BASIC;
4433 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
4434 wl->band = IEEE80211_BAND_2GHZ;
4437 wl->sg_enabled = true;
4439 wl->bss_type = MAX_BSS_TYPE;
4440 wl->set_bss_type = MAX_BSS_TYPE;
4441 wl->last_tx_hlid = 0;
4443 wl->ap_fw_ps_map = 0;
4445 wl->platform_quirks = 0;
4446 wl->sched_scanning = false;
4447 wl->tx_security_seq = 0;
4448 wl->tx_security_last_seq_lsb = 0;
4449 wl->role_id = WL12XX_INVALID_ROLE_ID;
4450 wl->system_hlid = WL12XX_SYSTEM_HLID;
4451 wl->sta_hlid = WL12XX_INVALID_LINK_ID;
4452 wl->dev_role_id = WL12XX_INVALID_ROLE_ID;
4453 wl->dev_hlid = WL12XX_INVALID_LINK_ID;
4454 wl->session_counter = 0;
4455 wl->ap_bcast_hlid = WL12XX_INVALID_LINK_ID;
4456 wl->ap_global_hlid = WL12XX_INVALID_LINK_ID;
4457 setup_timer(&wl->rx_streaming_timer, wl1271_rx_streaming_timer,
4458 (unsigned long) wl);
4460 init_waitqueue_head(&wl->fwlog_waitq);
4462 /* The system link is always allocated */
4463 __set_bit(WL12XX_SYSTEM_HLID, wl->links_map);
4465 memset(wl->tx_frames_map, 0, sizeof(wl->tx_frames_map));
4466 for (i = 0; i < ACX_TX_DESCRIPTORS; i++)
4467 wl->tx_frames[i] = NULL;
4469 spin_lock_init(&wl->wl_lock);
4471 wl->state = WL1271_STATE_OFF;
4472 mutex_init(&wl->mutex);
4474 /* Apply default driver configuration. */
4475 wl1271_conf_init(wl);
4477 order = get_order(WL1271_AGGR_BUFFER_SIZE);
4478 wl->aggr_buf = (u8 *)__get_free_pages(GFP_KERNEL, order);
4479 if (!wl->aggr_buf) {
4484 wl->dummy_packet = wl12xx_alloc_dummy_packet(wl);
4485 if (!wl->dummy_packet) {
4490 /* Allocate one page for the FW log */
4491 wl->fwlog = (u8 *)get_zeroed_page(GFP_KERNEL);
4494 goto err_dummy_packet;
4497 /* Register platform device */
4498 ret = platform_device_register(wl->plat_dev);
4500 wl1271_error("couldn't register platform device");
4503 dev_set_drvdata(&wl->plat_dev->dev, wl);
4505 /* Create sysfs file to control bt coex state */
4506 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
4508 wl1271_error("failed to create sysfs file bt_coex_state");
4512 /* Create sysfs file to get HW PG version */
4513 ret = device_create_file(&wl->plat_dev->dev, &dev_attr_hw_pg_ver);
4515 wl1271_error("failed to create sysfs file hw_pg_ver");
4516 goto err_bt_coex_state;
4519 /* Create sysfs file for the FW log */
4520 ret = device_create_bin_file(&wl->plat_dev->dev, &fwlog_attr);
4522 wl1271_error("failed to create sysfs file fwlog");
4529 device_remove_file(&wl->plat_dev->dev, &dev_attr_hw_pg_ver);
4532 device_remove_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
4535 platform_device_unregister(wl->plat_dev);
4538 free_page((unsigned long)wl->fwlog);
4541 dev_kfree_skb(wl->dummy_packet);
4544 free_pages((unsigned long)wl->aggr_buf, order);
4547 destroy_workqueue(wl->freezable_wq);
4550 wl1271_debugfs_exit(wl);
4554 ieee80211_free_hw(hw);
4558 return ERR_PTR(ret);
4560 EXPORT_SYMBOL_GPL(wl1271_alloc_hw);
4562 int wl1271_free_hw(struct wl1271 *wl)
4564 /* Unblock any fwlog readers */
4565 mutex_lock(&wl->mutex);
4566 wl->fwlog_size = -1;
4567 wake_up_interruptible_all(&wl->fwlog_waitq);
4568 mutex_unlock(&wl->mutex);
4570 device_remove_bin_file(&wl->plat_dev->dev, &fwlog_attr);
4572 device_remove_file(&wl->plat_dev->dev, &dev_attr_hw_pg_ver);
4574 device_remove_file(&wl->plat_dev->dev, &dev_attr_bt_coex_state);
4575 platform_device_unregister(wl->plat_dev);
4576 free_page((unsigned long)wl->fwlog);
4577 dev_kfree_skb(wl->dummy_packet);
4578 free_pages((unsigned long)wl->aggr_buf,
4579 get_order(WL1271_AGGR_BUFFER_SIZE));
4580 kfree(wl->plat_dev);
4582 wl1271_debugfs_exit(wl);
4589 kfree(wl->fw_status);
4590 kfree(wl->tx_res_if);
4591 destroy_workqueue(wl->freezable_wq);
4593 ieee80211_free_hw(wl->hw);
4597 EXPORT_SYMBOL_GPL(wl1271_free_hw);
4599 u32 wl12xx_debug_level = DEBUG_NONE;
4600 EXPORT_SYMBOL_GPL(wl12xx_debug_level);
4601 module_param_named(debug_level, wl12xx_debug_level, uint, S_IRUSR | S_IWUSR);
4602 MODULE_PARM_DESC(debug_level, "wl12xx debugging level");
4604 module_param_named(fwlog, fwlog_param, charp, 0);
4605 MODULE_PARM_DESC(keymap,
4606 "FW logger options: continuous, ondemand, dbgpins or disable");
4608 MODULE_LICENSE("GPL");
4609 MODULE_AUTHOR("Luciano Coelho <coelho@ti.com>");
4610 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");