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,
303 .min_req_tx_blocks
= 104,
304 .min_req_rx_blocks
= 22,
309 static void __wl1271_op_remove_interface(struct wl1271
*wl
);
310 static void wl1271_free_ap_keys(struct wl1271
*wl
);
313 static void wl1271_device_release(struct device
*dev
)
318 static struct platform_device wl1271_device
= {
322 /* device model insists to have a release function */
324 .release
= wl1271_device_release
,
328 static LIST_HEAD(wl_list
);
330 static int wl1271_dev_notify(struct notifier_block
*me
, unsigned long what
,
333 struct net_device
*dev
= arg
;
334 struct wireless_dev
*wdev
;
336 struct ieee80211_hw
*hw
;
338 struct wl1271
*wl_temp
;
341 /* Check that this notification is for us. */
342 if (what
!= NETDEV_CHANGE
)
345 wdev
= dev
->ieee80211_ptr
;
353 hw
= wiphy_priv(wiphy
);
358 list_for_each_entry(wl
, &wl_list
, list
) {
365 mutex_lock(&wl
->mutex
);
367 if (wl
->state
== WL1271_STATE_OFF
)
370 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
373 ret
= wl1271_ps_elp_wakeup(wl
, false);
377 if ((dev
->operstate
== IF_OPER_UP
) &&
378 !test_and_set_bit(WL1271_FLAG_STA_STATE_SENT
, &wl
->flags
)) {
379 wl1271_cmd_set_sta_state(wl
);
380 wl1271_info("Association completed.");
383 wl1271_ps_elp_sleep(wl
);
386 mutex_unlock(&wl
->mutex
);
391 static int wl1271_reg_notify(struct wiphy
*wiphy
,
392 struct regulatory_request
*request
)
394 struct ieee80211_supported_band
*band
;
395 struct ieee80211_channel
*ch
;
398 band
= wiphy
->bands
[IEEE80211_BAND_5GHZ
];
399 for (i
= 0; i
< band
->n_channels
; i
++) {
400 ch
= &band
->channels
[i
];
401 if (ch
->flags
& IEEE80211_CHAN_DISABLED
)
404 if (ch
->flags
& IEEE80211_CHAN_RADAR
)
405 ch
->flags
|= IEEE80211_CHAN_NO_IBSS
|
406 IEEE80211_CHAN_PASSIVE_SCAN
;
413 static void wl1271_conf_init(struct wl1271
*wl
)
417 * This function applies the default configuration to the driver. This
418 * function is invoked upon driver load (spi probe.)
420 * The configuration is stored in a run-time structure in order to
421 * facilitate for run-time adjustment of any of the parameters. Making
422 * changes to the configuration structure will apply the new values on
423 * the next interface up (wl1271_op_start.)
426 /* apply driver default configuration */
427 memcpy(&wl
->conf
, &default_conf
, sizeof(default_conf
));
431 static int wl1271_plt_init(struct wl1271
*wl
)
433 struct conf_tx_ac_category
*conf_ac
;
434 struct conf_tx_tid
*conf_tid
;
437 ret
= wl1271_cmd_general_parms(wl
);
441 ret
= wl1271_cmd_radio_parms(wl
);
445 ret
= wl1271_cmd_ext_radio_parms(wl
);
449 ret
= wl1271_sta_init_templates_config(wl
);
453 ret
= wl1271_acx_init_mem_config(wl
);
457 /* PHY layer config */
458 ret
= wl1271_init_phy_config(wl
);
460 goto out_free_memmap
;
462 ret
= wl1271_acx_dco_itrim_params(wl
);
464 goto out_free_memmap
;
466 /* Initialize connection monitoring thresholds */
467 ret
= wl1271_acx_conn_monit_params(wl
, false);
469 goto out_free_memmap
;
471 /* Bluetooth WLAN coexistence */
472 ret
= wl1271_init_pta(wl
);
474 goto out_free_memmap
;
476 /* Energy detection */
477 ret
= wl1271_init_energy_detection(wl
);
479 goto out_free_memmap
;
481 /* Default fragmentation threshold */
482 ret
= wl1271_acx_frag_threshold(wl
, wl
->conf
.tx
.frag_threshold
);
484 goto out_free_memmap
;
486 /* Default TID/AC configuration */
487 BUG_ON(wl
->conf
.tx
.tid_conf_count
!= wl
->conf
.tx
.ac_conf_count
);
488 for (i
= 0; i
< wl
->conf
.tx
.tid_conf_count
; i
++) {
489 conf_ac
= &wl
->conf
.tx
.ac_conf
[i
];
490 ret
= wl1271_acx_ac_cfg(wl
, conf_ac
->ac
, conf_ac
->cw_min
,
491 conf_ac
->cw_max
, conf_ac
->aifsn
,
492 conf_ac
->tx_op_limit
);
494 goto out_free_memmap
;
496 conf_tid
= &wl
->conf
.tx
.tid_conf
[i
];
497 ret
= wl1271_acx_tid_cfg(wl
, conf_tid
->queue_id
,
498 conf_tid
->channel_type
,
501 conf_tid
->ack_policy
,
502 conf_tid
->apsd_conf
[0],
503 conf_tid
->apsd_conf
[1]);
505 goto out_free_memmap
;
508 /* Enable data path */
509 ret
= wl1271_cmd_data_path(wl
, 1);
511 goto out_free_memmap
;
513 /* Configure for CAM power saving (ie. always active) */
514 ret
= wl1271_acx_sleep_auth(wl
, WL1271_PSM_CAM
);
516 goto out_free_memmap
;
519 ret
= wl1271_acx_pm_config(wl
);
521 goto out_free_memmap
;
526 kfree(wl
->target_mem_map
);
527 wl
->target_mem_map
= NULL
;
532 static void wl1271_fw_status(struct wl1271
*wl
,
533 struct wl1271_fw_full_status
*full_status
)
535 struct wl1271_fw_common_status
*status
= &full_status
->common
;
540 if (wl
->bss_type
== BSS_TYPE_AP_BSS
)
541 wl1271_raw_read(wl
, FW_STATUS_ADDR
, status
,
542 sizeof(struct wl1271_fw_ap_status
), false);
544 wl1271_raw_read(wl
, FW_STATUS_ADDR
, status
,
545 sizeof(struct wl1271_fw_sta_status
), false);
547 wl1271_debug(DEBUG_IRQ
, "intr: 0x%x (fw_rx_counter = %d, "
548 "drv_rx_counter = %d, tx_results_counter = %d)",
550 status
->fw_rx_counter
,
551 status
->drv_rx_counter
,
552 status
->tx_results_counter
);
554 /* update number of available TX blocks */
555 for (i
= 0; i
< NUM_TX_QUEUES
; i
++) {
556 u32 cnt
= le32_to_cpu(status
->tx_released_blks
[i
]) -
557 wl
->tx_blocks_freed
[i
];
559 wl
->tx_blocks_freed
[i
] =
560 le32_to_cpu(status
->tx_released_blks
[i
]);
561 wl
->tx_blocks_available
+= cnt
;
565 /* if more blocks are available now, tx work can be scheduled */
567 clear_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
);
569 /* update the host-chipset time offset */
571 wl
->time_offset
= (timespec_to_ns(&ts
) >> 10) -
572 (s64
)le32_to_cpu(status
->fw_localtime
);
575 #define WL1271_IRQ_MAX_LOOPS 10
577 static void wl1271_irq_work(struct work_struct
*work
)
581 int loopcount
= WL1271_IRQ_MAX_LOOPS
;
584 container_of(work
, struct wl1271
, irq_work
);
586 mutex_lock(&wl
->mutex
);
588 wl1271_debug(DEBUG_IRQ
, "IRQ work");
590 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
593 ret
= wl1271_ps_elp_wakeup(wl
, true);
597 spin_lock_irqsave(&wl
->wl_lock
, flags
);
598 while (test_bit(WL1271_FLAG_IRQ_PENDING
, &wl
->flags
) && loopcount
) {
599 clear_bit(WL1271_FLAG_IRQ_PENDING
, &wl
->flags
);
600 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
603 wl1271_fw_status(wl
, wl
->fw_status
);
604 intr
= le32_to_cpu(wl
->fw_status
->common
.intr
);
606 wl1271_debug(DEBUG_IRQ
, "Zero interrupt received.");
607 spin_lock_irqsave(&wl
->wl_lock
, flags
);
611 intr
&= WL1271_INTR_MASK
;
613 if (unlikely(intr
& WL1271_ACX_INTR_WATCHDOG
)) {
614 wl1271_error("watchdog interrupt received! "
615 "starting recovery.");
616 ieee80211_queue_work(wl
->hw
, &wl
->recovery_work
);
618 /* restarting the chip. ignore any other interrupt. */
622 if (intr
& WL1271_ACX_INTR_DATA
) {
623 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_DATA");
625 /* check for tx results */
626 if (wl
->fw_status
->common
.tx_results_counter
!=
627 (wl
->tx_results_count
& 0xff))
628 wl1271_tx_complete(wl
);
630 /* Check if any tx blocks were freed */
631 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
) &&
632 wl
->tx_queue_count
) {
634 * In order to avoid starvation of the TX path,
635 * call the work function directly.
637 wl1271_tx_work_locked(wl
);
640 wl1271_rx(wl
, &wl
->fw_status
->common
);
643 if (intr
& WL1271_ACX_INTR_EVENT_A
) {
644 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_EVENT_A");
645 wl1271_event_handle(wl
, 0);
648 if (intr
& WL1271_ACX_INTR_EVENT_B
) {
649 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_EVENT_B");
650 wl1271_event_handle(wl
, 1);
653 if (intr
& WL1271_ACX_INTR_INIT_COMPLETE
)
654 wl1271_debug(DEBUG_IRQ
,
655 "WL1271_ACX_INTR_INIT_COMPLETE");
657 if (intr
& WL1271_ACX_INTR_HW_AVAILABLE
)
658 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_HW_AVAILABLE");
660 spin_lock_irqsave(&wl
->wl_lock
, flags
);
663 if (test_bit(WL1271_FLAG_IRQ_PENDING
, &wl
->flags
))
664 ieee80211_queue_work(wl
->hw
, &wl
->irq_work
);
666 clear_bit(WL1271_FLAG_IRQ_RUNNING
, &wl
->flags
);
667 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
669 wl1271_ps_elp_sleep(wl
);
672 mutex_unlock(&wl
->mutex
);
675 static int wl1271_fetch_firmware(struct wl1271
*wl
)
677 const struct firmware
*fw
;
681 switch (wl
->bss_type
) {
682 case BSS_TYPE_AP_BSS
:
683 fw_name
= WL1271_AP_FW_NAME
;
686 case BSS_TYPE_STA_BSS
:
687 fw_name
= WL1271_FW_NAME
;
690 wl1271_error("no compatible firmware for bss_type %d",
695 wl1271_debug(DEBUG_BOOT
, "booting firmware %s", fw_name
);
697 ret
= request_firmware(&fw
, fw_name
, wl1271_wl_to_dev(wl
));
700 wl1271_error("could not get firmware: %d", ret
);
705 wl1271_error("firmware size is not multiple of 32 bits: %zu",
712 wl
->fw_len
= fw
->size
;
713 wl
->fw
= vmalloc(wl
->fw_len
);
716 wl1271_error("could not allocate memory for the firmware");
721 memcpy(wl
->fw
, fw
->data
, wl
->fw_len
);
722 wl
->fw_bss_type
= wl
->bss_type
;
726 release_firmware(fw
);
731 static int wl1271_fetch_nvs(struct wl1271
*wl
)
733 const struct firmware
*fw
;
736 ret
= request_firmware(&fw
, WL1271_NVS_NAME
, wl1271_wl_to_dev(wl
));
739 wl1271_error("could not get nvs file: %d", ret
);
743 wl
->nvs
= kmemdup(fw
->data
, sizeof(struct wl1271_nvs_file
), GFP_KERNEL
);
746 wl1271_error("could not allocate memory for the nvs file");
751 wl
->nvs_len
= fw
->size
;
754 release_firmware(fw
);
759 static void wl1271_recovery_work(struct work_struct
*work
)
762 container_of(work
, struct wl1271
, recovery_work
);
764 mutex_lock(&wl
->mutex
);
766 if (wl
->state
!= WL1271_STATE_ON
)
769 wl1271_info("Hardware recovery in progress.");
771 if (test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
772 ieee80211_connection_loss(wl
->vif
);
774 /* reboot the chipset */
775 __wl1271_op_remove_interface(wl
);
776 ieee80211_restart_hw(wl
->hw
);
779 mutex_unlock(&wl
->mutex
);
782 static void wl1271_fw_wakeup(struct wl1271
*wl
)
786 elp_reg
= ELPCTRL_WAKE_UP
;
787 wl1271_raw_write32(wl
, HW_ACCESS_ELP_CTRL_REG_ADDR
, elp_reg
);
790 static int wl1271_setup(struct wl1271
*wl
)
792 wl
->fw_status
= kmalloc(sizeof(*wl
->fw_status
), GFP_KERNEL
);
796 wl
->tx_res_if
= kmalloc(sizeof(*wl
->tx_res_if
), GFP_KERNEL
);
797 if (!wl
->tx_res_if
) {
798 kfree(wl
->fw_status
);
805 static int wl1271_chip_wakeup(struct wl1271
*wl
)
807 struct wl1271_partition_set partition
;
810 msleep(WL1271_PRE_POWER_ON_SLEEP
);
811 ret
= wl1271_power_on(wl
);
814 msleep(WL1271_POWER_ON_SLEEP
);
818 /* We don't need a real memory partition here, because we only want
819 * to use the registers at this point. */
820 memset(&partition
, 0, sizeof(partition
));
821 partition
.reg
.start
= REGISTERS_BASE
;
822 partition
.reg
.size
= REGISTERS_DOWN_SIZE
;
823 wl1271_set_partition(wl
, &partition
);
825 /* ELP module wake up */
826 wl1271_fw_wakeup(wl
);
828 /* whal_FwCtrl_BootSm() */
830 /* 0. read chip id from CHIP_ID */
831 wl
->chip
.id
= wl1271_read32(wl
, CHIP_ID_B
);
833 /* 1. check if chip id is valid */
835 switch (wl
->chip
.id
) {
836 case CHIP_ID_1271_PG10
:
837 wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
840 ret
= wl1271_setup(wl
);
844 case CHIP_ID_1271_PG20
:
845 wl1271_debug(DEBUG_BOOT
, "chip id 0x%x (1271 PG20)",
848 ret
= wl1271_setup(wl
);
853 wl1271_warning("unsupported chip id: 0x%x", wl
->chip
.id
);
858 /* Make sure the firmware type matches the BSS type */
859 if (wl
->fw
== NULL
|| wl
->fw_bss_type
!= wl
->bss_type
) {
860 ret
= wl1271_fetch_firmware(wl
);
865 /* No NVS from netlink, try to get it from the filesystem */
866 if (wl
->nvs
== NULL
) {
867 ret
= wl1271_fetch_nvs(wl
);
876 int wl1271_plt_start(struct wl1271
*wl
)
878 int retries
= WL1271_BOOT_RETRIES
;
881 mutex_lock(&wl
->mutex
);
883 wl1271_notice("power up");
885 if (wl
->state
!= WL1271_STATE_OFF
) {
886 wl1271_error("cannot go into PLT state because not "
887 "in off state: %d", wl
->state
);
892 wl
->bss_type
= BSS_TYPE_STA_BSS
;
896 ret
= wl1271_chip_wakeup(wl
);
900 ret
= wl1271_boot(wl
);
904 ret
= wl1271_plt_init(wl
);
908 wl
->state
= WL1271_STATE_PLT
;
909 wl1271_notice("firmware booted in PLT mode (%s)",
910 wl
->chip
.fw_ver_str
);
914 wl1271_disable_interrupts(wl
);
915 mutex_unlock(&wl
->mutex
);
916 /* Unlocking the mutex in the middle of handling is
917 inherently unsafe. In this case we deem it safe to do,
918 because we need to let any possibly pending IRQ out of
919 the system (and while we are WL1271_STATE_OFF the IRQ
920 work function will not do anything.) Also, any other
921 possible concurrent operations will fail due to the
922 current state, hence the wl1271 struct should be safe. */
923 cancel_work_sync(&wl
->irq_work
);
924 mutex_lock(&wl
->mutex
);
926 wl1271_power_off(wl
);
929 wl1271_error("firmware boot in PLT mode failed despite %d retries",
930 WL1271_BOOT_RETRIES
);
932 mutex_unlock(&wl
->mutex
);
937 int __wl1271_plt_stop(struct wl1271
*wl
)
941 wl1271_notice("power down");
943 if (wl
->state
!= WL1271_STATE_PLT
) {
944 wl1271_error("cannot power down because not in PLT "
945 "state: %d", wl
->state
);
950 wl1271_disable_interrupts(wl
);
951 wl1271_power_off(wl
);
953 wl
->state
= WL1271_STATE_OFF
;
956 mutex_unlock(&wl
->mutex
);
957 cancel_work_sync(&wl
->irq_work
);
958 cancel_work_sync(&wl
->recovery_work
);
959 mutex_lock(&wl
->mutex
);
964 int wl1271_plt_stop(struct wl1271
*wl
)
968 mutex_lock(&wl
->mutex
);
969 ret
= __wl1271_plt_stop(wl
);
970 mutex_unlock(&wl
->mutex
);
974 static int wl1271_op_tx(struct ieee80211_hw
*hw
, struct sk_buff
*skb
)
976 struct wl1271
*wl
= hw
->priv
;
977 struct ieee80211_conf
*conf
= &hw
->conf
;
978 struct ieee80211_tx_info
*txinfo
= IEEE80211_SKB_CB(skb
);
979 struct ieee80211_sta
*sta
= txinfo
->control
.sta
;
984 * peek into the rates configured in the STA entry.
985 * The rates set after connection stage, The first block only BG sets:
986 * the compare is for bit 0-16 of sta_rate_set. The second block add
987 * HT rates in case of HT supported.
989 spin_lock_irqsave(&wl
->wl_lock
, flags
);
991 (sta
->supp_rates
[conf
->channel
->band
] !=
992 (wl
->sta_rate_set
& HW_BG_RATES_MASK
)) &&
993 wl
->bss_type
!= BSS_TYPE_AP_BSS
) {
994 wl
->sta_rate_set
= sta
->supp_rates
[conf
->channel
->band
];
995 set_bit(WL1271_FLAG_STA_RATES_CHANGED
, &wl
->flags
);
998 #ifdef CONFIG_WL12XX_HT
1000 sta
->ht_cap
.ht_supported
&&
1001 ((wl
->sta_rate_set
>> HW_HT_RATES_OFFSET
) !=
1002 sta
->ht_cap
.mcs
.rx_mask
[0])) {
1003 /* Clean MCS bits before setting them */
1004 wl
->sta_rate_set
&= HW_BG_RATES_MASK
;
1006 (sta
->ht_cap
.mcs
.rx_mask
[0] << HW_HT_RATES_OFFSET
);
1007 set_bit(WL1271_FLAG_STA_RATES_CHANGED
, &wl
->flags
);
1010 wl
->tx_queue_count
++;
1011 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
1013 /* queue the packet */
1014 q
= wl1271_tx_get_queue(skb_get_queue_mapping(skb
));
1015 skb_queue_tail(&wl
->tx_queue
[q
], skb
);
1018 * The chip specific setup must run before the first TX packet -
1019 * before that, the tx_work will not be initialized!
1022 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
))
1023 ieee80211_queue_work(wl
->hw
, &wl
->tx_work
);
1026 * The workqueue is slow to process the tx_queue and we need stop
1027 * the queue here, otherwise the queue will get too long.
1029 if (wl
->tx_queue_count
>= WL1271_TX_QUEUE_HIGH_WATERMARK
) {
1030 wl1271_debug(DEBUG_TX
, "op_tx: stopping queues");
1032 spin_lock_irqsave(&wl
->wl_lock
, flags
);
1033 ieee80211_stop_queues(wl
->hw
);
1034 set_bit(WL1271_FLAG_TX_QUEUE_STOPPED
, &wl
->flags
);
1035 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
1038 return NETDEV_TX_OK
;
1041 static struct notifier_block wl1271_dev_notifier
= {
1042 .notifier_call
= wl1271_dev_notify
,
1045 static int wl1271_op_start(struct ieee80211_hw
*hw
)
1047 wl1271_debug(DEBUG_MAC80211
, "mac80211 start");
1050 * We have to delay the booting of the hardware because
1051 * we need to know the local MAC address before downloading and
1052 * initializing the firmware. The MAC address cannot be changed
1053 * after boot, and without the proper MAC address, the firmware
1054 * will not function properly.
1056 * The MAC address is first known when the corresponding interface
1057 * is added. That is where we will initialize the hardware.
1059 * In addition, we currently have different firmwares for AP and managed
1060 * operation. We will know which to boot according to interface type.
1066 static void wl1271_op_stop(struct ieee80211_hw
*hw
)
1068 wl1271_debug(DEBUG_MAC80211
, "mac80211 stop");
1071 static int wl1271_op_add_interface(struct ieee80211_hw
*hw
,
1072 struct ieee80211_vif
*vif
)
1074 struct wl1271
*wl
= hw
->priv
;
1075 struct wiphy
*wiphy
= hw
->wiphy
;
1076 int retries
= WL1271_BOOT_RETRIES
;
1078 bool booted
= false;
1080 wl1271_debug(DEBUG_MAC80211
, "mac80211 add interface type %d mac %pM",
1081 vif
->type
, vif
->addr
);
1083 mutex_lock(&wl
->mutex
);
1085 wl1271_debug(DEBUG_MAC80211
,
1086 "multiple vifs are not supported yet");
1091 switch (vif
->type
) {
1092 case NL80211_IFTYPE_STATION
:
1093 wl
->bss_type
= BSS_TYPE_STA_BSS
;
1094 wl
->set_bss_type
= BSS_TYPE_STA_BSS
;
1096 case NL80211_IFTYPE_ADHOC
:
1097 wl
->bss_type
= BSS_TYPE_IBSS
;
1098 wl
->set_bss_type
= BSS_TYPE_STA_BSS
;
1100 case NL80211_IFTYPE_AP
:
1101 wl
->bss_type
= BSS_TYPE_AP_BSS
;
1108 memcpy(wl
->mac_addr
, vif
->addr
, ETH_ALEN
);
1110 if (wl
->state
!= WL1271_STATE_OFF
) {
1111 wl1271_error("cannot start because not in off state: %d",
1119 ret
= wl1271_chip_wakeup(wl
);
1123 ret
= wl1271_boot(wl
);
1127 ret
= wl1271_hw_init(wl
);
1135 wl1271_disable_interrupts(wl
);
1136 mutex_unlock(&wl
->mutex
);
1137 /* Unlocking the mutex in the middle of handling is
1138 inherently unsafe. In this case we deem it safe to do,
1139 because we need to let any possibly pending IRQ out of
1140 the system (and while we are WL1271_STATE_OFF the IRQ
1141 work function will not do anything.) Also, any other
1142 possible concurrent operations will fail due to the
1143 current state, hence the wl1271 struct should be safe. */
1144 cancel_work_sync(&wl
->irq_work
);
1145 mutex_lock(&wl
->mutex
);
1147 wl1271_power_off(wl
);
1151 wl1271_error("firmware boot failed despite %d retries",
1152 WL1271_BOOT_RETRIES
);
1157 wl
->state
= WL1271_STATE_ON
;
1158 wl1271_info("firmware booted (%s)", wl
->chip
.fw_ver_str
);
1160 /* update hw/fw version info in wiphy struct */
1161 wiphy
->hw_version
= wl
->chip
.id
;
1162 strncpy(wiphy
->fw_version
, wl
->chip
.fw_ver_str
,
1163 sizeof(wiphy
->fw_version
));
1166 * Now we know if 11a is supported (info from the NVS), so disable
1167 * 11a channels if not supported
1169 if (!wl
->enable_11a
)
1170 wiphy
->bands
[IEEE80211_BAND_5GHZ
]->n_channels
= 0;
1172 wl1271_debug(DEBUG_MAC80211
, "11a is %ssupported",
1173 wl
->enable_11a
? "" : "not ");
1176 mutex_unlock(&wl
->mutex
);
1179 list_add(&wl
->list
, &wl_list
);
1184 static void __wl1271_op_remove_interface(struct wl1271
*wl
)
1188 wl1271_debug(DEBUG_MAC80211
, "mac80211 remove interface");
1190 wl1271_info("down");
1192 list_del(&wl
->list
);
1194 WARN_ON(wl
->state
!= WL1271_STATE_ON
);
1196 /* enable dyn ps just in case (if left on due to fw crash etc) */
1197 if (wl
->bss_type
== BSS_TYPE_STA_BSS
)
1198 ieee80211_enable_dyn_ps(wl
->vif
);
1200 if (wl
->scan
.state
!= WL1271_SCAN_STATE_IDLE
) {
1201 wl
->scan
.state
= WL1271_SCAN_STATE_IDLE
;
1202 kfree(wl
->scan
.scanned_ch
);
1203 wl
->scan
.scanned_ch
= NULL
;
1204 wl
->scan
.req
= NULL
;
1205 ieee80211_scan_completed(wl
->hw
, true);
1208 wl
->state
= WL1271_STATE_OFF
;
1210 wl1271_disable_interrupts(wl
);
1212 mutex_unlock(&wl
->mutex
);
1214 cancel_delayed_work_sync(&wl
->scan_complete_work
);
1215 cancel_work_sync(&wl
->irq_work
);
1216 cancel_work_sync(&wl
->tx_work
);
1217 cancel_delayed_work_sync(&wl
->pspoll_work
);
1218 cancel_delayed_work_sync(&wl
->elp_work
);
1220 mutex_lock(&wl
->mutex
);
1222 /* let's notify MAC80211 about the remaining pending TX frames */
1223 wl1271_tx_reset(wl
);
1224 wl1271_power_off(wl
);
1226 memset(wl
->bssid
, 0, ETH_ALEN
);
1227 memset(wl
->ssid
, 0, IW_ESSID_MAX_SIZE
+ 1);
1229 wl
->bss_type
= MAX_BSS_TYPE
;
1230 wl
->set_bss_type
= MAX_BSS_TYPE
;
1231 wl
->band
= IEEE80211_BAND_2GHZ
;
1234 wl
->psm_entry_retry
= 0;
1235 wl
->power_level
= WL1271_DEFAULT_POWER_LEVEL
;
1236 wl
->tx_blocks_available
= 0;
1237 wl
->tx_results_count
= 0;
1238 wl
->tx_packets_count
= 0;
1239 wl
->tx_security_last_seq
= 0;
1240 wl
->tx_security_seq
= 0;
1241 wl
->time_offset
= 0;
1242 wl
->session_counter
= 0;
1243 wl
->rate_set
= CONF_TX_RATE_MASK_BASIC
;
1244 wl
->sta_rate_set
= 0;
1248 wl1271_free_ap_keys(wl
);
1249 memset(wl
->ap_hlid_map
, 0, sizeof(wl
->ap_hlid_map
));
1251 for (i
= 0; i
< NUM_TX_QUEUES
; i
++)
1252 wl
->tx_blocks_freed
[i
] = 0;
1254 wl1271_debugfs_reset(wl
);
1256 kfree(wl
->fw_status
);
1257 wl
->fw_status
= NULL
;
1258 kfree(wl
->tx_res_if
);
1259 wl
->tx_res_if
= NULL
;
1260 kfree(wl
->target_mem_map
);
1261 wl
->target_mem_map
= NULL
;
1264 static void wl1271_op_remove_interface(struct ieee80211_hw
*hw
,
1265 struct ieee80211_vif
*vif
)
1267 struct wl1271
*wl
= hw
->priv
;
1269 mutex_lock(&wl
->mutex
);
1271 * wl->vif can be null here if someone shuts down the interface
1272 * just when hardware recovery has been started.
1275 WARN_ON(wl
->vif
!= vif
);
1276 __wl1271_op_remove_interface(wl
);
1279 mutex_unlock(&wl
->mutex
);
1280 cancel_work_sync(&wl
->recovery_work
);
1283 static void wl1271_configure_filters(struct wl1271
*wl
, unsigned int filters
)
1285 wl1271_set_default_filters(wl
);
1287 /* combine requested filters with current filter config */
1288 filters
= wl
->filters
| filters
;
1290 wl1271_debug(DEBUG_FILTERS
, "RX filters set: ");
1292 if (filters
& FIF_PROMISC_IN_BSS
) {
1293 wl1271_debug(DEBUG_FILTERS
, " - FIF_PROMISC_IN_BSS");
1294 wl
->rx_config
&= ~CFG_UNI_FILTER_EN
;
1295 wl
->rx_config
|= CFG_BSSID_FILTER_EN
;
1297 if (filters
& FIF_BCN_PRBRESP_PROMISC
) {
1298 wl1271_debug(DEBUG_FILTERS
, " - FIF_BCN_PRBRESP_PROMISC");
1299 wl
->rx_config
&= ~CFG_BSSID_FILTER_EN
;
1300 wl
->rx_config
&= ~CFG_SSID_FILTER_EN
;
1302 if (filters
& FIF_OTHER_BSS
) {
1303 wl1271_debug(DEBUG_FILTERS
, " - FIF_OTHER_BSS");
1304 wl
->rx_config
&= ~CFG_BSSID_FILTER_EN
;
1306 if (filters
& FIF_CONTROL
) {
1307 wl1271_debug(DEBUG_FILTERS
, " - FIF_CONTROL");
1308 wl
->rx_filter
|= CFG_RX_CTL_EN
;
1310 if (filters
& FIF_FCSFAIL
) {
1311 wl1271_debug(DEBUG_FILTERS
, " - FIF_FCSFAIL");
1312 wl
->rx_filter
|= CFG_RX_FCS_ERROR
;
1316 static int wl1271_dummy_join(struct wl1271
*wl
)
1319 /* we need to use a dummy BSSID for now */
1320 static const u8 dummy_bssid
[ETH_ALEN
] = { 0x0b, 0xad, 0xde,
1323 memcpy(wl
->bssid
, dummy_bssid
, ETH_ALEN
);
1325 /* pass through frames from all BSS */
1326 wl1271_configure_filters(wl
, FIF_OTHER_BSS
);
1328 ret
= wl1271_cmd_join(wl
, wl
->set_bss_type
);
1332 set_bit(WL1271_FLAG_JOINED
, &wl
->flags
);
1338 static int wl1271_join(struct wl1271
*wl
, bool set_assoc
)
1343 * One of the side effects of the JOIN command is that is clears
1344 * WPA/WPA2 keys from the chipset. Performing a JOIN while associated
1345 * to a WPA/WPA2 access point will therefore kill the data-path.
1346 * Currently there is no supported scenario for JOIN during
1347 * association - if it becomes a supported scenario, the WPA/WPA2 keys
1348 * must be handled somehow.
1351 if (test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
1352 wl1271_info("JOIN while associated.");
1355 set_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
);
1357 ret
= wl1271_cmd_join(wl
, wl
->set_bss_type
);
1361 set_bit(WL1271_FLAG_JOINED
, &wl
->flags
);
1363 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
1367 * The join command disable the keep-alive mode, shut down its process,
1368 * and also clear the template config, so we need to reset it all after
1369 * the join. The acx_aid starts the keep-alive process, and the order
1370 * of the commands below is relevant.
1372 ret
= wl1271_acx_keep_alive_mode(wl
, true);
1376 ret
= wl1271_acx_aid(wl
, wl
->aid
);
1380 ret
= wl1271_cmd_build_klv_null_data(wl
);
1384 ret
= wl1271_acx_keep_alive_config(wl
, CMD_TEMPL_KLV_IDX_NULL_DATA
,
1385 ACX_KEEP_ALIVE_TPL_VALID
);
1393 static int wl1271_unjoin(struct wl1271
*wl
)
1397 /* to stop listening to a channel, we disconnect */
1398 ret
= wl1271_cmd_disconnect(wl
);
1402 clear_bit(WL1271_FLAG_JOINED
, &wl
->flags
);
1403 memset(wl
->bssid
, 0, ETH_ALEN
);
1405 /* stop filterting packets based on bssid */
1406 wl1271_configure_filters(wl
, FIF_OTHER_BSS
);
1412 static void wl1271_set_band_rate(struct wl1271
*wl
)
1414 if (wl
->band
== IEEE80211_BAND_2GHZ
)
1415 wl
->basic_rate_set
= wl
->conf
.tx
.basic_rate
;
1417 wl
->basic_rate_set
= wl
->conf
.tx
.basic_rate_5
;
1420 static int wl1271_sta_handle_idle(struct wl1271
*wl
, bool idle
)
1425 if (test_bit(WL1271_FLAG_JOINED
, &wl
->flags
)) {
1426 ret
= wl1271_unjoin(wl
);
1430 wl
->rate_set
= wl1271_tx_min_rate_get(wl
);
1431 wl
->sta_rate_set
= 0;
1432 ret
= wl1271_acx_sta_rate_policies(wl
);
1435 ret
= wl1271_acx_keep_alive_config(
1436 wl
, CMD_TEMPL_KLV_IDX_NULL_DATA
,
1437 ACX_KEEP_ALIVE_TPL_INVALID
);
1440 set_bit(WL1271_FLAG_IDLE
, &wl
->flags
);
1442 /* increment the session counter */
1443 wl
->session_counter
++;
1444 if (wl
->session_counter
>= SESSION_COUNTER_MAX
)
1445 wl
->session_counter
= 0;
1446 ret
= wl1271_dummy_join(wl
);
1449 clear_bit(WL1271_FLAG_IDLE
, &wl
->flags
);
1456 static int wl1271_op_config(struct ieee80211_hw
*hw
, u32 changed
)
1458 struct wl1271
*wl
= hw
->priv
;
1459 struct ieee80211_conf
*conf
= &hw
->conf
;
1460 int channel
, ret
= 0;
1463 channel
= ieee80211_frequency_to_channel(conf
->channel
->center_freq
);
1465 wl1271_debug(DEBUG_MAC80211
, "mac80211 config ch %d psm %s power %d %s"
1468 conf
->flags
& IEEE80211_CONF_PS
? "on" : "off",
1470 conf
->flags
& IEEE80211_CONF_IDLE
? "idle" : "in use",
1474 * mac80211 will go to idle nearly immediately after transmitting some
1475 * frames, such as the deauth. To make sure those frames reach the air,
1476 * wait here until the TX queue is fully flushed.
1478 if ((changed
& IEEE80211_CONF_CHANGE_IDLE
) &&
1479 (conf
->flags
& IEEE80211_CONF_IDLE
))
1480 wl1271_tx_flush(wl
);
1482 mutex_lock(&wl
->mutex
);
1484 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
1489 is_ap
= (wl
->bss_type
== BSS_TYPE_AP_BSS
);
1491 ret
= wl1271_ps_elp_wakeup(wl
, false);
1495 /* if the channel changes while joined, join again */
1496 if (changed
& IEEE80211_CONF_CHANGE_CHANNEL
&&
1497 ((wl
->band
!= conf
->channel
->band
) ||
1498 (wl
->channel
!= channel
))) {
1499 wl
->band
= conf
->channel
->band
;
1500 wl
->channel
= channel
;
1504 * FIXME: the mac80211 should really provide a fixed
1505 * rate to use here. for now, just use the smallest
1506 * possible rate for the band as a fixed rate for
1507 * association frames and other control messages.
1509 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
1510 wl1271_set_band_rate(wl
);
1512 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
1513 ret
= wl1271_acx_sta_rate_policies(wl
);
1515 wl1271_warning("rate policy for channel "
1518 if (test_bit(WL1271_FLAG_JOINED
, &wl
->flags
)) {
1519 ret
= wl1271_join(wl
, false);
1521 wl1271_warning("cmd join on channel "
1527 if (changed
& IEEE80211_CONF_CHANGE_IDLE
&& !is_ap
) {
1528 ret
= wl1271_sta_handle_idle(wl
,
1529 conf
->flags
& IEEE80211_CONF_IDLE
);
1531 wl1271_warning("idle mode change failed %d", ret
);
1535 * if mac80211 changes the PSM mode, make sure the mode is not
1536 * incorrectly changed after the pspoll failure active window.
1538 if (changed
& IEEE80211_CONF_CHANGE_PS
)
1539 clear_bit(WL1271_FLAG_PSPOLL_FAILURE
, &wl
->flags
);
1541 if (conf
->flags
& IEEE80211_CONF_PS
&&
1542 !test_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
)) {
1543 set_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
);
1546 * We enter PSM only if we're already associated.
1547 * If we're not, we'll enter it when joining an SSID,
1548 * through the bss_info_changed() hook.
1550 if (test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
)) {
1551 wl1271_debug(DEBUG_PSM
, "psm enabled");
1552 ret
= wl1271_ps_set_mode(wl
, STATION_POWER_SAVE_MODE
,
1553 wl
->basic_rate
, true);
1555 } else if (!(conf
->flags
& IEEE80211_CONF_PS
) &&
1556 test_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
)) {
1557 wl1271_debug(DEBUG_PSM
, "psm disabled");
1559 clear_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
);
1561 if (test_bit(WL1271_FLAG_PSM
, &wl
->flags
))
1562 ret
= wl1271_ps_set_mode(wl
, STATION_ACTIVE_MODE
,
1563 wl
->basic_rate
, true);
1566 if (conf
->power_level
!= wl
->power_level
) {
1567 ret
= wl1271_acx_tx_power(wl
, conf
->power_level
);
1571 wl
->power_level
= conf
->power_level
;
1575 wl1271_ps_elp_sleep(wl
);
1578 mutex_unlock(&wl
->mutex
);
1583 struct wl1271_filter_params
{
1586 u8 mc_list
[ACX_MC_ADDRESS_GROUP_MAX
][ETH_ALEN
];
1589 static u64
wl1271_op_prepare_multicast(struct ieee80211_hw
*hw
,
1590 struct netdev_hw_addr_list
*mc_list
)
1592 struct wl1271_filter_params
*fp
;
1593 struct netdev_hw_addr
*ha
;
1594 struct wl1271
*wl
= hw
->priv
;
1596 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
1599 fp
= kzalloc(sizeof(*fp
), GFP_ATOMIC
);
1601 wl1271_error("Out of memory setting filters.");
1605 /* update multicast filtering parameters */
1606 fp
->mc_list_length
= 0;
1607 if (netdev_hw_addr_list_count(mc_list
) > ACX_MC_ADDRESS_GROUP_MAX
) {
1608 fp
->enabled
= false;
1611 netdev_hw_addr_list_for_each(ha
, mc_list
) {
1612 memcpy(fp
->mc_list
[fp
->mc_list_length
],
1613 ha
->addr
, ETH_ALEN
);
1614 fp
->mc_list_length
++;
1618 return (u64
)(unsigned long)fp
;
1621 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
1624 FIF_BCN_PRBRESP_PROMISC | \
1628 static void wl1271_op_configure_filter(struct ieee80211_hw
*hw
,
1629 unsigned int changed
,
1630 unsigned int *total
, u64 multicast
)
1632 struct wl1271_filter_params
*fp
= (void *)(unsigned long)multicast
;
1633 struct wl1271
*wl
= hw
->priv
;
1636 wl1271_debug(DEBUG_MAC80211
, "mac80211 configure filter changed %x"
1637 " total %x", changed
, *total
);
1639 mutex_lock(&wl
->mutex
);
1641 *total
&= WL1271_SUPPORTED_FILTERS
;
1642 changed
&= WL1271_SUPPORTED_FILTERS
;
1644 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
1647 ret
= wl1271_ps_elp_wakeup(wl
, false);
1651 if (wl
->bss_type
!= BSS_TYPE_AP_BSS
) {
1652 if (*total
& FIF_ALLMULTI
)
1653 ret
= wl1271_acx_group_address_tbl(wl
, false, NULL
, 0);
1655 ret
= wl1271_acx_group_address_tbl(wl
, fp
->enabled
,
1657 fp
->mc_list_length
);
1662 /* determine, whether supported filter values have changed */
1666 /* configure filters */
1667 wl
->filters
= *total
;
1668 wl1271_configure_filters(wl
, 0);
1670 /* apply configured filters */
1671 ret
= wl1271_acx_rx_config(wl
, wl
->rx_config
, wl
->rx_filter
);
1676 wl1271_ps_elp_sleep(wl
);
1679 mutex_unlock(&wl
->mutex
);
1683 static int wl1271_record_ap_key(struct wl1271
*wl
, u8 id
, u8 key_type
,
1684 u8 key_size
, const u8
*key
, u8 hlid
, u32 tx_seq_32
,
1687 struct wl1271_ap_key
*ap_key
;
1690 wl1271_debug(DEBUG_CRYPT
, "record ap key id %d", (int)id
);
1692 if (key_size
> MAX_KEY_SIZE
)
1696 * Find next free entry in ap_keys. Also check we are not replacing
1699 for (i
= 0; i
< MAX_NUM_KEYS
; i
++) {
1700 if (wl
->recorded_ap_keys
[i
] == NULL
)
1703 if (wl
->recorded_ap_keys
[i
]->id
== id
) {
1704 wl1271_warning("trying to record key replacement");
1709 if (i
== MAX_NUM_KEYS
)
1712 ap_key
= kzalloc(sizeof(*ap_key
), GFP_KERNEL
);
1717 ap_key
->key_type
= key_type
;
1718 ap_key
->key_size
= key_size
;
1719 memcpy(ap_key
->key
, key
, key_size
);
1720 ap_key
->hlid
= hlid
;
1721 ap_key
->tx_seq_32
= tx_seq_32
;
1722 ap_key
->tx_seq_16
= tx_seq_16
;
1724 wl
->recorded_ap_keys
[i
] = ap_key
;
1728 static void wl1271_free_ap_keys(struct wl1271
*wl
)
1732 for (i
= 0; i
< MAX_NUM_KEYS
; i
++) {
1733 kfree(wl
->recorded_ap_keys
[i
]);
1734 wl
->recorded_ap_keys
[i
] = NULL
;
1738 static int wl1271_ap_init_hwenc(struct wl1271
*wl
)
1741 struct wl1271_ap_key
*key
;
1742 bool wep_key_added
= false;
1744 for (i
= 0; i
< MAX_NUM_KEYS
; i
++) {
1745 if (wl
->recorded_ap_keys
[i
] == NULL
)
1748 key
= wl
->recorded_ap_keys
[i
];
1749 ret
= wl1271_cmd_set_ap_key(wl
, KEY_ADD_OR_REPLACE
,
1750 key
->id
, key
->key_type
,
1751 key
->key_size
, key
->key
,
1752 key
->hlid
, key
->tx_seq_32
,
1757 if (key
->key_type
== KEY_WEP
)
1758 wep_key_added
= true;
1761 if (wep_key_added
) {
1762 ret
= wl1271_cmd_set_ap_default_wep_key(wl
, wl
->default_key
);
1768 wl1271_free_ap_keys(wl
);
1772 static int wl1271_set_key(struct wl1271
*wl
, u16 action
, u8 id
, u8 key_type
,
1773 u8 key_size
, const u8
*key
, u32 tx_seq_32
,
1774 u16 tx_seq_16
, struct ieee80211_sta
*sta
)
1777 bool is_ap
= (wl
->bss_type
== BSS_TYPE_AP_BSS
);
1780 struct wl1271_station
*wl_sta
;
1784 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
1785 hlid
= wl_sta
->hlid
;
1787 hlid
= WL1271_AP_BROADCAST_HLID
;
1790 if (!test_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
)) {
1792 * We do not support removing keys after AP shutdown.
1793 * Pretend we do to make mac80211 happy.
1795 if (action
!= KEY_ADD_OR_REPLACE
)
1798 ret
= wl1271_record_ap_key(wl
, id
,
1800 key
, hlid
, tx_seq_32
,
1803 ret
= wl1271_cmd_set_ap_key(wl
, action
,
1804 id
, key_type
, key_size
,
1805 key
, hlid
, tx_seq_32
,
1813 static const u8 bcast_addr
[ETH_ALEN
] = {
1814 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
1817 addr
= sta
? sta
->addr
: bcast_addr
;
1819 if (is_zero_ether_addr(addr
)) {
1820 /* We dont support TX only encryption */
1824 /* The wl1271 does not allow to remove unicast keys - they
1825 will be cleared automatically on next CMD_JOIN. Ignore the
1826 request silently, as we dont want the mac80211 to emit
1827 an error message. */
1828 if (action
== KEY_REMOVE
&& !is_broadcast_ether_addr(addr
))
1831 ret
= wl1271_cmd_set_sta_key(wl
, action
,
1832 id
, key_type
, key_size
,
1833 key
, addr
, tx_seq_32
,
1838 /* the default WEP key needs to be configured at least once */
1839 if (key_type
== KEY_WEP
) {
1840 ret
= wl1271_cmd_set_sta_default_wep_key(wl
,
1850 static int wl1271_op_set_key(struct ieee80211_hw
*hw
, enum set_key_cmd cmd
,
1851 struct ieee80211_vif
*vif
,
1852 struct ieee80211_sta
*sta
,
1853 struct ieee80211_key_conf
*key_conf
)
1855 struct wl1271
*wl
= hw
->priv
;
1861 wl1271_debug(DEBUG_MAC80211
, "mac80211 set key");
1863 wl1271_debug(DEBUG_CRYPT
, "CMD: 0x%x sta: %p", cmd
, sta
);
1864 wl1271_debug(DEBUG_CRYPT
, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
1865 key_conf
->cipher
, key_conf
->keyidx
,
1866 key_conf
->keylen
, key_conf
->flags
);
1867 wl1271_dump(DEBUG_CRYPT
, "KEY: ", key_conf
->key
, key_conf
->keylen
);
1869 mutex_lock(&wl
->mutex
);
1871 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
1876 ret
= wl1271_ps_elp_wakeup(wl
, false);
1880 switch (key_conf
->cipher
) {
1881 case WLAN_CIPHER_SUITE_WEP40
:
1882 case WLAN_CIPHER_SUITE_WEP104
:
1885 key_conf
->hw_key_idx
= key_conf
->keyidx
;
1887 case WLAN_CIPHER_SUITE_TKIP
:
1888 key_type
= KEY_TKIP
;
1890 key_conf
->hw_key_idx
= key_conf
->keyidx
;
1891 tx_seq_32
= WL1271_TX_SECURITY_HI32(wl
->tx_security_seq
);
1892 tx_seq_16
= WL1271_TX_SECURITY_LO16(wl
->tx_security_seq
);
1894 case WLAN_CIPHER_SUITE_CCMP
:
1897 key_conf
->flags
|= IEEE80211_KEY_FLAG_GENERATE_IV
;
1898 tx_seq_32
= WL1271_TX_SECURITY_HI32(wl
->tx_security_seq
);
1899 tx_seq_16
= WL1271_TX_SECURITY_LO16(wl
->tx_security_seq
);
1901 case WL1271_CIPHER_SUITE_GEM
:
1903 tx_seq_32
= WL1271_TX_SECURITY_HI32(wl
->tx_security_seq
);
1904 tx_seq_16
= WL1271_TX_SECURITY_LO16(wl
->tx_security_seq
);
1907 wl1271_error("Unknown key algo 0x%x", key_conf
->cipher
);
1915 ret
= wl1271_set_key(wl
, KEY_ADD_OR_REPLACE
,
1916 key_conf
->keyidx
, key_type
,
1917 key_conf
->keylen
, key_conf
->key
,
1918 tx_seq_32
, tx_seq_16
, sta
);
1920 wl1271_error("Could not add or replace key");
1926 ret
= wl1271_set_key(wl
, KEY_REMOVE
,
1927 key_conf
->keyidx
, key_type
,
1928 key_conf
->keylen
, key_conf
->key
,
1931 wl1271_error("Could not remove key");
1937 wl1271_error("Unsupported key cmd 0x%x", cmd
);
1943 wl1271_ps_elp_sleep(wl
);
1946 mutex_unlock(&wl
->mutex
);
1951 static int wl1271_op_hw_scan(struct ieee80211_hw
*hw
,
1952 struct ieee80211_vif
*vif
,
1953 struct cfg80211_scan_request
*req
)
1955 struct wl1271
*wl
= hw
->priv
;
1960 wl1271_debug(DEBUG_MAC80211
, "mac80211 hw scan");
1963 ssid
= req
->ssids
[0].ssid
;
1964 len
= req
->ssids
[0].ssid_len
;
1967 mutex_lock(&wl
->mutex
);
1969 if (wl
->state
== WL1271_STATE_OFF
) {
1971 * We cannot return -EBUSY here because cfg80211 will expect
1972 * a call to ieee80211_scan_completed if we do - in this case
1973 * there won't be any call.
1979 ret
= wl1271_ps_elp_wakeup(wl
, false);
1983 ret
= wl1271_scan(hw
->priv
, ssid
, len
, req
);
1985 wl1271_ps_elp_sleep(wl
);
1988 mutex_unlock(&wl
->mutex
);
1993 static int wl1271_op_set_frag_threshold(struct ieee80211_hw
*hw
, u32 value
)
1995 struct wl1271
*wl
= hw
->priv
;
1998 mutex_lock(&wl
->mutex
);
2000 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
2005 ret
= wl1271_ps_elp_wakeup(wl
, false);
2009 ret
= wl1271_acx_frag_threshold(wl
, (u16
)value
);
2011 wl1271_warning("wl1271_op_set_frag_threshold failed: %d", ret
);
2013 wl1271_ps_elp_sleep(wl
);
2016 mutex_unlock(&wl
->mutex
);
2021 static int wl1271_op_set_rts_threshold(struct ieee80211_hw
*hw
, u32 value
)
2023 struct wl1271
*wl
= hw
->priv
;
2026 mutex_lock(&wl
->mutex
);
2028 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
2033 ret
= wl1271_ps_elp_wakeup(wl
, false);
2037 ret
= wl1271_acx_rts_threshold(wl
, (u16
) value
);
2039 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret
);
2041 wl1271_ps_elp_sleep(wl
);
2044 mutex_unlock(&wl
->mutex
);
2049 static int wl1271_ssid_set(struct wl1271
*wl
, struct sk_buff
*skb
,
2052 u8
*ptr
= skb
->data
+ offset
;
2054 /* find the location of the ssid in the beacon */
2055 while (ptr
< skb
->data
+ skb
->len
) {
2056 if (ptr
[0] == WLAN_EID_SSID
) {
2057 wl
->ssid_len
= ptr
[1];
2058 memcpy(wl
->ssid
, ptr
+2, wl
->ssid_len
);
2061 ptr
+= (ptr
[1] + 2);
2064 wl1271_error("No SSID in IEs!\n");
2068 static int wl1271_bss_erp_info_changed(struct wl1271
*wl
,
2069 struct ieee80211_bss_conf
*bss_conf
,
2074 if (changed
& BSS_CHANGED_ERP_SLOT
) {
2075 if (bss_conf
->use_short_slot
)
2076 ret
= wl1271_acx_slot(wl
, SLOT_TIME_SHORT
);
2078 ret
= wl1271_acx_slot(wl
, SLOT_TIME_LONG
);
2080 wl1271_warning("Set slot time failed %d", ret
);
2085 if (changed
& BSS_CHANGED_ERP_PREAMBLE
) {
2086 if (bss_conf
->use_short_preamble
)
2087 wl1271_acx_set_preamble(wl
, ACX_PREAMBLE_SHORT
);
2089 wl1271_acx_set_preamble(wl
, ACX_PREAMBLE_LONG
);
2092 if (changed
& BSS_CHANGED_ERP_CTS_PROT
) {
2093 if (bss_conf
->use_cts_prot
)
2094 ret
= wl1271_acx_cts_protect(wl
, CTSPROTECT_ENABLE
);
2096 ret
= wl1271_acx_cts_protect(wl
, CTSPROTECT_DISABLE
);
2098 wl1271_warning("Set ctsprotect failed %d", ret
);
2107 static int wl1271_bss_beacon_info_changed(struct wl1271
*wl
,
2108 struct ieee80211_vif
*vif
,
2109 struct ieee80211_bss_conf
*bss_conf
,
2112 bool is_ap
= (wl
->bss_type
== BSS_TYPE_AP_BSS
);
2115 if ((changed
& BSS_CHANGED_BEACON_INT
)) {
2116 wl1271_debug(DEBUG_MASTER
, "beacon interval updated: %d",
2117 bss_conf
->beacon_int
);
2119 wl
->beacon_int
= bss_conf
->beacon_int
;
2122 if ((changed
& BSS_CHANGED_BEACON
)) {
2123 struct ieee80211_hdr
*hdr
;
2124 int ieoffset
= offsetof(struct ieee80211_mgmt
,
2126 struct sk_buff
*beacon
= ieee80211_beacon_get(wl
->hw
, vif
);
2132 wl1271_debug(DEBUG_MASTER
, "beacon updated");
2134 ret
= wl1271_ssid_set(wl
, beacon
, ieoffset
);
2136 dev_kfree_skb(beacon
);
2139 tmpl_id
= is_ap
? CMD_TEMPL_AP_BEACON
:
2141 ret
= wl1271_cmd_template_set(wl
, tmpl_id
,
2144 wl1271_tx_min_rate_get(wl
));
2146 dev_kfree_skb(beacon
);
2150 hdr
= (struct ieee80211_hdr
*) beacon
->data
;
2151 hdr
->frame_control
= cpu_to_le16(IEEE80211_FTYPE_MGMT
|
2152 IEEE80211_STYPE_PROBE_RESP
);
2154 tmpl_id
= is_ap
? CMD_TEMPL_AP_PROBE_RESPONSE
:
2155 CMD_TEMPL_PROBE_RESPONSE
;
2156 ret
= wl1271_cmd_template_set(wl
,
2160 wl1271_tx_min_rate_get(wl
));
2161 dev_kfree_skb(beacon
);
2170 /* AP mode changes */
2171 static void wl1271_bss_info_changed_ap(struct wl1271
*wl
,
2172 struct ieee80211_vif
*vif
,
2173 struct ieee80211_bss_conf
*bss_conf
,
2178 if ((changed
& BSS_CHANGED_BASIC_RATES
)) {
2179 u32 rates
= bss_conf
->basic_rates
;
2180 struct conf_tx_rate_class mgmt_rc
;
2182 wl
->basic_rate_set
= wl1271_tx_enabled_rates_get(wl
, rates
);
2183 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
2184 wl1271_debug(DEBUG_AP
, "basic rates: 0x%x",
2185 wl
->basic_rate_set
);
2187 /* update the AP management rate policy with the new rates */
2188 mgmt_rc
.enabled_rates
= wl
->basic_rate_set
;
2189 mgmt_rc
.long_retry_limit
= 10;
2190 mgmt_rc
.short_retry_limit
= 10;
2192 ret
= wl1271_acx_ap_rate_policy(wl
, &mgmt_rc
,
2193 ACX_TX_AP_MODE_MGMT_RATE
);
2195 wl1271_error("AP mgmt policy change failed %d", ret
);
2200 ret
= wl1271_bss_beacon_info_changed(wl
, vif
, bss_conf
, changed
);
2204 if ((changed
& BSS_CHANGED_BEACON_ENABLED
)) {
2205 if (bss_conf
->enable_beacon
) {
2206 if (!test_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
)) {
2207 ret
= wl1271_cmd_start_bss(wl
);
2211 set_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
);
2212 wl1271_debug(DEBUG_AP
, "started AP");
2214 ret
= wl1271_ap_init_hwenc(wl
);
2219 if (test_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
)) {
2220 ret
= wl1271_cmd_stop_bss(wl
);
2224 clear_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
);
2225 wl1271_debug(DEBUG_AP
, "stopped AP");
2230 ret
= wl1271_bss_erp_info_changed(wl
, bss_conf
, changed
);
2237 /* STA/IBSS mode changes */
2238 static void wl1271_bss_info_changed_sta(struct wl1271
*wl
,
2239 struct ieee80211_vif
*vif
,
2240 struct ieee80211_bss_conf
*bss_conf
,
2243 bool do_join
= false, set_assoc
= false;
2244 bool is_ibss
= (wl
->bss_type
== BSS_TYPE_IBSS
);
2246 struct ieee80211_sta
*sta
;
2249 ret
= wl1271_bss_beacon_info_changed(wl
, vif
, bss_conf
,
2255 if ((changed
& BSS_CHANGED_BEACON_INT
) && is_ibss
)
2258 /* Need to update the SSID (for filtering etc) */
2259 if ((changed
& BSS_CHANGED_BEACON
) && is_ibss
)
2262 if ((changed
& BSS_CHANGED_BEACON_ENABLED
) && is_ibss
) {
2263 wl1271_debug(DEBUG_ADHOC
, "ad-hoc beaconing: %s",
2264 bss_conf
->enable_beacon
? "enabled" : "disabled");
2266 if (bss_conf
->enable_beacon
)
2267 wl
->set_bss_type
= BSS_TYPE_IBSS
;
2269 wl
->set_bss_type
= BSS_TYPE_STA_BSS
;
2273 if ((changed
& BSS_CHANGED_CQM
)) {
2274 bool enable
= false;
2275 if (bss_conf
->cqm_rssi_thold
)
2277 ret
= wl1271_acx_rssi_snr_trigger(wl
, enable
,
2278 bss_conf
->cqm_rssi_thold
,
2279 bss_conf
->cqm_rssi_hyst
);
2282 wl
->rssi_thold
= bss_conf
->cqm_rssi_thold
;
2285 if ((changed
& BSS_CHANGED_BSSID
) &&
2287 * Now we know the correct bssid, so we send a new join command
2288 * and enable the BSSID filter
2290 memcmp(wl
->bssid
, bss_conf
->bssid
, ETH_ALEN
)) {
2291 memcpy(wl
->bssid
, bss_conf
->bssid
, ETH_ALEN
);
2293 if (!is_zero_ether_addr(wl
->bssid
)) {
2294 ret
= wl1271_cmd_build_null_data(wl
);
2298 ret
= wl1271_build_qos_null_data(wl
);
2302 /* filter out all packets not from this BSSID */
2303 wl1271_configure_filters(wl
, 0);
2305 /* Need to update the BSSID (for filtering etc) */
2310 if ((changed
& BSS_CHANGED_ASSOC
)) {
2311 if (bss_conf
->assoc
) {
2314 wl
->aid
= bss_conf
->aid
;
2317 wl
->ps_poll_failures
= 0;
2320 * use basic rates from AP, and determine lowest rate
2321 * to use with control frames.
2323 rates
= bss_conf
->basic_rates
;
2324 wl
->basic_rate_set
= wl1271_tx_enabled_rates_get(wl
,
2326 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
2327 ret
= wl1271_acx_sta_rate_policies(wl
);
2332 * with wl1271, we don't need to update the
2333 * beacon_int and dtim_period, because the firmware
2334 * updates it by itself when the first beacon is
2335 * received after a join.
2337 ret
= wl1271_cmd_build_ps_poll(wl
, wl
->aid
);
2342 * Get a template for hardware connection maintenance
2344 dev_kfree_skb(wl
->probereq
);
2345 wl
->probereq
= wl1271_cmd_build_ap_probe_req(wl
, NULL
);
2346 ieoffset
= offsetof(struct ieee80211_mgmt
,
2347 u
.probe_req
.variable
);
2348 wl1271_ssid_set(wl
, wl
->probereq
, ieoffset
);
2350 /* enable the connection monitoring feature */
2351 ret
= wl1271_acx_conn_monit_params(wl
, true);
2355 /* If we want to go in PSM but we're not there yet */
2356 if (test_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
) &&
2357 !test_bit(WL1271_FLAG_PSM
, &wl
->flags
)) {
2358 enum wl1271_cmd_ps_mode mode
;
2360 mode
= STATION_POWER_SAVE_MODE
;
2361 ret
= wl1271_ps_set_mode(wl
, mode
,
2368 /* use defaults when not associated */
2369 clear_bit(WL1271_FLAG_STA_STATE_SENT
, &wl
->flags
);
2370 clear_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
);
2373 /* free probe-request template */
2374 dev_kfree_skb(wl
->probereq
);
2375 wl
->probereq
= NULL
;
2377 /* re-enable dynamic ps - just in case */
2378 ieee80211_enable_dyn_ps(wl
->vif
);
2380 /* revert back to minimum rates for the current band */
2381 wl1271_set_band_rate(wl
);
2382 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
2383 ret
= wl1271_acx_sta_rate_policies(wl
);
2387 /* disable connection monitor features */
2388 ret
= wl1271_acx_conn_monit_params(wl
, false);
2390 /* Disable the keep-alive feature */
2391 ret
= wl1271_acx_keep_alive_mode(wl
, false);
2395 /* restore the bssid filter and go to dummy bssid */
2397 wl1271_dummy_join(wl
);
2401 ret
= wl1271_bss_erp_info_changed(wl
, bss_conf
, changed
);
2406 sta
= ieee80211_find_sta(vif
, bss_conf
->bssid
);
2408 /* handle new association with HT and HT information change */
2409 if ((changed
& BSS_CHANGED_HT
) &&
2410 (bss_conf
->channel_type
!= NL80211_CHAN_NO_HT
)) {
2411 ret
= wl1271_acx_set_ht_capabilities(wl
, &sta
->ht_cap
,
2414 wl1271_warning("Set ht cap true failed %d",
2419 ret
= wl1271_acx_set_ht_information(wl
,
2420 bss_conf
->ht_operation_mode
);
2422 wl1271_warning("Set ht information failed %d",
2428 /* handle new association without HT and disassociation */
2429 else if (changed
& BSS_CHANGED_ASSOC
) {
2430 ret
= wl1271_acx_set_ht_capabilities(wl
, &sta
->ht_cap
,
2433 wl1271_warning("Set ht cap false failed %d",
2442 if (changed
& BSS_CHANGED_ARP_FILTER
) {
2443 __be32 addr
= bss_conf
->arp_addr_list
[0];
2444 WARN_ON(wl
->bss_type
!= BSS_TYPE_STA_BSS
);
2446 if (bss_conf
->arp_addr_cnt
== 1 &&
2447 bss_conf
->arp_filter_enabled
) {
2449 * The template should have been configured only upon
2450 * association. however, it seems that the correct ip
2451 * isn't being set (when sending), so we have to
2452 * reconfigure the template upon every ip change.
2454 ret
= wl1271_cmd_build_arp_rsp(wl
, addr
);
2456 wl1271_warning("build arp rsp failed: %d", ret
);
2460 ret
= wl1271_acx_arp_ip_filter(wl
,
2461 ACX_ARP_FILTER_ARP_FILTERING
,
2464 ret
= wl1271_acx_arp_ip_filter(wl
, 0, addr
);
2471 ret
= wl1271_join(wl
, set_assoc
);
2473 wl1271_warning("cmd join failed %d", ret
);
2482 static void wl1271_op_bss_info_changed(struct ieee80211_hw
*hw
,
2483 struct ieee80211_vif
*vif
,
2484 struct ieee80211_bss_conf
*bss_conf
,
2487 struct wl1271
*wl
= hw
->priv
;
2488 bool is_ap
= (wl
->bss_type
== BSS_TYPE_AP_BSS
);
2491 wl1271_debug(DEBUG_MAC80211
, "mac80211 bss info changed 0x%x",
2494 mutex_lock(&wl
->mutex
);
2496 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
2499 ret
= wl1271_ps_elp_wakeup(wl
, false);
2504 wl1271_bss_info_changed_ap(wl
, vif
, bss_conf
, changed
);
2506 wl1271_bss_info_changed_sta(wl
, vif
, bss_conf
, changed
);
2508 wl1271_ps_elp_sleep(wl
);
2511 mutex_unlock(&wl
->mutex
);
2514 static int wl1271_op_conf_tx(struct ieee80211_hw
*hw
, u16 queue
,
2515 const struct ieee80211_tx_queue_params
*params
)
2517 struct wl1271
*wl
= hw
->priv
;
2521 mutex_lock(&wl
->mutex
);
2523 wl1271_debug(DEBUG_MAC80211
, "mac80211 conf tx %d", queue
);
2526 ps_scheme
= CONF_PS_SCHEME_UPSD_TRIGGER
;
2528 ps_scheme
= CONF_PS_SCHEME_LEGACY
;
2530 if (wl
->state
== WL1271_STATE_OFF
) {
2532 * If the state is off, the parameters will be recorded and
2533 * configured on init. This happens in AP-mode.
2535 struct conf_tx_ac_category
*conf_ac
=
2536 &wl
->conf
.tx
.ac_conf
[wl1271_tx_get_queue(queue
)];
2537 struct conf_tx_tid
*conf_tid
=
2538 &wl
->conf
.tx
.tid_conf
[wl1271_tx_get_queue(queue
)];
2540 conf_ac
->ac
= wl1271_tx_get_queue(queue
);
2541 conf_ac
->cw_min
= (u8
)params
->cw_min
;
2542 conf_ac
->cw_max
= params
->cw_max
;
2543 conf_ac
->aifsn
= params
->aifs
;
2544 conf_ac
->tx_op_limit
= params
->txop
<< 5;
2546 conf_tid
->queue_id
= wl1271_tx_get_queue(queue
);
2547 conf_tid
->channel_type
= CONF_CHANNEL_TYPE_EDCF
;
2548 conf_tid
->tsid
= wl1271_tx_get_queue(queue
);
2549 conf_tid
->ps_scheme
= ps_scheme
;
2550 conf_tid
->ack_policy
= CONF_ACK_POLICY_LEGACY
;
2551 conf_tid
->apsd_conf
[0] = 0;
2552 conf_tid
->apsd_conf
[1] = 0;
2554 ret
= wl1271_ps_elp_wakeup(wl
, false);
2559 * the txop is confed in units of 32us by the mac80211,
2562 ret
= wl1271_acx_ac_cfg(wl
, wl1271_tx_get_queue(queue
),
2563 params
->cw_min
, params
->cw_max
,
2564 params
->aifs
, params
->txop
<< 5);
2568 ret
= wl1271_acx_tid_cfg(wl
, wl1271_tx_get_queue(queue
),
2569 CONF_CHANNEL_TYPE_EDCF
,
2570 wl1271_tx_get_queue(queue
),
2571 ps_scheme
, CONF_ACK_POLICY_LEGACY
,
2577 wl1271_ps_elp_sleep(wl
);
2581 mutex_unlock(&wl
->mutex
);
2586 static u64
wl1271_op_get_tsf(struct ieee80211_hw
*hw
)
2589 struct wl1271
*wl
= hw
->priv
;
2590 u64 mactime
= ULLONG_MAX
;
2593 wl1271_debug(DEBUG_MAC80211
, "mac80211 get tsf");
2595 mutex_lock(&wl
->mutex
);
2597 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
2600 ret
= wl1271_ps_elp_wakeup(wl
, false);
2604 ret
= wl1271_acx_tsf_info(wl
, &mactime
);
2609 wl1271_ps_elp_sleep(wl
);
2612 mutex_unlock(&wl
->mutex
);
2616 static int wl1271_op_get_survey(struct ieee80211_hw
*hw
, int idx
,
2617 struct survey_info
*survey
)
2619 struct wl1271
*wl
= hw
->priv
;
2620 struct ieee80211_conf
*conf
= &hw
->conf
;
2625 survey
->channel
= conf
->channel
;
2626 survey
->filled
= SURVEY_INFO_NOISE_DBM
;
2627 survey
->noise
= wl
->noise
;
2632 static int wl1271_allocate_hlid(struct wl1271
*wl
,
2633 struct ieee80211_sta
*sta
,
2636 struct wl1271_station
*wl_sta
;
2639 id
= find_first_zero_bit(wl
->ap_hlid_map
, AP_MAX_STATIONS
);
2640 if (id
>= AP_MAX_STATIONS
) {
2641 wl1271_warning("could not allocate HLID - too much stations");
2645 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
2647 __set_bit(id
, wl
->ap_hlid_map
);
2648 wl_sta
->hlid
= WL1271_AP_STA_HLID_START
+ id
;
2649 *hlid
= wl_sta
->hlid
;
2653 static void wl1271_free_hlid(struct wl1271
*wl
, u8 hlid
)
2655 int id
= hlid
- WL1271_AP_STA_HLID_START
;
2657 __clear_bit(id
, wl
->ap_hlid_map
);
2660 static int wl1271_op_sta_add(struct ieee80211_hw
*hw
,
2661 struct ieee80211_vif
*vif
,
2662 struct ieee80211_sta
*sta
)
2664 struct wl1271
*wl
= hw
->priv
;
2668 mutex_lock(&wl
->mutex
);
2670 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
2673 if (wl
->bss_type
!= BSS_TYPE_AP_BSS
)
2676 wl1271_debug(DEBUG_MAC80211
, "mac80211 add sta %d", (int)sta
->aid
);
2678 ret
= wl1271_allocate_hlid(wl
, sta
, &hlid
);
2682 ret
= wl1271_ps_elp_wakeup(wl
, false);
2686 ret
= wl1271_cmd_add_sta(wl
, sta
, hlid
);
2691 wl1271_ps_elp_sleep(wl
);
2694 mutex_unlock(&wl
->mutex
);
2698 static int wl1271_op_sta_remove(struct ieee80211_hw
*hw
,
2699 struct ieee80211_vif
*vif
,
2700 struct ieee80211_sta
*sta
)
2702 struct wl1271
*wl
= hw
->priv
;
2703 struct wl1271_station
*wl_sta
;
2706 mutex_lock(&wl
->mutex
);
2708 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
2711 if (wl
->bss_type
!= BSS_TYPE_AP_BSS
)
2714 wl1271_debug(DEBUG_MAC80211
, "mac80211 remove sta %d", (int)sta
->aid
);
2716 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
2717 id
= wl_sta
->hlid
- WL1271_AP_STA_HLID_START
;
2718 if (WARN_ON(!test_bit(id
, wl
->ap_hlid_map
)))
2721 ret
= wl1271_ps_elp_wakeup(wl
, false);
2725 ret
= wl1271_cmd_remove_sta(wl
, wl_sta
->hlid
);
2729 wl1271_free_hlid(wl
, wl_sta
->hlid
);
2732 wl1271_ps_elp_sleep(wl
);
2735 mutex_unlock(&wl
->mutex
);
2739 int wl1271_op_ampdu_action(struct ieee80211_hw
*hw
, struct ieee80211_vif
*vif
,
2740 enum ieee80211_ampdu_mlme_action action
,
2741 struct ieee80211_sta
*sta
, u16 tid
, u16
*ssn
,
2744 struct wl1271
*wl
= hw
->priv
;
2747 mutex_lock(&wl
->mutex
);
2749 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
2754 ret
= wl1271_ps_elp_wakeup(wl
, false);
2759 case IEEE80211_AMPDU_RX_START
:
2760 if (wl
->ba_support
) {
2761 ret
= wl1271_acx_set_ba_receiver_session(wl
, tid
, *ssn
,
2764 wl
->ba_rx_bitmap
|= BIT(tid
);
2770 case IEEE80211_AMPDU_RX_STOP
:
2771 ret
= wl1271_acx_set_ba_receiver_session(wl
, tid
, 0, false);
2773 wl
->ba_rx_bitmap
&= ~BIT(tid
);
2777 * The BA initiator session management in FW independently.
2778 * Falling break here on purpose for all TX APDU commands.
2780 case IEEE80211_AMPDU_TX_START
:
2781 case IEEE80211_AMPDU_TX_STOP
:
2782 case IEEE80211_AMPDU_TX_OPERATIONAL
:
2787 wl1271_error("Incorrect ampdu action id=%x\n", action
);
2791 wl1271_ps_elp_sleep(wl
);
2794 mutex_unlock(&wl
->mutex
);
2799 /* can't be const, mac80211 writes to this */
2800 static struct ieee80211_rate wl1271_rates
[] = {
2802 .hw_value
= CONF_HW_BIT_RATE_1MBPS
,
2803 .hw_value_short
= CONF_HW_BIT_RATE_1MBPS
, },
2805 .hw_value
= CONF_HW_BIT_RATE_2MBPS
,
2806 .hw_value_short
= CONF_HW_BIT_RATE_2MBPS
,
2807 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
2809 .hw_value
= CONF_HW_BIT_RATE_5_5MBPS
,
2810 .hw_value_short
= CONF_HW_BIT_RATE_5_5MBPS
,
2811 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
2813 .hw_value
= CONF_HW_BIT_RATE_11MBPS
,
2814 .hw_value_short
= CONF_HW_BIT_RATE_11MBPS
,
2815 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
2817 .hw_value
= CONF_HW_BIT_RATE_6MBPS
,
2818 .hw_value_short
= CONF_HW_BIT_RATE_6MBPS
, },
2820 .hw_value
= CONF_HW_BIT_RATE_9MBPS
,
2821 .hw_value_short
= CONF_HW_BIT_RATE_9MBPS
, },
2823 .hw_value
= CONF_HW_BIT_RATE_12MBPS
,
2824 .hw_value_short
= CONF_HW_BIT_RATE_12MBPS
, },
2826 .hw_value
= CONF_HW_BIT_RATE_18MBPS
,
2827 .hw_value_short
= CONF_HW_BIT_RATE_18MBPS
, },
2829 .hw_value
= CONF_HW_BIT_RATE_24MBPS
,
2830 .hw_value_short
= CONF_HW_BIT_RATE_24MBPS
, },
2832 .hw_value
= CONF_HW_BIT_RATE_36MBPS
,
2833 .hw_value_short
= CONF_HW_BIT_RATE_36MBPS
, },
2835 .hw_value
= CONF_HW_BIT_RATE_48MBPS
,
2836 .hw_value_short
= CONF_HW_BIT_RATE_48MBPS
, },
2838 .hw_value
= CONF_HW_BIT_RATE_54MBPS
,
2839 .hw_value_short
= CONF_HW_BIT_RATE_54MBPS
, },
2842 /* can't be const, mac80211 writes to this */
2843 static struct ieee80211_channel wl1271_channels
[] = {
2844 { .hw_value
= 1, .center_freq
= 2412, .max_power
= 25 },
2845 { .hw_value
= 2, .center_freq
= 2417, .max_power
= 25 },
2846 { .hw_value
= 3, .center_freq
= 2422, .max_power
= 25 },
2847 { .hw_value
= 4, .center_freq
= 2427, .max_power
= 25 },
2848 { .hw_value
= 5, .center_freq
= 2432, .max_power
= 25 },
2849 { .hw_value
= 6, .center_freq
= 2437, .max_power
= 25 },
2850 { .hw_value
= 7, .center_freq
= 2442, .max_power
= 25 },
2851 { .hw_value
= 8, .center_freq
= 2447, .max_power
= 25 },
2852 { .hw_value
= 9, .center_freq
= 2452, .max_power
= 25 },
2853 { .hw_value
= 10, .center_freq
= 2457, .max_power
= 25 },
2854 { .hw_value
= 11, .center_freq
= 2462, .max_power
= 25 },
2855 { .hw_value
= 12, .center_freq
= 2467, .max_power
= 25 },
2856 { .hw_value
= 13, .center_freq
= 2472, .max_power
= 25 },
2857 { .hw_value
= 14, .center_freq
= 2484, .max_power
= 25 },
2860 /* mapping to indexes for wl1271_rates */
2861 static const u8 wl1271_rate_to_idx_2ghz
[] = {
2862 /* MCS rates are used only with 11n */
2863 7, /* CONF_HW_RXTX_RATE_MCS7 */
2864 6, /* CONF_HW_RXTX_RATE_MCS6 */
2865 5, /* CONF_HW_RXTX_RATE_MCS5 */
2866 4, /* CONF_HW_RXTX_RATE_MCS4 */
2867 3, /* CONF_HW_RXTX_RATE_MCS3 */
2868 2, /* CONF_HW_RXTX_RATE_MCS2 */
2869 1, /* CONF_HW_RXTX_RATE_MCS1 */
2870 0, /* CONF_HW_RXTX_RATE_MCS0 */
2872 11, /* CONF_HW_RXTX_RATE_54 */
2873 10, /* CONF_HW_RXTX_RATE_48 */
2874 9, /* CONF_HW_RXTX_RATE_36 */
2875 8, /* CONF_HW_RXTX_RATE_24 */
2877 /* TI-specific rate */
2878 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_22 */
2880 7, /* CONF_HW_RXTX_RATE_18 */
2881 6, /* CONF_HW_RXTX_RATE_12 */
2882 3, /* CONF_HW_RXTX_RATE_11 */
2883 5, /* CONF_HW_RXTX_RATE_9 */
2884 4, /* CONF_HW_RXTX_RATE_6 */
2885 2, /* CONF_HW_RXTX_RATE_5_5 */
2886 1, /* CONF_HW_RXTX_RATE_2 */
2887 0 /* CONF_HW_RXTX_RATE_1 */
2890 /* 11n STA capabilities */
2891 #define HW_RX_HIGHEST_RATE 72
2893 #ifdef CONFIG_WL12XX_HT
2894 #define WL12XX_HT_CAP { \
2895 .cap = IEEE80211_HT_CAP_GRN_FLD | IEEE80211_HT_CAP_SGI_20, \
2896 .ht_supported = true, \
2897 .ampdu_factor = IEEE80211_HT_MAX_AMPDU_8K, \
2898 .ampdu_density = IEEE80211_HT_MPDU_DENSITY_8, \
2900 .rx_mask = { 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, \
2901 .rx_highest = cpu_to_le16(HW_RX_HIGHEST_RATE), \
2902 .tx_params = IEEE80211_HT_MCS_TX_DEFINED, \
2906 #define WL12XX_HT_CAP { \
2907 .ht_supported = false, \
2911 /* can't be const, mac80211 writes to this */
2912 static struct ieee80211_supported_band wl1271_band_2ghz
= {
2913 .channels
= wl1271_channels
,
2914 .n_channels
= ARRAY_SIZE(wl1271_channels
),
2915 .bitrates
= wl1271_rates
,
2916 .n_bitrates
= ARRAY_SIZE(wl1271_rates
),
2917 .ht_cap
= WL12XX_HT_CAP
,
2920 /* 5 GHz data rates for WL1273 */
2921 static struct ieee80211_rate wl1271_rates_5ghz
[] = {
2923 .hw_value
= CONF_HW_BIT_RATE_6MBPS
,
2924 .hw_value_short
= CONF_HW_BIT_RATE_6MBPS
, },
2926 .hw_value
= CONF_HW_BIT_RATE_9MBPS
,
2927 .hw_value_short
= CONF_HW_BIT_RATE_9MBPS
, },
2929 .hw_value
= CONF_HW_BIT_RATE_12MBPS
,
2930 .hw_value_short
= CONF_HW_BIT_RATE_12MBPS
, },
2932 .hw_value
= CONF_HW_BIT_RATE_18MBPS
,
2933 .hw_value_short
= CONF_HW_BIT_RATE_18MBPS
, },
2935 .hw_value
= CONF_HW_BIT_RATE_24MBPS
,
2936 .hw_value_short
= CONF_HW_BIT_RATE_24MBPS
, },
2938 .hw_value
= CONF_HW_BIT_RATE_36MBPS
,
2939 .hw_value_short
= CONF_HW_BIT_RATE_36MBPS
, },
2941 .hw_value
= CONF_HW_BIT_RATE_48MBPS
,
2942 .hw_value_short
= CONF_HW_BIT_RATE_48MBPS
, },
2944 .hw_value
= CONF_HW_BIT_RATE_54MBPS
,
2945 .hw_value_short
= CONF_HW_BIT_RATE_54MBPS
, },
2948 /* 5 GHz band channels for WL1273 */
2949 static struct ieee80211_channel wl1271_channels_5ghz
[] = {
2950 { .hw_value
= 7, .center_freq
= 5035},
2951 { .hw_value
= 8, .center_freq
= 5040},
2952 { .hw_value
= 9, .center_freq
= 5045},
2953 { .hw_value
= 11, .center_freq
= 5055},
2954 { .hw_value
= 12, .center_freq
= 5060},
2955 { .hw_value
= 16, .center_freq
= 5080},
2956 { .hw_value
= 34, .center_freq
= 5170},
2957 { .hw_value
= 36, .center_freq
= 5180},
2958 { .hw_value
= 38, .center_freq
= 5190},
2959 { .hw_value
= 40, .center_freq
= 5200},
2960 { .hw_value
= 42, .center_freq
= 5210},
2961 { .hw_value
= 44, .center_freq
= 5220},
2962 { .hw_value
= 46, .center_freq
= 5230},
2963 { .hw_value
= 48, .center_freq
= 5240},
2964 { .hw_value
= 52, .center_freq
= 5260},
2965 { .hw_value
= 56, .center_freq
= 5280},
2966 { .hw_value
= 60, .center_freq
= 5300},
2967 { .hw_value
= 64, .center_freq
= 5320},
2968 { .hw_value
= 100, .center_freq
= 5500},
2969 { .hw_value
= 104, .center_freq
= 5520},
2970 { .hw_value
= 108, .center_freq
= 5540},
2971 { .hw_value
= 112, .center_freq
= 5560},
2972 { .hw_value
= 116, .center_freq
= 5580},
2973 { .hw_value
= 120, .center_freq
= 5600},
2974 { .hw_value
= 124, .center_freq
= 5620},
2975 { .hw_value
= 128, .center_freq
= 5640},
2976 { .hw_value
= 132, .center_freq
= 5660},
2977 { .hw_value
= 136, .center_freq
= 5680},
2978 { .hw_value
= 140, .center_freq
= 5700},
2979 { .hw_value
= 149, .center_freq
= 5745},
2980 { .hw_value
= 153, .center_freq
= 5765},
2981 { .hw_value
= 157, .center_freq
= 5785},
2982 { .hw_value
= 161, .center_freq
= 5805},
2983 { .hw_value
= 165, .center_freq
= 5825},
2986 /* mapping to indexes for wl1271_rates_5ghz */
2987 static const u8 wl1271_rate_to_idx_5ghz
[] = {
2988 /* MCS rates are used only with 11n */
2989 7, /* CONF_HW_RXTX_RATE_MCS7 */
2990 6, /* CONF_HW_RXTX_RATE_MCS6 */
2991 5, /* CONF_HW_RXTX_RATE_MCS5 */
2992 4, /* CONF_HW_RXTX_RATE_MCS4 */
2993 3, /* CONF_HW_RXTX_RATE_MCS3 */
2994 2, /* CONF_HW_RXTX_RATE_MCS2 */
2995 1, /* CONF_HW_RXTX_RATE_MCS1 */
2996 0, /* CONF_HW_RXTX_RATE_MCS0 */
2998 7, /* CONF_HW_RXTX_RATE_54 */
2999 6, /* CONF_HW_RXTX_RATE_48 */
3000 5, /* CONF_HW_RXTX_RATE_36 */
3001 4, /* CONF_HW_RXTX_RATE_24 */
3003 /* TI-specific rate */
3004 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_22 */
3006 3, /* CONF_HW_RXTX_RATE_18 */
3007 2, /* CONF_HW_RXTX_RATE_12 */
3008 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_11 */
3009 1, /* CONF_HW_RXTX_RATE_9 */
3010 0, /* CONF_HW_RXTX_RATE_6 */
3011 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_5_5 */
3012 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_2 */
3013 CONF_HW_RXTX_RATE_UNSUPPORTED
/* CONF_HW_RXTX_RATE_1 */
3016 static struct ieee80211_supported_band wl1271_band_5ghz
= {
3017 .channels
= wl1271_channels_5ghz
,
3018 .n_channels
= ARRAY_SIZE(wl1271_channels_5ghz
),
3019 .bitrates
= wl1271_rates_5ghz
,
3020 .n_bitrates
= ARRAY_SIZE(wl1271_rates_5ghz
),
3021 .ht_cap
= WL12XX_HT_CAP
,
3024 static const u8
*wl1271_band_rate_to_idx
[] = {
3025 [IEEE80211_BAND_2GHZ
] = wl1271_rate_to_idx_2ghz
,
3026 [IEEE80211_BAND_5GHZ
] = wl1271_rate_to_idx_5ghz
3029 static const struct ieee80211_ops wl1271_ops
= {
3030 .start
= wl1271_op_start
,
3031 .stop
= wl1271_op_stop
,
3032 .add_interface
= wl1271_op_add_interface
,
3033 .remove_interface
= wl1271_op_remove_interface
,
3034 .config
= wl1271_op_config
,
3035 .prepare_multicast
= wl1271_op_prepare_multicast
,
3036 .configure_filter
= wl1271_op_configure_filter
,
3038 .set_key
= wl1271_op_set_key
,
3039 .hw_scan
= wl1271_op_hw_scan
,
3040 .bss_info_changed
= wl1271_op_bss_info_changed
,
3041 .set_frag_threshold
= wl1271_op_set_frag_threshold
,
3042 .set_rts_threshold
= wl1271_op_set_rts_threshold
,
3043 .conf_tx
= wl1271_op_conf_tx
,
3044 .get_tsf
= wl1271_op_get_tsf
,
3045 .get_survey
= wl1271_op_get_survey
,
3046 .sta_add
= wl1271_op_sta_add
,
3047 .sta_remove
= wl1271_op_sta_remove
,
3048 .ampdu_action
= wl1271_op_ampdu_action
,
3049 CFG80211_TESTMODE_CMD(wl1271_tm_cmd
)
3053 u8
wl1271_rate_to_idx(int rate
, enum ieee80211_band band
)
3057 BUG_ON(band
>= sizeof(wl1271_band_rate_to_idx
)/sizeof(u8
*));
3059 if (unlikely(rate
>= CONF_HW_RXTX_RATE_MAX
)) {
3060 wl1271_error("Illegal RX rate from HW: %d", rate
);
3064 idx
= wl1271_band_rate_to_idx
[band
][rate
];
3065 if (unlikely(idx
== CONF_HW_RXTX_RATE_UNSUPPORTED
)) {
3066 wl1271_error("Unsupported RX rate from HW: %d", rate
);
3073 static ssize_t
wl1271_sysfs_show_bt_coex_state(struct device
*dev
,
3074 struct device_attribute
*attr
,
3077 struct wl1271
*wl
= dev_get_drvdata(dev
);
3082 mutex_lock(&wl
->mutex
);
3083 len
= snprintf(buf
, len
, "%d\n\n0 - off\n1 - on\n",
3085 mutex_unlock(&wl
->mutex
);
3091 static ssize_t
wl1271_sysfs_store_bt_coex_state(struct device
*dev
,
3092 struct device_attribute
*attr
,
3093 const char *buf
, size_t count
)
3095 struct wl1271
*wl
= dev_get_drvdata(dev
);
3099 ret
= strict_strtoul(buf
, 10, &res
);
3102 wl1271_warning("incorrect value written to bt_coex_mode");
3106 mutex_lock(&wl
->mutex
);
3110 if (res
== wl
->sg_enabled
)
3113 wl
->sg_enabled
= res
;
3115 if (wl
->state
== WL1271_STATE_OFF
)
3118 ret
= wl1271_ps_elp_wakeup(wl
, false);
3122 wl1271_acx_sg_enable(wl
, wl
->sg_enabled
);
3123 wl1271_ps_elp_sleep(wl
);
3126 mutex_unlock(&wl
->mutex
);
3130 static DEVICE_ATTR(bt_coex_state
, S_IRUGO
| S_IWUSR
,
3131 wl1271_sysfs_show_bt_coex_state
,
3132 wl1271_sysfs_store_bt_coex_state
);
3134 static ssize_t
wl1271_sysfs_show_hw_pg_ver(struct device
*dev
,
3135 struct device_attribute
*attr
,
3138 struct wl1271
*wl
= dev_get_drvdata(dev
);
3143 mutex_lock(&wl
->mutex
);
3144 if (wl
->hw_pg_ver
>= 0)
3145 len
= snprintf(buf
, len
, "%d\n", wl
->hw_pg_ver
);
3147 len
= snprintf(buf
, len
, "n/a\n");
3148 mutex_unlock(&wl
->mutex
);
3153 static DEVICE_ATTR(hw_pg_ver
, S_IRUGO
| S_IWUSR
,
3154 wl1271_sysfs_show_hw_pg_ver
, NULL
);
3156 int wl1271_register_hw(struct wl1271
*wl
)
3160 if (wl
->mac80211_registered
)
3163 ret
= wl1271_fetch_nvs(wl
);
3165 u8
*nvs_ptr
= (u8
*)wl
->nvs
->nvs
;
3167 wl
->mac_addr
[0] = nvs_ptr
[11];
3168 wl
->mac_addr
[1] = nvs_ptr
[10];
3169 wl
->mac_addr
[2] = nvs_ptr
[6];
3170 wl
->mac_addr
[3] = nvs_ptr
[5];
3171 wl
->mac_addr
[4] = nvs_ptr
[4];
3172 wl
->mac_addr
[5] = nvs_ptr
[3];
3175 SET_IEEE80211_PERM_ADDR(wl
->hw
, wl
->mac_addr
);
3177 ret
= ieee80211_register_hw(wl
->hw
);
3179 wl1271_error("unable to register mac80211 hw: %d", ret
);
3183 wl
->mac80211_registered
= true;
3185 wl1271_debugfs_init(wl
);
3187 register_netdevice_notifier(&wl1271_dev_notifier
);
3189 wl1271_notice("loaded");
3193 EXPORT_SYMBOL_GPL(wl1271_register_hw
);
3195 void wl1271_unregister_hw(struct wl1271
*wl
)
3197 if (wl
->state
== WL1271_STATE_PLT
)
3198 __wl1271_plt_stop(wl
);
3200 unregister_netdevice_notifier(&wl1271_dev_notifier
);
3201 ieee80211_unregister_hw(wl
->hw
);
3202 wl
->mac80211_registered
= false;
3205 EXPORT_SYMBOL_GPL(wl1271_unregister_hw
);
3207 int wl1271_init_ieee80211(struct wl1271
*wl
)
3209 static const u32 cipher_suites
[] = {
3210 WLAN_CIPHER_SUITE_WEP40
,
3211 WLAN_CIPHER_SUITE_WEP104
,
3212 WLAN_CIPHER_SUITE_TKIP
,
3213 WLAN_CIPHER_SUITE_CCMP
,
3214 WL1271_CIPHER_SUITE_GEM
,
3217 /* The tx descriptor buffer and the TKIP space. */
3218 wl
->hw
->extra_tx_headroom
= WL1271_TKIP_IV_SPACE
+
3219 sizeof(struct wl1271_tx_hw_descr
);
3222 /* FIXME: find a proper value */
3223 wl
->hw
->channel_change_time
= 10000;
3224 wl
->hw
->max_listen_interval
= wl
->conf
.conn
.max_listen_interval
;
3226 wl
->hw
->flags
= IEEE80211_HW_SIGNAL_DBM
|
3227 IEEE80211_HW_BEACON_FILTER
|
3228 IEEE80211_HW_SUPPORTS_PS
|
3229 IEEE80211_HW_SUPPORTS_UAPSD
|
3230 IEEE80211_HW_HAS_RATE_CONTROL
|
3231 IEEE80211_HW_CONNECTION_MONITOR
|
3232 IEEE80211_HW_SUPPORTS_CQM_RSSI
;
3234 wl
->hw
->wiphy
->cipher_suites
= cipher_suites
;
3235 wl
->hw
->wiphy
->n_cipher_suites
= ARRAY_SIZE(cipher_suites
);
3237 wl
->hw
->wiphy
->interface_modes
= BIT(NL80211_IFTYPE_STATION
) |
3238 BIT(NL80211_IFTYPE_ADHOC
) | BIT(NL80211_IFTYPE_AP
);
3239 wl
->hw
->wiphy
->max_scan_ssids
= 1;
3241 * Maximum length of elements in scanning probe request templates
3242 * should be the maximum length possible for a template, without
3243 * the IEEE80211 header of the template
3245 wl
->hw
->wiphy
->max_scan_ie_len
= WL1271_CMD_TEMPL_MAX_SIZE
-
3246 sizeof(struct ieee80211_header
);
3249 * We keep local copies of the band structs because we need to
3250 * modify them on a per-device basis.
3252 memcpy(&wl
->bands
[IEEE80211_BAND_2GHZ
], &wl1271_band_2ghz
,
3253 sizeof(wl1271_band_2ghz
));
3254 memcpy(&wl
->bands
[IEEE80211_BAND_5GHZ
], &wl1271_band_5ghz
,
3255 sizeof(wl1271_band_5ghz
));
3257 wl
->hw
->wiphy
->bands
[IEEE80211_BAND_2GHZ
] =
3258 &wl
->bands
[IEEE80211_BAND_2GHZ
];
3259 wl
->hw
->wiphy
->bands
[IEEE80211_BAND_5GHZ
] =
3260 &wl
->bands
[IEEE80211_BAND_5GHZ
];
3263 wl
->hw
->max_rates
= 1;
3265 wl
->hw
->wiphy
->reg_notifier
= wl1271_reg_notify
;
3267 SET_IEEE80211_DEV(wl
->hw
, wl1271_wl_to_dev(wl
));
3269 wl
->hw
->sta_data_size
= sizeof(struct wl1271_station
);
3271 wl
->hw
->max_rx_aggregation_subframes
= 8;
3275 EXPORT_SYMBOL_GPL(wl1271_init_ieee80211
);
3277 #define WL1271_DEFAULT_CHANNEL 0
3279 struct ieee80211_hw
*wl1271_alloc_hw(void)
3281 struct ieee80211_hw
*hw
;
3282 struct platform_device
*plat_dev
= NULL
;
3287 hw
= ieee80211_alloc_hw(sizeof(*wl
), &wl1271_ops
);
3289 wl1271_error("could not alloc ieee80211_hw");
3294 plat_dev
= kmemdup(&wl1271_device
, sizeof(wl1271_device
), GFP_KERNEL
);
3296 wl1271_error("could not allocate platform_device");
3298 goto err_plat_alloc
;
3302 memset(wl
, 0, sizeof(*wl
));
3304 INIT_LIST_HEAD(&wl
->list
);
3307 wl
->plat_dev
= plat_dev
;
3309 for (i
= 0; i
< NUM_TX_QUEUES
; i
++)
3310 skb_queue_head_init(&wl
->tx_queue
[i
]);
3312 INIT_DELAYED_WORK(&wl
->elp_work
, wl1271_elp_work
);
3313 INIT_DELAYED_WORK(&wl
->pspoll_work
, wl1271_pspoll_work
);
3314 INIT_WORK(&wl
->irq_work
, wl1271_irq_work
);
3315 INIT_WORK(&wl
->tx_work
, wl1271_tx_work
);
3316 INIT_WORK(&wl
->recovery_work
, wl1271_recovery_work
);
3317 INIT_DELAYED_WORK(&wl
->scan_complete_work
, wl1271_scan_complete_work
);
3318 wl
->channel
= WL1271_DEFAULT_CHANNEL
;
3319 wl
->beacon_int
= WL1271_DEFAULT_BEACON_INT
;
3320 wl
->default_key
= 0;
3322 wl
->rx_config
= WL1271_DEFAULT_STA_RX_CONFIG
;
3323 wl
->rx_filter
= WL1271_DEFAULT_STA_RX_FILTER
;
3324 wl
->psm_entry_retry
= 0;
3325 wl
->power_level
= WL1271_DEFAULT_POWER_LEVEL
;
3326 wl
->basic_rate_set
= CONF_TX_RATE_MASK_BASIC
;
3327 wl
->basic_rate
= CONF_TX_RATE_MASK_BASIC
;
3328 wl
->rate_set
= CONF_TX_RATE_MASK_BASIC
;
3329 wl
->sta_rate_set
= 0;
3330 wl
->band
= IEEE80211_BAND_2GHZ
;
3333 wl
->sg_enabled
= true;
3335 wl
->bss_type
= MAX_BSS_TYPE
;
3336 wl
->set_bss_type
= MAX_BSS_TYPE
;
3337 wl
->fw_bss_type
= MAX_BSS_TYPE
;
3339 memset(wl
->tx_frames_map
, 0, sizeof(wl
->tx_frames_map
));
3340 for (i
= 0; i
< ACX_TX_DESCRIPTORS
; i
++)
3341 wl
->tx_frames
[i
] = NULL
;
3343 spin_lock_init(&wl
->wl_lock
);
3345 wl
->state
= WL1271_STATE_OFF
;
3346 mutex_init(&wl
->mutex
);
3348 /* Apply default driver configuration. */
3349 wl1271_conf_init(wl
);
3351 order
= get_order(WL1271_AGGR_BUFFER_SIZE
);
3352 wl
->aggr_buf
= (u8
*)__get_free_pages(GFP_KERNEL
, order
);
3353 if (!wl
->aggr_buf
) {
3358 /* Register platform device */
3359 ret
= platform_device_register(wl
->plat_dev
);
3361 wl1271_error("couldn't register platform device");
3364 dev_set_drvdata(&wl
->plat_dev
->dev
, wl
);
3366 /* Create sysfs file to control bt coex state */
3367 ret
= device_create_file(&wl
->plat_dev
->dev
, &dev_attr_bt_coex_state
);
3369 wl1271_error("failed to create sysfs file bt_coex_state");
3373 /* Create sysfs file to get HW PG version */
3374 ret
= device_create_file(&wl
->plat_dev
->dev
, &dev_attr_hw_pg_ver
);
3376 wl1271_error("failed to create sysfs file hw_pg_ver");
3377 goto err_bt_coex_state
;
3383 device_remove_file(&wl
->plat_dev
->dev
, &dev_attr_bt_coex_state
);
3386 platform_device_unregister(wl
->plat_dev
);
3389 free_pages((unsigned long)wl
->aggr_buf
, order
);
3392 wl1271_debugfs_exit(wl
);
3396 ieee80211_free_hw(hw
);
3400 return ERR_PTR(ret
);
3402 EXPORT_SYMBOL_GPL(wl1271_alloc_hw
);
3404 int wl1271_free_hw(struct wl1271
*wl
)
3406 platform_device_unregister(wl
->plat_dev
);
3407 free_pages((unsigned long)wl
->aggr_buf
,
3408 get_order(WL1271_AGGR_BUFFER_SIZE
));
3409 kfree(wl
->plat_dev
);
3411 wl1271_debugfs_exit(wl
);
3418 kfree(wl
->fw_status
);
3419 kfree(wl
->tx_res_if
);
3421 ieee80211_free_hw(wl
->hw
);
3425 EXPORT_SYMBOL_GPL(wl1271_free_hw
);
3427 u32 wl12xx_debug_level
= DEBUG_NONE
;
3428 EXPORT_SYMBOL_GPL(wl12xx_debug_level
);
3429 module_param_named(debug_level
, wl12xx_debug_level
, uint
, S_IRUSR
| S_IWUSR
);
3430 MODULE_PARM_DESC(debug_level
, "wl12xx debugging level");
3432 MODULE_LICENSE("GPL");
3433 MODULE_AUTHOR("Luciano Coelho <luciano.coelho@nokia.com>");
3434 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");