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
= 104,
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
, false);
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_fw_status(struct wl1271
*wl
,
541 struct wl1271_fw_full_status
*full_status
)
543 struct wl1271_fw_common_status
*status
= &full_status
->common
;
548 if (wl
->bss_type
== BSS_TYPE_AP_BSS
)
549 wl1271_raw_read(wl
, FW_STATUS_ADDR
, status
,
550 sizeof(struct wl1271_fw_ap_status
), false);
552 wl1271_raw_read(wl
, FW_STATUS_ADDR
, status
,
553 sizeof(struct wl1271_fw_sta_status
), false);
555 wl1271_debug(DEBUG_IRQ
, "intr: 0x%x (fw_rx_counter = %d, "
556 "drv_rx_counter = %d, tx_results_counter = %d)",
558 status
->fw_rx_counter
,
559 status
->drv_rx_counter
,
560 status
->tx_results_counter
);
562 /* update number of available TX blocks */
563 for (i
= 0; i
< NUM_TX_QUEUES
; i
++) {
564 u32 cnt
= le32_to_cpu(status
->tx_released_blks
[i
]) -
565 wl
->tx_blocks_freed
[i
];
567 wl
->tx_blocks_freed
[i
] =
568 le32_to_cpu(status
->tx_released_blks
[i
]);
569 wl
->tx_blocks_available
+= cnt
;
573 /* if more blocks are available now, tx work can be scheduled */
575 clear_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
);
577 /* update the host-chipset time offset */
579 wl
->time_offset
= (timespec_to_ns(&ts
) >> 10) -
580 (s64
)le32_to_cpu(status
->fw_localtime
);
583 #define WL1271_IRQ_MAX_LOOPS 10
585 static void wl1271_irq_work(struct work_struct
*work
)
589 int loopcount
= WL1271_IRQ_MAX_LOOPS
;
592 container_of(work
, struct wl1271
, irq_work
);
594 mutex_lock(&wl
->mutex
);
596 wl1271_debug(DEBUG_IRQ
, "IRQ work");
598 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
601 ret
= wl1271_ps_elp_wakeup(wl
, true);
605 spin_lock_irqsave(&wl
->wl_lock
, flags
);
606 while (test_bit(WL1271_FLAG_IRQ_PENDING
, &wl
->flags
) && loopcount
) {
607 clear_bit(WL1271_FLAG_IRQ_PENDING
, &wl
->flags
);
608 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
611 wl1271_fw_status(wl
, wl
->fw_status
);
612 intr
= le32_to_cpu(wl
->fw_status
->common
.intr
);
614 wl1271_debug(DEBUG_IRQ
, "Zero interrupt received.");
615 spin_lock_irqsave(&wl
->wl_lock
, flags
);
619 intr
&= WL1271_INTR_MASK
;
621 if (unlikely(intr
& WL1271_ACX_INTR_WATCHDOG
)) {
622 wl1271_error("watchdog interrupt received! "
623 "starting recovery.");
624 ieee80211_queue_work(wl
->hw
, &wl
->recovery_work
);
626 /* restarting the chip. ignore any other interrupt. */
630 if (intr
& WL1271_ACX_INTR_DATA
) {
631 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_DATA");
633 /* check for tx results */
634 if (wl
->fw_status
->common
.tx_results_counter
!=
635 (wl
->tx_results_count
& 0xff))
636 wl1271_tx_complete(wl
);
638 /* Check if any tx blocks were freed */
639 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
) &&
640 wl
->tx_queue_count
) {
642 * In order to avoid starvation of the TX path,
643 * call the work function directly.
645 wl1271_tx_work_locked(wl
);
648 wl1271_rx(wl
, &wl
->fw_status
->common
);
651 if (intr
& WL1271_ACX_INTR_EVENT_A
) {
652 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_EVENT_A");
653 wl1271_event_handle(wl
, 0);
656 if (intr
& WL1271_ACX_INTR_EVENT_B
) {
657 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_EVENT_B");
658 wl1271_event_handle(wl
, 1);
661 if (intr
& WL1271_ACX_INTR_INIT_COMPLETE
)
662 wl1271_debug(DEBUG_IRQ
,
663 "WL1271_ACX_INTR_INIT_COMPLETE");
665 if (intr
& WL1271_ACX_INTR_HW_AVAILABLE
)
666 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_HW_AVAILABLE");
668 spin_lock_irqsave(&wl
->wl_lock
, flags
);
671 if (test_bit(WL1271_FLAG_IRQ_PENDING
, &wl
->flags
))
672 ieee80211_queue_work(wl
->hw
, &wl
->irq_work
);
674 clear_bit(WL1271_FLAG_IRQ_RUNNING
, &wl
->flags
);
675 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
677 wl1271_ps_elp_sleep(wl
);
680 mutex_unlock(&wl
->mutex
);
683 static int wl1271_fetch_firmware(struct wl1271
*wl
)
685 const struct firmware
*fw
;
689 switch (wl
->bss_type
) {
690 case BSS_TYPE_AP_BSS
:
691 fw_name
= WL1271_AP_FW_NAME
;
694 case BSS_TYPE_STA_BSS
:
695 fw_name
= WL1271_FW_NAME
;
698 wl1271_error("no compatible firmware for bss_type %d",
703 wl1271_debug(DEBUG_BOOT
, "booting firmware %s", fw_name
);
705 ret
= request_firmware(&fw
, fw_name
, wl1271_wl_to_dev(wl
));
708 wl1271_error("could not get firmware: %d", ret
);
713 wl1271_error("firmware size is not multiple of 32 bits: %zu",
720 wl
->fw_len
= fw
->size
;
721 wl
->fw
= vmalloc(wl
->fw_len
);
724 wl1271_error("could not allocate memory for the firmware");
729 memcpy(wl
->fw
, fw
->data
, wl
->fw_len
);
730 wl
->fw_bss_type
= wl
->bss_type
;
734 release_firmware(fw
);
739 static int wl1271_fetch_nvs(struct wl1271
*wl
)
741 const struct firmware
*fw
;
744 ret
= request_firmware(&fw
, WL1271_NVS_NAME
, wl1271_wl_to_dev(wl
));
747 wl1271_error("could not get nvs file: %d", ret
);
751 wl
->nvs
= kmemdup(fw
->data
, sizeof(struct wl1271_nvs_file
), GFP_KERNEL
);
754 wl1271_error("could not allocate memory for the nvs file");
759 wl
->nvs_len
= fw
->size
;
762 release_firmware(fw
);
767 static void wl1271_recovery_work(struct work_struct
*work
)
770 container_of(work
, struct wl1271
, recovery_work
);
772 mutex_lock(&wl
->mutex
);
774 if (wl
->state
!= WL1271_STATE_ON
)
777 wl1271_info("Hardware recovery in progress.");
779 if (test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
780 ieee80211_connection_loss(wl
->vif
);
782 /* reboot the chipset */
783 __wl1271_op_remove_interface(wl
);
784 ieee80211_restart_hw(wl
->hw
);
787 mutex_unlock(&wl
->mutex
);
790 static void wl1271_fw_wakeup(struct wl1271
*wl
)
794 elp_reg
= ELPCTRL_WAKE_UP
;
795 wl1271_raw_write32(wl
, HW_ACCESS_ELP_CTRL_REG_ADDR
, elp_reg
);
798 static int wl1271_setup(struct wl1271
*wl
)
800 wl
->fw_status
= kmalloc(sizeof(*wl
->fw_status
), GFP_KERNEL
);
804 wl
->tx_res_if
= kmalloc(sizeof(*wl
->tx_res_if
), GFP_KERNEL
);
805 if (!wl
->tx_res_if
) {
806 kfree(wl
->fw_status
);
813 static int wl1271_chip_wakeup(struct wl1271
*wl
)
815 struct wl1271_partition_set partition
;
818 msleep(WL1271_PRE_POWER_ON_SLEEP
);
819 ret
= wl1271_power_on(wl
);
822 msleep(WL1271_POWER_ON_SLEEP
);
826 /* We don't need a real memory partition here, because we only want
827 * to use the registers at this point. */
828 memset(&partition
, 0, sizeof(partition
));
829 partition
.reg
.start
= REGISTERS_BASE
;
830 partition
.reg
.size
= REGISTERS_DOWN_SIZE
;
831 wl1271_set_partition(wl
, &partition
);
833 /* ELP module wake up */
834 wl1271_fw_wakeup(wl
);
836 /* whal_FwCtrl_BootSm() */
838 /* 0. read chip id from CHIP_ID */
839 wl
->chip
.id
= wl1271_read32(wl
, CHIP_ID_B
);
841 /* 1. check if chip id is valid */
843 switch (wl
->chip
.id
) {
844 case CHIP_ID_1271_PG10
:
845 wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
848 ret
= wl1271_setup(wl
);
852 case CHIP_ID_1271_PG20
:
853 wl1271_debug(DEBUG_BOOT
, "chip id 0x%x (1271 PG20)",
856 ret
= wl1271_setup(wl
);
861 wl1271_warning("unsupported chip id: 0x%x", wl
->chip
.id
);
866 /* Make sure the firmware type matches the BSS type */
867 if (wl
->fw
== NULL
|| wl
->fw_bss_type
!= wl
->bss_type
) {
868 ret
= wl1271_fetch_firmware(wl
);
873 /* No NVS from netlink, try to get it from the filesystem */
874 if (wl
->nvs
== NULL
) {
875 ret
= wl1271_fetch_nvs(wl
);
884 int wl1271_plt_start(struct wl1271
*wl
)
886 int retries
= WL1271_BOOT_RETRIES
;
889 mutex_lock(&wl
->mutex
);
891 wl1271_notice("power up");
893 if (wl
->state
!= WL1271_STATE_OFF
) {
894 wl1271_error("cannot go into PLT state because not "
895 "in off state: %d", wl
->state
);
900 wl
->bss_type
= BSS_TYPE_STA_BSS
;
904 ret
= wl1271_chip_wakeup(wl
);
908 ret
= wl1271_boot(wl
);
912 ret
= wl1271_plt_init(wl
);
916 wl
->state
= WL1271_STATE_PLT
;
917 wl1271_notice("firmware booted in PLT mode (%s)",
918 wl
->chip
.fw_ver_str
);
922 wl1271_disable_interrupts(wl
);
923 mutex_unlock(&wl
->mutex
);
924 /* Unlocking the mutex in the middle of handling is
925 inherently unsafe. In this case we deem it safe to do,
926 because we need to let any possibly pending IRQ out of
927 the system (and while we are WL1271_STATE_OFF the IRQ
928 work function will not do anything.) Also, any other
929 possible concurrent operations will fail due to the
930 current state, hence the wl1271 struct should be safe. */
931 cancel_work_sync(&wl
->irq_work
);
932 mutex_lock(&wl
->mutex
);
934 wl1271_power_off(wl
);
937 wl1271_error("firmware boot in PLT mode failed despite %d retries",
938 WL1271_BOOT_RETRIES
);
940 mutex_unlock(&wl
->mutex
);
945 int __wl1271_plt_stop(struct wl1271
*wl
)
949 wl1271_notice("power down");
951 if (wl
->state
!= WL1271_STATE_PLT
) {
952 wl1271_error("cannot power down because not in PLT "
953 "state: %d", wl
->state
);
958 wl1271_disable_interrupts(wl
);
959 wl1271_power_off(wl
);
961 wl
->state
= WL1271_STATE_OFF
;
964 mutex_unlock(&wl
->mutex
);
965 cancel_work_sync(&wl
->irq_work
);
966 cancel_work_sync(&wl
->recovery_work
);
967 mutex_lock(&wl
->mutex
);
972 int wl1271_plt_stop(struct wl1271
*wl
)
976 mutex_lock(&wl
->mutex
);
977 ret
= __wl1271_plt_stop(wl
);
978 mutex_unlock(&wl
->mutex
);
982 static int wl1271_op_tx(struct ieee80211_hw
*hw
, struct sk_buff
*skb
)
984 struct wl1271
*wl
= hw
->priv
;
988 spin_lock_irqsave(&wl
->wl_lock
, flags
);
989 wl
->tx_queue_count
++;
990 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
992 /* queue the packet */
993 q
= wl1271_tx_get_queue(skb_get_queue_mapping(skb
));
994 skb_queue_tail(&wl
->tx_queue
[q
], skb
);
997 * The chip specific setup must run before the first TX packet -
998 * before that, the tx_work will not be initialized!
1001 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
))
1002 ieee80211_queue_work(wl
->hw
, &wl
->tx_work
);
1005 * The workqueue is slow to process the tx_queue and we need stop
1006 * the queue here, otherwise the queue will get too long.
1008 if (wl
->tx_queue_count
>= WL1271_TX_QUEUE_HIGH_WATERMARK
) {
1009 wl1271_debug(DEBUG_TX
, "op_tx: stopping queues");
1011 spin_lock_irqsave(&wl
->wl_lock
, flags
);
1012 ieee80211_stop_queues(wl
->hw
);
1013 set_bit(WL1271_FLAG_TX_QUEUE_STOPPED
, &wl
->flags
);
1014 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
1017 return NETDEV_TX_OK
;
1020 static struct notifier_block wl1271_dev_notifier
= {
1021 .notifier_call
= wl1271_dev_notify
,
1024 static int wl1271_op_start(struct ieee80211_hw
*hw
)
1026 wl1271_debug(DEBUG_MAC80211
, "mac80211 start");
1029 * We have to delay the booting of the hardware because
1030 * we need to know the local MAC address before downloading and
1031 * initializing the firmware. The MAC address cannot be changed
1032 * after boot, and without the proper MAC address, the firmware
1033 * will not function properly.
1035 * The MAC address is first known when the corresponding interface
1036 * is added. That is where we will initialize the hardware.
1038 * In addition, we currently have different firmwares for AP and managed
1039 * operation. We will know which to boot according to interface type.
1045 static void wl1271_op_stop(struct ieee80211_hw
*hw
)
1047 wl1271_debug(DEBUG_MAC80211
, "mac80211 stop");
1050 static int wl1271_op_add_interface(struct ieee80211_hw
*hw
,
1051 struct ieee80211_vif
*vif
)
1053 struct wl1271
*wl
= hw
->priv
;
1054 struct wiphy
*wiphy
= hw
->wiphy
;
1055 int retries
= WL1271_BOOT_RETRIES
;
1057 bool booted
= false;
1059 wl1271_debug(DEBUG_MAC80211
, "mac80211 add interface type %d mac %pM",
1060 vif
->type
, vif
->addr
);
1062 mutex_lock(&wl
->mutex
);
1064 wl1271_debug(DEBUG_MAC80211
,
1065 "multiple vifs are not supported yet");
1070 switch (vif
->type
) {
1071 case NL80211_IFTYPE_STATION
:
1072 wl
->bss_type
= BSS_TYPE_STA_BSS
;
1073 wl
->set_bss_type
= BSS_TYPE_STA_BSS
;
1075 case NL80211_IFTYPE_ADHOC
:
1076 wl
->bss_type
= BSS_TYPE_IBSS
;
1077 wl
->set_bss_type
= BSS_TYPE_STA_BSS
;
1079 case NL80211_IFTYPE_AP
:
1080 wl
->bss_type
= BSS_TYPE_AP_BSS
;
1087 memcpy(wl
->mac_addr
, vif
->addr
, ETH_ALEN
);
1089 if (wl
->state
!= WL1271_STATE_OFF
) {
1090 wl1271_error("cannot start because not in off state: %d",
1098 ret
= wl1271_chip_wakeup(wl
);
1102 ret
= wl1271_boot(wl
);
1106 ret
= wl1271_hw_init(wl
);
1114 wl1271_disable_interrupts(wl
);
1115 mutex_unlock(&wl
->mutex
);
1116 /* Unlocking the mutex in the middle of handling is
1117 inherently unsafe. In this case we deem it safe to do,
1118 because we need to let any possibly pending IRQ out of
1119 the system (and while we are WL1271_STATE_OFF the IRQ
1120 work function will not do anything.) Also, any other
1121 possible concurrent operations will fail due to the
1122 current state, hence the wl1271 struct should be safe. */
1123 cancel_work_sync(&wl
->irq_work
);
1124 mutex_lock(&wl
->mutex
);
1126 wl1271_power_off(wl
);
1130 wl1271_error("firmware boot failed despite %d retries",
1131 WL1271_BOOT_RETRIES
);
1136 wl
->state
= WL1271_STATE_ON
;
1137 wl1271_info("firmware booted (%s)", wl
->chip
.fw_ver_str
);
1139 /* update hw/fw version info in wiphy struct */
1140 wiphy
->hw_version
= wl
->chip
.id
;
1141 strncpy(wiphy
->fw_version
, wl
->chip
.fw_ver_str
,
1142 sizeof(wiphy
->fw_version
));
1145 * Now we know if 11a is supported (info from the NVS), so disable
1146 * 11a channels if not supported
1148 if (!wl
->enable_11a
)
1149 wiphy
->bands
[IEEE80211_BAND_5GHZ
]->n_channels
= 0;
1151 wl1271_debug(DEBUG_MAC80211
, "11a is %ssupported",
1152 wl
->enable_11a
? "" : "not ");
1155 mutex_unlock(&wl
->mutex
);
1158 list_add(&wl
->list
, &wl_list
);
1163 static void __wl1271_op_remove_interface(struct wl1271
*wl
)
1167 wl1271_debug(DEBUG_MAC80211
, "mac80211 remove interface");
1169 wl1271_info("down");
1171 list_del(&wl
->list
);
1173 WARN_ON(wl
->state
!= WL1271_STATE_ON
);
1175 /* enable dyn ps just in case (if left on due to fw crash etc) */
1176 if (wl
->bss_type
== BSS_TYPE_STA_BSS
)
1177 ieee80211_enable_dyn_ps(wl
->vif
);
1179 if (wl
->scan
.state
!= WL1271_SCAN_STATE_IDLE
) {
1180 wl
->scan
.state
= WL1271_SCAN_STATE_IDLE
;
1181 kfree(wl
->scan
.scanned_ch
);
1182 wl
->scan
.scanned_ch
= NULL
;
1183 wl
->scan
.req
= NULL
;
1184 ieee80211_scan_completed(wl
->hw
, true);
1187 wl
->state
= WL1271_STATE_OFF
;
1189 wl1271_disable_interrupts(wl
);
1191 mutex_unlock(&wl
->mutex
);
1193 cancel_delayed_work_sync(&wl
->scan_complete_work
);
1194 cancel_work_sync(&wl
->irq_work
);
1195 cancel_work_sync(&wl
->tx_work
);
1196 cancel_delayed_work_sync(&wl
->pspoll_work
);
1197 cancel_delayed_work_sync(&wl
->elp_work
);
1199 mutex_lock(&wl
->mutex
);
1201 /* let's notify MAC80211 about the remaining pending TX frames */
1202 wl1271_tx_reset(wl
);
1203 wl1271_power_off(wl
);
1205 memset(wl
->bssid
, 0, ETH_ALEN
);
1206 memset(wl
->ssid
, 0, IW_ESSID_MAX_SIZE
+ 1);
1208 wl
->bss_type
= MAX_BSS_TYPE
;
1209 wl
->set_bss_type
= MAX_BSS_TYPE
;
1210 wl
->band
= IEEE80211_BAND_2GHZ
;
1213 wl
->psm_entry_retry
= 0;
1214 wl
->power_level
= WL1271_DEFAULT_POWER_LEVEL
;
1215 wl
->tx_blocks_available
= 0;
1216 wl
->tx_results_count
= 0;
1217 wl
->tx_packets_count
= 0;
1218 wl
->tx_security_last_seq
= 0;
1219 wl
->tx_security_seq
= 0;
1220 wl
->time_offset
= 0;
1221 wl
->session_counter
= 0;
1222 wl
->rate_set
= CONF_TX_RATE_MASK_BASIC
;
1226 wl1271_free_ap_keys(wl
);
1227 memset(wl
->ap_hlid_map
, 0, sizeof(wl
->ap_hlid_map
));
1229 for (i
= 0; i
< NUM_TX_QUEUES
; i
++)
1230 wl
->tx_blocks_freed
[i
] = 0;
1232 wl1271_debugfs_reset(wl
);
1234 kfree(wl
->fw_status
);
1235 wl
->fw_status
= NULL
;
1236 kfree(wl
->tx_res_if
);
1237 wl
->tx_res_if
= NULL
;
1238 kfree(wl
->target_mem_map
);
1239 wl
->target_mem_map
= NULL
;
1242 static void wl1271_op_remove_interface(struct ieee80211_hw
*hw
,
1243 struct ieee80211_vif
*vif
)
1245 struct wl1271
*wl
= hw
->priv
;
1247 mutex_lock(&wl
->mutex
);
1249 * wl->vif can be null here if someone shuts down the interface
1250 * just when hardware recovery has been started.
1253 WARN_ON(wl
->vif
!= vif
);
1254 __wl1271_op_remove_interface(wl
);
1257 mutex_unlock(&wl
->mutex
);
1258 cancel_work_sync(&wl
->recovery_work
);
1261 static void wl1271_configure_filters(struct wl1271
*wl
, unsigned int filters
)
1263 wl1271_set_default_filters(wl
);
1265 /* combine requested filters with current filter config */
1266 filters
= wl
->filters
| filters
;
1268 wl1271_debug(DEBUG_FILTERS
, "RX filters set: ");
1270 if (filters
& FIF_PROMISC_IN_BSS
) {
1271 wl1271_debug(DEBUG_FILTERS
, " - FIF_PROMISC_IN_BSS");
1272 wl
->rx_config
&= ~CFG_UNI_FILTER_EN
;
1273 wl
->rx_config
|= CFG_BSSID_FILTER_EN
;
1275 if (filters
& FIF_BCN_PRBRESP_PROMISC
) {
1276 wl1271_debug(DEBUG_FILTERS
, " - FIF_BCN_PRBRESP_PROMISC");
1277 wl
->rx_config
&= ~CFG_BSSID_FILTER_EN
;
1278 wl
->rx_config
&= ~CFG_SSID_FILTER_EN
;
1280 if (filters
& FIF_OTHER_BSS
) {
1281 wl1271_debug(DEBUG_FILTERS
, " - FIF_OTHER_BSS");
1282 wl
->rx_config
&= ~CFG_BSSID_FILTER_EN
;
1284 if (filters
& FIF_CONTROL
) {
1285 wl1271_debug(DEBUG_FILTERS
, " - FIF_CONTROL");
1286 wl
->rx_filter
|= CFG_RX_CTL_EN
;
1288 if (filters
& FIF_FCSFAIL
) {
1289 wl1271_debug(DEBUG_FILTERS
, " - FIF_FCSFAIL");
1290 wl
->rx_filter
|= CFG_RX_FCS_ERROR
;
1294 static int wl1271_dummy_join(struct wl1271
*wl
)
1297 /* we need to use a dummy BSSID for now */
1298 static const u8 dummy_bssid
[ETH_ALEN
] = { 0x0b, 0xad, 0xde,
1301 memcpy(wl
->bssid
, dummy_bssid
, ETH_ALEN
);
1303 /* pass through frames from all BSS */
1304 wl1271_configure_filters(wl
, FIF_OTHER_BSS
);
1306 ret
= wl1271_cmd_join(wl
, wl
->set_bss_type
);
1310 set_bit(WL1271_FLAG_JOINED
, &wl
->flags
);
1316 static int wl1271_join(struct wl1271
*wl
, bool set_assoc
)
1321 * One of the side effects of the JOIN command is that is clears
1322 * WPA/WPA2 keys from the chipset. Performing a JOIN while associated
1323 * to a WPA/WPA2 access point will therefore kill the data-path.
1324 * Currently there is no supported scenario for JOIN during
1325 * association - if it becomes a supported scenario, the WPA/WPA2 keys
1326 * must be handled somehow.
1329 if (test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
1330 wl1271_info("JOIN while associated.");
1333 set_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
);
1335 ret
= wl1271_cmd_join(wl
, wl
->set_bss_type
);
1339 set_bit(WL1271_FLAG_JOINED
, &wl
->flags
);
1341 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
1345 * The join command disable the keep-alive mode, shut down its process,
1346 * and also clear the template config, so we need to reset it all after
1347 * the join. The acx_aid starts the keep-alive process, and the order
1348 * of the commands below is relevant.
1350 ret
= wl1271_acx_keep_alive_mode(wl
, true);
1354 ret
= wl1271_acx_aid(wl
, wl
->aid
);
1358 ret
= wl1271_cmd_build_klv_null_data(wl
);
1362 ret
= wl1271_acx_keep_alive_config(wl
, CMD_TEMPL_KLV_IDX_NULL_DATA
,
1363 ACX_KEEP_ALIVE_TPL_VALID
);
1371 static int wl1271_unjoin(struct wl1271
*wl
)
1375 /* to stop listening to a channel, we disconnect */
1376 ret
= wl1271_cmd_disconnect(wl
);
1380 clear_bit(WL1271_FLAG_JOINED
, &wl
->flags
);
1381 memset(wl
->bssid
, 0, ETH_ALEN
);
1383 /* stop filterting packets based on bssid */
1384 wl1271_configure_filters(wl
, FIF_OTHER_BSS
);
1390 static void wl1271_set_band_rate(struct wl1271
*wl
)
1392 if (wl
->band
== IEEE80211_BAND_2GHZ
)
1393 wl
->basic_rate_set
= wl
->conf
.tx
.basic_rate
;
1395 wl
->basic_rate_set
= wl
->conf
.tx
.basic_rate_5
;
1398 static int wl1271_sta_handle_idle(struct wl1271
*wl
, bool idle
)
1403 if (test_bit(WL1271_FLAG_JOINED
, &wl
->flags
)) {
1404 ret
= wl1271_unjoin(wl
);
1408 wl
->rate_set
= wl1271_tx_min_rate_get(wl
);
1409 ret
= wl1271_acx_sta_rate_policies(wl
);
1412 ret
= wl1271_acx_keep_alive_config(
1413 wl
, CMD_TEMPL_KLV_IDX_NULL_DATA
,
1414 ACX_KEEP_ALIVE_TPL_INVALID
);
1417 set_bit(WL1271_FLAG_IDLE
, &wl
->flags
);
1419 /* increment the session counter */
1420 wl
->session_counter
++;
1421 if (wl
->session_counter
>= SESSION_COUNTER_MAX
)
1422 wl
->session_counter
= 0;
1423 ret
= wl1271_dummy_join(wl
);
1426 clear_bit(WL1271_FLAG_IDLE
, &wl
->flags
);
1433 static int wl1271_op_config(struct ieee80211_hw
*hw
, u32 changed
)
1435 struct wl1271
*wl
= hw
->priv
;
1436 struct ieee80211_conf
*conf
= &hw
->conf
;
1437 int channel
, ret
= 0;
1440 channel
= ieee80211_frequency_to_channel(conf
->channel
->center_freq
);
1442 wl1271_debug(DEBUG_MAC80211
, "mac80211 config ch %d psm %s power %d %s"
1445 conf
->flags
& IEEE80211_CONF_PS
? "on" : "off",
1447 conf
->flags
& IEEE80211_CONF_IDLE
? "idle" : "in use",
1451 * mac80211 will go to idle nearly immediately after transmitting some
1452 * frames, such as the deauth. To make sure those frames reach the air,
1453 * wait here until the TX queue is fully flushed.
1455 if ((changed
& IEEE80211_CONF_CHANGE_IDLE
) &&
1456 (conf
->flags
& IEEE80211_CONF_IDLE
))
1457 wl1271_tx_flush(wl
);
1459 mutex_lock(&wl
->mutex
);
1461 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
1466 is_ap
= (wl
->bss_type
== BSS_TYPE_AP_BSS
);
1468 ret
= wl1271_ps_elp_wakeup(wl
, false);
1472 /* if the channel changes while joined, join again */
1473 if (changed
& IEEE80211_CONF_CHANGE_CHANNEL
&&
1474 ((wl
->band
!= conf
->channel
->band
) ||
1475 (wl
->channel
!= channel
))) {
1476 wl
->band
= conf
->channel
->band
;
1477 wl
->channel
= channel
;
1481 * FIXME: the mac80211 should really provide a fixed
1482 * rate to use here. for now, just use the smallest
1483 * possible rate for the band as a fixed rate for
1484 * association frames and other control messages.
1486 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
1487 wl1271_set_band_rate(wl
);
1489 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
1490 ret
= wl1271_acx_sta_rate_policies(wl
);
1492 wl1271_warning("rate policy for channel "
1495 if (test_bit(WL1271_FLAG_JOINED
, &wl
->flags
)) {
1496 ret
= wl1271_join(wl
, false);
1498 wl1271_warning("cmd join on channel "
1504 if (changed
& IEEE80211_CONF_CHANGE_IDLE
&& !is_ap
) {
1505 ret
= wl1271_sta_handle_idle(wl
,
1506 conf
->flags
& IEEE80211_CONF_IDLE
);
1508 wl1271_warning("idle mode change failed %d", ret
);
1512 * if mac80211 changes the PSM mode, make sure the mode is not
1513 * incorrectly changed after the pspoll failure active window.
1515 if (changed
& IEEE80211_CONF_CHANGE_PS
)
1516 clear_bit(WL1271_FLAG_PSPOLL_FAILURE
, &wl
->flags
);
1518 if (conf
->flags
& IEEE80211_CONF_PS
&&
1519 !test_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
)) {
1520 set_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
);
1523 * We enter PSM only if we're already associated.
1524 * If we're not, we'll enter it when joining an SSID,
1525 * through the bss_info_changed() hook.
1527 if (test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
)) {
1528 wl1271_debug(DEBUG_PSM
, "psm enabled");
1529 ret
= wl1271_ps_set_mode(wl
, STATION_POWER_SAVE_MODE
,
1530 wl
->basic_rate
, true);
1532 } else if (!(conf
->flags
& IEEE80211_CONF_PS
) &&
1533 test_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
)) {
1534 wl1271_debug(DEBUG_PSM
, "psm disabled");
1536 clear_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
);
1538 if (test_bit(WL1271_FLAG_PSM
, &wl
->flags
))
1539 ret
= wl1271_ps_set_mode(wl
, STATION_ACTIVE_MODE
,
1540 wl
->basic_rate
, true);
1543 if (conf
->power_level
!= wl
->power_level
) {
1544 ret
= wl1271_acx_tx_power(wl
, conf
->power_level
);
1548 wl
->power_level
= conf
->power_level
;
1552 wl1271_ps_elp_sleep(wl
);
1555 mutex_unlock(&wl
->mutex
);
1560 struct wl1271_filter_params
{
1563 u8 mc_list
[ACX_MC_ADDRESS_GROUP_MAX
][ETH_ALEN
];
1566 static u64
wl1271_op_prepare_multicast(struct ieee80211_hw
*hw
,
1567 struct netdev_hw_addr_list
*mc_list
)
1569 struct wl1271_filter_params
*fp
;
1570 struct netdev_hw_addr
*ha
;
1571 struct wl1271
*wl
= hw
->priv
;
1573 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
1576 fp
= kzalloc(sizeof(*fp
), GFP_ATOMIC
);
1578 wl1271_error("Out of memory setting filters.");
1582 /* update multicast filtering parameters */
1583 fp
->mc_list_length
= 0;
1584 if (netdev_hw_addr_list_count(mc_list
) > ACX_MC_ADDRESS_GROUP_MAX
) {
1585 fp
->enabled
= false;
1588 netdev_hw_addr_list_for_each(ha
, mc_list
) {
1589 memcpy(fp
->mc_list
[fp
->mc_list_length
],
1590 ha
->addr
, ETH_ALEN
);
1591 fp
->mc_list_length
++;
1595 return (u64
)(unsigned long)fp
;
1598 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
1601 FIF_BCN_PRBRESP_PROMISC | \
1605 static void wl1271_op_configure_filter(struct ieee80211_hw
*hw
,
1606 unsigned int changed
,
1607 unsigned int *total
, u64 multicast
)
1609 struct wl1271_filter_params
*fp
= (void *)(unsigned long)multicast
;
1610 struct wl1271
*wl
= hw
->priv
;
1613 wl1271_debug(DEBUG_MAC80211
, "mac80211 configure filter changed %x"
1614 " total %x", changed
, *total
);
1616 mutex_lock(&wl
->mutex
);
1618 *total
&= WL1271_SUPPORTED_FILTERS
;
1619 changed
&= WL1271_SUPPORTED_FILTERS
;
1621 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
1624 ret
= wl1271_ps_elp_wakeup(wl
, false);
1628 if (wl
->bss_type
!= BSS_TYPE_AP_BSS
) {
1629 if (*total
& FIF_ALLMULTI
)
1630 ret
= wl1271_acx_group_address_tbl(wl
, false, NULL
, 0);
1632 ret
= wl1271_acx_group_address_tbl(wl
, fp
->enabled
,
1634 fp
->mc_list_length
);
1639 /* determine, whether supported filter values have changed */
1643 /* configure filters */
1644 wl
->filters
= *total
;
1645 wl1271_configure_filters(wl
, 0);
1647 /* apply configured filters */
1648 ret
= wl1271_acx_rx_config(wl
, wl
->rx_config
, wl
->rx_filter
);
1653 wl1271_ps_elp_sleep(wl
);
1656 mutex_unlock(&wl
->mutex
);
1660 static int wl1271_record_ap_key(struct wl1271
*wl
, u8 id
, u8 key_type
,
1661 u8 key_size
, const u8
*key
, u8 hlid
, u32 tx_seq_32
,
1664 struct wl1271_ap_key
*ap_key
;
1667 wl1271_debug(DEBUG_CRYPT
, "record ap key id %d", (int)id
);
1669 if (key_size
> MAX_KEY_SIZE
)
1673 * Find next free entry in ap_keys. Also check we are not replacing
1676 for (i
= 0; i
< MAX_NUM_KEYS
; i
++) {
1677 if (wl
->recorded_ap_keys
[i
] == NULL
)
1680 if (wl
->recorded_ap_keys
[i
]->id
== id
) {
1681 wl1271_warning("trying to record key replacement");
1686 if (i
== MAX_NUM_KEYS
)
1689 ap_key
= kzalloc(sizeof(*ap_key
), GFP_KERNEL
);
1694 ap_key
->key_type
= key_type
;
1695 ap_key
->key_size
= key_size
;
1696 memcpy(ap_key
->key
, key
, key_size
);
1697 ap_key
->hlid
= hlid
;
1698 ap_key
->tx_seq_32
= tx_seq_32
;
1699 ap_key
->tx_seq_16
= tx_seq_16
;
1701 wl
->recorded_ap_keys
[i
] = ap_key
;
1705 static void wl1271_free_ap_keys(struct wl1271
*wl
)
1709 for (i
= 0; i
< MAX_NUM_KEYS
; i
++) {
1710 kfree(wl
->recorded_ap_keys
[i
]);
1711 wl
->recorded_ap_keys
[i
] = NULL
;
1715 static int wl1271_ap_init_hwenc(struct wl1271
*wl
)
1718 struct wl1271_ap_key
*key
;
1719 bool wep_key_added
= false;
1721 for (i
= 0; i
< MAX_NUM_KEYS
; i
++) {
1722 if (wl
->recorded_ap_keys
[i
] == NULL
)
1725 key
= wl
->recorded_ap_keys
[i
];
1726 ret
= wl1271_cmd_set_ap_key(wl
, KEY_ADD_OR_REPLACE
,
1727 key
->id
, key
->key_type
,
1728 key
->key_size
, key
->key
,
1729 key
->hlid
, key
->tx_seq_32
,
1734 if (key
->key_type
== KEY_WEP
)
1735 wep_key_added
= true;
1738 if (wep_key_added
) {
1739 ret
= wl1271_cmd_set_ap_default_wep_key(wl
, wl
->default_key
);
1745 wl1271_free_ap_keys(wl
);
1749 static int wl1271_set_key(struct wl1271
*wl
, u16 action
, u8 id
, u8 key_type
,
1750 u8 key_size
, const u8
*key
, u32 tx_seq_32
,
1751 u16 tx_seq_16
, struct ieee80211_sta
*sta
)
1754 bool is_ap
= (wl
->bss_type
== BSS_TYPE_AP_BSS
);
1757 struct wl1271_station
*wl_sta
;
1761 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
1762 hlid
= wl_sta
->hlid
;
1764 hlid
= WL1271_AP_BROADCAST_HLID
;
1767 if (!test_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
)) {
1769 * We do not support removing keys after AP shutdown.
1770 * Pretend we do to make mac80211 happy.
1772 if (action
!= KEY_ADD_OR_REPLACE
)
1775 ret
= wl1271_record_ap_key(wl
, id
,
1777 key
, hlid
, tx_seq_32
,
1780 ret
= wl1271_cmd_set_ap_key(wl
, action
,
1781 id
, key_type
, key_size
,
1782 key
, hlid
, tx_seq_32
,
1790 static const u8 bcast_addr
[ETH_ALEN
] = {
1791 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
1794 addr
= sta
? sta
->addr
: bcast_addr
;
1796 if (is_zero_ether_addr(addr
)) {
1797 /* We dont support TX only encryption */
1801 /* The wl1271 does not allow to remove unicast keys - they
1802 will be cleared automatically on next CMD_JOIN. Ignore the
1803 request silently, as we dont want the mac80211 to emit
1804 an error message. */
1805 if (action
== KEY_REMOVE
&& !is_broadcast_ether_addr(addr
))
1808 ret
= wl1271_cmd_set_sta_key(wl
, action
,
1809 id
, key_type
, key_size
,
1810 key
, addr
, tx_seq_32
,
1815 /* the default WEP key needs to be configured at least once */
1816 if (key_type
== KEY_WEP
) {
1817 ret
= wl1271_cmd_set_sta_default_wep_key(wl
,
1827 static int wl1271_op_set_key(struct ieee80211_hw
*hw
, enum set_key_cmd cmd
,
1828 struct ieee80211_vif
*vif
,
1829 struct ieee80211_sta
*sta
,
1830 struct ieee80211_key_conf
*key_conf
)
1832 struct wl1271
*wl
= hw
->priv
;
1838 wl1271_debug(DEBUG_MAC80211
, "mac80211 set key");
1840 wl1271_debug(DEBUG_CRYPT
, "CMD: 0x%x sta: %p", cmd
, sta
);
1841 wl1271_debug(DEBUG_CRYPT
, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
1842 key_conf
->cipher
, key_conf
->keyidx
,
1843 key_conf
->keylen
, key_conf
->flags
);
1844 wl1271_dump(DEBUG_CRYPT
, "KEY: ", key_conf
->key
, key_conf
->keylen
);
1846 mutex_lock(&wl
->mutex
);
1848 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
1853 ret
= wl1271_ps_elp_wakeup(wl
, false);
1857 switch (key_conf
->cipher
) {
1858 case WLAN_CIPHER_SUITE_WEP40
:
1859 case WLAN_CIPHER_SUITE_WEP104
:
1862 key_conf
->hw_key_idx
= key_conf
->keyidx
;
1864 case WLAN_CIPHER_SUITE_TKIP
:
1865 key_type
= KEY_TKIP
;
1867 key_conf
->hw_key_idx
= key_conf
->keyidx
;
1868 tx_seq_32
= WL1271_TX_SECURITY_HI32(wl
->tx_security_seq
);
1869 tx_seq_16
= WL1271_TX_SECURITY_LO16(wl
->tx_security_seq
);
1871 case WLAN_CIPHER_SUITE_CCMP
:
1874 key_conf
->flags
|= IEEE80211_KEY_FLAG_GENERATE_IV
;
1875 tx_seq_32
= WL1271_TX_SECURITY_HI32(wl
->tx_security_seq
);
1876 tx_seq_16
= WL1271_TX_SECURITY_LO16(wl
->tx_security_seq
);
1878 case WL1271_CIPHER_SUITE_GEM
:
1880 tx_seq_32
= WL1271_TX_SECURITY_HI32(wl
->tx_security_seq
);
1881 tx_seq_16
= WL1271_TX_SECURITY_LO16(wl
->tx_security_seq
);
1884 wl1271_error("Unknown key algo 0x%x", key_conf
->cipher
);
1892 ret
= wl1271_set_key(wl
, KEY_ADD_OR_REPLACE
,
1893 key_conf
->keyidx
, key_type
,
1894 key_conf
->keylen
, key_conf
->key
,
1895 tx_seq_32
, tx_seq_16
, sta
);
1897 wl1271_error("Could not add or replace key");
1903 ret
= wl1271_set_key(wl
, KEY_REMOVE
,
1904 key_conf
->keyidx
, key_type
,
1905 key_conf
->keylen
, key_conf
->key
,
1908 wl1271_error("Could not remove key");
1914 wl1271_error("Unsupported key cmd 0x%x", cmd
);
1920 wl1271_ps_elp_sleep(wl
);
1923 mutex_unlock(&wl
->mutex
);
1928 static int wl1271_op_hw_scan(struct ieee80211_hw
*hw
,
1929 struct ieee80211_vif
*vif
,
1930 struct cfg80211_scan_request
*req
)
1932 struct wl1271
*wl
= hw
->priv
;
1937 wl1271_debug(DEBUG_MAC80211
, "mac80211 hw scan");
1940 ssid
= req
->ssids
[0].ssid
;
1941 len
= req
->ssids
[0].ssid_len
;
1944 mutex_lock(&wl
->mutex
);
1946 if (wl
->state
== WL1271_STATE_OFF
) {
1948 * We cannot return -EBUSY here because cfg80211 will expect
1949 * a call to ieee80211_scan_completed if we do - in this case
1950 * there won't be any call.
1956 ret
= wl1271_ps_elp_wakeup(wl
, false);
1960 ret
= wl1271_scan(hw
->priv
, ssid
, len
, req
);
1962 wl1271_ps_elp_sleep(wl
);
1965 mutex_unlock(&wl
->mutex
);
1970 static int wl1271_op_set_frag_threshold(struct ieee80211_hw
*hw
, u32 value
)
1972 struct wl1271
*wl
= hw
->priv
;
1975 mutex_lock(&wl
->mutex
);
1977 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
1982 ret
= wl1271_ps_elp_wakeup(wl
, false);
1986 ret
= wl1271_acx_frag_threshold(wl
, (u16
)value
);
1988 wl1271_warning("wl1271_op_set_frag_threshold failed: %d", ret
);
1990 wl1271_ps_elp_sleep(wl
);
1993 mutex_unlock(&wl
->mutex
);
1998 static int wl1271_op_set_rts_threshold(struct ieee80211_hw
*hw
, u32 value
)
2000 struct wl1271
*wl
= hw
->priv
;
2003 mutex_lock(&wl
->mutex
);
2005 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
2010 ret
= wl1271_ps_elp_wakeup(wl
, false);
2014 ret
= wl1271_acx_rts_threshold(wl
, (u16
) value
);
2016 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret
);
2018 wl1271_ps_elp_sleep(wl
);
2021 mutex_unlock(&wl
->mutex
);
2026 static int wl1271_ssid_set(struct wl1271
*wl
, struct sk_buff
*skb
,
2029 u8
*ptr
= skb
->data
+ offset
;
2031 /* find the location of the ssid in the beacon */
2032 while (ptr
< skb
->data
+ skb
->len
) {
2033 if (ptr
[0] == WLAN_EID_SSID
) {
2034 wl
->ssid_len
= ptr
[1];
2035 memcpy(wl
->ssid
, ptr
+2, wl
->ssid_len
);
2038 ptr
+= (ptr
[1] + 2);
2041 wl1271_error("No SSID in IEs!\n");
2045 static int wl1271_bss_erp_info_changed(struct wl1271
*wl
,
2046 struct ieee80211_bss_conf
*bss_conf
,
2051 if (changed
& BSS_CHANGED_ERP_SLOT
) {
2052 if (bss_conf
->use_short_slot
)
2053 ret
= wl1271_acx_slot(wl
, SLOT_TIME_SHORT
);
2055 ret
= wl1271_acx_slot(wl
, SLOT_TIME_LONG
);
2057 wl1271_warning("Set slot time failed %d", ret
);
2062 if (changed
& BSS_CHANGED_ERP_PREAMBLE
) {
2063 if (bss_conf
->use_short_preamble
)
2064 wl1271_acx_set_preamble(wl
, ACX_PREAMBLE_SHORT
);
2066 wl1271_acx_set_preamble(wl
, ACX_PREAMBLE_LONG
);
2069 if (changed
& BSS_CHANGED_ERP_CTS_PROT
) {
2070 if (bss_conf
->use_cts_prot
)
2071 ret
= wl1271_acx_cts_protect(wl
, CTSPROTECT_ENABLE
);
2073 ret
= wl1271_acx_cts_protect(wl
, CTSPROTECT_DISABLE
);
2075 wl1271_warning("Set ctsprotect failed %d", ret
);
2084 static int wl1271_bss_beacon_info_changed(struct wl1271
*wl
,
2085 struct ieee80211_vif
*vif
,
2086 struct ieee80211_bss_conf
*bss_conf
,
2089 bool is_ap
= (wl
->bss_type
== BSS_TYPE_AP_BSS
);
2092 if ((changed
& BSS_CHANGED_BEACON_INT
)) {
2093 wl1271_debug(DEBUG_MASTER
, "beacon interval updated: %d",
2094 bss_conf
->beacon_int
);
2096 wl
->beacon_int
= bss_conf
->beacon_int
;
2099 if ((changed
& BSS_CHANGED_BEACON
)) {
2100 struct ieee80211_hdr
*hdr
;
2101 int ieoffset
= offsetof(struct ieee80211_mgmt
,
2103 struct sk_buff
*beacon
= ieee80211_beacon_get(wl
->hw
, vif
);
2109 wl1271_debug(DEBUG_MASTER
, "beacon updated");
2111 ret
= wl1271_ssid_set(wl
, beacon
, ieoffset
);
2113 dev_kfree_skb(beacon
);
2116 tmpl_id
= is_ap
? CMD_TEMPL_AP_BEACON
:
2118 ret
= wl1271_cmd_template_set(wl
, tmpl_id
,
2121 wl1271_tx_min_rate_get(wl
));
2123 dev_kfree_skb(beacon
);
2127 hdr
= (struct ieee80211_hdr
*) beacon
->data
;
2128 hdr
->frame_control
= cpu_to_le16(IEEE80211_FTYPE_MGMT
|
2129 IEEE80211_STYPE_PROBE_RESP
);
2131 tmpl_id
= is_ap
? CMD_TEMPL_AP_PROBE_RESPONSE
:
2132 CMD_TEMPL_PROBE_RESPONSE
;
2133 ret
= wl1271_cmd_template_set(wl
,
2137 wl1271_tx_min_rate_get(wl
));
2138 dev_kfree_skb(beacon
);
2147 /* AP mode changes */
2148 static void wl1271_bss_info_changed_ap(struct wl1271
*wl
,
2149 struct ieee80211_vif
*vif
,
2150 struct ieee80211_bss_conf
*bss_conf
,
2155 if ((changed
& BSS_CHANGED_BASIC_RATES
)) {
2156 u32 rates
= bss_conf
->basic_rates
;
2157 struct conf_tx_rate_class mgmt_rc
;
2159 wl
->basic_rate_set
= wl1271_tx_enabled_rates_get(wl
, rates
);
2160 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
2161 wl1271_debug(DEBUG_AP
, "basic rates: 0x%x",
2162 wl
->basic_rate_set
);
2164 /* update the AP management rate policy with the new rates */
2165 mgmt_rc
.enabled_rates
= wl
->basic_rate_set
;
2166 mgmt_rc
.long_retry_limit
= 10;
2167 mgmt_rc
.short_retry_limit
= 10;
2169 ret
= wl1271_acx_ap_rate_policy(wl
, &mgmt_rc
,
2170 ACX_TX_AP_MODE_MGMT_RATE
);
2172 wl1271_error("AP mgmt policy change failed %d", ret
);
2177 ret
= wl1271_bss_beacon_info_changed(wl
, vif
, bss_conf
, changed
);
2181 if ((changed
& BSS_CHANGED_BEACON_ENABLED
)) {
2182 if (bss_conf
->enable_beacon
) {
2183 if (!test_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
)) {
2184 ret
= wl1271_cmd_start_bss(wl
);
2188 set_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
);
2189 wl1271_debug(DEBUG_AP
, "started AP");
2191 ret
= wl1271_ap_init_hwenc(wl
);
2196 if (test_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
)) {
2197 ret
= wl1271_cmd_stop_bss(wl
);
2201 clear_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
);
2202 wl1271_debug(DEBUG_AP
, "stopped AP");
2207 ret
= wl1271_bss_erp_info_changed(wl
, bss_conf
, changed
);
2214 /* STA/IBSS mode changes */
2215 static void wl1271_bss_info_changed_sta(struct wl1271
*wl
,
2216 struct ieee80211_vif
*vif
,
2217 struct ieee80211_bss_conf
*bss_conf
,
2220 bool do_join
= false, set_assoc
= false;
2221 bool is_ibss
= (wl
->bss_type
== BSS_TYPE_IBSS
);
2222 u32 sta_rate_set
= 0;
2224 struct ieee80211_sta
*sta
;
2225 bool sta_exists
= false;
2226 struct ieee80211_sta_ht_cap sta_ht_cap
;
2229 ret
= wl1271_bss_beacon_info_changed(wl
, vif
, bss_conf
,
2235 if ((changed
& BSS_CHANGED_BEACON_INT
) && is_ibss
)
2238 /* Need to update the SSID (for filtering etc) */
2239 if ((changed
& BSS_CHANGED_BEACON
) && is_ibss
)
2242 if ((changed
& BSS_CHANGED_BEACON_ENABLED
) && is_ibss
) {
2243 wl1271_debug(DEBUG_ADHOC
, "ad-hoc beaconing: %s",
2244 bss_conf
->enable_beacon
? "enabled" : "disabled");
2246 if (bss_conf
->enable_beacon
)
2247 wl
->set_bss_type
= BSS_TYPE_IBSS
;
2249 wl
->set_bss_type
= BSS_TYPE_STA_BSS
;
2253 if ((changed
& BSS_CHANGED_CQM
)) {
2254 bool enable
= false;
2255 if (bss_conf
->cqm_rssi_thold
)
2257 ret
= wl1271_acx_rssi_snr_trigger(wl
, enable
,
2258 bss_conf
->cqm_rssi_thold
,
2259 bss_conf
->cqm_rssi_hyst
);
2262 wl
->rssi_thold
= bss_conf
->cqm_rssi_thold
;
2265 if ((changed
& BSS_CHANGED_BSSID
) &&
2267 * Now we know the correct bssid, so we send a new join command
2268 * and enable the BSSID filter
2270 memcmp(wl
->bssid
, bss_conf
->bssid
, ETH_ALEN
)) {
2271 memcpy(wl
->bssid
, bss_conf
->bssid
, ETH_ALEN
);
2273 if (!is_zero_ether_addr(wl
->bssid
)) {
2274 ret
= wl1271_cmd_build_null_data(wl
);
2278 ret
= wl1271_build_qos_null_data(wl
);
2282 /* filter out all packets not from this BSSID */
2283 wl1271_configure_filters(wl
, 0);
2285 /* Need to update the BSSID (for filtering etc) */
2291 sta
= ieee80211_find_sta(vif
, bss_conf
->bssid
);
2293 /* save the supp_rates of the ap */
2294 sta_rate_set
= sta
->supp_rates
[wl
->hw
->conf
.channel
->band
];
2295 if (sta
->ht_cap
.ht_supported
)
2297 (sta
->ht_cap
.mcs
.rx_mask
[0] << HW_HT_RATES_OFFSET
);
2298 sta_ht_cap
= sta
->ht_cap
;
2304 /* handle new association with HT and HT information change */
2305 if ((changed
& BSS_CHANGED_HT
) &&
2306 (bss_conf
->channel_type
!= NL80211_CHAN_NO_HT
)) {
2307 ret
= wl1271_acx_set_ht_capabilities(wl
, &sta_ht_cap
,
2310 wl1271_warning("Set ht cap true failed %d",
2314 ret
= wl1271_acx_set_ht_information(wl
,
2315 bss_conf
->ht_operation_mode
);
2317 wl1271_warning("Set ht information failed %d",
2322 /* handle new association without HT and disassociation */
2323 else if (changed
& BSS_CHANGED_ASSOC
) {
2324 ret
= wl1271_acx_set_ht_capabilities(wl
, &sta_ht_cap
,
2327 wl1271_warning("Set ht cap false failed %d",
2334 if ((changed
& BSS_CHANGED_ASSOC
)) {
2335 if (bss_conf
->assoc
) {
2338 wl
->aid
= bss_conf
->aid
;
2341 wl
->ps_poll_failures
= 0;
2344 * use basic rates from AP, and determine lowest rate
2345 * to use with control frames.
2347 rates
= bss_conf
->basic_rates
;
2348 wl
->basic_rate_set
= wl1271_tx_enabled_rates_get(wl
,
2350 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
2352 wl
->rate_set
= wl1271_tx_enabled_rates_get(wl
,
2354 ret
= wl1271_acx_sta_rate_policies(wl
);
2359 * with wl1271, we don't need to update the
2360 * beacon_int and dtim_period, because the firmware
2361 * updates it by itself when the first beacon is
2362 * received after a join.
2364 ret
= wl1271_cmd_build_ps_poll(wl
, wl
->aid
);
2369 * Get a template for hardware connection maintenance
2371 dev_kfree_skb(wl
->probereq
);
2372 wl
->probereq
= wl1271_cmd_build_ap_probe_req(wl
, NULL
);
2373 ieoffset
= offsetof(struct ieee80211_mgmt
,
2374 u
.probe_req
.variable
);
2375 wl1271_ssid_set(wl
, wl
->probereq
, ieoffset
);
2377 /* enable the connection monitoring feature */
2378 ret
= wl1271_acx_conn_monit_params(wl
, true);
2382 /* If we want to go in PSM but we're not there yet */
2383 if (test_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
) &&
2384 !test_bit(WL1271_FLAG_PSM
, &wl
->flags
)) {
2385 enum wl1271_cmd_ps_mode mode
;
2387 mode
= STATION_POWER_SAVE_MODE
;
2388 ret
= wl1271_ps_set_mode(wl
, mode
,
2395 /* use defaults when not associated */
2396 clear_bit(WL1271_FLAG_STA_STATE_SENT
, &wl
->flags
);
2397 clear_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
);
2400 /* free probe-request template */
2401 dev_kfree_skb(wl
->probereq
);
2402 wl
->probereq
= NULL
;
2404 /* re-enable dynamic ps - just in case */
2405 ieee80211_enable_dyn_ps(wl
->vif
);
2407 /* revert back to minimum rates for the current band */
2408 wl1271_set_band_rate(wl
);
2409 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
2410 ret
= wl1271_acx_sta_rate_policies(wl
);
2414 /* disable connection monitor features */
2415 ret
= wl1271_acx_conn_monit_params(wl
, false);
2417 /* Disable the keep-alive feature */
2418 ret
= wl1271_acx_keep_alive_mode(wl
, false);
2422 /* restore the bssid filter and go to dummy bssid */
2424 wl1271_dummy_join(wl
);
2428 ret
= wl1271_bss_erp_info_changed(wl
, bss_conf
, changed
);
2432 if (changed
& BSS_CHANGED_ARP_FILTER
) {
2433 __be32 addr
= bss_conf
->arp_addr_list
[0];
2434 WARN_ON(wl
->bss_type
!= BSS_TYPE_STA_BSS
);
2436 if (bss_conf
->arp_addr_cnt
== 1 &&
2437 bss_conf
->arp_filter_enabled
) {
2439 * The template should have been configured only upon
2440 * association. however, it seems that the correct ip
2441 * isn't being set (when sending), so we have to
2442 * reconfigure the template upon every ip change.
2444 ret
= wl1271_cmd_build_arp_rsp(wl
, addr
);
2446 wl1271_warning("build arp rsp failed: %d", ret
);
2450 ret
= wl1271_acx_arp_ip_filter(wl
,
2451 ACX_ARP_FILTER_ARP_FILTERING
,
2454 ret
= wl1271_acx_arp_ip_filter(wl
, 0, addr
);
2461 ret
= wl1271_join(wl
, set_assoc
);
2463 wl1271_warning("cmd join failed %d", ret
);
2472 static void wl1271_op_bss_info_changed(struct ieee80211_hw
*hw
,
2473 struct ieee80211_vif
*vif
,
2474 struct ieee80211_bss_conf
*bss_conf
,
2477 struct wl1271
*wl
= hw
->priv
;
2478 bool is_ap
= (wl
->bss_type
== BSS_TYPE_AP_BSS
);
2481 wl1271_debug(DEBUG_MAC80211
, "mac80211 bss info changed 0x%x",
2484 mutex_lock(&wl
->mutex
);
2486 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
2489 ret
= wl1271_ps_elp_wakeup(wl
, false);
2494 wl1271_bss_info_changed_ap(wl
, vif
, bss_conf
, changed
);
2496 wl1271_bss_info_changed_sta(wl
, vif
, bss_conf
, changed
);
2498 wl1271_ps_elp_sleep(wl
);
2501 mutex_unlock(&wl
->mutex
);
2504 static int wl1271_op_conf_tx(struct ieee80211_hw
*hw
, u16 queue
,
2505 const struct ieee80211_tx_queue_params
*params
)
2507 struct wl1271
*wl
= hw
->priv
;
2511 mutex_lock(&wl
->mutex
);
2513 wl1271_debug(DEBUG_MAC80211
, "mac80211 conf tx %d", queue
);
2516 ps_scheme
= CONF_PS_SCHEME_UPSD_TRIGGER
;
2518 ps_scheme
= CONF_PS_SCHEME_LEGACY
;
2520 if (wl
->state
== WL1271_STATE_OFF
) {
2522 * If the state is off, the parameters will be recorded and
2523 * configured on init. This happens in AP-mode.
2525 struct conf_tx_ac_category
*conf_ac
=
2526 &wl
->conf
.tx
.ac_conf
[wl1271_tx_get_queue(queue
)];
2527 struct conf_tx_tid
*conf_tid
=
2528 &wl
->conf
.tx
.tid_conf
[wl1271_tx_get_queue(queue
)];
2530 conf_ac
->ac
= wl1271_tx_get_queue(queue
);
2531 conf_ac
->cw_min
= (u8
)params
->cw_min
;
2532 conf_ac
->cw_max
= params
->cw_max
;
2533 conf_ac
->aifsn
= params
->aifs
;
2534 conf_ac
->tx_op_limit
= params
->txop
<< 5;
2536 conf_tid
->queue_id
= wl1271_tx_get_queue(queue
);
2537 conf_tid
->channel_type
= CONF_CHANNEL_TYPE_EDCF
;
2538 conf_tid
->tsid
= wl1271_tx_get_queue(queue
);
2539 conf_tid
->ps_scheme
= ps_scheme
;
2540 conf_tid
->ack_policy
= CONF_ACK_POLICY_LEGACY
;
2541 conf_tid
->apsd_conf
[0] = 0;
2542 conf_tid
->apsd_conf
[1] = 0;
2544 ret
= wl1271_ps_elp_wakeup(wl
, false);
2549 * the txop is confed in units of 32us by the mac80211,
2552 ret
= wl1271_acx_ac_cfg(wl
, wl1271_tx_get_queue(queue
),
2553 params
->cw_min
, params
->cw_max
,
2554 params
->aifs
, params
->txop
<< 5);
2558 ret
= wl1271_acx_tid_cfg(wl
, wl1271_tx_get_queue(queue
),
2559 CONF_CHANNEL_TYPE_EDCF
,
2560 wl1271_tx_get_queue(queue
),
2561 ps_scheme
, CONF_ACK_POLICY_LEGACY
,
2567 wl1271_ps_elp_sleep(wl
);
2571 mutex_unlock(&wl
->mutex
);
2576 static u64
wl1271_op_get_tsf(struct ieee80211_hw
*hw
)
2579 struct wl1271
*wl
= hw
->priv
;
2580 u64 mactime
= ULLONG_MAX
;
2583 wl1271_debug(DEBUG_MAC80211
, "mac80211 get tsf");
2585 mutex_lock(&wl
->mutex
);
2587 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
2590 ret
= wl1271_ps_elp_wakeup(wl
, false);
2594 ret
= wl1271_acx_tsf_info(wl
, &mactime
);
2599 wl1271_ps_elp_sleep(wl
);
2602 mutex_unlock(&wl
->mutex
);
2606 static int wl1271_op_get_survey(struct ieee80211_hw
*hw
, int idx
,
2607 struct survey_info
*survey
)
2609 struct wl1271
*wl
= hw
->priv
;
2610 struct ieee80211_conf
*conf
= &hw
->conf
;
2615 survey
->channel
= conf
->channel
;
2616 survey
->filled
= SURVEY_INFO_NOISE_DBM
;
2617 survey
->noise
= wl
->noise
;
2622 static int wl1271_allocate_hlid(struct wl1271
*wl
,
2623 struct ieee80211_sta
*sta
,
2626 struct wl1271_station
*wl_sta
;
2629 id
= find_first_zero_bit(wl
->ap_hlid_map
, AP_MAX_STATIONS
);
2630 if (id
>= AP_MAX_STATIONS
) {
2631 wl1271_warning("could not allocate HLID - too much stations");
2635 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
2637 __set_bit(id
, wl
->ap_hlid_map
);
2638 wl_sta
->hlid
= WL1271_AP_STA_HLID_START
+ id
;
2639 *hlid
= wl_sta
->hlid
;
2643 static void wl1271_free_hlid(struct wl1271
*wl
, u8 hlid
)
2645 int id
= hlid
- WL1271_AP_STA_HLID_START
;
2647 __clear_bit(id
, wl
->ap_hlid_map
);
2650 static int wl1271_op_sta_add(struct ieee80211_hw
*hw
,
2651 struct ieee80211_vif
*vif
,
2652 struct ieee80211_sta
*sta
)
2654 struct wl1271
*wl
= hw
->priv
;
2658 mutex_lock(&wl
->mutex
);
2660 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
2663 if (wl
->bss_type
!= BSS_TYPE_AP_BSS
)
2666 wl1271_debug(DEBUG_MAC80211
, "mac80211 add sta %d", (int)sta
->aid
);
2668 ret
= wl1271_allocate_hlid(wl
, sta
, &hlid
);
2672 ret
= wl1271_ps_elp_wakeup(wl
, false);
2676 ret
= wl1271_cmd_add_sta(wl
, sta
, hlid
);
2681 wl1271_ps_elp_sleep(wl
);
2684 mutex_unlock(&wl
->mutex
);
2688 static int wl1271_op_sta_remove(struct ieee80211_hw
*hw
,
2689 struct ieee80211_vif
*vif
,
2690 struct ieee80211_sta
*sta
)
2692 struct wl1271
*wl
= hw
->priv
;
2693 struct wl1271_station
*wl_sta
;
2696 mutex_lock(&wl
->mutex
);
2698 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
2701 if (wl
->bss_type
!= BSS_TYPE_AP_BSS
)
2704 wl1271_debug(DEBUG_MAC80211
, "mac80211 remove sta %d", (int)sta
->aid
);
2706 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
2707 id
= wl_sta
->hlid
- WL1271_AP_STA_HLID_START
;
2708 if (WARN_ON(!test_bit(id
, wl
->ap_hlid_map
)))
2711 ret
= wl1271_ps_elp_wakeup(wl
, false);
2715 ret
= wl1271_cmd_remove_sta(wl
, wl_sta
->hlid
);
2719 wl1271_free_hlid(wl
, wl_sta
->hlid
);
2722 wl1271_ps_elp_sleep(wl
);
2725 mutex_unlock(&wl
->mutex
);
2729 int wl1271_op_ampdu_action(struct ieee80211_hw
*hw
, struct ieee80211_vif
*vif
,
2730 enum ieee80211_ampdu_mlme_action action
,
2731 struct ieee80211_sta
*sta
, u16 tid
, u16
*ssn
,
2734 struct wl1271
*wl
= hw
->priv
;
2737 mutex_lock(&wl
->mutex
);
2739 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
2744 ret
= wl1271_ps_elp_wakeup(wl
, false);
2749 case IEEE80211_AMPDU_RX_START
:
2750 if (wl
->ba_support
) {
2751 ret
= wl1271_acx_set_ba_receiver_session(wl
, tid
, *ssn
,
2754 wl
->ba_rx_bitmap
|= BIT(tid
);
2760 case IEEE80211_AMPDU_RX_STOP
:
2761 ret
= wl1271_acx_set_ba_receiver_session(wl
, tid
, 0, false);
2763 wl
->ba_rx_bitmap
&= ~BIT(tid
);
2767 * The BA initiator session management in FW independently.
2768 * Falling break here on purpose for all TX APDU commands.
2770 case IEEE80211_AMPDU_TX_START
:
2771 case IEEE80211_AMPDU_TX_STOP
:
2772 case IEEE80211_AMPDU_TX_OPERATIONAL
:
2777 wl1271_error("Incorrect ampdu action id=%x\n", action
);
2781 wl1271_ps_elp_sleep(wl
);
2784 mutex_unlock(&wl
->mutex
);
2789 /* can't be const, mac80211 writes to this */
2790 static struct ieee80211_rate wl1271_rates
[] = {
2792 .hw_value
= CONF_HW_BIT_RATE_1MBPS
,
2793 .hw_value_short
= CONF_HW_BIT_RATE_1MBPS
, },
2795 .hw_value
= CONF_HW_BIT_RATE_2MBPS
,
2796 .hw_value_short
= CONF_HW_BIT_RATE_2MBPS
,
2797 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
2799 .hw_value
= CONF_HW_BIT_RATE_5_5MBPS
,
2800 .hw_value_short
= CONF_HW_BIT_RATE_5_5MBPS
,
2801 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
2803 .hw_value
= CONF_HW_BIT_RATE_11MBPS
,
2804 .hw_value_short
= CONF_HW_BIT_RATE_11MBPS
,
2805 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
2807 .hw_value
= CONF_HW_BIT_RATE_6MBPS
,
2808 .hw_value_short
= CONF_HW_BIT_RATE_6MBPS
, },
2810 .hw_value
= CONF_HW_BIT_RATE_9MBPS
,
2811 .hw_value_short
= CONF_HW_BIT_RATE_9MBPS
, },
2813 .hw_value
= CONF_HW_BIT_RATE_12MBPS
,
2814 .hw_value_short
= CONF_HW_BIT_RATE_12MBPS
, },
2816 .hw_value
= CONF_HW_BIT_RATE_18MBPS
,
2817 .hw_value_short
= CONF_HW_BIT_RATE_18MBPS
, },
2819 .hw_value
= CONF_HW_BIT_RATE_24MBPS
,
2820 .hw_value_short
= CONF_HW_BIT_RATE_24MBPS
, },
2822 .hw_value
= CONF_HW_BIT_RATE_36MBPS
,
2823 .hw_value_short
= CONF_HW_BIT_RATE_36MBPS
, },
2825 .hw_value
= CONF_HW_BIT_RATE_48MBPS
,
2826 .hw_value_short
= CONF_HW_BIT_RATE_48MBPS
, },
2828 .hw_value
= CONF_HW_BIT_RATE_54MBPS
,
2829 .hw_value_short
= CONF_HW_BIT_RATE_54MBPS
, },
2832 /* can't be const, mac80211 writes to this */
2833 static struct ieee80211_channel wl1271_channels
[] = {
2834 { .hw_value
= 1, .center_freq
= 2412, .max_power
= 25 },
2835 { .hw_value
= 2, .center_freq
= 2417, .max_power
= 25 },
2836 { .hw_value
= 3, .center_freq
= 2422, .max_power
= 25 },
2837 { .hw_value
= 4, .center_freq
= 2427, .max_power
= 25 },
2838 { .hw_value
= 5, .center_freq
= 2432, .max_power
= 25 },
2839 { .hw_value
= 6, .center_freq
= 2437, .max_power
= 25 },
2840 { .hw_value
= 7, .center_freq
= 2442, .max_power
= 25 },
2841 { .hw_value
= 8, .center_freq
= 2447, .max_power
= 25 },
2842 { .hw_value
= 9, .center_freq
= 2452, .max_power
= 25 },
2843 { .hw_value
= 10, .center_freq
= 2457, .max_power
= 25 },
2844 { .hw_value
= 11, .center_freq
= 2462, .max_power
= 25 },
2845 { .hw_value
= 12, .center_freq
= 2467, .max_power
= 25 },
2846 { .hw_value
= 13, .center_freq
= 2472, .max_power
= 25 },
2847 { .hw_value
= 14, .center_freq
= 2484, .max_power
= 25 },
2850 /* mapping to indexes for wl1271_rates */
2851 static const u8 wl1271_rate_to_idx_2ghz
[] = {
2852 /* MCS rates are used only with 11n */
2853 7, /* CONF_HW_RXTX_RATE_MCS7 */
2854 6, /* CONF_HW_RXTX_RATE_MCS6 */
2855 5, /* CONF_HW_RXTX_RATE_MCS5 */
2856 4, /* CONF_HW_RXTX_RATE_MCS4 */
2857 3, /* CONF_HW_RXTX_RATE_MCS3 */
2858 2, /* CONF_HW_RXTX_RATE_MCS2 */
2859 1, /* CONF_HW_RXTX_RATE_MCS1 */
2860 0, /* CONF_HW_RXTX_RATE_MCS0 */
2862 11, /* CONF_HW_RXTX_RATE_54 */
2863 10, /* CONF_HW_RXTX_RATE_48 */
2864 9, /* CONF_HW_RXTX_RATE_36 */
2865 8, /* CONF_HW_RXTX_RATE_24 */
2867 /* TI-specific rate */
2868 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_22 */
2870 7, /* CONF_HW_RXTX_RATE_18 */
2871 6, /* CONF_HW_RXTX_RATE_12 */
2872 3, /* CONF_HW_RXTX_RATE_11 */
2873 5, /* CONF_HW_RXTX_RATE_9 */
2874 4, /* CONF_HW_RXTX_RATE_6 */
2875 2, /* CONF_HW_RXTX_RATE_5_5 */
2876 1, /* CONF_HW_RXTX_RATE_2 */
2877 0 /* CONF_HW_RXTX_RATE_1 */
2880 /* 11n STA capabilities */
2881 #define HW_RX_HIGHEST_RATE 72
2883 #ifdef CONFIG_WL12XX_HT
2884 #define WL12XX_HT_CAP { \
2885 .cap = IEEE80211_HT_CAP_GRN_FLD | IEEE80211_HT_CAP_SGI_20, \
2886 .ht_supported = true, \
2887 .ampdu_factor = IEEE80211_HT_MAX_AMPDU_8K, \
2888 .ampdu_density = IEEE80211_HT_MPDU_DENSITY_8, \
2890 .rx_mask = { 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, \
2891 .rx_highest = cpu_to_le16(HW_RX_HIGHEST_RATE), \
2892 .tx_params = IEEE80211_HT_MCS_TX_DEFINED, \
2896 #define WL12XX_HT_CAP { \
2897 .ht_supported = false, \
2901 /* can't be const, mac80211 writes to this */
2902 static struct ieee80211_supported_band wl1271_band_2ghz
= {
2903 .channels
= wl1271_channels
,
2904 .n_channels
= ARRAY_SIZE(wl1271_channels
),
2905 .bitrates
= wl1271_rates
,
2906 .n_bitrates
= ARRAY_SIZE(wl1271_rates
),
2907 .ht_cap
= WL12XX_HT_CAP
,
2910 /* 5 GHz data rates for WL1273 */
2911 static struct ieee80211_rate wl1271_rates_5ghz
[] = {
2913 .hw_value
= CONF_HW_BIT_RATE_6MBPS
,
2914 .hw_value_short
= CONF_HW_BIT_RATE_6MBPS
, },
2916 .hw_value
= CONF_HW_BIT_RATE_9MBPS
,
2917 .hw_value_short
= CONF_HW_BIT_RATE_9MBPS
, },
2919 .hw_value
= CONF_HW_BIT_RATE_12MBPS
,
2920 .hw_value_short
= CONF_HW_BIT_RATE_12MBPS
, },
2922 .hw_value
= CONF_HW_BIT_RATE_18MBPS
,
2923 .hw_value_short
= CONF_HW_BIT_RATE_18MBPS
, },
2925 .hw_value
= CONF_HW_BIT_RATE_24MBPS
,
2926 .hw_value_short
= CONF_HW_BIT_RATE_24MBPS
, },
2928 .hw_value
= CONF_HW_BIT_RATE_36MBPS
,
2929 .hw_value_short
= CONF_HW_BIT_RATE_36MBPS
, },
2931 .hw_value
= CONF_HW_BIT_RATE_48MBPS
,
2932 .hw_value_short
= CONF_HW_BIT_RATE_48MBPS
, },
2934 .hw_value
= CONF_HW_BIT_RATE_54MBPS
,
2935 .hw_value_short
= CONF_HW_BIT_RATE_54MBPS
, },
2938 /* 5 GHz band channels for WL1273 */
2939 static struct ieee80211_channel wl1271_channels_5ghz
[] = {
2940 { .hw_value
= 7, .center_freq
= 5035},
2941 { .hw_value
= 8, .center_freq
= 5040},
2942 { .hw_value
= 9, .center_freq
= 5045},
2943 { .hw_value
= 11, .center_freq
= 5055},
2944 { .hw_value
= 12, .center_freq
= 5060},
2945 { .hw_value
= 16, .center_freq
= 5080},
2946 { .hw_value
= 34, .center_freq
= 5170},
2947 { .hw_value
= 36, .center_freq
= 5180},
2948 { .hw_value
= 38, .center_freq
= 5190},
2949 { .hw_value
= 40, .center_freq
= 5200},
2950 { .hw_value
= 42, .center_freq
= 5210},
2951 { .hw_value
= 44, .center_freq
= 5220},
2952 { .hw_value
= 46, .center_freq
= 5230},
2953 { .hw_value
= 48, .center_freq
= 5240},
2954 { .hw_value
= 52, .center_freq
= 5260},
2955 { .hw_value
= 56, .center_freq
= 5280},
2956 { .hw_value
= 60, .center_freq
= 5300},
2957 { .hw_value
= 64, .center_freq
= 5320},
2958 { .hw_value
= 100, .center_freq
= 5500},
2959 { .hw_value
= 104, .center_freq
= 5520},
2960 { .hw_value
= 108, .center_freq
= 5540},
2961 { .hw_value
= 112, .center_freq
= 5560},
2962 { .hw_value
= 116, .center_freq
= 5580},
2963 { .hw_value
= 120, .center_freq
= 5600},
2964 { .hw_value
= 124, .center_freq
= 5620},
2965 { .hw_value
= 128, .center_freq
= 5640},
2966 { .hw_value
= 132, .center_freq
= 5660},
2967 { .hw_value
= 136, .center_freq
= 5680},
2968 { .hw_value
= 140, .center_freq
= 5700},
2969 { .hw_value
= 149, .center_freq
= 5745},
2970 { .hw_value
= 153, .center_freq
= 5765},
2971 { .hw_value
= 157, .center_freq
= 5785},
2972 { .hw_value
= 161, .center_freq
= 5805},
2973 { .hw_value
= 165, .center_freq
= 5825},
2976 /* mapping to indexes for wl1271_rates_5ghz */
2977 static const u8 wl1271_rate_to_idx_5ghz
[] = {
2978 /* MCS rates are used only with 11n */
2979 7, /* CONF_HW_RXTX_RATE_MCS7 */
2980 6, /* CONF_HW_RXTX_RATE_MCS6 */
2981 5, /* CONF_HW_RXTX_RATE_MCS5 */
2982 4, /* CONF_HW_RXTX_RATE_MCS4 */
2983 3, /* CONF_HW_RXTX_RATE_MCS3 */
2984 2, /* CONF_HW_RXTX_RATE_MCS2 */
2985 1, /* CONF_HW_RXTX_RATE_MCS1 */
2986 0, /* CONF_HW_RXTX_RATE_MCS0 */
2988 7, /* CONF_HW_RXTX_RATE_54 */
2989 6, /* CONF_HW_RXTX_RATE_48 */
2990 5, /* CONF_HW_RXTX_RATE_36 */
2991 4, /* CONF_HW_RXTX_RATE_24 */
2993 /* TI-specific rate */
2994 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_22 */
2996 3, /* CONF_HW_RXTX_RATE_18 */
2997 2, /* CONF_HW_RXTX_RATE_12 */
2998 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_11 */
2999 1, /* CONF_HW_RXTX_RATE_9 */
3000 0, /* CONF_HW_RXTX_RATE_6 */
3001 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_5_5 */
3002 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_2 */
3003 CONF_HW_RXTX_RATE_UNSUPPORTED
/* CONF_HW_RXTX_RATE_1 */
3006 static struct ieee80211_supported_band wl1271_band_5ghz
= {
3007 .channels
= wl1271_channels_5ghz
,
3008 .n_channels
= ARRAY_SIZE(wl1271_channels_5ghz
),
3009 .bitrates
= wl1271_rates_5ghz
,
3010 .n_bitrates
= ARRAY_SIZE(wl1271_rates_5ghz
),
3011 .ht_cap
= WL12XX_HT_CAP
,
3014 static const u8
*wl1271_band_rate_to_idx
[] = {
3015 [IEEE80211_BAND_2GHZ
] = wl1271_rate_to_idx_2ghz
,
3016 [IEEE80211_BAND_5GHZ
] = wl1271_rate_to_idx_5ghz
3019 static const struct ieee80211_ops wl1271_ops
= {
3020 .start
= wl1271_op_start
,
3021 .stop
= wl1271_op_stop
,
3022 .add_interface
= wl1271_op_add_interface
,
3023 .remove_interface
= wl1271_op_remove_interface
,
3024 .config
= wl1271_op_config
,
3025 .prepare_multicast
= wl1271_op_prepare_multicast
,
3026 .configure_filter
= wl1271_op_configure_filter
,
3028 .set_key
= wl1271_op_set_key
,
3029 .hw_scan
= wl1271_op_hw_scan
,
3030 .bss_info_changed
= wl1271_op_bss_info_changed
,
3031 .set_frag_threshold
= wl1271_op_set_frag_threshold
,
3032 .set_rts_threshold
= wl1271_op_set_rts_threshold
,
3033 .conf_tx
= wl1271_op_conf_tx
,
3034 .get_tsf
= wl1271_op_get_tsf
,
3035 .get_survey
= wl1271_op_get_survey
,
3036 .sta_add
= wl1271_op_sta_add
,
3037 .sta_remove
= wl1271_op_sta_remove
,
3038 .ampdu_action
= wl1271_op_ampdu_action
,
3039 CFG80211_TESTMODE_CMD(wl1271_tm_cmd
)
3043 u8
wl1271_rate_to_idx(int rate
, enum ieee80211_band band
)
3047 BUG_ON(band
>= sizeof(wl1271_band_rate_to_idx
)/sizeof(u8
*));
3049 if (unlikely(rate
>= CONF_HW_RXTX_RATE_MAX
)) {
3050 wl1271_error("Illegal RX rate from HW: %d", rate
);
3054 idx
= wl1271_band_rate_to_idx
[band
][rate
];
3055 if (unlikely(idx
== CONF_HW_RXTX_RATE_UNSUPPORTED
)) {
3056 wl1271_error("Unsupported RX rate from HW: %d", rate
);
3063 static ssize_t
wl1271_sysfs_show_bt_coex_state(struct device
*dev
,
3064 struct device_attribute
*attr
,
3067 struct wl1271
*wl
= dev_get_drvdata(dev
);
3072 mutex_lock(&wl
->mutex
);
3073 len
= snprintf(buf
, len
, "%d\n\n0 - off\n1 - on\n",
3075 mutex_unlock(&wl
->mutex
);
3081 static ssize_t
wl1271_sysfs_store_bt_coex_state(struct device
*dev
,
3082 struct device_attribute
*attr
,
3083 const char *buf
, size_t count
)
3085 struct wl1271
*wl
= dev_get_drvdata(dev
);
3089 ret
= strict_strtoul(buf
, 10, &res
);
3092 wl1271_warning("incorrect value written to bt_coex_mode");
3096 mutex_lock(&wl
->mutex
);
3100 if (res
== wl
->sg_enabled
)
3103 wl
->sg_enabled
= res
;
3105 if (wl
->state
== WL1271_STATE_OFF
)
3108 ret
= wl1271_ps_elp_wakeup(wl
, false);
3112 wl1271_acx_sg_enable(wl
, wl
->sg_enabled
);
3113 wl1271_ps_elp_sleep(wl
);
3116 mutex_unlock(&wl
->mutex
);
3120 static DEVICE_ATTR(bt_coex_state
, S_IRUGO
| S_IWUSR
,
3121 wl1271_sysfs_show_bt_coex_state
,
3122 wl1271_sysfs_store_bt_coex_state
);
3124 static ssize_t
wl1271_sysfs_show_hw_pg_ver(struct device
*dev
,
3125 struct device_attribute
*attr
,
3128 struct wl1271
*wl
= dev_get_drvdata(dev
);
3133 mutex_lock(&wl
->mutex
);
3134 if (wl
->hw_pg_ver
>= 0)
3135 len
= snprintf(buf
, len
, "%d\n", wl
->hw_pg_ver
);
3137 len
= snprintf(buf
, len
, "n/a\n");
3138 mutex_unlock(&wl
->mutex
);
3143 static DEVICE_ATTR(hw_pg_ver
, S_IRUGO
| S_IWUSR
,
3144 wl1271_sysfs_show_hw_pg_ver
, NULL
);
3146 int wl1271_register_hw(struct wl1271
*wl
)
3150 if (wl
->mac80211_registered
)
3153 ret
= wl1271_fetch_nvs(wl
);
3155 u8
*nvs_ptr
= (u8
*)wl
->nvs
->nvs
;
3157 wl
->mac_addr
[0] = nvs_ptr
[11];
3158 wl
->mac_addr
[1] = nvs_ptr
[10];
3159 wl
->mac_addr
[2] = nvs_ptr
[6];
3160 wl
->mac_addr
[3] = nvs_ptr
[5];
3161 wl
->mac_addr
[4] = nvs_ptr
[4];
3162 wl
->mac_addr
[5] = nvs_ptr
[3];
3165 SET_IEEE80211_PERM_ADDR(wl
->hw
, wl
->mac_addr
);
3167 ret
= ieee80211_register_hw(wl
->hw
);
3169 wl1271_error("unable to register mac80211 hw: %d", ret
);
3173 wl
->mac80211_registered
= true;
3175 wl1271_debugfs_init(wl
);
3177 register_netdevice_notifier(&wl1271_dev_notifier
);
3179 wl1271_notice("loaded");
3183 EXPORT_SYMBOL_GPL(wl1271_register_hw
);
3185 void wl1271_unregister_hw(struct wl1271
*wl
)
3187 if (wl
->state
== WL1271_STATE_PLT
)
3188 __wl1271_plt_stop(wl
);
3190 unregister_netdevice_notifier(&wl1271_dev_notifier
);
3191 ieee80211_unregister_hw(wl
->hw
);
3192 wl
->mac80211_registered
= false;
3195 EXPORT_SYMBOL_GPL(wl1271_unregister_hw
);
3197 int wl1271_init_ieee80211(struct wl1271
*wl
)
3199 static const u32 cipher_suites
[] = {
3200 WLAN_CIPHER_SUITE_WEP40
,
3201 WLAN_CIPHER_SUITE_WEP104
,
3202 WLAN_CIPHER_SUITE_TKIP
,
3203 WLAN_CIPHER_SUITE_CCMP
,
3204 WL1271_CIPHER_SUITE_GEM
,
3207 /* The tx descriptor buffer and the TKIP space. */
3208 wl
->hw
->extra_tx_headroom
= WL1271_TKIP_IV_SPACE
+
3209 sizeof(struct wl1271_tx_hw_descr
);
3212 /* FIXME: find a proper value */
3213 wl
->hw
->channel_change_time
= 10000;
3214 wl
->hw
->max_listen_interval
= wl
->conf
.conn
.max_listen_interval
;
3216 wl
->hw
->flags
= IEEE80211_HW_SIGNAL_DBM
|
3217 IEEE80211_HW_BEACON_FILTER
|
3218 IEEE80211_HW_SUPPORTS_PS
|
3219 IEEE80211_HW_SUPPORTS_UAPSD
|
3220 IEEE80211_HW_HAS_RATE_CONTROL
|
3221 IEEE80211_HW_CONNECTION_MONITOR
|
3222 IEEE80211_HW_SUPPORTS_CQM_RSSI
;
3224 wl
->hw
->wiphy
->cipher_suites
= cipher_suites
;
3225 wl
->hw
->wiphy
->n_cipher_suites
= ARRAY_SIZE(cipher_suites
);
3227 wl
->hw
->wiphy
->interface_modes
= BIT(NL80211_IFTYPE_STATION
) |
3228 BIT(NL80211_IFTYPE_ADHOC
) | BIT(NL80211_IFTYPE_AP
);
3229 wl
->hw
->wiphy
->max_scan_ssids
= 1;
3231 * Maximum length of elements in scanning probe request templates
3232 * should be the maximum length possible for a template, without
3233 * the IEEE80211 header of the template
3235 wl
->hw
->wiphy
->max_scan_ie_len
= WL1271_CMD_TEMPL_MAX_SIZE
-
3236 sizeof(struct ieee80211_header
);
3239 * We keep local copies of the band structs because we need to
3240 * modify them on a per-device basis.
3242 memcpy(&wl
->bands
[IEEE80211_BAND_2GHZ
], &wl1271_band_2ghz
,
3243 sizeof(wl1271_band_2ghz
));
3244 memcpy(&wl
->bands
[IEEE80211_BAND_5GHZ
], &wl1271_band_5ghz
,
3245 sizeof(wl1271_band_5ghz
));
3247 wl
->hw
->wiphy
->bands
[IEEE80211_BAND_2GHZ
] =
3248 &wl
->bands
[IEEE80211_BAND_2GHZ
];
3249 wl
->hw
->wiphy
->bands
[IEEE80211_BAND_5GHZ
] =
3250 &wl
->bands
[IEEE80211_BAND_5GHZ
];
3253 wl
->hw
->max_rates
= 1;
3255 wl
->hw
->wiphy
->reg_notifier
= wl1271_reg_notify
;
3257 SET_IEEE80211_DEV(wl
->hw
, wl1271_wl_to_dev(wl
));
3259 wl
->hw
->sta_data_size
= sizeof(struct wl1271_station
);
3261 wl
->hw
->max_rx_aggregation_subframes
= 8;
3265 EXPORT_SYMBOL_GPL(wl1271_init_ieee80211
);
3267 #define WL1271_DEFAULT_CHANNEL 0
3269 struct ieee80211_hw
*wl1271_alloc_hw(void)
3271 struct ieee80211_hw
*hw
;
3272 struct platform_device
*plat_dev
= NULL
;
3277 hw
= ieee80211_alloc_hw(sizeof(*wl
), &wl1271_ops
);
3279 wl1271_error("could not alloc ieee80211_hw");
3284 plat_dev
= kmemdup(&wl1271_device
, sizeof(wl1271_device
), GFP_KERNEL
);
3286 wl1271_error("could not allocate platform_device");
3288 goto err_plat_alloc
;
3292 memset(wl
, 0, sizeof(*wl
));
3294 INIT_LIST_HEAD(&wl
->list
);
3297 wl
->plat_dev
= plat_dev
;
3299 for (i
= 0; i
< NUM_TX_QUEUES
; i
++)
3300 skb_queue_head_init(&wl
->tx_queue
[i
]);
3302 INIT_DELAYED_WORK(&wl
->elp_work
, wl1271_elp_work
);
3303 INIT_DELAYED_WORK(&wl
->pspoll_work
, wl1271_pspoll_work
);
3304 INIT_WORK(&wl
->irq_work
, wl1271_irq_work
);
3305 INIT_WORK(&wl
->tx_work
, wl1271_tx_work
);
3306 INIT_WORK(&wl
->recovery_work
, wl1271_recovery_work
);
3307 INIT_DELAYED_WORK(&wl
->scan_complete_work
, wl1271_scan_complete_work
);
3308 wl
->channel
= WL1271_DEFAULT_CHANNEL
;
3309 wl
->beacon_int
= WL1271_DEFAULT_BEACON_INT
;
3310 wl
->default_key
= 0;
3312 wl
->rx_config
= WL1271_DEFAULT_STA_RX_CONFIG
;
3313 wl
->rx_filter
= WL1271_DEFAULT_STA_RX_FILTER
;
3314 wl
->psm_entry_retry
= 0;
3315 wl
->power_level
= WL1271_DEFAULT_POWER_LEVEL
;
3316 wl
->basic_rate_set
= CONF_TX_RATE_MASK_BASIC
;
3317 wl
->basic_rate
= CONF_TX_RATE_MASK_BASIC
;
3318 wl
->rate_set
= CONF_TX_RATE_MASK_BASIC
;
3319 wl
->band
= IEEE80211_BAND_2GHZ
;
3322 wl
->sg_enabled
= true;
3324 wl
->bss_type
= MAX_BSS_TYPE
;
3325 wl
->set_bss_type
= MAX_BSS_TYPE
;
3326 wl
->fw_bss_type
= MAX_BSS_TYPE
;
3328 memset(wl
->tx_frames_map
, 0, sizeof(wl
->tx_frames_map
));
3329 for (i
= 0; i
< ACX_TX_DESCRIPTORS
; i
++)
3330 wl
->tx_frames
[i
] = NULL
;
3332 spin_lock_init(&wl
->wl_lock
);
3334 wl
->state
= WL1271_STATE_OFF
;
3335 mutex_init(&wl
->mutex
);
3337 /* Apply default driver configuration. */
3338 wl1271_conf_init(wl
);
3340 order
= get_order(WL1271_AGGR_BUFFER_SIZE
);
3341 wl
->aggr_buf
= (u8
*)__get_free_pages(GFP_KERNEL
, order
);
3342 if (!wl
->aggr_buf
) {
3347 /* Register platform device */
3348 ret
= platform_device_register(wl
->plat_dev
);
3350 wl1271_error("couldn't register platform device");
3353 dev_set_drvdata(&wl
->plat_dev
->dev
, wl
);
3355 /* Create sysfs file to control bt coex state */
3356 ret
= device_create_file(&wl
->plat_dev
->dev
, &dev_attr_bt_coex_state
);
3358 wl1271_error("failed to create sysfs file bt_coex_state");
3362 /* Create sysfs file to get HW PG version */
3363 ret
= device_create_file(&wl
->plat_dev
->dev
, &dev_attr_hw_pg_ver
);
3365 wl1271_error("failed to create sysfs file hw_pg_ver");
3366 goto err_bt_coex_state
;
3372 device_remove_file(&wl
->plat_dev
->dev
, &dev_attr_bt_coex_state
);
3375 platform_device_unregister(wl
->plat_dev
);
3378 free_pages((unsigned long)wl
->aggr_buf
, order
);
3381 wl1271_debugfs_exit(wl
);
3385 ieee80211_free_hw(hw
);
3389 return ERR_PTR(ret
);
3391 EXPORT_SYMBOL_GPL(wl1271_alloc_hw
);
3393 int wl1271_free_hw(struct wl1271
*wl
)
3395 platform_device_unregister(wl
->plat_dev
);
3396 free_pages((unsigned long)wl
->aggr_buf
,
3397 get_order(WL1271_AGGR_BUFFER_SIZE
));
3398 kfree(wl
->plat_dev
);
3400 wl1271_debugfs_exit(wl
);
3407 kfree(wl
->fw_status
);
3408 kfree(wl
->tx_res_if
);
3410 ieee80211_free_hw(wl
->hw
);
3414 EXPORT_SYMBOL_GPL(wl1271_free_hw
);
3416 u32 wl12xx_debug_level
= DEBUG_NONE
;
3417 EXPORT_SYMBOL_GPL(wl12xx_debug_level
);
3418 module_param_named(debug_level
, wl12xx_debug_level
, uint
, S_IRUSR
| S_IWUSR
);
3419 MODULE_PARM_DESC(debug_level
, "wl12xx debugging level");
3421 MODULE_LICENSE("GPL");
3422 MODULE_AUTHOR("Luciano Coelho <coelho@ti.com>");
3423 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");