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
,
159 .queue_id
= CONF_TX_AC_BE
,
160 .channel_type
= CONF_CHANNEL_TYPE_EDCF
,
161 .tsid
= CONF_TX_AC_BE
,
162 .ps_scheme
= CONF_PS_SCHEME_LEGACY
,
163 .ack_policy
= CONF_ACK_POLICY_LEGACY
,
167 .queue_id
= CONF_TX_AC_BK
,
168 .channel_type
= CONF_CHANNEL_TYPE_EDCF
,
169 .tsid
= CONF_TX_AC_BK
,
170 .ps_scheme
= CONF_PS_SCHEME_LEGACY
,
171 .ack_policy
= CONF_ACK_POLICY_LEGACY
,
175 .queue_id
= CONF_TX_AC_VI
,
176 .channel_type
= CONF_CHANNEL_TYPE_EDCF
,
177 .tsid
= CONF_TX_AC_VI
,
178 .ps_scheme
= CONF_PS_SCHEME_LEGACY
,
179 .ack_policy
= CONF_ACK_POLICY_LEGACY
,
183 .queue_id
= CONF_TX_AC_VO
,
184 .channel_type
= CONF_CHANNEL_TYPE_EDCF
,
185 .tsid
= CONF_TX_AC_VO
,
186 .ps_scheme
= CONF_PS_SCHEME_LEGACY
,
187 .ack_policy
= CONF_ACK_POLICY_LEGACY
,
191 .frag_threshold
= IEEE80211_MAX_FRAG_THRESHOLD
,
192 .tx_compl_timeout
= 700,
193 .tx_compl_threshold
= 4,
194 .basic_rate
= CONF_HW_BIT_RATE_1MBPS
,
195 .basic_rate_5
= CONF_HW_BIT_RATE_6MBPS
,
198 .wake_up_event
= CONF_WAKE_UP_EVENT_DTIM
,
199 .listen_interval
= 1,
200 .bcn_filt_mode
= CONF_BCN_FILT_MODE_ENABLED
,
201 .bcn_filt_ie_count
= 1,
204 .ie
= WLAN_EID_CHANNEL_SWITCH
,
205 .rule
= CONF_BCN_RULE_PASS_ON_APPEARANCE
,
208 .synch_fail_thold
= 10,
209 .bss_lose_timeout
= 100,
210 .beacon_rx_timeout
= 10000,
211 .broadcast_timeout
= 20000,
212 .rx_broadcast_in_ps
= 1,
213 .ps_poll_threshold
= 10,
214 .ps_poll_recovery_period
= 700,
215 .bet_enable
= CONF_BET_MODE_ENABLE
,
216 .bet_max_consecutive
= 10,
217 .psm_entry_retries
= 5,
218 .psm_entry_nullfunc_retries
= 3,
219 .psm_entry_hangover_period
= 1,
220 .keep_alive_interval
= 55000,
221 .max_listen_interval
= 20,
228 .host_clk_settling_time
= 5000,
229 .host_fast_wakeup_support
= false
233 .avg_weight_rssi_beacon
= 20,
234 .avg_weight_rssi_data
= 10,
235 .avg_weight_snr_beacon
= 20,
236 .avg_weight_snr_data
= 10
239 .min_dwell_time_active
= 7500,
240 .max_dwell_time_active
= 30000,
241 .min_dwell_time_passive
= 30000,
242 .max_dwell_time_passive
= 60000,
246 .tx_per_channel_power_compensation_2
= {
247 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
249 .tx_per_channel_power_compensation_5
= {
250 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
251 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
252 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
257 static void __wl1271_op_remove_interface(struct wl1271
*wl
);
260 static void wl1271_device_release(struct device
*dev
)
265 static struct platform_device wl1271_device
= {
269 /* device model insists to have a release function */
271 .release
= wl1271_device_release
,
275 static LIST_HEAD(wl_list
);
277 static int wl1271_dev_notify(struct notifier_block
*me
, unsigned long what
,
280 struct net_device
*dev
= arg
;
281 struct wireless_dev
*wdev
;
283 struct ieee80211_hw
*hw
;
285 struct wl1271
*wl_temp
;
288 /* Check that this notification is for us. */
289 if (what
!= NETDEV_CHANGE
)
292 wdev
= dev
->ieee80211_ptr
;
300 hw
= wiphy_priv(wiphy
);
305 list_for_each_entry(wl
, &wl_list
, list
) {
312 mutex_lock(&wl
->mutex
);
314 if (wl
->state
== WL1271_STATE_OFF
)
317 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
320 ret
= wl1271_ps_elp_wakeup(wl
, false);
324 if ((dev
->operstate
== IF_OPER_UP
) &&
325 !test_and_set_bit(WL1271_FLAG_STA_STATE_SENT
, &wl
->flags
)) {
326 wl1271_cmd_set_sta_state(wl
);
327 wl1271_info("Association completed.");
330 wl1271_ps_elp_sleep(wl
);
333 mutex_unlock(&wl
->mutex
);
338 static int wl1271_reg_notify(struct wiphy
*wiphy
,
339 struct regulatory_request
*request
)
341 struct ieee80211_supported_band
*band
;
342 struct ieee80211_channel
*ch
;
345 band
= wiphy
->bands
[IEEE80211_BAND_5GHZ
];
346 for (i
= 0; i
< band
->n_channels
; i
++) {
347 ch
= &band
->channels
[i
];
348 if (ch
->flags
& IEEE80211_CHAN_DISABLED
)
351 if (ch
->flags
& IEEE80211_CHAN_RADAR
)
352 ch
->flags
|= IEEE80211_CHAN_NO_IBSS
|
353 IEEE80211_CHAN_PASSIVE_SCAN
;
360 static void wl1271_conf_init(struct wl1271
*wl
)
364 * This function applies the default configuration to the driver. This
365 * function is invoked upon driver load (spi probe.)
367 * The configuration is stored in a run-time structure in order to
368 * facilitate for run-time adjustment of any of the parameters. Making
369 * changes to the configuration structure will apply the new values on
370 * the next interface up (wl1271_op_start.)
373 /* apply driver default configuration */
374 memcpy(&wl
->conf
, &default_conf
, sizeof(default_conf
));
378 static int wl1271_plt_init(struct wl1271
*wl
)
380 struct conf_tx_ac_category
*conf_ac
;
381 struct conf_tx_tid
*conf_tid
;
384 ret
= wl1271_cmd_general_parms(wl
);
388 ret
= wl1271_cmd_radio_parms(wl
);
392 ret
= wl1271_cmd_ext_radio_parms(wl
);
396 ret
= wl1271_init_templates_config(wl
);
400 ret
= wl1271_acx_init_mem_config(wl
);
404 /* PHY layer config */
405 ret
= wl1271_init_phy_config(wl
);
407 goto out_free_memmap
;
409 ret
= wl1271_acx_dco_itrim_params(wl
);
411 goto out_free_memmap
;
413 /* Initialize connection monitoring thresholds */
414 ret
= wl1271_acx_conn_monit_params(wl
, false);
416 goto out_free_memmap
;
418 /* Bluetooth WLAN coexistence */
419 ret
= wl1271_init_pta(wl
);
421 goto out_free_memmap
;
423 /* Energy detection */
424 ret
= wl1271_init_energy_detection(wl
);
426 goto out_free_memmap
;
428 /* Default fragmentation threshold */
429 ret
= wl1271_acx_frag_threshold(wl
, wl
->conf
.tx
.frag_threshold
);
431 goto out_free_memmap
;
433 /* Default TID/AC configuration */
434 BUG_ON(wl
->conf
.tx
.tid_conf_count
!= wl
->conf
.tx
.ac_conf_count
);
435 for (i
= 0; i
< wl
->conf
.tx
.tid_conf_count
; i
++) {
436 conf_ac
= &wl
->conf
.tx
.ac_conf
[i
];
437 ret
= wl1271_acx_ac_cfg(wl
, conf_ac
->ac
, conf_ac
->cw_min
,
438 conf_ac
->cw_max
, conf_ac
->aifsn
,
439 conf_ac
->tx_op_limit
);
441 goto out_free_memmap
;
443 conf_tid
= &wl
->conf
.tx
.tid_conf
[i
];
444 ret
= wl1271_acx_tid_cfg(wl
, conf_tid
->queue_id
,
445 conf_tid
->channel_type
,
448 conf_tid
->ack_policy
,
449 conf_tid
->apsd_conf
[0],
450 conf_tid
->apsd_conf
[1]);
452 goto out_free_memmap
;
455 /* Enable data path */
456 ret
= wl1271_cmd_data_path(wl
, 1);
458 goto out_free_memmap
;
460 /* Configure for CAM power saving (ie. always active) */
461 ret
= wl1271_acx_sleep_auth(wl
, WL1271_PSM_CAM
);
463 goto out_free_memmap
;
466 ret
= wl1271_acx_pm_config(wl
);
468 goto out_free_memmap
;
473 kfree(wl
->target_mem_map
);
474 wl
->target_mem_map
= NULL
;
479 static void wl1271_fw_status(struct wl1271
*wl
,
480 struct wl1271_fw_status
*status
)
486 wl1271_raw_read(wl
, FW_STATUS_ADDR
, status
, sizeof(*status
), false);
488 wl1271_debug(DEBUG_IRQ
, "intr: 0x%x (fw_rx_counter = %d, "
489 "drv_rx_counter = %d, tx_results_counter = %d)",
491 status
->fw_rx_counter
,
492 status
->drv_rx_counter
,
493 status
->tx_results_counter
);
495 /* update number of available TX blocks */
496 for (i
= 0; i
< NUM_TX_QUEUES
; i
++) {
497 u32 cnt
= le32_to_cpu(status
->tx_released_blks
[i
]) -
498 wl
->tx_blocks_freed
[i
];
500 wl
->tx_blocks_freed
[i
] =
501 le32_to_cpu(status
->tx_released_blks
[i
]);
502 wl
->tx_blocks_available
+= cnt
;
506 /* if more blocks are available now, tx work can be scheduled */
508 clear_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
);
510 /* update the host-chipset time offset */
512 wl
->time_offset
= (timespec_to_ns(&ts
) >> 10) -
513 (s64
)le32_to_cpu(status
->fw_localtime
);
516 #define WL1271_IRQ_MAX_LOOPS 10
518 static void wl1271_irq_work(struct work_struct
*work
)
522 int loopcount
= WL1271_IRQ_MAX_LOOPS
;
525 container_of(work
, struct wl1271
, irq_work
);
527 mutex_lock(&wl
->mutex
);
529 wl1271_debug(DEBUG_IRQ
, "IRQ work");
531 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
534 ret
= wl1271_ps_elp_wakeup(wl
, true);
538 spin_lock_irqsave(&wl
->wl_lock
, flags
);
539 while (test_bit(WL1271_FLAG_IRQ_PENDING
, &wl
->flags
) && loopcount
) {
540 clear_bit(WL1271_FLAG_IRQ_PENDING
, &wl
->flags
);
541 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
544 wl1271_fw_status(wl
, wl
->fw_status
);
545 intr
= le32_to_cpu(wl
->fw_status
->intr
);
547 wl1271_debug(DEBUG_IRQ
, "Zero interrupt received.");
548 spin_lock_irqsave(&wl
->wl_lock
, flags
);
552 intr
&= WL1271_INTR_MASK
;
554 if (unlikely(intr
& WL1271_ACX_INTR_WATCHDOG
)) {
555 wl1271_error("watchdog interrupt received! "
556 "starting recovery.");
557 ieee80211_queue_work(wl
->hw
, &wl
->recovery_work
);
559 /* restarting the chip. ignore any other interrupt. */
563 if (intr
& WL1271_ACX_INTR_DATA
) {
564 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_DATA");
566 /* check for tx results */
567 if (wl
->fw_status
->tx_results_counter
!=
568 (wl
->tx_results_count
& 0xff))
569 wl1271_tx_complete(wl
);
571 /* Check if any tx blocks were freed */
572 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
) &&
573 wl
->tx_queue_count
) {
575 * In order to avoid starvation of the TX path,
576 * call the work function directly.
578 wl1271_tx_work_locked(wl
);
581 wl1271_rx(wl
, wl
->fw_status
);
584 if (intr
& WL1271_ACX_INTR_EVENT_A
) {
585 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_EVENT_A");
586 wl1271_event_handle(wl
, 0);
589 if (intr
& WL1271_ACX_INTR_EVENT_B
) {
590 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_EVENT_B");
591 wl1271_event_handle(wl
, 1);
594 if (intr
& WL1271_ACX_INTR_INIT_COMPLETE
)
595 wl1271_debug(DEBUG_IRQ
,
596 "WL1271_ACX_INTR_INIT_COMPLETE");
598 if (intr
& WL1271_ACX_INTR_HW_AVAILABLE
)
599 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_HW_AVAILABLE");
601 spin_lock_irqsave(&wl
->wl_lock
, flags
);
604 if (test_bit(WL1271_FLAG_IRQ_PENDING
, &wl
->flags
))
605 ieee80211_queue_work(wl
->hw
, &wl
->irq_work
);
607 clear_bit(WL1271_FLAG_IRQ_RUNNING
, &wl
->flags
);
608 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
610 wl1271_ps_elp_sleep(wl
);
613 mutex_unlock(&wl
->mutex
);
616 static int wl1271_fetch_firmware(struct wl1271
*wl
)
618 const struct firmware
*fw
;
621 ret
= request_firmware(&fw
, WL1271_FW_NAME
, wl1271_wl_to_dev(wl
));
624 wl1271_error("could not get firmware: %d", ret
);
629 wl1271_error("firmware size is not multiple of 32 bits: %zu",
635 wl
->fw_len
= fw
->size
;
636 wl
->fw
= vmalloc(wl
->fw_len
);
639 wl1271_error("could not allocate memory for the firmware");
644 memcpy(wl
->fw
, fw
->data
, wl
->fw_len
);
649 release_firmware(fw
);
654 static int wl1271_fetch_nvs(struct wl1271
*wl
)
656 const struct firmware
*fw
;
659 ret
= request_firmware(&fw
, WL1271_NVS_NAME
, wl1271_wl_to_dev(wl
));
662 wl1271_error("could not get nvs file: %d", ret
);
666 wl
->nvs
= kmemdup(fw
->data
, sizeof(struct wl1271_nvs_file
), GFP_KERNEL
);
669 wl1271_error("could not allocate memory for the nvs file");
674 wl
->nvs_len
= fw
->size
;
677 release_firmware(fw
);
682 static void wl1271_recovery_work(struct work_struct
*work
)
685 container_of(work
, struct wl1271
, recovery_work
);
687 mutex_lock(&wl
->mutex
);
689 if (wl
->state
!= WL1271_STATE_ON
)
692 wl1271_info("Hardware recovery in progress.");
694 if (test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
695 ieee80211_connection_loss(wl
->vif
);
697 /* reboot the chipset */
698 __wl1271_op_remove_interface(wl
);
699 ieee80211_restart_hw(wl
->hw
);
702 mutex_unlock(&wl
->mutex
);
705 static void wl1271_fw_wakeup(struct wl1271
*wl
)
709 elp_reg
= ELPCTRL_WAKE_UP
;
710 wl1271_raw_write32(wl
, HW_ACCESS_ELP_CTRL_REG_ADDR
, elp_reg
);
713 static int wl1271_setup(struct wl1271
*wl
)
715 wl
->fw_status
= kmalloc(sizeof(*wl
->fw_status
), GFP_KERNEL
);
719 wl
->tx_res_if
= kmalloc(sizeof(*wl
->tx_res_if
), GFP_KERNEL
);
720 if (!wl
->tx_res_if
) {
721 kfree(wl
->fw_status
);
728 static int wl1271_chip_wakeup(struct wl1271
*wl
)
730 struct wl1271_partition_set partition
;
733 msleep(WL1271_PRE_POWER_ON_SLEEP
);
734 ret
= wl1271_power_on(wl
);
737 msleep(WL1271_POWER_ON_SLEEP
);
741 /* We don't need a real memory partition here, because we only want
742 * to use the registers at this point. */
743 memset(&partition
, 0, sizeof(partition
));
744 partition
.reg
.start
= REGISTERS_BASE
;
745 partition
.reg
.size
= REGISTERS_DOWN_SIZE
;
746 wl1271_set_partition(wl
, &partition
);
748 /* ELP module wake up */
749 wl1271_fw_wakeup(wl
);
751 /* whal_FwCtrl_BootSm() */
753 /* 0. read chip id from CHIP_ID */
754 wl
->chip
.id
= wl1271_read32(wl
, CHIP_ID_B
);
756 /* 1. check if chip id is valid */
758 switch (wl
->chip
.id
) {
759 case CHIP_ID_1271_PG10
:
760 wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
763 ret
= wl1271_setup(wl
);
767 case CHIP_ID_1271_PG20
:
768 wl1271_debug(DEBUG_BOOT
, "chip id 0x%x (1271 PG20)",
771 ret
= wl1271_setup(wl
);
776 wl1271_warning("unsupported chip id: 0x%x", wl
->chip
.id
);
781 if (wl
->fw
== NULL
) {
782 ret
= wl1271_fetch_firmware(wl
);
787 /* No NVS from netlink, try to get it from the filesystem */
788 if (wl
->nvs
== NULL
) {
789 ret
= wl1271_fetch_nvs(wl
);
798 int wl1271_plt_start(struct wl1271
*wl
)
800 int retries
= WL1271_BOOT_RETRIES
;
803 mutex_lock(&wl
->mutex
);
805 wl1271_notice("power up");
807 if (wl
->state
!= WL1271_STATE_OFF
) {
808 wl1271_error("cannot go into PLT state because not "
809 "in off state: %d", wl
->state
);
816 ret
= wl1271_chip_wakeup(wl
);
820 ret
= wl1271_boot(wl
);
824 ret
= wl1271_plt_init(wl
);
828 wl
->state
= WL1271_STATE_PLT
;
829 wl1271_notice("firmware booted in PLT mode (%s)",
834 wl1271_disable_interrupts(wl
);
835 mutex_unlock(&wl
->mutex
);
836 /* Unlocking the mutex in the middle of handling is
837 inherently unsafe. In this case we deem it safe to do,
838 because we need to let any possibly pending IRQ out of
839 the system (and while we are WL1271_STATE_OFF the IRQ
840 work function will not do anything.) Also, any other
841 possible concurrent operations will fail due to the
842 current state, hence the wl1271 struct should be safe. */
843 cancel_work_sync(&wl
->irq_work
);
844 mutex_lock(&wl
->mutex
);
846 wl1271_power_off(wl
);
849 wl1271_error("firmware boot in PLT mode failed despite %d retries",
850 WL1271_BOOT_RETRIES
);
852 mutex_unlock(&wl
->mutex
);
857 int wl1271_plt_stop(struct wl1271
*wl
)
861 mutex_lock(&wl
->mutex
);
863 wl1271_notice("power down");
865 if (wl
->state
!= WL1271_STATE_PLT
) {
866 wl1271_error("cannot power down because not in PLT "
867 "state: %d", wl
->state
);
872 wl1271_disable_interrupts(wl
);
873 wl1271_power_off(wl
);
875 wl
->state
= WL1271_STATE_OFF
;
879 mutex_unlock(&wl
->mutex
);
881 cancel_work_sync(&wl
->irq_work
);
882 cancel_work_sync(&wl
->recovery_work
);
887 static int wl1271_op_tx(struct ieee80211_hw
*hw
, struct sk_buff
*skb
)
889 struct wl1271
*wl
= hw
->priv
;
890 struct ieee80211_conf
*conf
= &hw
->conf
;
891 struct ieee80211_tx_info
*txinfo
= IEEE80211_SKB_CB(skb
);
892 struct ieee80211_sta
*sta
= txinfo
->control
.sta
;
897 * peek into the rates configured in the STA entry.
898 * The rates set after connection stage, The first block only BG sets:
899 * the compare is for bit 0-16 of sta_rate_set. The second block add
900 * HT rates in case of HT supported.
902 spin_lock_irqsave(&wl
->wl_lock
, flags
);
904 (sta
->supp_rates
[conf
->channel
->band
] !=
905 (wl
->sta_rate_set
& HW_BG_RATES_MASK
))) {
906 wl
->sta_rate_set
= sta
->supp_rates
[conf
->channel
->band
];
907 set_bit(WL1271_FLAG_STA_RATES_CHANGED
, &wl
->flags
);
910 #ifdef CONFIG_WL12XX_HT
912 sta
->ht_cap
.ht_supported
&&
913 ((wl
->sta_rate_set
>> HW_HT_RATES_OFFSET
) !=
914 sta
->ht_cap
.mcs
.rx_mask
[0])) {
915 /* Clean MCS bits before setting them */
916 wl
->sta_rate_set
&= HW_BG_RATES_MASK
;
918 (sta
->ht_cap
.mcs
.rx_mask
[0] << HW_HT_RATES_OFFSET
);
919 set_bit(WL1271_FLAG_STA_RATES_CHANGED
, &wl
->flags
);
922 wl
->tx_queue_count
++;
923 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
925 /* queue the packet */
926 q
= wl1271_tx_get_queue(skb_get_queue_mapping(skb
));
927 skb_queue_tail(&wl
->tx_queue
[q
], skb
);
930 * The chip specific setup must run before the first TX packet -
931 * before that, the tx_work will not be initialized!
934 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
))
935 ieee80211_queue_work(wl
->hw
, &wl
->tx_work
);
938 * The workqueue is slow to process the tx_queue and we need stop
939 * the queue here, otherwise the queue will get too long.
941 if (wl
->tx_queue_count
>= WL1271_TX_QUEUE_HIGH_WATERMARK
) {
942 wl1271_debug(DEBUG_TX
, "op_tx: stopping queues");
944 spin_lock_irqsave(&wl
->wl_lock
, flags
);
945 ieee80211_stop_queues(wl
->hw
);
946 set_bit(WL1271_FLAG_TX_QUEUE_STOPPED
, &wl
->flags
);
947 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
953 static struct notifier_block wl1271_dev_notifier
= {
954 .notifier_call
= wl1271_dev_notify
,
957 static int wl1271_op_start(struct ieee80211_hw
*hw
)
959 wl1271_debug(DEBUG_MAC80211
, "mac80211 start");
962 * We have to delay the booting of the hardware because
963 * we need to know the local MAC address before downloading and
964 * initializing the firmware. The MAC address cannot be changed
965 * after boot, and without the proper MAC address, the firmware
966 * will not function properly.
968 * The MAC address is first known when the corresponding interface
969 * is added. That is where we will initialize the hardware.
975 static void wl1271_op_stop(struct ieee80211_hw
*hw
)
977 wl1271_debug(DEBUG_MAC80211
, "mac80211 stop");
980 static int wl1271_op_add_interface(struct ieee80211_hw
*hw
,
981 struct ieee80211_vif
*vif
)
983 struct wl1271
*wl
= hw
->priv
;
984 struct wiphy
*wiphy
= hw
->wiphy
;
985 int retries
= WL1271_BOOT_RETRIES
;
989 wl1271_debug(DEBUG_MAC80211
, "mac80211 add interface type %d mac %pM",
990 vif
->type
, vif
->addr
);
992 mutex_lock(&wl
->mutex
);
994 wl1271_debug(DEBUG_MAC80211
,
995 "multiple vifs are not supported yet");
1000 switch (vif
->type
) {
1001 case NL80211_IFTYPE_STATION
:
1002 wl
->bss_type
= BSS_TYPE_STA_BSS
;
1003 wl
->set_bss_type
= BSS_TYPE_STA_BSS
;
1005 case NL80211_IFTYPE_ADHOC
:
1006 wl
->bss_type
= BSS_TYPE_IBSS
;
1007 wl
->set_bss_type
= BSS_TYPE_STA_BSS
;
1014 memcpy(wl
->mac_addr
, vif
->addr
, ETH_ALEN
);
1016 if (wl
->state
!= WL1271_STATE_OFF
) {
1017 wl1271_error("cannot start because not in off state: %d",
1025 ret
= wl1271_chip_wakeup(wl
);
1029 ret
= wl1271_boot(wl
);
1033 ret
= wl1271_hw_init(wl
);
1041 wl1271_disable_interrupts(wl
);
1042 mutex_unlock(&wl
->mutex
);
1043 /* Unlocking the mutex in the middle of handling is
1044 inherently unsafe. In this case we deem it safe to do,
1045 because we need to let any possibly pending IRQ out of
1046 the system (and while we are WL1271_STATE_OFF the IRQ
1047 work function will not do anything.) Also, any other
1048 possible concurrent operations will fail due to the
1049 current state, hence the wl1271 struct should be safe. */
1050 cancel_work_sync(&wl
->irq_work
);
1051 mutex_lock(&wl
->mutex
);
1053 wl1271_power_off(wl
);
1057 wl1271_error("firmware boot failed despite %d retries",
1058 WL1271_BOOT_RETRIES
);
1063 wl
->state
= WL1271_STATE_ON
;
1064 wl1271_info("firmware booted (%s)", wl
->chip
.fw_ver
);
1066 /* update hw/fw version info in wiphy struct */
1067 wiphy
->hw_version
= wl
->chip
.id
;
1068 strncpy(wiphy
->fw_version
, wl
->chip
.fw_ver
,
1069 sizeof(wiphy
->fw_version
));
1072 * Now we know if 11a is supported (info from the NVS), so disable
1073 * 11a channels if not supported
1075 if (!wl
->enable_11a
)
1076 wiphy
->bands
[IEEE80211_BAND_5GHZ
]->n_channels
= 0;
1078 wl1271_debug(DEBUG_MAC80211
, "11a is %ssupported",
1079 wl
->enable_11a
? "" : "not ");
1082 mutex_unlock(&wl
->mutex
);
1085 list_add(&wl
->list
, &wl_list
);
1090 static void __wl1271_op_remove_interface(struct wl1271
*wl
)
1094 wl1271_debug(DEBUG_MAC80211
, "mac80211 remove interface");
1096 wl1271_info("down");
1098 list_del(&wl
->list
);
1100 WARN_ON(wl
->state
!= WL1271_STATE_ON
);
1102 /* enable dyn ps just in case (if left on due to fw crash etc) */
1103 if (wl
->bss_type
== BSS_TYPE_STA_BSS
)
1104 ieee80211_enable_dyn_ps(wl
->vif
);
1106 if (wl
->scan
.state
!= WL1271_SCAN_STATE_IDLE
) {
1107 wl
->scan
.state
= WL1271_SCAN_STATE_IDLE
;
1108 kfree(wl
->scan
.scanned_ch
);
1109 wl
->scan
.scanned_ch
= NULL
;
1110 wl
->scan
.req
= NULL
;
1111 ieee80211_scan_completed(wl
->hw
, true);
1114 wl
->state
= WL1271_STATE_OFF
;
1116 wl1271_disable_interrupts(wl
);
1118 mutex_unlock(&wl
->mutex
);
1120 cancel_delayed_work_sync(&wl
->scan_complete_work
);
1121 cancel_work_sync(&wl
->irq_work
);
1122 cancel_work_sync(&wl
->tx_work
);
1123 cancel_delayed_work_sync(&wl
->pspoll_work
);
1124 cancel_delayed_work_sync(&wl
->elp_work
);
1126 mutex_lock(&wl
->mutex
);
1128 /* let's notify MAC80211 about the remaining pending TX frames */
1129 wl1271_tx_reset(wl
);
1130 wl1271_power_off(wl
);
1132 memset(wl
->bssid
, 0, ETH_ALEN
);
1133 memset(wl
->ssid
, 0, IW_ESSID_MAX_SIZE
+ 1);
1135 wl
->bss_type
= MAX_BSS_TYPE
;
1136 wl
->set_bss_type
= MAX_BSS_TYPE
;
1137 wl
->band
= IEEE80211_BAND_2GHZ
;
1140 wl
->psm_entry_retry
= 0;
1141 wl
->power_level
= WL1271_DEFAULT_POWER_LEVEL
;
1142 wl
->tx_blocks_available
= 0;
1143 wl
->tx_results_count
= 0;
1144 wl
->tx_packets_count
= 0;
1145 wl
->tx_security_last_seq
= 0;
1146 wl
->tx_security_seq
= 0;
1147 wl
->time_offset
= 0;
1148 wl
->session_counter
= 0;
1149 wl
->rate_set
= CONF_TX_RATE_MASK_BASIC
;
1150 wl
->sta_rate_set
= 0;
1155 for (i
= 0; i
< NUM_TX_QUEUES
; i
++)
1156 wl
->tx_blocks_freed
[i
] = 0;
1158 wl1271_debugfs_reset(wl
);
1160 kfree(wl
->fw_status
);
1161 wl
->fw_status
= NULL
;
1162 kfree(wl
->tx_res_if
);
1163 wl
->tx_res_if
= NULL
;
1164 kfree(wl
->target_mem_map
);
1165 wl
->target_mem_map
= NULL
;
1168 static void wl1271_op_remove_interface(struct ieee80211_hw
*hw
,
1169 struct ieee80211_vif
*vif
)
1171 struct wl1271
*wl
= hw
->priv
;
1173 mutex_lock(&wl
->mutex
);
1175 * wl->vif can be null here if someone shuts down the interface
1176 * just when hardware recovery has been started.
1179 WARN_ON(wl
->vif
!= vif
);
1180 __wl1271_op_remove_interface(wl
);
1183 mutex_unlock(&wl
->mutex
);
1184 cancel_work_sync(&wl
->recovery_work
);
1187 static void wl1271_configure_filters(struct wl1271
*wl
, unsigned int filters
)
1189 wl
->rx_config
= WL1271_DEFAULT_RX_CONFIG
;
1190 wl
->rx_filter
= WL1271_DEFAULT_RX_FILTER
;
1192 /* combine requested filters with current filter config */
1193 filters
= wl
->filters
| filters
;
1195 wl1271_debug(DEBUG_FILTERS
, "RX filters set: ");
1197 if (filters
& FIF_PROMISC_IN_BSS
) {
1198 wl1271_debug(DEBUG_FILTERS
, " - FIF_PROMISC_IN_BSS");
1199 wl
->rx_config
&= ~CFG_UNI_FILTER_EN
;
1200 wl
->rx_config
|= CFG_BSSID_FILTER_EN
;
1202 if (filters
& FIF_BCN_PRBRESP_PROMISC
) {
1203 wl1271_debug(DEBUG_FILTERS
, " - FIF_BCN_PRBRESP_PROMISC");
1204 wl
->rx_config
&= ~CFG_BSSID_FILTER_EN
;
1205 wl
->rx_config
&= ~CFG_SSID_FILTER_EN
;
1207 if (filters
& FIF_OTHER_BSS
) {
1208 wl1271_debug(DEBUG_FILTERS
, " - FIF_OTHER_BSS");
1209 wl
->rx_config
&= ~CFG_BSSID_FILTER_EN
;
1211 if (filters
& FIF_CONTROL
) {
1212 wl1271_debug(DEBUG_FILTERS
, " - FIF_CONTROL");
1213 wl
->rx_filter
|= CFG_RX_CTL_EN
;
1215 if (filters
& FIF_FCSFAIL
) {
1216 wl1271_debug(DEBUG_FILTERS
, " - FIF_FCSFAIL");
1217 wl
->rx_filter
|= CFG_RX_FCS_ERROR
;
1221 static int wl1271_dummy_join(struct wl1271
*wl
)
1224 /* we need to use a dummy BSSID for now */
1225 static const u8 dummy_bssid
[ETH_ALEN
] = { 0x0b, 0xad, 0xde,
1228 memcpy(wl
->bssid
, dummy_bssid
, ETH_ALEN
);
1230 /* pass through frames from all BSS */
1231 wl1271_configure_filters(wl
, FIF_OTHER_BSS
);
1233 ret
= wl1271_cmd_join(wl
, wl
->set_bss_type
);
1237 set_bit(WL1271_FLAG_JOINED
, &wl
->flags
);
1243 static int wl1271_join(struct wl1271
*wl
, bool set_assoc
)
1248 * One of the side effects of the JOIN command is that is clears
1249 * WPA/WPA2 keys from the chipset. Performing a JOIN while associated
1250 * to a WPA/WPA2 access point will therefore kill the data-path.
1251 * Currently there is no supported scenario for JOIN during
1252 * association - if it becomes a supported scenario, the WPA/WPA2 keys
1253 * must be handled somehow.
1256 if (test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
1257 wl1271_info("JOIN while associated.");
1260 set_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
);
1262 ret
= wl1271_cmd_join(wl
, wl
->set_bss_type
);
1266 set_bit(WL1271_FLAG_JOINED
, &wl
->flags
);
1268 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
1272 * The join command disable the keep-alive mode, shut down its process,
1273 * and also clear the template config, so we need to reset it all after
1274 * the join. The acx_aid starts the keep-alive process, and the order
1275 * of the commands below is relevant.
1277 ret
= wl1271_acx_keep_alive_mode(wl
, true);
1281 ret
= wl1271_acx_aid(wl
, wl
->aid
);
1285 ret
= wl1271_cmd_build_klv_null_data(wl
);
1289 ret
= wl1271_acx_keep_alive_config(wl
, CMD_TEMPL_KLV_IDX_NULL_DATA
,
1290 ACX_KEEP_ALIVE_TPL_VALID
);
1298 static int wl1271_unjoin(struct wl1271
*wl
)
1302 /* to stop listening to a channel, we disconnect */
1303 ret
= wl1271_cmd_disconnect(wl
);
1307 clear_bit(WL1271_FLAG_JOINED
, &wl
->flags
);
1308 memset(wl
->bssid
, 0, ETH_ALEN
);
1310 /* stop filterting packets based on bssid */
1311 wl1271_configure_filters(wl
, FIF_OTHER_BSS
);
1317 static void wl1271_set_band_rate(struct wl1271
*wl
)
1319 if (wl
->band
== IEEE80211_BAND_2GHZ
)
1320 wl
->basic_rate_set
= wl
->conf
.tx
.basic_rate
;
1322 wl
->basic_rate_set
= wl
->conf
.tx
.basic_rate_5
;
1325 static u32
wl1271_min_rate_get(struct wl1271
*wl
)
1330 if (!wl
->basic_rate_set
) {
1332 wl
->basic_rate_set
= wl
->conf
.tx
.basic_rate
;
1335 for (i
= 0; !rate
; i
++) {
1336 if ((wl
->basic_rate_set
>> i
) & 0x1)
1343 static int wl1271_handle_idle(struct wl1271
*wl
, bool idle
)
1348 if (test_bit(WL1271_FLAG_JOINED
, &wl
->flags
)) {
1349 ret
= wl1271_unjoin(wl
);
1353 wl
->rate_set
= wl1271_min_rate_get(wl
);
1354 wl
->sta_rate_set
= 0;
1355 ret
= wl1271_acx_rate_policies(wl
);
1358 ret
= wl1271_acx_keep_alive_config(
1359 wl
, CMD_TEMPL_KLV_IDX_NULL_DATA
,
1360 ACX_KEEP_ALIVE_TPL_INVALID
);
1363 set_bit(WL1271_FLAG_IDLE
, &wl
->flags
);
1365 /* increment the session counter */
1366 wl
->session_counter
++;
1367 if (wl
->session_counter
>= SESSION_COUNTER_MAX
)
1368 wl
->session_counter
= 0;
1369 ret
= wl1271_dummy_join(wl
);
1372 clear_bit(WL1271_FLAG_IDLE
, &wl
->flags
);
1379 static int wl1271_op_config(struct ieee80211_hw
*hw
, u32 changed
)
1381 struct wl1271
*wl
= hw
->priv
;
1382 struct ieee80211_conf
*conf
= &hw
->conf
;
1383 int channel
, ret
= 0;
1385 channel
= ieee80211_frequency_to_channel(conf
->channel
->center_freq
);
1387 wl1271_debug(DEBUG_MAC80211
, "mac80211 config ch %d psm %s power %d %s",
1389 conf
->flags
& IEEE80211_CONF_PS
? "on" : "off",
1391 conf
->flags
& IEEE80211_CONF_IDLE
? "idle" : "in use");
1394 * mac80211 will go to idle nearly immediately after transmitting some
1395 * frames, such as the deauth. To make sure those frames reach the air,
1396 * wait here until the TX queue is fully flushed.
1398 if ((changed
& IEEE80211_CONF_CHANGE_IDLE
) &&
1399 (conf
->flags
& IEEE80211_CONF_IDLE
))
1400 wl1271_tx_flush(wl
);
1402 mutex_lock(&wl
->mutex
);
1404 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
1409 ret
= wl1271_ps_elp_wakeup(wl
, false);
1413 /* if the channel changes while joined, join again */
1414 if (changed
& IEEE80211_CONF_CHANGE_CHANNEL
&&
1415 ((wl
->band
!= conf
->channel
->band
) ||
1416 (wl
->channel
!= channel
))) {
1417 wl
->band
= conf
->channel
->band
;
1418 wl
->channel
= channel
;
1421 * FIXME: the mac80211 should really provide a fixed rate
1422 * to use here. for now, just use the smallest possible rate
1423 * for the band as a fixed rate for association frames and
1424 * other control messages.
1426 if (!test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
))
1427 wl1271_set_band_rate(wl
);
1429 wl
->basic_rate
= wl1271_min_rate_get(wl
);
1430 ret
= wl1271_acx_rate_policies(wl
);
1432 wl1271_warning("rate policy for update channel "
1435 if (test_bit(WL1271_FLAG_JOINED
, &wl
->flags
)) {
1436 ret
= wl1271_join(wl
, false);
1438 wl1271_warning("cmd join to update channel "
1443 if (changed
& IEEE80211_CONF_CHANGE_IDLE
) {
1444 ret
= wl1271_handle_idle(wl
, conf
->flags
& IEEE80211_CONF_IDLE
);
1446 wl1271_warning("idle mode change failed %d", ret
);
1450 * if mac80211 changes the PSM mode, make sure the mode is not
1451 * incorrectly changed after the pspoll failure active window.
1453 if (changed
& IEEE80211_CONF_CHANGE_PS
)
1454 clear_bit(WL1271_FLAG_PSPOLL_FAILURE
, &wl
->flags
);
1456 if (conf
->flags
& IEEE80211_CONF_PS
&&
1457 !test_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
)) {
1458 set_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
);
1461 * We enter PSM only if we're already associated.
1462 * If we're not, we'll enter it when joining an SSID,
1463 * through the bss_info_changed() hook.
1465 if (test_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
)) {
1466 wl1271_debug(DEBUG_PSM
, "psm enabled");
1467 ret
= wl1271_ps_set_mode(wl
, STATION_POWER_SAVE_MODE
,
1468 wl
->basic_rate
, true);
1470 } else if (!(conf
->flags
& IEEE80211_CONF_PS
) &&
1471 test_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
)) {
1472 wl1271_debug(DEBUG_PSM
, "psm disabled");
1474 clear_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
);
1476 if (test_bit(WL1271_FLAG_PSM
, &wl
->flags
))
1477 ret
= wl1271_ps_set_mode(wl
, STATION_ACTIVE_MODE
,
1478 wl
->basic_rate
, true);
1481 if (conf
->power_level
!= wl
->power_level
) {
1482 ret
= wl1271_acx_tx_power(wl
, conf
->power_level
);
1486 wl
->power_level
= conf
->power_level
;
1490 wl1271_ps_elp_sleep(wl
);
1493 mutex_unlock(&wl
->mutex
);
1498 struct wl1271_filter_params
{
1501 u8 mc_list
[ACX_MC_ADDRESS_GROUP_MAX
][ETH_ALEN
];
1504 static u64
wl1271_op_prepare_multicast(struct ieee80211_hw
*hw
,
1505 struct netdev_hw_addr_list
*mc_list
)
1507 struct wl1271_filter_params
*fp
;
1508 struct netdev_hw_addr
*ha
;
1509 struct wl1271
*wl
= hw
->priv
;
1511 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
1514 fp
= kzalloc(sizeof(*fp
), GFP_ATOMIC
);
1516 wl1271_error("Out of memory setting filters.");
1520 /* update multicast filtering parameters */
1521 fp
->mc_list_length
= 0;
1522 if (netdev_hw_addr_list_count(mc_list
) > ACX_MC_ADDRESS_GROUP_MAX
) {
1523 fp
->enabled
= false;
1526 netdev_hw_addr_list_for_each(ha
, mc_list
) {
1527 memcpy(fp
->mc_list
[fp
->mc_list_length
],
1528 ha
->addr
, ETH_ALEN
);
1529 fp
->mc_list_length
++;
1533 return (u64
)(unsigned long)fp
;
1536 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
1539 FIF_BCN_PRBRESP_PROMISC | \
1543 static void wl1271_op_configure_filter(struct ieee80211_hw
*hw
,
1544 unsigned int changed
,
1545 unsigned int *total
, u64 multicast
)
1547 struct wl1271_filter_params
*fp
= (void *)(unsigned long)multicast
;
1548 struct wl1271
*wl
= hw
->priv
;
1551 wl1271_debug(DEBUG_MAC80211
, "mac80211 configure filter");
1553 mutex_lock(&wl
->mutex
);
1555 *total
&= WL1271_SUPPORTED_FILTERS
;
1556 changed
&= WL1271_SUPPORTED_FILTERS
;
1558 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
1561 ret
= wl1271_ps_elp_wakeup(wl
, false);
1566 if (*total
& FIF_ALLMULTI
)
1567 ret
= wl1271_acx_group_address_tbl(wl
, false, NULL
, 0);
1569 ret
= wl1271_acx_group_address_tbl(wl
, fp
->enabled
,
1571 fp
->mc_list_length
);
1575 /* determine, whether supported filter values have changed */
1579 /* configure filters */
1580 wl
->filters
= *total
;
1581 wl1271_configure_filters(wl
, 0);
1583 /* apply configured filters */
1584 ret
= wl1271_acx_rx_config(wl
, wl
->rx_config
, wl
->rx_filter
);
1589 wl1271_ps_elp_sleep(wl
);
1592 mutex_unlock(&wl
->mutex
);
1596 static int wl1271_op_set_key(struct ieee80211_hw
*hw
, enum set_key_cmd cmd
,
1597 struct ieee80211_vif
*vif
,
1598 struct ieee80211_sta
*sta
,
1599 struct ieee80211_key_conf
*key_conf
)
1601 struct wl1271
*wl
= hw
->priv
;
1608 static const u8 bcast_addr
[ETH_ALEN
] =
1609 { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
1611 wl1271_debug(DEBUG_MAC80211
, "mac80211 set key");
1613 addr
= sta
? sta
->addr
: bcast_addr
;
1615 wl1271_debug(DEBUG_CRYPT
, "CMD: 0x%x", cmd
);
1616 wl1271_dump(DEBUG_CRYPT
, "ADDR: ", addr
, ETH_ALEN
);
1617 wl1271_debug(DEBUG_CRYPT
, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
1618 key_conf
->cipher
, key_conf
->keyidx
,
1619 key_conf
->keylen
, key_conf
->flags
);
1620 wl1271_dump(DEBUG_CRYPT
, "KEY: ", key_conf
->key
, key_conf
->keylen
);
1622 if (is_zero_ether_addr(addr
)) {
1623 /* We dont support TX only encryption */
1628 mutex_lock(&wl
->mutex
);
1630 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
1635 ret
= wl1271_ps_elp_wakeup(wl
, false);
1639 switch (key_conf
->cipher
) {
1640 case WLAN_CIPHER_SUITE_WEP40
:
1641 case WLAN_CIPHER_SUITE_WEP104
:
1644 key_conf
->hw_key_idx
= key_conf
->keyidx
;
1646 case WLAN_CIPHER_SUITE_TKIP
:
1647 key_type
= KEY_TKIP
;
1649 key_conf
->hw_key_idx
= key_conf
->keyidx
;
1650 tx_seq_32
= WL1271_TX_SECURITY_HI32(wl
->tx_security_seq
);
1651 tx_seq_16
= WL1271_TX_SECURITY_LO16(wl
->tx_security_seq
);
1653 case WLAN_CIPHER_SUITE_CCMP
:
1656 key_conf
->flags
|= IEEE80211_KEY_FLAG_GENERATE_IV
;
1657 tx_seq_32
= WL1271_TX_SECURITY_HI32(wl
->tx_security_seq
);
1658 tx_seq_16
= WL1271_TX_SECURITY_LO16(wl
->tx_security_seq
);
1660 case WL1271_CIPHER_SUITE_GEM
:
1662 tx_seq_32
= WL1271_TX_SECURITY_HI32(wl
->tx_security_seq
);
1663 tx_seq_16
= WL1271_TX_SECURITY_LO16(wl
->tx_security_seq
);
1666 wl1271_error("Unknown key algo 0x%x", key_conf
->cipher
);
1674 ret
= wl1271_cmd_set_key(wl
, KEY_ADD_OR_REPLACE
,
1675 key_conf
->keyidx
, key_type
,
1676 key_conf
->keylen
, key_conf
->key
,
1677 addr
, tx_seq_32
, tx_seq_16
);
1679 wl1271_error("Could not add or replace key");
1683 /* the default WEP key needs to be configured at least once */
1684 if (key_type
== KEY_WEP
) {
1685 ret
= wl1271_cmd_set_default_wep_key(wl
,
1693 /* The wl1271 does not allow to remove unicast keys - they
1694 will be cleared automatically on next CMD_JOIN. Ignore the
1695 request silently, as we dont want the mac80211 to emit
1696 an error message. */
1697 if (!is_broadcast_ether_addr(addr
))
1700 ret
= wl1271_cmd_set_key(wl
, KEY_REMOVE
,
1701 key_conf
->keyidx
, key_type
,
1702 key_conf
->keylen
, key_conf
->key
,
1705 wl1271_error("Could not remove key");
1711 wl1271_error("Unsupported key cmd 0x%x", cmd
);
1717 wl1271_ps_elp_sleep(wl
);
1720 mutex_unlock(&wl
->mutex
);
1726 static int wl1271_op_hw_scan(struct ieee80211_hw
*hw
,
1727 struct ieee80211_vif
*vif
,
1728 struct cfg80211_scan_request
*req
)
1730 struct wl1271
*wl
= hw
->priv
;
1735 wl1271_debug(DEBUG_MAC80211
, "mac80211 hw scan");
1738 ssid
= req
->ssids
[0].ssid
;
1739 len
= req
->ssids
[0].ssid_len
;
1742 mutex_lock(&wl
->mutex
);
1744 if (wl
->state
== WL1271_STATE_OFF
) {
1746 * We cannot return -EBUSY here because cfg80211 will expect
1747 * a call to ieee80211_scan_completed if we do - in this case
1748 * there won't be any call.
1754 ret
= wl1271_ps_elp_wakeup(wl
, false);
1758 ret
= wl1271_scan(hw
->priv
, ssid
, len
, req
);
1760 wl1271_ps_elp_sleep(wl
);
1763 mutex_unlock(&wl
->mutex
);
1768 static int wl1271_op_set_frag_threshold(struct ieee80211_hw
*hw
, u32 value
)
1770 struct wl1271
*wl
= hw
->priv
;
1773 mutex_lock(&wl
->mutex
);
1775 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
1780 ret
= wl1271_ps_elp_wakeup(wl
, false);
1784 ret
= wl1271_acx_frag_threshold(wl
, (u16
)value
);
1786 wl1271_warning("wl1271_op_set_frag_threshold failed: %d", ret
);
1788 wl1271_ps_elp_sleep(wl
);
1791 mutex_unlock(&wl
->mutex
);
1796 static int wl1271_op_set_rts_threshold(struct ieee80211_hw
*hw
, u32 value
)
1798 struct wl1271
*wl
= hw
->priv
;
1801 mutex_lock(&wl
->mutex
);
1803 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
1808 ret
= wl1271_ps_elp_wakeup(wl
, false);
1812 ret
= wl1271_acx_rts_threshold(wl
, (u16
) value
);
1814 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret
);
1816 wl1271_ps_elp_sleep(wl
);
1819 mutex_unlock(&wl
->mutex
);
1824 static void wl1271_ssid_set(struct wl1271
*wl
, struct sk_buff
*skb
,
1827 u8
*ptr
= skb
->data
+ offset
;
1829 /* find the location of the ssid in the beacon */
1830 while (ptr
< skb
->data
+ skb
->len
) {
1831 if (ptr
[0] == WLAN_EID_SSID
) {
1832 wl
->ssid_len
= ptr
[1];
1833 memcpy(wl
->ssid
, ptr
+2, wl
->ssid_len
);
1836 ptr
+= (ptr
[1] + 2);
1838 wl1271_error("No SSID in IEs!\n");
1841 static void wl1271_op_bss_info_changed(struct ieee80211_hw
*hw
,
1842 struct ieee80211_vif
*vif
,
1843 struct ieee80211_bss_conf
*bss_conf
,
1846 enum wl1271_cmd_ps_mode mode
;
1847 struct wl1271
*wl
= hw
->priv
;
1848 struct ieee80211_sta
*sta
= ieee80211_find_sta(vif
, bss_conf
->bssid
);
1849 bool do_join
= false;
1850 bool set_assoc
= false;
1853 wl1271_debug(DEBUG_MAC80211
, "mac80211 bss info changed");
1855 mutex_lock(&wl
->mutex
);
1857 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
1860 ret
= wl1271_ps_elp_wakeup(wl
, false);
1864 if ((changed
& BSS_CHANGED_BEACON_INT
) &&
1865 (wl
->bss_type
== BSS_TYPE_IBSS
)) {
1866 wl1271_debug(DEBUG_ADHOC
, "ad-hoc beacon interval updated: %d",
1867 bss_conf
->beacon_int
);
1869 wl
->beacon_int
= bss_conf
->beacon_int
;
1873 if ((changed
& BSS_CHANGED_BEACON
) &&
1874 (wl
->bss_type
== BSS_TYPE_IBSS
)) {
1875 struct sk_buff
*beacon
= ieee80211_beacon_get(hw
, vif
);
1877 wl1271_debug(DEBUG_ADHOC
, "ad-hoc beacon updated");
1880 struct ieee80211_hdr
*hdr
;
1881 int ieoffset
= offsetof(struct ieee80211_mgmt
,
1884 wl1271_ssid_set(wl
, beacon
, ieoffset
);
1886 ret
= wl1271_cmd_template_set(wl
, CMD_TEMPL_BEACON
,
1889 wl1271_min_rate_get(wl
));
1892 dev_kfree_skb(beacon
);
1896 hdr
= (struct ieee80211_hdr
*) beacon
->data
;
1897 hdr
->frame_control
= cpu_to_le16(
1898 IEEE80211_FTYPE_MGMT
|
1899 IEEE80211_STYPE_PROBE_RESP
);
1901 ret
= wl1271_cmd_template_set(wl
,
1902 CMD_TEMPL_PROBE_RESPONSE
,
1905 wl1271_min_rate_get(wl
));
1906 dev_kfree_skb(beacon
);
1910 /* Need to update the SSID (for filtering etc) */
1915 if ((changed
& BSS_CHANGED_BEACON_ENABLED
) &&
1916 (wl
->bss_type
== BSS_TYPE_IBSS
)) {
1917 wl1271_debug(DEBUG_ADHOC
, "ad-hoc beaconing: %s",
1918 bss_conf
->enable_beacon
? "enabled" : "disabled");
1920 if (bss_conf
->enable_beacon
)
1921 wl
->set_bss_type
= BSS_TYPE_IBSS
;
1923 wl
->set_bss_type
= BSS_TYPE_STA_BSS
;
1927 if (changed
& BSS_CHANGED_CQM
) {
1928 bool enable
= false;
1929 if (bss_conf
->cqm_rssi_thold
)
1931 ret
= wl1271_acx_rssi_snr_trigger(wl
, enable
,
1932 bss_conf
->cqm_rssi_thold
,
1933 bss_conf
->cqm_rssi_hyst
);
1936 wl
->rssi_thold
= bss_conf
->cqm_rssi_thold
;
1939 if ((changed
& BSS_CHANGED_BSSID
) &&
1941 * Now we know the correct bssid, so we send a new join command
1942 * and enable the BSSID filter
1944 memcmp(wl
->bssid
, bss_conf
->bssid
, ETH_ALEN
)) {
1945 memcpy(wl
->bssid
, bss_conf
->bssid
, ETH_ALEN
);
1947 ret
= wl1271_cmd_build_null_data(wl
);
1951 ret
= wl1271_build_qos_null_data(wl
);
1955 /* filter out all packets not from this BSSID */
1956 wl1271_configure_filters(wl
, 0);
1958 /* Need to update the BSSID (for filtering etc) */
1962 if (changed
& BSS_CHANGED_ASSOC
) {
1963 if (bss_conf
->assoc
) {
1966 wl
->aid
= bss_conf
->aid
;
1969 wl
->ps_poll_failures
= 0;
1972 * use basic rates from AP, and determine lowest rate
1973 * to use with control frames.
1975 rates
= bss_conf
->basic_rates
;
1976 wl
->basic_rate_set
= wl1271_tx_enabled_rates_get(wl
,
1978 wl
->basic_rate
= wl1271_min_rate_get(wl
);
1979 ret
= wl1271_acx_rate_policies(wl
);
1984 * with wl1271, we don't need to update the
1985 * beacon_int and dtim_period, because the firmware
1986 * updates it by itself when the first beacon is
1987 * received after a join.
1989 ret
= wl1271_cmd_build_ps_poll(wl
, wl
->aid
);
1994 * Get a template for hardware connection maintenance
1996 dev_kfree_skb(wl
->probereq
);
1997 wl
->probereq
= wl1271_cmd_build_ap_probe_req(wl
, NULL
);
1998 ieoffset
= offsetof(struct ieee80211_mgmt
,
1999 u
.probe_req
.variable
);
2000 wl1271_ssid_set(wl
, wl
->probereq
, ieoffset
);
2002 /* enable the connection monitoring feature */
2003 ret
= wl1271_acx_conn_monit_params(wl
, true);
2007 /* If we want to go in PSM but we're not there yet */
2008 if (test_bit(WL1271_FLAG_PSM_REQUESTED
, &wl
->flags
) &&
2009 !test_bit(WL1271_FLAG_PSM
, &wl
->flags
)) {
2010 mode
= STATION_POWER_SAVE_MODE
;
2011 ret
= wl1271_ps_set_mode(wl
, mode
,
2018 /* use defaults when not associated */
2019 clear_bit(WL1271_FLAG_STA_STATE_SENT
, &wl
->flags
);
2020 clear_bit(WL1271_FLAG_STA_ASSOCIATED
, &wl
->flags
);
2023 /* free probe-request template */
2024 dev_kfree_skb(wl
->probereq
);
2025 wl
->probereq
= NULL
;
2027 /* re-enable dynamic ps - just in case */
2028 ieee80211_enable_dyn_ps(wl
->vif
);
2030 /* revert back to minimum rates for the current band */
2031 wl1271_set_band_rate(wl
);
2032 wl
->basic_rate
= wl1271_min_rate_get(wl
);
2033 ret
= wl1271_acx_rate_policies(wl
);
2037 /* disable connection monitor features */
2038 ret
= wl1271_acx_conn_monit_params(wl
, false);
2040 /* Disable the keep-alive feature */
2041 ret
= wl1271_acx_keep_alive_mode(wl
, false);
2045 /* restore the bssid filter and go to dummy bssid */
2047 wl1271_dummy_join(wl
);
2052 if (changed
& BSS_CHANGED_ERP_SLOT
) {
2053 if (bss_conf
->use_short_slot
)
2054 ret
= wl1271_acx_slot(wl
, SLOT_TIME_SHORT
);
2056 ret
= wl1271_acx_slot(wl
, SLOT_TIME_LONG
);
2058 wl1271_warning("Set slot time failed %d", ret
);
2063 if (changed
& BSS_CHANGED_ERP_PREAMBLE
) {
2064 if (bss_conf
->use_short_preamble
)
2065 wl1271_acx_set_preamble(wl
, ACX_PREAMBLE_SHORT
);
2067 wl1271_acx_set_preamble(wl
, ACX_PREAMBLE_LONG
);
2070 if (changed
& BSS_CHANGED_ERP_CTS_PROT
) {
2071 if (bss_conf
->use_cts_prot
)
2072 ret
= wl1271_acx_cts_protect(wl
, CTSPROTECT_ENABLE
);
2074 ret
= wl1271_acx_cts_protect(wl
, CTSPROTECT_DISABLE
);
2076 wl1271_warning("Set ctsprotect failed %d", ret
);
2082 * Takes care of: New association with HT enable,
2083 * HT information change in beacon.
2086 (changed
& BSS_CHANGED_HT
) &&
2087 (bss_conf
->channel_type
!= NL80211_CHAN_NO_HT
)) {
2088 ret
= wl1271_acx_set_ht_capabilities(wl
, &sta
->ht_cap
, true);
2090 wl1271_warning("Set ht cap true failed %d", ret
);
2093 ret
= wl1271_acx_set_ht_information(wl
,
2094 bss_conf
->ht_operation_mode
);
2096 wl1271_warning("Set ht information failed %d", ret
);
2101 * Takes care of: New association without HT,
2104 else if (sta
&& (changed
& BSS_CHANGED_ASSOC
)) {
2105 ret
= wl1271_acx_set_ht_capabilities(wl
, &sta
->ht_cap
, false);
2107 wl1271_warning("Set ht cap false failed %d", ret
);
2112 if (changed
& BSS_CHANGED_ARP_FILTER
) {
2113 __be32 addr
= bss_conf
->arp_addr_list
[0];
2114 WARN_ON(wl
->bss_type
!= BSS_TYPE_STA_BSS
);
2116 if (bss_conf
->arp_addr_cnt
== 1 &&
2117 bss_conf
->arp_filter_enabled
) {
2119 * The template should have been configured only upon
2120 * association. however, it seems that the correct ip
2121 * isn't being set (when sending), so we have to
2122 * reconfigure the template upon every ip change.
2124 ret
= wl1271_cmd_build_arp_rsp(wl
, addr
);
2126 wl1271_warning("build arp rsp failed: %d", ret
);
2130 ret
= wl1271_acx_arp_ip_filter(wl
,
2131 (ACX_ARP_FILTER_ARP_FILTERING
|
2132 ACX_ARP_FILTER_AUTO_ARP
),
2135 ret
= wl1271_acx_arp_ip_filter(wl
, 0, addr
);
2142 ret
= wl1271_join(wl
, set_assoc
);
2144 wl1271_warning("cmd join failed %d", ret
);
2150 wl1271_ps_elp_sleep(wl
);
2153 mutex_unlock(&wl
->mutex
);
2156 static int wl1271_op_conf_tx(struct ieee80211_hw
*hw
, u16 queue
,
2157 const struct ieee80211_tx_queue_params
*params
)
2159 struct wl1271
*wl
= hw
->priv
;
2163 mutex_lock(&wl
->mutex
);
2165 wl1271_debug(DEBUG_MAC80211
, "mac80211 conf tx %d", queue
);
2167 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
2172 ret
= wl1271_ps_elp_wakeup(wl
, false);
2176 /* the txop is confed in units of 32us by the mac80211, we need us */
2177 ret
= wl1271_acx_ac_cfg(wl
, wl1271_tx_get_queue(queue
),
2178 params
->cw_min
, params
->cw_max
,
2179 params
->aifs
, params
->txop
<< 5);
2184 ps_scheme
= CONF_PS_SCHEME_UPSD_TRIGGER
;
2186 ps_scheme
= CONF_PS_SCHEME_LEGACY
;
2188 ret
= wl1271_acx_tid_cfg(wl
, wl1271_tx_get_queue(queue
),
2189 CONF_CHANNEL_TYPE_EDCF
,
2190 wl1271_tx_get_queue(queue
),
2191 ps_scheme
, CONF_ACK_POLICY_LEGACY
, 0, 0);
2196 wl1271_ps_elp_sleep(wl
);
2199 mutex_unlock(&wl
->mutex
);
2204 static u64
wl1271_op_get_tsf(struct ieee80211_hw
*hw
)
2207 struct wl1271
*wl
= hw
->priv
;
2208 u64 mactime
= ULLONG_MAX
;
2211 wl1271_debug(DEBUG_MAC80211
, "mac80211 get tsf");
2213 mutex_lock(&wl
->mutex
);
2215 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
2218 ret
= wl1271_ps_elp_wakeup(wl
, false);
2222 ret
= wl1271_acx_tsf_info(wl
, &mactime
);
2227 wl1271_ps_elp_sleep(wl
);
2230 mutex_unlock(&wl
->mutex
);
2234 static int wl1271_op_get_survey(struct ieee80211_hw
*hw
, int idx
,
2235 struct survey_info
*survey
)
2237 struct wl1271
*wl
= hw
->priv
;
2238 struct ieee80211_conf
*conf
= &hw
->conf
;
2243 survey
->channel
= conf
->channel
;
2244 survey
->filled
= SURVEY_INFO_NOISE_DBM
;
2245 survey
->noise
= wl
->noise
;
2250 /* can't be const, mac80211 writes to this */
2251 static struct ieee80211_rate wl1271_rates
[] = {
2253 .hw_value
= CONF_HW_BIT_RATE_1MBPS
,
2254 .hw_value_short
= CONF_HW_BIT_RATE_1MBPS
, },
2256 .hw_value
= CONF_HW_BIT_RATE_2MBPS
,
2257 .hw_value_short
= CONF_HW_BIT_RATE_2MBPS
,
2258 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
2260 .hw_value
= CONF_HW_BIT_RATE_5_5MBPS
,
2261 .hw_value_short
= CONF_HW_BIT_RATE_5_5MBPS
,
2262 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
2264 .hw_value
= CONF_HW_BIT_RATE_11MBPS
,
2265 .hw_value_short
= CONF_HW_BIT_RATE_11MBPS
,
2266 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
2268 .hw_value
= CONF_HW_BIT_RATE_6MBPS
,
2269 .hw_value_short
= CONF_HW_BIT_RATE_6MBPS
, },
2271 .hw_value
= CONF_HW_BIT_RATE_9MBPS
,
2272 .hw_value_short
= CONF_HW_BIT_RATE_9MBPS
, },
2274 .hw_value
= CONF_HW_BIT_RATE_12MBPS
,
2275 .hw_value_short
= CONF_HW_BIT_RATE_12MBPS
, },
2277 .hw_value
= CONF_HW_BIT_RATE_18MBPS
,
2278 .hw_value_short
= CONF_HW_BIT_RATE_18MBPS
, },
2280 .hw_value
= CONF_HW_BIT_RATE_24MBPS
,
2281 .hw_value_short
= CONF_HW_BIT_RATE_24MBPS
, },
2283 .hw_value
= CONF_HW_BIT_RATE_36MBPS
,
2284 .hw_value_short
= CONF_HW_BIT_RATE_36MBPS
, },
2286 .hw_value
= CONF_HW_BIT_RATE_48MBPS
,
2287 .hw_value_short
= CONF_HW_BIT_RATE_48MBPS
, },
2289 .hw_value
= CONF_HW_BIT_RATE_54MBPS
,
2290 .hw_value_short
= CONF_HW_BIT_RATE_54MBPS
, },
2293 /* can't be const, mac80211 writes to this */
2294 static struct ieee80211_channel wl1271_channels
[] = {
2295 { .hw_value
= 1, .center_freq
= 2412, .max_power
= 25 },
2296 { .hw_value
= 2, .center_freq
= 2417, .max_power
= 25 },
2297 { .hw_value
= 3, .center_freq
= 2422, .max_power
= 25 },
2298 { .hw_value
= 4, .center_freq
= 2427, .max_power
= 25 },
2299 { .hw_value
= 5, .center_freq
= 2432, .max_power
= 25 },
2300 { .hw_value
= 6, .center_freq
= 2437, .max_power
= 25 },
2301 { .hw_value
= 7, .center_freq
= 2442, .max_power
= 25 },
2302 { .hw_value
= 8, .center_freq
= 2447, .max_power
= 25 },
2303 { .hw_value
= 9, .center_freq
= 2452, .max_power
= 25 },
2304 { .hw_value
= 10, .center_freq
= 2457, .max_power
= 25 },
2305 { .hw_value
= 11, .center_freq
= 2462, .max_power
= 25 },
2306 { .hw_value
= 12, .center_freq
= 2467, .max_power
= 25 },
2307 { .hw_value
= 13, .center_freq
= 2472, .max_power
= 25 },
2310 /* mapping to indexes for wl1271_rates */
2311 static const u8 wl1271_rate_to_idx_2ghz
[] = {
2312 /* MCS rates are used only with 11n */
2313 7, /* CONF_HW_RXTX_RATE_MCS7 */
2314 6, /* CONF_HW_RXTX_RATE_MCS6 */
2315 5, /* CONF_HW_RXTX_RATE_MCS5 */
2316 4, /* CONF_HW_RXTX_RATE_MCS4 */
2317 3, /* CONF_HW_RXTX_RATE_MCS3 */
2318 2, /* CONF_HW_RXTX_RATE_MCS2 */
2319 1, /* CONF_HW_RXTX_RATE_MCS1 */
2320 0, /* CONF_HW_RXTX_RATE_MCS0 */
2322 11, /* CONF_HW_RXTX_RATE_54 */
2323 10, /* CONF_HW_RXTX_RATE_48 */
2324 9, /* CONF_HW_RXTX_RATE_36 */
2325 8, /* CONF_HW_RXTX_RATE_24 */
2327 /* TI-specific rate */
2328 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_22 */
2330 7, /* CONF_HW_RXTX_RATE_18 */
2331 6, /* CONF_HW_RXTX_RATE_12 */
2332 3, /* CONF_HW_RXTX_RATE_11 */
2333 5, /* CONF_HW_RXTX_RATE_9 */
2334 4, /* CONF_HW_RXTX_RATE_6 */
2335 2, /* CONF_HW_RXTX_RATE_5_5 */
2336 1, /* CONF_HW_RXTX_RATE_2 */
2337 0 /* CONF_HW_RXTX_RATE_1 */
2340 /* 11n STA capabilities */
2341 #define HW_RX_HIGHEST_RATE 72
2343 #ifdef CONFIG_WL12XX_HT
2344 #define WL12XX_HT_CAP { \
2345 .cap = IEEE80211_HT_CAP_GRN_FLD | IEEE80211_HT_CAP_SGI_20, \
2346 .ht_supported = true, \
2347 .ampdu_factor = IEEE80211_HT_MAX_AMPDU_8K, \
2348 .ampdu_density = IEEE80211_HT_MPDU_DENSITY_8, \
2350 .rx_mask = { 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, \
2351 .rx_highest = cpu_to_le16(HW_RX_HIGHEST_RATE), \
2352 .tx_params = IEEE80211_HT_MCS_TX_DEFINED, \
2356 #define WL12XX_HT_CAP { \
2357 .ht_supported = false, \
2361 /* can't be const, mac80211 writes to this */
2362 static struct ieee80211_supported_band wl1271_band_2ghz
= {
2363 .channels
= wl1271_channels
,
2364 .n_channels
= ARRAY_SIZE(wl1271_channels
),
2365 .bitrates
= wl1271_rates
,
2366 .n_bitrates
= ARRAY_SIZE(wl1271_rates
),
2367 .ht_cap
= WL12XX_HT_CAP
,
2370 /* 5 GHz data rates for WL1273 */
2371 static struct ieee80211_rate wl1271_rates_5ghz
[] = {
2373 .hw_value
= CONF_HW_BIT_RATE_6MBPS
,
2374 .hw_value_short
= CONF_HW_BIT_RATE_6MBPS
, },
2376 .hw_value
= CONF_HW_BIT_RATE_9MBPS
,
2377 .hw_value_short
= CONF_HW_BIT_RATE_9MBPS
, },
2379 .hw_value
= CONF_HW_BIT_RATE_12MBPS
,
2380 .hw_value_short
= CONF_HW_BIT_RATE_12MBPS
, },
2382 .hw_value
= CONF_HW_BIT_RATE_18MBPS
,
2383 .hw_value_short
= CONF_HW_BIT_RATE_18MBPS
, },
2385 .hw_value
= CONF_HW_BIT_RATE_24MBPS
,
2386 .hw_value_short
= CONF_HW_BIT_RATE_24MBPS
, },
2388 .hw_value
= CONF_HW_BIT_RATE_36MBPS
,
2389 .hw_value_short
= CONF_HW_BIT_RATE_36MBPS
, },
2391 .hw_value
= CONF_HW_BIT_RATE_48MBPS
,
2392 .hw_value_short
= CONF_HW_BIT_RATE_48MBPS
, },
2394 .hw_value
= CONF_HW_BIT_RATE_54MBPS
,
2395 .hw_value_short
= CONF_HW_BIT_RATE_54MBPS
, },
2398 /* 5 GHz band channels for WL1273 */
2399 static struct ieee80211_channel wl1271_channels_5ghz
[] = {
2400 { .hw_value
= 7, .center_freq
= 5035},
2401 { .hw_value
= 8, .center_freq
= 5040},
2402 { .hw_value
= 9, .center_freq
= 5045},
2403 { .hw_value
= 11, .center_freq
= 5055},
2404 { .hw_value
= 12, .center_freq
= 5060},
2405 { .hw_value
= 16, .center_freq
= 5080},
2406 { .hw_value
= 34, .center_freq
= 5170},
2407 { .hw_value
= 36, .center_freq
= 5180},
2408 { .hw_value
= 38, .center_freq
= 5190},
2409 { .hw_value
= 40, .center_freq
= 5200},
2410 { .hw_value
= 42, .center_freq
= 5210},
2411 { .hw_value
= 44, .center_freq
= 5220},
2412 { .hw_value
= 46, .center_freq
= 5230},
2413 { .hw_value
= 48, .center_freq
= 5240},
2414 { .hw_value
= 52, .center_freq
= 5260},
2415 { .hw_value
= 56, .center_freq
= 5280},
2416 { .hw_value
= 60, .center_freq
= 5300},
2417 { .hw_value
= 64, .center_freq
= 5320},
2418 { .hw_value
= 100, .center_freq
= 5500},
2419 { .hw_value
= 104, .center_freq
= 5520},
2420 { .hw_value
= 108, .center_freq
= 5540},
2421 { .hw_value
= 112, .center_freq
= 5560},
2422 { .hw_value
= 116, .center_freq
= 5580},
2423 { .hw_value
= 120, .center_freq
= 5600},
2424 { .hw_value
= 124, .center_freq
= 5620},
2425 { .hw_value
= 128, .center_freq
= 5640},
2426 { .hw_value
= 132, .center_freq
= 5660},
2427 { .hw_value
= 136, .center_freq
= 5680},
2428 { .hw_value
= 140, .center_freq
= 5700},
2429 { .hw_value
= 149, .center_freq
= 5745},
2430 { .hw_value
= 153, .center_freq
= 5765},
2431 { .hw_value
= 157, .center_freq
= 5785},
2432 { .hw_value
= 161, .center_freq
= 5805},
2433 { .hw_value
= 165, .center_freq
= 5825},
2436 /* mapping to indexes for wl1271_rates_5ghz */
2437 static const u8 wl1271_rate_to_idx_5ghz
[] = {
2438 /* MCS rates are used only with 11n */
2439 7, /* CONF_HW_RXTX_RATE_MCS7 */
2440 6, /* CONF_HW_RXTX_RATE_MCS6 */
2441 5, /* CONF_HW_RXTX_RATE_MCS5 */
2442 4, /* CONF_HW_RXTX_RATE_MCS4 */
2443 3, /* CONF_HW_RXTX_RATE_MCS3 */
2444 2, /* CONF_HW_RXTX_RATE_MCS2 */
2445 1, /* CONF_HW_RXTX_RATE_MCS1 */
2446 0, /* CONF_HW_RXTX_RATE_MCS0 */
2448 7, /* CONF_HW_RXTX_RATE_54 */
2449 6, /* CONF_HW_RXTX_RATE_48 */
2450 5, /* CONF_HW_RXTX_RATE_36 */
2451 4, /* CONF_HW_RXTX_RATE_24 */
2453 /* TI-specific rate */
2454 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_22 */
2456 3, /* CONF_HW_RXTX_RATE_18 */
2457 2, /* CONF_HW_RXTX_RATE_12 */
2458 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_11 */
2459 1, /* CONF_HW_RXTX_RATE_9 */
2460 0, /* CONF_HW_RXTX_RATE_6 */
2461 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_5_5 */
2462 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_2 */
2463 CONF_HW_RXTX_RATE_UNSUPPORTED
/* CONF_HW_RXTX_RATE_1 */
2466 static struct ieee80211_supported_band wl1271_band_5ghz
= {
2467 .channels
= wl1271_channels_5ghz
,
2468 .n_channels
= ARRAY_SIZE(wl1271_channels_5ghz
),
2469 .bitrates
= wl1271_rates_5ghz
,
2470 .n_bitrates
= ARRAY_SIZE(wl1271_rates_5ghz
),
2471 .ht_cap
= WL12XX_HT_CAP
,
2474 static const u8
*wl1271_band_rate_to_idx
[] = {
2475 [IEEE80211_BAND_2GHZ
] = wl1271_rate_to_idx_2ghz
,
2476 [IEEE80211_BAND_5GHZ
] = wl1271_rate_to_idx_5ghz
2479 static const struct ieee80211_ops wl1271_ops
= {
2480 .start
= wl1271_op_start
,
2481 .stop
= wl1271_op_stop
,
2482 .add_interface
= wl1271_op_add_interface
,
2483 .remove_interface
= wl1271_op_remove_interface
,
2484 .config
= wl1271_op_config
,
2485 .prepare_multicast
= wl1271_op_prepare_multicast
,
2486 .configure_filter
= wl1271_op_configure_filter
,
2488 .set_key
= wl1271_op_set_key
,
2489 .hw_scan
= wl1271_op_hw_scan
,
2490 .bss_info_changed
= wl1271_op_bss_info_changed
,
2491 .set_frag_threshold
= wl1271_op_set_frag_threshold
,
2492 .set_rts_threshold
= wl1271_op_set_rts_threshold
,
2493 .conf_tx
= wl1271_op_conf_tx
,
2494 .get_tsf
= wl1271_op_get_tsf
,
2495 .get_survey
= wl1271_op_get_survey
,
2496 CFG80211_TESTMODE_CMD(wl1271_tm_cmd
)
2500 u8
wl1271_rate_to_idx(int rate
, enum ieee80211_band band
)
2504 BUG_ON(band
>= sizeof(wl1271_band_rate_to_idx
)/sizeof(u8
*));
2506 if (unlikely(rate
>= CONF_HW_RXTX_RATE_MAX
)) {
2507 wl1271_error("Illegal RX rate from HW: %d", rate
);
2511 idx
= wl1271_band_rate_to_idx
[band
][rate
];
2512 if (unlikely(idx
== CONF_HW_RXTX_RATE_UNSUPPORTED
)) {
2513 wl1271_error("Unsupported RX rate from HW: %d", rate
);
2520 static ssize_t
wl1271_sysfs_show_bt_coex_state(struct device
*dev
,
2521 struct device_attribute
*attr
,
2524 struct wl1271
*wl
= dev_get_drvdata(dev
);
2529 mutex_lock(&wl
->mutex
);
2530 len
= snprintf(buf
, len
, "%d\n\n0 - off\n1 - on\n",
2532 mutex_unlock(&wl
->mutex
);
2538 static ssize_t
wl1271_sysfs_store_bt_coex_state(struct device
*dev
,
2539 struct device_attribute
*attr
,
2540 const char *buf
, size_t count
)
2542 struct wl1271
*wl
= dev_get_drvdata(dev
);
2546 ret
= strict_strtoul(buf
, 10, &res
);
2549 wl1271_warning("incorrect value written to bt_coex_mode");
2553 mutex_lock(&wl
->mutex
);
2557 if (res
== wl
->sg_enabled
)
2560 wl
->sg_enabled
= res
;
2562 if (wl
->state
== WL1271_STATE_OFF
)
2565 ret
= wl1271_ps_elp_wakeup(wl
, false);
2569 wl1271_acx_sg_enable(wl
, wl
->sg_enabled
);
2570 wl1271_ps_elp_sleep(wl
);
2573 mutex_unlock(&wl
->mutex
);
2577 static DEVICE_ATTR(bt_coex_state
, S_IRUGO
| S_IWUSR
,
2578 wl1271_sysfs_show_bt_coex_state
,
2579 wl1271_sysfs_store_bt_coex_state
);
2581 static ssize_t
wl1271_sysfs_show_hw_pg_ver(struct device
*dev
,
2582 struct device_attribute
*attr
,
2585 struct wl1271
*wl
= dev_get_drvdata(dev
);
2590 mutex_lock(&wl
->mutex
);
2591 if (wl
->hw_pg_ver
>= 0)
2592 len
= snprintf(buf
, len
, "%d\n", wl
->hw_pg_ver
);
2594 len
= snprintf(buf
, len
, "n/a\n");
2595 mutex_unlock(&wl
->mutex
);
2600 static DEVICE_ATTR(hw_pg_ver
, S_IRUGO
| S_IWUSR
,
2601 wl1271_sysfs_show_hw_pg_ver
, NULL
);
2603 int wl1271_register_hw(struct wl1271
*wl
)
2607 if (wl
->mac80211_registered
)
2610 SET_IEEE80211_PERM_ADDR(wl
->hw
, wl
->mac_addr
);
2612 ret
= ieee80211_register_hw(wl
->hw
);
2614 wl1271_error("unable to register mac80211 hw: %d", ret
);
2618 wl
->mac80211_registered
= true;
2620 wl1271_debugfs_init(wl
);
2622 register_netdevice_notifier(&wl1271_dev_notifier
);
2624 wl1271_notice("loaded");
2628 EXPORT_SYMBOL_GPL(wl1271_register_hw
);
2630 void wl1271_unregister_hw(struct wl1271
*wl
)
2632 unregister_netdevice_notifier(&wl1271_dev_notifier
);
2633 ieee80211_unregister_hw(wl
->hw
);
2634 wl
->mac80211_registered
= false;
2637 EXPORT_SYMBOL_GPL(wl1271_unregister_hw
);
2639 int wl1271_init_ieee80211(struct wl1271
*wl
)
2641 static const u32 cipher_suites
[] = {
2642 WLAN_CIPHER_SUITE_WEP40
,
2643 WLAN_CIPHER_SUITE_WEP104
,
2644 WLAN_CIPHER_SUITE_TKIP
,
2645 WLAN_CIPHER_SUITE_CCMP
,
2646 WL1271_CIPHER_SUITE_GEM
,
2649 /* The tx descriptor buffer and the TKIP space. */
2650 wl
->hw
->extra_tx_headroom
= WL1271_TKIP_IV_SPACE
+
2651 sizeof(struct wl1271_tx_hw_descr
);
2654 /* FIXME: find a proper value */
2655 wl
->hw
->channel_change_time
= 10000;
2656 wl
->hw
->max_listen_interval
= wl
->conf
.conn
.max_listen_interval
;
2658 wl
->hw
->flags
= IEEE80211_HW_SIGNAL_DBM
|
2659 IEEE80211_HW_BEACON_FILTER
|
2660 IEEE80211_HW_SUPPORTS_PS
|
2661 IEEE80211_HW_SUPPORTS_UAPSD
|
2662 IEEE80211_HW_HAS_RATE_CONTROL
|
2663 IEEE80211_HW_CONNECTION_MONITOR
|
2664 IEEE80211_HW_SUPPORTS_CQM_RSSI
;
2666 wl
->hw
->wiphy
->cipher_suites
= cipher_suites
;
2667 wl
->hw
->wiphy
->n_cipher_suites
= ARRAY_SIZE(cipher_suites
);
2669 wl
->hw
->wiphy
->interface_modes
= BIT(NL80211_IFTYPE_STATION
) |
2670 BIT(NL80211_IFTYPE_ADHOC
);
2671 wl
->hw
->wiphy
->max_scan_ssids
= 1;
2673 * Maximum length of elements in scanning probe request templates
2674 * should be the maximum length possible for a template, without
2675 * the IEEE80211 header of the template
2677 wl
->hw
->wiphy
->max_scan_ie_len
= WL1271_CMD_TEMPL_MAX_SIZE
-
2678 sizeof(struct ieee80211_header
);
2679 wl
->hw
->wiphy
->bands
[IEEE80211_BAND_2GHZ
] = &wl1271_band_2ghz
;
2680 wl
->hw
->wiphy
->bands
[IEEE80211_BAND_5GHZ
] = &wl1271_band_5ghz
;
2683 wl
->hw
->max_rates
= 1;
2685 wl
->hw
->wiphy
->reg_notifier
= wl1271_reg_notify
;
2687 SET_IEEE80211_DEV(wl
->hw
, wl1271_wl_to_dev(wl
));
2691 EXPORT_SYMBOL_GPL(wl1271_init_ieee80211
);
2693 #define WL1271_DEFAULT_CHANNEL 0
2695 struct ieee80211_hw
*wl1271_alloc_hw(void)
2697 struct ieee80211_hw
*hw
;
2698 struct platform_device
*plat_dev
= NULL
;
2703 hw
= ieee80211_alloc_hw(sizeof(*wl
), &wl1271_ops
);
2705 wl1271_error("could not alloc ieee80211_hw");
2710 plat_dev
= kmemdup(&wl1271_device
, sizeof(wl1271_device
), GFP_KERNEL
);
2712 wl1271_error("could not allocate platform_device");
2714 goto err_plat_alloc
;
2718 memset(wl
, 0, sizeof(*wl
));
2720 INIT_LIST_HEAD(&wl
->list
);
2723 wl
->plat_dev
= plat_dev
;
2725 for (i
= 0; i
< NUM_TX_QUEUES
; i
++)
2726 skb_queue_head_init(&wl
->tx_queue
[i
]);
2728 INIT_DELAYED_WORK(&wl
->elp_work
, wl1271_elp_work
);
2729 INIT_DELAYED_WORK(&wl
->pspoll_work
, wl1271_pspoll_work
);
2730 INIT_WORK(&wl
->irq_work
, wl1271_irq_work
);
2731 INIT_WORK(&wl
->tx_work
, wl1271_tx_work
);
2732 INIT_WORK(&wl
->recovery_work
, wl1271_recovery_work
);
2733 INIT_DELAYED_WORK(&wl
->scan_complete_work
, wl1271_scan_complete_work
);
2734 wl
->channel
= WL1271_DEFAULT_CHANNEL
;
2735 wl
->beacon_int
= WL1271_DEFAULT_BEACON_INT
;
2736 wl
->default_key
= 0;
2738 wl
->rx_config
= WL1271_DEFAULT_RX_CONFIG
;
2739 wl
->rx_filter
= WL1271_DEFAULT_RX_FILTER
;
2740 wl
->psm_entry_retry
= 0;
2741 wl
->power_level
= WL1271_DEFAULT_POWER_LEVEL
;
2742 wl
->basic_rate_set
= CONF_TX_RATE_MASK_BASIC
;
2743 wl
->basic_rate
= CONF_TX_RATE_MASK_BASIC
;
2744 wl
->rate_set
= CONF_TX_RATE_MASK_BASIC
;
2745 wl
->sta_rate_set
= 0;
2746 wl
->band
= IEEE80211_BAND_2GHZ
;
2749 wl
->sg_enabled
= true;
2752 memset(wl
->tx_frames_map
, 0, sizeof(wl
->tx_frames_map
));
2753 for (i
= 0; i
< ACX_TX_DESCRIPTORS
; i
++)
2754 wl
->tx_frames
[i
] = NULL
;
2756 spin_lock_init(&wl
->wl_lock
);
2758 wl
->state
= WL1271_STATE_OFF
;
2759 mutex_init(&wl
->mutex
);
2761 /* Apply default driver configuration. */
2762 wl1271_conf_init(wl
);
2764 order
= get_order(WL1271_AGGR_BUFFER_SIZE
);
2765 wl
->aggr_buf
= (u8
*)__get_free_pages(GFP_KERNEL
, order
);
2766 if (!wl
->aggr_buf
) {
2771 /* Register platform device */
2772 ret
= platform_device_register(wl
->plat_dev
);
2774 wl1271_error("couldn't register platform device");
2777 dev_set_drvdata(&wl
->plat_dev
->dev
, wl
);
2779 /* Create sysfs file to control bt coex state */
2780 ret
= device_create_file(&wl
->plat_dev
->dev
, &dev_attr_bt_coex_state
);
2782 wl1271_error("failed to create sysfs file bt_coex_state");
2786 /* Create sysfs file to get HW PG version */
2787 ret
= device_create_file(&wl
->plat_dev
->dev
, &dev_attr_hw_pg_ver
);
2789 wl1271_error("failed to create sysfs file hw_pg_ver");
2790 goto err_bt_coex_state
;
2796 device_remove_file(&wl
->plat_dev
->dev
, &dev_attr_bt_coex_state
);
2799 platform_device_unregister(wl
->plat_dev
);
2802 free_pages((unsigned long)wl
->aggr_buf
, order
);
2805 wl1271_debugfs_exit(wl
);
2809 ieee80211_free_hw(hw
);
2813 return ERR_PTR(ret
);
2815 EXPORT_SYMBOL_GPL(wl1271_alloc_hw
);
2817 int wl1271_free_hw(struct wl1271
*wl
)
2819 platform_device_unregister(wl
->plat_dev
);
2820 free_pages((unsigned long)wl
->aggr_buf
,
2821 get_order(WL1271_AGGR_BUFFER_SIZE
));
2822 kfree(wl
->plat_dev
);
2824 wl1271_debugfs_exit(wl
);
2831 kfree(wl
->fw_status
);
2832 kfree(wl
->tx_res_if
);
2834 ieee80211_free_hw(wl
->hw
);
2838 EXPORT_SYMBOL_GPL(wl1271_free_hw
);
2840 u32 wl12xx_debug_level
;
2841 EXPORT_SYMBOL_GPL(wl12xx_debug_level
);
2842 module_param_named(debug_level
, wl12xx_debug_level
, uint
, DEBUG_NONE
);
2843 MODULE_PARM_DESC(debug_level
, "wl12xx debugging level");
2845 MODULE_LICENSE("GPL");
2846 MODULE_AUTHOR("Luciano Coelho <luciano.coelho@nokia.com>");
2847 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");