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 .max_tx_retries
= 100,
213 .ap_aging_period
= 300,
217 .queue_id
= CONF_TX_AC_BE
,
218 .channel_type
= CONF_CHANNEL_TYPE_EDCF
,
219 .tsid
= CONF_TX_AC_BE
,
220 .ps_scheme
= CONF_PS_SCHEME_LEGACY
,
221 .ack_policy
= CONF_ACK_POLICY_LEGACY
,
225 .queue_id
= CONF_TX_AC_BK
,
226 .channel_type
= CONF_CHANNEL_TYPE_EDCF
,
227 .tsid
= CONF_TX_AC_BK
,
228 .ps_scheme
= CONF_PS_SCHEME_LEGACY
,
229 .ack_policy
= CONF_ACK_POLICY_LEGACY
,
233 .queue_id
= CONF_TX_AC_VI
,
234 .channel_type
= CONF_CHANNEL_TYPE_EDCF
,
235 .tsid
= CONF_TX_AC_VI
,
236 .ps_scheme
= CONF_PS_SCHEME_LEGACY
,
237 .ack_policy
= CONF_ACK_POLICY_LEGACY
,
241 .queue_id
= CONF_TX_AC_VO
,
242 .channel_type
= CONF_CHANNEL_TYPE_EDCF
,
243 .tsid
= CONF_TX_AC_VO
,
244 .ps_scheme
= CONF_PS_SCHEME_LEGACY
,
245 .ack_policy
= CONF_ACK_POLICY_LEGACY
,
249 .frag_threshold
= IEEE80211_MAX_FRAG_THRESHOLD
,
250 .tx_compl_timeout
= 700,
251 .tx_compl_threshold
= 4,
252 .basic_rate
= CONF_HW_BIT_RATE_1MBPS
,
253 .basic_rate_5
= CONF_HW_BIT_RATE_6MBPS
,
254 .tmpl_short_retry_limit
= 10,
255 .tmpl_long_retry_limit
= 10,
258 .wake_up_event
= CONF_WAKE_UP_EVENT_DTIM
,
259 .listen_interval
= 1,
260 .bcn_filt_mode
= CONF_BCN_FILT_MODE_ENABLED
,
261 .bcn_filt_ie_count
= 1,
264 .ie
= WLAN_EID_CHANNEL_SWITCH
,
265 .rule
= CONF_BCN_RULE_PASS_ON_APPEARANCE
,
268 .synch_fail_thold
= 10,
269 .bss_lose_timeout
= 100,
270 .beacon_rx_timeout
= 10000,
271 .broadcast_timeout
= 20000,
272 .rx_broadcast_in_ps
= 1,
273 .ps_poll_threshold
= 10,
274 .ps_poll_recovery_period
= 700,
275 .bet_enable
= CONF_BET_MODE_ENABLE
,
276 .bet_max_consecutive
= 50,
277 .psm_entry_retries
= 5,
278 .psm_exit_retries
= 16,
279 .psm_entry_nullfunc_retries
= 3,
280 .psm_entry_hangover_period
= 1,
281 .keep_alive_interval
= 55000,
282 .max_listen_interval
= 20,
289 .host_clk_settling_time
= 5000,
290 .host_fast_wakeup_support
= false
294 .avg_weight_rssi_beacon
= 20,
295 .avg_weight_rssi_data
= 10,
296 .avg_weight_snr_beacon
= 20,
297 .avg_weight_snr_data
= 10,
300 .min_dwell_time_active
= 7500,
301 .max_dwell_time_active
= 30000,
302 .min_dwell_time_passive
= 100000,
303 .max_dwell_time_passive
= 100000,
307 .tx_per_channel_power_compensation_2
= {
308 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
310 .tx_per_channel_power_compensation_5
= {
311 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
312 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
313 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
317 .tx_ba_win_size
= 64,
318 .inactivity_timeout
= 10000,
324 .tx_min_block_num
= 40,
326 .min_req_tx_blocks
= 100,
327 .min_req_rx_blocks
= 22,
334 .tx_min_block_num
= 40,
336 .min_req_tx_blocks
= 45,
337 .min_req_rx_blocks
= 22,
343 .n_divider_fref_set_1
= 0xff, /* default */
344 .n_divider_fref_set_2
= 12,
345 .m_divider_fref_set_1
= 148,
346 .m_divider_fref_set_2
= 0xffff, /* default */
347 .coex_pll_stabilization_time
= 0xffffffff, /* default */
348 .ldo_stabilization_time
= 0xffff, /* default */
349 .fm_disturbed_band_margin
= 0xff, /* default */
350 .swallow_clk_diff
= 0xff, /* default */
352 .hci_io_ds
= HCI_IO_DS_6MA
,
355 static void __wl1271_op_remove_interface(struct wl1271
*wl
,
356 bool reset_tx_queues
);
357 static void wl1271_free_ap_keys(struct wl1271
*wl
);
360 static void wl1271_device_release(struct device
*dev
)
365 static struct platform_device wl1271_device
= {
369 /* device model insists to have a release function */
371 .release
= wl1271_device_release
,
375 static DEFINE_MUTEX(wl_list_mutex
);
376 static LIST_HEAD(wl_list
);
378 static int wl1271_dev_notify(struct notifier_block
*me
, unsigned long what
,
381 struct net_device
*dev
= arg
;
382 struct wireless_dev
*wdev
;
384 struct ieee80211_hw
*hw
;
386 struct wl1271
*wl_temp
;
389 /* Check that this notification is for us. */
390 if (what
!= NETDEV_CHANGE
)
393 wdev
= dev
->ieee80211_ptr
;
401 hw
= wiphy_priv(wiphy
);
406 mutex_lock(&wl_list_mutex
);
407 list_for_each_entry(wl
, &wl_list
, list
) {
411 mutex_unlock(&wl_list_mutex
);
415 mutex_lock(&wl
->mutex
);
417 if (wl
->state
== WL1271_STATE_OFF
)
420 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
423 ret
= wl1271_ps_elp_wakeup(wl
);
427 if ((dev
->operstate
== IF_OPER_UP
) &&
428 !test_and_set_bit(WL1271_FLAG_STA_STATE_SENT
, &wl
->flags
)) {
429 wl1271_cmd_set_sta_state(wl
);
430 wl1271_info("Association completed.");
433 wl1271_ps_elp_sleep(wl
);
436 mutex_unlock(&wl
->mutex
);
441 static int wl1271_reg_notify(struct wiphy
*wiphy
,
442 struct regulatory_request
*request
)
444 struct ieee80211_supported_band
*band
;
445 struct ieee80211_channel
*ch
;
448 band
= wiphy
->bands
[IEEE80211_BAND_5GHZ
];
449 for (i
= 0; i
< band
->n_channels
; i
++) {
450 ch
= &band
->channels
[i
];
451 if (ch
->flags
& IEEE80211_CHAN_DISABLED
)
454 if (ch
->flags
& IEEE80211_CHAN_RADAR
)
455 ch
->flags
|= IEEE80211_CHAN_NO_IBSS
|
456 IEEE80211_CHAN_PASSIVE_SCAN
;
463 static void wl1271_conf_init(struct wl1271
*wl
)
467 * This function applies the default configuration to the driver. This
468 * function is invoked upon driver load (spi probe.)
470 * The configuration is stored in a run-time structure in order to
471 * facilitate for run-time adjustment of any of the parameters. Making
472 * changes to the configuration structure will apply the new values on
473 * the next interface up (wl1271_op_start.)
476 /* apply driver default configuration */
477 memcpy(&wl
->conf
, &default_conf
, sizeof(default_conf
));
481 static int wl1271_plt_init(struct wl1271
*wl
)
483 struct conf_tx_ac_category
*conf_ac
;
484 struct conf_tx_tid
*conf_tid
;
487 if (wl
->chip
.id
== CHIP_ID_1283_PG20
)
488 ret
= wl128x_cmd_general_parms(wl
);
490 ret
= wl1271_cmd_general_parms(wl
);
494 if (wl
->chip
.id
== CHIP_ID_1283_PG20
)
495 ret
= wl128x_cmd_radio_parms(wl
);
497 ret
= wl1271_cmd_radio_parms(wl
);
501 if (wl
->chip
.id
!= CHIP_ID_1283_PG20
) {
502 ret
= wl1271_cmd_ext_radio_parms(wl
);
509 /* Chip-specific initializations */
510 ret
= wl1271_chip_specific_init(wl
);
514 ret
= wl1271_sta_init_templates_config(wl
);
518 ret
= wl1271_acx_init_mem_config(wl
);
522 /* PHY layer config */
523 ret
= wl1271_init_phy_config(wl
);
525 goto out_free_memmap
;
527 ret
= wl1271_acx_dco_itrim_params(wl
);
529 goto out_free_memmap
;
531 /* Initialize connection monitoring thresholds */
532 ret
= wl1271_acx_conn_monit_params(wl
, false);
534 goto out_free_memmap
;
536 /* Bluetooth WLAN coexistence */
537 ret
= wl1271_init_pta(wl
);
539 goto out_free_memmap
;
541 /* FM WLAN coexistence */
542 ret
= wl1271_acx_fm_coex(wl
);
544 goto out_free_memmap
;
546 /* Energy detection */
547 ret
= wl1271_init_energy_detection(wl
);
549 goto out_free_memmap
;
551 ret
= wl1271_acx_sta_mem_cfg(wl
);
553 goto out_free_memmap
;
555 /* Default fragmentation threshold */
556 ret
= wl1271_acx_frag_threshold(wl
, wl
->conf
.tx
.frag_threshold
);
558 goto out_free_memmap
;
560 /* Default TID/AC configuration */
561 BUG_ON(wl
->conf
.tx
.tid_conf_count
!= wl
->conf
.tx
.ac_conf_count
);
562 for (i
= 0; i
< wl
->conf
.tx
.tid_conf_count
; i
++) {
563 conf_ac
= &wl
->conf
.tx
.ac_conf
[i
];
564 ret
= wl1271_acx_ac_cfg(wl
, conf_ac
->ac
, conf_ac
->cw_min
,
565 conf_ac
->cw_max
, conf_ac
->aifsn
,
566 conf_ac
->tx_op_limit
);
568 goto out_free_memmap
;
570 conf_tid
= &wl
->conf
.tx
.tid_conf
[i
];
571 ret
= wl1271_acx_tid_cfg(wl
, conf_tid
->queue_id
,
572 conf_tid
->channel_type
,
575 conf_tid
->ack_policy
,
576 conf_tid
->apsd_conf
[0],
577 conf_tid
->apsd_conf
[1]);
579 goto out_free_memmap
;
582 /* Enable data path */
583 ret
= wl1271_cmd_data_path(wl
, 1);
585 goto out_free_memmap
;
587 /* Configure for CAM power saving (ie. always active) */
588 ret
= wl1271_acx_sleep_auth(wl
, WL1271_PSM_CAM
);
590 goto out_free_memmap
;
593 ret
= wl1271_acx_pm_config(wl
);
595 goto out_free_memmap
;
600 kfree(wl
->target_mem_map
);
601 wl
->target_mem_map
= NULL
;
606 static void wl1271_irq_ps_regulate_link(struct wl1271
*wl
, u8 hlid
, u8 tx_blks
)
610 /* only regulate station links */
611 if (hlid
< WL1271_AP_STA_HLID_START
)
614 fw_ps
= test_bit(hlid
, (unsigned long *)&wl
->ap_fw_ps_map
);
617 * Wake up from high level PS if the STA is asleep with too little
618 * blocks in FW or if the STA is awake.
620 if (!fw_ps
|| tx_blks
< WL1271_PS_STA_MAX_BLOCKS
)
621 wl1271_ps_link_end(wl
, hlid
);
623 /* Start high-level PS if the STA is asleep with enough blocks in FW */
624 else if (fw_ps
&& tx_blks
>= WL1271_PS_STA_MAX_BLOCKS
)
625 wl1271_ps_link_start(wl
, hlid
, true);
628 static void wl1271_irq_update_links_status(struct wl1271
*wl
,
629 struct wl1271_fw_ap_status
*status
)
634 cur_fw_ps_map
= le32_to_cpu(status
->link_ps_bitmap
);
635 if (wl
->ap_fw_ps_map
!= cur_fw_ps_map
) {
636 wl1271_debug(DEBUG_PSM
,
637 "link ps prev 0x%x cur 0x%x changed 0x%x",
638 wl
->ap_fw_ps_map
, cur_fw_ps_map
,
639 wl
->ap_fw_ps_map
^ cur_fw_ps_map
);
641 wl
->ap_fw_ps_map
= cur_fw_ps_map
;
644 for (hlid
= WL1271_AP_STA_HLID_START
; hlid
< AP_MAX_LINKS
; hlid
++) {
645 u8 cnt
= status
->tx_lnk_free_blks
[hlid
] -
646 wl
->links
[hlid
].prev_freed_blks
;
648 wl
->links
[hlid
].prev_freed_blks
=
649 status
->tx_lnk_free_blks
[hlid
];
650 wl
->links
[hlid
].allocated_blks
-= cnt
;
652 wl1271_irq_ps_regulate_link(wl
, hlid
,
653 wl
->links
[hlid
].allocated_blks
);
657 static void wl1271_fw_status(struct wl1271
*wl
,
658 struct wl1271_fw_full_status
*full_status
)
660 struct wl1271_fw_common_status
*status
= &full_status
->common
;
662 u32 old_tx_blk_count
= wl
->tx_blocks_available
;
663 u32 freed_blocks
= 0;
666 if (wl
->bss_type
== BSS_TYPE_AP_BSS
) {
667 wl1271_raw_read(wl
, FW_STATUS_ADDR
, status
,
668 sizeof(struct wl1271_fw_ap_status
), false);
670 wl1271_raw_read(wl
, FW_STATUS_ADDR
, status
,
671 sizeof(struct wl1271_fw_sta_status
), false);
674 wl1271_debug(DEBUG_IRQ
, "intr: 0x%x (fw_rx_counter = %d, "
675 "drv_rx_counter = %d, tx_results_counter = %d)",
677 status
->fw_rx_counter
,
678 status
->drv_rx_counter
,
679 status
->tx_results_counter
);
681 /* update number of available TX blocks */
682 for (i
= 0; i
< NUM_TX_QUEUES
; i
++) {
683 freed_blocks
+= le32_to_cpu(status
->tx_released_blks
[i
]) -
684 wl
->tx_blocks_freed
[i
];
686 wl
->tx_blocks_freed
[i
] =
687 le32_to_cpu(status
->tx_released_blks
[i
]);
690 wl
->tx_allocated_blocks
-= freed_blocks
;
692 if (wl
->bss_type
== BSS_TYPE_AP_BSS
) {
693 /* Update num of allocated TX blocks per link and ps status */
694 wl1271_irq_update_links_status(wl
, &full_status
->ap
);
695 wl
->tx_blocks_available
+= freed_blocks
;
697 int avail
= full_status
->sta
.tx_total
- wl
->tx_allocated_blocks
;
700 * The FW might change the total number of TX memblocks before
701 * we get a notification about blocks being released. Thus, the
702 * available blocks calculation might yield a temporary result
703 * which is lower than the actual available blocks. Keeping in
704 * mind that only blocks that were allocated can be moved from
705 * TX to RX, tx_blocks_available should never decrease here.
707 wl
->tx_blocks_available
= max((int)wl
->tx_blocks_available
,
711 /* if more blocks are available now, tx work can be scheduled */
712 if (wl
->tx_blocks_available
> old_tx_blk_count
)
713 clear_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
);
715 /* update the host-chipset time offset */
717 wl
->time_offset
= (timespec_to_ns(&ts
) >> 10) -
718 (s64
)le32_to_cpu(status
->fw_localtime
);
721 static void wl1271_flush_deferred_work(struct wl1271
*wl
)
725 /* Pass all received frames to the network stack */
726 while ((skb
= skb_dequeue(&wl
->deferred_rx_queue
)))
727 ieee80211_rx_ni(wl
->hw
, skb
);
729 /* Return sent skbs to the network stack */
730 while ((skb
= skb_dequeue(&wl
->deferred_tx_queue
)))
731 ieee80211_tx_status(wl
->hw
, skb
);
734 static void wl1271_netstack_work(struct work_struct
*work
)
737 container_of(work
, struct wl1271
, netstack_work
);
740 wl1271_flush_deferred_work(wl
);
741 } while (skb_queue_len(&wl
->deferred_rx_queue
));
744 #define WL1271_IRQ_MAX_LOOPS 256
746 irqreturn_t
wl1271_irq(int irq
, void *cookie
)
750 int loopcount
= WL1271_IRQ_MAX_LOOPS
;
751 struct wl1271
*wl
= (struct wl1271
*)cookie
;
753 unsigned int defer_count
;
756 /* TX might be handled here, avoid redundant work */
757 set_bit(WL1271_FLAG_TX_PENDING
, &wl
->flags
);
758 cancel_work_sync(&wl
->tx_work
);
761 * In case edge triggered interrupt must be used, we cannot iterate
762 * more than once without introducing race conditions with the hardirq.
764 if (wl
->platform_quirks
& WL12XX_PLATFORM_QUIRK_EDGE_IRQ
)
767 mutex_lock(&wl
->mutex
);
769 wl1271_debug(DEBUG_IRQ
, "IRQ work");
771 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
774 ret
= wl1271_ps_elp_wakeup(wl
);
778 while (!done
&& loopcount
--) {
780 * In order to avoid a race with the hardirq, clear the flag
781 * before acknowledging the chip. Since the mutex is held,
782 * wl1271_ps_elp_wakeup cannot be called concurrently.
784 clear_bit(WL1271_FLAG_IRQ_RUNNING
, &wl
->flags
);
785 smp_mb__after_clear_bit();
787 wl1271_fw_status(wl
, wl
->fw_status
);
788 intr
= le32_to_cpu(wl
->fw_status
->common
.intr
);
789 intr
&= WL1271_INTR_MASK
;
795 if (unlikely(intr
& WL1271_ACX_INTR_WATCHDOG
)) {
796 wl1271_error("watchdog interrupt received! "
797 "starting recovery.");
798 ieee80211_queue_work(wl
->hw
, &wl
->recovery_work
);
800 /* restarting the chip. ignore any other interrupt. */
804 if (likely(intr
& WL1271_ACX_INTR_DATA
)) {
805 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_DATA");
807 wl1271_rx(wl
, &wl
->fw_status
->common
);
809 /* Check if any tx blocks were freed */
810 spin_lock_irqsave(&wl
->wl_lock
, flags
);
811 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
) &&
812 wl
->tx_queue_count
) {
813 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
815 * In order to avoid starvation of the TX path,
816 * call the work function directly.
818 wl1271_tx_work_locked(wl
);
820 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
823 /* check for tx results */
824 if (wl
->fw_status
->common
.tx_results_counter
!=
825 (wl
->tx_results_count
& 0xff))
826 wl1271_tx_complete(wl
);
828 /* Make sure the deferred queues don't get too long */
829 defer_count
= skb_queue_len(&wl
->deferred_tx_queue
) +
830 skb_queue_len(&wl
->deferred_rx_queue
);
831 if (defer_count
> WL1271_DEFERRED_QUEUE_LIMIT
)
832 wl1271_flush_deferred_work(wl
);
835 if (intr
& WL1271_ACX_INTR_EVENT_A
) {
836 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_EVENT_A");
837 wl1271_event_handle(wl
, 0);
840 if (intr
& WL1271_ACX_INTR_EVENT_B
) {
841 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_EVENT_B");
842 wl1271_event_handle(wl
, 1);
845 if (intr
& WL1271_ACX_INTR_INIT_COMPLETE
)
846 wl1271_debug(DEBUG_IRQ
,
847 "WL1271_ACX_INTR_INIT_COMPLETE");
849 if (intr
& WL1271_ACX_INTR_HW_AVAILABLE
)
850 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_HW_AVAILABLE");
853 wl1271_ps_elp_sleep(wl
);
856 spin_lock_irqsave(&wl
->wl_lock
, flags
);
857 /* In case TX was not handled here, queue TX work */
858 clear_bit(WL1271_FLAG_TX_PENDING
, &wl
->flags
);
859 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
) &&
861 ieee80211_queue_work(wl
->hw
, &wl
->tx_work
);
862 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
864 mutex_unlock(&wl
->mutex
);
868 EXPORT_SYMBOL_GPL(wl1271_irq
);
870 static int wl1271_fetch_firmware(struct wl1271
*wl
)
872 const struct firmware
*fw
;
876 switch (wl
->bss_type
) {
877 case BSS_TYPE_AP_BSS
:
878 if (wl
->chip
.id
== CHIP_ID_1283_PG20
)
879 fw_name
= WL128X_AP_FW_NAME
;
881 fw_name
= WL127X_AP_FW_NAME
;
884 case BSS_TYPE_STA_BSS
:
885 if (wl
->chip
.id
== CHIP_ID_1283_PG20
)
886 fw_name
= WL128X_FW_NAME
;
888 fw_name
= WL1271_FW_NAME
;
891 wl1271_error("no compatible firmware for bss_type %d",
896 wl1271_debug(DEBUG_BOOT
, "booting firmware %s", fw_name
);
898 ret
= request_firmware(&fw
, fw_name
, wl1271_wl_to_dev(wl
));
901 wl1271_error("could not get firmware: %d", ret
);
906 wl1271_error("firmware size is not multiple of 32 bits: %zu",
913 wl
->fw_len
= fw
->size
;
914 wl
->fw
= vmalloc(wl
->fw_len
);
917 wl1271_error("could not allocate memory for the firmware");
922 memcpy(wl
->fw
, fw
->data
, wl
->fw_len
);
923 wl
->fw_bss_type
= wl
->bss_type
;
927 release_firmware(fw
);
932 static int wl1271_fetch_nvs(struct wl1271
*wl
)
934 const struct firmware
*fw
;
937 ret
= request_firmware(&fw
, WL12XX_NVS_NAME
, wl1271_wl_to_dev(wl
));
940 wl1271_error("could not get nvs file: %d", ret
);
944 wl
->nvs
= kmemdup(fw
->data
, fw
->size
, GFP_KERNEL
);
947 wl1271_error("could not allocate memory for the nvs file");
952 wl
->nvs_len
= fw
->size
;
955 release_firmware(fw
);
960 static void wl1271_recovery_work(struct work_struct
*work
)
963 container_of(work
, struct wl1271
, recovery_work
);
965 mutex_lock(&wl
->mutex
);
967 if (wl
->state
!= WL1271_STATE_ON
)
970 wl1271_info("Hardware recovery in progress. FW ver: %s pc: 0x%x",
971 wl
->chip
.fw_ver_str
, wl1271_read32(wl
, SCR_PAD4
));
973 if (test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
974 ieee80211_connection_loss(wl
->vif
);
976 /* Prevent spurious TX during FW restart */
977 ieee80211_stop_queues(wl
->hw
);
979 /* reboot the chipset */
980 __wl1271_op_remove_interface(wl
, false);
981 ieee80211_restart_hw(wl
->hw
);
984 * Its safe to enable TX now - the queues are stopped after a request
987 ieee80211_wake_queues(wl
->hw
);
990 mutex_unlock(&wl
->mutex
);
993 static void wl1271_fw_wakeup(struct wl1271
*wl
)
997 elp_reg
= ELPCTRL_WAKE_UP
;
998 wl1271_raw_write32(wl
, HW_ACCESS_ELP_CTRL_REG_ADDR
, elp_reg
);
1001 static int wl1271_setup(struct wl1271
*wl
)
1003 wl
->fw_status
= kmalloc(sizeof(*wl
->fw_status
), GFP_KERNEL
);
1007 wl
->tx_res_if
= kmalloc(sizeof(*wl
->tx_res_if
), GFP_KERNEL
);
1008 if (!wl
->tx_res_if
) {
1009 kfree(wl
->fw_status
);
1016 static int wl1271_chip_wakeup(struct wl1271
*wl
)
1018 struct wl1271_partition_set partition
;
1021 msleep(WL1271_PRE_POWER_ON_SLEEP
);
1022 ret
= wl1271_power_on(wl
);
1025 msleep(WL1271_POWER_ON_SLEEP
);
1026 wl1271_io_reset(wl
);
1029 /* We don't need a real memory partition here, because we only want
1030 * to use the registers at this point. */
1031 memset(&partition
, 0, sizeof(partition
));
1032 partition
.reg
.start
= REGISTERS_BASE
;
1033 partition
.reg
.size
= REGISTERS_DOWN_SIZE
;
1034 wl1271_set_partition(wl
, &partition
);
1036 /* ELP module wake up */
1037 wl1271_fw_wakeup(wl
);
1039 /* whal_FwCtrl_BootSm() */
1041 /* 0. read chip id from CHIP_ID */
1042 wl
->chip
.id
= wl1271_read32(wl
, CHIP_ID_B
);
1044 /* 1. check if chip id is valid */
1046 switch (wl
->chip
.id
) {
1047 case CHIP_ID_1271_PG10
:
1048 wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
1051 ret
= wl1271_setup(wl
);
1055 case CHIP_ID_1271_PG20
:
1056 wl1271_debug(DEBUG_BOOT
, "chip id 0x%x (1271 PG20)",
1059 /* end-of-transaction flag should be set in wl127x AP mode */
1060 if (wl
->bss_type
== BSS_TYPE_AP_BSS
)
1061 wl
->quirks
|= WL12XX_QUIRK_END_OF_TRANSACTION
;
1063 ret
= wl1271_setup(wl
);
1067 case CHIP_ID_1283_PG20
:
1068 wl1271_debug(DEBUG_BOOT
, "chip id 0x%x (1283 PG20)",
1071 ret
= wl1271_setup(wl
);
1074 if (wl1271_set_block_size(wl
))
1075 wl
->quirks
|= WL12XX_QUIRK_BLOCKSIZE_ALIGNMENT
;
1077 case CHIP_ID_1283_PG10
:
1079 wl1271_warning("unsupported chip id: 0x%x", wl
->chip
.id
);
1084 /* Make sure the firmware type matches the BSS type */
1085 if (wl
->fw
== NULL
|| wl
->fw_bss_type
!= wl
->bss_type
) {
1086 ret
= wl1271_fetch_firmware(wl
);
1091 /* No NVS from netlink, try to get it from the filesystem */
1092 if (wl
->nvs
== NULL
) {
1093 ret
= wl1271_fetch_nvs(wl
);
1102 static unsigned int wl1271_get_fw_ver_quirks(struct wl1271
*wl
)
1104 unsigned int quirks
= 0;
1105 unsigned int *fw_ver
= wl
->chip
.fw_ver
;
1107 /* Only for wl127x */
1108 if ((fw_ver
[FW_VER_CHIP
] == FW_VER_CHIP_WL127X
) &&
1109 /* Check STA version */
1110 (((fw_ver
[FW_VER_IF_TYPE
] == FW_VER_IF_TYPE_STA
) &&
1111 (fw_ver
[FW_VER_MINOR
] < FW_VER_MINOR_1_SPARE_STA_MIN
)) ||
1112 /* Check AP version */
1113 ((fw_ver
[FW_VER_IF_TYPE
] == FW_VER_IF_TYPE_AP
) &&
1114 (fw_ver
[FW_VER_MINOR
] < FW_VER_MINOR_1_SPARE_AP_MIN
))))
1115 quirks
|= WL12XX_QUIRK_USE_2_SPARE_BLOCKS
;
1120 int wl1271_plt_start(struct wl1271
*wl
)
1122 int retries
= WL1271_BOOT_RETRIES
;
1125 mutex_lock(&wl
->mutex
);
1127 wl1271_notice("power up");
1129 if (wl
->state
!= WL1271_STATE_OFF
) {
1130 wl1271_error("cannot go into PLT state because not "
1131 "in off state: %d", wl
->state
);
1136 wl
->bss_type
= BSS_TYPE_STA_BSS
;
1140 ret
= wl1271_chip_wakeup(wl
);
1144 ret
= wl1271_boot(wl
);
1148 ret
= wl1271_plt_init(wl
);
1152 wl
->state
= WL1271_STATE_PLT
;
1153 wl1271_notice("firmware booted in PLT mode (%s)",
1154 wl
->chip
.fw_ver_str
);
1156 /* Check if any quirks are needed with older fw versions */
1157 wl
->quirks
|= wl1271_get_fw_ver_quirks(wl
);
1161 mutex_unlock(&wl
->mutex
);
1162 /* Unlocking the mutex in the middle of handling is
1163 inherently unsafe. In this case we deem it safe to do,
1164 because we need to let any possibly pending IRQ out of
1165 the system (and while we are WL1271_STATE_OFF the IRQ
1166 work function will not do anything.) Also, any other
1167 possible concurrent operations will fail due to the
1168 current state, hence the wl1271 struct should be safe. */
1169 wl1271_disable_interrupts(wl
);
1170 wl1271_flush_deferred_work(wl
);
1171 cancel_work_sync(&wl
->netstack_work
);
1172 mutex_lock(&wl
->mutex
);
1174 wl1271_power_off(wl
);
1177 wl1271_error("firmware boot in PLT mode failed despite %d retries",
1178 WL1271_BOOT_RETRIES
);
1180 mutex_unlock(&wl
->mutex
);
1185 static int __wl1271_plt_stop(struct wl1271
*wl
)
1189 wl1271_notice("power down");
1191 if (wl
->state
!= WL1271_STATE_PLT
) {
1192 wl1271_error("cannot power down because not in PLT "
1193 "state: %d", wl
->state
);
1198 wl1271_power_off(wl
);
1200 wl
->state
= WL1271_STATE_OFF
;
1203 mutex_unlock(&wl
->mutex
);
1204 wl1271_disable_interrupts(wl
);
1205 wl1271_flush_deferred_work(wl
);
1206 cancel_work_sync(&wl
->netstack_work
);
1207 cancel_work_sync(&wl
->recovery_work
);
1208 mutex_lock(&wl
->mutex
);
1213 int wl1271_plt_stop(struct wl1271
*wl
)
1217 mutex_lock(&wl
->mutex
);
1218 ret
= __wl1271_plt_stop(wl
);
1219 mutex_unlock(&wl
->mutex
);
1223 static void wl1271_op_tx(struct ieee80211_hw
*hw
, struct sk_buff
*skb
)
1225 struct wl1271
*wl
= hw
->priv
;
1226 unsigned long flags
;
1230 q
= wl1271_tx_get_queue(skb_get_queue_mapping(skb
));
1232 if (wl
->bss_type
== BSS_TYPE_AP_BSS
)
1233 hlid
= wl1271_tx_get_hlid(skb
);
1235 spin_lock_irqsave(&wl
->wl_lock
, flags
);
1237 wl
->tx_queue_count
++;
1240 * The workqueue is slow to process the tx_queue and we need stop
1241 * the queue here, otherwise the queue will get too long.
1243 if (wl
->tx_queue_count
>= WL1271_TX_QUEUE_HIGH_WATERMARK
) {
1244 wl1271_debug(DEBUG_TX
, "op_tx: stopping queues");
1245 ieee80211_stop_queues(wl
->hw
);
1246 set_bit(WL1271_FLAG_TX_QUEUE_STOPPED
, &wl
->flags
);
1249 /* queue the packet */
1250 if (wl
->bss_type
== BSS_TYPE_AP_BSS
) {
1251 wl1271_debug(DEBUG_TX
, "queue skb hlid %d q %d", hlid
, q
);
1252 skb_queue_tail(&wl
->links
[hlid
].tx_queue
[q
], skb
);
1254 skb_queue_tail(&wl
->tx_queue
[q
], skb
);
1258 * The chip specific setup must run before the first TX packet -
1259 * before that, the tx_work will not be initialized!
1262 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
) &&
1263 !test_bit(WL1271_FLAG_TX_PENDING
, &wl
->flags
))
1264 ieee80211_queue_work(wl
->hw
, &wl
->tx_work
);
1266 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
1269 int wl1271_tx_dummy_packet(struct wl1271
*wl
)
1271 unsigned long flags
;
1273 spin_lock_irqsave(&wl
->wl_lock
, flags
);
1274 set_bit(WL1271_FLAG_DUMMY_PACKET_PENDING
, &wl
->flags
);
1275 wl
->tx_queue_count
++;
1276 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
1278 /* The FW is low on RX memory blocks, so send the dummy packet asap */
1279 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
))
1280 wl1271_tx_work_locked(wl
);
1283 * If the FW TX is busy, TX work will be scheduled by the threaded
1284 * interrupt handler function
1290 * The size of the dummy packet should be at least 1400 bytes. However, in
1291 * order to minimize the number of bus transactions, aligning it to 512 bytes
1292 * boundaries could be beneficial, performance wise
1294 #define TOTAL_TX_DUMMY_PACKET_SIZE (ALIGN(1400, 512))
1296 static struct sk_buff
*wl12xx_alloc_dummy_packet(struct wl1271
*wl
)
1298 struct sk_buff
*skb
;
1299 struct ieee80211_hdr_3addr
*hdr
;
1300 unsigned int dummy_packet_size
;
1302 dummy_packet_size
= TOTAL_TX_DUMMY_PACKET_SIZE
-
1303 sizeof(struct wl1271_tx_hw_descr
) - sizeof(*hdr
);
1305 skb
= dev_alloc_skb(TOTAL_TX_DUMMY_PACKET_SIZE
);
1307 wl1271_warning("Failed to allocate a dummy packet skb");
1311 skb_reserve(skb
, sizeof(struct wl1271_tx_hw_descr
));
1313 hdr
= (struct ieee80211_hdr_3addr
*) skb_put(skb
, sizeof(*hdr
));
1314 memset(hdr
, 0, sizeof(*hdr
));
1315 hdr
->frame_control
= cpu_to_le16(IEEE80211_FTYPE_DATA
|
1316 IEEE80211_STYPE_NULLFUNC
|
1317 IEEE80211_FCTL_TODS
);
1319 memset(skb_put(skb
, dummy_packet_size
), 0, dummy_packet_size
);
1321 /* Dummy packets require the TID to be management */
1322 skb
->priority
= WL1271_TID_MGMT
;
1324 /* Initialize all fields that might be used */
1325 skb_set_queue_mapping(skb
, 0);
1326 memset(IEEE80211_SKB_CB(skb
), 0, sizeof(struct ieee80211_tx_info
));
1332 static struct notifier_block wl1271_dev_notifier
= {
1333 .notifier_call
= wl1271_dev_notify
,
1336 static int wl1271_op_start(struct ieee80211_hw
*hw
)
1338 wl1271_debug(DEBUG_MAC80211
, "mac80211 start");
1341 * We have to delay the booting of the hardware because
1342 * we need to know the local MAC address before downloading and
1343 * initializing the firmware. The MAC address cannot be changed
1344 * after boot, and without the proper MAC address, the firmware
1345 * will not function properly.
1347 * The MAC address is first known when the corresponding interface
1348 * is added. That is where we will initialize the hardware.
1350 * In addition, we currently have different firmwares for AP and managed
1351 * operation. We will know which to boot according to interface type.
1357 static void wl1271_op_stop(struct ieee80211_hw
*hw
)
1359 wl1271_debug(DEBUG_MAC80211
, "mac80211 stop");
1362 static int wl1271_op_add_interface(struct ieee80211_hw
*hw
,
1363 struct ieee80211_vif
*vif
)
1365 struct wl1271
*wl
= hw
->priv
;
1366 struct wiphy
*wiphy
= hw
->wiphy
;
1367 int retries
= WL1271_BOOT_RETRIES
;
1369 bool booted
= false;
1371 wl1271_debug(DEBUG_MAC80211
, "mac80211 add interface type %d mac %pM",
1372 vif
->type
, vif
->addr
);
1374 mutex_lock(&wl
->mutex
);
1376 wl1271_debug(DEBUG_MAC80211
,
1377 "multiple vifs are not supported yet");
1383 * in some very corner case HW recovery scenarios its possible to
1384 * get here before __wl1271_op_remove_interface is complete, so
1385 * opt out if that is the case.
1387 if (test_bit(WL1271_FLAG_IF_INITIALIZED
, &wl
->flags
)) {
1392 switch (vif
->type
) {
1393 case NL80211_IFTYPE_STATION
:
1394 wl
->bss_type
= BSS_TYPE_STA_BSS
;
1395 wl
->set_bss_type
= BSS_TYPE_STA_BSS
;
1397 case NL80211_IFTYPE_ADHOC
:
1398 wl
->bss_type
= BSS_TYPE_IBSS
;
1399 wl
->set_bss_type
= BSS_TYPE_STA_BSS
;
1401 case NL80211_IFTYPE_AP
:
1402 wl
->bss_type
= BSS_TYPE_AP_BSS
;
1409 memcpy(wl
->mac_addr
, vif
->addr
, ETH_ALEN
);
1411 if (wl
->state
!= WL1271_STATE_OFF
) {
1412 wl1271_error("cannot start because not in off state: %d",
1420 ret
= wl1271_chip_wakeup(wl
);
1424 ret
= wl1271_boot(wl
);
1428 ret
= wl1271_hw_init(wl
);
1436 mutex_unlock(&wl
->mutex
);
1437 /* Unlocking the mutex in the middle of handling is
1438 inherently unsafe. In this case we deem it safe to do,
1439 because we need to let any possibly pending IRQ out of
1440 the system (and while we are WL1271_STATE_OFF the IRQ
1441 work function will not do anything.) Also, any other
1442 possible concurrent operations will fail due to the
1443 current state, hence the wl1271 struct should be safe. */
1444 wl1271_disable_interrupts(wl
);
1445 wl1271_flush_deferred_work(wl
);
1446 cancel_work_sync(&wl
->netstack_work
);
1447 mutex_lock(&wl
->mutex
);
1449 wl1271_power_off(wl
);
1453 wl1271_error("firmware boot failed despite %d retries",
1454 WL1271_BOOT_RETRIES
);
1459 wl
->state
= WL1271_STATE_ON
;
1460 set_bit(WL1271_FLAG_IF_INITIALIZED
, &wl
->flags
);
1461 wl1271_info("firmware booted (%s)", wl
->chip
.fw_ver_str
);
1463 /* update hw/fw version info in wiphy struct */
1464 wiphy
->hw_version
= wl
->chip
.id
;
1465 strncpy(wiphy
->fw_version
, wl
->chip
.fw_ver_str
,
1466 sizeof(wiphy
->fw_version
));
1468 /* Check if any quirks are needed with older fw versions */
1469 wl
->quirks
|= wl1271_get_fw_ver_quirks(wl
);
1472 * Now we know if 11a is supported (info from the NVS), so disable
1473 * 11a channels if not supported
1475 if (!wl
->enable_11a
)
1476 wiphy
->bands
[IEEE80211_BAND_5GHZ
]->n_channels
= 0;
1478 wl1271_debug(DEBUG_MAC80211
, "11a is %ssupported",
1479 wl
->enable_11a
? "" : "not ");
1482 mutex_unlock(&wl
->mutex
);
1484 mutex_lock(&wl_list_mutex
);
1486 list_add(&wl
->list
, &wl_list
);
1487 mutex_unlock(&wl_list_mutex
);
1492 static void __wl1271_op_remove_interface(struct wl1271
*wl
,
1493 bool reset_tx_queues
)
1497 wl1271_debug(DEBUG_MAC80211
, "mac80211 remove interface");
1499 /* because of hardware recovery, we may get here twice */
1500 if (wl
->state
!= WL1271_STATE_ON
)
1503 wl1271_info("down");
1505 mutex_lock(&wl_list_mutex
);
1506 list_del(&wl
->list
);
1507 mutex_unlock(&wl_list_mutex
);
1509 /* enable dyn ps just in case (if left on due to fw crash etc) */
1510 if (wl
->bss_type
== BSS_TYPE_STA_BSS
)
1511 ieee80211_enable_dyn_ps(wl
->vif
);
1513 if (wl
->scan
.state
!= WL1271_SCAN_STATE_IDLE
) {
1514 wl
->scan
.state
= WL1271_SCAN_STATE_IDLE
;
1515 memset(wl
->scan
.scanned_ch
, 0, sizeof(wl
->scan
.scanned_ch
));
1516 wl
->scan
.req
= NULL
;
1517 ieee80211_scan_completed(wl
->hw
, true);
1521 * this must be before the cancel_work calls below, so that the work
1522 * functions don't perform further work.
1524 wl
->state
= WL1271_STATE_OFF
;
1526 mutex_unlock(&wl
->mutex
);
1528 wl1271_disable_interrupts(wl
);
1529 wl1271_flush_deferred_work(wl
);
1530 cancel_delayed_work_sync(&wl
->scan_complete_work
);
1531 cancel_work_sync(&wl
->netstack_work
);
1532 cancel_work_sync(&wl
->tx_work
);
1533 cancel_delayed_work_sync(&wl
->pspoll_work
);
1534 cancel_delayed_work_sync(&wl
->elp_work
);
1536 mutex_lock(&wl
->mutex
);
1538 /* let's notify MAC80211 about the remaining pending TX frames */
1539 wl1271_tx_reset(wl
, reset_tx_queues
);
1540 wl1271_power_off(wl
);
1542 memset(wl
->bssid
, 0, ETH_ALEN
);
1543 memset(wl
->ssid
, 0, IW_ESSID_MAX_SIZE
+ 1);
1545 wl
->bss_type
= MAX_BSS_TYPE
;
1546 wl
->set_bss_type
= MAX_BSS_TYPE
;
1547 wl
->band
= IEEE80211_BAND_2GHZ
;
1550 wl
->psm_entry_retry
= 0;
1551 wl
->power_level
= WL1271_DEFAULT_POWER_LEVEL
;
1552 wl
->tx_blocks_available
= 0;
1553 wl
->tx_allocated_blocks
= 0;
1554 wl
->tx_results_count
= 0;
1555 wl
->tx_packets_count
= 0;
1556 wl
->tx_security_last_seq
= 0;
1557 wl
->tx_security_seq
= 0;
1558 wl
->time_offset
= 0;
1559 wl
->session_counter
= 0;
1560 wl
->rate_set
= CONF_TX_RATE_MASK_BASIC
;
1563 wl1271_free_ap_keys(wl
);
1564 memset(wl
->ap_hlid_map
, 0, sizeof(wl
->ap_hlid_map
));
1565 wl
->ap_fw_ps_map
= 0;
1569 * this is performed after the cancel_work calls and the associated
1570 * mutex_lock, so that wl1271_op_add_interface does not accidentally
1571 * get executed before all these vars have been reset.
1575 for (i
= 0; i
< NUM_TX_QUEUES
; i
++)
1576 wl
->tx_blocks_freed
[i
] = 0;
1578 wl1271_debugfs_reset(wl
);
1580 kfree(wl
->fw_status
);
1581 wl
->fw_status
= NULL
;
1582 kfree(wl
->tx_res_if
);
1583 wl
->tx_res_if
= NULL
;
1584 kfree(wl
->target_mem_map
);
1585 wl
->target_mem_map
= NULL
;
1588 static void wl1271_op_remove_interface(struct ieee80211_hw
*hw
,
1589 struct ieee80211_vif
*vif
)
1591 struct wl1271
*wl
= hw
->priv
;
1593 mutex_lock(&wl
->mutex
);
1595 * wl->vif can be null here if someone shuts down the interface
1596 * just when hardware recovery has been started.
1599 WARN_ON(wl
->vif
!= vif
);
1600 __wl1271_op_remove_interface(wl
, true);
1603 mutex_unlock(&wl
->mutex
);
1604 cancel_work_sync(&wl
->recovery_work
);
1607 void wl1271_configure_filters(struct wl1271
*wl
, unsigned int filters
)
1609 wl1271_set_default_filters(wl
);
1611 /* combine requested filters with current filter config */
1612 filters
= wl
->filters
| filters
;
1614 wl1271_debug(DEBUG_FILTERS
, "RX filters set: ");
1616 if (filters
& FIF_PROMISC_IN_BSS
) {
1617 wl1271_debug(DEBUG_FILTERS
, " - FIF_PROMISC_IN_BSS");
1618 wl
->rx_config
&= ~CFG_UNI_FILTER_EN
;
1619 wl
->rx_config
|= CFG_BSSID_FILTER_EN
;
1621 if (filters
& FIF_BCN_PRBRESP_PROMISC
) {
1622 wl1271_debug(DEBUG_FILTERS
, " - FIF_BCN_PRBRESP_PROMISC");
1623 wl
->rx_config
&= ~CFG_BSSID_FILTER_EN
;
1624 wl
->rx_config
&= ~CFG_SSID_FILTER_EN
;
1626 if (filters
& FIF_OTHER_BSS
) {
1627 wl1271_debug(DEBUG_FILTERS
, " - FIF_OTHER_BSS");
1628 wl
->rx_config
&= ~CFG_BSSID_FILTER_EN
;
1630 if (filters
& FIF_CONTROL
) {
1631 wl1271_debug(DEBUG_FILTERS
, " - FIF_CONTROL");
1632 wl
->rx_filter
|= CFG_RX_CTL_EN
;
1634 if (filters
& FIF_FCSFAIL
) {
1635 wl1271_debug(DEBUG_FILTERS
, " - FIF_FCSFAIL");
1636 wl
->rx_filter
|= CFG_RX_FCS_ERROR
;
1640 static int wl1271_dummy_join(struct wl1271
*wl
)
1643 /* we need to use a dummy BSSID for now */
1644 static const u8 dummy_bssid
[ETH_ALEN
] = { 0x0b, 0xad, 0xde,
1647 memcpy(wl
->bssid
, dummy_bssid
, ETH_ALEN
);
1649 /* pass through frames from all BSS */
1650 wl1271_configure_filters(wl
, FIF_OTHER_BSS
);
1652 ret
= wl1271_cmd_join(wl
, wl
->set_bss_type
);
1656 set_bit(WL1271_FLAG_JOINED
, &wl
->flags
);
1662 static int wl1271_join(struct wl1271
*wl
, bool set_assoc
)
1667 * One of the side effects of the JOIN command is that is clears
1668 * WPA/WPA2 keys from the chipset. Performing a JOIN while associated
1669 * to a WPA/WPA2 access point will therefore kill the data-path.
1670 * Currently the only valid scenario for JOIN during association
1671 * is on roaming, in which case we will also be given new keys.
1672 * Keep the below message for now, unless it starts bothering
1673 * users who really like to roam a lot :)
1675 if (test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
1676 wl1271_info("JOIN while associated.");
1679 set_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
);
1681 ret
= wl1271_cmd_join(wl
, wl
->set_bss_type
);
1685 set_bit(WL1271_FLAG_JOINED
, &wl
->flags
);
1687 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
1691 * The join command disable the keep-alive mode, shut down its process,
1692 * and also clear the template config, so we need to reset it all after
1693 * the join. The acx_aid starts the keep-alive process, and the order
1694 * of the commands below is relevant.
1696 ret
= wl1271_acx_keep_alive_mode(wl
, true);
1700 ret
= wl1271_acx_aid(wl
, wl
->aid
);
1704 ret
= wl1271_cmd_build_klv_null_data(wl
);
1708 ret
= wl1271_acx_keep_alive_config(wl
, CMD_TEMPL_KLV_IDX_NULL_DATA
,
1709 ACX_KEEP_ALIVE_TPL_VALID
);
1717 static int wl1271_unjoin(struct wl1271
*wl
)
1721 /* to stop listening to a channel, we disconnect */
1722 ret
= wl1271_cmd_disconnect(wl
);
1726 clear_bit(WL1271_FLAG_JOINED
, &wl
->flags
);
1727 memset(wl
->bssid
, 0, ETH_ALEN
);
1729 /* stop filtering packets based on bssid */
1730 wl1271_configure_filters(wl
, FIF_OTHER_BSS
);
1736 static void wl1271_set_band_rate(struct wl1271
*wl
)
1738 if (wl
->band
== IEEE80211_BAND_2GHZ
)
1739 wl
->basic_rate_set
= wl
->conf
.tx
.basic_rate
;
1741 wl
->basic_rate_set
= wl
->conf
.tx
.basic_rate_5
;
1744 static int wl1271_sta_handle_idle(struct wl1271
*wl
, bool idle
)
1749 if (test_bit(WL1271_FLAG_JOINED
, &wl
->flags
)) {
1750 ret
= wl1271_unjoin(wl
);
1754 wl
->rate_set
= wl1271_tx_min_rate_get(wl
);
1755 ret
= wl1271_acx_sta_rate_policies(wl
);
1758 ret
= wl1271_acx_keep_alive_config(
1759 wl
, CMD_TEMPL_KLV_IDX_NULL_DATA
,
1760 ACX_KEEP_ALIVE_TPL_INVALID
);
1763 set_bit(WL1271_FLAG_IDLE
, &wl
->flags
);
1765 /* increment the session counter */
1766 wl
->session_counter
++;
1767 if (wl
->session_counter
>= SESSION_COUNTER_MAX
)
1768 wl
->session_counter
= 0;
1769 ret
= wl1271_dummy_join(wl
);
1772 clear_bit(WL1271_FLAG_IDLE
, &wl
->flags
);
1779 static int wl1271_op_config(struct ieee80211_hw
*hw
, u32 changed
)
1781 struct wl1271
*wl
= hw
->priv
;
1782 struct ieee80211_conf
*conf
= &hw
->conf
;
1783 int channel
, ret
= 0;
1786 channel
= ieee80211_frequency_to_channel(conf
->channel
->center_freq
);
1788 wl1271_debug(DEBUG_MAC80211
, "mac80211 config ch %d psm %s power %d %s"
1791 conf
->flags
& IEEE80211_CONF_PS
? "on" : "off",
1793 conf
->flags
& IEEE80211_CONF_IDLE
? "idle" : "in use",
1797 * mac80211 will go to idle nearly immediately after transmitting some
1798 * frames, such as the deauth. To make sure those frames reach the air,
1799 * wait here until the TX queue is fully flushed.
1801 if ((changed
& IEEE80211_CONF_CHANGE_IDLE
) &&
1802 (conf
->flags
& IEEE80211_CONF_IDLE
))
1803 wl1271_tx_flush(wl
);
1805 mutex_lock(&wl
->mutex
);
1807 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
1808 /* we support configuring the channel and band while off */
1809 if ((changed
& IEEE80211_CONF_CHANGE_CHANNEL
)) {
1810 wl
->band
= conf
->channel
->band
;
1811 wl
->channel
= channel
;
1817 is_ap
= (wl
->bss_type
== BSS_TYPE_AP_BSS
);
1819 ret
= wl1271_ps_elp_wakeup(wl
);
1823 /* if the channel changes while joined, join again */
1824 if (changed
& IEEE80211_CONF_CHANGE_CHANNEL
&&
1825 ((wl
->band
!= conf
->channel
->band
) ||
1826 (wl
->channel
!= channel
))) {
1827 wl
->band
= conf
->channel
->band
;
1828 wl
->channel
= channel
;
1832 * FIXME: the mac80211 should really provide a fixed
1833 * rate to use here. for now, just use the smallest
1834 * possible rate for the band as a fixed rate for
1835 * association frames and other control messages.
1837 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
1838 wl1271_set_band_rate(wl
);
1840 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
1841 ret
= wl1271_acx_sta_rate_policies(wl
);
1843 wl1271_warning("rate policy for channel "
1846 if (test_bit(WL1271_FLAG_JOINED
, &wl
->flags
)) {
1847 ret
= wl1271_join(wl
, false);
1849 wl1271_warning("cmd join on channel "
1855 if (changed
& IEEE80211_CONF_CHANGE_IDLE
&& !is_ap
) {
1856 ret
= wl1271_sta_handle_idle(wl
,
1857 conf
->flags
& IEEE80211_CONF_IDLE
);
1859 wl1271_warning("idle mode change failed %d", ret
);
1863 * if mac80211 changes the PSM mode, make sure the mode is not
1864 * incorrectly changed after the pspoll failure active window.
1866 if (changed
& IEEE80211_CONF_CHANGE_PS
)
1867 clear_bit(WL1271_FLAG_PSPOLL_FAILURE
, &wl
->flags
);
1869 if (conf
->flags
& IEEE80211_CONF_PS
&&
1870 !test_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
)) {
1871 set_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
);
1874 * We enter PSM only if we're already associated.
1875 * If we're not, we'll enter it when joining an SSID,
1876 * through the bss_info_changed() hook.
1878 if (test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
)) {
1879 wl1271_debug(DEBUG_PSM
, "psm enabled");
1880 ret
= wl1271_ps_set_mode(wl
, STATION_POWER_SAVE_MODE
,
1881 wl
->basic_rate
, true);
1883 } else if (!(conf
->flags
& IEEE80211_CONF_PS
) &&
1884 test_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
)) {
1885 wl1271_debug(DEBUG_PSM
, "psm disabled");
1887 clear_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
);
1889 if (test_bit(WL1271_FLAG_PSM
, &wl
->flags
))
1890 ret
= wl1271_ps_set_mode(wl
, STATION_ACTIVE_MODE
,
1891 wl
->basic_rate
, true);
1894 if (conf
->power_level
!= wl
->power_level
) {
1895 ret
= wl1271_acx_tx_power(wl
, conf
->power_level
);
1899 wl
->power_level
= conf
->power_level
;
1903 wl1271_ps_elp_sleep(wl
);
1906 mutex_unlock(&wl
->mutex
);
1911 struct wl1271_filter_params
{
1914 u8 mc_list
[ACX_MC_ADDRESS_GROUP_MAX
][ETH_ALEN
];
1917 static u64
wl1271_op_prepare_multicast(struct ieee80211_hw
*hw
,
1918 struct netdev_hw_addr_list
*mc_list
)
1920 struct wl1271_filter_params
*fp
;
1921 struct netdev_hw_addr
*ha
;
1922 struct wl1271
*wl
= hw
->priv
;
1924 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
1927 fp
= kzalloc(sizeof(*fp
), GFP_ATOMIC
);
1929 wl1271_error("Out of memory setting filters.");
1933 /* update multicast filtering parameters */
1934 fp
->mc_list_length
= 0;
1935 if (netdev_hw_addr_list_count(mc_list
) > ACX_MC_ADDRESS_GROUP_MAX
) {
1936 fp
->enabled
= false;
1939 netdev_hw_addr_list_for_each(ha
, mc_list
) {
1940 memcpy(fp
->mc_list
[fp
->mc_list_length
],
1941 ha
->addr
, ETH_ALEN
);
1942 fp
->mc_list_length
++;
1946 return (u64
)(unsigned long)fp
;
1949 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
1952 FIF_BCN_PRBRESP_PROMISC | \
1956 static void wl1271_op_configure_filter(struct ieee80211_hw
*hw
,
1957 unsigned int changed
,
1958 unsigned int *total
, u64 multicast
)
1960 struct wl1271_filter_params
*fp
= (void *)(unsigned long)multicast
;
1961 struct wl1271
*wl
= hw
->priv
;
1964 wl1271_debug(DEBUG_MAC80211
, "mac80211 configure filter changed %x"
1965 " total %x", changed
, *total
);
1967 mutex_lock(&wl
->mutex
);
1969 *total
&= WL1271_SUPPORTED_FILTERS
;
1970 changed
&= WL1271_SUPPORTED_FILTERS
;
1972 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
1975 ret
= wl1271_ps_elp_wakeup(wl
);
1979 if (wl
->bss_type
!= BSS_TYPE_AP_BSS
) {
1980 if (*total
& FIF_ALLMULTI
)
1981 ret
= wl1271_acx_group_address_tbl(wl
, false, NULL
, 0);
1983 ret
= wl1271_acx_group_address_tbl(wl
, fp
->enabled
,
1985 fp
->mc_list_length
);
1990 /* determine, whether supported filter values have changed */
1994 /* configure filters */
1995 wl
->filters
= *total
;
1996 wl1271_configure_filters(wl
, 0);
1998 /* apply configured filters */
1999 ret
= wl1271_acx_rx_config(wl
, wl
->rx_config
, wl
->rx_filter
);
2004 wl1271_ps_elp_sleep(wl
);
2007 mutex_unlock(&wl
->mutex
);
2011 static int wl1271_record_ap_key(struct wl1271
*wl
, u8 id
, u8 key_type
,
2012 u8 key_size
, const u8
*key
, u8 hlid
, u32 tx_seq_32
,
2015 struct wl1271_ap_key
*ap_key
;
2018 wl1271_debug(DEBUG_CRYPT
, "record ap key id %d", (int)id
);
2020 if (key_size
> MAX_KEY_SIZE
)
2024 * Find next free entry in ap_keys. Also check we are not replacing
2027 for (i
= 0; i
< MAX_NUM_KEYS
; i
++) {
2028 if (wl
->recorded_ap_keys
[i
] == NULL
)
2031 if (wl
->recorded_ap_keys
[i
]->id
== id
) {
2032 wl1271_warning("trying to record key replacement");
2037 if (i
== MAX_NUM_KEYS
)
2040 ap_key
= kzalloc(sizeof(*ap_key
), GFP_KERNEL
);
2045 ap_key
->key_type
= key_type
;
2046 ap_key
->key_size
= key_size
;
2047 memcpy(ap_key
->key
, key
, key_size
);
2048 ap_key
->hlid
= hlid
;
2049 ap_key
->tx_seq_32
= tx_seq_32
;
2050 ap_key
->tx_seq_16
= tx_seq_16
;
2052 wl
->recorded_ap_keys
[i
] = ap_key
;
2056 static void wl1271_free_ap_keys(struct wl1271
*wl
)
2060 for (i
= 0; i
< MAX_NUM_KEYS
; i
++) {
2061 kfree(wl
->recorded_ap_keys
[i
]);
2062 wl
->recorded_ap_keys
[i
] = NULL
;
2066 static int wl1271_ap_init_hwenc(struct wl1271
*wl
)
2069 struct wl1271_ap_key
*key
;
2070 bool wep_key_added
= false;
2072 for (i
= 0; i
< MAX_NUM_KEYS
; i
++) {
2073 if (wl
->recorded_ap_keys
[i
] == NULL
)
2076 key
= wl
->recorded_ap_keys
[i
];
2077 ret
= wl1271_cmd_set_ap_key(wl
, KEY_ADD_OR_REPLACE
,
2078 key
->id
, key
->key_type
,
2079 key
->key_size
, key
->key
,
2080 key
->hlid
, key
->tx_seq_32
,
2085 if (key
->key_type
== KEY_WEP
)
2086 wep_key_added
= true;
2089 if (wep_key_added
) {
2090 ret
= wl1271_cmd_set_ap_default_wep_key(wl
, wl
->default_key
);
2096 wl1271_free_ap_keys(wl
);
2100 static int wl1271_set_key(struct wl1271
*wl
, u16 action
, u8 id
, u8 key_type
,
2101 u8 key_size
, const u8
*key
, u32 tx_seq_32
,
2102 u16 tx_seq_16
, struct ieee80211_sta
*sta
)
2105 bool is_ap
= (wl
->bss_type
== BSS_TYPE_AP_BSS
);
2108 struct wl1271_station
*wl_sta
;
2112 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
2113 hlid
= wl_sta
->hlid
;
2115 hlid
= WL1271_AP_BROADCAST_HLID
;
2118 if (!test_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
)) {
2120 * We do not support removing keys after AP shutdown.
2121 * Pretend we do to make mac80211 happy.
2123 if (action
!= KEY_ADD_OR_REPLACE
)
2126 ret
= wl1271_record_ap_key(wl
, id
,
2128 key
, hlid
, tx_seq_32
,
2131 ret
= wl1271_cmd_set_ap_key(wl
, action
,
2132 id
, key_type
, key_size
,
2133 key
, hlid
, tx_seq_32
,
2141 static const u8 bcast_addr
[ETH_ALEN
] = {
2142 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
2145 addr
= sta
? sta
->addr
: bcast_addr
;
2147 if (is_zero_ether_addr(addr
)) {
2148 /* We dont support TX only encryption */
2152 /* The wl1271 does not allow to remove unicast keys - they
2153 will be cleared automatically on next CMD_JOIN. Ignore the
2154 request silently, as we dont want the mac80211 to emit
2155 an error message. */
2156 if (action
== KEY_REMOVE
&& !is_broadcast_ether_addr(addr
))
2159 ret
= wl1271_cmd_set_sta_key(wl
, action
,
2160 id
, key_type
, key_size
,
2161 key
, addr
, tx_seq_32
,
2166 /* the default WEP key needs to be configured at least once */
2167 if (key_type
== KEY_WEP
) {
2168 ret
= wl1271_cmd_set_sta_default_wep_key(wl
,
2178 static int wl1271_op_set_key(struct ieee80211_hw
*hw
, enum set_key_cmd cmd
,
2179 struct ieee80211_vif
*vif
,
2180 struct ieee80211_sta
*sta
,
2181 struct ieee80211_key_conf
*key_conf
)
2183 struct wl1271
*wl
= hw
->priv
;
2189 wl1271_debug(DEBUG_MAC80211
, "mac80211 set key");
2191 wl1271_debug(DEBUG_CRYPT
, "CMD: 0x%x sta: %p", cmd
, sta
);
2192 wl1271_debug(DEBUG_CRYPT
, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
2193 key_conf
->cipher
, key_conf
->keyidx
,
2194 key_conf
->keylen
, key_conf
->flags
);
2195 wl1271_dump(DEBUG_CRYPT
, "KEY: ", key_conf
->key
, key_conf
->keylen
);
2197 mutex_lock(&wl
->mutex
);
2199 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
2204 ret
= wl1271_ps_elp_wakeup(wl
);
2208 switch (key_conf
->cipher
) {
2209 case WLAN_CIPHER_SUITE_WEP40
:
2210 case WLAN_CIPHER_SUITE_WEP104
:
2213 key_conf
->hw_key_idx
= key_conf
->keyidx
;
2215 case WLAN_CIPHER_SUITE_TKIP
:
2216 key_type
= KEY_TKIP
;
2218 key_conf
->hw_key_idx
= key_conf
->keyidx
;
2219 tx_seq_32
= WL1271_TX_SECURITY_HI32(wl
->tx_security_seq
);
2220 tx_seq_16
= WL1271_TX_SECURITY_LO16(wl
->tx_security_seq
);
2222 case WLAN_CIPHER_SUITE_CCMP
:
2225 key_conf
->flags
|= IEEE80211_KEY_FLAG_GENERATE_IV
;
2226 tx_seq_32
= WL1271_TX_SECURITY_HI32(wl
->tx_security_seq
);
2227 tx_seq_16
= WL1271_TX_SECURITY_LO16(wl
->tx_security_seq
);
2229 case WL1271_CIPHER_SUITE_GEM
:
2231 tx_seq_32
= WL1271_TX_SECURITY_HI32(wl
->tx_security_seq
);
2232 tx_seq_16
= WL1271_TX_SECURITY_LO16(wl
->tx_security_seq
);
2235 wl1271_error("Unknown key algo 0x%x", key_conf
->cipher
);
2243 ret
= wl1271_set_key(wl
, KEY_ADD_OR_REPLACE
,
2244 key_conf
->keyidx
, key_type
,
2245 key_conf
->keylen
, key_conf
->key
,
2246 tx_seq_32
, tx_seq_16
, sta
);
2248 wl1271_error("Could not add or replace key");
2254 ret
= wl1271_set_key(wl
, KEY_REMOVE
,
2255 key_conf
->keyidx
, key_type
,
2256 key_conf
->keylen
, key_conf
->key
,
2259 wl1271_error("Could not remove key");
2265 wl1271_error("Unsupported key cmd 0x%x", cmd
);
2271 wl1271_ps_elp_sleep(wl
);
2274 mutex_unlock(&wl
->mutex
);
2279 static int wl1271_op_hw_scan(struct ieee80211_hw
*hw
,
2280 struct ieee80211_vif
*vif
,
2281 struct cfg80211_scan_request
*req
)
2283 struct wl1271
*wl
= hw
->priv
;
2288 wl1271_debug(DEBUG_MAC80211
, "mac80211 hw scan");
2291 ssid
= req
->ssids
[0].ssid
;
2292 len
= req
->ssids
[0].ssid_len
;
2295 mutex_lock(&wl
->mutex
);
2297 if (wl
->state
== WL1271_STATE_OFF
) {
2299 * We cannot return -EBUSY here because cfg80211 will expect
2300 * a call to ieee80211_scan_completed if we do - in this case
2301 * there won't be any call.
2307 ret
= wl1271_ps_elp_wakeup(wl
);
2311 ret
= wl1271_scan(hw
->priv
, ssid
, len
, req
);
2313 wl1271_ps_elp_sleep(wl
);
2316 mutex_unlock(&wl
->mutex
);
2321 static int wl1271_op_set_frag_threshold(struct ieee80211_hw
*hw
, u32 value
)
2323 struct wl1271
*wl
= hw
->priv
;
2326 mutex_lock(&wl
->mutex
);
2328 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
2333 ret
= wl1271_ps_elp_wakeup(wl
);
2337 ret
= wl1271_acx_frag_threshold(wl
, value
);
2339 wl1271_warning("wl1271_op_set_frag_threshold failed: %d", ret
);
2341 wl1271_ps_elp_sleep(wl
);
2344 mutex_unlock(&wl
->mutex
);
2349 static int wl1271_op_set_rts_threshold(struct ieee80211_hw
*hw
, u32 value
)
2351 struct wl1271
*wl
= hw
->priv
;
2354 mutex_lock(&wl
->mutex
);
2356 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
2361 ret
= wl1271_ps_elp_wakeup(wl
);
2365 ret
= wl1271_acx_rts_threshold(wl
, value
);
2367 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret
);
2369 wl1271_ps_elp_sleep(wl
);
2372 mutex_unlock(&wl
->mutex
);
2377 static int wl1271_ssid_set(struct wl1271
*wl
, struct sk_buff
*skb
,
2380 u8
*ptr
= skb
->data
+ offset
;
2382 /* find the location of the ssid in the beacon */
2383 while (ptr
< skb
->data
+ skb
->len
) {
2384 if (ptr
[0] == WLAN_EID_SSID
) {
2385 wl
->ssid_len
= ptr
[1];
2386 memcpy(wl
->ssid
, ptr
+2, wl
->ssid_len
);
2389 ptr
+= (ptr
[1] + 2);
2392 wl1271_error("No SSID in IEs!\n");
2396 static int wl1271_bss_erp_info_changed(struct wl1271
*wl
,
2397 struct ieee80211_bss_conf
*bss_conf
,
2402 if (changed
& BSS_CHANGED_ERP_SLOT
) {
2403 if (bss_conf
->use_short_slot
)
2404 ret
= wl1271_acx_slot(wl
, SLOT_TIME_SHORT
);
2406 ret
= wl1271_acx_slot(wl
, SLOT_TIME_LONG
);
2408 wl1271_warning("Set slot time failed %d", ret
);
2413 if (changed
& BSS_CHANGED_ERP_PREAMBLE
) {
2414 if (bss_conf
->use_short_preamble
)
2415 wl1271_acx_set_preamble(wl
, ACX_PREAMBLE_SHORT
);
2417 wl1271_acx_set_preamble(wl
, ACX_PREAMBLE_LONG
);
2420 if (changed
& BSS_CHANGED_ERP_CTS_PROT
) {
2421 if (bss_conf
->use_cts_prot
)
2422 ret
= wl1271_acx_cts_protect(wl
, CTSPROTECT_ENABLE
);
2424 ret
= wl1271_acx_cts_protect(wl
, CTSPROTECT_DISABLE
);
2426 wl1271_warning("Set ctsprotect failed %d", ret
);
2435 static int wl1271_bss_beacon_info_changed(struct wl1271
*wl
,
2436 struct ieee80211_vif
*vif
,
2437 struct ieee80211_bss_conf
*bss_conf
,
2440 bool is_ap
= (wl
->bss_type
== BSS_TYPE_AP_BSS
);
2443 if ((changed
& BSS_CHANGED_BEACON_INT
)) {
2444 wl1271_debug(DEBUG_MASTER
, "beacon interval updated: %d",
2445 bss_conf
->beacon_int
);
2447 wl
->beacon_int
= bss_conf
->beacon_int
;
2450 if ((changed
& BSS_CHANGED_BEACON
)) {
2451 struct ieee80211_hdr
*hdr
;
2452 int ieoffset
= offsetof(struct ieee80211_mgmt
,
2454 struct sk_buff
*beacon
= ieee80211_beacon_get(wl
->hw
, vif
);
2460 wl1271_debug(DEBUG_MASTER
, "beacon updated");
2462 ret
= wl1271_ssid_set(wl
, beacon
, ieoffset
);
2464 dev_kfree_skb(beacon
);
2467 tmpl_id
= is_ap
? CMD_TEMPL_AP_BEACON
:
2469 ret
= wl1271_cmd_template_set(wl
, tmpl_id
,
2472 wl1271_tx_min_rate_get(wl
));
2474 dev_kfree_skb(beacon
);
2478 hdr
= (struct ieee80211_hdr
*) beacon
->data
;
2479 hdr
->frame_control
= cpu_to_le16(IEEE80211_FTYPE_MGMT
|
2480 IEEE80211_STYPE_PROBE_RESP
);
2482 tmpl_id
= is_ap
? CMD_TEMPL_AP_PROBE_RESPONSE
:
2483 CMD_TEMPL_PROBE_RESPONSE
;
2484 ret
= wl1271_cmd_template_set(wl
,
2488 wl1271_tx_min_rate_get(wl
));
2489 dev_kfree_skb(beacon
);
2498 /* AP mode changes */
2499 static void wl1271_bss_info_changed_ap(struct wl1271
*wl
,
2500 struct ieee80211_vif
*vif
,
2501 struct ieee80211_bss_conf
*bss_conf
,
2506 if ((changed
& BSS_CHANGED_BASIC_RATES
)) {
2507 u32 rates
= bss_conf
->basic_rates
;
2509 wl
->basic_rate_set
= wl1271_tx_enabled_rates_get(wl
, rates
);
2510 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
2512 ret
= wl1271_init_ap_rates(wl
);
2514 wl1271_error("AP rate policy change failed %d", ret
);
2518 ret
= wl1271_ap_init_templates(wl
);
2523 ret
= wl1271_bss_beacon_info_changed(wl
, vif
, bss_conf
, changed
);
2527 if ((changed
& BSS_CHANGED_BEACON_ENABLED
)) {
2528 if (bss_conf
->enable_beacon
) {
2529 if (!test_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
)) {
2530 ret
= wl1271_cmd_start_bss(wl
);
2534 set_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
);
2535 wl1271_debug(DEBUG_AP
, "started AP");
2537 ret
= wl1271_ap_init_hwenc(wl
);
2542 if (test_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
)) {
2543 ret
= wl1271_cmd_stop_bss(wl
);
2547 clear_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
);
2548 wl1271_debug(DEBUG_AP
, "stopped AP");
2553 if (changed
& BSS_CHANGED_IBSS
) {
2554 wl1271_debug(DEBUG_ADHOC
, "ibss_joined: %d",
2555 bss_conf
->ibss_joined
);
2557 if (bss_conf
->ibss_joined
) {
2558 u32 rates
= bss_conf
->basic_rates
;
2559 wl
->basic_rate_set
= wl1271_tx_enabled_rates_get(wl
,
2561 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
2563 /* by default, use 11b rates */
2564 wl
->rate_set
= CONF_TX_IBSS_DEFAULT_RATES
;
2565 ret
= wl1271_acx_sta_rate_policies(wl
);
2571 ret
= wl1271_bss_erp_info_changed(wl
, bss_conf
, changed
);
2578 /* STA/IBSS mode changes */
2579 static void wl1271_bss_info_changed_sta(struct wl1271
*wl
,
2580 struct ieee80211_vif
*vif
,
2581 struct ieee80211_bss_conf
*bss_conf
,
2584 bool do_join
= false, set_assoc
= false;
2585 bool is_ibss
= (wl
->bss_type
== BSS_TYPE_IBSS
);
2586 u32 sta_rate_set
= 0;
2588 struct ieee80211_sta
*sta
;
2589 bool sta_exists
= false;
2590 struct ieee80211_sta_ht_cap sta_ht_cap
;
2593 ret
= wl1271_bss_beacon_info_changed(wl
, vif
, bss_conf
,
2599 if ((changed
& BSS_CHANGED_BEACON_INT
) && is_ibss
)
2602 /* Need to update the SSID (for filtering etc) */
2603 if ((changed
& BSS_CHANGED_BEACON
) && is_ibss
)
2606 if ((changed
& BSS_CHANGED_BEACON_ENABLED
) && is_ibss
) {
2607 wl1271_debug(DEBUG_ADHOC
, "ad-hoc beaconing: %s",
2608 bss_conf
->enable_beacon
? "enabled" : "disabled");
2610 if (bss_conf
->enable_beacon
)
2611 wl
->set_bss_type
= BSS_TYPE_IBSS
;
2613 wl
->set_bss_type
= BSS_TYPE_STA_BSS
;
2617 if ((changed
& BSS_CHANGED_CQM
)) {
2618 bool enable
= false;
2619 if (bss_conf
->cqm_rssi_thold
)
2621 ret
= wl1271_acx_rssi_snr_trigger(wl
, enable
,
2622 bss_conf
->cqm_rssi_thold
,
2623 bss_conf
->cqm_rssi_hyst
);
2626 wl
->rssi_thold
= bss_conf
->cqm_rssi_thold
;
2629 if ((changed
& BSS_CHANGED_BSSID
) &&
2631 * Now we know the correct bssid, so we send a new join command
2632 * and enable the BSSID filter
2634 memcmp(wl
->bssid
, bss_conf
->bssid
, ETH_ALEN
)) {
2635 memcpy(wl
->bssid
, bss_conf
->bssid
, ETH_ALEN
);
2637 if (!is_zero_ether_addr(wl
->bssid
)) {
2638 ret
= wl1271_cmd_build_null_data(wl
);
2642 ret
= wl1271_build_qos_null_data(wl
);
2646 /* filter out all packets not from this BSSID */
2647 wl1271_configure_filters(wl
, 0);
2649 /* Need to update the BSSID (for filtering etc) */
2655 sta
= ieee80211_find_sta(vif
, bss_conf
->bssid
);
2657 /* save the supp_rates of the ap */
2658 sta_rate_set
= sta
->supp_rates
[wl
->hw
->conf
.channel
->band
];
2659 if (sta
->ht_cap
.ht_supported
)
2661 (sta
->ht_cap
.mcs
.rx_mask
[0] << HW_HT_RATES_OFFSET
);
2662 sta_ht_cap
= sta
->ht_cap
;
2668 /* handle new association with HT and HT information change */
2669 if ((changed
& BSS_CHANGED_HT
) &&
2670 (bss_conf
->channel_type
!= NL80211_CHAN_NO_HT
)) {
2671 ret
= wl1271_acx_set_ht_capabilities(wl
, &sta_ht_cap
,
2674 wl1271_warning("Set ht cap true failed %d",
2678 ret
= wl1271_acx_set_ht_information(wl
,
2679 bss_conf
->ht_operation_mode
);
2681 wl1271_warning("Set ht information failed %d",
2686 /* handle new association without HT and disassociation */
2687 else if (changed
& BSS_CHANGED_ASSOC
) {
2688 ret
= wl1271_acx_set_ht_capabilities(wl
, &sta_ht_cap
,
2691 wl1271_warning("Set ht cap false failed %d",
2698 if ((changed
& BSS_CHANGED_ASSOC
)) {
2699 if (bss_conf
->assoc
) {
2702 wl
->aid
= bss_conf
->aid
;
2705 wl
->ps_poll_failures
= 0;
2708 * use basic rates from AP, and determine lowest rate
2709 * to use with control frames.
2711 rates
= bss_conf
->basic_rates
;
2712 wl
->basic_rate_set
= wl1271_tx_enabled_rates_get(wl
,
2714 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
2716 wl
->rate_set
= wl1271_tx_enabled_rates_get(wl
,
2718 ret
= wl1271_acx_sta_rate_policies(wl
);
2723 * with wl1271, we don't need to update the
2724 * beacon_int and dtim_period, because the firmware
2725 * updates it by itself when the first beacon is
2726 * received after a join.
2728 ret
= wl1271_cmd_build_ps_poll(wl
, wl
->aid
);
2733 * Get a template for hardware connection maintenance
2735 dev_kfree_skb(wl
->probereq
);
2736 wl
->probereq
= wl1271_cmd_build_ap_probe_req(wl
, NULL
);
2737 ieoffset
= offsetof(struct ieee80211_mgmt
,
2738 u
.probe_req
.variable
);
2739 wl1271_ssid_set(wl
, wl
->probereq
, ieoffset
);
2741 /* enable the connection monitoring feature */
2742 ret
= wl1271_acx_conn_monit_params(wl
, true);
2746 /* If we want to go in PSM but we're not there yet */
2747 if (test_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
) &&
2748 !test_bit(WL1271_FLAG_PSM
, &wl
->flags
)) {
2749 enum wl1271_cmd_ps_mode mode
;
2751 mode
= STATION_POWER_SAVE_MODE
;
2752 ret
= wl1271_ps_set_mode(wl
, mode
,
2759 /* use defaults when not associated */
2761 !!test_and_clear_bit(WL1271_FLAG_STA_ASSOCIATED
,
2763 clear_bit(WL1271_FLAG_STA_STATE_SENT
, &wl
->flags
);
2766 /* free probe-request template */
2767 dev_kfree_skb(wl
->probereq
);
2768 wl
->probereq
= NULL
;
2770 /* re-enable dynamic ps - just in case */
2771 ieee80211_enable_dyn_ps(wl
->vif
);
2773 /* revert back to minimum rates for the current band */
2774 wl1271_set_band_rate(wl
);
2775 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
2776 ret
= wl1271_acx_sta_rate_policies(wl
);
2780 /* disable connection monitor features */
2781 ret
= wl1271_acx_conn_monit_params(wl
, false);
2783 /* Disable the keep-alive feature */
2784 ret
= wl1271_acx_keep_alive_mode(wl
, false);
2788 /* restore the bssid filter and go to dummy bssid */
2791 wl1271_dummy_join(wl
);
2796 ret
= wl1271_bss_erp_info_changed(wl
, bss_conf
, changed
);
2800 if (changed
& BSS_CHANGED_ARP_FILTER
) {
2801 __be32 addr
= bss_conf
->arp_addr_list
[0];
2802 WARN_ON(wl
->bss_type
!= BSS_TYPE_STA_BSS
);
2804 if (bss_conf
->arp_addr_cnt
== 1 &&
2805 bss_conf
->arp_filter_enabled
) {
2807 * The template should have been configured only upon
2808 * association. however, it seems that the correct ip
2809 * isn't being set (when sending), so we have to
2810 * reconfigure the template upon every ip change.
2812 ret
= wl1271_cmd_build_arp_rsp(wl
, addr
);
2814 wl1271_warning("build arp rsp failed: %d", ret
);
2818 ret
= wl1271_acx_arp_ip_filter(wl
,
2819 ACX_ARP_FILTER_ARP_FILTERING
,
2822 ret
= wl1271_acx_arp_ip_filter(wl
, 0, addr
);
2829 ret
= wl1271_join(wl
, set_assoc
);
2831 wl1271_warning("cmd join failed %d", ret
);
2840 static void wl1271_op_bss_info_changed(struct ieee80211_hw
*hw
,
2841 struct ieee80211_vif
*vif
,
2842 struct ieee80211_bss_conf
*bss_conf
,
2845 struct wl1271
*wl
= hw
->priv
;
2846 bool is_ap
= (wl
->bss_type
== BSS_TYPE_AP_BSS
);
2849 wl1271_debug(DEBUG_MAC80211
, "mac80211 bss info changed 0x%x",
2852 mutex_lock(&wl
->mutex
);
2854 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
2857 ret
= wl1271_ps_elp_wakeup(wl
);
2862 wl1271_bss_info_changed_ap(wl
, vif
, bss_conf
, changed
);
2864 wl1271_bss_info_changed_sta(wl
, vif
, bss_conf
, changed
);
2866 wl1271_ps_elp_sleep(wl
);
2869 mutex_unlock(&wl
->mutex
);
2872 static int wl1271_op_conf_tx(struct ieee80211_hw
*hw
, u16 queue
,
2873 const struct ieee80211_tx_queue_params
*params
)
2875 struct wl1271
*wl
= hw
->priv
;
2879 mutex_lock(&wl
->mutex
);
2881 wl1271_debug(DEBUG_MAC80211
, "mac80211 conf tx %d", queue
);
2884 ps_scheme
= CONF_PS_SCHEME_UPSD_TRIGGER
;
2886 ps_scheme
= CONF_PS_SCHEME_LEGACY
;
2888 if (wl
->state
== WL1271_STATE_OFF
) {
2890 * If the state is off, the parameters will be recorded and
2891 * configured on init. This happens in AP-mode.
2893 struct conf_tx_ac_category
*conf_ac
=
2894 &wl
->conf
.tx
.ac_conf
[wl1271_tx_get_queue(queue
)];
2895 struct conf_tx_tid
*conf_tid
=
2896 &wl
->conf
.tx
.tid_conf
[wl1271_tx_get_queue(queue
)];
2898 conf_ac
->ac
= wl1271_tx_get_queue(queue
);
2899 conf_ac
->cw_min
= (u8
)params
->cw_min
;
2900 conf_ac
->cw_max
= params
->cw_max
;
2901 conf_ac
->aifsn
= params
->aifs
;
2902 conf_ac
->tx_op_limit
= params
->txop
<< 5;
2904 conf_tid
->queue_id
= wl1271_tx_get_queue(queue
);
2905 conf_tid
->channel_type
= CONF_CHANNEL_TYPE_EDCF
;
2906 conf_tid
->tsid
= wl1271_tx_get_queue(queue
);
2907 conf_tid
->ps_scheme
= ps_scheme
;
2908 conf_tid
->ack_policy
= CONF_ACK_POLICY_LEGACY
;
2909 conf_tid
->apsd_conf
[0] = 0;
2910 conf_tid
->apsd_conf
[1] = 0;
2914 ret
= wl1271_ps_elp_wakeup(wl
);
2919 * the txop is confed in units of 32us by the mac80211,
2922 ret
= wl1271_acx_ac_cfg(wl
, wl1271_tx_get_queue(queue
),
2923 params
->cw_min
, params
->cw_max
,
2924 params
->aifs
, params
->txop
<< 5);
2928 ret
= wl1271_acx_tid_cfg(wl
, wl1271_tx_get_queue(queue
),
2929 CONF_CHANNEL_TYPE_EDCF
,
2930 wl1271_tx_get_queue(queue
),
2931 ps_scheme
, CONF_ACK_POLICY_LEGACY
,
2935 wl1271_ps_elp_sleep(wl
);
2938 mutex_unlock(&wl
->mutex
);
2943 static u64
wl1271_op_get_tsf(struct ieee80211_hw
*hw
)
2946 struct wl1271
*wl
= hw
->priv
;
2947 u64 mactime
= ULLONG_MAX
;
2950 wl1271_debug(DEBUG_MAC80211
, "mac80211 get tsf");
2952 mutex_lock(&wl
->mutex
);
2954 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
2957 ret
= wl1271_ps_elp_wakeup(wl
);
2961 ret
= wl1271_acx_tsf_info(wl
, &mactime
);
2966 wl1271_ps_elp_sleep(wl
);
2969 mutex_unlock(&wl
->mutex
);
2973 static int wl1271_op_get_survey(struct ieee80211_hw
*hw
, int idx
,
2974 struct survey_info
*survey
)
2976 struct wl1271
*wl
= hw
->priv
;
2977 struct ieee80211_conf
*conf
= &hw
->conf
;
2982 survey
->channel
= conf
->channel
;
2983 survey
->filled
= SURVEY_INFO_NOISE_DBM
;
2984 survey
->noise
= wl
->noise
;
2989 static int wl1271_allocate_sta(struct wl1271
*wl
,
2990 struct ieee80211_sta
*sta
,
2993 struct wl1271_station
*wl_sta
;
2996 id
= find_first_zero_bit(wl
->ap_hlid_map
, AP_MAX_STATIONS
);
2997 if (id
>= AP_MAX_STATIONS
) {
2998 wl1271_warning("could not allocate HLID - too much stations");
3002 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
3003 __set_bit(id
, wl
->ap_hlid_map
);
3004 wl_sta
->hlid
= WL1271_AP_STA_HLID_START
+ id
;
3005 *hlid
= wl_sta
->hlid
;
3006 memcpy(wl
->links
[wl_sta
->hlid
].addr
, sta
->addr
, ETH_ALEN
);
3010 static void wl1271_free_sta(struct wl1271
*wl
, u8 hlid
)
3012 int id
= hlid
- WL1271_AP_STA_HLID_START
;
3014 if (WARN_ON(!test_bit(id
, wl
->ap_hlid_map
)))
3017 __clear_bit(id
, wl
->ap_hlid_map
);
3018 memset(wl
->links
[hlid
].addr
, 0, ETH_ALEN
);
3019 wl1271_tx_reset_link_queues(wl
, hlid
);
3020 __clear_bit(hlid
, &wl
->ap_ps_map
);
3021 __clear_bit(hlid
, (unsigned long *)&wl
->ap_fw_ps_map
);
3024 bool wl1271_is_active_sta(struct wl1271
*wl
, u8 hlid
)
3026 int id
= hlid
- WL1271_AP_STA_HLID_START
;
3027 return test_bit(id
, wl
->ap_hlid_map
);
3030 static int wl1271_op_sta_add(struct ieee80211_hw
*hw
,
3031 struct ieee80211_vif
*vif
,
3032 struct ieee80211_sta
*sta
)
3034 struct wl1271
*wl
= hw
->priv
;
3038 mutex_lock(&wl
->mutex
);
3040 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
3043 if (wl
->bss_type
!= BSS_TYPE_AP_BSS
)
3046 wl1271_debug(DEBUG_MAC80211
, "mac80211 add sta %d", (int)sta
->aid
);
3048 ret
= wl1271_allocate_sta(wl
, sta
, &hlid
);
3052 ret
= wl1271_ps_elp_wakeup(wl
);
3056 ret
= wl1271_cmd_add_sta(wl
, sta
, hlid
);
3061 wl1271_ps_elp_sleep(wl
);
3065 wl1271_free_sta(wl
, hlid
);
3068 mutex_unlock(&wl
->mutex
);
3072 static int wl1271_op_sta_remove(struct ieee80211_hw
*hw
,
3073 struct ieee80211_vif
*vif
,
3074 struct ieee80211_sta
*sta
)
3076 struct wl1271
*wl
= hw
->priv
;
3077 struct wl1271_station
*wl_sta
;
3080 mutex_lock(&wl
->mutex
);
3082 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
3085 if (wl
->bss_type
!= BSS_TYPE_AP_BSS
)
3088 wl1271_debug(DEBUG_MAC80211
, "mac80211 remove sta %d", (int)sta
->aid
);
3090 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
3091 id
= wl_sta
->hlid
- WL1271_AP_STA_HLID_START
;
3092 if (WARN_ON(!test_bit(id
, wl
->ap_hlid_map
)))
3095 ret
= wl1271_ps_elp_wakeup(wl
);
3099 ret
= wl1271_cmd_remove_sta(wl
, wl_sta
->hlid
);
3103 wl1271_free_sta(wl
, wl_sta
->hlid
);
3106 wl1271_ps_elp_sleep(wl
);
3109 mutex_unlock(&wl
->mutex
);
3113 static int wl1271_op_ampdu_action(struct ieee80211_hw
*hw
,
3114 struct ieee80211_vif
*vif
,
3115 enum ieee80211_ampdu_mlme_action action
,
3116 struct ieee80211_sta
*sta
, u16 tid
, u16
*ssn
,
3119 struct wl1271
*wl
= hw
->priv
;
3122 mutex_lock(&wl
->mutex
);
3124 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
3129 ret
= wl1271_ps_elp_wakeup(wl
);
3134 case IEEE80211_AMPDU_RX_START
:
3135 if (wl
->ba_support
) {
3136 ret
= wl1271_acx_set_ba_receiver_session(wl
, tid
, *ssn
,
3139 wl
->ba_rx_bitmap
|= BIT(tid
);
3145 case IEEE80211_AMPDU_RX_STOP
:
3146 ret
= wl1271_acx_set_ba_receiver_session(wl
, tid
, 0, false);
3148 wl
->ba_rx_bitmap
&= ~BIT(tid
);
3152 * The BA initiator session management in FW independently.
3153 * Falling break here on purpose for all TX APDU commands.
3155 case IEEE80211_AMPDU_TX_START
:
3156 case IEEE80211_AMPDU_TX_STOP
:
3157 case IEEE80211_AMPDU_TX_OPERATIONAL
:
3162 wl1271_error("Incorrect ampdu action id=%x\n", action
);
3166 wl1271_ps_elp_sleep(wl
);
3169 mutex_unlock(&wl
->mutex
);
3174 static bool wl1271_tx_frames_pending(struct ieee80211_hw
*hw
)
3176 struct wl1271
*wl
= hw
->priv
;
3179 mutex_lock(&wl
->mutex
);
3181 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
3184 /* packets are considered pending if in the TX queue or the FW */
3185 ret
= (wl
->tx_queue_count
> 0) || (wl
->tx_frames_cnt
> 0);
3187 /* the above is appropriate for STA mode for PS purposes */
3188 WARN_ON(wl
->bss_type
!= BSS_TYPE_STA_BSS
);
3191 mutex_unlock(&wl
->mutex
);
3196 /* can't be const, mac80211 writes to this */
3197 static struct ieee80211_rate wl1271_rates
[] = {
3199 .hw_value
= CONF_HW_BIT_RATE_1MBPS
,
3200 .hw_value_short
= CONF_HW_BIT_RATE_1MBPS
, },
3202 .hw_value
= CONF_HW_BIT_RATE_2MBPS
,
3203 .hw_value_short
= CONF_HW_BIT_RATE_2MBPS
,
3204 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
3206 .hw_value
= CONF_HW_BIT_RATE_5_5MBPS
,
3207 .hw_value_short
= CONF_HW_BIT_RATE_5_5MBPS
,
3208 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
3210 .hw_value
= CONF_HW_BIT_RATE_11MBPS
,
3211 .hw_value_short
= CONF_HW_BIT_RATE_11MBPS
,
3212 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
3214 .hw_value
= CONF_HW_BIT_RATE_6MBPS
,
3215 .hw_value_short
= CONF_HW_BIT_RATE_6MBPS
, },
3217 .hw_value
= CONF_HW_BIT_RATE_9MBPS
,
3218 .hw_value_short
= CONF_HW_BIT_RATE_9MBPS
, },
3220 .hw_value
= CONF_HW_BIT_RATE_12MBPS
,
3221 .hw_value_short
= CONF_HW_BIT_RATE_12MBPS
, },
3223 .hw_value
= CONF_HW_BIT_RATE_18MBPS
,
3224 .hw_value_short
= CONF_HW_BIT_RATE_18MBPS
, },
3226 .hw_value
= CONF_HW_BIT_RATE_24MBPS
,
3227 .hw_value_short
= CONF_HW_BIT_RATE_24MBPS
, },
3229 .hw_value
= CONF_HW_BIT_RATE_36MBPS
,
3230 .hw_value_short
= CONF_HW_BIT_RATE_36MBPS
, },
3232 .hw_value
= CONF_HW_BIT_RATE_48MBPS
,
3233 .hw_value_short
= CONF_HW_BIT_RATE_48MBPS
, },
3235 .hw_value
= CONF_HW_BIT_RATE_54MBPS
,
3236 .hw_value_short
= CONF_HW_BIT_RATE_54MBPS
, },
3239 /* can't be const, mac80211 writes to this */
3240 static struct ieee80211_channel wl1271_channels
[] = {
3241 { .hw_value
= 1, .center_freq
= 2412, .max_power
= 25 },
3242 { .hw_value
= 2, .center_freq
= 2417, .max_power
= 25 },
3243 { .hw_value
= 3, .center_freq
= 2422, .max_power
= 25 },
3244 { .hw_value
= 4, .center_freq
= 2427, .max_power
= 25 },
3245 { .hw_value
= 5, .center_freq
= 2432, .max_power
= 25 },
3246 { .hw_value
= 6, .center_freq
= 2437, .max_power
= 25 },
3247 { .hw_value
= 7, .center_freq
= 2442, .max_power
= 25 },
3248 { .hw_value
= 8, .center_freq
= 2447, .max_power
= 25 },
3249 { .hw_value
= 9, .center_freq
= 2452, .max_power
= 25 },
3250 { .hw_value
= 10, .center_freq
= 2457, .max_power
= 25 },
3251 { .hw_value
= 11, .center_freq
= 2462, .max_power
= 25 },
3252 { .hw_value
= 12, .center_freq
= 2467, .max_power
= 25 },
3253 { .hw_value
= 13, .center_freq
= 2472, .max_power
= 25 },
3254 { .hw_value
= 14, .center_freq
= 2484, .max_power
= 25 },
3257 /* mapping to indexes for wl1271_rates */
3258 static const u8 wl1271_rate_to_idx_2ghz
[] = {
3259 /* MCS rates are used only with 11n */
3260 7, /* CONF_HW_RXTX_RATE_MCS7 */
3261 6, /* CONF_HW_RXTX_RATE_MCS6 */
3262 5, /* CONF_HW_RXTX_RATE_MCS5 */
3263 4, /* CONF_HW_RXTX_RATE_MCS4 */
3264 3, /* CONF_HW_RXTX_RATE_MCS3 */
3265 2, /* CONF_HW_RXTX_RATE_MCS2 */
3266 1, /* CONF_HW_RXTX_RATE_MCS1 */
3267 0, /* CONF_HW_RXTX_RATE_MCS0 */
3269 11, /* CONF_HW_RXTX_RATE_54 */
3270 10, /* CONF_HW_RXTX_RATE_48 */
3271 9, /* CONF_HW_RXTX_RATE_36 */
3272 8, /* CONF_HW_RXTX_RATE_24 */
3274 /* TI-specific rate */
3275 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_22 */
3277 7, /* CONF_HW_RXTX_RATE_18 */
3278 6, /* CONF_HW_RXTX_RATE_12 */
3279 3, /* CONF_HW_RXTX_RATE_11 */
3280 5, /* CONF_HW_RXTX_RATE_9 */
3281 4, /* CONF_HW_RXTX_RATE_6 */
3282 2, /* CONF_HW_RXTX_RATE_5_5 */
3283 1, /* CONF_HW_RXTX_RATE_2 */
3284 0 /* CONF_HW_RXTX_RATE_1 */
3287 /* 11n STA capabilities */
3288 #define HW_RX_HIGHEST_RATE 72
3290 #ifdef CONFIG_WL12XX_HT
3291 #define WL12XX_HT_CAP { \
3292 .cap = IEEE80211_HT_CAP_GRN_FLD | IEEE80211_HT_CAP_SGI_20 | \
3293 (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT), \
3294 .ht_supported = true, \
3295 .ampdu_factor = IEEE80211_HT_MAX_AMPDU_8K, \
3296 .ampdu_density = IEEE80211_HT_MPDU_DENSITY_8, \
3298 .rx_mask = { 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, \
3299 .rx_highest = cpu_to_le16(HW_RX_HIGHEST_RATE), \
3300 .tx_params = IEEE80211_HT_MCS_TX_DEFINED, \
3304 #define WL12XX_HT_CAP { \
3305 .ht_supported = false, \
3309 /* can't be const, mac80211 writes to this */
3310 static struct ieee80211_supported_band wl1271_band_2ghz
= {
3311 .channels
= wl1271_channels
,
3312 .n_channels
= ARRAY_SIZE(wl1271_channels
),
3313 .bitrates
= wl1271_rates
,
3314 .n_bitrates
= ARRAY_SIZE(wl1271_rates
),
3315 .ht_cap
= WL12XX_HT_CAP
,
3318 /* 5 GHz data rates for WL1273 */
3319 static struct ieee80211_rate wl1271_rates_5ghz
[] = {
3321 .hw_value
= CONF_HW_BIT_RATE_6MBPS
,
3322 .hw_value_short
= CONF_HW_BIT_RATE_6MBPS
, },
3324 .hw_value
= CONF_HW_BIT_RATE_9MBPS
,
3325 .hw_value_short
= CONF_HW_BIT_RATE_9MBPS
, },
3327 .hw_value
= CONF_HW_BIT_RATE_12MBPS
,
3328 .hw_value_short
= CONF_HW_BIT_RATE_12MBPS
, },
3330 .hw_value
= CONF_HW_BIT_RATE_18MBPS
,
3331 .hw_value_short
= CONF_HW_BIT_RATE_18MBPS
, },
3333 .hw_value
= CONF_HW_BIT_RATE_24MBPS
,
3334 .hw_value_short
= CONF_HW_BIT_RATE_24MBPS
, },
3336 .hw_value
= CONF_HW_BIT_RATE_36MBPS
,
3337 .hw_value_short
= CONF_HW_BIT_RATE_36MBPS
, },
3339 .hw_value
= CONF_HW_BIT_RATE_48MBPS
,
3340 .hw_value_short
= CONF_HW_BIT_RATE_48MBPS
, },
3342 .hw_value
= CONF_HW_BIT_RATE_54MBPS
,
3343 .hw_value_short
= CONF_HW_BIT_RATE_54MBPS
, },
3346 /* 5 GHz band channels for WL1273 */
3347 static struct ieee80211_channel wl1271_channels_5ghz
[] = {
3348 { .hw_value
= 7, .center_freq
= 5035},
3349 { .hw_value
= 8, .center_freq
= 5040},
3350 { .hw_value
= 9, .center_freq
= 5045},
3351 { .hw_value
= 11, .center_freq
= 5055},
3352 { .hw_value
= 12, .center_freq
= 5060},
3353 { .hw_value
= 16, .center_freq
= 5080},
3354 { .hw_value
= 34, .center_freq
= 5170},
3355 { .hw_value
= 36, .center_freq
= 5180},
3356 { .hw_value
= 38, .center_freq
= 5190},
3357 { .hw_value
= 40, .center_freq
= 5200},
3358 { .hw_value
= 42, .center_freq
= 5210},
3359 { .hw_value
= 44, .center_freq
= 5220},
3360 { .hw_value
= 46, .center_freq
= 5230},
3361 { .hw_value
= 48, .center_freq
= 5240},
3362 { .hw_value
= 52, .center_freq
= 5260},
3363 { .hw_value
= 56, .center_freq
= 5280},
3364 { .hw_value
= 60, .center_freq
= 5300},
3365 { .hw_value
= 64, .center_freq
= 5320},
3366 { .hw_value
= 100, .center_freq
= 5500},
3367 { .hw_value
= 104, .center_freq
= 5520},
3368 { .hw_value
= 108, .center_freq
= 5540},
3369 { .hw_value
= 112, .center_freq
= 5560},
3370 { .hw_value
= 116, .center_freq
= 5580},
3371 { .hw_value
= 120, .center_freq
= 5600},
3372 { .hw_value
= 124, .center_freq
= 5620},
3373 { .hw_value
= 128, .center_freq
= 5640},
3374 { .hw_value
= 132, .center_freq
= 5660},
3375 { .hw_value
= 136, .center_freq
= 5680},
3376 { .hw_value
= 140, .center_freq
= 5700},
3377 { .hw_value
= 149, .center_freq
= 5745},
3378 { .hw_value
= 153, .center_freq
= 5765},
3379 { .hw_value
= 157, .center_freq
= 5785},
3380 { .hw_value
= 161, .center_freq
= 5805},
3381 { .hw_value
= 165, .center_freq
= 5825},
3384 /* mapping to indexes for wl1271_rates_5ghz */
3385 static const u8 wl1271_rate_to_idx_5ghz
[] = {
3386 /* MCS rates are used only with 11n */
3387 7, /* CONF_HW_RXTX_RATE_MCS7 */
3388 6, /* CONF_HW_RXTX_RATE_MCS6 */
3389 5, /* CONF_HW_RXTX_RATE_MCS5 */
3390 4, /* CONF_HW_RXTX_RATE_MCS4 */
3391 3, /* CONF_HW_RXTX_RATE_MCS3 */
3392 2, /* CONF_HW_RXTX_RATE_MCS2 */
3393 1, /* CONF_HW_RXTX_RATE_MCS1 */
3394 0, /* CONF_HW_RXTX_RATE_MCS0 */
3396 7, /* CONF_HW_RXTX_RATE_54 */
3397 6, /* CONF_HW_RXTX_RATE_48 */
3398 5, /* CONF_HW_RXTX_RATE_36 */
3399 4, /* CONF_HW_RXTX_RATE_24 */
3401 /* TI-specific rate */
3402 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_22 */
3404 3, /* CONF_HW_RXTX_RATE_18 */
3405 2, /* CONF_HW_RXTX_RATE_12 */
3406 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_11 */
3407 1, /* CONF_HW_RXTX_RATE_9 */
3408 0, /* CONF_HW_RXTX_RATE_6 */
3409 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_5_5 */
3410 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_2 */
3411 CONF_HW_RXTX_RATE_UNSUPPORTED
/* CONF_HW_RXTX_RATE_1 */
3414 static struct ieee80211_supported_band wl1271_band_5ghz
= {
3415 .channels
= wl1271_channels_5ghz
,
3416 .n_channels
= ARRAY_SIZE(wl1271_channels_5ghz
),
3417 .bitrates
= wl1271_rates_5ghz
,
3418 .n_bitrates
= ARRAY_SIZE(wl1271_rates_5ghz
),
3419 .ht_cap
= WL12XX_HT_CAP
,
3422 static const u8
*wl1271_band_rate_to_idx
[] = {
3423 [IEEE80211_BAND_2GHZ
] = wl1271_rate_to_idx_2ghz
,
3424 [IEEE80211_BAND_5GHZ
] = wl1271_rate_to_idx_5ghz
3427 static const struct ieee80211_ops wl1271_ops
= {
3428 .start
= wl1271_op_start
,
3429 .stop
= wl1271_op_stop
,
3430 .add_interface
= wl1271_op_add_interface
,
3431 .remove_interface
= wl1271_op_remove_interface
,
3432 .config
= wl1271_op_config
,
3433 .prepare_multicast
= wl1271_op_prepare_multicast
,
3434 .configure_filter
= wl1271_op_configure_filter
,
3436 .set_key
= wl1271_op_set_key
,
3437 .hw_scan
= wl1271_op_hw_scan
,
3438 .bss_info_changed
= wl1271_op_bss_info_changed
,
3439 .set_frag_threshold
= wl1271_op_set_frag_threshold
,
3440 .set_rts_threshold
= wl1271_op_set_rts_threshold
,
3441 .conf_tx
= wl1271_op_conf_tx
,
3442 .get_tsf
= wl1271_op_get_tsf
,
3443 .get_survey
= wl1271_op_get_survey
,
3444 .sta_add
= wl1271_op_sta_add
,
3445 .sta_remove
= wl1271_op_sta_remove
,
3446 .ampdu_action
= wl1271_op_ampdu_action
,
3447 .tx_frames_pending
= wl1271_tx_frames_pending
,
3448 CFG80211_TESTMODE_CMD(wl1271_tm_cmd
)
3452 u8
wl1271_rate_to_idx(int rate
, enum ieee80211_band band
)
3456 BUG_ON(band
>= sizeof(wl1271_band_rate_to_idx
)/sizeof(u8
*));
3458 if (unlikely(rate
>= CONF_HW_RXTX_RATE_MAX
)) {
3459 wl1271_error("Illegal RX rate from HW: %d", rate
);
3463 idx
= wl1271_band_rate_to_idx
[band
][rate
];
3464 if (unlikely(idx
== CONF_HW_RXTX_RATE_UNSUPPORTED
)) {
3465 wl1271_error("Unsupported RX rate from HW: %d", rate
);
3472 static ssize_t
wl1271_sysfs_show_bt_coex_state(struct device
*dev
,
3473 struct device_attribute
*attr
,
3476 struct wl1271
*wl
= dev_get_drvdata(dev
);
3481 mutex_lock(&wl
->mutex
);
3482 len
= snprintf(buf
, len
, "%d\n\n0 - off\n1 - on\n",
3484 mutex_unlock(&wl
->mutex
);
3490 static ssize_t
wl1271_sysfs_store_bt_coex_state(struct device
*dev
,
3491 struct device_attribute
*attr
,
3492 const char *buf
, size_t count
)
3494 struct wl1271
*wl
= dev_get_drvdata(dev
);
3498 ret
= kstrtoul(buf
, 10, &res
);
3500 wl1271_warning("incorrect value written to bt_coex_mode");
3504 mutex_lock(&wl
->mutex
);
3508 if (res
== wl
->sg_enabled
)
3511 wl
->sg_enabled
= res
;
3513 if (wl
->state
== WL1271_STATE_OFF
)
3516 ret
= wl1271_ps_elp_wakeup(wl
);
3520 wl1271_acx_sg_enable(wl
, wl
->sg_enabled
);
3521 wl1271_ps_elp_sleep(wl
);
3524 mutex_unlock(&wl
->mutex
);
3528 static DEVICE_ATTR(bt_coex_state
, S_IRUGO
| S_IWUSR
,
3529 wl1271_sysfs_show_bt_coex_state
,
3530 wl1271_sysfs_store_bt_coex_state
);
3532 static ssize_t
wl1271_sysfs_show_hw_pg_ver(struct device
*dev
,
3533 struct device_attribute
*attr
,
3536 struct wl1271
*wl
= dev_get_drvdata(dev
);
3541 mutex_lock(&wl
->mutex
);
3542 if (wl
->hw_pg_ver
>= 0)
3543 len
= snprintf(buf
, len
, "%d\n", wl
->hw_pg_ver
);
3545 len
= snprintf(buf
, len
, "n/a\n");
3546 mutex_unlock(&wl
->mutex
);
3551 static DEVICE_ATTR(hw_pg_ver
, S_IRUGO
| S_IWUSR
,
3552 wl1271_sysfs_show_hw_pg_ver
, NULL
);
3554 int wl1271_register_hw(struct wl1271
*wl
)
3558 if (wl
->mac80211_registered
)
3561 ret
= wl1271_fetch_nvs(wl
);
3563 /* NOTE: The wl->nvs->nvs element must be first, in
3564 * order to simplify the casting, we assume it is at
3565 * the beginning of the wl->nvs structure.
3567 u8
*nvs_ptr
= (u8
*)wl
->nvs
;
3569 wl
->mac_addr
[0] = nvs_ptr
[11];
3570 wl
->mac_addr
[1] = nvs_ptr
[10];
3571 wl
->mac_addr
[2] = nvs_ptr
[6];
3572 wl
->mac_addr
[3] = nvs_ptr
[5];
3573 wl
->mac_addr
[4] = nvs_ptr
[4];
3574 wl
->mac_addr
[5] = nvs_ptr
[3];
3577 SET_IEEE80211_PERM_ADDR(wl
->hw
, wl
->mac_addr
);
3579 ret
= ieee80211_register_hw(wl
->hw
);
3581 wl1271_error("unable to register mac80211 hw: %d", ret
);
3585 wl
->mac80211_registered
= true;
3587 wl1271_debugfs_init(wl
);
3589 register_netdevice_notifier(&wl1271_dev_notifier
);
3591 wl1271_notice("loaded");
3595 EXPORT_SYMBOL_GPL(wl1271_register_hw
);
3597 void wl1271_unregister_hw(struct wl1271
*wl
)
3599 if (wl
->state
== WL1271_STATE_PLT
)
3600 __wl1271_plt_stop(wl
);
3602 unregister_netdevice_notifier(&wl1271_dev_notifier
);
3603 ieee80211_unregister_hw(wl
->hw
);
3604 wl
->mac80211_registered
= false;
3607 EXPORT_SYMBOL_GPL(wl1271_unregister_hw
);
3609 int wl1271_init_ieee80211(struct wl1271
*wl
)
3611 static const u32 cipher_suites
[] = {
3612 WLAN_CIPHER_SUITE_WEP40
,
3613 WLAN_CIPHER_SUITE_WEP104
,
3614 WLAN_CIPHER_SUITE_TKIP
,
3615 WLAN_CIPHER_SUITE_CCMP
,
3616 WL1271_CIPHER_SUITE_GEM
,
3619 /* The tx descriptor buffer and the TKIP space. */
3620 wl
->hw
->extra_tx_headroom
= WL1271_TKIP_IV_SPACE
+
3621 sizeof(struct wl1271_tx_hw_descr
);
3624 /* FIXME: find a proper value */
3625 wl
->hw
->channel_change_time
= 10000;
3626 wl
->hw
->max_listen_interval
= wl
->conf
.conn
.max_listen_interval
;
3628 wl
->hw
->flags
= IEEE80211_HW_SIGNAL_DBM
|
3629 IEEE80211_HW_BEACON_FILTER
|
3630 IEEE80211_HW_SUPPORTS_PS
|
3631 IEEE80211_HW_SUPPORTS_UAPSD
|
3632 IEEE80211_HW_HAS_RATE_CONTROL
|
3633 IEEE80211_HW_CONNECTION_MONITOR
|
3634 IEEE80211_HW_SUPPORTS_CQM_RSSI
|
3635 IEEE80211_HW_AP_LINK_PS
;
3637 wl
->hw
->wiphy
->cipher_suites
= cipher_suites
;
3638 wl
->hw
->wiphy
->n_cipher_suites
= ARRAY_SIZE(cipher_suites
);
3640 wl
->hw
->wiphy
->interface_modes
= BIT(NL80211_IFTYPE_STATION
) |
3641 BIT(NL80211_IFTYPE_ADHOC
) | BIT(NL80211_IFTYPE_AP
);
3642 wl
->hw
->wiphy
->max_scan_ssids
= 1;
3644 * Maximum length of elements in scanning probe request templates
3645 * should be the maximum length possible for a template, without
3646 * the IEEE80211 header of the template
3648 wl
->hw
->wiphy
->max_scan_ie_len
= WL1271_CMD_TEMPL_MAX_SIZE
-
3649 sizeof(struct ieee80211_header
);
3651 /* make sure all our channels fit in the scanned_ch bitmask */
3652 BUILD_BUG_ON(ARRAY_SIZE(wl1271_channels
) +
3653 ARRAY_SIZE(wl1271_channels_5ghz
) >
3654 WL1271_MAX_CHANNELS
);
3656 * We keep local copies of the band structs because we need to
3657 * modify them on a per-device basis.
3659 memcpy(&wl
->bands
[IEEE80211_BAND_2GHZ
], &wl1271_band_2ghz
,
3660 sizeof(wl1271_band_2ghz
));
3661 memcpy(&wl
->bands
[IEEE80211_BAND_5GHZ
], &wl1271_band_5ghz
,
3662 sizeof(wl1271_band_5ghz
));
3664 wl
->hw
->wiphy
->bands
[IEEE80211_BAND_2GHZ
] =
3665 &wl
->bands
[IEEE80211_BAND_2GHZ
];
3666 wl
->hw
->wiphy
->bands
[IEEE80211_BAND_5GHZ
] =
3667 &wl
->bands
[IEEE80211_BAND_5GHZ
];
3670 wl
->hw
->max_rates
= 1;
3672 wl
->hw
->wiphy
->reg_notifier
= wl1271_reg_notify
;
3674 SET_IEEE80211_DEV(wl
->hw
, wl1271_wl_to_dev(wl
));
3676 wl
->hw
->sta_data_size
= sizeof(struct wl1271_station
);
3678 wl
->hw
->max_rx_aggregation_subframes
= 8;
3682 EXPORT_SYMBOL_GPL(wl1271_init_ieee80211
);
3684 #define WL1271_DEFAULT_CHANNEL 0
3686 struct ieee80211_hw
*wl1271_alloc_hw(void)
3688 struct ieee80211_hw
*hw
;
3689 struct platform_device
*plat_dev
= NULL
;
3694 hw
= ieee80211_alloc_hw(sizeof(*wl
), &wl1271_ops
);
3696 wl1271_error("could not alloc ieee80211_hw");
3701 plat_dev
= kmemdup(&wl1271_device
, sizeof(wl1271_device
), GFP_KERNEL
);
3703 wl1271_error("could not allocate platform_device");
3705 goto err_plat_alloc
;
3709 memset(wl
, 0, sizeof(*wl
));
3711 INIT_LIST_HEAD(&wl
->list
);
3714 wl
->plat_dev
= plat_dev
;
3716 for (i
= 0; i
< NUM_TX_QUEUES
; i
++)
3717 skb_queue_head_init(&wl
->tx_queue
[i
]);
3719 for (i
= 0; i
< NUM_TX_QUEUES
; i
++)
3720 for (j
= 0; j
< AP_MAX_LINKS
; j
++)
3721 skb_queue_head_init(&wl
->links
[j
].tx_queue
[i
]);
3723 skb_queue_head_init(&wl
->deferred_rx_queue
);
3724 skb_queue_head_init(&wl
->deferred_tx_queue
);
3726 INIT_DELAYED_WORK(&wl
->elp_work
, wl1271_elp_work
);
3727 INIT_DELAYED_WORK(&wl
->pspoll_work
, wl1271_pspoll_work
);
3728 INIT_WORK(&wl
->netstack_work
, wl1271_netstack_work
);
3729 INIT_WORK(&wl
->tx_work
, wl1271_tx_work
);
3730 INIT_WORK(&wl
->recovery_work
, wl1271_recovery_work
);
3731 INIT_DELAYED_WORK(&wl
->scan_complete_work
, wl1271_scan_complete_work
);
3732 wl
->channel
= WL1271_DEFAULT_CHANNEL
;
3733 wl
->beacon_int
= WL1271_DEFAULT_BEACON_INT
;
3734 wl
->default_key
= 0;
3736 wl
->rx_config
= WL1271_DEFAULT_STA_RX_CONFIG
;
3737 wl
->rx_filter
= WL1271_DEFAULT_STA_RX_FILTER
;
3738 wl
->psm_entry_retry
= 0;
3739 wl
->power_level
= WL1271_DEFAULT_POWER_LEVEL
;
3740 wl
->basic_rate_set
= CONF_TX_RATE_MASK_BASIC
;
3741 wl
->basic_rate
= CONF_TX_RATE_MASK_BASIC
;
3742 wl
->rate_set
= CONF_TX_RATE_MASK_BASIC
;
3743 wl
->band
= IEEE80211_BAND_2GHZ
;
3746 wl
->sg_enabled
= true;
3748 wl
->bss_type
= MAX_BSS_TYPE
;
3749 wl
->set_bss_type
= MAX_BSS_TYPE
;
3750 wl
->fw_bss_type
= MAX_BSS_TYPE
;
3751 wl
->last_tx_hlid
= 0;
3753 wl
->ap_fw_ps_map
= 0;
3755 wl
->platform_quirks
= 0;
3757 memset(wl
->tx_frames_map
, 0, sizeof(wl
->tx_frames_map
));
3758 for (i
= 0; i
< ACX_TX_DESCRIPTORS
; i
++)
3759 wl
->tx_frames
[i
] = NULL
;
3761 spin_lock_init(&wl
->wl_lock
);
3763 wl
->state
= WL1271_STATE_OFF
;
3764 mutex_init(&wl
->mutex
);
3766 /* Apply default driver configuration. */
3767 wl1271_conf_init(wl
);
3769 order
= get_order(WL1271_AGGR_BUFFER_SIZE
);
3770 wl
->aggr_buf
= (u8
*)__get_free_pages(GFP_KERNEL
, order
);
3771 if (!wl
->aggr_buf
) {
3776 wl
->dummy_packet
= wl12xx_alloc_dummy_packet(wl
);
3777 if (!wl
->dummy_packet
) {
3782 /* Register platform device */
3783 ret
= platform_device_register(wl
->plat_dev
);
3785 wl1271_error("couldn't register platform device");
3786 goto err_dummy_packet
;
3788 dev_set_drvdata(&wl
->plat_dev
->dev
, wl
);
3790 /* Create sysfs file to control bt coex state */
3791 ret
= device_create_file(&wl
->plat_dev
->dev
, &dev_attr_bt_coex_state
);
3793 wl1271_error("failed to create sysfs file bt_coex_state");
3797 /* Create sysfs file to get HW PG version */
3798 ret
= device_create_file(&wl
->plat_dev
->dev
, &dev_attr_hw_pg_ver
);
3800 wl1271_error("failed to create sysfs file hw_pg_ver");
3801 goto err_bt_coex_state
;
3807 device_remove_file(&wl
->plat_dev
->dev
, &dev_attr_bt_coex_state
);
3810 platform_device_unregister(wl
->plat_dev
);
3813 dev_kfree_skb(wl
->dummy_packet
);
3816 free_pages((unsigned long)wl
->aggr_buf
, order
);
3819 wl1271_debugfs_exit(wl
);
3823 ieee80211_free_hw(hw
);
3827 return ERR_PTR(ret
);
3829 EXPORT_SYMBOL_GPL(wl1271_alloc_hw
);
3831 int wl1271_free_hw(struct wl1271
*wl
)
3833 platform_device_unregister(wl
->plat_dev
);
3834 dev_kfree_skb(wl
->dummy_packet
);
3835 free_pages((unsigned long)wl
->aggr_buf
,
3836 get_order(WL1271_AGGR_BUFFER_SIZE
));
3837 kfree(wl
->plat_dev
);
3839 wl1271_debugfs_exit(wl
);
3846 kfree(wl
->fw_status
);
3847 kfree(wl
->tx_res_if
);
3849 ieee80211_free_hw(wl
->hw
);
3853 EXPORT_SYMBOL_GPL(wl1271_free_hw
);
3855 u32 wl12xx_debug_level
= DEBUG_NONE
;
3856 EXPORT_SYMBOL_GPL(wl12xx_debug_level
);
3857 module_param_named(debug_level
, wl12xx_debug_level
, uint
, S_IRUSR
| S_IWUSR
);
3858 MODULE_PARM_DESC(debug_level
, "wl12xx debugging level");
3860 MODULE_LICENSE("GPL");
3861 MODULE_AUTHOR("Luciano Coelho <coelho@ti.com>");
3862 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");