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>
35 #include "wl12xx_80211.h"
49 #define WL1271_BOOT_RETRIES 3
51 static struct conf_drv_settings default_conf
= {
54 [CONF_SG_BT_PER_THRESHOLD
] = 7500,
55 [CONF_SG_HV3_MAX_OVERRIDE
] = 0,
56 [CONF_SG_BT_NFS_SAMPLE_INTERVAL
] = 400,
57 [CONF_SG_BT_LOAD_RATIO
] = 50,
58 [CONF_SG_AUTO_PS_MODE
] = 1,
59 [CONF_SG_AUTO_SCAN_PROBE_REQ
] = 170,
60 [CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_HV3
] = 50,
61 [CONF_SG_ANTENNA_CONFIGURATION
] = 0,
62 [CONF_SG_BEACON_MISS_PERCENT
] = 60,
63 [CONF_SG_RATE_ADAPT_THRESH
] = 12,
64 [CONF_SG_RATE_ADAPT_SNR
] = 0,
65 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MIN_BR
] = 10,
66 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MAX_BR
] = 30,
67 [CONF_SG_WLAN_PS_MAX_BT_ACL_MASTER_BR
] = 8,
68 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MIN_BR
] = 20,
69 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MAX_BR
] = 50,
70 /* Note: with UPSD, this should be 4 */
71 [CONF_SG_WLAN_PS_MAX_BT_ACL_SLAVE_BR
] = 8,
72 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MIN_EDR
] = 7,
73 [CONF_SG_WLAN_PS_BT_ACL_MASTER_MAX_EDR
] = 25,
74 [CONF_SG_WLAN_PS_MAX_BT_ACL_MASTER_EDR
] = 20,
75 /* Note: with UPDS, this should be 15 */
76 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MIN_EDR
] = 8,
77 /* Note: with UPDS, this should be 50 */
78 [CONF_SG_WLAN_PS_BT_ACL_SLAVE_MAX_EDR
] = 40,
79 /* Note: with UPDS, this should be 10 */
80 [CONF_SG_WLAN_PS_MAX_BT_ACL_SLAVE_EDR
] = 20,
83 [CONF_SG_ADAPTIVE_RXT_TXT
] = 1,
84 [CONF_SG_PS_POLL_TIMEOUT
] = 10,
85 [CONF_SG_UPSD_TIMEOUT
] = 10,
86 [CONF_SG_WLAN_ACTIVE_BT_ACL_MASTER_MIN_EDR
] = 7,
87 [CONF_SG_WLAN_ACTIVE_BT_ACL_MASTER_MAX_EDR
] = 15,
88 [CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_MASTER_EDR
] = 15,
89 [CONF_SG_WLAN_ACTIVE_BT_ACL_SLAVE_MIN_EDR
] = 8,
90 [CONF_SG_WLAN_ACTIVE_BT_ACL_SLAVE_MAX_EDR
] = 20,
91 [CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_SLAVE_EDR
] = 15,
92 [CONF_SG_WLAN_ACTIVE_BT_ACL_MIN_BR
] = 20,
93 [CONF_SG_WLAN_ACTIVE_BT_ACL_MAX_BR
] = 50,
94 [CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_BR
] = 10,
95 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_HV3
] = 200,
96 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_A2DP
] = 800,
97 [CONF_SG_PASSIVE_SCAN_A2DP_BT_TIME
] = 75,
98 [CONF_SG_PASSIVE_SCAN_A2DP_WLAN_TIME
] = 15,
99 [CONF_SG_HV3_MAX_SERVED
] = 6,
100 [CONF_SG_DHCP_TIME
] = 5000,
101 [CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_A2DP
] = 100,
103 .state
= CONF_SG_PROTECTIVE
,
106 .rx_msdu_life_time
= 512000,
107 .packet_detection_threshold
= 0,
108 .ps_poll_timeout
= 15,
110 .rts_threshold
= 2347,
111 .rx_cca_threshold
= 0,
112 .irq_blk_threshold
= 0xFFFF,
113 .irq_pkt_threshold
= 0,
115 .queue_type
= CONF_RX_QUEUE_TYPE_LOW_PRIORITY
,
118 .tx_energy_detection
= 0,
121 .short_retry_limit
= 10,
122 .long_retry_limit
= 10,
145 .aifsn
= CONF_TX_AIFS_PIFS
,
152 .aifsn
= CONF_TX_AIFS_PIFS
,
158 .enabled_rates
= CONF_TX_AP_ENABLED_RATES
,
159 .short_retry_limit
= 10,
160 .long_retry_limit
= 10,
164 .enabled_rates
= CONF_TX_AP_ENABLED_RATES
,
165 .short_retry_limit
= 10,
166 .long_retry_limit
= 10,
170 .enabled_rates
= CONF_TX_AP_ENABLED_RATES
,
171 .short_retry_limit
= 10,
172 .long_retry_limit
= 10,
176 .enabled_rates
= CONF_TX_AP_ENABLED_RATES
,
177 .short_retry_limit
= 10,
178 .long_retry_limit
= 10,
183 .enabled_rates
= CONF_TX_AP_DEFAULT_MGMT_RATES
,
184 .short_retry_limit
= 10,
185 .long_retry_limit
= 10,
189 .enabled_rates
= CONF_HW_BIT_RATE_1MBPS
,
190 .short_retry_limit
= 10,
191 .long_retry_limit
= 10,
194 .ap_max_tx_retries
= 100,
198 .queue_id
= CONF_TX_AC_BE
,
199 .channel_type
= CONF_CHANNEL_TYPE_EDCF
,
200 .tsid
= CONF_TX_AC_BE
,
201 .ps_scheme
= CONF_PS_SCHEME_LEGACY
,
202 .ack_policy
= CONF_ACK_POLICY_LEGACY
,
206 .queue_id
= CONF_TX_AC_BK
,
207 .channel_type
= CONF_CHANNEL_TYPE_EDCF
,
208 .tsid
= CONF_TX_AC_BK
,
209 .ps_scheme
= CONF_PS_SCHEME_LEGACY
,
210 .ack_policy
= CONF_ACK_POLICY_LEGACY
,
214 .queue_id
= CONF_TX_AC_VI
,
215 .channel_type
= CONF_CHANNEL_TYPE_EDCF
,
216 .tsid
= CONF_TX_AC_VI
,
217 .ps_scheme
= CONF_PS_SCHEME_LEGACY
,
218 .ack_policy
= CONF_ACK_POLICY_LEGACY
,
222 .queue_id
= CONF_TX_AC_VO
,
223 .channel_type
= CONF_CHANNEL_TYPE_EDCF
,
224 .tsid
= CONF_TX_AC_VO
,
225 .ps_scheme
= CONF_PS_SCHEME_LEGACY
,
226 .ack_policy
= CONF_ACK_POLICY_LEGACY
,
230 .frag_threshold
= IEEE80211_MAX_FRAG_THRESHOLD
,
231 .tx_compl_timeout
= 700,
232 .tx_compl_threshold
= 4,
233 .basic_rate
= CONF_HW_BIT_RATE_1MBPS
,
234 .basic_rate_5
= CONF_HW_BIT_RATE_6MBPS
,
235 .tmpl_short_retry_limit
= 10,
236 .tmpl_long_retry_limit
= 10,
239 .wake_up_event
= CONF_WAKE_UP_EVENT_DTIM
,
240 .listen_interval
= 1,
241 .bcn_filt_mode
= CONF_BCN_FILT_MODE_ENABLED
,
242 .bcn_filt_ie_count
= 1,
245 .ie
= WLAN_EID_CHANNEL_SWITCH
,
246 .rule
= CONF_BCN_RULE_PASS_ON_APPEARANCE
,
249 .synch_fail_thold
= 10,
250 .bss_lose_timeout
= 100,
251 .beacon_rx_timeout
= 10000,
252 .broadcast_timeout
= 20000,
253 .rx_broadcast_in_ps
= 1,
254 .ps_poll_threshold
= 10,
255 .ps_poll_recovery_period
= 700,
256 .bet_enable
= CONF_BET_MODE_ENABLE
,
257 .bet_max_consecutive
= 10,
258 .psm_entry_retries
= 5,
259 .psm_exit_retries
= 255,
260 .psm_entry_nullfunc_retries
= 3,
261 .psm_entry_hangover_period
= 1,
262 .keep_alive_interval
= 55000,
263 .max_listen_interval
= 20,
270 .host_clk_settling_time
= 5000,
271 .host_fast_wakeup_support
= false
275 .avg_weight_rssi_beacon
= 20,
276 .avg_weight_rssi_data
= 10,
277 .avg_weight_snr_beacon
= 20,
278 .avg_weight_snr_data
= 10,
281 .min_dwell_time_active
= 7500,
282 .max_dwell_time_active
= 30000,
283 .min_dwell_time_passive
= 100000,
284 .max_dwell_time_passive
= 100000,
288 .tx_per_channel_power_compensation_2
= {
289 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
291 .tx_per_channel_power_compensation_5
= {
292 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
293 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
294 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
298 .tx_ba_win_size
= 64,
299 .inactivity_timeout
= 10000,
305 .tx_min_block_num
= 40,
307 .min_req_tx_blocks
= 100,
308 .min_req_rx_blocks
= 22,
313 static void __wl1271_op_remove_interface(struct wl1271
*wl
);
314 static void wl1271_free_ap_keys(struct wl1271
*wl
);
317 static void wl1271_device_release(struct device
*dev
)
322 static struct platform_device wl1271_device
= {
326 /* device model insists to have a release function */
328 .release
= wl1271_device_release
,
332 static LIST_HEAD(wl_list
);
334 static int wl1271_dev_notify(struct notifier_block
*me
, unsigned long what
,
337 struct net_device
*dev
= arg
;
338 struct wireless_dev
*wdev
;
340 struct ieee80211_hw
*hw
;
342 struct wl1271
*wl_temp
;
345 /* Check that this notification is for us. */
346 if (what
!= NETDEV_CHANGE
)
349 wdev
= dev
->ieee80211_ptr
;
357 hw
= wiphy_priv(wiphy
);
362 list_for_each_entry(wl
, &wl_list
, list
) {
369 mutex_lock(&wl
->mutex
);
371 if (wl
->state
== WL1271_STATE_OFF
)
374 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
377 ret
= wl1271_ps_elp_wakeup(wl
);
381 if ((dev
->operstate
== IF_OPER_UP
) &&
382 !test_and_set_bit(WL1271_FLAG_STA_STATE_SENT
, &wl
->flags
)) {
383 wl1271_cmd_set_sta_state(wl
);
384 wl1271_info("Association completed.");
387 wl1271_ps_elp_sleep(wl
);
390 mutex_unlock(&wl
->mutex
);
395 static int wl1271_reg_notify(struct wiphy
*wiphy
,
396 struct regulatory_request
*request
)
398 struct ieee80211_supported_band
*band
;
399 struct ieee80211_channel
*ch
;
402 band
= wiphy
->bands
[IEEE80211_BAND_5GHZ
];
403 for (i
= 0; i
< band
->n_channels
; i
++) {
404 ch
= &band
->channels
[i
];
405 if (ch
->flags
& IEEE80211_CHAN_DISABLED
)
408 if (ch
->flags
& IEEE80211_CHAN_RADAR
)
409 ch
->flags
|= IEEE80211_CHAN_NO_IBSS
|
410 IEEE80211_CHAN_PASSIVE_SCAN
;
417 static void wl1271_conf_init(struct wl1271
*wl
)
421 * This function applies the default configuration to the driver. This
422 * function is invoked upon driver load (spi probe.)
424 * The configuration is stored in a run-time structure in order to
425 * facilitate for run-time adjustment of any of the parameters. Making
426 * changes to the configuration structure will apply the new values on
427 * the next interface up (wl1271_op_start.)
430 /* apply driver default configuration */
431 memcpy(&wl
->conf
, &default_conf
, sizeof(default_conf
));
435 static int wl1271_plt_init(struct wl1271
*wl
)
437 struct conf_tx_ac_category
*conf_ac
;
438 struct conf_tx_tid
*conf_tid
;
441 ret
= wl1271_cmd_general_parms(wl
);
445 ret
= wl1271_cmd_radio_parms(wl
);
449 ret
= wl1271_cmd_ext_radio_parms(wl
);
453 ret
= wl1271_sta_init_templates_config(wl
);
457 ret
= wl1271_acx_init_mem_config(wl
);
461 /* PHY layer config */
462 ret
= wl1271_init_phy_config(wl
);
464 goto out_free_memmap
;
466 ret
= wl1271_acx_dco_itrim_params(wl
);
468 goto out_free_memmap
;
470 /* Initialize connection monitoring thresholds */
471 ret
= wl1271_acx_conn_monit_params(wl
, false);
473 goto out_free_memmap
;
475 /* Bluetooth WLAN coexistence */
476 ret
= wl1271_init_pta(wl
);
478 goto out_free_memmap
;
480 /* Energy detection */
481 ret
= wl1271_init_energy_detection(wl
);
483 goto out_free_memmap
;
485 ret
= wl1271_acx_sta_mem_cfg(wl
);
487 goto out_free_memmap
;
489 /* Default fragmentation threshold */
490 ret
= wl1271_acx_frag_threshold(wl
, wl
->conf
.tx
.frag_threshold
);
492 goto out_free_memmap
;
494 /* Default TID/AC configuration */
495 BUG_ON(wl
->conf
.tx
.tid_conf_count
!= wl
->conf
.tx
.ac_conf_count
);
496 for (i
= 0; i
< wl
->conf
.tx
.tid_conf_count
; i
++) {
497 conf_ac
= &wl
->conf
.tx
.ac_conf
[i
];
498 ret
= wl1271_acx_ac_cfg(wl
, conf_ac
->ac
, conf_ac
->cw_min
,
499 conf_ac
->cw_max
, conf_ac
->aifsn
,
500 conf_ac
->tx_op_limit
);
502 goto out_free_memmap
;
504 conf_tid
= &wl
->conf
.tx
.tid_conf
[i
];
505 ret
= wl1271_acx_tid_cfg(wl
, conf_tid
->queue_id
,
506 conf_tid
->channel_type
,
509 conf_tid
->ack_policy
,
510 conf_tid
->apsd_conf
[0],
511 conf_tid
->apsd_conf
[1]);
513 goto out_free_memmap
;
516 /* Enable data path */
517 ret
= wl1271_cmd_data_path(wl
, 1);
519 goto out_free_memmap
;
521 /* Configure for CAM power saving (ie. always active) */
522 ret
= wl1271_acx_sleep_auth(wl
, WL1271_PSM_CAM
);
524 goto out_free_memmap
;
527 ret
= wl1271_acx_pm_config(wl
);
529 goto out_free_memmap
;
534 kfree(wl
->target_mem_map
);
535 wl
->target_mem_map
= NULL
;
540 static void wl1271_irq_ps_regulate_link(struct wl1271
*wl
, u8 hlid
, u8 tx_blks
)
544 /* only regulate station links */
545 if (hlid
< WL1271_AP_STA_HLID_START
)
548 fw_ps
= test_bit(hlid
, (unsigned long *)&wl
->ap_fw_ps_map
);
551 * Wake up from high level PS if the STA is asleep with too little
552 * blocks in FW or if the STA is awake.
554 if (!fw_ps
|| tx_blks
< WL1271_PS_STA_MAX_BLOCKS
)
555 wl1271_ps_link_end(wl
, hlid
);
557 /* Start high-level PS if the STA is asleep with enough blocks in FW */
558 else if (fw_ps
&& tx_blks
>= WL1271_PS_STA_MAX_BLOCKS
)
559 wl1271_ps_link_start(wl
, hlid
, true);
562 static void wl1271_irq_update_links_status(struct wl1271
*wl
,
563 struct wl1271_fw_ap_status
*status
)
568 cur_fw_ps_map
= le32_to_cpu(status
->link_ps_bitmap
);
569 if (wl
->ap_fw_ps_map
!= cur_fw_ps_map
) {
570 wl1271_debug(DEBUG_PSM
,
571 "link ps prev 0x%x cur 0x%x changed 0x%x",
572 wl
->ap_fw_ps_map
, cur_fw_ps_map
,
573 wl
->ap_fw_ps_map
^ cur_fw_ps_map
);
575 wl
->ap_fw_ps_map
= cur_fw_ps_map
;
578 for (hlid
= WL1271_AP_STA_HLID_START
; hlid
< AP_MAX_LINKS
; hlid
++) {
579 u8 cnt
= status
->tx_lnk_free_blks
[hlid
] -
580 wl
->links
[hlid
].prev_freed_blks
;
582 wl
->links
[hlid
].prev_freed_blks
=
583 status
->tx_lnk_free_blks
[hlid
];
584 wl
->links
[hlid
].allocated_blks
-= cnt
;
586 wl1271_irq_ps_regulate_link(wl
, hlid
,
587 wl
->links
[hlid
].allocated_blks
);
591 static void wl1271_fw_status(struct wl1271
*wl
,
592 struct wl1271_fw_full_status
*full_status
)
594 struct wl1271_fw_common_status
*status
= &full_status
->common
;
599 if (wl
->bss_type
== BSS_TYPE_AP_BSS
)
600 wl1271_raw_read(wl
, FW_STATUS_ADDR
, status
,
601 sizeof(struct wl1271_fw_ap_status
), false);
603 wl1271_raw_read(wl
, FW_STATUS_ADDR
, status
,
604 sizeof(struct wl1271_fw_sta_status
), false);
606 wl1271_debug(DEBUG_IRQ
, "intr: 0x%x (fw_rx_counter = %d, "
607 "drv_rx_counter = %d, tx_results_counter = %d)",
609 status
->fw_rx_counter
,
610 status
->drv_rx_counter
,
611 status
->tx_results_counter
);
613 /* update number of available TX blocks */
614 for (i
= 0; i
< NUM_TX_QUEUES
; i
++) {
615 u32 cnt
= le32_to_cpu(status
->tx_released_blks
[i
]) -
616 wl
->tx_blocks_freed
[i
];
618 wl
->tx_blocks_freed
[i
] =
619 le32_to_cpu(status
->tx_released_blks
[i
]);
620 wl
->tx_blocks_available
+= cnt
;
624 /* if more blocks are available now, tx work can be scheduled */
626 clear_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
);
628 /* for AP update num of allocated TX blocks per link and ps status */
629 if (wl
->bss_type
== BSS_TYPE_AP_BSS
)
630 wl1271_irq_update_links_status(wl
, &full_status
->ap
);
632 /* update the host-chipset time offset */
634 wl
->time_offset
= (timespec_to_ns(&ts
) >> 10) -
635 (s64
)le32_to_cpu(status
->fw_localtime
);
638 static void wl1271_flush_deferred_work(struct wl1271
*wl
)
642 /* Pass all received frames to the network stack */
643 while ((skb
= skb_dequeue(&wl
->deferred_rx_queue
)))
644 ieee80211_rx_ni(wl
->hw
, skb
);
646 /* Return sent skbs to the network stack */
647 while ((skb
= skb_dequeue(&wl
->deferred_tx_queue
)))
648 ieee80211_tx_status(wl
->hw
, skb
);
651 static void wl1271_netstack_work(struct work_struct
*work
)
654 container_of(work
, struct wl1271
, netstack_work
);
657 wl1271_flush_deferred_work(wl
);
658 } while (skb_queue_len(&wl
->deferred_rx_queue
));
661 #define WL1271_IRQ_MAX_LOOPS 256
663 irqreturn_t
wl1271_irq(int irq
, void *cookie
)
667 int loopcount
= WL1271_IRQ_MAX_LOOPS
;
668 struct wl1271
*wl
= (struct wl1271
*)cookie
;
670 unsigned int defer_count
;
673 /* TX might be handled here, avoid redundant work */
674 set_bit(WL1271_FLAG_TX_PENDING
, &wl
->flags
);
675 cancel_work_sync(&wl
->tx_work
);
677 mutex_lock(&wl
->mutex
);
679 wl1271_debug(DEBUG_IRQ
, "IRQ work");
681 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
684 ret
= wl1271_ps_elp_wakeup(wl
);
688 while (!done
&& loopcount
--) {
690 * In order to avoid a race with the hardirq, clear the flag
691 * before acknowledging the chip. Since the mutex is held,
692 * wl1271_ps_elp_wakeup cannot be called concurrently.
694 clear_bit(WL1271_FLAG_IRQ_RUNNING
, &wl
->flags
);
695 smp_mb__after_clear_bit();
697 wl1271_fw_status(wl
, wl
->fw_status
);
698 intr
= le32_to_cpu(wl
->fw_status
->common
.intr
);
699 intr
&= WL1271_INTR_MASK
;
705 if (unlikely(intr
& WL1271_ACX_INTR_WATCHDOG
)) {
706 wl1271_error("watchdog interrupt received! "
707 "starting recovery.");
708 ieee80211_queue_work(wl
->hw
, &wl
->recovery_work
);
710 /* restarting the chip. ignore any other interrupt. */
714 if (likely(intr
& WL1271_ACX_INTR_DATA
)) {
715 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_DATA");
717 wl1271_rx(wl
, &wl
->fw_status
->common
);
719 /* Check if any tx blocks were freed */
720 spin_lock_irqsave(&wl
->wl_lock
, flags
);
721 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
) &&
722 wl
->tx_queue_count
) {
723 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
725 * In order to avoid starvation of the TX path,
726 * call the work function directly.
728 wl1271_tx_work_locked(wl
);
730 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
733 /* check for tx results */
734 if (wl
->fw_status
->common
.tx_results_counter
!=
735 (wl
->tx_results_count
& 0xff))
736 wl1271_tx_complete(wl
);
738 /* Make sure the deferred queues don't get too long */
739 defer_count
= skb_queue_len(&wl
->deferred_tx_queue
) +
740 skb_queue_len(&wl
->deferred_rx_queue
);
741 if (defer_count
> WL1271_DEFERRED_QUEUE_LIMIT
)
742 wl1271_flush_deferred_work(wl
);
745 if (intr
& WL1271_ACX_INTR_EVENT_A
) {
746 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_EVENT_A");
747 wl1271_event_handle(wl
, 0);
750 if (intr
& WL1271_ACX_INTR_EVENT_B
) {
751 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_EVENT_B");
752 wl1271_event_handle(wl
, 1);
755 if (intr
& WL1271_ACX_INTR_INIT_COMPLETE
)
756 wl1271_debug(DEBUG_IRQ
,
757 "WL1271_ACX_INTR_INIT_COMPLETE");
759 if (intr
& WL1271_ACX_INTR_HW_AVAILABLE
)
760 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_HW_AVAILABLE");
763 wl1271_ps_elp_sleep(wl
);
766 spin_lock_irqsave(&wl
->wl_lock
, flags
);
767 /* In case TX was not handled here, queue TX work */
768 clear_bit(WL1271_FLAG_TX_PENDING
, &wl
->flags
);
769 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
) &&
771 ieee80211_queue_work(wl
->hw
, &wl
->tx_work
);
772 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
774 mutex_unlock(&wl
->mutex
);
778 EXPORT_SYMBOL_GPL(wl1271_irq
);
780 static int wl1271_fetch_firmware(struct wl1271
*wl
)
782 const struct firmware
*fw
;
786 switch (wl
->bss_type
) {
787 case BSS_TYPE_AP_BSS
:
788 fw_name
= WL1271_AP_FW_NAME
;
791 case BSS_TYPE_STA_BSS
:
792 fw_name
= WL1271_FW_NAME
;
795 wl1271_error("no compatible firmware for bss_type %d",
800 wl1271_debug(DEBUG_BOOT
, "booting firmware %s", fw_name
);
802 ret
= request_firmware(&fw
, fw_name
, wl1271_wl_to_dev(wl
));
805 wl1271_error("could not get firmware: %d", ret
);
810 wl1271_error("firmware size is not multiple of 32 bits: %zu",
817 wl
->fw_len
= fw
->size
;
818 wl
->fw
= vmalloc(wl
->fw_len
);
821 wl1271_error("could not allocate memory for the firmware");
826 memcpy(wl
->fw
, fw
->data
, wl
->fw_len
);
827 wl
->fw_bss_type
= wl
->bss_type
;
831 release_firmware(fw
);
836 static int wl1271_fetch_nvs(struct wl1271
*wl
)
838 const struct firmware
*fw
;
841 ret
= request_firmware(&fw
, WL1271_NVS_NAME
, wl1271_wl_to_dev(wl
));
844 wl1271_error("could not get nvs file: %d", ret
);
848 wl
->nvs
= kmemdup(fw
->data
, sizeof(struct wl1271_nvs_file
), GFP_KERNEL
);
851 wl1271_error("could not allocate memory for the nvs file");
856 wl
->nvs_len
= fw
->size
;
859 release_firmware(fw
);
864 static void wl1271_recovery_work(struct work_struct
*work
)
867 container_of(work
, struct wl1271
, recovery_work
);
869 mutex_lock(&wl
->mutex
);
871 if (wl
->state
!= WL1271_STATE_ON
)
874 wl1271_info("Hardware recovery in progress.");
876 if (test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
877 ieee80211_connection_loss(wl
->vif
);
879 /* reboot the chipset */
880 __wl1271_op_remove_interface(wl
);
881 ieee80211_restart_hw(wl
->hw
);
884 mutex_unlock(&wl
->mutex
);
887 static void wl1271_fw_wakeup(struct wl1271
*wl
)
891 elp_reg
= ELPCTRL_WAKE_UP
;
892 wl1271_raw_write32(wl
, HW_ACCESS_ELP_CTRL_REG_ADDR
, elp_reg
);
895 static int wl1271_setup(struct wl1271
*wl
)
897 wl
->fw_status
= kmalloc(sizeof(*wl
->fw_status
), GFP_KERNEL
);
901 wl
->tx_res_if
= kmalloc(sizeof(*wl
->tx_res_if
), GFP_KERNEL
);
902 if (!wl
->tx_res_if
) {
903 kfree(wl
->fw_status
);
910 static int wl1271_chip_wakeup(struct wl1271
*wl
)
912 struct wl1271_partition_set partition
;
915 msleep(WL1271_PRE_POWER_ON_SLEEP
);
916 ret
= wl1271_power_on(wl
);
919 msleep(WL1271_POWER_ON_SLEEP
);
923 /* We don't need a real memory partition here, because we only want
924 * to use the registers at this point. */
925 memset(&partition
, 0, sizeof(partition
));
926 partition
.reg
.start
= REGISTERS_BASE
;
927 partition
.reg
.size
= REGISTERS_DOWN_SIZE
;
928 wl1271_set_partition(wl
, &partition
);
930 /* ELP module wake up */
931 wl1271_fw_wakeup(wl
);
933 /* whal_FwCtrl_BootSm() */
935 /* 0. read chip id from CHIP_ID */
936 wl
->chip
.id
= wl1271_read32(wl
, CHIP_ID_B
);
938 /* 1. check if chip id is valid */
940 switch (wl
->chip
.id
) {
941 case CHIP_ID_1271_PG10
:
942 wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
945 ret
= wl1271_setup(wl
);
949 case CHIP_ID_1271_PG20
:
950 wl1271_debug(DEBUG_BOOT
, "chip id 0x%x (1271 PG20)",
953 ret
= wl1271_setup(wl
);
958 wl1271_warning("unsupported chip id: 0x%x", wl
->chip
.id
);
963 /* Make sure the firmware type matches the BSS type */
964 if (wl
->fw
== NULL
|| wl
->fw_bss_type
!= wl
->bss_type
) {
965 ret
= wl1271_fetch_firmware(wl
);
970 /* No NVS from netlink, try to get it from the filesystem */
971 if (wl
->nvs
== NULL
) {
972 ret
= wl1271_fetch_nvs(wl
);
981 int wl1271_plt_start(struct wl1271
*wl
)
983 int retries
= WL1271_BOOT_RETRIES
;
986 mutex_lock(&wl
->mutex
);
988 wl1271_notice("power up");
990 if (wl
->state
!= WL1271_STATE_OFF
) {
991 wl1271_error("cannot go into PLT state because not "
992 "in off state: %d", wl
->state
);
997 wl
->bss_type
= BSS_TYPE_STA_BSS
;
1001 ret
= wl1271_chip_wakeup(wl
);
1005 ret
= wl1271_boot(wl
);
1009 ret
= wl1271_plt_init(wl
);
1013 wl
->state
= WL1271_STATE_PLT
;
1014 wl1271_notice("firmware booted in PLT mode (%s)",
1015 wl
->chip
.fw_ver_str
);
1019 mutex_unlock(&wl
->mutex
);
1020 /* Unlocking the mutex in the middle of handling is
1021 inherently unsafe. In this case we deem it safe to do,
1022 because we need to let any possibly pending IRQ out of
1023 the system (and while we are WL1271_STATE_OFF the IRQ
1024 work function will not do anything.) Also, any other
1025 possible concurrent operations will fail due to the
1026 current state, hence the wl1271 struct should be safe. */
1027 wl1271_disable_interrupts(wl
);
1028 wl1271_flush_deferred_work(wl
);
1029 cancel_work_sync(&wl
->netstack_work
);
1030 mutex_lock(&wl
->mutex
);
1032 wl1271_power_off(wl
);
1035 wl1271_error("firmware boot in PLT mode failed despite %d retries",
1036 WL1271_BOOT_RETRIES
);
1038 mutex_unlock(&wl
->mutex
);
1043 int __wl1271_plt_stop(struct wl1271
*wl
)
1047 wl1271_notice("power down");
1049 if (wl
->state
!= WL1271_STATE_PLT
) {
1050 wl1271_error("cannot power down because not in PLT "
1051 "state: %d", wl
->state
);
1056 wl1271_power_off(wl
);
1058 wl
->state
= WL1271_STATE_OFF
;
1061 mutex_unlock(&wl
->mutex
);
1062 wl1271_disable_interrupts(wl
);
1063 wl1271_flush_deferred_work(wl
);
1064 cancel_work_sync(&wl
->netstack_work
);
1065 cancel_work_sync(&wl
->recovery_work
);
1066 mutex_lock(&wl
->mutex
);
1071 int wl1271_plt_stop(struct wl1271
*wl
)
1075 mutex_lock(&wl
->mutex
);
1076 ret
= __wl1271_plt_stop(wl
);
1077 mutex_unlock(&wl
->mutex
);
1081 static void wl1271_op_tx(struct ieee80211_hw
*hw
, struct sk_buff
*skb
)
1083 struct wl1271
*wl
= hw
->priv
;
1084 unsigned long flags
;
1088 q
= wl1271_tx_get_queue(skb_get_queue_mapping(skb
));
1090 if (wl
->bss_type
== BSS_TYPE_AP_BSS
)
1091 hlid
= wl1271_tx_get_hlid(skb
);
1093 spin_lock_irqsave(&wl
->wl_lock
, flags
);
1095 wl
->tx_queue_count
++;
1098 * The workqueue is slow to process the tx_queue and we need stop
1099 * the queue here, otherwise the queue will get too long.
1101 if (wl
->tx_queue_count
>= WL1271_TX_QUEUE_HIGH_WATERMARK
) {
1102 wl1271_debug(DEBUG_TX
, "op_tx: stopping queues");
1103 ieee80211_stop_queues(wl
->hw
);
1104 set_bit(WL1271_FLAG_TX_QUEUE_STOPPED
, &wl
->flags
);
1107 /* queue the packet */
1108 if (wl
->bss_type
== BSS_TYPE_AP_BSS
) {
1109 wl1271_debug(DEBUG_TX
, "queue skb hlid %d q %d", hlid
, q
);
1110 skb_queue_tail(&wl
->links
[hlid
].tx_queue
[q
], skb
);
1112 skb_queue_tail(&wl
->tx_queue
[q
], skb
);
1116 * The chip specific setup must run before the first TX packet -
1117 * before that, the tx_work will not be initialized!
1120 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
) &&
1121 !test_bit(WL1271_FLAG_TX_PENDING
, &wl
->flags
))
1122 ieee80211_queue_work(wl
->hw
, &wl
->tx_work
);
1124 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
1127 static struct notifier_block wl1271_dev_notifier
= {
1128 .notifier_call
= wl1271_dev_notify
,
1131 static int wl1271_op_start(struct ieee80211_hw
*hw
)
1133 wl1271_debug(DEBUG_MAC80211
, "mac80211 start");
1136 * We have to delay the booting of the hardware because
1137 * we need to know the local MAC address before downloading and
1138 * initializing the firmware. The MAC address cannot be changed
1139 * after boot, and without the proper MAC address, the firmware
1140 * will not function properly.
1142 * The MAC address is first known when the corresponding interface
1143 * is added. That is where we will initialize the hardware.
1145 * In addition, we currently have different firmwares for AP and managed
1146 * operation. We will know which to boot according to interface type.
1152 static void wl1271_op_stop(struct ieee80211_hw
*hw
)
1154 wl1271_debug(DEBUG_MAC80211
, "mac80211 stop");
1157 static int wl1271_op_add_interface(struct ieee80211_hw
*hw
,
1158 struct ieee80211_vif
*vif
)
1160 struct wl1271
*wl
= hw
->priv
;
1161 struct wiphy
*wiphy
= hw
->wiphy
;
1162 int retries
= WL1271_BOOT_RETRIES
;
1164 bool booted
= false;
1166 wl1271_debug(DEBUG_MAC80211
, "mac80211 add interface type %d mac %pM",
1167 vif
->type
, vif
->addr
);
1169 mutex_lock(&wl
->mutex
);
1171 wl1271_debug(DEBUG_MAC80211
,
1172 "multiple vifs are not supported yet");
1177 switch (vif
->type
) {
1178 case NL80211_IFTYPE_STATION
:
1179 wl
->bss_type
= BSS_TYPE_STA_BSS
;
1180 wl
->set_bss_type
= BSS_TYPE_STA_BSS
;
1182 case NL80211_IFTYPE_ADHOC
:
1183 wl
->bss_type
= BSS_TYPE_IBSS
;
1184 wl
->set_bss_type
= BSS_TYPE_STA_BSS
;
1186 case NL80211_IFTYPE_AP
:
1187 wl
->bss_type
= BSS_TYPE_AP_BSS
;
1194 memcpy(wl
->mac_addr
, vif
->addr
, ETH_ALEN
);
1196 if (wl
->state
!= WL1271_STATE_OFF
) {
1197 wl1271_error("cannot start because not in off state: %d",
1205 ret
= wl1271_chip_wakeup(wl
);
1209 ret
= wl1271_boot(wl
);
1213 ret
= wl1271_hw_init(wl
);
1221 mutex_unlock(&wl
->mutex
);
1222 /* Unlocking the mutex in the middle of handling is
1223 inherently unsafe. In this case we deem it safe to do,
1224 because we need to let any possibly pending IRQ out of
1225 the system (and while we are WL1271_STATE_OFF the IRQ
1226 work function will not do anything.) Also, any other
1227 possible concurrent operations will fail due to the
1228 current state, hence the wl1271 struct should be safe. */
1229 wl1271_disable_interrupts(wl
);
1230 wl1271_flush_deferred_work(wl
);
1231 cancel_work_sync(&wl
->netstack_work
);
1232 mutex_lock(&wl
->mutex
);
1234 wl1271_power_off(wl
);
1238 wl1271_error("firmware boot failed despite %d retries",
1239 WL1271_BOOT_RETRIES
);
1244 wl
->state
= WL1271_STATE_ON
;
1245 wl1271_info("firmware booted (%s)", wl
->chip
.fw_ver_str
);
1247 /* update hw/fw version info in wiphy struct */
1248 wiphy
->hw_version
= wl
->chip
.id
;
1249 strncpy(wiphy
->fw_version
, wl
->chip
.fw_ver_str
,
1250 sizeof(wiphy
->fw_version
));
1253 * Now we know if 11a is supported (info from the NVS), so disable
1254 * 11a channels if not supported
1256 if (!wl
->enable_11a
)
1257 wiphy
->bands
[IEEE80211_BAND_5GHZ
]->n_channels
= 0;
1259 wl1271_debug(DEBUG_MAC80211
, "11a is %ssupported",
1260 wl
->enable_11a
? "" : "not ");
1263 mutex_unlock(&wl
->mutex
);
1266 list_add(&wl
->list
, &wl_list
);
1271 static void __wl1271_op_remove_interface(struct wl1271
*wl
)
1275 wl1271_debug(DEBUG_MAC80211
, "mac80211 remove interface");
1277 wl1271_info("down");
1279 list_del(&wl
->list
);
1281 WARN_ON(wl
->state
!= WL1271_STATE_ON
);
1283 /* enable dyn ps just in case (if left on due to fw crash etc) */
1284 if (wl
->bss_type
== BSS_TYPE_STA_BSS
)
1285 ieee80211_enable_dyn_ps(wl
->vif
);
1287 if (wl
->scan
.state
!= WL1271_SCAN_STATE_IDLE
) {
1288 wl
->scan
.state
= WL1271_SCAN_STATE_IDLE
;
1289 kfree(wl
->scan
.scanned_ch
);
1290 wl
->scan
.scanned_ch
= NULL
;
1291 wl
->scan
.req
= NULL
;
1292 ieee80211_scan_completed(wl
->hw
, true);
1295 wl
->state
= WL1271_STATE_OFF
;
1297 mutex_unlock(&wl
->mutex
);
1299 wl1271_disable_interrupts(wl
);
1300 wl1271_flush_deferred_work(wl
);
1301 cancel_delayed_work_sync(&wl
->scan_complete_work
);
1302 cancel_work_sync(&wl
->netstack_work
);
1303 cancel_work_sync(&wl
->tx_work
);
1304 cancel_delayed_work_sync(&wl
->pspoll_work
);
1305 cancel_delayed_work_sync(&wl
->elp_work
);
1307 mutex_lock(&wl
->mutex
);
1309 /* let's notify MAC80211 about the remaining pending TX frames */
1310 wl1271_tx_reset(wl
);
1311 wl1271_power_off(wl
);
1313 memset(wl
->bssid
, 0, ETH_ALEN
);
1314 memset(wl
->ssid
, 0, IW_ESSID_MAX_SIZE
+ 1);
1316 wl
->bss_type
= MAX_BSS_TYPE
;
1317 wl
->set_bss_type
= MAX_BSS_TYPE
;
1318 wl
->band
= IEEE80211_BAND_2GHZ
;
1321 wl
->psm_entry_retry
= 0;
1322 wl
->power_level
= WL1271_DEFAULT_POWER_LEVEL
;
1323 wl
->tx_blocks_available
= 0;
1324 wl
->tx_results_count
= 0;
1325 wl
->tx_packets_count
= 0;
1326 wl
->tx_security_last_seq
= 0;
1327 wl
->tx_security_seq
= 0;
1328 wl
->time_offset
= 0;
1329 wl
->session_counter
= 0;
1330 wl
->rate_set
= CONF_TX_RATE_MASK_BASIC
;
1334 wl1271_free_ap_keys(wl
);
1335 memset(wl
->ap_hlid_map
, 0, sizeof(wl
->ap_hlid_map
));
1336 wl
->ap_fw_ps_map
= 0;
1339 for (i
= 0; i
< NUM_TX_QUEUES
; i
++)
1340 wl
->tx_blocks_freed
[i
] = 0;
1342 wl1271_debugfs_reset(wl
);
1344 kfree(wl
->fw_status
);
1345 wl
->fw_status
= NULL
;
1346 kfree(wl
->tx_res_if
);
1347 wl
->tx_res_if
= NULL
;
1348 kfree(wl
->target_mem_map
);
1349 wl
->target_mem_map
= NULL
;
1352 static void wl1271_op_remove_interface(struct ieee80211_hw
*hw
,
1353 struct ieee80211_vif
*vif
)
1355 struct wl1271
*wl
= hw
->priv
;
1357 mutex_lock(&wl
->mutex
);
1359 * wl->vif can be null here if someone shuts down the interface
1360 * just when hardware recovery has been started.
1363 WARN_ON(wl
->vif
!= vif
);
1364 __wl1271_op_remove_interface(wl
);
1367 mutex_unlock(&wl
->mutex
);
1368 cancel_work_sync(&wl
->recovery_work
);
1371 static void wl1271_configure_filters(struct wl1271
*wl
, unsigned int filters
)
1373 wl1271_set_default_filters(wl
);
1375 /* combine requested filters with current filter config */
1376 filters
= wl
->filters
| filters
;
1378 wl1271_debug(DEBUG_FILTERS
, "RX filters set: ");
1380 if (filters
& FIF_PROMISC_IN_BSS
) {
1381 wl1271_debug(DEBUG_FILTERS
, " - FIF_PROMISC_IN_BSS");
1382 wl
->rx_config
&= ~CFG_UNI_FILTER_EN
;
1383 wl
->rx_config
|= CFG_BSSID_FILTER_EN
;
1385 if (filters
& FIF_BCN_PRBRESP_PROMISC
) {
1386 wl1271_debug(DEBUG_FILTERS
, " - FIF_BCN_PRBRESP_PROMISC");
1387 wl
->rx_config
&= ~CFG_BSSID_FILTER_EN
;
1388 wl
->rx_config
&= ~CFG_SSID_FILTER_EN
;
1390 if (filters
& FIF_OTHER_BSS
) {
1391 wl1271_debug(DEBUG_FILTERS
, " - FIF_OTHER_BSS");
1392 wl
->rx_config
&= ~CFG_BSSID_FILTER_EN
;
1394 if (filters
& FIF_CONTROL
) {
1395 wl1271_debug(DEBUG_FILTERS
, " - FIF_CONTROL");
1396 wl
->rx_filter
|= CFG_RX_CTL_EN
;
1398 if (filters
& FIF_FCSFAIL
) {
1399 wl1271_debug(DEBUG_FILTERS
, " - FIF_FCSFAIL");
1400 wl
->rx_filter
|= CFG_RX_FCS_ERROR
;
1404 static int wl1271_dummy_join(struct wl1271
*wl
)
1407 /* we need to use a dummy BSSID for now */
1408 static const u8 dummy_bssid
[ETH_ALEN
] = { 0x0b, 0xad, 0xde,
1411 memcpy(wl
->bssid
, dummy_bssid
, ETH_ALEN
);
1413 /* pass through frames from all BSS */
1414 wl1271_configure_filters(wl
, FIF_OTHER_BSS
);
1416 ret
= wl1271_cmd_join(wl
, wl
->set_bss_type
);
1420 set_bit(WL1271_FLAG_JOINED
, &wl
->flags
);
1426 static int wl1271_join(struct wl1271
*wl
, bool set_assoc
)
1431 * One of the side effects of the JOIN command is that is clears
1432 * WPA/WPA2 keys from the chipset. Performing a JOIN while associated
1433 * to a WPA/WPA2 access point will therefore kill the data-path.
1434 * Currently there is no supported scenario for JOIN during
1435 * association - if it becomes a supported scenario, the WPA/WPA2 keys
1436 * must be handled somehow.
1439 if (test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
1440 wl1271_info("JOIN while associated.");
1443 set_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
);
1445 ret
= wl1271_cmd_join(wl
, wl
->set_bss_type
);
1449 set_bit(WL1271_FLAG_JOINED
, &wl
->flags
);
1451 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
1455 * The join command disable the keep-alive mode, shut down its process,
1456 * and also clear the template config, so we need to reset it all after
1457 * the join. The acx_aid starts the keep-alive process, and the order
1458 * of the commands below is relevant.
1460 ret
= wl1271_acx_keep_alive_mode(wl
, true);
1464 ret
= wl1271_acx_aid(wl
, wl
->aid
);
1468 ret
= wl1271_cmd_build_klv_null_data(wl
);
1472 ret
= wl1271_acx_keep_alive_config(wl
, CMD_TEMPL_KLV_IDX_NULL_DATA
,
1473 ACX_KEEP_ALIVE_TPL_VALID
);
1481 static int wl1271_unjoin(struct wl1271
*wl
)
1485 /* to stop listening to a channel, we disconnect */
1486 ret
= wl1271_cmd_disconnect(wl
);
1490 clear_bit(WL1271_FLAG_JOINED
, &wl
->flags
);
1491 memset(wl
->bssid
, 0, ETH_ALEN
);
1493 /* stop filterting packets based on bssid */
1494 wl1271_configure_filters(wl
, FIF_OTHER_BSS
);
1500 static void wl1271_set_band_rate(struct wl1271
*wl
)
1502 if (wl
->band
== IEEE80211_BAND_2GHZ
)
1503 wl
->basic_rate_set
= wl
->conf
.tx
.basic_rate
;
1505 wl
->basic_rate_set
= wl
->conf
.tx
.basic_rate_5
;
1508 static int wl1271_sta_handle_idle(struct wl1271
*wl
, bool idle
)
1513 if (test_bit(WL1271_FLAG_JOINED
, &wl
->flags
)) {
1514 ret
= wl1271_unjoin(wl
);
1518 wl
->rate_set
= wl1271_tx_min_rate_get(wl
);
1519 ret
= wl1271_acx_sta_rate_policies(wl
);
1522 ret
= wl1271_acx_keep_alive_config(
1523 wl
, CMD_TEMPL_KLV_IDX_NULL_DATA
,
1524 ACX_KEEP_ALIVE_TPL_INVALID
);
1527 set_bit(WL1271_FLAG_IDLE
, &wl
->flags
);
1529 /* increment the session counter */
1530 wl
->session_counter
++;
1531 if (wl
->session_counter
>= SESSION_COUNTER_MAX
)
1532 wl
->session_counter
= 0;
1533 ret
= wl1271_dummy_join(wl
);
1536 clear_bit(WL1271_FLAG_IDLE
, &wl
->flags
);
1543 static int wl1271_op_config(struct ieee80211_hw
*hw
, u32 changed
)
1545 struct wl1271
*wl
= hw
->priv
;
1546 struct ieee80211_conf
*conf
= &hw
->conf
;
1547 int channel
, ret
= 0;
1550 channel
= ieee80211_frequency_to_channel(conf
->channel
->center_freq
);
1552 wl1271_debug(DEBUG_MAC80211
, "mac80211 config ch %d psm %s power %d %s"
1555 conf
->flags
& IEEE80211_CONF_PS
? "on" : "off",
1557 conf
->flags
& IEEE80211_CONF_IDLE
? "idle" : "in use",
1561 * mac80211 will go to idle nearly immediately after transmitting some
1562 * frames, such as the deauth. To make sure those frames reach the air,
1563 * wait here until the TX queue is fully flushed.
1565 if ((changed
& IEEE80211_CONF_CHANGE_IDLE
) &&
1566 (conf
->flags
& IEEE80211_CONF_IDLE
))
1567 wl1271_tx_flush(wl
);
1569 mutex_lock(&wl
->mutex
);
1571 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
1576 is_ap
= (wl
->bss_type
== BSS_TYPE_AP_BSS
);
1578 ret
= wl1271_ps_elp_wakeup(wl
);
1582 /* if the channel changes while joined, join again */
1583 if (changed
& IEEE80211_CONF_CHANGE_CHANNEL
&&
1584 ((wl
->band
!= conf
->channel
->band
) ||
1585 (wl
->channel
!= channel
))) {
1586 wl
->band
= conf
->channel
->band
;
1587 wl
->channel
= channel
;
1591 * FIXME: the mac80211 should really provide a fixed
1592 * rate to use here. for now, just use the smallest
1593 * possible rate for the band as a fixed rate for
1594 * association frames and other control messages.
1596 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
1597 wl1271_set_band_rate(wl
);
1599 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
1600 ret
= wl1271_acx_sta_rate_policies(wl
);
1602 wl1271_warning("rate policy for channel "
1605 if (test_bit(WL1271_FLAG_JOINED
, &wl
->flags
)) {
1606 ret
= wl1271_join(wl
, false);
1608 wl1271_warning("cmd join on channel "
1614 if (changed
& IEEE80211_CONF_CHANGE_IDLE
&& !is_ap
) {
1615 ret
= wl1271_sta_handle_idle(wl
,
1616 conf
->flags
& IEEE80211_CONF_IDLE
);
1618 wl1271_warning("idle mode change failed %d", ret
);
1622 * if mac80211 changes the PSM mode, make sure the mode is not
1623 * incorrectly changed after the pspoll failure active window.
1625 if (changed
& IEEE80211_CONF_CHANGE_PS
)
1626 clear_bit(WL1271_FLAG_PSPOLL_FAILURE
, &wl
->flags
);
1628 if (conf
->flags
& IEEE80211_CONF_PS
&&
1629 !test_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
)) {
1630 set_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
);
1633 * We enter PSM only if we're already associated.
1634 * If we're not, we'll enter it when joining an SSID,
1635 * through the bss_info_changed() hook.
1637 if (test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
)) {
1638 wl1271_debug(DEBUG_PSM
, "psm enabled");
1639 ret
= wl1271_ps_set_mode(wl
, STATION_POWER_SAVE_MODE
,
1640 wl
->basic_rate
, true);
1642 } else if (!(conf
->flags
& IEEE80211_CONF_PS
) &&
1643 test_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
)) {
1644 wl1271_debug(DEBUG_PSM
, "psm disabled");
1646 clear_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
);
1648 if (test_bit(WL1271_FLAG_PSM
, &wl
->flags
))
1649 ret
= wl1271_ps_set_mode(wl
, STATION_ACTIVE_MODE
,
1650 wl
->basic_rate
, true);
1653 if (conf
->power_level
!= wl
->power_level
) {
1654 ret
= wl1271_acx_tx_power(wl
, conf
->power_level
);
1658 wl
->power_level
= conf
->power_level
;
1662 wl1271_ps_elp_sleep(wl
);
1665 mutex_unlock(&wl
->mutex
);
1670 struct wl1271_filter_params
{
1673 u8 mc_list
[ACX_MC_ADDRESS_GROUP_MAX
][ETH_ALEN
];
1676 static u64
wl1271_op_prepare_multicast(struct ieee80211_hw
*hw
,
1677 struct netdev_hw_addr_list
*mc_list
)
1679 struct wl1271_filter_params
*fp
;
1680 struct netdev_hw_addr
*ha
;
1681 struct wl1271
*wl
= hw
->priv
;
1683 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
1686 fp
= kzalloc(sizeof(*fp
), GFP_ATOMIC
);
1688 wl1271_error("Out of memory setting filters.");
1692 /* update multicast filtering parameters */
1693 fp
->mc_list_length
= 0;
1694 if (netdev_hw_addr_list_count(mc_list
) > ACX_MC_ADDRESS_GROUP_MAX
) {
1695 fp
->enabled
= false;
1698 netdev_hw_addr_list_for_each(ha
, mc_list
) {
1699 memcpy(fp
->mc_list
[fp
->mc_list_length
],
1700 ha
->addr
, ETH_ALEN
);
1701 fp
->mc_list_length
++;
1705 return (u64
)(unsigned long)fp
;
1708 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
1711 FIF_BCN_PRBRESP_PROMISC | \
1715 static void wl1271_op_configure_filter(struct ieee80211_hw
*hw
,
1716 unsigned int changed
,
1717 unsigned int *total
, u64 multicast
)
1719 struct wl1271_filter_params
*fp
= (void *)(unsigned long)multicast
;
1720 struct wl1271
*wl
= hw
->priv
;
1723 wl1271_debug(DEBUG_MAC80211
, "mac80211 configure filter changed %x"
1724 " total %x", changed
, *total
);
1726 mutex_lock(&wl
->mutex
);
1728 *total
&= WL1271_SUPPORTED_FILTERS
;
1729 changed
&= WL1271_SUPPORTED_FILTERS
;
1731 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
1734 ret
= wl1271_ps_elp_wakeup(wl
);
1738 if (wl
->bss_type
!= BSS_TYPE_AP_BSS
) {
1739 if (*total
& FIF_ALLMULTI
)
1740 ret
= wl1271_acx_group_address_tbl(wl
, false, NULL
, 0);
1742 ret
= wl1271_acx_group_address_tbl(wl
, fp
->enabled
,
1744 fp
->mc_list_length
);
1749 /* determine, whether supported filter values have changed */
1753 /* configure filters */
1754 wl
->filters
= *total
;
1755 wl1271_configure_filters(wl
, 0);
1757 /* apply configured filters */
1758 ret
= wl1271_acx_rx_config(wl
, wl
->rx_config
, wl
->rx_filter
);
1763 wl1271_ps_elp_sleep(wl
);
1766 mutex_unlock(&wl
->mutex
);
1770 static int wl1271_record_ap_key(struct wl1271
*wl
, u8 id
, u8 key_type
,
1771 u8 key_size
, const u8
*key
, u8 hlid
, u32 tx_seq_32
,
1774 struct wl1271_ap_key
*ap_key
;
1777 wl1271_debug(DEBUG_CRYPT
, "record ap key id %d", (int)id
);
1779 if (key_size
> MAX_KEY_SIZE
)
1783 * Find next free entry in ap_keys. Also check we are not replacing
1786 for (i
= 0; i
< MAX_NUM_KEYS
; i
++) {
1787 if (wl
->recorded_ap_keys
[i
] == NULL
)
1790 if (wl
->recorded_ap_keys
[i
]->id
== id
) {
1791 wl1271_warning("trying to record key replacement");
1796 if (i
== MAX_NUM_KEYS
)
1799 ap_key
= kzalloc(sizeof(*ap_key
), GFP_KERNEL
);
1804 ap_key
->key_type
= key_type
;
1805 ap_key
->key_size
= key_size
;
1806 memcpy(ap_key
->key
, key
, key_size
);
1807 ap_key
->hlid
= hlid
;
1808 ap_key
->tx_seq_32
= tx_seq_32
;
1809 ap_key
->tx_seq_16
= tx_seq_16
;
1811 wl
->recorded_ap_keys
[i
] = ap_key
;
1815 static void wl1271_free_ap_keys(struct wl1271
*wl
)
1819 for (i
= 0; i
< MAX_NUM_KEYS
; i
++) {
1820 kfree(wl
->recorded_ap_keys
[i
]);
1821 wl
->recorded_ap_keys
[i
] = NULL
;
1825 static int wl1271_ap_init_hwenc(struct wl1271
*wl
)
1828 struct wl1271_ap_key
*key
;
1829 bool wep_key_added
= false;
1831 for (i
= 0; i
< MAX_NUM_KEYS
; i
++) {
1832 if (wl
->recorded_ap_keys
[i
] == NULL
)
1835 key
= wl
->recorded_ap_keys
[i
];
1836 ret
= wl1271_cmd_set_ap_key(wl
, KEY_ADD_OR_REPLACE
,
1837 key
->id
, key
->key_type
,
1838 key
->key_size
, key
->key
,
1839 key
->hlid
, key
->tx_seq_32
,
1844 if (key
->key_type
== KEY_WEP
)
1845 wep_key_added
= true;
1848 if (wep_key_added
) {
1849 ret
= wl1271_cmd_set_ap_default_wep_key(wl
, wl
->default_key
);
1855 wl1271_free_ap_keys(wl
);
1859 static int wl1271_set_key(struct wl1271
*wl
, u16 action
, u8 id
, u8 key_type
,
1860 u8 key_size
, const u8
*key
, u32 tx_seq_32
,
1861 u16 tx_seq_16
, struct ieee80211_sta
*sta
)
1864 bool is_ap
= (wl
->bss_type
== BSS_TYPE_AP_BSS
);
1867 struct wl1271_station
*wl_sta
;
1871 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
1872 hlid
= wl_sta
->hlid
;
1874 hlid
= WL1271_AP_BROADCAST_HLID
;
1877 if (!test_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
)) {
1879 * We do not support removing keys after AP shutdown.
1880 * Pretend we do to make mac80211 happy.
1882 if (action
!= KEY_ADD_OR_REPLACE
)
1885 ret
= wl1271_record_ap_key(wl
, id
,
1887 key
, hlid
, tx_seq_32
,
1890 ret
= wl1271_cmd_set_ap_key(wl
, action
,
1891 id
, key_type
, key_size
,
1892 key
, hlid
, tx_seq_32
,
1900 static const u8 bcast_addr
[ETH_ALEN
] = {
1901 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
1904 addr
= sta
? sta
->addr
: bcast_addr
;
1906 if (is_zero_ether_addr(addr
)) {
1907 /* We dont support TX only encryption */
1911 /* The wl1271 does not allow to remove unicast keys - they
1912 will be cleared automatically on next CMD_JOIN. Ignore the
1913 request silently, as we dont want the mac80211 to emit
1914 an error message. */
1915 if (action
== KEY_REMOVE
&& !is_broadcast_ether_addr(addr
))
1918 ret
= wl1271_cmd_set_sta_key(wl
, action
,
1919 id
, key_type
, key_size
,
1920 key
, addr
, tx_seq_32
,
1925 /* the default WEP key needs to be configured at least once */
1926 if (key_type
== KEY_WEP
) {
1927 ret
= wl1271_cmd_set_sta_default_wep_key(wl
,
1937 static int wl1271_op_set_key(struct ieee80211_hw
*hw
, enum set_key_cmd cmd
,
1938 struct ieee80211_vif
*vif
,
1939 struct ieee80211_sta
*sta
,
1940 struct ieee80211_key_conf
*key_conf
)
1942 struct wl1271
*wl
= hw
->priv
;
1948 wl1271_debug(DEBUG_MAC80211
, "mac80211 set key");
1950 wl1271_debug(DEBUG_CRYPT
, "CMD: 0x%x sta: %p", cmd
, sta
);
1951 wl1271_debug(DEBUG_CRYPT
, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
1952 key_conf
->cipher
, key_conf
->keyidx
,
1953 key_conf
->keylen
, key_conf
->flags
);
1954 wl1271_dump(DEBUG_CRYPT
, "KEY: ", key_conf
->key
, key_conf
->keylen
);
1956 mutex_lock(&wl
->mutex
);
1958 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
1963 ret
= wl1271_ps_elp_wakeup(wl
);
1967 switch (key_conf
->cipher
) {
1968 case WLAN_CIPHER_SUITE_WEP40
:
1969 case WLAN_CIPHER_SUITE_WEP104
:
1972 key_conf
->hw_key_idx
= key_conf
->keyidx
;
1974 case WLAN_CIPHER_SUITE_TKIP
:
1975 key_type
= KEY_TKIP
;
1977 key_conf
->hw_key_idx
= key_conf
->keyidx
;
1978 tx_seq_32
= WL1271_TX_SECURITY_HI32(wl
->tx_security_seq
);
1979 tx_seq_16
= WL1271_TX_SECURITY_LO16(wl
->tx_security_seq
);
1981 case WLAN_CIPHER_SUITE_CCMP
:
1984 key_conf
->flags
|= IEEE80211_KEY_FLAG_GENERATE_IV
;
1985 tx_seq_32
= WL1271_TX_SECURITY_HI32(wl
->tx_security_seq
);
1986 tx_seq_16
= WL1271_TX_SECURITY_LO16(wl
->tx_security_seq
);
1988 case WL1271_CIPHER_SUITE_GEM
:
1990 tx_seq_32
= WL1271_TX_SECURITY_HI32(wl
->tx_security_seq
);
1991 tx_seq_16
= WL1271_TX_SECURITY_LO16(wl
->tx_security_seq
);
1994 wl1271_error("Unknown key algo 0x%x", key_conf
->cipher
);
2002 ret
= wl1271_set_key(wl
, KEY_ADD_OR_REPLACE
,
2003 key_conf
->keyidx
, key_type
,
2004 key_conf
->keylen
, key_conf
->key
,
2005 tx_seq_32
, tx_seq_16
, sta
);
2007 wl1271_error("Could not add or replace key");
2013 ret
= wl1271_set_key(wl
, KEY_REMOVE
,
2014 key_conf
->keyidx
, key_type
,
2015 key_conf
->keylen
, key_conf
->key
,
2018 wl1271_error("Could not remove key");
2024 wl1271_error("Unsupported key cmd 0x%x", cmd
);
2030 wl1271_ps_elp_sleep(wl
);
2033 mutex_unlock(&wl
->mutex
);
2038 static int wl1271_op_hw_scan(struct ieee80211_hw
*hw
,
2039 struct ieee80211_vif
*vif
,
2040 struct cfg80211_scan_request
*req
)
2042 struct wl1271
*wl
= hw
->priv
;
2047 wl1271_debug(DEBUG_MAC80211
, "mac80211 hw scan");
2050 ssid
= req
->ssids
[0].ssid
;
2051 len
= req
->ssids
[0].ssid_len
;
2054 mutex_lock(&wl
->mutex
);
2056 if (wl
->state
== WL1271_STATE_OFF
) {
2058 * We cannot return -EBUSY here because cfg80211 will expect
2059 * a call to ieee80211_scan_completed if we do - in this case
2060 * there won't be any call.
2066 ret
= wl1271_ps_elp_wakeup(wl
);
2070 ret
= wl1271_scan(hw
->priv
, ssid
, len
, req
);
2072 wl1271_ps_elp_sleep(wl
);
2075 mutex_unlock(&wl
->mutex
);
2080 static int wl1271_op_set_frag_threshold(struct ieee80211_hw
*hw
, u32 value
)
2082 struct wl1271
*wl
= hw
->priv
;
2085 mutex_lock(&wl
->mutex
);
2087 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
2092 ret
= wl1271_ps_elp_wakeup(wl
);
2096 ret
= wl1271_acx_frag_threshold(wl
, (u16
)value
);
2098 wl1271_warning("wl1271_op_set_frag_threshold failed: %d", ret
);
2100 wl1271_ps_elp_sleep(wl
);
2103 mutex_unlock(&wl
->mutex
);
2108 static int wl1271_op_set_rts_threshold(struct ieee80211_hw
*hw
, u32 value
)
2110 struct wl1271
*wl
= hw
->priv
;
2113 mutex_lock(&wl
->mutex
);
2115 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
2120 ret
= wl1271_ps_elp_wakeup(wl
);
2124 ret
= wl1271_acx_rts_threshold(wl
, (u16
) value
);
2126 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret
);
2128 wl1271_ps_elp_sleep(wl
);
2131 mutex_unlock(&wl
->mutex
);
2136 static int wl1271_ssid_set(struct wl1271
*wl
, struct sk_buff
*skb
,
2139 u8
*ptr
= skb
->data
+ offset
;
2141 /* find the location of the ssid in the beacon */
2142 while (ptr
< skb
->data
+ skb
->len
) {
2143 if (ptr
[0] == WLAN_EID_SSID
) {
2144 wl
->ssid_len
= ptr
[1];
2145 memcpy(wl
->ssid
, ptr
+2, wl
->ssid_len
);
2148 ptr
+= (ptr
[1] + 2);
2151 wl1271_error("No SSID in IEs!\n");
2155 static int wl1271_bss_erp_info_changed(struct wl1271
*wl
,
2156 struct ieee80211_bss_conf
*bss_conf
,
2161 if (changed
& BSS_CHANGED_ERP_SLOT
) {
2162 if (bss_conf
->use_short_slot
)
2163 ret
= wl1271_acx_slot(wl
, SLOT_TIME_SHORT
);
2165 ret
= wl1271_acx_slot(wl
, SLOT_TIME_LONG
);
2167 wl1271_warning("Set slot time failed %d", ret
);
2172 if (changed
& BSS_CHANGED_ERP_PREAMBLE
) {
2173 if (bss_conf
->use_short_preamble
)
2174 wl1271_acx_set_preamble(wl
, ACX_PREAMBLE_SHORT
);
2176 wl1271_acx_set_preamble(wl
, ACX_PREAMBLE_LONG
);
2179 if (changed
& BSS_CHANGED_ERP_CTS_PROT
) {
2180 if (bss_conf
->use_cts_prot
)
2181 ret
= wl1271_acx_cts_protect(wl
, CTSPROTECT_ENABLE
);
2183 ret
= wl1271_acx_cts_protect(wl
, CTSPROTECT_DISABLE
);
2185 wl1271_warning("Set ctsprotect failed %d", ret
);
2194 static int wl1271_bss_beacon_info_changed(struct wl1271
*wl
,
2195 struct ieee80211_vif
*vif
,
2196 struct ieee80211_bss_conf
*bss_conf
,
2199 bool is_ap
= (wl
->bss_type
== BSS_TYPE_AP_BSS
);
2202 if ((changed
& BSS_CHANGED_BEACON_INT
)) {
2203 wl1271_debug(DEBUG_MASTER
, "beacon interval updated: %d",
2204 bss_conf
->beacon_int
);
2206 wl
->beacon_int
= bss_conf
->beacon_int
;
2209 if ((changed
& BSS_CHANGED_BEACON
)) {
2210 struct ieee80211_hdr
*hdr
;
2211 int ieoffset
= offsetof(struct ieee80211_mgmt
,
2213 struct sk_buff
*beacon
= ieee80211_beacon_get(wl
->hw
, vif
);
2219 wl1271_debug(DEBUG_MASTER
, "beacon updated");
2221 ret
= wl1271_ssid_set(wl
, beacon
, ieoffset
);
2223 dev_kfree_skb(beacon
);
2226 tmpl_id
= is_ap
? CMD_TEMPL_AP_BEACON
:
2228 ret
= wl1271_cmd_template_set(wl
, tmpl_id
,
2231 wl1271_tx_min_rate_get(wl
));
2233 dev_kfree_skb(beacon
);
2237 hdr
= (struct ieee80211_hdr
*) beacon
->data
;
2238 hdr
->frame_control
= cpu_to_le16(IEEE80211_FTYPE_MGMT
|
2239 IEEE80211_STYPE_PROBE_RESP
);
2241 tmpl_id
= is_ap
? CMD_TEMPL_AP_PROBE_RESPONSE
:
2242 CMD_TEMPL_PROBE_RESPONSE
;
2243 ret
= wl1271_cmd_template_set(wl
,
2247 wl1271_tx_min_rate_get(wl
));
2248 dev_kfree_skb(beacon
);
2257 /* AP mode changes */
2258 static void wl1271_bss_info_changed_ap(struct wl1271
*wl
,
2259 struct ieee80211_vif
*vif
,
2260 struct ieee80211_bss_conf
*bss_conf
,
2265 if ((changed
& BSS_CHANGED_BASIC_RATES
)) {
2266 u32 rates
= bss_conf
->basic_rates
;
2267 struct conf_tx_rate_class mgmt_rc
;
2269 wl
->basic_rate_set
= wl1271_tx_enabled_rates_get(wl
, rates
);
2270 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
2271 wl1271_debug(DEBUG_AP
, "basic rates: 0x%x",
2272 wl
->basic_rate_set
);
2274 /* update the AP management rate policy with the new rates */
2275 mgmt_rc
.enabled_rates
= wl
->basic_rate_set
;
2276 mgmt_rc
.long_retry_limit
= 10;
2277 mgmt_rc
.short_retry_limit
= 10;
2279 ret
= wl1271_acx_ap_rate_policy(wl
, &mgmt_rc
,
2280 ACX_TX_AP_MODE_MGMT_RATE
);
2282 wl1271_error("AP mgmt policy change failed %d", ret
);
2287 ret
= wl1271_bss_beacon_info_changed(wl
, vif
, bss_conf
, changed
);
2291 if ((changed
& BSS_CHANGED_BEACON_ENABLED
)) {
2292 if (bss_conf
->enable_beacon
) {
2293 if (!test_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
)) {
2294 ret
= wl1271_cmd_start_bss(wl
);
2298 set_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
);
2299 wl1271_debug(DEBUG_AP
, "started AP");
2301 ret
= wl1271_ap_init_hwenc(wl
);
2306 if (test_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
)) {
2307 ret
= wl1271_cmd_stop_bss(wl
);
2311 clear_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
);
2312 wl1271_debug(DEBUG_AP
, "stopped AP");
2317 ret
= wl1271_bss_erp_info_changed(wl
, bss_conf
, changed
);
2324 /* STA/IBSS mode changes */
2325 static void wl1271_bss_info_changed_sta(struct wl1271
*wl
,
2326 struct ieee80211_vif
*vif
,
2327 struct ieee80211_bss_conf
*bss_conf
,
2330 bool do_join
= false, set_assoc
= false;
2331 bool is_ibss
= (wl
->bss_type
== BSS_TYPE_IBSS
);
2332 u32 sta_rate_set
= 0;
2334 struct ieee80211_sta
*sta
;
2335 bool sta_exists
= false;
2336 struct ieee80211_sta_ht_cap sta_ht_cap
;
2339 ret
= wl1271_bss_beacon_info_changed(wl
, vif
, bss_conf
,
2345 if ((changed
& BSS_CHANGED_BEACON_INT
) && is_ibss
)
2348 /* Need to update the SSID (for filtering etc) */
2349 if ((changed
& BSS_CHANGED_BEACON
) && is_ibss
)
2352 if ((changed
& BSS_CHANGED_BEACON_ENABLED
) && is_ibss
) {
2353 wl1271_debug(DEBUG_ADHOC
, "ad-hoc beaconing: %s",
2354 bss_conf
->enable_beacon
? "enabled" : "disabled");
2356 if (bss_conf
->enable_beacon
)
2357 wl
->set_bss_type
= BSS_TYPE_IBSS
;
2359 wl
->set_bss_type
= BSS_TYPE_STA_BSS
;
2363 if ((changed
& BSS_CHANGED_CQM
)) {
2364 bool enable
= false;
2365 if (bss_conf
->cqm_rssi_thold
)
2367 ret
= wl1271_acx_rssi_snr_trigger(wl
, enable
,
2368 bss_conf
->cqm_rssi_thold
,
2369 bss_conf
->cqm_rssi_hyst
);
2372 wl
->rssi_thold
= bss_conf
->cqm_rssi_thold
;
2375 if ((changed
& BSS_CHANGED_BSSID
) &&
2377 * Now we know the correct bssid, so we send a new join command
2378 * and enable the BSSID filter
2380 memcmp(wl
->bssid
, bss_conf
->bssid
, ETH_ALEN
)) {
2381 memcpy(wl
->bssid
, bss_conf
->bssid
, ETH_ALEN
);
2383 if (!is_zero_ether_addr(wl
->bssid
)) {
2384 ret
= wl1271_cmd_build_null_data(wl
);
2388 ret
= wl1271_build_qos_null_data(wl
);
2392 /* filter out all packets not from this BSSID */
2393 wl1271_configure_filters(wl
, 0);
2395 /* Need to update the BSSID (for filtering etc) */
2401 sta
= ieee80211_find_sta(vif
, bss_conf
->bssid
);
2403 /* save the supp_rates of the ap */
2404 sta_rate_set
= sta
->supp_rates
[wl
->hw
->conf
.channel
->band
];
2405 if (sta
->ht_cap
.ht_supported
)
2407 (sta
->ht_cap
.mcs
.rx_mask
[0] << HW_HT_RATES_OFFSET
);
2408 sta_ht_cap
= sta
->ht_cap
;
2414 /* handle new association with HT and HT information change */
2415 if ((changed
& BSS_CHANGED_HT
) &&
2416 (bss_conf
->channel_type
!= NL80211_CHAN_NO_HT
)) {
2417 ret
= wl1271_acx_set_ht_capabilities(wl
, &sta_ht_cap
,
2420 wl1271_warning("Set ht cap true failed %d",
2424 ret
= wl1271_acx_set_ht_information(wl
,
2425 bss_conf
->ht_operation_mode
);
2427 wl1271_warning("Set ht information failed %d",
2432 /* handle new association without HT and disassociation */
2433 else if (changed
& BSS_CHANGED_ASSOC
) {
2434 ret
= wl1271_acx_set_ht_capabilities(wl
, &sta_ht_cap
,
2437 wl1271_warning("Set ht cap false failed %d",
2444 if ((changed
& BSS_CHANGED_ASSOC
)) {
2445 if (bss_conf
->assoc
) {
2448 wl
->aid
= bss_conf
->aid
;
2451 wl
->ps_poll_failures
= 0;
2454 * use basic rates from AP, and determine lowest rate
2455 * to use with control frames.
2457 rates
= bss_conf
->basic_rates
;
2458 wl
->basic_rate_set
= wl1271_tx_enabled_rates_get(wl
,
2460 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
2462 wl
->rate_set
= wl1271_tx_enabled_rates_get(wl
,
2464 ret
= wl1271_acx_sta_rate_policies(wl
);
2469 * with wl1271, we don't need to update the
2470 * beacon_int and dtim_period, because the firmware
2471 * updates it by itself when the first beacon is
2472 * received after a join.
2474 ret
= wl1271_cmd_build_ps_poll(wl
, wl
->aid
);
2479 * Get a template for hardware connection maintenance
2481 dev_kfree_skb(wl
->probereq
);
2482 wl
->probereq
= wl1271_cmd_build_ap_probe_req(wl
, NULL
);
2483 ieoffset
= offsetof(struct ieee80211_mgmt
,
2484 u
.probe_req
.variable
);
2485 wl1271_ssid_set(wl
, wl
->probereq
, ieoffset
);
2487 /* enable the connection monitoring feature */
2488 ret
= wl1271_acx_conn_monit_params(wl
, true);
2492 /* If we want to go in PSM but we're not there yet */
2493 if (test_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
) &&
2494 !test_bit(WL1271_FLAG_PSM
, &wl
->flags
)) {
2495 enum wl1271_cmd_ps_mode mode
;
2497 mode
= STATION_POWER_SAVE_MODE
;
2498 ret
= wl1271_ps_set_mode(wl
, mode
,
2505 /* use defaults when not associated */
2506 clear_bit(WL1271_FLAG_STA_STATE_SENT
, &wl
->flags
);
2507 clear_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
);
2510 /* free probe-request template */
2511 dev_kfree_skb(wl
->probereq
);
2512 wl
->probereq
= NULL
;
2514 /* re-enable dynamic ps - just in case */
2515 ieee80211_enable_dyn_ps(wl
->vif
);
2517 /* revert back to minimum rates for the current band */
2518 wl1271_set_band_rate(wl
);
2519 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
2520 ret
= wl1271_acx_sta_rate_policies(wl
);
2524 /* disable connection monitor features */
2525 ret
= wl1271_acx_conn_monit_params(wl
, false);
2527 /* Disable the keep-alive feature */
2528 ret
= wl1271_acx_keep_alive_mode(wl
, false);
2532 /* restore the bssid filter and go to dummy bssid */
2534 wl1271_dummy_join(wl
);
2538 ret
= wl1271_bss_erp_info_changed(wl
, bss_conf
, changed
);
2542 if (changed
& BSS_CHANGED_ARP_FILTER
) {
2543 __be32 addr
= bss_conf
->arp_addr_list
[0];
2544 WARN_ON(wl
->bss_type
!= BSS_TYPE_STA_BSS
);
2546 if (bss_conf
->arp_addr_cnt
== 1 &&
2547 bss_conf
->arp_filter_enabled
) {
2549 * The template should have been configured only upon
2550 * association. however, it seems that the correct ip
2551 * isn't being set (when sending), so we have to
2552 * reconfigure the template upon every ip change.
2554 ret
= wl1271_cmd_build_arp_rsp(wl
, addr
);
2556 wl1271_warning("build arp rsp failed: %d", ret
);
2560 ret
= wl1271_acx_arp_ip_filter(wl
,
2561 ACX_ARP_FILTER_ARP_FILTERING
,
2564 ret
= wl1271_acx_arp_ip_filter(wl
, 0, addr
);
2571 ret
= wl1271_join(wl
, set_assoc
);
2573 wl1271_warning("cmd join failed %d", ret
);
2582 static void wl1271_op_bss_info_changed(struct ieee80211_hw
*hw
,
2583 struct ieee80211_vif
*vif
,
2584 struct ieee80211_bss_conf
*bss_conf
,
2587 struct wl1271
*wl
= hw
->priv
;
2588 bool is_ap
= (wl
->bss_type
== BSS_TYPE_AP_BSS
);
2591 wl1271_debug(DEBUG_MAC80211
, "mac80211 bss info changed 0x%x",
2594 mutex_lock(&wl
->mutex
);
2596 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
2599 ret
= wl1271_ps_elp_wakeup(wl
);
2604 wl1271_bss_info_changed_ap(wl
, vif
, bss_conf
, changed
);
2606 wl1271_bss_info_changed_sta(wl
, vif
, bss_conf
, changed
);
2608 wl1271_ps_elp_sleep(wl
);
2611 mutex_unlock(&wl
->mutex
);
2614 static int wl1271_op_conf_tx(struct ieee80211_hw
*hw
, u16 queue
,
2615 const struct ieee80211_tx_queue_params
*params
)
2617 struct wl1271
*wl
= hw
->priv
;
2621 mutex_lock(&wl
->mutex
);
2623 wl1271_debug(DEBUG_MAC80211
, "mac80211 conf tx %d", queue
);
2626 ps_scheme
= CONF_PS_SCHEME_UPSD_TRIGGER
;
2628 ps_scheme
= CONF_PS_SCHEME_LEGACY
;
2630 if (wl
->state
== WL1271_STATE_OFF
) {
2632 * If the state is off, the parameters will be recorded and
2633 * configured on init. This happens in AP-mode.
2635 struct conf_tx_ac_category
*conf_ac
=
2636 &wl
->conf
.tx
.ac_conf
[wl1271_tx_get_queue(queue
)];
2637 struct conf_tx_tid
*conf_tid
=
2638 &wl
->conf
.tx
.tid_conf
[wl1271_tx_get_queue(queue
)];
2640 conf_ac
->ac
= wl1271_tx_get_queue(queue
);
2641 conf_ac
->cw_min
= (u8
)params
->cw_min
;
2642 conf_ac
->cw_max
= params
->cw_max
;
2643 conf_ac
->aifsn
= params
->aifs
;
2644 conf_ac
->tx_op_limit
= params
->txop
<< 5;
2646 conf_tid
->queue_id
= wl1271_tx_get_queue(queue
);
2647 conf_tid
->channel_type
= CONF_CHANNEL_TYPE_EDCF
;
2648 conf_tid
->tsid
= wl1271_tx_get_queue(queue
);
2649 conf_tid
->ps_scheme
= ps_scheme
;
2650 conf_tid
->ack_policy
= CONF_ACK_POLICY_LEGACY
;
2651 conf_tid
->apsd_conf
[0] = 0;
2652 conf_tid
->apsd_conf
[1] = 0;
2654 ret
= wl1271_ps_elp_wakeup(wl
);
2659 * the txop is confed in units of 32us by the mac80211,
2662 ret
= wl1271_acx_ac_cfg(wl
, wl1271_tx_get_queue(queue
),
2663 params
->cw_min
, params
->cw_max
,
2664 params
->aifs
, params
->txop
<< 5);
2668 ret
= wl1271_acx_tid_cfg(wl
, wl1271_tx_get_queue(queue
),
2669 CONF_CHANNEL_TYPE_EDCF
,
2670 wl1271_tx_get_queue(queue
),
2671 ps_scheme
, CONF_ACK_POLICY_LEGACY
,
2677 wl1271_ps_elp_sleep(wl
);
2681 mutex_unlock(&wl
->mutex
);
2686 static u64
wl1271_op_get_tsf(struct ieee80211_hw
*hw
)
2689 struct wl1271
*wl
= hw
->priv
;
2690 u64 mactime
= ULLONG_MAX
;
2693 wl1271_debug(DEBUG_MAC80211
, "mac80211 get tsf");
2695 mutex_lock(&wl
->mutex
);
2697 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
2700 ret
= wl1271_ps_elp_wakeup(wl
);
2704 ret
= wl1271_acx_tsf_info(wl
, &mactime
);
2709 wl1271_ps_elp_sleep(wl
);
2712 mutex_unlock(&wl
->mutex
);
2716 static int wl1271_op_get_survey(struct ieee80211_hw
*hw
, int idx
,
2717 struct survey_info
*survey
)
2719 struct wl1271
*wl
= hw
->priv
;
2720 struct ieee80211_conf
*conf
= &hw
->conf
;
2725 survey
->channel
= conf
->channel
;
2726 survey
->filled
= SURVEY_INFO_NOISE_DBM
;
2727 survey
->noise
= wl
->noise
;
2732 static int wl1271_allocate_sta(struct wl1271
*wl
,
2733 struct ieee80211_sta
*sta
,
2736 struct wl1271_station
*wl_sta
;
2739 id
= find_first_zero_bit(wl
->ap_hlid_map
, AP_MAX_STATIONS
);
2740 if (id
>= AP_MAX_STATIONS
) {
2741 wl1271_warning("could not allocate HLID - too much stations");
2745 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
2746 __set_bit(id
, wl
->ap_hlid_map
);
2747 wl_sta
->hlid
= WL1271_AP_STA_HLID_START
+ id
;
2748 *hlid
= wl_sta
->hlid
;
2749 memcpy(wl
->links
[wl_sta
->hlid
].addr
, sta
->addr
, ETH_ALEN
);
2753 static void wl1271_free_sta(struct wl1271
*wl
, u8 hlid
)
2755 int id
= hlid
- WL1271_AP_STA_HLID_START
;
2757 if (WARN_ON(!test_bit(id
, wl
->ap_hlid_map
)))
2760 __clear_bit(id
, wl
->ap_hlid_map
);
2761 memset(wl
->links
[hlid
].addr
, 0, ETH_ALEN
);
2762 wl1271_tx_reset_link_queues(wl
, hlid
);
2763 __clear_bit(hlid
, &wl
->ap_ps_map
);
2764 __clear_bit(hlid
, (unsigned long *)&wl
->ap_fw_ps_map
);
2767 static int wl1271_op_sta_add(struct ieee80211_hw
*hw
,
2768 struct ieee80211_vif
*vif
,
2769 struct ieee80211_sta
*sta
)
2771 struct wl1271
*wl
= hw
->priv
;
2775 mutex_lock(&wl
->mutex
);
2777 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
2780 if (wl
->bss_type
!= BSS_TYPE_AP_BSS
)
2783 wl1271_debug(DEBUG_MAC80211
, "mac80211 add sta %d", (int)sta
->aid
);
2785 ret
= wl1271_allocate_sta(wl
, sta
, &hlid
);
2789 ret
= wl1271_ps_elp_wakeup(wl
);
2793 ret
= wl1271_cmd_add_sta(wl
, sta
, hlid
);
2798 wl1271_ps_elp_sleep(wl
);
2802 wl1271_free_sta(wl
, hlid
);
2805 mutex_unlock(&wl
->mutex
);
2809 static int wl1271_op_sta_remove(struct ieee80211_hw
*hw
,
2810 struct ieee80211_vif
*vif
,
2811 struct ieee80211_sta
*sta
)
2813 struct wl1271
*wl
= hw
->priv
;
2814 struct wl1271_station
*wl_sta
;
2817 mutex_lock(&wl
->mutex
);
2819 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
2822 if (wl
->bss_type
!= BSS_TYPE_AP_BSS
)
2825 wl1271_debug(DEBUG_MAC80211
, "mac80211 remove sta %d", (int)sta
->aid
);
2827 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
2828 id
= wl_sta
->hlid
- WL1271_AP_STA_HLID_START
;
2829 if (WARN_ON(!test_bit(id
, wl
->ap_hlid_map
)))
2832 ret
= wl1271_ps_elp_wakeup(wl
);
2836 ret
= wl1271_cmd_remove_sta(wl
, wl_sta
->hlid
);
2840 wl1271_free_sta(wl
, wl_sta
->hlid
);
2843 wl1271_ps_elp_sleep(wl
);
2846 mutex_unlock(&wl
->mutex
);
2850 int wl1271_op_ampdu_action(struct ieee80211_hw
*hw
, struct ieee80211_vif
*vif
,
2851 enum ieee80211_ampdu_mlme_action action
,
2852 struct ieee80211_sta
*sta
, u16 tid
, u16
*ssn
,
2855 struct wl1271
*wl
= hw
->priv
;
2858 mutex_lock(&wl
->mutex
);
2860 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
2865 ret
= wl1271_ps_elp_wakeup(wl
);
2870 case IEEE80211_AMPDU_RX_START
:
2871 if (wl
->ba_support
) {
2872 ret
= wl1271_acx_set_ba_receiver_session(wl
, tid
, *ssn
,
2875 wl
->ba_rx_bitmap
|= BIT(tid
);
2881 case IEEE80211_AMPDU_RX_STOP
:
2882 ret
= wl1271_acx_set_ba_receiver_session(wl
, tid
, 0, false);
2884 wl
->ba_rx_bitmap
&= ~BIT(tid
);
2888 * The BA initiator session management in FW independently.
2889 * Falling break here on purpose for all TX APDU commands.
2891 case IEEE80211_AMPDU_TX_START
:
2892 case IEEE80211_AMPDU_TX_STOP
:
2893 case IEEE80211_AMPDU_TX_OPERATIONAL
:
2898 wl1271_error("Incorrect ampdu action id=%x\n", action
);
2902 wl1271_ps_elp_sleep(wl
);
2905 mutex_unlock(&wl
->mutex
);
2910 /* can't be const, mac80211 writes to this */
2911 static struct ieee80211_rate wl1271_rates
[] = {
2913 .hw_value
= CONF_HW_BIT_RATE_1MBPS
,
2914 .hw_value_short
= CONF_HW_BIT_RATE_1MBPS
, },
2916 .hw_value
= CONF_HW_BIT_RATE_2MBPS
,
2917 .hw_value_short
= CONF_HW_BIT_RATE_2MBPS
,
2918 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
2920 .hw_value
= CONF_HW_BIT_RATE_5_5MBPS
,
2921 .hw_value_short
= CONF_HW_BIT_RATE_5_5MBPS
,
2922 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
2924 .hw_value
= CONF_HW_BIT_RATE_11MBPS
,
2925 .hw_value_short
= CONF_HW_BIT_RATE_11MBPS
,
2926 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
2928 .hw_value
= CONF_HW_BIT_RATE_6MBPS
,
2929 .hw_value_short
= CONF_HW_BIT_RATE_6MBPS
, },
2931 .hw_value
= CONF_HW_BIT_RATE_9MBPS
,
2932 .hw_value_short
= CONF_HW_BIT_RATE_9MBPS
, },
2934 .hw_value
= CONF_HW_BIT_RATE_12MBPS
,
2935 .hw_value_short
= CONF_HW_BIT_RATE_12MBPS
, },
2937 .hw_value
= CONF_HW_BIT_RATE_18MBPS
,
2938 .hw_value_short
= CONF_HW_BIT_RATE_18MBPS
, },
2940 .hw_value
= CONF_HW_BIT_RATE_24MBPS
,
2941 .hw_value_short
= CONF_HW_BIT_RATE_24MBPS
, },
2943 .hw_value
= CONF_HW_BIT_RATE_36MBPS
,
2944 .hw_value_short
= CONF_HW_BIT_RATE_36MBPS
, },
2946 .hw_value
= CONF_HW_BIT_RATE_48MBPS
,
2947 .hw_value_short
= CONF_HW_BIT_RATE_48MBPS
, },
2949 .hw_value
= CONF_HW_BIT_RATE_54MBPS
,
2950 .hw_value_short
= CONF_HW_BIT_RATE_54MBPS
, },
2953 /* can't be const, mac80211 writes to this */
2954 static struct ieee80211_channel wl1271_channels
[] = {
2955 { .hw_value
= 1, .center_freq
= 2412, .max_power
= 25 },
2956 { .hw_value
= 2, .center_freq
= 2417, .max_power
= 25 },
2957 { .hw_value
= 3, .center_freq
= 2422, .max_power
= 25 },
2958 { .hw_value
= 4, .center_freq
= 2427, .max_power
= 25 },
2959 { .hw_value
= 5, .center_freq
= 2432, .max_power
= 25 },
2960 { .hw_value
= 6, .center_freq
= 2437, .max_power
= 25 },
2961 { .hw_value
= 7, .center_freq
= 2442, .max_power
= 25 },
2962 { .hw_value
= 8, .center_freq
= 2447, .max_power
= 25 },
2963 { .hw_value
= 9, .center_freq
= 2452, .max_power
= 25 },
2964 { .hw_value
= 10, .center_freq
= 2457, .max_power
= 25 },
2965 { .hw_value
= 11, .center_freq
= 2462, .max_power
= 25 },
2966 { .hw_value
= 12, .center_freq
= 2467, .max_power
= 25 },
2967 { .hw_value
= 13, .center_freq
= 2472, .max_power
= 25 },
2968 { .hw_value
= 14, .center_freq
= 2484, .max_power
= 25 },
2971 /* mapping to indexes for wl1271_rates */
2972 static const u8 wl1271_rate_to_idx_2ghz
[] = {
2973 /* MCS rates are used only with 11n */
2974 7, /* CONF_HW_RXTX_RATE_MCS7 */
2975 6, /* CONF_HW_RXTX_RATE_MCS6 */
2976 5, /* CONF_HW_RXTX_RATE_MCS5 */
2977 4, /* CONF_HW_RXTX_RATE_MCS4 */
2978 3, /* CONF_HW_RXTX_RATE_MCS3 */
2979 2, /* CONF_HW_RXTX_RATE_MCS2 */
2980 1, /* CONF_HW_RXTX_RATE_MCS1 */
2981 0, /* CONF_HW_RXTX_RATE_MCS0 */
2983 11, /* CONF_HW_RXTX_RATE_54 */
2984 10, /* CONF_HW_RXTX_RATE_48 */
2985 9, /* CONF_HW_RXTX_RATE_36 */
2986 8, /* CONF_HW_RXTX_RATE_24 */
2988 /* TI-specific rate */
2989 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_22 */
2991 7, /* CONF_HW_RXTX_RATE_18 */
2992 6, /* CONF_HW_RXTX_RATE_12 */
2993 3, /* CONF_HW_RXTX_RATE_11 */
2994 5, /* CONF_HW_RXTX_RATE_9 */
2995 4, /* CONF_HW_RXTX_RATE_6 */
2996 2, /* CONF_HW_RXTX_RATE_5_5 */
2997 1, /* CONF_HW_RXTX_RATE_2 */
2998 0 /* CONF_HW_RXTX_RATE_1 */
3001 /* 11n STA capabilities */
3002 #define HW_RX_HIGHEST_RATE 72
3004 #ifdef CONFIG_WL12XX_HT
3005 #define WL12XX_HT_CAP { \
3006 .cap = IEEE80211_HT_CAP_GRN_FLD | IEEE80211_HT_CAP_SGI_20, \
3007 .ht_supported = true, \
3008 .ampdu_factor = IEEE80211_HT_MAX_AMPDU_8K, \
3009 .ampdu_density = IEEE80211_HT_MPDU_DENSITY_8, \
3011 .rx_mask = { 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, \
3012 .rx_highest = cpu_to_le16(HW_RX_HIGHEST_RATE), \
3013 .tx_params = IEEE80211_HT_MCS_TX_DEFINED, \
3017 #define WL12XX_HT_CAP { \
3018 .ht_supported = false, \
3022 /* can't be const, mac80211 writes to this */
3023 static struct ieee80211_supported_band wl1271_band_2ghz
= {
3024 .channels
= wl1271_channels
,
3025 .n_channels
= ARRAY_SIZE(wl1271_channels
),
3026 .bitrates
= wl1271_rates
,
3027 .n_bitrates
= ARRAY_SIZE(wl1271_rates
),
3028 .ht_cap
= WL12XX_HT_CAP
,
3031 /* 5 GHz data rates for WL1273 */
3032 static struct ieee80211_rate wl1271_rates_5ghz
[] = {
3034 .hw_value
= CONF_HW_BIT_RATE_6MBPS
,
3035 .hw_value_short
= CONF_HW_BIT_RATE_6MBPS
, },
3037 .hw_value
= CONF_HW_BIT_RATE_9MBPS
,
3038 .hw_value_short
= CONF_HW_BIT_RATE_9MBPS
, },
3040 .hw_value
= CONF_HW_BIT_RATE_12MBPS
,
3041 .hw_value_short
= CONF_HW_BIT_RATE_12MBPS
, },
3043 .hw_value
= CONF_HW_BIT_RATE_18MBPS
,
3044 .hw_value_short
= CONF_HW_BIT_RATE_18MBPS
, },
3046 .hw_value
= CONF_HW_BIT_RATE_24MBPS
,
3047 .hw_value_short
= CONF_HW_BIT_RATE_24MBPS
, },
3049 .hw_value
= CONF_HW_BIT_RATE_36MBPS
,
3050 .hw_value_short
= CONF_HW_BIT_RATE_36MBPS
, },
3052 .hw_value
= CONF_HW_BIT_RATE_48MBPS
,
3053 .hw_value_short
= CONF_HW_BIT_RATE_48MBPS
, },
3055 .hw_value
= CONF_HW_BIT_RATE_54MBPS
,
3056 .hw_value_short
= CONF_HW_BIT_RATE_54MBPS
, },
3059 /* 5 GHz band channels for WL1273 */
3060 static struct ieee80211_channel wl1271_channels_5ghz
[] = {
3061 { .hw_value
= 7, .center_freq
= 5035},
3062 { .hw_value
= 8, .center_freq
= 5040},
3063 { .hw_value
= 9, .center_freq
= 5045},
3064 { .hw_value
= 11, .center_freq
= 5055},
3065 { .hw_value
= 12, .center_freq
= 5060},
3066 { .hw_value
= 16, .center_freq
= 5080},
3067 { .hw_value
= 34, .center_freq
= 5170},
3068 { .hw_value
= 36, .center_freq
= 5180},
3069 { .hw_value
= 38, .center_freq
= 5190},
3070 { .hw_value
= 40, .center_freq
= 5200},
3071 { .hw_value
= 42, .center_freq
= 5210},
3072 { .hw_value
= 44, .center_freq
= 5220},
3073 { .hw_value
= 46, .center_freq
= 5230},
3074 { .hw_value
= 48, .center_freq
= 5240},
3075 { .hw_value
= 52, .center_freq
= 5260},
3076 { .hw_value
= 56, .center_freq
= 5280},
3077 { .hw_value
= 60, .center_freq
= 5300},
3078 { .hw_value
= 64, .center_freq
= 5320},
3079 { .hw_value
= 100, .center_freq
= 5500},
3080 { .hw_value
= 104, .center_freq
= 5520},
3081 { .hw_value
= 108, .center_freq
= 5540},
3082 { .hw_value
= 112, .center_freq
= 5560},
3083 { .hw_value
= 116, .center_freq
= 5580},
3084 { .hw_value
= 120, .center_freq
= 5600},
3085 { .hw_value
= 124, .center_freq
= 5620},
3086 { .hw_value
= 128, .center_freq
= 5640},
3087 { .hw_value
= 132, .center_freq
= 5660},
3088 { .hw_value
= 136, .center_freq
= 5680},
3089 { .hw_value
= 140, .center_freq
= 5700},
3090 { .hw_value
= 149, .center_freq
= 5745},
3091 { .hw_value
= 153, .center_freq
= 5765},
3092 { .hw_value
= 157, .center_freq
= 5785},
3093 { .hw_value
= 161, .center_freq
= 5805},
3094 { .hw_value
= 165, .center_freq
= 5825},
3097 /* mapping to indexes for wl1271_rates_5ghz */
3098 static const u8 wl1271_rate_to_idx_5ghz
[] = {
3099 /* MCS rates are used only with 11n */
3100 7, /* CONF_HW_RXTX_RATE_MCS7 */
3101 6, /* CONF_HW_RXTX_RATE_MCS6 */
3102 5, /* CONF_HW_RXTX_RATE_MCS5 */
3103 4, /* CONF_HW_RXTX_RATE_MCS4 */
3104 3, /* CONF_HW_RXTX_RATE_MCS3 */
3105 2, /* CONF_HW_RXTX_RATE_MCS2 */
3106 1, /* CONF_HW_RXTX_RATE_MCS1 */
3107 0, /* CONF_HW_RXTX_RATE_MCS0 */
3109 7, /* CONF_HW_RXTX_RATE_54 */
3110 6, /* CONF_HW_RXTX_RATE_48 */
3111 5, /* CONF_HW_RXTX_RATE_36 */
3112 4, /* CONF_HW_RXTX_RATE_24 */
3114 /* TI-specific rate */
3115 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_22 */
3117 3, /* CONF_HW_RXTX_RATE_18 */
3118 2, /* CONF_HW_RXTX_RATE_12 */
3119 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_11 */
3120 1, /* CONF_HW_RXTX_RATE_9 */
3121 0, /* CONF_HW_RXTX_RATE_6 */
3122 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_5_5 */
3123 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_2 */
3124 CONF_HW_RXTX_RATE_UNSUPPORTED
/* CONF_HW_RXTX_RATE_1 */
3127 static struct ieee80211_supported_band wl1271_band_5ghz
= {
3128 .channels
= wl1271_channels_5ghz
,
3129 .n_channels
= ARRAY_SIZE(wl1271_channels_5ghz
),
3130 .bitrates
= wl1271_rates_5ghz
,
3131 .n_bitrates
= ARRAY_SIZE(wl1271_rates_5ghz
),
3132 .ht_cap
= WL12XX_HT_CAP
,
3135 static const u8
*wl1271_band_rate_to_idx
[] = {
3136 [IEEE80211_BAND_2GHZ
] = wl1271_rate_to_idx_2ghz
,
3137 [IEEE80211_BAND_5GHZ
] = wl1271_rate_to_idx_5ghz
3140 static const struct ieee80211_ops wl1271_ops
= {
3141 .start
= wl1271_op_start
,
3142 .stop
= wl1271_op_stop
,
3143 .add_interface
= wl1271_op_add_interface
,
3144 .remove_interface
= wl1271_op_remove_interface
,
3145 .config
= wl1271_op_config
,
3146 .prepare_multicast
= wl1271_op_prepare_multicast
,
3147 .configure_filter
= wl1271_op_configure_filter
,
3149 .set_key
= wl1271_op_set_key
,
3150 .hw_scan
= wl1271_op_hw_scan
,
3151 .bss_info_changed
= wl1271_op_bss_info_changed
,
3152 .set_frag_threshold
= wl1271_op_set_frag_threshold
,
3153 .set_rts_threshold
= wl1271_op_set_rts_threshold
,
3154 .conf_tx
= wl1271_op_conf_tx
,
3155 .get_tsf
= wl1271_op_get_tsf
,
3156 .get_survey
= wl1271_op_get_survey
,
3157 .sta_add
= wl1271_op_sta_add
,
3158 .sta_remove
= wl1271_op_sta_remove
,
3159 .ampdu_action
= wl1271_op_ampdu_action
,
3160 CFG80211_TESTMODE_CMD(wl1271_tm_cmd
)
3164 u8
wl1271_rate_to_idx(int rate
, enum ieee80211_band band
)
3168 BUG_ON(band
>= sizeof(wl1271_band_rate_to_idx
)/sizeof(u8
*));
3170 if (unlikely(rate
>= CONF_HW_RXTX_RATE_MAX
)) {
3171 wl1271_error("Illegal RX rate from HW: %d", rate
);
3175 idx
= wl1271_band_rate_to_idx
[band
][rate
];
3176 if (unlikely(idx
== CONF_HW_RXTX_RATE_UNSUPPORTED
)) {
3177 wl1271_error("Unsupported RX rate from HW: %d", rate
);
3184 static ssize_t
wl1271_sysfs_show_bt_coex_state(struct device
*dev
,
3185 struct device_attribute
*attr
,
3188 struct wl1271
*wl
= dev_get_drvdata(dev
);
3193 mutex_lock(&wl
->mutex
);
3194 len
= snprintf(buf
, len
, "%d\n\n0 - off\n1 - on\n",
3196 mutex_unlock(&wl
->mutex
);
3202 static ssize_t
wl1271_sysfs_store_bt_coex_state(struct device
*dev
,
3203 struct device_attribute
*attr
,
3204 const char *buf
, size_t count
)
3206 struct wl1271
*wl
= dev_get_drvdata(dev
);
3210 ret
= strict_strtoul(buf
, 10, &res
);
3213 wl1271_warning("incorrect value written to bt_coex_mode");
3217 mutex_lock(&wl
->mutex
);
3221 if (res
== wl
->sg_enabled
)
3224 wl
->sg_enabled
= res
;
3226 if (wl
->state
== WL1271_STATE_OFF
)
3229 ret
= wl1271_ps_elp_wakeup(wl
);
3233 wl1271_acx_sg_enable(wl
, wl
->sg_enabled
);
3234 wl1271_ps_elp_sleep(wl
);
3237 mutex_unlock(&wl
->mutex
);
3241 static DEVICE_ATTR(bt_coex_state
, S_IRUGO
| S_IWUSR
,
3242 wl1271_sysfs_show_bt_coex_state
,
3243 wl1271_sysfs_store_bt_coex_state
);
3245 static ssize_t
wl1271_sysfs_show_hw_pg_ver(struct device
*dev
,
3246 struct device_attribute
*attr
,
3249 struct wl1271
*wl
= dev_get_drvdata(dev
);
3254 mutex_lock(&wl
->mutex
);
3255 if (wl
->hw_pg_ver
>= 0)
3256 len
= snprintf(buf
, len
, "%d\n", wl
->hw_pg_ver
);
3258 len
= snprintf(buf
, len
, "n/a\n");
3259 mutex_unlock(&wl
->mutex
);
3264 static DEVICE_ATTR(hw_pg_ver
, S_IRUGO
| S_IWUSR
,
3265 wl1271_sysfs_show_hw_pg_ver
, NULL
);
3267 int wl1271_register_hw(struct wl1271
*wl
)
3271 if (wl
->mac80211_registered
)
3274 ret
= wl1271_fetch_nvs(wl
);
3276 u8
*nvs_ptr
= (u8
*)wl
->nvs
->nvs
;
3278 wl
->mac_addr
[0] = nvs_ptr
[11];
3279 wl
->mac_addr
[1] = nvs_ptr
[10];
3280 wl
->mac_addr
[2] = nvs_ptr
[6];
3281 wl
->mac_addr
[3] = nvs_ptr
[5];
3282 wl
->mac_addr
[4] = nvs_ptr
[4];
3283 wl
->mac_addr
[5] = nvs_ptr
[3];
3286 SET_IEEE80211_PERM_ADDR(wl
->hw
, wl
->mac_addr
);
3288 ret
= ieee80211_register_hw(wl
->hw
);
3290 wl1271_error("unable to register mac80211 hw: %d", ret
);
3294 wl
->mac80211_registered
= true;
3296 wl1271_debugfs_init(wl
);
3298 register_netdevice_notifier(&wl1271_dev_notifier
);
3300 wl1271_notice("loaded");
3304 EXPORT_SYMBOL_GPL(wl1271_register_hw
);
3306 void wl1271_unregister_hw(struct wl1271
*wl
)
3308 if (wl
->state
== WL1271_STATE_PLT
)
3309 __wl1271_plt_stop(wl
);
3311 unregister_netdevice_notifier(&wl1271_dev_notifier
);
3312 ieee80211_unregister_hw(wl
->hw
);
3313 wl
->mac80211_registered
= false;
3316 EXPORT_SYMBOL_GPL(wl1271_unregister_hw
);
3318 int wl1271_init_ieee80211(struct wl1271
*wl
)
3320 static const u32 cipher_suites
[] = {
3321 WLAN_CIPHER_SUITE_WEP40
,
3322 WLAN_CIPHER_SUITE_WEP104
,
3323 WLAN_CIPHER_SUITE_TKIP
,
3324 WLAN_CIPHER_SUITE_CCMP
,
3325 WL1271_CIPHER_SUITE_GEM
,
3328 /* The tx descriptor buffer and the TKIP space. */
3329 wl
->hw
->extra_tx_headroom
= WL1271_TKIP_IV_SPACE
+
3330 sizeof(struct wl1271_tx_hw_descr
);
3333 /* FIXME: find a proper value */
3334 wl
->hw
->channel_change_time
= 10000;
3335 wl
->hw
->max_listen_interval
= wl
->conf
.conn
.max_listen_interval
;
3337 wl
->hw
->flags
= IEEE80211_HW_SIGNAL_DBM
|
3338 IEEE80211_HW_BEACON_FILTER
|
3339 IEEE80211_HW_SUPPORTS_PS
|
3340 IEEE80211_HW_SUPPORTS_UAPSD
|
3341 IEEE80211_HW_HAS_RATE_CONTROL
|
3342 IEEE80211_HW_CONNECTION_MONITOR
|
3343 IEEE80211_HW_SUPPORTS_CQM_RSSI
|
3344 IEEE80211_HW_REPORTS_TX_ACK_STATUS
|
3345 IEEE80211_HW_AP_LINK_PS
;
3347 wl
->hw
->wiphy
->cipher_suites
= cipher_suites
;
3348 wl
->hw
->wiphy
->n_cipher_suites
= ARRAY_SIZE(cipher_suites
);
3350 wl
->hw
->wiphy
->interface_modes
= BIT(NL80211_IFTYPE_STATION
) |
3351 BIT(NL80211_IFTYPE_ADHOC
) | BIT(NL80211_IFTYPE_AP
);
3352 wl
->hw
->wiphy
->max_scan_ssids
= 1;
3354 * Maximum length of elements in scanning probe request templates
3355 * should be the maximum length possible for a template, without
3356 * the IEEE80211 header of the template
3358 wl
->hw
->wiphy
->max_scan_ie_len
= WL1271_CMD_TEMPL_MAX_SIZE
-
3359 sizeof(struct ieee80211_header
);
3362 * We keep local copies of the band structs because we need to
3363 * modify them on a per-device basis.
3365 memcpy(&wl
->bands
[IEEE80211_BAND_2GHZ
], &wl1271_band_2ghz
,
3366 sizeof(wl1271_band_2ghz
));
3367 memcpy(&wl
->bands
[IEEE80211_BAND_5GHZ
], &wl1271_band_5ghz
,
3368 sizeof(wl1271_band_5ghz
));
3370 wl
->hw
->wiphy
->bands
[IEEE80211_BAND_2GHZ
] =
3371 &wl
->bands
[IEEE80211_BAND_2GHZ
];
3372 wl
->hw
->wiphy
->bands
[IEEE80211_BAND_5GHZ
] =
3373 &wl
->bands
[IEEE80211_BAND_5GHZ
];
3376 wl
->hw
->max_rates
= 1;
3378 wl
->hw
->wiphy
->reg_notifier
= wl1271_reg_notify
;
3380 SET_IEEE80211_DEV(wl
->hw
, wl1271_wl_to_dev(wl
));
3382 wl
->hw
->sta_data_size
= sizeof(struct wl1271_station
);
3384 wl
->hw
->max_rx_aggregation_subframes
= 8;
3388 EXPORT_SYMBOL_GPL(wl1271_init_ieee80211
);
3390 #define WL1271_DEFAULT_CHANNEL 0
3392 struct ieee80211_hw
*wl1271_alloc_hw(void)
3394 struct ieee80211_hw
*hw
;
3395 struct platform_device
*plat_dev
= NULL
;
3400 hw
= ieee80211_alloc_hw(sizeof(*wl
), &wl1271_ops
);
3402 wl1271_error("could not alloc ieee80211_hw");
3407 plat_dev
= kmemdup(&wl1271_device
, sizeof(wl1271_device
), GFP_KERNEL
);
3409 wl1271_error("could not allocate platform_device");
3411 goto err_plat_alloc
;
3415 memset(wl
, 0, sizeof(*wl
));
3417 INIT_LIST_HEAD(&wl
->list
);
3420 wl
->plat_dev
= plat_dev
;
3422 for (i
= 0; i
< NUM_TX_QUEUES
; i
++)
3423 skb_queue_head_init(&wl
->tx_queue
[i
]);
3425 for (i
= 0; i
< NUM_TX_QUEUES
; i
++)
3426 for (j
= 0; j
< AP_MAX_LINKS
; j
++)
3427 skb_queue_head_init(&wl
->links
[j
].tx_queue
[i
]);
3429 skb_queue_head_init(&wl
->deferred_rx_queue
);
3430 skb_queue_head_init(&wl
->deferred_tx_queue
);
3432 INIT_DELAYED_WORK(&wl
->elp_work
, wl1271_elp_work
);
3433 INIT_DELAYED_WORK(&wl
->pspoll_work
, wl1271_pspoll_work
);
3434 INIT_WORK(&wl
->netstack_work
, wl1271_netstack_work
);
3435 INIT_WORK(&wl
->tx_work
, wl1271_tx_work
);
3436 INIT_WORK(&wl
->recovery_work
, wl1271_recovery_work
);
3437 INIT_DELAYED_WORK(&wl
->scan_complete_work
, wl1271_scan_complete_work
);
3438 wl
->channel
= WL1271_DEFAULT_CHANNEL
;
3439 wl
->beacon_int
= WL1271_DEFAULT_BEACON_INT
;
3440 wl
->default_key
= 0;
3442 wl
->rx_config
= WL1271_DEFAULT_STA_RX_CONFIG
;
3443 wl
->rx_filter
= WL1271_DEFAULT_STA_RX_FILTER
;
3444 wl
->psm_entry_retry
= 0;
3445 wl
->power_level
= WL1271_DEFAULT_POWER_LEVEL
;
3446 wl
->basic_rate_set
= CONF_TX_RATE_MASK_BASIC
;
3447 wl
->basic_rate
= CONF_TX_RATE_MASK_BASIC
;
3448 wl
->rate_set
= CONF_TX_RATE_MASK_BASIC
;
3449 wl
->band
= IEEE80211_BAND_2GHZ
;
3452 wl
->sg_enabled
= true;
3454 wl
->bss_type
= MAX_BSS_TYPE
;
3455 wl
->set_bss_type
= MAX_BSS_TYPE
;
3456 wl
->fw_bss_type
= MAX_BSS_TYPE
;
3457 wl
->last_tx_hlid
= 0;
3459 wl
->ap_fw_ps_map
= 0;
3462 memset(wl
->tx_frames_map
, 0, sizeof(wl
->tx_frames_map
));
3463 for (i
= 0; i
< ACX_TX_DESCRIPTORS
; i
++)
3464 wl
->tx_frames
[i
] = NULL
;
3466 spin_lock_init(&wl
->wl_lock
);
3468 wl
->state
= WL1271_STATE_OFF
;
3469 mutex_init(&wl
->mutex
);
3471 /* Apply default driver configuration. */
3472 wl1271_conf_init(wl
);
3474 order
= get_order(WL1271_AGGR_BUFFER_SIZE
);
3475 wl
->aggr_buf
= (u8
*)__get_free_pages(GFP_KERNEL
, order
);
3476 if (!wl
->aggr_buf
) {
3481 /* Register platform device */
3482 ret
= platform_device_register(wl
->plat_dev
);
3484 wl1271_error("couldn't register platform device");
3487 dev_set_drvdata(&wl
->plat_dev
->dev
, wl
);
3489 /* Create sysfs file to control bt coex state */
3490 ret
= device_create_file(&wl
->plat_dev
->dev
, &dev_attr_bt_coex_state
);
3492 wl1271_error("failed to create sysfs file bt_coex_state");
3496 /* Create sysfs file to get HW PG version */
3497 ret
= device_create_file(&wl
->plat_dev
->dev
, &dev_attr_hw_pg_ver
);
3499 wl1271_error("failed to create sysfs file hw_pg_ver");
3500 goto err_bt_coex_state
;
3506 device_remove_file(&wl
->plat_dev
->dev
, &dev_attr_bt_coex_state
);
3509 platform_device_unregister(wl
->plat_dev
);
3512 free_pages((unsigned long)wl
->aggr_buf
, order
);
3515 wl1271_debugfs_exit(wl
);
3519 ieee80211_free_hw(hw
);
3523 return ERR_PTR(ret
);
3525 EXPORT_SYMBOL_GPL(wl1271_alloc_hw
);
3527 int wl1271_free_hw(struct wl1271
*wl
)
3529 platform_device_unregister(wl
->plat_dev
);
3530 free_pages((unsigned long)wl
->aggr_buf
,
3531 get_order(WL1271_AGGR_BUFFER_SIZE
));
3532 kfree(wl
->plat_dev
);
3534 wl1271_debugfs_exit(wl
);
3541 kfree(wl
->fw_status
);
3542 kfree(wl
->tx_res_if
);
3544 ieee80211_free_hw(wl
->hw
);
3548 EXPORT_SYMBOL_GPL(wl1271_free_hw
);
3550 u32 wl12xx_debug_level
= DEBUG_NONE
;
3551 EXPORT_SYMBOL_GPL(wl12xx_debug_level
);
3552 module_param_named(debug_level
, wl12xx_debug_level
, uint
, S_IRUSR
| S_IWUSR
);
3553 MODULE_PARM_DESC(debug_level
, "wl12xx debugging level");
3555 MODULE_LICENSE("GPL");
3556 MODULE_AUTHOR("Luciano Coelho <coelho@ti.com>");
3557 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");