2 * This file is part of wl1271
4 * Copyright (C) 2008-2009 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/platform_device.h>
26 #include <linux/interrupt.h>
27 #include <linux/firmware.h>
28 #include <linux/delay.h>
29 #include <linux/irq.h>
30 #include <linux/spi/spi.h>
31 #include <linux/crc32.h>
32 #include <linux/etherdevice.h>
33 #include <linux/vmalloc.h>
34 #include <linux/spi/wl12xx.h>
35 #include <linux/inetdevice.h>
38 #include "wl12xx_80211.h"
39 #include "wl1271_reg.h"
40 #include "wl1271_spi.h"
41 #include "wl1271_event.h"
42 #include "wl1271_tx.h"
43 #include "wl1271_rx.h"
44 #include "wl1271_ps.h"
45 #include "wl1271_init.h"
46 #include "wl1271_debugfs.h"
47 #include "wl1271_cmd.h"
48 #include "wl1271_boot.h"
50 #define WL1271_BOOT_RETRIES 3
52 static struct conf_drv_settings default_conf = {
54 .per_threshold = 7500,
55 .max_scan_compensation_time = 120000,
56 .nfs_sample_interval = 400,
59 .probe_req_compensation = 170,
60 .scan_window_compensation = 50,
62 .beacon_miss_threshold = 60,
63 .rate_adaptation_threshold = CONF_HW_BIT_RATE_12MBPS,
64 .rate_adaptation_snr = 0
67 .rx_msdu_life_time = 512000,
68 .packet_detection_threshold = 0,
69 .ps_poll_timeout = 15,
71 .rts_threshold = 2347,
72 .rx_cca_threshold = 0,
73 .irq_blk_threshold = 0xFFFF,
74 .irq_pkt_threshold = 0,
76 .queue_type = CONF_RX_QUEUE_TYPE_LOW_PRIORITY,
79 .tx_energy_detection = 0,
81 .enabled_rates = CONF_HW_BIT_RATE_1MBPS |
82 CONF_HW_BIT_RATE_2MBPS,
83 .short_retry_limit = 10,
84 .long_retry_limit = 10,
107 .aifsn = CONF_TX_AIFS_PIFS,
114 .aifsn = CONF_TX_AIFS_PIFS,
122 .channel_type = CONF_CHANNEL_TYPE_DCF,
123 .tsid = CONF_TX_AC_BE,
124 .ps_scheme = CONF_PS_SCHEME_LEGACY,
125 .ack_policy = CONF_ACK_POLICY_LEGACY,
130 .channel_type = CONF_CHANNEL_TYPE_DCF,
131 .tsid = CONF_TX_AC_BE,
132 .ps_scheme = CONF_PS_SCHEME_LEGACY,
133 .ack_policy = CONF_ACK_POLICY_LEGACY,
138 .channel_type = CONF_CHANNEL_TYPE_DCF,
139 .tsid = CONF_TX_AC_BE,
140 .ps_scheme = CONF_PS_SCHEME_LEGACY,
141 .ack_policy = CONF_ACK_POLICY_LEGACY,
146 .channel_type = CONF_CHANNEL_TYPE_DCF,
147 .tsid = CONF_TX_AC_BE,
148 .ps_scheme = CONF_PS_SCHEME_LEGACY,
149 .ack_policy = CONF_ACK_POLICY_LEGACY,
154 .channel_type = CONF_CHANNEL_TYPE_DCF,
155 .tsid = CONF_TX_AC_BE,
156 .ps_scheme = CONF_PS_SCHEME_LEGACY,
157 .ack_policy = CONF_ACK_POLICY_LEGACY,
162 .channel_type = CONF_CHANNEL_TYPE_DCF,
163 .tsid = CONF_TX_AC_BE,
164 .ps_scheme = CONF_PS_SCHEME_LEGACY,
165 .ack_policy = CONF_ACK_POLICY_LEGACY,
170 .channel_type = CONF_CHANNEL_TYPE_DCF,
171 .tsid = CONF_TX_AC_BE,
172 .ps_scheme = CONF_PS_SCHEME_LEGACY,
173 .ack_policy = CONF_ACK_POLICY_LEGACY,
177 .frag_threshold = IEEE80211_MAX_FRAG_THRESHOLD,
178 .tx_compl_timeout = 700,
179 .tx_compl_threshold = 4
182 .wake_up_event = CONF_WAKE_UP_EVENT_DTIM,
183 .listen_interval = 0,
184 .bcn_filt_mode = CONF_BCN_FILT_MODE_ENABLED,
185 .bcn_filt_ie_count = 1,
188 .ie = WLAN_EID_CHANNEL_SWITCH,
189 .rule = CONF_BCN_RULE_PASS_ON_APPEARANCE,
192 .synch_fail_thold = 10,
193 .bss_lose_timeout = 100,
194 .beacon_rx_timeout = 10000,
195 .broadcast_timeout = 20000,
196 .rx_broadcast_in_ps = 1,
197 .ps_poll_threshold = 20,
198 .sig_trigger_count = 2,
203 .metric = CONF_TRIG_METRIC_RSSI_BEACON,
204 .type = CONF_TRIG_EVENT_TYPE_EDGE,
205 .direction = CONF_TRIG_EVENT_DIR_LOW,
213 .metric = CONF_TRIG_METRIC_RSSI_BEACON,
214 .type = CONF_TRIG_EVENT_TYPE_EDGE,
215 .direction = CONF_TRIG_EVENT_DIR_HIGH,
222 .rssi_bcn_avg_weight = 10,
223 .rssi_pkt_avg_weight = 10,
224 .snr_bcn_avg_weight = 10,
225 .snr_pkt_avg_weight = 10
227 .bet_enable = CONF_BET_MODE_ENABLE,
228 .bet_max_consecutive = 10,
229 .psm_entry_retries = 3
233 .ref_clk = CONF_REF_CLK_38_4_E,
235 .clk_valid_on_wakeup = 0,
237 .single_dual_band = CONF_SINGLE_BAND,
238 .tx_bip_fem_autodetect = 1,
239 .tx_bip_fem_manufacturer = 1,
242 .srf1 = { 0x07, 0x03, 0x18, 0x10, 0x05, 0xfb, 0xf0,
243 0xe8, 0, 0, 0, 0, 0, 0, 0, 0 },
244 .srf2 = { 0x07, 0x03, 0x18, 0x10, 0x05, 0xfb, 0xf0,
245 0xe8, 0, 0, 0, 0, 0, 0, 0, 0 },
246 .srf3 = { 0x07, 0x03, 0x18, 0x10, 0x05, 0xfb, 0xf0,
247 0xe8, 0, 0, 0, 0, 0, 0, 0, 0 },
248 .sr_debug_table = { 0, 0, 0, 0, 0, 0, 0, 0,
249 0, 0, 0, 0, 0, 0, 0, 0 },
251 .sr_sen_n_p_gain = 0,
256 .rx_trace_loss = 0x24,
257 .tx_trace_loss = 0x0,
258 .rx_rssi_and_proc_compens = {
259 0xec, 0xf6, 0x00, 0x0c, 0x18, 0xf8,
260 0xfc, 0x00, 0x80, 0x10, 0xf0, 0xf8,
262 .rx_trace_loss_5 = { 0, 0, 0, 0, 0, 0, 0 },
263 .tx_trace_loss_5 = { 0, 0, 0, 0, 0, 0, 0 },
264 .rx_rssi_and_proc_compens_5 = {
265 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
266 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
268 .tx_ref_pd_voltage = 0x1a9,
269 .tx_ref_power = 0x80,
271 .tx_rate_limits_normal = {
272 0x1d, 0x1f, 0x24, 0x28, 0x28, 0x29 },
273 .tx_rate_limits_degraded = {
274 0x19, 0x1f, 0x22, 0x23, 0x27, 0x28 },
275 .tx_rate_limits_extreme = {
276 0x19, 0x1c, 0x1e, 0x20, 0x24, 0x25 },
277 .tx_channel_limits_11b = {
278 0x22, 0x50, 0x50, 0x50, 0x50, 0x50,
279 0x50, 0x50, 0x50, 0x50, 0x22, 0x50,
281 .tx_channel_limits_ofdm = {
282 0x20, 0x50, 0x50, 0x50, 0x50, 0x50,
283 0x50, 0x50, 0x50, 0x50, 0x20, 0x50,
285 .tx_pdv_rate_offsets = {
286 0x07, 0x08, 0x04, 0x02, 0x02, 0x00 },
288 0x11, 0x11, 0x15, 0x11, 0x15, 0x0f },
289 .rx_fem_insertion_loss = 0x0e,
290 .degraded_low_to_normal_threshold = 0x1e,
291 .degraded_normal_to_high_threshold = 0x2d,
292 .tx_ref_pd_voltage_5 = {
293 0x0190, 0x01a4, 0x01c3, 0x01d8,
296 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 },
298 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
299 .tx_rate_limits_normal_5 = {
300 0x1b, 0x1e, 0x21, 0x23, 0x27, 0x00 },
301 .tx_rate_limits_degraded_5 = {
302 0x1b, 0x1e, 0x21, 0x23, 0x27, 0x00 },
303 .tx_rate_limits_extreme_5 = {
304 0x1b, 0x1e, 0x21, 0x23, 0x27, 0x00 },
305 .tx_channel_limits_ofdm_5 = {
306 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
307 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
308 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
309 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
311 .tx_pdv_rate_offsets_5 = {
312 0x01, 0x02, 0x02, 0x02, 0x02, 0x00 },
314 0x10, 0x10, 0x10, 0x10, 0x10, 0x10 },
315 .rx_fem_insertion_loss_5 = {
316 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10 },
317 .degraded_low_to_normal_threshold_5 = 0x00,
318 .degraded_normal_to_high_threshold_5 = 0x00
327 static LIST_HEAD(wl_list);
329 static void wl1271_conf_init(struct wl1271 *wl)
333 * This function applies the default configuration to the driver. This
334 * function is invoked upon driver load (spi probe.)
336 * The configuration is stored in a run-time structure in order to
337 * facilitate for run-time adjustment of any of the parameters. Making
338 * changes to the configuration structure will apply the new values on
339 * the next interface up (wl1271_op_start.)
342 /* apply driver default configuration */
343 memcpy(&wl->conf, &default_conf, sizeof(default_conf));
345 if (wl1271_11a_enabled())
346 wl->conf.init.genparam.single_dual_band = CONF_DUAL_BAND;
350 static int wl1271_plt_init(struct wl1271 *wl)
354 ret = wl1271_cmd_general_parms(wl);
358 ret = wl1271_cmd_radio_parms(wl);
362 ret = wl1271_acx_init_mem_config(wl);
366 ret = wl1271_cmd_data_path(wl, 1);
373 static void wl1271_disable_interrupts(struct wl1271 *wl)
375 disable_irq(wl->irq);
378 static void wl1271_power_off(struct wl1271 *wl)
380 wl->set_power(false);
381 clear_bit(WL1271_FLAG_GPIO_POWER, &wl->flags);
384 static void wl1271_power_on(struct wl1271 *wl)
387 set_bit(WL1271_FLAG_GPIO_POWER, &wl->flags);
390 static void wl1271_fw_status(struct wl1271 *wl,
391 struct wl1271_fw_status *status)
396 wl1271_spi_read(wl, FW_STATUS_ADDR, status,
397 sizeof(*status), false);
399 wl1271_debug(DEBUG_IRQ, "intr: 0x%x (fw_rx_counter = %d, "
400 "drv_rx_counter = %d, tx_results_counter = %d)",
402 status->fw_rx_counter,
403 status->drv_rx_counter,
404 status->tx_results_counter);
406 /* update number of available TX blocks */
407 for (i = 0; i < NUM_TX_QUEUES; i++) {
408 u32 cnt = le32_to_cpu(status->tx_released_blks[i]) -
409 wl->tx_blocks_freed[i];
411 wl->tx_blocks_freed[i] =
412 le32_to_cpu(status->tx_released_blks[i]);
413 wl->tx_blocks_available += cnt;
417 /* if more blocks are available now, schedule some tx work */
418 if (total && !skb_queue_empty(&wl->tx_queue))
419 ieee80211_queue_work(wl->hw, &wl->tx_work);
421 /* update the host-chipset time offset */
422 wl->time_offset = jiffies_to_usecs(jiffies) -
423 le32_to_cpu(status->fw_localtime);
426 static void wl1271_irq_work(struct work_struct *work)
431 container_of(work, struct wl1271, irq_work);
433 mutex_lock(&wl->mutex);
435 wl1271_debug(DEBUG_IRQ, "IRQ work");
437 if (wl->state == WL1271_STATE_OFF)
440 ret = wl1271_ps_elp_wakeup(wl, true);
444 wl1271_spi_write32(wl, ACX_REG_INTERRUPT_MASK, WL1271_ACX_INTR_ALL);
446 wl1271_fw_status(wl, wl->fw_status);
447 intr = le32_to_cpu(wl->fw_status->intr);
449 wl1271_debug(DEBUG_IRQ, "Zero interrupt received.");
453 intr &= WL1271_INTR_MASK;
455 if (intr & WL1271_ACX_INTR_EVENT_A) {
456 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_A");
457 wl1271_event_handle(wl, 0);
460 if (intr & WL1271_ACX_INTR_EVENT_B) {
461 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_B");
462 wl1271_event_handle(wl, 1);
465 if (intr & WL1271_ACX_INTR_INIT_COMPLETE)
466 wl1271_debug(DEBUG_IRQ,
467 "WL1271_ACX_INTR_INIT_COMPLETE");
469 if (intr & WL1271_ACX_INTR_HW_AVAILABLE)
470 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_HW_AVAILABLE");
472 if (intr & WL1271_ACX_INTR_DATA) {
473 u8 tx_res_cnt = wl->fw_status->tx_results_counter -
474 wl->tx_results_count;
476 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_DATA");
478 /* check for tx results */
480 wl1271_tx_complete(wl, tx_res_cnt);
482 wl1271_rx(wl, wl->fw_status);
486 wl1271_spi_write32(wl, ACX_REG_INTERRUPT_MASK,
487 WL1271_ACX_INTR_ALL & ~(WL1271_INTR_MASK));
488 wl1271_ps_elp_sleep(wl);
491 mutex_unlock(&wl->mutex);
494 static irqreturn_t wl1271_irq(int irq, void *cookie)
499 wl1271_debug(DEBUG_IRQ, "IRQ");
503 /* complete the ELP completion */
504 spin_lock_irqsave(&wl->wl_lock, flags);
506 complete(wl->elp_compl);
507 wl->elp_compl = NULL;
510 ieee80211_queue_work(wl->hw, &wl->irq_work);
511 spin_unlock_irqrestore(&wl->wl_lock, flags);
516 static int wl1271_fetch_firmware(struct wl1271 *wl)
518 const struct firmware *fw;
521 ret = request_firmware(&fw, WL1271_FW_NAME, &wl->spi->dev);
524 wl1271_error("could not get firmware: %d", ret);
529 wl1271_error("firmware size is not multiple of 32 bits: %zu",
535 wl->fw_len = fw->size;
536 wl->fw = vmalloc(wl->fw_len);
539 wl1271_error("could not allocate memory for the firmware");
544 memcpy(wl->fw, fw->data, wl->fw_len);
549 release_firmware(fw);
554 static int wl1271_fetch_nvs(struct wl1271 *wl)
556 const struct firmware *fw;
559 ret = request_firmware(&fw, WL1271_NVS_NAME, &wl->spi->dev);
562 wl1271_error("could not get nvs file: %d", ret);
567 wl1271_error("nvs size is not multiple of 32 bits: %zu",
573 wl->nvs_len = fw->size;
574 wl->nvs = kmalloc(wl->nvs_len, GFP_KERNEL);
577 wl1271_error("could not allocate memory for the nvs file");
582 memcpy(wl->nvs, fw->data, wl->nvs_len);
587 release_firmware(fw);
592 static void wl1271_fw_wakeup(struct wl1271 *wl)
596 elp_reg = ELPCTRL_WAKE_UP;
597 wl1271_raw_write32(wl, HW_ACCESS_ELP_CTRL_REG_ADDR, elp_reg);
600 static int wl1271_setup(struct wl1271 *wl)
602 wl->fw_status = kmalloc(sizeof(*wl->fw_status), GFP_KERNEL);
606 wl->tx_res_if = kmalloc(sizeof(*wl->tx_res_if), GFP_KERNEL);
607 if (!wl->tx_res_if) {
608 kfree(wl->fw_status);
612 INIT_WORK(&wl->irq_work, wl1271_irq_work);
613 INIT_WORK(&wl->tx_work, wl1271_tx_work);
617 static int wl1271_chip_wakeup(struct wl1271 *wl)
619 struct wl1271_partition_set partition;
622 msleep(WL1271_PRE_POWER_ON_SLEEP);
624 msleep(WL1271_POWER_ON_SLEEP);
625 wl1271_spi_reset(wl);
628 /* We don't need a real memory partition here, because we only want
629 * to use the registers at this point. */
630 memset(&partition, 0, sizeof(partition));
631 partition.reg.start = REGISTERS_BASE;
632 partition.reg.size = REGISTERS_DOWN_SIZE;
633 wl1271_set_partition(wl, &partition);
635 /* ELP module wake up */
636 wl1271_fw_wakeup(wl);
638 /* whal_FwCtrl_BootSm() */
640 /* 0. read chip id from CHIP_ID */
641 wl->chip.id = wl1271_spi_read32(wl, CHIP_ID_B);
643 /* 1. check if chip id is valid */
645 switch (wl->chip.id) {
646 case CHIP_ID_1271_PG10:
647 wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
650 ret = wl1271_setup(wl);
654 case CHIP_ID_1271_PG20:
655 wl1271_debug(DEBUG_BOOT, "chip id 0x%x (1271 PG20)",
658 ret = wl1271_setup(wl);
663 wl1271_warning("unsupported chip id: 0x%x", wl->chip.id);
668 if (wl->fw == NULL) {
669 ret = wl1271_fetch_firmware(wl);
674 /* No NVS from netlink, try to get it from the filesystem */
675 if (wl->nvs == NULL) {
676 ret = wl1271_fetch_nvs(wl);
685 int wl1271_plt_start(struct wl1271 *wl)
687 int retries = WL1271_BOOT_RETRIES;
690 mutex_lock(&wl->mutex);
692 wl1271_notice("power up");
694 if (wl->state != WL1271_STATE_OFF) {
695 wl1271_error("cannot go into PLT state because not "
696 "in off state: %d", wl->state);
703 ret = wl1271_chip_wakeup(wl);
707 ret = wl1271_boot(wl);
711 ret = wl1271_plt_init(wl);
715 /* Make sure power saving is disabled */
716 ret = wl1271_acx_sleep_auth(wl, WL1271_PSM_CAM);
720 wl->state = WL1271_STATE_PLT;
721 wl1271_notice("firmware booted in PLT mode (%s)",
726 wl1271_disable_interrupts(wl);
727 mutex_unlock(&wl->mutex);
728 /* Unlocking the mutex in the middle of handling is
729 inherently unsafe. In this case we deem it safe to do,
730 because we need to let any possibly pending IRQ out of
731 the system (and while we are WL1271_STATE_OFF the IRQ
732 work function will not do anything.) Also, any other
733 possible concurrent operations will fail due to the
734 current state, hence the wl1271 struct should be safe. */
735 cancel_work_sync(&wl->irq_work);
736 mutex_lock(&wl->mutex);
738 wl1271_power_off(wl);
741 wl1271_error("firmware boot in PLT mode failed despite %d retries",
742 WL1271_BOOT_RETRIES);
744 mutex_unlock(&wl->mutex);
749 int wl1271_plt_stop(struct wl1271 *wl)
753 mutex_lock(&wl->mutex);
755 wl1271_notice("power down");
757 if (wl->state != WL1271_STATE_PLT) {
758 wl1271_error("cannot power down because not in PLT "
759 "state: %d", wl->state);
764 wl1271_disable_interrupts(wl);
765 wl1271_power_off(wl);
767 wl->state = WL1271_STATE_OFF;
771 mutex_unlock(&wl->mutex);
777 static int wl1271_op_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
779 struct wl1271 *wl = hw->priv;
780 struct ieee80211_conf *conf = &hw->conf;
781 struct ieee80211_tx_info *txinfo = IEEE80211_SKB_CB(skb);
782 struct ieee80211_sta *sta = txinfo->control.sta;
785 /* peek into the rates configured in the STA entry */
786 spin_lock_irqsave(&wl->wl_lock, flags);
787 if (sta && sta->supp_rates[conf->channel->band] != wl->sta_rate_set) {
788 wl->sta_rate_set = sta->supp_rates[conf->channel->band];
789 set_bit(WL1271_FLAG_STA_RATES_CHANGED, &wl->flags);
791 spin_unlock_irqrestore(&wl->wl_lock, flags);
793 /* queue the packet */
794 skb_queue_tail(&wl->tx_queue, skb);
797 * The chip specific setup must run before the first TX packet -
798 * before that, the tx_work will not be initialized!
801 ieee80211_queue_work(wl->hw, &wl->tx_work);
804 * The workqueue is slow to process the tx_queue and we need stop
805 * the queue here, otherwise the queue will get too long.
807 if (skb_queue_len(&wl->tx_queue) >= WL1271_TX_QUEUE_MAX_LENGTH) {
808 ieee80211_stop_queues(wl->hw);
811 * FIXME: this is racy, the variable is not properly
812 * protected. Maybe fix this by removing the stupid
813 * variable altogether and checking the real queue state?
815 set_bit(WL1271_FLAG_TX_QUEUE_STOPPED, &wl->flags);
821 static int wl1271_dev_notify(struct notifier_block *me, unsigned long what,
824 struct net_device *dev;
825 struct wireless_dev *wdev;
827 struct ieee80211_hw *hw;
829 struct wl1271 *wl_temp;
830 struct in_device *idev;
831 struct in_ifaddr *ifa = arg;
834 /* FIXME: this ugly function should probably be implemented in the
835 * mac80211, and here should only be a simple callback handling actual
836 * setting of the filters. Now we need to dig up references to
837 * various structures to gain access to what we need.
838 * Also, because of this, there is no "initial" setting of the filter
839 * in "op_start", because we don't want to dig up struct net_device
840 * there - the filter will be set upon first change of the interface
843 dev = ifa->ifa_dev->dev;
845 wdev = dev->ieee80211_ptr;
853 hw = wiphy_priv(wiphy);
857 /* Check that the interface is one supported by this driver. */
859 list_for_each_entry(wl, &wl_list, list) {
866 /* Get the interface IP address for the device. "ifa" will become
868 - there is no IPV4 protocol address configured
869 - there are multiple (virtual) IPV4 addresses configured
870 When "ifa" is NULL, filtering will be disabled.
875 ifa = idev->ifa_list;
877 if (ifa && ifa->ifa_next)
880 mutex_lock(&wl->mutex);
882 if (wl->state == WL1271_STATE_OFF)
885 ret = wl1271_ps_elp_wakeup(wl, false);
889 ret = wl1271_acx_arp_ip_filter(wl, true,
890 (u8 *)&ifa->ifa_address,
893 ret = wl1271_acx_arp_ip_filter(wl, false, NULL,
895 wl1271_ps_elp_sleep(wl);
898 mutex_unlock(&wl->mutex);
903 static struct notifier_block wl1271_dev_notifier = {
904 .notifier_call = wl1271_dev_notify,
908 static int wl1271_op_start(struct ieee80211_hw *hw)
910 struct wl1271 *wl = hw->priv;
911 int retries = WL1271_BOOT_RETRIES;
914 wl1271_debug(DEBUG_MAC80211, "mac80211 start");
916 mutex_lock(&wl->mutex);
918 if (wl->state != WL1271_STATE_OFF) {
919 wl1271_error("cannot start because not in off state: %d",
927 ret = wl1271_chip_wakeup(wl);
931 ret = wl1271_boot(wl);
935 ret = wl1271_hw_init(wl);
939 wl->state = WL1271_STATE_ON;
940 wl1271_info("firmware booted (%s)", wl->chip.fw_ver);
944 wl1271_disable_interrupts(wl);
945 mutex_unlock(&wl->mutex);
946 /* Unlocking the mutex in the middle of handling is
947 inherently unsafe. In this case we deem it safe to do,
948 because we need to let any possibly pending IRQ out of
949 the system (and while we are WL1271_STATE_OFF the IRQ
950 work function will not do anything.) Also, any other
951 possible concurrent operations will fail due to the
952 current state, hence the wl1271 struct should be safe. */
953 cancel_work_sync(&wl->irq_work);
954 mutex_lock(&wl->mutex);
956 wl1271_power_off(wl);
959 wl1271_error("firmware boot failed despite %d retries",
960 WL1271_BOOT_RETRIES);
962 mutex_unlock(&wl->mutex);
965 list_add(&wl->list, &wl_list);
966 register_inetaddr_notifier(&wl1271_dev_notifier);
972 static void wl1271_op_stop(struct ieee80211_hw *hw)
974 struct wl1271 *wl = hw->priv;
979 wl1271_debug(DEBUG_MAC80211, "mac80211 stop");
981 unregister_inetaddr_notifier(&wl1271_dev_notifier);
984 mutex_lock(&wl->mutex);
986 WARN_ON(wl->state != WL1271_STATE_ON);
988 if (test_and_clear_bit(WL1271_FLAG_SCANNING, &wl->flags)) {
989 mutex_unlock(&wl->mutex);
990 ieee80211_scan_completed(wl->hw, true);
991 mutex_lock(&wl->mutex);
994 wl->state = WL1271_STATE_OFF;
996 wl1271_disable_interrupts(wl);
998 mutex_unlock(&wl->mutex);
1000 cancel_work_sync(&wl->irq_work);
1001 cancel_work_sync(&wl->tx_work);
1003 mutex_lock(&wl->mutex);
1005 /* let's notify MAC80211 about the remaining pending TX frames */
1006 wl1271_tx_flush(wl);
1007 wl1271_power_off(wl);
1009 memset(wl->bssid, 0, ETH_ALEN);
1010 memset(wl->ssid, 0, IW_ESSID_MAX_SIZE + 1);
1012 wl->bss_type = MAX_BSS_TYPE;
1013 wl->band = IEEE80211_BAND_2GHZ;
1016 wl->psm_entry_retry = 0;
1017 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
1018 wl->tx_blocks_available = 0;
1019 wl->tx_results_count = 0;
1020 wl->tx_packets_count = 0;
1021 wl->tx_security_last_seq = 0;
1022 wl->tx_security_seq_16 = 0;
1023 wl->tx_security_seq_32 = 0;
1024 wl->time_offset = 0;
1025 wl->session_counter = 0;
1026 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
1027 wl->sta_rate_set = 0;
1030 for (i = 0; i < NUM_TX_QUEUES; i++)
1031 wl->tx_blocks_freed[i] = 0;
1033 wl1271_debugfs_reset(wl);
1034 mutex_unlock(&wl->mutex);
1037 static int wl1271_op_add_interface(struct ieee80211_hw *hw,
1038 struct ieee80211_if_init_conf *conf)
1040 struct wl1271 *wl = hw->priv;
1043 wl1271_debug(DEBUG_MAC80211, "mac80211 add interface type %d mac %pM",
1044 conf->type, conf->mac_addr);
1046 mutex_lock(&wl->mutex);
1052 wl->vif = conf->vif;
1054 switch (conf->type) {
1055 case NL80211_IFTYPE_STATION:
1056 wl->bss_type = BSS_TYPE_STA_BSS;
1058 case NL80211_IFTYPE_ADHOC:
1059 wl->bss_type = BSS_TYPE_IBSS;
1066 /* FIXME: what if conf->mac_addr changes? */
1069 mutex_unlock(&wl->mutex);
1073 static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
1074 struct ieee80211_if_init_conf *conf)
1076 struct wl1271 *wl = hw->priv;
1078 mutex_lock(&wl->mutex);
1079 wl1271_debug(DEBUG_MAC80211, "mac80211 remove interface");
1081 mutex_unlock(&wl->mutex);
1085 static int wl1271_op_config_interface(struct ieee80211_hw *hw,
1086 struct ieee80211_vif *vif,
1087 struct ieee80211_if_conf *conf)
1089 struct wl1271 *wl = hw->priv;
1090 struct sk_buff *beacon;
1093 wl1271_debug(DEBUG_MAC80211, "mac80211 config_interface bssid %pM",
1095 wl1271_dump_ascii(DEBUG_MAC80211, "ssid: ", conf->ssid,
1098 mutex_lock(&wl->mutex);
1100 ret = wl1271_ps_elp_wakeup(wl, false);
1104 if (memcmp(wl->bssid, conf->bssid, ETH_ALEN)) {
1105 wl1271_debug(DEBUG_MAC80211, "bssid changed");
1107 memcpy(wl->bssid, conf->bssid, ETH_ALEN);
1109 ret = wl1271_cmd_join(wl);
1113 ret = wl1271_cmd_build_null_data(wl);
1118 wl->ssid_len = conf->ssid_len;
1120 memcpy(wl->ssid, conf->ssid, wl->ssid_len);
1122 if (conf->changed & IEEE80211_IFCC_BEACON) {
1123 beacon = ieee80211_beacon_get(hw, vif);
1124 ret = wl1271_cmd_template_set(wl, CMD_TEMPL_BEACON,
1125 beacon->data, beacon->len);
1128 dev_kfree_skb(beacon);
1132 ret = wl1271_cmd_template_set(wl, CMD_TEMPL_PROBE_RESPONSE,
1133 beacon->data, beacon->len);
1135 dev_kfree_skb(beacon);
1142 wl1271_ps_elp_sleep(wl);
1145 mutex_unlock(&wl->mutex);
1151 static int wl1271_join_channel(struct wl1271 *wl, int channel)
1154 /* we need to use a dummy BSSID for now */
1155 static const u8 dummy_bssid[ETH_ALEN] = { 0x0b, 0xad, 0xde,
1158 /* the dummy join is not required for ad-hoc */
1159 if (wl->bss_type == BSS_TYPE_IBSS)
1162 /* disable mac filter, so we hear everything */
1163 wl->rx_config &= ~CFG_BSSID_FILTER_EN;
1165 wl->channel = channel;
1166 memcpy(wl->bssid, dummy_bssid, ETH_ALEN);
1168 ret = wl1271_cmd_join(wl);
1172 set_bit(WL1271_FLAG_JOINED, &wl->flags);
1178 static int wl1271_unjoin_channel(struct wl1271 *wl)
1182 /* to stop listening to a channel, we disconnect */
1183 ret = wl1271_cmd_disconnect(wl);
1187 clear_bit(WL1271_FLAG_JOINED, &wl->flags);
1189 memset(wl->bssid, 0, ETH_ALEN);
1190 wl->rx_config = WL1271_DEFAULT_RX_CONFIG;
1196 static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed)
1198 struct wl1271 *wl = hw->priv;
1199 struct ieee80211_conf *conf = &hw->conf;
1200 int channel, ret = 0;
1202 channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
1204 wl1271_debug(DEBUG_MAC80211, "mac80211 config ch %d psm %s power %d %s",
1206 conf->flags & IEEE80211_CONF_PS ? "on" : "off",
1208 conf->flags & IEEE80211_CONF_IDLE ? "idle" : "in use");
1210 mutex_lock(&wl->mutex);
1212 wl->band = conf->channel->band;
1214 ret = wl1271_ps_elp_wakeup(wl, false);
1218 if (changed & IEEE80211_CONF_CHANGE_IDLE) {
1219 if (conf->flags & IEEE80211_CONF_IDLE &&
1220 test_bit(WL1271_FLAG_JOINED, &wl->flags))
1221 wl1271_unjoin_channel(wl);
1223 wl1271_join_channel(wl, channel);
1225 if (conf->flags & IEEE80211_CONF_IDLE) {
1226 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
1227 wl->sta_rate_set = 0;
1228 wl1271_acx_rate_policies(wl);
1232 /* if the channel changes while joined, join again */
1233 if (channel != wl->channel && test_bit(WL1271_FLAG_JOINED, &wl->flags))
1234 wl1271_join_channel(wl, channel);
1236 if (conf->flags & IEEE80211_CONF_PS &&
1237 !test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
1238 set_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
1241 * We enter PSM only if we're already associated.
1242 * If we're not, we'll enter it when joining an SSID,
1243 * through the bss_info_changed() hook.
1245 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags)) {
1246 wl1271_info("psm enabled");
1247 ret = wl1271_ps_set_mode(wl, STATION_POWER_SAVE_MODE);
1249 } else if (!(conf->flags & IEEE80211_CONF_PS) &&
1250 test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
1251 wl1271_info("psm disabled");
1253 clear_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
1255 if (test_bit(WL1271_FLAG_PSM, &wl->flags))
1256 ret = wl1271_ps_set_mode(wl, STATION_ACTIVE_MODE);
1259 if (conf->power_level != wl->power_level) {
1260 ret = wl1271_acx_tx_power(wl, conf->power_level);
1264 wl->power_level = conf->power_level;
1268 wl1271_ps_elp_sleep(wl);
1271 mutex_unlock(&wl->mutex);
1276 struct wl1271_filter_params {
1279 u8 mc_list[ACX_MC_ADDRESS_GROUP_MAX][ETH_ALEN];
1282 static u64 wl1271_op_prepare_multicast(struct ieee80211_hw *hw, int mc_count,
1283 struct dev_addr_list *mc_list)
1285 struct wl1271_filter_params *fp;
1288 fp = kzalloc(sizeof(*fp), GFP_ATOMIC);
1290 wl1271_error("Out of memory setting filters.");
1294 /* update multicast filtering parameters */
1296 if (mc_count > ACX_MC_ADDRESS_GROUP_MAX) {
1298 fp->enabled = false;
1301 fp->mc_list_length = 0;
1302 for (i = 0; i < mc_count; i++) {
1303 if (mc_list->da_addrlen == ETH_ALEN) {
1304 memcpy(fp->mc_list[fp->mc_list_length],
1305 mc_list->da_addr, ETH_ALEN);
1306 fp->mc_list_length++;
1308 wl1271_warning("Unknown mc address length.");
1309 mc_list = mc_list->next;
1312 return (u64)(unsigned long)fp;
1315 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
1318 FIF_BCN_PRBRESP_PROMISC | \
1322 static void wl1271_op_configure_filter(struct ieee80211_hw *hw,
1323 unsigned int changed,
1324 unsigned int *total, u64 multicast)
1326 struct wl1271_filter_params *fp = (void *)(unsigned long)multicast;
1327 struct wl1271 *wl = hw->priv;
1330 wl1271_debug(DEBUG_MAC80211, "mac80211 configure filter");
1332 mutex_lock(&wl->mutex);
1334 if (wl->state == WL1271_STATE_OFF)
1337 ret = wl1271_ps_elp_wakeup(wl, false);
1341 *total &= WL1271_SUPPORTED_FILTERS;
1342 changed &= WL1271_SUPPORTED_FILTERS;
1344 if (*total & FIF_ALLMULTI)
1345 ret = wl1271_acx_group_address_tbl(wl, false, NULL, 0);
1347 ret = wl1271_acx_group_address_tbl(wl, fp->enabled,
1349 fp->mc_list_length);
1355 /* FIXME: We still need to set our filters properly */
1357 /* determine, whether supported filter values have changed */
1361 /* apply configured filters */
1362 ret = wl1271_acx_rx_config(wl, wl->rx_config, wl->rx_filter);
1367 wl1271_ps_elp_sleep(wl);
1370 mutex_unlock(&wl->mutex);
1373 static int wl1271_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
1374 struct ieee80211_vif *vif,
1375 struct ieee80211_sta *sta,
1376 struct ieee80211_key_conf *key_conf)
1378 struct wl1271 *wl = hw->priv;
1385 static const u8 bcast_addr[ETH_ALEN] =
1386 { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
1388 wl1271_debug(DEBUG_MAC80211, "mac80211 set key");
1390 addr = sta ? sta->addr : bcast_addr;
1392 wl1271_debug(DEBUG_CRYPT, "CMD: 0x%x", cmd);
1393 wl1271_dump(DEBUG_CRYPT, "ADDR: ", addr, ETH_ALEN);
1394 wl1271_debug(DEBUG_CRYPT, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
1395 key_conf->alg, key_conf->keyidx,
1396 key_conf->keylen, key_conf->flags);
1397 wl1271_dump(DEBUG_CRYPT, "KEY: ", key_conf->key, key_conf->keylen);
1399 if (is_zero_ether_addr(addr)) {
1400 /* We dont support TX only encryption */
1405 mutex_lock(&wl->mutex);
1407 ret = wl1271_ps_elp_wakeup(wl, false);
1411 switch (key_conf->alg) {
1415 key_conf->hw_key_idx = key_conf->keyidx;
1418 key_type = KEY_TKIP;
1420 key_conf->hw_key_idx = key_conf->keyidx;
1421 tx_seq_32 = wl->tx_security_seq_32;
1422 tx_seq_16 = wl->tx_security_seq_16;
1427 key_conf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
1428 tx_seq_32 = wl->tx_security_seq_32;
1429 tx_seq_16 = wl->tx_security_seq_16;
1432 wl1271_error("Unknown key algo 0x%x", key_conf->alg);
1440 ret = wl1271_cmd_set_key(wl, KEY_ADD_OR_REPLACE,
1441 key_conf->keyidx, key_type,
1442 key_conf->keylen, key_conf->key,
1443 addr, tx_seq_32, tx_seq_16);
1445 wl1271_error("Could not add or replace key");
1451 ret = wl1271_cmd_set_key(wl, KEY_REMOVE,
1452 key_conf->keyidx, key_type,
1453 key_conf->keylen, key_conf->key,
1456 wl1271_error("Could not remove key");
1462 wl1271_error("Unsupported key cmd 0x%x", cmd);
1470 wl1271_ps_elp_sleep(wl);
1473 mutex_unlock(&wl->mutex);
1479 static int wl1271_op_hw_scan(struct ieee80211_hw *hw,
1480 struct cfg80211_scan_request *req)
1482 struct wl1271 *wl = hw->priv;
1487 wl1271_debug(DEBUG_MAC80211, "mac80211 hw scan");
1490 ssid = req->ssids[0].ssid;
1491 len = req->ssids[0].ssid_len;
1494 mutex_lock(&wl->mutex);
1496 ret = wl1271_ps_elp_wakeup(wl, false);
1500 if (wl1271_11a_enabled())
1501 ret = wl1271_cmd_scan(hw->priv, ssid, len, 1, 0,
1502 WL1271_SCAN_BAND_DUAL, 3);
1504 ret = wl1271_cmd_scan(hw->priv, ssid, len, 1, 0,
1505 WL1271_SCAN_BAND_2_4_GHZ, 3);
1507 wl1271_ps_elp_sleep(wl);
1510 mutex_unlock(&wl->mutex);
1515 static int wl1271_op_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
1517 struct wl1271 *wl = hw->priv;
1520 mutex_lock(&wl->mutex);
1522 ret = wl1271_ps_elp_wakeup(wl, false);
1526 ret = wl1271_acx_rts_threshold(wl, (u16) value);
1528 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret);
1530 wl1271_ps_elp_sleep(wl);
1533 mutex_unlock(&wl->mutex);
1538 static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
1539 struct ieee80211_vif *vif,
1540 struct ieee80211_bss_conf *bss_conf,
1543 enum wl1271_cmd_ps_mode mode;
1544 struct wl1271 *wl = hw->priv;
1547 wl1271_debug(DEBUG_MAC80211, "mac80211 bss info changed");
1549 mutex_lock(&wl->mutex);
1551 ret = wl1271_ps_elp_wakeup(wl, false);
1555 if ((changed & BSS_CHANGED_BSSID) &&
1557 * Now we know the correct bssid, so we send a new join command
1558 * and enable the BSSID filter
1560 memcmp(wl->bssid, bss_conf->bssid, ETH_ALEN)) {
1561 wl->rx_config |= CFG_BSSID_FILTER_EN;
1562 memcpy(wl->bssid, bss_conf->bssid, ETH_ALEN);
1563 ret = wl1271_cmd_build_null_data(wl);
1565 wl1271_warning("cmd buld null data failed %d",
1569 ret = wl1271_cmd_join(wl);
1571 wl1271_warning("cmd join failed %d", ret);
1574 set_bit(WL1271_FLAG_JOINED, &wl->flags);
1577 if (wl->bss_type == BSS_TYPE_IBSS) {
1578 /* FIXME: This implements rudimentary ad-hoc support -
1579 proper templates are on the wish list and notification
1580 on when they change. This patch will update the templates
1581 on every call to this function. Also, the firmware will not
1582 answer to probe-requests as it does not have the proper
1583 SSID set in the JOIN command. The probe-response template
1584 is set nevertheless, as the FW will ASSERT without it */
1585 struct sk_buff *beacon = ieee80211_beacon_get(hw, vif);
1588 struct ieee80211_hdr *hdr;
1589 ret = wl1271_cmd_template_set(wl, CMD_TEMPL_BEACON,
1594 dev_kfree_skb(beacon);
1598 hdr = (struct ieee80211_hdr *) beacon->data;
1599 hdr->frame_control = cpu_to_le16(
1600 IEEE80211_FTYPE_MGMT |
1601 IEEE80211_STYPE_PROBE_RESP);
1603 ret = wl1271_cmd_template_set(wl,
1604 CMD_TEMPL_PROBE_RESPONSE,
1607 dev_kfree_skb(beacon);
1613 if (changed & BSS_CHANGED_ASSOC) {
1614 if (bss_conf->assoc) {
1615 wl->aid = bss_conf->aid;
1616 set_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
1619 * with wl1271, we don't need to update the
1620 * beacon_int and dtim_period, because the firmware
1621 * updates it by itself when the first beacon is
1622 * received after a join.
1624 ret = wl1271_cmd_build_ps_poll(wl, wl->aid);
1628 ret = wl1271_acx_aid(wl, wl->aid);
1632 /* If we want to go in PSM but we're not there yet */
1633 if (test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags) &&
1634 !test_bit(WL1271_FLAG_PSM, &wl->flags)) {
1635 mode = STATION_POWER_SAVE_MODE;
1636 ret = wl1271_ps_set_mode(wl, mode);
1641 /* use defaults when not associated */
1642 clear_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
1648 if (changed & BSS_CHANGED_ERP_SLOT) {
1649 if (bss_conf->use_short_slot)
1650 ret = wl1271_acx_slot(wl, SLOT_TIME_SHORT);
1652 ret = wl1271_acx_slot(wl, SLOT_TIME_LONG);
1654 wl1271_warning("Set slot time failed %d", ret);
1659 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
1660 if (bss_conf->use_short_preamble)
1661 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_SHORT);
1663 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_LONG);
1666 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
1667 if (bss_conf->use_cts_prot)
1668 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_ENABLE);
1670 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_DISABLE);
1672 wl1271_warning("Set ctsprotect failed %d", ret);
1678 wl1271_ps_elp_sleep(wl);
1681 mutex_unlock(&wl->mutex);
1685 /* can't be const, mac80211 writes to this */
1686 static struct ieee80211_rate wl1271_rates[] = {
1688 .hw_value = CONF_HW_BIT_RATE_1MBPS,
1689 .hw_value_short = CONF_HW_BIT_RATE_1MBPS, },
1691 .hw_value = CONF_HW_BIT_RATE_2MBPS,
1692 .hw_value_short = CONF_HW_BIT_RATE_2MBPS,
1693 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
1695 .hw_value = CONF_HW_BIT_RATE_5_5MBPS,
1696 .hw_value_short = CONF_HW_BIT_RATE_5_5MBPS,
1697 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
1699 .hw_value = CONF_HW_BIT_RATE_11MBPS,
1700 .hw_value_short = CONF_HW_BIT_RATE_11MBPS,
1701 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
1703 .hw_value = CONF_HW_BIT_RATE_6MBPS,
1704 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
1706 .hw_value = CONF_HW_BIT_RATE_9MBPS,
1707 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
1709 .hw_value = CONF_HW_BIT_RATE_12MBPS,
1710 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
1712 .hw_value = CONF_HW_BIT_RATE_18MBPS,
1713 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
1715 .hw_value = CONF_HW_BIT_RATE_24MBPS,
1716 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
1718 .hw_value = CONF_HW_BIT_RATE_36MBPS,
1719 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
1721 .hw_value = CONF_HW_BIT_RATE_48MBPS,
1722 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
1724 .hw_value = CONF_HW_BIT_RATE_54MBPS,
1725 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
1728 /* can't be const, mac80211 writes to this */
1729 static struct ieee80211_channel wl1271_channels[] = {
1730 { .hw_value = 1, .center_freq = 2412, .max_power = 25 },
1731 { .hw_value = 2, .center_freq = 2417, .max_power = 25 },
1732 { .hw_value = 3, .center_freq = 2422, .max_power = 25 },
1733 { .hw_value = 4, .center_freq = 2427, .max_power = 25 },
1734 { .hw_value = 5, .center_freq = 2432, .max_power = 25 },
1735 { .hw_value = 6, .center_freq = 2437, .max_power = 25 },
1736 { .hw_value = 7, .center_freq = 2442, .max_power = 25 },
1737 { .hw_value = 8, .center_freq = 2447, .max_power = 25 },
1738 { .hw_value = 9, .center_freq = 2452, .max_power = 25 },
1739 { .hw_value = 10, .center_freq = 2457, .max_power = 25 },
1740 { .hw_value = 11, .center_freq = 2462, .max_power = 25 },
1741 { .hw_value = 12, .center_freq = 2467, .max_power = 25 },
1742 { .hw_value = 13, .center_freq = 2472, .max_power = 25 },
1745 /* can't be const, mac80211 writes to this */
1746 static struct ieee80211_supported_band wl1271_band_2ghz = {
1747 .channels = wl1271_channels,
1748 .n_channels = ARRAY_SIZE(wl1271_channels),
1749 .bitrates = wl1271_rates,
1750 .n_bitrates = ARRAY_SIZE(wl1271_rates),
1753 /* 5 GHz data rates for WL1273 */
1754 static struct ieee80211_rate wl1271_rates_5ghz[] = {
1756 .hw_value = CONF_HW_BIT_RATE_6MBPS,
1757 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
1759 .hw_value = CONF_HW_BIT_RATE_9MBPS,
1760 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
1762 .hw_value = CONF_HW_BIT_RATE_12MBPS,
1763 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
1765 .hw_value = CONF_HW_BIT_RATE_18MBPS,
1766 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
1768 .hw_value = CONF_HW_BIT_RATE_24MBPS,
1769 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
1771 .hw_value = CONF_HW_BIT_RATE_36MBPS,
1772 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
1774 .hw_value = CONF_HW_BIT_RATE_48MBPS,
1775 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
1777 .hw_value = CONF_HW_BIT_RATE_54MBPS,
1778 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
1781 /* 5 GHz band channels for WL1273 */
1782 static struct ieee80211_channel wl1271_channels_5ghz[] = {
1783 { .hw_value = 183, .center_freq = 4915},
1784 { .hw_value = 184, .center_freq = 4920},
1785 { .hw_value = 185, .center_freq = 4925},
1786 { .hw_value = 187, .center_freq = 4935},
1787 { .hw_value = 188, .center_freq = 4940},
1788 { .hw_value = 189, .center_freq = 4945},
1789 { .hw_value = 192, .center_freq = 4960},
1790 { .hw_value = 196, .center_freq = 4980},
1791 { .hw_value = 7, .center_freq = 5035},
1792 { .hw_value = 8, .center_freq = 5040},
1793 { .hw_value = 9, .center_freq = 5045},
1794 { .hw_value = 11, .center_freq = 5055},
1795 { .hw_value = 12, .center_freq = 5060},
1796 { .hw_value = 16, .center_freq = 5080},
1797 { .hw_value = 34, .center_freq = 5170},
1798 { .hw_value = 36, .center_freq = 5180},
1799 { .hw_value = 38, .center_freq = 5190},
1800 { .hw_value = 40, .center_freq = 5200},
1801 { .hw_value = 42, .center_freq = 5210},
1802 { .hw_value = 44, .center_freq = 5220},
1803 { .hw_value = 46, .center_freq = 5230},
1804 { .hw_value = 48, .center_freq = 5240},
1805 { .hw_value = 52, .center_freq = 5260},
1806 { .hw_value = 56, .center_freq = 5280},
1807 { .hw_value = 60, .center_freq = 5300},
1808 { .hw_value = 64, .center_freq = 5320},
1809 { .hw_value = 100, .center_freq = 5500},
1810 { .hw_value = 104, .center_freq = 5520},
1811 { .hw_value = 108, .center_freq = 5540},
1812 { .hw_value = 112, .center_freq = 5560},
1813 { .hw_value = 116, .center_freq = 5580},
1814 { .hw_value = 120, .center_freq = 5600},
1815 { .hw_value = 124, .center_freq = 5620},
1816 { .hw_value = 128, .center_freq = 5640},
1817 { .hw_value = 132, .center_freq = 5660},
1818 { .hw_value = 136, .center_freq = 5680},
1819 { .hw_value = 140, .center_freq = 5700},
1820 { .hw_value = 149, .center_freq = 5745},
1821 { .hw_value = 153, .center_freq = 5765},
1822 { .hw_value = 157, .center_freq = 5785},
1823 { .hw_value = 161, .center_freq = 5805},
1824 { .hw_value = 165, .center_freq = 5825},
1828 static struct ieee80211_supported_band wl1271_band_5ghz = {
1829 .channels = wl1271_channels_5ghz,
1830 .n_channels = ARRAY_SIZE(wl1271_channels_5ghz),
1831 .bitrates = wl1271_rates_5ghz,
1832 .n_bitrates = ARRAY_SIZE(wl1271_rates_5ghz),
1835 static const struct ieee80211_ops wl1271_ops = {
1836 .start = wl1271_op_start,
1837 .stop = wl1271_op_stop,
1838 .add_interface = wl1271_op_add_interface,
1839 .remove_interface = wl1271_op_remove_interface,
1840 .config = wl1271_op_config,
1841 /* .config_interface = wl1271_op_config_interface, */
1842 .prepare_multicast = wl1271_op_prepare_multicast,
1843 .configure_filter = wl1271_op_configure_filter,
1845 .set_key = wl1271_op_set_key,
1846 .hw_scan = wl1271_op_hw_scan,
1847 .bss_info_changed = wl1271_op_bss_info_changed,
1848 .set_rts_threshold = wl1271_op_set_rts_threshold,
1851 static int wl1271_register_hw(struct wl1271 *wl)
1855 if (wl->mac80211_registered)
1858 SET_IEEE80211_PERM_ADDR(wl->hw, wl->mac_addr);
1860 ret = ieee80211_register_hw(wl->hw);
1862 wl1271_error("unable to register mac80211 hw: %d", ret);
1866 wl->mac80211_registered = true;
1868 wl1271_notice("loaded");
1873 static int wl1271_init_ieee80211(struct wl1271 *wl)
1875 /* The tx descriptor buffer and the TKIP space. */
1876 wl->hw->extra_tx_headroom = WL1271_TKIP_IV_SPACE +
1877 sizeof(struct wl1271_tx_hw_descr);
1880 /* FIXME: find a proper value */
1881 wl->hw->channel_change_time = 10000;
1883 wl->hw->flags = IEEE80211_HW_SIGNAL_DBM |
1884 IEEE80211_HW_NOISE_DBM |
1885 IEEE80211_HW_BEACON_FILTER |
1886 IEEE80211_HW_SUPPORTS_PS;
1888 wl->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
1889 BIT(NL80211_IFTYPE_ADHOC);
1890 wl->hw->wiphy->max_scan_ssids = 1;
1891 wl->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = &wl1271_band_2ghz;
1893 if (wl1271_11a_enabled())
1894 wl->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = &wl1271_band_5ghz;
1896 SET_IEEE80211_DEV(wl->hw, &wl->spi->dev);
1901 static void wl1271_device_release(struct device *dev)
1906 static struct platform_device wl1271_device = {
1910 /* device model insists to have a release function */
1912 .release = wl1271_device_release,
1916 #define WL1271_DEFAULT_CHANNEL 0
1917 static int __devinit wl1271_probe(struct spi_device *spi)
1919 struct wl12xx_platform_data *pdata;
1920 struct ieee80211_hw *hw;
1923 static const u8 nokia_oui[3] = {0x00, 0x1f, 0xdf};
1925 pdata = spi->dev.platform_data;
1927 wl1271_error("no platform data");
1931 hw = ieee80211_alloc_hw(sizeof(*wl), &wl1271_ops);
1933 wl1271_error("could not alloc ieee80211_hw");
1938 memset(wl, 0, sizeof(*wl));
1940 INIT_LIST_HEAD(&wl->list);
1943 dev_set_drvdata(&spi->dev, wl);
1946 skb_queue_head_init(&wl->tx_queue);
1948 INIT_DELAYED_WORK(&wl->elp_work, wl1271_elp_work);
1949 wl->channel = WL1271_DEFAULT_CHANNEL;
1950 wl->default_key = 0;
1952 wl->rx_config = WL1271_DEFAULT_RX_CONFIG;
1953 wl->rx_filter = WL1271_DEFAULT_RX_FILTER;
1954 wl->psm_entry_retry = 0;
1955 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
1956 wl->basic_rate_set = CONF_TX_RATE_MASK_BASIC;
1957 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
1958 wl->sta_rate_set = 0;
1959 wl->band = IEEE80211_BAND_2GHZ;
1963 for (i = 0; i < ACX_TX_DESCRIPTORS; i++)
1964 wl->tx_frames[i] = NULL;
1966 spin_lock_init(&wl->wl_lock);
1969 * In case our MAC address is not correctly set,
1970 * we use a random but Nokia MAC.
1972 memcpy(wl->mac_addr, nokia_oui, 3);
1973 get_random_bytes(wl->mac_addr + 3, 3);
1975 wl->state = WL1271_STATE_OFF;
1976 mutex_init(&wl->mutex);
1978 /* This is the only SPI value that we need to set here, the rest
1979 * comes from the board-peripherals file */
1980 spi->bits_per_word = 32;
1982 ret = spi_setup(spi);
1984 wl1271_error("spi_setup failed");
1988 wl->set_power = pdata->set_power;
1989 if (!wl->set_power) {
1990 wl1271_error("set power function missing in platform data");
1997 wl1271_error("irq missing in platform data");
2002 ret = request_irq(wl->irq, wl1271_irq, 0, DRIVER_NAME, wl);
2004 wl1271_error("request_irq() failed: %d", ret);
2008 set_irq_type(wl->irq, IRQ_TYPE_EDGE_RISING);
2010 disable_irq(wl->irq);
2012 ret = platform_device_register(&wl1271_device);
2014 wl1271_error("couldn't register platform device");
2017 dev_set_drvdata(&wl1271_device.dev, wl);
2019 /* Apply default driver configuration. */
2020 wl1271_conf_init(wl);
2022 ret = wl1271_init_ieee80211(wl);
2026 ret = wl1271_register_hw(wl);
2030 wl1271_debugfs_init(wl);
2032 wl1271_notice("initialized");
2037 platform_device_unregister(&wl1271_device);
2040 free_irq(wl->irq, wl);
2043 ieee80211_free_hw(hw);
2048 static int __devexit wl1271_remove(struct spi_device *spi)
2050 struct wl1271 *wl = dev_get_drvdata(&spi->dev);
2052 ieee80211_unregister_hw(wl->hw);
2054 wl1271_debugfs_exit(wl);
2055 platform_device_unregister(&wl1271_device);
2056 free_irq(wl->irq, wl);
2057 kfree(wl->target_mem_map);
2063 kfree(wl->fw_status);
2064 kfree(wl->tx_res_if);
2066 ieee80211_free_hw(wl->hw);
2072 static struct spi_driver wl1271_spi_driver = {
2075 .bus = &spi_bus_type,
2076 .owner = THIS_MODULE,
2079 .probe = wl1271_probe,
2080 .remove = __devexit_p(wl1271_remove),
2083 static int __init wl1271_init(void)
2087 ret = spi_register_driver(&wl1271_spi_driver);
2089 wl1271_error("failed to register spi driver: %d", ret);
2097 static void __exit wl1271_exit(void)
2099 spi_unregister_driver(&wl1271_spi_driver);
2101 wl1271_notice("unloaded");
2104 module_init(wl1271_init);
2105 module_exit(wl1271_exit);
2107 MODULE_LICENSE("GPL");
2108 MODULE_AUTHOR("Luciano Coelho <luciano.coelho@nokia.com>");
2109 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");
2110 MODULE_FIRMWARE(WL1271_FW_NAME);