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
= 2,
263 .ie
= WLAN_EID_CHANNEL_SWITCH
,
264 .rule
= CONF_BCN_RULE_PASS_ON_APPEARANCE
,
267 .ie
= WLAN_EID_HT_INFORMATION
,
268 .rule
= CONF_BCN_RULE_PASS_ON_CHANGE
,
271 .synch_fail_thold
= 10,
272 .bss_lose_timeout
= 100,
273 .beacon_rx_timeout
= 10000,
274 .broadcast_timeout
= 20000,
275 .rx_broadcast_in_ps
= 1,
276 .ps_poll_threshold
= 10,
277 .ps_poll_recovery_period
= 700,
278 .bet_enable
= CONF_BET_MODE_ENABLE
,
279 .bet_max_consecutive
= 50,
280 .psm_entry_retries
= 5,
281 .psm_exit_retries
= 16,
282 .psm_entry_nullfunc_retries
= 3,
283 .psm_entry_hangover_period
= 1,
284 .keep_alive_interval
= 55000,
285 .max_listen_interval
= 20,
292 .host_clk_settling_time
= 5000,
293 .host_fast_wakeup_support
= false
297 .avg_weight_rssi_beacon
= 20,
298 .avg_weight_rssi_data
= 10,
299 .avg_weight_snr_beacon
= 20,
300 .avg_weight_snr_data
= 10,
303 .min_dwell_time_active
= 7500,
304 .max_dwell_time_active
= 30000,
305 .min_dwell_time_passive
= 100000,
306 .max_dwell_time_passive
= 100000,
310 /* sched_scan requires dwell times in TU instead of TU/1000 */
311 .min_dwell_time_active
= 8,
312 .max_dwell_time_active
= 30,
313 .dwell_time_passive
= 100,
315 .rssi_threshold
= -90,
319 .tx_per_channel_power_compensation_2
= {
320 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
322 .tx_per_channel_power_compensation_5
= {
323 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
324 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
325 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
329 .tx_ba_win_size
= 64,
330 .inactivity_timeout
= 10000,
336 .tx_min_block_num
= 40,
338 .min_req_tx_blocks
= 100,
339 .min_req_rx_blocks
= 22,
346 .tx_min_block_num
= 40,
348 .min_req_tx_blocks
= 45,
349 .min_req_rx_blocks
= 22,
355 .n_divider_fref_set_1
= 0xff, /* default */
356 .n_divider_fref_set_2
= 12,
357 .m_divider_fref_set_1
= 148,
358 .m_divider_fref_set_2
= 0xffff, /* default */
359 .coex_pll_stabilization_time
= 0xffffffff, /* default */
360 .ldo_stabilization_time
= 0xffff, /* default */
361 .fm_disturbed_band_margin
= 0xff, /* default */
362 .swallow_clk_diff
= 0xff, /* default */
364 .hci_io_ds
= HCI_IO_DS_6MA
,
367 static void __wl1271_op_remove_interface(struct wl1271
*wl
,
368 bool reset_tx_queues
);
369 static void wl1271_free_ap_keys(struct wl1271
*wl
);
372 static void wl1271_device_release(struct device
*dev
)
377 static struct platform_device wl1271_device
= {
381 /* device model insists to have a release function */
383 .release
= wl1271_device_release
,
387 static DEFINE_MUTEX(wl_list_mutex
);
388 static LIST_HEAD(wl_list
);
390 static int wl1271_dev_notify(struct notifier_block
*me
, unsigned long what
,
393 struct net_device
*dev
= arg
;
394 struct wireless_dev
*wdev
;
396 struct ieee80211_hw
*hw
;
398 struct wl1271
*wl_temp
;
401 /* Check that this notification is for us. */
402 if (what
!= NETDEV_CHANGE
)
405 wdev
= dev
->ieee80211_ptr
;
413 hw
= wiphy_priv(wiphy
);
418 mutex_lock(&wl_list_mutex
);
419 list_for_each_entry(wl
, &wl_list
, list
) {
423 mutex_unlock(&wl_list_mutex
);
427 mutex_lock(&wl
->mutex
);
429 if (wl
->state
== WL1271_STATE_OFF
)
432 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
435 ret
= wl1271_ps_elp_wakeup(wl
);
439 if ((dev
->operstate
== IF_OPER_UP
) &&
440 !test_and_set_bit(WL1271_FLAG_STA_STATE_SENT
, &wl
->flags
)) {
441 wl1271_cmd_set_sta_state(wl
);
442 wl1271_info("Association completed.");
445 wl1271_ps_elp_sleep(wl
);
448 mutex_unlock(&wl
->mutex
);
453 static int wl1271_reg_notify(struct wiphy
*wiphy
,
454 struct regulatory_request
*request
)
456 struct ieee80211_supported_band
*band
;
457 struct ieee80211_channel
*ch
;
460 band
= wiphy
->bands
[IEEE80211_BAND_5GHZ
];
461 for (i
= 0; i
< band
->n_channels
; i
++) {
462 ch
= &band
->channels
[i
];
463 if (ch
->flags
& IEEE80211_CHAN_DISABLED
)
466 if (ch
->flags
& IEEE80211_CHAN_RADAR
)
467 ch
->flags
|= IEEE80211_CHAN_NO_IBSS
|
468 IEEE80211_CHAN_PASSIVE_SCAN
;
475 static void wl1271_conf_init(struct wl1271
*wl
)
479 * This function applies the default configuration to the driver. This
480 * function is invoked upon driver load (spi probe.)
482 * The configuration is stored in a run-time structure in order to
483 * facilitate for run-time adjustment of any of the parameters. Making
484 * changes to the configuration structure will apply the new values on
485 * the next interface up (wl1271_op_start.)
488 /* apply driver default configuration */
489 memcpy(&wl
->conf
, &default_conf
, sizeof(default_conf
));
493 static int wl1271_plt_init(struct wl1271
*wl
)
495 struct conf_tx_ac_category
*conf_ac
;
496 struct conf_tx_tid
*conf_tid
;
499 if (wl
->chip
.id
== CHIP_ID_1283_PG20
)
500 ret
= wl128x_cmd_general_parms(wl
);
502 ret
= wl1271_cmd_general_parms(wl
);
506 if (wl
->chip
.id
== CHIP_ID_1283_PG20
)
507 ret
= wl128x_cmd_radio_parms(wl
);
509 ret
= wl1271_cmd_radio_parms(wl
);
513 if (wl
->chip
.id
!= CHIP_ID_1283_PG20
) {
514 ret
= wl1271_cmd_ext_radio_parms(wl
);
521 /* Chip-specific initializations */
522 ret
= wl1271_chip_specific_init(wl
);
526 ret
= wl1271_sta_init_templates_config(wl
);
530 ret
= wl1271_acx_init_mem_config(wl
);
534 /* PHY layer config */
535 ret
= wl1271_init_phy_config(wl
);
537 goto out_free_memmap
;
539 ret
= wl1271_acx_dco_itrim_params(wl
);
541 goto out_free_memmap
;
543 /* Initialize connection monitoring thresholds */
544 ret
= wl1271_acx_conn_monit_params(wl
, false);
546 goto out_free_memmap
;
548 /* Bluetooth WLAN coexistence */
549 ret
= wl1271_init_pta(wl
);
551 goto out_free_memmap
;
553 /* FM WLAN coexistence */
554 ret
= wl1271_acx_fm_coex(wl
);
556 goto out_free_memmap
;
558 /* Energy detection */
559 ret
= wl1271_init_energy_detection(wl
);
561 goto out_free_memmap
;
563 ret
= wl1271_acx_sta_mem_cfg(wl
);
565 goto out_free_memmap
;
567 /* Default fragmentation threshold */
568 ret
= wl1271_acx_frag_threshold(wl
, wl
->conf
.tx
.frag_threshold
);
570 goto out_free_memmap
;
572 /* Default TID/AC configuration */
573 BUG_ON(wl
->conf
.tx
.tid_conf_count
!= wl
->conf
.tx
.ac_conf_count
);
574 for (i
= 0; i
< wl
->conf
.tx
.tid_conf_count
; i
++) {
575 conf_ac
= &wl
->conf
.tx
.ac_conf
[i
];
576 ret
= wl1271_acx_ac_cfg(wl
, conf_ac
->ac
, conf_ac
->cw_min
,
577 conf_ac
->cw_max
, conf_ac
->aifsn
,
578 conf_ac
->tx_op_limit
);
580 goto out_free_memmap
;
582 conf_tid
= &wl
->conf
.tx
.tid_conf
[i
];
583 ret
= wl1271_acx_tid_cfg(wl
, conf_tid
->queue_id
,
584 conf_tid
->channel_type
,
587 conf_tid
->ack_policy
,
588 conf_tid
->apsd_conf
[0],
589 conf_tid
->apsd_conf
[1]);
591 goto out_free_memmap
;
594 /* Enable data path */
595 ret
= wl1271_cmd_data_path(wl
, 1);
597 goto out_free_memmap
;
599 /* Configure for CAM power saving (ie. always active) */
600 ret
= wl1271_acx_sleep_auth(wl
, WL1271_PSM_CAM
);
602 goto out_free_memmap
;
605 ret
= wl1271_acx_pm_config(wl
);
607 goto out_free_memmap
;
612 kfree(wl
->target_mem_map
);
613 wl
->target_mem_map
= NULL
;
618 static void wl1271_irq_ps_regulate_link(struct wl1271
*wl
, u8 hlid
, u8 tx_blks
)
622 /* only regulate station links */
623 if (hlid
< WL1271_AP_STA_HLID_START
)
626 fw_ps
= test_bit(hlid
, (unsigned long *)&wl
->ap_fw_ps_map
);
629 * Wake up from high level PS if the STA is asleep with too little
630 * blocks in FW or if the STA is awake.
632 if (!fw_ps
|| tx_blks
< WL1271_PS_STA_MAX_BLOCKS
)
633 wl1271_ps_link_end(wl
, hlid
);
635 /* Start high-level PS if the STA is asleep with enough blocks in FW */
636 else if (fw_ps
&& tx_blks
>= WL1271_PS_STA_MAX_BLOCKS
)
637 wl1271_ps_link_start(wl
, hlid
, true);
640 static void wl1271_irq_update_links_status(struct wl1271
*wl
,
641 struct wl1271_fw_ap_status
*status
)
646 cur_fw_ps_map
= le32_to_cpu(status
->link_ps_bitmap
);
647 if (wl
->ap_fw_ps_map
!= cur_fw_ps_map
) {
648 wl1271_debug(DEBUG_PSM
,
649 "link ps prev 0x%x cur 0x%x changed 0x%x",
650 wl
->ap_fw_ps_map
, cur_fw_ps_map
,
651 wl
->ap_fw_ps_map
^ cur_fw_ps_map
);
653 wl
->ap_fw_ps_map
= cur_fw_ps_map
;
656 for (hlid
= WL1271_AP_STA_HLID_START
; hlid
< AP_MAX_LINKS
; hlid
++) {
657 u8 cnt
= status
->tx_lnk_free_blks
[hlid
] -
658 wl
->links
[hlid
].prev_freed_blks
;
660 wl
->links
[hlid
].prev_freed_blks
=
661 status
->tx_lnk_free_blks
[hlid
];
662 wl
->links
[hlid
].allocated_blks
-= cnt
;
664 wl1271_irq_ps_regulate_link(wl
, hlid
,
665 wl
->links
[hlid
].allocated_blks
);
669 static void wl1271_fw_status(struct wl1271
*wl
,
670 struct wl1271_fw_full_status
*full_status
)
672 struct wl1271_fw_common_status
*status
= &full_status
->common
;
674 u32 old_tx_blk_count
= wl
->tx_blocks_available
;
675 u32 freed_blocks
= 0;
678 if (wl
->bss_type
== BSS_TYPE_AP_BSS
) {
679 wl1271_raw_read(wl
, FW_STATUS_ADDR
, status
,
680 sizeof(struct wl1271_fw_ap_status
), false);
682 wl1271_raw_read(wl
, FW_STATUS_ADDR
, status
,
683 sizeof(struct wl1271_fw_sta_status
), false);
686 wl1271_debug(DEBUG_IRQ
, "intr: 0x%x (fw_rx_counter = %d, "
687 "drv_rx_counter = %d, tx_results_counter = %d)",
689 status
->fw_rx_counter
,
690 status
->drv_rx_counter
,
691 status
->tx_results_counter
);
693 /* update number of available TX blocks */
694 for (i
= 0; i
< NUM_TX_QUEUES
; i
++) {
695 freed_blocks
+= le32_to_cpu(status
->tx_released_blks
[i
]) -
696 wl
->tx_blocks_freed
[i
];
698 wl
->tx_blocks_freed
[i
] =
699 le32_to_cpu(status
->tx_released_blks
[i
]);
702 wl
->tx_allocated_blocks
-= freed_blocks
;
704 if (wl
->bss_type
== BSS_TYPE_AP_BSS
) {
705 /* Update num of allocated TX blocks per link and ps status */
706 wl1271_irq_update_links_status(wl
, &full_status
->ap
);
707 wl
->tx_blocks_available
+= freed_blocks
;
709 int avail
= full_status
->sta
.tx_total
- wl
->tx_allocated_blocks
;
712 * The FW might change the total number of TX memblocks before
713 * we get a notification about blocks being released. Thus, the
714 * available blocks calculation might yield a temporary result
715 * which is lower than the actual available blocks. Keeping in
716 * mind that only blocks that were allocated can be moved from
717 * TX to RX, tx_blocks_available should never decrease here.
719 wl
->tx_blocks_available
= max((int)wl
->tx_blocks_available
,
723 /* if more blocks are available now, tx work can be scheduled */
724 if (wl
->tx_blocks_available
> old_tx_blk_count
)
725 clear_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
);
727 /* update the host-chipset time offset */
729 wl
->time_offset
= (timespec_to_ns(&ts
) >> 10) -
730 (s64
)le32_to_cpu(status
->fw_localtime
);
733 static void wl1271_flush_deferred_work(struct wl1271
*wl
)
737 /* Pass all received frames to the network stack */
738 while ((skb
= skb_dequeue(&wl
->deferred_rx_queue
)))
739 ieee80211_rx_ni(wl
->hw
, skb
);
741 /* Return sent skbs to the network stack */
742 while ((skb
= skb_dequeue(&wl
->deferred_tx_queue
)))
743 ieee80211_tx_status(wl
->hw
, skb
);
746 static void wl1271_netstack_work(struct work_struct
*work
)
749 container_of(work
, struct wl1271
, netstack_work
);
752 wl1271_flush_deferred_work(wl
);
753 } while (skb_queue_len(&wl
->deferred_rx_queue
));
756 #define WL1271_IRQ_MAX_LOOPS 256
758 irqreturn_t
wl1271_irq(int irq
, void *cookie
)
762 int loopcount
= WL1271_IRQ_MAX_LOOPS
;
763 struct wl1271
*wl
= (struct wl1271
*)cookie
;
765 unsigned int defer_count
;
768 /* TX might be handled here, avoid redundant work */
769 set_bit(WL1271_FLAG_TX_PENDING
, &wl
->flags
);
770 cancel_work_sync(&wl
->tx_work
);
773 * In case edge triggered interrupt must be used, we cannot iterate
774 * more than once without introducing race conditions with the hardirq.
776 if (wl
->platform_quirks
& WL12XX_PLATFORM_QUIRK_EDGE_IRQ
)
779 mutex_lock(&wl
->mutex
);
781 wl1271_debug(DEBUG_IRQ
, "IRQ work");
783 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
786 ret
= wl1271_ps_elp_wakeup(wl
);
790 while (!done
&& loopcount
--) {
792 * In order to avoid a race with the hardirq, clear the flag
793 * before acknowledging the chip. Since the mutex is held,
794 * wl1271_ps_elp_wakeup cannot be called concurrently.
796 clear_bit(WL1271_FLAG_IRQ_RUNNING
, &wl
->flags
);
797 smp_mb__after_clear_bit();
799 wl1271_fw_status(wl
, wl
->fw_status
);
800 intr
= le32_to_cpu(wl
->fw_status
->common
.intr
);
801 intr
&= WL1271_INTR_MASK
;
807 if (unlikely(intr
& WL1271_ACX_INTR_WATCHDOG
)) {
808 wl1271_error("watchdog interrupt received! "
809 "starting recovery.");
810 ieee80211_queue_work(wl
->hw
, &wl
->recovery_work
);
812 /* restarting the chip. ignore any other interrupt. */
816 if (likely(intr
& WL1271_ACX_INTR_DATA
)) {
817 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_DATA");
819 wl1271_rx(wl
, &wl
->fw_status
->common
);
821 /* Check if any tx blocks were freed */
822 spin_lock_irqsave(&wl
->wl_lock
, flags
);
823 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
) &&
824 wl
->tx_queue_count
) {
825 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
827 * In order to avoid starvation of the TX path,
828 * call the work function directly.
830 wl1271_tx_work_locked(wl
);
832 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
835 /* check for tx results */
836 if (wl
->fw_status
->common
.tx_results_counter
!=
837 (wl
->tx_results_count
& 0xff))
838 wl1271_tx_complete(wl
);
840 /* Make sure the deferred queues don't get too long */
841 defer_count
= skb_queue_len(&wl
->deferred_tx_queue
) +
842 skb_queue_len(&wl
->deferred_rx_queue
);
843 if (defer_count
> WL1271_DEFERRED_QUEUE_LIMIT
)
844 wl1271_flush_deferred_work(wl
);
847 if (intr
& WL1271_ACX_INTR_EVENT_A
) {
848 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_EVENT_A");
849 wl1271_event_handle(wl
, 0);
852 if (intr
& WL1271_ACX_INTR_EVENT_B
) {
853 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_EVENT_B");
854 wl1271_event_handle(wl
, 1);
857 if (intr
& WL1271_ACX_INTR_INIT_COMPLETE
)
858 wl1271_debug(DEBUG_IRQ
,
859 "WL1271_ACX_INTR_INIT_COMPLETE");
861 if (intr
& WL1271_ACX_INTR_HW_AVAILABLE
)
862 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_HW_AVAILABLE");
865 wl1271_ps_elp_sleep(wl
);
868 spin_lock_irqsave(&wl
->wl_lock
, flags
);
869 /* In case TX was not handled here, queue TX work */
870 clear_bit(WL1271_FLAG_TX_PENDING
, &wl
->flags
);
871 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
) &&
873 ieee80211_queue_work(wl
->hw
, &wl
->tx_work
);
874 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
876 mutex_unlock(&wl
->mutex
);
880 EXPORT_SYMBOL_GPL(wl1271_irq
);
882 static int wl1271_fetch_firmware(struct wl1271
*wl
)
884 const struct firmware
*fw
;
888 switch (wl
->bss_type
) {
889 case BSS_TYPE_AP_BSS
:
890 if (wl
->chip
.id
== CHIP_ID_1283_PG20
)
891 fw_name
= WL128X_AP_FW_NAME
;
893 fw_name
= WL127X_AP_FW_NAME
;
896 case BSS_TYPE_STA_BSS
:
897 if (wl
->chip
.id
== CHIP_ID_1283_PG20
)
898 fw_name
= WL128X_FW_NAME
;
900 fw_name
= WL1271_FW_NAME
;
903 wl1271_error("no compatible firmware for bss_type %d",
908 wl1271_debug(DEBUG_BOOT
, "booting firmware %s", fw_name
);
910 ret
= request_firmware(&fw
, fw_name
, wl1271_wl_to_dev(wl
));
913 wl1271_error("could not get firmware: %d", ret
);
918 wl1271_error("firmware size is not multiple of 32 bits: %zu",
925 wl
->fw_len
= fw
->size
;
926 wl
->fw
= vmalloc(wl
->fw_len
);
929 wl1271_error("could not allocate memory for the firmware");
934 memcpy(wl
->fw
, fw
->data
, wl
->fw_len
);
935 wl
->fw_bss_type
= wl
->bss_type
;
939 release_firmware(fw
);
944 static int wl1271_fetch_nvs(struct wl1271
*wl
)
946 const struct firmware
*fw
;
949 ret
= request_firmware(&fw
, WL12XX_NVS_NAME
, wl1271_wl_to_dev(wl
));
952 wl1271_error("could not get nvs file: %d", ret
);
956 wl
->nvs
= kmemdup(fw
->data
, fw
->size
, GFP_KERNEL
);
959 wl1271_error("could not allocate memory for the nvs file");
964 wl
->nvs_len
= fw
->size
;
967 release_firmware(fw
);
972 static void wl1271_recovery_work(struct work_struct
*work
)
975 container_of(work
, struct wl1271
, recovery_work
);
977 mutex_lock(&wl
->mutex
);
979 if (wl
->state
!= WL1271_STATE_ON
)
982 wl1271_info("Hardware recovery in progress. FW ver: %s pc: 0x%x",
983 wl
->chip
.fw_ver_str
, wl1271_read32(wl
, SCR_PAD4
));
985 if (test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
986 ieee80211_connection_loss(wl
->vif
);
988 /* Prevent spurious TX during FW restart */
989 ieee80211_stop_queues(wl
->hw
);
991 if (wl
->sched_scanning
) {
992 ieee80211_sched_scan_stopped(wl
->hw
);
993 wl
->sched_scanning
= false;
996 /* reboot the chipset */
997 __wl1271_op_remove_interface(wl
, false);
998 ieee80211_restart_hw(wl
->hw
);
1001 * Its safe to enable TX now - the queues are stopped after a request
1002 * to restart the HW.
1004 ieee80211_wake_queues(wl
->hw
);
1007 mutex_unlock(&wl
->mutex
);
1010 static void wl1271_fw_wakeup(struct wl1271
*wl
)
1014 elp_reg
= ELPCTRL_WAKE_UP
;
1015 wl1271_raw_write32(wl
, HW_ACCESS_ELP_CTRL_REG_ADDR
, elp_reg
);
1018 static int wl1271_setup(struct wl1271
*wl
)
1020 wl
->fw_status
= kmalloc(sizeof(*wl
->fw_status
), GFP_KERNEL
);
1024 wl
->tx_res_if
= kmalloc(sizeof(*wl
->tx_res_if
), GFP_KERNEL
);
1025 if (!wl
->tx_res_if
) {
1026 kfree(wl
->fw_status
);
1033 static int wl1271_chip_wakeup(struct wl1271
*wl
)
1035 struct wl1271_partition_set partition
;
1038 msleep(WL1271_PRE_POWER_ON_SLEEP
);
1039 ret
= wl1271_power_on(wl
);
1042 msleep(WL1271_POWER_ON_SLEEP
);
1043 wl1271_io_reset(wl
);
1046 /* We don't need a real memory partition here, because we only want
1047 * to use the registers at this point. */
1048 memset(&partition
, 0, sizeof(partition
));
1049 partition
.reg
.start
= REGISTERS_BASE
;
1050 partition
.reg
.size
= REGISTERS_DOWN_SIZE
;
1051 wl1271_set_partition(wl
, &partition
);
1053 /* ELP module wake up */
1054 wl1271_fw_wakeup(wl
);
1056 /* whal_FwCtrl_BootSm() */
1058 /* 0. read chip id from CHIP_ID */
1059 wl
->chip
.id
= wl1271_read32(wl
, CHIP_ID_B
);
1061 /* 1. check if chip id is valid */
1063 switch (wl
->chip
.id
) {
1064 case CHIP_ID_1271_PG10
:
1065 wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
1068 ret
= wl1271_setup(wl
);
1072 case CHIP_ID_1271_PG20
:
1073 wl1271_debug(DEBUG_BOOT
, "chip id 0x%x (1271 PG20)",
1076 /* end-of-transaction flag should be set in wl127x AP mode */
1077 if (wl
->bss_type
== BSS_TYPE_AP_BSS
)
1078 wl
->quirks
|= WL12XX_QUIRK_END_OF_TRANSACTION
;
1080 ret
= wl1271_setup(wl
);
1084 case CHIP_ID_1283_PG20
:
1085 wl1271_debug(DEBUG_BOOT
, "chip id 0x%x (1283 PG20)",
1088 ret
= wl1271_setup(wl
);
1091 if (wl1271_set_block_size(wl
))
1092 wl
->quirks
|= WL12XX_QUIRK_BLOCKSIZE_ALIGNMENT
;
1094 case CHIP_ID_1283_PG10
:
1096 wl1271_warning("unsupported chip id: 0x%x", wl
->chip
.id
);
1101 /* Make sure the firmware type matches the BSS type */
1102 if (wl
->fw
== NULL
|| wl
->fw_bss_type
!= wl
->bss_type
) {
1103 ret
= wl1271_fetch_firmware(wl
);
1108 /* No NVS from netlink, try to get it from the filesystem */
1109 if (wl
->nvs
== NULL
) {
1110 ret
= wl1271_fetch_nvs(wl
);
1119 static unsigned int wl1271_get_fw_ver_quirks(struct wl1271
*wl
)
1121 unsigned int quirks
= 0;
1122 unsigned int *fw_ver
= wl
->chip
.fw_ver
;
1124 /* Only for wl127x */
1125 if ((fw_ver
[FW_VER_CHIP
] == FW_VER_CHIP_WL127X
) &&
1126 /* Check STA version */
1127 (((fw_ver
[FW_VER_IF_TYPE
] == FW_VER_IF_TYPE_STA
) &&
1128 (fw_ver
[FW_VER_MINOR
] < FW_VER_MINOR_1_SPARE_STA_MIN
)) ||
1129 /* Check AP version */
1130 ((fw_ver
[FW_VER_IF_TYPE
] == FW_VER_IF_TYPE_AP
) &&
1131 (fw_ver
[FW_VER_MINOR
] < FW_VER_MINOR_1_SPARE_AP_MIN
))))
1132 quirks
|= WL12XX_QUIRK_USE_2_SPARE_BLOCKS
;
1137 int wl1271_plt_start(struct wl1271
*wl
)
1139 int retries
= WL1271_BOOT_RETRIES
;
1142 mutex_lock(&wl
->mutex
);
1144 wl1271_notice("power up");
1146 if (wl
->state
!= WL1271_STATE_OFF
) {
1147 wl1271_error("cannot go into PLT state because not "
1148 "in off state: %d", wl
->state
);
1153 wl
->bss_type
= BSS_TYPE_STA_BSS
;
1157 ret
= wl1271_chip_wakeup(wl
);
1161 ret
= wl1271_boot(wl
);
1165 ret
= wl1271_plt_init(wl
);
1169 wl
->state
= WL1271_STATE_PLT
;
1170 wl1271_notice("firmware booted in PLT mode (%s)",
1171 wl
->chip
.fw_ver_str
);
1173 /* Check if any quirks are needed with older fw versions */
1174 wl
->quirks
|= wl1271_get_fw_ver_quirks(wl
);
1178 mutex_unlock(&wl
->mutex
);
1179 /* Unlocking the mutex in the middle of handling is
1180 inherently unsafe. In this case we deem it safe to do,
1181 because we need to let any possibly pending IRQ out of
1182 the system (and while we are WL1271_STATE_OFF the IRQ
1183 work function will not do anything.) Also, any other
1184 possible concurrent operations will fail due to the
1185 current state, hence the wl1271 struct should be safe. */
1186 wl1271_disable_interrupts(wl
);
1187 wl1271_flush_deferred_work(wl
);
1188 cancel_work_sync(&wl
->netstack_work
);
1189 mutex_lock(&wl
->mutex
);
1191 wl1271_power_off(wl
);
1194 wl1271_error("firmware boot in PLT mode failed despite %d retries",
1195 WL1271_BOOT_RETRIES
);
1197 mutex_unlock(&wl
->mutex
);
1202 static int __wl1271_plt_stop(struct wl1271
*wl
)
1206 wl1271_notice("power down");
1208 if (wl
->state
!= WL1271_STATE_PLT
) {
1209 wl1271_error("cannot power down because not in PLT "
1210 "state: %d", wl
->state
);
1215 wl1271_power_off(wl
);
1217 wl
->state
= WL1271_STATE_OFF
;
1220 mutex_unlock(&wl
->mutex
);
1221 wl1271_disable_interrupts(wl
);
1222 wl1271_flush_deferred_work(wl
);
1223 cancel_work_sync(&wl
->netstack_work
);
1224 cancel_work_sync(&wl
->recovery_work
);
1225 mutex_lock(&wl
->mutex
);
1230 int wl1271_plt_stop(struct wl1271
*wl
)
1234 mutex_lock(&wl
->mutex
);
1235 ret
= __wl1271_plt_stop(wl
);
1236 mutex_unlock(&wl
->mutex
);
1240 static void wl1271_op_tx(struct ieee80211_hw
*hw
, struct sk_buff
*skb
)
1242 struct wl1271
*wl
= hw
->priv
;
1243 unsigned long flags
;
1247 q
= wl1271_tx_get_queue(skb_get_queue_mapping(skb
));
1249 if (wl
->bss_type
== BSS_TYPE_AP_BSS
)
1250 hlid
= wl1271_tx_get_hlid(skb
);
1252 spin_lock_irqsave(&wl
->wl_lock
, flags
);
1254 wl
->tx_queue_count
++;
1257 * The workqueue is slow to process the tx_queue and we need stop
1258 * the queue here, otherwise the queue will get too long.
1260 if (wl
->tx_queue_count
>= WL1271_TX_QUEUE_HIGH_WATERMARK
) {
1261 wl1271_debug(DEBUG_TX
, "op_tx: stopping queues");
1262 ieee80211_stop_queues(wl
->hw
);
1263 set_bit(WL1271_FLAG_TX_QUEUE_STOPPED
, &wl
->flags
);
1266 /* queue the packet */
1267 if (wl
->bss_type
== BSS_TYPE_AP_BSS
) {
1268 wl1271_debug(DEBUG_TX
, "queue skb hlid %d q %d", hlid
, q
);
1269 skb_queue_tail(&wl
->links
[hlid
].tx_queue
[q
], skb
);
1271 skb_queue_tail(&wl
->tx_queue
[q
], skb
);
1275 * The chip specific setup must run before the first TX packet -
1276 * before that, the tx_work will not be initialized!
1279 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
) &&
1280 !test_bit(WL1271_FLAG_TX_PENDING
, &wl
->flags
))
1281 ieee80211_queue_work(wl
->hw
, &wl
->tx_work
);
1283 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
1286 int wl1271_tx_dummy_packet(struct wl1271
*wl
)
1288 unsigned long flags
;
1290 spin_lock_irqsave(&wl
->wl_lock
, flags
);
1291 set_bit(WL1271_FLAG_DUMMY_PACKET_PENDING
, &wl
->flags
);
1292 wl
->tx_queue_count
++;
1293 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
1295 /* The FW is low on RX memory blocks, so send the dummy packet asap */
1296 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
))
1297 wl1271_tx_work_locked(wl
);
1300 * If the FW TX is busy, TX work will be scheduled by the threaded
1301 * interrupt handler function
1307 * The size of the dummy packet should be at least 1400 bytes. However, in
1308 * order to minimize the number of bus transactions, aligning it to 512 bytes
1309 * boundaries could be beneficial, performance wise
1311 #define TOTAL_TX_DUMMY_PACKET_SIZE (ALIGN(1400, 512))
1313 static struct sk_buff
*wl12xx_alloc_dummy_packet(struct wl1271
*wl
)
1315 struct sk_buff
*skb
;
1316 struct ieee80211_hdr_3addr
*hdr
;
1317 unsigned int dummy_packet_size
;
1319 dummy_packet_size
= TOTAL_TX_DUMMY_PACKET_SIZE
-
1320 sizeof(struct wl1271_tx_hw_descr
) - sizeof(*hdr
);
1322 skb
= dev_alloc_skb(TOTAL_TX_DUMMY_PACKET_SIZE
);
1324 wl1271_warning("Failed to allocate a dummy packet skb");
1328 skb_reserve(skb
, sizeof(struct wl1271_tx_hw_descr
));
1330 hdr
= (struct ieee80211_hdr_3addr
*) skb_put(skb
, sizeof(*hdr
));
1331 memset(hdr
, 0, sizeof(*hdr
));
1332 hdr
->frame_control
= cpu_to_le16(IEEE80211_FTYPE_DATA
|
1333 IEEE80211_STYPE_NULLFUNC
|
1334 IEEE80211_FCTL_TODS
);
1336 memset(skb_put(skb
, dummy_packet_size
), 0, dummy_packet_size
);
1338 /* Dummy packets require the TID to be management */
1339 skb
->priority
= WL1271_TID_MGMT
;
1341 /* Initialize all fields that might be used */
1342 skb_set_queue_mapping(skb
, 0);
1343 memset(IEEE80211_SKB_CB(skb
), 0, sizeof(struct ieee80211_tx_info
));
1349 static struct notifier_block wl1271_dev_notifier
= {
1350 .notifier_call
= wl1271_dev_notify
,
1353 static int wl1271_configure_suspend(struct wl1271
*wl
)
1357 if (wl
->bss_type
!= BSS_TYPE_STA_BSS
)
1360 mutex_lock(&wl
->mutex
);
1362 ret
= wl1271_ps_elp_wakeup(wl
);
1366 /* enter psm if needed*/
1367 if (!test_bit(WL1271_FLAG_PSM
, &wl
->flags
)) {
1368 DECLARE_COMPLETION_ONSTACK(compl);
1370 wl
->ps_compl
= &compl;
1371 ret
= wl1271_ps_set_mode(wl
, STATION_POWER_SAVE_MODE
,
1372 wl
->basic_rate
, true);
1376 /* we must unlock here so we will be able to get events */
1377 wl1271_ps_elp_sleep(wl
);
1378 mutex_unlock(&wl
->mutex
);
1380 ret
= wait_for_completion_timeout(
1381 &compl, msecs_to_jiffies(WL1271_PS_COMPLETE_TIMEOUT
));
1383 wl1271_warning("couldn't enter ps mode!");
1388 /* take mutex again, and wakeup */
1389 mutex_lock(&wl
->mutex
);
1391 ret
= wl1271_ps_elp_wakeup(wl
);
1396 wl1271_ps_elp_sleep(wl
);
1398 mutex_unlock(&wl
->mutex
);
1404 static void wl1271_configure_resume(struct wl1271
*wl
)
1408 if (wl
->bss_type
!= BSS_TYPE_STA_BSS
)
1411 mutex_lock(&wl
->mutex
);
1412 ret
= wl1271_ps_elp_wakeup(wl
);
1416 /* exit psm if it wasn't configured */
1417 if (!test_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
))
1418 wl1271_ps_set_mode(wl
, STATION_ACTIVE_MODE
,
1419 wl
->basic_rate
, true);
1421 wl1271_ps_elp_sleep(wl
);
1423 mutex_unlock(&wl
->mutex
);
1426 static int wl1271_op_suspend(struct ieee80211_hw
*hw
,
1427 struct cfg80211_wowlan
*wow
)
1429 struct wl1271
*wl
= hw
->priv
;
1430 wl1271_debug(DEBUG_MAC80211
, "mac80211 suspend wow=%d", !!wow
);
1431 wl
->wow_enabled
= !!wow
;
1432 if (wl
->wow_enabled
) {
1434 ret
= wl1271_configure_suspend(wl
);
1436 wl1271_warning("couldn't prepare device to suspend");
1439 /* flush any remaining work */
1440 wl1271_debug(DEBUG_MAC80211
, "flushing remaining works");
1441 flush_delayed_work(&wl
->scan_complete_work
);
1444 * disable and re-enable interrupts in order to flush
1447 wl1271_disable_interrupts(wl
);
1450 * set suspended flag to avoid triggering a new threaded_irq
1451 * work. no need for spinlock as interrupts are disabled.
1453 set_bit(WL1271_FLAG_SUSPENDED
, &wl
->flags
);
1455 wl1271_enable_interrupts(wl
);
1456 flush_work(&wl
->tx_work
);
1457 flush_delayed_work(&wl
->pspoll_work
);
1458 flush_delayed_work(&wl
->elp_work
);
1463 static int wl1271_op_resume(struct ieee80211_hw
*hw
)
1465 struct wl1271
*wl
= hw
->priv
;
1466 wl1271_debug(DEBUG_MAC80211
, "mac80211 resume wow=%d",
1470 * re-enable irq_work enqueuing, and call irq_work directly if
1471 * there is a pending work.
1473 if (wl
->wow_enabled
) {
1474 struct wl1271
*wl
= hw
->priv
;
1475 unsigned long flags
;
1476 bool run_irq_work
= false;
1478 spin_lock_irqsave(&wl
->wl_lock
, flags
);
1479 clear_bit(WL1271_FLAG_SUSPENDED
, &wl
->flags
);
1480 if (test_and_clear_bit(WL1271_FLAG_PENDING_WORK
, &wl
->flags
))
1481 run_irq_work
= true;
1482 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
1485 wl1271_debug(DEBUG_MAC80211
,
1486 "run postponed irq_work directly");
1488 wl1271_enable_interrupts(wl
);
1491 wl1271_configure_resume(wl
);
1497 static int wl1271_op_start(struct ieee80211_hw
*hw
)
1499 wl1271_debug(DEBUG_MAC80211
, "mac80211 start");
1502 * We have to delay the booting of the hardware because
1503 * we need to know the local MAC address before downloading and
1504 * initializing the firmware. The MAC address cannot be changed
1505 * after boot, and without the proper MAC address, the firmware
1506 * will not function properly.
1508 * The MAC address is first known when the corresponding interface
1509 * is added. That is where we will initialize the hardware.
1511 * In addition, we currently have different firmwares for AP and managed
1512 * operation. We will know which to boot according to interface type.
1518 static void wl1271_op_stop(struct ieee80211_hw
*hw
)
1520 wl1271_debug(DEBUG_MAC80211
, "mac80211 stop");
1523 static int wl1271_op_add_interface(struct ieee80211_hw
*hw
,
1524 struct ieee80211_vif
*vif
)
1526 struct wl1271
*wl
= hw
->priv
;
1527 struct wiphy
*wiphy
= hw
->wiphy
;
1528 int retries
= WL1271_BOOT_RETRIES
;
1530 bool booted
= false;
1532 wl1271_debug(DEBUG_MAC80211
, "mac80211 add interface type %d mac %pM",
1533 vif
->type
, vif
->addr
);
1535 mutex_lock(&wl
->mutex
);
1537 wl1271_debug(DEBUG_MAC80211
,
1538 "multiple vifs are not supported yet");
1544 * in some very corner case HW recovery scenarios its possible to
1545 * get here before __wl1271_op_remove_interface is complete, so
1546 * opt out if that is the case.
1548 if (test_bit(WL1271_FLAG_IF_INITIALIZED
, &wl
->flags
)) {
1553 switch (vif
->type
) {
1554 case NL80211_IFTYPE_STATION
:
1555 wl
->bss_type
= BSS_TYPE_STA_BSS
;
1556 wl
->set_bss_type
= BSS_TYPE_STA_BSS
;
1558 case NL80211_IFTYPE_ADHOC
:
1559 wl
->bss_type
= BSS_TYPE_IBSS
;
1560 wl
->set_bss_type
= BSS_TYPE_STA_BSS
;
1562 case NL80211_IFTYPE_AP
:
1563 wl
->bss_type
= BSS_TYPE_AP_BSS
;
1570 memcpy(wl
->mac_addr
, vif
->addr
, ETH_ALEN
);
1572 if (wl
->state
!= WL1271_STATE_OFF
) {
1573 wl1271_error("cannot start because not in off state: %d",
1581 ret
= wl1271_chip_wakeup(wl
);
1585 ret
= wl1271_boot(wl
);
1589 ret
= wl1271_hw_init(wl
);
1597 mutex_unlock(&wl
->mutex
);
1598 /* Unlocking the mutex in the middle of handling is
1599 inherently unsafe. In this case we deem it safe to do,
1600 because we need to let any possibly pending IRQ out of
1601 the system (and while we are WL1271_STATE_OFF the IRQ
1602 work function will not do anything.) Also, any other
1603 possible concurrent operations will fail due to the
1604 current state, hence the wl1271 struct should be safe. */
1605 wl1271_disable_interrupts(wl
);
1606 wl1271_flush_deferred_work(wl
);
1607 cancel_work_sync(&wl
->netstack_work
);
1608 mutex_lock(&wl
->mutex
);
1610 wl1271_power_off(wl
);
1614 wl1271_error("firmware boot failed despite %d retries",
1615 WL1271_BOOT_RETRIES
);
1620 wl
->state
= WL1271_STATE_ON
;
1621 set_bit(WL1271_FLAG_IF_INITIALIZED
, &wl
->flags
);
1622 wl1271_info("firmware booted (%s)", wl
->chip
.fw_ver_str
);
1624 /* update hw/fw version info in wiphy struct */
1625 wiphy
->hw_version
= wl
->chip
.id
;
1626 strncpy(wiphy
->fw_version
, wl
->chip
.fw_ver_str
,
1627 sizeof(wiphy
->fw_version
));
1629 /* Check if any quirks are needed with older fw versions */
1630 wl
->quirks
|= wl1271_get_fw_ver_quirks(wl
);
1633 * Now we know if 11a is supported (info from the NVS), so disable
1634 * 11a channels if not supported
1636 if (!wl
->enable_11a
)
1637 wiphy
->bands
[IEEE80211_BAND_5GHZ
]->n_channels
= 0;
1639 wl1271_debug(DEBUG_MAC80211
, "11a is %ssupported",
1640 wl
->enable_11a
? "" : "not ");
1643 mutex_unlock(&wl
->mutex
);
1645 mutex_lock(&wl_list_mutex
);
1647 list_add(&wl
->list
, &wl_list
);
1648 mutex_unlock(&wl_list_mutex
);
1653 static void __wl1271_op_remove_interface(struct wl1271
*wl
,
1654 bool reset_tx_queues
)
1658 wl1271_debug(DEBUG_MAC80211
, "mac80211 remove interface");
1660 /* because of hardware recovery, we may get here twice */
1661 if (wl
->state
!= WL1271_STATE_ON
)
1664 wl1271_info("down");
1666 mutex_lock(&wl_list_mutex
);
1667 list_del(&wl
->list
);
1668 mutex_unlock(&wl_list_mutex
);
1670 /* enable dyn ps just in case (if left on due to fw crash etc) */
1671 if (wl
->bss_type
== BSS_TYPE_STA_BSS
)
1672 ieee80211_enable_dyn_ps(wl
->vif
);
1674 if (wl
->scan
.state
!= WL1271_SCAN_STATE_IDLE
) {
1675 wl
->scan
.state
= WL1271_SCAN_STATE_IDLE
;
1676 memset(wl
->scan
.scanned_ch
, 0, sizeof(wl
->scan
.scanned_ch
));
1677 wl
->scan
.req
= NULL
;
1678 ieee80211_scan_completed(wl
->hw
, true);
1682 * this must be before the cancel_work calls below, so that the work
1683 * functions don't perform further work.
1685 wl
->state
= WL1271_STATE_OFF
;
1687 mutex_unlock(&wl
->mutex
);
1689 wl1271_disable_interrupts(wl
);
1690 wl1271_flush_deferred_work(wl
);
1691 cancel_delayed_work_sync(&wl
->scan_complete_work
);
1692 cancel_work_sync(&wl
->netstack_work
);
1693 cancel_work_sync(&wl
->tx_work
);
1694 cancel_delayed_work_sync(&wl
->pspoll_work
);
1695 cancel_delayed_work_sync(&wl
->elp_work
);
1697 mutex_lock(&wl
->mutex
);
1699 /* let's notify MAC80211 about the remaining pending TX frames */
1700 wl1271_tx_reset(wl
, reset_tx_queues
);
1701 wl1271_power_off(wl
);
1703 memset(wl
->bssid
, 0, ETH_ALEN
);
1704 memset(wl
->ssid
, 0, IW_ESSID_MAX_SIZE
+ 1);
1706 wl
->bss_type
= MAX_BSS_TYPE
;
1707 wl
->set_bss_type
= MAX_BSS_TYPE
;
1708 wl
->band
= IEEE80211_BAND_2GHZ
;
1711 wl
->psm_entry_retry
= 0;
1712 wl
->power_level
= WL1271_DEFAULT_POWER_LEVEL
;
1713 wl
->tx_blocks_available
= 0;
1714 wl
->tx_allocated_blocks
= 0;
1715 wl
->tx_results_count
= 0;
1716 wl
->tx_packets_count
= 0;
1717 wl
->tx_security_last_seq
= 0;
1718 wl
->tx_security_seq
= 0;
1719 wl
->time_offset
= 0;
1720 wl
->session_counter
= 0;
1721 wl
->rate_set
= CONF_TX_RATE_MASK_BASIC
;
1724 wl1271_free_ap_keys(wl
);
1725 memset(wl
->ap_hlid_map
, 0, sizeof(wl
->ap_hlid_map
));
1726 wl
->ap_fw_ps_map
= 0;
1728 wl
->sched_scanning
= false;
1731 * this is performed after the cancel_work calls and the associated
1732 * mutex_lock, so that wl1271_op_add_interface does not accidentally
1733 * get executed before all these vars have been reset.
1737 for (i
= 0; i
< NUM_TX_QUEUES
; i
++)
1738 wl
->tx_blocks_freed
[i
] = 0;
1740 wl1271_debugfs_reset(wl
);
1742 kfree(wl
->fw_status
);
1743 wl
->fw_status
= NULL
;
1744 kfree(wl
->tx_res_if
);
1745 wl
->tx_res_if
= NULL
;
1746 kfree(wl
->target_mem_map
);
1747 wl
->target_mem_map
= NULL
;
1750 static void wl1271_op_remove_interface(struct ieee80211_hw
*hw
,
1751 struct ieee80211_vif
*vif
)
1753 struct wl1271
*wl
= hw
->priv
;
1755 mutex_lock(&wl
->mutex
);
1757 * wl->vif can be null here if someone shuts down the interface
1758 * just when hardware recovery has been started.
1761 WARN_ON(wl
->vif
!= vif
);
1762 __wl1271_op_remove_interface(wl
, true);
1765 mutex_unlock(&wl
->mutex
);
1766 cancel_work_sync(&wl
->recovery_work
);
1769 void wl1271_configure_filters(struct wl1271
*wl
, unsigned int filters
)
1771 wl1271_set_default_filters(wl
);
1773 /* combine requested filters with current filter config */
1774 filters
= wl
->filters
| filters
;
1776 wl1271_debug(DEBUG_FILTERS
, "RX filters set: ");
1778 if (filters
& FIF_PROMISC_IN_BSS
) {
1779 wl1271_debug(DEBUG_FILTERS
, " - FIF_PROMISC_IN_BSS");
1780 wl
->rx_config
&= ~CFG_UNI_FILTER_EN
;
1781 wl
->rx_config
|= CFG_BSSID_FILTER_EN
;
1783 if (filters
& FIF_BCN_PRBRESP_PROMISC
) {
1784 wl1271_debug(DEBUG_FILTERS
, " - FIF_BCN_PRBRESP_PROMISC");
1785 wl
->rx_config
&= ~CFG_BSSID_FILTER_EN
;
1786 wl
->rx_config
&= ~CFG_SSID_FILTER_EN
;
1788 if (filters
& FIF_OTHER_BSS
) {
1789 wl1271_debug(DEBUG_FILTERS
, " - FIF_OTHER_BSS");
1790 wl
->rx_config
&= ~CFG_BSSID_FILTER_EN
;
1792 if (filters
& FIF_CONTROL
) {
1793 wl1271_debug(DEBUG_FILTERS
, " - FIF_CONTROL");
1794 wl
->rx_filter
|= CFG_RX_CTL_EN
;
1796 if (filters
& FIF_FCSFAIL
) {
1797 wl1271_debug(DEBUG_FILTERS
, " - FIF_FCSFAIL");
1798 wl
->rx_filter
|= CFG_RX_FCS_ERROR
;
1802 static int wl1271_dummy_join(struct wl1271
*wl
)
1805 /* we need to use a dummy BSSID for now */
1806 static const u8 dummy_bssid
[ETH_ALEN
] = { 0x0b, 0xad, 0xde,
1809 memcpy(wl
->bssid
, dummy_bssid
, ETH_ALEN
);
1811 /* pass through frames from all BSS */
1812 wl1271_configure_filters(wl
, FIF_OTHER_BSS
);
1814 ret
= wl1271_cmd_join(wl
, wl
->set_bss_type
);
1818 set_bit(WL1271_FLAG_JOINED
, &wl
->flags
);
1824 static int wl1271_join(struct wl1271
*wl
, bool set_assoc
)
1829 * One of the side effects of the JOIN command is that is clears
1830 * WPA/WPA2 keys from the chipset. Performing a JOIN while associated
1831 * to a WPA/WPA2 access point will therefore kill the data-path.
1832 * Currently the only valid scenario for JOIN during association
1833 * is on roaming, in which case we will also be given new keys.
1834 * Keep the below message for now, unless it starts bothering
1835 * users who really like to roam a lot :)
1837 if (test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
1838 wl1271_info("JOIN while associated.");
1841 set_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
);
1843 ret
= wl1271_cmd_join(wl
, wl
->set_bss_type
);
1847 set_bit(WL1271_FLAG_JOINED
, &wl
->flags
);
1849 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
1853 * The join command disable the keep-alive mode, shut down its process,
1854 * and also clear the template config, so we need to reset it all after
1855 * the join. The acx_aid starts the keep-alive process, and the order
1856 * of the commands below is relevant.
1858 ret
= wl1271_acx_keep_alive_mode(wl
, true);
1862 ret
= wl1271_acx_aid(wl
, wl
->aid
);
1866 ret
= wl1271_cmd_build_klv_null_data(wl
);
1870 ret
= wl1271_acx_keep_alive_config(wl
, CMD_TEMPL_KLV_IDX_NULL_DATA
,
1871 ACX_KEEP_ALIVE_TPL_VALID
);
1879 static int wl1271_unjoin(struct wl1271
*wl
)
1883 /* to stop listening to a channel, we disconnect */
1884 ret
= wl1271_cmd_disconnect(wl
);
1888 clear_bit(WL1271_FLAG_JOINED
, &wl
->flags
);
1889 memset(wl
->bssid
, 0, ETH_ALEN
);
1891 /* stop filtering packets based on bssid */
1892 wl1271_configure_filters(wl
, FIF_OTHER_BSS
);
1898 static void wl1271_set_band_rate(struct wl1271
*wl
)
1900 if (wl
->band
== IEEE80211_BAND_2GHZ
)
1901 wl
->basic_rate_set
= wl
->conf
.tx
.basic_rate
;
1903 wl
->basic_rate_set
= wl
->conf
.tx
.basic_rate_5
;
1906 static int wl1271_sta_handle_idle(struct wl1271
*wl
, bool idle
)
1911 if (test_bit(WL1271_FLAG_JOINED
, &wl
->flags
)) {
1912 ret
= wl1271_unjoin(wl
);
1916 wl
->rate_set
= wl1271_tx_min_rate_get(wl
);
1917 ret
= wl1271_acx_sta_rate_policies(wl
);
1920 ret
= wl1271_acx_keep_alive_config(
1921 wl
, CMD_TEMPL_KLV_IDX_NULL_DATA
,
1922 ACX_KEEP_ALIVE_TPL_INVALID
);
1925 set_bit(WL1271_FLAG_IDLE
, &wl
->flags
);
1927 /* increment the session counter */
1928 wl
->session_counter
++;
1929 if (wl
->session_counter
>= SESSION_COUNTER_MAX
)
1930 wl
->session_counter
= 0;
1932 /* The current firmware only supports sched_scan in idle */
1933 if (wl
->sched_scanning
) {
1934 wl1271_scan_sched_scan_stop(wl
);
1935 ieee80211_sched_scan_stopped(wl
->hw
);
1938 ret
= wl1271_dummy_join(wl
);
1941 clear_bit(WL1271_FLAG_IDLE
, &wl
->flags
);
1948 static int wl1271_op_config(struct ieee80211_hw
*hw
, u32 changed
)
1950 struct wl1271
*wl
= hw
->priv
;
1951 struct ieee80211_conf
*conf
= &hw
->conf
;
1952 int channel
, ret
= 0;
1955 channel
= ieee80211_frequency_to_channel(conf
->channel
->center_freq
);
1957 wl1271_debug(DEBUG_MAC80211
, "mac80211 config ch %d psm %s power %d %s"
1960 conf
->flags
& IEEE80211_CONF_PS
? "on" : "off",
1962 conf
->flags
& IEEE80211_CONF_IDLE
? "idle" : "in use",
1966 * mac80211 will go to idle nearly immediately after transmitting some
1967 * frames, such as the deauth. To make sure those frames reach the air,
1968 * wait here until the TX queue is fully flushed.
1970 if ((changed
& IEEE80211_CONF_CHANGE_IDLE
) &&
1971 (conf
->flags
& IEEE80211_CONF_IDLE
))
1972 wl1271_tx_flush(wl
);
1974 mutex_lock(&wl
->mutex
);
1976 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
1977 /* we support configuring the channel and band while off */
1978 if ((changed
& IEEE80211_CONF_CHANGE_CHANNEL
)) {
1979 wl
->band
= conf
->channel
->band
;
1980 wl
->channel
= channel
;
1986 is_ap
= (wl
->bss_type
== BSS_TYPE_AP_BSS
);
1988 ret
= wl1271_ps_elp_wakeup(wl
);
1992 /* if the channel changes while joined, join again */
1993 if (changed
& IEEE80211_CONF_CHANGE_CHANNEL
&&
1994 ((wl
->band
!= conf
->channel
->band
) ||
1995 (wl
->channel
!= channel
))) {
1996 wl
->band
= conf
->channel
->band
;
1997 wl
->channel
= channel
;
2001 * FIXME: the mac80211 should really provide a fixed
2002 * rate to use here. for now, just use the smallest
2003 * possible rate for the band as a fixed rate for
2004 * association frames and other control messages.
2006 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
2007 wl1271_set_band_rate(wl
);
2009 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
2010 ret
= wl1271_acx_sta_rate_policies(wl
);
2012 wl1271_warning("rate policy for channel "
2015 if (test_bit(WL1271_FLAG_JOINED
, &wl
->flags
)) {
2016 ret
= wl1271_join(wl
, false);
2018 wl1271_warning("cmd join on channel "
2024 if (changed
& IEEE80211_CONF_CHANGE_IDLE
&& !is_ap
) {
2025 ret
= wl1271_sta_handle_idle(wl
,
2026 conf
->flags
& IEEE80211_CONF_IDLE
);
2028 wl1271_warning("idle mode change failed %d", ret
);
2032 * if mac80211 changes the PSM mode, make sure the mode is not
2033 * incorrectly changed after the pspoll failure active window.
2035 if (changed
& IEEE80211_CONF_CHANGE_PS
)
2036 clear_bit(WL1271_FLAG_PSPOLL_FAILURE
, &wl
->flags
);
2038 if (conf
->flags
& IEEE80211_CONF_PS
&&
2039 !test_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
)) {
2040 set_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
);
2043 * We enter PSM only if we're already associated.
2044 * If we're not, we'll enter it when joining an SSID,
2045 * through the bss_info_changed() hook.
2047 if (test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
)) {
2048 wl1271_debug(DEBUG_PSM
, "psm enabled");
2049 ret
= wl1271_ps_set_mode(wl
, STATION_POWER_SAVE_MODE
,
2050 wl
->basic_rate
, true);
2052 } else if (!(conf
->flags
& IEEE80211_CONF_PS
) &&
2053 test_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
)) {
2054 wl1271_debug(DEBUG_PSM
, "psm disabled");
2056 clear_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
);
2058 if (test_bit(WL1271_FLAG_PSM
, &wl
->flags
))
2059 ret
= wl1271_ps_set_mode(wl
, STATION_ACTIVE_MODE
,
2060 wl
->basic_rate
, true);
2063 if (conf
->power_level
!= wl
->power_level
) {
2064 ret
= wl1271_acx_tx_power(wl
, conf
->power_level
);
2068 wl
->power_level
= conf
->power_level
;
2072 wl1271_ps_elp_sleep(wl
);
2075 mutex_unlock(&wl
->mutex
);
2080 struct wl1271_filter_params
{
2083 u8 mc_list
[ACX_MC_ADDRESS_GROUP_MAX
][ETH_ALEN
];
2086 static u64
wl1271_op_prepare_multicast(struct ieee80211_hw
*hw
,
2087 struct netdev_hw_addr_list
*mc_list
)
2089 struct wl1271_filter_params
*fp
;
2090 struct netdev_hw_addr
*ha
;
2091 struct wl1271
*wl
= hw
->priv
;
2093 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
2096 fp
= kzalloc(sizeof(*fp
), GFP_ATOMIC
);
2098 wl1271_error("Out of memory setting filters.");
2102 /* update multicast filtering parameters */
2103 fp
->mc_list_length
= 0;
2104 if (netdev_hw_addr_list_count(mc_list
) > ACX_MC_ADDRESS_GROUP_MAX
) {
2105 fp
->enabled
= false;
2108 netdev_hw_addr_list_for_each(ha
, mc_list
) {
2109 memcpy(fp
->mc_list
[fp
->mc_list_length
],
2110 ha
->addr
, ETH_ALEN
);
2111 fp
->mc_list_length
++;
2115 return (u64
)(unsigned long)fp
;
2118 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
2121 FIF_BCN_PRBRESP_PROMISC | \
2125 static void wl1271_op_configure_filter(struct ieee80211_hw
*hw
,
2126 unsigned int changed
,
2127 unsigned int *total
, u64 multicast
)
2129 struct wl1271_filter_params
*fp
= (void *)(unsigned long)multicast
;
2130 struct wl1271
*wl
= hw
->priv
;
2133 wl1271_debug(DEBUG_MAC80211
, "mac80211 configure filter changed %x"
2134 " total %x", changed
, *total
);
2136 mutex_lock(&wl
->mutex
);
2138 *total
&= WL1271_SUPPORTED_FILTERS
;
2139 changed
&= WL1271_SUPPORTED_FILTERS
;
2141 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
2144 ret
= wl1271_ps_elp_wakeup(wl
);
2148 if (wl
->bss_type
!= BSS_TYPE_AP_BSS
) {
2149 if (*total
& FIF_ALLMULTI
)
2150 ret
= wl1271_acx_group_address_tbl(wl
, false, NULL
, 0);
2152 ret
= wl1271_acx_group_address_tbl(wl
, fp
->enabled
,
2154 fp
->mc_list_length
);
2159 /* determine, whether supported filter values have changed */
2163 /* configure filters */
2164 wl
->filters
= *total
;
2165 wl1271_configure_filters(wl
, 0);
2167 /* apply configured filters */
2168 ret
= wl1271_acx_rx_config(wl
, wl
->rx_config
, wl
->rx_filter
);
2173 wl1271_ps_elp_sleep(wl
);
2176 mutex_unlock(&wl
->mutex
);
2180 static int wl1271_record_ap_key(struct wl1271
*wl
, u8 id
, u8 key_type
,
2181 u8 key_size
, const u8
*key
, u8 hlid
, u32 tx_seq_32
,
2184 struct wl1271_ap_key
*ap_key
;
2187 wl1271_debug(DEBUG_CRYPT
, "record ap key id %d", (int)id
);
2189 if (key_size
> MAX_KEY_SIZE
)
2193 * Find next free entry in ap_keys. Also check we are not replacing
2196 for (i
= 0; i
< MAX_NUM_KEYS
; i
++) {
2197 if (wl
->recorded_ap_keys
[i
] == NULL
)
2200 if (wl
->recorded_ap_keys
[i
]->id
== id
) {
2201 wl1271_warning("trying to record key replacement");
2206 if (i
== MAX_NUM_KEYS
)
2209 ap_key
= kzalloc(sizeof(*ap_key
), GFP_KERNEL
);
2214 ap_key
->key_type
= key_type
;
2215 ap_key
->key_size
= key_size
;
2216 memcpy(ap_key
->key
, key
, key_size
);
2217 ap_key
->hlid
= hlid
;
2218 ap_key
->tx_seq_32
= tx_seq_32
;
2219 ap_key
->tx_seq_16
= tx_seq_16
;
2221 wl
->recorded_ap_keys
[i
] = ap_key
;
2225 static void wl1271_free_ap_keys(struct wl1271
*wl
)
2229 for (i
= 0; i
< MAX_NUM_KEYS
; i
++) {
2230 kfree(wl
->recorded_ap_keys
[i
]);
2231 wl
->recorded_ap_keys
[i
] = NULL
;
2235 static int wl1271_ap_init_hwenc(struct wl1271
*wl
)
2238 struct wl1271_ap_key
*key
;
2239 bool wep_key_added
= false;
2241 for (i
= 0; i
< MAX_NUM_KEYS
; i
++) {
2242 if (wl
->recorded_ap_keys
[i
] == NULL
)
2245 key
= wl
->recorded_ap_keys
[i
];
2246 ret
= wl1271_cmd_set_ap_key(wl
, KEY_ADD_OR_REPLACE
,
2247 key
->id
, key
->key_type
,
2248 key
->key_size
, key
->key
,
2249 key
->hlid
, key
->tx_seq_32
,
2254 if (key
->key_type
== KEY_WEP
)
2255 wep_key_added
= true;
2258 if (wep_key_added
) {
2259 ret
= wl1271_cmd_set_ap_default_wep_key(wl
, wl
->default_key
);
2265 wl1271_free_ap_keys(wl
);
2269 static int wl1271_set_key(struct wl1271
*wl
, u16 action
, u8 id
, u8 key_type
,
2270 u8 key_size
, const u8
*key
, u32 tx_seq_32
,
2271 u16 tx_seq_16
, struct ieee80211_sta
*sta
)
2274 bool is_ap
= (wl
->bss_type
== BSS_TYPE_AP_BSS
);
2277 struct wl1271_station
*wl_sta
;
2281 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
2282 hlid
= wl_sta
->hlid
;
2284 hlid
= WL1271_AP_BROADCAST_HLID
;
2287 if (!test_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
)) {
2289 * We do not support removing keys after AP shutdown.
2290 * Pretend we do to make mac80211 happy.
2292 if (action
!= KEY_ADD_OR_REPLACE
)
2295 ret
= wl1271_record_ap_key(wl
, id
,
2297 key
, hlid
, tx_seq_32
,
2300 ret
= wl1271_cmd_set_ap_key(wl
, action
,
2301 id
, key_type
, key_size
,
2302 key
, hlid
, tx_seq_32
,
2310 static const u8 bcast_addr
[ETH_ALEN
] = {
2311 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
2314 addr
= sta
? sta
->addr
: bcast_addr
;
2316 if (is_zero_ether_addr(addr
)) {
2317 /* We dont support TX only encryption */
2321 /* The wl1271 does not allow to remove unicast keys - they
2322 will be cleared automatically on next CMD_JOIN. Ignore the
2323 request silently, as we dont want the mac80211 to emit
2324 an error message. */
2325 if (action
== KEY_REMOVE
&& !is_broadcast_ether_addr(addr
))
2328 ret
= wl1271_cmd_set_sta_key(wl
, action
,
2329 id
, key_type
, key_size
,
2330 key
, addr
, tx_seq_32
,
2335 /* the default WEP key needs to be configured at least once */
2336 if (key_type
== KEY_WEP
) {
2337 ret
= wl1271_cmd_set_sta_default_wep_key(wl
,
2347 static int wl1271_op_set_key(struct ieee80211_hw
*hw
, enum set_key_cmd cmd
,
2348 struct ieee80211_vif
*vif
,
2349 struct ieee80211_sta
*sta
,
2350 struct ieee80211_key_conf
*key_conf
)
2352 struct wl1271
*wl
= hw
->priv
;
2358 wl1271_debug(DEBUG_MAC80211
, "mac80211 set key");
2360 wl1271_debug(DEBUG_CRYPT
, "CMD: 0x%x sta: %p", cmd
, sta
);
2361 wl1271_debug(DEBUG_CRYPT
, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
2362 key_conf
->cipher
, key_conf
->keyidx
,
2363 key_conf
->keylen
, key_conf
->flags
);
2364 wl1271_dump(DEBUG_CRYPT
, "KEY: ", key_conf
->key
, key_conf
->keylen
);
2366 mutex_lock(&wl
->mutex
);
2368 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
2373 ret
= wl1271_ps_elp_wakeup(wl
);
2377 switch (key_conf
->cipher
) {
2378 case WLAN_CIPHER_SUITE_WEP40
:
2379 case WLAN_CIPHER_SUITE_WEP104
:
2382 key_conf
->hw_key_idx
= key_conf
->keyidx
;
2384 case WLAN_CIPHER_SUITE_TKIP
:
2385 key_type
= KEY_TKIP
;
2387 key_conf
->hw_key_idx
= key_conf
->keyidx
;
2388 tx_seq_32
= WL1271_TX_SECURITY_HI32(wl
->tx_security_seq
);
2389 tx_seq_16
= WL1271_TX_SECURITY_LO16(wl
->tx_security_seq
);
2391 case WLAN_CIPHER_SUITE_CCMP
:
2394 key_conf
->flags
|= IEEE80211_KEY_FLAG_GENERATE_IV
;
2395 tx_seq_32
= WL1271_TX_SECURITY_HI32(wl
->tx_security_seq
);
2396 tx_seq_16
= WL1271_TX_SECURITY_LO16(wl
->tx_security_seq
);
2398 case WL1271_CIPHER_SUITE_GEM
:
2400 tx_seq_32
= WL1271_TX_SECURITY_HI32(wl
->tx_security_seq
);
2401 tx_seq_16
= WL1271_TX_SECURITY_LO16(wl
->tx_security_seq
);
2404 wl1271_error("Unknown key algo 0x%x", key_conf
->cipher
);
2412 ret
= wl1271_set_key(wl
, KEY_ADD_OR_REPLACE
,
2413 key_conf
->keyidx
, key_type
,
2414 key_conf
->keylen
, key_conf
->key
,
2415 tx_seq_32
, tx_seq_16
, sta
);
2417 wl1271_error("Could not add or replace key");
2423 ret
= wl1271_set_key(wl
, KEY_REMOVE
,
2424 key_conf
->keyidx
, key_type
,
2425 key_conf
->keylen
, key_conf
->key
,
2428 wl1271_error("Could not remove key");
2434 wl1271_error("Unsupported key cmd 0x%x", cmd
);
2440 wl1271_ps_elp_sleep(wl
);
2443 mutex_unlock(&wl
->mutex
);
2448 static int wl1271_op_hw_scan(struct ieee80211_hw
*hw
,
2449 struct ieee80211_vif
*vif
,
2450 struct cfg80211_scan_request
*req
)
2452 struct wl1271
*wl
= hw
->priv
;
2457 wl1271_debug(DEBUG_MAC80211
, "mac80211 hw scan");
2460 ssid
= req
->ssids
[0].ssid
;
2461 len
= req
->ssids
[0].ssid_len
;
2464 mutex_lock(&wl
->mutex
);
2466 if (wl
->state
== WL1271_STATE_OFF
) {
2468 * We cannot return -EBUSY here because cfg80211 will expect
2469 * a call to ieee80211_scan_completed if we do - in this case
2470 * there won't be any call.
2476 ret
= wl1271_ps_elp_wakeup(wl
);
2480 ret
= wl1271_scan(hw
->priv
, ssid
, len
, req
);
2482 wl1271_ps_elp_sleep(wl
);
2485 mutex_unlock(&wl
->mutex
);
2490 static int wl1271_op_sched_scan_start(struct ieee80211_hw
*hw
,
2491 struct ieee80211_vif
*vif
,
2492 struct cfg80211_sched_scan_request
*req
,
2493 struct ieee80211_sched_scan_ies
*ies
)
2495 struct wl1271
*wl
= hw
->priv
;
2498 wl1271_debug(DEBUG_MAC80211
, "wl1271_op_sched_scan_start");
2500 mutex_lock(&wl
->mutex
);
2502 ret
= wl1271_ps_elp_wakeup(wl
);
2506 ret
= wl1271_scan_sched_scan_config(wl
, req
, ies
);
2510 ret
= wl1271_scan_sched_scan_start(wl
);
2514 wl
->sched_scanning
= true;
2517 wl1271_ps_elp_sleep(wl
);
2519 mutex_unlock(&wl
->mutex
);
2523 static void wl1271_op_sched_scan_stop(struct ieee80211_hw
*hw
,
2524 struct ieee80211_vif
*vif
)
2526 struct wl1271
*wl
= hw
->priv
;
2529 wl1271_debug(DEBUG_MAC80211
, "wl1271_op_sched_scan_stop");
2531 mutex_lock(&wl
->mutex
);
2533 ret
= wl1271_ps_elp_wakeup(wl
);
2537 wl1271_scan_sched_scan_stop(wl
);
2539 wl1271_ps_elp_sleep(wl
);
2541 mutex_unlock(&wl
->mutex
);
2544 static int wl1271_op_set_frag_threshold(struct ieee80211_hw
*hw
, u32 value
)
2546 struct wl1271
*wl
= hw
->priv
;
2549 mutex_lock(&wl
->mutex
);
2551 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
2556 ret
= wl1271_ps_elp_wakeup(wl
);
2560 ret
= wl1271_acx_frag_threshold(wl
, value
);
2562 wl1271_warning("wl1271_op_set_frag_threshold failed: %d", ret
);
2564 wl1271_ps_elp_sleep(wl
);
2567 mutex_unlock(&wl
->mutex
);
2572 static int wl1271_op_set_rts_threshold(struct ieee80211_hw
*hw
, u32 value
)
2574 struct wl1271
*wl
= hw
->priv
;
2577 mutex_lock(&wl
->mutex
);
2579 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
2584 ret
= wl1271_ps_elp_wakeup(wl
);
2588 ret
= wl1271_acx_rts_threshold(wl
, value
);
2590 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret
);
2592 wl1271_ps_elp_sleep(wl
);
2595 mutex_unlock(&wl
->mutex
);
2600 static int wl1271_ssid_set(struct wl1271
*wl
, struct sk_buff
*skb
,
2604 const u8
*ptr
= cfg80211_find_ie(WLAN_EID_SSID
, skb
->data
+ offset
,
2608 wl1271_error("No SSID in IEs!");
2613 if (ssid_len
> IEEE80211_MAX_SSID_LEN
) {
2614 wl1271_error("SSID is too long!");
2618 wl
->ssid_len
= ssid_len
;
2619 memcpy(wl
->ssid
, ptr
+2, ssid_len
);
2623 static int wl1271_bss_erp_info_changed(struct wl1271
*wl
,
2624 struct ieee80211_bss_conf
*bss_conf
,
2629 if (changed
& BSS_CHANGED_ERP_SLOT
) {
2630 if (bss_conf
->use_short_slot
)
2631 ret
= wl1271_acx_slot(wl
, SLOT_TIME_SHORT
);
2633 ret
= wl1271_acx_slot(wl
, SLOT_TIME_LONG
);
2635 wl1271_warning("Set slot time failed %d", ret
);
2640 if (changed
& BSS_CHANGED_ERP_PREAMBLE
) {
2641 if (bss_conf
->use_short_preamble
)
2642 wl1271_acx_set_preamble(wl
, ACX_PREAMBLE_SHORT
);
2644 wl1271_acx_set_preamble(wl
, ACX_PREAMBLE_LONG
);
2647 if (changed
& BSS_CHANGED_ERP_CTS_PROT
) {
2648 if (bss_conf
->use_cts_prot
)
2649 ret
= wl1271_acx_cts_protect(wl
, CTSPROTECT_ENABLE
);
2651 ret
= wl1271_acx_cts_protect(wl
, CTSPROTECT_DISABLE
);
2653 wl1271_warning("Set ctsprotect failed %d", ret
);
2662 static int wl1271_bss_beacon_info_changed(struct wl1271
*wl
,
2663 struct ieee80211_vif
*vif
,
2664 struct ieee80211_bss_conf
*bss_conf
,
2667 bool is_ap
= (wl
->bss_type
== BSS_TYPE_AP_BSS
);
2670 if ((changed
& BSS_CHANGED_BEACON_INT
)) {
2671 wl1271_debug(DEBUG_MASTER
, "beacon interval updated: %d",
2672 bss_conf
->beacon_int
);
2674 wl
->beacon_int
= bss_conf
->beacon_int
;
2677 if ((changed
& BSS_CHANGED_BEACON
)) {
2678 struct ieee80211_hdr
*hdr
;
2679 int ieoffset
= offsetof(struct ieee80211_mgmt
,
2681 struct sk_buff
*beacon
= ieee80211_beacon_get(wl
->hw
, vif
);
2687 wl1271_debug(DEBUG_MASTER
, "beacon updated");
2689 ret
= wl1271_ssid_set(wl
, beacon
, ieoffset
);
2691 dev_kfree_skb(beacon
);
2694 tmpl_id
= is_ap
? CMD_TEMPL_AP_BEACON
:
2696 ret
= wl1271_cmd_template_set(wl
, tmpl_id
,
2699 wl1271_tx_min_rate_get(wl
));
2701 dev_kfree_skb(beacon
);
2705 hdr
= (struct ieee80211_hdr
*) beacon
->data
;
2706 hdr
->frame_control
= cpu_to_le16(IEEE80211_FTYPE_MGMT
|
2707 IEEE80211_STYPE_PROBE_RESP
);
2709 tmpl_id
= is_ap
? CMD_TEMPL_AP_PROBE_RESPONSE
:
2710 CMD_TEMPL_PROBE_RESPONSE
;
2711 ret
= wl1271_cmd_template_set(wl
,
2715 wl1271_tx_min_rate_get(wl
));
2716 dev_kfree_skb(beacon
);
2725 /* AP mode changes */
2726 static void wl1271_bss_info_changed_ap(struct wl1271
*wl
,
2727 struct ieee80211_vif
*vif
,
2728 struct ieee80211_bss_conf
*bss_conf
,
2733 if ((changed
& BSS_CHANGED_BASIC_RATES
)) {
2734 u32 rates
= bss_conf
->basic_rates
;
2736 wl
->basic_rate_set
= wl1271_tx_enabled_rates_get(wl
, rates
);
2737 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
2739 ret
= wl1271_init_ap_rates(wl
);
2741 wl1271_error("AP rate policy change failed %d", ret
);
2745 ret
= wl1271_ap_init_templates(wl
);
2750 ret
= wl1271_bss_beacon_info_changed(wl
, vif
, bss_conf
, changed
);
2754 if ((changed
& BSS_CHANGED_BEACON_ENABLED
)) {
2755 if (bss_conf
->enable_beacon
) {
2756 if (!test_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
)) {
2757 ret
= wl1271_cmd_start_bss(wl
);
2761 set_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
);
2762 wl1271_debug(DEBUG_AP
, "started AP");
2764 ret
= wl1271_ap_init_hwenc(wl
);
2769 if (test_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
)) {
2770 ret
= wl1271_cmd_stop_bss(wl
);
2774 clear_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
);
2775 wl1271_debug(DEBUG_AP
, "stopped AP");
2780 if (changed
& BSS_CHANGED_IBSS
) {
2781 wl1271_debug(DEBUG_ADHOC
, "ibss_joined: %d",
2782 bss_conf
->ibss_joined
);
2784 if (bss_conf
->ibss_joined
) {
2785 u32 rates
= bss_conf
->basic_rates
;
2786 wl
->basic_rate_set
= wl1271_tx_enabled_rates_get(wl
,
2788 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
2790 /* by default, use 11b rates */
2791 wl
->rate_set
= CONF_TX_IBSS_DEFAULT_RATES
;
2792 ret
= wl1271_acx_sta_rate_policies(wl
);
2798 ret
= wl1271_bss_erp_info_changed(wl
, bss_conf
, changed
);
2805 /* STA/IBSS mode changes */
2806 static void wl1271_bss_info_changed_sta(struct wl1271
*wl
,
2807 struct ieee80211_vif
*vif
,
2808 struct ieee80211_bss_conf
*bss_conf
,
2811 bool do_join
= false, set_assoc
= false;
2812 bool is_ibss
= (wl
->bss_type
== BSS_TYPE_IBSS
);
2813 u32 sta_rate_set
= 0;
2815 struct ieee80211_sta
*sta
;
2816 bool sta_exists
= false;
2817 struct ieee80211_sta_ht_cap sta_ht_cap
;
2820 ret
= wl1271_bss_beacon_info_changed(wl
, vif
, bss_conf
,
2826 if ((changed
& BSS_CHANGED_BEACON_INT
) && is_ibss
)
2829 /* Need to update the SSID (for filtering etc) */
2830 if ((changed
& BSS_CHANGED_BEACON
) && is_ibss
)
2833 if ((changed
& BSS_CHANGED_BEACON_ENABLED
) && is_ibss
) {
2834 wl1271_debug(DEBUG_ADHOC
, "ad-hoc beaconing: %s",
2835 bss_conf
->enable_beacon
? "enabled" : "disabled");
2837 if (bss_conf
->enable_beacon
)
2838 wl
->set_bss_type
= BSS_TYPE_IBSS
;
2840 wl
->set_bss_type
= BSS_TYPE_STA_BSS
;
2844 if ((changed
& BSS_CHANGED_CQM
)) {
2845 bool enable
= false;
2846 if (bss_conf
->cqm_rssi_thold
)
2848 ret
= wl1271_acx_rssi_snr_trigger(wl
, enable
,
2849 bss_conf
->cqm_rssi_thold
,
2850 bss_conf
->cqm_rssi_hyst
);
2853 wl
->rssi_thold
= bss_conf
->cqm_rssi_thold
;
2856 if ((changed
& BSS_CHANGED_BSSID
) &&
2858 * Now we know the correct bssid, so we send a new join command
2859 * and enable the BSSID filter
2861 memcmp(wl
->bssid
, bss_conf
->bssid
, ETH_ALEN
)) {
2862 memcpy(wl
->bssid
, bss_conf
->bssid
, ETH_ALEN
);
2864 if (!is_zero_ether_addr(wl
->bssid
)) {
2865 ret
= wl1271_cmd_build_null_data(wl
);
2869 ret
= wl1271_build_qos_null_data(wl
);
2873 /* filter out all packets not from this BSSID */
2874 wl1271_configure_filters(wl
, 0);
2876 /* Need to update the BSSID (for filtering etc) */
2882 sta
= ieee80211_find_sta(vif
, bss_conf
->bssid
);
2884 /* save the supp_rates of the ap */
2885 sta_rate_set
= sta
->supp_rates
[wl
->hw
->conf
.channel
->band
];
2886 if (sta
->ht_cap
.ht_supported
)
2888 (sta
->ht_cap
.mcs
.rx_mask
[0] << HW_HT_RATES_OFFSET
);
2889 sta_ht_cap
= sta
->ht_cap
;
2895 /* handle new association with HT and HT information change */
2896 if ((changed
& BSS_CHANGED_HT
) &&
2897 (bss_conf
->channel_type
!= NL80211_CHAN_NO_HT
)) {
2898 ret
= wl1271_acx_set_ht_capabilities(wl
, &sta_ht_cap
,
2901 wl1271_warning("Set ht cap true failed %d",
2905 ret
= wl1271_acx_set_ht_information(wl
,
2906 bss_conf
->ht_operation_mode
);
2908 wl1271_warning("Set ht information failed %d",
2913 /* handle new association without HT and disassociation */
2914 else if (changed
& BSS_CHANGED_ASSOC
) {
2915 ret
= wl1271_acx_set_ht_capabilities(wl
, &sta_ht_cap
,
2918 wl1271_warning("Set ht cap false failed %d",
2925 if ((changed
& BSS_CHANGED_ASSOC
)) {
2926 if (bss_conf
->assoc
) {
2929 wl
->aid
= bss_conf
->aid
;
2932 wl
->ps_poll_failures
= 0;
2935 * use basic rates from AP, and determine lowest rate
2936 * to use with control frames.
2938 rates
= bss_conf
->basic_rates
;
2939 wl
->basic_rate_set
= wl1271_tx_enabled_rates_get(wl
,
2941 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
2943 wl
->rate_set
= wl1271_tx_enabled_rates_get(wl
,
2945 ret
= wl1271_acx_sta_rate_policies(wl
);
2950 * with wl1271, we don't need to update the
2951 * beacon_int and dtim_period, because the firmware
2952 * updates it by itself when the first beacon is
2953 * received after a join.
2955 ret
= wl1271_cmd_build_ps_poll(wl
, wl
->aid
);
2960 * Get a template for hardware connection maintenance
2962 dev_kfree_skb(wl
->probereq
);
2963 wl
->probereq
= wl1271_cmd_build_ap_probe_req(wl
, NULL
);
2964 ieoffset
= offsetof(struct ieee80211_mgmt
,
2965 u
.probe_req
.variable
);
2966 wl1271_ssid_set(wl
, wl
->probereq
, ieoffset
);
2968 /* enable the connection monitoring feature */
2969 ret
= wl1271_acx_conn_monit_params(wl
, true);
2973 /* If we want to go in PSM but we're not there yet */
2974 if (test_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
) &&
2975 !test_bit(WL1271_FLAG_PSM
, &wl
->flags
)) {
2976 enum wl1271_cmd_ps_mode mode
;
2978 mode
= STATION_POWER_SAVE_MODE
;
2979 ret
= wl1271_ps_set_mode(wl
, mode
,
2986 /* use defaults when not associated */
2988 !!test_and_clear_bit(WL1271_FLAG_STA_ASSOCIATED
,
2990 clear_bit(WL1271_FLAG_STA_STATE_SENT
, &wl
->flags
);
2993 /* free probe-request template */
2994 dev_kfree_skb(wl
->probereq
);
2995 wl
->probereq
= NULL
;
2997 /* re-enable dynamic ps - just in case */
2998 ieee80211_enable_dyn_ps(wl
->vif
);
3000 /* revert back to minimum rates for the current band */
3001 wl1271_set_band_rate(wl
);
3002 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
3003 ret
= wl1271_acx_sta_rate_policies(wl
);
3007 /* disable connection monitor features */
3008 ret
= wl1271_acx_conn_monit_params(wl
, false);
3010 /* Disable the keep-alive feature */
3011 ret
= wl1271_acx_keep_alive_mode(wl
, false);
3015 /* restore the bssid filter and go to dummy bssid */
3018 wl1271_dummy_join(wl
);
3023 ret
= wl1271_bss_erp_info_changed(wl
, bss_conf
, changed
);
3027 if (changed
& BSS_CHANGED_ARP_FILTER
) {
3028 __be32 addr
= bss_conf
->arp_addr_list
[0];
3029 WARN_ON(wl
->bss_type
!= BSS_TYPE_STA_BSS
);
3031 if (bss_conf
->arp_addr_cnt
== 1 &&
3032 bss_conf
->arp_filter_enabled
) {
3034 * The template should have been configured only upon
3035 * association. however, it seems that the correct ip
3036 * isn't being set (when sending), so we have to
3037 * reconfigure the template upon every ip change.
3039 ret
= wl1271_cmd_build_arp_rsp(wl
, addr
);
3041 wl1271_warning("build arp rsp failed: %d", ret
);
3045 ret
= wl1271_acx_arp_ip_filter(wl
,
3046 ACX_ARP_FILTER_ARP_FILTERING
,
3049 ret
= wl1271_acx_arp_ip_filter(wl
, 0, addr
);
3056 ret
= wl1271_join(wl
, set_assoc
);
3058 wl1271_warning("cmd join failed %d", ret
);
3067 static void wl1271_op_bss_info_changed(struct ieee80211_hw
*hw
,
3068 struct ieee80211_vif
*vif
,
3069 struct ieee80211_bss_conf
*bss_conf
,
3072 struct wl1271
*wl
= hw
->priv
;
3073 bool is_ap
= (wl
->bss_type
== BSS_TYPE_AP_BSS
);
3076 wl1271_debug(DEBUG_MAC80211
, "mac80211 bss info changed 0x%x",
3079 mutex_lock(&wl
->mutex
);
3081 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
3084 ret
= wl1271_ps_elp_wakeup(wl
);
3089 wl1271_bss_info_changed_ap(wl
, vif
, bss_conf
, changed
);
3091 wl1271_bss_info_changed_sta(wl
, vif
, bss_conf
, changed
);
3093 wl1271_ps_elp_sleep(wl
);
3096 mutex_unlock(&wl
->mutex
);
3099 static int wl1271_op_conf_tx(struct ieee80211_hw
*hw
, u16 queue
,
3100 const struct ieee80211_tx_queue_params
*params
)
3102 struct wl1271
*wl
= hw
->priv
;
3106 mutex_lock(&wl
->mutex
);
3108 wl1271_debug(DEBUG_MAC80211
, "mac80211 conf tx %d", queue
);
3111 ps_scheme
= CONF_PS_SCHEME_UPSD_TRIGGER
;
3113 ps_scheme
= CONF_PS_SCHEME_LEGACY
;
3115 if (wl
->state
== WL1271_STATE_OFF
) {
3117 * If the state is off, the parameters will be recorded and
3118 * configured on init. This happens in AP-mode.
3120 struct conf_tx_ac_category
*conf_ac
=
3121 &wl
->conf
.tx
.ac_conf
[wl1271_tx_get_queue(queue
)];
3122 struct conf_tx_tid
*conf_tid
=
3123 &wl
->conf
.tx
.tid_conf
[wl1271_tx_get_queue(queue
)];
3125 conf_ac
->ac
= wl1271_tx_get_queue(queue
);
3126 conf_ac
->cw_min
= (u8
)params
->cw_min
;
3127 conf_ac
->cw_max
= params
->cw_max
;
3128 conf_ac
->aifsn
= params
->aifs
;
3129 conf_ac
->tx_op_limit
= params
->txop
<< 5;
3131 conf_tid
->queue_id
= wl1271_tx_get_queue(queue
);
3132 conf_tid
->channel_type
= CONF_CHANNEL_TYPE_EDCF
;
3133 conf_tid
->tsid
= wl1271_tx_get_queue(queue
);
3134 conf_tid
->ps_scheme
= ps_scheme
;
3135 conf_tid
->ack_policy
= CONF_ACK_POLICY_LEGACY
;
3136 conf_tid
->apsd_conf
[0] = 0;
3137 conf_tid
->apsd_conf
[1] = 0;
3141 ret
= wl1271_ps_elp_wakeup(wl
);
3146 * the txop is confed in units of 32us by the mac80211,
3149 ret
= wl1271_acx_ac_cfg(wl
, wl1271_tx_get_queue(queue
),
3150 params
->cw_min
, params
->cw_max
,
3151 params
->aifs
, params
->txop
<< 5);
3155 ret
= wl1271_acx_tid_cfg(wl
, wl1271_tx_get_queue(queue
),
3156 CONF_CHANNEL_TYPE_EDCF
,
3157 wl1271_tx_get_queue(queue
),
3158 ps_scheme
, CONF_ACK_POLICY_LEGACY
,
3162 wl1271_ps_elp_sleep(wl
);
3165 mutex_unlock(&wl
->mutex
);
3170 static u64
wl1271_op_get_tsf(struct ieee80211_hw
*hw
)
3173 struct wl1271
*wl
= hw
->priv
;
3174 u64 mactime
= ULLONG_MAX
;
3177 wl1271_debug(DEBUG_MAC80211
, "mac80211 get tsf");
3179 mutex_lock(&wl
->mutex
);
3181 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
3184 ret
= wl1271_ps_elp_wakeup(wl
);
3188 ret
= wl1271_acx_tsf_info(wl
, &mactime
);
3193 wl1271_ps_elp_sleep(wl
);
3196 mutex_unlock(&wl
->mutex
);
3200 static int wl1271_op_get_survey(struct ieee80211_hw
*hw
, int idx
,
3201 struct survey_info
*survey
)
3203 struct wl1271
*wl
= hw
->priv
;
3204 struct ieee80211_conf
*conf
= &hw
->conf
;
3209 survey
->channel
= conf
->channel
;
3210 survey
->filled
= SURVEY_INFO_NOISE_DBM
;
3211 survey
->noise
= wl
->noise
;
3216 static int wl1271_allocate_sta(struct wl1271
*wl
,
3217 struct ieee80211_sta
*sta
,
3220 struct wl1271_station
*wl_sta
;
3223 id
= find_first_zero_bit(wl
->ap_hlid_map
, AP_MAX_STATIONS
);
3224 if (id
>= AP_MAX_STATIONS
) {
3225 wl1271_warning("could not allocate HLID - too much stations");
3229 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
3230 __set_bit(id
, wl
->ap_hlid_map
);
3231 wl_sta
->hlid
= WL1271_AP_STA_HLID_START
+ id
;
3232 *hlid
= wl_sta
->hlid
;
3233 memcpy(wl
->links
[wl_sta
->hlid
].addr
, sta
->addr
, ETH_ALEN
);
3237 static void wl1271_free_sta(struct wl1271
*wl
, u8 hlid
)
3239 int id
= hlid
- WL1271_AP_STA_HLID_START
;
3241 if (WARN_ON(!test_bit(id
, wl
->ap_hlid_map
)))
3244 __clear_bit(id
, wl
->ap_hlid_map
);
3245 memset(wl
->links
[hlid
].addr
, 0, ETH_ALEN
);
3246 wl1271_tx_reset_link_queues(wl
, hlid
);
3247 __clear_bit(hlid
, &wl
->ap_ps_map
);
3248 __clear_bit(hlid
, (unsigned long *)&wl
->ap_fw_ps_map
);
3251 static int wl1271_op_sta_add(struct ieee80211_hw
*hw
,
3252 struct ieee80211_vif
*vif
,
3253 struct ieee80211_sta
*sta
)
3255 struct wl1271
*wl
= hw
->priv
;
3259 mutex_lock(&wl
->mutex
);
3261 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
3264 if (wl
->bss_type
!= BSS_TYPE_AP_BSS
)
3267 wl1271_debug(DEBUG_MAC80211
, "mac80211 add sta %d", (int)sta
->aid
);
3269 ret
= wl1271_allocate_sta(wl
, sta
, &hlid
);
3273 ret
= wl1271_ps_elp_wakeup(wl
);
3277 ret
= wl1271_cmd_add_sta(wl
, sta
, hlid
);
3282 wl1271_ps_elp_sleep(wl
);
3286 wl1271_free_sta(wl
, hlid
);
3289 mutex_unlock(&wl
->mutex
);
3293 static int wl1271_op_sta_remove(struct ieee80211_hw
*hw
,
3294 struct ieee80211_vif
*vif
,
3295 struct ieee80211_sta
*sta
)
3297 struct wl1271
*wl
= hw
->priv
;
3298 struct wl1271_station
*wl_sta
;
3301 mutex_lock(&wl
->mutex
);
3303 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
3306 if (wl
->bss_type
!= BSS_TYPE_AP_BSS
)
3309 wl1271_debug(DEBUG_MAC80211
, "mac80211 remove sta %d", (int)sta
->aid
);
3311 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
3312 id
= wl_sta
->hlid
- WL1271_AP_STA_HLID_START
;
3313 if (WARN_ON(!test_bit(id
, wl
->ap_hlid_map
)))
3316 ret
= wl1271_ps_elp_wakeup(wl
);
3320 ret
= wl1271_cmd_remove_sta(wl
, wl_sta
->hlid
);
3324 wl1271_free_sta(wl
, wl_sta
->hlid
);
3327 wl1271_ps_elp_sleep(wl
);
3330 mutex_unlock(&wl
->mutex
);
3334 static int wl1271_op_ampdu_action(struct ieee80211_hw
*hw
,
3335 struct ieee80211_vif
*vif
,
3336 enum ieee80211_ampdu_mlme_action action
,
3337 struct ieee80211_sta
*sta
, u16 tid
, u16
*ssn
,
3340 struct wl1271
*wl
= hw
->priv
;
3343 mutex_lock(&wl
->mutex
);
3345 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
3350 ret
= wl1271_ps_elp_wakeup(wl
);
3355 case IEEE80211_AMPDU_RX_START
:
3356 if (wl
->ba_support
) {
3357 ret
= wl1271_acx_set_ba_receiver_session(wl
, tid
, *ssn
,
3360 wl
->ba_rx_bitmap
|= BIT(tid
);
3366 case IEEE80211_AMPDU_RX_STOP
:
3367 ret
= wl1271_acx_set_ba_receiver_session(wl
, tid
, 0, false);
3369 wl
->ba_rx_bitmap
&= ~BIT(tid
);
3373 * The BA initiator session management in FW independently.
3374 * Falling break here on purpose for all TX APDU commands.
3376 case IEEE80211_AMPDU_TX_START
:
3377 case IEEE80211_AMPDU_TX_STOP
:
3378 case IEEE80211_AMPDU_TX_OPERATIONAL
:
3383 wl1271_error("Incorrect ampdu action id=%x\n", action
);
3387 wl1271_ps_elp_sleep(wl
);
3390 mutex_unlock(&wl
->mutex
);
3395 static bool wl1271_tx_frames_pending(struct ieee80211_hw
*hw
)
3397 struct wl1271
*wl
= hw
->priv
;
3400 mutex_lock(&wl
->mutex
);
3402 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
3405 /* packets are considered pending if in the TX queue or the FW */
3406 ret
= (wl
->tx_queue_count
> 0) || (wl
->tx_frames_cnt
> 0);
3408 /* the above is appropriate for STA mode for PS purposes */
3409 WARN_ON(wl
->bss_type
!= BSS_TYPE_STA_BSS
);
3412 mutex_unlock(&wl
->mutex
);
3417 /* can't be const, mac80211 writes to this */
3418 static struct ieee80211_rate wl1271_rates
[] = {
3420 .hw_value
= CONF_HW_BIT_RATE_1MBPS
,
3421 .hw_value_short
= CONF_HW_BIT_RATE_1MBPS
, },
3423 .hw_value
= CONF_HW_BIT_RATE_2MBPS
,
3424 .hw_value_short
= CONF_HW_BIT_RATE_2MBPS
,
3425 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
3427 .hw_value
= CONF_HW_BIT_RATE_5_5MBPS
,
3428 .hw_value_short
= CONF_HW_BIT_RATE_5_5MBPS
,
3429 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
3431 .hw_value
= CONF_HW_BIT_RATE_11MBPS
,
3432 .hw_value_short
= CONF_HW_BIT_RATE_11MBPS
,
3433 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
3435 .hw_value
= CONF_HW_BIT_RATE_6MBPS
,
3436 .hw_value_short
= CONF_HW_BIT_RATE_6MBPS
, },
3438 .hw_value
= CONF_HW_BIT_RATE_9MBPS
,
3439 .hw_value_short
= CONF_HW_BIT_RATE_9MBPS
, },
3441 .hw_value
= CONF_HW_BIT_RATE_12MBPS
,
3442 .hw_value_short
= CONF_HW_BIT_RATE_12MBPS
, },
3444 .hw_value
= CONF_HW_BIT_RATE_18MBPS
,
3445 .hw_value_short
= CONF_HW_BIT_RATE_18MBPS
, },
3447 .hw_value
= CONF_HW_BIT_RATE_24MBPS
,
3448 .hw_value_short
= CONF_HW_BIT_RATE_24MBPS
, },
3450 .hw_value
= CONF_HW_BIT_RATE_36MBPS
,
3451 .hw_value_short
= CONF_HW_BIT_RATE_36MBPS
, },
3453 .hw_value
= CONF_HW_BIT_RATE_48MBPS
,
3454 .hw_value_short
= CONF_HW_BIT_RATE_48MBPS
, },
3456 .hw_value
= CONF_HW_BIT_RATE_54MBPS
,
3457 .hw_value_short
= CONF_HW_BIT_RATE_54MBPS
, },
3460 /* can't be const, mac80211 writes to this */
3461 static struct ieee80211_channel wl1271_channels
[] = {
3462 { .hw_value
= 1, .center_freq
= 2412, .max_power
= 25 },
3463 { .hw_value
= 2, .center_freq
= 2417, .max_power
= 25 },
3464 { .hw_value
= 3, .center_freq
= 2422, .max_power
= 25 },
3465 { .hw_value
= 4, .center_freq
= 2427, .max_power
= 25 },
3466 { .hw_value
= 5, .center_freq
= 2432, .max_power
= 25 },
3467 { .hw_value
= 6, .center_freq
= 2437, .max_power
= 25 },
3468 { .hw_value
= 7, .center_freq
= 2442, .max_power
= 25 },
3469 { .hw_value
= 8, .center_freq
= 2447, .max_power
= 25 },
3470 { .hw_value
= 9, .center_freq
= 2452, .max_power
= 25 },
3471 { .hw_value
= 10, .center_freq
= 2457, .max_power
= 25 },
3472 { .hw_value
= 11, .center_freq
= 2462, .max_power
= 25 },
3473 { .hw_value
= 12, .center_freq
= 2467, .max_power
= 25 },
3474 { .hw_value
= 13, .center_freq
= 2472, .max_power
= 25 },
3475 { .hw_value
= 14, .center_freq
= 2484, .max_power
= 25 },
3478 /* mapping to indexes for wl1271_rates */
3479 static const u8 wl1271_rate_to_idx_2ghz
[] = {
3480 /* MCS rates are used only with 11n */
3481 7, /* CONF_HW_RXTX_RATE_MCS7 */
3482 6, /* CONF_HW_RXTX_RATE_MCS6 */
3483 5, /* CONF_HW_RXTX_RATE_MCS5 */
3484 4, /* CONF_HW_RXTX_RATE_MCS4 */
3485 3, /* CONF_HW_RXTX_RATE_MCS3 */
3486 2, /* CONF_HW_RXTX_RATE_MCS2 */
3487 1, /* CONF_HW_RXTX_RATE_MCS1 */
3488 0, /* CONF_HW_RXTX_RATE_MCS0 */
3490 11, /* CONF_HW_RXTX_RATE_54 */
3491 10, /* CONF_HW_RXTX_RATE_48 */
3492 9, /* CONF_HW_RXTX_RATE_36 */
3493 8, /* CONF_HW_RXTX_RATE_24 */
3495 /* TI-specific rate */
3496 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_22 */
3498 7, /* CONF_HW_RXTX_RATE_18 */
3499 6, /* CONF_HW_RXTX_RATE_12 */
3500 3, /* CONF_HW_RXTX_RATE_11 */
3501 5, /* CONF_HW_RXTX_RATE_9 */
3502 4, /* CONF_HW_RXTX_RATE_6 */
3503 2, /* CONF_HW_RXTX_RATE_5_5 */
3504 1, /* CONF_HW_RXTX_RATE_2 */
3505 0 /* CONF_HW_RXTX_RATE_1 */
3508 /* 11n STA capabilities */
3509 #define HW_RX_HIGHEST_RATE 72
3511 #ifdef CONFIG_WL12XX_HT
3512 #define WL12XX_HT_CAP { \
3513 .cap = IEEE80211_HT_CAP_GRN_FLD | IEEE80211_HT_CAP_SGI_20 | \
3514 (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT), \
3515 .ht_supported = true, \
3516 .ampdu_factor = IEEE80211_HT_MAX_AMPDU_8K, \
3517 .ampdu_density = IEEE80211_HT_MPDU_DENSITY_8, \
3519 .rx_mask = { 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, \
3520 .rx_highest = cpu_to_le16(HW_RX_HIGHEST_RATE), \
3521 .tx_params = IEEE80211_HT_MCS_TX_DEFINED, \
3525 #define WL12XX_HT_CAP { \
3526 .ht_supported = false, \
3530 /* can't be const, mac80211 writes to this */
3531 static struct ieee80211_supported_band wl1271_band_2ghz
= {
3532 .channels
= wl1271_channels
,
3533 .n_channels
= ARRAY_SIZE(wl1271_channels
),
3534 .bitrates
= wl1271_rates
,
3535 .n_bitrates
= ARRAY_SIZE(wl1271_rates
),
3536 .ht_cap
= WL12XX_HT_CAP
,
3539 /* 5 GHz data rates for WL1273 */
3540 static struct ieee80211_rate wl1271_rates_5ghz
[] = {
3542 .hw_value
= CONF_HW_BIT_RATE_6MBPS
,
3543 .hw_value_short
= CONF_HW_BIT_RATE_6MBPS
, },
3545 .hw_value
= CONF_HW_BIT_RATE_9MBPS
,
3546 .hw_value_short
= CONF_HW_BIT_RATE_9MBPS
, },
3548 .hw_value
= CONF_HW_BIT_RATE_12MBPS
,
3549 .hw_value_short
= CONF_HW_BIT_RATE_12MBPS
, },
3551 .hw_value
= CONF_HW_BIT_RATE_18MBPS
,
3552 .hw_value_short
= CONF_HW_BIT_RATE_18MBPS
, },
3554 .hw_value
= CONF_HW_BIT_RATE_24MBPS
,
3555 .hw_value_short
= CONF_HW_BIT_RATE_24MBPS
, },
3557 .hw_value
= CONF_HW_BIT_RATE_36MBPS
,
3558 .hw_value_short
= CONF_HW_BIT_RATE_36MBPS
, },
3560 .hw_value
= CONF_HW_BIT_RATE_48MBPS
,
3561 .hw_value_short
= CONF_HW_BIT_RATE_48MBPS
, },
3563 .hw_value
= CONF_HW_BIT_RATE_54MBPS
,
3564 .hw_value_short
= CONF_HW_BIT_RATE_54MBPS
, },
3567 /* 5 GHz band channels for WL1273 */
3568 static struct ieee80211_channel wl1271_channels_5ghz
[] = {
3569 { .hw_value
= 7, .center_freq
= 5035},
3570 { .hw_value
= 8, .center_freq
= 5040},
3571 { .hw_value
= 9, .center_freq
= 5045},
3572 { .hw_value
= 11, .center_freq
= 5055},
3573 { .hw_value
= 12, .center_freq
= 5060},
3574 { .hw_value
= 16, .center_freq
= 5080},
3575 { .hw_value
= 34, .center_freq
= 5170},
3576 { .hw_value
= 36, .center_freq
= 5180},
3577 { .hw_value
= 38, .center_freq
= 5190},
3578 { .hw_value
= 40, .center_freq
= 5200},
3579 { .hw_value
= 42, .center_freq
= 5210},
3580 { .hw_value
= 44, .center_freq
= 5220},
3581 { .hw_value
= 46, .center_freq
= 5230},
3582 { .hw_value
= 48, .center_freq
= 5240},
3583 { .hw_value
= 52, .center_freq
= 5260},
3584 { .hw_value
= 56, .center_freq
= 5280},
3585 { .hw_value
= 60, .center_freq
= 5300},
3586 { .hw_value
= 64, .center_freq
= 5320},
3587 { .hw_value
= 100, .center_freq
= 5500},
3588 { .hw_value
= 104, .center_freq
= 5520},
3589 { .hw_value
= 108, .center_freq
= 5540},
3590 { .hw_value
= 112, .center_freq
= 5560},
3591 { .hw_value
= 116, .center_freq
= 5580},
3592 { .hw_value
= 120, .center_freq
= 5600},
3593 { .hw_value
= 124, .center_freq
= 5620},
3594 { .hw_value
= 128, .center_freq
= 5640},
3595 { .hw_value
= 132, .center_freq
= 5660},
3596 { .hw_value
= 136, .center_freq
= 5680},
3597 { .hw_value
= 140, .center_freq
= 5700},
3598 { .hw_value
= 149, .center_freq
= 5745},
3599 { .hw_value
= 153, .center_freq
= 5765},
3600 { .hw_value
= 157, .center_freq
= 5785},
3601 { .hw_value
= 161, .center_freq
= 5805},
3602 { .hw_value
= 165, .center_freq
= 5825},
3605 /* mapping to indexes for wl1271_rates_5ghz */
3606 static const u8 wl1271_rate_to_idx_5ghz
[] = {
3607 /* MCS rates are used only with 11n */
3608 7, /* CONF_HW_RXTX_RATE_MCS7 */
3609 6, /* CONF_HW_RXTX_RATE_MCS6 */
3610 5, /* CONF_HW_RXTX_RATE_MCS5 */
3611 4, /* CONF_HW_RXTX_RATE_MCS4 */
3612 3, /* CONF_HW_RXTX_RATE_MCS3 */
3613 2, /* CONF_HW_RXTX_RATE_MCS2 */
3614 1, /* CONF_HW_RXTX_RATE_MCS1 */
3615 0, /* CONF_HW_RXTX_RATE_MCS0 */
3617 7, /* CONF_HW_RXTX_RATE_54 */
3618 6, /* CONF_HW_RXTX_RATE_48 */
3619 5, /* CONF_HW_RXTX_RATE_36 */
3620 4, /* CONF_HW_RXTX_RATE_24 */
3622 /* TI-specific rate */
3623 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_22 */
3625 3, /* CONF_HW_RXTX_RATE_18 */
3626 2, /* CONF_HW_RXTX_RATE_12 */
3627 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_11 */
3628 1, /* CONF_HW_RXTX_RATE_9 */
3629 0, /* CONF_HW_RXTX_RATE_6 */
3630 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_5_5 */
3631 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_2 */
3632 CONF_HW_RXTX_RATE_UNSUPPORTED
/* CONF_HW_RXTX_RATE_1 */
3635 static struct ieee80211_supported_band wl1271_band_5ghz
= {
3636 .channels
= wl1271_channels_5ghz
,
3637 .n_channels
= ARRAY_SIZE(wl1271_channels_5ghz
),
3638 .bitrates
= wl1271_rates_5ghz
,
3639 .n_bitrates
= ARRAY_SIZE(wl1271_rates_5ghz
),
3640 .ht_cap
= WL12XX_HT_CAP
,
3643 static const u8
*wl1271_band_rate_to_idx
[] = {
3644 [IEEE80211_BAND_2GHZ
] = wl1271_rate_to_idx_2ghz
,
3645 [IEEE80211_BAND_5GHZ
] = wl1271_rate_to_idx_5ghz
3648 static const struct ieee80211_ops wl1271_ops
= {
3649 .start
= wl1271_op_start
,
3650 .stop
= wl1271_op_stop
,
3651 .add_interface
= wl1271_op_add_interface
,
3652 .remove_interface
= wl1271_op_remove_interface
,
3653 .suspend
= wl1271_op_suspend
,
3654 .resume
= wl1271_op_resume
,
3655 .config
= wl1271_op_config
,
3656 .prepare_multicast
= wl1271_op_prepare_multicast
,
3657 .configure_filter
= wl1271_op_configure_filter
,
3659 .set_key
= wl1271_op_set_key
,
3660 .hw_scan
= wl1271_op_hw_scan
,
3661 .sched_scan_start
= wl1271_op_sched_scan_start
,
3662 .sched_scan_stop
= wl1271_op_sched_scan_stop
,
3663 .bss_info_changed
= wl1271_op_bss_info_changed
,
3664 .set_frag_threshold
= wl1271_op_set_frag_threshold
,
3665 .set_rts_threshold
= wl1271_op_set_rts_threshold
,
3666 .conf_tx
= wl1271_op_conf_tx
,
3667 .get_tsf
= wl1271_op_get_tsf
,
3668 .get_survey
= wl1271_op_get_survey
,
3669 .sta_add
= wl1271_op_sta_add
,
3670 .sta_remove
= wl1271_op_sta_remove
,
3671 .ampdu_action
= wl1271_op_ampdu_action
,
3672 .tx_frames_pending
= wl1271_tx_frames_pending
,
3673 CFG80211_TESTMODE_CMD(wl1271_tm_cmd
)
3677 u8
wl1271_rate_to_idx(int rate
, enum ieee80211_band band
)
3681 BUG_ON(band
>= sizeof(wl1271_band_rate_to_idx
)/sizeof(u8
*));
3683 if (unlikely(rate
>= CONF_HW_RXTX_RATE_MAX
)) {
3684 wl1271_error("Illegal RX rate from HW: %d", rate
);
3688 idx
= wl1271_band_rate_to_idx
[band
][rate
];
3689 if (unlikely(idx
== CONF_HW_RXTX_RATE_UNSUPPORTED
)) {
3690 wl1271_error("Unsupported RX rate from HW: %d", rate
);
3697 static ssize_t
wl1271_sysfs_show_bt_coex_state(struct device
*dev
,
3698 struct device_attribute
*attr
,
3701 struct wl1271
*wl
= dev_get_drvdata(dev
);
3706 mutex_lock(&wl
->mutex
);
3707 len
= snprintf(buf
, len
, "%d\n\n0 - off\n1 - on\n",
3709 mutex_unlock(&wl
->mutex
);
3715 static ssize_t
wl1271_sysfs_store_bt_coex_state(struct device
*dev
,
3716 struct device_attribute
*attr
,
3717 const char *buf
, size_t count
)
3719 struct wl1271
*wl
= dev_get_drvdata(dev
);
3723 ret
= kstrtoul(buf
, 10, &res
);
3725 wl1271_warning("incorrect value written to bt_coex_mode");
3729 mutex_lock(&wl
->mutex
);
3733 if (res
== wl
->sg_enabled
)
3736 wl
->sg_enabled
= res
;
3738 if (wl
->state
== WL1271_STATE_OFF
)
3741 ret
= wl1271_ps_elp_wakeup(wl
);
3745 wl1271_acx_sg_enable(wl
, wl
->sg_enabled
);
3746 wl1271_ps_elp_sleep(wl
);
3749 mutex_unlock(&wl
->mutex
);
3753 static DEVICE_ATTR(bt_coex_state
, S_IRUGO
| S_IWUSR
,
3754 wl1271_sysfs_show_bt_coex_state
,
3755 wl1271_sysfs_store_bt_coex_state
);
3757 static ssize_t
wl1271_sysfs_show_hw_pg_ver(struct device
*dev
,
3758 struct device_attribute
*attr
,
3761 struct wl1271
*wl
= dev_get_drvdata(dev
);
3766 mutex_lock(&wl
->mutex
);
3767 if (wl
->hw_pg_ver
>= 0)
3768 len
= snprintf(buf
, len
, "%d\n", wl
->hw_pg_ver
);
3770 len
= snprintf(buf
, len
, "n/a\n");
3771 mutex_unlock(&wl
->mutex
);
3776 static DEVICE_ATTR(hw_pg_ver
, S_IRUGO
| S_IWUSR
,
3777 wl1271_sysfs_show_hw_pg_ver
, NULL
);
3779 int wl1271_register_hw(struct wl1271
*wl
)
3783 if (wl
->mac80211_registered
)
3786 ret
= wl1271_fetch_nvs(wl
);
3788 /* NOTE: The wl->nvs->nvs element must be first, in
3789 * order to simplify the casting, we assume it is at
3790 * the beginning of the wl->nvs structure.
3792 u8
*nvs_ptr
= (u8
*)wl
->nvs
;
3794 wl
->mac_addr
[0] = nvs_ptr
[11];
3795 wl
->mac_addr
[1] = nvs_ptr
[10];
3796 wl
->mac_addr
[2] = nvs_ptr
[6];
3797 wl
->mac_addr
[3] = nvs_ptr
[5];
3798 wl
->mac_addr
[4] = nvs_ptr
[4];
3799 wl
->mac_addr
[5] = nvs_ptr
[3];
3802 SET_IEEE80211_PERM_ADDR(wl
->hw
, wl
->mac_addr
);
3804 ret
= ieee80211_register_hw(wl
->hw
);
3806 wl1271_error("unable to register mac80211 hw: %d", ret
);
3810 wl
->mac80211_registered
= true;
3812 wl1271_debugfs_init(wl
);
3814 register_netdevice_notifier(&wl1271_dev_notifier
);
3816 wl1271_notice("loaded");
3820 EXPORT_SYMBOL_GPL(wl1271_register_hw
);
3822 void wl1271_unregister_hw(struct wl1271
*wl
)
3824 if (wl
->state
== WL1271_STATE_PLT
)
3825 __wl1271_plt_stop(wl
);
3827 unregister_netdevice_notifier(&wl1271_dev_notifier
);
3828 ieee80211_unregister_hw(wl
->hw
);
3829 wl
->mac80211_registered
= false;
3832 EXPORT_SYMBOL_GPL(wl1271_unregister_hw
);
3834 int wl1271_init_ieee80211(struct wl1271
*wl
)
3836 static const u32 cipher_suites
[] = {
3837 WLAN_CIPHER_SUITE_WEP40
,
3838 WLAN_CIPHER_SUITE_WEP104
,
3839 WLAN_CIPHER_SUITE_TKIP
,
3840 WLAN_CIPHER_SUITE_CCMP
,
3841 WL1271_CIPHER_SUITE_GEM
,
3844 /* The tx descriptor buffer and the TKIP space. */
3845 wl
->hw
->extra_tx_headroom
= WL1271_TKIP_IV_SPACE
+
3846 sizeof(struct wl1271_tx_hw_descr
);
3849 /* FIXME: find a proper value */
3850 wl
->hw
->channel_change_time
= 10000;
3851 wl
->hw
->max_listen_interval
= wl
->conf
.conn
.max_listen_interval
;
3853 wl
->hw
->flags
= IEEE80211_HW_SIGNAL_DBM
|
3854 IEEE80211_HW_BEACON_FILTER
|
3855 IEEE80211_HW_SUPPORTS_PS
|
3856 IEEE80211_HW_SUPPORTS_UAPSD
|
3857 IEEE80211_HW_HAS_RATE_CONTROL
|
3858 IEEE80211_HW_CONNECTION_MONITOR
|
3859 IEEE80211_HW_SUPPORTS_CQM_RSSI
|
3860 IEEE80211_HW_REPORTS_TX_ACK_STATUS
|
3861 IEEE80211_HW_SPECTRUM_MGMT
|
3862 IEEE80211_HW_AP_LINK_PS
;
3864 wl
->hw
->wiphy
->cipher_suites
= cipher_suites
;
3865 wl
->hw
->wiphy
->n_cipher_suites
= ARRAY_SIZE(cipher_suites
);
3867 wl
->hw
->wiphy
->interface_modes
= BIT(NL80211_IFTYPE_STATION
) |
3868 BIT(NL80211_IFTYPE_ADHOC
) | BIT(NL80211_IFTYPE_AP
);
3869 wl
->hw
->wiphy
->max_scan_ssids
= 1;
3871 * Maximum length of elements in scanning probe request templates
3872 * should be the maximum length possible for a template, without
3873 * the IEEE80211 header of the template
3875 wl
->hw
->wiphy
->max_scan_ie_len
= WL1271_CMD_TEMPL_MAX_SIZE
-
3876 sizeof(struct ieee80211_header
);
3878 /* make sure all our channels fit in the scanned_ch bitmask */
3879 BUILD_BUG_ON(ARRAY_SIZE(wl1271_channels
) +
3880 ARRAY_SIZE(wl1271_channels_5ghz
) >
3881 WL1271_MAX_CHANNELS
);
3883 * We keep local copies of the band structs because we need to
3884 * modify them on a per-device basis.
3886 memcpy(&wl
->bands
[IEEE80211_BAND_2GHZ
], &wl1271_band_2ghz
,
3887 sizeof(wl1271_band_2ghz
));
3888 memcpy(&wl
->bands
[IEEE80211_BAND_5GHZ
], &wl1271_band_5ghz
,
3889 sizeof(wl1271_band_5ghz
));
3891 wl
->hw
->wiphy
->bands
[IEEE80211_BAND_2GHZ
] =
3892 &wl
->bands
[IEEE80211_BAND_2GHZ
];
3893 wl
->hw
->wiphy
->bands
[IEEE80211_BAND_5GHZ
] =
3894 &wl
->bands
[IEEE80211_BAND_5GHZ
];
3897 wl
->hw
->max_rates
= 1;
3899 wl
->hw
->wiphy
->reg_notifier
= wl1271_reg_notify
;
3901 SET_IEEE80211_DEV(wl
->hw
, wl1271_wl_to_dev(wl
));
3903 wl
->hw
->sta_data_size
= sizeof(struct wl1271_station
);
3905 wl
->hw
->max_rx_aggregation_subframes
= 8;
3909 EXPORT_SYMBOL_GPL(wl1271_init_ieee80211
);
3911 #define WL1271_DEFAULT_CHANNEL 0
3913 struct ieee80211_hw
*wl1271_alloc_hw(void)
3915 struct ieee80211_hw
*hw
;
3916 struct platform_device
*plat_dev
= NULL
;
3921 hw
= ieee80211_alloc_hw(sizeof(*wl
), &wl1271_ops
);
3923 wl1271_error("could not alloc ieee80211_hw");
3928 plat_dev
= kmemdup(&wl1271_device
, sizeof(wl1271_device
), GFP_KERNEL
);
3930 wl1271_error("could not allocate platform_device");
3932 goto err_plat_alloc
;
3936 memset(wl
, 0, sizeof(*wl
));
3938 INIT_LIST_HEAD(&wl
->list
);
3941 wl
->plat_dev
= plat_dev
;
3943 for (i
= 0; i
< NUM_TX_QUEUES
; i
++)
3944 skb_queue_head_init(&wl
->tx_queue
[i
]);
3946 for (i
= 0; i
< NUM_TX_QUEUES
; i
++)
3947 for (j
= 0; j
< AP_MAX_LINKS
; j
++)
3948 skb_queue_head_init(&wl
->links
[j
].tx_queue
[i
]);
3950 skb_queue_head_init(&wl
->deferred_rx_queue
);
3951 skb_queue_head_init(&wl
->deferred_tx_queue
);
3953 INIT_DELAYED_WORK(&wl
->elp_work
, wl1271_elp_work
);
3954 INIT_DELAYED_WORK(&wl
->pspoll_work
, wl1271_pspoll_work
);
3955 INIT_WORK(&wl
->netstack_work
, wl1271_netstack_work
);
3956 INIT_WORK(&wl
->tx_work
, wl1271_tx_work
);
3957 INIT_WORK(&wl
->recovery_work
, wl1271_recovery_work
);
3958 INIT_DELAYED_WORK(&wl
->scan_complete_work
, wl1271_scan_complete_work
);
3959 wl
->channel
= WL1271_DEFAULT_CHANNEL
;
3960 wl
->beacon_int
= WL1271_DEFAULT_BEACON_INT
;
3961 wl
->default_key
= 0;
3963 wl
->rx_config
= WL1271_DEFAULT_STA_RX_CONFIG
;
3964 wl
->rx_filter
= WL1271_DEFAULT_STA_RX_FILTER
;
3965 wl
->psm_entry_retry
= 0;
3966 wl
->power_level
= WL1271_DEFAULT_POWER_LEVEL
;
3967 wl
->basic_rate_set
= CONF_TX_RATE_MASK_BASIC
;
3968 wl
->basic_rate
= CONF_TX_RATE_MASK_BASIC
;
3969 wl
->rate_set
= CONF_TX_RATE_MASK_BASIC
;
3970 wl
->band
= IEEE80211_BAND_2GHZ
;
3973 wl
->sg_enabled
= true;
3975 wl
->bss_type
= MAX_BSS_TYPE
;
3976 wl
->set_bss_type
= MAX_BSS_TYPE
;
3977 wl
->fw_bss_type
= MAX_BSS_TYPE
;
3978 wl
->last_tx_hlid
= 0;
3980 wl
->ap_fw_ps_map
= 0;
3982 wl
->platform_quirks
= 0;
3983 wl
->sched_scanning
= false;
3985 memset(wl
->tx_frames_map
, 0, sizeof(wl
->tx_frames_map
));
3986 for (i
= 0; i
< ACX_TX_DESCRIPTORS
; i
++)
3987 wl
->tx_frames
[i
] = NULL
;
3989 spin_lock_init(&wl
->wl_lock
);
3991 wl
->state
= WL1271_STATE_OFF
;
3992 mutex_init(&wl
->mutex
);
3994 /* Apply default driver configuration. */
3995 wl1271_conf_init(wl
);
3997 order
= get_order(WL1271_AGGR_BUFFER_SIZE
);
3998 wl
->aggr_buf
= (u8
*)__get_free_pages(GFP_KERNEL
, order
);
3999 if (!wl
->aggr_buf
) {
4004 wl
->dummy_packet
= wl12xx_alloc_dummy_packet(wl
);
4005 if (!wl
->dummy_packet
) {
4010 /* Register platform device */
4011 ret
= platform_device_register(wl
->plat_dev
);
4013 wl1271_error("couldn't register platform device");
4014 goto err_dummy_packet
;
4016 dev_set_drvdata(&wl
->plat_dev
->dev
, wl
);
4018 /* Create sysfs file to control bt coex state */
4019 ret
= device_create_file(&wl
->plat_dev
->dev
, &dev_attr_bt_coex_state
);
4021 wl1271_error("failed to create sysfs file bt_coex_state");
4025 /* Create sysfs file to get HW PG version */
4026 ret
= device_create_file(&wl
->plat_dev
->dev
, &dev_attr_hw_pg_ver
);
4028 wl1271_error("failed to create sysfs file hw_pg_ver");
4029 goto err_bt_coex_state
;
4035 device_remove_file(&wl
->plat_dev
->dev
, &dev_attr_bt_coex_state
);
4038 platform_device_unregister(wl
->plat_dev
);
4041 dev_kfree_skb(wl
->dummy_packet
);
4044 free_pages((unsigned long)wl
->aggr_buf
, order
);
4047 wl1271_debugfs_exit(wl
);
4051 ieee80211_free_hw(hw
);
4055 return ERR_PTR(ret
);
4057 EXPORT_SYMBOL_GPL(wl1271_alloc_hw
);
4059 int wl1271_free_hw(struct wl1271
*wl
)
4061 platform_device_unregister(wl
->plat_dev
);
4062 dev_kfree_skb(wl
->dummy_packet
);
4063 free_pages((unsigned long)wl
->aggr_buf
,
4064 get_order(WL1271_AGGR_BUFFER_SIZE
));
4065 kfree(wl
->plat_dev
);
4067 wl1271_debugfs_exit(wl
);
4074 kfree(wl
->fw_status
);
4075 kfree(wl
->tx_res_if
);
4077 ieee80211_free_hw(wl
->hw
);
4081 EXPORT_SYMBOL_GPL(wl1271_free_hw
);
4083 u32 wl12xx_debug_level
= DEBUG_NONE
;
4084 EXPORT_SYMBOL_GPL(wl12xx_debug_level
);
4085 module_param_named(debug_level
, wl12xx_debug_level
, uint
, S_IRUSR
| S_IWUSR
);
4086 MODULE_PARM_DESC(debug_level
, "wl12xx debugging level");
4088 MODULE_LICENSE("GPL");
4089 MODULE_AUTHOR("Luciano Coelho <coelho@ti.com>");
4090 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");