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>
36 #include "wl12xx_80211.h"
50 #define WL1271_BOOT_RETRIES 3
52 static struct conf_drv_settings default_conf
= {
55 [CONF_SG_BT_PER_THRESHOLD
] = 7500,
56 [CONF_SG_HV3_MAX_OVERRIDE
] = 0,
57 [CONF_SG_BT_NFS_SAMPLE_INTERVAL
] = 400,
58 [CONF_SG_BT_LOAD_RATIO
] = 200,
59 [CONF_SG_AUTO_PS_MODE
] = 1,
60 [CONF_SG_AUTO_SCAN_PROBE_REQ
] = 170,
61 [CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_HV3
] = 50,
62 [CONF_SG_ANTENNA_CONFIGURATION
] = 0,
63 [CONF_SG_BEACON_MISS_PERCENT
] = 60,
64 [CONF_SG_RATE_ADAPT_THRESH
] = 12,
65 [CONF_SG_RATE_ADAPT_SNR
] = 0,
66 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MIN_BR
] = 10,
67 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MAX_BR
] = 30,
68 [CONF_SG_WLAN_PS_MAX_BT_ACL_MASTER_BR
] = 8,
69 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MIN_BR
] = 20,
70 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MAX_BR
] = 50,
71 /* Note: with UPSD, this should be 4 */
72 [CONF_SG_WLAN_PS_MAX_BT_ACL_SLAVE_BR
] = 8,
73 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MIN_EDR
] = 7,
74 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MAX_EDR
] = 25,
75 [CONF_SG_WLAN_PS_MAX_BT_ACL_MASTER_EDR
] = 20,
76 /* Note: with UPDS, this should be 15 */
77 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MIN_EDR
] = 8,
78 /* Note: with UPDS, this should be 50 */
79 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MAX_EDR
] = 40,
80 /* Note: with UPDS, this should be 10 */
81 [CONF_SG_WLAN_PS_MAX_BT_ACL_SLAVE_EDR
] = 20,
84 [CONF_SG_ADAPTIVE_RXT_TXT
] = 1,
85 [CONF_SG_PS_POLL_TIMEOUT
] = 10,
86 [CONF_SG_UPSD_TIMEOUT
] = 10,
87 [CONF_SG_WLAN_ACTIVE_BT_ACL_MASTER_MIN_EDR
] = 7,
88 [CONF_SG_WLAN_ACTIVE_BT_ACL_MASTER_MAX_EDR
] = 15,
89 [CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_MASTER_EDR
] = 15,
90 [CONF_SG_WLAN_ACTIVE_BT_ACL_SLAVE_MIN_EDR
] = 8,
91 [CONF_SG_WLAN_ACTIVE_BT_ACL_SLAVE_MAX_EDR
] = 20,
92 [CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_SLAVE_EDR
] = 15,
93 [CONF_SG_WLAN_ACTIVE_BT_ACL_MIN_BR
] = 20,
94 [CONF_SG_WLAN_ACTIVE_BT_ACL_MAX_BR
] = 50,
95 [CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_BR
] = 10,
96 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_HV3
] = 200,
97 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_A2DP
] = 800,
98 [CONF_SG_PASSIVE_SCAN_A2DP_BT_TIME
] = 75,
99 [CONF_SG_PASSIVE_SCAN_A2DP_WLAN_TIME
] = 15,
100 [CONF_SG_HV3_MAX_SERVED
] = 6,
101 [CONF_SG_DHCP_TIME
] = 5000,
102 [CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_A2DP
] = 100,
105 [CONF_SG_BT_PER_THRESHOLD
] = 7500,
106 [CONF_SG_HV3_MAX_OVERRIDE
] = 0,
107 [CONF_SG_BT_NFS_SAMPLE_INTERVAL
] = 400,
108 [CONF_SG_BT_LOAD_RATIO
] = 50,
109 [CONF_SG_AUTO_PS_MODE
] = 1,
110 [CONF_SG_AUTO_SCAN_PROBE_REQ
] = 170,
111 [CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_HV3
] = 50,
112 [CONF_SG_ANTENNA_CONFIGURATION
] = 0,
113 [CONF_SG_BEACON_MISS_PERCENT
] = 60,
114 [CONF_SG_RATE_ADAPT_THRESH
] = 64,
115 [CONF_SG_RATE_ADAPT_SNR
] = 1,
116 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MIN_BR
] = 10,
117 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MAX_BR
] = 25,
118 [CONF_SG_WLAN_PS_MAX_BT_ACL_MASTER_BR
] = 25,
119 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MIN_BR
] = 20,
120 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MAX_BR
] = 25,
121 [CONF_SG_WLAN_PS_MAX_BT_ACL_SLAVE_BR
] = 25,
122 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MIN_EDR
] = 7,
123 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MAX_EDR
] = 25,
124 [CONF_SG_WLAN_PS_MAX_BT_ACL_MASTER_EDR
] = 25,
125 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MIN_EDR
] = 8,
126 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MAX_EDR
] = 25,
127 [CONF_SG_WLAN_PS_MAX_BT_ACL_SLAVE_EDR
] = 25,
128 [CONF_SG_RXT
] = 1200,
129 [CONF_SG_TXT
] = 1000,
130 [CONF_SG_ADAPTIVE_RXT_TXT
] = 1,
131 [CONF_SG_PS_POLL_TIMEOUT
] = 10,
132 [CONF_SG_UPSD_TIMEOUT
] = 10,
133 [CONF_SG_WLAN_ACTIVE_BT_ACL_MASTER_MIN_EDR
] = 7,
134 [CONF_SG_WLAN_ACTIVE_BT_ACL_MASTER_MAX_EDR
] = 15,
135 [CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_MASTER_EDR
] = 15,
136 [CONF_SG_WLAN_ACTIVE_BT_ACL_SLAVE_MIN_EDR
] = 8,
137 [CONF_SG_WLAN_ACTIVE_BT_ACL_SLAVE_MAX_EDR
] = 20,
138 [CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_SLAVE_EDR
] = 15,
139 [CONF_SG_WLAN_ACTIVE_BT_ACL_MIN_BR
] = 20,
140 [CONF_SG_WLAN_ACTIVE_BT_ACL_MAX_BR
] = 50,
141 [CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_BR
] = 10,
142 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_HV3
] = 200,
143 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_A2DP
] = 800,
144 [CONF_SG_PASSIVE_SCAN_A2DP_BT_TIME
] = 75,
145 [CONF_SG_PASSIVE_SCAN_A2DP_WLAN_TIME
] = 15,
146 [CONF_SG_HV3_MAX_SERVED
] = 6,
147 [CONF_SG_DHCP_TIME
] = 5000,
148 [CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_A2DP
] = 100,
149 [CONF_SG_TEMP_PARAM_1
] = 0,
150 [CONF_SG_TEMP_PARAM_2
] = 0,
151 [CONF_SG_TEMP_PARAM_3
] = 0,
152 [CONF_SG_TEMP_PARAM_4
] = 0,
153 [CONF_SG_TEMP_PARAM_5
] = 0,
154 [CONF_SG_AP_BEACON_MISS_TX
] = 3,
155 [CONF_SG_RX_WINDOW_LENGTH
] = 6,
156 [CONF_SG_AP_CONNECTION_PROTECTION_TIME
] = 50,
157 [CONF_SG_TEMP_PARAM_6
] = 1,
159 .state
= CONF_SG_PROTECTIVE
,
162 .rx_msdu_life_time
= 512000,
163 .packet_detection_threshold
= 0,
164 .ps_poll_timeout
= 15,
166 .rts_threshold
= IEEE80211_MAX_RTS_THRESHOLD
,
167 .rx_cca_threshold
= 0,
168 .irq_blk_threshold
= 0xFFFF,
169 .irq_pkt_threshold
= 0,
171 .queue_type
= CONF_RX_QUEUE_TYPE_LOW_PRIORITY
,
174 .tx_energy_detection
= 0,
177 .short_retry_limit
= 10,
178 .long_retry_limit
= 10,
201 .aifsn
= CONF_TX_AIFS_PIFS
,
208 .aifsn
= CONF_TX_AIFS_PIFS
,
212 .ap_max_tx_retries
= 100,
216 .queue_id
= CONF_TX_AC_BE
,
217 .channel_type
= CONF_CHANNEL_TYPE_EDCF
,
218 .tsid
= CONF_TX_AC_BE
,
219 .ps_scheme
= CONF_PS_SCHEME_LEGACY
,
220 .ack_policy
= CONF_ACK_POLICY_LEGACY
,
224 .queue_id
= CONF_TX_AC_BK
,
225 .channel_type
= CONF_CHANNEL_TYPE_EDCF
,
226 .tsid
= CONF_TX_AC_BK
,
227 .ps_scheme
= CONF_PS_SCHEME_LEGACY
,
228 .ack_policy
= CONF_ACK_POLICY_LEGACY
,
232 .queue_id
= CONF_TX_AC_VI
,
233 .channel_type
= CONF_CHANNEL_TYPE_EDCF
,
234 .tsid
= CONF_TX_AC_VI
,
235 .ps_scheme
= CONF_PS_SCHEME_LEGACY
,
236 .ack_policy
= CONF_ACK_POLICY_LEGACY
,
240 .queue_id
= CONF_TX_AC_VO
,
241 .channel_type
= CONF_CHANNEL_TYPE_EDCF
,
242 .tsid
= CONF_TX_AC_VO
,
243 .ps_scheme
= CONF_PS_SCHEME_LEGACY
,
244 .ack_policy
= CONF_ACK_POLICY_LEGACY
,
248 .frag_threshold
= IEEE80211_MAX_FRAG_THRESHOLD
,
249 .tx_compl_timeout
= 700,
250 .tx_compl_threshold
= 4,
251 .basic_rate
= CONF_HW_BIT_RATE_1MBPS
,
252 .basic_rate_5
= CONF_HW_BIT_RATE_6MBPS
,
253 .tmpl_short_retry_limit
= 10,
254 .tmpl_long_retry_limit
= 10,
257 .wake_up_event
= CONF_WAKE_UP_EVENT_DTIM
,
258 .listen_interval
= 1,
259 .bcn_filt_mode
= CONF_BCN_FILT_MODE_ENABLED
,
260 .bcn_filt_ie_count
= 1,
263 .ie
= WLAN_EID_CHANNEL_SWITCH
,
264 .rule
= CONF_BCN_RULE_PASS_ON_APPEARANCE
,
267 .synch_fail_thold
= 10,
268 .bss_lose_timeout
= 100,
269 .beacon_rx_timeout
= 10000,
270 .broadcast_timeout
= 20000,
271 .rx_broadcast_in_ps
= 1,
272 .ps_poll_threshold
= 10,
273 .ps_poll_recovery_period
= 700,
274 .bet_enable
= CONF_BET_MODE_ENABLE
,
275 .bet_max_consecutive
= 50,
276 .psm_entry_retries
= 5,
277 .psm_exit_retries
= 16,
278 .psm_entry_nullfunc_retries
= 3,
279 .psm_entry_hangover_period
= 1,
280 .keep_alive_interval
= 55000,
281 .max_listen_interval
= 20,
288 .host_clk_settling_time
= 5000,
289 .host_fast_wakeup_support
= false
293 .avg_weight_rssi_beacon
= 20,
294 .avg_weight_rssi_data
= 10,
295 .avg_weight_snr_beacon
= 20,
296 .avg_weight_snr_data
= 10,
299 .min_dwell_time_active
= 7500,
300 .max_dwell_time_active
= 30000,
301 .min_dwell_time_passive
= 100000,
302 .max_dwell_time_passive
= 100000,
306 .tx_per_channel_power_compensation_2
= {
307 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
309 .tx_per_channel_power_compensation_5
= {
310 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
311 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
312 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
316 .tx_ba_win_size
= 64,
317 .inactivity_timeout
= 10000,
323 .tx_min_block_num
= 40,
325 .min_req_tx_blocks
= 100,
326 .min_req_rx_blocks
= 22,
333 .tx_min_block_num
= 40,
335 .min_req_tx_blocks
= 45,
336 .min_req_rx_blocks
= 22,
342 .n_divider_fref_set_1
= 0xff, /* default */
343 .n_divider_fref_set_2
= 12,
344 .m_divider_fref_set_1
= 148,
345 .m_divider_fref_set_2
= 0xffff, /* default */
346 .coex_pll_stabilization_time
= 0xffffffff, /* default */
347 .ldo_stabilization_time
= 0xffff, /* default */
348 .fm_disturbed_band_margin
= 0xff, /* default */
349 .swallow_clk_diff
= 0xff, /* default */
351 .hci_io_ds
= HCI_IO_DS_6MA
,
354 static void __wl1271_op_remove_interface(struct wl1271
*wl
,
355 bool reset_tx_queues
);
356 static void wl1271_free_ap_keys(struct wl1271
*wl
);
359 static void wl1271_device_release(struct device
*dev
)
364 static struct platform_device wl1271_device
= {
368 /* device model insists to have a release function */
370 .release
= wl1271_device_release
,
374 static DEFINE_MUTEX(wl_list_mutex
);
375 static LIST_HEAD(wl_list
);
377 static int wl1271_dev_notify(struct notifier_block
*me
, unsigned long what
,
380 struct net_device
*dev
= arg
;
381 struct wireless_dev
*wdev
;
383 struct ieee80211_hw
*hw
;
385 struct wl1271
*wl_temp
;
388 /* Check that this notification is for us. */
389 if (what
!= NETDEV_CHANGE
)
392 wdev
= dev
->ieee80211_ptr
;
400 hw
= wiphy_priv(wiphy
);
405 mutex_lock(&wl_list_mutex
);
406 list_for_each_entry(wl
, &wl_list
, list
) {
410 mutex_unlock(&wl_list_mutex
);
414 mutex_lock(&wl
->mutex
);
416 if (wl
->state
== WL1271_STATE_OFF
)
419 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
422 ret
= wl1271_ps_elp_wakeup(wl
);
426 if ((dev
->operstate
== IF_OPER_UP
) &&
427 !test_and_set_bit(WL1271_FLAG_STA_STATE_SENT
, &wl
->flags
)) {
428 wl1271_cmd_set_sta_state(wl
);
429 wl1271_info("Association completed.");
432 wl1271_ps_elp_sleep(wl
);
435 mutex_unlock(&wl
->mutex
);
440 static int wl1271_reg_notify(struct wiphy
*wiphy
,
441 struct regulatory_request
*request
)
443 struct ieee80211_supported_band
*band
;
444 struct ieee80211_channel
*ch
;
447 band
= wiphy
->bands
[IEEE80211_BAND_5GHZ
];
448 for (i
= 0; i
< band
->n_channels
; i
++) {
449 ch
= &band
->channels
[i
];
450 if (ch
->flags
& IEEE80211_CHAN_DISABLED
)
453 if (ch
->flags
& IEEE80211_CHAN_RADAR
)
454 ch
->flags
|= IEEE80211_CHAN_NO_IBSS
|
455 IEEE80211_CHAN_PASSIVE_SCAN
;
462 static void wl1271_conf_init(struct wl1271
*wl
)
466 * This function applies the default configuration to the driver. This
467 * function is invoked upon driver load (spi probe.)
469 * The configuration is stored in a run-time structure in order to
470 * facilitate for run-time adjustment of any of the parameters. Making
471 * changes to the configuration structure will apply the new values on
472 * the next interface up (wl1271_op_start.)
475 /* apply driver default configuration */
476 memcpy(&wl
->conf
, &default_conf
, sizeof(default_conf
));
480 static int wl1271_plt_init(struct wl1271
*wl
)
482 struct conf_tx_ac_category
*conf_ac
;
483 struct conf_tx_tid
*conf_tid
;
486 if (wl
->chip
.id
== CHIP_ID_1283_PG20
)
487 ret
= wl128x_cmd_general_parms(wl
);
489 ret
= wl1271_cmd_general_parms(wl
);
493 if (wl
->chip
.id
== CHIP_ID_1283_PG20
)
494 ret
= wl128x_cmd_radio_parms(wl
);
496 ret
= wl1271_cmd_radio_parms(wl
);
500 if (wl
->chip
.id
!= CHIP_ID_1283_PG20
) {
501 ret
= wl1271_cmd_ext_radio_parms(wl
);
508 /* Chip-specific initializations */
509 ret
= wl1271_chip_specific_init(wl
);
513 ret
= wl1271_sta_init_templates_config(wl
);
517 ret
= wl1271_acx_init_mem_config(wl
);
521 /* PHY layer config */
522 ret
= wl1271_init_phy_config(wl
);
524 goto out_free_memmap
;
526 ret
= wl1271_acx_dco_itrim_params(wl
);
528 goto out_free_memmap
;
530 /* Initialize connection monitoring thresholds */
531 ret
= wl1271_acx_conn_monit_params(wl
, false);
533 goto out_free_memmap
;
535 /* Bluetooth WLAN coexistence */
536 ret
= wl1271_init_pta(wl
);
538 goto out_free_memmap
;
540 /* FM WLAN coexistence */
541 ret
= wl1271_acx_fm_coex(wl
);
543 goto out_free_memmap
;
545 /* Energy detection */
546 ret
= wl1271_init_energy_detection(wl
);
548 goto out_free_memmap
;
550 ret
= wl1271_acx_sta_mem_cfg(wl
);
552 goto out_free_memmap
;
554 /* Default fragmentation threshold */
555 ret
= wl1271_acx_frag_threshold(wl
, wl
->conf
.tx
.frag_threshold
);
557 goto out_free_memmap
;
559 /* Default TID/AC configuration */
560 BUG_ON(wl
->conf
.tx
.tid_conf_count
!= wl
->conf
.tx
.ac_conf_count
);
561 for (i
= 0; i
< wl
->conf
.tx
.tid_conf_count
; i
++) {
562 conf_ac
= &wl
->conf
.tx
.ac_conf
[i
];
563 ret
= wl1271_acx_ac_cfg(wl
, conf_ac
->ac
, conf_ac
->cw_min
,
564 conf_ac
->cw_max
, conf_ac
->aifsn
,
565 conf_ac
->tx_op_limit
);
567 goto out_free_memmap
;
569 conf_tid
= &wl
->conf
.tx
.tid_conf
[i
];
570 ret
= wl1271_acx_tid_cfg(wl
, conf_tid
->queue_id
,
571 conf_tid
->channel_type
,
574 conf_tid
->ack_policy
,
575 conf_tid
->apsd_conf
[0],
576 conf_tid
->apsd_conf
[1]);
578 goto out_free_memmap
;
581 /* Enable data path */
582 ret
= wl1271_cmd_data_path(wl
, 1);
584 goto out_free_memmap
;
586 /* Configure for CAM power saving (ie. always active) */
587 ret
= wl1271_acx_sleep_auth(wl
, WL1271_PSM_CAM
);
589 goto out_free_memmap
;
592 ret
= wl1271_acx_pm_config(wl
);
594 goto out_free_memmap
;
599 kfree(wl
->target_mem_map
);
600 wl
->target_mem_map
= NULL
;
605 static void wl1271_irq_ps_regulate_link(struct wl1271
*wl
, u8 hlid
, u8 tx_blks
)
609 /* only regulate station links */
610 if (hlid
< WL1271_AP_STA_HLID_START
)
613 fw_ps
= test_bit(hlid
, (unsigned long *)&wl
->ap_fw_ps_map
);
616 * Wake up from high level PS if the STA is asleep with too little
617 * blocks in FW or if the STA is awake.
619 if (!fw_ps
|| tx_blks
< WL1271_PS_STA_MAX_BLOCKS
)
620 wl1271_ps_link_end(wl
, hlid
);
622 /* Start high-level PS if the STA is asleep with enough blocks in FW */
623 else if (fw_ps
&& tx_blks
>= WL1271_PS_STA_MAX_BLOCKS
)
624 wl1271_ps_link_start(wl
, hlid
, true);
627 static void wl1271_irq_update_links_status(struct wl1271
*wl
,
628 struct wl1271_fw_ap_status
*status
)
633 cur_fw_ps_map
= le32_to_cpu(status
->link_ps_bitmap
);
634 if (wl
->ap_fw_ps_map
!= cur_fw_ps_map
) {
635 wl1271_debug(DEBUG_PSM
,
636 "link ps prev 0x%x cur 0x%x changed 0x%x",
637 wl
->ap_fw_ps_map
, cur_fw_ps_map
,
638 wl
->ap_fw_ps_map
^ cur_fw_ps_map
);
640 wl
->ap_fw_ps_map
= cur_fw_ps_map
;
643 for (hlid
= WL1271_AP_STA_HLID_START
; hlid
< AP_MAX_LINKS
; hlid
++) {
644 u8 cnt
= status
->tx_lnk_free_blks
[hlid
] -
645 wl
->links
[hlid
].prev_freed_blks
;
647 wl
->links
[hlid
].prev_freed_blks
=
648 status
->tx_lnk_free_blks
[hlid
];
649 wl
->links
[hlid
].allocated_blks
-= cnt
;
651 wl1271_irq_ps_regulate_link(wl
, hlid
,
652 wl
->links
[hlid
].allocated_blks
);
656 static void wl1271_fw_status(struct wl1271
*wl
,
657 struct wl1271_fw_full_status
*full_status
)
659 struct wl1271_fw_common_status
*status
= &full_status
->common
;
661 u32 old_tx_blk_count
= wl
->tx_blocks_available
;
662 u32 freed_blocks
= 0;
665 if (wl
->bss_type
== BSS_TYPE_AP_BSS
) {
666 wl1271_raw_read(wl
, FW_STATUS_ADDR
, status
,
667 sizeof(struct wl1271_fw_ap_status
), false);
669 wl1271_raw_read(wl
, FW_STATUS_ADDR
, status
,
670 sizeof(struct wl1271_fw_sta_status
), false);
673 wl1271_debug(DEBUG_IRQ
, "intr: 0x%x (fw_rx_counter = %d, "
674 "drv_rx_counter = %d, tx_results_counter = %d)",
676 status
->fw_rx_counter
,
677 status
->drv_rx_counter
,
678 status
->tx_results_counter
);
680 /* update number of available TX blocks */
681 for (i
= 0; i
< NUM_TX_QUEUES
; i
++) {
682 freed_blocks
+= le32_to_cpu(status
->tx_released_blks
[i
]) -
683 wl
->tx_blocks_freed
[i
];
685 wl
->tx_blocks_freed
[i
] =
686 le32_to_cpu(status
->tx_released_blks
[i
]);
689 wl
->tx_allocated_blocks
-= freed_blocks
;
691 if (wl
->bss_type
== BSS_TYPE_AP_BSS
) {
692 /* Update num of allocated TX blocks per link and ps status */
693 wl1271_irq_update_links_status(wl
, &full_status
->ap
);
694 wl
->tx_blocks_available
+= freed_blocks
;
696 int avail
= full_status
->sta
.tx_total
- wl
->tx_allocated_blocks
;
699 * The FW might change the total number of TX memblocks before
700 * we get a notification about blocks being released. Thus, the
701 * available blocks calculation might yield a temporary result
702 * which is lower than the actual available blocks. Keeping in
703 * mind that only blocks that were allocated can be moved from
704 * TX to RX, tx_blocks_available should never decrease here.
706 wl
->tx_blocks_available
= max((int)wl
->tx_blocks_available
,
710 /* if more blocks are available now, tx work can be scheduled */
711 if (wl
->tx_blocks_available
> old_tx_blk_count
)
712 clear_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
);
714 /* update the host-chipset time offset */
716 wl
->time_offset
= (timespec_to_ns(&ts
) >> 10) -
717 (s64
)le32_to_cpu(status
->fw_localtime
);
720 static void wl1271_flush_deferred_work(struct wl1271
*wl
)
724 /* Pass all received frames to the network stack */
725 while ((skb
= skb_dequeue(&wl
->deferred_rx_queue
)))
726 ieee80211_rx_ni(wl
->hw
, skb
);
728 /* Return sent skbs to the network stack */
729 while ((skb
= skb_dequeue(&wl
->deferred_tx_queue
)))
730 ieee80211_tx_status(wl
->hw
, skb
);
733 static void wl1271_netstack_work(struct work_struct
*work
)
736 container_of(work
, struct wl1271
, netstack_work
);
739 wl1271_flush_deferred_work(wl
);
740 } while (skb_queue_len(&wl
->deferred_rx_queue
));
743 #define WL1271_IRQ_MAX_LOOPS 256
745 irqreturn_t
wl1271_irq(int irq
, void *cookie
)
749 int loopcount
= WL1271_IRQ_MAX_LOOPS
;
750 struct wl1271
*wl
= (struct wl1271
*)cookie
;
752 unsigned int defer_count
;
755 /* TX might be handled here, avoid redundant work */
756 set_bit(WL1271_FLAG_TX_PENDING
, &wl
->flags
);
757 cancel_work_sync(&wl
->tx_work
);
760 * In case edge triggered interrupt must be used, we cannot iterate
761 * more than once without introducing race conditions with the hardirq.
763 if (wl
->platform_quirks
& WL12XX_PLATFORM_QUIRK_EDGE_IRQ
)
766 mutex_lock(&wl
->mutex
);
768 wl1271_debug(DEBUG_IRQ
, "IRQ work");
770 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
773 ret
= wl1271_ps_elp_wakeup(wl
);
777 while (!done
&& loopcount
--) {
779 * In order to avoid a race with the hardirq, clear the flag
780 * before acknowledging the chip. Since the mutex is held,
781 * wl1271_ps_elp_wakeup cannot be called concurrently.
783 clear_bit(WL1271_FLAG_IRQ_RUNNING
, &wl
->flags
);
784 smp_mb__after_clear_bit();
786 wl1271_fw_status(wl
, wl
->fw_status
);
787 intr
= le32_to_cpu(wl
->fw_status
->common
.intr
);
788 intr
&= WL1271_INTR_MASK
;
794 if (unlikely(intr
& WL1271_ACX_INTR_WATCHDOG
)) {
795 wl1271_error("watchdog interrupt received! "
796 "starting recovery.");
797 ieee80211_queue_work(wl
->hw
, &wl
->recovery_work
);
799 /* restarting the chip. ignore any other interrupt. */
803 if (likely(intr
& WL1271_ACX_INTR_DATA
)) {
804 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_DATA");
806 wl1271_rx(wl
, &wl
->fw_status
->common
);
808 /* Check if any tx blocks were freed */
809 spin_lock_irqsave(&wl
->wl_lock
, flags
);
810 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
) &&
811 wl
->tx_queue_count
) {
812 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
814 * In order to avoid starvation of the TX path,
815 * call the work function directly.
817 wl1271_tx_work_locked(wl
);
819 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
822 /* check for tx results */
823 if (wl
->fw_status
->common
.tx_results_counter
!=
824 (wl
->tx_results_count
& 0xff))
825 wl1271_tx_complete(wl
);
827 /* Make sure the deferred queues don't get too long */
828 defer_count
= skb_queue_len(&wl
->deferred_tx_queue
) +
829 skb_queue_len(&wl
->deferred_rx_queue
);
830 if (defer_count
> WL1271_DEFERRED_QUEUE_LIMIT
)
831 wl1271_flush_deferred_work(wl
);
834 if (intr
& WL1271_ACX_INTR_EVENT_A
) {
835 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_EVENT_A");
836 wl1271_event_handle(wl
, 0);
839 if (intr
& WL1271_ACX_INTR_EVENT_B
) {
840 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_EVENT_B");
841 wl1271_event_handle(wl
, 1);
844 if (intr
& WL1271_ACX_INTR_INIT_COMPLETE
)
845 wl1271_debug(DEBUG_IRQ
,
846 "WL1271_ACX_INTR_INIT_COMPLETE");
848 if (intr
& WL1271_ACX_INTR_HW_AVAILABLE
)
849 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_HW_AVAILABLE");
852 wl1271_ps_elp_sleep(wl
);
855 spin_lock_irqsave(&wl
->wl_lock
, flags
);
856 /* In case TX was not handled here, queue TX work */
857 clear_bit(WL1271_FLAG_TX_PENDING
, &wl
->flags
);
858 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
) &&
860 ieee80211_queue_work(wl
->hw
, &wl
->tx_work
);
861 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
863 mutex_unlock(&wl
->mutex
);
867 EXPORT_SYMBOL_GPL(wl1271_irq
);
869 static int wl1271_fetch_firmware(struct wl1271
*wl
)
871 const struct firmware
*fw
;
875 switch (wl
->bss_type
) {
876 case BSS_TYPE_AP_BSS
:
877 if (wl
->chip
.id
== CHIP_ID_1283_PG20
)
878 fw_name
= WL128X_AP_FW_NAME
;
880 fw_name
= WL127X_AP_FW_NAME
;
883 case BSS_TYPE_STA_BSS
:
884 if (wl
->chip
.id
== CHIP_ID_1283_PG20
)
885 fw_name
= WL128X_FW_NAME
;
887 fw_name
= WL1271_FW_NAME
;
890 wl1271_error("no compatible firmware for bss_type %d",
895 wl1271_debug(DEBUG_BOOT
, "booting firmware %s", fw_name
);
897 ret
= request_firmware(&fw
, fw_name
, wl1271_wl_to_dev(wl
));
900 wl1271_error("could not get firmware: %d", ret
);
905 wl1271_error("firmware size is not multiple of 32 bits: %zu",
912 wl
->fw_len
= fw
->size
;
913 wl
->fw
= vmalloc(wl
->fw_len
);
916 wl1271_error("could not allocate memory for the firmware");
921 memcpy(wl
->fw
, fw
->data
, wl
->fw_len
);
922 wl
->fw_bss_type
= wl
->bss_type
;
926 release_firmware(fw
);
931 static int wl1271_fetch_nvs(struct wl1271
*wl
)
933 const struct firmware
*fw
;
936 ret
= request_firmware(&fw
, WL12XX_NVS_NAME
, wl1271_wl_to_dev(wl
));
939 wl1271_error("could not get nvs file: %d", ret
);
943 wl
->nvs
= kmemdup(fw
->data
, fw
->size
, GFP_KERNEL
);
946 wl1271_error("could not allocate memory for the nvs file");
951 wl
->nvs_len
= fw
->size
;
954 release_firmware(fw
);
959 static void wl1271_recovery_work(struct work_struct
*work
)
962 container_of(work
, struct wl1271
, recovery_work
);
964 mutex_lock(&wl
->mutex
);
966 if (wl
->state
!= WL1271_STATE_ON
)
969 wl1271_info("Hardware recovery in progress. FW ver: %s pc: 0x%x",
970 wl
->chip
.fw_ver_str
, wl1271_read32(wl
, SCR_PAD4
));
972 if (test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
973 ieee80211_connection_loss(wl
->vif
);
975 /* Prevent spurious TX during FW restart */
976 ieee80211_stop_queues(wl
->hw
);
978 /* reboot the chipset */
979 __wl1271_op_remove_interface(wl
, false);
980 ieee80211_restart_hw(wl
->hw
);
983 * Its safe to enable TX now - the queues are stopped after a request
986 ieee80211_wake_queues(wl
->hw
);
989 mutex_unlock(&wl
->mutex
);
992 static void wl1271_fw_wakeup(struct wl1271
*wl
)
996 elp_reg
= ELPCTRL_WAKE_UP
;
997 wl1271_raw_write32(wl
, HW_ACCESS_ELP_CTRL_REG_ADDR
, elp_reg
);
1000 static int wl1271_setup(struct wl1271
*wl
)
1002 wl
->fw_status
= kmalloc(sizeof(*wl
->fw_status
), GFP_KERNEL
);
1006 wl
->tx_res_if
= kmalloc(sizeof(*wl
->tx_res_if
), GFP_KERNEL
);
1007 if (!wl
->tx_res_if
) {
1008 kfree(wl
->fw_status
);
1015 static int wl1271_chip_wakeup(struct wl1271
*wl
)
1017 struct wl1271_partition_set partition
;
1020 msleep(WL1271_PRE_POWER_ON_SLEEP
);
1021 ret
= wl1271_power_on(wl
);
1024 msleep(WL1271_POWER_ON_SLEEP
);
1025 wl1271_io_reset(wl
);
1028 /* We don't need a real memory partition here, because we only want
1029 * to use the registers at this point. */
1030 memset(&partition
, 0, sizeof(partition
));
1031 partition
.reg
.start
= REGISTERS_BASE
;
1032 partition
.reg
.size
= REGISTERS_DOWN_SIZE
;
1033 wl1271_set_partition(wl
, &partition
);
1035 /* ELP module wake up */
1036 wl1271_fw_wakeup(wl
);
1038 /* whal_FwCtrl_BootSm() */
1040 /* 0. read chip id from CHIP_ID */
1041 wl
->chip
.id
= wl1271_read32(wl
, CHIP_ID_B
);
1043 /* 1. check if chip id is valid */
1045 switch (wl
->chip
.id
) {
1046 case CHIP_ID_1271_PG10
:
1047 wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
1050 ret
= wl1271_setup(wl
);
1054 case CHIP_ID_1271_PG20
:
1055 wl1271_debug(DEBUG_BOOT
, "chip id 0x%x (1271 PG20)",
1058 /* end-of-transaction flag should be set in wl127x AP mode */
1059 if (wl
->bss_type
== BSS_TYPE_AP_BSS
)
1060 wl
->quirks
|= WL12XX_QUIRK_END_OF_TRANSACTION
;
1062 ret
= wl1271_setup(wl
);
1066 case CHIP_ID_1283_PG20
:
1067 wl1271_debug(DEBUG_BOOT
, "chip id 0x%x (1283 PG20)",
1070 ret
= wl1271_setup(wl
);
1073 if (wl1271_set_block_size(wl
))
1074 wl
->quirks
|= WL12XX_QUIRK_BLOCKSIZE_ALIGNMENT
;
1076 case CHIP_ID_1283_PG10
:
1078 wl1271_warning("unsupported chip id: 0x%x", wl
->chip
.id
);
1083 /* Make sure the firmware type matches the BSS type */
1084 if (wl
->fw
== NULL
|| wl
->fw_bss_type
!= wl
->bss_type
) {
1085 ret
= wl1271_fetch_firmware(wl
);
1090 /* No NVS from netlink, try to get it from the filesystem */
1091 if (wl
->nvs
== NULL
) {
1092 ret
= wl1271_fetch_nvs(wl
);
1101 static unsigned int wl1271_get_fw_ver_quirks(struct wl1271
*wl
)
1103 unsigned int quirks
= 0;
1104 unsigned int *fw_ver
= wl
->chip
.fw_ver
;
1106 /* Only for wl127x */
1107 if ((fw_ver
[FW_VER_CHIP
] == FW_VER_CHIP_WL127X
) &&
1108 /* Check STA version */
1109 (((fw_ver
[FW_VER_IF_TYPE
] == FW_VER_IF_TYPE_STA
) &&
1110 (fw_ver
[FW_VER_MINOR
] < FW_VER_MINOR_1_SPARE_STA_MIN
)) ||
1111 /* Check AP version */
1112 ((fw_ver
[FW_VER_IF_TYPE
] == FW_VER_IF_TYPE_AP
) &&
1113 (fw_ver
[FW_VER_MINOR
] < FW_VER_MINOR_1_SPARE_AP_MIN
))))
1114 quirks
|= WL12XX_QUIRK_USE_2_SPARE_BLOCKS
;
1119 int wl1271_plt_start(struct wl1271
*wl
)
1121 int retries
= WL1271_BOOT_RETRIES
;
1124 mutex_lock(&wl
->mutex
);
1126 wl1271_notice("power up");
1128 if (wl
->state
!= WL1271_STATE_OFF
) {
1129 wl1271_error("cannot go into PLT state because not "
1130 "in off state: %d", wl
->state
);
1135 wl
->bss_type
= BSS_TYPE_STA_BSS
;
1139 ret
= wl1271_chip_wakeup(wl
);
1143 ret
= wl1271_boot(wl
);
1147 ret
= wl1271_plt_init(wl
);
1151 wl
->state
= WL1271_STATE_PLT
;
1152 wl1271_notice("firmware booted in PLT mode (%s)",
1153 wl
->chip
.fw_ver_str
);
1155 /* Check if any quirks are needed with older fw versions */
1156 wl
->quirks
|= wl1271_get_fw_ver_quirks(wl
);
1160 mutex_unlock(&wl
->mutex
);
1161 /* Unlocking the mutex in the middle of handling is
1162 inherently unsafe. In this case we deem it safe to do,
1163 because we need to let any possibly pending IRQ out of
1164 the system (and while we are WL1271_STATE_OFF the IRQ
1165 work function will not do anything.) Also, any other
1166 possible concurrent operations will fail due to the
1167 current state, hence the wl1271 struct should be safe. */
1168 wl1271_disable_interrupts(wl
);
1169 wl1271_flush_deferred_work(wl
);
1170 cancel_work_sync(&wl
->netstack_work
);
1171 mutex_lock(&wl
->mutex
);
1173 wl1271_power_off(wl
);
1176 wl1271_error("firmware boot in PLT mode failed despite %d retries",
1177 WL1271_BOOT_RETRIES
);
1179 mutex_unlock(&wl
->mutex
);
1184 static int __wl1271_plt_stop(struct wl1271
*wl
)
1188 wl1271_notice("power down");
1190 if (wl
->state
!= WL1271_STATE_PLT
) {
1191 wl1271_error("cannot power down because not in PLT "
1192 "state: %d", wl
->state
);
1197 wl1271_power_off(wl
);
1199 wl
->state
= WL1271_STATE_OFF
;
1202 mutex_unlock(&wl
->mutex
);
1203 wl1271_disable_interrupts(wl
);
1204 wl1271_flush_deferred_work(wl
);
1205 cancel_work_sync(&wl
->netstack_work
);
1206 cancel_work_sync(&wl
->recovery_work
);
1207 mutex_lock(&wl
->mutex
);
1212 int wl1271_plt_stop(struct wl1271
*wl
)
1216 mutex_lock(&wl
->mutex
);
1217 ret
= __wl1271_plt_stop(wl
);
1218 mutex_unlock(&wl
->mutex
);
1222 static void wl1271_op_tx(struct ieee80211_hw
*hw
, struct sk_buff
*skb
)
1224 struct wl1271
*wl
= hw
->priv
;
1225 unsigned long flags
;
1229 q
= wl1271_tx_get_queue(skb_get_queue_mapping(skb
));
1231 if (wl
->bss_type
== BSS_TYPE_AP_BSS
)
1232 hlid
= wl1271_tx_get_hlid(skb
);
1234 spin_lock_irqsave(&wl
->wl_lock
, flags
);
1236 wl
->tx_queue_count
++;
1239 * The workqueue is slow to process the tx_queue and we need stop
1240 * the queue here, otherwise the queue will get too long.
1242 if (wl
->tx_queue_count
>= WL1271_TX_QUEUE_HIGH_WATERMARK
) {
1243 wl1271_debug(DEBUG_TX
, "op_tx: stopping queues");
1244 ieee80211_stop_queues(wl
->hw
);
1245 set_bit(WL1271_FLAG_TX_QUEUE_STOPPED
, &wl
->flags
);
1248 /* queue the packet */
1249 if (wl
->bss_type
== BSS_TYPE_AP_BSS
) {
1250 wl1271_debug(DEBUG_TX
, "queue skb hlid %d q %d", hlid
, q
);
1251 skb_queue_tail(&wl
->links
[hlid
].tx_queue
[q
], skb
);
1253 skb_queue_tail(&wl
->tx_queue
[q
], skb
);
1257 * The chip specific setup must run before the first TX packet -
1258 * before that, the tx_work will not be initialized!
1261 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
) &&
1262 !test_bit(WL1271_FLAG_TX_PENDING
, &wl
->flags
))
1263 ieee80211_queue_work(wl
->hw
, &wl
->tx_work
);
1265 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
1268 int wl1271_tx_dummy_packet(struct wl1271
*wl
)
1270 unsigned long flags
;
1272 spin_lock_irqsave(&wl
->wl_lock
, flags
);
1273 set_bit(WL1271_FLAG_DUMMY_PACKET_PENDING
, &wl
->flags
);
1274 wl
->tx_queue_count
++;
1275 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
1277 /* The FW is low on RX memory blocks, so send the dummy packet asap */
1278 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
))
1279 wl1271_tx_work_locked(wl
);
1282 * If the FW TX is busy, TX work will be scheduled by the threaded
1283 * interrupt handler function
1289 * The size of the dummy packet should be at least 1400 bytes. However, in
1290 * order to minimize the number of bus transactions, aligning it to 512 bytes
1291 * boundaries could be beneficial, performance wise
1293 #define TOTAL_TX_DUMMY_PACKET_SIZE (ALIGN(1400, 512))
1295 static struct sk_buff
*wl12xx_alloc_dummy_packet(struct wl1271
*wl
)
1297 struct sk_buff
*skb
;
1298 struct ieee80211_hdr_3addr
*hdr
;
1299 unsigned int dummy_packet_size
;
1301 dummy_packet_size
= TOTAL_TX_DUMMY_PACKET_SIZE
-
1302 sizeof(struct wl1271_tx_hw_descr
) - sizeof(*hdr
);
1304 skb
= dev_alloc_skb(TOTAL_TX_DUMMY_PACKET_SIZE
);
1306 wl1271_warning("Failed to allocate a dummy packet skb");
1310 skb_reserve(skb
, sizeof(struct wl1271_tx_hw_descr
));
1312 hdr
= (struct ieee80211_hdr_3addr
*) skb_put(skb
, sizeof(*hdr
));
1313 memset(hdr
, 0, sizeof(*hdr
));
1314 hdr
->frame_control
= cpu_to_le16(IEEE80211_FTYPE_DATA
|
1315 IEEE80211_STYPE_NULLFUNC
|
1316 IEEE80211_FCTL_TODS
);
1318 memset(skb_put(skb
, dummy_packet_size
), 0, dummy_packet_size
);
1320 /* Dummy packets require the TID to be management */
1321 skb
->priority
= WL1271_TID_MGMT
;
1323 /* Initialize all fields that might be used */
1324 skb_set_queue_mapping(skb
, 0);
1325 memset(IEEE80211_SKB_CB(skb
), 0, sizeof(struct ieee80211_tx_info
));
1331 static struct notifier_block wl1271_dev_notifier
= {
1332 .notifier_call
= wl1271_dev_notify
,
1335 static int wl1271_op_start(struct ieee80211_hw
*hw
)
1337 wl1271_debug(DEBUG_MAC80211
, "mac80211 start");
1340 * We have to delay the booting of the hardware because
1341 * we need to know the local MAC address before downloading and
1342 * initializing the firmware. The MAC address cannot be changed
1343 * after boot, and without the proper MAC address, the firmware
1344 * will not function properly.
1346 * The MAC address is first known when the corresponding interface
1347 * is added. That is where we will initialize the hardware.
1349 * In addition, we currently have different firmwares for AP and managed
1350 * operation. We will know which to boot according to interface type.
1356 static void wl1271_op_stop(struct ieee80211_hw
*hw
)
1358 wl1271_debug(DEBUG_MAC80211
, "mac80211 stop");
1361 static int wl1271_op_add_interface(struct ieee80211_hw
*hw
,
1362 struct ieee80211_vif
*vif
)
1364 struct wl1271
*wl
= hw
->priv
;
1365 struct wiphy
*wiphy
= hw
->wiphy
;
1366 int retries
= WL1271_BOOT_RETRIES
;
1368 bool booted
= false;
1370 wl1271_debug(DEBUG_MAC80211
, "mac80211 add interface type %d mac %pM",
1371 vif
->type
, vif
->addr
);
1373 mutex_lock(&wl
->mutex
);
1375 wl1271_debug(DEBUG_MAC80211
,
1376 "multiple vifs are not supported yet");
1382 * in some very corner case HW recovery scenarios its possible to
1383 * get here before __wl1271_op_remove_interface is complete, so
1384 * opt out if that is the case.
1386 if (test_bit(WL1271_FLAG_IF_INITIALIZED
, &wl
->flags
)) {
1391 switch (vif
->type
) {
1392 case NL80211_IFTYPE_STATION
:
1393 wl
->bss_type
= BSS_TYPE_STA_BSS
;
1394 wl
->set_bss_type
= BSS_TYPE_STA_BSS
;
1396 case NL80211_IFTYPE_ADHOC
:
1397 wl
->bss_type
= BSS_TYPE_IBSS
;
1398 wl
->set_bss_type
= BSS_TYPE_STA_BSS
;
1400 case NL80211_IFTYPE_AP
:
1401 wl
->bss_type
= BSS_TYPE_AP_BSS
;
1408 memcpy(wl
->mac_addr
, vif
->addr
, ETH_ALEN
);
1410 if (wl
->state
!= WL1271_STATE_OFF
) {
1411 wl1271_error("cannot start because not in off state: %d",
1419 ret
= wl1271_chip_wakeup(wl
);
1423 ret
= wl1271_boot(wl
);
1427 ret
= wl1271_hw_init(wl
);
1435 mutex_unlock(&wl
->mutex
);
1436 /* Unlocking the mutex in the middle of handling is
1437 inherently unsafe. In this case we deem it safe to do,
1438 because we need to let any possibly pending IRQ out of
1439 the system (and while we are WL1271_STATE_OFF the IRQ
1440 work function will not do anything.) Also, any other
1441 possible concurrent operations will fail due to the
1442 current state, hence the wl1271 struct should be safe. */
1443 wl1271_disable_interrupts(wl
);
1444 wl1271_flush_deferred_work(wl
);
1445 cancel_work_sync(&wl
->netstack_work
);
1446 mutex_lock(&wl
->mutex
);
1448 wl1271_power_off(wl
);
1452 wl1271_error("firmware boot failed despite %d retries",
1453 WL1271_BOOT_RETRIES
);
1458 wl
->state
= WL1271_STATE_ON
;
1459 set_bit(WL1271_FLAG_IF_INITIALIZED
, &wl
->flags
);
1460 wl1271_info("firmware booted (%s)", wl
->chip
.fw_ver_str
);
1462 /* update hw/fw version info in wiphy struct */
1463 wiphy
->hw_version
= wl
->chip
.id
;
1464 strncpy(wiphy
->fw_version
, wl
->chip
.fw_ver_str
,
1465 sizeof(wiphy
->fw_version
));
1467 /* Check if any quirks are needed with older fw versions */
1468 wl
->quirks
|= wl1271_get_fw_ver_quirks(wl
);
1471 * Now we know if 11a is supported (info from the NVS), so disable
1472 * 11a channels if not supported
1474 if (!wl
->enable_11a
)
1475 wiphy
->bands
[IEEE80211_BAND_5GHZ
]->n_channels
= 0;
1477 wl1271_debug(DEBUG_MAC80211
, "11a is %ssupported",
1478 wl
->enable_11a
? "" : "not ");
1481 mutex_unlock(&wl
->mutex
);
1483 mutex_lock(&wl_list_mutex
);
1485 list_add(&wl
->list
, &wl_list
);
1486 mutex_unlock(&wl_list_mutex
);
1491 static void __wl1271_op_remove_interface(struct wl1271
*wl
,
1492 bool reset_tx_queues
)
1496 wl1271_debug(DEBUG_MAC80211
, "mac80211 remove interface");
1498 /* because of hardware recovery, we may get here twice */
1499 if (wl
->state
!= WL1271_STATE_ON
)
1502 wl1271_info("down");
1504 mutex_lock(&wl_list_mutex
);
1505 list_del(&wl
->list
);
1506 mutex_unlock(&wl_list_mutex
);
1508 /* enable dyn ps just in case (if left on due to fw crash etc) */
1509 if (wl
->bss_type
== BSS_TYPE_STA_BSS
)
1510 ieee80211_enable_dyn_ps(wl
->vif
);
1512 if (wl
->scan
.state
!= WL1271_SCAN_STATE_IDLE
) {
1513 wl
->scan
.state
= WL1271_SCAN_STATE_IDLE
;
1514 memset(wl
->scan
.scanned_ch
, 0, sizeof(wl
->scan
.scanned_ch
));
1515 wl
->scan
.req
= NULL
;
1516 ieee80211_scan_completed(wl
->hw
, true);
1520 * this must be before the cancel_work calls below, so that the work
1521 * functions don't perform further work.
1523 wl
->state
= WL1271_STATE_OFF
;
1525 mutex_unlock(&wl
->mutex
);
1527 wl1271_disable_interrupts(wl
);
1528 wl1271_flush_deferred_work(wl
);
1529 cancel_delayed_work_sync(&wl
->scan_complete_work
);
1530 cancel_work_sync(&wl
->netstack_work
);
1531 cancel_work_sync(&wl
->tx_work
);
1532 cancel_delayed_work_sync(&wl
->pspoll_work
);
1533 cancel_delayed_work_sync(&wl
->elp_work
);
1535 mutex_lock(&wl
->mutex
);
1537 /* let's notify MAC80211 about the remaining pending TX frames */
1538 wl1271_tx_reset(wl
, reset_tx_queues
);
1539 wl1271_power_off(wl
);
1541 memset(wl
->bssid
, 0, ETH_ALEN
);
1542 memset(wl
->ssid
, 0, IW_ESSID_MAX_SIZE
+ 1);
1544 wl
->bss_type
= MAX_BSS_TYPE
;
1545 wl
->set_bss_type
= MAX_BSS_TYPE
;
1546 wl
->band
= IEEE80211_BAND_2GHZ
;
1549 wl
->psm_entry_retry
= 0;
1550 wl
->power_level
= WL1271_DEFAULT_POWER_LEVEL
;
1551 wl
->tx_blocks_available
= 0;
1552 wl
->tx_allocated_blocks
= 0;
1553 wl
->tx_results_count
= 0;
1554 wl
->tx_packets_count
= 0;
1555 wl
->tx_security_last_seq
= 0;
1556 wl
->tx_security_seq
= 0;
1557 wl
->time_offset
= 0;
1558 wl
->session_counter
= 0;
1559 wl
->rate_set
= CONF_TX_RATE_MASK_BASIC
;
1562 wl1271_free_ap_keys(wl
);
1563 memset(wl
->ap_hlid_map
, 0, sizeof(wl
->ap_hlid_map
));
1564 wl
->ap_fw_ps_map
= 0;
1568 * this is performed after the cancel_work calls and the associated
1569 * mutex_lock, so that wl1271_op_add_interface does not accidentally
1570 * get executed before all these vars have been reset.
1574 for (i
= 0; i
< NUM_TX_QUEUES
; i
++)
1575 wl
->tx_blocks_freed
[i
] = 0;
1577 wl1271_debugfs_reset(wl
);
1579 kfree(wl
->fw_status
);
1580 wl
->fw_status
= NULL
;
1581 kfree(wl
->tx_res_if
);
1582 wl
->tx_res_if
= NULL
;
1583 kfree(wl
->target_mem_map
);
1584 wl
->target_mem_map
= NULL
;
1587 static void wl1271_op_remove_interface(struct ieee80211_hw
*hw
,
1588 struct ieee80211_vif
*vif
)
1590 struct wl1271
*wl
= hw
->priv
;
1592 mutex_lock(&wl
->mutex
);
1594 * wl->vif can be null here if someone shuts down the interface
1595 * just when hardware recovery has been started.
1598 WARN_ON(wl
->vif
!= vif
);
1599 __wl1271_op_remove_interface(wl
, true);
1602 mutex_unlock(&wl
->mutex
);
1603 cancel_work_sync(&wl
->recovery_work
);
1606 void wl1271_configure_filters(struct wl1271
*wl
, unsigned int filters
)
1608 wl1271_set_default_filters(wl
);
1610 /* combine requested filters with current filter config */
1611 filters
= wl
->filters
| filters
;
1613 wl1271_debug(DEBUG_FILTERS
, "RX filters set: ");
1615 if (filters
& FIF_PROMISC_IN_BSS
) {
1616 wl1271_debug(DEBUG_FILTERS
, " - FIF_PROMISC_IN_BSS");
1617 wl
->rx_config
&= ~CFG_UNI_FILTER_EN
;
1618 wl
->rx_config
|= CFG_BSSID_FILTER_EN
;
1620 if (filters
& FIF_BCN_PRBRESP_PROMISC
) {
1621 wl1271_debug(DEBUG_FILTERS
, " - FIF_BCN_PRBRESP_PROMISC");
1622 wl
->rx_config
&= ~CFG_BSSID_FILTER_EN
;
1623 wl
->rx_config
&= ~CFG_SSID_FILTER_EN
;
1625 if (filters
& FIF_OTHER_BSS
) {
1626 wl1271_debug(DEBUG_FILTERS
, " - FIF_OTHER_BSS");
1627 wl
->rx_config
&= ~CFG_BSSID_FILTER_EN
;
1629 if (filters
& FIF_CONTROL
) {
1630 wl1271_debug(DEBUG_FILTERS
, " - FIF_CONTROL");
1631 wl
->rx_filter
|= CFG_RX_CTL_EN
;
1633 if (filters
& FIF_FCSFAIL
) {
1634 wl1271_debug(DEBUG_FILTERS
, " - FIF_FCSFAIL");
1635 wl
->rx_filter
|= CFG_RX_FCS_ERROR
;
1639 static int wl1271_dummy_join(struct wl1271
*wl
)
1642 /* we need to use a dummy BSSID for now */
1643 static const u8 dummy_bssid
[ETH_ALEN
] = { 0x0b, 0xad, 0xde,
1646 memcpy(wl
->bssid
, dummy_bssid
, ETH_ALEN
);
1648 /* pass through frames from all BSS */
1649 wl1271_configure_filters(wl
, FIF_OTHER_BSS
);
1651 ret
= wl1271_cmd_join(wl
, wl
->set_bss_type
);
1655 set_bit(WL1271_FLAG_JOINED
, &wl
->flags
);
1661 static int wl1271_join(struct wl1271
*wl
, bool set_assoc
)
1666 * One of the side effects of the JOIN command is that is clears
1667 * WPA/WPA2 keys from the chipset. Performing a JOIN while associated
1668 * to a WPA/WPA2 access point will therefore kill the data-path.
1669 * Currently the only valid scenario for JOIN during association
1670 * is on roaming, in which case we will also be given new keys.
1671 * Keep the below message for now, unless it starts bothering
1672 * users who really like to roam a lot :)
1674 if (test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
1675 wl1271_info("JOIN while associated.");
1678 set_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
);
1680 ret
= wl1271_cmd_join(wl
, wl
->set_bss_type
);
1684 set_bit(WL1271_FLAG_JOINED
, &wl
->flags
);
1686 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
1690 * The join command disable the keep-alive mode, shut down its process,
1691 * and also clear the template config, so we need to reset it all after
1692 * the join. The acx_aid starts the keep-alive process, and the order
1693 * of the commands below is relevant.
1695 ret
= wl1271_acx_keep_alive_mode(wl
, true);
1699 ret
= wl1271_acx_aid(wl
, wl
->aid
);
1703 ret
= wl1271_cmd_build_klv_null_data(wl
);
1707 ret
= wl1271_acx_keep_alive_config(wl
, CMD_TEMPL_KLV_IDX_NULL_DATA
,
1708 ACX_KEEP_ALIVE_TPL_VALID
);
1716 static int wl1271_unjoin(struct wl1271
*wl
)
1720 /* to stop listening to a channel, we disconnect */
1721 ret
= wl1271_cmd_disconnect(wl
);
1725 clear_bit(WL1271_FLAG_JOINED
, &wl
->flags
);
1726 memset(wl
->bssid
, 0, ETH_ALEN
);
1728 /* stop filtering packets based on bssid */
1729 wl1271_configure_filters(wl
, FIF_OTHER_BSS
);
1735 static void wl1271_set_band_rate(struct wl1271
*wl
)
1737 if (wl
->band
== IEEE80211_BAND_2GHZ
)
1738 wl
->basic_rate_set
= wl
->conf
.tx
.basic_rate
;
1740 wl
->basic_rate_set
= wl
->conf
.tx
.basic_rate_5
;
1743 static int wl1271_sta_handle_idle(struct wl1271
*wl
, bool idle
)
1748 if (test_bit(WL1271_FLAG_JOINED
, &wl
->flags
)) {
1749 ret
= wl1271_unjoin(wl
);
1753 wl
->rate_set
= wl1271_tx_min_rate_get(wl
);
1754 ret
= wl1271_acx_sta_rate_policies(wl
);
1757 ret
= wl1271_acx_keep_alive_config(
1758 wl
, CMD_TEMPL_KLV_IDX_NULL_DATA
,
1759 ACX_KEEP_ALIVE_TPL_INVALID
);
1762 set_bit(WL1271_FLAG_IDLE
, &wl
->flags
);
1764 /* increment the session counter */
1765 wl
->session_counter
++;
1766 if (wl
->session_counter
>= SESSION_COUNTER_MAX
)
1767 wl
->session_counter
= 0;
1768 ret
= wl1271_dummy_join(wl
);
1771 clear_bit(WL1271_FLAG_IDLE
, &wl
->flags
);
1778 static int wl1271_op_config(struct ieee80211_hw
*hw
, u32 changed
)
1780 struct wl1271
*wl
= hw
->priv
;
1781 struct ieee80211_conf
*conf
= &hw
->conf
;
1782 int channel
, ret
= 0;
1785 channel
= ieee80211_frequency_to_channel(conf
->channel
->center_freq
);
1787 wl1271_debug(DEBUG_MAC80211
, "mac80211 config ch %d psm %s power %d %s"
1790 conf
->flags
& IEEE80211_CONF_PS
? "on" : "off",
1792 conf
->flags
& IEEE80211_CONF_IDLE
? "idle" : "in use",
1796 * mac80211 will go to idle nearly immediately after transmitting some
1797 * frames, such as the deauth. To make sure those frames reach the air,
1798 * wait here until the TX queue is fully flushed.
1800 if ((changed
& IEEE80211_CONF_CHANGE_IDLE
) &&
1801 (conf
->flags
& IEEE80211_CONF_IDLE
))
1802 wl1271_tx_flush(wl
);
1804 mutex_lock(&wl
->mutex
);
1806 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
1807 /* we support configuring the channel and band while off */
1808 if ((changed
& IEEE80211_CONF_CHANGE_CHANNEL
)) {
1809 wl
->band
= conf
->channel
->band
;
1810 wl
->channel
= channel
;
1816 is_ap
= (wl
->bss_type
== BSS_TYPE_AP_BSS
);
1818 ret
= wl1271_ps_elp_wakeup(wl
);
1822 /* if the channel changes while joined, join again */
1823 if (changed
& IEEE80211_CONF_CHANGE_CHANNEL
&&
1824 ((wl
->band
!= conf
->channel
->band
) ||
1825 (wl
->channel
!= channel
))) {
1826 wl
->band
= conf
->channel
->band
;
1827 wl
->channel
= channel
;
1831 * FIXME: the mac80211 should really provide a fixed
1832 * rate to use here. for now, just use the smallest
1833 * possible rate for the band as a fixed rate for
1834 * association frames and other control messages.
1836 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
1837 wl1271_set_band_rate(wl
);
1839 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
1840 ret
= wl1271_acx_sta_rate_policies(wl
);
1842 wl1271_warning("rate policy for channel "
1845 if (test_bit(WL1271_FLAG_JOINED
, &wl
->flags
)) {
1846 ret
= wl1271_join(wl
, false);
1848 wl1271_warning("cmd join on channel "
1854 if (changed
& IEEE80211_CONF_CHANGE_IDLE
&& !is_ap
) {
1855 ret
= wl1271_sta_handle_idle(wl
,
1856 conf
->flags
& IEEE80211_CONF_IDLE
);
1858 wl1271_warning("idle mode change failed %d", ret
);
1862 * if mac80211 changes the PSM mode, make sure the mode is not
1863 * incorrectly changed after the pspoll failure active window.
1865 if (changed
& IEEE80211_CONF_CHANGE_PS
)
1866 clear_bit(WL1271_FLAG_PSPOLL_FAILURE
, &wl
->flags
);
1868 if (conf
->flags
& IEEE80211_CONF_PS
&&
1869 !test_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
)) {
1870 set_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
);
1873 * We enter PSM only if we're already associated.
1874 * If we're not, we'll enter it when joining an SSID,
1875 * through the bss_info_changed() hook.
1877 if (test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
)) {
1878 wl1271_debug(DEBUG_PSM
, "psm enabled");
1879 ret
= wl1271_ps_set_mode(wl
, STATION_POWER_SAVE_MODE
,
1880 wl
->basic_rate
, true);
1882 } else if (!(conf
->flags
& IEEE80211_CONF_PS
) &&
1883 test_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
)) {
1884 wl1271_debug(DEBUG_PSM
, "psm disabled");
1886 clear_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
);
1888 if (test_bit(WL1271_FLAG_PSM
, &wl
->flags
))
1889 ret
= wl1271_ps_set_mode(wl
, STATION_ACTIVE_MODE
,
1890 wl
->basic_rate
, true);
1893 if (conf
->power_level
!= wl
->power_level
) {
1894 ret
= wl1271_acx_tx_power(wl
, conf
->power_level
);
1898 wl
->power_level
= conf
->power_level
;
1902 wl1271_ps_elp_sleep(wl
);
1905 mutex_unlock(&wl
->mutex
);
1910 struct wl1271_filter_params
{
1913 u8 mc_list
[ACX_MC_ADDRESS_GROUP_MAX
][ETH_ALEN
];
1916 static u64
wl1271_op_prepare_multicast(struct ieee80211_hw
*hw
,
1917 struct netdev_hw_addr_list
*mc_list
)
1919 struct wl1271_filter_params
*fp
;
1920 struct netdev_hw_addr
*ha
;
1921 struct wl1271
*wl
= hw
->priv
;
1923 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
1926 fp
= kzalloc(sizeof(*fp
), GFP_ATOMIC
);
1928 wl1271_error("Out of memory setting filters.");
1932 /* update multicast filtering parameters */
1933 fp
->mc_list_length
= 0;
1934 if (netdev_hw_addr_list_count(mc_list
) > ACX_MC_ADDRESS_GROUP_MAX
) {
1935 fp
->enabled
= false;
1938 netdev_hw_addr_list_for_each(ha
, mc_list
) {
1939 memcpy(fp
->mc_list
[fp
->mc_list_length
],
1940 ha
->addr
, ETH_ALEN
);
1941 fp
->mc_list_length
++;
1945 return (u64
)(unsigned long)fp
;
1948 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
1951 FIF_BCN_PRBRESP_PROMISC | \
1955 static void wl1271_op_configure_filter(struct ieee80211_hw
*hw
,
1956 unsigned int changed
,
1957 unsigned int *total
, u64 multicast
)
1959 struct wl1271_filter_params
*fp
= (void *)(unsigned long)multicast
;
1960 struct wl1271
*wl
= hw
->priv
;
1963 wl1271_debug(DEBUG_MAC80211
, "mac80211 configure filter changed %x"
1964 " total %x", changed
, *total
);
1966 mutex_lock(&wl
->mutex
);
1968 *total
&= WL1271_SUPPORTED_FILTERS
;
1969 changed
&= WL1271_SUPPORTED_FILTERS
;
1971 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
1974 ret
= wl1271_ps_elp_wakeup(wl
);
1978 if (wl
->bss_type
!= BSS_TYPE_AP_BSS
) {
1979 if (*total
& FIF_ALLMULTI
)
1980 ret
= wl1271_acx_group_address_tbl(wl
, false, NULL
, 0);
1982 ret
= wl1271_acx_group_address_tbl(wl
, fp
->enabled
,
1984 fp
->mc_list_length
);
1989 /* determine, whether supported filter values have changed */
1993 /* configure filters */
1994 wl
->filters
= *total
;
1995 wl1271_configure_filters(wl
, 0);
1997 /* apply configured filters */
1998 ret
= wl1271_acx_rx_config(wl
, wl
->rx_config
, wl
->rx_filter
);
2003 wl1271_ps_elp_sleep(wl
);
2006 mutex_unlock(&wl
->mutex
);
2010 static int wl1271_record_ap_key(struct wl1271
*wl
, u8 id
, u8 key_type
,
2011 u8 key_size
, const u8
*key
, u8 hlid
, u32 tx_seq_32
,
2014 struct wl1271_ap_key
*ap_key
;
2017 wl1271_debug(DEBUG_CRYPT
, "record ap key id %d", (int)id
);
2019 if (key_size
> MAX_KEY_SIZE
)
2023 * Find next free entry in ap_keys. Also check we are not replacing
2026 for (i
= 0; i
< MAX_NUM_KEYS
; i
++) {
2027 if (wl
->recorded_ap_keys
[i
] == NULL
)
2030 if (wl
->recorded_ap_keys
[i
]->id
== id
) {
2031 wl1271_warning("trying to record key replacement");
2036 if (i
== MAX_NUM_KEYS
)
2039 ap_key
= kzalloc(sizeof(*ap_key
), GFP_KERNEL
);
2044 ap_key
->key_type
= key_type
;
2045 ap_key
->key_size
= key_size
;
2046 memcpy(ap_key
->key
, key
, key_size
);
2047 ap_key
->hlid
= hlid
;
2048 ap_key
->tx_seq_32
= tx_seq_32
;
2049 ap_key
->tx_seq_16
= tx_seq_16
;
2051 wl
->recorded_ap_keys
[i
] = ap_key
;
2055 static void wl1271_free_ap_keys(struct wl1271
*wl
)
2059 for (i
= 0; i
< MAX_NUM_KEYS
; i
++) {
2060 kfree(wl
->recorded_ap_keys
[i
]);
2061 wl
->recorded_ap_keys
[i
] = NULL
;
2065 static int wl1271_ap_init_hwenc(struct wl1271
*wl
)
2068 struct wl1271_ap_key
*key
;
2069 bool wep_key_added
= false;
2071 for (i
= 0; i
< MAX_NUM_KEYS
; i
++) {
2072 if (wl
->recorded_ap_keys
[i
] == NULL
)
2075 key
= wl
->recorded_ap_keys
[i
];
2076 ret
= wl1271_cmd_set_ap_key(wl
, KEY_ADD_OR_REPLACE
,
2077 key
->id
, key
->key_type
,
2078 key
->key_size
, key
->key
,
2079 key
->hlid
, key
->tx_seq_32
,
2084 if (key
->key_type
== KEY_WEP
)
2085 wep_key_added
= true;
2088 if (wep_key_added
) {
2089 ret
= wl1271_cmd_set_ap_default_wep_key(wl
, wl
->default_key
);
2095 wl1271_free_ap_keys(wl
);
2099 static int wl1271_set_key(struct wl1271
*wl
, u16 action
, u8 id
, u8 key_type
,
2100 u8 key_size
, const u8
*key
, u32 tx_seq_32
,
2101 u16 tx_seq_16
, struct ieee80211_sta
*sta
)
2104 bool is_ap
= (wl
->bss_type
== BSS_TYPE_AP_BSS
);
2107 struct wl1271_station
*wl_sta
;
2111 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
2112 hlid
= wl_sta
->hlid
;
2114 hlid
= WL1271_AP_BROADCAST_HLID
;
2117 if (!test_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
)) {
2119 * We do not support removing keys after AP shutdown.
2120 * Pretend we do to make mac80211 happy.
2122 if (action
!= KEY_ADD_OR_REPLACE
)
2125 ret
= wl1271_record_ap_key(wl
, id
,
2127 key
, hlid
, tx_seq_32
,
2130 ret
= wl1271_cmd_set_ap_key(wl
, action
,
2131 id
, key_type
, key_size
,
2132 key
, hlid
, tx_seq_32
,
2140 static const u8 bcast_addr
[ETH_ALEN
] = {
2141 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
2144 addr
= sta
? sta
->addr
: bcast_addr
;
2146 if (is_zero_ether_addr(addr
)) {
2147 /* We dont support TX only encryption */
2151 /* The wl1271 does not allow to remove unicast keys - they
2152 will be cleared automatically on next CMD_JOIN. Ignore the
2153 request silently, as we dont want the mac80211 to emit
2154 an error message. */
2155 if (action
== KEY_REMOVE
&& !is_broadcast_ether_addr(addr
))
2158 ret
= wl1271_cmd_set_sta_key(wl
, action
,
2159 id
, key_type
, key_size
,
2160 key
, addr
, tx_seq_32
,
2165 /* the default WEP key needs to be configured at least once */
2166 if (key_type
== KEY_WEP
) {
2167 ret
= wl1271_cmd_set_sta_default_wep_key(wl
,
2177 static int wl1271_op_set_key(struct ieee80211_hw
*hw
, enum set_key_cmd cmd
,
2178 struct ieee80211_vif
*vif
,
2179 struct ieee80211_sta
*sta
,
2180 struct ieee80211_key_conf
*key_conf
)
2182 struct wl1271
*wl
= hw
->priv
;
2188 wl1271_debug(DEBUG_MAC80211
, "mac80211 set key");
2190 wl1271_debug(DEBUG_CRYPT
, "CMD: 0x%x sta: %p", cmd
, sta
);
2191 wl1271_debug(DEBUG_CRYPT
, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
2192 key_conf
->cipher
, key_conf
->keyidx
,
2193 key_conf
->keylen
, key_conf
->flags
);
2194 wl1271_dump(DEBUG_CRYPT
, "KEY: ", key_conf
->key
, key_conf
->keylen
);
2196 mutex_lock(&wl
->mutex
);
2198 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
2203 ret
= wl1271_ps_elp_wakeup(wl
);
2207 switch (key_conf
->cipher
) {
2208 case WLAN_CIPHER_SUITE_WEP40
:
2209 case WLAN_CIPHER_SUITE_WEP104
:
2212 key_conf
->hw_key_idx
= key_conf
->keyidx
;
2214 case WLAN_CIPHER_SUITE_TKIP
:
2215 key_type
= KEY_TKIP
;
2217 key_conf
->hw_key_idx
= key_conf
->keyidx
;
2218 tx_seq_32
= WL1271_TX_SECURITY_HI32(wl
->tx_security_seq
);
2219 tx_seq_16
= WL1271_TX_SECURITY_LO16(wl
->tx_security_seq
);
2221 case WLAN_CIPHER_SUITE_CCMP
:
2224 key_conf
->flags
|= IEEE80211_KEY_FLAG_GENERATE_IV
;
2225 tx_seq_32
= WL1271_TX_SECURITY_HI32(wl
->tx_security_seq
);
2226 tx_seq_16
= WL1271_TX_SECURITY_LO16(wl
->tx_security_seq
);
2228 case WL1271_CIPHER_SUITE_GEM
:
2230 tx_seq_32
= WL1271_TX_SECURITY_HI32(wl
->tx_security_seq
);
2231 tx_seq_16
= WL1271_TX_SECURITY_LO16(wl
->tx_security_seq
);
2234 wl1271_error("Unknown key algo 0x%x", key_conf
->cipher
);
2242 ret
= wl1271_set_key(wl
, KEY_ADD_OR_REPLACE
,
2243 key_conf
->keyidx
, key_type
,
2244 key_conf
->keylen
, key_conf
->key
,
2245 tx_seq_32
, tx_seq_16
, sta
);
2247 wl1271_error("Could not add or replace key");
2253 ret
= wl1271_set_key(wl
, KEY_REMOVE
,
2254 key_conf
->keyidx
, key_type
,
2255 key_conf
->keylen
, key_conf
->key
,
2258 wl1271_error("Could not remove key");
2264 wl1271_error("Unsupported key cmd 0x%x", cmd
);
2270 wl1271_ps_elp_sleep(wl
);
2273 mutex_unlock(&wl
->mutex
);
2278 static int wl1271_op_hw_scan(struct ieee80211_hw
*hw
,
2279 struct ieee80211_vif
*vif
,
2280 struct cfg80211_scan_request
*req
)
2282 struct wl1271
*wl
= hw
->priv
;
2287 wl1271_debug(DEBUG_MAC80211
, "mac80211 hw scan");
2290 ssid
= req
->ssids
[0].ssid
;
2291 len
= req
->ssids
[0].ssid_len
;
2294 mutex_lock(&wl
->mutex
);
2296 if (wl
->state
== WL1271_STATE_OFF
) {
2298 * We cannot return -EBUSY here because cfg80211 will expect
2299 * a call to ieee80211_scan_completed if we do - in this case
2300 * there won't be any call.
2306 ret
= wl1271_ps_elp_wakeup(wl
);
2310 ret
= wl1271_scan(hw
->priv
, ssid
, len
, req
);
2312 wl1271_ps_elp_sleep(wl
);
2315 mutex_unlock(&wl
->mutex
);
2320 static int wl1271_op_set_frag_threshold(struct ieee80211_hw
*hw
, u32 value
)
2322 struct wl1271
*wl
= hw
->priv
;
2325 mutex_lock(&wl
->mutex
);
2327 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
2332 ret
= wl1271_ps_elp_wakeup(wl
);
2336 ret
= wl1271_acx_frag_threshold(wl
, value
);
2338 wl1271_warning("wl1271_op_set_frag_threshold failed: %d", ret
);
2340 wl1271_ps_elp_sleep(wl
);
2343 mutex_unlock(&wl
->mutex
);
2348 static int wl1271_op_set_rts_threshold(struct ieee80211_hw
*hw
, u32 value
)
2350 struct wl1271
*wl
= hw
->priv
;
2353 mutex_lock(&wl
->mutex
);
2355 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
2360 ret
= wl1271_ps_elp_wakeup(wl
);
2364 ret
= wl1271_acx_rts_threshold(wl
, value
);
2366 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret
);
2368 wl1271_ps_elp_sleep(wl
);
2371 mutex_unlock(&wl
->mutex
);
2376 static int wl1271_ssid_set(struct wl1271
*wl
, struct sk_buff
*skb
,
2379 u8
*ptr
= skb
->data
+ offset
;
2381 /* find the location of the ssid in the beacon */
2382 while (ptr
< skb
->data
+ skb
->len
) {
2383 if (ptr
[0] == WLAN_EID_SSID
) {
2384 wl
->ssid_len
= ptr
[1];
2385 memcpy(wl
->ssid
, ptr
+2, wl
->ssid_len
);
2388 ptr
+= (ptr
[1] + 2);
2391 wl1271_error("No SSID in IEs!\n");
2395 static int wl1271_bss_erp_info_changed(struct wl1271
*wl
,
2396 struct ieee80211_bss_conf
*bss_conf
,
2401 if (changed
& BSS_CHANGED_ERP_SLOT
) {
2402 if (bss_conf
->use_short_slot
)
2403 ret
= wl1271_acx_slot(wl
, SLOT_TIME_SHORT
);
2405 ret
= wl1271_acx_slot(wl
, SLOT_TIME_LONG
);
2407 wl1271_warning("Set slot time failed %d", ret
);
2412 if (changed
& BSS_CHANGED_ERP_PREAMBLE
) {
2413 if (bss_conf
->use_short_preamble
)
2414 wl1271_acx_set_preamble(wl
, ACX_PREAMBLE_SHORT
);
2416 wl1271_acx_set_preamble(wl
, ACX_PREAMBLE_LONG
);
2419 if (changed
& BSS_CHANGED_ERP_CTS_PROT
) {
2420 if (bss_conf
->use_cts_prot
)
2421 ret
= wl1271_acx_cts_protect(wl
, CTSPROTECT_ENABLE
);
2423 ret
= wl1271_acx_cts_protect(wl
, CTSPROTECT_DISABLE
);
2425 wl1271_warning("Set ctsprotect failed %d", ret
);
2434 static int wl1271_bss_beacon_info_changed(struct wl1271
*wl
,
2435 struct ieee80211_vif
*vif
,
2436 struct ieee80211_bss_conf
*bss_conf
,
2439 bool is_ap
= (wl
->bss_type
== BSS_TYPE_AP_BSS
);
2442 if ((changed
& BSS_CHANGED_BEACON_INT
)) {
2443 wl1271_debug(DEBUG_MASTER
, "beacon interval updated: %d",
2444 bss_conf
->beacon_int
);
2446 wl
->beacon_int
= bss_conf
->beacon_int
;
2449 if ((changed
& BSS_CHANGED_BEACON
)) {
2450 struct ieee80211_hdr
*hdr
;
2451 int ieoffset
= offsetof(struct ieee80211_mgmt
,
2453 struct sk_buff
*beacon
= ieee80211_beacon_get(wl
->hw
, vif
);
2459 wl1271_debug(DEBUG_MASTER
, "beacon updated");
2461 ret
= wl1271_ssid_set(wl
, beacon
, ieoffset
);
2463 dev_kfree_skb(beacon
);
2466 tmpl_id
= is_ap
? CMD_TEMPL_AP_BEACON
:
2468 ret
= wl1271_cmd_template_set(wl
, tmpl_id
,
2471 wl1271_tx_min_rate_get(wl
));
2473 dev_kfree_skb(beacon
);
2477 hdr
= (struct ieee80211_hdr
*) beacon
->data
;
2478 hdr
->frame_control
= cpu_to_le16(IEEE80211_FTYPE_MGMT
|
2479 IEEE80211_STYPE_PROBE_RESP
);
2481 tmpl_id
= is_ap
? CMD_TEMPL_AP_PROBE_RESPONSE
:
2482 CMD_TEMPL_PROBE_RESPONSE
;
2483 ret
= wl1271_cmd_template_set(wl
,
2487 wl1271_tx_min_rate_get(wl
));
2488 dev_kfree_skb(beacon
);
2497 /* AP mode changes */
2498 static void wl1271_bss_info_changed_ap(struct wl1271
*wl
,
2499 struct ieee80211_vif
*vif
,
2500 struct ieee80211_bss_conf
*bss_conf
,
2505 if ((changed
& BSS_CHANGED_BASIC_RATES
)) {
2506 u32 rates
= bss_conf
->basic_rates
;
2508 wl
->basic_rate_set
= wl1271_tx_enabled_rates_get(wl
, rates
);
2509 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
2511 ret
= wl1271_init_ap_rates(wl
);
2513 wl1271_error("AP rate policy change failed %d", ret
);
2517 ret
= wl1271_ap_init_templates(wl
);
2522 ret
= wl1271_bss_beacon_info_changed(wl
, vif
, bss_conf
, changed
);
2526 if ((changed
& BSS_CHANGED_BEACON_ENABLED
)) {
2527 if (bss_conf
->enable_beacon
) {
2528 if (!test_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
)) {
2529 ret
= wl1271_cmd_start_bss(wl
);
2533 set_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
);
2534 wl1271_debug(DEBUG_AP
, "started AP");
2536 ret
= wl1271_ap_init_hwenc(wl
);
2541 if (test_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
)) {
2542 ret
= wl1271_cmd_stop_bss(wl
);
2546 clear_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
);
2547 wl1271_debug(DEBUG_AP
, "stopped AP");
2552 if (changed
& BSS_CHANGED_IBSS
) {
2553 wl1271_debug(DEBUG_ADHOC
, "ibss_joined: %d",
2554 bss_conf
->ibss_joined
);
2556 if (bss_conf
->ibss_joined
) {
2557 u32 rates
= bss_conf
->basic_rates
;
2558 wl
->basic_rate_set
= wl1271_tx_enabled_rates_get(wl
,
2560 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
2562 /* by default, use 11b rates */
2563 wl
->rate_set
= CONF_TX_IBSS_DEFAULT_RATES
;
2564 ret
= wl1271_acx_sta_rate_policies(wl
);
2570 ret
= wl1271_bss_erp_info_changed(wl
, bss_conf
, changed
);
2577 /* STA/IBSS mode changes */
2578 static void wl1271_bss_info_changed_sta(struct wl1271
*wl
,
2579 struct ieee80211_vif
*vif
,
2580 struct ieee80211_bss_conf
*bss_conf
,
2583 bool do_join
= false, set_assoc
= false;
2584 bool is_ibss
= (wl
->bss_type
== BSS_TYPE_IBSS
);
2585 u32 sta_rate_set
= 0;
2587 struct ieee80211_sta
*sta
;
2588 bool sta_exists
= false;
2589 struct ieee80211_sta_ht_cap sta_ht_cap
;
2592 ret
= wl1271_bss_beacon_info_changed(wl
, vif
, bss_conf
,
2598 if ((changed
& BSS_CHANGED_BEACON_INT
) && is_ibss
)
2601 /* Need to update the SSID (for filtering etc) */
2602 if ((changed
& BSS_CHANGED_BEACON
) && is_ibss
)
2605 if ((changed
& BSS_CHANGED_BEACON_ENABLED
) && is_ibss
) {
2606 wl1271_debug(DEBUG_ADHOC
, "ad-hoc beaconing: %s",
2607 bss_conf
->enable_beacon
? "enabled" : "disabled");
2609 if (bss_conf
->enable_beacon
)
2610 wl
->set_bss_type
= BSS_TYPE_IBSS
;
2612 wl
->set_bss_type
= BSS_TYPE_STA_BSS
;
2616 if ((changed
& BSS_CHANGED_CQM
)) {
2617 bool enable
= false;
2618 if (bss_conf
->cqm_rssi_thold
)
2620 ret
= wl1271_acx_rssi_snr_trigger(wl
, enable
,
2621 bss_conf
->cqm_rssi_thold
,
2622 bss_conf
->cqm_rssi_hyst
);
2625 wl
->rssi_thold
= bss_conf
->cqm_rssi_thold
;
2628 if ((changed
& BSS_CHANGED_BSSID
) &&
2630 * Now we know the correct bssid, so we send a new join command
2631 * and enable the BSSID filter
2633 memcmp(wl
->bssid
, bss_conf
->bssid
, ETH_ALEN
)) {
2634 memcpy(wl
->bssid
, bss_conf
->bssid
, ETH_ALEN
);
2636 if (!is_zero_ether_addr(wl
->bssid
)) {
2637 ret
= wl1271_cmd_build_null_data(wl
);
2641 ret
= wl1271_build_qos_null_data(wl
);
2645 /* filter out all packets not from this BSSID */
2646 wl1271_configure_filters(wl
, 0);
2648 /* Need to update the BSSID (for filtering etc) */
2654 sta
= ieee80211_find_sta(vif
, bss_conf
->bssid
);
2656 /* save the supp_rates of the ap */
2657 sta_rate_set
= sta
->supp_rates
[wl
->hw
->conf
.channel
->band
];
2658 if (sta
->ht_cap
.ht_supported
)
2660 (sta
->ht_cap
.mcs
.rx_mask
[0] << HW_HT_RATES_OFFSET
);
2661 sta_ht_cap
= sta
->ht_cap
;
2667 /* handle new association with HT and HT information change */
2668 if ((changed
& BSS_CHANGED_HT
) &&
2669 (bss_conf
->channel_type
!= NL80211_CHAN_NO_HT
)) {
2670 ret
= wl1271_acx_set_ht_capabilities(wl
, &sta_ht_cap
,
2673 wl1271_warning("Set ht cap true failed %d",
2677 ret
= wl1271_acx_set_ht_information(wl
,
2678 bss_conf
->ht_operation_mode
);
2680 wl1271_warning("Set ht information failed %d",
2685 /* handle new association without HT and disassociation */
2686 else if (changed
& BSS_CHANGED_ASSOC
) {
2687 ret
= wl1271_acx_set_ht_capabilities(wl
, &sta_ht_cap
,
2690 wl1271_warning("Set ht cap false failed %d",
2697 if ((changed
& BSS_CHANGED_ASSOC
)) {
2698 if (bss_conf
->assoc
) {
2701 wl
->aid
= bss_conf
->aid
;
2704 wl
->ps_poll_failures
= 0;
2707 * use basic rates from AP, and determine lowest rate
2708 * to use with control frames.
2710 rates
= bss_conf
->basic_rates
;
2711 wl
->basic_rate_set
= wl1271_tx_enabled_rates_get(wl
,
2713 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
2715 wl
->rate_set
= wl1271_tx_enabled_rates_get(wl
,
2717 ret
= wl1271_acx_sta_rate_policies(wl
);
2722 * with wl1271, we don't need to update the
2723 * beacon_int and dtim_period, because the firmware
2724 * updates it by itself when the first beacon is
2725 * received after a join.
2727 ret
= wl1271_cmd_build_ps_poll(wl
, wl
->aid
);
2732 * Get a template for hardware connection maintenance
2734 dev_kfree_skb(wl
->probereq
);
2735 wl
->probereq
= wl1271_cmd_build_ap_probe_req(wl
, NULL
);
2736 ieoffset
= offsetof(struct ieee80211_mgmt
,
2737 u
.probe_req
.variable
);
2738 wl1271_ssid_set(wl
, wl
->probereq
, ieoffset
);
2740 /* enable the connection monitoring feature */
2741 ret
= wl1271_acx_conn_monit_params(wl
, true);
2745 /* If we want to go in PSM but we're not there yet */
2746 if (test_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
) &&
2747 !test_bit(WL1271_FLAG_PSM
, &wl
->flags
)) {
2748 enum wl1271_cmd_ps_mode mode
;
2750 mode
= STATION_POWER_SAVE_MODE
;
2751 ret
= wl1271_ps_set_mode(wl
, mode
,
2758 /* use defaults when not associated */
2760 !!test_and_clear_bit(WL1271_FLAG_STA_ASSOCIATED
,
2762 clear_bit(WL1271_FLAG_STA_STATE_SENT
, &wl
->flags
);
2765 /* free probe-request template */
2766 dev_kfree_skb(wl
->probereq
);
2767 wl
->probereq
= NULL
;
2769 /* re-enable dynamic ps - just in case */
2770 ieee80211_enable_dyn_ps(wl
->vif
);
2772 /* revert back to minimum rates for the current band */
2773 wl1271_set_band_rate(wl
);
2774 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
2775 ret
= wl1271_acx_sta_rate_policies(wl
);
2779 /* disable connection monitor features */
2780 ret
= wl1271_acx_conn_monit_params(wl
, false);
2782 /* Disable the keep-alive feature */
2783 ret
= wl1271_acx_keep_alive_mode(wl
, false);
2787 /* restore the bssid filter and go to dummy bssid */
2790 wl1271_dummy_join(wl
);
2795 ret
= wl1271_bss_erp_info_changed(wl
, bss_conf
, changed
);
2799 if (changed
& BSS_CHANGED_ARP_FILTER
) {
2800 __be32 addr
= bss_conf
->arp_addr_list
[0];
2801 WARN_ON(wl
->bss_type
!= BSS_TYPE_STA_BSS
);
2803 if (bss_conf
->arp_addr_cnt
== 1 &&
2804 bss_conf
->arp_filter_enabled
) {
2806 * The template should have been configured only upon
2807 * association. however, it seems that the correct ip
2808 * isn't being set (when sending), so we have to
2809 * reconfigure the template upon every ip change.
2811 ret
= wl1271_cmd_build_arp_rsp(wl
, addr
);
2813 wl1271_warning("build arp rsp failed: %d", ret
);
2817 ret
= wl1271_acx_arp_ip_filter(wl
,
2818 ACX_ARP_FILTER_ARP_FILTERING
,
2821 ret
= wl1271_acx_arp_ip_filter(wl
, 0, addr
);
2828 ret
= wl1271_join(wl
, set_assoc
);
2830 wl1271_warning("cmd join failed %d", ret
);
2839 static void wl1271_op_bss_info_changed(struct ieee80211_hw
*hw
,
2840 struct ieee80211_vif
*vif
,
2841 struct ieee80211_bss_conf
*bss_conf
,
2844 struct wl1271
*wl
= hw
->priv
;
2845 bool is_ap
= (wl
->bss_type
== BSS_TYPE_AP_BSS
);
2848 wl1271_debug(DEBUG_MAC80211
, "mac80211 bss info changed 0x%x",
2851 mutex_lock(&wl
->mutex
);
2853 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
2856 ret
= wl1271_ps_elp_wakeup(wl
);
2861 wl1271_bss_info_changed_ap(wl
, vif
, bss_conf
, changed
);
2863 wl1271_bss_info_changed_sta(wl
, vif
, bss_conf
, changed
);
2865 wl1271_ps_elp_sleep(wl
);
2868 mutex_unlock(&wl
->mutex
);
2871 static int wl1271_op_conf_tx(struct ieee80211_hw
*hw
, u16 queue
,
2872 const struct ieee80211_tx_queue_params
*params
)
2874 struct wl1271
*wl
= hw
->priv
;
2878 mutex_lock(&wl
->mutex
);
2880 wl1271_debug(DEBUG_MAC80211
, "mac80211 conf tx %d", queue
);
2883 ps_scheme
= CONF_PS_SCHEME_UPSD_TRIGGER
;
2885 ps_scheme
= CONF_PS_SCHEME_LEGACY
;
2887 if (wl
->state
== WL1271_STATE_OFF
) {
2889 * If the state is off, the parameters will be recorded and
2890 * configured on init. This happens in AP-mode.
2892 struct conf_tx_ac_category
*conf_ac
=
2893 &wl
->conf
.tx
.ac_conf
[wl1271_tx_get_queue(queue
)];
2894 struct conf_tx_tid
*conf_tid
=
2895 &wl
->conf
.tx
.tid_conf
[wl1271_tx_get_queue(queue
)];
2897 conf_ac
->ac
= wl1271_tx_get_queue(queue
);
2898 conf_ac
->cw_min
= (u8
)params
->cw_min
;
2899 conf_ac
->cw_max
= params
->cw_max
;
2900 conf_ac
->aifsn
= params
->aifs
;
2901 conf_ac
->tx_op_limit
= params
->txop
<< 5;
2903 conf_tid
->queue_id
= wl1271_tx_get_queue(queue
);
2904 conf_tid
->channel_type
= CONF_CHANNEL_TYPE_EDCF
;
2905 conf_tid
->tsid
= wl1271_tx_get_queue(queue
);
2906 conf_tid
->ps_scheme
= ps_scheme
;
2907 conf_tid
->ack_policy
= CONF_ACK_POLICY_LEGACY
;
2908 conf_tid
->apsd_conf
[0] = 0;
2909 conf_tid
->apsd_conf
[1] = 0;
2913 ret
= wl1271_ps_elp_wakeup(wl
);
2918 * the txop is confed in units of 32us by the mac80211,
2921 ret
= wl1271_acx_ac_cfg(wl
, wl1271_tx_get_queue(queue
),
2922 params
->cw_min
, params
->cw_max
,
2923 params
->aifs
, params
->txop
<< 5);
2927 ret
= wl1271_acx_tid_cfg(wl
, wl1271_tx_get_queue(queue
),
2928 CONF_CHANNEL_TYPE_EDCF
,
2929 wl1271_tx_get_queue(queue
),
2930 ps_scheme
, CONF_ACK_POLICY_LEGACY
,
2934 wl1271_ps_elp_sleep(wl
);
2937 mutex_unlock(&wl
->mutex
);
2942 static u64
wl1271_op_get_tsf(struct ieee80211_hw
*hw
)
2945 struct wl1271
*wl
= hw
->priv
;
2946 u64 mactime
= ULLONG_MAX
;
2949 wl1271_debug(DEBUG_MAC80211
, "mac80211 get tsf");
2951 mutex_lock(&wl
->mutex
);
2953 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
2956 ret
= wl1271_ps_elp_wakeup(wl
);
2960 ret
= wl1271_acx_tsf_info(wl
, &mactime
);
2965 wl1271_ps_elp_sleep(wl
);
2968 mutex_unlock(&wl
->mutex
);
2972 static int wl1271_op_get_survey(struct ieee80211_hw
*hw
, int idx
,
2973 struct survey_info
*survey
)
2975 struct wl1271
*wl
= hw
->priv
;
2976 struct ieee80211_conf
*conf
= &hw
->conf
;
2981 survey
->channel
= conf
->channel
;
2982 survey
->filled
= SURVEY_INFO_NOISE_DBM
;
2983 survey
->noise
= wl
->noise
;
2988 static int wl1271_allocate_sta(struct wl1271
*wl
,
2989 struct ieee80211_sta
*sta
,
2992 struct wl1271_station
*wl_sta
;
2995 id
= find_first_zero_bit(wl
->ap_hlid_map
, AP_MAX_STATIONS
);
2996 if (id
>= AP_MAX_STATIONS
) {
2997 wl1271_warning("could not allocate HLID - too much stations");
3001 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
3002 __set_bit(id
, wl
->ap_hlid_map
);
3003 wl_sta
->hlid
= WL1271_AP_STA_HLID_START
+ id
;
3004 *hlid
= wl_sta
->hlid
;
3005 memcpy(wl
->links
[wl_sta
->hlid
].addr
, sta
->addr
, ETH_ALEN
);
3009 static void wl1271_free_sta(struct wl1271
*wl
, u8 hlid
)
3011 int id
= hlid
- WL1271_AP_STA_HLID_START
;
3013 if (WARN_ON(!test_bit(id
, wl
->ap_hlid_map
)))
3016 __clear_bit(id
, wl
->ap_hlid_map
);
3017 memset(wl
->links
[hlid
].addr
, 0, ETH_ALEN
);
3018 wl1271_tx_reset_link_queues(wl
, hlid
);
3019 __clear_bit(hlid
, &wl
->ap_ps_map
);
3020 __clear_bit(hlid
, (unsigned long *)&wl
->ap_fw_ps_map
);
3023 static int wl1271_op_sta_add(struct ieee80211_hw
*hw
,
3024 struct ieee80211_vif
*vif
,
3025 struct ieee80211_sta
*sta
)
3027 struct wl1271
*wl
= hw
->priv
;
3031 mutex_lock(&wl
->mutex
);
3033 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
3036 if (wl
->bss_type
!= BSS_TYPE_AP_BSS
)
3039 wl1271_debug(DEBUG_MAC80211
, "mac80211 add sta %d", (int)sta
->aid
);
3041 ret
= wl1271_allocate_sta(wl
, sta
, &hlid
);
3045 ret
= wl1271_ps_elp_wakeup(wl
);
3049 ret
= wl1271_cmd_add_sta(wl
, sta
, hlid
);
3054 wl1271_ps_elp_sleep(wl
);
3058 wl1271_free_sta(wl
, hlid
);
3061 mutex_unlock(&wl
->mutex
);
3065 static int wl1271_op_sta_remove(struct ieee80211_hw
*hw
,
3066 struct ieee80211_vif
*vif
,
3067 struct ieee80211_sta
*sta
)
3069 struct wl1271
*wl
= hw
->priv
;
3070 struct wl1271_station
*wl_sta
;
3073 mutex_lock(&wl
->mutex
);
3075 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
3078 if (wl
->bss_type
!= BSS_TYPE_AP_BSS
)
3081 wl1271_debug(DEBUG_MAC80211
, "mac80211 remove sta %d", (int)sta
->aid
);
3083 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
3084 id
= wl_sta
->hlid
- WL1271_AP_STA_HLID_START
;
3085 if (WARN_ON(!test_bit(id
, wl
->ap_hlid_map
)))
3088 ret
= wl1271_ps_elp_wakeup(wl
);
3092 ret
= wl1271_cmd_remove_sta(wl
, wl_sta
->hlid
);
3096 wl1271_free_sta(wl
, wl_sta
->hlid
);
3099 wl1271_ps_elp_sleep(wl
);
3102 mutex_unlock(&wl
->mutex
);
3106 static int wl1271_op_ampdu_action(struct ieee80211_hw
*hw
,
3107 struct ieee80211_vif
*vif
,
3108 enum ieee80211_ampdu_mlme_action action
,
3109 struct ieee80211_sta
*sta
, u16 tid
, u16
*ssn
,
3112 struct wl1271
*wl
= hw
->priv
;
3115 mutex_lock(&wl
->mutex
);
3117 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
3122 ret
= wl1271_ps_elp_wakeup(wl
);
3127 case IEEE80211_AMPDU_RX_START
:
3128 if (wl
->ba_support
) {
3129 ret
= wl1271_acx_set_ba_receiver_session(wl
, tid
, *ssn
,
3132 wl
->ba_rx_bitmap
|= BIT(tid
);
3138 case IEEE80211_AMPDU_RX_STOP
:
3139 ret
= wl1271_acx_set_ba_receiver_session(wl
, tid
, 0, false);
3141 wl
->ba_rx_bitmap
&= ~BIT(tid
);
3145 * The BA initiator session management in FW independently.
3146 * Falling break here on purpose for all TX APDU commands.
3148 case IEEE80211_AMPDU_TX_START
:
3149 case IEEE80211_AMPDU_TX_STOP
:
3150 case IEEE80211_AMPDU_TX_OPERATIONAL
:
3155 wl1271_error("Incorrect ampdu action id=%x\n", action
);
3159 wl1271_ps_elp_sleep(wl
);
3162 mutex_unlock(&wl
->mutex
);
3167 static bool wl1271_tx_frames_pending(struct ieee80211_hw
*hw
)
3169 struct wl1271
*wl
= hw
->priv
;
3172 mutex_lock(&wl
->mutex
);
3174 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
3177 /* packets are considered pending if in the TX queue or the FW */
3178 ret
= (wl
->tx_queue_count
> 0) || (wl
->tx_frames_cnt
> 0);
3180 /* the above is appropriate for STA mode for PS purposes */
3181 WARN_ON(wl
->bss_type
!= BSS_TYPE_STA_BSS
);
3184 mutex_unlock(&wl
->mutex
);
3189 /* can't be const, mac80211 writes to this */
3190 static struct ieee80211_rate wl1271_rates
[] = {
3192 .hw_value
= CONF_HW_BIT_RATE_1MBPS
,
3193 .hw_value_short
= CONF_HW_BIT_RATE_1MBPS
, },
3195 .hw_value
= CONF_HW_BIT_RATE_2MBPS
,
3196 .hw_value_short
= CONF_HW_BIT_RATE_2MBPS
,
3197 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
3199 .hw_value
= CONF_HW_BIT_RATE_5_5MBPS
,
3200 .hw_value_short
= CONF_HW_BIT_RATE_5_5MBPS
,
3201 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
3203 .hw_value
= CONF_HW_BIT_RATE_11MBPS
,
3204 .hw_value_short
= CONF_HW_BIT_RATE_11MBPS
,
3205 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
3207 .hw_value
= CONF_HW_BIT_RATE_6MBPS
,
3208 .hw_value_short
= CONF_HW_BIT_RATE_6MBPS
, },
3210 .hw_value
= CONF_HW_BIT_RATE_9MBPS
,
3211 .hw_value_short
= CONF_HW_BIT_RATE_9MBPS
, },
3213 .hw_value
= CONF_HW_BIT_RATE_12MBPS
,
3214 .hw_value_short
= CONF_HW_BIT_RATE_12MBPS
, },
3216 .hw_value
= CONF_HW_BIT_RATE_18MBPS
,
3217 .hw_value_short
= CONF_HW_BIT_RATE_18MBPS
, },
3219 .hw_value
= CONF_HW_BIT_RATE_24MBPS
,
3220 .hw_value_short
= CONF_HW_BIT_RATE_24MBPS
, },
3222 .hw_value
= CONF_HW_BIT_RATE_36MBPS
,
3223 .hw_value_short
= CONF_HW_BIT_RATE_36MBPS
, },
3225 .hw_value
= CONF_HW_BIT_RATE_48MBPS
,
3226 .hw_value_short
= CONF_HW_BIT_RATE_48MBPS
, },
3228 .hw_value
= CONF_HW_BIT_RATE_54MBPS
,
3229 .hw_value_short
= CONF_HW_BIT_RATE_54MBPS
, },
3232 /* can't be const, mac80211 writes to this */
3233 static struct ieee80211_channel wl1271_channels
[] = {
3234 { .hw_value
= 1, .center_freq
= 2412, .max_power
= 25 },
3235 { .hw_value
= 2, .center_freq
= 2417, .max_power
= 25 },
3236 { .hw_value
= 3, .center_freq
= 2422, .max_power
= 25 },
3237 { .hw_value
= 4, .center_freq
= 2427, .max_power
= 25 },
3238 { .hw_value
= 5, .center_freq
= 2432, .max_power
= 25 },
3239 { .hw_value
= 6, .center_freq
= 2437, .max_power
= 25 },
3240 { .hw_value
= 7, .center_freq
= 2442, .max_power
= 25 },
3241 { .hw_value
= 8, .center_freq
= 2447, .max_power
= 25 },
3242 { .hw_value
= 9, .center_freq
= 2452, .max_power
= 25 },
3243 { .hw_value
= 10, .center_freq
= 2457, .max_power
= 25 },
3244 { .hw_value
= 11, .center_freq
= 2462, .max_power
= 25 },
3245 { .hw_value
= 12, .center_freq
= 2467, .max_power
= 25 },
3246 { .hw_value
= 13, .center_freq
= 2472, .max_power
= 25 },
3247 { .hw_value
= 14, .center_freq
= 2484, .max_power
= 25 },
3250 /* mapping to indexes for wl1271_rates */
3251 static const u8 wl1271_rate_to_idx_2ghz
[] = {
3252 /* MCS rates are used only with 11n */
3253 7, /* CONF_HW_RXTX_RATE_MCS7 */
3254 6, /* CONF_HW_RXTX_RATE_MCS6 */
3255 5, /* CONF_HW_RXTX_RATE_MCS5 */
3256 4, /* CONF_HW_RXTX_RATE_MCS4 */
3257 3, /* CONF_HW_RXTX_RATE_MCS3 */
3258 2, /* CONF_HW_RXTX_RATE_MCS2 */
3259 1, /* CONF_HW_RXTX_RATE_MCS1 */
3260 0, /* CONF_HW_RXTX_RATE_MCS0 */
3262 11, /* CONF_HW_RXTX_RATE_54 */
3263 10, /* CONF_HW_RXTX_RATE_48 */
3264 9, /* CONF_HW_RXTX_RATE_36 */
3265 8, /* CONF_HW_RXTX_RATE_24 */
3267 /* TI-specific rate */
3268 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_22 */
3270 7, /* CONF_HW_RXTX_RATE_18 */
3271 6, /* CONF_HW_RXTX_RATE_12 */
3272 3, /* CONF_HW_RXTX_RATE_11 */
3273 5, /* CONF_HW_RXTX_RATE_9 */
3274 4, /* CONF_HW_RXTX_RATE_6 */
3275 2, /* CONF_HW_RXTX_RATE_5_5 */
3276 1, /* CONF_HW_RXTX_RATE_2 */
3277 0 /* CONF_HW_RXTX_RATE_1 */
3280 /* 11n STA capabilities */
3281 #define HW_RX_HIGHEST_RATE 72
3283 #ifdef CONFIG_WL12XX_HT
3284 #define WL12XX_HT_CAP { \
3285 .cap = IEEE80211_HT_CAP_GRN_FLD | IEEE80211_HT_CAP_SGI_20 | \
3286 (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT), \
3287 .ht_supported = true, \
3288 .ampdu_factor = IEEE80211_HT_MAX_AMPDU_8K, \
3289 .ampdu_density = IEEE80211_HT_MPDU_DENSITY_8, \
3291 .rx_mask = { 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, \
3292 .rx_highest = cpu_to_le16(HW_RX_HIGHEST_RATE), \
3293 .tx_params = IEEE80211_HT_MCS_TX_DEFINED, \
3297 #define WL12XX_HT_CAP { \
3298 .ht_supported = false, \
3302 /* can't be const, mac80211 writes to this */
3303 static struct ieee80211_supported_band wl1271_band_2ghz
= {
3304 .channels
= wl1271_channels
,
3305 .n_channels
= ARRAY_SIZE(wl1271_channels
),
3306 .bitrates
= wl1271_rates
,
3307 .n_bitrates
= ARRAY_SIZE(wl1271_rates
),
3308 .ht_cap
= WL12XX_HT_CAP
,
3311 /* 5 GHz data rates for WL1273 */
3312 static struct ieee80211_rate wl1271_rates_5ghz
[] = {
3314 .hw_value
= CONF_HW_BIT_RATE_6MBPS
,
3315 .hw_value_short
= CONF_HW_BIT_RATE_6MBPS
, },
3317 .hw_value
= CONF_HW_BIT_RATE_9MBPS
,
3318 .hw_value_short
= CONF_HW_BIT_RATE_9MBPS
, },
3320 .hw_value
= CONF_HW_BIT_RATE_12MBPS
,
3321 .hw_value_short
= CONF_HW_BIT_RATE_12MBPS
, },
3323 .hw_value
= CONF_HW_BIT_RATE_18MBPS
,
3324 .hw_value_short
= CONF_HW_BIT_RATE_18MBPS
, },
3326 .hw_value
= CONF_HW_BIT_RATE_24MBPS
,
3327 .hw_value_short
= CONF_HW_BIT_RATE_24MBPS
, },
3329 .hw_value
= CONF_HW_BIT_RATE_36MBPS
,
3330 .hw_value_short
= CONF_HW_BIT_RATE_36MBPS
, },
3332 .hw_value
= CONF_HW_BIT_RATE_48MBPS
,
3333 .hw_value_short
= CONF_HW_BIT_RATE_48MBPS
, },
3335 .hw_value
= CONF_HW_BIT_RATE_54MBPS
,
3336 .hw_value_short
= CONF_HW_BIT_RATE_54MBPS
, },
3339 /* 5 GHz band channels for WL1273 */
3340 static struct ieee80211_channel wl1271_channels_5ghz
[] = {
3341 { .hw_value
= 7, .center_freq
= 5035},
3342 { .hw_value
= 8, .center_freq
= 5040},
3343 { .hw_value
= 9, .center_freq
= 5045},
3344 { .hw_value
= 11, .center_freq
= 5055},
3345 { .hw_value
= 12, .center_freq
= 5060},
3346 { .hw_value
= 16, .center_freq
= 5080},
3347 { .hw_value
= 34, .center_freq
= 5170},
3348 { .hw_value
= 36, .center_freq
= 5180},
3349 { .hw_value
= 38, .center_freq
= 5190},
3350 { .hw_value
= 40, .center_freq
= 5200},
3351 { .hw_value
= 42, .center_freq
= 5210},
3352 { .hw_value
= 44, .center_freq
= 5220},
3353 { .hw_value
= 46, .center_freq
= 5230},
3354 { .hw_value
= 48, .center_freq
= 5240},
3355 { .hw_value
= 52, .center_freq
= 5260},
3356 { .hw_value
= 56, .center_freq
= 5280},
3357 { .hw_value
= 60, .center_freq
= 5300},
3358 { .hw_value
= 64, .center_freq
= 5320},
3359 { .hw_value
= 100, .center_freq
= 5500},
3360 { .hw_value
= 104, .center_freq
= 5520},
3361 { .hw_value
= 108, .center_freq
= 5540},
3362 { .hw_value
= 112, .center_freq
= 5560},
3363 { .hw_value
= 116, .center_freq
= 5580},
3364 { .hw_value
= 120, .center_freq
= 5600},
3365 { .hw_value
= 124, .center_freq
= 5620},
3366 { .hw_value
= 128, .center_freq
= 5640},
3367 { .hw_value
= 132, .center_freq
= 5660},
3368 { .hw_value
= 136, .center_freq
= 5680},
3369 { .hw_value
= 140, .center_freq
= 5700},
3370 { .hw_value
= 149, .center_freq
= 5745},
3371 { .hw_value
= 153, .center_freq
= 5765},
3372 { .hw_value
= 157, .center_freq
= 5785},
3373 { .hw_value
= 161, .center_freq
= 5805},
3374 { .hw_value
= 165, .center_freq
= 5825},
3377 /* mapping to indexes for wl1271_rates_5ghz */
3378 static const u8 wl1271_rate_to_idx_5ghz
[] = {
3379 /* MCS rates are used only with 11n */
3380 7, /* CONF_HW_RXTX_RATE_MCS7 */
3381 6, /* CONF_HW_RXTX_RATE_MCS6 */
3382 5, /* CONF_HW_RXTX_RATE_MCS5 */
3383 4, /* CONF_HW_RXTX_RATE_MCS4 */
3384 3, /* CONF_HW_RXTX_RATE_MCS3 */
3385 2, /* CONF_HW_RXTX_RATE_MCS2 */
3386 1, /* CONF_HW_RXTX_RATE_MCS1 */
3387 0, /* CONF_HW_RXTX_RATE_MCS0 */
3389 7, /* CONF_HW_RXTX_RATE_54 */
3390 6, /* CONF_HW_RXTX_RATE_48 */
3391 5, /* CONF_HW_RXTX_RATE_36 */
3392 4, /* CONF_HW_RXTX_RATE_24 */
3394 /* TI-specific rate */
3395 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_22 */
3397 3, /* CONF_HW_RXTX_RATE_18 */
3398 2, /* CONF_HW_RXTX_RATE_12 */
3399 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_11 */
3400 1, /* CONF_HW_RXTX_RATE_9 */
3401 0, /* CONF_HW_RXTX_RATE_6 */
3402 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_5_5 */
3403 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_2 */
3404 CONF_HW_RXTX_RATE_UNSUPPORTED
/* CONF_HW_RXTX_RATE_1 */
3407 static struct ieee80211_supported_band wl1271_band_5ghz
= {
3408 .channels
= wl1271_channels_5ghz
,
3409 .n_channels
= ARRAY_SIZE(wl1271_channels_5ghz
),
3410 .bitrates
= wl1271_rates_5ghz
,
3411 .n_bitrates
= ARRAY_SIZE(wl1271_rates_5ghz
),
3412 .ht_cap
= WL12XX_HT_CAP
,
3415 static const u8
*wl1271_band_rate_to_idx
[] = {
3416 [IEEE80211_BAND_2GHZ
] = wl1271_rate_to_idx_2ghz
,
3417 [IEEE80211_BAND_5GHZ
] = wl1271_rate_to_idx_5ghz
3420 static const struct ieee80211_ops wl1271_ops
= {
3421 .start
= wl1271_op_start
,
3422 .stop
= wl1271_op_stop
,
3423 .add_interface
= wl1271_op_add_interface
,
3424 .remove_interface
= wl1271_op_remove_interface
,
3425 .config
= wl1271_op_config
,
3426 .prepare_multicast
= wl1271_op_prepare_multicast
,
3427 .configure_filter
= wl1271_op_configure_filter
,
3429 .set_key
= wl1271_op_set_key
,
3430 .hw_scan
= wl1271_op_hw_scan
,
3431 .bss_info_changed
= wl1271_op_bss_info_changed
,
3432 .set_frag_threshold
= wl1271_op_set_frag_threshold
,
3433 .set_rts_threshold
= wl1271_op_set_rts_threshold
,
3434 .conf_tx
= wl1271_op_conf_tx
,
3435 .get_tsf
= wl1271_op_get_tsf
,
3436 .get_survey
= wl1271_op_get_survey
,
3437 .sta_add
= wl1271_op_sta_add
,
3438 .sta_remove
= wl1271_op_sta_remove
,
3439 .ampdu_action
= wl1271_op_ampdu_action
,
3440 .tx_frames_pending
= wl1271_tx_frames_pending
,
3441 CFG80211_TESTMODE_CMD(wl1271_tm_cmd
)
3445 u8
wl1271_rate_to_idx(int rate
, enum ieee80211_band band
)
3449 BUG_ON(band
>= sizeof(wl1271_band_rate_to_idx
)/sizeof(u8
*));
3451 if (unlikely(rate
>= CONF_HW_RXTX_RATE_MAX
)) {
3452 wl1271_error("Illegal RX rate from HW: %d", rate
);
3456 idx
= wl1271_band_rate_to_idx
[band
][rate
];
3457 if (unlikely(idx
== CONF_HW_RXTX_RATE_UNSUPPORTED
)) {
3458 wl1271_error("Unsupported RX rate from HW: %d", rate
);
3465 static ssize_t
wl1271_sysfs_show_bt_coex_state(struct device
*dev
,
3466 struct device_attribute
*attr
,
3469 struct wl1271
*wl
= dev_get_drvdata(dev
);
3474 mutex_lock(&wl
->mutex
);
3475 len
= snprintf(buf
, len
, "%d\n\n0 - off\n1 - on\n",
3477 mutex_unlock(&wl
->mutex
);
3483 static ssize_t
wl1271_sysfs_store_bt_coex_state(struct device
*dev
,
3484 struct device_attribute
*attr
,
3485 const char *buf
, size_t count
)
3487 struct wl1271
*wl
= dev_get_drvdata(dev
);
3491 ret
= kstrtoul(buf
, 10, &res
);
3493 wl1271_warning("incorrect value written to bt_coex_mode");
3497 mutex_lock(&wl
->mutex
);
3501 if (res
== wl
->sg_enabled
)
3504 wl
->sg_enabled
= res
;
3506 if (wl
->state
== WL1271_STATE_OFF
)
3509 ret
= wl1271_ps_elp_wakeup(wl
);
3513 wl1271_acx_sg_enable(wl
, wl
->sg_enabled
);
3514 wl1271_ps_elp_sleep(wl
);
3517 mutex_unlock(&wl
->mutex
);
3521 static DEVICE_ATTR(bt_coex_state
, S_IRUGO
| S_IWUSR
,
3522 wl1271_sysfs_show_bt_coex_state
,
3523 wl1271_sysfs_store_bt_coex_state
);
3525 static ssize_t
wl1271_sysfs_show_hw_pg_ver(struct device
*dev
,
3526 struct device_attribute
*attr
,
3529 struct wl1271
*wl
= dev_get_drvdata(dev
);
3534 mutex_lock(&wl
->mutex
);
3535 if (wl
->hw_pg_ver
>= 0)
3536 len
= snprintf(buf
, len
, "%d\n", wl
->hw_pg_ver
);
3538 len
= snprintf(buf
, len
, "n/a\n");
3539 mutex_unlock(&wl
->mutex
);
3544 static DEVICE_ATTR(hw_pg_ver
, S_IRUGO
| S_IWUSR
,
3545 wl1271_sysfs_show_hw_pg_ver
, NULL
);
3547 int wl1271_register_hw(struct wl1271
*wl
)
3551 if (wl
->mac80211_registered
)
3554 ret
= wl1271_fetch_nvs(wl
);
3556 /* NOTE: The wl->nvs->nvs element must be first, in
3557 * order to simplify the casting, we assume it is at
3558 * the beginning of the wl->nvs structure.
3560 u8
*nvs_ptr
= (u8
*)wl
->nvs
;
3562 wl
->mac_addr
[0] = nvs_ptr
[11];
3563 wl
->mac_addr
[1] = nvs_ptr
[10];
3564 wl
->mac_addr
[2] = nvs_ptr
[6];
3565 wl
->mac_addr
[3] = nvs_ptr
[5];
3566 wl
->mac_addr
[4] = nvs_ptr
[4];
3567 wl
->mac_addr
[5] = nvs_ptr
[3];
3570 SET_IEEE80211_PERM_ADDR(wl
->hw
, wl
->mac_addr
);
3572 ret
= ieee80211_register_hw(wl
->hw
);
3574 wl1271_error("unable to register mac80211 hw: %d", ret
);
3578 wl
->mac80211_registered
= true;
3580 wl1271_debugfs_init(wl
);
3582 register_netdevice_notifier(&wl1271_dev_notifier
);
3584 wl1271_notice("loaded");
3588 EXPORT_SYMBOL_GPL(wl1271_register_hw
);
3590 void wl1271_unregister_hw(struct wl1271
*wl
)
3592 if (wl
->state
== WL1271_STATE_PLT
)
3593 __wl1271_plt_stop(wl
);
3595 unregister_netdevice_notifier(&wl1271_dev_notifier
);
3596 ieee80211_unregister_hw(wl
->hw
);
3597 wl
->mac80211_registered
= false;
3600 EXPORT_SYMBOL_GPL(wl1271_unregister_hw
);
3602 int wl1271_init_ieee80211(struct wl1271
*wl
)
3604 static const u32 cipher_suites
[] = {
3605 WLAN_CIPHER_SUITE_WEP40
,
3606 WLAN_CIPHER_SUITE_WEP104
,
3607 WLAN_CIPHER_SUITE_TKIP
,
3608 WLAN_CIPHER_SUITE_CCMP
,
3609 WL1271_CIPHER_SUITE_GEM
,
3612 /* The tx descriptor buffer and the TKIP space. */
3613 wl
->hw
->extra_tx_headroom
= WL1271_TKIP_IV_SPACE
+
3614 sizeof(struct wl1271_tx_hw_descr
);
3617 /* FIXME: find a proper value */
3618 wl
->hw
->channel_change_time
= 10000;
3619 wl
->hw
->max_listen_interval
= wl
->conf
.conn
.max_listen_interval
;
3621 wl
->hw
->flags
= IEEE80211_HW_SIGNAL_DBM
|
3622 IEEE80211_HW_BEACON_FILTER
|
3623 IEEE80211_HW_SUPPORTS_PS
|
3624 IEEE80211_HW_SUPPORTS_UAPSD
|
3625 IEEE80211_HW_HAS_RATE_CONTROL
|
3626 IEEE80211_HW_CONNECTION_MONITOR
|
3627 IEEE80211_HW_SUPPORTS_CQM_RSSI
|
3628 IEEE80211_HW_REPORTS_TX_ACK_STATUS
|
3629 IEEE80211_HW_AP_LINK_PS
;
3631 wl
->hw
->wiphy
->cipher_suites
= cipher_suites
;
3632 wl
->hw
->wiphy
->n_cipher_suites
= ARRAY_SIZE(cipher_suites
);
3634 wl
->hw
->wiphy
->interface_modes
= BIT(NL80211_IFTYPE_STATION
) |
3635 BIT(NL80211_IFTYPE_ADHOC
) | BIT(NL80211_IFTYPE_AP
);
3636 wl
->hw
->wiphy
->max_scan_ssids
= 1;
3638 * Maximum length of elements in scanning probe request templates
3639 * should be the maximum length possible for a template, without
3640 * the IEEE80211 header of the template
3642 wl
->hw
->wiphy
->max_scan_ie_len
= WL1271_CMD_TEMPL_MAX_SIZE
-
3643 sizeof(struct ieee80211_header
);
3645 /* make sure all our channels fit in the scanned_ch bitmask */
3646 BUILD_BUG_ON(ARRAY_SIZE(wl1271_channels
) +
3647 ARRAY_SIZE(wl1271_channels_5ghz
) >
3648 WL1271_MAX_CHANNELS
);
3650 * We keep local copies of the band structs because we need to
3651 * modify them on a per-device basis.
3653 memcpy(&wl
->bands
[IEEE80211_BAND_2GHZ
], &wl1271_band_2ghz
,
3654 sizeof(wl1271_band_2ghz
));
3655 memcpy(&wl
->bands
[IEEE80211_BAND_5GHZ
], &wl1271_band_5ghz
,
3656 sizeof(wl1271_band_5ghz
));
3658 wl
->hw
->wiphy
->bands
[IEEE80211_BAND_2GHZ
] =
3659 &wl
->bands
[IEEE80211_BAND_2GHZ
];
3660 wl
->hw
->wiphy
->bands
[IEEE80211_BAND_5GHZ
] =
3661 &wl
->bands
[IEEE80211_BAND_5GHZ
];
3664 wl
->hw
->max_rates
= 1;
3666 wl
->hw
->wiphy
->reg_notifier
= wl1271_reg_notify
;
3668 SET_IEEE80211_DEV(wl
->hw
, wl1271_wl_to_dev(wl
));
3670 wl
->hw
->sta_data_size
= sizeof(struct wl1271_station
);
3672 wl
->hw
->max_rx_aggregation_subframes
= 8;
3676 EXPORT_SYMBOL_GPL(wl1271_init_ieee80211
);
3678 #define WL1271_DEFAULT_CHANNEL 0
3680 struct ieee80211_hw
*wl1271_alloc_hw(void)
3682 struct ieee80211_hw
*hw
;
3683 struct platform_device
*plat_dev
= NULL
;
3688 hw
= ieee80211_alloc_hw(sizeof(*wl
), &wl1271_ops
);
3690 wl1271_error("could not alloc ieee80211_hw");
3695 plat_dev
= kmemdup(&wl1271_device
, sizeof(wl1271_device
), GFP_KERNEL
);
3697 wl1271_error("could not allocate platform_device");
3699 goto err_plat_alloc
;
3703 memset(wl
, 0, sizeof(*wl
));
3705 INIT_LIST_HEAD(&wl
->list
);
3708 wl
->plat_dev
= plat_dev
;
3710 for (i
= 0; i
< NUM_TX_QUEUES
; i
++)
3711 skb_queue_head_init(&wl
->tx_queue
[i
]);
3713 for (i
= 0; i
< NUM_TX_QUEUES
; i
++)
3714 for (j
= 0; j
< AP_MAX_LINKS
; j
++)
3715 skb_queue_head_init(&wl
->links
[j
].tx_queue
[i
]);
3717 skb_queue_head_init(&wl
->deferred_rx_queue
);
3718 skb_queue_head_init(&wl
->deferred_tx_queue
);
3720 INIT_DELAYED_WORK(&wl
->elp_work
, wl1271_elp_work
);
3721 INIT_DELAYED_WORK(&wl
->pspoll_work
, wl1271_pspoll_work
);
3722 INIT_WORK(&wl
->netstack_work
, wl1271_netstack_work
);
3723 INIT_WORK(&wl
->tx_work
, wl1271_tx_work
);
3724 INIT_WORK(&wl
->recovery_work
, wl1271_recovery_work
);
3725 INIT_DELAYED_WORK(&wl
->scan_complete_work
, wl1271_scan_complete_work
);
3726 wl
->channel
= WL1271_DEFAULT_CHANNEL
;
3727 wl
->beacon_int
= WL1271_DEFAULT_BEACON_INT
;
3728 wl
->default_key
= 0;
3730 wl
->rx_config
= WL1271_DEFAULT_STA_RX_CONFIG
;
3731 wl
->rx_filter
= WL1271_DEFAULT_STA_RX_FILTER
;
3732 wl
->psm_entry_retry
= 0;
3733 wl
->power_level
= WL1271_DEFAULT_POWER_LEVEL
;
3734 wl
->basic_rate_set
= CONF_TX_RATE_MASK_BASIC
;
3735 wl
->basic_rate
= CONF_TX_RATE_MASK_BASIC
;
3736 wl
->rate_set
= CONF_TX_RATE_MASK_BASIC
;
3737 wl
->band
= IEEE80211_BAND_2GHZ
;
3740 wl
->sg_enabled
= true;
3742 wl
->bss_type
= MAX_BSS_TYPE
;
3743 wl
->set_bss_type
= MAX_BSS_TYPE
;
3744 wl
->fw_bss_type
= MAX_BSS_TYPE
;
3745 wl
->last_tx_hlid
= 0;
3747 wl
->ap_fw_ps_map
= 0;
3749 wl
->platform_quirks
= 0;
3751 memset(wl
->tx_frames_map
, 0, sizeof(wl
->tx_frames_map
));
3752 for (i
= 0; i
< ACX_TX_DESCRIPTORS
; i
++)
3753 wl
->tx_frames
[i
] = NULL
;
3755 spin_lock_init(&wl
->wl_lock
);
3757 wl
->state
= WL1271_STATE_OFF
;
3758 mutex_init(&wl
->mutex
);
3760 /* Apply default driver configuration. */
3761 wl1271_conf_init(wl
);
3763 order
= get_order(WL1271_AGGR_BUFFER_SIZE
);
3764 wl
->aggr_buf
= (u8
*)__get_free_pages(GFP_KERNEL
, order
);
3765 if (!wl
->aggr_buf
) {
3770 wl
->dummy_packet
= wl12xx_alloc_dummy_packet(wl
);
3771 if (!wl
->dummy_packet
) {
3776 /* Register platform device */
3777 ret
= platform_device_register(wl
->plat_dev
);
3779 wl1271_error("couldn't register platform device");
3780 goto err_dummy_packet
;
3782 dev_set_drvdata(&wl
->plat_dev
->dev
, wl
);
3784 /* Create sysfs file to control bt coex state */
3785 ret
= device_create_file(&wl
->plat_dev
->dev
, &dev_attr_bt_coex_state
);
3787 wl1271_error("failed to create sysfs file bt_coex_state");
3791 /* Create sysfs file to get HW PG version */
3792 ret
= device_create_file(&wl
->plat_dev
->dev
, &dev_attr_hw_pg_ver
);
3794 wl1271_error("failed to create sysfs file hw_pg_ver");
3795 goto err_bt_coex_state
;
3801 device_remove_file(&wl
->plat_dev
->dev
, &dev_attr_bt_coex_state
);
3804 platform_device_unregister(wl
->plat_dev
);
3807 dev_kfree_skb(wl
->dummy_packet
);
3810 free_pages((unsigned long)wl
->aggr_buf
, order
);
3813 wl1271_debugfs_exit(wl
);
3817 ieee80211_free_hw(hw
);
3821 return ERR_PTR(ret
);
3823 EXPORT_SYMBOL_GPL(wl1271_alloc_hw
);
3825 int wl1271_free_hw(struct wl1271
*wl
)
3827 platform_device_unregister(wl
->plat_dev
);
3828 dev_kfree_skb(wl
->dummy_packet
);
3829 free_pages((unsigned long)wl
->aggr_buf
,
3830 get_order(WL1271_AGGR_BUFFER_SIZE
));
3831 kfree(wl
->plat_dev
);
3833 wl1271_debugfs_exit(wl
);
3840 kfree(wl
->fw_status
);
3841 kfree(wl
->tx_res_if
);
3843 ieee80211_free_hw(wl
->hw
);
3847 EXPORT_SYMBOL_GPL(wl1271_free_hw
);
3849 u32 wl12xx_debug_level
= DEBUG_NONE
;
3850 EXPORT_SYMBOL_GPL(wl12xx_debug_level
);
3851 module_param_named(debug_level
, wl12xx_debug_level
, uint
, S_IRUSR
| S_IWUSR
);
3852 MODULE_PARM_DESC(debug_level
, "wl12xx debugging level");
3854 MODULE_LICENSE("GPL");
3855 MODULE_AUTHOR("Luciano Coelho <coelho@ti.com>");
3856 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");