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
)
644 struct conf_tx_ac_category
*conf_ac
;
645 struct conf_tx_tid
*conf_tid
;
648 if (wl
->chip
.id
== CHIP_ID_1283_PG20
)
649 ret
= wl128x_cmd_general_parms(wl
);
651 ret
= wl1271_cmd_general_parms(wl
);
655 if (wl
->chip
.id
== CHIP_ID_1283_PG20
)
656 ret
= wl128x_cmd_radio_parms(wl
);
658 ret
= wl1271_cmd_radio_parms(wl
);
662 if (wl
->chip
.id
!= CHIP_ID_1283_PG20
) {
663 ret
= wl1271_cmd_ext_radio_parms(wl
);
670 /* Chip-specific initializations */
671 ret
= wl1271_chip_specific_init(wl
);
675 ret
= wl1271_init_templates_config(wl
);
679 ret
= wl1271_acx_init_mem_config(wl
);
683 /* PHY layer config */
684 ret
= wl1271_init_phy_config(wl
);
686 goto out_free_memmap
;
688 ret
= wl1271_acx_dco_itrim_params(wl
);
690 goto out_free_memmap
;
692 /* Initialize connection monitoring thresholds */
693 ret
= wl1271_acx_conn_monit_params(wl
, NULL
, false); /* TODO: fix */
695 goto out_free_memmap
;
697 /* Bluetooth WLAN coexistence */
698 ret
= wl1271_init_pta(wl
);
700 goto out_free_memmap
;
702 /* FM WLAN coexistence */
703 ret
= wl1271_acx_fm_coex(wl
);
705 goto out_free_memmap
;
707 /* Energy detection */
708 ret
= wl1271_init_energy_detection(wl
);
710 goto out_free_memmap
;
712 ret
= wl12xx_acx_mem_cfg(wl
);
714 goto out_free_memmap
;
716 /* Default fragmentation threshold */
717 ret
= wl1271_acx_frag_threshold(wl
, wl
->conf
.tx
.frag_threshold
);
719 goto out_free_memmap
;
721 /* Default TID/AC configuration */
722 BUG_ON(wl
->conf
.tx
.tid_conf_count
!= wl
->conf
.tx
.ac_conf_count
);
723 for (i
= 0; i
< wl
->conf
.tx
.tid_conf_count
; i
++) {
724 conf_ac
= &wl
->conf
.tx
.ac_conf
[i
];
726 ret
= wl1271_acx_ac_cfg(wl
, NULL
, conf_ac
->ac
, conf_ac
->cw_min
,
727 conf_ac
->cw_max
, conf_ac
->aifsn
,
728 conf_ac
->tx_op_limit
);
730 goto out_free_memmap
;
732 conf_tid
= &wl
->conf
.tx
.tid_conf
[i
];
734 ret
= wl1271_acx_tid_cfg(wl
, NULL
, conf_tid
->queue_id
,
735 conf_tid
->channel_type
,
738 conf_tid
->ack_policy
,
739 conf_tid
->apsd_conf
[0],
740 conf_tid
->apsd_conf
[1]);
742 goto out_free_memmap
;
745 /* Enable data path */
746 ret
= wl1271_cmd_data_path(wl
, 1);
748 goto out_free_memmap
;
750 /* Configure for CAM power saving (ie. always active) */
751 ret
= wl1271_acx_sleep_auth(wl
, WL1271_PSM_CAM
);
753 goto out_free_memmap
;
756 ret
= wl1271_acx_pm_config(wl
);
758 goto out_free_memmap
;
763 kfree(wl
->target_mem_map
);
764 wl
->target_mem_map
= NULL
;
769 static void wl12xx_irq_ps_regulate_link(struct wl1271
*wl
,
770 struct wl12xx_vif
*wlvif
,
773 bool fw_ps
, single_sta
;
775 fw_ps
= test_bit(hlid
, (unsigned long *)&wl
->ap_fw_ps_map
);
776 single_sta
= (wl
->active_sta_count
== 1);
779 * Wake up from high level PS if the STA is asleep with too little
780 * packets in FW or if the STA is awake.
782 if (!fw_ps
|| tx_pkts
< WL1271_PS_STA_MAX_PACKETS
)
783 wl12xx_ps_link_end(wl
, wlvif
, hlid
);
786 * Start high-level PS if the STA is asleep with enough blocks in FW.
787 * Make an exception if this is the only connected station. In this
788 * case FW-memory congestion is not a problem.
790 else if (!single_sta
&& fw_ps
&& tx_pkts
>= WL1271_PS_STA_MAX_PACKETS
)
791 wl12xx_ps_link_start(wl
, wlvif
, hlid
, true);
794 static void wl12xx_irq_update_links_status(struct wl1271
*wl
,
795 struct wl12xx_vif
*wlvif
,
796 struct wl12xx_fw_status
*status
)
798 struct wl1271_link
*lnk
;
802 /* TODO: also use link_fast_bitmap here */
804 cur_fw_ps_map
= le32_to_cpu(status
->link_ps_bitmap
);
805 if (wl
->ap_fw_ps_map
!= cur_fw_ps_map
) {
806 wl1271_debug(DEBUG_PSM
,
807 "link ps prev 0x%x cur 0x%x changed 0x%x",
808 wl
->ap_fw_ps_map
, cur_fw_ps_map
,
809 wl
->ap_fw_ps_map
^ cur_fw_ps_map
);
811 wl
->ap_fw_ps_map
= cur_fw_ps_map
;
814 for_each_set_bit(hlid
, wlvif
->ap
.sta_hlid_map
, WL12XX_MAX_LINKS
) {
815 lnk
= &wl
->links
[hlid
];
816 cnt
= status
->tx_lnk_free_pkts
[hlid
] - lnk
->prev_freed_pkts
;
818 lnk
->prev_freed_pkts
= status
->tx_lnk_free_pkts
[hlid
];
819 lnk
->allocated_pkts
-= cnt
;
821 wl12xx_irq_ps_regulate_link(wl
, wlvif
, hlid
,
822 lnk
->allocated_pkts
);
826 static void wl12xx_fw_status(struct wl1271
*wl
,
827 struct wl12xx_fw_status
*status
)
829 struct wl12xx_vif
*wlvif
;
831 u32 old_tx_blk_count
= wl
->tx_blocks_available
;
832 int avail
, freed_blocks
;
835 wl1271_raw_read(wl
, FW_STATUS_ADDR
, status
, sizeof(*status
), false);
837 wl1271_debug(DEBUG_IRQ
, "intr: 0x%x (fw_rx_counter = %d, "
838 "drv_rx_counter = %d, tx_results_counter = %d)",
840 status
->fw_rx_counter
,
841 status
->drv_rx_counter
,
842 status
->tx_results_counter
);
844 for (i
= 0; i
< NUM_TX_QUEUES
; i
++) {
845 /* prevent wrap-around in freed-packets counter */
846 wl
->tx_allocated_pkts
[i
] -=
847 (status
->tx_released_pkts
[i
] -
848 wl
->tx_pkts_freed
[i
]) & 0xff;
850 wl
->tx_pkts_freed
[i
] = status
->tx_released_pkts
[i
];
853 /* prevent wrap-around in total blocks counter */
854 if (likely(wl
->tx_blocks_freed
<=
855 le32_to_cpu(status
->total_released_blks
)))
856 freed_blocks
= le32_to_cpu(status
->total_released_blks
) -
859 freed_blocks
= 0x100000000LL
- wl
->tx_blocks_freed
+
860 le32_to_cpu(status
->total_released_blks
);
862 wl
->tx_blocks_freed
= le32_to_cpu(status
->total_released_blks
);
864 wl
->tx_allocated_blocks
-= freed_blocks
;
866 avail
= le32_to_cpu(status
->tx_total
) - wl
->tx_allocated_blocks
;
869 * The FW might change the total number of TX memblocks before
870 * we get a notification about blocks being released. Thus, the
871 * available blocks calculation might yield a temporary result
872 * which is lower than the actual available blocks. Keeping in
873 * mind that only blocks that were allocated can be moved from
874 * TX to RX, tx_blocks_available should never decrease here.
876 wl
->tx_blocks_available
= max((int)wl
->tx_blocks_available
,
879 /* if more blocks are available now, tx work can be scheduled */
880 if (wl
->tx_blocks_available
> old_tx_blk_count
)
881 clear_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
);
883 /* for AP update num of allocated TX blocks per link and ps status */
884 wl12xx_for_each_wlvif_ap(wl
, wlvif
) {
885 wl12xx_irq_update_links_status(wl
, wlvif
, status
);
888 /* update the host-chipset time offset */
890 wl
->time_offset
= (timespec_to_ns(&ts
) >> 10) -
891 (s64
)le32_to_cpu(status
->fw_localtime
);
894 static void wl1271_flush_deferred_work(struct wl1271
*wl
)
898 /* Pass all received frames to the network stack */
899 while ((skb
= skb_dequeue(&wl
->deferred_rx_queue
)))
900 ieee80211_rx_ni(wl
->hw
, skb
);
902 /* Return sent skbs to the network stack */
903 while ((skb
= skb_dequeue(&wl
->deferred_tx_queue
)))
904 ieee80211_tx_status_ni(wl
->hw
, skb
);
907 static void wl1271_netstack_work(struct work_struct
*work
)
910 container_of(work
, struct wl1271
, netstack_work
);
913 wl1271_flush_deferred_work(wl
);
914 } while (skb_queue_len(&wl
->deferred_rx_queue
));
917 #define WL1271_IRQ_MAX_LOOPS 256
919 static irqreturn_t
wl1271_irq(int irq
, void *cookie
)
923 int loopcount
= WL1271_IRQ_MAX_LOOPS
;
924 struct wl1271
*wl
= (struct wl1271
*)cookie
;
926 unsigned int defer_count
;
929 /* TX might be handled here, avoid redundant work */
930 set_bit(WL1271_FLAG_TX_PENDING
, &wl
->flags
);
931 cancel_work_sync(&wl
->tx_work
);
934 * In case edge triggered interrupt must be used, we cannot iterate
935 * more than once without introducing race conditions with the hardirq.
937 if (wl
->platform_quirks
& WL12XX_PLATFORM_QUIRK_EDGE_IRQ
)
940 mutex_lock(&wl
->mutex
);
942 wl1271_debug(DEBUG_IRQ
, "IRQ work");
944 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
947 ret
= wl1271_ps_elp_wakeup(wl
);
951 while (!done
&& loopcount
--) {
953 * In order to avoid a race with the hardirq, clear the flag
954 * before acknowledging the chip. Since the mutex is held,
955 * wl1271_ps_elp_wakeup cannot be called concurrently.
957 clear_bit(WL1271_FLAG_IRQ_RUNNING
, &wl
->flags
);
958 smp_mb__after_clear_bit();
960 wl12xx_fw_status(wl
, wl
->fw_status
);
961 intr
= le32_to_cpu(wl
->fw_status
->intr
);
962 intr
&= WL1271_INTR_MASK
;
968 if (unlikely(intr
& WL1271_ACX_INTR_WATCHDOG
)) {
969 wl1271_error("watchdog interrupt received! "
970 "starting recovery.");
971 wl12xx_queue_recovery_work(wl
);
973 /* restarting the chip. ignore any other interrupt. */
977 if (likely(intr
& WL1271_ACX_INTR_DATA
)) {
978 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_DATA");
980 wl12xx_rx(wl
, wl
->fw_status
);
982 /* Check if any tx blocks were freed */
983 spin_lock_irqsave(&wl
->wl_lock
, flags
);
984 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
) &&
985 wl1271_tx_total_queue_count(wl
) > 0) {
986 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
988 * In order to avoid starvation of the TX path,
989 * call the work function directly.
991 wl1271_tx_work_locked(wl
);
993 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
996 /* check for tx results */
997 if (wl
->fw_status
->tx_results_counter
!=
998 (wl
->tx_results_count
& 0xff))
999 wl1271_tx_complete(wl
);
1001 /* Make sure the deferred queues don't get too long */
1002 defer_count
= skb_queue_len(&wl
->deferred_tx_queue
) +
1003 skb_queue_len(&wl
->deferred_rx_queue
);
1004 if (defer_count
> WL1271_DEFERRED_QUEUE_LIMIT
)
1005 wl1271_flush_deferred_work(wl
);
1008 if (intr
& WL1271_ACX_INTR_EVENT_A
) {
1009 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_EVENT_A");
1010 wl1271_event_handle(wl
, 0);
1013 if (intr
& WL1271_ACX_INTR_EVENT_B
) {
1014 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_EVENT_B");
1015 wl1271_event_handle(wl
, 1);
1018 if (intr
& WL1271_ACX_INTR_INIT_COMPLETE
)
1019 wl1271_debug(DEBUG_IRQ
,
1020 "WL1271_ACX_INTR_INIT_COMPLETE");
1022 if (intr
& WL1271_ACX_INTR_HW_AVAILABLE
)
1023 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_HW_AVAILABLE");
1026 wl1271_ps_elp_sleep(wl
);
1029 spin_lock_irqsave(&wl
->wl_lock
, flags
);
1030 /* In case TX was not handled here, queue TX work */
1031 clear_bit(WL1271_FLAG_TX_PENDING
, &wl
->flags
);
1032 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
) &&
1033 wl1271_tx_total_queue_count(wl
) > 0)
1034 ieee80211_queue_work(wl
->hw
, &wl
->tx_work
);
1035 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
1037 mutex_unlock(&wl
->mutex
);
1042 static int wl1271_fetch_firmware(struct wl1271
*wl
)
1044 const struct firmware
*fw
;
1045 const char *fw_name
;
1048 if (wl
->chip
.id
== CHIP_ID_1283_PG20
)
1049 fw_name
= WL128X_FW_NAME
;
1051 fw_name
= WL127X_FW_NAME
;
1053 wl1271_debug(DEBUG_BOOT
, "booting firmware %s", fw_name
);
1055 ret
= request_firmware(&fw
, fw_name
, wl
->dev
);
1058 wl1271_error("could not get firmware: %d", ret
);
1063 wl1271_error("firmware size is not multiple of 32 bits: %zu",
1070 wl
->fw_len
= fw
->size
;
1071 wl
->fw
= vmalloc(wl
->fw_len
);
1074 wl1271_error("could not allocate memory for the firmware");
1079 memcpy(wl
->fw
, fw
->data
, wl
->fw_len
);
1083 release_firmware(fw
);
1088 static int wl1271_fetch_nvs(struct wl1271
*wl
)
1090 const struct firmware
*fw
;
1093 ret
= request_firmware(&fw
, WL12XX_NVS_NAME
, wl
->dev
);
1096 wl1271_error("could not get nvs file: %d", ret
);
1100 wl
->nvs
= kmemdup(fw
->data
, fw
->size
, GFP_KERNEL
);
1103 wl1271_error("could not allocate memory for the nvs file");
1108 wl
->nvs_len
= fw
->size
;
1111 release_firmware(fw
);
1116 void wl12xx_queue_recovery_work(struct wl1271
*wl
)
1118 if (!test_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS
, &wl
->flags
))
1119 ieee80211_queue_work(wl
->hw
, &wl
->recovery_work
);
1122 size_t wl12xx_copy_fwlog(struct wl1271
*wl
, u8
*memblock
, size_t maxlen
)
1126 /* The FW log is a length-value list, find where the log end */
1127 while (len
< maxlen
) {
1128 if (memblock
[len
] == 0)
1130 if (len
+ memblock
[len
] + 1 > maxlen
)
1132 len
+= memblock
[len
] + 1;
1135 /* Make sure we have enough room */
1136 len
= min(len
, (size_t)(PAGE_SIZE
- wl
->fwlog_size
));
1138 /* Fill the FW log file, consumed by the sysfs fwlog entry */
1139 memcpy(wl
->fwlog
+ wl
->fwlog_size
, memblock
, len
);
1140 wl
->fwlog_size
+= len
;
1145 static void wl12xx_read_fwlog_panic(struct wl1271
*wl
)
1151 if ((wl
->quirks
& WL12XX_QUIRK_FWLOG_NOT_IMPLEMENTED
) ||
1152 (wl
->conf
.fwlog
.mode
!= WL12XX_FWLOG_ON_DEMAND
) ||
1153 (wl
->conf
.fwlog
.mem_blocks
== 0))
1156 wl1271_info("Reading FW panic log");
1158 block
= kmalloc(WL12XX_HW_BLOCK_SIZE
, GFP_KERNEL
);
1163 * Make sure the chip is awake and the logger isn't active.
1164 * This might fail if the firmware hanged.
1166 if (!wl1271_ps_elp_wakeup(wl
))
1167 wl12xx_cmd_stop_fwlog(wl
);
1169 /* Read the first memory block address */
1170 wl12xx_fw_status(wl
, wl
->fw_status
);
1171 first_addr
= le32_to_cpu(wl
->fw_status
->log_start_addr
);
1175 /* Traverse the memory blocks linked list */
1178 memset(block
, 0, WL12XX_HW_BLOCK_SIZE
);
1179 wl1271_read_hwaddr(wl
, addr
, block
, WL12XX_HW_BLOCK_SIZE
,
1183 * Memory blocks are linked to one another. The first 4 bytes
1184 * of each memory block hold the hardware address of the next
1185 * one. The last memory block points to the first one.
1187 addr
= le32_to_cpup((__le32
*)block
);
1188 if (!wl12xx_copy_fwlog(wl
, block
+ sizeof(addr
),
1189 WL12XX_HW_BLOCK_SIZE
- sizeof(addr
)))
1191 } while (addr
&& (addr
!= first_addr
));
1193 wake_up_interruptible(&wl
->fwlog_waitq
);
1199 static void wl1271_recovery_work(struct work_struct
*work
)
1202 container_of(work
, struct wl1271
, recovery_work
);
1203 struct wl12xx_vif
*wlvif
;
1204 struct ieee80211_vif
*vif
;
1206 mutex_lock(&wl
->mutex
);
1208 if (wl
->state
!= WL1271_STATE_ON
)
1211 /* Avoid a recursive recovery */
1212 set_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS
, &wl
->flags
);
1214 wl12xx_read_fwlog_panic(wl
);
1216 wl1271_info("Hardware recovery in progress. FW ver: %s pc: 0x%x",
1217 wl
->chip
.fw_ver_str
, wl1271_read32(wl
, SCR_PAD4
));
1219 BUG_ON(bug_on_recovery
);
1222 * Advance security sequence number to overcome potential progress
1223 * in the firmware during recovery. This doens't hurt if the network is
1226 wl12xx_for_each_wlvif(wl
, wlvif
) {
1227 if (test_bit(WLVIF_FLAG_STA_ASSOCIATED
, &wlvif
->flags
) ||
1228 test_bit(WLVIF_FLAG_AP_STARTED
, &wlvif
->flags
))
1229 wlvif
->tx_security_seq
+=
1230 WL1271_TX_SQN_POST_RECOVERY_PADDING
;
1233 /* Prevent spurious TX during FW restart */
1234 ieee80211_stop_queues(wl
->hw
);
1236 if (wl
->sched_scanning
) {
1237 ieee80211_sched_scan_stopped(wl
->hw
);
1238 wl
->sched_scanning
= false;
1241 /* reboot the chipset */
1242 while (!list_empty(&wl
->wlvif_list
)) {
1243 wlvif
= list_first_entry(&wl
->wlvif_list
,
1244 struct wl12xx_vif
, list
);
1245 vif
= wl12xx_wlvif_to_vif(wlvif
);
1246 __wl1271_op_remove_interface(wl
, vif
, false);
1248 mutex_unlock(&wl
->mutex
);
1249 wl1271_op_stop(wl
->hw
);
1251 clear_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS
, &wl
->flags
);
1253 ieee80211_restart_hw(wl
->hw
);
1256 * Its safe to enable TX now - the queues are stopped after a request
1257 * to restart the HW.
1259 ieee80211_wake_queues(wl
->hw
);
1262 mutex_unlock(&wl
->mutex
);
1265 static void wl1271_fw_wakeup(struct wl1271
*wl
)
1269 elp_reg
= ELPCTRL_WAKE_UP
;
1270 wl1271_raw_write32(wl
, HW_ACCESS_ELP_CTRL_REG_ADDR
, elp_reg
);
1273 static int wl1271_setup(struct wl1271
*wl
)
1275 wl
->fw_status
= kmalloc(sizeof(*wl
->fw_status
), GFP_KERNEL
);
1279 wl
->tx_res_if
= kmalloc(sizeof(*wl
->tx_res_if
), GFP_KERNEL
);
1280 if (!wl
->tx_res_if
) {
1281 kfree(wl
->fw_status
);
1288 static int wl1271_chip_wakeup(struct wl1271
*wl
)
1290 struct wl1271_partition_set partition
;
1293 msleep(WL1271_PRE_POWER_ON_SLEEP
);
1294 ret
= wl1271_power_on(wl
);
1297 msleep(WL1271_POWER_ON_SLEEP
);
1298 wl1271_io_reset(wl
);
1301 /* We don't need a real memory partition here, because we only want
1302 * to use the registers at this point. */
1303 memset(&partition
, 0, sizeof(partition
));
1304 partition
.reg
.start
= REGISTERS_BASE
;
1305 partition
.reg
.size
= REGISTERS_DOWN_SIZE
;
1306 wl1271_set_partition(wl
, &partition
);
1308 /* ELP module wake up */
1309 wl1271_fw_wakeup(wl
);
1311 /* whal_FwCtrl_BootSm() */
1313 /* 0. read chip id from CHIP_ID */
1314 wl
->chip
.id
= wl1271_read32(wl
, CHIP_ID_B
);
1316 /* 1. check if chip id is valid */
1318 switch (wl
->chip
.id
) {
1319 case CHIP_ID_1271_PG10
:
1320 wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
1323 ret
= wl1271_setup(wl
);
1326 wl
->quirks
|= WL12XX_QUIRK_NO_BLOCKSIZE_ALIGNMENT
;
1329 case CHIP_ID_1271_PG20
:
1330 wl1271_debug(DEBUG_BOOT
, "chip id 0x%x (1271 PG20)",
1333 ret
= wl1271_setup(wl
);
1336 wl
->quirks
|= WL12XX_QUIRK_NO_BLOCKSIZE_ALIGNMENT
;
1339 case CHIP_ID_1283_PG20
:
1340 wl1271_debug(DEBUG_BOOT
, "chip id 0x%x (1283 PG20)",
1343 ret
= wl1271_setup(wl
);
1347 if (!wl1271_set_block_size(wl
))
1348 wl
->quirks
|= WL12XX_QUIRK_NO_BLOCKSIZE_ALIGNMENT
;
1350 case CHIP_ID_1283_PG10
:
1352 wl1271_warning("unsupported chip id: 0x%x", wl
->chip
.id
);
1357 if (wl
->fw
== NULL
) {
1358 ret
= wl1271_fetch_firmware(wl
);
1363 /* No NVS from netlink, try to get it from the filesystem */
1364 if (wl
->nvs
== NULL
) {
1365 ret
= wl1271_fetch_nvs(wl
);
1374 int wl1271_plt_start(struct wl1271
*wl
)
1376 int retries
= WL1271_BOOT_RETRIES
;
1377 struct wiphy
*wiphy
= wl
->hw
->wiphy
;
1380 mutex_lock(&wl
->mutex
);
1382 wl1271_notice("power up");
1384 if (wl
->state
!= WL1271_STATE_OFF
) {
1385 wl1271_error("cannot go into PLT state because not "
1386 "in off state: %d", wl
->state
);
1393 ret
= wl1271_chip_wakeup(wl
);
1397 ret
= wl1271_boot(wl
);
1401 ret
= wl1271_plt_init(wl
);
1405 wl
->state
= WL1271_STATE_PLT
;
1406 wl1271_notice("firmware booted in PLT mode (%s)",
1407 wl
->chip
.fw_ver_str
);
1409 /* update hw/fw version info in wiphy struct */
1410 wiphy
->hw_version
= wl
->chip
.id
;
1411 strncpy(wiphy
->fw_version
, wl
->chip
.fw_ver_str
,
1412 sizeof(wiphy
->fw_version
));
1417 mutex_unlock(&wl
->mutex
);
1418 /* Unlocking the mutex in the middle of handling is
1419 inherently unsafe. In this case we deem it safe to do,
1420 because we need to let any possibly pending IRQ out of
1421 the system (and while we are WL1271_STATE_OFF the IRQ
1422 work function will not do anything.) Also, any other
1423 possible concurrent operations will fail due to the
1424 current state, hence the wl1271 struct should be safe. */
1425 wl1271_disable_interrupts(wl
);
1426 wl1271_flush_deferred_work(wl
);
1427 cancel_work_sync(&wl
->netstack_work
);
1428 mutex_lock(&wl
->mutex
);
1430 wl1271_power_off(wl
);
1433 wl1271_error("firmware boot in PLT mode failed despite %d retries",
1434 WL1271_BOOT_RETRIES
);
1436 mutex_unlock(&wl
->mutex
);
1441 static int __wl1271_plt_stop(struct wl1271
*wl
)
1445 wl1271_notice("power down");
1447 if (wl
->state
!= WL1271_STATE_PLT
) {
1448 wl1271_error("cannot power down because not in PLT "
1449 "state: %d", wl
->state
);
1454 wl1271_power_off(wl
);
1456 wl
->state
= WL1271_STATE_OFF
;
1459 mutex_unlock(&wl
->mutex
);
1460 wl1271_disable_interrupts(wl
);
1461 wl1271_flush_deferred_work(wl
);
1462 cancel_work_sync(&wl
->netstack_work
);
1463 cancel_work_sync(&wl
->recovery_work
);
1464 mutex_lock(&wl
->mutex
);
1469 int wl1271_plt_stop(struct wl1271
*wl
)
1473 mutex_lock(&wl
->mutex
);
1474 ret
= __wl1271_plt_stop(wl
);
1475 mutex_unlock(&wl
->mutex
);
1479 static void wl1271_op_tx(struct ieee80211_hw
*hw
, struct sk_buff
*skb
)
1481 struct wl1271
*wl
= hw
->priv
;
1482 struct ieee80211_tx_info
*info
= IEEE80211_SKB_CB(skb
);
1483 struct ieee80211_vif
*vif
= info
->control
.vif
;
1484 struct wl12xx_vif
*wlvif
= NULL
;
1485 unsigned long flags
;
1490 wlvif
= wl12xx_vif_to_data(vif
);
1492 mapping
= skb_get_queue_mapping(skb
);
1493 q
= wl1271_tx_get_queue(mapping
);
1495 hlid
= wl12xx_tx_get_hlid(wl
, wlvif
, skb
);
1497 spin_lock_irqsave(&wl
->wl_lock
, flags
);
1499 /* queue the packet */
1500 if (hlid
== WL12XX_INVALID_LINK_ID
||
1501 (wlvif
&& !test_bit(hlid
, wlvif
->links_map
))) {
1502 wl1271_debug(DEBUG_TX
, "DROP skb hlid %d q %d", hlid
, q
);
1507 wl1271_debug(DEBUG_TX
, "queue skb hlid %d q %d", hlid
, q
);
1508 skb_queue_tail(&wl
->links
[hlid
].tx_queue
[q
], skb
);
1510 wl
->tx_queue_count
[q
]++;
1513 * The workqueue is slow to process the tx_queue and we need stop
1514 * the queue here, otherwise the queue will get too long.
1516 if (wl
->tx_queue_count
[q
] >= WL1271_TX_QUEUE_HIGH_WATERMARK
) {
1517 wl1271_debug(DEBUG_TX
, "op_tx: stopping queues for q %d", q
);
1518 ieee80211_stop_queue(wl
->hw
, mapping
);
1519 set_bit(q
, &wl
->stopped_queues_map
);
1523 * The chip specific setup must run before the first TX packet -
1524 * before that, the tx_work will not be initialized!
1527 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
) &&
1528 !test_bit(WL1271_FLAG_TX_PENDING
, &wl
->flags
))
1529 ieee80211_queue_work(wl
->hw
, &wl
->tx_work
);
1532 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
1535 int wl1271_tx_dummy_packet(struct wl1271
*wl
)
1537 unsigned long flags
;
1540 /* no need to queue a new dummy packet if one is already pending */
1541 if (test_bit(WL1271_FLAG_DUMMY_PACKET_PENDING
, &wl
->flags
))
1544 q
= wl1271_tx_get_queue(skb_get_queue_mapping(wl
->dummy_packet
));
1546 spin_lock_irqsave(&wl
->wl_lock
, flags
);
1547 set_bit(WL1271_FLAG_DUMMY_PACKET_PENDING
, &wl
->flags
);
1548 wl
->tx_queue_count
[q
]++;
1549 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
1551 /* The FW is low on RX memory blocks, so send the dummy packet asap */
1552 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
))
1553 wl1271_tx_work_locked(wl
);
1556 * If the FW TX is busy, TX work will be scheduled by the threaded
1557 * interrupt handler function
1563 * The size of the dummy packet should be at least 1400 bytes. However, in
1564 * order to minimize the number of bus transactions, aligning it to 512 bytes
1565 * boundaries could be beneficial, performance wise
1567 #define TOTAL_TX_DUMMY_PACKET_SIZE (ALIGN(1400, 512))
1569 static struct sk_buff
*wl12xx_alloc_dummy_packet(struct wl1271
*wl
)
1571 struct sk_buff
*skb
;
1572 struct ieee80211_hdr_3addr
*hdr
;
1573 unsigned int dummy_packet_size
;
1575 dummy_packet_size
= TOTAL_TX_DUMMY_PACKET_SIZE
-
1576 sizeof(struct wl1271_tx_hw_descr
) - sizeof(*hdr
);
1578 skb
= dev_alloc_skb(TOTAL_TX_DUMMY_PACKET_SIZE
);
1580 wl1271_warning("Failed to allocate a dummy packet skb");
1584 skb_reserve(skb
, sizeof(struct wl1271_tx_hw_descr
));
1586 hdr
= (struct ieee80211_hdr_3addr
*) skb_put(skb
, sizeof(*hdr
));
1587 memset(hdr
, 0, sizeof(*hdr
));
1588 hdr
->frame_control
= cpu_to_le16(IEEE80211_FTYPE_DATA
|
1589 IEEE80211_STYPE_NULLFUNC
|
1590 IEEE80211_FCTL_TODS
);
1592 memset(skb_put(skb
, dummy_packet_size
), 0, dummy_packet_size
);
1594 /* Dummy packets require the TID to be management */
1595 skb
->priority
= WL1271_TID_MGMT
;
1597 /* Initialize all fields that might be used */
1598 skb_set_queue_mapping(skb
, 0);
1599 memset(IEEE80211_SKB_CB(skb
), 0, sizeof(struct ieee80211_tx_info
));
1605 static struct notifier_block wl1271_dev_notifier
= {
1606 .notifier_call
= wl1271_dev_notify
,
1610 static int wl1271_configure_suspend_sta(struct wl1271
*wl
,
1611 struct wl12xx_vif
*wlvif
)
1615 mutex_lock(&wl
->mutex
);
1617 if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED
, &wlvif
->flags
))
1620 ret
= wl1271_ps_elp_wakeup(wl
);
1624 /* enter psm if needed*/
1625 if (!test_bit(WLVIF_FLAG_PSM
, &wlvif
->flags
)) {
1626 DECLARE_COMPLETION_ONSTACK(compl);
1628 wlvif
->ps_compl
= &compl;
1629 ret
= wl1271_ps_set_mode(wl
, wlvif
, STATION_POWER_SAVE_MODE
,
1630 wlvif
->basic_rate
, true);
1634 /* we must unlock here so we will be able to get events */
1635 wl1271_ps_elp_sleep(wl
);
1636 mutex_unlock(&wl
->mutex
);
1638 ret
= wait_for_completion_timeout(
1639 &compl, msecs_to_jiffies(WL1271_PS_COMPLETE_TIMEOUT
));
1641 wl1271_warning("couldn't enter ps mode!");
1646 /* take mutex again, and wakeup */
1647 mutex_lock(&wl
->mutex
);
1649 ret
= wl1271_ps_elp_wakeup(wl
);
1654 wl1271_ps_elp_sleep(wl
);
1656 mutex_unlock(&wl
->mutex
);
1662 static int wl1271_configure_suspend_ap(struct wl1271
*wl
,
1663 struct wl12xx_vif
*wlvif
)
1667 mutex_lock(&wl
->mutex
);
1669 if (!test_bit(WLVIF_FLAG_AP_STARTED
, &wlvif
->flags
))
1672 ret
= wl1271_ps_elp_wakeup(wl
);
1676 ret
= wl1271_acx_beacon_filter_opt(wl
, wlvif
, true);
1678 wl1271_ps_elp_sleep(wl
);
1680 mutex_unlock(&wl
->mutex
);
1685 static int wl1271_configure_suspend(struct wl1271
*wl
,
1686 struct wl12xx_vif
*wlvif
)
1688 if (wlvif
->bss_type
== BSS_TYPE_STA_BSS
)
1689 return wl1271_configure_suspend_sta(wl
, wlvif
);
1690 if (wlvif
->bss_type
== BSS_TYPE_AP_BSS
)
1691 return wl1271_configure_suspend_ap(wl
, wlvif
);
1695 static void wl1271_configure_resume(struct wl1271
*wl
,
1696 struct wl12xx_vif
*wlvif
)
1699 bool is_sta
= wlvif
->bss_type
== BSS_TYPE_STA_BSS
;
1700 bool is_ap
= wlvif
->bss_type
== BSS_TYPE_AP_BSS
;
1702 if (!is_sta
&& !is_ap
)
1705 mutex_lock(&wl
->mutex
);
1706 ret
= wl1271_ps_elp_wakeup(wl
);
1711 /* exit psm if it wasn't configured */
1712 if (!test_bit(WLVIF_FLAG_PSM_REQUESTED
, &wlvif
->flags
))
1713 wl1271_ps_set_mode(wl
, wlvif
, STATION_ACTIVE_MODE
,
1714 wlvif
->basic_rate
, true);
1716 wl1271_acx_beacon_filter_opt(wl
, wlvif
, false);
1719 wl1271_ps_elp_sleep(wl
);
1721 mutex_unlock(&wl
->mutex
);
1724 static int wl1271_op_suspend(struct ieee80211_hw
*hw
,
1725 struct cfg80211_wowlan
*wow
)
1727 struct wl1271
*wl
= hw
->priv
;
1728 struct wl12xx_vif
*wlvif
;
1731 wl1271_debug(DEBUG_MAC80211
, "mac80211 suspend wow=%d", !!wow
);
1732 WARN_ON(!wow
|| !wow
->any
);
1734 wl
->wow_enabled
= true;
1735 wl12xx_for_each_wlvif(wl
, wlvif
) {
1736 ret
= wl1271_configure_suspend(wl
, wlvif
);
1738 wl1271_warning("couldn't prepare device to suspend");
1742 /* flush any remaining work */
1743 wl1271_debug(DEBUG_MAC80211
, "flushing remaining works");
1746 * disable and re-enable interrupts in order to flush
1749 wl1271_disable_interrupts(wl
);
1752 * set suspended flag to avoid triggering a new threaded_irq
1753 * work. no need for spinlock as interrupts are disabled.
1755 set_bit(WL1271_FLAG_SUSPENDED
, &wl
->flags
);
1757 wl1271_enable_interrupts(wl
);
1758 flush_work(&wl
->tx_work
);
1759 wl12xx_for_each_wlvif(wl
, wlvif
) {
1760 flush_delayed_work(&wlvif
->pspoll_work
);
1762 flush_delayed_work(&wl
->elp_work
);
1767 static int wl1271_op_resume(struct ieee80211_hw
*hw
)
1769 struct wl1271
*wl
= hw
->priv
;
1770 struct wl12xx_vif
*wlvif
;
1771 unsigned long flags
;
1772 bool run_irq_work
= false;
1774 wl1271_debug(DEBUG_MAC80211
, "mac80211 resume wow=%d",
1776 WARN_ON(!wl
->wow_enabled
);
1779 * re-enable irq_work enqueuing, and call irq_work directly if
1780 * there is a pending work.
1782 spin_lock_irqsave(&wl
->wl_lock
, flags
);
1783 clear_bit(WL1271_FLAG_SUSPENDED
, &wl
->flags
);
1784 if (test_and_clear_bit(WL1271_FLAG_PENDING_WORK
, &wl
->flags
))
1785 run_irq_work
= true;
1786 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
1789 wl1271_debug(DEBUG_MAC80211
,
1790 "run postponed irq_work directly");
1792 wl1271_enable_interrupts(wl
);
1794 wl12xx_for_each_wlvif(wl
, wlvif
) {
1795 wl1271_configure_resume(wl
, wlvif
);
1797 wl
->wow_enabled
= false;
1803 static int wl1271_op_start(struct ieee80211_hw
*hw
)
1805 wl1271_debug(DEBUG_MAC80211
, "mac80211 start");
1808 * We have to delay the booting of the hardware because
1809 * we need to know the local MAC address before downloading and
1810 * initializing the firmware. The MAC address cannot be changed
1811 * after boot, and without the proper MAC address, the firmware
1812 * will not function properly.
1814 * The MAC address is first known when the corresponding interface
1815 * is added. That is where we will initialize the hardware.
1821 static void wl1271_op_stop(struct ieee80211_hw
*hw
)
1823 struct wl1271
*wl
= hw
->priv
;
1826 wl1271_debug(DEBUG_MAC80211
, "mac80211 stop");
1828 mutex_lock(&wl
->mutex
);
1829 if (wl
->state
== WL1271_STATE_OFF
) {
1830 mutex_unlock(&wl
->mutex
);
1834 * this must be before the cancel_work calls below, so that the work
1835 * functions don't perform further work.
1837 wl
->state
= WL1271_STATE_OFF
;
1838 mutex_unlock(&wl
->mutex
);
1840 mutex_lock(&wl_list_mutex
);
1841 list_del(&wl
->list
);
1842 mutex_unlock(&wl_list_mutex
);
1844 wl1271_disable_interrupts(wl
);
1845 wl1271_flush_deferred_work(wl
);
1846 cancel_delayed_work_sync(&wl
->scan_complete_work
);
1847 cancel_work_sync(&wl
->netstack_work
);
1848 cancel_work_sync(&wl
->tx_work
);
1849 cancel_delayed_work_sync(&wl
->elp_work
);
1851 /* let's notify MAC80211 about the remaining pending TX frames */
1852 wl12xx_tx_reset(wl
, true);
1853 mutex_lock(&wl
->mutex
);
1855 wl1271_power_off(wl
);
1857 wl
->band
= IEEE80211_BAND_2GHZ
;
1860 wl
->power_level
= WL1271_DEFAULT_POWER_LEVEL
;
1861 wl
->tx_blocks_available
= 0;
1862 wl
->tx_allocated_blocks
= 0;
1863 wl
->tx_results_count
= 0;
1864 wl
->tx_packets_count
= 0;
1865 wl
->time_offset
= 0;
1866 wl
->tx_spare_blocks
= TX_HW_BLOCK_SPARE_DEFAULT
;
1867 wl
->ap_fw_ps_map
= 0;
1869 wl
->sched_scanning
= false;
1870 memset(wl
->roles_map
, 0, sizeof(wl
->roles_map
));
1871 memset(wl
->links_map
, 0, sizeof(wl
->links_map
));
1872 memset(wl
->roc_map
, 0, sizeof(wl
->roc_map
));
1873 wl
->active_sta_count
= 0;
1875 /* The system link is always allocated */
1876 __set_bit(WL12XX_SYSTEM_HLID
, wl
->links_map
);
1879 * this is performed after the cancel_work calls and the associated
1880 * mutex_lock, so that wl1271_op_add_interface does not accidentally
1881 * get executed before all these vars have been reset.
1885 wl
->tx_blocks_freed
= 0;
1887 for (i
= 0; i
< NUM_TX_QUEUES
; i
++) {
1888 wl
->tx_pkts_freed
[i
] = 0;
1889 wl
->tx_allocated_pkts
[i
] = 0;
1892 wl1271_debugfs_reset(wl
);
1894 kfree(wl
->fw_status
);
1895 wl
->fw_status
= NULL
;
1896 kfree(wl
->tx_res_if
);
1897 wl
->tx_res_if
= NULL
;
1898 kfree(wl
->target_mem_map
);
1899 wl
->target_mem_map
= NULL
;
1901 mutex_unlock(&wl
->mutex
);
1904 static int wl12xx_allocate_rate_policy(struct wl1271
*wl
, u8
*idx
)
1906 u8 policy
= find_first_zero_bit(wl
->rate_policies_map
,
1907 WL12XX_MAX_RATE_POLICIES
);
1908 if (policy
>= WL12XX_MAX_RATE_POLICIES
)
1911 __set_bit(policy
, wl
->rate_policies_map
);
1916 static void wl12xx_free_rate_policy(struct wl1271
*wl
, u8
*idx
)
1918 if (WARN_ON(*idx
>= WL12XX_MAX_RATE_POLICIES
))
1921 __clear_bit(*idx
, wl
->rate_policies_map
);
1922 *idx
= WL12XX_MAX_RATE_POLICIES
;
1925 static u8
wl12xx_get_role_type(struct wl1271
*wl
, struct wl12xx_vif
*wlvif
)
1927 switch (wlvif
->bss_type
) {
1928 case BSS_TYPE_AP_BSS
:
1930 return WL1271_ROLE_P2P_GO
;
1932 return WL1271_ROLE_AP
;
1934 case BSS_TYPE_STA_BSS
:
1936 return WL1271_ROLE_P2P_CL
;
1938 return WL1271_ROLE_STA
;
1941 return WL1271_ROLE_IBSS
;
1944 wl1271_error("invalid bss_type: %d", wlvif
->bss_type
);
1946 return WL12XX_INVALID_ROLE_TYPE
;
1949 static int wl12xx_init_vif_data(struct wl1271
*wl
, struct ieee80211_vif
*vif
)
1951 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
1954 /* clear everything but the persistent data */
1955 memset(wlvif
, 0, offsetof(struct wl12xx_vif
, persistent
));
1957 switch (ieee80211_vif_type_p2p(vif
)) {
1958 case NL80211_IFTYPE_P2P_CLIENT
:
1961 case NL80211_IFTYPE_STATION
:
1962 wlvif
->bss_type
= BSS_TYPE_STA_BSS
;
1964 case NL80211_IFTYPE_ADHOC
:
1965 wlvif
->bss_type
= BSS_TYPE_IBSS
;
1967 case NL80211_IFTYPE_P2P_GO
:
1970 case NL80211_IFTYPE_AP
:
1971 wlvif
->bss_type
= BSS_TYPE_AP_BSS
;
1974 wlvif
->bss_type
= MAX_BSS_TYPE
;
1978 wlvif
->role_id
= WL12XX_INVALID_ROLE_ID
;
1979 wlvif
->dev_role_id
= WL12XX_INVALID_ROLE_ID
;
1980 wlvif
->dev_hlid
= WL12XX_INVALID_LINK_ID
;
1982 if (wlvif
->bss_type
== BSS_TYPE_STA_BSS
||
1983 wlvif
->bss_type
== BSS_TYPE_IBSS
) {
1984 /* init sta/ibss data */
1985 wlvif
->sta
.hlid
= WL12XX_INVALID_LINK_ID
;
1986 wl12xx_allocate_rate_policy(wl
, &wlvif
->sta
.basic_rate_idx
);
1987 wl12xx_allocate_rate_policy(wl
, &wlvif
->sta
.ap_rate_idx
);
1988 wl12xx_allocate_rate_policy(wl
, &wlvif
->sta
.p2p_rate_idx
);
1991 wlvif
->ap
.bcast_hlid
= WL12XX_INVALID_LINK_ID
;
1992 wlvif
->ap
.global_hlid
= WL12XX_INVALID_LINK_ID
;
1993 wl12xx_allocate_rate_policy(wl
, &wlvif
->ap
.mgmt_rate_idx
);
1994 wl12xx_allocate_rate_policy(wl
, &wlvif
->ap
.bcast_rate_idx
);
1995 for (i
= 0; i
< CONF_TX_MAX_AC_COUNT
; i
++)
1996 wl12xx_allocate_rate_policy(wl
,
1997 &wlvif
->ap
.ucast_rate_idx
[i
]);
2000 wlvif
->bitrate_masks
[IEEE80211_BAND_2GHZ
] = wl
->conf
.tx
.basic_rate
;
2001 wlvif
->bitrate_masks
[IEEE80211_BAND_5GHZ
] = wl
->conf
.tx
.basic_rate_5
;
2002 wlvif
->basic_rate_set
= CONF_TX_RATE_MASK_BASIC
;
2003 wlvif
->basic_rate
= CONF_TX_RATE_MASK_BASIC
;
2004 wlvif
->rate_set
= CONF_TX_RATE_MASK_BASIC
;
2005 wlvif
->beacon_int
= WL1271_DEFAULT_BEACON_INT
;
2008 * mac80211 configures some values globally, while we treat them
2009 * per-interface. thus, on init, we have to copy them from wl
2011 wlvif
->band
= wl
->band
;
2012 wlvif
->channel
= wl
->channel
;
2013 wlvif
->power_level
= wl
->power_level
;
2015 INIT_WORK(&wlvif
->rx_streaming_enable_work
,
2016 wl1271_rx_streaming_enable_work
);
2017 INIT_WORK(&wlvif
->rx_streaming_disable_work
,
2018 wl1271_rx_streaming_disable_work
);
2019 INIT_DELAYED_WORK(&wlvif
->pspoll_work
, wl1271_pspoll_work
);
2020 INIT_LIST_HEAD(&wlvif
->list
);
2022 setup_timer(&wlvif
->rx_streaming_timer
, wl1271_rx_streaming_timer
,
2023 (unsigned long) wlvif
);
2027 static bool wl12xx_init_fw(struct wl1271
*wl
)
2029 int retries
= WL1271_BOOT_RETRIES
;
2030 bool booted
= false;
2031 struct wiphy
*wiphy
= wl
->hw
->wiphy
;
2036 ret
= wl1271_chip_wakeup(wl
);
2040 ret
= wl1271_boot(wl
);
2044 ret
= wl1271_hw_init(wl
);
2052 mutex_unlock(&wl
->mutex
);
2053 /* Unlocking the mutex in the middle of handling is
2054 inherently unsafe. In this case we deem it safe to do,
2055 because we need to let any possibly pending IRQ out of
2056 the system (and while we are WL1271_STATE_OFF the IRQ
2057 work function will not do anything.) Also, any other
2058 possible concurrent operations will fail due to the
2059 current state, hence the wl1271 struct should be safe. */
2060 wl1271_disable_interrupts(wl
);
2061 wl1271_flush_deferred_work(wl
);
2062 cancel_work_sync(&wl
->netstack_work
);
2063 mutex_lock(&wl
->mutex
);
2065 wl1271_power_off(wl
);
2069 wl1271_error("firmware boot failed despite %d retries",
2070 WL1271_BOOT_RETRIES
);
2074 wl1271_info("firmware booted (%s)", wl
->chip
.fw_ver_str
);
2076 /* update hw/fw version info in wiphy struct */
2077 wiphy
->hw_version
= wl
->chip
.id
;
2078 strncpy(wiphy
->fw_version
, wl
->chip
.fw_ver_str
,
2079 sizeof(wiphy
->fw_version
));
2082 * Now we know if 11a is supported (info from the NVS), so disable
2083 * 11a channels if not supported
2085 if (!wl
->enable_11a
)
2086 wiphy
->bands
[IEEE80211_BAND_5GHZ
]->n_channels
= 0;
2088 wl1271_debug(DEBUG_MAC80211
, "11a is %ssupported",
2089 wl
->enable_11a
? "" : "not ");
2091 wl
->state
= WL1271_STATE_ON
;
2096 static int wl1271_op_add_interface(struct ieee80211_hw
*hw
,
2097 struct ieee80211_vif
*vif
)
2099 struct wl1271
*wl
= hw
->priv
;
2100 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
2103 bool booted
= false;
2105 wl1271_debug(DEBUG_MAC80211
, "mac80211 add interface type %d mac %pM",
2106 ieee80211_vif_type_p2p(vif
), vif
->addr
);
2108 mutex_lock(&wl
->mutex
);
2109 ret
= wl1271_ps_elp_wakeup(wl
);
2114 wl1271_debug(DEBUG_MAC80211
,
2115 "multiple vifs are not supported yet");
2121 * in some very corner case HW recovery scenarios its possible to
2122 * get here before __wl1271_op_remove_interface is complete, so
2123 * opt out if that is the case.
2125 if (test_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS
, &wl
->flags
) ||
2126 test_bit(WLVIF_FLAG_INITIALIZED
, &wlvif
->flags
)) {
2131 ret
= wl12xx_init_vif_data(wl
, vif
);
2136 role_type
= wl12xx_get_role_type(wl
, wlvif
);
2137 if (role_type
== WL12XX_INVALID_ROLE_TYPE
) {
2143 * TODO: after the nvs issue will be solved, move this block
2144 * to start(), and make sure here the driver is ON.
2146 if (wl
->state
== WL1271_STATE_OFF
) {
2148 * we still need this in order to configure the fw
2149 * while uploading the nvs
2151 memcpy(wl
->mac_addr
, vif
->addr
, ETH_ALEN
);
2153 booted
= wl12xx_init_fw(wl
);
2160 if (wlvif
->bss_type
== BSS_TYPE_STA_BSS
||
2161 wlvif
->bss_type
== BSS_TYPE_IBSS
) {
2163 * The device role is a special role used for
2164 * rx and tx frames prior to association (as
2165 * the STA role can get packets only from
2166 * its associated bssid)
2168 ret
= wl12xx_cmd_role_enable(wl
, vif
->addr
,
2170 &wlvif
->dev_role_id
);
2175 ret
= wl12xx_cmd_role_enable(wl
, vif
->addr
,
2176 role_type
, &wlvif
->role_id
);
2180 ret
= wl1271_init_vif_specific(wl
, vif
);
2185 list_add(&wlvif
->list
, &wl
->wlvif_list
);
2186 set_bit(WLVIF_FLAG_INITIALIZED
, &wlvif
->flags
);
2188 if (wlvif
->bss_type
== BSS_TYPE_AP_BSS
)
2193 wl1271_ps_elp_sleep(wl
);
2195 mutex_unlock(&wl
->mutex
);
2197 mutex_lock(&wl_list_mutex
);
2199 list_add(&wl
->list
, &wl_list
);
2200 mutex_unlock(&wl_list_mutex
);
2205 static void __wl1271_op_remove_interface(struct wl1271
*wl
,
2206 struct ieee80211_vif
*vif
,
2207 bool reset_tx_queues
)
2209 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
2212 wl1271_debug(DEBUG_MAC80211
, "mac80211 remove interface");
2214 if (!test_and_clear_bit(WLVIF_FLAG_INITIALIZED
, &wlvif
->flags
))
2219 /* because of hardware recovery, we may get here twice */
2220 if (wl
->state
!= WL1271_STATE_ON
)
2223 wl1271_info("down");
2225 /* enable dyn ps just in case (if left on due to fw crash etc) */
2226 if (wlvif
->bss_type
== BSS_TYPE_STA_BSS
)
2227 ieee80211_enable_dyn_ps(vif
);
2229 if (wl
->scan
.state
!= WL1271_SCAN_STATE_IDLE
&&
2230 wl
->scan_vif
== vif
) {
2231 wl
->scan
.state
= WL1271_SCAN_STATE_IDLE
;
2232 memset(wl
->scan
.scanned_ch
, 0, sizeof(wl
->scan
.scanned_ch
));
2233 wl
->scan_vif
= NULL
;
2234 wl
->scan
.req
= NULL
;
2235 ieee80211_scan_completed(wl
->hw
, true);
2238 if (!test_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS
, &wl
->flags
)) {
2239 /* disable active roles */
2240 ret
= wl1271_ps_elp_wakeup(wl
);
2244 if (wlvif
->bss_type
== BSS_TYPE_STA_BSS
) {
2245 ret
= wl12xx_cmd_role_disable(wl
, &wlvif
->dev_role_id
);
2250 ret
= wl12xx_cmd_role_disable(wl
, &wlvif
->role_id
);
2254 wl1271_ps_elp_sleep(wl
);
2257 /* clear all hlids (except system_hlid) */
2258 wlvif
->dev_hlid
= WL12XX_INVALID_LINK_ID
;
2260 if (wlvif
->bss_type
== BSS_TYPE_STA_BSS
||
2261 wlvif
->bss_type
== BSS_TYPE_IBSS
) {
2262 wlvif
->sta
.hlid
= WL12XX_INVALID_LINK_ID
;
2263 wl12xx_free_rate_policy(wl
, &wlvif
->sta
.basic_rate_idx
);
2264 wl12xx_free_rate_policy(wl
, &wlvif
->sta
.ap_rate_idx
);
2265 wl12xx_free_rate_policy(wl
, &wlvif
->sta
.p2p_rate_idx
);
2267 wlvif
->ap
.bcast_hlid
= WL12XX_INVALID_LINK_ID
;
2268 wlvif
->ap
.global_hlid
= WL12XX_INVALID_LINK_ID
;
2269 wl12xx_free_rate_policy(wl
, &wlvif
->ap
.mgmt_rate_idx
);
2270 wl12xx_free_rate_policy(wl
, &wlvif
->ap
.bcast_rate_idx
);
2271 for (i
= 0; i
< CONF_TX_MAX_AC_COUNT
; i
++)
2272 wl12xx_free_rate_policy(wl
,
2273 &wlvif
->ap
.ucast_rate_idx
[i
]);
2276 wl12xx_tx_reset_wlvif(wl
, wlvif
);
2277 wl1271_free_ap_keys(wl
, wlvif
);
2278 if (wl
->last_wlvif
== wlvif
)
2279 wl
->last_wlvif
= NULL
;
2280 list_del(&wlvif
->list
);
2281 memset(wlvif
->ap
.sta_hlid_map
, 0, sizeof(wlvif
->ap
.sta_hlid_map
));
2282 wlvif
->role_id
= WL12XX_INVALID_ROLE_ID
;
2283 wlvif
->dev_role_id
= WL12XX_INVALID_ROLE_ID
;
2285 if (wlvif
->bss_type
== BSS_TYPE_AP_BSS
)
2290 mutex_unlock(&wl
->mutex
);
2291 del_timer_sync(&wlvif
->rx_streaming_timer
);
2292 cancel_work_sync(&wlvif
->rx_streaming_enable_work
);
2293 cancel_work_sync(&wlvif
->rx_streaming_disable_work
);
2294 cancel_delayed_work_sync(&wlvif
->pspoll_work
);
2296 mutex_lock(&wl
->mutex
);
2299 static void wl1271_op_remove_interface(struct ieee80211_hw
*hw
,
2300 struct ieee80211_vif
*vif
)
2302 struct wl1271
*wl
= hw
->priv
;
2303 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
2304 struct wl12xx_vif
*iter
;
2306 mutex_lock(&wl
->mutex
);
2308 if (wl
->state
== WL1271_STATE_OFF
||
2309 !test_bit(WLVIF_FLAG_INITIALIZED
, &wlvif
->flags
))
2313 * wl->vif can be null here if someone shuts down the interface
2314 * just when hardware recovery has been started.
2316 wl12xx_for_each_wlvif(wl
, iter
) {
2320 __wl1271_op_remove_interface(wl
, vif
, true);
2323 WARN_ON(iter
!= wlvif
);
2325 mutex_unlock(&wl
->mutex
);
2326 cancel_work_sync(&wl
->recovery_work
);
2329 static int wl1271_join(struct wl1271
*wl
, struct wl12xx_vif
*wlvif
,
2333 bool is_ibss
= (wlvif
->bss_type
== BSS_TYPE_IBSS
);
2336 * One of the side effects of the JOIN command is that is clears
2337 * WPA/WPA2 keys from the chipset. Performing a JOIN while associated
2338 * to a WPA/WPA2 access point will therefore kill the data-path.
2339 * Currently the only valid scenario for JOIN during association
2340 * is on roaming, in which case we will also be given new keys.
2341 * Keep the below message for now, unless it starts bothering
2342 * users who really like to roam a lot :)
2344 if (test_bit(WLVIF_FLAG_STA_ASSOCIATED
, &wlvif
->flags
))
2345 wl1271_info("JOIN while associated.");
2348 set_bit(WLVIF_FLAG_STA_ASSOCIATED
, &wlvif
->flags
);
2351 ret
= wl12xx_cmd_role_start_ibss(wl
, wlvif
);
2353 ret
= wl12xx_cmd_role_start_sta(wl
, wlvif
);
2357 if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED
, &wlvif
->flags
))
2361 * The join command disable the keep-alive mode, shut down its process,
2362 * and also clear the template config, so we need to reset it all after
2363 * the join. The acx_aid starts the keep-alive process, and the order
2364 * of the commands below is relevant.
2366 ret
= wl1271_acx_keep_alive_mode(wl
, wlvif
, true);
2370 ret
= wl1271_acx_aid(wl
, wlvif
, wlvif
->aid
);
2374 ret
= wl12xx_cmd_build_klv_null_data(wl
, wlvif
);
2378 ret
= wl1271_acx_keep_alive_config(wl
, wlvif
,
2379 CMD_TEMPL_KLV_IDX_NULL_DATA
,
2380 ACX_KEEP_ALIVE_TPL_VALID
);
2388 static int wl1271_unjoin(struct wl1271
*wl
, struct wl12xx_vif
*wlvif
)
2392 if (test_and_clear_bit(WLVIF_FLAG_CS_PROGRESS
, &wlvif
->flags
)) {
2393 struct ieee80211_vif
*vif
= wl12xx_wlvif_to_vif(wlvif
);
2395 wl12xx_cmd_stop_channel_switch(wl
);
2396 ieee80211_chswitch_done(vif
, false);
2399 /* to stop listening to a channel, we disconnect */
2400 ret
= wl12xx_cmd_role_stop_sta(wl
, wlvif
);
2404 /* reset TX security counters on a clean disconnect */
2405 wlvif
->tx_security_last_seq_lsb
= 0;
2406 wlvif
->tx_security_seq
= 0;
2412 static void wl1271_set_band_rate(struct wl1271
*wl
, struct wl12xx_vif
*wlvif
)
2414 wlvif
->basic_rate_set
= wlvif
->bitrate_masks
[wlvif
->band
];
2415 wlvif
->rate_set
= wlvif
->basic_rate_set
;
2418 static bool wl12xx_is_roc(struct wl1271
*wl
)
2422 role_id
= find_first_bit(wl
->roc_map
, WL12XX_MAX_ROLES
);
2423 if (role_id
>= WL12XX_MAX_ROLES
)
2429 static int wl1271_sta_handle_idle(struct wl1271
*wl
, struct wl12xx_vif
*wlvif
,
2435 /* no need to croc if we weren't busy (e.g. during boot) */
2436 if (wl12xx_is_roc(wl
)) {
2437 ret
= wl12xx_stop_dev(wl
, wlvif
);
2442 wl1271_tx_min_rate_get(wl
, wlvif
->basic_rate_set
);
2443 ret
= wl1271_acx_sta_rate_policies(wl
, wlvif
);
2446 ret
= wl1271_acx_keep_alive_config(
2447 wl
, wlvif
, CMD_TEMPL_KLV_IDX_NULL_DATA
,
2448 ACX_KEEP_ALIVE_TPL_INVALID
);
2451 set_bit(WL1271_FLAG_IDLE
, &wl
->flags
);
2453 /* The current firmware only supports sched_scan in idle */
2454 if (wl
->sched_scanning
) {
2455 wl1271_scan_sched_scan_stop(wl
);
2456 ieee80211_sched_scan_stopped(wl
->hw
);
2459 ret
= wl12xx_start_dev(wl
, wlvif
);
2462 clear_bit(WL1271_FLAG_IDLE
, &wl
->flags
);
2469 static int wl12xx_config_vif(struct wl1271
*wl
, struct wl12xx_vif
*wlvif
,
2470 struct ieee80211_conf
*conf
, u32 changed
)
2472 bool is_ap
= (wlvif
->bss_type
== BSS_TYPE_AP_BSS
);
2475 channel
= ieee80211_frequency_to_channel(conf
->channel
->center_freq
);
2477 /* if the channel changes while joined, join again */
2478 if (changed
& IEEE80211_CONF_CHANGE_CHANNEL
&&
2479 ((wlvif
->band
!= conf
->channel
->band
) ||
2480 (wlvif
->channel
!= channel
))) {
2481 /* send all pending packets */
2482 wl1271_tx_work_locked(wl
);
2483 wlvif
->band
= conf
->channel
->band
;
2484 wlvif
->channel
= channel
;
2488 * FIXME: the mac80211 should really provide a fixed
2489 * rate to use here. for now, just use the smallest
2490 * possible rate for the band as a fixed rate for
2491 * association frames and other control messages.
2493 if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED
, &wlvif
->flags
))
2494 wl1271_set_band_rate(wl
, wlvif
);
2497 wl1271_tx_min_rate_get(wl
,
2498 wlvif
->basic_rate_set
);
2499 ret
= wl1271_acx_sta_rate_policies(wl
, wlvif
);
2501 wl1271_warning("rate policy for channel "
2504 if (test_bit(WLVIF_FLAG_STA_ASSOCIATED
,
2506 if (wl12xx_is_roc(wl
)) {
2508 ret
= wl12xx_croc(wl
,
2509 wlvif
->dev_role_id
);
2513 ret
= wl1271_join(wl
, wlvif
, false);
2515 wl1271_warning("cmd join on channel "
2519 * change the ROC channel. do it only if we are
2520 * not idle. otherwise, CROC will be called
2523 if (wl12xx_is_roc(wl
) &&
2524 !(conf
->flags
& IEEE80211_CONF_IDLE
)) {
2525 ret
= wl12xx_stop_dev(wl
, wlvif
);
2529 ret
= wl12xx_start_dev(wl
, wlvif
);
2537 if (changed
& IEEE80211_CONF_CHANGE_IDLE
&& !is_ap
) {
2538 ret
= wl1271_sta_handle_idle(wl
, wlvif
,
2539 conf
->flags
& IEEE80211_CONF_IDLE
);
2541 wl1271_warning("idle mode change failed %d", ret
);
2545 * if mac80211 changes the PSM mode, make sure the mode is not
2546 * incorrectly changed after the pspoll failure active window.
2548 if (changed
& IEEE80211_CONF_CHANGE_PS
)
2549 clear_bit(WLVIF_FLAG_PSPOLL_FAILURE
, &wlvif
->flags
);
2551 if (conf
->flags
& IEEE80211_CONF_PS
&&
2552 !test_bit(WLVIF_FLAG_PSM_REQUESTED
, &wlvif
->flags
)) {
2553 set_bit(WLVIF_FLAG_PSM_REQUESTED
, &wlvif
->flags
);
2556 * We enter PSM only if we're already associated.
2557 * If we're not, we'll enter it when joining an SSID,
2558 * through the bss_info_changed() hook.
2560 if (test_bit(WLVIF_FLAG_STA_ASSOCIATED
, &wlvif
->flags
)) {
2561 wl1271_debug(DEBUG_PSM
, "psm enabled");
2562 ret
= wl1271_ps_set_mode(wl
, wlvif
,
2563 STATION_POWER_SAVE_MODE
,
2564 wlvif
->basic_rate
, true);
2566 } else if (!(conf
->flags
& IEEE80211_CONF_PS
) &&
2567 test_bit(WLVIF_FLAG_PSM_REQUESTED
, &wlvif
->flags
)) {
2568 wl1271_debug(DEBUG_PSM
, "psm disabled");
2570 clear_bit(WLVIF_FLAG_PSM_REQUESTED
, &wlvif
->flags
);
2572 if (test_bit(WLVIF_FLAG_PSM
, &wlvif
->flags
))
2573 ret
= wl1271_ps_set_mode(wl
, wlvif
,
2574 STATION_ACTIVE_MODE
,
2575 wlvif
->basic_rate
, true);
2578 if (conf
->power_level
!= wlvif
->power_level
) {
2579 ret
= wl1271_acx_tx_power(wl
, wlvif
, conf
->power_level
);
2583 wlvif
->power_level
= conf
->power_level
;
2589 static int wl1271_op_config(struct ieee80211_hw
*hw
, u32 changed
)
2591 struct wl1271
*wl
= hw
->priv
;
2592 struct wl12xx_vif
*wlvif
;
2593 struct ieee80211_conf
*conf
= &hw
->conf
;
2594 int channel
, ret
= 0;
2596 channel
= ieee80211_frequency_to_channel(conf
->channel
->center_freq
);
2598 wl1271_debug(DEBUG_MAC80211
, "mac80211 config ch %d psm %s power %d %s"
2601 conf
->flags
& IEEE80211_CONF_PS
? "on" : "off",
2603 conf
->flags
& IEEE80211_CONF_IDLE
? "idle" : "in use",
2607 * mac80211 will go to idle nearly immediately after transmitting some
2608 * frames, such as the deauth. To make sure those frames reach the air,
2609 * wait here until the TX queue is fully flushed.
2611 if ((changed
& IEEE80211_CONF_CHANGE_IDLE
) &&
2612 (conf
->flags
& IEEE80211_CONF_IDLE
))
2613 wl1271_tx_flush(wl
);
2615 mutex_lock(&wl
->mutex
);
2617 /* we support configuring the channel and band even while off */
2618 if (changed
& IEEE80211_CONF_CHANGE_CHANNEL
) {
2619 wl
->band
= conf
->channel
->band
;
2620 wl
->channel
= channel
;
2623 if (changed
& IEEE80211_CONF_CHANGE_POWER
)
2624 wl
->power_level
= conf
->power_level
;
2626 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
2629 ret
= wl1271_ps_elp_wakeup(wl
);
2633 /* configure each interface */
2634 wl12xx_for_each_wlvif(wl
, wlvif
) {
2635 ret
= wl12xx_config_vif(wl
, wlvif
, conf
, changed
);
2641 wl1271_ps_elp_sleep(wl
);
2644 mutex_unlock(&wl
->mutex
);
2649 struct wl1271_filter_params
{
2652 u8 mc_list
[ACX_MC_ADDRESS_GROUP_MAX
][ETH_ALEN
];
2655 static u64
wl1271_op_prepare_multicast(struct ieee80211_hw
*hw
,
2656 struct netdev_hw_addr_list
*mc_list
)
2658 struct wl1271_filter_params
*fp
;
2659 struct netdev_hw_addr
*ha
;
2660 struct wl1271
*wl
= hw
->priv
;
2662 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
2665 fp
= kzalloc(sizeof(*fp
), GFP_ATOMIC
);
2667 wl1271_error("Out of memory setting filters.");
2671 /* update multicast filtering parameters */
2672 fp
->mc_list_length
= 0;
2673 if (netdev_hw_addr_list_count(mc_list
) > ACX_MC_ADDRESS_GROUP_MAX
) {
2674 fp
->enabled
= false;
2677 netdev_hw_addr_list_for_each(ha
, mc_list
) {
2678 memcpy(fp
->mc_list
[fp
->mc_list_length
],
2679 ha
->addr
, ETH_ALEN
);
2680 fp
->mc_list_length
++;
2684 return (u64
)(unsigned long)fp
;
2687 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
2690 FIF_BCN_PRBRESP_PROMISC | \
2694 static void wl1271_op_configure_filter(struct ieee80211_hw
*hw
,
2695 unsigned int changed
,
2696 unsigned int *total
, u64 multicast
)
2698 struct wl1271_filter_params
*fp
= (void *)(unsigned long)multicast
;
2699 struct wl1271
*wl
= hw
->priv
;
2700 struct wl12xx_vif
*wlvif
;
2704 wl1271_debug(DEBUG_MAC80211
, "mac80211 configure filter changed %x"
2705 " total %x", changed
, *total
);
2707 mutex_lock(&wl
->mutex
);
2709 *total
&= WL1271_SUPPORTED_FILTERS
;
2710 changed
&= WL1271_SUPPORTED_FILTERS
;
2712 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
2715 ret
= wl1271_ps_elp_wakeup(wl
);
2719 wl12xx_for_each_wlvif(wl
, wlvif
) {
2720 if (wlvif
->bss_type
!= BSS_TYPE_AP_BSS
) {
2721 if (*total
& FIF_ALLMULTI
)
2722 ret
= wl1271_acx_group_address_tbl(wl
, wlvif
,
2726 ret
= wl1271_acx_group_address_tbl(wl
, wlvif
,
2729 fp
->mc_list_length
);
2736 * the fw doesn't provide an api to configure the filters. instead,
2737 * the filters configuration is based on the active roles / ROC
2742 wl1271_ps_elp_sleep(wl
);
2745 mutex_unlock(&wl
->mutex
);
2749 static int wl1271_record_ap_key(struct wl1271
*wl
, struct wl12xx_vif
*wlvif
,
2750 u8 id
, u8 key_type
, u8 key_size
,
2751 const u8
*key
, u8 hlid
, u32 tx_seq_32
,
2754 struct wl1271_ap_key
*ap_key
;
2757 wl1271_debug(DEBUG_CRYPT
, "record ap key id %d", (int)id
);
2759 if (key_size
> MAX_KEY_SIZE
)
2763 * Find next free entry in ap_keys. Also check we are not replacing
2766 for (i
= 0; i
< MAX_NUM_KEYS
; i
++) {
2767 if (wlvif
->ap
.recorded_keys
[i
] == NULL
)
2770 if (wlvif
->ap
.recorded_keys
[i
]->id
== id
) {
2771 wl1271_warning("trying to record key replacement");
2776 if (i
== MAX_NUM_KEYS
)
2779 ap_key
= kzalloc(sizeof(*ap_key
), GFP_KERNEL
);
2784 ap_key
->key_type
= key_type
;
2785 ap_key
->key_size
= key_size
;
2786 memcpy(ap_key
->key
, key
, key_size
);
2787 ap_key
->hlid
= hlid
;
2788 ap_key
->tx_seq_32
= tx_seq_32
;
2789 ap_key
->tx_seq_16
= tx_seq_16
;
2791 wlvif
->ap
.recorded_keys
[i
] = ap_key
;
2795 static void wl1271_free_ap_keys(struct wl1271
*wl
, struct wl12xx_vif
*wlvif
)
2799 for (i
= 0; i
< MAX_NUM_KEYS
; i
++) {
2800 kfree(wlvif
->ap
.recorded_keys
[i
]);
2801 wlvif
->ap
.recorded_keys
[i
] = NULL
;
2805 static int wl1271_ap_init_hwenc(struct wl1271
*wl
, struct wl12xx_vif
*wlvif
)
2808 struct wl1271_ap_key
*key
;
2809 bool wep_key_added
= false;
2811 for (i
= 0; i
< MAX_NUM_KEYS
; i
++) {
2813 if (wlvif
->ap
.recorded_keys
[i
] == NULL
)
2816 key
= wlvif
->ap
.recorded_keys
[i
];
2818 if (hlid
== WL12XX_INVALID_LINK_ID
)
2819 hlid
= wlvif
->ap
.bcast_hlid
;
2821 ret
= wl1271_cmd_set_ap_key(wl
, wlvif
, KEY_ADD_OR_REPLACE
,
2822 key
->id
, key
->key_type
,
2823 key
->key_size
, key
->key
,
2824 hlid
, key
->tx_seq_32
,
2829 if (key
->key_type
== KEY_WEP
)
2830 wep_key_added
= true;
2833 if (wep_key_added
) {
2834 ret
= wl12xx_cmd_set_default_wep_key(wl
, wlvif
->default_key
,
2835 wlvif
->ap
.bcast_hlid
);
2841 wl1271_free_ap_keys(wl
, wlvif
);
2845 static int wl1271_set_key(struct wl1271
*wl
, struct wl12xx_vif
*wlvif
,
2846 u16 action
, u8 id
, u8 key_type
,
2847 u8 key_size
, const u8
*key
, u32 tx_seq_32
,
2848 u16 tx_seq_16
, struct ieee80211_sta
*sta
)
2851 bool is_ap
= (wlvif
->bss_type
== BSS_TYPE_AP_BSS
);
2854 struct wl1271_station
*wl_sta
;
2858 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
2859 hlid
= wl_sta
->hlid
;
2861 hlid
= wlvif
->ap
.bcast_hlid
;
2864 if (!test_bit(WLVIF_FLAG_AP_STARTED
, &wlvif
->flags
)) {
2866 * We do not support removing keys after AP shutdown.
2867 * Pretend we do to make mac80211 happy.
2869 if (action
!= KEY_ADD_OR_REPLACE
)
2872 ret
= wl1271_record_ap_key(wl
, wlvif
, id
,
2874 key
, hlid
, tx_seq_32
,
2877 ret
= wl1271_cmd_set_ap_key(wl
, wlvif
, action
,
2878 id
, key_type
, key_size
,
2879 key
, hlid
, tx_seq_32
,
2887 static const u8 bcast_addr
[ETH_ALEN
] = {
2888 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
2892 * A STA set to GEM cipher requires 2 tx spare blocks.
2893 * Return to default value when GEM cipher key is removed
2895 if (key_type
== KEY_GEM
) {
2896 if (action
== KEY_ADD_OR_REPLACE
)
2897 wl
->tx_spare_blocks
= 2;
2898 else if (action
== KEY_REMOVE
)
2899 wl
->tx_spare_blocks
= TX_HW_BLOCK_SPARE_DEFAULT
;
2902 addr
= sta
? sta
->addr
: bcast_addr
;
2904 if (is_zero_ether_addr(addr
)) {
2905 /* We dont support TX only encryption */
2909 /* The wl1271 does not allow to remove unicast keys - they
2910 will be cleared automatically on next CMD_JOIN. Ignore the
2911 request silently, as we dont want the mac80211 to emit
2912 an error message. */
2913 if (action
== KEY_REMOVE
&& !is_broadcast_ether_addr(addr
))
2916 /* don't remove key if hlid was already deleted */
2917 if (action
== KEY_REMOVE
&&
2918 wlvif
->sta
.hlid
== WL12XX_INVALID_LINK_ID
)
2921 ret
= wl1271_cmd_set_sta_key(wl
, wlvif
, action
,
2922 id
, key_type
, key_size
,
2923 key
, addr
, tx_seq_32
,
2928 /* the default WEP key needs to be configured at least once */
2929 if (key_type
== KEY_WEP
) {
2930 ret
= wl12xx_cmd_set_default_wep_key(wl
,
2941 static int wl1271_op_set_key(struct ieee80211_hw
*hw
, enum set_key_cmd cmd
,
2942 struct ieee80211_vif
*vif
,
2943 struct ieee80211_sta
*sta
,
2944 struct ieee80211_key_conf
*key_conf
)
2946 struct wl1271
*wl
= hw
->priv
;
2947 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
2953 wl1271_debug(DEBUG_MAC80211
, "mac80211 set key");
2955 wl1271_debug(DEBUG_CRYPT
, "CMD: 0x%x sta: %p", cmd
, sta
);
2956 wl1271_debug(DEBUG_CRYPT
, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
2957 key_conf
->cipher
, key_conf
->keyidx
,
2958 key_conf
->keylen
, key_conf
->flags
);
2959 wl1271_dump(DEBUG_CRYPT
, "KEY: ", key_conf
->key
, key_conf
->keylen
);
2961 mutex_lock(&wl
->mutex
);
2963 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
2968 ret
= wl1271_ps_elp_wakeup(wl
);
2972 switch (key_conf
->cipher
) {
2973 case WLAN_CIPHER_SUITE_WEP40
:
2974 case WLAN_CIPHER_SUITE_WEP104
:
2977 key_conf
->hw_key_idx
= key_conf
->keyidx
;
2979 case WLAN_CIPHER_SUITE_TKIP
:
2980 key_type
= KEY_TKIP
;
2982 key_conf
->hw_key_idx
= key_conf
->keyidx
;
2983 tx_seq_32
= WL1271_TX_SECURITY_HI32(wlvif
->tx_security_seq
);
2984 tx_seq_16
= WL1271_TX_SECURITY_LO16(wlvif
->tx_security_seq
);
2986 case WLAN_CIPHER_SUITE_CCMP
:
2989 key_conf
->flags
|= IEEE80211_KEY_FLAG_GENERATE_IV
;
2990 tx_seq_32
= WL1271_TX_SECURITY_HI32(wlvif
->tx_security_seq
);
2991 tx_seq_16
= WL1271_TX_SECURITY_LO16(wlvif
->tx_security_seq
);
2993 case WL1271_CIPHER_SUITE_GEM
:
2995 tx_seq_32
= WL1271_TX_SECURITY_HI32(wlvif
->tx_security_seq
);
2996 tx_seq_16
= WL1271_TX_SECURITY_LO16(wlvif
->tx_security_seq
);
2999 wl1271_error("Unknown key algo 0x%x", key_conf
->cipher
);
3007 ret
= wl1271_set_key(wl
, wlvif
, KEY_ADD_OR_REPLACE
,
3008 key_conf
->keyidx
, key_type
,
3009 key_conf
->keylen
, key_conf
->key
,
3010 tx_seq_32
, tx_seq_16
, sta
);
3012 wl1271_error("Could not add or replace key");
3018 ret
= wl1271_set_key(wl
, wlvif
, KEY_REMOVE
,
3019 key_conf
->keyidx
, key_type
,
3020 key_conf
->keylen
, key_conf
->key
,
3023 wl1271_error("Could not remove key");
3029 wl1271_error("Unsupported key cmd 0x%x", cmd
);
3035 wl1271_ps_elp_sleep(wl
);
3038 mutex_unlock(&wl
->mutex
);
3043 static int wl1271_op_hw_scan(struct ieee80211_hw
*hw
,
3044 struct ieee80211_vif
*vif
,
3045 struct cfg80211_scan_request
*req
)
3047 struct wl1271
*wl
= hw
->priv
;
3048 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
3054 wl1271_debug(DEBUG_MAC80211
, "mac80211 hw scan");
3057 ssid
= req
->ssids
[0].ssid
;
3058 len
= req
->ssids
[0].ssid_len
;
3061 mutex_lock(&wl
->mutex
);
3063 if (wl
->state
== WL1271_STATE_OFF
) {
3065 * We cannot return -EBUSY here because cfg80211 will expect
3066 * a call to ieee80211_scan_completed if we do - in this case
3067 * there won't be any call.
3073 ret
= wl1271_ps_elp_wakeup(wl
);
3077 /* cancel ROC before scanning */
3078 if (wl12xx_is_roc(wl
)) {
3079 if (test_bit(WLVIF_FLAG_STA_ASSOCIATED
, &wlvif
->flags
)) {
3080 /* don't allow scanning right now */
3084 wl12xx_stop_dev(wl
, wlvif
);
3087 ret
= wl1271_scan(hw
->priv
, vif
, ssid
, len
, req
);
3089 wl1271_ps_elp_sleep(wl
);
3091 mutex_unlock(&wl
->mutex
);
3096 static void wl1271_op_cancel_hw_scan(struct ieee80211_hw
*hw
,
3097 struct ieee80211_vif
*vif
)
3099 struct wl1271
*wl
= hw
->priv
;
3102 wl1271_debug(DEBUG_MAC80211
, "mac80211 cancel hw scan");
3104 mutex_lock(&wl
->mutex
);
3106 if (wl
->state
== WL1271_STATE_OFF
)
3109 if (wl
->scan
.state
== WL1271_SCAN_STATE_IDLE
)
3112 ret
= wl1271_ps_elp_wakeup(wl
);
3116 if (wl
->scan
.state
!= WL1271_SCAN_STATE_DONE
) {
3117 ret
= wl1271_scan_stop(wl
);
3121 wl
->scan
.state
= WL1271_SCAN_STATE_IDLE
;
3122 memset(wl
->scan
.scanned_ch
, 0, sizeof(wl
->scan
.scanned_ch
));
3123 wl
->scan_vif
= NULL
;
3124 wl
->scan
.req
= NULL
;
3125 ieee80211_scan_completed(wl
->hw
, true);
3128 wl1271_ps_elp_sleep(wl
);
3130 mutex_unlock(&wl
->mutex
);
3132 cancel_delayed_work_sync(&wl
->scan_complete_work
);
3135 static int wl1271_op_sched_scan_start(struct ieee80211_hw
*hw
,
3136 struct ieee80211_vif
*vif
,
3137 struct cfg80211_sched_scan_request
*req
,
3138 struct ieee80211_sched_scan_ies
*ies
)
3140 struct wl1271
*wl
= hw
->priv
;
3141 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
3144 wl1271_debug(DEBUG_MAC80211
, "wl1271_op_sched_scan_start");
3146 mutex_lock(&wl
->mutex
);
3148 ret
= wl1271_ps_elp_wakeup(wl
);
3152 ret
= wl1271_scan_sched_scan_config(wl
, wlvif
, req
, ies
);
3156 ret
= wl1271_scan_sched_scan_start(wl
, wlvif
);
3160 wl
->sched_scanning
= true;
3163 wl1271_ps_elp_sleep(wl
);
3165 mutex_unlock(&wl
->mutex
);
3169 static void wl1271_op_sched_scan_stop(struct ieee80211_hw
*hw
,
3170 struct ieee80211_vif
*vif
)
3172 struct wl1271
*wl
= hw
->priv
;
3175 wl1271_debug(DEBUG_MAC80211
, "wl1271_op_sched_scan_stop");
3177 mutex_lock(&wl
->mutex
);
3179 ret
= wl1271_ps_elp_wakeup(wl
);
3183 wl1271_scan_sched_scan_stop(wl
);
3185 wl1271_ps_elp_sleep(wl
);
3187 mutex_unlock(&wl
->mutex
);
3190 static int wl1271_op_set_frag_threshold(struct ieee80211_hw
*hw
, u32 value
)
3192 struct wl1271
*wl
= hw
->priv
;
3195 mutex_lock(&wl
->mutex
);
3197 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
3202 ret
= wl1271_ps_elp_wakeup(wl
);
3206 ret
= wl1271_acx_frag_threshold(wl
, value
);
3208 wl1271_warning("wl1271_op_set_frag_threshold failed: %d", ret
);
3210 wl1271_ps_elp_sleep(wl
);
3213 mutex_unlock(&wl
->mutex
);
3218 static int wl1271_op_set_rts_threshold(struct ieee80211_hw
*hw
, u32 value
)
3220 struct wl1271
*wl
= hw
->priv
;
3221 struct wl12xx_vif
*wlvif
;
3224 mutex_lock(&wl
->mutex
);
3226 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
3231 ret
= wl1271_ps_elp_wakeup(wl
);
3235 wl12xx_for_each_wlvif(wl
, wlvif
) {
3236 ret
= wl1271_acx_rts_threshold(wl
, wlvif
, value
);
3238 wl1271_warning("set rts threshold failed: %d", ret
);
3240 wl1271_ps_elp_sleep(wl
);
3243 mutex_unlock(&wl
->mutex
);
3248 static int wl1271_ssid_set(struct ieee80211_vif
*vif
, struct sk_buff
*skb
,
3251 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
3253 const u8
*ptr
= cfg80211_find_ie(WLAN_EID_SSID
, skb
->data
+ offset
,
3257 wl1271_error("No SSID in IEs!");
3262 if (ssid_len
> IEEE80211_MAX_SSID_LEN
) {
3263 wl1271_error("SSID is too long!");
3267 wlvif
->ssid_len
= ssid_len
;
3268 memcpy(wlvif
->ssid
, ptr
+2, ssid_len
);
3272 static void wl12xx_remove_ie(struct sk_buff
*skb
, u8 eid
, int ieoffset
)
3275 const u8
*next
, *end
= skb
->data
+ skb
->len
;
3276 u8
*ie
= (u8
*)cfg80211_find_ie(eid
, skb
->data
+ ieoffset
,
3277 skb
->len
- ieoffset
);
3282 memmove(ie
, next
, end
- next
);
3283 skb_trim(skb
, skb
->len
- len
);
3286 static void wl12xx_remove_vendor_ie(struct sk_buff
*skb
,
3287 unsigned int oui
, u8 oui_type
,
3291 const u8
*next
, *end
= skb
->data
+ skb
->len
;
3292 u8
*ie
= (u8
*)cfg80211_find_vendor_ie(oui
, oui_type
,
3293 skb
->data
+ ieoffset
,
3294 skb
->len
- ieoffset
);
3299 memmove(ie
, next
, end
- next
);
3300 skb_trim(skb
, skb
->len
- len
);
3303 static int wl1271_ap_set_probe_resp_tmpl(struct wl1271
*wl
,
3304 struct ieee80211_vif
*vif
,
3306 size_t probe_rsp_len
,
3309 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
3310 struct ieee80211_bss_conf
*bss_conf
= &vif
->bss_conf
;
3311 u8 probe_rsp_templ
[WL1271_CMD_TEMPL_MAX_SIZE
];
3312 int ssid_ie_offset
, ie_offset
, templ_len
;
3315 /* no need to change probe response if the SSID is set correctly */
3316 if (wlvif
->ssid_len
> 0)
3317 return wl1271_cmd_template_set(wl
,
3318 CMD_TEMPL_AP_PROBE_RESPONSE
,
3323 if (probe_rsp_len
+ bss_conf
->ssid_len
> WL1271_CMD_TEMPL_MAX_SIZE
) {
3324 wl1271_error("probe_rsp template too big");
3328 /* start searching from IE offset */
3329 ie_offset
= offsetof(struct ieee80211_mgmt
, u
.probe_resp
.variable
);
3331 ptr
= cfg80211_find_ie(WLAN_EID_SSID
, probe_rsp_data
+ ie_offset
,
3332 probe_rsp_len
- ie_offset
);
3334 wl1271_error("No SSID in beacon!");
3338 ssid_ie_offset
= ptr
- probe_rsp_data
;
3339 ptr
+= (ptr
[1] + 2);
3341 memcpy(probe_rsp_templ
, probe_rsp_data
, ssid_ie_offset
);
3343 /* insert SSID from bss_conf */
3344 probe_rsp_templ
[ssid_ie_offset
] = WLAN_EID_SSID
;
3345 probe_rsp_templ
[ssid_ie_offset
+ 1] = bss_conf
->ssid_len
;
3346 memcpy(probe_rsp_templ
+ ssid_ie_offset
+ 2,
3347 bss_conf
->ssid
, bss_conf
->ssid_len
);
3348 templ_len
= ssid_ie_offset
+ 2 + bss_conf
->ssid_len
;
3350 memcpy(probe_rsp_templ
+ ssid_ie_offset
+ 2 + bss_conf
->ssid_len
,
3351 ptr
, probe_rsp_len
- (ptr
- probe_rsp_data
));
3352 templ_len
+= probe_rsp_len
- (ptr
- probe_rsp_data
);
3354 return wl1271_cmd_template_set(wl
,
3355 CMD_TEMPL_AP_PROBE_RESPONSE
,
3361 static int wl1271_bss_erp_info_changed(struct wl1271
*wl
,
3362 struct ieee80211_vif
*vif
,
3363 struct ieee80211_bss_conf
*bss_conf
,
3366 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
3369 if (changed
& BSS_CHANGED_ERP_SLOT
) {
3370 if (bss_conf
->use_short_slot
)
3371 ret
= wl1271_acx_slot(wl
, wlvif
, SLOT_TIME_SHORT
);
3373 ret
= wl1271_acx_slot(wl
, wlvif
, SLOT_TIME_LONG
);
3375 wl1271_warning("Set slot time failed %d", ret
);
3380 if (changed
& BSS_CHANGED_ERP_PREAMBLE
) {
3381 if (bss_conf
->use_short_preamble
)
3382 wl1271_acx_set_preamble(wl
, wlvif
, ACX_PREAMBLE_SHORT
);
3384 wl1271_acx_set_preamble(wl
, wlvif
, ACX_PREAMBLE_LONG
);
3387 if (changed
& BSS_CHANGED_ERP_CTS_PROT
) {
3388 if (bss_conf
->use_cts_prot
)
3389 ret
= wl1271_acx_cts_protect(wl
, wlvif
,
3392 ret
= wl1271_acx_cts_protect(wl
, wlvif
,
3393 CTSPROTECT_DISABLE
);
3395 wl1271_warning("Set ctsprotect failed %d", ret
);
3404 static int wl1271_bss_beacon_info_changed(struct wl1271
*wl
,
3405 struct ieee80211_vif
*vif
,
3406 struct ieee80211_bss_conf
*bss_conf
,
3409 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
3410 bool is_ap
= (wlvif
->bss_type
== BSS_TYPE_AP_BSS
);
3413 if ((changed
& BSS_CHANGED_BEACON_INT
)) {
3414 wl1271_debug(DEBUG_MASTER
, "beacon interval updated: %d",
3415 bss_conf
->beacon_int
);
3417 wlvif
->beacon_int
= bss_conf
->beacon_int
;
3420 if ((changed
& BSS_CHANGED_BEACON
)) {
3421 struct ieee80211_hdr
*hdr
;
3423 int ieoffset
= offsetof(struct ieee80211_mgmt
,
3425 struct sk_buff
*beacon
= ieee80211_beacon_get(wl
->hw
, vif
);
3431 wl1271_debug(DEBUG_MASTER
, "beacon updated");
3433 ret
= wl1271_ssid_set(vif
, beacon
, ieoffset
);
3435 dev_kfree_skb(beacon
);
3438 min_rate
= wl1271_tx_min_rate_get(wl
, wlvif
->basic_rate_set
);
3439 tmpl_id
= is_ap
? CMD_TEMPL_AP_BEACON
:
3441 ret
= wl1271_cmd_template_set(wl
, tmpl_id
,
3446 dev_kfree_skb(beacon
);
3450 /* remove TIM ie from probe response */
3451 wl12xx_remove_ie(beacon
, WLAN_EID_TIM
, ieoffset
);
3454 * remove p2p ie from probe response.
3455 * the fw reponds to probe requests that don't include
3456 * the p2p ie. probe requests with p2p ie will be passed,
3457 * and will be responded by the supplicant (the spec
3458 * forbids including the p2p ie when responding to probe
3459 * requests that didn't include it).
3461 wl12xx_remove_vendor_ie(beacon
, WLAN_OUI_WFA
,
3462 WLAN_OUI_TYPE_WFA_P2P
, ieoffset
);
3464 hdr
= (struct ieee80211_hdr
*) beacon
->data
;
3465 hdr
->frame_control
= cpu_to_le16(IEEE80211_FTYPE_MGMT
|
3466 IEEE80211_STYPE_PROBE_RESP
);
3468 ret
= wl1271_ap_set_probe_resp_tmpl(wl
, vif
,
3473 ret
= wl1271_cmd_template_set(wl
,
3474 CMD_TEMPL_PROBE_RESPONSE
,
3478 dev_kfree_skb(beacon
);
3487 /* AP mode changes */
3488 static void wl1271_bss_info_changed_ap(struct wl1271
*wl
,
3489 struct ieee80211_vif
*vif
,
3490 struct ieee80211_bss_conf
*bss_conf
,
3493 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
3496 if ((changed
& BSS_CHANGED_BASIC_RATES
)) {
3497 u32 rates
= bss_conf
->basic_rates
;
3499 wlvif
->basic_rate_set
= wl1271_tx_enabled_rates_get(wl
, rates
,
3501 wlvif
->basic_rate
= wl1271_tx_min_rate_get(wl
,
3502 wlvif
->basic_rate_set
);
3504 ret
= wl1271_init_ap_rates(wl
, wlvif
);
3506 wl1271_error("AP rate policy change failed %d", ret
);
3510 ret
= wl1271_ap_init_templates(wl
, vif
);
3515 ret
= wl1271_bss_beacon_info_changed(wl
, vif
, bss_conf
, changed
);
3519 if ((changed
& BSS_CHANGED_BEACON_ENABLED
)) {
3520 if (bss_conf
->enable_beacon
) {
3521 if (!test_bit(WLVIF_FLAG_AP_STARTED
, &wlvif
->flags
)) {
3522 ret
= wl12xx_cmd_role_start_ap(wl
, wlvif
);
3526 ret
= wl1271_ap_init_hwenc(wl
, wlvif
);
3530 set_bit(WLVIF_FLAG_AP_STARTED
, &wlvif
->flags
);
3531 wl1271_debug(DEBUG_AP
, "started AP");
3534 if (test_bit(WLVIF_FLAG_AP_STARTED
, &wlvif
->flags
)) {
3535 ret
= wl12xx_cmd_role_stop_ap(wl
, wlvif
);
3539 clear_bit(WLVIF_FLAG_AP_STARTED
, &wlvif
->flags
);
3540 wl1271_debug(DEBUG_AP
, "stopped AP");
3545 ret
= wl1271_bss_erp_info_changed(wl
, vif
, bss_conf
, changed
);
3549 /* Handle HT information change */
3550 if ((changed
& BSS_CHANGED_HT
) &&
3551 (bss_conf
->channel_type
!= NL80211_CHAN_NO_HT
)) {
3552 ret
= wl1271_acx_set_ht_information(wl
, wlvif
,
3553 bss_conf
->ht_operation_mode
);
3555 wl1271_warning("Set ht information failed %d", ret
);
3564 /* STA/IBSS mode changes */
3565 static void wl1271_bss_info_changed_sta(struct wl1271
*wl
,
3566 struct ieee80211_vif
*vif
,
3567 struct ieee80211_bss_conf
*bss_conf
,
3570 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
3571 bool do_join
= false, set_assoc
= false;
3572 bool is_ibss
= (wlvif
->bss_type
== BSS_TYPE_IBSS
);
3573 bool ibss_joined
= false;
3574 u32 sta_rate_set
= 0;
3576 struct ieee80211_sta
*sta
;
3577 bool sta_exists
= false;
3578 struct ieee80211_sta_ht_cap sta_ht_cap
;
3581 ret
= wl1271_bss_beacon_info_changed(wl
, vif
, bss_conf
,
3587 if (changed
& BSS_CHANGED_IBSS
) {
3588 if (bss_conf
->ibss_joined
) {
3589 set_bit(WLVIF_FLAG_IBSS_JOINED
, &wlvif
->flags
);
3592 if (test_and_clear_bit(WLVIF_FLAG_IBSS_JOINED
,
3594 wl1271_unjoin(wl
, wlvif
);
3595 wl12xx_start_dev(wl
, wlvif
);
3600 if ((changed
& BSS_CHANGED_BEACON_INT
) && ibss_joined
)
3603 /* Need to update the SSID (for filtering etc) */
3604 if ((changed
& BSS_CHANGED_BEACON
) && ibss_joined
)
3607 if ((changed
& BSS_CHANGED_BEACON_ENABLED
) && ibss_joined
) {
3608 wl1271_debug(DEBUG_ADHOC
, "ad-hoc beaconing: %s",
3609 bss_conf
->enable_beacon
? "enabled" : "disabled");
3614 if ((changed
& BSS_CHANGED_CQM
)) {
3615 bool enable
= false;
3616 if (bss_conf
->cqm_rssi_thold
)
3618 ret
= wl1271_acx_rssi_snr_trigger(wl
, wlvif
, enable
,
3619 bss_conf
->cqm_rssi_thold
,
3620 bss_conf
->cqm_rssi_hyst
);
3623 wlvif
->rssi_thold
= bss_conf
->cqm_rssi_thold
;
3626 if (changed
& BSS_CHANGED_BSSID
)
3627 if (!is_zero_ether_addr(bss_conf
->bssid
)) {
3628 ret
= wl12xx_cmd_build_null_data(wl
, wlvif
);
3632 ret
= wl1271_build_qos_null_data(wl
, vif
);
3636 /* Need to update the BSSID (for filtering etc) */
3640 if (changed
& (BSS_CHANGED_ASSOC
| BSS_CHANGED_HT
)) {
3642 sta
= ieee80211_find_sta(vif
, bss_conf
->bssid
);
3646 /* save the supp_rates of the ap */
3647 sta_rate_set
= sta
->supp_rates
[wl
->hw
->conf
.channel
->band
];
3648 if (sta
->ht_cap
.ht_supported
)
3650 (sta
->ht_cap
.mcs
.rx_mask
[0] << HW_HT_RATES_OFFSET
);
3651 sta_ht_cap
= sta
->ht_cap
;
3658 if ((changed
& BSS_CHANGED_ASSOC
)) {
3659 if (bss_conf
->assoc
) {
3662 wlvif
->aid
= bss_conf
->aid
;
3665 wlvif
->ps_poll_failures
= 0;
3668 * use basic rates from AP, and determine lowest rate
3669 * to use with control frames.
3671 rates
= bss_conf
->basic_rates
;
3672 wlvif
->basic_rate_set
=
3673 wl1271_tx_enabled_rates_get(wl
, rates
,
3676 wl1271_tx_min_rate_get(wl
,
3677 wlvif
->basic_rate_set
);
3680 wl1271_tx_enabled_rates_get(wl
,
3683 ret
= wl1271_acx_sta_rate_policies(wl
, wlvif
);
3688 * with wl1271, we don't need to update the
3689 * beacon_int and dtim_period, because the firmware
3690 * updates it by itself when the first beacon is
3691 * received after a join.
3693 ret
= wl1271_cmd_build_ps_poll(wl
, wlvif
, wlvif
->aid
);
3698 * Get a template for hardware connection maintenance
3700 dev_kfree_skb(wlvif
->probereq
);
3701 wlvif
->probereq
= wl1271_cmd_build_ap_probe_req(wl
,
3704 ieoffset
= offsetof(struct ieee80211_mgmt
,
3705 u
.probe_req
.variable
);
3706 wl1271_ssid_set(vif
, wlvif
->probereq
, ieoffset
);
3708 /* enable the connection monitoring feature */
3709 ret
= wl1271_acx_conn_monit_params(wl
, wlvif
, true);
3713 /* use defaults when not associated */
3715 !!test_and_clear_bit(WLVIF_FLAG_STA_ASSOCIATED
,
3718 !!test_and_clear_bit(WLVIF_FLAG_STA_STATE_SENT
,
3722 /* free probe-request template */
3723 dev_kfree_skb(wlvif
->probereq
);
3724 wlvif
->probereq
= NULL
;
3726 /* re-enable dynamic ps - just in case */
3727 ieee80211_enable_dyn_ps(vif
);
3729 /* revert back to minimum rates for the current band */
3730 wl1271_set_band_rate(wl
, wlvif
);
3732 wl1271_tx_min_rate_get(wl
,
3733 wlvif
->basic_rate_set
);
3734 ret
= wl1271_acx_sta_rate_policies(wl
, wlvif
);
3738 /* disable connection monitor features */
3739 ret
= wl1271_acx_conn_monit_params(wl
, wlvif
, false);
3741 /* Disable the keep-alive feature */
3742 ret
= wl1271_acx_keep_alive_mode(wl
, wlvif
, false);
3746 /* restore the bssid filter and go to dummy bssid */
3748 u32 conf_flags
= wl
->hw
->conf
.flags
;
3750 * we might have to disable roc, if there was
3751 * no IF_OPER_UP notification.
3754 ret
= wl12xx_croc(wl
, wlvif
->role_id
);
3759 * (we also need to disable roc in case of
3760 * roaming on the same channel. until we will
3761 * have a better flow...)
3763 if (test_bit(wlvif
->dev_role_id
, wl
->roc_map
)) {
3764 ret
= wl12xx_croc(wl
,
3765 wlvif
->dev_role_id
);
3770 wl1271_unjoin(wl
, wlvif
);
3771 if (!(conf_flags
& IEEE80211_CONF_IDLE
))
3772 wl12xx_start_dev(wl
, wlvif
);
3777 if (changed
& BSS_CHANGED_IBSS
) {
3778 wl1271_debug(DEBUG_ADHOC
, "ibss_joined: %d",
3779 bss_conf
->ibss_joined
);
3781 if (bss_conf
->ibss_joined
) {
3782 u32 rates
= bss_conf
->basic_rates
;
3783 wlvif
->basic_rate_set
=
3784 wl1271_tx_enabled_rates_get(wl
, rates
,
3787 wl1271_tx_min_rate_get(wl
,
3788 wlvif
->basic_rate_set
);
3790 /* by default, use 11b + OFDM rates */
3791 wlvif
->rate_set
= CONF_TX_IBSS_DEFAULT_RATES
;
3792 ret
= wl1271_acx_sta_rate_policies(wl
, wlvif
);
3798 ret
= wl1271_bss_erp_info_changed(wl
, vif
, bss_conf
, changed
);
3802 if (changed
& BSS_CHANGED_ARP_FILTER
) {
3803 __be32 addr
= bss_conf
->arp_addr_list
[0];
3804 WARN_ON(wlvif
->bss_type
!= BSS_TYPE_STA_BSS
);
3806 if (bss_conf
->arp_addr_cnt
== 1 &&
3807 bss_conf
->arp_filter_enabled
) {
3809 * The template should have been configured only upon
3810 * association. however, it seems that the correct ip
3811 * isn't being set (when sending), so we have to
3812 * reconfigure the template upon every ip change.
3814 ret
= wl1271_cmd_build_arp_rsp(wl
, wlvif
, addr
);
3816 wl1271_warning("build arp rsp failed: %d", ret
);
3820 ret
= wl1271_acx_arp_ip_filter(wl
, wlvif
,
3821 ACX_ARP_FILTER_ARP_FILTERING
,
3824 ret
= wl1271_acx_arp_ip_filter(wl
, wlvif
, 0, addr
);
3831 ret
= wl1271_join(wl
, wlvif
, set_assoc
);
3833 wl1271_warning("cmd join failed %d", ret
);
3837 /* ROC until connected (after EAPOL exchange) */
3839 ret
= wl12xx_roc(wl
, wlvif
, wlvif
->role_id
);
3843 wl1271_check_operstate(wl
, wlvif
,
3844 ieee80211_get_operstate(vif
));
3847 * stop device role if started (we might already be in
3848 * STA role). TODO: make it better.
3850 if (wlvif
->dev_role_id
!= WL12XX_INVALID_ROLE_ID
) {
3851 ret
= wl12xx_stop_dev(wl
, wlvif
);
3856 /* If we want to go in PSM but we're not there yet */
3857 if (test_bit(WLVIF_FLAG_PSM_REQUESTED
, &wlvif
->flags
) &&
3858 !test_bit(WLVIF_FLAG_PSM
, &wlvif
->flags
)) {
3859 enum wl1271_cmd_ps_mode mode
;
3861 mode
= STATION_POWER_SAVE_MODE
;
3862 ret
= wl1271_ps_set_mode(wl
, wlvif
, mode
,
3870 /* Handle new association with HT. Do this after join. */
3872 if ((changed
& BSS_CHANGED_HT
) &&
3873 (bss_conf
->channel_type
!= NL80211_CHAN_NO_HT
)) {
3874 ret
= wl1271_acx_set_ht_capabilities(wl
,
3879 wl1271_warning("Set ht cap true failed %d",
3884 /* handle new association without HT and disassociation */
3885 else if (changed
& BSS_CHANGED_ASSOC
) {
3886 ret
= wl1271_acx_set_ht_capabilities(wl
,
3891 wl1271_warning("Set ht cap false failed %d",
3898 /* Handle HT information change. Done after join. */
3899 if ((changed
& BSS_CHANGED_HT
) &&
3900 (bss_conf
->channel_type
!= NL80211_CHAN_NO_HT
)) {
3901 ret
= wl1271_acx_set_ht_information(wl
, wlvif
,
3902 bss_conf
->ht_operation_mode
);
3904 wl1271_warning("Set ht information failed %d", ret
);
3913 static void wl1271_op_bss_info_changed(struct ieee80211_hw
*hw
,
3914 struct ieee80211_vif
*vif
,
3915 struct ieee80211_bss_conf
*bss_conf
,
3918 struct wl1271
*wl
= hw
->priv
;
3919 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
3920 bool is_ap
= (wlvif
->bss_type
== BSS_TYPE_AP_BSS
);
3923 wl1271_debug(DEBUG_MAC80211
, "mac80211 bss info changed 0x%x",
3926 mutex_lock(&wl
->mutex
);
3928 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
3931 if (unlikely(!test_bit(WLVIF_FLAG_INITIALIZED
, &wlvif
->flags
)))
3934 ret
= wl1271_ps_elp_wakeup(wl
);
3939 wl1271_bss_info_changed_ap(wl
, vif
, bss_conf
, changed
);
3941 wl1271_bss_info_changed_sta(wl
, vif
, bss_conf
, changed
);
3943 wl1271_ps_elp_sleep(wl
);
3946 mutex_unlock(&wl
->mutex
);
3949 static int wl1271_op_conf_tx(struct ieee80211_hw
*hw
,
3950 struct ieee80211_vif
*vif
, u16 queue
,
3951 const struct ieee80211_tx_queue_params
*params
)
3953 struct wl1271
*wl
= hw
->priv
;
3954 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
3958 mutex_lock(&wl
->mutex
);
3960 wl1271_debug(DEBUG_MAC80211
, "mac80211 conf tx %d", queue
);
3963 ps_scheme
= CONF_PS_SCHEME_UPSD_TRIGGER
;
3965 ps_scheme
= CONF_PS_SCHEME_LEGACY
;
3967 if (wl
->state
== WL1271_STATE_OFF
) {
3969 * If the state is off, the parameters will be recorded and
3970 * configured on init. This happens in AP-mode.
3972 struct conf_tx_ac_category
*conf_ac
=
3973 &wl
->conf
.tx
.ac_conf
[wl1271_tx_get_queue(queue
)];
3974 struct conf_tx_tid
*conf_tid
=
3975 &wl
->conf
.tx
.tid_conf
[wl1271_tx_get_queue(queue
)];
3977 conf_ac
->ac
= wl1271_tx_get_queue(queue
);
3978 conf_ac
->cw_min
= (u8
)params
->cw_min
;
3979 conf_ac
->cw_max
= params
->cw_max
;
3980 conf_ac
->aifsn
= params
->aifs
;
3981 conf_ac
->tx_op_limit
= params
->txop
<< 5;
3983 conf_tid
->queue_id
= wl1271_tx_get_queue(queue
);
3984 conf_tid
->channel_type
= CONF_CHANNEL_TYPE_EDCF
;
3985 conf_tid
->tsid
= wl1271_tx_get_queue(queue
);
3986 conf_tid
->ps_scheme
= ps_scheme
;
3987 conf_tid
->ack_policy
= CONF_ACK_POLICY_LEGACY
;
3988 conf_tid
->apsd_conf
[0] = 0;
3989 conf_tid
->apsd_conf
[1] = 0;
3993 ret
= wl1271_ps_elp_wakeup(wl
);
3998 * the txop is confed in units of 32us by the mac80211,
4001 ret
= wl1271_acx_ac_cfg(wl
, wlvif
, wl1271_tx_get_queue(queue
),
4002 params
->cw_min
, params
->cw_max
,
4003 params
->aifs
, params
->txop
<< 5);
4007 ret
= wl1271_acx_tid_cfg(wl
, wlvif
, wl1271_tx_get_queue(queue
),
4008 CONF_CHANNEL_TYPE_EDCF
,
4009 wl1271_tx_get_queue(queue
),
4010 ps_scheme
, CONF_ACK_POLICY_LEGACY
,
4014 wl1271_ps_elp_sleep(wl
);
4017 mutex_unlock(&wl
->mutex
);
4022 static u64
wl1271_op_get_tsf(struct ieee80211_hw
*hw
,
4023 struct ieee80211_vif
*vif
)
4026 struct wl1271
*wl
= hw
->priv
;
4027 u64 mactime
= ULLONG_MAX
;
4030 wl1271_debug(DEBUG_MAC80211
, "mac80211 get tsf");
4032 mutex_lock(&wl
->mutex
);
4034 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
4037 ret
= wl1271_ps_elp_wakeup(wl
);
4041 ret
= wl1271_acx_tsf_info(wl
, &mactime
);
4046 wl1271_ps_elp_sleep(wl
);
4049 mutex_unlock(&wl
->mutex
);
4053 static int wl1271_op_get_survey(struct ieee80211_hw
*hw
, int idx
,
4054 struct survey_info
*survey
)
4056 struct wl1271
*wl
= hw
->priv
;
4057 struct ieee80211_conf
*conf
= &hw
->conf
;
4062 survey
->channel
= conf
->channel
;
4063 survey
->filled
= SURVEY_INFO_NOISE_DBM
;
4064 survey
->noise
= wl
->noise
;
4069 static int wl1271_allocate_sta(struct wl1271
*wl
,
4070 struct wl12xx_vif
*wlvif
,
4071 struct ieee80211_sta
*sta
)
4073 struct wl1271_station
*wl_sta
;
4077 if (wl
->active_sta_count
>= AP_MAX_STATIONS
) {
4078 wl1271_warning("could not allocate HLID - too much stations");
4082 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
4083 ret
= wl12xx_allocate_link(wl
, wlvif
, &wl_sta
->hlid
);
4085 wl1271_warning("could not allocate HLID - too many links");
4089 set_bit(wl_sta
->hlid
, wlvif
->ap
.sta_hlid_map
);
4090 memcpy(wl
->links
[wl_sta
->hlid
].addr
, sta
->addr
, ETH_ALEN
);
4091 wl
->active_sta_count
++;
4095 void wl1271_free_sta(struct wl1271
*wl
, struct wl12xx_vif
*wlvif
, u8 hlid
)
4097 if (!test_bit(hlid
, wlvif
->ap
.sta_hlid_map
))
4100 clear_bit(hlid
, wlvif
->ap
.sta_hlid_map
);
4101 memset(wl
->links
[hlid
].addr
, 0, ETH_ALEN
);
4102 wl
->links
[hlid
].ba_bitmap
= 0;
4103 wl1271_tx_reset_link_queues(wl
, hlid
);
4104 __clear_bit(hlid
, &wl
->ap_ps_map
);
4105 __clear_bit(hlid
, (unsigned long *)&wl
->ap_fw_ps_map
);
4106 wl12xx_free_link(wl
, wlvif
, &hlid
);
4107 wl
->active_sta_count
--;
4110 static int wl1271_op_sta_add(struct ieee80211_hw
*hw
,
4111 struct ieee80211_vif
*vif
,
4112 struct ieee80211_sta
*sta
)
4114 struct wl1271
*wl
= hw
->priv
;
4115 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
4116 struct wl1271_station
*wl_sta
;
4120 mutex_lock(&wl
->mutex
);
4122 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
4125 if (wlvif
->bss_type
!= BSS_TYPE_AP_BSS
)
4128 wl1271_debug(DEBUG_MAC80211
, "mac80211 add sta %d", (int)sta
->aid
);
4130 ret
= wl1271_allocate_sta(wl
, wlvif
, sta
);
4134 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
4135 hlid
= wl_sta
->hlid
;
4137 ret
= wl1271_ps_elp_wakeup(wl
);
4141 ret
= wl12xx_cmd_add_peer(wl
, wlvif
, sta
, hlid
);
4145 ret
= wl12xx_cmd_set_peer_state(wl
, hlid
);
4149 ret
= wl1271_acx_set_ht_capabilities(wl
, &sta
->ht_cap
, true, hlid
);
4154 wl1271_ps_elp_sleep(wl
);
4158 wl1271_free_sta(wl
, wlvif
, hlid
);
4161 mutex_unlock(&wl
->mutex
);
4165 static int wl1271_op_sta_remove(struct ieee80211_hw
*hw
,
4166 struct ieee80211_vif
*vif
,
4167 struct ieee80211_sta
*sta
)
4169 struct wl1271
*wl
= hw
->priv
;
4170 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
4171 struct wl1271_station
*wl_sta
;
4174 mutex_lock(&wl
->mutex
);
4176 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
4179 if (wlvif
->bss_type
!= BSS_TYPE_AP_BSS
)
4182 wl1271_debug(DEBUG_MAC80211
, "mac80211 remove sta %d", (int)sta
->aid
);
4184 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
4186 if (WARN_ON(!test_bit(id
, wlvif
->ap
.sta_hlid_map
)))
4189 ret
= wl1271_ps_elp_wakeup(wl
);
4193 ret
= wl12xx_cmd_remove_peer(wl
, wl_sta
->hlid
);
4197 wl1271_free_sta(wl
, wlvif
, wl_sta
->hlid
);
4200 wl1271_ps_elp_sleep(wl
);
4203 mutex_unlock(&wl
->mutex
);
4207 static int wl1271_op_ampdu_action(struct ieee80211_hw
*hw
,
4208 struct ieee80211_vif
*vif
,
4209 enum ieee80211_ampdu_mlme_action action
,
4210 struct ieee80211_sta
*sta
, u16 tid
, u16
*ssn
,
4213 struct wl1271
*wl
= hw
->priv
;
4214 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
4216 u8 hlid
, *ba_bitmap
;
4218 wl1271_debug(DEBUG_MAC80211
, "mac80211 ampdu action %d tid %d", action
,
4221 /* sanity check - the fields in FW are only 8bits wide */
4222 if (WARN_ON(tid
> 0xFF))
4225 mutex_lock(&wl
->mutex
);
4227 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
4232 if (wlvif
->bss_type
== BSS_TYPE_STA_BSS
) {
4233 hlid
= wlvif
->sta
.hlid
;
4234 ba_bitmap
= &wlvif
->sta
.ba_rx_bitmap
;
4235 } else if (wlvif
->bss_type
== BSS_TYPE_AP_BSS
) {
4236 struct wl1271_station
*wl_sta
;
4238 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
4239 hlid
= wl_sta
->hlid
;
4240 ba_bitmap
= &wl
->links
[hlid
].ba_bitmap
;
4246 ret
= wl1271_ps_elp_wakeup(wl
);
4250 wl1271_debug(DEBUG_MAC80211
, "mac80211 ampdu: Rx tid %d action %d",
4254 case IEEE80211_AMPDU_RX_START
:
4255 if (!wlvif
->ba_support
|| !wlvif
->ba_allowed
) {
4260 if (wl
->ba_rx_session_count
>= RX_BA_MAX_SESSIONS
) {
4262 wl1271_error("exceeded max RX BA sessions");
4266 if (*ba_bitmap
& BIT(tid
)) {
4268 wl1271_error("cannot enable RX BA session on active "
4273 ret
= wl12xx_acx_set_ba_receiver_session(wl
, tid
, *ssn
, true,
4276 *ba_bitmap
|= BIT(tid
);
4277 wl
->ba_rx_session_count
++;
4281 case IEEE80211_AMPDU_RX_STOP
:
4282 if (!(*ba_bitmap
& BIT(tid
))) {
4284 wl1271_error("no active RX BA session on tid: %d",
4289 ret
= wl12xx_acx_set_ba_receiver_session(wl
, tid
, 0, false,
4292 *ba_bitmap
&= ~BIT(tid
);
4293 wl
->ba_rx_session_count
--;
4298 * The BA initiator session management in FW independently.
4299 * Falling break here on purpose for all TX APDU commands.
4301 case IEEE80211_AMPDU_TX_START
:
4302 case IEEE80211_AMPDU_TX_STOP
:
4303 case IEEE80211_AMPDU_TX_OPERATIONAL
:
4308 wl1271_error("Incorrect ampdu action id=%x\n", action
);
4312 wl1271_ps_elp_sleep(wl
);
4315 mutex_unlock(&wl
->mutex
);
4320 static int wl12xx_set_bitrate_mask(struct ieee80211_hw
*hw
,
4321 struct ieee80211_vif
*vif
,
4322 const struct cfg80211_bitrate_mask
*mask
)
4324 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
4325 struct wl1271
*wl
= hw
->priv
;
4328 wl1271_debug(DEBUG_MAC80211
, "mac80211 set_bitrate_mask 0x%x 0x%x",
4329 mask
->control
[NL80211_BAND_2GHZ
].legacy
,
4330 mask
->control
[NL80211_BAND_5GHZ
].legacy
);
4332 mutex_lock(&wl
->mutex
);
4334 for (i
= 0; i
< IEEE80211_NUM_BANDS
; i
++)
4335 wlvif
->bitrate_masks
[i
] =
4336 wl1271_tx_enabled_rates_get(wl
,
4337 mask
->control
[i
].legacy
,
4340 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
4343 if (wlvif
->bss_type
== BSS_TYPE_STA_BSS
&&
4344 !test_bit(WLVIF_FLAG_STA_ASSOCIATED
, &wlvif
->flags
)) {
4346 ret
= wl1271_ps_elp_wakeup(wl
);
4350 wl1271_set_band_rate(wl
, wlvif
);
4352 wl1271_tx_min_rate_get(wl
, wlvif
->basic_rate_set
);
4353 ret
= wl1271_acx_sta_rate_policies(wl
, wlvif
);
4355 wl1271_ps_elp_sleep(wl
);
4358 mutex_unlock(&wl
->mutex
);
4363 static void wl12xx_op_channel_switch(struct ieee80211_hw
*hw
,
4364 struct ieee80211_channel_switch
*ch_switch
)
4366 struct wl1271
*wl
= hw
->priv
;
4367 struct wl12xx_vif
*wlvif
;
4370 wl1271_debug(DEBUG_MAC80211
, "mac80211 channel switch");
4372 mutex_lock(&wl
->mutex
);
4374 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
4375 wl12xx_for_each_wlvif_sta(wl
, wlvif
) {
4376 struct ieee80211_vif
*vif
= wl12xx_wlvif_to_vif(wlvif
);
4377 ieee80211_chswitch_done(vif
, false);
4382 ret
= wl1271_ps_elp_wakeup(wl
);
4386 /* TODO: change mac80211 to pass vif as param */
4387 wl12xx_for_each_wlvif_sta(wl
, wlvif
) {
4388 ret
= wl12xx_cmd_channel_switch(wl
, ch_switch
);
4391 set_bit(WLVIF_FLAG_CS_PROGRESS
, &wlvif
->flags
);
4394 wl1271_ps_elp_sleep(wl
);
4397 mutex_unlock(&wl
->mutex
);
4400 static bool wl1271_tx_frames_pending(struct ieee80211_hw
*hw
)
4402 struct wl1271
*wl
= hw
->priv
;
4405 mutex_lock(&wl
->mutex
);
4407 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
4410 /* packets are considered pending if in the TX queue or the FW */
4411 ret
= (wl1271_tx_total_queue_count(wl
) > 0) || (wl
->tx_frames_cnt
> 0);
4413 mutex_unlock(&wl
->mutex
);
4418 /* can't be const, mac80211 writes to this */
4419 static struct ieee80211_rate wl1271_rates
[] = {
4421 .hw_value
= CONF_HW_BIT_RATE_1MBPS
,
4422 .hw_value_short
= CONF_HW_BIT_RATE_1MBPS
, },
4424 .hw_value
= CONF_HW_BIT_RATE_2MBPS
,
4425 .hw_value_short
= CONF_HW_BIT_RATE_2MBPS
,
4426 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
4428 .hw_value
= CONF_HW_BIT_RATE_5_5MBPS
,
4429 .hw_value_short
= CONF_HW_BIT_RATE_5_5MBPS
,
4430 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
4432 .hw_value
= CONF_HW_BIT_RATE_11MBPS
,
4433 .hw_value_short
= CONF_HW_BIT_RATE_11MBPS
,
4434 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
4436 .hw_value
= CONF_HW_BIT_RATE_6MBPS
,
4437 .hw_value_short
= CONF_HW_BIT_RATE_6MBPS
, },
4439 .hw_value
= CONF_HW_BIT_RATE_9MBPS
,
4440 .hw_value_short
= CONF_HW_BIT_RATE_9MBPS
, },
4442 .hw_value
= CONF_HW_BIT_RATE_12MBPS
,
4443 .hw_value_short
= CONF_HW_BIT_RATE_12MBPS
, },
4445 .hw_value
= CONF_HW_BIT_RATE_18MBPS
,
4446 .hw_value_short
= CONF_HW_BIT_RATE_18MBPS
, },
4448 .hw_value
= CONF_HW_BIT_RATE_24MBPS
,
4449 .hw_value_short
= CONF_HW_BIT_RATE_24MBPS
, },
4451 .hw_value
= CONF_HW_BIT_RATE_36MBPS
,
4452 .hw_value_short
= CONF_HW_BIT_RATE_36MBPS
, },
4454 .hw_value
= CONF_HW_BIT_RATE_48MBPS
,
4455 .hw_value_short
= CONF_HW_BIT_RATE_48MBPS
, },
4457 .hw_value
= CONF_HW_BIT_RATE_54MBPS
,
4458 .hw_value_short
= CONF_HW_BIT_RATE_54MBPS
, },
4461 /* can't be const, mac80211 writes to this */
4462 static struct ieee80211_channel wl1271_channels
[] = {
4463 { .hw_value
= 1, .center_freq
= 2412, .max_power
= 25 },
4464 { .hw_value
= 2, .center_freq
= 2417, .max_power
= 25 },
4465 { .hw_value
= 3, .center_freq
= 2422, .max_power
= 25 },
4466 { .hw_value
= 4, .center_freq
= 2427, .max_power
= 25 },
4467 { .hw_value
= 5, .center_freq
= 2432, .max_power
= 25 },
4468 { .hw_value
= 6, .center_freq
= 2437, .max_power
= 25 },
4469 { .hw_value
= 7, .center_freq
= 2442, .max_power
= 25 },
4470 { .hw_value
= 8, .center_freq
= 2447, .max_power
= 25 },
4471 { .hw_value
= 9, .center_freq
= 2452, .max_power
= 25 },
4472 { .hw_value
= 10, .center_freq
= 2457, .max_power
= 25 },
4473 { .hw_value
= 11, .center_freq
= 2462, .max_power
= 25 },
4474 { .hw_value
= 12, .center_freq
= 2467, .max_power
= 25 },
4475 { .hw_value
= 13, .center_freq
= 2472, .max_power
= 25 },
4476 { .hw_value
= 14, .center_freq
= 2484, .max_power
= 25 },
4479 /* mapping to indexes for wl1271_rates */
4480 static const u8 wl1271_rate_to_idx_2ghz
[] = {
4481 /* MCS rates are used only with 11n */
4482 7, /* CONF_HW_RXTX_RATE_MCS7 */
4483 6, /* CONF_HW_RXTX_RATE_MCS6 */
4484 5, /* CONF_HW_RXTX_RATE_MCS5 */
4485 4, /* CONF_HW_RXTX_RATE_MCS4 */
4486 3, /* CONF_HW_RXTX_RATE_MCS3 */
4487 2, /* CONF_HW_RXTX_RATE_MCS2 */
4488 1, /* CONF_HW_RXTX_RATE_MCS1 */
4489 0, /* CONF_HW_RXTX_RATE_MCS0 */
4491 11, /* CONF_HW_RXTX_RATE_54 */
4492 10, /* CONF_HW_RXTX_RATE_48 */
4493 9, /* CONF_HW_RXTX_RATE_36 */
4494 8, /* CONF_HW_RXTX_RATE_24 */
4496 /* TI-specific rate */
4497 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_22 */
4499 7, /* CONF_HW_RXTX_RATE_18 */
4500 6, /* CONF_HW_RXTX_RATE_12 */
4501 3, /* CONF_HW_RXTX_RATE_11 */
4502 5, /* CONF_HW_RXTX_RATE_9 */
4503 4, /* CONF_HW_RXTX_RATE_6 */
4504 2, /* CONF_HW_RXTX_RATE_5_5 */
4505 1, /* CONF_HW_RXTX_RATE_2 */
4506 0 /* CONF_HW_RXTX_RATE_1 */
4509 /* 11n STA capabilities */
4510 #define HW_RX_HIGHEST_RATE 72
4512 #define WL12XX_HT_CAP { \
4513 .cap = IEEE80211_HT_CAP_GRN_FLD | IEEE80211_HT_CAP_SGI_20 | \
4514 (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT), \
4515 .ht_supported = true, \
4516 .ampdu_factor = IEEE80211_HT_MAX_AMPDU_8K, \
4517 .ampdu_density = IEEE80211_HT_MPDU_DENSITY_8, \
4519 .rx_mask = { 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, \
4520 .rx_highest = cpu_to_le16(HW_RX_HIGHEST_RATE), \
4521 .tx_params = IEEE80211_HT_MCS_TX_DEFINED, \
4525 /* can't be const, mac80211 writes to this */
4526 static struct ieee80211_supported_band wl1271_band_2ghz
= {
4527 .channels
= wl1271_channels
,
4528 .n_channels
= ARRAY_SIZE(wl1271_channels
),
4529 .bitrates
= wl1271_rates
,
4530 .n_bitrates
= ARRAY_SIZE(wl1271_rates
),
4531 .ht_cap
= WL12XX_HT_CAP
,
4534 /* 5 GHz data rates for WL1273 */
4535 static struct ieee80211_rate wl1271_rates_5ghz
[] = {
4537 .hw_value
= CONF_HW_BIT_RATE_6MBPS
,
4538 .hw_value_short
= CONF_HW_BIT_RATE_6MBPS
, },
4540 .hw_value
= CONF_HW_BIT_RATE_9MBPS
,
4541 .hw_value_short
= CONF_HW_BIT_RATE_9MBPS
, },
4543 .hw_value
= CONF_HW_BIT_RATE_12MBPS
,
4544 .hw_value_short
= CONF_HW_BIT_RATE_12MBPS
, },
4546 .hw_value
= CONF_HW_BIT_RATE_18MBPS
,
4547 .hw_value_short
= CONF_HW_BIT_RATE_18MBPS
, },
4549 .hw_value
= CONF_HW_BIT_RATE_24MBPS
,
4550 .hw_value_short
= CONF_HW_BIT_RATE_24MBPS
, },
4552 .hw_value
= CONF_HW_BIT_RATE_36MBPS
,
4553 .hw_value_short
= CONF_HW_BIT_RATE_36MBPS
, },
4555 .hw_value
= CONF_HW_BIT_RATE_48MBPS
,
4556 .hw_value_short
= CONF_HW_BIT_RATE_48MBPS
, },
4558 .hw_value
= CONF_HW_BIT_RATE_54MBPS
,
4559 .hw_value_short
= CONF_HW_BIT_RATE_54MBPS
, },
4562 /* 5 GHz band channels for WL1273 */
4563 static struct ieee80211_channel wl1271_channels_5ghz
[] = {
4564 { .hw_value
= 7, .center_freq
= 5035, .max_power
= 25 },
4565 { .hw_value
= 8, .center_freq
= 5040, .max_power
= 25 },
4566 { .hw_value
= 9, .center_freq
= 5045, .max_power
= 25 },
4567 { .hw_value
= 11, .center_freq
= 5055, .max_power
= 25 },
4568 { .hw_value
= 12, .center_freq
= 5060, .max_power
= 25 },
4569 { .hw_value
= 16, .center_freq
= 5080, .max_power
= 25 },
4570 { .hw_value
= 34, .center_freq
= 5170, .max_power
= 25 },
4571 { .hw_value
= 36, .center_freq
= 5180, .max_power
= 25 },
4572 { .hw_value
= 38, .center_freq
= 5190, .max_power
= 25 },
4573 { .hw_value
= 40, .center_freq
= 5200, .max_power
= 25 },
4574 { .hw_value
= 42, .center_freq
= 5210, .max_power
= 25 },
4575 { .hw_value
= 44, .center_freq
= 5220, .max_power
= 25 },
4576 { .hw_value
= 46, .center_freq
= 5230, .max_power
= 25 },
4577 { .hw_value
= 48, .center_freq
= 5240, .max_power
= 25 },
4578 { .hw_value
= 52, .center_freq
= 5260, .max_power
= 25 },
4579 { .hw_value
= 56, .center_freq
= 5280, .max_power
= 25 },
4580 { .hw_value
= 60, .center_freq
= 5300, .max_power
= 25 },
4581 { .hw_value
= 64, .center_freq
= 5320, .max_power
= 25 },
4582 { .hw_value
= 100, .center_freq
= 5500, .max_power
= 25 },
4583 { .hw_value
= 104, .center_freq
= 5520, .max_power
= 25 },
4584 { .hw_value
= 108, .center_freq
= 5540, .max_power
= 25 },
4585 { .hw_value
= 112, .center_freq
= 5560, .max_power
= 25 },
4586 { .hw_value
= 116, .center_freq
= 5580, .max_power
= 25 },
4587 { .hw_value
= 120, .center_freq
= 5600, .max_power
= 25 },
4588 { .hw_value
= 124, .center_freq
= 5620, .max_power
= 25 },
4589 { .hw_value
= 128, .center_freq
= 5640, .max_power
= 25 },
4590 { .hw_value
= 132, .center_freq
= 5660, .max_power
= 25 },
4591 { .hw_value
= 136, .center_freq
= 5680, .max_power
= 25 },
4592 { .hw_value
= 140, .center_freq
= 5700, .max_power
= 25 },
4593 { .hw_value
= 149, .center_freq
= 5745, .max_power
= 25 },
4594 { .hw_value
= 153, .center_freq
= 5765, .max_power
= 25 },
4595 { .hw_value
= 157, .center_freq
= 5785, .max_power
= 25 },
4596 { .hw_value
= 161, .center_freq
= 5805, .max_power
= 25 },
4597 { .hw_value
= 165, .center_freq
= 5825, .max_power
= 25 },
4600 /* mapping to indexes for wl1271_rates_5ghz */
4601 static const u8 wl1271_rate_to_idx_5ghz
[] = {
4602 /* MCS rates are used only with 11n */
4603 7, /* CONF_HW_RXTX_RATE_MCS7 */
4604 6, /* CONF_HW_RXTX_RATE_MCS6 */
4605 5, /* CONF_HW_RXTX_RATE_MCS5 */
4606 4, /* CONF_HW_RXTX_RATE_MCS4 */
4607 3, /* CONF_HW_RXTX_RATE_MCS3 */
4608 2, /* CONF_HW_RXTX_RATE_MCS2 */
4609 1, /* CONF_HW_RXTX_RATE_MCS1 */
4610 0, /* CONF_HW_RXTX_RATE_MCS0 */
4612 7, /* CONF_HW_RXTX_RATE_54 */
4613 6, /* CONF_HW_RXTX_RATE_48 */
4614 5, /* CONF_HW_RXTX_RATE_36 */
4615 4, /* CONF_HW_RXTX_RATE_24 */
4617 /* TI-specific rate */
4618 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_22 */
4620 3, /* CONF_HW_RXTX_RATE_18 */
4621 2, /* CONF_HW_RXTX_RATE_12 */
4622 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_11 */
4623 1, /* CONF_HW_RXTX_RATE_9 */
4624 0, /* CONF_HW_RXTX_RATE_6 */
4625 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_5_5 */
4626 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_2 */
4627 CONF_HW_RXTX_RATE_UNSUPPORTED
/* CONF_HW_RXTX_RATE_1 */
4630 static struct ieee80211_supported_band wl1271_band_5ghz
= {
4631 .channels
= wl1271_channels_5ghz
,
4632 .n_channels
= ARRAY_SIZE(wl1271_channels_5ghz
),
4633 .bitrates
= wl1271_rates_5ghz
,
4634 .n_bitrates
= ARRAY_SIZE(wl1271_rates_5ghz
),
4635 .ht_cap
= WL12XX_HT_CAP
,
4638 static const u8
*wl1271_band_rate_to_idx
[] = {
4639 [IEEE80211_BAND_2GHZ
] = wl1271_rate_to_idx_2ghz
,
4640 [IEEE80211_BAND_5GHZ
] = wl1271_rate_to_idx_5ghz
4643 static const struct ieee80211_ops wl1271_ops
= {
4644 .start
= wl1271_op_start
,
4645 .stop
= wl1271_op_stop
,
4646 .add_interface
= wl1271_op_add_interface
,
4647 .remove_interface
= wl1271_op_remove_interface
,
4649 .suspend
= wl1271_op_suspend
,
4650 .resume
= wl1271_op_resume
,
4652 .config
= wl1271_op_config
,
4653 .prepare_multicast
= wl1271_op_prepare_multicast
,
4654 .configure_filter
= wl1271_op_configure_filter
,
4656 .set_key
= wl1271_op_set_key
,
4657 .hw_scan
= wl1271_op_hw_scan
,
4658 .cancel_hw_scan
= wl1271_op_cancel_hw_scan
,
4659 .sched_scan_start
= wl1271_op_sched_scan_start
,
4660 .sched_scan_stop
= wl1271_op_sched_scan_stop
,
4661 .bss_info_changed
= wl1271_op_bss_info_changed
,
4662 .set_frag_threshold
= wl1271_op_set_frag_threshold
,
4663 .set_rts_threshold
= wl1271_op_set_rts_threshold
,
4664 .conf_tx
= wl1271_op_conf_tx
,
4665 .get_tsf
= wl1271_op_get_tsf
,
4666 .get_survey
= wl1271_op_get_survey
,
4667 .sta_add
= wl1271_op_sta_add
,
4668 .sta_remove
= wl1271_op_sta_remove
,
4669 .ampdu_action
= wl1271_op_ampdu_action
,
4670 .tx_frames_pending
= wl1271_tx_frames_pending
,
4671 .set_bitrate_mask
= wl12xx_set_bitrate_mask
,
4672 .channel_switch
= wl12xx_op_channel_switch
,
4673 CFG80211_TESTMODE_CMD(wl1271_tm_cmd
)
4677 u8
wl1271_rate_to_idx(int rate
, enum ieee80211_band band
)
4681 BUG_ON(band
>= sizeof(wl1271_band_rate_to_idx
)/sizeof(u8
*));
4683 if (unlikely(rate
>= CONF_HW_RXTX_RATE_MAX
)) {
4684 wl1271_error("Illegal RX rate from HW: %d", rate
);
4688 idx
= wl1271_band_rate_to_idx
[band
][rate
];
4689 if (unlikely(idx
== CONF_HW_RXTX_RATE_UNSUPPORTED
)) {
4690 wl1271_error("Unsupported RX rate from HW: %d", rate
);
4697 static ssize_t
wl1271_sysfs_show_bt_coex_state(struct device
*dev
,
4698 struct device_attribute
*attr
,
4701 struct wl1271
*wl
= dev_get_drvdata(dev
);
4706 mutex_lock(&wl
->mutex
);
4707 len
= snprintf(buf
, len
, "%d\n\n0 - off\n1 - on\n",
4709 mutex_unlock(&wl
->mutex
);
4715 static ssize_t
wl1271_sysfs_store_bt_coex_state(struct device
*dev
,
4716 struct device_attribute
*attr
,
4717 const char *buf
, size_t count
)
4719 struct wl1271
*wl
= dev_get_drvdata(dev
);
4723 ret
= kstrtoul(buf
, 10, &res
);
4725 wl1271_warning("incorrect value written to bt_coex_mode");
4729 mutex_lock(&wl
->mutex
);
4733 if (res
== wl
->sg_enabled
)
4736 wl
->sg_enabled
= res
;
4738 if (wl
->state
== WL1271_STATE_OFF
)
4741 ret
= wl1271_ps_elp_wakeup(wl
);
4745 wl1271_acx_sg_enable(wl
, wl
->sg_enabled
);
4746 wl1271_ps_elp_sleep(wl
);
4749 mutex_unlock(&wl
->mutex
);
4753 static DEVICE_ATTR(bt_coex_state
, S_IRUGO
| S_IWUSR
,
4754 wl1271_sysfs_show_bt_coex_state
,
4755 wl1271_sysfs_store_bt_coex_state
);
4757 static ssize_t
wl1271_sysfs_show_hw_pg_ver(struct device
*dev
,
4758 struct device_attribute
*attr
,
4761 struct wl1271
*wl
= dev_get_drvdata(dev
);
4766 mutex_lock(&wl
->mutex
);
4767 if (wl
->hw_pg_ver
>= 0)
4768 len
= snprintf(buf
, len
, "%d\n", wl
->hw_pg_ver
);
4770 len
= snprintf(buf
, len
, "n/a\n");
4771 mutex_unlock(&wl
->mutex
);
4776 static DEVICE_ATTR(hw_pg_ver
, S_IRUGO
,
4777 wl1271_sysfs_show_hw_pg_ver
, NULL
);
4779 static ssize_t
wl1271_sysfs_read_fwlog(struct file
*filp
, struct kobject
*kobj
,
4780 struct bin_attribute
*bin_attr
,
4781 char *buffer
, loff_t pos
, size_t count
)
4783 struct device
*dev
= container_of(kobj
, struct device
, kobj
);
4784 struct wl1271
*wl
= dev_get_drvdata(dev
);
4788 ret
= mutex_lock_interruptible(&wl
->mutex
);
4790 return -ERESTARTSYS
;
4792 /* Let only one thread read the log at a time, blocking others */
4793 while (wl
->fwlog_size
== 0) {
4796 prepare_to_wait_exclusive(&wl
->fwlog_waitq
,
4798 TASK_INTERRUPTIBLE
);
4800 if (wl
->fwlog_size
!= 0) {
4801 finish_wait(&wl
->fwlog_waitq
, &wait
);
4805 mutex_unlock(&wl
->mutex
);
4808 finish_wait(&wl
->fwlog_waitq
, &wait
);
4810 if (signal_pending(current
))
4811 return -ERESTARTSYS
;
4813 ret
= mutex_lock_interruptible(&wl
->mutex
);
4815 return -ERESTARTSYS
;
4818 /* Check if the fwlog is still valid */
4819 if (wl
->fwlog_size
< 0) {
4820 mutex_unlock(&wl
->mutex
);
4824 /* Seeking is not supported - old logs are not kept. Disregard pos. */
4825 len
= min(count
, (size_t)wl
->fwlog_size
);
4826 wl
->fwlog_size
-= len
;
4827 memcpy(buffer
, wl
->fwlog
, len
);
4829 /* Make room for new messages */
4830 memmove(wl
->fwlog
, wl
->fwlog
+ len
, wl
->fwlog_size
);
4832 mutex_unlock(&wl
->mutex
);
4837 static struct bin_attribute fwlog_attr
= {
4838 .attr
= {.name
= "fwlog", .mode
= S_IRUSR
},
4839 .read
= wl1271_sysfs_read_fwlog
,
4842 static int wl1271_register_hw(struct wl1271
*wl
)
4846 if (wl
->mac80211_registered
)
4849 ret
= wl1271_fetch_nvs(wl
);
4851 /* NOTE: The wl->nvs->nvs element must be first, in
4852 * order to simplify the casting, we assume it is at
4853 * the beginning of the wl->nvs structure.
4855 u8
*nvs_ptr
= (u8
*)wl
->nvs
;
4857 wl
->mac_addr
[0] = nvs_ptr
[11];
4858 wl
->mac_addr
[1] = nvs_ptr
[10];
4859 wl
->mac_addr
[2] = nvs_ptr
[6];
4860 wl
->mac_addr
[3] = nvs_ptr
[5];
4861 wl
->mac_addr
[4] = nvs_ptr
[4];
4862 wl
->mac_addr
[5] = nvs_ptr
[3];
4865 SET_IEEE80211_PERM_ADDR(wl
->hw
, wl
->mac_addr
);
4867 ret
= ieee80211_register_hw(wl
->hw
);
4869 wl1271_error("unable to register mac80211 hw: %d", ret
);
4873 wl
->mac80211_registered
= true;
4875 wl1271_debugfs_init(wl
);
4877 register_netdevice_notifier(&wl1271_dev_notifier
);
4879 wl1271_notice("loaded");
4884 static void wl1271_unregister_hw(struct wl1271
*wl
)
4886 if (wl
->state
== WL1271_STATE_PLT
)
4887 __wl1271_plt_stop(wl
);
4889 unregister_netdevice_notifier(&wl1271_dev_notifier
);
4890 ieee80211_unregister_hw(wl
->hw
);
4891 wl
->mac80211_registered
= false;
4895 static int wl1271_init_ieee80211(struct wl1271
*wl
)
4897 static const u32 cipher_suites
[] = {
4898 WLAN_CIPHER_SUITE_WEP40
,
4899 WLAN_CIPHER_SUITE_WEP104
,
4900 WLAN_CIPHER_SUITE_TKIP
,
4901 WLAN_CIPHER_SUITE_CCMP
,
4902 WL1271_CIPHER_SUITE_GEM
,
4905 /* The tx descriptor buffer and the TKIP space. */
4906 wl
->hw
->extra_tx_headroom
= WL1271_TKIP_IV_SPACE
+
4907 sizeof(struct wl1271_tx_hw_descr
);
4910 /* FIXME: find a proper value */
4911 wl
->hw
->channel_change_time
= 10000;
4912 wl
->hw
->max_listen_interval
= wl
->conf
.conn
.max_listen_interval
;
4914 wl
->hw
->flags
= IEEE80211_HW_SIGNAL_DBM
|
4915 IEEE80211_HW_BEACON_FILTER
|
4916 IEEE80211_HW_SUPPORTS_PS
|
4917 IEEE80211_HW_SUPPORTS_UAPSD
|
4918 IEEE80211_HW_HAS_RATE_CONTROL
|
4919 IEEE80211_HW_CONNECTION_MONITOR
|
4920 IEEE80211_HW_SUPPORTS_CQM_RSSI
|
4921 IEEE80211_HW_REPORTS_TX_ACK_STATUS
|
4922 IEEE80211_HW_SPECTRUM_MGMT
|
4923 IEEE80211_HW_AP_LINK_PS
|
4924 IEEE80211_HW_AMPDU_AGGREGATION
|
4925 IEEE80211_HW_TX_AMPDU_SETUP_IN_HW
;
4927 wl
->hw
->wiphy
->cipher_suites
= cipher_suites
;
4928 wl
->hw
->wiphy
->n_cipher_suites
= ARRAY_SIZE(cipher_suites
);
4930 wl
->hw
->wiphy
->interface_modes
= BIT(NL80211_IFTYPE_STATION
) |
4931 BIT(NL80211_IFTYPE_ADHOC
) | BIT(NL80211_IFTYPE_AP
) |
4932 BIT(NL80211_IFTYPE_P2P_CLIENT
) | BIT(NL80211_IFTYPE_P2P_GO
);
4933 wl
->hw
->wiphy
->max_scan_ssids
= 1;
4934 wl
->hw
->wiphy
->max_sched_scan_ssids
= 16;
4935 wl
->hw
->wiphy
->max_match_sets
= 16;
4937 * Maximum length of elements in scanning probe request templates
4938 * should be the maximum length possible for a template, without
4939 * the IEEE80211 header of the template
4941 wl
->hw
->wiphy
->max_scan_ie_len
= WL1271_CMD_TEMPL_DFLT_SIZE
-
4942 sizeof(struct ieee80211_header
);
4944 wl
->hw
->wiphy
->max_sched_scan_ie_len
= WL1271_CMD_TEMPL_DFLT_SIZE
-
4945 sizeof(struct ieee80211_header
);
4947 wl
->hw
->wiphy
->flags
|= WIPHY_FLAG_AP_UAPSD
;
4949 /* make sure all our channels fit in the scanned_ch bitmask */
4950 BUILD_BUG_ON(ARRAY_SIZE(wl1271_channels
) +
4951 ARRAY_SIZE(wl1271_channels_5ghz
) >
4952 WL1271_MAX_CHANNELS
);
4954 * We keep local copies of the band structs because we need to
4955 * modify them on a per-device basis.
4957 memcpy(&wl
->bands
[IEEE80211_BAND_2GHZ
], &wl1271_band_2ghz
,
4958 sizeof(wl1271_band_2ghz
));
4959 memcpy(&wl
->bands
[IEEE80211_BAND_5GHZ
], &wl1271_band_5ghz
,
4960 sizeof(wl1271_band_5ghz
));
4962 wl
->hw
->wiphy
->bands
[IEEE80211_BAND_2GHZ
] =
4963 &wl
->bands
[IEEE80211_BAND_2GHZ
];
4964 wl
->hw
->wiphy
->bands
[IEEE80211_BAND_5GHZ
] =
4965 &wl
->bands
[IEEE80211_BAND_5GHZ
];
4968 wl
->hw
->max_rates
= 1;
4970 wl
->hw
->wiphy
->reg_notifier
= wl1271_reg_notify
;
4972 SET_IEEE80211_DEV(wl
->hw
, wl
->dev
);
4974 wl
->hw
->sta_data_size
= sizeof(struct wl1271_station
);
4975 wl
->hw
->vif_data_size
= sizeof(struct wl12xx_vif
);
4977 wl
->hw
->max_rx_aggregation_subframes
= 8;
4982 #define WL1271_DEFAULT_CHANNEL 0
4984 static struct ieee80211_hw
*wl1271_alloc_hw(void)
4986 struct ieee80211_hw
*hw
;
4991 BUILD_BUG_ON(AP_MAX_STATIONS
> WL12XX_MAX_LINKS
);
4993 hw
= ieee80211_alloc_hw(sizeof(*wl
), &wl1271_ops
);
4995 wl1271_error("could not alloc ieee80211_hw");
5001 memset(wl
, 0, sizeof(*wl
));
5003 INIT_LIST_HEAD(&wl
->list
);
5004 INIT_LIST_HEAD(&wl
->wlvif_list
);
5008 for (i
= 0; i
< NUM_TX_QUEUES
; i
++)
5009 for (j
= 0; j
< WL12XX_MAX_LINKS
; j
++)
5010 skb_queue_head_init(&wl
->links
[j
].tx_queue
[i
]);
5012 skb_queue_head_init(&wl
->deferred_rx_queue
);
5013 skb_queue_head_init(&wl
->deferred_tx_queue
);
5015 INIT_DELAYED_WORK(&wl
->elp_work
, wl1271_elp_work
);
5016 INIT_WORK(&wl
->netstack_work
, wl1271_netstack_work
);
5017 INIT_WORK(&wl
->tx_work
, wl1271_tx_work
);
5018 INIT_WORK(&wl
->recovery_work
, wl1271_recovery_work
);
5019 INIT_DELAYED_WORK(&wl
->scan_complete_work
, wl1271_scan_complete_work
);
5021 wl
->freezable_wq
= create_freezable_workqueue("wl12xx_wq");
5022 if (!wl
->freezable_wq
) {
5027 wl
->channel
= WL1271_DEFAULT_CHANNEL
;
5029 wl
->power_level
= WL1271_DEFAULT_POWER_LEVEL
;
5030 wl
->band
= IEEE80211_BAND_2GHZ
;
5033 wl
->sg_enabled
= true;
5036 wl
->ap_fw_ps_map
= 0;
5038 wl
->platform_quirks
= 0;
5039 wl
->sched_scanning
= false;
5040 wl
->tx_spare_blocks
= TX_HW_BLOCK_SPARE_DEFAULT
;
5041 wl
->system_hlid
= WL12XX_SYSTEM_HLID
;
5042 wl
->active_sta_count
= 0;
5044 init_waitqueue_head(&wl
->fwlog_waitq
);
5046 /* The system link is always allocated */
5047 __set_bit(WL12XX_SYSTEM_HLID
, wl
->links_map
);
5049 memset(wl
->tx_frames_map
, 0, sizeof(wl
->tx_frames_map
));
5050 for (i
= 0; i
< ACX_TX_DESCRIPTORS
; i
++)
5051 wl
->tx_frames
[i
] = NULL
;
5053 spin_lock_init(&wl
->wl_lock
);
5055 wl
->state
= WL1271_STATE_OFF
;
5056 mutex_init(&wl
->mutex
);
5058 /* Apply default driver configuration. */
5059 wl1271_conf_init(wl
);
5061 order
= get_order(WL1271_AGGR_BUFFER_SIZE
);
5062 wl
->aggr_buf
= (u8
*)__get_free_pages(GFP_KERNEL
, order
);
5063 if (!wl
->aggr_buf
) {
5068 wl
->dummy_packet
= wl12xx_alloc_dummy_packet(wl
);
5069 if (!wl
->dummy_packet
) {
5074 /* Allocate one page for the FW log */
5075 wl
->fwlog
= (u8
*)get_zeroed_page(GFP_KERNEL
);
5078 goto err_dummy_packet
;
5084 dev_kfree_skb(wl
->dummy_packet
);
5087 free_pages((unsigned long)wl
->aggr_buf
, order
);
5090 destroy_workqueue(wl
->freezable_wq
);
5093 wl1271_debugfs_exit(wl
);
5094 ieee80211_free_hw(hw
);
5098 return ERR_PTR(ret
);
5101 static int wl1271_free_hw(struct wl1271
*wl
)
5103 /* Unblock any fwlog readers */
5104 mutex_lock(&wl
->mutex
);
5105 wl
->fwlog_size
= -1;
5106 wake_up_interruptible_all(&wl
->fwlog_waitq
);
5107 mutex_unlock(&wl
->mutex
);
5109 device_remove_bin_file(wl
->dev
, &fwlog_attr
);
5111 device_remove_file(wl
->dev
, &dev_attr_hw_pg_ver
);
5113 device_remove_file(wl
->dev
, &dev_attr_bt_coex_state
);
5114 free_page((unsigned long)wl
->fwlog
);
5115 dev_kfree_skb(wl
->dummy_packet
);
5116 free_pages((unsigned long)wl
->aggr_buf
,
5117 get_order(WL1271_AGGR_BUFFER_SIZE
));
5119 wl1271_debugfs_exit(wl
);
5126 kfree(wl
->fw_status
);
5127 kfree(wl
->tx_res_if
);
5128 destroy_workqueue(wl
->freezable_wq
);
5130 ieee80211_free_hw(wl
->hw
);
5135 static irqreturn_t
wl12xx_hardirq(int irq
, void *cookie
)
5137 struct wl1271
*wl
= cookie
;
5138 unsigned long flags
;
5140 wl1271_debug(DEBUG_IRQ
, "IRQ");
5142 /* complete the ELP completion */
5143 spin_lock_irqsave(&wl
->wl_lock
, flags
);
5144 set_bit(WL1271_FLAG_IRQ_RUNNING
, &wl
->flags
);
5145 if (wl
->elp_compl
) {
5146 complete(wl
->elp_compl
);
5147 wl
->elp_compl
= NULL
;
5150 if (test_bit(WL1271_FLAG_SUSPENDED
, &wl
->flags
)) {
5151 /* don't enqueue a work right now. mark it as pending */
5152 set_bit(WL1271_FLAG_PENDING_WORK
, &wl
->flags
);
5153 wl1271_debug(DEBUG_IRQ
, "should not enqueue work");
5154 disable_irq_nosync(wl
->irq
);
5155 pm_wakeup_event(wl
->dev
, 0);
5156 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
5159 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
5161 return IRQ_WAKE_THREAD
;
5164 static int __devinit
wl12xx_probe(struct platform_device
*pdev
)
5166 struct wl12xx_platform_data
*pdata
= pdev
->dev
.platform_data
;
5167 struct ieee80211_hw
*hw
;
5169 unsigned long irqflags
;
5172 hw
= wl1271_alloc_hw();
5174 wl1271_error("can't allocate hw");
5180 wl
->irq
= platform_get_irq(pdev
, 0);
5181 wl
->ref_clock
= pdata
->board_ref_clock
;
5182 wl
->tcxo_clock
= pdata
->board_tcxo_clock
;
5183 wl
->platform_quirks
= pdata
->platform_quirks
;
5184 wl
->set_power
= pdata
->set_power
;
5185 wl
->dev
= &pdev
->dev
;
5186 wl
->if_ops
= pdata
->ops
;
5188 platform_set_drvdata(pdev
, wl
);
5190 if (wl
->platform_quirks
& WL12XX_PLATFORM_QUIRK_EDGE_IRQ
)
5191 irqflags
= IRQF_TRIGGER_RISING
;
5193 irqflags
= IRQF_TRIGGER_HIGH
| IRQF_ONESHOT
;
5195 ret
= request_threaded_irq(wl
->irq
, wl12xx_hardirq
, wl1271_irq
,
5199 wl1271_error("request_irq() failed: %d", ret
);
5203 ret
= enable_irq_wake(wl
->irq
);
5205 wl
->irq_wake_enabled
= true;
5206 device_init_wakeup(wl
->dev
, 1);
5207 if (pdata
->pwr_in_suspend
)
5208 hw
->wiphy
->wowlan
.flags
= WIPHY_WOWLAN_ANY
;
5211 disable_irq(wl
->irq
);
5213 ret
= wl1271_init_ieee80211(wl
);
5217 ret
= wl1271_register_hw(wl
);
5221 /* Create sysfs file to control bt coex state */
5222 ret
= device_create_file(wl
->dev
, &dev_attr_bt_coex_state
);
5224 wl1271_error("failed to create sysfs file bt_coex_state");
5228 /* Create sysfs file to get HW PG version */
5229 ret
= device_create_file(wl
->dev
, &dev_attr_hw_pg_ver
);
5231 wl1271_error("failed to create sysfs file hw_pg_ver");
5232 goto out_bt_coex_state
;
5235 /* Create sysfs file for the FW log */
5236 ret
= device_create_bin_file(wl
->dev
, &fwlog_attr
);
5238 wl1271_error("failed to create sysfs file fwlog");
5245 device_remove_file(wl
->dev
, &dev_attr_hw_pg_ver
);
5248 device_remove_file(wl
->dev
, &dev_attr_bt_coex_state
);
5251 free_irq(wl
->irq
, wl
);
5260 static int __devexit
wl12xx_remove(struct platform_device
*pdev
)
5262 struct wl1271
*wl
= platform_get_drvdata(pdev
);
5264 if (wl
->irq_wake_enabled
) {
5265 device_init_wakeup(wl
->dev
, 0);
5266 disable_irq_wake(wl
->irq
);
5268 wl1271_unregister_hw(wl
);
5269 free_irq(wl
->irq
, wl
);
5275 static const struct platform_device_id wl12xx_id_table
[] __devinitconst
= {
5277 { } /* Terminating Entry */
5279 MODULE_DEVICE_TABLE(platform
, wl12xx_id_table
);
5281 static struct platform_driver wl12xx_driver
= {
5282 .probe
= wl12xx_probe
,
5283 .remove
= __devexit_p(wl12xx_remove
),
5284 .id_table
= wl12xx_id_table
,
5286 .name
= "wl12xx_driver",
5287 .owner
= THIS_MODULE
,
5291 static int __init
wl12xx_init(void)
5293 return platform_driver_register(&wl12xx_driver
);
5295 module_init(wl12xx_init
);
5297 static void __exit
wl12xx_exit(void)
5299 platform_driver_unregister(&wl12xx_driver
);
5301 module_exit(wl12xx_exit
);
5303 u32 wl12xx_debug_level
= DEBUG_NONE
;
5304 EXPORT_SYMBOL_GPL(wl12xx_debug_level
);
5305 module_param_named(debug_level
, wl12xx_debug_level
, uint
, S_IRUSR
| S_IWUSR
);
5306 MODULE_PARM_DESC(debug_level
, "wl12xx debugging level");
5308 module_param_named(fwlog
, fwlog_param
, charp
, 0);
5309 MODULE_PARM_DESC(keymap
,
5310 "FW logger options: continuous, ondemand, dbgpins or disable");
5312 module_param(bug_on_recovery
, bool, S_IRUSR
| S_IWUSR
);
5313 MODULE_PARM_DESC(bug_on_recovery
, "BUG() on fw recovery");
5315 MODULE_LICENSE("GPL");
5316 MODULE_AUTHOR("Luciano Coelho <coelho@ti.com>");
5317 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");