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>
33 #include <linux/wl12xx.h>
34 #include <linux/sched.h>
35 #include <linux/interrupt.h>
39 #include "wl12xx_80211.h"
53 #define WL1271_BOOT_RETRIES 3
55 static struct conf_drv_settings default_conf
= {
58 [CONF_SG_ACL_BT_MASTER_MIN_BR
] = 10,
59 [CONF_SG_ACL_BT_MASTER_MAX_BR
] = 180,
60 [CONF_SG_ACL_BT_SLAVE_MIN_BR
] = 10,
61 [CONF_SG_ACL_BT_SLAVE_MAX_BR
] = 180,
62 [CONF_SG_ACL_BT_MASTER_MIN_EDR
] = 10,
63 [CONF_SG_ACL_BT_MASTER_MAX_EDR
] = 80,
64 [CONF_SG_ACL_BT_SLAVE_MIN_EDR
] = 10,
65 [CONF_SG_ACL_BT_SLAVE_MAX_EDR
] = 80,
66 [CONF_SG_ACL_WLAN_PS_MASTER_BR
] = 8,
67 [CONF_SG_ACL_WLAN_PS_SLAVE_BR
] = 8,
68 [CONF_SG_ACL_WLAN_PS_MASTER_EDR
] = 20,
69 [CONF_SG_ACL_WLAN_PS_SLAVE_EDR
] = 20,
70 [CONF_SG_ACL_WLAN_ACTIVE_MASTER_MIN_BR
] = 20,
71 [CONF_SG_ACL_WLAN_ACTIVE_MASTER_MAX_BR
] = 35,
72 [CONF_SG_ACL_WLAN_ACTIVE_SLAVE_MIN_BR
] = 16,
73 [CONF_SG_ACL_WLAN_ACTIVE_SLAVE_MAX_BR
] = 35,
74 [CONF_SG_ACL_WLAN_ACTIVE_MASTER_MIN_EDR
] = 32,
75 [CONF_SG_ACL_WLAN_ACTIVE_MASTER_MAX_EDR
] = 50,
76 [CONF_SG_ACL_WLAN_ACTIVE_SLAVE_MIN_EDR
] = 28,
77 [CONF_SG_ACL_WLAN_ACTIVE_SLAVE_MAX_EDR
] = 50,
78 [CONF_SG_ACL_ACTIVE_SCAN_WLAN_BR
] = 10,
79 [CONF_SG_ACL_ACTIVE_SCAN_WLAN_EDR
] = 20,
80 [CONF_SG_ACL_PASSIVE_SCAN_BT_BR
] = 75,
81 [CONF_SG_ACL_PASSIVE_SCAN_WLAN_BR
] = 15,
82 [CONF_SG_ACL_PASSIVE_SCAN_BT_EDR
] = 27,
83 [CONF_SG_ACL_PASSIVE_SCAN_WLAN_EDR
] = 17,
84 /* active scan params */
85 [CONF_SG_AUTO_SCAN_PROBE_REQ
] = 170,
86 [CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_HV3
] = 50,
87 [CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_A2DP
] = 100,
88 /* passive scan params */
89 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_A2DP_BR
] = 800,
90 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_A2DP_EDR
] = 200,
91 [CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_HV3
] = 200,
92 /* passive scan in dual antenna params */
93 [CONF_SG_CONSECUTIVE_HV3_IN_PASSIVE_SCAN
] = 0,
94 [CONF_SG_BCN_HV3_COLLISION_THRESH_IN_PASSIVE_SCAN
] = 0,
95 [CONF_SG_TX_RX_PROTECTION_BWIDTH_IN_PASSIVE_SCAN
] = 0,
97 [CONF_SG_STA_FORCE_PS_IN_BT_SCO
] = 1,
98 [CONF_SG_ANTENNA_CONFIGURATION
] = 0,
99 [CONF_SG_BEACON_MISS_PERCENT
] = 60,
100 [CONF_SG_DHCP_TIME
] = 5000,
101 [CONF_SG_RXT
] = 1200,
102 [CONF_SG_TXT
] = 1000,
103 [CONF_SG_ADAPTIVE_RXT_TXT
] = 1,
104 [CONF_SG_GENERAL_USAGE_BIT_MAP
] = 3,
105 [CONF_SG_HV3_MAX_SERVED
] = 6,
106 [CONF_SG_PS_POLL_TIMEOUT
] = 10,
107 [CONF_SG_UPSD_TIMEOUT
] = 10,
108 [CONF_SG_CONSECUTIVE_CTS_THRESHOLD
] = 2,
109 [CONF_SG_STA_RX_WINDOW_AFTER_DTIM
] = 5,
110 [CONF_SG_STA_CONNECTION_PROTECTION_TIME
] = 30,
112 [CONF_AP_BEACON_MISS_TX
] = 3,
113 [CONF_AP_RX_WINDOW_AFTER_BEACON
] = 10,
114 [CONF_AP_BEACON_WINDOW_INTERVAL
] = 2,
115 [CONF_AP_CONNECTION_PROTECTION_TIME
] = 0,
116 [CONF_AP_BT_ACL_VAL_BT_SERVE_TIME
] = 25,
117 [CONF_AP_BT_ACL_VAL_WL_SERVE_TIME
] = 25,
119 .state
= CONF_SG_PROTECTIVE
,
122 .rx_msdu_life_time
= 512000,
123 .packet_detection_threshold
= 0,
124 .ps_poll_timeout
= 15,
126 .rts_threshold
= IEEE80211_MAX_RTS_THRESHOLD
,
127 .rx_cca_threshold
= 0,
128 .irq_blk_threshold
= 0xFFFF,
129 .irq_pkt_threshold
= 0,
131 .queue_type
= CONF_RX_QUEUE_TYPE_LOW_PRIORITY
,
134 .tx_energy_detection
= 0,
137 .short_retry_limit
= 10,
138 .long_retry_limit
= 10,
161 .aifsn
= CONF_TX_AIFS_PIFS
,
168 .aifsn
= CONF_TX_AIFS_PIFS
,
172 .max_tx_retries
= 100,
173 .ap_aging_period
= 300,
177 .queue_id
= CONF_TX_AC_BE
,
178 .channel_type
= CONF_CHANNEL_TYPE_EDCF
,
179 .tsid
= CONF_TX_AC_BE
,
180 .ps_scheme
= CONF_PS_SCHEME_LEGACY
,
181 .ack_policy
= CONF_ACK_POLICY_LEGACY
,
185 .queue_id
= CONF_TX_AC_BK
,
186 .channel_type
= CONF_CHANNEL_TYPE_EDCF
,
187 .tsid
= CONF_TX_AC_BK
,
188 .ps_scheme
= CONF_PS_SCHEME_LEGACY
,
189 .ack_policy
= CONF_ACK_POLICY_LEGACY
,
193 .queue_id
= CONF_TX_AC_VI
,
194 .channel_type
= CONF_CHANNEL_TYPE_EDCF
,
195 .tsid
= CONF_TX_AC_VI
,
196 .ps_scheme
= CONF_PS_SCHEME_LEGACY
,
197 .ack_policy
= CONF_ACK_POLICY_LEGACY
,
201 .queue_id
= CONF_TX_AC_VO
,
202 .channel_type
= CONF_CHANNEL_TYPE_EDCF
,
203 .tsid
= CONF_TX_AC_VO
,
204 .ps_scheme
= CONF_PS_SCHEME_LEGACY
,
205 .ack_policy
= CONF_ACK_POLICY_LEGACY
,
209 .frag_threshold
= IEEE80211_MAX_FRAG_THRESHOLD
,
210 .tx_compl_timeout
= 700,
211 .tx_compl_threshold
= 4,
212 .basic_rate
= CONF_HW_BIT_RATE_1MBPS
,
213 .basic_rate_5
= CONF_HW_BIT_RATE_6MBPS
,
214 .tmpl_short_retry_limit
= 10,
215 .tmpl_long_retry_limit
= 10,
218 .wake_up_event
= CONF_WAKE_UP_EVENT_DTIM
,
219 .listen_interval
= 1,
220 .bcn_filt_mode
= CONF_BCN_FILT_MODE_ENABLED
,
221 .bcn_filt_ie_count
= 2,
224 .ie
= WLAN_EID_CHANNEL_SWITCH
,
225 .rule
= CONF_BCN_RULE_PASS_ON_APPEARANCE
,
228 .ie
= WLAN_EID_HT_INFORMATION
,
229 .rule
= CONF_BCN_RULE_PASS_ON_CHANGE
,
232 .synch_fail_thold
= 10,
233 .bss_lose_timeout
= 100,
234 .beacon_rx_timeout
= 10000,
235 .broadcast_timeout
= 20000,
236 .rx_broadcast_in_ps
= 1,
237 .ps_poll_threshold
= 10,
238 .ps_poll_recovery_period
= 700,
239 .bet_enable
= CONF_BET_MODE_ENABLE
,
240 .bet_max_consecutive
= 50,
241 .psm_entry_retries
= 8,
242 .psm_exit_retries
= 16,
243 .psm_entry_nullfunc_retries
= 3,
244 .keep_alive_interval
= 55000,
245 .max_listen_interval
= 20,
252 .host_clk_settling_time
= 5000,
253 .host_fast_wakeup_support
= false
257 .avg_weight_rssi_beacon
= 20,
258 .avg_weight_rssi_data
= 10,
259 .avg_weight_snr_beacon
= 20,
260 .avg_weight_snr_data
= 10,
263 .min_dwell_time_active
= 7500,
264 .max_dwell_time_active
= 30000,
265 .min_dwell_time_passive
= 100000,
266 .max_dwell_time_passive
= 100000,
270 /* sched_scan requires dwell times in TU instead of TU/1000 */
271 .min_dwell_time_active
= 30,
272 .max_dwell_time_active
= 60,
273 .dwell_time_passive
= 100,
274 .dwell_time_dfs
= 150,
276 .rssi_threshold
= -90,
280 .tx_per_channel_power_compensation_2
= {
281 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
283 .tx_per_channel_power_compensation_5
= {
284 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
285 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
286 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
291 .tx_ba_win_size
= 64,
292 .inactivity_timeout
= 10000,
293 .tx_ba_tid_bitmap
= CONF_TX_BA_ENABLED_TID_BITMAP
,
299 .tx_min_block_num
= 40,
301 .min_req_tx_blocks
= 100,
302 .min_req_rx_blocks
= 22,
309 .tx_min_block_num
= 40,
311 .min_req_tx_blocks
= 45,
312 .min_req_rx_blocks
= 22,
318 .n_divider_fref_set_1
= 0xff, /* default */
319 .n_divider_fref_set_2
= 12,
320 .m_divider_fref_set_1
= 148,
321 .m_divider_fref_set_2
= 0xffff, /* default */
322 .coex_pll_stabilization_time
= 0xffffffff, /* default */
323 .ldo_stabilization_time
= 0xffff, /* default */
324 .fm_disturbed_band_margin
= 0xff, /* default */
325 .swallow_clk_diff
= 0xff, /* default */
334 .mode
= WL12XX_FWLOG_ON_DEMAND
,
337 .timestamp
= WL12XX_FWLOG_TIMESTAMP_DISABLED
,
338 .output
= WL12XX_FWLOG_OUTPUT_HOST
,
341 .hci_io_ds
= HCI_IO_DS_6MA
,
343 .rate_retry_score
= 32000,
348 .inverse_curiosity_factor
= 5,
350 .tx_fail_high_th
= 10,
351 .per_alpha_shift
= 4,
353 .per_beta1_shift
= 10,
354 .per_beta2_shift
= 8,
356 .rate_check_down
= 12,
357 .rate_retry_policy
= {
358 0x00, 0x00, 0x00, 0x00, 0x00,
359 0x00, 0x00, 0x00, 0x00, 0x00,
365 .hangover_period
= 20,
367 .early_termination_mode
= 1,
378 static char *fwlog_param
;
379 static bool bug_on_recovery
;
381 static void __wl1271_op_remove_interface(struct wl1271
*wl
,
382 struct ieee80211_vif
*vif
,
383 bool reset_tx_queues
);
384 static void wl1271_op_stop(struct ieee80211_hw
*hw
);
385 static void wl1271_free_ap_keys(struct wl1271
*wl
, struct wl12xx_vif
*wlvif
);
387 static DEFINE_MUTEX(wl_list_mutex
);
388 static LIST_HEAD(wl_list
);
390 static int wl1271_check_operstate(struct wl1271
*wl
, struct wl12xx_vif
*wlvif
,
391 unsigned char operstate
)
395 if (operstate
!= IF_OPER_UP
)
398 if (test_and_set_bit(WLVIF_FLAG_STA_STATE_SENT
, &wlvif
->flags
))
401 ret
= wl12xx_cmd_set_peer_state(wl
, wlvif
->sta
.hlid
);
405 wl12xx_croc(wl
, wlvif
->role_id
);
407 wl1271_info("Association completed.");
410 static int wl1271_dev_notify(struct notifier_block
*me
, unsigned long what
,
413 struct net_device
*dev
= arg
;
414 struct wireless_dev
*wdev
;
416 struct ieee80211_hw
*hw
;
418 struct wl1271
*wl_temp
;
419 struct wl12xx_vif
*wlvif
;
422 /* Check that this notification is for us. */
423 if (what
!= NETDEV_CHANGE
)
426 wdev
= dev
->ieee80211_ptr
;
434 hw
= wiphy_priv(wiphy
);
439 mutex_lock(&wl_list_mutex
);
440 list_for_each_entry(wl
, &wl_list
, list
) {
444 mutex_unlock(&wl_list_mutex
);
448 mutex_lock(&wl
->mutex
);
450 if (wl
->state
== WL1271_STATE_OFF
)
453 if (dev
->operstate
!= IF_OPER_UP
)
456 * The correct behavior should be just getting the appropriate wlvif
457 * from the given dev, but currently we don't have a mac80211
460 wl12xx_for_each_wlvif_sta(wl
, wlvif
) {
461 struct ieee80211_vif
*vif
= wl12xx_wlvif_to_vif(wlvif
);
463 if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED
, &wlvif
->flags
))
466 ret
= wl1271_ps_elp_wakeup(wl
);
470 wl1271_check_operstate(wl
, wlvif
,
471 ieee80211_get_operstate(vif
));
473 wl1271_ps_elp_sleep(wl
);
476 mutex_unlock(&wl
->mutex
);
481 static int wl1271_reg_notify(struct wiphy
*wiphy
,
482 struct regulatory_request
*request
)
484 struct ieee80211_supported_band
*band
;
485 struct ieee80211_channel
*ch
;
488 band
= wiphy
->bands
[IEEE80211_BAND_5GHZ
];
489 for (i
= 0; i
< band
->n_channels
; i
++) {
490 ch
= &band
->channels
[i
];
491 if (ch
->flags
& IEEE80211_CHAN_DISABLED
)
494 if (ch
->flags
& IEEE80211_CHAN_RADAR
)
495 ch
->flags
|= IEEE80211_CHAN_NO_IBSS
|
496 IEEE80211_CHAN_PASSIVE_SCAN
;
503 static int wl1271_set_rx_streaming(struct wl1271
*wl
, struct wl12xx_vif
*wlvif
,
508 /* we should hold wl->mutex */
509 ret
= wl1271_acx_ps_rx_streaming(wl
, wlvif
, enable
);
514 set_bit(WLVIF_FLAG_RX_STREAMING_STARTED
, &wlvif
->flags
);
516 clear_bit(WLVIF_FLAG_RX_STREAMING_STARTED
, &wlvif
->flags
);
522 * this function is being called when the rx_streaming interval
523 * has beed changed or rx_streaming should be disabled
525 int wl1271_recalc_rx_streaming(struct wl1271
*wl
, struct wl12xx_vif
*wlvif
)
528 int period
= wl
->conf
.rx_streaming
.interval
;
530 /* don't reconfigure if rx_streaming is disabled */
531 if (!test_bit(WLVIF_FLAG_RX_STREAMING_STARTED
, &wlvif
->flags
))
534 /* reconfigure/disable according to new streaming_period */
536 test_bit(WLVIF_FLAG_STA_ASSOCIATED
, &wlvif
->flags
) &&
537 (wl
->conf
.rx_streaming
.always
||
538 test_bit(WL1271_FLAG_SOFT_GEMINI
, &wl
->flags
)))
539 ret
= wl1271_set_rx_streaming(wl
, wlvif
, true);
541 ret
= wl1271_set_rx_streaming(wl
, wlvif
, false);
542 /* don't cancel_work_sync since we might deadlock */
543 del_timer_sync(&wlvif
->rx_streaming_timer
);
549 static void wl1271_rx_streaming_enable_work(struct work_struct
*work
)
552 struct wl12xx_vif
*wlvif
= container_of(work
, struct wl12xx_vif
,
553 rx_streaming_enable_work
);
554 struct wl1271
*wl
= wlvif
->wl
;
556 mutex_lock(&wl
->mutex
);
558 if (test_bit(WLVIF_FLAG_RX_STREAMING_STARTED
, &wlvif
->flags
) ||
559 !test_bit(WLVIF_FLAG_STA_ASSOCIATED
, &wlvif
->flags
) ||
560 (!wl
->conf
.rx_streaming
.always
&&
561 !test_bit(WL1271_FLAG_SOFT_GEMINI
, &wl
->flags
)))
564 if (!wl
->conf
.rx_streaming
.interval
)
567 ret
= wl1271_ps_elp_wakeup(wl
);
571 ret
= wl1271_set_rx_streaming(wl
, wlvif
, true);
575 /* stop it after some time of inactivity */
576 mod_timer(&wlvif
->rx_streaming_timer
,
577 jiffies
+ msecs_to_jiffies(wl
->conf
.rx_streaming
.duration
));
580 wl1271_ps_elp_sleep(wl
);
582 mutex_unlock(&wl
->mutex
);
585 static void wl1271_rx_streaming_disable_work(struct work_struct
*work
)
588 struct wl12xx_vif
*wlvif
= container_of(work
, struct wl12xx_vif
,
589 rx_streaming_disable_work
);
590 struct wl1271
*wl
= wlvif
->wl
;
592 mutex_lock(&wl
->mutex
);
594 if (!test_bit(WLVIF_FLAG_RX_STREAMING_STARTED
, &wlvif
->flags
))
597 ret
= wl1271_ps_elp_wakeup(wl
);
601 ret
= wl1271_set_rx_streaming(wl
, wlvif
, false);
606 wl1271_ps_elp_sleep(wl
);
608 mutex_unlock(&wl
->mutex
);
611 static void wl1271_rx_streaming_timer(unsigned long data
)
613 struct wl12xx_vif
*wlvif
= (struct wl12xx_vif
*)data
;
614 struct wl1271
*wl
= wlvif
->wl
;
615 ieee80211_queue_work(wl
->hw
, &wlvif
->rx_streaming_disable_work
);
618 static void wl1271_conf_init(struct wl1271
*wl
)
622 * This function applies the default configuration to the driver. This
623 * function is invoked upon driver load (spi probe.)
625 * The configuration is stored in a run-time structure in order to
626 * facilitate for run-time adjustment of any of the parameters. Making
627 * changes to the configuration structure will apply the new values on
628 * the next interface up (wl1271_op_start.)
631 /* apply driver default configuration */
632 memcpy(&wl
->conf
, &default_conf
, sizeof(default_conf
));
634 /* Adjust settings according to optional module parameters */
636 if (!strcmp(fwlog_param
, "continuous")) {
637 wl
->conf
.fwlog
.mode
= WL12XX_FWLOG_CONTINUOUS
;
638 } else if (!strcmp(fwlog_param
, "ondemand")) {
639 wl
->conf
.fwlog
.mode
= WL12XX_FWLOG_ON_DEMAND
;
640 } else if (!strcmp(fwlog_param
, "dbgpins")) {
641 wl
->conf
.fwlog
.mode
= WL12XX_FWLOG_CONTINUOUS
;
642 wl
->conf
.fwlog
.output
= WL12XX_FWLOG_OUTPUT_DBG_PINS
;
643 } else if (!strcmp(fwlog_param
, "disable")) {
644 wl
->conf
.fwlog
.mem_blocks
= 0;
645 wl
->conf
.fwlog
.output
= WL12XX_FWLOG_OUTPUT_NONE
;
647 wl1271_error("Unknown fwlog parameter %s", fwlog_param
);
652 static int wl1271_plt_init(struct wl1271
*wl
)
656 if (wl
->chip
.id
== CHIP_ID_1283_PG20
)
657 ret
= wl128x_cmd_general_parms(wl
);
659 ret
= wl1271_cmd_general_parms(wl
);
663 if (wl
->chip
.id
== CHIP_ID_1283_PG20
)
664 ret
= wl128x_cmd_radio_parms(wl
);
666 ret
= wl1271_cmd_radio_parms(wl
);
670 if (wl
->chip
.id
!= CHIP_ID_1283_PG20
) {
671 ret
= wl1271_cmd_ext_radio_parms(wl
);
678 /* Chip-specific initializations */
679 ret
= wl1271_chip_specific_init(wl
);
683 ret
= wl1271_acx_init_mem_config(wl
);
687 ret
= wl12xx_acx_mem_cfg(wl
);
689 goto out_free_memmap
;
691 /* Enable data path */
692 ret
= wl1271_cmd_data_path(wl
, 1);
694 goto out_free_memmap
;
696 /* Configure for CAM power saving (ie. always active) */
697 ret
= wl1271_acx_sleep_auth(wl
, WL1271_PSM_CAM
);
699 goto out_free_memmap
;
702 ret
= wl1271_acx_pm_config(wl
);
704 goto out_free_memmap
;
709 kfree(wl
->target_mem_map
);
710 wl
->target_mem_map
= NULL
;
715 static void wl12xx_irq_ps_regulate_link(struct wl1271
*wl
,
716 struct wl12xx_vif
*wlvif
,
719 bool fw_ps
, single_sta
;
721 fw_ps
= test_bit(hlid
, (unsigned long *)&wl
->ap_fw_ps_map
);
722 single_sta
= (wl
->active_sta_count
== 1);
725 * Wake up from high level PS if the STA is asleep with too little
726 * packets in FW or if the STA is awake.
728 if (!fw_ps
|| tx_pkts
< WL1271_PS_STA_MAX_PACKETS
)
729 wl12xx_ps_link_end(wl
, wlvif
, hlid
);
732 * Start high-level PS if the STA is asleep with enough blocks in FW.
733 * Make an exception if this is the only connected station. In this
734 * case FW-memory congestion is not a problem.
736 else if (!single_sta
&& fw_ps
&& tx_pkts
>= WL1271_PS_STA_MAX_PACKETS
)
737 wl12xx_ps_link_start(wl
, wlvif
, hlid
, true);
740 static void wl12xx_irq_update_links_status(struct wl1271
*wl
,
741 struct wl12xx_vif
*wlvif
,
742 struct wl12xx_fw_status
*status
)
744 struct wl1271_link
*lnk
;
748 /* TODO: also use link_fast_bitmap here */
750 cur_fw_ps_map
= le32_to_cpu(status
->link_ps_bitmap
);
751 if (wl
->ap_fw_ps_map
!= cur_fw_ps_map
) {
752 wl1271_debug(DEBUG_PSM
,
753 "link ps prev 0x%x cur 0x%x changed 0x%x",
754 wl
->ap_fw_ps_map
, cur_fw_ps_map
,
755 wl
->ap_fw_ps_map
^ cur_fw_ps_map
);
757 wl
->ap_fw_ps_map
= cur_fw_ps_map
;
760 for_each_set_bit(hlid
, wlvif
->ap
.sta_hlid_map
, WL12XX_MAX_LINKS
) {
761 lnk
= &wl
->links
[hlid
];
762 cnt
= status
->tx_lnk_free_pkts
[hlid
] - lnk
->prev_freed_pkts
;
764 lnk
->prev_freed_pkts
= status
->tx_lnk_free_pkts
[hlid
];
765 lnk
->allocated_pkts
-= cnt
;
767 wl12xx_irq_ps_regulate_link(wl
, wlvif
, hlid
,
768 lnk
->allocated_pkts
);
772 static void wl12xx_fw_status(struct wl1271
*wl
,
773 struct wl12xx_fw_status
*status
)
775 struct wl12xx_vif
*wlvif
;
777 u32 old_tx_blk_count
= wl
->tx_blocks_available
;
778 int avail
, freed_blocks
;
781 wl1271_raw_read(wl
, FW_STATUS_ADDR
, status
, sizeof(*status
), false);
783 wl1271_debug(DEBUG_IRQ
, "intr: 0x%x (fw_rx_counter = %d, "
784 "drv_rx_counter = %d, tx_results_counter = %d)",
786 status
->fw_rx_counter
,
787 status
->drv_rx_counter
,
788 status
->tx_results_counter
);
790 for (i
= 0; i
< NUM_TX_QUEUES
; i
++) {
791 /* prevent wrap-around in freed-packets counter */
792 wl
->tx_allocated_pkts
[i
] -=
793 (status
->tx_released_pkts
[i
] -
794 wl
->tx_pkts_freed
[i
]) & 0xff;
796 wl
->tx_pkts_freed
[i
] = status
->tx_released_pkts
[i
];
799 /* prevent wrap-around in total blocks counter */
800 if (likely(wl
->tx_blocks_freed
<=
801 le32_to_cpu(status
->total_released_blks
)))
802 freed_blocks
= le32_to_cpu(status
->total_released_blks
) -
805 freed_blocks
= 0x100000000LL
- wl
->tx_blocks_freed
+
806 le32_to_cpu(status
->total_released_blks
);
808 wl
->tx_blocks_freed
= le32_to_cpu(status
->total_released_blks
);
810 wl
->tx_allocated_blocks
-= freed_blocks
;
812 avail
= le32_to_cpu(status
->tx_total
) - wl
->tx_allocated_blocks
;
815 * The FW might change the total number of TX memblocks before
816 * we get a notification about blocks being released. Thus, the
817 * available blocks calculation might yield a temporary result
818 * which is lower than the actual available blocks. Keeping in
819 * mind that only blocks that were allocated can be moved from
820 * TX to RX, tx_blocks_available should never decrease here.
822 wl
->tx_blocks_available
= max((int)wl
->tx_blocks_available
,
825 /* if more blocks are available now, tx work can be scheduled */
826 if (wl
->tx_blocks_available
> old_tx_blk_count
)
827 clear_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
);
829 /* for AP update num of allocated TX blocks per link and ps status */
830 wl12xx_for_each_wlvif_ap(wl
, wlvif
) {
831 wl12xx_irq_update_links_status(wl
, wlvif
, status
);
834 /* update the host-chipset time offset */
836 wl
->time_offset
= (timespec_to_ns(&ts
) >> 10) -
837 (s64
)le32_to_cpu(status
->fw_localtime
);
840 static void wl1271_flush_deferred_work(struct wl1271
*wl
)
844 /* Pass all received frames to the network stack */
845 while ((skb
= skb_dequeue(&wl
->deferred_rx_queue
)))
846 ieee80211_rx_ni(wl
->hw
, skb
);
848 /* Return sent skbs to the network stack */
849 while ((skb
= skb_dequeue(&wl
->deferred_tx_queue
)))
850 ieee80211_tx_status_ni(wl
->hw
, skb
);
853 static void wl1271_netstack_work(struct work_struct
*work
)
856 container_of(work
, struct wl1271
, netstack_work
);
859 wl1271_flush_deferred_work(wl
);
860 } while (skb_queue_len(&wl
->deferred_rx_queue
));
863 #define WL1271_IRQ_MAX_LOOPS 256
865 static irqreturn_t
wl1271_irq(int irq
, void *cookie
)
869 int loopcount
= WL1271_IRQ_MAX_LOOPS
;
870 struct wl1271
*wl
= (struct wl1271
*)cookie
;
872 unsigned int defer_count
;
875 /* TX might be handled here, avoid redundant work */
876 set_bit(WL1271_FLAG_TX_PENDING
, &wl
->flags
);
877 cancel_work_sync(&wl
->tx_work
);
880 * In case edge triggered interrupt must be used, we cannot iterate
881 * more than once without introducing race conditions with the hardirq.
883 if (wl
->platform_quirks
& WL12XX_PLATFORM_QUIRK_EDGE_IRQ
)
886 mutex_lock(&wl
->mutex
);
888 wl1271_debug(DEBUG_IRQ
, "IRQ work");
890 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
893 ret
= wl1271_ps_elp_wakeup(wl
);
897 while (!done
&& loopcount
--) {
899 * In order to avoid a race with the hardirq, clear the flag
900 * before acknowledging the chip. Since the mutex is held,
901 * wl1271_ps_elp_wakeup cannot be called concurrently.
903 clear_bit(WL1271_FLAG_IRQ_RUNNING
, &wl
->flags
);
904 smp_mb__after_clear_bit();
906 wl12xx_fw_status(wl
, wl
->fw_status
);
907 intr
= le32_to_cpu(wl
->fw_status
->intr
);
908 intr
&= WL1271_INTR_MASK
;
914 if (unlikely(intr
& WL1271_ACX_INTR_WATCHDOG
)) {
915 wl1271_error("watchdog interrupt received! "
916 "starting recovery.");
917 wl12xx_queue_recovery_work(wl
);
919 /* restarting the chip. ignore any other interrupt. */
923 if (likely(intr
& WL1271_ACX_INTR_DATA
)) {
924 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_DATA");
926 wl12xx_rx(wl
, wl
->fw_status
);
928 /* Check if any tx blocks were freed */
929 spin_lock_irqsave(&wl
->wl_lock
, flags
);
930 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
) &&
931 wl1271_tx_total_queue_count(wl
) > 0) {
932 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
934 * In order to avoid starvation of the TX path,
935 * call the work function directly.
937 wl1271_tx_work_locked(wl
);
939 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
942 /* check for tx results */
943 if (wl
->fw_status
->tx_results_counter
!=
944 (wl
->tx_results_count
& 0xff))
945 wl1271_tx_complete(wl
);
947 /* Make sure the deferred queues don't get too long */
948 defer_count
= skb_queue_len(&wl
->deferred_tx_queue
) +
949 skb_queue_len(&wl
->deferred_rx_queue
);
950 if (defer_count
> WL1271_DEFERRED_QUEUE_LIMIT
)
951 wl1271_flush_deferred_work(wl
);
954 if (intr
& WL1271_ACX_INTR_EVENT_A
) {
955 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_EVENT_A");
956 wl1271_event_handle(wl
, 0);
959 if (intr
& WL1271_ACX_INTR_EVENT_B
) {
960 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_EVENT_B");
961 wl1271_event_handle(wl
, 1);
964 if (intr
& WL1271_ACX_INTR_INIT_COMPLETE
)
965 wl1271_debug(DEBUG_IRQ
,
966 "WL1271_ACX_INTR_INIT_COMPLETE");
968 if (intr
& WL1271_ACX_INTR_HW_AVAILABLE
)
969 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_HW_AVAILABLE");
972 wl1271_ps_elp_sleep(wl
);
975 spin_lock_irqsave(&wl
->wl_lock
, flags
);
976 /* In case TX was not handled here, queue TX work */
977 clear_bit(WL1271_FLAG_TX_PENDING
, &wl
->flags
);
978 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
) &&
979 wl1271_tx_total_queue_count(wl
) > 0)
980 ieee80211_queue_work(wl
->hw
, &wl
->tx_work
);
981 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
983 mutex_unlock(&wl
->mutex
);
988 static int wl1271_fetch_firmware(struct wl1271
*wl
)
990 const struct firmware
*fw
;
994 if (wl
->chip
.id
== CHIP_ID_1283_PG20
)
995 fw_name
= WL128X_FW_NAME
;
997 fw_name
= WL127X_FW_NAME
;
999 wl1271_debug(DEBUG_BOOT
, "booting firmware %s", fw_name
);
1001 ret
= request_firmware(&fw
, fw_name
, wl
->dev
);
1004 wl1271_error("could not get firmware %s: %d", fw_name
, ret
);
1009 wl1271_error("firmware size is not multiple of 32 bits: %zu",
1016 wl
->fw_len
= fw
->size
;
1017 wl
->fw
= vmalloc(wl
->fw_len
);
1020 wl1271_error("could not allocate memory for the firmware");
1025 memcpy(wl
->fw
, fw
->data
, wl
->fw_len
);
1029 release_firmware(fw
);
1034 static int wl1271_fetch_nvs(struct wl1271
*wl
)
1036 const struct firmware
*fw
;
1039 ret
= request_firmware(&fw
, WL12XX_NVS_NAME
, wl
->dev
);
1042 wl1271_error("could not get nvs file %s: %d", WL12XX_NVS_NAME
,
1047 wl
->nvs
= kmemdup(fw
->data
, fw
->size
, GFP_KERNEL
);
1050 wl1271_error("could not allocate memory for the nvs file");
1055 wl
->nvs_len
= fw
->size
;
1058 release_firmware(fw
);
1063 void wl12xx_queue_recovery_work(struct wl1271
*wl
)
1065 if (!test_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS
, &wl
->flags
))
1066 ieee80211_queue_work(wl
->hw
, &wl
->recovery_work
);
1069 size_t wl12xx_copy_fwlog(struct wl1271
*wl
, u8
*memblock
, size_t maxlen
)
1073 /* The FW log is a length-value list, find where the log end */
1074 while (len
< maxlen
) {
1075 if (memblock
[len
] == 0)
1077 if (len
+ memblock
[len
] + 1 > maxlen
)
1079 len
+= memblock
[len
] + 1;
1082 /* Make sure we have enough room */
1083 len
= min(len
, (size_t)(PAGE_SIZE
- wl
->fwlog_size
));
1085 /* Fill the FW log file, consumed by the sysfs fwlog entry */
1086 memcpy(wl
->fwlog
+ wl
->fwlog_size
, memblock
, len
);
1087 wl
->fwlog_size
+= len
;
1092 static void wl12xx_read_fwlog_panic(struct wl1271
*wl
)
1098 if ((wl
->quirks
& WL12XX_QUIRK_FWLOG_NOT_IMPLEMENTED
) ||
1099 (wl
->conf
.fwlog
.mode
!= WL12XX_FWLOG_ON_DEMAND
) ||
1100 (wl
->conf
.fwlog
.mem_blocks
== 0))
1103 wl1271_info("Reading FW panic log");
1105 block
= kmalloc(WL12XX_HW_BLOCK_SIZE
, GFP_KERNEL
);
1110 * Make sure the chip is awake and the logger isn't active.
1111 * This might fail if the firmware hanged.
1113 if (!wl1271_ps_elp_wakeup(wl
))
1114 wl12xx_cmd_stop_fwlog(wl
);
1116 /* Read the first memory block address */
1117 wl12xx_fw_status(wl
, wl
->fw_status
);
1118 first_addr
= le32_to_cpu(wl
->fw_status
->log_start_addr
);
1122 /* Traverse the memory blocks linked list */
1125 memset(block
, 0, WL12XX_HW_BLOCK_SIZE
);
1126 wl1271_read_hwaddr(wl
, addr
, block
, WL12XX_HW_BLOCK_SIZE
,
1130 * Memory blocks are linked to one another. The first 4 bytes
1131 * of each memory block hold the hardware address of the next
1132 * one. The last memory block points to the first one.
1134 addr
= le32_to_cpup((__le32
*)block
);
1135 if (!wl12xx_copy_fwlog(wl
, block
+ sizeof(addr
),
1136 WL12XX_HW_BLOCK_SIZE
- sizeof(addr
)))
1138 } while (addr
&& (addr
!= first_addr
));
1140 wake_up_interruptible(&wl
->fwlog_waitq
);
1146 static void wl1271_recovery_work(struct work_struct
*work
)
1149 container_of(work
, struct wl1271
, recovery_work
);
1150 struct wl12xx_vif
*wlvif
;
1151 struct ieee80211_vif
*vif
;
1153 mutex_lock(&wl
->mutex
);
1155 if (wl
->state
!= WL1271_STATE_ON
)
1158 /* Avoid a recursive recovery */
1159 set_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS
, &wl
->flags
);
1161 wl12xx_read_fwlog_panic(wl
);
1163 wl1271_info("Hardware recovery in progress. FW ver: %s pc: 0x%x",
1164 wl
->chip
.fw_ver_str
, wl1271_read32(wl
, SCR_PAD4
));
1166 BUG_ON(bug_on_recovery
);
1169 * Advance security sequence number to overcome potential progress
1170 * in the firmware during recovery. This doens't hurt if the network is
1173 wl12xx_for_each_wlvif(wl
, wlvif
) {
1174 if (test_bit(WLVIF_FLAG_STA_ASSOCIATED
, &wlvif
->flags
) ||
1175 test_bit(WLVIF_FLAG_AP_STARTED
, &wlvif
->flags
))
1176 wlvif
->tx_security_seq
+=
1177 WL1271_TX_SQN_POST_RECOVERY_PADDING
;
1180 /* Prevent spurious TX during FW restart */
1181 ieee80211_stop_queues(wl
->hw
);
1183 if (wl
->sched_scanning
) {
1184 ieee80211_sched_scan_stopped(wl
->hw
);
1185 wl
->sched_scanning
= false;
1188 /* reboot the chipset */
1189 while (!list_empty(&wl
->wlvif_list
)) {
1190 wlvif
= list_first_entry(&wl
->wlvif_list
,
1191 struct wl12xx_vif
, list
);
1192 vif
= wl12xx_wlvif_to_vif(wlvif
);
1193 __wl1271_op_remove_interface(wl
, vif
, false);
1195 mutex_unlock(&wl
->mutex
);
1196 wl1271_op_stop(wl
->hw
);
1198 clear_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS
, &wl
->flags
);
1200 ieee80211_restart_hw(wl
->hw
);
1203 * Its safe to enable TX now - the queues are stopped after a request
1204 * to restart the HW.
1206 ieee80211_wake_queues(wl
->hw
);
1209 mutex_unlock(&wl
->mutex
);
1212 static void wl1271_fw_wakeup(struct wl1271
*wl
)
1216 elp_reg
= ELPCTRL_WAKE_UP
;
1217 wl1271_raw_write32(wl
, HW_ACCESS_ELP_CTRL_REG_ADDR
, elp_reg
);
1220 static int wl1271_setup(struct wl1271
*wl
)
1222 wl
->fw_status
= kmalloc(sizeof(*wl
->fw_status
), GFP_KERNEL
);
1226 wl
->tx_res_if
= kmalloc(sizeof(*wl
->tx_res_if
), GFP_KERNEL
);
1227 if (!wl
->tx_res_if
) {
1228 kfree(wl
->fw_status
);
1235 static int wl12xx_set_power_on(struct wl1271
*wl
)
1239 msleep(WL1271_PRE_POWER_ON_SLEEP
);
1240 ret
= wl1271_power_on(wl
);
1243 msleep(WL1271_POWER_ON_SLEEP
);
1244 wl1271_io_reset(wl
);
1247 wl1271_set_partition(wl
, &wl12xx_part_table
[PART_DOWN
]);
1249 /* ELP module wake up */
1250 wl1271_fw_wakeup(wl
);
1256 static int wl1271_chip_wakeup(struct wl1271
*wl
)
1260 ret
= wl12xx_set_power_on(wl
);
1265 * For wl127x based devices we could use the default block
1266 * size (512 bytes), but due to a bug in the sdio driver, we
1267 * need to set it explicitly after the chip is powered on. To
1268 * simplify the code and since the performance impact is
1269 * negligible, we use the same block size for all different
1272 if (!wl1271_set_block_size(wl
))
1273 wl
->quirks
|= WL12XX_QUIRK_NO_BLOCKSIZE_ALIGNMENT
;
1275 switch (wl
->chip
.id
) {
1276 case CHIP_ID_1271_PG10
:
1277 wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
1280 ret
= wl1271_setup(wl
);
1283 wl
->quirks
|= WL12XX_QUIRK_NO_BLOCKSIZE_ALIGNMENT
;
1286 case CHIP_ID_1271_PG20
:
1287 wl1271_debug(DEBUG_BOOT
, "chip id 0x%x (1271 PG20)",
1290 ret
= wl1271_setup(wl
);
1293 wl
->quirks
|= WL12XX_QUIRK_NO_BLOCKSIZE_ALIGNMENT
;
1296 case CHIP_ID_1283_PG20
:
1297 wl1271_debug(DEBUG_BOOT
, "chip id 0x%x (1283 PG20)",
1300 ret
= wl1271_setup(wl
);
1304 case CHIP_ID_1283_PG10
:
1306 wl1271_warning("unsupported chip id: 0x%x", wl
->chip
.id
);
1311 if (wl
->fw
== NULL
) {
1312 ret
= wl1271_fetch_firmware(wl
);
1317 /* No NVS from netlink, try to get it from the filesystem */
1318 if (wl
->nvs
== NULL
) {
1319 ret
= wl1271_fetch_nvs(wl
);
1328 int wl1271_plt_start(struct wl1271
*wl
)
1330 int retries
= WL1271_BOOT_RETRIES
;
1331 struct wiphy
*wiphy
= wl
->hw
->wiphy
;
1334 mutex_lock(&wl
->mutex
);
1336 wl1271_notice("power up");
1338 if (wl
->state
!= WL1271_STATE_OFF
) {
1339 wl1271_error("cannot go into PLT state because not "
1340 "in off state: %d", wl
->state
);
1347 ret
= wl1271_chip_wakeup(wl
);
1351 ret
= wl1271_boot(wl
);
1355 ret
= wl1271_plt_init(wl
);
1359 wl
->state
= WL1271_STATE_PLT
;
1360 wl1271_notice("firmware booted in PLT mode (%s)",
1361 wl
->chip
.fw_ver_str
);
1363 /* update hw/fw version info in wiphy struct */
1364 wiphy
->hw_version
= wl
->chip
.id
;
1365 strncpy(wiphy
->fw_version
, wl
->chip
.fw_ver_str
,
1366 sizeof(wiphy
->fw_version
));
1371 mutex_unlock(&wl
->mutex
);
1372 /* Unlocking the mutex in the middle of handling is
1373 inherently unsafe. In this case we deem it safe to do,
1374 because we need to let any possibly pending IRQ out of
1375 the system (and while we are WL1271_STATE_OFF the IRQ
1376 work function will not do anything.) Also, any other
1377 possible concurrent operations will fail due to the
1378 current state, hence the wl1271 struct should be safe. */
1379 wl1271_disable_interrupts(wl
);
1380 wl1271_flush_deferred_work(wl
);
1381 cancel_work_sync(&wl
->netstack_work
);
1382 mutex_lock(&wl
->mutex
);
1384 wl1271_power_off(wl
);
1387 wl1271_error("firmware boot in PLT mode failed despite %d retries",
1388 WL1271_BOOT_RETRIES
);
1390 mutex_unlock(&wl
->mutex
);
1395 int wl1271_plt_stop(struct wl1271
*wl
)
1399 wl1271_notice("power down");
1402 * Interrupts must be disabled before setting the state to OFF.
1403 * Otherwise, the interrupt handler might be called and exit without
1404 * reading the interrupt status.
1406 wl1271_disable_interrupts(wl
);
1407 mutex_lock(&wl
->mutex
);
1408 if (wl
->state
!= WL1271_STATE_PLT
) {
1409 mutex_unlock(&wl
->mutex
);
1412 * This will not necessarily enable interrupts as interrupts
1413 * may have been disabled when op_stop was called. It will,
1414 * however, balance the above call to disable_interrupts().
1416 wl1271_enable_interrupts(wl
);
1418 wl1271_error("cannot power down because not in PLT "
1419 "state: %d", wl
->state
);
1424 mutex_unlock(&wl
->mutex
);
1426 wl1271_flush_deferred_work(wl
);
1427 cancel_work_sync(&wl
->netstack_work
);
1428 cancel_work_sync(&wl
->recovery_work
);
1429 cancel_delayed_work_sync(&wl
->elp_work
);
1431 mutex_lock(&wl
->mutex
);
1432 wl1271_power_off(wl
);
1434 wl
->state
= WL1271_STATE_OFF
;
1436 mutex_unlock(&wl
->mutex
);
1442 static void wl1271_op_tx(struct ieee80211_hw
*hw
, struct sk_buff
*skb
)
1444 struct wl1271
*wl
= hw
->priv
;
1445 struct ieee80211_tx_info
*info
= IEEE80211_SKB_CB(skb
);
1446 struct ieee80211_vif
*vif
= info
->control
.vif
;
1447 struct wl12xx_vif
*wlvif
= NULL
;
1448 unsigned long flags
;
1453 wlvif
= wl12xx_vif_to_data(vif
);
1455 mapping
= skb_get_queue_mapping(skb
);
1456 q
= wl1271_tx_get_queue(mapping
);
1458 hlid
= wl12xx_tx_get_hlid(wl
, wlvif
, skb
);
1460 spin_lock_irqsave(&wl
->wl_lock
, flags
);
1462 /* queue the packet */
1463 if (hlid
== WL12XX_INVALID_LINK_ID
||
1464 (wlvif
&& !test_bit(hlid
, wlvif
->links_map
))) {
1465 wl1271_debug(DEBUG_TX
, "DROP skb hlid %d q %d", hlid
, q
);
1466 ieee80211_free_txskb(hw
, skb
);
1470 wl1271_debug(DEBUG_TX
, "queue skb hlid %d q %d", hlid
, q
);
1471 skb_queue_tail(&wl
->links
[hlid
].tx_queue
[q
], skb
);
1473 wl
->tx_queue_count
[q
]++;
1476 * The workqueue is slow to process the tx_queue and we need stop
1477 * the queue here, otherwise the queue will get too long.
1479 if (wl
->tx_queue_count
[q
] >= WL1271_TX_QUEUE_HIGH_WATERMARK
) {
1480 wl1271_debug(DEBUG_TX
, "op_tx: stopping queues for q %d", q
);
1481 ieee80211_stop_queue(wl
->hw
, mapping
);
1482 set_bit(q
, &wl
->stopped_queues_map
);
1486 * The chip specific setup must run before the first TX packet -
1487 * before that, the tx_work will not be initialized!
1490 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
) &&
1491 !test_bit(WL1271_FLAG_TX_PENDING
, &wl
->flags
))
1492 ieee80211_queue_work(wl
->hw
, &wl
->tx_work
);
1495 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
1498 int wl1271_tx_dummy_packet(struct wl1271
*wl
)
1500 unsigned long flags
;
1503 /* no need to queue a new dummy packet if one is already pending */
1504 if (test_bit(WL1271_FLAG_DUMMY_PACKET_PENDING
, &wl
->flags
))
1507 q
= wl1271_tx_get_queue(skb_get_queue_mapping(wl
->dummy_packet
));
1509 spin_lock_irqsave(&wl
->wl_lock
, flags
);
1510 set_bit(WL1271_FLAG_DUMMY_PACKET_PENDING
, &wl
->flags
);
1511 wl
->tx_queue_count
[q
]++;
1512 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
1514 /* The FW is low on RX memory blocks, so send the dummy packet asap */
1515 if (!test_bit(WL1271_FLAG_FW_TX_BUSY
, &wl
->flags
))
1516 wl1271_tx_work_locked(wl
);
1519 * If the FW TX is busy, TX work will be scheduled by the threaded
1520 * interrupt handler function
1526 * The size of the dummy packet should be at least 1400 bytes. However, in
1527 * order to minimize the number of bus transactions, aligning it to 512 bytes
1528 * boundaries could be beneficial, performance wise
1530 #define TOTAL_TX_DUMMY_PACKET_SIZE (ALIGN(1400, 512))
1532 static struct sk_buff
*wl12xx_alloc_dummy_packet(struct wl1271
*wl
)
1534 struct sk_buff
*skb
;
1535 struct ieee80211_hdr_3addr
*hdr
;
1536 unsigned int dummy_packet_size
;
1538 dummy_packet_size
= TOTAL_TX_DUMMY_PACKET_SIZE
-
1539 sizeof(struct wl1271_tx_hw_descr
) - sizeof(*hdr
);
1541 skb
= dev_alloc_skb(TOTAL_TX_DUMMY_PACKET_SIZE
);
1543 wl1271_warning("Failed to allocate a dummy packet skb");
1547 skb_reserve(skb
, sizeof(struct wl1271_tx_hw_descr
));
1549 hdr
= (struct ieee80211_hdr_3addr
*) skb_put(skb
, sizeof(*hdr
));
1550 memset(hdr
, 0, sizeof(*hdr
));
1551 hdr
->frame_control
= cpu_to_le16(IEEE80211_FTYPE_DATA
|
1552 IEEE80211_STYPE_NULLFUNC
|
1553 IEEE80211_FCTL_TODS
);
1555 memset(skb_put(skb
, dummy_packet_size
), 0, dummy_packet_size
);
1557 /* Dummy packets require the TID to be management */
1558 skb
->priority
= WL1271_TID_MGMT
;
1560 /* Initialize all fields that might be used */
1561 skb_set_queue_mapping(skb
, 0);
1562 memset(IEEE80211_SKB_CB(skb
), 0, sizeof(struct ieee80211_tx_info
));
1568 static struct notifier_block wl1271_dev_notifier
= {
1569 .notifier_call
= wl1271_dev_notify
,
1573 static int wl1271_configure_suspend_sta(struct wl1271
*wl
,
1574 struct wl12xx_vif
*wlvif
)
1578 mutex_lock(&wl
->mutex
);
1580 if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED
, &wlvif
->flags
))
1583 ret
= wl1271_ps_elp_wakeup(wl
);
1587 /* enter psm if needed*/
1588 if (!test_bit(WLVIF_FLAG_PSM
, &wlvif
->flags
)) {
1589 DECLARE_COMPLETION_ONSTACK(compl);
1591 wlvif
->ps_compl
= &compl;
1592 ret
= wl1271_ps_set_mode(wl
, wlvif
, STATION_POWER_SAVE_MODE
,
1593 wlvif
->basic_rate
, true);
1597 /* we must unlock here so we will be able to get events */
1598 wl1271_ps_elp_sleep(wl
);
1599 mutex_unlock(&wl
->mutex
);
1601 ret
= wait_for_completion_timeout(
1602 &compl, msecs_to_jiffies(WL1271_PS_COMPLETE_TIMEOUT
));
1604 mutex_lock(&wl
->mutex
);
1606 wl1271_warning("couldn't enter ps mode!");
1611 ret
= wl1271_ps_elp_wakeup(wl
);
1616 wl1271_ps_elp_sleep(wl
);
1618 wlvif
->ps_compl
= NULL
;
1620 mutex_unlock(&wl
->mutex
);
1625 static int wl1271_configure_suspend_ap(struct wl1271
*wl
,
1626 struct wl12xx_vif
*wlvif
)
1630 mutex_lock(&wl
->mutex
);
1632 if (!test_bit(WLVIF_FLAG_AP_STARTED
, &wlvif
->flags
))
1635 ret
= wl1271_ps_elp_wakeup(wl
);
1639 ret
= wl1271_acx_beacon_filter_opt(wl
, wlvif
, true);
1641 wl1271_ps_elp_sleep(wl
);
1643 mutex_unlock(&wl
->mutex
);
1648 static int wl1271_configure_suspend(struct wl1271
*wl
,
1649 struct wl12xx_vif
*wlvif
)
1651 if (wlvif
->bss_type
== BSS_TYPE_STA_BSS
)
1652 return wl1271_configure_suspend_sta(wl
, wlvif
);
1653 if (wlvif
->bss_type
== BSS_TYPE_AP_BSS
)
1654 return wl1271_configure_suspend_ap(wl
, wlvif
);
1658 static void wl1271_configure_resume(struct wl1271
*wl
,
1659 struct wl12xx_vif
*wlvif
)
1662 bool is_sta
= wlvif
->bss_type
== BSS_TYPE_STA_BSS
;
1663 bool is_ap
= wlvif
->bss_type
== BSS_TYPE_AP_BSS
;
1665 if (!is_sta
&& !is_ap
)
1668 mutex_lock(&wl
->mutex
);
1669 ret
= wl1271_ps_elp_wakeup(wl
);
1674 /* exit psm if it wasn't configured */
1675 if (!test_bit(WLVIF_FLAG_PSM_REQUESTED
, &wlvif
->flags
))
1676 wl1271_ps_set_mode(wl
, wlvif
, STATION_ACTIVE_MODE
,
1677 wlvif
->basic_rate
, true);
1679 wl1271_acx_beacon_filter_opt(wl
, wlvif
, false);
1682 wl1271_ps_elp_sleep(wl
);
1684 mutex_unlock(&wl
->mutex
);
1687 static int wl1271_op_suspend(struct ieee80211_hw
*hw
,
1688 struct cfg80211_wowlan
*wow
)
1690 struct wl1271
*wl
= hw
->priv
;
1691 struct wl12xx_vif
*wlvif
;
1694 wl1271_debug(DEBUG_MAC80211
, "mac80211 suspend wow=%d", !!wow
);
1695 WARN_ON(!wow
|| !wow
->any
);
1697 wl
->wow_enabled
= true;
1698 wl12xx_for_each_wlvif(wl
, wlvif
) {
1699 ret
= wl1271_configure_suspend(wl
, wlvif
);
1701 wl1271_warning("couldn't prepare device to suspend");
1705 /* flush any remaining work */
1706 wl1271_debug(DEBUG_MAC80211
, "flushing remaining works");
1709 * disable and re-enable interrupts in order to flush
1712 wl1271_disable_interrupts(wl
);
1715 * set suspended flag to avoid triggering a new threaded_irq
1716 * work. no need for spinlock as interrupts are disabled.
1718 set_bit(WL1271_FLAG_SUSPENDED
, &wl
->flags
);
1720 wl1271_enable_interrupts(wl
);
1721 flush_work(&wl
->tx_work
);
1722 wl12xx_for_each_wlvif(wl
, wlvif
) {
1723 flush_delayed_work(&wlvif
->pspoll_work
);
1725 flush_delayed_work(&wl
->elp_work
);
1730 static int wl1271_op_resume(struct ieee80211_hw
*hw
)
1732 struct wl1271
*wl
= hw
->priv
;
1733 struct wl12xx_vif
*wlvif
;
1734 unsigned long flags
;
1735 bool run_irq_work
= false;
1737 wl1271_debug(DEBUG_MAC80211
, "mac80211 resume wow=%d",
1739 WARN_ON(!wl
->wow_enabled
);
1742 * re-enable irq_work enqueuing, and call irq_work directly if
1743 * there is a pending work.
1745 spin_lock_irqsave(&wl
->wl_lock
, flags
);
1746 clear_bit(WL1271_FLAG_SUSPENDED
, &wl
->flags
);
1747 if (test_and_clear_bit(WL1271_FLAG_PENDING_WORK
, &wl
->flags
))
1748 run_irq_work
= true;
1749 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
1752 wl1271_debug(DEBUG_MAC80211
,
1753 "run postponed irq_work directly");
1755 wl1271_enable_interrupts(wl
);
1757 wl12xx_for_each_wlvif(wl
, wlvif
) {
1758 wl1271_configure_resume(wl
, wlvif
);
1760 wl
->wow_enabled
= false;
1766 static int wl1271_op_start(struct ieee80211_hw
*hw
)
1768 wl1271_debug(DEBUG_MAC80211
, "mac80211 start");
1771 * We have to delay the booting of the hardware because
1772 * we need to know the local MAC address before downloading and
1773 * initializing the firmware. The MAC address cannot be changed
1774 * after boot, and without the proper MAC address, the firmware
1775 * will not function properly.
1777 * The MAC address is first known when the corresponding interface
1778 * is added. That is where we will initialize the hardware.
1784 static void wl1271_op_stop(struct ieee80211_hw
*hw
)
1786 struct wl1271
*wl
= hw
->priv
;
1789 wl1271_debug(DEBUG_MAC80211
, "mac80211 stop");
1792 * Interrupts must be disabled before setting the state to OFF.
1793 * Otherwise, the interrupt handler might be called and exit without
1794 * reading the interrupt status.
1796 wl1271_disable_interrupts(wl
);
1797 mutex_lock(&wl
->mutex
);
1798 if (wl
->state
== WL1271_STATE_OFF
) {
1799 mutex_unlock(&wl
->mutex
);
1802 * This will not necessarily enable interrupts as interrupts
1803 * may have been disabled when op_stop was called. It will,
1804 * however, balance the above call to disable_interrupts().
1806 wl1271_enable_interrupts(wl
);
1811 * this must be before the cancel_work calls below, so that the work
1812 * functions don't perform further work.
1814 wl
->state
= WL1271_STATE_OFF
;
1815 mutex_unlock(&wl
->mutex
);
1817 mutex_lock(&wl_list_mutex
);
1818 list_del(&wl
->list
);
1819 mutex_unlock(&wl_list_mutex
);
1821 wl1271_flush_deferred_work(wl
);
1822 cancel_delayed_work_sync(&wl
->scan_complete_work
);
1823 cancel_work_sync(&wl
->netstack_work
);
1824 cancel_work_sync(&wl
->tx_work
);
1825 cancel_delayed_work_sync(&wl
->elp_work
);
1827 /* let's notify MAC80211 about the remaining pending TX frames */
1828 wl12xx_tx_reset(wl
, true);
1829 mutex_lock(&wl
->mutex
);
1831 wl1271_power_off(wl
);
1833 wl
->band
= IEEE80211_BAND_2GHZ
;
1836 wl
->power_level
= WL1271_DEFAULT_POWER_LEVEL
;
1837 wl
->tx_blocks_available
= 0;
1838 wl
->tx_allocated_blocks
= 0;
1839 wl
->tx_results_count
= 0;
1840 wl
->tx_packets_count
= 0;
1841 wl
->time_offset
= 0;
1842 wl
->tx_spare_blocks
= TX_HW_BLOCK_SPARE_DEFAULT
;
1843 wl
->ap_fw_ps_map
= 0;
1845 wl
->sched_scanning
= false;
1846 memset(wl
->roles_map
, 0, sizeof(wl
->roles_map
));
1847 memset(wl
->links_map
, 0, sizeof(wl
->links_map
));
1848 memset(wl
->roc_map
, 0, sizeof(wl
->roc_map
));
1849 wl
->active_sta_count
= 0;
1851 /* The system link is always allocated */
1852 __set_bit(WL12XX_SYSTEM_HLID
, wl
->links_map
);
1855 * this is performed after the cancel_work calls and the associated
1856 * mutex_lock, so that wl1271_op_add_interface does not accidentally
1857 * get executed before all these vars have been reset.
1861 wl
->tx_blocks_freed
= 0;
1863 for (i
= 0; i
< NUM_TX_QUEUES
; i
++) {
1864 wl
->tx_pkts_freed
[i
] = 0;
1865 wl
->tx_allocated_pkts
[i
] = 0;
1868 wl1271_debugfs_reset(wl
);
1870 kfree(wl
->fw_status
);
1871 wl
->fw_status
= NULL
;
1872 kfree(wl
->tx_res_if
);
1873 wl
->tx_res_if
= NULL
;
1874 kfree(wl
->target_mem_map
);
1875 wl
->target_mem_map
= NULL
;
1877 mutex_unlock(&wl
->mutex
);
1880 static int wl12xx_allocate_rate_policy(struct wl1271
*wl
, u8
*idx
)
1882 u8 policy
= find_first_zero_bit(wl
->rate_policies_map
,
1883 WL12XX_MAX_RATE_POLICIES
);
1884 if (policy
>= WL12XX_MAX_RATE_POLICIES
)
1887 __set_bit(policy
, wl
->rate_policies_map
);
1892 static void wl12xx_free_rate_policy(struct wl1271
*wl
, u8
*idx
)
1894 if (WARN_ON(*idx
>= WL12XX_MAX_RATE_POLICIES
))
1897 __clear_bit(*idx
, wl
->rate_policies_map
);
1898 *idx
= WL12XX_MAX_RATE_POLICIES
;
1901 static u8
wl12xx_get_role_type(struct wl1271
*wl
, struct wl12xx_vif
*wlvif
)
1903 switch (wlvif
->bss_type
) {
1904 case BSS_TYPE_AP_BSS
:
1906 return WL1271_ROLE_P2P_GO
;
1908 return WL1271_ROLE_AP
;
1910 case BSS_TYPE_STA_BSS
:
1912 return WL1271_ROLE_P2P_CL
;
1914 return WL1271_ROLE_STA
;
1917 return WL1271_ROLE_IBSS
;
1920 wl1271_error("invalid bss_type: %d", wlvif
->bss_type
);
1922 return WL12XX_INVALID_ROLE_TYPE
;
1925 static int wl12xx_init_vif_data(struct wl1271
*wl
, struct ieee80211_vif
*vif
)
1927 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
1930 /* clear everything but the persistent data */
1931 memset(wlvif
, 0, offsetof(struct wl12xx_vif
, persistent
));
1933 switch (ieee80211_vif_type_p2p(vif
)) {
1934 case NL80211_IFTYPE_P2P_CLIENT
:
1937 case NL80211_IFTYPE_STATION
:
1938 wlvif
->bss_type
= BSS_TYPE_STA_BSS
;
1940 case NL80211_IFTYPE_ADHOC
:
1941 wlvif
->bss_type
= BSS_TYPE_IBSS
;
1943 case NL80211_IFTYPE_P2P_GO
:
1946 case NL80211_IFTYPE_AP
:
1947 wlvif
->bss_type
= BSS_TYPE_AP_BSS
;
1950 wlvif
->bss_type
= MAX_BSS_TYPE
;
1954 wlvif
->role_id
= WL12XX_INVALID_ROLE_ID
;
1955 wlvif
->dev_role_id
= WL12XX_INVALID_ROLE_ID
;
1956 wlvif
->dev_hlid
= WL12XX_INVALID_LINK_ID
;
1958 if (wlvif
->bss_type
== BSS_TYPE_STA_BSS
||
1959 wlvif
->bss_type
== BSS_TYPE_IBSS
) {
1960 /* init sta/ibss data */
1961 wlvif
->sta
.hlid
= WL12XX_INVALID_LINK_ID
;
1962 wl12xx_allocate_rate_policy(wl
, &wlvif
->sta
.basic_rate_idx
);
1963 wl12xx_allocate_rate_policy(wl
, &wlvif
->sta
.ap_rate_idx
);
1964 wl12xx_allocate_rate_policy(wl
, &wlvif
->sta
.p2p_rate_idx
);
1967 wlvif
->ap
.bcast_hlid
= WL12XX_INVALID_LINK_ID
;
1968 wlvif
->ap
.global_hlid
= WL12XX_INVALID_LINK_ID
;
1969 wl12xx_allocate_rate_policy(wl
, &wlvif
->ap
.mgmt_rate_idx
);
1970 wl12xx_allocate_rate_policy(wl
, &wlvif
->ap
.bcast_rate_idx
);
1971 for (i
= 0; i
< CONF_TX_MAX_AC_COUNT
; i
++)
1972 wl12xx_allocate_rate_policy(wl
,
1973 &wlvif
->ap
.ucast_rate_idx
[i
]);
1976 wlvif
->bitrate_masks
[IEEE80211_BAND_2GHZ
] = wl
->conf
.tx
.basic_rate
;
1977 wlvif
->bitrate_masks
[IEEE80211_BAND_5GHZ
] = wl
->conf
.tx
.basic_rate_5
;
1978 wlvif
->basic_rate_set
= CONF_TX_RATE_MASK_BASIC
;
1979 wlvif
->basic_rate
= CONF_TX_RATE_MASK_BASIC
;
1980 wlvif
->rate_set
= CONF_TX_RATE_MASK_BASIC
;
1981 wlvif
->beacon_int
= WL1271_DEFAULT_BEACON_INT
;
1984 * mac80211 configures some values globally, while we treat them
1985 * per-interface. thus, on init, we have to copy them from wl
1987 wlvif
->band
= wl
->band
;
1988 wlvif
->channel
= wl
->channel
;
1989 wlvif
->power_level
= wl
->power_level
;
1991 INIT_WORK(&wlvif
->rx_streaming_enable_work
,
1992 wl1271_rx_streaming_enable_work
);
1993 INIT_WORK(&wlvif
->rx_streaming_disable_work
,
1994 wl1271_rx_streaming_disable_work
);
1995 INIT_DELAYED_WORK(&wlvif
->pspoll_work
, wl1271_pspoll_work
);
1996 INIT_LIST_HEAD(&wlvif
->list
);
1998 setup_timer(&wlvif
->rx_streaming_timer
, wl1271_rx_streaming_timer
,
1999 (unsigned long) wlvif
);
2003 static bool wl12xx_init_fw(struct wl1271
*wl
)
2005 int retries
= WL1271_BOOT_RETRIES
;
2006 bool booted
= false;
2007 struct wiphy
*wiphy
= wl
->hw
->wiphy
;
2012 ret
= wl1271_chip_wakeup(wl
);
2016 ret
= wl1271_boot(wl
);
2020 ret
= wl1271_hw_init(wl
);
2028 mutex_unlock(&wl
->mutex
);
2029 /* Unlocking the mutex in the middle of handling is
2030 inherently unsafe. In this case we deem it safe to do,
2031 because we need to let any possibly pending IRQ out of
2032 the system (and while we are WL1271_STATE_OFF the IRQ
2033 work function will not do anything.) Also, any other
2034 possible concurrent operations will fail due to the
2035 current state, hence the wl1271 struct should be safe. */
2036 wl1271_disable_interrupts(wl
);
2037 wl1271_flush_deferred_work(wl
);
2038 cancel_work_sync(&wl
->netstack_work
);
2039 mutex_lock(&wl
->mutex
);
2041 wl1271_power_off(wl
);
2045 wl1271_error("firmware boot failed despite %d retries",
2046 WL1271_BOOT_RETRIES
);
2050 wl1271_info("firmware booted (%s)", wl
->chip
.fw_ver_str
);
2052 /* update hw/fw version info in wiphy struct */
2053 wiphy
->hw_version
= wl
->chip
.id
;
2054 strncpy(wiphy
->fw_version
, wl
->chip
.fw_ver_str
,
2055 sizeof(wiphy
->fw_version
));
2058 * Now we know if 11a is supported (info from the NVS), so disable
2059 * 11a channels if not supported
2061 if (!wl
->enable_11a
)
2062 wiphy
->bands
[IEEE80211_BAND_5GHZ
]->n_channels
= 0;
2064 wl1271_debug(DEBUG_MAC80211
, "11a is %ssupported",
2065 wl
->enable_11a
? "" : "not ");
2067 wl
->state
= WL1271_STATE_ON
;
2072 static bool wl12xx_dev_role_started(struct wl12xx_vif
*wlvif
)
2074 return wlvif
->dev_hlid
!= WL12XX_INVALID_LINK_ID
;
2077 static int wl1271_op_add_interface(struct ieee80211_hw
*hw
,
2078 struct ieee80211_vif
*vif
)
2080 struct wl1271
*wl
= hw
->priv
;
2081 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
2084 bool booted
= false;
2086 vif
->driver_flags
|= IEEE80211_VIF_BEACON_FILTER
|
2087 IEEE80211_VIF_SUPPORTS_CQM_RSSI
;
2089 wl1271_debug(DEBUG_MAC80211
, "mac80211 add interface type %d mac %pM",
2090 ieee80211_vif_type_p2p(vif
), vif
->addr
);
2092 mutex_lock(&wl
->mutex
);
2093 ret
= wl1271_ps_elp_wakeup(wl
);
2098 wl1271_debug(DEBUG_MAC80211
,
2099 "multiple vifs are not supported yet");
2105 * in some very corner case HW recovery scenarios its possible to
2106 * get here before __wl1271_op_remove_interface is complete, so
2107 * opt out if that is the case.
2109 if (test_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS
, &wl
->flags
) ||
2110 test_bit(WLVIF_FLAG_INITIALIZED
, &wlvif
->flags
)) {
2115 ret
= wl12xx_init_vif_data(wl
, vif
);
2120 role_type
= wl12xx_get_role_type(wl
, wlvif
);
2121 if (role_type
== WL12XX_INVALID_ROLE_TYPE
) {
2127 * TODO: after the nvs issue will be solved, move this block
2128 * to start(), and make sure here the driver is ON.
2130 if (wl
->state
== WL1271_STATE_OFF
) {
2132 * we still need this in order to configure the fw
2133 * while uploading the nvs
2135 memcpy(wl
->addresses
[0].addr
, vif
->addr
, ETH_ALEN
);
2137 booted
= wl12xx_init_fw(wl
);
2144 if (wlvif
->bss_type
== BSS_TYPE_STA_BSS
||
2145 wlvif
->bss_type
== BSS_TYPE_IBSS
) {
2147 * The device role is a special role used for
2148 * rx and tx frames prior to association (as
2149 * the STA role can get packets only from
2150 * its associated bssid)
2152 ret
= wl12xx_cmd_role_enable(wl
, vif
->addr
,
2154 &wlvif
->dev_role_id
);
2159 ret
= wl12xx_cmd_role_enable(wl
, vif
->addr
,
2160 role_type
, &wlvif
->role_id
);
2164 ret
= wl1271_init_vif_specific(wl
, vif
);
2169 list_add(&wlvif
->list
, &wl
->wlvif_list
);
2170 set_bit(WLVIF_FLAG_INITIALIZED
, &wlvif
->flags
);
2172 if (wlvif
->bss_type
== BSS_TYPE_AP_BSS
)
2177 wl1271_ps_elp_sleep(wl
);
2179 mutex_unlock(&wl
->mutex
);
2181 mutex_lock(&wl_list_mutex
);
2183 list_add(&wl
->list
, &wl_list
);
2184 mutex_unlock(&wl_list_mutex
);
2189 static void __wl1271_op_remove_interface(struct wl1271
*wl
,
2190 struct ieee80211_vif
*vif
,
2191 bool reset_tx_queues
)
2193 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
2196 wl1271_debug(DEBUG_MAC80211
, "mac80211 remove interface");
2198 if (!test_and_clear_bit(WLVIF_FLAG_INITIALIZED
, &wlvif
->flags
))
2203 /* because of hardware recovery, we may get here twice */
2204 if (wl
->state
!= WL1271_STATE_ON
)
2207 wl1271_info("down");
2209 /* enable dyn ps just in case (if left on due to fw crash etc) */
2210 if (wlvif
->bss_type
== BSS_TYPE_STA_BSS
)
2211 ieee80211_enable_dyn_ps(vif
);
2213 if (wl
->scan
.state
!= WL1271_SCAN_STATE_IDLE
&&
2214 wl
->scan_vif
== vif
) {
2215 wl
->scan
.state
= WL1271_SCAN_STATE_IDLE
;
2216 memset(wl
->scan
.scanned_ch
, 0, sizeof(wl
->scan
.scanned_ch
));
2217 wl
->scan_vif
= NULL
;
2218 wl
->scan
.req
= NULL
;
2219 ieee80211_scan_completed(wl
->hw
, true);
2222 if (!test_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS
, &wl
->flags
)) {
2223 /* disable active roles */
2224 ret
= wl1271_ps_elp_wakeup(wl
);
2228 if (wlvif
->bss_type
== BSS_TYPE_STA_BSS
||
2229 wlvif
->bss_type
== BSS_TYPE_IBSS
) {
2230 if (wl12xx_dev_role_started(wlvif
))
2231 wl12xx_stop_dev(wl
, wlvif
);
2233 ret
= wl12xx_cmd_role_disable(wl
, &wlvif
->dev_role_id
);
2238 ret
= wl12xx_cmd_role_disable(wl
, &wlvif
->role_id
);
2242 wl1271_ps_elp_sleep(wl
);
2245 /* clear all hlids (except system_hlid) */
2246 wlvif
->dev_hlid
= WL12XX_INVALID_LINK_ID
;
2248 if (wlvif
->bss_type
== BSS_TYPE_STA_BSS
||
2249 wlvif
->bss_type
== BSS_TYPE_IBSS
) {
2250 wlvif
->sta
.hlid
= WL12XX_INVALID_LINK_ID
;
2251 wl12xx_free_rate_policy(wl
, &wlvif
->sta
.basic_rate_idx
);
2252 wl12xx_free_rate_policy(wl
, &wlvif
->sta
.ap_rate_idx
);
2253 wl12xx_free_rate_policy(wl
, &wlvif
->sta
.p2p_rate_idx
);
2255 wlvif
->ap
.bcast_hlid
= WL12XX_INVALID_LINK_ID
;
2256 wlvif
->ap
.global_hlid
= WL12XX_INVALID_LINK_ID
;
2257 wl12xx_free_rate_policy(wl
, &wlvif
->ap
.mgmt_rate_idx
);
2258 wl12xx_free_rate_policy(wl
, &wlvif
->ap
.bcast_rate_idx
);
2259 for (i
= 0; i
< CONF_TX_MAX_AC_COUNT
; i
++)
2260 wl12xx_free_rate_policy(wl
,
2261 &wlvif
->ap
.ucast_rate_idx
[i
]);
2264 wl12xx_tx_reset_wlvif(wl
, wlvif
);
2265 wl1271_free_ap_keys(wl
, wlvif
);
2266 if (wl
->last_wlvif
== wlvif
)
2267 wl
->last_wlvif
= NULL
;
2268 list_del(&wlvif
->list
);
2269 memset(wlvif
->ap
.sta_hlid_map
, 0, sizeof(wlvif
->ap
.sta_hlid_map
));
2270 wlvif
->role_id
= WL12XX_INVALID_ROLE_ID
;
2271 wlvif
->dev_role_id
= WL12XX_INVALID_ROLE_ID
;
2273 if (wlvif
->bss_type
== BSS_TYPE_AP_BSS
)
2278 mutex_unlock(&wl
->mutex
);
2279 del_timer_sync(&wlvif
->rx_streaming_timer
);
2280 cancel_work_sync(&wlvif
->rx_streaming_enable_work
);
2281 cancel_work_sync(&wlvif
->rx_streaming_disable_work
);
2282 cancel_delayed_work_sync(&wlvif
->pspoll_work
);
2284 mutex_lock(&wl
->mutex
);
2287 static void wl1271_op_remove_interface(struct ieee80211_hw
*hw
,
2288 struct ieee80211_vif
*vif
)
2290 struct wl1271
*wl
= hw
->priv
;
2291 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
2292 struct wl12xx_vif
*iter
;
2294 mutex_lock(&wl
->mutex
);
2296 if (wl
->state
== WL1271_STATE_OFF
||
2297 !test_bit(WLVIF_FLAG_INITIALIZED
, &wlvif
->flags
))
2301 * wl->vif can be null here if someone shuts down the interface
2302 * just when hardware recovery has been started.
2304 wl12xx_for_each_wlvif(wl
, iter
) {
2308 __wl1271_op_remove_interface(wl
, vif
, true);
2311 WARN_ON(iter
!= wlvif
);
2313 mutex_unlock(&wl
->mutex
);
2314 cancel_work_sync(&wl
->recovery_work
);
2317 static int wl12xx_op_change_interface(struct ieee80211_hw
*hw
,
2318 struct ieee80211_vif
*vif
,
2319 enum nl80211_iftype new_type
, bool p2p
)
2321 wl1271_op_remove_interface(hw
, vif
);
2323 vif
->type
= ieee80211_iftype_p2p(new_type
, p2p
);
2325 return wl1271_op_add_interface(hw
, vif
);
2328 static int wl1271_join(struct wl1271
*wl
, struct wl12xx_vif
*wlvif
,
2332 bool is_ibss
= (wlvif
->bss_type
== BSS_TYPE_IBSS
);
2335 * One of the side effects of the JOIN command is that is clears
2336 * WPA/WPA2 keys from the chipset. Performing a JOIN while associated
2337 * to a WPA/WPA2 access point will therefore kill the data-path.
2338 * Currently the only valid scenario for JOIN during association
2339 * is on roaming, in which case we will also be given new keys.
2340 * Keep the below message for now, unless it starts bothering
2341 * users who really like to roam a lot :)
2343 if (test_bit(WLVIF_FLAG_STA_ASSOCIATED
, &wlvif
->flags
))
2344 wl1271_info("JOIN while associated.");
2347 set_bit(WLVIF_FLAG_STA_ASSOCIATED
, &wlvif
->flags
);
2350 ret
= wl12xx_cmd_role_start_ibss(wl
, wlvif
);
2352 ret
= wl12xx_cmd_role_start_sta(wl
, wlvif
);
2356 if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED
, &wlvif
->flags
))
2360 * The join command disable the keep-alive mode, shut down its process,
2361 * and also clear the template config, so we need to reset it all after
2362 * the join. The acx_aid starts the keep-alive process, and the order
2363 * of the commands below is relevant.
2365 ret
= wl1271_acx_keep_alive_mode(wl
, wlvif
, true);
2369 ret
= wl1271_acx_aid(wl
, wlvif
, wlvif
->aid
);
2373 ret
= wl12xx_cmd_build_klv_null_data(wl
, wlvif
);
2377 ret
= wl1271_acx_keep_alive_config(wl
, wlvif
,
2378 CMD_TEMPL_KLV_IDX_NULL_DATA
,
2379 ACX_KEEP_ALIVE_TPL_VALID
);
2387 static int wl1271_unjoin(struct wl1271
*wl
, struct wl12xx_vif
*wlvif
)
2391 if (test_and_clear_bit(WLVIF_FLAG_CS_PROGRESS
, &wlvif
->flags
)) {
2392 struct ieee80211_vif
*vif
= wl12xx_wlvif_to_vif(wlvif
);
2394 wl12xx_cmd_stop_channel_switch(wl
);
2395 ieee80211_chswitch_done(vif
, false);
2398 /* to stop listening to a channel, we disconnect */
2399 ret
= wl12xx_cmd_role_stop_sta(wl
, wlvif
);
2403 /* reset TX security counters on a clean disconnect */
2404 wlvif
->tx_security_last_seq_lsb
= 0;
2405 wlvif
->tx_security_seq
= 0;
2411 static void wl1271_set_band_rate(struct wl1271
*wl
, struct wl12xx_vif
*wlvif
)
2413 wlvif
->basic_rate_set
= wlvif
->bitrate_masks
[wlvif
->band
];
2414 wlvif
->rate_set
= wlvif
->basic_rate_set
;
2417 static int wl1271_sta_handle_idle(struct wl1271
*wl
, struct wl12xx_vif
*wlvif
,
2421 bool cur_idle
= !test_bit(WLVIF_FLAG_IN_USE
, &wlvif
->flags
);
2423 if (idle
== cur_idle
)
2427 /* no need to croc if we weren't busy (e.g. during boot) */
2428 if (wl12xx_dev_role_started(wlvif
)) {
2429 ret
= wl12xx_stop_dev(wl
, wlvif
);
2434 wl1271_tx_min_rate_get(wl
, wlvif
->basic_rate_set
);
2435 ret
= wl1271_acx_sta_rate_policies(wl
, wlvif
);
2438 ret
= wl1271_acx_keep_alive_config(
2439 wl
, wlvif
, CMD_TEMPL_KLV_IDX_NULL_DATA
,
2440 ACX_KEEP_ALIVE_TPL_INVALID
);
2443 clear_bit(WLVIF_FLAG_IN_USE
, &wlvif
->flags
);
2445 /* The current firmware only supports sched_scan in idle */
2446 if (wl
->sched_scanning
) {
2447 wl1271_scan_sched_scan_stop(wl
);
2448 ieee80211_sched_scan_stopped(wl
->hw
);
2451 ret
= wl12xx_start_dev(wl
, wlvif
);
2454 set_bit(WLVIF_FLAG_IN_USE
, &wlvif
->flags
);
2461 static int wl12xx_config_vif(struct wl1271
*wl
, struct wl12xx_vif
*wlvif
,
2462 struct ieee80211_conf
*conf
, u32 changed
)
2464 bool is_ap
= (wlvif
->bss_type
== BSS_TYPE_AP_BSS
);
2467 channel
= ieee80211_frequency_to_channel(conf
->channel
->center_freq
);
2469 /* if the channel changes while joined, join again */
2470 if (changed
& IEEE80211_CONF_CHANGE_CHANNEL
&&
2471 ((wlvif
->band
!= conf
->channel
->band
) ||
2472 (wlvif
->channel
!= channel
))) {
2473 /* send all pending packets */
2474 wl1271_tx_work_locked(wl
);
2475 wlvif
->band
= conf
->channel
->band
;
2476 wlvif
->channel
= channel
;
2480 * FIXME: the mac80211 should really provide a fixed
2481 * rate to use here. for now, just use the smallest
2482 * possible rate for the band as a fixed rate for
2483 * association frames and other control messages.
2485 if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED
, &wlvif
->flags
))
2486 wl1271_set_band_rate(wl
, wlvif
);
2489 wl1271_tx_min_rate_get(wl
,
2490 wlvif
->basic_rate_set
);
2491 ret
= wl1271_acx_sta_rate_policies(wl
, wlvif
);
2493 wl1271_warning("rate policy for channel "
2496 if (test_bit(WLVIF_FLAG_STA_ASSOCIATED
,
2498 if (wl12xx_dev_role_started(wlvif
)) {
2500 ret
= wl12xx_croc(wl
,
2501 wlvif
->dev_role_id
);
2505 ret
= wl1271_join(wl
, wlvif
, false);
2507 wl1271_warning("cmd join on channel "
2511 * change the ROC channel. do it only if we are
2512 * not idle. otherwise, CROC will be called
2515 if (wl12xx_dev_role_started(wlvif
) &&
2516 !(conf
->flags
& IEEE80211_CONF_IDLE
)) {
2517 ret
= wl12xx_stop_dev(wl
, wlvif
);
2521 ret
= wl12xx_start_dev(wl
, wlvif
);
2530 * if mac80211 changes the PSM mode, make sure the mode is not
2531 * incorrectly changed after the pspoll failure active window.
2533 if (changed
& IEEE80211_CONF_CHANGE_PS
)
2534 clear_bit(WLVIF_FLAG_PSPOLL_FAILURE
, &wlvif
->flags
);
2536 if (conf
->flags
& IEEE80211_CONF_PS
&&
2537 !test_bit(WLVIF_FLAG_PSM_REQUESTED
, &wlvif
->flags
)) {
2538 set_bit(WLVIF_FLAG_PSM_REQUESTED
, &wlvif
->flags
);
2541 * We enter PSM only if we're already associated.
2542 * If we're not, we'll enter it when joining an SSID,
2543 * through the bss_info_changed() hook.
2545 if (test_bit(WLVIF_FLAG_STA_ASSOCIATED
, &wlvif
->flags
)) {
2546 wl1271_debug(DEBUG_PSM
, "psm enabled");
2547 ret
= wl1271_ps_set_mode(wl
, wlvif
,
2548 STATION_POWER_SAVE_MODE
,
2549 wlvif
->basic_rate
, true);
2551 } else if (!(conf
->flags
& IEEE80211_CONF_PS
) &&
2552 test_bit(WLVIF_FLAG_PSM_REQUESTED
, &wlvif
->flags
)) {
2553 wl1271_debug(DEBUG_PSM
, "psm disabled");
2555 clear_bit(WLVIF_FLAG_PSM_REQUESTED
, &wlvif
->flags
);
2557 if (test_bit(WLVIF_FLAG_PSM
, &wlvif
->flags
))
2558 ret
= wl1271_ps_set_mode(wl
, wlvif
,
2559 STATION_ACTIVE_MODE
,
2560 wlvif
->basic_rate
, true);
2563 if (conf
->power_level
!= wlvif
->power_level
) {
2564 ret
= wl1271_acx_tx_power(wl
, wlvif
, conf
->power_level
);
2568 wlvif
->power_level
= conf
->power_level
;
2574 static int wl1271_op_config(struct ieee80211_hw
*hw
, u32 changed
)
2576 struct wl1271
*wl
= hw
->priv
;
2577 struct wl12xx_vif
*wlvif
;
2578 struct ieee80211_conf
*conf
= &hw
->conf
;
2579 int channel
, ret
= 0;
2581 channel
= ieee80211_frequency_to_channel(conf
->channel
->center_freq
);
2583 wl1271_debug(DEBUG_MAC80211
, "mac80211 config ch %d psm %s power %d %s"
2586 conf
->flags
& IEEE80211_CONF_PS
? "on" : "off",
2588 conf
->flags
& IEEE80211_CONF_IDLE
? "idle" : "in use",
2592 * mac80211 will go to idle nearly immediately after transmitting some
2593 * frames, such as the deauth. To make sure those frames reach the air,
2594 * wait here until the TX queue is fully flushed.
2596 if ((changed
& IEEE80211_CONF_CHANGE_IDLE
) &&
2597 (conf
->flags
& IEEE80211_CONF_IDLE
))
2598 wl1271_tx_flush(wl
);
2600 mutex_lock(&wl
->mutex
);
2602 /* we support configuring the channel and band even while off */
2603 if (changed
& IEEE80211_CONF_CHANGE_CHANNEL
) {
2604 wl
->band
= conf
->channel
->band
;
2605 wl
->channel
= channel
;
2608 if (changed
& IEEE80211_CONF_CHANGE_POWER
)
2609 wl
->power_level
= conf
->power_level
;
2611 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
2614 ret
= wl1271_ps_elp_wakeup(wl
);
2618 /* configure each interface */
2619 wl12xx_for_each_wlvif(wl
, wlvif
) {
2620 ret
= wl12xx_config_vif(wl
, wlvif
, conf
, changed
);
2626 wl1271_ps_elp_sleep(wl
);
2629 mutex_unlock(&wl
->mutex
);
2634 struct wl1271_filter_params
{
2637 u8 mc_list
[ACX_MC_ADDRESS_GROUP_MAX
][ETH_ALEN
];
2640 static u64
wl1271_op_prepare_multicast(struct ieee80211_hw
*hw
,
2641 struct netdev_hw_addr_list
*mc_list
)
2643 struct wl1271_filter_params
*fp
;
2644 struct netdev_hw_addr
*ha
;
2645 struct wl1271
*wl
= hw
->priv
;
2647 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
2650 fp
= kzalloc(sizeof(*fp
), GFP_ATOMIC
);
2652 wl1271_error("Out of memory setting filters.");
2656 /* update multicast filtering parameters */
2657 fp
->mc_list_length
= 0;
2658 if (netdev_hw_addr_list_count(mc_list
) > ACX_MC_ADDRESS_GROUP_MAX
) {
2659 fp
->enabled
= false;
2662 netdev_hw_addr_list_for_each(ha
, mc_list
) {
2663 memcpy(fp
->mc_list
[fp
->mc_list_length
],
2664 ha
->addr
, ETH_ALEN
);
2665 fp
->mc_list_length
++;
2669 return (u64
)(unsigned long)fp
;
2672 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
2675 FIF_BCN_PRBRESP_PROMISC | \
2679 static void wl1271_op_configure_filter(struct ieee80211_hw
*hw
,
2680 unsigned int changed
,
2681 unsigned int *total
, u64 multicast
)
2683 struct wl1271_filter_params
*fp
= (void *)(unsigned long)multicast
;
2684 struct wl1271
*wl
= hw
->priv
;
2685 struct wl12xx_vif
*wlvif
;
2689 wl1271_debug(DEBUG_MAC80211
, "mac80211 configure filter changed %x"
2690 " total %x", changed
, *total
);
2692 mutex_lock(&wl
->mutex
);
2694 *total
&= WL1271_SUPPORTED_FILTERS
;
2695 changed
&= WL1271_SUPPORTED_FILTERS
;
2697 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
2700 ret
= wl1271_ps_elp_wakeup(wl
);
2704 wl12xx_for_each_wlvif(wl
, wlvif
) {
2705 if (wlvif
->bss_type
!= BSS_TYPE_AP_BSS
) {
2706 if (*total
& FIF_ALLMULTI
)
2707 ret
= wl1271_acx_group_address_tbl(wl
, wlvif
,
2711 ret
= wl1271_acx_group_address_tbl(wl
, wlvif
,
2714 fp
->mc_list_length
);
2721 * the fw doesn't provide an api to configure the filters. instead,
2722 * the filters configuration is based on the active roles / ROC
2727 wl1271_ps_elp_sleep(wl
);
2730 mutex_unlock(&wl
->mutex
);
2734 static int wl1271_record_ap_key(struct wl1271
*wl
, struct wl12xx_vif
*wlvif
,
2735 u8 id
, u8 key_type
, u8 key_size
,
2736 const u8
*key
, u8 hlid
, u32 tx_seq_32
,
2739 struct wl1271_ap_key
*ap_key
;
2742 wl1271_debug(DEBUG_CRYPT
, "record ap key id %d", (int)id
);
2744 if (key_size
> MAX_KEY_SIZE
)
2748 * Find next free entry in ap_keys. Also check we are not replacing
2751 for (i
= 0; i
< MAX_NUM_KEYS
; i
++) {
2752 if (wlvif
->ap
.recorded_keys
[i
] == NULL
)
2755 if (wlvif
->ap
.recorded_keys
[i
]->id
== id
) {
2756 wl1271_warning("trying to record key replacement");
2761 if (i
== MAX_NUM_KEYS
)
2764 ap_key
= kzalloc(sizeof(*ap_key
), GFP_KERNEL
);
2769 ap_key
->key_type
= key_type
;
2770 ap_key
->key_size
= key_size
;
2771 memcpy(ap_key
->key
, key
, key_size
);
2772 ap_key
->hlid
= hlid
;
2773 ap_key
->tx_seq_32
= tx_seq_32
;
2774 ap_key
->tx_seq_16
= tx_seq_16
;
2776 wlvif
->ap
.recorded_keys
[i
] = ap_key
;
2780 static void wl1271_free_ap_keys(struct wl1271
*wl
, struct wl12xx_vif
*wlvif
)
2784 for (i
= 0; i
< MAX_NUM_KEYS
; i
++) {
2785 kfree(wlvif
->ap
.recorded_keys
[i
]);
2786 wlvif
->ap
.recorded_keys
[i
] = NULL
;
2790 static int wl1271_ap_init_hwenc(struct wl1271
*wl
, struct wl12xx_vif
*wlvif
)
2793 struct wl1271_ap_key
*key
;
2794 bool wep_key_added
= false;
2796 for (i
= 0; i
< MAX_NUM_KEYS
; i
++) {
2798 if (wlvif
->ap
.recorded_keys
[i
] == NULL
)
2801 key
= wlvif
->ap
.recorded_keys
[i
];
2803 if (hlid
== WL12XX_INVALID_LINK_ID
)
2804 hlid
= wlvif
->ap
.bcast_hlid
;
2806 ret
= wl1271_cmd_set_ap_key(wl
, wlvif
, KEY_ADD_OR_REPLACE
,
2807 key
->id
, key
->key_type
,
2808 key
->key_size
, key
->key
,
2809 hlid
, key
->tx_seq_32
,
2814 if (key
->key_type
== KEY_WEP
)
2815 wep_key_added
= true;
2818 if (wep_key_added
) {
2819 ret
= wl12xx_cmd_set_default_wep_key(wl
, wlvif
->default_key
,
2820 wlvif
->ap
.bcast_hlid
);
2826 wl1271_free_ap_keys(wl
, wlvif
);
2830 static int wl1271_set_key(struct wl1271
*wl
, struct wl12xx_vif
*wlvif
,
2831 u16 action
, u8 id
, u8 key_type
,
2832 u8 key_size
, const u8
*key
, u32 tx_seq_32
,
2833 u16 tx_seq_16
, struct ieee80211_sta
*sta
)
2836 bool is_ap
= (wlvif
->bss_type
== BSS_TYPE_AP_BSS
);
2839 struct wl1271_station
*wl_sta
;
2843 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
2844 hlid
= wl_sta
->hlid
;
2846 hlid
= wlvif
->ap
.bcast_hlid
;
2849 if (!test_bit(WLVIF_FLAG_AP_STARTED
, &wlvif
->flags
)) {
2851 * We do not support removing keys after AP shutdown.
2852 * Pretend we do to make mac80211 happy.
2854 if (action
!= KEY_ADD_OR_REPLACE
)
2857 ret
= wl1271_record_ap_key(wl
, wlvif
, id
,
2859 key
, hlid
, tx_seq_32
,
2862 ret
= wl1271_cmd_set_ap_key(wl
, wlvif
, action
,
2863 id
, key_type
, key_size
,
2864 key
, hlid
, tx_seq_32
,
2872 static const u8 bcast_addr
[ETH_ALEN
] = {
2873 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
2877 * A STA set to GEM cipher requires 2 tx spare blocks.
2878 * Return to default value when GEM cipher key is removed
2880 if (key_type
== KEY_GEM
) {
2881 if (action
== KEY_ADD_OR_REPLACE
)
2882 wl
->tx_spare_blocks
= 2;
2883 else if (action
== KEY_REMOVE
)
2884 wl
->tx_spare_blocks
= TX_HW_BLOCK_SPARE_DEFAULT
;
2887 addr
= sta
? sta
->addr
: bcast_addr
;
2889 if (is_zero_ether_addr(addr
)) {
2890 /* We dont support TX only encryption */
2894 /* The wl1271 does not allow to remove unicast keys - they
2895 will be cleared automatically on next CMD_JOIN. Ignore the
2896 request silently, as we dont want the mac80211 to emit
2897 an error message. */
2898 if (action
== KEY_REMOVE
&& !is_broadcast_ether_addr(addr
))
2901 /* don't remove key if hlid was already deleted */
2902 if (action
== KEY_REMOVE
&&
2903 wlvif
->sta
.hlid
== WL12XX_INVALID_LINK_ID
)
2906 ret
= wl1271_cmd_set_sta_key(wl
, wlvif
, action
,
2907 id
, key_type
, key_size
,
2908 key
, addr
, tx_seq_32
,
2913 /* the default WEP key needs to be configured at least once */
2914 if (key_type
== KEY_WEP
) {
2915 ret
= wl12xx_cmd_set_default_wep_key(wl
,
2926 static int wl1271_op_set_key(struct ieee80211_hw
*hw
, enum set_key_cmd cmd
,
2927 struct ieee80211_vif
*vif
,
2928 struct ieee80211_sta
*sta
,
2929 struct ieee80211_key_conf
*key_conf
)
2931 struct wl1271
*wl
= hw
->priv
;
2932 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
2938 wl1271_debug(DEBUG_MAC80211
, "mac80211 set key");
2940 wl1271_debug(DEBUG_CRYPT
, "CMD: 0x%x sta: %p", cmd
, sta
);
2941 wl1271_debug(DEBUG_CRYPT
, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
2942 key_conf
->cipher
, key_conf
->keyidx
,
2943 key_conf
->keylen
, key_conf
->flags
);
2944 wl1271_dump(DEBUG_CRYPT
, "KEY: ", key_conf
->key
, key_conf
->keylen
);
2946 mutex_lock(&wl
->mutex
);
2948 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
2953 ret
= wl1271_ps_elp_wakeup(wl
);
2957 switch (key_conf
->cipher
) {
2958 case WLAN_CIPHER_SUITE_WEP40
:
2959 case WLAN_CIPHER_SUITE_WEP104
:
2962 key_conf
->hw_key_idx
= key_conf
->keyidx
;
2964 case WLAN_CIPHER_SUITE_TKIP
:
2965 key_type
= KEY_TKIP
;
2967 key_conf
->hw_key_idx
= key_conf
->keyidx
;
2968 tx_seq_32
= WL1271_TX_SECURITY_HI32(wlvif
->tx_security_seq
);
2969 tx_seq_16
= WL1271_TX_SECURITY_LO16(wlvif
->tx_security_seq
);
2971 case WLAN_CIPHER_SUITE_CCMP
:
2974 key_conf
->flags
|= IEEE80211_KEY_FLAG_PUT_IV_SPACE
;
2975 tx_seq_32
= WL1271_TX_SECURITY_HI32(wlvif
->tx_security_seq
);
2976 tx_seq_16
= WL1271_TX_SECURITY_LO16(wlvif
->tx_security_seq
);
2978 case WL1271_CIPHER_SUITE_GEM
:
2980 tx_seq_32
= WL1271_TX_SECURITY_HI32(wlvif
->tx_security_seq
);
2981 tx_seq_16
= WL1271_TX_SECURITY_LO16(wlvif
->tx_security_seq
);
2984 wl1271_error("Unknown key algo 0x%x", key_conf
->cipher
);
2992 ret
= wl1271_set_key(wl
, wlvif
, KEY_ADD_OR_REPLACE
,
2993 key_conf
->keyidx
, key_type
,
2994 key_conf
->keylen
, key_conf
->key
,
2995 tx_seq_32
, tx_seq_16
, sta
);
2997 wl1271_error("Could not add or replace key");
3003 ret
= wl1271_set_key(wl
, wlvif
, KEY_REMOVE
,
3004 key_conf
->keyidx
, key_type
,
3005 key_conf
->keylen
, key_conf
->key
,
3008 wl1271_error("Could not remove key");
3014 wl1271_error("Unsupported key cmd 0x%x", cmd
);
3020 wl1271_ps_elp_sleep(wl
);
3023 mutex_unlock(&wl
->mutex
);
3028 static int wl1271_op_hw_scan(struct ieee80211_hw
*hw
,
3029 struct ieee80211_vif
*vif
,
3030 struct cfg80211_scan_request
*req
)
3032 struct wl1271
*wl
= hw
->priv
;
3033 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
3039 wl1271_debug(DEBUG_MAC80211
, "mac80211 hw scan");
3042 ssid
= req
->ssids
[0].ssid
;
3043 len
= req
->ssids
[0].ssid_len
;
3046 mutex_lock(&wl
->mutex
);
3048 if (wl
->state
== WL1271_STATE_OFF
) {
3050 * We cannot return -EBUSY here because cfg80211 will expect
3051 * a call to ieee80211_scan_completed if we do - in this case
3052 * there won't be any call.
3058 ret
= wl1271_ps_elp_wakeup(wl
);
3062 if (test_bit(WLVIF_FLAG_STA_ASSOCIATED
, &wlvif
->flags
) &&
3063 test_bit(wlvif
->role_id
, wl
->roc_map
)) {
3064 /* don't allow scanning right now */
3069 /* cancel ROC before scanning */
3070 if (wl12xx_dev_role_started(wlvif
))
3071 wl12xx_stop_dev(wl
, wlvif
);
3073 ret
= wl1271_scan(hw
->priv
, vif
, ssid
, len
, req
);
3075 wl1271_ps_elp_sleep(wl
);
3077 mutex_unlock(&wl
->mutex
);
3082 static void wl1271_op_cancel_hw_scan(struct ieee80211_hw
*hw
,
3083 struct ieee80211_vif
*vif
)
3085 struct wl1271
*wl
= hw
->priv
;
3088 wl1271_debug(DEBUG_MAC80211
, "mac80211 cancel hw scan");
3090 mutex_lock(&wl
->mutex
);
3092 if (wl
->state
== WL1271_STATE_OFF
)
3095 if (wl
->scan
.state
== WL1271_SCAN_STATE_IDLE
)
3098 ret
= wl1271_ps_elp_wakeup(wl
);
3102 if (wl
->scan
.state
!= WL1271_SCAN_STATE_DONE
) {
3103 ret
= wl1271_scan_stop(wl
);
3107 wl
->scan
.state
= WL1271_SCAN_STATE_IDLE
;
3108 memset(wl
->scan
.scanned_ch
, 0, sizeof(wl
->scan
.scanned_ch
));
3109 wl
->scan_vif
= NULL
;
3110 wl
->scan
.req
= NULL
;
3111 ieee80211_scan_completed(wl
->hw
, true);
3114 wl1271_ps_elp_sleep(wl
);
3116 mutex_unlock(&wl
->mutex
);
3118 cancel_delayed_work_sync(&wl
->scan_complete_work
);
3121 static int wl1271_op_sched_scan_start(struct ieee80211_hw
*hw
,
3122 struct ieee80211_vif
*vif
,
3123 struct cfg80211_sched_scan_request
*req
,
3124 struct ieee80211_sched_scan_ies
*ies
)
3126 struct wl1271
*wl
= hw
->priv
;
3127 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
3130 wl1271_debug(DEBUG_MAC80211
, "wl1271_op_sched_scan_start");
3132 mutex_lock(&wl
->mutex
);
3134 if (wl
->state
== WL1271_STATE_OFF
) {
3139 ret
= wl1271_ps_elp_wakeup(wl
);
3143 ret
= wl1271_scan_sched_scan_config(wl
, wlvif
, req
, ies
);
3147 ret
= wl1271_scan_sched_scan_start(wl
, wlvif
);
3151 wl
->sched_scanning
= true;
3154 wl1271_ps_elp_sleep(wl
);
3156 mutex_unlock(&wl
->mutex
);
3160 static void wl1271_op_sched_scan_stop(struct ieee80211_hw
*hw
,
3161 struct ieee80211_vif
*vif
)
3163 struct wl1271
*wl
= hw
->priv
;
3166 wl1271_debug(DEBUG_MAC80211
, "wl1271_op_sched_scan_stop");
3168 mutex_lock(&wl
->mutex
);
3170 if (wl
->state
== WL1271_STATE_OFF
)
3173 ret
= wl1271_ps_elp_wakeup(wl
);
3177 wl1271_scan_sched_scan_stop(wl
);
3179 wl1271_ps_elp_sleep(wl
);
3181 mutex_unlock(&wl
->mutex
);
3184 static int wl1271_op_set_frag_threshold(struct ieee80211_hw
*hw
, u32 value
)
3186 struct wl1271
*wl
= hw
->priv
;
3189 mutex_lock(&wl
->mutex
);
3191 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
3196 ret
= wl1271_ps_elp_wakeup(wl
);
3200 ret
= wl1271_acx_frag_threshold(wl
, value
);
3202 wl1271_warning("wl1271_op_set_frag_threshold failed: %d", ret
);
3204 wl1271_ps_elp_sleep(wl
);
3207 mutex_unlock(&wl
->mutex
);
3212 static int wl1271_op_set_rts_threshold(struct ieee80211_hw
*hw
, u32 value
)
3214 struct wl1271
*wl
= hw
->priv
;
3215 struct wl12xx_vif
*wlvif
;
3218 mutex_lock(&wl
->mutex
);
3220 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
3225 ret
= wl1271_ps_elp_wakeup(wl
);
3229 wl12xx_for_each_wlvif(wl
, wlvif
) {
3230 ret
= wl1271_acx_rts_threshold(wl
, wlvif
, value
);
3232 wl1271_warning("set rts threshold failed: %d", ret
);
3234 wl1271_ps_elp_sleep(wl
);
3237 mutex_unlock(&wl
->mutex
);
3242 static int wl1271_ssid_set(struct ieee80211_vif
*vif
, struct sk_buff
*skb
,
3245 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
3247 const u8
*ptr
= cfg80211_find_ie(WLAN_EID_SSID
, skb
->data
+ offset
,
3251 wl1271_error("No SSID in IEs!");
3256 if (ssid_len
> IEEE80211_MAX_SSID_LEN
) {
3257 wl1271_error("SSID is too long!");
3261 wlvif
->ssid_len
= ssid_len
;
3262 memcpy(wlvif
->ssid
, ptr
+2, ssid_len
);
3266 static void wl12xx_remove_ie(struct sk_buff
*skb
, u8 eid
, int ieoffset
)
3269 const u8
*next
, *end
= skb
->data
+ skb
->len
;
3270 u8
*ie
= (u8
*)cfg80211_find_ie(eid
, skb
->data
+ ieoffset
,
3271 skb
->len
- ieoffset
);
3276 memmove(ie
, next
, end
- next
);
3277 skb_trim(skb
, skb
->len
- len
);
3280 static void wl12xx_remove_vendor_ie(struct sk_buff
*skb
,
3281 unsigned int oui
, u8 oui_type
,
3285 const u8
*next
, *end
= skb
->data
+ skb
->len
;
3286 u8
*ie
= (u8
*)cfg80211_find_vendor_ie(oui
, oui_type
,
3287 skb
->data
+ ieoffset
,
3288 skb
->len
- ieoffset
);
3293 memmove(ie
, next
, end
- next
);
3294 skb_trim(skb
, skb
->len
- len
);
3297 static int wl1271_ap_set_probe_resp_tmpl(struct wl1271
*wl
, u32 rates
,
3298 struct ieee80211_vif
*vif
)
3300 struct sk_buff
*skb
;
3303 skb
= ieee80211_proberesp_get(wl
->hw
, vif
);
3307 ret
= wl1271_cmd_template_set(wl
,
3308 CMD_TEMPL_AP_PROBE_RESPONSE
,
3317 static int wl1271_ap_set_probe_resp_tmpl_legacy(struct wl1271
*wl
,
3318 struct ieee80211_vif
*vif
,
3320 size_t probe_rsp_len
,
3323 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
3324 struct ieee80211_bss_conf
*bss_conf
= &vif
->bss_conf
;
3325 u8 probe_rsp_templ
[WL1271_CMD_TEMPL_MAX_SIZE
];
3326 int ssid_ie_offset
, ie_offset
, templ_len
;
3329 /* no need to change probe response if the SSID is set correctly */
3330 if (wlvif
->ssid_len
> 0)
3331 return wl1271_cmd_template_set(wl
,
3332 CMD_TEMPL_AP_PROBE_RESPONSE
,
3337 if (probe_rsp_len
+ bss_conf
->ssid_len
> WL1271_CMD_TEMPL_MAX_SIZE
) {
3338 wl1271_error("probe_rsp template too big");
3342 /* start searching from IE offset */
3343 ie_offset
= offsetof(struct ieee80211_mgmt
, u
.probe_resp
.variable
);
3345 ptr
= cfg80211_find_ie(WLAN_EID_SSID
, probe_rsp_data
+ ie_offset
,
3346 probe_rsp_len
- ie_offset
);
3348 wl1271_error("No SSID in beacon!");
3352 ssid_ie_offset
= ptr
- probe_rsp_data
;
3353 ptr
+= (ptr
[1] + 2);
3355 memcpy(probe_rsp_templ
, probe_rsp_data
, ssid_ie_offset
);
3357 /* insert SSID from bss_conf */
3358 probe_rsp_templ
[ssid_ie_offset
] = WLAN_EID_SSID
;
3359 probe_rsp_templ
[ssid_ie_offset
+ 1] = bss_conf
->ssid_len
;
3360 memcpy(probe_rsp_templ
+ ssid_ie_offset
+ 2,
3361 bss_conf
->ssid
, bss_conf
->ssid_len
);
3362 templ_len
= ssid_ie_offset
+ 2 + bss_conf
->ssid_len
;
3364 memcpy(probe_rsp_templ
+ ssid_ie_offset
+ 2 + bss_conf
->ssid_len
,
3365 ptr
, probe_rsp_len
- (ptr
- probe_rsp_data
));
3366 templ_len
+= probe_rsp_len
- (ptr
- probe_rsp_data
);
3368 return wl1271_cmd_template_set(wl
,
3369 CMD_TEMPL_AP_PROBE_RESPONSE
,
3375 static int wl1271_bss_erp_info_changed(struct wl1271
*wl
,
3376 struct ieee80211_vif
*vif
,
3377 struct ieee80211_bss_conf
*bss_conf
,
3380 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
3383 if (changed
& BSS_CHANGED_ERP_SLOT
) {
3384 if (bss_conf
->use_short_slot
)
3385 ret
= wl1271_acx_slot(wl
, wlvif
, SLOT_TIME_SHORT
);
3387 ret
= wl1271_acx_slot(wl
, wlvif
, SLOT_TIME_LONG
);
3389 wl1271_warning("Set slot time failed %d", ret
);
3394 if (changed
& BSS_CHANGED_ERP_PREAMBLE
) {
3395 if (bss_conf
->use_short_preamble
)
3396 wl1271_acx_set_preamble(wl
, wlvif
, ACX_PREAMBLE_SHORT
);
3398 wl1271_acx_set_preamble(wl
, wlvif
, ACX_PREAMBLE_LONG
);
3401 if (changed
& BSS_CHANGED_ERP_CTS_PROT
) {
3402 if (bss_conf
->use_cts_prot
)
3403 ret
= wl1271_acx_cts_protect(wl
, wlvif
,
3406 ret
= wl1271_acx_cts_protect(wl
, wlvif
,
3407 CTSPROTECT_DISABLE
);
3409 wl1271_warning("Set ctsprotect failed %d", ret
);
3418 static int wl1271_bss_beacon_info_changed(struct wl1271
*wl
,
3419 struct ieee80211_vif
*vif
,
3420 struct ieee80211_bss_conf
*bss_conf
,
3423 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
3424 bool is_ap
= (wlvif
->bss_type
== BSS_TYPE_AP_BSS
);
3427 if ((changed
& BSS_CHANGED_BEACON_INT
)) {
3428 wl1271_debug(DEBUG_MASTER
, "beacon interval updated: %d",
3429 bss_conf
->beacon_int
);
3431 wlvif
->beacon_int
= bss_conf
->beacon_int
;
3434 if ((changed
& BSS_CHANGED_AP_PROBE_RESP
) && is_ap
) {
3435 u32 rate
= wl1271_tx_min_rate_get(wl
, wlvif
->basic_rate_set
);
3436 if (!wl1271_ap_set_probe_resp_tmpl(wl
, rate
, vif
)) {
3437 wl1271_debug(DEBUG_AP
, "probe response updated");
3438 set_bit(WLVIF_FLAG_AP_PROBE_RESP_SET
, &wlvif
->flags
);
3442 if ((changed
& BSS_CHANGED_BEACON
)) {
3443 struct ieee80211_hdr
*hdr
;
3445 int ieoffset
= offsetof(struct ieee80211_mgmt
,
3447 struct sk_buff
*beacon
= ieee80211_beacon_get(wl
->hw
, vif
);
3455 wl1271_debug(DEBUG_MASTER
, "beacon updated");
3457 ret
= wl1271_ssid_set(vif
, beacon
, ieoffset
);
3459 dev_kfree_skb(beacon
);
3462 min_rate
= wl1271_tx_min_rate_get(wl
, wlvif
->basic_rate_set
);
3463 tmpl_id
= is_ap
? CMD_TEMPL_AP_BEACON
:
3465 ret
= wl1271_cmd_template_set(wl
, tmpl_id
,
3470 dev_kfree_skb(beacon
);
3475 * In case we already have a probe-resp beacon set explicitly
3476 * by usermode, don't use the beacon data.
3478 if (test_bit(WLVIF_FLAG_AP_PROBE_RESP_SET
, &wlvif
->flags
))
3481 /* remove TIM ie from probe response */
3482 wl12xx_remove_ie(beacon
, WLAN_EID_TIM
, ieoffset
);
3485 * remove p2p ie from probe response.
3486 * the fw reponds to probe requests that don't include
3487 * the p2p ie. probe requests with p2p ie will be passed,
3488 * and will be responded by the supplicant (the spec
3489 * forbids including the p2p ie when responding to probe
3490 * requests that didn't include it).
3492 wl12xx_remove_vendor_ie(beacon
, WLAN_OUI_WFA
,
3493 WLAN_OUI_TYPE_WFA_P2P
, ieoffset
);
3495 hdr
= (struct ieee80211_hdr
*) beacon
->data
;
3496 hdr
->frame_control
= cpu_to_le16(IEEE80211_FTYPE_MGMT
|
3497 IEEE80211_STYPE_PROBE_RESP
);
3499 ret
= wl1271_ap_set_probe_resp_tmpl_legacy(wl
, vif
,
3504 ret
= wl1271_cmd_template_set(wl
,
3505 CMD_TEMPL_PROBE_RESPONSE
,
3510 dev_kfree_skb(beacon
);
3517 wl1271_error("beacon info change failed: %d", ret
);
3521 /* AP mode changes */
3522 static void wl1271_bss_info_changed_ap(struct wl1271
*wl
,
3523 struct ieee80211_vif
*vif
,
3524 struct ieee80211_bss_conf
*bss_conf
,
3527 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
3530 if ((changed
& BSS_CHANGED_BASIC_RATES
)) {
3531 u32 rates
= bss_conf
->basic_rates
;
3533 wlvif
->basic_rate_set
= wl1271_tx_enabled_rates_get(wl
, rates
,
3535 wlvif
->basic_rate
= wl1271_tx_min_rate_get(wl
,
3536 wlvif
->basic_rate_set
);
3538 ret
= wl1271_init_ap_rates(wl
, wlvif
);
3540 wl1271_error("AP rate policy change failed %d", ret
);
3544 ret
= wl1271_ap_init_templates(wl
, vif
);
3549 ret
= wl1271_bss_beacon_info_changed(wl
, vif
, bss_conf
, changed
);
3553 if ((changed
& BSS_CHANGED_BEACON_ENABLED
)) {
3554 if (bss_conf
->enable_beacon
) {
3555 if (!test_bit(WLVIF_FLAG_AP_STARTED
, &wlvif
->flags
)) {
3556 ret
= wl12xx_cmd_role_start_ap(wl
, wlvif
);
3560 ret
= wl1271_ap_init_hwenc(wl
, wlvif
);
3564 set_bit(WLVIF_FLAG_AP_STARTED
, &wlvif
->flags
);
3565 wl1271_debug(DEBUG_AP
, "started AP");
3568 if (test_bit(WLVIF_FLAG_AP_STARTED
, &wlvif
->flags
)) {
3569 ret
= wl12xx_cmd_role_stop_ap(wl
, wlvif
);
3573 clear_bit(WLVIF_FLAG_AP_STARTED
, &wlvif
->flags
);
3574 clear_bit(WLVIF_FLAG_AP_PROBE_RESP_SET
,
3576 wl1271_debug(DEBUG_AP
, "stopped AP");
3581 ret
= wl1271_bss_erp_info_changed(wl
, vif
, bss_conf
, changed
);
3585 /* Handle HT information change */
3586 if ((changed
& BSS_CHANGED_HT
) &&
3587 (bss_conf
->channel_type
!= NL80211_CHAN_NO_HT
)) {
3588 ret
= wl1271_acx_set_ht_information(wl
, wlvif
,
3589 bss_conf
->ht_operation_mode
);
3591 wl1271_warning("Set ht information failed %d", ret
);
3600 /* STA/IBSS mode changes */
3601 static void wl1271_bss_info_changed_sta(struct wl1271
*wl
,
3602 struct ieee80211_vif
*vif
,
3603 struct ieee80211_bss_conf
*bss_conf
,
3606 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
3607 bool do_join
= false, set_assoc
= false;
3608 bool is_ibss
= (wlvif
->bss_type
== BSS_TYPE_IBSS
);
3609 bool ibss_joined
= false;
3610 u32 sta_rate_set
= 0;
3612 struct ieee80211_sta
*sta
;
3613 bool sta_exists
= false;
3614 struct ieee80211_sta_ht_cap sta_ht_cap
;
3617 ret
= wl1271_bss_beacon_info_changed(wl
, vif
, bss_conf
,
3623 if (changed
& BSS_CHANGED_IBSS
) {
3624 if (bss_conf
->ibss_joined
) {
3625 set_bit(WLVIF_FLAG_IBSS_JOINED
, &wlvif
->flags
);
3628 if (test_and_clear_bit(WLVIF_FLAG_IBSS_JOINED
,
3630 wl1271_unjoin(wl
, wlvif
);
3631 wl12xx_start_dev(wl
, wlvif
);
3636 if ((changed
& BSS_CHANGED_BEACON_INT
) && ibss_joined
)
3639 /* Need to update the SSID (for filtering etc) */
3640 if ((changed
& BSS_CHANGED_BEACON
) && ibss_joined
)
3643 if ((changed
& BSS_CHANGED_BEACON_ENABLED
) && ibss_joined
) {
3644 wl1271_debug(DEBUG_ADHOC
, "ad-hoc beaconing: %s",
3645 bss_conf
->enable_beacon
? "enabled" : "disabled");
3650 if (changed
& BSS_CHANGED_IDLE
) {
3651 ret
= wl1271_sta_handle_idle(wl
, wlvif
, bss_conf
->idle
);
3653 wl1271_warning("idle mode change failed %d", ret
);
3656 if ((changed
& BSS_CHANGED_CQM
)) {
3657 bool enable
= false;
3658 if (bss_conf
->cqm_rssi_thold
)
3660 ret
= wl1271_acx_rssi_snr_trigger(wl
, wlvif
, enable
,
3661 bss_conf
->cqm_rssi_thold
,
3662 bss_conf
->cqm_rssi_hyst
);
3665 wlvif
->rssi_thold
= bss_conf
->cqm_rssi_thold
;
3668 if (changed
& BSS_CHANGED_BSSID
)
3669 if (!is_zero_ether_addr(bss_conf
->bssid
)) {
3670 ret
= wl12xx_cmd_build_null_data(wl
, wlvif
);
3674 ret
= wl1271_build_qos_null_data(wl
, vif
);
3678 /* Need to update the BSSID (for filtering etc) */
3682 if (changed
& (BSS_CHANGED_ASSOC
| BSS_CHANGED_HT
)) {
3684 sta
= ieee80211_find_sta(vif
, bss_conf
->bssid
);
3688 /* save the supp_rates of the ap */
3689 sta_rate_set
= sta
->supp_rates
[wl
->hw
->conf
.channel
->band
];
3690 if (sta
->ht_cap
.ht_supported
)
3692 (sta
->ht_cap
.mcs
.rx_mask
[0] << HW_HT_RATES_OFFSET
);
3693 sta_ht_cap
= sta
->ht_cap
;
3700 if ((changed
& BSS_CHANGED_ASSOC
)) {
3701 if (bss_conf
->assoc
) {
3704 wlvif
->aid
= bss_conf
->aid
;
3707 wlvif
->ps_poll_failures
= 0;
3710 * use basic rates from AP, and determine lowest rate
3711 * to use with control frames.
3713 rates
= bss_conf
->basic_rates
;
3714 wlvif
->basic_rate_set
=
3715 wl1271_tx_enabled_rates_get(wl
, rates
,
3718 wl1271_tx_min_rate_get(wl
,
3719 wlvif
->basic_rate_set
);
3722 wl1271_tx_enabled_rates_get(wl
,
3725 ret
= wl1271_acx_sta_rate_policies(wl
, wlvif
);
3730 * with wl1271, we don't need to update the
3731 * beacon_int and dtim_period, because the firmware
3732 * updates it by itself when the first beacon is
3733 * received after a join.
3735 ret
= wl1271_cmd_build_ps_poll(wl
, wlvif
, wlvif
->aid
);
3740 * Get a template for hardware connection maintenance
3742 dev_kfree_skb(wlvif
->probereq
);
3743 wlvif
->probereq
= wl1271_cmd_build_ap_probe_req(wl
,
3746 ieoffset
= offsetof(struct ieee80211_mgmt
,
3747 u
.probe_req
.variable
);
3748 wl1271_ssid_set(vif
, wlvif
->probereq
, ieoffset
);
3750 /* enable the connection monitoring feature */
3751 ret
= wl1271_acx_conn_monit_params(wl
, wlvif
, true);
3755 /* use defaults when not associated */
3757 !!test_and_clear_bit(WLVIF_FLAG_STA_ASSOCIATED
,
3760 !!test_and_clear_bit(WLVIF_FLAG_STA_STATE_SENT
,
3764 /* free probe-request template */
3765 dev_kfree_skb(wlvif
->probereq
);
3766 wlvif
->probereq
= NULL
;
3768 /* re-enable dynamic ps - just in case */
3769 ieee80211_enable_dyn_ps(vif
);
3771 /* revert back to minimum rates for the current band */
3772 wl1271_set_band_rate(wl
, wlvif
);
3774 wl1271_tx_min_rate_get(wl
,
3775 wlvif
->basic_rate_set
);
3776 ret
= wl1271_acx_sta_rate_policies(wl
, wlvif
);
3780 /* disable connection monitor features */
3781 ret
= wl1271_acx_conn_monit_params(wl
, wlvif
, false);
3783 /* Disable the keep-alive feature */
3784 ret
= wl1271_acx_keep_alive_mode(wl
, wlvif
, false);
3788 /* restore the bssid filter and go to dummy bssid */
3790 u32 conf_flags
= wl
->hw
->conf
.flags
;
3792 * we might have to disable roc, if there was
3793 * no IF_OPER_UP notification.
3796 ret
= wl12xx_croc(wl
, wlvif
->role_id
);
3801 * (we also need to disable roc in case of
3802 * roaming on the same channel. until we will
3803 * have a better flow...)
3805 if (test_bit(wlvif
->dev_role_id
, wl
->roc_map
)) {
3806 ret
= wl12xx_croc(wl
,
3807 wlvif
->dev_role_id
);
3812 wl1271_unjoin(wl
, wlvif
);
3813 if (!(conf_flags
& IEEE80211_CONF_IDLE
))
3814 wl12xx_start_dev(wl
, wlvif
);
3819 if (changed
& BSS_CHANGED_IBSS
) {
3820 wl1271_debug(DEBUG_ADHOC
, "ibss_joined: %d",
3821 bss_conf
->ibss_joined
);
3823 if (bss_conf
->ibss_joined
) {
3824 u32 rates
= bss_conf
->basic_rates
;
3825 wlvif
->basic_rate_set
=
3826 wl1271_tx_enabled_rates_get(wl
, rates
,
3829 wl1271_tx_min_rate_get(wl
,
3830 wlvif
->basic_rate_set
);
3832 /* by default, use 11b + OFDM rates */
3833 wlvif
->rate_set
= CONF_TX_IBSS_DEFAULT_RATES
;
3834 ret
= wl1271_acx_sta_rate_policies(wl
, wlvif
);
3840 ret
= wl1271_bss_erp_info_changed(wl
, vif
, bss_conf
, changed
);
3844 if (changed
& BSS_CHANGED_ARP_FILTER
) {
3845 __be32 addr
= bss_conf
->arp_addr_list
[0];
3846 WARN_ON(wlvif
->bss_type
!= BSS_TYPE_STA_BSS
);
3848 if (bss_conf
->arp_addr_cnt
== 1 &&
3849 bss_conf
->arp_filter_enabled
) {
3851 * The template should have been configured only upon
3852 * association. however, it seems that the correct ip
3853 * isn't being set (when sending), so we have to
3854 * reconfigure the template upon every ip change.
3856 ret
= wl1271_cmd_build_arp_rsp(wl
, wlvif
, addr
);
3858 wl1271_warning("build arp rsp failed: %d", ret
);
3862 ret
= wl1271_acx_arp_ip_filter(wl
, wlvif
,
3863 ACX_ARP_FILTER_ARP_FILTERING
,
3866 ret
= wl1271_acx_arp_ip_filter(wl
, wlvif
, 0, addr
);
3873 ret
= wl1271_join(wl
, wlvif
, set_assoc
);
3875 wl1271_warning("cmd join failed %d", ret
);
3879 /* ROC until connected (after EAPOL exchange) */
3881 ret
= wl12xx_roc(wl
, wlvif
, wlvif
->role_id
);
3885 wl1271_check_operstate(wl
, wlvif
,
3886 ieee80211_get_operstate(vif
));
3889 * stop device role if started (we might already be in
3892 if (wl12xx_dev_role_started(wlvif
)) {
3893 ret
= wl12xx_stop_dev(wl
, wlvif
);
3898 /* If we want to go in PSM but we're not there yet */
3899 if (test_bit(WLVIF_FLAG_PSM_REQUESTED
, &wlvif
->flags
) &&
3900 !test_bit(WLVIF_FLAG_PSM
, &wlvif
->flags
)) {
3901 enum wl1271_cmd_ps_mode mode
;
3903 mode
= STATION_POWER_SAVE_MODE
;
3904 ret
= wl1271_ps_set_mode(wl
, wlvif
, mode
,
3912 /* Handle new association with HT. Do this after join. */
3914 if ((changed
& BSS_CHANGED_HT
) &&
3915 (bss_conf
->channel_type
!= NL80211_CHAN_NO_HT
)) {
3916 ret
= wl1271_acx_set_ht_capabilities(wl
,
3921 wl1271_warning("Set ht cap true failed %d",
3926 /* handle new association without HT and disassociation */
3927 else if (changed
& BSS_CHANGED_ASSOC
) {
3928 ret
= wl1271_acx_set_ht_capabilities(wl
,
3933 wl1271_warning("Set ht cap false failed %d",
3940 /* Handle HT information change. Done after join. */
3941 if ((changed
& BSS_CHANGED_HT
) &&
3942 (bss_conf
->channel_type
!= NL80211_CHAN_NO_HT
)) {
3943 ret
= wl1271_acx_set_ht_information(wl
, wlvif
,
3944 bss_conf
->ht_operation_mode
);
3946 wl1271_warning("Set ht information failed %d", ret
);
3955 static void wl1271_op_bss_info_changed(struct ieee80211_hw
*hw
,
3956 struct ieee80211_vif
*vif
,
3957 struct ieee80211_bss_conf
*bss_conf
,
3960 struct wl1271
*wl
= hw
->priv
;
3961 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
3962 bool is_ap
= (wlvif
->bss_type
== BSS_TYPE_AP_BSS
);
3965 wl1271_debug(DEBUG_MAC80211
, "mac80211 bss info changed 0x%x",
3968 mutex_lock(&wl
->mutex
);
3970 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
3973 if (unlikely(!test_bit(WLVIF_FLAG_INITIALIZED
, &wlvif
->flags
)))
3976 ret
= wl1271_ps_elp_wakeup(wl
);
3981 wl1271_bss_info_changed_ap(wl
, vif
, bss_conf
, changed
);
3983 wl1271_bss_info_changed_sta(wl
, vif
, bss_conf
, changed
);
3985 wl1271_ps_elp_sleep(wl
);
3988 mutex_unlock(&wl
->mutex
);
3991 static int wl1271_op_conf_tx(struct ieee80211_hw
*hw
,
3992 struct ieee80211_vif
*vif
, u16 queue
,
3993 const struct ieee80211_tx_queue_params
*params
)
3995 struct wl1271
*wl
= hw
->priv
;
3996 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
4000 mutex_lock(&wl
->mutex
);
4002 wl1271_debug(DEBUG_MAC80211
, "mac80211 conf tx %d", queue
);
4005 ps_scheme
= CONF_PS_SCHEME_UPSD_TRIGGER
;
4007 ps_scheme
= CONF_PS_SCHEME_LEGACY
;
4009 if (!test_bit(WLVIF_FLAG_INITIALIZED
, &wlvif
->flags
))
4012 ret
= wl1271_ps_elp_wakeup(wl
);
4017 * the txop is confed in units of 32us by the mac80211,
4020 ret
= wl1271_acx_ac_cfg(wl
, wlvif
, wl1271_tx_get_queue(queue
),
4021 params
->cw_min
, params
->cw_max
,
4022 params
->aifs
, params
->txop
<< 5);
4026 ret
= wl1271_acx_tid_cfg(wl
, wlvif
, wl1271_tx_get_queue(queue
),
4027 CONF_CHANNEL_TYPE_EDCF
,
4028 wl1271_tx_get_queue(queue
),
4029 ps_scheme
, CONF_ACK_POLICY_LEGACY
,
4033 wl1271_ps_elp_sleep(wl
);
4036 mutex_unlock(&wl
->mutex
);
4041 static u64
wl1271_op_get_tsf(struct ieee80211_hw
*hw
,
4042 struct ieee80211_vif
*vif
)
4045 struct wl1271
*wl
= hw
->priv
;
4046 u64 mactime
= ULLONG_MAX
;
4049 wl1271_debug(DEBUG_MAC80211
, "mac80211 get tsf");
4051 mutex_lock(&wl
->mutex
);
4053 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
4056 ret
= wl1271_ps_elp_wakeup(wl
);
4060 ret
= wl1271_acx_tsf_info(wl
, &mactime
);
4065 wl1271_ps_elp_sleep(wl
);
4068 mutex_unlock(&wl
->mutex
);
4072 static int wl1271_op_get_survey(struct ieee80211_hw
*hw
, int idx
,
4073 struct survey_info
*survey
)
4075 struct wl1271
*wl
= hw
->priv
;
4076 struct ieee80211_conf
*conf
= &hw
->conf
;
4081 survey
->channel
= conf
->channel
;
4082 survey
->filled
= SURVEY_INFO_NOISE_DBM
;
4083 survey
->noise
= wl
->noise
;
4088 static int wl1271_allocate_sta(struct wl1271
*wl
,
4089 struct wl12xx_vif
*wlvif
,
4090 struct ieee80211_sta
*sta
)
4092 struct wl1271_station
*wl_sta
;
4096 if (wl
->active_sta_count
>= AP_MAX_STATIONS
) {
4097 wl1271_warning("could not allocate HLID - too much stations");
4101 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
4102 ret
= wl12xx_allocate_link(wl
, wlvif
, &wl_sta
->hlid
);
4104 wl1271_warning("could not allocate HLID - too many links");
4108 set_bit(wl_sta
->hlid
, wlvif
->ap
.sta_hlid_map
);
4109 memcpy(wl
->links
[wl_sta
->hlid
].addr
, sta
->addr
, ETH_ALEN
);
4110 wl
->active_sta_count
++;
4114 void wl1271_free_sta(struct wl1271
*wl
, struct wl12xx_vif
*wlvif
, u8 hlid
)
4116 if (!test_bit(hlid
, wlvif
->ap
.sta_hlid_map
))
4119 clear_bit(hlid
, wlvif
->ap
.sta_hlid_map
);
4120 memset(wl
->links
[hlid
].addr
, 0, ETH_ALEN
);
4121 wl
->links
[hlid
].ba_bitmap
= 0;
4122 wl1271_tx_reset_link_queues(wl
, hlid
);
4123 __clear_bit(hlid
, &wl
->ap_ps_map
);
4124 __clear_bit(hlid
, (unsigned long *)&wl
->ap_fw_ps_map
);
4125 wl12xx_free_link(wl
, wlvif
, &hlid
);
4126 wl
->active_sta_count
--;
4129 static int wl1271_op_sta_add(struct ieee80211_hw
*hw
,
4130 struct ieee80211_vif
*vif
,
4131 struct ieee80211_sta
*sta
)
4133 struct wl1271
*wl
= hw
->priv
;
4134 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
4135 struct wl1271_station
*wl_sta
;
4139 mutex_lock(&wl
->mutex
);
4141 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
4144 if (wlvif
->bss_type
!= BSS_TYPE_AP_BSS
)
4147 wl1271_debug(DEBUG_MAC80211
, "mac80211 add sta %d", (int)sta
->aid
);
4149 ret
= wl1271_allocate_sta(wl
, wlvif
, sta
);
4153 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
4154 hlid
= wl_sta
->hlid
;
4156 ret
= wl1271_ps_elp_wakeup(wl
);
4160 ret
= wl12xx_cmd_add_peer(wl
, wlvif
, sta
, hlid
);
4164 ret
= wl12xx_cmd_set_peer_state(wl
, hlid
);
4168 ret
= wl1271_acx_set_ht_capabilities(wl
, &sta
->ht_cap
, true, hlid
);
4173 wl1271_ps_elp_sleep(wl
);
4177 wl1271_free_sta(wl
, wlvif
, hlid
);
4180 mutex_unlock(&wl
->mutex
);
4184 static int wl1271_op_sta_remove(struct ieee80211_hw
*hw
,
4185 struct ieee80211_vif
*vif
,
4186 struct ieee80211_sta
*sta
)
4188 struct wl1271
*wl
= hw
->priv
;
4189 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
4190 struct wl1271_station
*wl_sta
;
4193 mutex_lock(&wl
->mutex
);
4195 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
4198 if (wlvif
->bss_type
!= BSS_TYPE_AP_BSS
)
4201 wl1271_debug(DEBUG_MAC80211
, "mac80211 remove sta %d", (int)sta
->aid
);
4203 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
4205 if (WARN_ON(!test_bit(id
, wlvif
->ap
.sta_hlid_map
)))
4208 ret
= wl1271_ps_elp_wakeup(wl
);
4212 ret
= wl12xx_cmd_remove_peer(wl
, wl_sta
->hlid
);
4216 wl1271_free_sta(wl
, wlvif
, wl_sta
->hlid
);
4219 wl1271_ps_elp_sleep(wl
);
4222 mutex_unlock(&wl
->mutex
);
4226 static int wl1271_op_ampdu_action(struct ieee80211_hw
*hw
,
4227 struct ieee80211_vif
*vif
,
4228 enum ieee80211_ampdu_mlme_action action
,
4229 struct ieee80211_sta
*sta
, u16 tid
, u16
*ssn
,
4232 struct wl1271
*wl
= hw
->priv
;
4233 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
4235 u8 hlid
, *ba_bitmap
;
4237 wl1271_debug(DEBUG_MAC80211
, "mac80211 ampdu action %d tid %d", action
,
4240 /* sanity check - the fields in FW are only 8bits wide */
4241 if (WARN_ON(tid
> 0xFF))
4244 mutex_lock(&wl
->mutex
);
4246 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
4251 if (wlvif
->bss_type
== BSS_TYPE_STA_BSS
) {
4252 hlid
= wlvif
->sta
.hlid
;
4253 ba_bitmap
= &wlvif
->sta
.ba_rx_bitmap
;
4254 } else if (wlvif
->bss_type
== BSS_TYPE_AP_BSS
) {
4255 struct wl1271_station
*wl_sta
;
4257 wl_sta
= (struct wl1271_station
*)sta
->drv_priv
;
4258 hlid
= wl_sta
->hlid
;
4259 ba_bitmap
= &wl
->links
[hlid
].ba_bitmap
;
4265 ret
= wl1271_ps_elp_wakeup(wl
);
4269 wl1271_debug(DEBUG_MAC80211
, "mac80211 ampdu: Rx tid %d action %d",
4273 case IEEE80211_AMPDU_RX_START
:
4274 if (!wlvif
->ba_support
|| !wlvif
->ba_allowed
) {
4279 if (wl
->ba_rx_session_count
>= RX_BA_MAX_SESSIONS
) {
4281 wl1271_error("exceeded max RX BA sessions");
4285 if (*ba_bitmap
& BIT(tid
)) {
4287 wl1271_error("cannot enable RX BA session on active "
4292 ret
= wl12xx_acx_set_ba_receiver_session(wl
, tid
, *ssn
, true,
4295 *ba_bitmap
|= BIT(tid
);
4296 wl
->ba_rx_session_count
++;
4300 case IEEE80211_AMPDU_RX_STOP
:
4301 if (!(*ba_bitmap
& BIT(tid
))) {
4303 wl1271_error("no active RX BA session on tid: %d",
4308 ret
= wl12xx_acx_set_ba_receiver_session(wl
, tid
, 0, false,
4311 *ba_bitmap
&= ~BIT(tid
);
4312 wl
->ba_rx_session_count
--;
4317 * The BA initiator session management in FW independently.
4318 * Falling break here on purpose for all TX APDU commands.
4320 case IEEE80211_AMPDU_TX_START
:
4321 case IEEE80211_AMPDU_TX_STOP
:
4322 case IEEE80211_AMPDU_TX_OPERATIONAL
:
4327 wl1271_error("Incorrect ampdu action id=%x\n", action
);
4331 wl1271_ps_elp_sleep(wl
);
4334 mutex_unlock(&wl
->mutex
);
4339 static int wl12xx_set_bitrate_mask(struct ieee80211_hw
*hw
,
4340 struct ieee80211_vif
*vif
,
4341 const struct cfg80211_bitrate_mask
*mask
)
4343 struct wl12xx_vif
*wlvif
= wl12xx_vif_to_data(vif
);
4344 struct wl1271
*wl
= hw
->priv
;
4347 wl1271_debug(DEBUG_MAC80211
, "mac80211 set_bitrate_mask 0x%x 0x%x",
4348 mask
->control
[NL80211_BAND_2GHZ
].legacy
,
4349 mask
->control
[NL80211_BAND_5GHZ
].legacy
);
4351 mutex_lock(&wl
->mutex
);
4353 for (i
= 0; i
< IEEE80211_NUM_BANDS
; i
++)
4354 wlvif
->bitrate_masks
[i
] =
4355 wl1271_tx_enabled_rates_get(wl
,
4356 mask
->control
[i
].legacy
,
4359 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
4362 if (wlvif
->bss_type
== BSS_TYPE_STA_BSS
&&
4363 !test_bit(WLVIF_FLAG_STA_ASSOCIATED
, &wlvif
->flags
)) {
4365 ret
= wl1271_ps_elp_wakeup(wl
);
4369 wl1271_set_band_rate(wl
, wlvif
);
4371 wl1271_tx_min_rate_get(wl
, wlvif
->basic_rate_set
);
4372 ret
= wl1271_acx_sta_rate_policies(wl
, wlvif
);
4374 wl1271_ps_elp_sleep(wl
);
4377 mutex_unlock(&wl
->mutex
);
4382 static void wl12xx_op_channel_switch(struct ieee80211_hw
*hw
,
4383 struct ieee80211_channel_switch
*ch_switch
)
4385 struct wl1271
*wl
= hw
->priv
;
4386 struct wl12xx_vif
*wlvif
;
4389 wl1271_debug(DEBUG_MAC80211
, "mac80211 channel switch");
4391 mutex_lock(&wl
->mutex
);
4393 if (unlikely(wl
->state
== WL1271_STATE_OFF
)) {
4394 wl12xx_for_each_wlvif_sta(wl
, wlvif
) {
4395 struct ieee80211_vif
*vif
= wl12xx_wlvif_to_vif(wlvif
);
4396 ieee80211_chswitch_done(vif
, false);
4401 ret
= wl1271_ps_elp_wakeup(wl
);
4405 /* TODO: change mac80211 to pass vif as param */
4406 wl12xx_for_each_wlvif_sta(wl
, wlvif
) {
4407 ret
= wl12xx_cmd_channel_switch(wl
, ch_switch
);
4410 set_bit(WLVIF_FLAG_CS_PROGRESS
, &wlvif
->flags
);
4413 wl1271_ps_elp_sleep(wl
);
4416 mutex_unlock(&wl
->mutex
);
4419 static bool wl1271_tx_frames_pending(struct ieee80211_hw
*hw
)
4421 struct wl1271
*wl
= hw
->priv
;
4424 mutex_lock(&wl
->mutex
);
4426 if (unlikely(wl
->state
== WL1271_STATE_OFF
))
4429 /* packets are considered pending if in the TX queue or the FW */
4430 ret
= (wl1271_tx_total_queue_count(wl
) > 0) || (wl
->tx_frames_cnt
> 0);
4432 mutex_unlock(&wl
->mutex
);
4437 /* can't be const, mac80211 writes to this */
4438 static struct ieee80211_rate wl1271_rates
[] = {
4440 .hw_value
= CONF_HW_BIT_RATE_1MBPS
,
4441 .hw_value_short
= CONF_HW_BIT_RATE_1MBPS
, },
4443 .hw_value
= CONF_HW_BIT_RATE_2MBPS
,
4444 .hw_value_short
= CONF_HW_BIT_RATE_2MBPS
,
4445 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
4447 .hw_value
= CONF_HW_BIT_RATE_5_5MBPS
,
4448 .hw_value_short
= CONF_HW_BIT_RATE_5_5MBPS
,
4449 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
4451 .hw_value
= CONF_HW_BIT_RATE_11MBPS
,
4452 .hw_value_short
= CONF_HW_BIT_RATE_11MBPS
,
4453 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
4455 .hw_value
= CONF_HW_BIT_RATE_6MBPS
,
4456 .hw_value_short
= CONF_HW_BIT_RATE_6MBPS
, },
4458 .hw_value
= CONF_HW_BIT_RATE_9MBPS
,
4459 .hw_value_short
= CONF_HW_BIT_RATE_9MBPS
, },
4461 .hw_value
= CONF_HW_BIT_RATE_12MBPS
,
4462 .hw_value_short
= CONF_HW_BIT_RATE_12MBPS
, },
4464 .hw_value
= CONF_HW_BIT_RATE_18MBPS
,
4465 .hw_value_short
= CONF_HW_BIT_RATE_18MBPS
, },
4467 .hw_value
= CONF_HW_BIT_RATE_24MBPS
,
4468 .hw_value_short
= CONF_HW_BIT_RATE_24MBPS
, },
4470 .hw_value
= CONF_HW_BIT_RATE_36MBPS
,
4471 .hw_value_short
= CONF_HW_BIT_RATE_36MBPS
, },
4473 .hw_value
= CONF_HW_BIT_RATE_48MBPS
,
4474 .hw_value_short
= CONF_HW_BIT_RATE_48MBPS
, },
4476 .hw_value
= CONF_HW_BIT_RATE_54MBPS
,
4477 .hw_value_short
= CONF_HW_BIT_RATE_54MBPS
, },
4480 /* can't be const, mac80211 writes to this */
4481 static struct ieee80211_channel wl1271_channels
[] = {
4482 { .hw_value
= 1, .center_freq
= 2412, .max_power
= 25 },
4483 { .hw_value
= 2, .center_freq
= 2417, .max_power
= 25 },
4484 { .hw_value
= 3, .center_freq
= 2422, .max_power
= 25 },
4485 { .hw_value
= 4, .center_freq
= 2427, .max_power
= 25 },
4486 { .hw_value
= 5, .center_freq
= 2432, .max_power
= 25 },
4487 { .hw_value
= 6, .center_freq
= 2437, .max_power
= 25 },
4488 { .hw_value
= 7, .center_freq
= 2442, .max_power
= 25 },
4489 { .hw_value
= 8, .center_freq
= 2447, .max_power
= 25 },
4490 { .hw_value
= 9, .center_freq
= 2452, .max_power
= 25 },
4491 { .hw_value
= 10, .center_freq
= 2457, .max_power
= 25 },
4492 { .hw_value
= 11, .center_freq
= 2462, .max_power
= 25 },
4493 { .hw_value
= 12, .center_freq
= 2467, .max_power
= 25 },
4494 { .hw_value
= 13, .center_freq
= 2472, .max_power
= 25 },
4495 { .hw_value
= 14, .center_freq
= 2484, .max_power
= 25 },
4498 /* mapping to indexes for wl1271_rates */
4499 static const u8 wl1271_rate_to_idx_2ghz
[] = {
4500 /* MCS rates are used only with 11n */
4501 7, /* CONF_HW_RXTX_RATE_MCS7 */
4502 6, /* CONF_HW_RXTX_RATE_MCS6 */
4503 5, /* CONF_HW_RXTX_RATE_MCS5 */
4504 4, /* CONF_HW_RXTX_RATE_MCS4 */
4505 3, /* CONF_HW_RXTX_RATE_MCS3 */
4506 2, /* CONF_HW_RXTX_RATE_MCS2 */
4507 1, /* CONF_HW_RXTX_RATE_MCS1 */
4508 0, /* CONF_HW_RXTX_RATE_MCS0 */
4510 11, /* CONF_HW_RXTX_RATE_54 */
4511 10, /* CONF_HW_RXTX_RATE_48 */
4512 9, /* CONF_HW_RXTX_RATE_36 */
4513 8, /* CONF_HW_RXTX_RATE_24 */
4515 /* TI-specific rate */
4516 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_22 */
4518 7, /* CONF_HW_RXTX_RATE_18 */
4519 6, /* CONF_HW_RXTX_RATE_12 */
4520 3, /* CONF_HW_RXTX_RATE_11 */
4521 5, /* CONF_HW_RXTX_RATE_9 */
4522 4, /* CONF_HW_RXTX_RATE_6 */
4523 2, /* CONF_HW_RXTX_RATE_5_5 */
4524 1, /* CONF_HW_RXTX_RATE_2 */
4525 0 /* CONF_HW_RXTX_RATE_1 */
4528 /* 11n STA capabilities */
4529 #define HW_RX_HIGHEST_RATE 72
4531 #define WL12XX_HT_CAP { \
4532 .cap = IEEE80211_HT_CAP_GRN_FLD | IEEE80211_HT_CAP_SGI_20 | \
4533 (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT), \
4534 .ht_supported = true, \
4535 .ampdu_factor = IEEE80211_HT_MAX_AMPDU_8K, \
4536 .ampdu_density = IEEE80211_HT_MPDU_DENSITY_8, \
4538 .rx_mask = { 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, \
4539 .rx_highest = cpu_to_le16(HW_RX_HIGHEST_RATE), \
4540 .tx_params = IEEE80211_HT_MCS_TX_DEFINED, \
4544 /* can't be const, mac80211 writes to this */
4545 static struct ieee80211_supported_band wl1271_band_2ghz
= {
4546 .channels
= wl1271_channels
,
4547 .n_channels
= ARRAY_SIZE(wl1271_channels
),
4548 .bitrates
= wl1271_rates
,
4549 .n_bitrates
= ARRAY_SIZE(wl1271_rates
),
4550 .ht_cap
= WL12XX_HT_CAP
,
4553 /* 5 GHz data rates for WL1273 */
4554 static struct ieee80211_rate wl1271_rates_5ghz
[] = {
4556 .hw_value
= CONF_HW_BIT_RATE_6MBPS
,
4557 .hw_value_short
= CONF_HW_BIT_RATE_6MBPS
, },
4559 .hw_value
= CONF_HW_BIT_RATE_9MBPS
,
4560 .hw_value_short
= CONF_HW_BIT_RATE_9MBPS
, },
4562 .hw_value
= CONF_HW_BIT_RATE_12MBPS
,
4563 .hw_value_short
= CONF_HW_BIT_RATE_12MBPS
, },
4565 .hw_value
= CONF_HW_BIT_RATE_18MBPS
,
4566 .hw_value_short
= CONF_HW_BIT_RATE_18MBPS
, },
4568 .hw_value
= CONF_HW_BIT_RATE_24MBPS
,
4569 .hw_value_short
= CONF_HW_BIT_RATE_24MBPS
, },
4571 .hw_value
= CONF_HW_BIT_RATE_36MBPS
,
4572 .hw_value_short
= CONF_HW_BIT_RATE_36MBPS
, },
4574 .hw_value
= CONF_HW_BIT_RATE_48MBPS
,
4575 .hw_value_short
= CONF_HW_BIT_RATE_48MBPS
, },
4577 .hw_value
= CONF_HW_BIT_RATE_54MBPS
,
4578 .hw_value_short
= CONF_HW_BIT_RATE_54MBPS
, },
4581 /* 5 GHz band channels for WL1273 */
4582 static struct ieee80211_channel wl1271_channels_5ghz
[] = {
4583 { .hw_value
= 7, .center_freq
= 5035, .max_power
= 25 },
4584 { .hw_value
= 8, .center_freq
= 5040, .max_power
= 25 },
4585 { .hw_value
= 9, .center_freq
= 5045, .max_power
= 25 },
4586 { .hw_value
= 11, .center_freq
= 5055, .max_power
= 25 },
4587 { .hw_value
= 12, .center_freq
= 5060, .max_power
= 25 },
4588 { .hw_value
= 16, .center_freq
= 5080, .max_power
= 25 },
4589 { .hw_value
= 34, .center_freq
= 5170, .max_power
= 25 },
4590 { .hw_value
= 36, .center_freq
= 5180, .max_power
= 25 },
4591 { .hw_value
= 38, .center_freq
= 5190, .max_power
= 25 },
4592 { .hw_value
= 40, .center_freq
= 5200, .max_power
= 25 },
4593 { .hw_value
= 42, .center_freq
= 5210, .max_power
= 25 },
4594 { .hw_value
= 44, .center_freq
= 5220, .max_power
= 25 },
4595 { .hw_value
= 46, .center_freq
= 5230, .max_power
= 25 },
4596 { .hw_value
= 48, .center_freq
= 5240, .max_power
= 25 },
4597 { .hw_value
= 52, .center_freq
= 5260, .max_power
= 25 },
4598 { .hw_value
= 56, .center_freq
= 5280, .max_power
= 25 },
4599 { .hw_value
= 60, .center_freq
= 5300, .max_power
= 25 },
4600 { .hw_value
= 64, .center_freq
= 5320, .max_power
= 25 },
4601 { .hw_value
= 100, .center_freq
= 5500, .max_power
= 25 },
4602 { .hw_value
= 104, .center_freq
= 5520, .max_power
= 25 },
4603 { .hw_value
= 108, .center_freq
= 5540, .max_power
= 25 },
4604 { .hw_value
= 112, .center_freq
= 5560, .max_power
= 25 },
4605 { .hw_value
= 116, .center_freq
= 5580, .max_power
= 25 },
4606 { .hw_value
= 120, .center_freq
= 5600, .max_power
= 25 },
4607 { .hw_value
= 124, .center_freq
= 5620, .max_power
= 25 },
4608 { .hw_value
= 128, .center_freq
= 5640, .max_power
= 25 },
4609 { .hw_value
= 132, .center_freq
= 5660, .max_power
= 25 },
4610 { .hw_value
= 136, .center_freq
= 5680, .max_power
= 25 },
4611 { .hw_value
= 140, .center_freq
= 5700, .max_power
= 25 },
4612 { .hw_value
= 149, .center_freq
= 5745, .max_power
= 25 },
4613 { .hw_value
= 153, .center_freq
= 5765, .max_power
= 25 },
4614 { .hw_value
= 157, .center_freq
= 5785, .max_power
= 25 },
4615 { .hw_value
= 161, .center_freq
= 5805, .max_power
= 25 },
4616 { .hw_value
= 165, .center_freq
= 5825, .max_power
= 25 },
4619 /* mapping to indexes for wl1271_rates_5ghz */
4620 static const u8 wl1271_rate_to_idx_5ghz
[] = {
4621 /* MCS rates are used only with 11n */
4622 7, /* CONF_HW_RXTX_RATE_MCS7 */
4623 6, /* CONF_HW_RXTX_RATE_MCS6 */
4624 5, /* CONF_HW_RXTX_RATE_MCS5 */
4625 4, /* CONF_HW_RXTX_RATE_MCS4 */
4626 3, /* CONF_HW_RXTX_RATE_MCS3 */
4627 2, /* CONF_HW_RXTX_RATE_MCS2 */
4628 1, /* CONF_HW_RXTX_RATE_MCS1 */
4629 0, /* CONF_HW_RXTX_RATE_MCS0 */
4631 7, /* CONF_HW_RXTX_RATE_54 */
4632 6, /* CONF_HW_RXTX_RATE_48 */
4633 5, /* CONF_HW_RXTX_RATE_36 */
4634 4, /* CONF_HW_RXTX_RATE_24 */
4636 /* TI-specific rate */
4637 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_22 */
4639 3, /* CONF_HW_RXTX_RATE_18 */
4640 2, /* CONF_HW_RXTX_RATE_12 */
4641 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_11 */
4642 1, /* CONF_HW_RXTX_RATE_9 */
4643 0, /* CONF_HW_RXTX_RATE_6 */
4644 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_5_5 */
4645 CONF_HW_RXTX_RATE_UNSUPPORTED
, /* CONF_HW_RXTX_RATE_2 */
4646 CONF_HW_RXTX_RATE_UNSUPPORTED
/* CONF_HW_RXTX_RATE_1 */
4649 static struct ieee80211_supported_band wl1271_band_5ghz
= {
4650 .channels
= wl1271_channels_5ghz
,
4651 .n_channels
= ARRAY_SIZE(wl1271_channels_5ghz
),
4652 .bitrates
= wl1271_rates_5ghz
,
4653 .n_bitrates
= ARRAY_SIZE(wl1271_rates_5ghz
),
4654 .ht_cap
= WL12XX_HT_CAP
,
4657 static const u8
*wl1271_band_rate_to_idx
[] = {
4658 [IEEE80211_BAND_2GHZ
] = wl1271_rate_to_idx_2ghz
,
4659 [IEEE80211_BAND_5GHZ
] = wl1271_rate_to_idx_5ghz
4662 static const struct ieee80211_ops wl1271_ops
= {
4663 .start
= wl1271_op_start
,
4664 .stop
= wl1271_op_stop
,
4665 .add_interface
= wl1271_op_add_interface
,
4666 .remove_interface
= wl1271_op_remove_interface
,
4667 .change_interface
= wl12xx_op_change_interface
,
4669 .suspend
= wl1271_op_suspend
,
4670 .resume
= wl1271_op_resume
,
4672 .config
= wl1271_op_config
,
4673 .prepare_multicast
= wl1271_op_prepare_multicast
,
4674 .configure_filter
= wl1271_op_configure_filter
,
4676 .set_key
= wl1271_op_set_key
,
4677 .hw_scan
= wl1271_op_hw_scan
,
4678 .cancel_hw_scan
= wl1271_op_cancel_hw_scan
,
4679 .sched_scan_start
= wl1271_op_sched_scan_start
,
4680 .sched_scan_stop
= wl1271_op_sched_scan_stop
,
4681 .bss_info_changed
= wl1271_op_bss_info_changed
,
4682 .set_frag_threshold
= wl1271_op_set_frag_threshold
,
4683 .set_rts_threshold
= wl1271_op_set_rts_threshold
,
4684 .conf_tx
= wl1271_op_conf_tx
,
4685 .get_tsf
= wl1271_op_get_tsf
,
4686 .get_survey
= wl1271_op_get_survey
,
4687 .sta_add
= wl1271_op_sta_add
,
4688 .sta_remove
= wl1271_op_sta_remove
,
4689 .ampdu_action
= wl1271_op_ampdu_action
,
4690 .tx_frames_pending
= wl1271_tx_frames_pending
,
4691 .set_bitrate_mask
= wl12xx_set_bitrate_mask
,
4692 .channel_switch
= wl12xx_op_channel_switch
,
4693 CFG80211_TESTMODE_CMD(wl1271_tm_cmd
)
4697 u8
wl1271_rate_to_idx(int rate
, enum ieee80211_band band
)
4701 BUG_ON(band
>= sizeof(wl1271_band_rate_to_idx
)/sizeof(u8
*));
4703 if (unlikely(rate
>= CONF_HW_RXTX_RATE_MAX
)) {
4704 wl1271_error("Illegal RX rate from HW: %d", rate
);
4708 idx
= wl1271_band_rate_to_idx
[band
][rate
];
4709 if (unlikely(idx
== CONF_HW_RXTX_RATE_UNSUPPORTED
)) {
4710 wl1271_error("Unsupported RX rate from HW: %d", rate
);
4717 static ssize_t
wl1271_sysfs_show_bt_coex_state(struct device
*dev
,
4718 struct device_attribute
*attr
,
4721 struct wl1271
*wl
= dev_get_drvdata(dev
);
4726 mutex_lock(&wl
->mutex
);
4727 len
= snprintf(buf
, len
, "%d\n\n0 - off\n1 - on\n",
4729 mutex_unlock(&wl
->mutex
);
4735 static ssize_t
wl1271_sysfs_store_bt_coex_state(struct device
*dev
,
4736 struct device_attribute
*attr
,
4737 const char *buf
, size_t count
)
4739 struct wl1271
*wl
= dev_get_drvdata(dev
);
4743 ret
= kstrtoul(buf
, 10, &res
);
4745 wl1271_warning("incorrect value written to bt_coex_mode");
4749 mutex_lock(&wl
->mutex
);
4753 if (res
== wl
->sg_enabled
)
4756 wl
->sg_enabled
= res
;
4758 if (wl
->state
== WL1271_STATE_OFF
)
4761 ret
= wl1271_ps_elp_wakeup(wl
);
4765 wl1271_acx_sg_enable(wl
, wl
->sg_enabled
);
4766 wl1271_ps_elp_sleep(wl
);
4769 mutex_unlock(&wl
->mutex
);
4773 static DEVICE_ATTR(bt_coex_state
, S_IRUGO
| S_IWUSR
,
4774 wl1271_sysfs_show_bt_coex_state
,
4775 wl1271_sysfs_store_bt_coex_state
);
4777 static ssize_t
wl1271_sysfs_show_hw_pg_ver(struct device
*dev
,
4778 struct device_attribute
*attr
,
4781 struct wl1271
*wl
= dev_get_drvdata(dev
);
4786 mutex_lock(&wl
->mutex
);
4787 if (wl
->hw_pg_ver
>= 0)
4788 len
= snprintf(buf
, len
, "%d\n", wl
->hw_pg_ver
);
4790 len
= snprintf(buf
, len
, "n/a\n");
4791 mutex_unlock(&wl
->mutex
);
4796 static DEVICE_ATTR(hw_pg_ver
, S_IRUGO
,
4797 wl1271_sysfs_show_hw_pg_ver
, NULL
);
4799 static ssize_t
wl1271_sysfs_read_fwlog(struct file
*filp
, struct kobject
*kobj
,
4800 struct bin_attribute
*bin_attr
,
4801 char *buffer
, loff_t pos
, size_t count
)
4803 struct device
*dev
= container_of(kobj
, struct device
, kobj
);
4804 struct wl1271
*wl
= dev_get_drvdata(dev
);
4808 ret
= mutex_lock_interruptible(&wl
->mutex
);
4810 return -ERESTARTSYS
;
4812 /* Let only one thread read the log at a time, blocking others */
4813 while (wl
->fwlog_size
== 0) {
4816 prepare_to_wait_exclusive(&wl
->fwlog_waitq
,
4818 TASK_INTERRUPTIBLE
);
4820 if (wl
->fwlog_size
!= 0) {
4821 finish_wait(&wl
->fwlog_waitq
, &wait
);
4825 mutex_unlock(&wl
->mutex
);
4828 finish_wait(&wl
->fwlog_waitq
, &wait
);
4830 if (signal_pending(current
))
4831 return -ERESTARTSYS
;
4833 ret
= mutex_lock_interruptible(&wl
->mutex
);
4835 return -ERESTARTSYS
;
4838 /* Check if the fwlog is still valid */
4839 if (wl
->fwlog_size
< 0) {
4840 mutex_unlock(&wl
->mutex
);
4844 /* Seeking is not supported - old logs are not kept. Disregard pos. */
4845 len
= min(count
, (size_t)wl
->fwlog_size
);
4846 wl
->fwlog_size
-= len
;
4847 memcpy(buffer
, wl
->fwlog
, len
);
4849 /* Make room for new messages */
4850 memmove(wl
->fwlog
, wl
->fwlog
+ len
, wl
->fwlog_size
);
4852 mutex_unlock(&wl
->mutex
);
4857 static struct bin_attribute fwlog_attr
= {
4858 .attr
= {.name
= "fwlog", .mode
= S_IRUSR
},
4859 .read
= wl1271_sysfs_read_fwlog
,
4862 static bool wl12xx_mac_in_fuse(struct wl1271
*wl
)
4864 bool supported
= false;
4867 if (wl
->chip
.id
== CHIP_ID_1283_PG20
) {
4868 major
= WL128X_PG_GET_MAJOR(wl
->hw_pg_ver
);
4869 minor
= WL128X_PG_GET_MINOR(wl
->hw_pg_ver
);
4871 /* in wl128x we have the MAC address if the PG is >= (2, 1) */
4872 if (major
> 2 || (major
== 2 && minor
>= 1))
4875 major
= WL127X_PG_GET_MAJOR(wl
->hw_pg_ver
);
4876 minor
= WL127X_PG_GET_MINOR(wl
->hw_pg_ver
);
4878 /* in wl127x we have the MAC address if the PG is >= (3, 1) */
4879 if (major
== 3 && minor
>= 1)
4883 wl1271_debug(DEBUG_PROBE
,
4884 "PG Ver major = %d minor = %d, MAC %s present",
4885 major
, minor
, supported
? "is" : "is not");
4890 static void wl12xx_derive_mac_addresses(struct wl1271
*wl
,
4891 u32 oui
, u32 nic
, int n
)
4895 wl1271_debug(DEBUG_PROBE
, "base address: oui %06x nic %06x, n %d",
4898 if (nic
+ n
- 1 > 0xffffff)
4899 wl1271_warning("NIC part of the MAC address wraps around!");
4901 for (i
= 0; i
< n
; i
++) {
4902 wl
->addresses
[i
].addr
[0] = (u8
)(oui
>> 16);
4903 wl
->addresses
[i
].addr
[1] = (u8
)(oui
>> 8);
4904 wl
->addresses
[i
].addr
[2] = (u8
) oui
;
4905 wl
->addresses
[i
].addr
[3] = (u8
)(nic
>> 16);
4906 wl
->addresses
[i
].addr
[4] = (u8
)(nic
>> 8);
4907 wl
->addresses
[i
].addr
[5] = (u8
) nic
;
4911 wl
->hw
->wiphy
->n_addresses
= n
;
4912 wl
->hw
->wiphy
->addresses
= wl
->addresses
;
4915 static void wl12xx_get_fuse_mac(struct wl1271
*wl
)
4919 wl1271_set_partition(wl
, &wl12xx_part_table
[PART_DRPW
]);
4921 mac1
= wl1271_read32(wl
, WL12XX_REG_FUSE_BD_ADDR_1
);
4922 mac2
= wl1271_read32(wl
, WL12XX_REG_FUSE_BD_ADDR_2
);
4924 /* these are the two parts of the BD_ADDR */
4925 wl
->fuse_oui_addr
= ((mac2
& 0xffff) << 8) +
4926 ((mac1
& 0xff000000) >> 24);
4927 wl
->fuse_nic_addr
= mac1
& 0xffffff;
4929 wl1271_set_partition(wl
, &wl12xx_part_table
[PART_DOWN
]);
4932 static int wl12xx_get_hw_info(struct wl1271
*wl
)
4937 ret
= wl12xx_set_power_on(wl
);
4941 wl
->chip
.id
= wl1271_read32(wl
, CHIP_ID_B
);
4943 if (wl
->chip
.id
== CHIP_ID_1283_PG20
)
4944 die_info
= wl1271_top_reg_read(wl
, WL128X_REG_FUSE_DATA_2_1
);
4946 die_info
= wl1271_top_reg_read(wl
, WL127X_REG_FUSE_DATA_2_1
);
4948 wl
->hw_pg_ver
= (s8
) (die_info
& PG_VER_MASK
) >> PG_VER_OFFSET
;
4950 if (!wl12xx_mac_in_fuse(wl
)) {
4951 wl
->fuse_oui_addr
= 0;
4952 wl
->fuse_nic_addr
= 0;
4954 wl12xx_get_fuse_mac(wl
);
4957 wl1271_power_off(wl
);
4962 static int wl1271_register_hw(struct wl1271
*wl
)
4965 u32 oui_addr
= 0, nic_addr
= 0;
4967 if (wl
->mac80211_registered
)
4970 ret
= wl12xx_get_hw_info(wl
);
4972 wl1271_error("couldn't get hw info");
4976 ret
= wl1271_fetch_nvs(wl
);
4978 /* NOTE: The wl->nvs->nvs element must be first, in
4979 * order to simplify the casting, we assume it is at
4980 * the beginning of the wl->nvs structure.
4982 u8
*nvs_ptr
= (u8
*)wl
->nvs
;
4985 (nvs_ptr
[11] << 16) + (nvs_ptr
[10] << 8) + nvs_ptr
[6];
4987 (nvs_ptr
[5] << 16) + (nvs_ptr
[4] << 8) + nvs_ptr
[3];
4990 /* if the MAC address is zeroed in the NVS derive from fuse */
4991 if (oui_addr
== 0 && nic_addr
== 0) {
4992 oui_addr
= wl
->fuse_oui_addr
;
4993 /* fuse has the BD_ADDR, the WLAN addresses are the next two */
4994 nic_addr
= wl
->fuse_nic_addr
+ 1;
4997 wl12xx_derive_mac_addresses(wl
, oui_addr
, nic_addr
, 2);
4999 ret
= ieee80211_register_hw(wl
->hw
);
5001 wl1271_error("unable to register mac80211 hw: %d", ret
);
5005 wl
->mac80211_registered
= true;
5007 wl1271_debugfs_init(wl
);
5009 register_netdevice_notifier(&wl1271_dev_notifier
);
5011 wl1271_notice("loaded");
5017 static void wl1271_unregister_hw(struct wl1271
*wl
)
5019 if (wl
->state
== WL1271_STATE_PLT
)
5020 wl1271_plt_stop(wl
);
5022 unregister_netdevice_notifier(&wl1271_dev_notifier
);
5023 ieee80211_unregister_hw(wl
->hw
);
5024 wl
->mac80211_registered
= false;
5028 static int wl1271_init_ieee80211(struct wl1271
*wl
)
5030 static const u32 cipher_suites
[] = {
5031 WLAN_CIPHER_SUITE_WEP40
,
5032 WLAN_CIPHER_SUITE_WEP104
,
5033 WLAN_CIPHER_SUITE_TKIP
,
5034 WLAN_CIPHER_SUITE_CCMP
,
5035 WL1271_CIPHER_SUITE_GEM
,
5038 /* The tx descriptor buffer and the TKIP space. */
5039 wl
->hw
->extra_tx_headroom
= WL1271_TKIP_IV_SPACE
+
5040 sizeof(struct wl1271_tx_hw_descr
);
5043 /* FIXME: find a proper value */
5044 wl
->hw
->channel_change_time
= 10000;
5045 wl
->hw
->max_listen_interval
= wl
->conf
.conn
.max_listen_interval
;
5047 wl
->hw
->flags
= IEEE80211_HW_SIGNAL_DBM
|
5048 IEEE80211_HW_SUPPORTS_PS
|
5049 IEEE80211_HW_SUPPORTS_UAPSD
|
5050 IEEE80211_HW_HAS_RATE_CONTROL
|
5051 IEEE80211_HW_CONNECTION_MONITOR
|
5052 IEEE80211_HW_REPORTS_TX_ACK_STATUS
|
5053 IEEE80211_HW_SPECTRUM_MGMT
|
5054 IEEE80211_HW_AP_LINK_PS
|
5055 IEEE80211_HW_AMPDU_AGGREGATION
|
5056 IEEE80211_HW_TX_AMPDU_SETUP_IN_HW
;
5058 wl
->hw
->wiphy
->cipher_suites
= cipher_suites
;
5059 wl
->hw
->wiphy
->n_cipher_suites
= ARRAY_SIZE(cipher_suites
);
5061 wl
->hw
->wiphy
->interface_modes
= BIT(NL80211_IFTYPE_STATION
) |
5062 BIT(NL80211_IFTYPE_ADHOC
) | BIT(NL80211_IFTYPE_AP
) |
5063 BIT(NL80211_IFTYPE_P2P_CLIENT
) | BIT(NL80211_IFTYPE_P2P_GO
);
5064 wl
->hw
->wiphy
->max_scan_ssids
= 1;
5065 wl
->hw
->wiphy
->max_sched_scan_ssids
= 16;
5066 wl
->hw
->wiphy
->max_match_sets
= 16;
5068 * Maximum length of elements in scanning probe request templates
5069 * should be the maximum length possible for a template, without
5070 * the IEEE80211 header of the template
5072 wl
->hw
->wiphy
->max_scan_ie_len
= WL1271_CMD_TEMPL_DFLT_SIZE
-
5073 sizeof(struct ieee80211_header
);
5075 wl
->hw
->wiphy
->max_sched_scan_ie_len
= WL1271_CMD_TEMPL_DFLT_SIZE
-
5076 sizeof(struct ieee80211_header
);
5078 wl
->hw
->wiphy
->flags
|= WIPHY_FLAG_AP_UAPSD
;
5080 /* make sure all our channels fit in the scanned_ch bitmask */
5081 BUILD_BUG_ON(ARRAY_SIZE(wl1271_channels
) +
5082 ARRAY_SIZE(wl1271_channels_5ghz
) >
5083 WL1271_MAX_CHANNELS
);
5085 * We keep local copies of the band structs because we need to
5086 * modify them on a per-device basis.
5088 memcpy(&wl
->bands
[IEEE80211_BAND_2GHZ
], &wl1271_band_2ghz
,
5089 sizeof(wl1271_band_2ghz
));
5090 memcpy(&wl
->bands
[IEEE80211_BAND_5GHZ
], &wl1271_band_5ghz
,
5091 sizeof(wl1271_band_5ghz
));
5093 wl
->hw
->wiphy
->bands
[IEEE80211_BAND_2GHZ
] =
5094 &wl
->bands
[IEEE80211_BAND_2GHZ
];
5095 wl
->hw
->wiphy
->bands
[IEEE80211_BAND_5GHZ
] =
5096 &wl
->bands
[IEEE80211_BAND_5GHZ
];
5099 wl
->hw
->max_rates
= 1;
5101 wl
->hw
->wiphy
->reg_notifier
= wl1271_reg_notify
;
5103 /* the FW answers probe-requests in AP-mode */
5104 wl
->hw
->wiphy
->flags
|= WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD
;
5105 wl
->hw
->wiphy
->probe_resp_offload
=
5106 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS
|
5107 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2
|
5108 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P
;
5110 SET_IEEE80211_DEV(wl
->hw
, wl
->dev
);
5112 wl
->hw
->sta_data_size
= sizeof(struct wl1271_station
);
5113 wl
->hw
->vif_data_size
= sizeof(struct wl12xx_vif
);
5115 wl
->hw
->max_rx_aggregation_subframes
= 8;
5120 #define WL1271_DEFAULT_CHANNEL 0
5122 static struct ieee80211_hw
*wl1271_alloc_hw(void)
5124 struct ieee80211_hw
*hw
;
5129 BUILD_BUG_ON(AP_MAX_STATIONS
> WL12XX_MAX_LINKS
);
5131 hw
= ieee80211_alloc_hw(sizeof(*wl
), &wl1271_ops
);
5133 wl1271_error("could not alloc ieee80211_hw");
5139 memset(wl
, 0, sizeof(*wl
));
5141 INIT_LIST_HEAD(&wl
->list
);
5142 INIT_LIST_HEAD(&wl
->wlvif_list
);
5146 for (i
= 0; i
< NUM_TX_QUEUES
; i
++)
5147 for (j
= 0; j
< WL12XX_MAX_LINKS
; j
++)
5148 skb_queue_head_init(&wl
->links
[j
].tx_queue
[i
]);
5150 skb_queue_head_init(&wl
->deferred_rx_queue
);
5151 skb_queue_head_init(&wl
->deferred_tx_queue
);
5153 INIT_DELAYED_WORK(&wl
->elp_work
, wl1271_elp_work
);
5154 INIT_WORK(&wl
->netstack_work
, wl1271_netstack_work
);
5155 INIT_WORK(&wl
->tx_work
, wl1271_tx_work
);
5156 INIT_WORK(&wl
->recovery_work
, wl1271_recovery_work
);
5157 INIT_DELAYED_WORK(&wl
->scan_complete_work
, wl1271_scan_complete_work
);
5159 wl
->freezable_wq
= create_freezable_workqueue("wl12xx_wq");
5160 if (!wl
->freezable_wq
) {
5165 wl
->channel
= WL1271_DEFAULT_CHANNEL
;
5167 wl
->power_level
= WL1271_DEFAULT_POWER_LEVEL
;
5168 wl
->band
= IEEE80211_BAND_2GHZ
;
5171 wl
->sg_enabled
= true;
5174 wl
->ap_fw_ps_map
= 0;
5176 wl
->platform_quirks
= 0;
5177 wl
->sched_scanning
= false;
5178 wl
->tx_spare_blocks
= TX_HW_BLOCK_SPARE_DEFAULT
;
5179 wl
->system_hlid
= WL12XX_SYSTEM_HLID
;
5180 wl
->active_sta_count
= 0;
5182 init_waitqueue_head(&wl
->fwlog_waitq
);
5184 /* The system link is always allocated */
5185 __set_bit(WL12XX_SYSTEM_HLID
, wl
->links_map
);
5187 memset(wl
->tx_frames_map
, 0, sizeof(wl
->tx_frames_map
));
5188 for (i
= 0; i
< ACX_TX_DESCRIPTORS
; i
++)
5189 wl
->tx_frames
[i
] = NULL
;
5191 spin_lock_init(&wl
->wl_lock
);
5193 wl
->state
= WL1271_STATE_OFF
;
5194 mutex_init(&wl
->mutex
);
5196 /* Apply default driver configuration. */
5197 wl1271_conf_init(wl
);
5199 order
= get_order(WL1271_AGGR_BUFFER_SIZE
);
5200 wl
->aggr_buf
= (u8
*)__get_free_pages(GFP_KERNEL
, order
);
5201 if (!wl
->aggr_buf
) {
5206 wl
->dummy_packet
= wl12xx_alloc_dummy_packet(wl
);
5207 if (!wl
->dummy_packet
) {
5212 /* Allocate one page for the FW log */
5213 wl
->fwlog
= (u8
*)get_zeroed_page(GFP_KERNEL
);
5216 goto err_dummy_packet
;
5222 dev_kfree_skb(wl
->dummy_packet
);
5225 free_pages((unsigned long)wl
->aggr_buf
, order
);
5228 destroy_workqueue(wl
->freezable_wq
);
5231 wl1271_debugfs_exit(wl
);
5232 ieee80211_free_hw(hw
);
5236 return ERR_PTR(ret
);
5239 static int wl1271_free_hw(struct wl1271
*wl
)
5241 /* Unblock any fwlog readers */
5242 mutex_lock(&wl
->mutex
);
5243 wl
->fwlog_size
= -1;
5244 wake_up_interruptible_all(&wl
->fwlog_waitq
);
5245 mutex_unlock(&wl
->mutex
);
5247 device_remove_bin_file(wl
->dev
, &fwlog_attr
);
5249 device_remove_file(wl
->dev
, &dev_attr_hw_pg_ver
);
5251 device_remove_file(wl
->dev
, &dev_attr_bt_coex_state
);
5252 free_page((unsigned long)wl
->fwlog
);
5253 dev_kfree_skb(wl
->dummy_packet
);
5254 free_pages((unsigned long)wl
->aggr_buf
,
5255 get_order(WL1271_AGGR_BUFFER_SIZE
));
5257 wl1271_debugfs_exit(wl
);
5264 kfree(wl
->fw_status
);
5265 kfree(wl
->tx_res_if
);
5266 destroy_workqueue(wl
->freezable_wq
);
5268 ieee80211_free_hw(wl
->hw
);
5273 static irqreturn_t
wl12xx_hardirq(int irq
, void *cookie
)
5275 struct wl1271
*wl
= cookie
;
5276 unsigned long flags
;
5278 wl1271_debug(DEBUG_IRQ
, "IRQ");
5280 /* complete the ELP completion */
5281 spin_lock_irqsave(&wl
->wl_lock
, flags
);
5282 set_bit(WL1271_FLAG_IRQ_RUNNING
, &wl
->flags
);
5283 if (wl
->elp_compl
) {
5284 complete(wl
->elp_compl
);
5285 wl
->elp_compl
= NULL
;
5288 if (test_bit(WL1271_FLAG_SUSPENDED
, &wl
->flags
)) {
5289 /* don't enqueue a work right now. mark it as pending */
5290 set_bit(WL1271_FLAG_PENDING_WORK
, &wl
->flags
);
5291 wl1271_debug(DEBUG_IRQ
, "should not enqueue work");
5292 disable_irq_nosync(wl
->irq
);
5293 pm_wakeup_event(wl
->dev
, 0);
5294 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
5297 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
5299 return IRQ_WAKE_THREAD
;
5302 static int __devinit
wl12xx_probe(struct platform_device
*pdev
)
5304 struct wl12xx_platform_data
*pdata
= pdev
->dev
.platform_data
;
5305 struct ieee80211_hw
*hw
;
5307 unsigned long irqflags
;
5310 hw
= wl1271_alloc_hw();
5312 wl1271_error("can't allocate hw");
5318 wl
->irq
= platform_get_irq(pdev
, 0);
5319 wl
->ref_clock
= pdata
->board_ref_clock
;
5320 wl
->tcxo_clock
= pdata
->board_tcxo_clock
;
5321 wl
->platform_quirks
= pdata
->platform_quirks
;
5322 wl
->set_power
= pdata
->set_power
;
5323 wl
->dev
= &pdev
->dev
;
5324 wl
->if_ops
= pdata
->ops
;
5326 platform_set_drvdata(pdev
, wl
);
5328 if (wl
->platform_quirks
& WL12XX_PLATFORM_QUIRK_EDGE_IRQ
)
5329 irqflags
= IRQF_TRIGGER_RISING
;
5331 irqflags
= IRQF_TRIGGER_HIGH
| IRQF_ONESHOT
;
5333 ret
= request_threaded_irq(wl
->irq
, wl12xx_hardirq
, wl1271_irq
,
5337 wl1271_error("request_irq() failed: %d", ret
);
5341 ret
= enable_irq_wake(wl
->irq
);
5343 wl
->irq_wake_enabled
= true;
5344 device_init_wakeup(wl
->dev
, 1);
5345 if (pdata
->pwr_in_suspend
)
5346 hw
->wiphy
->wowlan
.flags
= WIPHY_WOWLAN_ANY
;
5349 disable_irq(wl
->irq
);
5351 ret
= wl1271_init_ieee80211(wl
);
5355 ret
= wl1271_register_hw(wl
);
5359 /* Create sysfs file to control bt coex state */
5360 ret
= device_create_file(wl
->dev
, &dev_attr_bt_coex_state
);
5362 wl1271_error("failed to create sysfs file bt_coex_state");
5366 /* Create sysfs file to get HW PG version */
5367 ret
= device_create_file(wl
->dev
, &dev_attr_hw_pg_ver
);
5369 wl1271_error("failed to create sysfs file hw_pg_ver");
5370 goto out_bt_coex_state
;
5373 /* Create sysfs file for the FW log */
5374 ret
= device_create_bin_file(wl
->dev
, &fwlog_attr
);
5376 wl1271_error("failed to create sysfs file fwlog");
5383 device_remove_file(wl
->dev
, &dev_attr_hw_pg_ver
);
5386 device_remove_file(wl
->dev
, &dev_attr_bt_coex_state
);
5389 free_irq(wl
->irq
, wl
);
5398 static int __devexit
wl12xx_remove(struct platform_device
*pdev
)
5400 struct wl1271
*wl
= platform_get_drvdata(pdev
);
5402 if (wl
->irq_wake_enabled
) {
5403 device_init_wakeup(wl
->dev
, 0);
5404 disable_irq_wake(wl
->irq
);
5406 wl1271_unregister_hw(wl
);
5407 free_irq(wl
->irq
, wl
);
5413 static const struct platform_device_id wl12xx_id_table
[] __devinitconst
= {
5415 { } /* Terminating Entry */
5417 MODULE_DEVICE_TABLE(platform
, wl12xx_id_table
);
5419 static struct platform_driver wl12xx_driver
= {
5420 .probe
= wl12xx_probe
,
5421 .remove
= __devexit_p(wl12xx_remove
),
5422 .id_table
= wl12xx_id_table
,
5424 .name
= "wl12xx_driver",
5425 .owner
= THIS_MODULE
,
5429 static int __init
wl12xx_init(void)
5431 return platform_driver_register(&wl12xx_driver
);
5433 module_init(wl12xx_init
);
5435 static void __exit
wl12xx_exit(void)
5437 platform_driver_unregister(&wl12xx_driver
);
5439 module_exit(wl12xx_exit
);
5441 u32 wl12xx_debug_level
= DEBUG_NONE
;
5442 EXPORT_SYMBOL_GPL(wl12xx_debug_level
);
5443 module_param_named(debug_level
, wl12xx_debug_level
, uint
, S_IRUSR
| S_IWUSR
);
5444 MODULE_PARM_DESC(debug_level
, "wl12xx debugging level");
5446 module_param_named(fwlog
, fwlog_param
, charp
, 0);
5447 MODULE_PARM_DESC(keymap
,
5448 "FW logger options: continuous, ondemand, dbgpins or disable");
5450 module_param(bug_on_recovery
, bool, S_IRUSR
| S_IWUSR
);
5451 MODULE_PARM_DESC(bug_on_recovery
, "BUG() on fw recovery");
5453 MODULE_LICENSE("GPL");
5454 MODULE_AUTHOR("Luciano Coelho <coelho@ti.com>");
5455 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");