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_entry_nullfunc_retries
= 3,
260 .psm_entry_hangover_period
= 1,
261 .keep_alive_interval
= 55000,
262 .max_listen_interval
= 20,
269 .host_clk_settling_time
= 5000,
270 .host_fast_wakeup_support
= false
274 .avg_weight_rssi_beacon
= 20,
275 .avg_weight_rssi_data
= 10,
276 .avg_weight_snr_beacon
= 20,
277 .avg_weight_snr_data
= 10
280 .min_dwell_time_active
= 7500,
281 .max_dwell_time_active
= 30000,
282 .min_dwell_time_passive
= 30000,
283 .max_dwell_time_passive
= 60000,
287 .tx_per_channel_power_compensation_2
= {
288 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
290 .tx_per_channel_power_compensation_5
= {
291 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
292 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
293 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
298 static void __wl1271_op_remove_interface(struct wl1271
*wl
);
299 static void wl1271_free_ap_keys(struct wl1271
*wl
);
302 static void wl1271_device_release(struct device
*dev
)
307 static struct platform_device wl1271_device
= {
311 /* device model insists to have a release function */
313 .release
= wl1271_device_release
,
317 static LIST_HEAD(wl_list
);
319 static int wl1271_dev_notify(struct notifier_block
*me
, unsigned long what
,
322 struct net_device
*dev
= arg
;
323 struct wireless_dev
*wdev
;
325 struct ieee80211_hw
*hw
;
327 struct wl1271
*wl_temp
;
330 /* Check that this notification is for us. */
331 if (what
!= NETDEV_CHANGE
)
334 wdev
= dev
->ieee80211_ptr
;
342 hw
= wiphy_priv(wiphy
);
347 list_for_each_entry(wl
, &wl_list
, list
) {
354 mutex_lock(&wl
->mutex
);
356 if (wl
->state
== WL1271_STATE_OFF
)
359 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
362 ret
= wl1271_ps_elp_wakeup(wl
, false);
366 if ((dev
->operstate
== IF_OPER_UP
) &&
367 !test_and_set_bit(WL1271_FLAG_STA_STATE_SENT
, &wl
->flags
)) {
368 wl1271_cmd_set_sta_state(wl
);
369 wl1271_info("Association completed.");
372 wl1271_ps_elp_sleep(wl
);
375 mutex_unlock(&wl
->mutex
);
380 static int wl1271_reg_notify(struct wiphy
*wiphy
,
381 struct regulatory_request
*request
)
383 struct ieee80211_supported_band
*band
;
384 struct ieee80211_channel
*ch
;
387 band
= wiphy
->bands
[IEEE80211_BAND_5GHZ
];
388 for (i
= 0; i
< band
->n_channels
; i
++) {
389 ch
= &band
->channels
[i
];
390 if (ch
->flags
& IEEE80211_CHAN_DISABLED
)
393 if (ch
->flags
& IEEE80211_CHAN_RADAR
)
394 ch
->flags
|= IEEE80211_CHAN_NO_IBSS
|
395 IEEE80211_CHAN_PASSIVE_SCAN
;
402 static void wl1271_conf_init(struct wl1271
*wl
)
406 * This function applies the default configuration to the driver. This
407 * function is invoked upon driver load (spi probe.)
409 * The configuration is stored in a run-time structure in order to
410 * facilitate for run-time adjustment of any of the parameters. Making
411 * changes to the configuration structure will apply the new values on
412 * the next interface up (wl1271_op_start.)
415 /* apply driver default configuration */
416 memcpy(&wl
->conf
, &default_conf
, sizeof(default_conf
));
420 static int wl1271_plt_init(struct wl1271
*wl
)
422 struct conf_tx_ac_category
*conf_ac
;
423 struct conf_tx_tid
*conf_tid
;
426 ret
= wl1271_cmd_general_parms(wl
);
430 ret
= wl1271_cmd_radio_parms(wl
);
434 ret
= wl1271_cmd_ext_radio_parms(wl
);
438 ret
= wl1271_sta_init_templates_config(wl
);
442 ret
= wl1271_acx_init_mem_config(wl
);
446 /* PHY layer config */
447 ret
= wl1271_init_phy_config(wl
);
449 goto out_free_memmap
;
451 ret
= wl1271_acx_dco_itrim_params(wl
);
453 goto out_free_memmap
;
455 /* Initialize connection monitoring thresholds */
456 ret
= wl1271_acx_conn_monit_params(wl
, false);
458 goto out_free_memmap
;
460 /* Bluetooth WLAN coexistence */
461 ret
= wl1271_init_pta(wl
);
463 goto out_free_memmap
;
465 /* Energy detection */
466 ret
= wl1271_init_energy_detection(wl
);
468 goto out_free_memmap
;
470 /* Default fragmentation threshold */
471 ret
= wl1271_acx_frag_threshold(wl
, wl
->conf
.tx
.frag_threshold
);
473 goto out_free_memmap
;
475 /* Default TID/AC configuration */
476 BUG_ON(wl
->conf
.tx
.tid_conf_count
!= wl
->conf
.tx
.ac_conf_count
);
477 for (i
= 0; i
< wl
->conf
.tx
.tid_conf_count
; i
++) {
478 conf_ac
= &wl
->conf
.tx
.ac_conf
[i
];
479 ret
= wl1271_acx_ac_cfg(wl
, conf_ac
->ac
, conf_ac
->cw_min
,
480 conf_ac
->cw_max
, conf_ac
->aifsn
,
481 conf_ac
->tx_op_limit
);
483 goto out_free_memmap
;
485 conf_tid
= &wl
->conf
.tx
.tid_conf
[i
];
486 ret
= wl1271_acx_tid_cfg(wl
, conf_tid
->queue_id
,
487 conf_tid
->channel_type
,
490 conf_tid
->ack_policy
,
491 conf_tid
->apsd_conf
[0],
492 conf_tid
->apsd_conf
[1]);
494 goto out_free_memmap
;
497 /* Enable data path */
498 ret
= wl1271_cmd_data_path(wl
, 1);
500 goto out_free_memmap
;
502 /* Configure for CAM power saving (ie. always active) */
503 ret
= wl1271_acx_sleep_auth(wl
, WL1271_PSM_CAM
);
505 goto out_free_memmap
;
508 ret
= wl1271_acx_pm_config(wl
);
510 goto out_free_memmap
;
515 kfree(wl
->target_mem_map
);
516 wl
->target_mem_map
= NULL
;
521 static void wl1271_fw_status(struct wl1271
*wl
,
522 struct wl1271_fw_status
*status
)
528 wl1271_raw_read(wl
, FW_STATUS_ADDR
, status
, sizeof(*status
), false);
530 wl1271_debug(DEBUG_IRQ
, "intr: 0x%x (fw_rx_counter = %d, "
531 "drv_rx_counter = %d, tx_results_counter = %d)",
533 status
->fw_rx_counter
,
534 status
->drv_rx_counter
,
535 status
->tx_results_counter
);
537 /* update number of available TX blocks */
538 for (i
= 0; i
< NUM_TX_QUEUES
; i
++) {
539 u32 cnt
= le32_to_cpu(status
->tx_released_blks
[i
]) -
540 wl
->tx_blocks_freed
[i
];
542 wl
->tx_blocks_freed
[i
] =
543 le32_to_cpu(status
->tx_released_blks
[i
]);
544 wl
->tx_blocks_available
+= cnt
;
548 /* if more blocks are available now, tx work can be scheduled */
550 clear_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
);
552 /* update the host-chipset time offset */
554 wl
->time_offset
= (timespec_to_ns(&ts
) >> 10) -
555 (s64
)le32_to_cpu(status
->fw_localtime
);
558 #define WL1271_IRQ_MAX_LOOPS 10
560 static void wl1271_irq_work(struct work_struct
*work
)
564 int loopcount
= WL1271_IRQ_MAX_LOOPS
;
567 container_of(work
, struct wl1271
, irq_work
);
569 mutex_lock(&wl
->mutex
);
571 wl1271_debug(DEBUG_IRQ
, "IRQ work");
573 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
576 ret
= wl1271_ps_elp_wakeup(wl
, true);
580 spin_lock_irqsave(&wl
->wl_lock
, flags
);
581 while (test_bit(WL1271_FLAG_IRQ_PENDING
, &wl
->flags
) && loopcount
) {
582 clear_bit(WL1271_FLAG_IRQ_PENDING
, &wl
->flags
);
583 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
586 wl1271_fw_status(wl
, wl
->fw_status
);
587 intr
= le32_to_cpu(wl
->fw_status
->intr
);
589 wl1271_debug(DEBUG_IRQ
, "Zero interrupt received.");
590 spin_lock_irqsave(&wl
->wl_lock
, flags
);
594 intr
&= WL1271_INTR_MASK
;
596 if (unlikely(intr
& WL1271_ACX_INTR_WATCHDOG
)) {
597 wl1271_error("watchdog interrupt received! "
598 "starting recovery.");
599 ieee80211_queue_work(wl
->hw
, &wl
->recovery_work
);
601 /* restarting the chip. ignore any other interrupt. */
605 if (intr
& WL1271_ACX_INTR_DATA
) {
606 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_DATA");
608 /* check for tx results */
609 if (wl
->fw_status
->tx_results_counter
!=
610 (wl
->tx_results_count
& 0xff))
611 wl1271_tx_complete(wl
);
613 /* Check if any tx blocks were freed */
614 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
) &&
615 wl
->tx_queue_count
) {
617 * In order to avoid starvation of the TX path,
618 * call the work function directly.
620 wl1271_tx_work_locked(wl
);
623 wl1271_rx(wl
, wl
->fw_status
);
626 if (intr
& WL1271_ACX_INTR_EVENT_A
) {
627 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_EVENT_A");
628 wl1271_event_handle(wl
, 0);
631 if (intr
& WL1271_ACX_INTR_EVENT_B
) {
632 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_EVENT_B");
633 wl1271_event_handle(wl
, 1);
636 if (intr
& WL1271_ACX_INTR_INIT_COMPLETE
)
637 wl1271_debug(DEBUG_IRQ
,
638 "WL1271_ACX_INTR_INIT_COMPLETE");
640 if (intr
& WL1271_ACX_INTR_HW_AVAILABLE
)
641 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_HW_AVAILABLE");
643 spin_lock_irqsave(&wl
->wl_lock
, flags
);
646 if (test_bit(WL1271_FLAG_IRQ_PENDING
, &wl
->flags
))
647 ieee80211_queue_work(wl
->hw
, &wl
->irq_work
);
649 clear_bit(WL1271_FLAG_IRQ_RUNNING
, &wl
->flags
);
650 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
652 wl1271_ps_elp_sleep(wl
);
655 mutex_unlock(&wl
->mutex
);
658 static int wl1271_fetch_firmware(struct wl1271
*wl
)
660 const struct firmware
*fw
;
664 switch (wl
->bss_type
) {
665 case BSS_TYPE_AP_BSS
:
666 fw_name
= WL1271_AP_FW_NAME
;
669 case BSS_TYPE_STA_BSS
:
670 fw_name
= WL1271_FW_NAME
;
673 wl1271_error("no compatible firmware for bss_type %d",
678 wl1271_debug(DEBUG_BOOT
, "booting firmware %s", fw_name
);
680 ret
= request_firmware(&fw
, fw_name
, wl1271_wl_to_dev(wl
));
683 wl1271_error("could not get firmware: %d", ret
);
688 wl1271_error("firmware size is not multiple of 32 bits: %zu",
695 wl
->fw_len
= fw
->size
;
696 wl
->fw
= vmalloc(wl
->fw_len
);
699 wl1271_error("could not allocate memory for the firmware");
704 memcpy(wl
->fw
, fw
->data
, wl
->fw_len
);
705 wl
->fw_bss_type
= wl
->bss_type
;
709 release_firmware(fw
);
714 static int wl1271_fetch_nvs(struct wl1271
*wl
)
716 const struct firmware
*fw
;
719 ret
= request_firmware(&fw
, WL1271_NVS_NAME
, wl1271_wl_to_dev(wl
));
722 wl1271_error("could not get nvs file: %d", ret
);
726 wl
->nvs
= kmemdup(fw
->data
, sizeof(struct wl1271_nvs_file
), GFP_KERNEL
);
729 wl1271_error("could not allocate memory for the nvs file");
734 wl
->nvs_len
= fw
->size
;
737 release_firmware(fw
);
742 static void wl1271_recovery_work(struct work_struct
*work
)
745 container_of(work
, struct wl1271
, recovery_work
);
747 mutex_lock(&wl
->mutex
);
749 if (wl
->state
!= WL1271_STATE_ON
)
752 wl1271_info("Hardware recovery in progress.");
754 if (test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
755 ieee80211_connection_loss(wl
->vif
);
757 /* reboot the chipset */
758 __wl1271_op_remove_interface(wl
);
759 ieee80211_restart_hw(wl
->hw
);
762 mutex_unlock(&wl
->mutex
);
765 static void wl1271_fw_wakeup(struct wl1271
*wl
)
769 elp_reg
= ELPCTRL_WAKE_UP
;
770 wl1271_raw_write32(wl
, HW_ACCESS_ELP_CTRL_REG_ADDR
, elp_reg
);
773 static int wl1271_setup(struct wl1271
*wl
)
775 wl
->fw_status
= kmalloc(sizeof(*wl
->fw_status
), GFP_KERNEL
);
779 wl
->tx_res_if
= kmalloc(sizeof(*wl
->tx_res_if
), GFP_KERNEL
);
780 if (!wl
->tx_res_if
) {
781 kfree(wl
->fw_status
);
788 static int wl1271_chip_wakeup(struct wl1271
*wl
)
790 struct wl1271_partition_set partition
;
793 msleep(WL1271_PRE_POWER_ON_SLEEP
);
794 ret
= wl1271_power_on(wl
);
797 msleep(WL1271_POWER_ON_SLEEP
);
801 /* We don't need a real memory partition here, because we only want
802 * to use the registers at this point. */
803 memset(&partition
, 0, sizeof(partition
));
804 partition
.reg
.start
= REGISTERS_BASE
;
805 partition
.reg
.size
= REGISTERS_DOWN_SIZE
;
806 wl1271_set_partition(wl
, &partition
);
808 /* ELP module wake up */
809 wl1271_fw_wakeup(wl
);
811 /* whal_FwCtrl_BootSm() */
813 /* 0. read chip id from CHIP_ID */
814 wl
->chip
.id
= wl1271_read32(wl
, CHIP_ID_B
);
816 /* 1. check if chip id is valid */
818 switch (wl
->chip
.id
) {
819 case CHIP_ID_1271_PG10
:
820 wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
823 ret
= wl1271_setup(wl
);
827 case CHIP_ID_1271_PG20
:
828 wl1271_debug(DEBUG_BOOT
, "chip id 0x%x (1271 PG20)",
831 ret
= wl1271_setup(wl
);
836 wl1271_warning("unsupported chip id: 0x%x", wl
->chip
.id
);
841 /* Make sure the firmware type matches the BSS type */
842 if (wl
->fw
== NULL
|| wl
->fw_bss_type
!= wl
->bss_type
) {
843 ret
= wl1271_fetch_firmware(wl
);
848 /* No NVS from netlink, try to get it from the filesystem */
849 if (wl
->nvs
== NULL
) {
850 ret
= wl1271_fetch_nvs(wl
);
859 int wl1271_plt_start(struct wl1271
*wl
)
861 int retries
= WL1271_BOOT_RETRIES
;
864 mutex_lock(&wl
->mutex
);
866 wl1271_notice("power up");
868 if (wl
->state
!= WL1271_STATE_OFF
) {
869 wl1271_error("cannot go into PLT state because not "
870 "in off state: %d", wl
->state
);
875 wl
->bss_type
= BSS_TYPE_STA_BSS
;
879 ret
= wl1271_chip_wakeup(wl
);
883 ret
= wl1271_boot(wl
);
887 ret
= wl1271_plt_init(wl
);
891 wl
->state
= WL1271_STATE_PLT
;
892 wl1271_notice("firmware booted in PLT mode (%s)",
897 wl1271_disable_interrupts(wl
);
898 mutex_unlock(&wl
->mutex
);
899 /* Unlocking the mutex in the middle of handling is
900 inherently unsafe. In this case we deem it safe to do,
901 because we need to let any possibly pending IRQ out of
902 the system (and while we are WL1271_STATE_OFF the IRQ
903 work function will not do anything.) Also, any other
904 possible concurrent operations will fail due to the
905 current state, hence the wl1271 struct should be safe. */
906 cancel_work_sync(&wl
->irq_work
);
907 mutex_lock(&wl
->mutex
);
909 wl1271_power_off(wl
);
912 wl1271_error("firmware boot in PLT mode failed despite %d retries",
913 WL1271_BOOT_RETRIES
);
915 mutex_unlock(&wl
->mutex
);
920 int wl1271_plt_stop(struct wl1271
*wl
)
924 mutex_lock(&wl
->mutex
);
926 wl1271_notice("power down");
928 if (wl
->state
!= WL1271_STATE_PLT
) {
929 wl1271_error("cannot power down because not in PLT "
930 "state: %d", wl
->state
);
935 wl1271_disable_interrupts(wl
);
936 wl1271_power_off(wl
);
938 wl
->state
= WL1271_STATE_OFF
;
942 mutex_unlock(&wl
->mutex
);
944 cancel_work_sync(&wl
->irq_work
);
945 cancel_work_sync(&wl
->recovery_work
);
950 static int wl1271_op_tx(struct ieee80211_hw
*hw
, struct sk_buff
*skb
)
952 struct wl1271
*wl
= hw
->priv
;
953 struct ieee80211_conf
*conf
= &hw
->conf
;
954 struct ieee80211_tx_info
*txinfo
= IEEE80211_SKB_CB(skb
);
955 struct ieee80211_sta
*sta
= txinfo
->control
.sta
;
960 * peek into the rates configured in the STA entry.
961 * The rates set after connection stage, The first block only BG sets:
962 * the compare is for bit 0-16 of sta_rate_set. The second block add
963 * HT rates in case of HT supported.
965 spin_lock_irqsave(&wl
->wl_lock
, flags
);
967 (sta
->supp_rates
[conf
->channel
->band
] !=
968 (wl
->sta_rate_set
& HW_BG_RATES_MASK
)) &&
969 wl
->bss_type
!= BSS_TYPE_AP_BSS
) {
970 wl
->sta_rate_set
= sta
->supp_rates
[conf
->channel
->band
];
971 set_bit(WL1271_FLAG_STA_RATES_CHANGED
, &wl
->flags
);
974 #ifdef CONFIG_WL12XX_HT
976 sta
->ht_cap
.ht_supported
&&
977 ((wl
->sta_rate_set
>> HW_HT_RATES_OFFSET
) !=
978 sta
->ht_cap
.mcs
.rx_mask
[0])) {
979 /* Clean MCS bits before setting them */
980 wl
->sta_rate_set
&= HW_BG_RATES_MASK
;
982 (sta
->ht_cap
.mcs
.rx_mask
[0] << HW_HT_RATES_OFFSET
);
983 set_bit(WL1271_FLAG_STA_RATES_CHANGED
, &wl
->flags
);
986 wl
->tx_queue_count
++;
987 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
989 /* queue the packet */
990 q
= wl1271_tx_get_queue(skb_get_queue_mapping(skb
));
991 skb_queue_tail(&wl
->tx_queue
[q
], skb
);
994 * The chip specific setup must run before the first TX packet -
995 * before that, the tx_work will not be initialized!
998 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
))
999 ieee80211_queue_work(wl
->hw
, &wl
->tx_work
);
1002 * The workqueue is slow to process the tx_queue and we need stop
1003 * the queue here, otherwise the queue will get too long.
1005 if (wl
->tx_queue_count
>= WL1271_TX_QUEUE_HIGH_WATERMARK
) {
1006 wl1271_debug(DEBUG_TX
, "op_tx: stopping queues");
1008 spin_lock_irqsave(&wl
->wl_lock
, flags
);
1009 ieee80211_stop_queues(wl
->hw
);
1010 set_bit(WL1271_FLAG_TX_QUEUE_STOPPED
, &wl
->flags
);
1011 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
1014 return NETDEV_TX_OK
;
1017 static struct notifier_block wl1271_dev_notifier
= {
1018 .notifier_call
= wl1271_dev_notify
,
1021 static int wl1271_op_start(struct ieee80211_hw
*hw
)
1023 wl1271_debug(DEBUG_MAC80211
, "mac80211 start");
1026 * We have to delay the booting of the hardware because
1027 * we need to know the local MAC address before downloading and
1028 * initializing the firmware. The MAC address cannot be changed
1029 * after boot, and without the proper MAC address, the firmware
1030 * will not function properly.
1032 * The MAC address is first known when the corresponding interface
1033 * is added. That is where we will initialize the hardware.
1035 * In addition, we currently have different firmwares for AP and managed
1036 * operation. We will know which to boot according to interface type.
1042 static void wl1271_op_stop(struct ieee80211_hw
*hw
)
1044 wl1271_debug(DEBUG_MAC80211
, "mac80211 stop");
1047 static int wl1271_op_add_interface(struct ieee80211_hw
*hw
,
1048 struct ieee80211_vif
*vif
)
1050 struct wl1271
*wl
= hw
->priv
;
1051 struct wiphy
*wiphy
= hw
->wiphy
;
1052 int retries
= WL1271_BOOT_RETRIES
;
1054 bool booted
= false;
1056 wl1271_debug(DEBUG_MAC80211
, "mac80211 add interface type %d mac %pM",
1057 vif
->type
, vif
->addr
);
1059 mutex_lock(&wl
->mutex
);
1061 wl1271_debug(DEBUG_MAC80211
,
1062 "multiple vifs are not supported yet");
1067 switch (vif
->type
) {
1068 case NL80211_IFTYPE_STATION
:
1069 wl
->bss_type
= BSS_TYPE_STA_BSS
;
1070 wl
->set_bss_type
= BSS_TYPE_STA_BSS
;
1072 case NL80211_IFTYPE_ADHOC
:
1073 wl
->bss_type
= BSS_TYPE_IBSS
;
1074 wl
->set_bss_type
= BSS_TYPE_STA_BSS
;
1081 memcpy(wl
->mac_addr
, vif
->addr
, ETH_ALEN
);
1083 if (wl
->state
!= WL1271_STATE_OFF
) {
1084 wl1271_error("cannot start because not in off state: %d",
1092 ret
= wl1271_chip_wakeup(wl
);
1096 ret
= wl1271_boot(wl
);
1100 ret
= wl1271_hw_init(wl
);
1108 wl1271_disable_interrupts(wl
);
1109 mutex_unlock(&wl
->mutex
);
1110 /* Unlocking the mutex in the middle of handling is
1111 inherently unsafe. In this case we deem it safe to do,
1112 because we need to let any possibly pending IRQ out of
1113 the system (and while we are WL1271_STATE_OFF the IRQ
1114 work function will not do anything.) Also, any other
1115 possible concurrent operations will fail due to the
1116 current state, hence the wl1271 struct should be safe. */
1117 cancel_work_sync(&wl
->irq_work
);
1118 mutex_lock(&wl
->mutex
);
1120 wl1271_power_off(wl
);
1124 wl1271_error("firmware boot failed despite %d retries",
1125 WL1271_BOOT_RETRIES
);
1130 wl
->state
= WL1271_STATE_ON
;
1131 wl1271_info("firmware booted (%s)", wl
->chip
.fw_ver
);
1133 /* update hw/fw version info in wiphy struct */
1134 wiphy
->hw_version
= wl
->chip
.id
;
1135 strncpy(wiphy
->fw_version
, wl
->chip
.fw_ver
,
1136 sizeof(wiphy
->fw_version
));
1139 * Now we know if 11a is supported (info from the NVS), so disable
1140 * 11a channels if not supported
1142 if (!wl
->enable_11a
)
1143 wiphy
->bands
[IEEE80211_BAND_5GHZ
]->n_channels
= 0;
1145 wl1271_debug(DEBUG_MAC80211
, "11a is %ssupported",
1146 wl
->enable_11a
? "" : "not ");
1149 mutex_unlock(&wl
->mutex
);
1152 list_add(&wl
->list
, &wl_list
);
1157 static void __wl1271_op_remove_interface(struct wl1271
*wl
)
1161 wl1271_debug(DEBUG_MAC80211
, "mac80211 remove interface");
1163 wl1271_info("down");
1165 list_del(&wl
->list
);
1167 WARN_ON(wl
->state
!= WL1271_STATE_ON
);
1169 /* enable dyn ps just in case (if left on due to fw crash etc) */
1170 if (wl
->bss_type
== BSS_TYPE_STA_BSS
)
1171 ieee80211_enable_dyn_ps(wl
->vif
);
1173 if (wl
->scan
.state
!= WL1271_SCAN_STATE_IDLE
) {
1174 wl
->scan
.state
= WL1271_SCAN_STATE_IDLE
;
1175 kfree(wl
->scan
.scanned_ch
);
1176 wl
->scan
.scanned_ch
= NULL
;
1177 wl
->scan
.req
= NULL
;
1178 ieee80211_scan_completed(wl
->hw
, true);
1181 wl
->state
= WL1271_STATE_OFF
;
1183 wl1271_disable_interrupts(wl
);
1185 mutex_unlock(&wl
->mutex
);
1187 cancel_delayed_work_sync(&wl
->scan_complete_work
);
1188 cancel_work_sync(&wl
->irq_work
);
1189 cancel_work_sync(&wl
->tx_work
);
1190 cancel_delayed_work_sync(&wl
->pspoll_work
);
1191 cancel_delayed_work_sync(&wl
->elp_work
);
1193 mutex_lock(&wl
->mutex
);
1195 /* let's notify MAC80211 about the remaining pending TX frames */
1196 wl1271_tx_reset(wl
);
1197 wl1271_power_off(wl
);
1199 memset(wl
->bssid
, 0, ETH_ALEN
);
1200 memset(wl
->ssid
, 0, IW_ESSID_MAX_SIZE
+ 1);
1202 wl
->bss_type
= MAX_BSS_TYPE
;
1203 wl
->set_bss_type
= MAX_BSS_TYPE
;
1204 wl
->band
= IEEE80211_BAND_2GHZ
;
1207 wl
->psm_entry_retry
= 0;
1208 wl
->power_level
= WL1271_DEFAULT_POWER_LEVEL
;
1209 wl
->tx_blocks_available
= 0;
1210 wl
->tx_results_count
= 0;
1211 wl
->tx_packets_count
= 0;
1212 wl
->tx_security_last_seq
= 0;
1213 wl
->tx_security_seq
= 0;
1214 wl
->time_offset
= 0;
1215 wl
->session_counter
= 0;
1216 wl
->rate_set
= CONF_TX_RATE_MASK_BASIC
;
1217 wl
->sta_rate_set
= 0;
1221 wl1271_free_ap_keys(wl
);
1222 memset(wl
->ap_hlid_map
, 0, sizeof(wl
->ap_hlid_map
));
1224 for (i
= 0; i
< NUM_TX_QUEUES
; i
++)
1225 wl
->tx_blocks_freed
[i
] = 0;
1227 wl1271_debugfs_reset(wl
);
1229 kfree(wl
->fw_status
);
1230 wl
->fw_status
= NULL
;
1231 kfree(wl
->tx_res_if
);
1232 wl
->tx_res_if
= NULL
;
1233 kfree(wl
->target_mem_map
);
1234 wl
->target_mem_map
= NULL
;
1237 static void wl1271_op_remove_interface(struct ieee80211_hw
*hw
,
1238 struct ieee80211_vif
*vif
)
1240 struct wl1271
*wl
= hw
->priv
;
1242 mutex_lock(&wl
->mutex
);
1244 * wl->vif can be null here if someone shuts down the interface
1245 * just when hardware recovery has been started.
1248 WARN_ON(wl
->vif
!= vif
);
1249 __wl1271_op_remove_interface(wl
);
1252 mutex_unlock(&wl
->mutex
);
1253 cancel_work_sync(&wl
->recovery_work
);
1256 static void wl1271_configure_filters(struct wl1271
*wl
, unsigned int filters
)
1258 wl1271_set_default_filters(wl
);
1260 /* combine requested filters with current filter config */
1261 filters
= wl
->filters
| filters
;
1263 wl1271_debug(DEBUG_FILTERS
, "RX filters set: ");
1265 if (filters
& FIF_PROMISC_IN_BSS
) {
1266 wl1271_debug(DEBUG_FILTERS
, " - FIF_PROMISC_IN_BSS");
1267 wl
->rx_config
&= ~CFG_UNI_FILTER_EN
;
1268 wl
->rx_config
|= CFG_BSSID_FILTER_EN
;
1270 if (filters
& FIF_BCN_PRBRESP_PROMISC
) {
1271 wl1271_debug(DEBUG_FILTERS
, " - FIF_BCN_PRBRESP_PROMISC");
1272 wl
->rx_config
&= ~CFG_BSSID_FILTER_EN
;
1273 wl
->rx_config
&= ~CFG_SSID_FILTER_EN
;
1275 if (filters
& FIF_OTHER_BSS
) {
1276 wl1271_debug(DEBUG_FILTERS
, " - FIF_OTHER_BSS");
1277 wl
->rx_config
&= ~CFG_BSSID_FILTER_EN
;
1279 if (filters
& FIF_CONTROL
) {
1280 wl1271_debug(DEBUG_FILTERS
, " - FIF_CONTROL");
1281 wl
->rx_filter
|= CFG_RX_CTL_EN
;
1283 if (filters
& FIF_FCSFAIL
) {
1284 wl1271_debug(DEBUG_FILTERS
, " - FIF_FCSFAIL");
1285 wl
->rx_filter
|= CFG_RX_FCS_ERROR
;
1289 static int wl1271_dummy_join(struct wl1271
*wl
)
1292 /* we need to use a dummy BSSID for now */
1293 static const u8 dummy_bssid
[ETH_ALEN
] = { 0x0b, 0xad, 0xde,
1296 memcpy(wl
->bssid
, dummy_bssid
, ETH_ALEN
);
1298 /* pass through frames from all BSS */
1299 wl1271_configure_filters(wl
, FIF_OTHER_BSS
);
1301 ret
= wl1271_cmd_join(wl
, wl
->set_bss_type
);
1305 set_bit(WL1271_FLAG_JOINED
, &wl
->flags
);
1311 static int wl1271_join(struct wl1271
*wl
, bool set_assoc
)
1316 * One of the side effects of the JOIN command is that is clears
1317 * WPA/WPA2 keys from the chipset. Performing a JOIN while associated
1318 * to a WPA/WPA2 access point will therefore kill the data-path.
1319 * Currently there is no supported scenario for JOIN during
1320 * association - if it becomes a supported scenario, the WPA/WPA2 keys
1321 * must be handled somehow.
1324 if (test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
1325 wl1271_info("JOIN while associated.");
1328 set_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
);
1330 ret
= wl1271_cmd_join(wl
, wl
->set_bss_type
);
1334 set_bit(WL1271_FLAG_JOINED
, &wl
->flags
);
1336 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
1340 * The join command disable the keep-alive mode, shut down its process,
1341 * and also clear the template config, so we need to reset it all after
1342 * the join. The acx_aid starts the keep-alive process, and the order
1343 * of the commands below is relevant.
1345 ret
= wl1271_acx_keep_alive_mode(wl
, true);
1349 ret
= wl1271_acx_aid(wl
, wl
->aid
);
1353 ret
= wl1271_cmd_build_klv_null_data(wl
);
1357 ret
= wl1271_acx_keep_alive_config(wl
, CMD_TEMPL_KLV_IDX_NULL_DATA
,
1358 ACX_KEEP_ALIVE_TPL_VALID
);
1366 static int wl1271_unjoin(struct wl1271
*wl
)
1370 /* to stop listening to a channel, we disconnect */
1371 ret
= wl1271_cmd_disconnect(wl
);
1375 clear_bit(WL1271_FLAG_JOINED
, &wl
->flags
);
1376 memset(wl
->bssid
, 0, ETH_ALEN
);
1378 /* stop filterting packets based on bssid */
1379 wl1271_configure_filters(wl
, FIF_OTHER_BSS
);
1385 static void wl1271_set_band_rate(struct wl1271
*wl
)
1387 if (wl
->band
== IEEE80211_BAND_2GHZ
)
1388 wl
->basic_rate_set
= wl
->conf
.tx
.basic_rate
;
1390 wl
->basic_rate_set
= wl
->conf
.tx
.basic_rate_5
;
1393 static int wl1271_sta_handle_idle(struct wl1271
*wl
, bool idle
)
1398 if (test_bit(WL1271_FLAG_JOINED
, &wl
->flags
)) {
1399 ret
= wl1271_unjoin(wl
);
1403 wl
->rate_set
= wl1271_tx_min_rate_get(wl
);
1404 wl
->sta_rate_set
= 0;
1405 ret
= wl1271_acx_sta_rate_policies(wl
);
1408 ret
= wl1271_acx_keep_alive_config(
1409 wl
, CMD_TEMPL_KLV_IDX_NULL_DATA
,
1410 ACX_KEEP_ALIVE_TPL_INVALID
);
1413 set_bit(WL1271_FLAG_IDLE
, &wl
->flags
);
1415 /* increment the session counter */
1416 wl
->session_counter
++;
1417 if (wl
->session_counter
>= SESSION_COUNTER_MAX
)
1418 wl
->session_counter
= 0;
1419 ret
= wl1271_dummy_join(wl
);
1422 clear_bit(WL1271_FLAG_IDLE
, &wl
->flags
);
1429 static int wl1271_op_config(struct ieee80211_hw
*hw
, u32 changed
)
1431 struct wl1271
*wl
= hw
->priv
;
1432 struct ieee80211_conf
*conf
= &hw
->conf
;
1433 int channel
, ret
= 0;
1436 channel
= ieee80211_frequency_to_channel(conf
->channel
->center_freq
);
1438 wl1271_debug(DEBUG_MAC80211
, "mac80211 config ch %d psm %s power %d %s"
1441 conf
->flags
& IEEE80211_CONF_PS
? "on" : "off",
1443 conf
->flags
& IEEE80211_CONF_IDLE
? "idle" : "in use",
1447 * mac80211 will go to idle nearly immediately after transmitting some
1448 * frames, such as the deauth. To make sure those frames reach the air,
1449 * wait here until the TX queue is fully flushed.
1451 if ((changed
& IEEE80211_CONF_CHANGE_IDLE
) &&
1452 (conf
->flags
& IEEE80211_CONF_IDLE
))
1453 wl1271_tx_flush(wl
);
1455 mutex_lock(&wl
->mutex
);
1457 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
1462 is_ap
= (wl
->bss_type
== BSS_TYPE_AP_BSS
);
1464 ret
= wl1271_ps_elp_wakeup(wl
, false);
1468 /* if the channel changes while joined, join again */
1469 if (changed
& IEEE80211_CONF_CHANGE_CHANNEL
&&
1470 ((wl
->band
!= conf
->channel
->band
) ||
1471 (wl
->channel
!= channel
))) {
1472 wl
->band
= conf
->channel
->band
;
1473 wl
->channel
= channel
;
1477 * FIXME: the mac80211 should really provide a fixed
1478 * rate to use here. for now, just use the smallest
1479 * possible rate for the band as a fixed rate for
1480 * association frames and other control messages.
1482 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
1483 wl1271_set_band_rate(wl
);
1485 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
1486 ret
= wl1271_acx_sta_rate_policies(wl
);
1488 wl1271_warning("rate policy for channel "
1491 if (test_bit(WL1271_FLAG_JOINED
, &wl
->flags
)) {
1492 ret
= wl1271_join(wl
, false);
1494 wl1271_warning("cmd join on channel "
1500 if (changed
& IEEE80211_CONF_CHANGE_IDLE
&& !is_ap
) {
1501 ret
= wl1271_sta_handle_idle(wl
,
1502 conf
->flags
& IEEE80211_CONF_IDLE
);
1504 wl1271_warning("idle mode change failed %d", ret
);
1508 * if mac80211 changes the PSM mode, make sure the mode is not
1509 * incorrectly changed after the pspoll failure active window.
1511 if (changed
& IEEE80211_CONF_CHANGE_PS
)
1512 clear_bit(WL1271_FLAG_PSPOLL_FAILURE
, &wl
->flags
);
1514 if (conf
->flags
& IEEE80211_CONF_PS
&&
1515 !test_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
)) {
1516 set_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
);
1519 * We enter PSM only if we're already associated.
1520 * If we're not, we'll enter it when joining an SSID,
1521 * through the bss_info_changed() hook.
1523 if (test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
)) {
1524 wl1271_debug(DEBUG_PSM
, "psm enabled");
1525 ret
= wl1271_ps_set_mode(wl
, STATION_POWER_SAVE_MODE
,
1526 wl
->basic_rate
, true);
1528 } else if (!(conf
->flags
& IEEE80211_CONF_PS
) &&
1529 test_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
)) {
1530 wl1271_debug(DEBUG_PSM
, "psm disabled");
1532 clear_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
);
1534 if (test_bit(WL1271_FLAG_PSM
, &wl
->flags
))
1535 ret
= wl1271_ps_set_mode(wl
, STATION_ACTIVE_MODE
,
1536 wl
->basic_rate
, true);
1539 if (conf
->power_level
!= wl
->power_level
) {
1540 ret
= wl1271_acx_tx_power(wl
, conf
->power_level
);
1544 wl
->power_level
= conf
->power_level
;
1548 wl1271_ps_elp_sleep(wl
);
1551 mutex_unlock(&wl
->mutex
);
1556 struct wl1271_filter_params
{
1559 u8 mc_list
[ACX_MC_ADDRESS_GROUP_MAX
][ETH_ALEN
];
1562 static u64
wl1271_op_prepare_multicast(struct ieee80211_hw
*hw
,
1563 struct netdev_hw_addr_list
*mc_list
)
1565 struct wl1271_filter_params
*fp
;
1566 struct netdev_hw_addr
*ha
;
1567 struct wl1271
*wl
= hw
->priv
;
1569 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
1572 fp
= kzalloc(sizeof(*fp
), GFP_ATOMIC
);
1574 wl1271_error("Out of memory setting filters.");
1578 /* update multicast filtering parameters */
1579 fp
->mc_list_length
= 0;
1580 if (netdev_hw_addr_list_count(mc_list
) > ACX_MC_ADDRESS_GROUP_MAX
) {
1581 fp
->enabled
= false;
1584 netdev_hw_addr_list_for_each(ha
, mc_list
) {
1585 memcpy(fp
->mc_list
[fp
->mc_list_length
],
1586 ha
->addr
, ETH_ALEN
);
1587 fp
->mc_list_length
++;
1591 return (u64
)(unsigned long)fp
;
1594 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
1597 FIF_BCN_PRBRESP_PROMISC | \
1601 static void wl1271_op_configure_filter(struct ieee80211_hw
*hw
,
1602 unsigned int changed
,
1603 unsigned int *total
, u64 multicast
)
1605 struct wl1271_filter_params
*fp
= (void *)(unsigned long)multicast
;
1606 struct wl1271
*wl
= hw
->priv
;
1609 wl1271_debug(DEBUG_MAC80211
, "mac80211 configure filter changed %x"
1610 " total %x", changed
, *total
);
1612 mutex_lock(&wl
->mutex
);
1614 *total
&= WL1271_SUPPORTED_FILTERS
;
1615 changed
&= WL1271_SUPPORTED_FILTERS
;
1617 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
1620 ret
= wl1271_ps_elp_wakeup(wl
, false);
1624 if (wl
->bss_type
!= BSS_TYPE_AP_BSS
) {
1625 if (*total
& FIF_ALLMULTI
)
1626 ret
= wl1271_acx_group_address_tbl(wl
, false, NULL
, 0);
1628 ret
= wl1271_acx_group_address_tbl(wl
, fp
->enabled
,
1630 fp
->mc_list_length
);
1635 /* determine, whether supported filter values have changed */
1639 /* configure filters */
1640 wl
->filters
= *total
;
1641 wl1271_configure_filters(wl
, 0);
1643 /* apply configured filters */
1644 ret
= wl1271_acx_rx_config(wl
, wl
->rx_config
, wl
->rx_filter
);
1649 wl1271_ps_elp_sleep(wl
);
1652 mutex_unlock(&wl
->mutex
);
1656 static int wl1271_record_ap_key(struct wl1271
*wl
, u8 id
, u8 key_type
,
1657 u8 key_size
, const u8
*key
, u8 hlid
, u32 tx_seq_32
,
1660 struct wl1271_ap_key
*ap_key
;
1663 wl1271_debug(DEBUG_CRYPT
, "record ap key id %d", (int)id
);
1665 if (key_size
> MAX_KEY_SIZE
)
1669 * Find next free entry in ap_keys. Also check we are not replacing
1672 for (i
= 0; i
< MAX_NUM_KEYS
; i
++) {
1673 if (wl
->recorded_ap_keys
[i
] == NULL
)
1676 if (wl
->recorded_ap_keys
[i
]->id
== id
) {
1677 wl1271_warning("trying to record key replacement");
1682 if (i
== MAX_NUM_KEYS
)
1685 ap_key
= kzalloc(sizeof(*ap_key
), GFP_KERNEL
);
1690 ap_key
->key_type
= key_type
;
1691 ap_key
->key_size
= key_size
;
1692 memcpy(ap_key
->key
, key
, key_size
);
1693 ap_key
->hlid
= hlid
;
1694 ap_key
->tx_seq_32
= tx_seq_32
;
1695 ap_key
->tx_seq_16
= tx_seq_16
;
1697 wl
->recorded_ap_keys
[i
] = ap_key
;
1701 static void wl1271_free_ap_keys(struct wl1271
*wl
)
1705 for (i
= 0; i
< MAX_NUM_KEYS
; i
++) {
1706 kfree(wl
->recorded_ap_keys
[i
]);
1707 wl
->recorded_ap_keys
[i
] = NULL
;
1711 static int wl1271_ap_init_hwenc(struct wl1271
*wl
)
1714 struct wl1271_ap_key
*key
;
1715 bool wep_key_added
= false;
1717 for (i
= 0; i
< MAX_NUM_KEYS
; i
++) {
1718 if (wl
->recorded_ap_keys
[i
] == NULL
)
1721 key
= wl
->recorded_ap_keys
[i
];
1722 ret
= wl1271_cmd_set_ap_key(wl
, KEY_ADD_OR_REPLACE
,
1723 key
->id
, key
->key_type
,
1724 key
->key_size
, key
->key
,
1725 key
->hlid
, key
->tx_seq_32
,
1730 if (key
->key_type
== KEY_WEP
)
1731 wep_key_added
= true;
1734 if (wep_key_added
) {
1735 ret
= wl1271_cmd_set_ap_default_wep_key(wl
, wl
->default_key
);
1741 wl1271_free_ap_keys(wl
);
1745 static int wl1271_set_key(struct wl1271
*wl
, u16 action
, u8 id
, u8 key_type
,
1746 u8 key_size
, const u8
*key
, u32 tx_seq_32
,
1747 u16 tx_seq_16
, struct ieee80211_sta
*sta
)
1750 bool is_ap
= (wl
->bss_type
== BSS_TYPE_AP_BSS
);
1753 struct wl1271_station
*wl_sta
;
1757 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
1758 hlid
= wl_sta
->hlid
;
1760 hlid
= WL1271_AP_BROADCAST_HLID
;
1763 if (!test_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
)) {
1765 * We do not support removing keys after AP shutdown.
1766 * Pretend we do to make mac80211 happy.
1768 if (action
!= KEY_ADD_OR_REPLACE
)
1771 ret
= wl1271_record_ap_key(wl
, id
,
1773 key
, hlid
, tx_seq_32
,
1776 ret
= wl1271_cmd_set_ap_key(wl
, action
,
1777 id
, key_type
, key_size
,
1778 key
, hlid
, tx_seq_32
,
1786 static const u8 bcast_addr
[ETH_ALEN
] = {
1787 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
1790 addr
= sta
? sta
->addr
: bcast_addr
;
1792 if (is_zero_ether_addr(addr
)) {
1793 /* We dont support TX only encryption */
1797 /* The wl1271 does not allow to remove unicast keys - they
1798 will be cleared automatically on next CMD_JOIN. Ignore the
1799 request silently, as we dont want the mac80211 to emit
1800 an error message. */
1801 if (action
== KEY_REMOVE
&& !is_broadcast_ether_addr(addr
))
1804 ret
= wl1271_cmd_set_sta_key(wl
, action
,
1805 id
, key_type
, key_size
,
1806 key
, addr
, tx_seq_32
,
1811 /* the default WEP key needs to be configured at least once */
1812 if (key_type
== KEY_WEP
) {
1813 ret
= wl1271_cmd_set_sta_default_wep_key(wl
,
1823 static int wl1271_op_set_key(struct ieee80211_hw
*hw
, enum set_key_cmd cmd
,
1824 struct ieee80211_vif
*vif
,
1825 struct ieee80211_sta
*sta
,
1826 struct ieee80211_key_conf
*key_conf
)
1828 struct wl1271
*wl
= hw
->priv
;
1834 wl1271_debug(DEBUG_MAC80211
, "mac80211 set key");
1836 wl1271_debug(DEBUG_CRYPT
, "CMD: 0x%x sta: %p", cmd
, sta
);
1837 wl1271_debug(DEBUG_CRYPT
, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
1838 key_conf
->cipher
, key_conf
->keyidx
,
1839 key_conf
->keylen
, key_conf
->flags
);
1840 wl1271_dump(DEBUG_CRYPT
, "KEY: ", key_conf
->key
, key_conf
->keylen
);
1842 mutex_lock(&wl
->mutex
);
1844 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
1849 ret
= wl1271_ps_elp_wakeup(wl
, false);
1853 switch (key_conf
->cipher
) {
1854 case WLAN_CIPHER_SUITE_WEP40
:
1855 case WLAN_CIPHER_SUITE_WEP104
:
1858 key_conf
->hw_key_idx
= key_conf
->keyidx
;
1860 case WLAN_CIPHER_SUITE_TKIP
:
1861 key_type
= KEY_TKIP
;
1863 key_conf
->hw_key_idx
= key_conf
->keyidx
;
1864 tx_seq_32
= WL1271_TX_SECURITY_HI32(wl
->tx_security_seq
);
1865 tx_seq_16
= WL1271_TX_SECURITY_LO16(wl
->tx_security_seq
);
1867 case WLAN_CIPHER_SUITE_CCMP
:
1870 key_conf
->flags
|= IEEE80211_KEY_FLAG_GENERATE_IV
;
1871 tx_seq_32
= WL1271_TX_SECURITY_HI32(wl
->tx_security_seq
);
1872 tx_seq_16
= WL1271_TX_SECURITY_LO16(wl
->tx_security_seq
);
1874 case WL1271_CIPHER_SUITE_GEM
:
1876 tx_seq_32
= WL1271_TX_SECURITY_HI32(wl
->tx_security_seq
);
1877 tx_seq_16
= WL1271_TX_SECURITY_LO16(wl
->tx_security_seq
);
1880 wl1271_error("Unknown key algo 0x%x", key_conf
->cipher
);
1888 ret
= wl1271_set_key(wl
, KEY_ADD_OR_REPLACE
,
1889 key_conf
->keyidx
, key_type
,
1890 key_conf
->keylen
, key_conf
->key
,
1891 tx_seq_32
, tx_seq_16
, sta
);
1893 wl1271_error("Could not add or replace key");
1899 ret
= wl1271_set_key(wl
, KEY_REMOVE
,
1900 key_conf
->keyidx
, key_type
,
1901 key_conf
->keylen
, key_conf
->key
,
1904 wl1271_error("Could not remove key");
1910 wl1271_error("Unsupported key cmd 0x%x", cmd
);
1916 wl1271_ps_elp_sleep(wl
);
1919 mutex_unlock(&wl
->mutex
);
1924 static int wl1271_op_hw_scan(struct ieee80211_hw
*hw
,
1925 struct ieee80211_vif
*vif
,
1926 struct cfg80211_scan_request
*req
)
1928 struct wl1271
*wl
= hw
->priv
;
1933 wl1271_debug(DEBUG_MAC80211
, "mac80211 hw scan");
1936 ssid
= req
->ssids
[0].ssid
;
1937 len
= req
->ssids
[0].ssid_len
;
1940 mutex_lock(&wl
->mutex
);
1942 if (wl
->state
== WL1271_STATE_OFF
) {
1944 * We cannot return -EBUSY here because cfg80211 will expect
1945 * a call to ieee80211_scan_completed if we do - in this case
1946 * there won't be any call.
1952 ret
= wl1271_ps_elp_wakeup(wl
, false);
1956 ret
= wl1271_scan(hw
->priv
, ssid
, len
, req
);
1958 wl1271_ps_elp_sleep(wl
);
1961 mutex_unlock(&wl
->mutex
);
1966 static int wl1271_op_set_frag_threshold(struct ieee80211_hw
*hw
, u32 value
)
1968 struct wl1271
*wl
= hw
->priv
;
1971 mutex_lock(&wl
->mutex
);
1973 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
1978 ret
= wl1271_ps_elp_wakeup(wl
, false);
1982 ret
= wl1271_acx_frag_threshold(wl
, (u16
)value
);
1984 wl1271_warning("wl1271_op_set_frag_threshold failed: %d", ret
);
1986 wl1271_ps_elp_sleep(wl
);
1989 mutex_unlock(&wl
->mutex
);
1994 static int wl1271_op_set_rts_threshold(struct ieee80211_hw
*hw
, u32 value
)
1996 struct wl1271
*wl
= hw
->priv
;
1999 mutex_lock(&wl
->mutex
);
2001 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
2006 ret
= wl1271_ps_elp_wakeup(wl
, false);
2010 ret
= wl1271_acx_rts_threshold(wl
, (u16
) value
);
2012 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret
);
2014 wl1271_ps_elp_sleep(wl
);
2017 mutex_unlock(&wl
->mutex
);
2022 static int wl1271_ssid_set(struct wl1271
*wl
, struct sk_buff
*skb
,
2025 u8
*ptr
= skb
->data
+ offset
;
2027 /* find the location of the ssid in the beacon */
2028 while (ptr
< skb
->data
+ skb
->len
) {
2029 if (ptr
[0] == WLAN_EID_SSID
) {
2030 wl
->ssid_len
= ptr
[1];
2031 memcpy(wl
->ssid
, ptr
+2, wl
->ssid_len
);
2034 ptr
+= (ptr
[1] + 2);
2037 wl1271_error("No SSID in IEs!\n");
2041 static int wl1271_bss_erp_info_changed(struct wl1271
*wl
,
2042 struct ieee80211_bss_conf
*bss_conf
,
2047 if (changed
& BSS_CHANGED_ERP_SLOT
) {
2048 if (bss_conf
->use_short_slot
)
2049 ret
= wl1271_acx_slot(wl
, SLOT_TIME_SHORT
);
2051 ret
= wl1271_acx_slot(wl
, SLOT_TIME_LONG
);
2053 wl1271_warning("Set slot time failed %d", ret
);
2058 if (changed
& BSS_CHANGED_ERP_PREAMBLE
) {
2059 if (bss_conf
->use_short_preamble
)
2060 wl1271_acx_set_preamble(wl
, ACX_PREAMBLE_SHORT
);
2062 wl1271_acx_set_preamble(wl
, ACX_PREAMBLE_LONG
);
2065 if (changed
& BSS_CHANGED_ERP_CTS_PROT
) {
2066 if (bss_conf
->use_cts_prot
)
2067 ret
= wl1271_acx_cts_protect(wl
, CTSPROTECT_ENABLE
);
2069 ret
= wl1271_acx_cts_protect(wl
, CTSPROTECT_DISABLE
);
2071 wl1271_warning("Set ctsprotect failed %d", ret
);
2080 static int wl1271_bss_beacon_info_changed(struct wl1271
*wl
,
2081 struct ieee80211_vif
*vif
,
2082 struct ieee80211_bss_conf
*bss_conf
,
2085 bool is_ap
= (wl
->bss_type
== BSS_TYPE_AP_BSS
);
2088 if ((changed
& BSS_CHANGED_BEACON_INT
)) {
2089 wl1271_debug(DEBUG_MASTER
, "beacon interval updated: %d",
2090 bss_conf
->beacon_int
);
2092 wl
->beacon_int
= bss_conf
->beacon_int
;
2095 if ((changed
& BSS_CHANGED_BEACON
)) {
2096 struct ieee80211_hdr
*hdr
;
2097 int ieoffset
= offsetof(struct ieee80211_mgmt
,
2099 struct sk_buff
*beacon
= ieee80211_beacon_get(wl
->hw
, vif
);
2105 wl1271_debug(DEBUG_MASTER
, "beacon updated");
2107 ret
= wl1271_ssid_set(wl
, beacon
, ieoffset
);
2109 dev_kfree_skb(beacon
);
2112 tmpl_id
= is_ap
? CMD_TEMPL_AP_BEACON
:
2114 ret
= wl1271_cmd_template_set(wl
, tmpl_id
,
2117 wl1271_tx_min_rate_get(wl
));
2119 dev_kfree_skb(beacon
);
2123 hdr
= (struct ieee80211_hdr
*) beacon
->data
;
2124 hdr
->frame_control
= cpu_to_le16(IEEE80211_FTYPE_MGMT
|
2125 IEEE80211_STYPE_PROBE_RESP
);
2127 tmpl_id
= is_ap
? CMD_TEMPL_AP_PROBE_RESPONSE
:
2128 CMD_TEMPL_PROBE_RESPONSE
;
2129 ret
= wl1271_cmd_template_set(wl
,
2133 wl1271_tx_min_rate_get(wl
));
2134 dev_kfree_skb(beacon
);
2143 /* AP mode changes */
2144 static void wl1271_bss_info_changed_ap(struct wl1271
*wl
,
2145 struct ieee80211_vif
*vif
,
2146 struct ieee80211_bss_conf
*bss_conf
,
2151 if ((changed
& BSS_CHANGED_BASIC_RATES
)) {
2152 u32 rates
= bss_conf
->basic_rates
;
2153 struct conf_tx_rate_class mgmt_rc
;
2155 wl
->basic_rate_set
= wl1271_tx_enabled_rates_get(wl
, rates
);
2156 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
2157 wl1271_debug(DEBUG_AP
, "basic rates: 0x%x",
2158 wl
->basic_rate_set
);
2160 /* update the AP management rate policy with the new rates */
2161 mgmt_rc
.enabled_rates
= wl
->basic_rate_set
;
2162 mgmt_rc
.long_retry_limit
= 10;
2163 mgmt_rc
.short_retry_limit
= 10;
2165 ret
= wl1271_acx_ap_rate_policy(wl
, &mgmt_rc
,
2166 ACX_TX_AP_MODE_MGMT_RATE
);
2168 wl1271_error("AP mgmt policy change failed %d", ret
);
2173 ret
= wl1271_bss_beacon_info_changed(wl
, vif
, bss_conf
, changed
);
2177 if ((changed
& BSS_CHANGED_BEACON_ENABLED
)) {
2178 if (bss_conf
->enable_beacon
) {
2179 if (!test_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
)) {
2180 ret
= wl1271_cmd_start_bss(wl
);
2184 set_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
);
2185 wl1271_debug(DEBUG_AP
, "started AP");
2187 ret
= wl1271_ap_init_hwenc(wl
);
2192 if (test_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
)) {
2193 ret
= wl1271_cmd_stop_bss(wl
);
2197 clear_bit(WL1271_FLAG_AP_STARTED
, &wl
->flags
);
2198 wl1271_debug(DEBUG_AP
, "stopped AP");
2203 ret
= wl1271_bss_erp_info_changed(wl
, bss_conf
, changed
);
2210 /* STA/IBSS mode changes */
2211 static void wl1271_bss_info_changed_sta(struct wl1271
*wl
,
2212 struct ieee80211_vif
*vif
,
2213 struct ieee80211_bss_conf
*bss_conf
,
2216 bool do_join
= false, set_assoc
= false;
2217 bool is_ibss
= (wl
->bss_type
== BSS_TYPE_IBSS
);
2219 struct ieee80211_sta
*sta
= ieee80211_find_sta(vif
, bss_conf
->bssid
);
2222 ret
= wl1271_bss_beacon_info_changed(wl
, vif
, bss_conf
,
2228 if ((changed
& BSS_CHANGED_BEACON_INT
) && is_ibss
)
2231 /* Need to update the SSID (for filtering etc) */
2232 if ((changed
& BSS_CHANGED_BEACON
) && is_ibss
)
2235 if ((changed
& BSS_CHANGED_BEACON_ENABLED
) && is_ibss
) {
2236 wl1271_debug(DEBUG_ADHOC
, "ad-hoc beaconing: %s",
2237 bss_conf
->enable_beacon
? "enabled" : "disabled");
2239 if (bss_conf
->enable_beacon
)
2240 wl
->set_bss_type
= BSS_TYPE_IBSS
;
2242 wl
->set_bss_type
= BSS_TYPE_STA_BSS
;
2246 if ((changed
& BSS_CHANGED_CQM
)) {
2247 bool enable
= false;
2248 if (bss_conf
->cqm_rssi_thold
)
2250 ret
= wl1271_acx_rssi_snr_trigger(wl
, enable
,
2251 bss_conf
->cqm_rssi_thold
,
2252 bss_conf
->cqm_rssi_hyst
);
2255 wl
->rssi_thold
= bss_conf
->cqm_rssi_thold
;
2258 if ((changed
& BSS_CHANGED_BSSID
) &&
2260 * Now we know the correct bssid, so we send a new join command
2261 * and enable the BSSID filter
2263 memcmp(wl
->bssid
, bss_conf
->bssid
, ETH_ALEN
)) {
2264 memcpy(wl
->bssid
, bss_conf
->bssid
, ETH_ALEN
);
2266 ret
= wl1271_cmd_build_null_data(wl
);
2270 ret
= wl1271_build_qos_null_data(wl
);
2274 /* filter out all packets not from this BSSID */
2275 wl1271_configure_filters(wl
, 0);
2277 /* Need to update the BSSID (for filtering etc) */
2281 if ((changed
& BSS_CHANGED_ASSOC
)) {
2282 if (bss_conf
->assoc
) {
2285 wl
->aid
= bss_conf
->aid
;
2288 wl
->ps_poll_failures
= 0;
2291 * use basic rates from AP, and determine lowest rate
2292 * to use with control frames.
2294 rates
= bss_conf
->basic_rates
;
2295 wl
->basic_rate_set
= wl1271_tx_enabled_rates_get(wl
,
2297 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
2298 ret
= wl1271_acx_sta_rate_policies(wl
);
2303 * with wl1271, we don't need to update the
2304 * beacon_int and dtim_period, because the firmware
2305 * updates it by itself when the first beacon is
2306 * received after a join.
2308 ret
= wl1271_cmd_build_ps_poll(wl
, wl
->aid
);
2313 * Get a template for hardware connection maintenance
2315 dev_kfree_skb(wl
->probereq
);
2316 wl
->probereq
= wl1271_cmd_build_ap_probe_req(wl
, NULL
);
2317 ieoffset
= offsetof(struct ieee80211_mgmt
,
2318 u
.probe_req
.variable
);
2319 wl1271_ssid_set(wl
, wl
->probereq
, ieoffset
);
2321 /* enable the connection monitoring feature */
2322 ret
= wl1271_acx_conn_monit_params(wl
, true);
2326 /* If we want to go in PSM but we're not there yet */
2327 if (test_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
) &&
2328 !test_bit(WL1271_FLAG_PSM
, &wl
->flags
)) {
2329 enum wl1271_cmd_ps_mode mode
;
2331 mode
= STATION_POWER_SAVE_MODE
;
2332 ret
= wl1271_ps_set_mode(wl
, mode
,
2339 /* use defaults when not associated */
2340 clear_bit(WL1271_FLAG_STA_STATE_SENT
, &wl
->flags
);
2341 clear_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
);
2344 /* free probe-request template */
2345 dev_kfree_skb(wl
->probereq
);
2346 wl
->probereq
= NULL
;
2348 /* re-enable dynamic ps - just in case */
2349 ieee80211_enable_dyn_ps(wl
->vif
);
2351 /* revert back to minimum rates for the current band */
2352 wl1271_set_band_rate(wl
);
2353 wl
->basic_rate
= wl1271_tx_min_rate_get(wl
);
2354 ret
= wl1271_acx_sta_rate_policies(wl
);
2358 /* disable connection monitor features */
2359 ret
= wl1271_acx_conn_monit_params(wl
, false);
2361 /* Disable the keep-alive feature */
2362 ret
= wl1271_acx_keep_alive_mode(wl
, false);
2366 /* restore the bssid filter and go to dummy bssid */
2368 wl1271_dummy_join(wl
);
2372 ret
= wl1271_bss_erp_info_changed(wl
, bss_conf
, changed
);
2377 * Takes care of: New association with HT enable,
2378 * HT information change in beacon.
2381 (changed
& BSS_CHANGED_HT
) &&
2382 (bss_conf
->channel_type
!= NL80211_CHAN_NO_HT
)) {
2383 ret
= wl1271_acx_set_ht_capabilities(wl
, &sta
->ht_cap
, true);
2385 wl1271_warning("Set ht cap true failed %d", ret
);
2388 ret
= wl1271_acx_set_ht_information(wl
,
2389 bss_conf
->ht_operation_mode
);
2391 wl1271_warning("Set ht information failed %d", ret
);
2396 * Takes care of: New association without HT,
2399 else if (sta
&& (changed
& BSS_CHANGED_ASSOC
)) {
2400 ret
= wl1271_acx_set_ht_capabilities(wl
, &sta
->ht_cap
, false);
2402 wl1271_warning("Set ht cap false failed %d", ret
);
2407 if (changed
& BSS_CHANGED_ARP_FILTER
) {
2408 __be32 addr
= bss_conf
->arp_addr_list
[0];
2409 WARN_ON(wl
->bss_type
!= BSS_TYPE_STA_BSS
);
2411 if (bss_conf
->arp_addr_cnt
== 1 &&
2412 bss_conf
->arp_filter_enabled
) {
2414 * The template should have been configured only upon
2415 * association. however, it seems that the correct ip
2416 * isn't being set (when sending), so we have to
2417 * reconfigure the template upon every ip change.
2419 ret
= wl1271_cmd_build_arp_rsp(wl
, addr
);
2421 wl1271_warning("build arp rsp failed: %d", ret
);
2425 ret
= wl1271_acx_arp_ip_filter(wl
,
2426 (ACX_ARP_FILTER_ARP_FILTERING
|
2427 ACX_ARP_FILTER_AUTO_ARP
),
2430 ret
= wl1271_acx_arp_ip_filter(wl
, 0, addr
);
2437 ret
= wl1271_join(wl
, set_assoc
);
2439 wl1271_warning("cmd join failed %d", ret
);
2448 static void wl1271_op_bss_info_changed(struct ieee80211_hw
*hw
,
2449 struct ieee80211_vif
*vif
,
2450 struct ieee80211_bss_conf
*bss_conf
,
2453 struct wl1271
*wl
= hw
->priv
;
2454 bool is_ap
= (wl
->bss_type
== BSS_TYPE_AP_BSS
);
2457 wl1271_debug(DEBUG_MAC80211
, "mac80211 bss info changed 0x%x",
2460 mutex_lock(&wl
->mutex
);
2462 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
2465 ret
= wl1271_ps_elp_wakeup(wl
, false);
2470 wl1271_bss_info_changed_ap(wl
, vif
, bss_conf
, changed
);
2472 wl1271_bss_info_changed_sta(wl
, vif
, bss_conf
, changed
);
2474 wl1271_ps_elp_sleep(wl
);
2477 mutex_unlock(&wl
->mutex
);
2480 static int wl1271_op_conf_tx(struct ieee80211_hw
*hw
, u16 queue
,
2481 const struct ieee80211_tx_queue_params
*params
)
2483 struct wl1271
*wl
= hw
->priv
;
2487 mutex_lock(&wl
->mutex
);
2489 wl1271_debug(DEBUG_MAC80211
, "mac80211 conf tx %d", queue
);
2492 ps_scheme
= CONF_PS_SCHEME_UPSD_TRIGGER
;
2494 ps_scheme
= CONF_PS_SCHEME_LEGACY
;
2496 if (wl
->state
== WL1271_STATE_OFF
) {
2498 * If the state is off, the parameters will be recorded and
2499 * configured on init. This happens in AP-mode.
2501 struct conf_tx_ac_category
*conf_ac
=
2502 &wl
->conf
.tx
.ac_conf
[wl1271_tx_get_queue(queue
)];
2503 struct conf_tx_tid
*conf_tid
=
2504 &wl
->conf
.tx
.tid_conf
[wl1271_tx_get_queue(queue
)];
2506 conf_ac
->ac
= wl1271_tx_get_queue(queue
);
2507 conf_ac
->cw_min
= (u8
)params
->cw_min
;
2508 conf_ac
->cw_max
= params
->cw_max
;
2509 conf_ac
->aifsn
= params
->aifs
;
2510 conf_ac
->tx_op_limit
= params
->txop
<< 5;
2512 conf_tid
->queue_id
= wl1271_tx_get_queue(queue
);
2513 conf_tid
->channel_type
= CONF_CHANNEL_TYPE_EDCF
;
2514 conf_tid
->tsid
= wl1271_tx_get_queue(queue
);
2515 conf_tid
->ps_scheme
= ps_scheme
;
2516 conf_tid
->ack_policy
= CONF_ACK_POLICY_LEGACY
;
2517 conf_tid
->apsd_conf
[0] = 0;
2518 conf_tid
->apsd_conf
[1] = 0;
2520 ret
= wl1271_ps_elp_wakeup(wl
, false);
2525 * the txop is confed in units of 32us by the mac80211,
2528 ret
= wl1271_acx_ac_cfg(wl
, wl1271_tx_get_queue(queue
),
2529 params
->cw_min
, params
->cw_max
,
2530 params
->aifs
, params
->txop
<< 5);
2534 ret
= wl1271_acx_tid_cfg(wl
, wl1271_tx_get_queue(queue
),
2535 CONF_CHANNEL_TYPE_EDCF
,
2536 wl1271_tx_get_queue(queue
),
2537 ps_scheme
, CONF_ACK_POLICY_LEGACY
,
2543 wl1271_ps_elp_sleep(wl
);
2547 mutex_unlock(&wl
->mutex
);
2552 static u64
wl1271_op_get_tsf(struct ieee80211_hw
*hw
)
2555 struct wl1271
*wl
= hw
->priv
;
2556 u64 mactime
= ULLONG_MAX
;
2559 wl1271_debug(DEBUG_MAC80211
, "mac80211 get tsf");
2561 mutex_lock(&wl
->mutex
);
2563 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
2566 ret
= wl1271_ps_elp_wakeup(wl
, false);
2570 ret
= wl1271_acx_tsf_info(wl
, &mactime
);
2575 wl1271_ps_elp_sleep(wl
);
2578 mutex_unlock(&wl
->mutex
);
2582 static int wl1271_op_get_survey(struct ieee80211_hw
*hw
, int idx
,
2583 struct survey_info
*survey
)
2585 struct wl1271
*wl
= hw
->priv
;
2586 struct ieee80211_conf
*conf
= &hw
->conf
;
2591 survey
->channel
= conf
->channel
;
2592 survey
->filled
= SURVEY_INFO_NOISE_DBM
;
2593 survey
->noise
= wl
->noise
;
2598 static int wl1271_allocate_hlid(struct wl1271
*wl
,
2599 struct ieee80211_sta
*sta
,
2602 struct wl1271_station
*wl_sta
;
2605 id
= find_first_zero_bit(wl
->ap_hlid_map
, AP_MAX_STATIONS
);
2606 if (id
>= AP_MAX_STATIONS
) {
2607 wl1271_warning("could not allocate HLID - too much stations");
2611 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
2613 __set_bit(id
, wl
->ap_hlid_map
);
2614 wl_sta
->hlid
= WL1271_AP_STA_HLID_START
+ id
;
2615 *hlid
= wl_sta
->hlid
;
2619 static void wl1271_free_hlid(struct wl1271
*wl
, u8 hlid
)
2621 int id
= hlid
- WL1271_AP_STA_HLID_START
;
2623 __clear_bit(id
, wl
->ap_hlid_map
);
2626 static int wl1271_op_sta_add(struct ieee80211_hw
*hw
,
2627 struct ieee80211_vif
*vif
,
2628 struct ieee80211_sta
*sta
)
2630 struct wl1271
*wl
= hw
->priv
;
2634 mutex_lock(&wl
->mutex
);
2636 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
2639 if (wl
->bss_type
!= BSS_TYPE_AP_BSS
)
2642 wl1271_debug(DEBUG_MAC80211
, "mac80211 add sta %d", (int)sta
->aid
);
2644 ret
= wl1271_allocate_hlid(wl
, sta
, &hlid
);
2648 ret
= wl1271_ps_elp_wakeup(wl
, false);
2652 ret
= wl1271_cmd_add_sta(wl
, sta
, hlid
);
2657 wl1271_ps_elp_sleep(wl
);
2660 mutex_unlock(&wl
->mutex
);
2664 static int wl1271_op_sta_remove(struct ieee80211_hw
*hw
,
2665 struct ieee80211_vif
*vif
,
2666 struct ieee80211_sta
*sta
)
2668 struct wl1271
*wl
= hw
->priv
;
2669 struct wl1271_station
*wl_sta
;
2672 mutex_lock(&wl
->mutex
);
2674 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
2677 if (wl
->bss_type
!= BSS_TYPE_AP_BSS
)
2680 wl1271_debug(DEBUG_MAC80211
, "mac80211 remove sta %d", (int)sta
->aid
);
2682 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
2683 id
= wl_sta
->hlid
- WL1271_AP_STA_HLID_START
;
2684 if (WARN_ON(!test_bit(id
, wl
->ap_hlid_map
)))
2687 ret
= wl1271_ps_elp_wakeup(wl
, false);
2691 ret
= wl1271_cmd_remove_sta(wl
, wl_sta
->hlid
);
2695 wl1271_free_hlid(wl
, wl_sta
->hlid
);
2698 wl1271_ps_elp_sleep(wl
);
2701 mutex_unlock(&wl
->mutex
);
2705 /* can't be const, mac80211 writes to this */
2706 static struct ieee80211_rate wl1271_rates
[] = {
2708 .hw_value
= CONF_HW_BIT_RATE_1MBPS
,
2709 .hw_value_short
= CONF_HW_BIT_RATE_1MBPS
, },
2711 .hw_value
= CONF_HW_BIT_RATE_2MBPS
,
2712 .hw_value_short
= CONF_HW_BIT_RATE_2MBPS
,
2713 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
2715 .hw_value
= CONF_HW_BIT_RATE_5_5MBPS
,
2716 .hw_value_short
= CONF_HW_BIT_RATE_5_5MBPS
,
2717 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
2719 .hw_value
= CONF_HW_BIT_RATE_11MBPS
,
2720 .hw_value_short
= CONF_HW_BIT_RATE_11MBPS
,
2721 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
2723 .hw_value
= CONF_HW_BIT_RATE_6MBPS
,
2724 .hw_value_short
= CONF_HW_BIT_RATE_6MBPS
, },
2726 .hw_value
= CONF_HW_BIT_RATE_9MBPS
,
2727 .hw_value_short
= CONF_HW_BIT_RATE_9MBPS
, },
2729 .hw_value
= CONF_HW_BIT_RATE_12MBPS
,
2730 .hw_value_short
= CONF_HW_BIT_RATE_12MBPS
, },
2732 .hw_value
= CONF_HW_BIT_RATE_18MBPS
,
2733 .hw_value_short
= CONF_HW_BIT_RATE_18MBPS
, },
2735 .hw_value
= CONF_HW_BIT_RATE_24MBPS
,
2736 .hw_value_short
= CONF_HW_BIT_RATE_24MBPS
, },
2738 .hw_value
= CONF_HW_BIT_RATE_36MBPS
,
2739 .hw_value_short
= CONF_HW_BIT_RATE_36MBPS
, },
2741 .hw_value
= CONF_HW_BIT_RATE_48MBPS
,
2742 .hw_value_short
= CONF_HW_BIT_RATE_48MBPS
, },
2744 .hw_value
= CONF_HW_BIT_RATE_54MBPS
,
2745 .hw_value_short
= CONF_HW_BIT_RATE_54MBPS
, },
2748 /* can't be const, mac80211 writes to this */
2749 static struct ieee80211_channel wl1271_channels
[] = {
2750 { .hw_value
= 1, .center_freq
= 2412, .max_power
= 25 },
2751 { .hw_value
= 2, .center_freq
= 2417, .max_power
= 25 },
2752 { .hw_value
= 3, .center_freq
= 2422, .max_power
= 25 },
2753 { .hw_value
= 4, .center_freq
= 2427, .max_power
= 25 },
2754 { .hw_value
= 5, .center_freq
= 2432, .max_power
= 25 },
2755 { .hw_value
= 6, .center_freq
= 2437, .max_power
= 25 },
2756 { .hw_value
= 7, .center_freq
= 2442, .max_power
= 25 },
2757 { .hw_value
= 8, .center_freq
= 2447, .max_power
= 25 },
2758 { .hw_value
= 9, .center_freq
= 2452, .max_power
= 25 },
2759 { .hw_value
= 10, .center_freq
= 2457, .max_power
= 25 },
2760 { .hw_value
= 11, .center_freq
= 2462, .max_power
= 25 },
2761 { .hw_value
= 12, .center_freq
= 2467, .max_power
= 25 },
2762 { .hw_value
= 13, .center_freq
= 2472, .max_power
= 25 },
2765 /* mapping to indexes for wl1271_rates */
2766 static const u8 wl1271_rate_to_idx_2ghz
[] = {
2767 /* MCS rates are used only with 11n */
2768 7, /* CONF_HW_RXTX_RATE_MCS7 */
2769 6, /* CONF_HW_RXTX_RATE_MCS6 */
2770 5, /* CONF_HW_RXTX_RATE_MCS5 */
2771 4, /* CONF_HW_RXTX_RATE_MCS4 */
2772 3, /* CONF_HW_RXTX_RATE_MCS3 */
2773 2, /* CONF_HW_RXTX_RATE_MCS2 */
2774 1, /* CONF_HW_RXTX_RATE_MCS1 */
2775 0, /* CONF_HW_RXTX_RATE_MCS0 */
2777 11, /* CONF_HW_RXTX_RATE_54 */
2778 10, /* CONF_HW_RXTX_RATE_48 */
2779 9, /* CONF_HW_RXTX_RATE_36 */
2780 8, /* CONF_HW_RXTX_RATE_24 */
2782 /* TI-specific rate */
2783 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_22 */
2785 7, /* CONF_HW_RXTX_RATE_18 */
2786 6, /* CONF_HW_RXTX_RATE_12 */
2787 3, /* CONF_HW_RXTX_RATE_11 */
2788 5, /* CONF_HW_RXTX_RATE_9 */
2789 4, /* CONF_HW_RXTX_RATE_6 */
2790 2, /* CONF_HW_RXTX_RATE_5_5 */
2791 1, /* CONF_HW_RXTX_RATE_2 */
2792 0 /* CONF_HW_RXTX_RATE_1 */
2795 /* 11n STA capabilities */
2796 #define HW_RX_HIGHEST_RATE 72
2798 #ifdef CONFIG_WL12XX_HT
2799 #define WL12XX_HT_CAP { \
2800 .cap = IEEE80211_HT_CAP_GRN_FLD | IEEE80211_HT_CAP_SGI_20, \
2801 .ht_supported = true, \
2802 .ampdu_factor = IEEE80211_HT_MAX_AMPDU_8K, \
2803 .ampdu_density = IEEE80211_HT_MPDU_DENSITY_8, \
2805 .rx_mask = { 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, \
2806 .rx_highest = cpu_to_le16(HW_RX_HIGHEST_RATE), \
2807 .tx_params = IEEE80211_HT_MCS_TX_DEFINED, \
2811 #define WL12XX_HT_CAP { \
2812 .ht_supported = false, \
2816 /* can't be const, mac80211 writes to this */
2817 static struct ieee80211_supported_band wl1271_band_2ghz
= {
2818 .channels
= wl1271_channels
,
2819 .n_channels
= ARRAY_SIZE(wl1271_channels
),
2820 .bitrates
= wl1271_rates
,
2821 .n_bitrates
= ARRAY_SIZE(wl1271_rates
),
2822 .ht_cap
= WL12XX_HT_CAP
,
2825 /* 5 GHz data rates for WL1273 */
2826 static struct ieee80211_rate wl1271_rates_5ghz
[] = {
2828 .hw_value
= CONF_HW_BIT_RATE_6MBPS
,
2829 .hw_value_short
= CONF_HW_BIT_RATE_6MBPS
, },
2831 .hw_value
= CONF_HW_BIT_RATE_9MBPS
,
2832 .hw_value_short
= CONF_HW_BIT_RATE_9MBPS
, },
2834 .hw_value
= CONF_HW_BIT_RATE_12MBPS
,
2835 .hw_value_short
= CONF_HW_BIT_RATE_12MBPS
, },
2837 .hw_value
= CONF_HW_BIT_RATE_18MBPS
,
2838 .hw_value_short
= CONF_HW_BIT_RATE_18MBPS
, },
2840 .hw_value
= CONF_HW_BIT_RATE_24MBPS
,
2841 .hw_value_short
= CONF_HW_BIT_RATE_24MBPS
, },
2843 .hw_value
= CONF_HW_BIT_RATE_36MBPS
,
2844 .hw_value_short
= CONF_HW_BIT_RATE_36MBPS
, },
2846 .hw_value
= CONF_HW_BIT_RATE_48MBPS
,
2847 .hw_value_short
= CONF_HW_BIT_RATE_48MBPS
, },
2849 .hw_value
= CONF_HW_BIT_RATE_54MBPS
,
2850 .hw_value_short
= CONF_HW_BIT_RATE_54MBPS
, },
2853 /* 5 GHz band channels for WL1273 */
2854 static struct ieee80211_channel wl1271_channels_5ghz
[] = {
2855 { .hw_value
= 7, .center_freq
= 5035},
2856 { .hw_value
= 8, .center_freq
= 5040},
2857 { .hw_value
= 9, .center_freq
= 5045},
2858 { .hw_value
= 11, .center_freq
= 5055},
2859 { .hw_value
= 12, .center_freq
= 5060},
2860 { .hw_value
= 16, .center_freq
= 5080},
2861 { .hw_value
= 34, .center_freq
= 5170},
2862 { .hw_value
= 36, .center_freq
= 5180},
2863 { .hw_value
= 38, .center_freq
= 5190},
2864 { .hw_value
= 40, .center_freq
= 5200},
2865 { .hw_value
= 42, .center_freq
= 5210},
2866 { .hw_value
= 44, .center_freq
= 5220},
2867 { .hw_value
= 46, .center_freq
= 5230},
2868 { .hw_value
= 48, .center_freq
= 5240},
2869 { .hw_value
= 52, .center_freq
= 5260},
2870 { .hw_value
= 56, .center_freq
= 5280},
2871 { .hw_value
= 60, .center_freq
= 5300},
2872 { .hw_value
= 64, .center_freq
= 5320},
2873 { .hw_value
= 100, .center_freq
= 5500},
2874 { .hw_value
= 104, .center_freq
= 5520},
2875 { .hw_value
= 108, .center_freq
= 5540},
2876 { .hw_value
= 112, .center_freq
= 5560},
2877 { .hw_value
= 116, .center_freq
= 5580},
2878 { .hw_value
= 120, .center_freq
= 5600},
2879 { .hw_value
= 124, .center_freq
= 5620},
2880 { .hw_value
= 128, .center_freq
= 5640},
2881 { .hw_value
= 132, .center_freq
= 5660},
2882 { .hw_value
= 136, .center_freq
= 5680},
2883 { .hw_value
= 140, .center_freq
= 5700},
2884 { .hw_value
= 149, .center_freq
= 5745},
2885 { .hw_value
= 153, .center_freq
= 5765},
2886 { .hw_value
= 157, .center_freq
= 5785},
2887 { .hw_value
= 161, .center_freq
= 5805},
2888 { .hw_value
= 165, .center_freq
= 5825},
2891 /* mapping to indexes for wl1271_rates_5ghz */
2892 static const u8 wl1271_rate_to_idx_5ghz
[] = {
2893 /* MCS rates are used only with 11n */
2894 7, /* CONF_HW_RXTX_RATE_MCS7 */
2895 6, /* CONF_HW_RXTX_RATE_MCS6 */
2896 5, /* CONF_HW_RXTX_RATE_MCS5 */
2897 4, /* CONF_HW_RXTX_RATE_MCS4 */
2898 3, /* CONF_HW_RXTX_RATE_MCS3 */
2899 2, /* CONF_HW_RXTX_RATE_MCS2 */
2900 1, /* CONF_HW_RXTX_RATE_MCS1 */
2901 0, /* CONF_HW_RXTX_RATE_MCS0 */
2903 7, /* CONF_HW_RXTX_RATE_54 */
2904 6, /* CONF_HW_RXTX_RATE_48 */
2905 5, /* CONF_HW_RXTX_RATE_36 */
2906 4, /* CONF_HW_RXTX_RATE_24 */
2908 /* TI-specific rate */
2909 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_22 */
2911 3, /* CONF_HW_RXTX_RATE_18 */
2912 2, /* CONF_HW_RXTX_RATE_12 */
2913 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_11 */
2914 1, /* CONF_HW_RXTX_RATE_9 */
2915 0, /* CONF_HW_RXTX_RATE_6 */
2916 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_5_5 */
2917 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_2 */
2918 CONF_HW_RXTX_RATE_UNSUPPORTED
/* CONF_HW_RXTX_RATE_1 */
2921 static struct ieee80211_supported_band wl1271_band_5ghz
= {
2922 .channels
= wl1271_channels_5ghz
,
2923 .n_channels
= ARRAY_SIZE(wl1271_channels_5ghz
),
2924 .bitrates
= wl1271_rates_5ghz
,
2925 .n_bitrates
= ARRAY_SIZE(wl1271_rates_5ghz
),
2926 .ht_cap
= WL12XX_HT_CAP
,
2929 static const u8
*wl1271_band_rate_to_idx
[] = {
2930 [IEEE80211_BAND_2GHZ
] = wl1271_rate_to_idx_2ghz
,
2931 [IEEE80211_BAND_5GHZ
] = wl1271_rate_to_idx_5ghz
2934 static const struct ieee80211_ops wl1271_ops
= {
2935 .start
= wl1271_op_start
,
2936 .stop
= wl1271_op_stop
,
2937 .add_interface
= wl1271_op_add_interface
,
2938 .remove_interface
= wl1271_op_remove_interface
,
2939 .config
= wl1271_op_config
,
2940 .prepare_multicast
= wl1271_op_prepare_multicast
,
2941 .configure_filter
= wl1271_op_configure_filter
,
2943 .set_key
= wl1271_op_set_key
,
2944 .hw_scan
= wl1271_op_hw_scan
,
2945 .bss_info_changed
= wl1271_op_bss_info_changed
,
2946 .set_frag_threshold
= wl1271_op_set_frag_threshold
,
2947 .set_rts_threshold
= wl1271_op_set_rts_threshold
,
2948 .conf_tx
= wl1271_op_conf_tx
,
2949 .get_tsf
= wl1271_op_get_tsf
,
2950 .get_survey
= wl1271_op_get_survey
,
2951 .sta_add
= wl1271_op_sta_add
,
2952 .sta_remove
= wl1271_op_sta_remove
,
2953 CFG80211_TESTMODE_CMD(wl1271_tm_cmd
)
2957 u8
wl1271_rate_to_idx(int rate
, enum ieee80211_band band
)
2961 BUG_ON(band
>= sizeof(wl1271_band_rate_to_idx
)/sizeof(u8
*));
2963 if (unlikely(rate
>= CONF_HW_RXTX_RATE_MAX
)) {
2964 wl1271_error("Illegal RX rate from HW: %d", rate
);
2968 idx
= wl1271_band_rate_to_idx
[band
][rate
];
2969 if (unlikely(idx
== CONF_HW_RXTX_RATE_UNSUPPORTED
)) {
2970 wl1271_error("Unsupported RX rate from HW: %d", rate
);
2977 static ssize_t
wl1271_sysfs_show_bt_coex_state(struct device
*dev
,
2978 struct device_attribute
*attr
,
2981 struct wl1271
*wl
= dev_get_drvdata(dev
);
2986 mutex_lock(&wl
->mutex
);
2987 len
= snprintf(buf
, len
, "%d\n\n0 - off\n1 - on\n",
2989 mutex_unlock(&wl
->mutex
);
2995 static ssize_t
wl1271_sysfs_store_bt_coex_state(struct device
*dev
,
2996 struct device_attribute
*attr
,
2997 const char *buf
, size_t count
)
2999 struct wl1271
*wl
= dev_get_drvdata(dev
);
3003 ret
= strict_strtoul(buf
, 10, &res
);
3006 wl1271_warning("incorrect value written to bt_coex_mode");
3010 mutex_lock(&wl
->mutex
);
3014 if (res
== wl
->sg_enabled
)
3017 wl
->sg_enabled
= res
;
3019 if (wl
->state
== WL1271_STATE_OFF
)
3022 ret
= wl1271_ps_elp_wakeup(wl
, false);
3026 wl1271_acx_sg_enable(wl
, wl
->sg_enabled
);
3027 wl1271_ps_elp_sleep(wl
);
3030 mutex_unlock(&wl
->mutex
);
3034 static DEVICE_ATTR(bt_coex_state
, S_IRUGO
| S_IWUSR
,
3035 wl1271_sysfs_show_bt_coex_state
,
3036 wl1271_sysfs_store_bt_coex_state
);
3038 static ssize_t
wl1271_sysfs_show_hw_pg_ver(struct device
*dev
,
3039 struct device_attribute
*attr
,
3042 struct wl1271
*wl
= dev_get_drvdata(dev
);
3047 mutex_lock(&wl
->mutex
);
3048 if (wl
->hw_pg_ver
>= 0)
3049 len
= snprintf(buf
, len
, "%d\n", wl
->hw_pg_ver
);
3051 len
= snprintf(buf
, len
, "n/a\n");
3052 mutex_unlock(&wl
->mutex
);
3057 static DEVICE_ATTR(hw_pg_ver
, S_IRUGO
| S_IWUSR
,
3058 wl1271_sysfs_show_hw_pg_ver
, NULL
);
3060 int wl1271_register_hw(struct wl1271
*wl
)
3064 if (wl
->mac80211_registered
)
3067 ret
= wl1271_fetch_nvs(wl
);
3069 u8
*nvs_ptr
= (u8
*)wl
->nvs
->nvs
;
3071 wl
->mac_addr
[0] = nvs_ptr
[11];
3072 wl
->mac_addr
[1] = nvs_ptr
[10];
3073 wl
->mac_addr
[2] = nvs_ptr
[6];
3074 wl
->mac_addr
[3] = nvs_ptr
[5];
3075 wl
->mac_addr
[4] = nvs_ptr
[4];
3076 wl
->mac_addr
[5] = nvs_ptr
[3];
3079 SET_IEEE80211_PERM_ADDR(wl
->hw
, wl
->mac_addr
);
3081 ret
= ieee80211_register_hw(wl
->hw
);
3083 wl1271_error("unable to register mac80211 hw: %d", ret
);
3087 wl
->mac80211_registered
= true;
3089 wl1271_debugfs_init(wl
);
3091 register_netdevice_notifier(&wl1271_dev_notifier
);
3093 wl1271_notice("loaded");
3097 EXPORT_SYMBOL_GPL(wl1271_register_hw
);
3099 void wl1271_unregister_hw(struct wl1271
*wl
)
3101 unregister_netdevice_notifier(&wl1271_dev_notifier
);
3102 ieee80211_unregister_hw(wl
->hw
);
3103 wl
->mac80211_registered
= false;
3106 EXPORT_SYMBOL_GPL(wl1271_unregister_hw
);
3108 int wl1271_init_ieee80211(struct wl1271
*wl
)
3110 static const u32 cipher_suites
[] = {
3111 WLAN_CIPHER_SUITE_WEP40
,
3112 WLAN_CIPHER_SUITE_WEP104
,
3113 WLAN_CIPHER_SUITE_TKIP
,
3114 WLAN_CIPHER_SUITE_CCMP
,
3115 WL1271_CIPHER_SUITE_GEM
,
3118 /* The tx descriptor buffer and the TKIP space. */
3119 wl
->hw
->extra_tx_headroom
= WL1271_TKIP_IV_SPACE
+
3120 sizeof(struct wl1271_tx_hw_descr
);
3123 /* FIXME: find a proper value */
3124 wl
->hw
->channel_change_time
= 10000;
3125 wl
->hw
->max_listen_interval
= wl
->conf
.conn
.max_listen_interval
;
3127 wl
->hw
->flags
= IEEE80211_HW_SIGNAL_DBM
|
3128 IEEE80211_HW_BEACON_FILTER
|
3129 IEEE80211_HW_SUPPORTS_PS
|
3130 IEEE80211_HW_SUPPORTS_UAPSD
|
3131 IEEE80211_HW_HAS_RATE_CONTROL
|
3132 IEEE80211_HW_CONNECTION_MONITOR
|
3133 IEEE80211_HW_SUPPORTS_CQM_RSSI
;
3135 wl
->hw
->wiphy
->cipher_suites
= cipher_suites
;
3136 wl
->hw
->wiphy
->n_cipher_suites
= ARRAY_SIZE(cipher_suites
);
3138 wl
->hw
->wiphy
->interface_modes
= BIT(NL80211_IFTYPE_STATION
) |
3139 BIT(NL80211_IFTYPE_ADHOC
);
3140 wl
->hw
->wiphy
->max_scan_ssids
= 1;
3142 * Maximum length of elements in scanning probe request templates
3143 * should be the maximum length possible for a template, without
3144 * the IEEE80211 header of the template
3146 wl
->hw
->wiphy
->max_scan_ie_len
= WL1271_CMD_TEMPL_MAX_SIZE
-
3147 sizeof(struct ieee80211_header
);
3148 wl
->hw
->wiphy
->bands
[IEEE80211_BAND_2GHZ
] = &wl1271_band_2ghz
;
3149 wl
->hw
->wiphy
->bands
[IEEE80211_BAND_5GHZ
] = &wl1271_band_5ghz
;
3152 wl
->hw
->max_rates
= 1;
3154 wl
->hw
->wiphy
->reg_notifier
= wl1271_reg_notify
;
3156 SET_IEEE80211_DEV(wl
->hw
, wl1271_wl_to_dev(wl
));
3158 wl
->hw
->sta_data_size
= sizeof(struct wl1271_station
);
3162 EXPORT_SYMBOL_GPL(wl1271_init_ieee80211
);
3164 #define WL1271_DEFAULT_CHANNEL 0
3166 struct ieee80211_hw
*wl1271_alloc_hw(void)
3168 struct ieee80211_hw
*hw
;
3169 struct platform_device
*plat_dev
= NULL
;
3174 hw
= ieee80211_alloc_hw(sizeof(*wl
), &wl1271_ops
);
3176 wl1271_error("could not alloc ieee80211_hw");
3181 plat_dev
= kmemdup(&wl1271_device
, sizeof(wl1271_device
), GFP_KERNEL
);
3183 wl1271_error("could not allocate platform_device");
3185 goto err_plat_alloc
;
3189 memset(wl
, 0, sizeof(*wl
));
3191 INIT_LIST_HEAD(&wl
->list
);
3194 wl
->plat_dev
= plat_dev
;
3196 for (i
= 0; i
< NUM_TX_QUEUES
; i
++)
3197 skb_queue_head_init(&wl
->tx_queue
[i
]);
3199 INIT_DELAYED_WORK(&wl
->elp_work
, wl1271_elp_work
);
3200 INIT_DELAYED_WORK(&wl
->pspoll_work
, wl1271_pspoll_work
);
3201 INIT_WORK(&wl
->irq_work
, wl1271_irq_work
);
3202 INIT_WORK(&wl
->tx_work
, wl1271_tx_work
);
3203 INIT_WORK(&wl
->recovery_work
, wl1271_recovery_work
);
3204 INIT_DELAYED_WORK(&wl
->scan_complete_work
, wl1271_scan_complete_work
);
3205 wl
->channel
= WL1271_DEFAULT_CHANNEL
;
3206 wl
->beacon_int
= WL1271_DEFAULT_BEACON_INT
;
3207 wl
->default_key
= 0;
3209 wl
->rx_config
= WL1271_DEFAULT_STA_RX_CONFIG
;
3210 wl
->rx_filter
= WL1271_DEFAULT_STA_RX_FILTER
;
3211 wl
->psm_entry_retry
= 0;
3212 wl
->power_level
= WL1271_DEFAULT_POWER_LEVEL
;
3213 wl
->basic_rate_set
= CONF_TX_RATE_MASK_BASIC
;
3214 wl
->basic_rate
= CONF_TX_RATE_MASK_BASIC
;
3215 wl
->rate_set
= CONF_TX_RATE_MASK_BASIC
;
3216 wl
->sta_rate_set
= 0;
3217 wl
->band
= IEEE80211_BAND_2GHZ
;
3220 wl
->sg_enabled
= true;
3222 wl
->bss_type
= MAX_BSS_TYPE
;
3223 wl
->set_bss_type
= MAX_BSS_TYPE
;
3224 wl
->fw_bss_type
= MAX_BSS_TYPE
;
3226 memset(wl
->tx_frames_map
, 0, sizeof(wl
->tx_frames_map
));
3227 for (i
= 0; i
< ACX_TX_DESCRIPTORS
; i
++)
3228 wl
->tx_frames
[i
] = NULL
;
3230 spin_lock_init(&wl
->wl_lock
);
3232 wl
->state
= WL1271_STATE_OFF
;
3233 mutex_init(&wl
->mutex
);
3235 /* Apply default driver configuration. */
3236 wl1271_conf_init(wl
);
3238 order
= get_order(WL1271_AGGR_BUFFER_SIZE
);
3239 wl
->aggr_buf
= (u8
*)__get_free_pages(GFP_KERNEL
, order
);
3240 if (!wl
->aggr_buf
) {
3245 /* Register platform device */
3246 ret
= platform_device_register(wl
->plat_dev
);
3248 wl1271_error("couldn't register platform device");
3251 dev_set_drvdata(&wl
->plat_dev
->dev
, wl
);
3253 /* Create sysfs file to control bt coex state */
3254 ret
= device_create_file(&wl
->plat_dev
->dev
, &dev_attr_bt_coex_state
);
3256 wl1271_error("failed to create sysfs file bt_coex_state");
3260 /* Create sysfs file to get HW PG version */
3261 ret
= device_create_file(&wl
->plat_dev
->dev
, &dev_attr_hw_pg_ver
);
3263 wl1271_error("failed to create sysfs file hw_pg_ver");
3264 goto err_bt_coex_state
;
3270 device_remove_file(&wl
->plat_dev
->dev
, &dev_attr_bt_coex_state
);
3273 platform_device_unregister(wl
->plat_dev
);
3276 free_pages((unsigned long)wl
->aggr_buf
, order
);
3279 wl1271_debugfs_exit(wl
);
3283 ieee80211_free_hw(hw
);
3287 return ERR_PTR(ret
);
3289 EXPORT_SYMBOL_GPL(wl1271_alloc_hw
);
3291 int wl1271_free_hw(struct wl1271
*wl
)
3293 platform_device_unregister(wl
->plat_dev
);
3294 free_pages((unsigned long)wl
->aggr_buf
,
3295 get_order(WL1271_AGGR_BUFFER_SIZE
));
3296 kfree(wl
->plat_dev
);
3298 wl1271_debugfs_exit(wl
);
3305 kfree(wl
->fw_status
);
3306 kfree(wl
->tx_res_if
);
3308 ieee80211_free_hw(wl
->hw
);
3312 EXPORT_SYMBOL_GPL(wl1271_free_hw
);
3314 u32 wl12xx_debug_level
;
3315 EXPORT_SYMBOL_GPL(wl12xx_debug_level
);
3316 module_param_named(debug_level
, wl12xx_debug_level
, uint
, DEBUG_NONE
);
3317 MODULE_PARM_DESC(debug_level
, "wl12xx debugging level");
3319 MODULE_LICENSE("GPL");
3320 MODULE_AUTHOR("Luciano Coelho <luciano.coelho@nokia.com>");
3321 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");