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>
35 #include <linux/interrupt.h>
39 #include "wl12xx_80211.h"
53 #define WL1271_BOOT_RETRIES 3
55 static struct conf_drv_settings default_conf = {
58 [CONF_SG_ACL_BT_MASTER_MIN_BR] = 10,
59 [CONF_SG_ACL_BT_MASTER_MAX_BR] = 180,
60 [CONF_SG_ACL_BT_SLAVE_MIN_BR] = 10,
61 [CONF_SG_ACL_BT_SLAVE_MAX_BR] = 180,
62 [CONF_SG_ACL_BT_MASTER_MIN_EDR] = 10,
63 [CONF_SG_ACL_BT_MASTER_MAX_EDR] = 80,
64 [CONF_SG_ACL_BT_SLAVE_MIN_EDR] = 10,
65 [CONF_SG_ACL_BT_SLAVE_MAX_EDR] = 80,
66 [CONF_SG_ACL_WLAN_PS_MASTER_BR] = 8,
67 [CONF_SG_ACL_WLAN_PS_SLAVE_BR] = 8,
68 [CONF_SG_ACL_WLAN_PS_MASTER_EDR] = 20,
69 [CONF_SG_ACL_WLAN_PS_SLAVE_EDR] = 20,
70 [CONF_SG_ACL_WLAN_ACTIVE_MASTER_MIN_BR] = 20,
71 [CONF_SG_ACL_WLAN_ACTIVE_MASTER_MAX_BR] = 35,
72 [CONF_SG_ACL_WLAN_ACTIVE_SLAVE_MIN_BR] = 16,
73 [CONF_SG_ACL_WLAN_ACTIVE_SLAVE_MAX_BR] = 35,
74 [CONF_SG_ACL_WLAN_ACTIVE_MASTER_MIN_EDR] = 32,
75 [CONF_SG_ACL_WLAN_ACTIVE_MASTER_MAX_EDR] = 50,
76 [CONF_SG_ACL_WLAN_ACTIVE_SLAVE_MIN_EDR] = 28,
77 [CONF_SG_ACL_WLAN_ACTIVE_SLAVE_MAX_EDR] = 50,
78 [CONF_SG_ACL_ACTIVE_SCAN_WLAN_BR] = 10,
79 [CONF_SG_ACL_ACTIVE_SCAN_WLAN_EDR] = 20,
80 [CONF_SG_ACL_PASSIVE_SCAN_BT_BR] = 75,
81 [CONF_SG_ACL_PASSIVE_SCAN_WLAN_BR] = 15,
82 [CONF_SG_ACL_PASSIVE_SCAN_BT_EDR] = 27,
83 [CONF_SG_ACL_PASSIVE_SCAN_WLAN_EDR] = 17,
84 /* active scan params */
85 [CONF_SG_AUTO_SCAN_PROBE_REQ] = 170,
86 [CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_HV3] = 50,
87 [CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_A2DP] = 100,
88 /* passive scan params */
89 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_A2DP_BR] = 800,
90 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_A2DP_EDR] = 200,
91 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_HV3] = 200,
92 /* passive scan in dual antenna params */
93 [CONF_SG_CONSECUTIVE_HV3_IN_PASSIVE_SCAN] = 0,
94 [CONF_SG_BCN_HV3_COLLISION_THRESH_IN_PASSIVE_SCAN] = 0,
95 [CONF_SG_TX_RX_PROTECTION_BWIDTH_IN_PASSIVE_SCAN] = 0,
97 [CONF_SG_STA_FORCE_PS_IN_BT_SCO] = 1,
98 [CONF_SG_ANTENNA_CONFIGURATION] = 0,
99 [CONF_SG_BEACON_MISS_PERCENT] = 60,
100 [CONF_SG_DHCP_TIME] = 5000,
101 [CONF_SG_RXT] = 1200,
102 [CONF_SG_TXT] = 1000,
103 [CONF_SG_ADAPTIVE_RXT_TXT] = 1,
104 [CONF_SG_GENERAL_USAGE_BIT_MAP] = 3,
105 [CONF_SG_HV3_MAX_SERVED] = 6,
106 [CONF_SG_PS_POLL_TIMEOUT] = 10,
107 [CONF_SG_UPSD_TIMEOUT] = 10,
108 [CONF_SG_CONSECUTIVE_CTS_THRESHOLD] = 2,
109 [CONF_SG_STA_RX_WINDOW_AFTER_DTIM] = 5,
110 [CONF_SG_STA_CONNECTION_PROTECTION_TIME] = 30,
112 [CONF_AP_BEACON_MISS_TX] = 3,
113 [CONF_AP_RX_WINDOW_AFTER_BEACON] = 10,
114 [CONF_AP_BEACON_WINDOW_INTERVAL] = 2,
115 [CONF_AP_CONNECTION_PROTECTION_TIME] = 0,
116 [CONF_AP_BT_ACL_VAL_BT_SERVE_TIME] = 25,
117 [CONF_AP_BT_ACL_VAL_WL_SERVE_TIME] = 25,
119 .state = CONF_SG_PROTECTIVE,
122 .rx_msdu_life_time = 512000,
123 .packet_detection_threshold = 0,
124 .ps_poll_timeout = 15,
126 .rts_threshold = IEEE80211_MAX_RTS_THRESHOLD,
127 .rx_cca_threshold = 0,
128 .irq_blk_threshold = 0xFFFF,
129 .irq_pkt_threshold = 0,
131 .queue_type = CONF_RX_QUEUE_TYPE_LOW_PRIORITY,
134 .tx_energy_detection = 0,
137 .short_retry_limit = 10,
138 .long_retry_limit = 10,
161 .aifsn = CONF_TX_AIFS_PIFS,
168 .aifsn = CONF_TX_AIFS_PIFS,
172 .max_tx_retries = 100,
173 .ap_aging_period = 300,
177 .queue_id = CONF_TX_AC_BE,
178 .channel_type = CONF_CHANNEL_TYPE_EDCF,
179 .tsid = CONF_TX_AC_BE,
180 .ps_scheme = CONF_PS_SCHEME_LEGACY,
181 .ack_policy = CONF_ACK_POLICY_LEGACY,
185 .queue_id = CONF_TX_AC_BK,
186 .channel_type = CONF_CHANNEL_TYPE_EDCF,
187 .tsid = CONF_TX_AC_BK,
188 .ps_scheme = CONF_PS_SCHEME_LEGACY,
189 .ack_policy = CONF_ACK_POLICY_LEGACY,
193 .queue_id = CONF_TX_AC_VI,
194 .channel_type = CONF_CHANNEL_TYPE_EDCF,
195 .tsid = CONF_TX_AC_VI,
196 .ps_scheme = CONF_PS_SCHEME_LEGACY,
197 .ack_policy = CONF_ACK_POLICY_LEGACY,
201 .queue_id = CONF_TX_AC_VO,
202 .channel_type = CONF_CHANNEL_TYPE_EDCF,
203 .tsid = CONF_TX_AC_VO,
204 .ps_scheme = CONF_PS_SCHEME_LEGACY,
205 .ack_policy = CONF_ACK_POLICY_LEGACY,
209 .frag_threshold = IEEE80211_MAX_FRAG_THRESHOLD,
210 .tx_compl_timeout = 700,
211 .tx_compl_threshold = 4,
212 .basic_rate = CONF_HW_BIT_RATE_1MBPS,
213 .basic_rate_5 = CONF_HW_BIT_RATE_6MBPS,
214 .tmpl_short_retry_limit = 10,
215 .tmpl_long_retry_limit = 10,
218 .wake_up_event = CONF_WAKE_UP_EVENT_DTIM,
219 .listen_interval = 1,
220 .bcn_filt_mode = CONF_BCN_FILT_MODE_ENABLED,
221 .bcn_filt_ie_count = 2,
224 .ie = WLAN_EID_CHANNEL_SWITCH,
225 .rule = CONF_BCN_RULE_PASS_ON_APPEARANCE,
228 .ie = WLAN_EID_HT_INFORMATION,
229 .rule = CONF_BCN_RULE_PASS_ON_CHANGE,
232 .synch_fail_thold = 10,
233 .bss_lose_timeout = 100,
234 .beacon_rx_timeout = 10000,
235 .broadcast_timeout = 20000,
236 .rx_broadcast_in_ps = 1,
237 .ps_poll_threshold = 10,
238 .ps_poll_recovery_period = 700,
239 .bet_enable = CONF_BET_MODE_ENABLE,
240 .bet_max_consecutive = 50,
241 .psm_entry_retries = 8,
242 .psm_exit_retries = 16,
243 .psm_entry_nullfunc_retries = 3,
244 .keep_alive_interval = 55000,
245 .max_listen_interval = 20,
252 .host_clk_settling_time = 5000,
253 .host_fast_wakeup_support = false
257 .avg_weight_rssi_beacon = 20,
258 .avg_weight_rssi_data = 10,
259 .avg_weight_snr_beacon = 20,
260 .avg_weight_snr_data = 10,
263 .min_dwell_time_active = 7500,
264 .max_dwell_time_active = 30000,
265 .min_dwell_time_passive = 100000,
266 .max_dwell_time_passive = 100000,
270 /* sched_scan requires dwell times in TU instead of TU/1000 */
271 .min_dwell_time_active = 30,
272 .max_dwell_time_active = 60,
273 .dwell_time_passive = 100,
274 .dwell_time_dfs = 150,
276 .rssi_threshold = -90,
280 .tx_per_channel_power_compensation_2 = {
281 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
283 .tx_per_channel_power_compensation_5 = {
284 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
285 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
286 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
291 .tx_ba_win_size = 64,
292 .inactivity_timeout = 10000,
293 .tx_ba_tid_bitmap = CONF_TX_BA_ENABLED_TID_BITMAP,
299 .tx_min_block_num = 40,
301 .min_req_tx_blocks = 100,
302 .min_req_rx_blocks = 22,
309 .tx_min_block_num = 40,
311 .min_req_tx_blocks = 45,
312 .min_req_rx_blocks = 22,
318 .n_divider_fref_set_1 = 0xff, /* default */
319 .n_divider_fref_set_2 = 12,
320 .m_divider_fref_set_1 = 148,
321 .m_divider_fref_set_2 = 0xffff, /* default */
322 .coex_pll_stabilization_time = 0xffffffff, /* default */
323 .ldo_stabilization_time = 0xffff, /* default */
324 .fm_disturbed_band_margin = 0xff, /* default */
325 .swallow_clk_diff = 0xff, /* default */
334 .mode = WL12XX_FWLOG_ON_DEMAND,
337 .timestamp = WL12XX_FWLOG_TIMESTAMP_DISABLED,
338 .output = WL12XX_FWLOG_OUTPUT_HOST,
341 .hci_io_ds = HCI_IO_DS_6MA,
343 .rate_retry_score = 32000,
348 .inverse_curiosity_factor = 5,
350 .tx_fail_high_th = 10,
351 .per_alpha_shift = 4,
353 .per_beta1_shift = 10,
354 .per_beta2_shift = 8,
356 .rate_check_down = 12,
357 .rate_retry_policy = {
358 0x00, 0x00, 0x00, 0x00, 0x00,
359 0x00, 0x00, 0x00, 0x00, 0x00,
365 .hangover_period = 20,
367 .early_termination_mode = 1,
378 static char *fwlog_param;
379 static bool bug_on_recovery;
381 static void __wl1271_op_remove_interface(struct wl1271 *wl,
382 struct ieee80211_vif *vif,
383 bool reset_tx_queues);
384 static void wl1271_op_stop(struct ieee80211_hw *hw);
385 static void wl1271_free_ap_keys(struct wl1271 *wl, struct wl12xx_vif *wlvif);
387 static DEFINE_MUTEX(wl_list_mutex);
388 static LIST_HEAD(wl_list);
390 static int wl1271_check_operstate(struct wl1271 *wl, struct wl12xx_vif *wlvif,
391 unsigned char operstate)
395 if (operstate != IF_OPER_UP)
398 if (test_and_set_bit(WLVIF_FLAG_STA_STATE_SENT, &wlvif->flags))
401 ret = wl12xx_cmd_set_peer_state(wl, wlvif->sta.hlid);
405 wl12xx_croc(wl, wlvif->role_id);
407 wl1271_info("Association completed.");
410 static int wl1271_dev_notify(struct notifier_block *me, unsigned long what,
413 struct net_device *dev = arg;
414 struct wireless_dev *wdev;
416 struct ieee80211_hw *hw;
418 struct wl1271 *wl_temp;
419 struct wl12xx_vif *wlvif;
422 /* Check that this notification is for us. */
423 if (what != NETDEV_CHANGE)
426 wdev = dev->ieee80211_ptr;
434 hw = wiphy_priv(wiphy);
439 mutex_lock(&wl_list_mutex);
440 list_for_each_entry(wl, &wl_list, list) {
444 mutex_unlock(&wl_list_mutex);
448 mutex_lock(&wl->mutex);
450 if (wl->state == WL1271_STATE_OFF)
453 wl12xx_for_each_wlvif_sta(wl, wlvif) {
454 if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags))
457 ret = wl1271_ps_elp_wakeup(wl);
461 wl1271_check_operstate(wl, wlvif, dev->operstate);
463 wl1271_ps_elp_sleep(wl);
466 mutex_unlock(&wl->mutex);
471 static int wl1271_reg_notify(struct wiphy *wiphy,
472 struct regulatory_request *request)
474 struct ieee80211_supported_band *band;
475 struct ieee80211_channel *ch;
478 band = wiphy->bands[IEEE80211_BAND_5GHZ];
479 for (i = 0; i < band->n_channels; i++) {
480 ch = &band->channels[i];
481 if (ch->flags & IEEE80211_CHAN_DISABLED)
484 if (ch->flags & IEEE80211_CHAN_RADAR)
485 ch->flags |= IEEE80211_CHAN_NO_IBSS |
486 IEEE80211_CHAN_PASSIVE_SCAN;
493 static int wl1271_set_rx_streaming(struct wl1271 *wl, struct wl12xx_vif *wlvif,
498 /* we should hold wl->mutex */
499 ret = wl1271_acx_ps_rx_streaming(wl, wlvif, enable);
504 set_bit(WLVIF_FLAG_RX_STREAMING_STARTED, &wlvif->flags);
506 clear_bit(WLVIF_FLAG_RX_STREAMING_STARTED, &wlvif->flags);
512 * this function is being called when the rx_streaming interval
513 * has beed changed or rx_streaming should be disabled
515 int wl1271_recalc_rx_streaming(struct wl1271 *wl, struct wl12xx_vif *wlvif)
518 int period = wl->conf.rx_streaming.interval;
520 /* don't reconfigure if rx_streaming is disabled */
521 if (!test_bit(WLVIF_FLAG_RX_STREAMING_STARTED, &wlvif->flags))
524 /* reconfigure/disable according to new streaming_period */
526 test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags) &&
527 (wl->conf.rx_streaming.always ||
528 test_bit(WL1271_FLAG_SOFT_GEMINI, &wl->flags)))
529 ret = wl1271_set_rx_streaming(wl, wlvif, true);
531 ret = wl1271_set_rx_streaming(wl, wlvif, false);
532 /* don't cancel_work_sync since we might deadlock */
533 del_timer_sync(&wlvif->rx_streaming_timer);
539 static void wl1271_rx_streaming_enable_work(struct work_struct *work)
542 struct wl12xx_vif *wlvif = container_of(work, struct wl12xx_vif,
543 rx_streaming_enable_work);
544 struct wl1271 *wl = wlvif->wl;
546 mutex_lock(&wl->mutex);
548 if (test_bit(WLVIF_FLAG_RX_STREAMING_STARTED, &wlvif->flags) ||
549 !test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags) ||
550 (!wl->conf.rx_streaming.always &&
551 !test_bit(WL1271_FLAG_SOFT_GEMINI, &wl->flags)))
554 if (!wl->conf.rx_streaming.interval)
557 ret = wl1271_ps_elp_wakeup(wl);
561 ret = wl1271_set_rx_streaming(wl, wlvif, true);
565 /* stop it after some time of inactivity */
566 mod_timer(&wlvif->rx_streaming_timer,
567 jiffies + msecs_to_jiffies(wl->conf.rx_streaming.duration));
570 wl1271_ps_elp_sleep(wl);
572 mutex_unlock(&wl->mutex);
575 static void wl1271_rx_streaming_disable_work(struct work_struct *work)
578 struct wl12xx_vif *wlvif = container_of(work, struct wl12xx_vif,
579 rx_streaming_disable_work);
580 struct wl1271 *wl = wlvif->wl;
582 mutex_lock(&wl->mutex);
584 if (!test_bit(WLVIF_FLAG_RX_STREAMING_STARTED, &wlvif->flags))
587 ret = wl1271_ps_elp_wakeup(wl);
591 ret = wl1271_set_rx_streaming(wl, wlvif, false);
596 wl1271_ps_elp_sleep(wl);
598 mutex_unlock(&wl->mutex);
601 static void wl1271_rx_streaming_timer(unsigned long data)
603 struct wl12xx_vif *wlvif = (struct wl12xx_vif *)data;
604 struct wl1271 *wl = wlvif->wl;
605 ieee80211_queue_work(wl->hw, &wlvif->rx_streaming_disable_work);
608 static void wl1271_conf_init(struct wl1271 *wl)
612 * This function applies the default configuration to the driver. This
613 * function is invoked upon driver load (spi probe.)
615 * The configuration is stored in a run-time structure in order to
616 * facilitate for run-time adjustment of any of the parameters. Making
617 * changes to the configuration structure will apply the new values on
618 * the next interface up (wl1271_op_start.)
621 /* apply driver default configuration */
622 memcpy(&wl->conf, &default_conf, sizeof(default_conf));
624 /* Adjust settings according to optional module parameters */
626 if (!strcmp(fwlog_param, "continuous")) {
627 wl->conf.fwlog.mode = WL12XX_FWLOG_CONTINUOUS;
628 } else if (!strcmp(fwlog_param, "ondemand")) {
629 wl->conf.fwlog.mode = WL12XX_FWLOG_ON_DEMAND;
630 } else if (!strcmp(fwlog_param, "dbgpins")) {
631 wl->conf.fwlog.mode = WL12XX_FWLOG_CONTINUOUS;
632 wl->conf.fwlog.output = WL12XX_FWLOG_OUTPUT_DBG_PINS;
633 } else if (!strcmp(fwlog_param, "disable")) {
634 wl->conf.fwlog.mem_blocks = 0;
635 wl->conf.fwlog.output = WL12XX_FWLOG_OUTPUT_NONE;
637 wl1271_error("Unknown fwlog parameter %s", fwlog_param);
642 static int wl1271_plt_init(struct wl1271 *wl)
646 if (wl->chip.id == CHIP_ID_1283_PG20)
647 ret = wl128x_cmd_general_parms(wl);
649 ret = wl1271_cmd_general_parms(wl);
653 if (wl->chip.id == CHIP_ID_1283_PG20)
654 ret = wl128x_cmd_radio_parms(wl);
656 ret = wl1271_cmd_radio_parms(wl);
660 if (wl->chip.id != CHIP_ID_1283_PG20) {
661 ret = wl1271_cmd_ext_radio_parms(wl);
668 /* Chip-specific initializations */
669 ret = wl1271_chip_specific_init(wl);
673 ret = wl1271_acx_init_mem_config(wl);
677 ret = wl12xx_acx_mem_cfg(wl);
679 goto out_free_memmap;
681 /* Enable data path */
682 ret = wl1271_cmd_data_path(wl, 1);
684 goto out_free_memmap;
686 /* Configure for CAM power saving (ie. always active) */
687 ret = wl1271_acx_sleep_auth(wl, WL1271_PSM_CAM);
689 goto out_free_memmap;
692 ret = wl1271_acx_pm_config(wl);
694 goto out_free_memmap;
699 kfree(wl->target_mem_map);
700 wl->target_mem_map = NULL;
705 static void wl12xx_irq_ps_regulate_link(struct wl1271 *wl,
706 struct wl12xx_vif *wlvif,
709 bool fw_ps, single_sta;
711 fw_ps = test_bit(hlid, (unsigned long *)&wl->ap_fw_ps_map);
712 single_sta = (wl->active_sta_count == 1);
715 * Wake up from high level PS if the STA is asleep with too little
716 * packets in FW or if the STA is awake.
718 if (!fw_ps || tx_pkts < WL1271_PS_STA_MAX_PACKETS)
719 wl12xx_ps_link_end(wl, wlvif, hlid);
722 * Start high-level PS if the STA is asleep with enough blocks in FW.
723 * Make an exception if this is the only connected station. In this
724 * case FW-memory congestion is not a problem.
726 else if (!single_sta && fw_ps && tx_pkts >= WL1271_PS_STA_MAX_PACKETS)
727 wl12xx_ps_link_start(wl, wlvif, hlid, true);
730 static void wl12xx_irq_update_links_status(struct wl1271 *wl,
731 struct wl12xx_vif *wlvif,
732 struct wl12xx_fw_status *status)
734 struct wl1271_link *lnk;
738 /* TODO: also use link_fast_bitmap here */
740 cur_fw_ps_map = le32_to_cpu(status->link_ps_bitmap);
741 if (wl->ap_fw_ps_map != cur_fw_ps_map) {
742 wl1271_debug(DEBUG_PSM,
743 "link ps prev 0x%x cur 0x%x changed 0x%x",
744 wl->ap_fw_ps_map, cur_fw_ps_map,
745 wl->ap_fw_ps_map ^ cur_fw_ps_map);
747 wl->ap_fw_ps_map = cur_fw_ps_map;
750 for_each_set_bit(hlid, wlvif->ap.sta_hlid_map, WL12XX_MAX_LINKS) {
751 lnk = &wl->links[hlid];
752 cnt = status->tx_lnk_free_pkts[hlid] - lnk->prev_freed_pkts;
754 lnk->prev_freed_pkts = status->tx_lnk_free_pkts[hlid];
755 lnk->allocated_pkts -= cnt;
757 wl12xx_irq_ps_regulate_link(wl, wlvif, hlid,
758 lnk->allocated_pkts);
762 static void wl12xx_fw_status(struct wl1271 *wl,
763 struct wl12xx_fw_status *status)
765 struct wl12xx_vif *wlvif;
767 u32 old_tx_blk_count = wl->tx_blocks_available;
768 int avail, freed_blocks;
771 wl1271_raw_read(wl, FW_STATUS_ADDR, status, sizeof(*status), false);
773 wl1271_debug(DEBUG_IRQ, "intr: 0x%x (fw_rx_counter = %d, "
774 "drv_rx_counter = %d, tx_results_counter = %d)",
776 status->fw_rx_counter,
777 status->drv_rx_counter,
778 status->tx_results_counter);
780 for (i = 0; i < NUM_TX_QUEUES; i++) {
781 /* prevent wrap-around in freed-packets counter */
782 wl->tx_allocated_pkts[i] -=
783 (status->tx_released_pkts[i] -
784 wl->tx_pkts_freed[i]) & 0xff;
786 wl->tx_pkts_freed[i] = status->tx_released_pkts[i];
789 /* prevent wrap-around in total blocks counter */
790 if (likely(wl->tx_blocks_freed <=
791 le32_to_cpu(status->total_released_blks)))
792 freed_blocks = le32_to_cpu(status->total_released_blks) -
795 freed_blocks = 0x100000000LL - wl->tx_blocks_freed +
796 le32_to_cpu(status->total_released_blks);
798 wl->tx_blocks_freed = le32_to_cpu(status->total_released_blks);
800 wl->tx_allocated_blocks -= freed_blocks;
802 avail = le32_to_cpu(status->tx_total) - wl->tx_allocated_blocks;
805 * The FW might change the total number of TX memblocks before
806 * we get a notification about blocks being released. Thus, the
807 * available blocks calculation might yield a temporary result
808 * which is lower than the actual available blocks. Keeping in
809 * mind that only blocks that were allocated can be moved from
810 * TX to RX, tx_blocks_available should never decrease here.
812 wl->tx_blocks_available = max((int)wl->tx_blocks_available,
815 /* if more blocks are available now, tx work can be scheduled */
816 if (wl->tx_blocks_available > old_tx_blk_count)
817 clear_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags);
819 /* for AP update num of allocated TX blocks per link and ps status */
820 wl12xx_for_each_wlvif_ap(wl, wlvif) {
821 wl12xx_irq_update_links_status(wl, wlvif, status);
824 /* update the host-chipset time offset */
826 wl->time_offset = (timespec_to_ns(&ts) >> 10) -
827 (s64)le32_to_cpu(status->fw_localtime);
830 static void wl1271_flush_deferred_work(struct wl1271 *wl)
834 /* Pass all received frames to the network stack */
835 while ((skb = skb_dequeue(&wl->deferred_rx_queue)))
836 ieee80211_rx_ni(wl->hw, skb);
838 /* Return sent skbs to the network stack */
839 while ((skb = skb_dequeue(&wl->deferred_tx_queue)))
840 ieee80211_tx_status_ni(wl->hw, skb);
843 static void wl1271_netstack_work(struct work_struct *work)
846 container_of(work, struct wl1271, netstack_work);
849 wl1271_flush_deferred_work(wl);
850 } while (skb_queue_len(&wl->deferred_rx_queue));
853 #define WL1271_IRQ_MAX_LOOPS 256
855 static irqreturn_t wl1271_irq(int irq, void *cookie)
859 int loopcount = WL1271_IRQ_MAX_LOOPS;
860 struct wl1271 *wl = (struct wl1271 *)cookie;
862 unsigned int defer_count;
865 /* TX might be handled here, avoid redundant work */
866 set_bit(WL1271_FLAG_TX_PENDING, &wl->flags);
867 cancel_work_sync(&wl->tx_work);
870 * In case edge triggered interrupt must be used, we cannot iterate
871 * more than once without introducing race conditions with the hardirq.
873 if (wl->platform_quirks & WL12XX_PLATFORM_QUIRK_EDGE_IRQ)
876 mutex_lock(&wl->mutex);
878 wl1271_debug(DEBUG_IRQ, "IRQ work");
880 if (unlikely(wl->state == WL1271_STATE_OFF))
883 ret = wl1271_ps_elp_wakeup(wl);
887 while (!done && loopcount--) {
889 * In order to avoid a race with the hardirq, clear the flag
890 * before acknowledging the chip. Since the mutex is held,
891 * wl1271_ps_elp_wakeup cannot be called concurrently.
893 clear_bit(WL1271_FLAG_IRQ_RUNNING, &wl->flags);
894 smp_mb__after_clear_bit();
896 wl12xx_fw_status(wl, wl->fw_status);
897 intr = le32_to_cpu(wl->fw_status->intr);
898 intr &= WL1271_INTR_MASK;
904 if (unlikely(intr & WL1271_ACX_INTR_WATCHDOG)) {
905 wl1271_error("watchdog interrupt received! "
906 "starting recovery.");
907 wl12xx_queue_recovery_work(wl);
909 /* restarting the chip. ignore any other interrupt. */
913 if (likely(intr & WL1271_ACX_INTR_DATA)) {
914 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_DATA");
916 wl12xx_rx(wl, wl->fw_status);
918 /* Check if any tx blocks were freed */
919 spin_lock_irqsave(&wl->wl_lock, flags);
920 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags) &&
921 wl1271_tx_total_queue_count(wl) > 0) {
922 spin_unlock_irqrestore(&wl->wl_lock, flags);
924 * In order to avoid starvation of the TX path,
925 * call the work function directly.
927 wl1271_tx_work_locked(wl);
929 spin_unlock_irqrestore(&wl->wl_lock, flags);
932 /* check for tx results */
933 if (wl->fw_status->tx_results_counter !=
934 (wl->tx_results_count & 0xff))
935 wl1271_tx_complete(wl);
937 /* Make sure the deferred queues don't get too long */
938 defer_count = skb_queue_len(&wl->deferred_tx_queue) +
939 skb_queue_len(&wl->deferred_rx_queue);
940 if (defer_count > WL1271_DEFERRED_QUEUE_LIMIT)
941 wl1271_flush_deferred_work(wl);
944 if (intr & WL1271_ACX_INTR_EVENT_A) {
945 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_A");
946 wl1271_event_handle(wl, 0);
949 if (intr & WL1271_ACX_INTR_EVENT_B) {
950 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_B");
951 wl1271_event_handle(wl, 1);
954 if (intr & WL1271_ACX_INTR_INIT_COMPLETE)
955 wl1271_debug(DEBUG_IRQ,
956 "WL1271_ACX_INTR_INIT_COMPLETE");
958 if (intr & WL1271_ACX_INTR_HW_AVAILABLE)
959 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_HW_AVAILABLE");
962 wl1271_ps_elp_sleep(wl);
965 spin_lock_irqsave(&wl->wl_lock, flags);
966 /* In case TX was not handled here, queue TX work */
967 clear_bit(WL1271_FLAG_TX_PENDING, &wl->flags);
968 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags) &&
969 wl1271_tx_total_queue_count(wl) > 0)
970 ieee80211_queue_work(wl->hw, &wl->tx_work);
971 spin_unlock_irqrestore(&wl->wl_lock, flags);
973 mutex_unlock(&wl->mutex);
978 static int wl1271_fetch_firmware(struct wl1271 *wl)
980 const struct firmware *fw;
984 if (wl->chip.id == CHIP_ID_1283_PG20)
985 fw_name = WL128X_FW_NAME;
987 fw_name = WL127X_FW_NAME;
989 wl1271_debug(DEBUG_BOOT, "booting firmware %s", fw_name);
991 ret = request_firmware(&fw, fw_name, wl->dev);
994 wl1271_error("could not get firmware %s: %d", fw_name, ret);
999 wl1271_error("firmware size is not multiple of 32 bits: %zu",
1006 wl->fw_len = fw->size;
1007 wl->fw = vmalloc(wl->fw_len);
1010 wl1271_error("could not allocate memory for the firmware");
1015 memcpy(wl->fw, fw->data, wl->fw_len);
1019 release_firmware(fw);
1024 static int wl1271_fetch_nvs(struct wl1271 *wl)
1026 const struct firmware *fw;
1029 ret = request_firmware(&fw, WL12XX_NVS_NAME, wl->dev);
1032 wl1271_error("could not get nvs file %s: %d", WL12XX_NVS_NAME,
1037 wl->nvs = kmemdup(fw->data, fw->size, GFP_KERNEL);
1040 wl1271_error("could not allocate memory for the nvs file");
1045 wl->nvs_len = fw->size;
1048 release_firmware(fw);
1053 void wl12xx_queue_recovery_work(struct wl1271 *wl)
1055 if (!test_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags))
1056 ieee80211_queue_work(wl->hw, &wl->recovery_work);
1059 size_t wl12xx_copy_fwlog(struct wl1271 *wl, u8 *memblock, size_t maxlen)
1063 /* The FW log is a length-value list, find where the log end */
1064 while (len < maxlen) {
1065 if (memblock[len] == 0)
1067 if (len + memblock[len] + 1 > maxlen)
1069 len += memblock[len] + 1;
1072 /* Make sure we have enough room */
1073 len = min(len, (size_t)(PAGE_SIZE - wl->fwlog_size));
1075 /* Fill the FW log file, consumed by the sysfs fwlog entry */
1076 memcpy(wl->fwlog + wl->fwlog_size, memblock, len);
1077 wl->fwlog_size += len;
1082 static void wl12xx_read_fwlog_panic(struct wl1271 *wl)
1088 if ((wl->quirks & WL12XX_QUIRK_FWLOG_NOT_IMPLEMENTED) ||
1089 (wl->conf.fwlog.mode != WL12XX_FWLOG_ON_DEMAND) ||
1090 (wl->conf.fwlog.mem_blocks == 0))
1093 wl1271_info("Reading FW panic log");
1095 block = kmalloc(WL12XX_HW_BLOCK_SIZE, GFP_KERNEL);
1100 * Make sure the chip is awake and the logger isn't active.
1101 * This might fail if the firmware hanged.
1103 if (!wl1271_ps_elp_wakeup(wl))
1104 wl12xx_cmd_stop_fwlog(wl);
1106 /* Read the first memory block address */
1107 wl12xx_fw_status(wl, wl->fw_status);
1108 first_addr = le32_to_cpu(wl->fw_status->log_start_addr);
1112 /* Traverse the memory blocks linked list */
1115 memset(block, 0, WL12XX_HW_BLOCK_SIZE);
1116 wl1271_read_hwaddr(wl, addr, block, WL12XX_HW_BLOCK_SIZE,
1120 * Memory blocks are linked to one another. The first 4 bytes
1121 * of each memory block hold the hardware address of the next
1122 * one. The last memory block points to the first one.
1124 addr = le32_to_cpup((__le32 *)block);
1125 if (!wl12xx_copy_fwlog(wl, block + sizeof(addr),
1126 WL12XX_HW_BLOCK_SIZE - sizeof(addr)))
1128 } while (addr && (addr != first_addr));
1130 wake_up_interruptible(&wl->fwlog_waitq);
1136 static void wl1271_recovery_work(struct work_struct *work)
1139 container_of(work, struct wl1271, recovery_work);
1140 struct wl12xx_vif *wlvif;
1141 struct ieee80211_vif *vif;
1143 mutex_lock(&wl->mutex);
1145 if (wl->state != WL1271_STATE_ON)
1148 /* Avoid a recursive recovery */
1149 set_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags);
1151 wl12xx_read_fwlog_panic(wl);
1153 wl1271_info("Hardware recovery in progress. FW ver: %s pc: 0x%x",
1154 wl->chip.fw_ver_str, wl1271_read32(wl, SCR_PAD4));
1156 BUG_ON(bug_on_recovery);
1159 * Advance security sequence number to overcome potential progress
1160 * in the firmware during recovery. This doens't hurt if the network is
1163 wl12xx_for_each_wlvif(wl, wlvif) {
1164 if (test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags) ||
1165 test_bit(WLVIF_FLAG_AP_STARTED, &wlvif->flags))
1166 wlvif->tx_security_seq +=
1167 WL1271_TX_SQN_POST_RECOVERY_PADDING;
1170 /* Prevent spurious TX during FW restart */
1171 ieee80211_stop_queues(wl->hw);
1173 if (wl->sched_scanning) {
1174 ieee80211_sched_scan_stopped(wl->hw);
1175 wl->sched_scanning = false;
1178 /* reboot the chipset */
1179 while (!list_empty(&wl->wlvif_list)) {
1180 wlvif = list_first_entry(&wl->wlvif_list,
1181 struct wl12xx_vif, list);
1182 vif = wl12xx_wlvif_to_vif(wlvif);
1183 __wl1271_op_remove_interface(wl, vif, false);
1185 mutex_unlock(&wl->mutex);
1186 wl1271_op_stop(wl->hw);
1188 clear_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags);
1190 ieee80211_restart_hw(wl->hw);
1193 * Its safe to enable TX now - the queues are stopped after a request
1194 * to restart the HW.
1196 ieee80211_wake_queues(wl->hw);
1199 mutex_unlock(&wl->mutex);
1202 static void wl1271_fw_wakeup(struct wl1271 *wl)
1206 elp_reg = ELPCTRL_WAKE_UP;
1207 wl1271_raw_write32(wl, HW_ACCESS_ELP_CTRL_REG_ADDR, elp_reg);
1210 static int wl1271_setup(struct wl1271 *wl)
1212 wl->fw_status = kmalloc(sizeof(*wl->fw_status), GFP_KERNEL);
1216 wl->tx_res_if = kmalloc(sizeof(*wl->tx_res_if), GFP_KERNEL);
1217 if (!wl->tx_res_if) {
1218 kfree(wl->fw_status);
1225 static int wl1271_chip_wakeup(struct wl1271 *wl)
1227 struct wl1271_partition_set partition;
1230 msleep(WL1271_PRE_POWER_ON_SLEEP);
1231 ret = wl1271_power_on(wl);
1234 msleep(WL1271_POWER_ON_SLEEP);
1235 wl1271_io_reset(wl);
1238 /* We don't need a real memory partition here, because we only want
1239 * to use the registers at this point. */
1240 memset(&partition, 0, sizeof(partition));
1241 partition.reg.start = REGISTERS_BASE;
1242 partition.reg.size = REGISTERS_DOWN_SIZE;
1243 wl1271_set_partition(wl, &partition);
1245 /* ELP module wake up */
1246 wl1271_fw_wakeup(wl);
1248 /* whal_FwCtrl_BootSm() */
1250 /* 0. read chip id from CHIP_ID */
1251 wl->chip.id = wl1271_read32(wl, CHIP_ID_B);
1254 * For wl127x based devices we could use the default block
1255 * size (512 bytes), but due to a bug in the sdio driver, we
1256 * need to set it explicitly after the chip is powered on. To
1257 * simplify the code and since the performance impact is
1258 * negligible, we use the same block size for all different
1261 if (!wl1271_set_block_size(wl))
1262 wl->quirks |= WL12XX_QUIRK_NO_BLOCKSIZE_ALIGNMENT;
1264 switch (wl->chip.id) {
1265 case CHIP_ID_1271_PG10:
1266 wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
1269 ret = wl1271_setup(wl);
1272 wl->quirks |= WL12XX_QUIRK_NO_BLOCKSIZE_ALIGNMENT;
1275 case CHIP_ID_1271_PG20:
1276 wl1271_debug(DEBUG_BOOT, "chip id 0x%x (1271 PG20)",
1279 ret = wl1271_setup(wl);
1282 wl->quirks |= WL12XX_QUIRK_NO_BLOCKSIZE_ALIGNMENT;
1285 case CHIP_ID_1283_PG20:
1286 wl1271_debug(DEBUG_BOOT, "chip id 0x%x (1283 PG20)",
1289 ret = wl1271_setup(wl);
1293 case CHIP_ID_1283_PG10:
1295 wl1271_warning("unsupported chip id: 0x%x", wl->chip.id);
1300 if (wl->fw == NULL) {
1301 ret = wl1271_fetch_firmware(wl);
1306 /* No NVS from netlink, try to get it from the filesystem */
1307 if (wl->nvs == NULL) {
1308 ret = wl1271_fetch_nvs(wl);
1317 int wl1271_plt_start(struct wl1271 *wl)
1319 int retries = WL1271_BOOT_RETRIES;
1320 struct wiphy *wiphy = wl->hw->wiphy;
1323 mutex_lock(&wl->mutex);
1325 wl1271_notice("power up");
1327 if (wl->state != WL1271_STATE_OFF) {
1328 wl1271_error("cannot go into PLT state because not "
1329 "in off state: %d", wl->state);
1336 ret = wl1271_chip_wakeup(wl);
1340 ret = wl1271_boot(wl);
1344 ret = wl1271_plt_init(wl);
1348 wl->state = WL1271_STATE_PLT;
1349 wl1271_notice("firmware booted in PLT mode (%s)",
1350 wl->chip.fw_ver_str);
1352 /* update hw/fw version info in wiphy struct */
1353 wiphy->hw_version = wl->chip.id;
1354 strncpy(wiphy->fw_version, wl->chip.fw_ver_str,
1355 sizeof(wiphy->fw_version));
1360 mutex_unlock(&wl->mutex);
1361 /* Unlocking the mutex in the middle of handling is
1362 inherently unsafe. In this case we deem it safe to do,
1363 because we need to let any possibly pending IRQ out of
1364 the system (and while we are WL1271_STATE_OFF the IRQ
1365 work function will not do anything.) Also, any other
1366 possible concurrent operations will fail due to the
1367 current state, hence the wl1271 struct should be safe. */
1368 wl1271_disable_interrupts(wl);
1369 wl1271_flush_deferred_work(wl);
1370 cancel_work_sync(&wl->netstack_work);
1371 mutex_lock(&wl->mutex);
1373 wl1271_power_off(wl);
1376 wl1271_error("firmware boot in PLT mode failed despite %d retries",
1377 WL1271_BOOT_RETRIES);
1379 mutex_unlock(&wl->mutex);
1384 static int __wl1271_plt_stop(struct wl1271 *wl)
1388 wl1271_notice("power down");
1390 if (wl->state != WL1271_STATE_PLT) {
1391 wl1271_error("cannot power down because not in PLT "
1392 "state: %d", wl->state);
1397 wl1271_power_off(wl);
1399 wl->state = WL1271_STATE_OFF;
1402 mutex_unlock(&wl->mutex);
1403 wl1271_disable_interrupts(wl);
1404 wl1271_flush_deferred_work(wl);
1405 cancel_work_sync(&wl->netstack_work);
1406 cancel_work_sync(&wl->recovery_work);
1407 mutex_lock(&wl->mutex);
1412 int wl1271_plt_stop(struct wl1271 *wl)
1416 mutex_lock(&wl->mutex);
1417 ret = __wl1271_plt_stop(wl);
1418 mutex_unlock(&wl->mutex);
1422 static void wl1271_op_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
1424 struct wl1271 *wl = hw->priv;
1425 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
1426 struct ieee80211_vif *vif = info->control.vif;
1427 struct wl12xx_vif *wlvif = NULL;
1428 unsigned long flags;
1433 wlvif = wl12xx_vif_to_data(vif);
1435 mapping = skb_get_queue_mapping(skb);
1436 q = wl1271_tx_get_queue(mapping);
1438 hlid = wl12xx_tx_get_hlid(wl, wlvif, skb);
1440 spin_lock_irqsave(&wl->wl_lock, flags);
1442 /* queue the packet */
1443 if (hlid == WL12XX_INVALID_LINK_ID ||
1444 (wlvif && !test_bit(hlid, wlvif->links_map))) {
1445 wl1271_debug(DEBUG_TX, "DROP skb hlid %d q %d", hlid, q);
1446 ieee80211_free_txskb(hw, skb);
1450 wl1271_debug(DEBUG_TX, "queue skb hlid %d q %d", hlid, q);
1451 skb_queue_tail(&wl->links[hlid].tx_queue[q], skb);
1453 wl->tx_queue_count[q]++;
1456 * The workqueue is slow to process the tx_queue and we need stop
1457 * the queue here, otherwise the queue will get too long.
1459 if (wl->tx_queue_count[q] >= WL1271_TX_QUEUE_HIGH_WATERMARK) {
1460 wl1271_debug(DEBUG_TX, "op_tx: stopping queues for q %d", q);
1461 ieee80211_stop_queue(wl->hw, mapping);
1462 set_bit(q, &wl->stopped_queues_map);
1466 * The chip specific setup must run before the first TX packet -
1467 * before that, the tx_work will not be initialized!
1470 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags) &&
1471 !test_bit(WL1271_FLAG_TX_PENDING, &wl->flags))
1472 ieee80211_queue_work(wl->hw, &wl->tx_work);
1475 spin_unlock_irqrestore(&wl->wl_lock, flags);
1478 int wl1271_tx_dummy_packet(struct wl1271 *wl)
1480 unsigned long flags;
1483 /* no need to queue a new dummy packet if one is already pending */
1484 if (test_bit(WL1271_FLAG_DUMMY_PACKET_PENDING, &wl->flags))
1487 q = wl1271_tx_get_queue(skb_get_queue_mapping(wl->dummy_packet));
1489 spin_lock_irqsave(&wl->wl_lock, flags);
1490 set_bit(WL1271_FLAG_DUMMY_PACKET_PENDING, &wl->flags);
1491 wl->tx_queue_count[q]++;
1492 spin_unlock_irqrestore(&wl->wl_lock, flags);
1494 /* The FW is low on RX memory blocks, so send the dummy packet asap */
1495 if (!test_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags))
1496 wl1271_tx_work_locked(wl);
1499 * If the FW TX is busy, TX work will be scheduled by the threaded
1500 * interrupt handler function
1506 * The size of the dummy packet should be at least 1400 bytes. However, in
1507 * order to minimize the number of bus transactions, aligning it to 512 bytes
1508 * boundaries could be beneficial, performance wise
1510 #define TOTAL_TX_DUMMY_PACKET_SIZE (ALIGN(1400, 512))
1512 static struct sk_buff *wl12xx_alloc_dummy_packet(struct wl1271 *wl)
1514 struct sk_buff *skb;
1515 struct ieee80211_hdr_3addr *hdr;
1516 unsigned int dummy_packet_size;
1518 dummy_packet_size = TOTAL_TX_DUMMY_PACKET_SIZE -
1519 sizeof(struct wl1271_tx_hw_descr) - sizeof(*hdr);
1521 skb = dev_alloc_skb(TOTAL_TX_DUMMY_PACKET_SIZE);
1523 wl1271_warning("Failed to allocate a dummy packet skb");
1527 skb_reserve(skb, sizeof(struct wl1271_tx_hw_descr));
1529 hdr = (struct ieee80211_hdr_3addr *) skb_put(skb, sizeof(*hdr));
1530 memset(hdr, 0, sizeof(*hdr));
1531 hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_DATA |
1532 IEEE80211_STYPE_NULLFUNC |
1533 IEEE80211_FCTL_TODS);
1535 memset(skb_put(skb, dummy_packet_size), 0, dummy_packet_size);
1537 /* Dummy packets require the TID to be management */
1538 skb->priority = WL1271_TID_MGMT;
1540 /* Initialize all fields that might be used */
1541 skb_set_queue_mapping(skb, 0);
1542 memset(IEEE80211_SKB_CB(skb), 0, sizeof(struct ieee80211_tx_info));
1548 static struct notifier_block wl1271_dev_notifier = {
1549 .notifier_call = wl1271_dev_notify,
1553 static int wl1271_configure_suspend_sta(struct wl1271 *wl,
1554 struct wl12xx_vif *wlvif)
1558 mutex_lock(&wl->mutex);
1560 if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags))
1563 ret = wl1271_ps_elp_wakeup(wl);
1567 /* enter psm if needed*/
1568 if (!test_bit(WLVIF_FLAG_PSM, &wlvif->flags)) {
1569 DECLARE_COMPLETION_ONSTACK(compl);
1571 wlvif->ps_compl = &compl;
1572 ret = wl1271_ps_set_mode(wl, wlvif, STATION_POWER_SAVE_MODE,
1573 wlvif->basic_rate, true);
1577 /* we must unlock here so we will be able to get events */
1578 wl1271_ps_elp_sleep(wl);
1579 mutex_unlock(&wl->mutex);
1581 ret = wait_for_completion_timeout(
1582 &compl, msecs_to_jiffies(WL1271_PS_COMPLETE_TIMEOUT));
1584 mutex_lock(&wl->mutex);
1586 wl1271_warning("couldn't enter ps mode!");
1591 ret = wl1271_ps_elp_wakeup(wl);
1596 wl1271_ps_elp_sleep(wl);
1598 wlvif->ps_compl = NULL;
1600 mutex_unlock(&wl->mutex);
1605 static int wl1271_configure_suspend_ap(struct wl1271 *wl,
1606 struct wl12xx_vif *wlvif)
1610 mutex_lock(&wl->mutex);
1612 if (!test_bit(WLVIF_FLAG_AP_STARTED, &wlvif->flags))
1615 ret = wl1271_ps_elp_wakeup(wl);
1619 ret = wl1271_acx_beacon_filter_opt(wl, wlvif, true);
1621 wl1271_ps_elp_sleep(wl);
1623 mutex_unlock(&wl->mutex);
1628 static int wl1271_configure_suspend(struct wl1271 *wl,
1629 struct wl12xx_vif *wlvif)
1631 if (wlvif->bss_type == BSS_TYPE_STA_BSS)
1632 return wl1271_configure_suspend_sta(wl, wlvif);
1633 if (wlvif->bss_type == BSS_TYPE_AP_BSS)
1634 return wl1271_configure_suspend_ap(wl, wlvif);
1638 static void wl1271_configure_resume(struct wl1271 *wl,
1639 struct wl12xx_vif *wlvif)
1642 bool is_sta = wlvif->bss_type == BSS_TYPE_STA_BSS;
1643 bool is_ap = wlvif->bss_type == BSS_TYPE_AP_BSS;
1645 if (!is_sta && !is_ap)
1648 mutex_lock(&wl->mutex);
1649 ret = wl1271_ps_elp_wakeup(wl);
1654 /* exit psm if it wasn't configured */
1655 if (!test_bit(WLVIF_FLAG_PSM_REQUESTED, &wlvif->flags))
1656 wl1271_ps_set_mode(wl, wlvif, STATION_ACTIVE_MODE,
1657 wlvif->basic_rate, true);
1659 wl1271_acx_beacon_filter_opt(wl, wlvif, false);
1662 wl1271_ps_elp_sleep(wl);
1664 mutex_unlock(&wl->mutex);
1667 static int wl1271_op_suspend(struct ieee80211_hw *hw,
1668 struct cfg80211_wowlan *wow)
1670 struct wl1271 *wl = hw->priv;
1671 struct wl12xx_vif *wlvif;
1674 wl1271_debug(DEBUG_MAC80211, "mac80211 suspend wow=%d", !!wow);
1675 WARN_ON(!wow || !wow->any);
1677 wl->wow_enabled = true;
1678 wl12xx_for_each_wlvif(wl, wlvif) {
1679 ret = wl1271_configure_suspend(wl, wlvif);
1681 wl1271_warning("couldn't prepare device to suspend");
1685 /* flush any remaining work */
1686 wl1271_debug(DEBUG_MAC80211, "flushing remaining works");
1689 * disable and re-enable interrupts in order to flush
1692 wl1271_disable_interrupts(wl);
1695 * set suspended flag to avoid triggering a new threaded_irq
1696 * work. no need for spinlock as interrupts are disabled.
1698 set_bit(WL1271_FLAG_SUSPENDED, &wl->flags);
1700 wl1271_enable_interrupts(wl);
1701 flush_work(&wl->tx_work);
1702 wl12xx_for_each_wlvif(wl, wlvif) {
1703 flush_delayed_work(&wlvif->pspoll_work);
1705 flush_delayed_work(&wl->elp_work);
1710 static int wl1271_op_resume(struct ieee80211_hw *hw)
1712 struct wl1271 *wl = hw->priv;
1713 struct wl12xx_vif *wlvif;
1714 unsigned long flags;
1715 bool run_irq_work = false;
1717 wl1271_debug(DEBUG_MAC80211, "mac80211 resume wow=%d",
1719 WARN_ON(!wl->wow_enabled);
1722 * re-enable irq_work enqueuing, and call irq_work directly if
1723 * there is a pending work.
1725 spin_lock_irqsave(&wl->wl_lock, flags);
1726 clear_bit(WL1271_FLAG_SUSPENDED, &wl->flags);
1727 if (test_and_clear_bit(WL1271_FLAG_PENDING_WORK, &wl->flags))
1728 run_irq_work = true;
1729 spin_unlock_irqrestore(&wl->wl_lock, flags);
1732 wl1271_debug(DEBUG_MAC80211,
1733 "run postponed irq_work directly");
1735 wl1271_enable_interrupts(wl);
1737 wl12xx_for_each_wlvif(wl, wlvif) {
1738 wl1271_configure_resume(wl, wlvif);
1740 wl->wow_enabled = false;
1746 static int wl1271_op_start(struct ieee80211_hw *hw)
1748 wl1271_debug(DEBUG_MAC80211, "mac80211 start");
1751 * We have to delay the booting of the hardware because
1752 * we need to know the local MAC address before downloading and
1753 * initializing the firmware. The MAC address cannot be changed
1754 * after boot, and without the proper MAC address, the firmware
1755 * will not function properly.
1757 * The MAC address is first known when the corresponding interface
1758 * is added. That is where we will initialize the hardware.
1764 static void wl1271_op_stop(struct ieee80211_hw *hw)
1766 struct wl1271 *wl = hw->priv;
1769 wl1271_debug(DEBUG_MAC80211, "mac80211 stop");
1771 mutex_lock(&wl->mutex);
1772 if (wl->state == WL1271_STATE_OFF) {
1773 mutex_unlock(&wl->mutex);
1777 * this must be before the cancel_work calls below, so that the work
1778 * functions don't perform further work.
1780 wl->state = WL1271_STATE_OFF;
1781 mutex_unlock(&wl->mutex);
1783 mutex_lock(&wl_list_mutex);
1784 list_del(&wl->list);
1785 mutex_unlock(&wl_list_mutex);
1787 wl1271_disable_interrupts(wl);
1788 wl1271_flush_deferred_work(wl);
1789 cancel_delayed_work_sync(&wl->scan_complete_work);
1790 cancel_work_sync(&wl->netstack_work);
1791 cancel_work_sync(&wl->tx_work);
1792 cancel_delayed_work_sync(&wl->elp_work);
1794 /* let's notify MAC80211 about the remaining pending TX frames */
1795 wl12xx_tx_reset(wl, true);
1796 mutex_lock(&wl->mutex);
1798 wl1271_power_off(wl);
1800 wl->band = IEEE80211_BAND_2GHZ;
1803 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
1804 wl->tx_blocks_available = 0;
1805 wl->tx_allocated_blocks = 0;
1806 wl->tx_results_count = 0;
1807 wl->tx_packets_count = 0;
1808 wl->time_offset = 0;
1809 wl->tx_spare_blocks = TX_HW_BLOCK_SPARE_DEFAULT;
1810 wl->ap_fw_ps_map = 0;
1812 wl->sched_scanning = false;
1813 memset(wl->roles_map, 0, sizeof(wl->roles_map));
1814 memset(wl->links_map, 0, sizeof(wl->links_map));
1815 memset(wl->roc_map, 0, sizeof(wl->roc_map));
1816 wl->active_sta_count = 0;
1818 /* The system link is always allocated */
1819 __set_bit(WL12XX_SYSTEM_HLID, wl->links_map);
1822 * this is performed after the cancel_work calls and the associated
1823 * mutex_lock, so that wl1271_op_add_interface does not accidentally
1824 * get executed before all these vars have been reset.
1828 wl->tx_blocks_freed = 0;
1830 for (i = 0; i < NUM_TX_QUEUES; i++) {
1831 wl->tx_pkts_freed[i] = 0;
1832 wl->tx_allocated_pkts[i] = 0;
1835 wl1271_debugfs_reset(wl);
1837 kfree(wl->fw_status);
1838 wl->fw_status = NULL;
1839 kfree(wl->tx_res_if);
1840 wl->tx_res_if = NULL;
1841 kfree(wl->target_mem_map);
1842 wl->target_mem_map = NULL;
1844 mutex_unlock(&wl->mutex);
1847 static int wl12xx_allocate_rate_policy(struct wl1271 *wl, u8 *idx)
1849 u8 policy = find_first_zero_bit(wl->rate_policies_map,
1850 WL12XX_MAX_RATE_POLICIES);
1851 if (policy >= WL12XX_MAX_RATE_POLICIES)
1854 __set_bit(policy, wl->rate_policies_map);
1859 static void wl12xx_free_rate_policy(struct wl1271 *wl, u8 *idx)
1861 if (WARN_ON(*idx >= WL12XX_MAX_RATE_POLICIES))
1864 __clear_bit(*idx, wl->rate_policies_map);
1865 *idx = WL12XX_MAX_RATE_POLICIES;
1868 static u8 wl12xx_get_role_type(struct wl1271 *wl, struct wl12xx_vif *wlvif)
1870 switch (wlvif->bss_type) {
1871 case BSS_TYPE_AP_BSS:
1873 return WL1271_ROLE_P2P_GO;
1875 return WL1271_ROLE_AP;
1877 case BSS_TYPE_STA_BSS:
1879 return WL1271_ROLE_P2P_CL;
1881 return WL1271_ROLE_STA;
1884 return WL1271_ROLE_IBSS;
1887 wl1271_error("invalid bss_type: %d", wlvif->bss_type);
1889 return WL12XX_INVALID_ROLE_TYPE;
1892 static int wl12xx_init_vif_data(struct wl1271 *wl, struct ieee80211_vif *vif)
1894 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
1897 /* clear everything but the persistent data */
1898 memset(wlvif, 0, offsetof(struct wl12xx_vif, persistent));
1900 switch (ieee80211_vif_type_p2p(vif)) {
1901 case NL80211_IFTYPE_P2P_CLIENT:
1904 case NL80211_IFTYPE_STATION:
1905 wlvif->bss_type = BSS_TYPE_STA_BSS;
1907 case NL80211_IFTYPE_ADHOC:
1908 wlvif->bss_type = BSS_TYPE_IBSS;
1910 case NL80211_IFTYPE_P2P_GO:
1913 case NL80211_IFTYPE_AP:
1914 wlvif->bss_type = BSS_TYPE_AP_BSS;
1917 wlvif->bss_type = MAX_BSS_TYPE;
1921 wlvif->role_id = WL12XX_INVALID_ROLE_ID;
1922 wlvif->dev_role_id = WL12XX_INVALID_ROLE_ID;
1923 wlvif->dev_hlid = WL12XX_INVALID_LINK_ID;
1925 if (wlvif->bss_type == BSS_TYPE_STA_BSS ||
1926 wlvif->bss_type == BSS_TYPE_IBSS) {
1927 /* init sta/ibss data */
1928 wlvif->sta.hlid = WL12XX_INVALID_LINK_ID;
1929 wl12xx_allocate_rate_policy(wl, &wlvif->sta.basic_rate_idx);
1930 wl12xx_allocate_rate_policy(wl, &wlvif->sta.ap_rate_idx);
1931 wl12xx_allocate_rate_policy(wl, &wlvif->sta.p2p_rate_idx);
1934 wlvif->ap.bcast_hlid = WL12XX_INVALID_LINK_ID;
1935 wlvif->ap.global_hlid = WL12XX_INVALID_LINK_ID;
1936 wl12xx_allocate_rate_policy(wl, &wlvif->ap.mgmt_rate_idx);
1937 wl12xx_allocate_rate_policy(wl, &wlvif->ap.bcast_rate_idx);
1938 for (i = 0; i < CONF_TX_MAX_AC_COUNT; i++)
1939 wl12xx_allocate_rate_policy(wl,
1940 &wlvif->ap.ucast_rate_idx[i]);
1943 wlvif->bitrate_masks[IEEE80211_BAND_2GHZ] = wl->conf.tx.basic_rate;
1944 wlvif->bitrate_masks[IEEE80211_BAND_5GHZ] = wl->conf.tx.basic_rate_5;
1945 wlvif->basic_rate_set = CONF_TX_RATE_MASK_BASIC;
1946 wlvif->basic_rate = CONF_TX_RATE_MASK_BASIC;
1947 wlvif->rate_set = CONF_TX_RATE_MASK_BASIC;
1948 wlvif->beacon_int = WL1271_DEFAULT_BEACON_INT;
1951 * mac80211 configures some values globally, while we treat them
1952 * per-interface. thus, on init, we have to copy them from wl
1954 wlvif->band = wl->band;
1955 wlvif->channel = wl->channel;
1956 wlvif->power_level = wl->power_level;
1958 INIT_WORK(&wlvif->rx_streaming_enable_work,
1959 wl1271_rx_streaming_enable_work);
1960 INIT_WORK(&wlvif->rx_streaming_disable_work,
1961 wl1271_rx_streaming_disable_work);
1962 INIT_DELAYED_WORK(&wlvif->pspoll_work, wl1271_pspoll_work);
1963 INIT_LIST_HEAD(&wlvif->list);
1965 setup_timer(&wlvif->rx_streaming_timer, wl1271_rx_streaming_timer,
1966 (unsigned long) wlvif);
1970 static bool wl12xx_init_fw(struct wl1271 *wl)
1972 int retries = WL1271_BOOT_RETRIES;
1973 bool booted = false;
1974 struct wiphy *wiphy = wl->hw->wiphy;
1979 ret = wl1271_chip_wakeup(wl);
1983 ret = wl1271_boot(wl);
1987 ret = wl1271_hw_init(wl);
1995 mutex_unlock(&wl->mutex);
1996 /* Unlocking the mutex in the middle of handling is
1997 inherently unsafe. In this case we deem it safe to do,
1998 because we need to let any possibly pending IRQ out of
1999 the system (and while we are WL1271_STATE_OFF the IRQ
2000 work function will not do anything.) Also, any other
2001 possible concurrent operations will fail due to the
2002 current state, hence the wl1271 struct should be safe. */
2003 wl1271_disable_interrupts(wl);
2004 wl1271_flush_deferred_work(wl);
2005 cancel_work_sync(&wl->netstack_work);
2006 mutex_lock(&wl->mutex);
2008 wl1271_power_off(wl);
2012 wl1271_error("firmware boot failed despite %d retries",
2013 WL1271_BOOT_RETRIES);
2017 wl1271_info("firmware booted (%s)", wl->chip.fw_ver_str);
2019 /* update hw/fw version info in wiphy struct */
2020 wiphy->hw_version = wl->chip.id;
2021 strncpy(wiphy->fw_version, wl->chip.fw_ver_str,
2022 sizeof(wiphy->fw_version));
2025 * Now we know if 11a is supported (info from the NVS), so disable
2026 * 11a channels if not supported
2028 if (!wl->enable_11a)
2029 wiphy->bands[IEEE80211_BAND_5GHZ]->n_channels = 0;
2031 wl1271_debug(DEBUG_MAC80211, "11a is %ssupported",
2032 wl->enable_11a ? "" : "not ");
2034 wl->state = WL1271_STATE_ON;
2039 static int wl1271_op_add_interface(struct ieee80211_hw *hw,
2040 struct ieee80211_vif *vif)
2042 struct wl1271 *wl = hw->priv;
2043 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
2046 bool booted = false;
2048 wl1271_debug(DEBUG_MAC80211, "mac80211 add interface type %d mac %pM",
2049 ieee80211_vif_type_p2p(vif), vif->addr);
2051 mutex_lock(&wl->mutex);
2052 ret = wl1271_ps_elp_wakeup(wl);
2057 wl1271_debug(DEBUG_MAC80211,
2058 "multiple vifs are not supported yet");
2064 * in some very corner case HW recovery scenarios its possible to
2065 * get here before __wl1271_op_remove_interface is complete, so
2066 * opt out if that is the case.
2068 if (test_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags) ||
2069 test_bit(WLVIF_FLAG_INITIALIZED, &wlvif->flags)) {
2074 ret = wl12xx_init_vif_data(wl, vif);
2079 role_type = wl12xx_get_role_type(wl, wlvif);
2080 if (role_type == WL12XX_INVALID_ROLE_TYPE) {
2086 * TODO: after the nvs issue will be solved, move this block
2087 * to start(), and make sure here the driver is ON.
2089 if (wl->state == WL1271_STATE_OFF) {
2091 * we still need this in order to configure the fw
2092 * while uploading the nvs
2094 memcpy(wl->mac_addr, vif->addr, ETH_ALEN);
2096 booted = wl12xx_init_fw(wl);
2103 if (wlvif->bss_type == BSS_TYPE_STA_BSS ||
2104 wlvif->bss_type == BSS_TYPE_IBSS) {
2106 * The device role is a special role used for
2107 * rx and tx frames prior to association (as
2108 * the STA role can get packets only from
2109 * its associated bssid)
2111 ret = wl12xx_cmd_role_enable(wl, vif->addr,
2113 &wlvif->dev_role_id);
2118 ret = wl12xx_cmd_role_enable(wl, vif->addr,
2119 role_type, &wlvif->role_id);
2123 ret = wl1271_init_vif_specific(wl, vif);
2128 list_add(&wlvif->list, &wl->wlvif_list);
2129 set_bit(WLVIF_FLAG_INITIALIZED, &wlvif->flags);
2131 if (wlvif->bss_type == BSS_TYPE_AP_BSS)
2136 wl1271_ps_elp_sleep(wl);
2138 mutex_unlock(&wl->mutex);
2140 mutex_lock(&wl_list_mutex);
2142 list_add(&wl->list, &wl_list);
2143 mutex_unlock(&wl_list_mutex);
2148 static void __wl1271_op_remove_interface(struct wl1271 *wl,
2149 struct ieee80211_vif *vif,
2150 bool reset_tx_queues)
2152 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
2155 wl1271_debug(DEBUG_MAC80211, "mac80211 remove interface");
2157 if (!test_and_clear_bit(WLVIF_FLAG_INITIALIZED, &wlvif->flags))
2162 /* because of hardware recovery, we may get here twice */
2163 if (wl->state != WL1271_STATE_ON)
2166 wl1271_info("down");
2168 /* enable dyn ps just in case (if left on due to fw crash etc) */
2169 if (wlvif->bss_type == BSS_TYPE_STA_BSS)
2170 ieee80211_enable_dyn_ps(vif);
2172 if (wl->scan.state != WL1271_SCAN_STATE_IDLE &&
2173 wl->scan_vif == vif) {
2174 wl->scan.state = WL1271_SCAN_STATE_IDLE;
2175 memset(wl->scan.scanned_ch, 0, sizeof(wl->scan.scanned_ch));
2176 wl->scan_vif = NULL;
2177 wl->scan.req = NULL;
2178 ieee80211_scan_completed(wl->hw, true);
2181 if (!test_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags)) {
2182 /* disable active roles */
2183 ret = wl1271_ps_elp_wakeup(wl);
2187 if (wlvif->bss_type == BSS_TYPE_STA_BSS) {
2188 ret = wl12xx_cmd_role_disable(wl, &wlvif->dev_role_id);
2193 ret = wl12xx_cmd_role_disable(wl, &wlvif->role_id);
2197 wl1271_ps_elp_sleep(wl);
2200 /* clear all hlids (except system_hlid) */
2201 wlvif->dev_hlid = WL12XX_INVALID_LINK_ID;
2203 if (wlvif->bss_type == BSS_TYPE_STA_BSS ||
2204 wlvif->bss_type == BSS_TYPE_IBSS) {
2205 wlvif->sta.hlid = WL12XX_INVALID_LINK_ID;
2206 wl12xx_free_rate_policy(wl, &wlvif->sta.basic_rate_idx);
2207 wl12xx_free_rate_policy(wl, &wlvif->sta.ap_rate_idx);
2208 wl12xx_free_rate_policy(wl, &wlvif->sta.p2p_rate_idx);
2210 wlvif->ap.bcast_hlid = WL12XX_INVALID_LINK_ID;
2211 wlvif->ap.global_hlid = WL12XX_INVALID_LINK_ID;
2212 wl12xx_free_rate_policy(wl, &wlvif->ap.mgmt_rate_idx);
2213 wl12xx_free_rate_policy(wl, &wlvif->ap.bcast_rate_idx);
2214 for (i = 0; i < CONF_TX_MAX_AC_COUNT; i++)
2215 wl12xx_free_rate_policy(wl,
2216 &wlvif->ap.ucast_rate_idx[i]);
2219 wl12xx_tx_reset_wlvif(wl, wlvif);
2220 wl1271_free_ap_keys(wl, wlvif);
2221 if (wl->last_wlvif == wlvif)
2222 wl->last_wlvif = NULL;
2223 list_del(&wlvif->list);
2224 memset(wlvif->ap.sta_hlid_map, 0, sizeof(wlvif->ap.sta_hlid_map));
2225 wlvif->role_id = WL12XX_INVALID_ROLE_ID;
2226 wlvif->dev_role_id = WL12XX_INVALID_ROLE_ID;
2228 if (wlvif->bss_type == BSS_TYPE_AP_BSS)
2233 mutex_unlock(&wl->mutex);
2234 del_timer_sync(&wlvif->rx_streaming_timer);
2235 cancel_work_sync(&wlvif->rx_streaming_enable_work);
2236 cancel_work_sync(&wlvif->rx_streaming_disable_work);
2237 cancel_delayed_work_sync(&wlvif->pspoll_work);
2239 mutex_lock(&wl->mutex);
2242 static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
2243 struct ieee80211_vif *vif)
2245 struct wl1271 *wl = hw->priv;
2246 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
2247 struct wl12xx_vif *iter;
2249 mutex_lock(&wl->mutex);
2251 if (wl->state == WL1271_STATE_OFF ||
2252 !test_bit(WLVIF_FLAG_INITIALIZED, &wlvif->flags))
2256 * wl->vif can be null here if someone shuts down the interface
2257 * just when hardware recovery has been started.
2259 wl12xx_for_each_wlvif(wl, iter) {
2263 __wl1271_op_remove_interface(wl, vif, true);
2266 WARN_ON(iter != wlvif);
2268 mutex_unlock(&wl->mutex);
2269 cancel_work_sync(&wl->recovery_work);
2272 static int wl1271_join(struct wl1271 *wl, struct wl12xx_vif *wlvif,
2276 bool is_ibss = (wlvif->bss_type == BSS_TYPE_IBSS);
2279 * One of the side effects of the JOIN command is that is clears
2280 * WPA/WPA2 keys from the chipset. Performing a JOIN while associated
2281 * to a WPA/WPA2 access point will therefore kill the data-path.
2282 * Currently the only valid scenario for JOIN during association
2283 * is on roaming, in which case we will also be given new keys.
2284 * Keep the below message for now, unless it starts bothering
2285 * users who really like to roam a lot :)
2287 if (test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags))
2288 wl1271_info("JOIN while associated.");
2291 set_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags);
2294 ret = wl12xx_cmd_role_start_ibss(wl, wlvif);
2296 ret = wl12xx_cmd_role_start_sta(wl, wlvif);
2300 if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags))
2304 * The join command disable the keep-alive mode, shut down its process,
2305 * and also clear the template config, so we need to reset it all after
2306 * the join. The acx_aid starts the keep-alive process, and the order
2307 * of the commands below is relevant.
2309 ret = wl1271_acx_keep_alive_mode(wl, wlvif, true);
2313 ret = wl1271_acx_aid(wl, wlvif, wlvif->aid);
2317 ret = wl12xx_cmd_build_klv_null_data(wl, wlvif);
2321 ret = wl1271_acx_keep_alive_config(wl, wlvif,
2322 CMD_TEMPL_KLV_IDX_NULL_DATA,
2323 ACX_KEEP_ALIVE_TPL_VALID);
2331 static int wl1271_unjoin(struct wl1271 *wl, struct wl12xx_vif *wlvif)
2335 if (test_and_clear_bit(WLVIF_FLAG_CS_PROGRESS, &wlvif->flags)) {
2336 struct ieee80211_vif *vif = wl12xx_wlvif_to_vif(wlvif);
2338 wl12xx_cmd_stop_channel_switch(wl);
2339 ieee80211_chswitch_done(vif, false);
2342 /* to stop listening to a channel, we disconnect */
2343 ret = wl12xx_cmd_role_stop_sta(wl, wlvif);
2347 /* reset TX security counters on a clean disconnect */
2348 wlvif->tx_security_last_seq_lsb = 0;
2349 wlvif->tx_security_seq = 0;
2355 static void wl1271_set_band_rate(struct wl1271 *wl, struct wl12xx_vif *wlvif)
2357 wlvif->basic_rate_set = wlvif->bitrate_masks[wlvif->band];
2358 wlvif->rate_set = wlvif->basic_rate_set;
2361 static bool wl12xx_is_roc(struct wl1271 *wl)
2365 role_id = find_first_bit(wl->roc_map, WL12XX_MAX_ROLES);
2366 if (role_id >= WL12XX_MAX_ROLES)
2372 static int wl1271_sta_handle_idle(struct wl1271 *wl, struct wl12xx_vif *wlvif,
2378 /* no need to croc if we weren't busy (e.g. during boot) */
2379 if (wl12xx_is_roc(wl)) {
2380 ret = wl12xx_stop_dev(wl, wlvif);
2385 wl1271_tx_min_rate_get(wl, wlvif->basic_rate_set);
2386 ret = wl1271_acx_sta_rate_policies(wl, wlvif);
2389 ret = wl1271_acx_keep_alive_config(
2390 wl, wlvif, CMD_TEMPL_KLV_IDX_NULL_DATA,
2391 ACX_KEEP_ALIVE_TPL_INVALID);
2394 set_bit(WL1271_FLAG_IDLE, &wl->flags);
2396 /* The current firmware only supports sched_scan in idle */
2397 if (wl->sched_scanning) {
2398 wl1271_scan_sched_scan_stop(wl);
2399 ieee80211_sched_scan_stopped(wl->hw);
2402 ret = wl12xx_start_dev(wl, wlvif);
2405 clear_bit(WL1271_FLAG_IDLE, &wl->flags);
2412 static int wl12xx_config_vif(struct wl1271 *wl, struct wl12xx_vif *wlvif,
2413 struct ieee80211_conf *conf, u32 changed)
2415 bool is_ap = (wlvif->bss_type == BSS_TYPE_AP_BSS);
2418 channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
2420 /* if the channel changes while joined, join again */
2421 if (changed & IEEE80211_CONF_CHANGE_CHANNEL &&
2422 ((wlvif->band != conf->channel->band) ||
2423 (wlvif->channel != channel))) {
2424 /* send all pending packets */
2425 wl1271_tx_work_locked(wl);
2426 wlvif->band = conf->channel->band;
2427 wlvif->channel = channel;
2431 * FIXME: the mac80211 should really provide a fixed
2432 * rate to use here. for now, just use the smallest
2433 * possible rate for the band as a fixed rate for
2434 * association frames and other control messages.
2436 if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags))
2437 wl1271_set_band_rate(wl, wlvif);
2440 wl1271_tx_min_rate_get(wl,
2441 wlvif->basic_rate_set);
2442 ret = wl1271_acx_sta_rate_policies(wl, wlvif);
2444 wl1271_warning("rate policy for channel "
2447 if (test_bit(WLVIF_FLAG_STA_ASSOCIATED,
2449 if (wl12xx_is_roc(wl)) {
2451 ret = wl12xx_croc(wl,
2452 wlvif->dev_role_id);
2456 ret = wl1271_join(wl, wlvif, false);
2458 wl1271_warning("cmd join on channel "
2462 * change the ROC channel. do it only if we are
2463 * not idle. otherwise, CROC will be called
2466 if (wl12xx_is_roc(wl) &&
2467 !(conf->flags & IEEE80211_CONF_IDLE)) {
2468 ret = wl12xx_stop_dev(wl, wlvif);
2472 ret = wl12xx_start_dev(wl, wlvif);
2481 * if mac80211 changes the PSM mode, make sure the mode is not
2482 * incorrectly changed after the pspoll failure active window.
2484 if (changed & IEEE80211_CONF_CHANGE_PS)
2485 clear_bit(WLVIF_FLAG_PSPOLL_FAILURE, &wlvif->flags);
2487 if (conf->flags & IEEE80211_CONF_PS &&
2488 !test_bit(WLVIF_FLAG_PSM_REQUESTED, &wlvif->flags)) {
2489 set_bit(WLVIF_FLAG_PSM_REQUESTED, &wlvif->flags);
2492 * We enter PSM only if we're already associated.
2493 * If we're not, we'll enter it when joining an SSID,
2494 * through the bss_info_changed() hook.
2496 if (test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags)) {
2497 wl1271_debug(DEBUG_PSM, "psm enabled");
2498 ret = wl1271_ps_set_mode(wl, wlvif,
2499 STATION_POWER_SAVE_MODE,
2500 wlvif->basic_rate, true);
2502 } else if (!(conf->flags & IEEE80211_CONF_PS) &&
2503 test_bit(WLVIF_FLAG_PSM_REQUESTED, &wlvif->flags)) {
2504 wl1271_debug(DEBUG_PSM, "psm disabled");
2506 clear_bit(WLVIF_FLAG_PSM_REQUESTED, &wlvif->flags);
2508 if (test_bit(WLVIF_FLAG_PSM, &wlvif->flags))
2509 ret = wl1271_ps_set_mode(wl, wlvif,
2510 STATION_ACTIVE_MODE,
2511 wlvif->basic_rate, true);
2514 if (conf->power_level != wlvif->power_level) {
2515 ret = wl1271_acx_tx_power(wl, wlvif, conf->power_level);
2519 wlvif->power_level = conf->power_level;
2525 static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed)
2527 struct wl1271 *wl = hw->priv;
2528 struct wl12xx_vif *wlvif;
2529 struct ieee80211_conf *conf = &hw->conf;
2530 int channel, ret = 0;
2532 channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
2534 wl1271_debug(DEBUG_MAC80211, "mac80211 config ch %d psm %s power %d %s"
2537 conf->flags & IEEE80211_CONF_PS ? "on" : "off",
2539 conf->flags & IEEE80211_CONF_IDLE ? "idle" : "in use",
2543 * mac80211 will go to idle nearly immediately after transmitting some
2544 * frames, such as the deauth. To make sure those frames reach the air,
2545 * wait here until the TX queue is fully flushed.
2547 if ((changed & IEEE80211_CONF_CHANGE_IDLE) &&
2548 (conf->flags & IEEE80211_CONF_IDLE))
2549 wl1271_tx_flush(wl);
2551 mutex_lock(&wl->mutex);
2553 /* we support configuring the channel and band even while off */
2554 if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
2555 wl->band = conf->channel->band;
2556 wl->channel = channel;
2559 if (changed & IEEE80211_CONF_CHANGE_POWER)
2560 wl->power_level = conf->power_level;
2562 if (unlikely(wl->state == WL1271_STATE_OFF))
2565 ret = wl1271_ps_elp_wakeup(wl);
2569 /* configure each interface */
2570 wl12xx_for_each_wlvif(wl, wlvif) {
2571 ret = wl12xx_config_vif(wl, wlvif, conf, changed);
2577 wl1271_ps_elp_sleep(wl);
2580 mutex_unlock(&wl->mutex);
2585 struct wl1271_filter_params {
2588 u8 mc_list[ACX_MC_ADDRESS_GROUP_MAX][ETH_ALEN];
2591 static u64 wl1271_op_prepare_multicast(struct ieee80211_hw *hw,
2592 struct netdev_hw_addr_list *mc_list)
2594 struct wl1271_filter_params *fp;
2595 struct netdev_hw_addr *ha;
2596 struct wl1271 *wl = hw->priv;
2598 if (unlikely(wl->state == WL1271_STATE_OFF))
2601 fp = kzalloc(sizeof(*fp), GFP_ATOMIC);
2603 wl1271_error("Out of memory setting filters.");
2607 /* update multicast filtering parameters */
2608 fp->mc_list_length = 0;
2609 if (netdev_hw_addr_list_count(mc_list) > ACX_MC_ADDRESS_GROUP_MAX) {
2610 fp->enabled = false;
2613 netdev_hw_addr_list_for_each(ha, mc_list) {
2614 memcpy(fp->mc_list[fp->mc_list_length],
2615 ha->addr, ETH_ALEN);
2616 fp->mc_list_length++;
2620 return (u64)(unsigned long)fp;
2623 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
2626 FIF_BCN_PRBRESP_PROMISC | \
2630 static void wl1271_op_configure_filter(struct ieee80211_hw *hw,
2631 unsigned int changed,
2632 unsigned int *total, u64 multicast)
2634 struct wl1271_filter_params *fp = (void *)(unsigned long)multicast;
2635 struct wl1271 *wl = hw->priv;
2636 struct wl12xx_vif *wlvif;
2640 wl1271_debug(DEBUG_MAC80211, "mac80211 configure filter changed %x"
2641 " total %x", changed, *total);
2643 mutex_lock(&wl->mutex);
2645 *total &= WL1271_SUPPORTED_FILTERS;
2646 changed &= WL1271_SUPPORTED_FILTERS;
2648 if (unlikely(wl->state == WL1271_STATE_OFF))
2651 ret = wl1271_ps_elp_wakeup(wl);
2655 wl12xx_for_each_wlvif(wl, wlvif) {
2656 if (wlvif->bss_type != BSS_TYPE_AP_BSS) {
2657 if (*total & FIF_ALLMULTI)
2658 ret = wl1271_acx_group_address_tbl(wl, wlvif,
2662 ret = wl1271_acx_group_address_tbl(wl, wlvif,
2665 fp->mc_list_length);
2672 * the fw doesn't provide an api to configure the filters. instead,
2673 * the filters configuration is based on the active roles / ROC
2678 wl1271_ps_elp_sleep(wl);
2681 mutex_unlock(&wl->mutex);
2685 static int wl1271_record_ap_key(struct wl1271 *wl, struct wl12xx_vif *wlvif,
2686 u8 id, u8 key_type, u8 key_size,
2687 const u8 *key, u8 hlid, u32 tx_seq_32,
2690 struct wl1271_ap_key *ap_key;
2693 wl1271_debug(DEBUG_CRYPT, "record ap key id %d", (int)id);
2695 if (key_size > MAX_KEY_SIZE)
2699 * Find next free entry in ap_keys. Also check we are not replacing
2702 for (i = 0; i < MAX_NUM_KEYS; i++) {
2703 if (wlvif->ap.recorded_keys[i] == NULL)
2706 if (wlvif->ap.recorded_keys[i]->id == id) {
2707 wl1271_warning("trying to record key replacement");
2712 if (i == MAX_NUM_KEYS)
2715 ap_key = kzalloc(sizeof(*ap_key), GFP_KERNEL);
2720 ap_key->key_type = key_type;
2721 ap_key->key_size = key_size;
2722 memcpy(ap_key->key, key, key_size);
2723 ap_key->hlid = hlid;
2724 ap_key->tx_seq_32 = tx_seq_32;
2725 ap_key->tx_seq_16 = tx_seq_16;
2727 wlvif->ap.recorded_keys[i] = ap_key;
2731 static void wl1271_free_ap_keys(struct wl1271 *wl, struct wl12xx_vif *wlvif)
2735 for (i = 0; i < MAX_NUM_KEYS; i++) {
2736 kfree(wlvif->ap.recorded_keys[i]);
2737 wlvif->ap.recorded_keys[i] = NULL;
2741 static int wl1271_ap_init_hwenc(struct wl1271 *wl, struct wl12xx_vif *wlvif)
2744 struct wl1271_ap_key *key;
2745 bool wep_key_added = false;
2747 for (i = 0; i < MAX_NUM_KEYS; i++) {
2749 if (wlvif->ap.recorded_keys[i] == NULL)
2752 key = wlvif->ap.recorded_keys[i];
2754 if (hlid == WL12XX_INVALID_LINK_ID)
2755 hlid = wlvif->ap.bcast_hlid;
2757 ret = wl1271_cmd_set_ap_key(wl, wlvif, KEY_ADD_OR_REPLACE,
2758 key->id, key->key_type,
2759 key->key_size, key->key,
2760 hlid, key->tx_seq_32,
2765 if (key->key_type == KEY_WEP)
2766 wep_key_added = true;
2769 if (wep_key_added) {
2770 ret = wl12xx_cmd_set_default_wep_key(wl, wlvif->default_key,
2771 wlvif->ap.bcast_hlid);
2777 wl1271_free_ap_keys(wl, wlvif);
2781 static int wl1271_set_key(struct wl1271 *wl, struct wl12xx_vif *wlvif,
2782 u16 action, u8 id, u8 key_type,
2783 u8 key_size, const u8 *key, u32 tx_seq_32,
2784 u16 tx_seq_16, struct ieee80211_sta *sta)
2787 bool is_ap = (wlvif->bss_type == BSS_TYPE_AP_BSS);
2790 struct wl1271_station *wl_sta;
2794 wl_sta = (struct wl1271_station *)sta->drv_priv;
2795 hlid = wl_sta->hlid;
2797 hlid = wlvif->ap.bcast_hlid;
2800 if (!test_bit(WLVIF_FLAG_AP_STARTED, &wlvif->flags)) {
2802 * We do not support removing keys after AP shutdown.
2803 * Pretend we do to make mac80211 happy.
2805 if (action != KEY_ADD_OR_REPLACE)
2808 ret = wl1271_record_ap_key(wl, wlvif, id,
2810 key, hlid, tx_seq_32,
2813 ret = wl1271_cmd_set_ap_key(wl, wlvif, action,
2814 id, key_type, key_size,
2815 key, hlid, tx_seq_32,
2823 static const u8 bcast_addr[ETH_ALEN] = {
2824 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
2828 * A STA set to GEM cipher requires 2 tx spare blocks.
2829 * Return to default value when GEM cipher key is removed
2831 if (key_type == KEY_GEM) {
2832 if (action == KEY_ADD_OR_REPLACE)
2833 wl->tx_spare_blocks = 2;
2834 else if (action == KEY_REMOVE)
2835 wl->tx_spare_blocks = TX_HW_BLOCK_SPARE_DEFAULT;
2838 addr = sta ? sta->addr : bcast_addr;
2840 if (is_zero_ether_addr(addr)) {
2841 /* We dont support TX only encryption */
2845 /* The wl1271 does not allow to remove unicast keys - they
2846 will be cleared automatically on next CMD_JOIN. Ignore the
2847 request silently, as we dont want the mac80211 to emit
2848 an error message. */
2849 if (action == KEY_REMOVE && !is_broadcast_ether_addr(addr))
2852 /* don't remove key if hlid was already deleted */
2853 if (action == KEY_REMOVE &&
2854 wlvif->sta.hlid == WL12XX_INVALID_LINK_ID)
2857 ret = wl1271_cmd_set_sta_key(wl, wlvif, action,
2858 id, key_type, key_size,
2859 key, addr, tx_seq_32,
2864 /* the default WEP key needs to be configured at least once */
2865 if (key_type == KEY_WEP) {
2866 ret = wl12xx_cmd_set_default_wep_key(wl,
2877 static int wl1271_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
2878 struct ieee80211_vif *vif,
2879 struct ieee80211_sta *sta,
2880 struct ieee80211_key_conf *key_conf)
2882 struct wl1271 *wl = hw->priv;
2883 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
2889 wl1271_debug(DEBUG_MAC80211, "mac80211 set key");
2891 wl1271_debug(DEBUG_CRYPT, "CMD: 0x%x sta: %p", cmd, sta);
2892 wl1271_debug(DEBUG_CRYPT, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
2893 key_conf->cipher, key_conf->keyidx,
2894 key_conf->keylen, key_conf->flags);
2895 wl1271_dump(DEBUG_CRYPT, "KEY: ", key_conf->key, key_conf->keylen);
2897 mutex_lock(&wl->mutex);
2899 if (unlikely(wl->state == WL1271_STATE_OFF)) {
2904 ret = wl1271_ps_elp_wakeup(wl);
2908 switch (key_conf->cipher) {
2909 case WLAN_CIPHER_SUITE_WEP40:
2910 case WLAN_CIPHER_SUITE_WEP104:
2913 key_conf->hw_key_idx = key_conf->keyidx;
2915 case WLAN_CIPHER_SUITE_TKIP:
2916 key_type = KEY_TKIP;
2918 key_conf->hw_key_idx = key_conf->keyidx;
2919 tx_seq_32 = WL1271_TX_SECURITY_HI32(wlvif->tx_security_seq);
2920 tx_seq_16 = WL1271_TX_SECURITY_LO16(wlvif->tx_security_seq);
2922 case WLAN_CIPHER_SUITE_CCMP:
2925 key_conf->flags |= IEEE80211_KEY_FLAG_PUT_IV_SPACE;
2926 tx_seq_32 = WL1271_TX_SECURITY_HI32(wlvif->tx_security_seq);
2927 tx_seq_16 = WL1271_TX_SECURITY_LO16(wlvif->tx_security_seq);
2929 case WL1271_CIPHER_SUITE_GEM:
2931 tx_seq_32 = WL1271_TX_SECURITY_HI32(wlvif->tx_security_seq);
2932 tx_seq_16 = WL1271_TX_SECURITY_LO16(wlvif->tx_security_seq);
2935 wl1271_error("Unknown key algo 0x%x", key_conf->cipher);
2943 ret = wl1271_set_key(wl, wlvif, KEY_ADD_OR_REPLACE,
2944 key_conf->keyidx, key_type,
2945 key_conf->keylen, key_conf->key,
2946 tx_seq_32, tx_seq_16, sta);
2948 wl1271_error("Could not add or replace key");
2954 ret = wl1271_set_key(wl, wlvif, KEY_REMOVE,
2955 key_conf->keyidx, key_type,
2956 key_conf->keylen, key_conf->key,
2959 wl1271_error("Could not remove key");
2965 wl1271_error("Unsupported key cmd 0x%x", cmd);
2971 wl1271_ps_elp_sleep(wl);
2974 mutex_unlock(&wl->mutex);
2979 static int wl1271_op_hw_scan(struct ieee80211_hw *hw,
2980 struct ieee80211_vif *vif,
2981 struct cfg80211_scan_request *req)
2983 struct wl1271 *wl = hw->priv;
2984 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
2990 wl1271_debug(DEBUG_MAC80211, "mac80211 hw scan");
2993 ssid = req->ssids[0].ssid;
2994 len = req->ssids[0].ssid_len;
2997 mutex_lock(&wl->mutex);
2999 if (wl->state == WL1271_STATE_OFF) {
3001 * We cannot return -EBUSY here because cfg80211 will expect
3002 * a call to ieee80211_scan_completed if we do - in this case
3003 * there won't be any call.
3009 ret = wl1271_ps_elp_wakeup(wl);
3013 /* cancel ROC before scanning */
3014 if (wl12xx_is_roc(wl)) {
3015 if (test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags)) {
3016 /* don't allow scanning right now */
3020 wl12xx_stop_dev(wl, wlvif);
3023 ret = wl1271_scan(hw->priv, vif, ssid, len, req);
3025 wl1271_ps_elp_sleep(wl);
3027 mutex_unlock(&wl->mutex);
3032 static void wl1271_op_cancel_hw_scan(struct ieee80211_hw *hw,
3033 struct ieee80211_vif *vif)
3035 struct wl1271 *wl = hw->priv;
3038 wl1271_debug(DEBUG_MAC80211, "mac80211 cancel hw scan");
3040 mutex_lock(&wl->mutex);
3042 if (wl->state == WL1271_STATE_OFF)
3045 if (wl->scan.state == WL1271_SCAN_STATE_IDLE)
3048 ret = wl1271_ps_elp_wakeup(wl);
3052 if (wl->scan.state != WL1271_SCAN_STATE_DONE) {
3053 ret = wl1271_scan_stop(wl);
3057 wl->scan.state = WL1271_SCAN_STATE_IDLE;
3058 memset(wl->scan.scanned_ch, 0, sizeof(wl->scan.scanned_ch));
3059 wl->scan_vif = NULL;
3060 wl->scan.req = NULL;
3061 ieee80211_scan_completed(wl->hw, true);
3064 wl1271_ps_elp_sleep(wl);
3066 mutex_unlock(&wl->mutex);
3068 cancel_delayed_work_sync(&wl->scan_complete_work);
3071 static int wl1271_op_sched_scan_start(struct ieee80211_hw *hw,
3072 struct ieee80211_vif *vif,
3073 struct cfg80211_sched_scan_request *req,
3074 struct ieee80211_sched_scan_ies *ies)
3076 struct wl1271 *wl = hw->priv;
3077 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
3080 wl1271_debug(DEBUG_MAC80211, "wl1271_op_sched_scan_start");
3082 mutex_lock(&wl->mutex);
3084 ret = wl1271_ps_elp_wakeup(wl);
3088 ret = wl1271_scan_sched_scan_config(wl, wlvif, req, ies);
3092 ret = wl1271_scan_sched_scan_start(wl, wlvif);
3096 wl->sched_scanning = true;
3099 wl1271_ps_elp_sleep(wl);
3101 mutex_unlock(&wl->mutex);
3105 static void wl1271_op_sched_scan_stop(struct ieee80211_hw *hw,
3106 struct ieee80211_vif *vif)
3108 struct wl1271 *wl = hw->priv;
3111 wl1271_debug(DEBUG_MAC80211, "wl1271_op_sched_scan_stop");
3113 mutex_lock(&wl->mutex);
3115 ret = wl1271_ps_elp_wakeup(wl);
3119 wl1271_scan_sched_scan_stop(wl);
3121 wl1271_ps_elp_sleep(wl);
3123 mutex_unlock(&wl->mutex);
3126 static int wl1271_op_set_frag_threshold(struct ieee80211_hw *hw, u32 value)
3128 struct wl1271 *wl = hw->priv;
3131 mutex_lock(&wl->mutex);
3133 if (unlikely(wl->state == WL1271_STATE_OFF)) {
3138 ret = wl1271_ps_elp_wakeup(wl);
3142 ret = wl1271_acx_frag_threshold(wl, value);
3144 wl1271_warning("wl1271_op_set_frag_threshold failed: %d", ret);
3146 wl1271_ps_elp_sleep(wl);
3149 mutex_unlock(&wl->mutex);
3154 static int wl1271_op_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
3156 struct wl1271 *wl = hw->priv;
3157 struct wl12xx_vif *wlvif;
3160 mutex_lock(&wl->mutex);
3162 if (unlikely(wl->state == WL1271_STATE_OFF)) {
3167 ret = wl1271_ps_elp_wakeup(wl);
3171 wl12xx_for_each_wlvif(wl, wlvif) {
3172 ret = wl1271_acx_rts_threshold(wl, wlvif, value);
3174 wl1271_warning("set rts threshold failed: %d", ret);
3176 wl1271_ps_elp_sleep(wl);
3179 mutex_unlock(&wl->mutex);
3184 static int wl1271_ssid_set(struct ieee80211_vif *vif, struct sk_buff *skb,
3187 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
3189 const u8 *ptr = cfg80211_find_ie(WLAN_EID_SSID, skb->data + offset,
3193 wl1271_error("No SSID in IEs!");
3198 if (ssid_len > IEEE80211_MAX_SSID_LEN) {
3199 wl1271_error("SSID is too long!");
3203 wlvif->ssid_len = ssid_len;
3204 memcpy(wlvif->ssid, ptr+2, ssid_len);
3208 static void wl12xx_remove_ie(struct sk_buff *skb, u8 eid, int ieoffset)
3211 const u8 *next, *end = skb->data + skb->len;
3212 u8 *ie = (u8 *)cfg80211_find_ie(eid, skb->data + ieoffset,
3213 skb->len - ieoffset);
3218 memmove(ie, next, end - next);
3219 skb_trim(skb, skb->len - len);
3222 static void wl12xx_remove_vendor_ie(struct sk_buff *skb,
3223 unsigned int oui, u8 oui_type,
3227 const u8 *next, *end = skb->data + skb->len;
3228 u8 *ie = (u8 *)cfg80211_find_vendor_ie(oui, oui_type,
3229 skb->data + ieoffset,
3230 skb->len - ieoffset);
3235 memmove(ie, next, end - next);
3236 skb_trim(skb, skb->len - len);
3239 static int wl1271_ap_set_probe_resp_tmpl(struct wl1271 *wl, u32 rates,
3240 struct ieee80211_vif *vif)
3242 struct sk_buff *skb;
3245 skb = ieee80211_proberesp_get(wl->hw, vif);
3249 ret = wl1271_cmd_template_set(wl,
3250 CMD_TEMPL_AP_PROBE_RESPONSE,
3259 static int wl1271_ap_set_probe_resp_tmpl_legacy(struct wl1271 *wl,
3260 struct ieee80211_vif *vif,
3262 size_t probe_rsp_len,
3265 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
3266 struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
3267 u8 probe_rsp_templ[WL1271_CMD_TEMPL_MAX_SIZE];
3268 int ssid_ie_offset, ie_offset, templ_len;
3271 /* no need to change probe response if the SSID is set correctly */
3272 if (wlvif->ssid_len > 0)
3273 return wl1271_cmd_template_set(wl,
3274 CMD_TEMPL_AP_PROBE_RESPONSE,
3279 if (probe_rsp_len + bss_conf->ssid_len > WL1271_CMD_TEMPL_MAX_SIZE) {
3280 wl1271_error("probe_rsp template too big");
3284 /* start searching from IE offset */
3285 ie_offset = offsetof(struct ieee80211_mgmt, u.probe_resp.variable);
3287 ptr = cfg80211_find_ie(WLAN_EID_SSID, probe_rsp_data + ie_offset,
3288 probe_rsp_len - ie_offset);
3290 wl1271_error("No SSID in beacon!");
3294 ssid_ie_offset = ptr - probe_rsp_data;
3295 ptr += (ptr[1] + 2);
3297 memcpy(probe_rsp_templ, probe_rsp_data, ssid_ie_offset);
3299 /* insert SSID from bss_conf */
3300 probe_rsp_templ[ssid_ie_offset] = WLAN_EID_SSID;
3301 probe_rsp_templ[ssid_ie_offset + 1] = bss_conf->ssid_len;
3302 memcpy(probe_rsp_templ + ssid_ie_offset + 2,
3303 bss_conf->ssid, bss_conf->ssid_len);
3304 templ_len = ssid_ie_offset + 2 + bss_conf->ssid_len;
3306 memcpy(probe_rsp_templ + ssid_ie_offset + 2 + bss_conf->ssid_len,
3307 ptr, probe_rsp_len - (ptr - probe_rsp_data));
3308 templ_len += probe_rsp_len - (ptr - probe_rsp_data);
3310 return wl1271_cmd_template_set(wl,
3311 CMD_TEMPL_AP_PROBE_RESPONSE,
3317 static int wl1271_bss_erp_info_changed(struct wl1271 *wl,
3318 struct ieee80211_vif *vif,
3319 struct ieee80211_bss_conf *bss_conf,
3322 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
3325 if (changed & BSS_CHANGED_ERP_SLOT) {
3326 if (bss_conf->use_short_slot)
3327 ret = wl1271_acx_slot(wl, wlvif, SLOT_TIME_SHORT);
3329 ret = wl1271_acx_slot(wl, wlvif, SLOT_TIME_LONG);
3331 wl1271_warning("Set slot time failed %d", ret);
3336 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
3337 if (bss_conf->use_short_preamble)
3338 wl1271_acx_set_preamble(wl, wlvif, ACX_PREAMBLE_SHORT);
3340 wl1271_acx_set_preamble(wl, wlvif, ACX_PREAMBLE_LONG);
3343 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
3344 if (bss_conf->use_cts_prot)
3345 ret = wl1271_acx_cts_protect(wl, wlvif,
3348 ret = wl1271_acx_cts_protect(wl, wlvif,
3349 CTSPROTECT_DISABLE);
3351 wl1271_warning("Set ctsprotect failed %d", ret);
3360 static int wl1271_bss_beacon_info_changed(struct wl1271 *wl,
3361 struct ieee80211_vif *vif,
3362 struct ieee80211_bss_conf *bss_conf,
3365 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
3366 bool is_ap = (wlvif->bss_type == BSS_TYPE_AP_BSS);
3369 if ((changed & BSS_CHANGED_BEACON_INT)) {
3370 wl1271_debug(DEBUG_MASTER, "beacon interval updated: %d",
3371 bss_conf->beacon_int);
3373 wlvif->beacon_int = bss_conf->beacon_int;
3376 if ((changed & BSS_CHANGED_AP_PROBE_RESP) && is_ap) {
3377 u32 rate = wl1271_tx_min_rate_get(wl, wlvif->basic_rate_set);
3378 if (!wl1271_ap_set_probe_resp_tmpl(wl, rate, vif)) {
3379 wl1271_debug(DEBUG_AP, "probe response updated");
3380 set_bit(WLVIF_FLAG_AP_PROBE_RESP_SET, &wlvif->flags);
3384 if ((changed & BSS_CHANGED_BEACON)) {
3385 struct ieee80211_hdr *hdr;
3387 int ieoffset = offsetof(struct ieee80211_mgmt,
3389 struct sk_buff *beacon = ieee80211_beacon_get(wl->hw, vif);
3397 wl1271_debug(DEBUG_MASTER, "beacon updated");
3399 ret = wl1271_ssid_set(vif, beacon, ieoffset);
3401 dev_kfree_skb(beacon);
3404 min_rate = wl1271_tx_min_rate_get(wl, wlvif->basic_rate_set);
3405 tmpl_id = is_ap ? CMD_TEMPL_AP_BEACON :
3407 ret = wl1271_cmd_template_set(wl, tmpl_id,
3412 dev_kfree_skb(beacon);
3417 * In case we already have a probe-resp beacon set explicitly
3418 * by usermode, don't use the beacon data.
3420 if (test_bit(WLVIF_FLAG_AP_PROBE_RESP_SET, &wlvif->flags))
3423 /* remove TIM ie from probe response */
3424 wl12xx_remove_ie(beacon, WLAN_EID_TIM, ieoffset);
3427 * remove p2p ie from probe response.
3428 * the fw reponds to probe requests that don't include
3429 * the p2p ie. probe requests with p2p ie will be passed,
3430 * and will be responded by the supplicant (the spec
3431 * forbids including the p2p ie when responding to probe
3432 * requests that didn't include it).
3434 wl12xx_remove_vendor_ie(beacon, WLAN_OUI_WFA,
3435 WLAN_OUI_TYPE_WFA_P2P, ieoffset);
3437 hdr = (struct ieee80211_hdr *) beacon->data;
3438 hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
3439 IEEE80211_STYPE_PROBE_RESP);
3441 ret = wl1271_ap_set_probe_resp_tmpl_legacy(wl, vif,
3446 ret = wl1271_cmd_template_set(wl,
3447 CMD_TEMPL_PROBE_RESPONSE,
3452 dev_kfree_skb(beacon);
3459 wl1271_error("beacon info change failed: %d", ret);
3463 /* AP mode changes */
3464 static void wl1271_bss_info_changed_ap(struct wl1271 *wl,
3465 struct ieee80211_vif *vif,
3466 struct ieee80211_bss_conf *bss_conf,
3469 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
3472 if ((changed & BSS_CHANGED_BASIC_RATES)) {
3473 u32 rates = bss_conf->basic_rates;
3475 wlvif->basic_rate_set = wl1271_tx_enabled_rates_get(wl, rates,
3477 wlvif->basic_rate = wl1271_tx_min_rate_get(wl,
3478 wlvif->basic_rate_set);
3480 ret = wl1271_init_ap_rates(wl, wlvif);
3482 wl1271_error("AP rate policy change failed %d", ret);
3486 ret = wl1271_ap_init_templates(wl, vif);
3491 ret = wl1271_bss_beacon_info_changed(wl, vif, bss_conf, changed);
3495 if ((changed & BSS_CHANGED_BEACON_ENABLED)) {
3496 if (bss_conf->enable_beacon) {
3497 if (!test_bit(WLVIF_FLAG_AP_STARTED, &wlvif->flags)) {
3498 ret = wl12xx_cmd_role_start_ap(wl, wlvif);
3502 ret = wl1271_ap_init_hwenc(wl, wlvif);
3506 set_bit(WLVIF_FLAG_AP_STARTED, &wlvif->flags);
3507 wl1271_debug(DEBUG_AP, "started AP");
3510 if (test_bit(WLVIF_FLAG_AP_STARTED, &wlvif->flags)) {
3511 ret = wl12xx_cmd_role_stop_ap(wl, wlvif);
3515 clear_bit(WLVIF_FLAG_AP_STARTED, &wlvif->flags);
3516 clear_bit(WLVIF_FLAG_AP_PROBE_RESP_SET,
3518 wl1271_debug(DEBUG_AP, "stopped AP");
3523 ret = wl1271_bss_erp_info_changed(wl, vif, bss_conf, changed);
3527 /* Handle HT information change */
3528 if ((changed & BSS_CHANGED_HT) &&
3529 (bss_conf->channel_type != NL80211_CHAN_NO_HT)) {
3530 ret = wl1271_acx_set_ht_information(wl, wlvif,
3531 bss_conf->ht_operation_mode);
3533 wl1271_warning("Set ht information failed %d", ret);
3542 /* STA/IBSS mode changes */
3543 static void wl1271_bss_info_changed_sta(struct wl1271 *wl,
3544 struct ieee80211_vif *vif,
3545 struct ieee80211_bss_conf *bss_conf,
3548 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
3549 bool do_join = false, set_assoc = false;
3550 bool is_ibss = (wlvif->bss_type == BSS_TYPE_IBSS);
3551 bool ibss_joined = false;
3552 u32 sta_rate_set = 0;
3554 struct ieee80211_sta *sta;
3555 bool sta_exists = false;
3556 struct ieee80211_sta_ht_cap sta_ht_cap;
3559 ret = wl1271_bss_beacon_info_changed(wl, vif, bss_conf,
3565 if (changed & BSS_CHANGED_IBSS) {
3566 if (bss_conf->ibss_joined) {
3567 set_bit(WLVIF_FLAG_IBSS_JOINED, &wlvif->flags);
3570 if (test_and_clear_bit(WLVIF_FLAG_IBSS_JOINED,
3572 wl1271_unjoin(wl, wlvif);
3573 wl12xx_start_dev(wl, wlvif);
3578 if ((changed & BSS_CHANGED_BEACON_INT) && ibss_joined)
3581 /* Need to update the SSID (for filtering etc) */
3582 if ((changed & BSS_CHANGED_BEACON) && ibss_joined)
3585 if ((changed & BSS_CHANGED_BEACON_ENABLED) && ibss_joined) {
3586 wl1271_debug(DEBUG_ADHOC, "ad-hoc beaconing: %s",
3587 bss_conf->enable_beacon ? "enabled" : "disabled");
3592 if (changed & BSS_CHANGED_IDLE) {
3593 ret = wl1271_sta_handle_idle(wl, wlvif, bss_conf->idle);
3595 wl1271_warning("idle mode change failed %d", ret);
3598 if ((changed & BSS_CHANGED_CQM)) {
3599 bool enable = false;
3600 if (bss_conf->cqm_rssi_thold)
3602 ret = wl1271_acx_rssi_snr_trigger(wl, wlvif, enable,
3603 bss_conf->cqm_rssi_thold,
3604 bss_conf->cqm_rssi_hyst);
3607 wlvif->rssi_thold = bss_conf->cqm_rssi_thold;
3610 if (changed & BSS_CHANGED_BSSID)
3611 if (!is_zero_ether_addr(bss_conf->bssid)) {
3612 ret = wl12xx_cmd_build_null_data(wl, wlvif);
3616 ret = wl1271_build_qos_null_data(wl, vif);
3620 /* Need to update the BSSID (for filtering etc) */
3624 if (changed & (BSS_CHANGED_ASSOC | BSS_CHANGED_HT)) {
3626 sta = ieee80211_find_sta(vif, bss_conf->bssid);
3630 /* save the supp_rates of the ap */
3631 sta_rate_set = sta->supp_rates[wl->hw->conf.channel->band];
3632 if (sta->ht_cap.ht_supported)
3634 (sta->ht_cap.mcs.rx_mask[0] << HW_HT_RATES_OFFSET);
3635 sta_ht_cap = sta->ht_cap;
3642 if ((changed & BSS_CHANGED_ASSOC)) {
3643 if (bss_conf->assoc) {
3646 wlvif->aid = bss_conf->aid;
3649 wlvif->ps_poll_failures = 0;
3652 * use basic rates from AP, and determine lowest rate
3653 * to use with control frames.
3655 rates = bss_conf->basic_rates;
3656 wlvif->basic_rate_set =
3657 wl1271_tx_enabled_rates_get(wl, rates,
3660 wl1271_tx_min_rate_get(wl,
3661 wlvif->basic_rate_set);
3664 wl1271_tx_enabled_rates_get(wl,
3667 ret = wl1271_acx_sta_rate_policies(wl, wlvif);
3672 * with wl1271, we don't need to update the
3673 * beacon_int and dtim_period, because the firmware
3674 * updates it by itself when the first beacon is
3675 * received after a join.
3677 ret = wl1271_cmd_build_ps_poll(wl, wlvif, wlvif->aid);
3682 * Get a template for hardware connection maintenance
3684 dev_kfree_skb(wlvif->probereq);
3685 wlvif->probereq = wl1271_cmd_build_ap_probe_req(wl,
3688 ieoffset = offsetof(struct ieee80211_mgmt,
3689 u.probe_req.variable);
3690 wl1271_ssid_set(vif, wlvif->probereq, ieoffset);
3692 /* enable the connection monitoring feature */
3693 ret = wl1271_acx_conn_monit_params(wl, wlvif, true);
3697 /* use defaults when not associated */
3699 !!test_and_clear_bit(WLVIF_FLAG_STA_ASSOCIATED,
3702 !!test_and_clear_bit(WLVIF_FLAG_STA_STATE_SENT,
3706 /* free probe-request template */
3707 dev_kfree_skb(wlvif->probereq);
3708 wlvif->probereq = NULL;
3710 /* re-enable dynamic ps - just in case */
3711 ieee80211_enable_dyn_ps(vif);
3713 /* revert back to minimum rates for the current band */
3714 wl1271_set_band_rate(wl, wlvif);
3716 wl1271_tx_min_rate_get(wl,
3717 wlvif->basic_rate_set);
3718 ret = wl1271_acx_sta_rate_policies(wl, wlvif);
3722 /* disable connection monitor features */
3723 ret = wl1271_acx_conn_monit_params(wl, wlvif, false);
3725 /* Disable the keep-alive feature */
3726 ret = wl1271_acx_keep_alive_mode(wl, wlvif, false);
3730 /* restore the bssid filter and go to dummy bssid */
3732 u32 conf_flags = wl->hw->conf.flags;
3734 * we might have to disable roc, if there was
3735 * no IF_OPER_UP notification.
3738 ret = wl12xx_croc(wl, wlvif->role_id);
3743 * (we also need to disable roc in case of
3744 * roaming on the same channel. until we will
3745 * have a better flow...)
3747 if (test_bit(wlvif->dev_role_id, wl->roc_map)) {
3748 ret = wl12xx_croc(wl,
3749 wlvif->dev_role_id);
3754 wl1271_unjoin(wl, wlvif);
3755 if (!(conf_flags & IEEE80211_CONF_IDLE))
3756 wl12xx_start_dev(wl, wlvif);
3761 if (changed & BSS_CHANGED_IBSS) {
3762 wl1271_debug(DEBUG_ADHOC, "ibss_joined: %d",
3763 bss_conf->ibss_joined);
3765 if (bss_conf->ibss_joined) {
3766 u32 rates = bss_conf->basic_rates;
3767 wlvif->basic_rate_set =
3768 wl1271_tx_enabled_rates_get(wl, rates,
3771 wl1271_tx_min_rate_get(wl,
3772 wlvif->basic_rate_set);
3774 /* by default, use 11b + OFDM rates */
3775 wlvif->rate_set = CONF_TX_IBSS_DEFAULT_RATES;
3776 ret = wl1271_acx_sta_rate_policies(wl, wlvif);
3782 ret = wl1271_bss_erp_info_changed(wl, vif, bss_conf, changed);
3786 if (changed & BSS_CHANGED_ARP_FILTER) {
3787 __be32 addr = bss_conf->arp_addr_list[0];
3788 WARN_ON(wlvif->bss_type != BSS_TYPE_STA_BSS);
3790 if (bss_conf->arp_addr_cnt == 1 &&
3791 bss_conf->arp_filter_enabled) {
3793 * The template should have been configured only upon
3794 * association. however, it seems that the correct ip
3795 * isn't being set (when sending), so we have to
3796 * reconfigure the template upon every ip change.
3798 ret = wl1271_cmd_build_arp_rsp(wl, wlvif, addr);
3800 wl1271_warning("build arp rsp failed: %d", ret);
3804 ret = wl1271_acx_arp_ip_filter(wl, wlvif,
3805 ACX_ARP_FILTER_ARP_FILTERING,
3808 ret = wl1271_acx_arp_ip_filter(wl, wlvif, 0, addr);
3815 ret = wl1271_join(wl, wlvif, set_assoc);
3817 wl1271_warning("cmd join failed %d", ret);
3821 /* ROC until connected (after EAPOL exchange) */
3823 ret = wl12xx_roc(wl, wlvif, wlvif->role_id);
3827 wl1271_check_operstate(wl, wlvif,
3828 ieee80211_get_operstate(vif));
3831 * stop device role if started (we might already be in
3832 * STA role). TODO: make it better.
3834 if (wlvif->dev_role_id != WL12XX_INVALID_ROLE_ID) {
3835 ret = wl12xx_stop_dev(wl, wlvif);
3840 /* If we want to go in PSM but we're not there yet */
3841 if (test_bit(WLVIF_FLAG_PSM_REQUESTED, &wlvif->flags) &&
3842 !test_bit(WLVIF_FLAG_PSM, &wlvif->flags)) {
3843 enum wl1271_cmd_ps_mode mode;
3845 mode = STATION_POWER_SAVE_MODE;
3846 ret = wl1271_ps_set_mode(wl, wlvif, mode,
3854 /* Handle new association with HT. Do this after join. */
3856 if ((changed & BSS_CHANGED_HT) &&
3857 (bss_conf->channel_type != NL80211_CHAN_NO_HT)) {
3858 ret = wl1271_acx_set_ht_capabilities(wl,
3863 wl1271_warning("Set ht cap true failed %d",
3868 /* handle new association without HT and disassociation */
3869 else if (changed & BSS_CHANGED_ASSOC) {
3870 ret = wl1271_acx_set_ht_capabilities(wl,
3875 wl1271_warning("Set ht cap false failed %d",
3882 /* Handle HT information change. Done after join. */
3883 if ((changed & BSS_CHANGED_HT) &&
3884 (bss_conf->channel_type != NL80211_CHAN_NO_HT)) {
3885 ret = wl1271_acx_set_ht_information(wl, wlvif,
3886 bss_conf->ht_operation_mode);
3888 wl1271_warning("Set ht information failed %d", ret);
3897 static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
3898 struct ieee80211_vif *vif,
3899 struct ieee80211_bss_conf *bss_conf,
3902 struct wl1271 *wl = hw->priv;
3903 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
3904 bool is_ap = (wlvif->bss_type == BSS_TYPE_AP_BSS);
3907 wl1271_debug(DEBUG_MAC80211, "mac80211 bss info changed 0x%x",
3910 mutex_lock(&wl->mutex);
3912 if (unlikely(wl->state == WL1271_STATE_OFF))
3915 if (unlikely(!test_bit(WLVIF_FLAG_INITIALIZED, &wlvif->flags)))
3918 ret = wl1271_ps_elp_wakeup(wl);
3923 wl1271_bss_info_changed_ap(wl, vif, bss_conf, changed);
3925 wl1271_bss_info_changed_sta(wl, vif, bss_conf, changed);
3927 wl1271_ps_elp_sleep(wl);
3930 mutex_unlock(&wl->mutex);
3933 static int wl1271_op_conf_tx(struct ieee80211_hw *hw,
3934 struct ieee80211_vif *vif, u16 queue,
3935 const struct ieee80211_tx_queue_params *params)
3937 struct wl1271 *wl = hw->priv;
3938 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
3942 mutex_lock(&wl->mutex);
3944 wl1271_debug(DEBUG_MAC80211, "mac80211 conf tx %d", queue);
3947 ps_scheme = CONF_PS_SCHEME_UPSD_TRIGGER;
3949 ps_scheme = CONF_PS_SCHEME_LEGACY;
3951 if (wl->state == WL1271_STATE_OFF) {
3953 * If the state is off, the parameters will be recorded and
3954 * configured on init. This happens in AP-mode.
3956 struct conf_tx_ac_category *conf_ac =
3957 &wl->conf.tx.ac_conf[wl1271_tx_get_queue(queue)];
3958 struct conf_tx_tid *conf_tid =
3959 &wl->conf.tx.tid_conf[wl1271_tx_get_queue(queue)];
3961 conf_ac->ac = wl1271_tx_get_queue(queue);
3962 conf_ac->cw_min = (u8)params->cw_min;
3963 conf_ac->cw_max = params->cw_max;
3964 conf_ac->aifsn = params->aifs;
3965 conf_ac->tx_op_limit = params->txop << 5;
3967 conf_tid->queue_id = wl1271_tx_get_queue(queue);
3968 conf_tid->channel_type = CONF_CHANNEL_TYPE_EDCF;
3969 conf_tid->tsid = wl1271_tx_get_queue(queue);
3970 conf_tid->ps_scheme = ps_scheme;
3971 conf_tid->ack_policy = CONF_ACK_POLICY_LEGACY;
3972 conf_tid->apsd_conf[0] = 0;
3973 conf_tid->apsd_conf[1] = 0;
3977 ret = wl1271_ps_elp_wakeup(wl);
3982 * the txop is confed in units of 32us by the mac80211,
3985 ret = wl1271_acx_ac_cfg(wl, wlvif, wl1271_tx_get_queue(queue),
3986 params->cw_min, params->cw_max,
3987 params->aifs, params->txop << 5);
3991 ret = wl1271_acx_tid_cfg(wl, wlvif, wl1271_tx_get_queue(queue),
3992 CONF_CHANNEL_TYPE_EDCF,
3993 wl1271_tx_get_queue(queue),
3994 ps_scheme, CONF_ACK_POLICY_LEGACY,
3998 wl1271_ps_elp_sleep(wl);
4001 mutex_unlock(&wl->mutex);
4006 static u64 wl1271_op_get_tsf(struct ieee80211_hw *hw,
4007 struct ieee80211_vif *vif)
4010 struct wl1271 *wl = hw->priv;
4011 u64 mactime = ULLONG_MAX;
4014 wl1271_debug(DEBUG_MAC80211, "mac80211 get tsf");
4016 mutex_lock(&wl->mutex);
4018 if (unlikely(wl->state == WL1271_STATE_OFF))
4021 ret = wl1271_ps_elp_wakeup(wl);
4025 ret = wl1271_acx_tsf_info(wl, &mactime);
4030 wl1271_ps_elp_sleep(wl);
4033 mutex_unlock(&wl->mutex);
4037 static int wl1271_op_get_survey(struct ieee80211_hw *hw, int idx,
4038 struct survey_info *survey)
4040 struct wl1271 *wl = hw->priv;
4041 struct ieee80211_conf *conf = &hw->conf;
4046 survey->channel = conf->channel;
4047 survey->filled = SURVEY_INFO_NOISE_DBM;
4048 survey->noise = wl->noise;
4053 static int wl1271_allocate_sta(struct wl1271 *wl,
4054 struct wl12xx_vif *wlvif,
4055 struct ieee80211_sta *sta)
4057 struct wl1271_station *wl_sta;
4061 if (wl->active_sta_count >= AP_MAX_STATIONS) {
4062 wl1271_warning("could not allocate HLID - too much stations");
4066 wl_sta = (struct wl1271_station *)sta->drv_priv;
4067 ret = wl12xx_allocate_link(wl, wlvif, &wl_sta->hlid);
4069 wl1271_warning("could not allocate HLID - too many links");
4073 set_bit(wl_sta->hlid, wlvif->ap.sta_hlid_map);
4074 memcpy(wl->links[wl_sta->hlid].addr, sta->addr, ETH_ALEN);
4075 wl->active_sta_count++;
4079 void wl1271_free_sta(struct wl1271 *wl, struct wl12xx_vif *wlvif, u8 hlid)
4081 if (!test_bit(hlid, wlvif->ap.sta_hlid_map))
4084 clear_bit(hlid, wlvif->ap.sta_hlid_map);
4085 memset(wl->links[hlid].addr, 0, ETH_ALEN);
4086 wl->links[hlid].ba_bitmap = 0;
4087 wl1271_tx_reset_link_queues(wl, hlid);
4088 __clear_bit(hlid, &wl->ap_ps_map);
4089 __clear_bit(hlid, (unsigned long *)&wl->ap_fw_ps_map);
4090 wl12xx_free_link(wl, wlvif, &hlid);
4091 wl->active_sta_count--;
4094 static int wl1271_op_sta_add(struct ieee80211_hw *hw,
4095 struct ieee80211_vif *vif,
4096 struct ieee80211_sta *sta)
4098 struct wl1271 *wl = hw->priv;
4099 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
4100 struct wl1271_station *wl_sta;
4104 mutex_lock(&wl->mutex);
4106 if (unlikely(wl->state == WL1271_STATE_OFF))
4109 if (wlvif->bss_type != BSS_TYPE_AP_BSS)
4112 wl1271_debug(DEBUG_MAC80211, "mac80211 add sta %d", (int)sta->aid);
4114 ret = wl1271_allocate_sta(wl, wlvif, sta);
4118 wl_sta = (struct wl1271_station *)sta->drv_priv;
4119 hlid = wl_sta->hlid;
4121 ret = wl1271_ps_elp_wakeup(wl);
4125 ret = wl12xx_cmd_add_peer(wl, wlvif, sta, hlid);
4129 ret = wl12xx_cmd_set_peer_state(wl, hlid);
4133 ret = wl1271_acx_set_ht_capabilities(wl, &sta->ht_cap, true, hlid);
4138 wl1271_ps_elp_sleep(wl);
4142 wl1271_free_sta(wl, wlvif, hlid);
4145 mutex_unlock(&wl->mutex);
4149 static int wl1271_op_sta_remove(struct ieee80211_hw *hw,
4150 struct ieee80211_vif *vif,
4151 struct ieee80211_sta *sta)
4153 struct wl1271 *wl = hw->priv;
4154 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
4155 struct wl1271_station *wl_sta;
4158 mutex_lock(&wl->mutex);
4160 if (unlikely(wl->state == WL1271_STATE_OFF))
4163 if (wlvif->bss_type != BSS_TYPE_AP_BSS)
4166 wl1271_debug(DEBUG_MAC80211, "mac80211 remove sta %d", (int)sta->aid);
4168 wl_sta = (struct wl1271_station *)sta->drv_priv;
4170 if (WARN_ON(!test_bit(id, wlvif->ap.sta_hlid_map)))
4173 ret = wl1271_ps_elp_wakeup(wl);
4177 ret = wl12xx_cmd_remove_peer(wl, wl_sta->hlid);
4181 wl1271_free_sta(wl, wlvif, wl_sta->hlid);
4184 wl1271_ps_elp_sleep(wl);
4187 mutex_unlock(&wl->mutex);
4191 static int wl1271_op_ampdu_action(struct ieee80211_hw *hw,
4192 struct ieee80211_vif *vif,
4193 enum ieee80211_ampdu_mlme_action action,
4194 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
4197 struct wl1271 *wl = hw->priv;
4198 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
4200 u8 hlid, *ba_bitmap;
4202 wl1271_debug(DEBUG_MAC80211, "mac80211 ampdu action %d tid %d", action,
4205 /* sanity check - the fields in FW are only 8bits wide */
4206 if (WARN_ON(tid > 0xFF))
4209 mutex_lock(&wl->mutex);
4211 if (unlikely(wl->state == WL1271_STATE_OFF)) {
4216 if (wlvif->bss_type == BSS_TYPE_STA_BSS) {
4217 hlid = wlvif->sta.hlid;
4218 ba_bitmap = &wlvif->sta.ba_rx_bitmap;
4219 } else if (wlvif->bss_type == BSS_TYPE_AP_BSS) {
4220 struct wl1271_station *wl_sta;
4222 wl_sta = (struct wl1271_station *)sta->drv_priv;
4223 hlid = wl_sta->hlid;
4224 ba_bitmap = &wl->links[hlid].ba_bitmap;
4230 ret = wl1271_ps_elp_wakeup(wl);
4234 wl1271_debug(DEBUG_MAC80211, "mac80211 ampdu: Rx tid %d action %d",
4238 case IEEE80211_AMPDU_RX_START:
4239 if (!wlvif->ba_support || !wlvif->ba_allowed) {
4244 if (wl->ba_rx_session_count >= RX_BA_MAX_SESSIONS) {
4246 wl1271_error("exceeded max RX BA sessions");
4250 if (*ba_bitmap & BIT(tid)) {
4252 wl1271_error("cannot enable RX BA session on active "
4257 ret = wl12xx_acx_set_ba_receiver_session(wl, tid, *ssn, true,
4260 *ba_bitmap |= BIT(tid);
4261 wl->ba_rx_session_count++;
4265 case IEEE80211_AMPDU_RX_STOP:
4266 if (!(*ba_bitmap & BIT(tid))) {
4268 wl1271_error("no active RX BA session on tid: %d",
4273 ret = wl12xx_acx_set_ba_receiver_session(wl, tid, 0, false,
4276 *ba_bitmap &= ~BIT(tid);
4277 wl->ba_rx_session_count--;
4282 * The BA initiator session management in FW independently.
4283 * Falling break here on purpose for all TX APDU commands.
4285 case IEEE80211_AMPDU_TX_START:
4286 case IEEE80211_AMPDU_TX_STOP:
4287 case IEEE80211_AMPDU_TX_OPERATIONAL:
4292 wl1271_error("Incorrect ampdu action id=%x\n", action);
4296 wl1271_ps_elp_sleep(wl);
4299 mutex_unlock(&wl->mutex);
4304 static int wl12xx_set_bitrate_mask(struct ieee80211_hw *hw,
4305 struct ieee80211_vif *vif,
4306 const struct cfg80211_bitrate_mask *mask)
4308 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
4309 struct wl1271 *wl = hw->priv;
4312 wl1271_debug(DEBUG_MAC80211, "mac80211 set_bitrate_mask 0x%x 0x%x",
4313 mask->control[NL80211_BAND_2GHZ].legacy,
4314 mask->control[NL80211_BAND_5GHZ].legacy);
4316 mutex_lock(&wl->mutex);
4318 for (i = 0; i < IEEE80211_NUM_BANDS; i++)
4319 wlvif->bitrate_masks[i] =
4320 wl1271_tx_enabled_rates_get(wl,
4321 mask->control[i].legacy,
4324 if (unlikely(wl->state == WL1271_STATE_OFF))
4327 if (wlvif->bss_type == BSS_TYPE_STA_BSS &&
4328 !test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags)) {
4330 ret = wl1271_ps_elp_wakeup(wl);
4334 wl1271_set_band_rate(wl, wlvif);
4336 wl1271_tx_min_rate_get(wl, wlvif->basic_rate_set);
4337 ret = wl1271_acx_sta_rate_policies(wl, wlvif);
4339 wl1271_ps_elp_sleep(wl);
4342 mutex_unlock(&wl->mutex);
4347 static void wl12xx_op_channel_switch(struct ieee80211_hw *hw,
4348 struct ieee80211_channel_switch *ch_switch)
4350 struct wl1271 *wl = hw->priv;
4351 struct wl12xx_vif *wlvif;
4354 wl1271_debug(DEBUG_MAC80211, "mac80211 channel switch");
4356 mutex_lock(&wl->mutex);
4358 if (unlikely(wl->state == WL1271_STATE_OFF)) {
4359 wl12xx_for_each_wlvif_sta(wl, wlvif) {
4360 struct ieee80211_vif *vif = wl12xx_wlvif_to_vif(wlvif);
4361 ieee80211_chswitch_done(vif, false);
4366 ret = wl1271_ps_elp_wakeup(wl);
4370 /* TODO: change mac80211 to pass vif as param */
4371 wl12xx_for_each_wlvif_sta(wl, wlvif) {
4372 ret = wl12xx_cmd_channel_switch(wl, ch_switch);
4375 set_bit(WLVIF_FLAG_CS_PROGRESS, &wlvif->flags);
4378 wl1271_ps_elp_sleep(wl);
4381 mutex_unlock(&wl->mutex);
4384 static bool wl1271_tx_frames_pending(struct ieee80211_hw *hw)
4386 struct wl1271 *wl = hw->priv;
4389 mutex_lock(&wl->mutex);
4391 if (unlikely(wl->state == WL1271_STATE_OFF))
4394 /* packets are considered pending if in the TX queue or the FW */
4395 ret = (wl1271_tx_total_queue_count(wl) > 0) || (wl->tx_frames_cnt > 0);
4397 mutex_unlock(&wl->mutex);
4402 /* can't be const, mac80211 writes to this */
4403 static struct ieee80211_rate wl1271_rates[] = {
4405 .hw_value = CONF_HW_BIT_RATE_1MBPS,
4406 .hw_value_short = CONF_HW_BIT_RATE_1MBPS, },
4408 .hw_value = CONF_HW_BIT_RATE_2MBPS,
4409 .hw_value_short = CONF_HW_BIT_RATE_2MBPS,
4410 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
4412 .hw_value = CONF_HW_BIT_RATE_5_5MBPS,
4413 .hw_value_short = CONF_HW_BIT_RATE_5_5MBPS,
4414 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
4416 .hw_value = CONF_HW_BIT_RATE_11MBPS,
4417 .hw_value_short = CONF_HW_BIT_RATE_11MBPS,
4418 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
4420 .hw_value = CONF_HW_BIT_RATE_6MBPS,
4421 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
4423 .hw_value = CONF_HW_BIT_RATE_9MBPS,
4424 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
4426 .hw_value = CONF_HW_BIT_RATE_12MBPS,
4427 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
4429 .hw_value = CONF_HW_BIT_RATE_18MBPS,
4430 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
4432 .hw_value = CONF_HW_BIT_RATE_24MBPS,
4433 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
4435 .hw_value = CONF_HW_BIT_RATE_36MBPS,
4436 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
4438 .hw_value = CONF_HW_BIT_RATE_48MBPS,
4439 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
4441 .hw_value = CONF_HW_BIT_RATE_54MBPS,
4442 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
4445 /* can't be const, mac80211 writes to this */
4446 static struct ieee80211_channel wl1271_channels[] = {
4447 { .hw_value = 1, .center_freq = 2412, .max_power = 25 },
4448 { .hw_value = 2, .center_freq = 2417, .max_power = 25 },
4449 { .hw_value = 3, .center_freq = 2422, .max_power = 25 },
4450 { .hw_value = 4, .center_freq = 2427, .max_power = 25 },
4451 { .hw_value = 5, .center_freq = 2432, .max_power = 25 },
4452 { .hw_value = 6, .center_freq = 2437, .max_power = 25 },
4453 { .hw_value = 7, .center_freq = 2442, .max_power = 25 },
4454 { .hw_value = 8, .center_freq = 2447, .max_power = 25 },
4455 { .hw_value = 9, .center_freq = 2452, .max_power = 25 },
4456 { .hw_value = 10, .center_freq = 2457, .max_power = 25 },
4457 { .hw_value = 11, .center_freq = 2462, .max_power = 25 },
4458 { .hw_value = 12, .center_freq = 2467, .max_power = 25 },
4459 { .hw_value = 13, .center_freq = 2472, .max_power = 25 },
4460 { .hw_value = 14, .center_freq = 2484, .max_power = 25 },
4463 /* mapping to indexes for wl1271_rates */
4464 static const u8 wl1271_rate_to_idx_2ghz[] = {
4465 /* MCS rates are used only with 11n */
4466 7, /* CONF_HW_RXTX_RATE_MCS7 */
4467 6, /* CONF_HW_RXTX_RATE_MCS6 */
4468 5, /* CONF_HW_RXTX_RATE_MCS5 */
4469 4, /* CONF_HW_RXTX_RATE_MCS4 */
4470 3, /* CONF_HW_RXTX_RATE_MCS3 */
4471 2, /* CONF_HW_RXTX_RATE_MCS2 */
4472 1, /* CONF_HW_RXTX_RATE_MCS1 */
4473 0, /* CONF_HW_RXTX_RATE_MCS0 */
4475 11, /* CONF_HW_RXTX_RATE_54 */
4476 10, /* CONF_HW_RXTX_RATE_48 */
4477 9, /* CONF_HW_RXTX_RATE_36 */
4478 8, /* CONF_HW_RXTX_RATE_24 */
4480 /* TI-specific rate */
4481 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
4483 7, /* CONF_HW_RXTX_RATE_18 */
4484 6, /* CONF_HW_RXTX_RATE_12 */
4485 3, /* CONF_HW_RXTX_RATE_11 */
4486 5, /* CONF_HW_RXTX_RATE_9 */
4487 4, /* CONF_HW_RXTX_RATE_6 */
4488 2, /* CONF_HW_RXTX_RATE_5_5 */
4489 1, /* CONF_HW_RXTX_RATE_2 */
4490 0 /* CONF_HW_RXTX_RATE_1 */
4493 /* 11n STA capabilities */
4494 #define HW_RX_HIGHEST_RATE 72
4496 #define WL12XX_HT_CAP { \
4497 .cap = IEEE80211_HT_CAP_GRN_FLD | IEEE80211_HT_CAP_SGI_20 | \
4498 (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT), \
4499 .ht_supported = true, \
4500 .ampdu_factor = IEEE80211_HT_MAX_AMPDU_8K, \
4501 .ampdu_density = IEEE80211_HT_MPDU_DENSITY_8, \
4503 .rx_mask = { 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, \
4504 .rx_highest = cpu_to_le16(HW_RX_HIGHEST_RATE), \
4505 .tx_params = IEEE80211_HT_MCS_TX_DEFINED, \
4509 /* can't be const, mac80211 writes to this */
4510 static struct ieee80211_supported_band wl1271_band_2ghz = {
4511 .channels = wl1271_channels,
4512 .n_channels = ARRAY_SIZE(wl1271_channels),
4513 .bitrates = wl1271_rates,
4514 .n_bitrates = ARRAY_SIZE(wl1271_rates),
4515 .ht_cap = WL12XX_HT_CAP,
4518 /* 5 GHz data rates for WL1273 */
4519 static struct ieee80211_rate wl1271_rates_5ghz[] = {
4521 .hw_value = CONF_HW_BIT_RATE_6MBPS,
4522 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
4524 .hw_value = CONF_HW_BIT_RATE_9MBPS,
4525 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
4527 .hw_value = CONF_HW_BIT_RATE_12MBPS,
4528 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
4530 .hw_value = CONF_HW_BIT_RATE_18MBPS,
4531 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
4533 .hw_value = CONF_HW_BIT_RATE_24MBPS,
4534 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
4536 .hw_value = CONF_HW_BIT_RATE_36MBPS,
4537 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
4539 .hw_value = CONF_HW_BIT_RATE_48MBPS,
4540 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
4542 .hw_value = CONF_HW_BIT_RATE_54MBPS,
4543 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
4546 /* 5 GHz band channels for WL1273 */
4547 static struct ieee80211_channel wl1271_channels_5ghz[] = {
4548 { .hw_value = 7, .center_freq = 5035, .max_power = 25 },
4549 { .hw_value = 8, .center_freq = 5040, .max_power = 25 },
4550 { .hw_value = 9, .center_freq = 5045, .max_power = 25 },
4551 { .hw_value = 11, .center_freq = 5055, .max_power = 25 },
4552 { .hw_value = 12, .center_freq = 5060, .max_power = 25 },
4553 { .hw_value = 16, .center_freq = 5080, .max_power = 25 },
4554 { .hw_value = 34, .center_freq = 5170, .max_power = 25 },
4555 { .hw_value = 36, .center_freq = 5180, .max_power = 25 },
4556 { .hw_value = 38, .center_freq = 5190, .max_power = 25 },
4557 { .hw_value = 40, .center_freq = 5200, .max_power = 25 },
4558 { .hw_value = 42, .center_freq = 5210, .max_power = 25 },
4559 { .hw_value = 44, .center_freq = 5220, .max_power = 25 },
4560 { .hw_value = 46, .center_freq = 5230, .max_power = 25 },
4561 { .hw_value = 48, .center_freq = 5240, .max_power = 25 },
4562 { .hw_value = 52, .center_freq = 5260, .max_power = 25 },
4563 { .hw_value = 56, .center_freq = 5280, .max_power = 25 },
4564 { .hw_value = 60, .center_freq = 5300, .max_power = 25 },
4565 { .hw_value = 64, .center_freq = 5320, .max_power = 25 },
4566 { .hw_value = 100, .center_freq = 5500, .max_power = 25 },
4567 { .hw_value = 104, .center_freq = 5520, .max_power = 25 },
4568 { .hw_value = 108, .center_freq = 5540, .max_power = 25 },
4569 { .hw_value = 112, .center_freq = 5560, .max_power = 25 },
4570 { .hw_value = 116, .center_freq = 5580, .max_power = 25 },
4571 { .hw_value = 120, .center_freq = 5600, .max_power = 25 },
4572 { .hw_value = 124, .center_freq = 5620, .max_power = 25 },
4573 { .hw_value = 128, .center_freq = 5640, .max_power = 25 },
4574 { .hw_value = 132, .center_freq = 5660, .max_power = 25 },
4575 { .hw_value = 136, .center_freq = 5680, .max_power = 25 },
4576 { .hw_value = 140, .center_freq = 5700, .max_power = 25 },
4577 { .hw_value = 149, .center_freq = 5745, .max_power = 25 },
4578 { .hw_value = 153, .center_freq = 5765, .max_power = 25 },
4579 { .hw_value = 157, .center_freq = 5785, .max_power = 25 },
4580 { .hw_value = 161, .center_freq = 5805, .max_power = 25 },
4581 { .hw_value = 165, .center_freq = 5825, .max_power = 25 },
4584 /* mapping to indexes for wl1271_rates_5ghz */
4585 static const u8 wl1271_rate_to_idx_5ghz[] = {
4586 /* MCS rates are used only with 11n */
4587 7, /* CONF_HW_RXTX_RATE_MCS7 */
4588 6, /* CONF_HW_RXTX_RATE_MCS6 */
4589 5, /* CONF_HW_RXTX_RATE_MCS5 */
4590 4, /* CONF_HW_RXTX_RATE_MCS4 */
4591 3, /* CONF_HW_RXTX_RATE_MCS3 */
4592 2, /* CONF_HW_RXTX_RATE_MCS2 */
4593 1, /* CONF_HW_RXTX_RATE_MCS1 */
4594 0, /* CONF_HW_RXTX_RATE_MCS0 */
4596 7, /* CONF_HW_RXTX_RATE_54 */
4597 6, /* CONF_HW_RXTX_RATE_48 */
4598 5, /* CONF_HW_RXTX_RATE_36 */
4599 4, /* CONF_HW_RXTX_RATE_24 */
4601 /* TI-specific rate */
4602 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_22 */
4604 3, /* CONF_HW_RXTX_RATE_18 */
4605 2, /* CONF_HW_RXTX_RATE_12 */
4606 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_11 */
4607 1, /* CONF_HW_RXTX_RATE_9 */
4608 0, /* CONF_HW_RXTX_RATE_6 */
4609 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_5_5 */
4610 CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_2 */
4611 CONF_HW_RXTX_RATE_UNSUPPORTED /* CONF_HW_RXTX_RATE_1 */
4614 static struct ieee80211_supported_band wl1271_band_5ghz = {
4615 .channels = wl1271_channels_5ghz,
4616 .n_channels = ARRAY_SIZE(wl1271_channels_5ghz),
4617 .bitrates = wl1271_rates_5ghz,
4618 .n_bitrates = ARRAY_SIZE(wl1271_rates_5ghz),
4619 .ht_cap = WL12XX_HT_CAP,
4622 static const u8 *wl1271_band_rate_to_idx[] = {
4623 [IEEE80211_BAND_2GHZ] = wl1271_rate_to_idx_2ghz,
4624 [IEEE80211_BAND_5GHZ] = wl1271_rate_to_idx_5ghz
4627 static const struct ieee80211_ops wl1271_ops = {
4628 .start = wl1271_op_start,
4629 .stop = wl1271_op_stop,
4630 .add_interface = wl1271_op_add_interface,
4631 .remove_interface = wl1271_op_remove_interface,
4633 .suspend = wl1271_op_suspend,
4634 .resume = wl1271_op_resume,
4636 .config = wl1271_op_config,
4637 .prepare_multicast = wl1271_op_prepare_multicast,
4638 .configure_filter = wl1271_op_configure_filter,
4640 .set_key = wl1271_op_set_key,
4641 .hw_scan = wl1271_op_hw_scan,
4642 .cancel_hw_scan = wl1271_op_cancel_hw_scan,
4643 .sched_scan_start = wl1271_op_sched_scan_start,
4644 .sched_scan_stop = wl1271_op_sched_scan_stop,
4645 .bss_info_changed = wl1271_op_bss_info_changed,
4646 .set_frag_threshold = wl1271_op_set_frag_threshold,
4647 .set_rts_threshold = wl1271_op_set_rts_threshold,
4648 .conf_tx = wl1271_op_conf_tx,
4649 .get_tsf = wl1271_op_get_tsf,
4650 .get_survey = wl1271_op_get_survey,
4651 .sta_add = wl1271_op_sta_add,
4652 .sta_remove = wl1271_op_sta_remove,
4653 .ampdu_action = wl1271_op_ampdu_action,
4654 .tx_frames_pending = wl1271_tx_frames_pending,
4655 .set_bitrate_mask = wl12xx_set_bitrate_mask,
4656 .channel_switch = wl12xx_op_channel_switch,
4657 CFG80211_TESTMODE_CMD(wl1271_tm_cmd)
4661 u8 wl1271_rate_to_idx(int rate, enum ieee80211_band band)
4665 BUG_ON(band >= sizeof(wl1271_band_rate_to_idx)/sizeof(u8 *));
4667 if (unlikely(rate >= CONF_HW_RXTX_RATE_MAX)) {
4668 wl1271_error("Illegal RX rate from HW: %d", rate);
4672 idx = wl1271_band_rate_to_idx[band][rate];
4673 if (unlikely(idx == CONF_HW_RXTX_RATE_UNSUPPORTED)) {
4674 wl1271_error("Unsupported RX rate from HW: %d", rate);
4681 static ssize_t wl1271_sysfs_show_bt_coex_state(struct device *dev,
4682 struct device_attribute *attr,
4685 struct wl1271 *wl = dev_get_drvdata(dev);
4690 mutex_lock(&wl->mutex);
4691 len = snprintf(buf, len, "%d\n\n0 - off\n1 - on\n",
4693 mutex_unlock(&wl->mutex);
4699 static ssize_t wl1271_sysfs_store_bt_coex_state(struct device *dev,
4700 struct device_attribute *attr,
4701 const char *buf, size_t count)
4703 struct wl1271 *wl = dev_get_drvdata(dev);
4707 ret = kstrtoul(buf, 10, &res);
4709 wl1271_warning("incorrect value written to bt_coex_mode");
4713 mutex_lock(&wl->mutex);
4717 if (res == wl->sg_enabled)
4720 wl->sg_enabled = res;
4722 if (wl->state == WL1271_STATE_OFF)
4725 ret = wl1271_ps_elp_wakeup(wl);
4729 wl1271_acx_sg_enable(wl, wl->sg_enabled);
4730 wl1271_ps_elp_sleep(wl);
4733 mutex_unlock(&wl->mutex);
4737 static DEVICE_ATTR(bt_coex_state, S_IRUGO | S_IWUSR,
4738 wl1271_sysfs_show_bt_coex_state,
4739 wl1271_sysfs_store_bt_coex_state);
4741 static ssize_t wl1271_sysfs_show_hw_pg_ver(struct device *dev,
4742 struct device_attribute *attr,
4745 struct wl1271 *wl = dev_get_drvdata(dev);
4750 mutex_lock(&wl->mutex);
4751 if (wl->hw_pg_ver >= 0)
4752 len = snprintf(buf, len, "%d\n", wl->hw_pg_ver);
4754 len = snprintf(buf, len, "n/a\n");
4755 mutex_unlock(&wl->mutex);
4760 static DEVICE_ATTR(hw_pg_ver, S_IRUGO,
4761 wl1271_sysfs_show_hw_pg_ver, NULL);
4763 static ssize_t wl1271_sysfs_read_fwlog(struct file *filp, struct kobject *kobj,
4764 struct bin_attribute *bin_attr,
4765 char *buffer, loff_t pos, size_t count)
4767 struct device *dev = container_of(kobj, struct device, kobj);
4768 struct wl1271 *wl = dev_get_drvdata(dev);
4772 ret = mutex_lock_interruptible(&wl->mutex);
4774 return -ERESTARTSYS;
4776 /* Let only one thread read the log at a time, blocking others */
4777 while (wl->fwlog_size == 0) {
4780 prepare_to_wait_exclusive(&wl->fwlog_waitq,
4782 TASK_INTERRUPTIBLE);
4784 if (wl->fwlog_size != 0) {
4785 finish_wait(&wl->fwlog_waitq, &wait);
4789 mutex_unlock(&wl->mutex);
4792 finish_wait(&wl->fwlog_waitq, &wait);
4794 if (signal_pending(current))
4795 return -ERESTARTSYS;
4797 ret = mutex_lock_interruptible(&wl->mutex);
4799 return -ERESTARTSYS;
4802 /* Check if the fwlog is still valid */
4803 if (wl->fwlog_size < 0) {
4804 mutex_unlock(&wl->mutex);
4808 /* Seeking is not supported - old logs are not kept. Disregard pos. */
4809 len = min(count, (size_t)wl->fwlog_size);
4810 wl->fwlog_size -= len;
4811 memcpy(buffer, wl->fwlog, len);
4813 /* Make room for new messages */
4814 memmove(wl->fwlog, wl->fwlog + len, wl->fwlog_size);
4816 mutex_unlock(&wl->mutex);
4821 static struct bin_attribute fwlog_attr = {
4822 .attr = {.name = "fwlog", .mode = S_IRUSR},
4823 .read = wl1271_sysfs_read_fwlog,
4826 static int wl1271_register_hw(struct wl1271 *wl)
4830 if (wl->mac80211_registered)
4833 ret = wl1271_fetch_nvs(wl);
4835 /* NOTE: The wl->nvs->nvs element must be first, in
4836 * order to simplify the casting, we assume it is at
4837 * the beginning of the wl->nvs structure.
4839 u8 *nvs_ptr = (u8 *)wl->nvs;
4841 wl->mac_addr[0] = nvs_ptr[11];
4842 wl->mac_addr[1] = nvs_ptr[10];
4843 wl->mac_addr[2] = nvs_ptr[6];
4844 wl->mac_addr[3] = nvs_ptr[5];
4845 wl->mac_addr[4] = nvs_ptr[4];
4846 wl->mac_addr[5] = nvs_ptr[3];
4849 SET_IEEE80211_PERM_ADDR(wl->hw, wl->mac_addr);
4851 ret = ieee80211_register_hw(wl->hw);
4853 wl1271_error("unable to register mac80211 hw: %d", ret);
4857 wl->mac80211_registered = true;
4859 wl1271_debugfs_init(wl);
4861 register_netdevice_notifier(&wl1271_dev_notifier);
4863 wl1271_notice("loaded");
4868 static void wl1271_unregister_hw(struct wl1271 *wl)
4870 if (wl->state == WL1271_STATE_PLT)
4871 __wl1271_plt_stop(wl);
4873 unregister_netdevice_notifier(&wl1271_dev_notifier);
4874 ieee80211_unregister_hw(wl->hw);
4875 wl->mac80211_registered = false;
4879 static int wl1271_init_ieee80211(struct wl1271 *wl)
4881 static const u32 cipher_suites[] = {
4882 WLAN_CIPHER_SUITE_WEP40,
4883 WLAN_CIPHER_SUITE_WEP104,
4884 WLAN_CIPHER_SUITE_TKIP,
4885 WLAN_CIPHER_SUITE_CCMP,
4886 WL1271_CIPHER_SUITE_GEM,
4889 /* The tx descriptor buffer and the TKIP space. */
4890 wl->hw->extra_tx_headroom = WL1271_TKIP_IV_SPACE +
4891 sizeof(struct wl1271_tx_hw_descr);
4894 /* FIXME: find a proper value */
4895 wl->hw->channel_change_time = 10000;
4896 wl->hw->max_listen_interval = wl->conf.conn.max_listen_interval;
4898 wl->hw->flags = IEEE80211_HW_SIGNAL_DBM |
4899 IEEE80211_HW_BEACON_FILTER |
4900 IEEE80211_HW_SUPPORTS_PS |
4901 IEEE80211_HW_SUPPORTS_UAPSD |
4902 IEEE80211_HW_HAS_RATE_CONTROL |
4903 IEEE80211_HW_CONNECTION_MONITOR |
4904 IEEE80211_HW_SUPPORTS_CQM_RSSI |
4905 IEEE80211_HW_REPORTS_TX_ACK_STATUS |
4906 IEEE80211_HW_SPECTRUM_MGMT |
4907 IEEE80211_HW_AP_LINK_PS |
4908 IEEE80211_HW_AMPDU_AGGREGATION |
4909 IEEE80211_HW_TX_AMPDU_SETUP_IN_HW;
4911 wl->hw->wiphy->cipher_suites = cipher_suites;
4912 wl->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
4914 wl->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
4915 BIT(NL80211_IFTYPE_ADHOC) | BIT(NL80211_IFTYPE_AP) |
4916 BIT(NL80211_IFTYPE_P2P_CLIENT) | BIT(NL80211_IFTYPE_P2P_GO);
4917 wl->hw->wiphy->max_scan_ssids = 1;
4918 wl->hw->wiphy->max_sched_scan_ssids = 16;
4919 wl->hw->wiphy->max_match_sets = 16;
4921 * Maximum length of elements in scanning probe request templates
4922 * should be the maximum length possible for a template, without
4923 * the IEEE80211 header of the template
4925 wl->hw->wiphy->max_scan_ie_len = WL1271_CMD_TEMPL_DFLT_SIZE -
4926 sizeof(struct ieee80211_header);
4928 wl->hw->wiphy->max_sched_scan_ie_len = WL1271_CMD_TEMPL_DFLT_SIZE -
4929 sizeof(struct ieee80211_header);
4931 wl->hw->wiphy->flags |= WIPHY_FLAG_AP_UAPSD;
4933 /* make sure all our channels fit in the scanned_ch bitmask */
4934 BUILD_BUG_ON(ARRAY_SIZE(wl1271_channels) +
4935 ARRAY_SIZE(wl1271_channels_5ghz) >
4936 WL1271_MAX_CHANNELS);
4938 * We keep local copies of the band structs because we need to
4939 * modify them on a per-device basis.
4941 memcpy(&wl->bands[IEEE80211_BAND_2GHZ], &wl1271_band_2ghz,
4942 sizeof(wl1271_band_2ghz));
4943 memcpy(&wl->bands[IEEE80211_BAND_5GHZ], &wl1271_band_5ghz,
4944 sizeof(wl1271_band_5ghz));
4946 wl->hw->wiphy->bands[IEEE80211_BAND_2GHZ] =
4947 &wl->bands[IEEE80211_BAND_2GHZ];
4948 wl->hw->wiphy->bands[IEEE80211_BAND_5GHZ] =
4949 &wl->bands[IEEE80211_BAND_5GHZ];
4952 wl->hw->max_rates = 1;
4954 wl->hw->wiphy->reg_notifier = wl1271_reg_notify;
4956 /* the FW answers probe-requests in AP-mode */
4957 wl->hw->wiphy->flags |= WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD;
4958 wl->hw->wiphy->probe_resp_offload =
4959 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS |
4960 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2 |
4961 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P;
4963 SET_IEEE80211_DEV(wl->hw, wl->dev);
4965 wl->hw->sta_data_size = sizeof(struct wl1271_station);
4966 wl->hw->vif_data_size = sizeof(struct wl12xx_vif);
4968 wl->hw->max_rx_aggregation_subframes = 8;
4973 #define WL1271_DEFAULT_CHANNEL 0
4975 static struct ieee80211_hw *wl1271_alloc_hw(void)
4977 struct ieee80211_hw *hw;
4982 BUILD_BUG_ON(AP_MAX_STATIONS > WL12XX_MAX_LINKS);
4984 hw = ieee80211_alloc_hw(sizeof(*wl), &wl1271_ops);
4986 wl1271_error("could not alloc ieee80211_hw");
4992 memset(wl, 0, sizeof(*wl));
4994 INIT_LIST_HEAD(&wl->list);
4995 INIT_LIST_HEAD(&wl->wlvif_list);
4999 for (i = 0; i < NUM_TX_QUEUES; i++)
5000 for (j = 0; j < WL12XX_MAX_LINKS; j++)
5001 skb_queue_head_init(&wl->links[j].tx_queue[i]);
5003 skb_queue_head_init(&wl->deferred_rx_queue);
5004 skb_queue_head_init(&wl->deferred_tx_queue);
5006 INIT_DELAYED_WORK(&wl->elp_work, wl1271_elp_work);
5007 INIT_WORK(&wl->netstack_work, wl1271_netstack_work);
5008 INIT_WORK(&wl->tx_work, wl1271_tx_work);
5009 INIT_WORK(&wl->recovery_work, wl1271_recovery_work);
5010 INIT_DELAYED_WORK(&wl->scan_complete_work, wl1271_scan_complete_work);
5012 wl->freezable_wq = create_freezable_workqueue("wl12xx_wq");
5013 if (!wl->freezable_wq) {
5018 wl->channel = WL1271_DEFAULT_CHANNEL;
5020 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
5021 wl->band = IEEE80211_BAND_2GHZ;
5024 wl->sg_enabled = true;
5027 wl->ap_fw_ps_map = 0;
5029 wl->platform_quirks = 0;
5030 wl->sched_scanning = false;
5031 wl->tx_spare_blocks = TX_HW_BLOCK_SPARE_DEFAULT;
5032 wl->system_hlid = WL12XX_SYSTEM_HLID;
5033 wl->active_sta_count = 0;
5035 init_waitqueue_head(&wl->fwlog_waitq);
5037 /* The system link is always allocated */
5038 __set_bit(WL12XX_SYSTEM_HLID, wl->links_map);
5040 memset(wl->tx_frames_map, 0, sizeof(wl->tx_frames_map));
5041 for (i = 0; i < ACX_TX_DESCRIPTORS; i++)
5042 wl->tx_frames[i] = NULL;
5044 spin_lock_init(&wl->wl_lock);
5046 wl->state = WL1271_STATE_OFF;
5047 mutex_init(&wl->mutex);
5049 /* Apply default driver configuration. */
5050 wl1271_conf_init(wl);
5052 order = get_order(WL1271_AGGR_BUFFER_SIZE);
5053 wl->aggr_buf = (u8 *)__get_free_pages(GFP_KERNEL, order);
5054 if (!wl->aggr_buf) {
5059 wl->dummy_packet = wl12xx_alloc_dummy_packet(wl);
5060 if (!wl->dummy_packet) {
5065 /* Allocate one page for the FW log */
5066 wl->fwlog = (u8 *)get_zeroed_page(GFP_KERNEL);
5069 goto err_dummy_packet;
5075 dev_kfree_skb(wl->dummy_packet);
5078 free_pages((unsigned long)wl->aggr_buf, order);
5081 destroy_workqueue(wl->freezable_wq);
5084 wl1271_debugfs_exit(wl);
5085 ieee80211_free_hw(hw);
5089 return ERR_PTR(ret);
5092 static int wl1271_free_hw(struct wl1271 *wl)
5094 /* Unblock any fwlog readers */
5095 mutex_lock(&wl->mutex);
5096 wl->fwlog_size = -1;
5097 wake_up_interruptible_all(&wl->fwlog_waitq);
5098 mutex_unlock(&wl->mutex);
5100 device_remove_bin_file(wl->dev, &fwlog_attr);
5102 device_remove_file(wl->dev, &dev_attr_hw_pg_ver);
5104 device_remove_file(wl->dev, &dev_attr_bt_coex_state);
5105 free_page((unsigned long)wl->fwlog);
5106 dev_kfree_skb(wl->dummy_packet);
5107 free_pages((unsigned long)wl->aggr_buf,
5108 get_order(WL1271_AGGR_BUFFER_SIZE));
5110 wl1271_debugfs_exit(wl);
5117 kfree(wl->fw_status);
5118 kfree(wl->tx_res_if);
5119 destroy_workqueue(wl->freezable_wq);
5121 ieee80211_free_hw(wl->hw);
5126 static irqreturn_t wl12xx_hardirq(int irq, void *cookie)
5128 struct wl1271 *wl = cookie;
5129 unsigned long flags;
5131 wl1271_debug(DEBUG_IRQ, "IRQ");
5133 /* complete the ELP completion */
5134 spin_lock_irqsave(&wl->wl_lock, flags);
5135 set_bit(WL1271_FLAG_IRQ_RUNNING, &wl->flags);
5136 if (wl->elp_compl) {
5137 complete(wl->elp_compl);
5138 wl->elp_compl = NULL;
5141 if (test_bit(WL1271_FLAG_SUSPENDED, &wl->flags)) {
5142 /* don't enqueue a work right now. mark it as pending */
5143 set_bit(WL1271_FLAG_PENDING_WORK, &wl->flags);
5144 wl1271_debug(DEBUG_IRQ, "should not enqueue work");
5145 disable_irq_nosync(wl->irq);
5146 pm_wakeup_event(wl->dev, 0);
5147 spin_unlock_irqrestore(&wl->wl_lock, flags);
5150 spin_unlock_irqrestore(&wl->wl_lock, flags);
5152 return IRQ_WAKE_THREAD;
5155 static int __devinit wl12xx_probe(struct platform_device *pdev)
5157 struct wl12xx_platform_data *pdata = pdev->dev.platform_data;
5158 struct ieee80211_hw *hw;
5160 unsigned long irqflags;
5163 hw = wl1271_alloc_hw();
5165 wl1271_error("can't allocate hw");
5171 wl->irq = platform_get_irq(pdev, 0);
5172 wl->ref_clock = pdata->board_ref_clock;
5173 wl->tcxo_clock = pdata->board_tcxo_clock;
5174 wl->platform_quirks = pdata->platform_quirks;
5175 wl->set_power = pdata->set_power;
5176 wl->dev = &pdev->dev;
5177 wl->if_ops = pdata->ops;
5179 platform_set_drvdata(pdev, wl);
5181 if (wl->platform_quirks & WL12XX_PLATFORM_QUIRK_EDGE_IRQ)
5182 irqflags = IRQF_TRIGGER_RISING;
5184 irqflags = IRQF_TRIGGER_HIGH | IRQF_ONESHOT;
5186 ret = request_threaded_irq(wl->irq, wl12xx_hardirq, wl1271_irq,
5190 wl1271_error("request_irq() failed: %d", ret);
5194 ret = enable_irq_wake(wl->irq);
5196 wl->irq_wake_enabled = true;
5197 device_init_wakeup(wl->dev, 1);
5198 if (pdata->pwr_in_suspend)
5199 hw->wiphy->wowlan.flags = WIPHY_WOWLAN_ANY;
5202 disable_irq(wl->irq);
5204 ret = wl1271_init_ieee80211(wl);
5208 ret = wl1271_register_hw(wl);
5212 /* Create sysfs file to control bt coex state */
5213 ret = device_create_file(wl->dev, &dev_attr_bt_coex_state);
5215 wl1271_error("failed to create sysfs file bt_coex_state");
5219 /* Create sysfs file to get HW PG version */
5220 ret = device_create_file(wl->dev, &dev_attr_hw_pg_ver);
5222 wl1271_error("failed to create sysfs file hw_pg_ver");
5223 goto out_bt_coex_state;
5226 /* Create sysfs file for the FW log */
5227 ret = device_create_bin_file(wl->dev, &fwlog_attr);
5229 wl1271_error("failed to create sysfs file fwlog");
5236 device_remove_file(wl->dev, &dev_attr_hw_pg_ver);
5239 device_remove_file(wl->dev, &dev_attr_bt_coex_state);
5242 free_irq(wl->irq, wl);
5251 static int __devexit wl12xx_remove(struct platform_device *pdev)
5253 struct wl1271 *wl = platform_get_drvdata(pdev);
5255 if (wl->irq_wake_enabled) {
5256 device_init_wakeup(wl->dev, 0);
5257 disable_irq_wake(wl->irq);
5259 wl1271_unregister_hw(wl);
5260 free_irq(wl->irq, wl);
5266 static const struct platform_device_id wl12xx_id_table[] __devinitconst = {
5268 { } /* Terminating Entry */
5270 MODULE_DEVICE_TABLE(platform, wl12xx_id_table);
5272 static struct platform_driver wl12xx_driver = {
5273 .probe = wl12xx_probe,
5274 .remove = __devexit_p(wl12xx_remove),
5275 .id_table = wl12xx_id_table,
5277 .name = "wl12xx_driver",
5278 .owner = THIS_MODULE,
5282 static int __init wl12xx_init(void)
5284 return platform_driver_register(&wl12xx_driver);
5286 module_init(wl12xx_init);
5288 static void __exit wl12xx_exit(void)
5290 platform_driver_unregister(&wl12xx_driver);
5292 module_exit(wl12xx_exit);
5294 u32 wl12xx_debug_level = DEBUG_NONE;
5295 EXPORT_SYMBOL_GPL(wl12xx_debug_level);
5296 module_param_named(debug_level, wl12xx_debug_level, uint, S_IRUSR | S_IWUSR);
5297 MODULE_PARM_DESC(debug_level, "wl12xx debugging level");
5299 module_param_named(fwlog, fwlog_param, charp, 0);
5300 MODULE_PARM_DESC(keymap,
5301 "FW logger options: continuous, ondemand, dbgpins or disable");
5303 module_param(bug_on_recovery, bool, S_IRUSR | S_IWUSR);
5304 MODULE_PARM_DESC(bug_on_recovery, "BUG() on fw recovery");
5306 MODULE_LICENSE("GPL");
5307 MODULE_AUTHOR("Luciano Coelho <coelho@ti.com>");
5308 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");