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
241 .host_clk_settling_time = 5000,
242 .host_fast_wakeup_support = false
246 static LIST_HEAD(wl_list);
248 static void wl1271_conf_init(struct wl1271 *wl)
252 * This function applies the default configuration to the driver. This
253 * function is invoked upon driver load (spi probe.)
255 * The configuration is stored in a run-time structure in order to
256 * facilitate for run-time adjustment of any of the parameters. Making
257 * changes to the configuration structure will apply the new values on
258 * the next interface up (wl1271_op_start.)
261 /* apply driver default configuration */
262 memcpy(&wl->conf, &default_conf, sizeof(default_conf));
266 static int wl1271_plt_init(struct wl1271 *wl)
270 ret = wl1271_cmd_general_parms(wl);
274 ret = wl1271_cmd_radio_parms(wl);
278 ret = wl1271_acx_init_mem_config(wl);
282 ret = wl1271_cmd_data_path(wl, 1);
289 static void wl1271_disable_interrupts(struct wl1271 *wl)
291 disable_irq(wl->irq);
294 static void wl1271_power_off(struct wl1271 *wl)
296 wl->set_power(false);
297 clear_bit(WL1271_FLAG_GPIO_POWER, &wl->flags);
300 static void wl1271_power_on(struct wl1271 *wl)
303 set_bit(WL1271_FLAG_GPIO_POWER, &wl->flags);
306 static void wl1271_fw_status(struct wl1271 *wl,
307 struct wl1271_fw_status *status)
312 wl1271_spi_read(wl, FW_STATUS_ADDR, status,
313 sizeof(*status), false);
315 wl1271_debug(DEBUG_IRQ, "intr: 0x%x (fw_rx_counter = %d, "
316 "drv_rx_counter = %d, tx_results_counter = %d)",
318 status->fw_rx_counter,
319 status->drv_rx_counter,
320 status->tx_results_counter);
322 /* update number of available TX blocks */
323 for (i = 0; i < NUM_TX_QUEUES; i++) {
324 u32 cnt = le32_to_cpu(status->tx_released_blks[i]) -
325 wl->tx_blocks_freed[i];
327 wl->tx_blocks_freed[i] =
328 le32_to_cpu(status->tx_released_blks[i]);
329 wl->tx_blocks_available += cnt;
333 /* if more blocks are available now, schedule some tx work */
334 if (total && !skb_queue_empty(&wl->tx_queue))
335 ieee80211_queue_work(wl->hw, &wl->tx_work);
337 /* update the host-chipset time offset */
338 wl->time_offset = jiffies_to_usecs(jiffies) -
339 le32_to_cpu(status->fw_localtime);
342 static void wl1271_irq_work(struct work_struct *work)
347 container_of(work, struct wl1271, irq_work);
349 mutex_lock(&wl->mutex);
351 wl1271_debug(DEBUG_IRQ, "IRQ work");
353 if (wl->state == WL1271_STATE_OFF)
356 ret = wl1271_ps_elp_wakeup(wl, true);
360 wl1271_spi_write32(wl, ACX_REG_INTERRUPT_MASK, WL1271_ACX_INTR_ALL);
362 wl1271_fw_status(wl, wl->fw_status);
363 intr = le32_to_cpu(wl->fw_status->intr);
365 wl1271_debug(DEBUG_IRQ, "Zero interrupt received.");
369 intr &= WL1271_INTR_MASK;
371 if (intr & WL1271_ACX_INTR_EVENT_A) {
372 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_A");
373 wl1271_event_handle(wl, 0);
376 if (intr & WL1271_ACX_INTR_EVENT_B) {
377 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_B");
378 wl1271_event_handle(wl, 1);
381 if (intr & WL1271_ACX_INTR_INIT_COMPLETE)
382 wl1271_debug(DEBUG_IRQ,
383 "WL1271_ACX_INTR_INIT_COMPLETE");
385 if (intr & WL1271_ACX_INTR_HW_AVAILABLE)
386 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_HW_AVAILABLE");
388 if (intr & WL1271_ACX_INTR_DATA) {
389 u8 tx_res_cnt = wl->fw_status->tx_results_counter -
390 wl->tx_results_count;
392 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_DATA");
394 /* check for tx results */
396 wl1271_tx_complete(wl, tx_res_cnt);
398 wl1271_rx(wl, wl->fw_status);
402 wl1271_spi_write32(wl, ACX_REG_INTERRUPT_MASK,
403 WL1271_ACX_INTR_ALL & ~(WL1271_INTR_MASK));
404 wl1271_ps_elp_sleep(wl);
407 mutex_unlock(&wl->mutex);
410 static irqreturn_t wl1271_irq(int irq, void *cookie)
415 wl1271_debug(DEBUG_IRQ, "IRQ");
419 /* complete the ELP completion */
420 spin_lock_irqsave(&wl->wl_lock, flags);
422 complete(wl->elp_compl);
423 wl->elp_compl = NULL;
426 ieee80211_queue_work(wl->hw, &wl->irq_work);
427 spin_unlock_irqrestore(&wl->wl_lock, flags);
432 static int wl1271_fetch_firmware(struct wl1271 *wl)
434 const struct firmware *fw;
437 ret = request_firmware(&fw, WL1271_FW_NAME, &wl->spi->dev);
440 wl1271_error("could not get firmware: %d", ret);
445 wl1271_error("firmware size is not multiple of 32 bits: %zu",
451 wl->fw_len = fw->size;
452 wl->fw = vmalloc(wl->fw_len);
455 wl1271_error("could not allocate memory for the firmware");
460 memcpy(wl->fw, fw->data, wl->fw_len);
465 release_firmware(fw);
470 static int wl1271_fetch_nvs(struct wl1271 *wl)
472 const struct firmware *fw;
475 ret = request_firmware(&fw, WL1271_NVS_NAME, &wl->spi->dev);
478 wl1271_error("could not get nvs file: %d", ret);
482 if (fw->size != sizeof(struct wl1271_nvs_file)) {
483 wl1271_error("nvs size is not as expected: %zu != %zu",
484 fw->size, sizeof(struct wl1271_nvs_file));
489 wl->nvs = kmalloc(sizeof(struct wl1271_nvs_file), GFP_KERNEL);
492 wl1271_error("could not allocate memory for the nvs file");
497 memcpy(wl->nvs, fw->data, sizeof(struct wl1271_nvs_file));
502 release_firmware(fw);
507 static void wl1271_fw_wakeup(struct wl1271 *wl)
511 elp_reg = ELPCTRL_WAKE_UP;
512 wl1271_raw_write32(wl, HW_ACCESS_ELP_CTRL_REG_ADDR, elp_reg);
515 static int wl1271_setup(struct wl1271 *wl)
517 wl->fw_status = kmalloc(sizeof(*wl->fw_status), GFP_KERNEL);
521 wl->tx_res_if = kmalloc(sizeof(*wl->tx_res_if), GFP_KERNEL);
522 if (!wl->tx_res_if) {
523 kfree(wl->fw_status);
527 INIT_WORK(&wl->irq_work, wl1271_irq_work);
528 INIT_WORK(&wl->tx_work, wl1271_tx_work);
532 static int wl1271_chip_wakeup(struct wl1271 *wl)
534 struct wl1271_partition_set partition;
537 msleep(WL1271_PRE_POWER_ON_SLEEP);
539 msleep(WL1271_POWER_ON_SLEEP);
540 wl1271_spi_reset(wl);
543 /* We don't need a real memory partition here, because we only want
544 * to use the registers at this point. */
545 memset(&partition, 0, sizeof(partition));
546 partition.reg.start = REGISTERS_BASE;
547 partition.reg.size = REGISTERS_DOWN_SIZE;
548 wl1271_set_partition(wl, &partition);
550 /* ELP module wake up */
551 wl1271_fw_wakeup(wl);
553 /* whal_FwCtrl_BootSm() */
555 /* 0. read chip id from CHIP_ID */
556 wl->chip.id = wl1271_spi_read32(wl, CHIP_ID_B);
558 /* 1. check if chip id is valid */
560 switch (wl->chip.id) {
561 case CHIP_ID_1271_PG10:
562 wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
565 ret = wl1271_setup(wl);
569 case CHIP_ID_1271_PG20:
570 wl1271_debug(DEBUG_BOOT, "chip id 0x%x (1271 PG20)",
573 ret = wl1271_setup(wl);
578 wl1271_warning("unsupported chip id: 0x%x", wl->chip.id);
583 if (wl->fw == NULL) {
584 ret = wl1271_fetch_firmware(wl);
589 /* No NVS from netlink, try to get it from the filesystem */
590 if (wl->nvs == NULL) {
591 ret = wl1271_fetch_nvs(wl);
600 int wl1271_plt_start(struct wl1271 *wl)
602 int retries = WL1271_BOOT_RETRIES;
605 mutex_lock(&wl->mutex);
607 wl1271_notice("power up");
609 if (wl->state != WL1271_STATE_OFF) {
610 wl1271_error("cannot go into PLT state because not "
611 "in off state: %d", wl->state);
618 ret = wl1271_chip_wakeup(wl);
622 ret = wl1271_boot(wl);
626 ret = wl1271_plt_init(wl);
630 /* Make sure power saving is disabled */
631 ret = wl1271_acx_sleep_auth(wl, WL1271_PSM_CAM);
635 wl->state = WL1271_STATE_PLT;
636 wl1271_notice("firmware booted in PLT mode (%s)",
641 wl1271_disable_interrupts(wl);
642 mutex_unlock(&wl->mutex);
643 /* Unlocking the mutex in the middle of handling is
644 inherently unsafe. In this case we deem it safe to do,
645 because we need to let any possibly pending IRQ out of
646 the system (and while we are WL1271_STATE_OFF the IRQ
647 work function will not do anything.) Also, any other
648 possible concurrent operations will fail due to the
649 current state, hence the wl1271 struct should be safe. */
650 cancel_work_sync(&wl->irq_work);
651 mutex_lock(&wl->mutex);
653 wl1271_power_off(wl);
656 wl1271_error("firmware boot in PLT mode failed despite %d retries",
657 WL1271_BOOT_RETRIES);
659 mutex_unlock(&wl->mutex);
664 int wl1271_plt_stop(struct wl1271 *wl)
668 mutex_lock(&wl->mutex);
670 wl1271_notice("power down");
672 if (wl->state != WL1271_STATE_PLT) {
673 wl1271_error("cannot power down because not in PLT "
674 "state: %d", wl->state);
679 wl1271_disable_interrupts(wl);
680 wl1271_power_off(wl);
682 wl->state = WL1271_STATE_OFF;
686 mutex_unlock(&wl->mutex);
692 static int wl1271_op_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
694 struct wl1271 *wl = hw->priv;
695 struct ieee80211_conf *conf = &hw->conf;
696 struct ieee80211_tx_info *txinfo = IEEE80211_SKB_CB(skb);
697 struct ieee80211_sta *sta = txinfo->control.sta;
700 /* peek into the rates configured in the STA entry */
701 spin_lock_irqsave(&wl->wl_lock, flags);
702 if (sta && sta->supp_rates[conf->channel->band] != wl->sta_rate_set) {
703 wl->sta_rate_set = sta->supp_rates[conf->channel->band];
704 set_bit(WL1271_FLAG_STA_RATES_CHANGED, &wl->flags);
706 spin_unlock_irqrestore(&wl->wl_lock, flags);
708 /* queue the packet */
709 skb_queue_tail(&wl->tx_queue, skb);
712 * The chip specific setup must run before the first TX packet -
713 * before that, the tx_work will not be initialized!
716 ieee80211_queue_work(wl->hw, &wl->tx_work);
719 * The workqueue is slow to process the tx_queue and we need stop
720 * the queue here, otherwise the queue will get too long.
722 if (skb_queue_len(&wl->tx_queue) >= WL1271_TX_QUEUE_MAX_LENGTH) {
723 ieee80211_stop_queues(wl->hw);
726 * FIXME: this is racy, the variable is not properly
727 * protected. Maybe fix this by removing the stupid
728 * variable altogether and checking the real queue state?
730 set_bit(WL1271_FLAG_TX_QUEUE_STOPPED, &wl->flags);
736 static int wl1271_dev_notify(struct notifier_block *me, unsigned long what,
739 struct net_device *dev;
740 struct wireless_dev *wdev;
742 struct ieee80211_hw *hw;
744 struct wl1271 *wl_temp;
745 struct in_device *idev;
746 struct in_ifaddr *ifa = arg;
749 /* FIXME: this ugly function should probably be implemented in the
750 * mac80211, and here should only be a simple callback handling actual
751 * setting of the filters. Now we need to dig up references to
752 * various structures to gain access to what we need.
753 * Also, because of this, there is no "initial" setting of the filter
754 * in "op_start", because we don't want to dig up struct net_device
755 * there - the filter will be set upon first change of the interface
758 dev = ifa->ifa_dev->dev;
760 wdev = dev->ieee80211_ptr;
768 hw = wiphy_priv(wiphy);
772 /* Check that the interface is one supported by this driver. */
774 list_for_each_entry(wl, &wl_list, list) {
781 /* Get the interface IP address for the device. "ifa" will become
783 - there is no IPV4 protocol address configured
784 - there are multiple (virtual) IPV4 addresses configured
785 When "ifa" is NULL, filtering will be disabled.
790 ifa = idev->ifa_list;
792 if (ifa && ifa->ifa_next)
795 mutex_lock(&wl->mutex);
797 if (wl->state == WL1271_STATE_OFF)
800 ret = wl1271_ps_elp_wakeup(wl, false);
804 ret = wl1271_acx_arp_ip_filter(wl, true,
805 (u8 *)&ifa->ifa_address,
808 ret = wl1271_acx_arp_ip_filter(wl, false, NULL,
810 wl1271_ps_elp_sleep(wl);
813 mutex_unlock(&wl->mutex);
818 static struct notifier_block wl1271_dev_notifier = {
819 .notifier_call = wl1271_dev_notify,
823 static int wl1271_op_start(struct ieee80211_hw *hw)
825 struct wl1271 *wl = hw->priv;
826 int retries = WL1271_BOOT_RETRIES;
829 wl1271_debug(DEBUG_MAC80211, "mac80211 start");
831 mutex_lock(&wl->mutex);
833 if (wl->state != WL1271_STATE_OFF) {
834 wl1271_error("cannot start because not in off state: %d",
842 ret = wl1271_chip_wakeup(wl);
846 ret = wl1271_boot(wl);
850 ret = wl1271_hw_init(wl);
854 wl->state = WL1271_STATE_ON;
855 wl1271_info("firmware booted (%s)", wl->chip.fw_ver);
859 wl1271_disable_interrupts(wl);
860 mutex_unlock(&wl->mutex);
861 /* Unlocking the mutex in the middle of handling is
862 inherently unsafe. In this case we deem it safe to do,
863 because we need to let any possibly pending IRQ out of
864 the system (and while we are WL1271_STATE_OFF the IRQ
865 work function will not do anything.) Also, any other
866 possible concurrent operations will fail due to the
867 current state, hence the wl1271 struct should be safe. */
868 cancel_work_sync(&wl->irq_work);
869 mutex_lock(&wl->mutex);
871 wl1271_power_off(wl);
874 wl1271_error("firmware boot failed despite %d retries",
875 WL1271_BOOT_RETRIES);
877 mutex_unlock(&wl->mutex);
880 list_add(&wl->list, &wl_list);
881 register_inetaddr_notifier(&wl1271_dev_notifier);
887 static void wl1271_op_stop(struct ieee80211_hw *hw)
889 struct wl1271 *wl = hw->priv;
894 wl1271_debug(DEBUG_MAC80211, "mac80211 stop");
896 unregister_inetaddr_notifier(&wl1271_dev_notifier);
899 mutex_lock(&wl->mutex);
901 WARN_ON(wl->state != WL1271_STATE_ON);
903 if (test_and_clear_bit(WL1271_FLAG_SCANNING, &wl->flags)) {
904 mutex_unlock(&wl->mutex);
905 ieee80211_scan_completed(wl->hw, true);
906 mutex_lock(&wl->mutex);
909 wl->state = WL1271_STATE_OFF;
911 wl1271_disable_interrupts(wl);
913 mutex_unlock(&wl->mutex);
915 cancel_work_sync(&wl->irq_work);
916 cancel_work_sync(&wl->tx_work);
918 mutex_lock(&wl->mutex);
920 /* let's notify MAC80211 about the remaining pending TX frames */
922 wl1271_power_off(wl);
924 memset(wl->bssid, 0, ETH_ALEN);
925 memset(wl->ssid, 0, IW_ESSID_MAX_SIZE + 1);
927 wl->bss_type = MAX_BSS_TYPE;
928 wl->band = IEEE80211_BAND_2GHZ;
931 wl->psm_entry_retry = 0;
932 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
933 wl->tx_blocks_available = 0;
934 wl->tx_results_count = 0;
935 wl->tx_packets_count = 0;
936 wl->tx_security_last_seq = 0;
937 wl->tx_security_seq_16 = 0;
938 wl->tx_security_seq_32 = 0;
940 wl->session_counter = 0;
941 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
942 wl->sta_rate_set = 0;
945 for (i = 0; i < NUM_TX_QUEUES; i++)
946 wl->tx_blocks_freed[i] = 0;
948 wl1271_debugfs_reset(wl);
949 mutex_unlock(&wl->mutex);
952 static int wl1271_op_add_interface(struct ieee80211_hw *hw,
953 struct ieee80211_vif *vif)
955 struct wl1271 *wl = hw->priv;
958 wl1271_debug(DEBUG_MAC80211, "mac80211 add interface type %d mac %pM",
959 vif->type, vif->addr);
961 mutex_lock(&wl->mutex);
970 case NL80211_IFTYPE_STATION:
971 wl->bss_type = BSS_TYPE_STA_BSS;
973 case NL80211_IFTYPE_ADHOC:
974 wl->bss_type = BSS_TYPE_IBSS;
981 /* FIXME: what if conf->mac_addr changes? */
984 mutex_unlock(&wl->mutex);
988 static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
989 struct ieee80211_vif *vif)
991 struct wl1271 *wl = hw->priv;
993 mutex_lock(&wl->mutex);
994 wl1271_debug(DEBUG_MAC80211, "mac80211 remove interface");
996 mutex_unlock(&wl->mutex);
1000 static int wl1271_op_config_interface(struct ieee80211_hw *hw,
1001 struct ieee80211_vif *vif,
1002 struct ieee80211_if_conf *conf)
1004 struct wl1271 *wl = hw->priv;
1005 struct sk_buff *beacon;
1008 wl1271_debug(DEBUG_MAC80211, "mac80211 config_interface bssid %pM",
1010 wl1271_dump_ascii(DEBUG_MAC80211, "ssid: ", conf->ssid,
1013 mutex_lock(&wl->mutex);
1015 ret = wl1271_ps_elp_wakeup(wl, false);
1019 if (memcmp(wl->bssid, conf->bssid, ETH_ALEN)) {
1020 wl1271_debug(DEBUG_MAC80211, "bssid changed");
1022 memcpy(wl->bssid, conf->bssid, ETH_ALEN);
1024 ret = wl1271_cmd_join(wl);
1028 ret = wl1271_cmd_build_null_data(wl);
1033 wl->ssid_len = conf->ssid_len;
1035 memcpy(wl->ssid, conf->ssid, wl->ssid_len);
1037 if (conf->changed & IEEE80211_IFCC_BEACON) {
1038 beacon = ieee80211_beacon_get(hw, vif);
1039 ret = wl1271_cmd_template_set(wl, CMD_TEMPL_BEACON,
1040 beacon->data, beacon->len);
1043 dev_kfree_skb(beacon);
1047 ret = wl1271_cmd_template_set(wl, CMD_TEMPL_PROBE_RESPONSE,
1048 beacon->data, beacon->len);
1050 dev_kfree_skb(beacon);
1057 wl1271_ps_elp_sleep(wl);
1060 mutex_unlock(&wl->mutex);
1066 static int wl1271_join_channel(struct wl1271 *wl, int channel)
1069 /* we need to use a dummy BSSID for now */
1070 static const u8 dummy_bssid[ETH_ALEN] = { 0x0b, 0xad, 0xde,
1073 /* the dummy join is not required for ad-hoc */
1074 if (wl->bss_type == BSS_TYPE_IBSS)
1077 /* disable mac filter, so we hear everything */
1078 wl->rx_config &= ~CFG_BSSID_FILTER_EN;
1080 wl->channel = channel;
1081 memcpy(wl->bssid, dummy_bssid, ETH_ALEN);
1083 ret = wl1271_cmd_join(wl);
1087 set_bit(WL1271_FLAG_JOINED, &wl->flags);
1093 static int wl1271_unjoin_channel(struct wl1271 *wl)
1097 /* to stop listening to a channel, we disconnect */
1098 ret = wl1271_cmd_disconnect(wl);
1102 clear_bit(WL1271_FLAG_JOINED, &wl->flags);
1104 memset(wl->bssid, 0, ETH_ALEN);
1105 wl->rx_config = WL1271_DEFAULT_RX_CONFIG;
1111 static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed)
1113 struct wl1271 *wl = hw->priv;
1114 struct ieee80211_conf *conf = &hw->conf;
1115 int channel, ret = 0;
1117 channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
1119 wl1271_debug(DEBUG_MAC80211, "mac80211 config ch %d psm %s power %d %s",
1121 conf->flags & IEEE80211_CONF_PS ? "on" : "off",
1123 conf->flags & IEEE80211_CONF_IDLE ? "idle" : "in use");
1125 mutex_lock(&wl->mutex);
1127 wl->band = conf->channel->band;
1129 ret = wl1271_ps_elp_wakeup(wl, false);
1133 if (changed & IEEE80211_CONF_CHANGE_IDLE) {
1134 if (conf->flags & IEEE80211_CONF_IDLE &&
1135 test_bit(WL1271_FLAG_JOINED, &wl->flags))
1136 wl1271_unjoin_channel(wl);
1137 else if (!(conf->flags & IEEE80211_CONF_IDLE))
1138 wl1271_join_channel(wl, channel);
1140 if (conf->flags & IEEE80211_CONF_IDLE) {
1141 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
1142 wl->sta_rate_set = 0;
1143 wl1271_acx_rate_policies(wl);
1147 /* if the channel changes while joined, join again */
1148 if (channel != wl->channel &&
1149 test_bit(WL1271_FLAG_JOINED, &wl->flags)) {
1150 wl->channel = channel;
1151 /* FIXME: maybe use CMD_CHANNEL_SWITCH for this? */
1152 ret = wl1271_cmd_join(wl);
1154 wl1271_warning("cmd join to update channel failed %d",
1157 wl->channel = channel;
1159 if (conf->flags & IEEE80211_CONF_PS &&
1160 !test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
1161 set_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
1164 * We enter PSM only if we're already associated.
1165 * If we're not, we'll enter it when joining an SSID,
1166 * through the bss_info_changed() hook.
1168 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags)) {
1169 wl1271_info("psm enabled");
1170 ret = wl1271_ps_set_mode(wl, STATION_POWER_SAVE_MODE,
1173 } else if (!(conf->flags & IEEE80211_CONF_PS) &&
1174 test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
1175 wl1271_info("psm disabled");
1177 clear_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
1179 if (test_bit(WL1271_FLAG_PSM, &wl->flags))
1180 ret = wl1271_ps_set_mode(wl, STATION_ACTIVE_MODE,
1184 if (conf->power_level != wl->power_level) {
1185 ret = wl1271_acx_tx_power(wl, conf->power_level);
1189 wl->power_level = conf->power_level;
1193 wl1271_ps_elp_sleep(wl);
1196 mutex_unlock(&wl->mutex);
1201 struct wl1271_filter_params {
1204 u8 mc_list[ACX_MC_ADDRESS_GROUP_MAX][ETH_ALEN];
1207 static u64 wl1271_op_prepare_multicast(struct ieee80211_hw *hw, int mc_count,
1208 struct dev_addr_list *mc_list)
1210 struct wl1271_filter_params *fp;
1213 fp = kzalloc(sizeof(*fp), GFP_ATOMIC);
1215 wl1271_error("Out of memory setting filters.");
1219 /* update multicast filtering parameters */
1221 if (mc_count > ACX_MC_ADDRESS_GROUP_MAX) {
1223 fp->enabled = false;
1226 fp->mc_list_length = 0;
1227 for (i = 0; i < mc_count; i++) {
1228 if (mc_list->da_addrlen == ETH_ALEN) {
1229 memcpy(fp->mc_list[fp->mc_list_length],
1230 mc_list->da_addr, ETH_ALEN);
1231 fp->mc_list_length++;
1233 wl1271_warning("Unknown mc address length.");
1234 mc_list = mc_list->next;
1237 return (u64)(unsigned long)fp;
1240 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
1243 FIF_BCN_PRBRESP_PROMISC | \
1247 static void wl1271_op_configure_filter(struct ieee80211_hw *hw,
1248 unsigned int changed,
1249 unsigned int *total, u64 multicast)
1251 struct wl1271_filter_params *fp = (void *)(unsigned long)multicast;
1252 struct wl1271 *wl = hw->priv;
1255 wl1271_debug(DEBUG_MAC80211, "mac80211 configure filter");
1257 mutex_lock(&wl->mutex);
1259 if (wl->state == WL1271_STATE_OFF)
1262 ret = wl1271_ps_elp_wakeup(wl, false);
1266 *total &= WL1271_SUPPORTED_FILTERS;
1267 changed &= WL1271_SUPPORTED_FILTERS;
1269 if (*total & FIF_ALLMULTI)
1270 ret = wl1271_acx_group_address_tbl(wl, false, NULL, 0);
1272 ret = wl1271_acx_group_address_tbl(wl, fp->enabled,
1274 fp->mc_list_length);
1280 /* FIXME: We still need to set our filters properly */
1282 /* determine, whether supported filter values have changed */
1286 /* apply configured filters */
1287 ret = wl1271_acx_rx_config(wl, wl->rx_config, wl->rx_filter);
1292 wl1271_ps_elp_sleep(wl);
1295 mutex_unlock(&wl->mutex);
1298 static int wl1271_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
1299 struct ieee80211_vif *vif,
1300 struct ieee80211_sta *sta,
1301 struct ieee80211_key_conf *key_conf)
1303 struct wl1271 *wl = hw->priv;
1310 static const u8 bcast_addr[ETH_ALEN] =
1311 { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
1313 wl1271_debug(DEBUG_MAC80211, "mac80211 set key");
1315 addr = sta ? sta->addr : bcast_addr;
1317 wl1271_debug(DEBUG_CRYPT, "CMD: 0x%x", cmd);
1318 wl1271_dump(DEBUG_CRYPT, "ADDR: ", addr, ETH_ALEN);
1319 wl1271_debug(DEBUG_CRYPT, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
1320 key_conf->alg, key_conf->keyidx,
1321 key_conf->keylen, key_conf->flags);
1322 wl1271_dump(DEBUG_CRYPT, "KEY: ", key_conf->key, key_conf->keylen);
1324 if (is_zero_ether_addr(addr)) {
1325 /* We dont support TX only encryption */
1330 mutex_lock(&wl->mutex);
1332 ret = wl1271_ps_elp_wakeup(wl, false);
1336 switch (key_conf->alg) {
1340 key_conf->hw_key_idx = key_conf->keyidx;
1343 key_type = KEY_TKIP;
1345 key_conf->hw_key_idx = key_conf->keyidx;
1346 tx_seq_32 = wl->tx_security_seq_32;
1347 tx_seq_16 = wl->tx_security_seq_16;
1352 key_conf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
1353 tx_seq_32 = wl->tx_security_seq_32;
1354 tx_seq_16 = wl->tx_security_seq_16;
1357 wl1271_error("Unknown key algo 0x%x", key_conf->alg);
1365 ret = wl1271_cmd_set_key(wl, KEY_ADD_OR_REPLACE,
1366 key_conf->keyidx, key_type,
1367 key_conf->keylen, key_conf->key,
1368 addr, tx_seq_32, tx_seq_16);
1370 wl1271_error("Could not add or replace key");
1376 ret = wl1271_cmd_set_key(wl, KEY_REMOVE,
1377 key_conf->keyidx, key_type,
1378 key_conf->keylen, key_conf->key,
1381 wl1271_error("Could not remove key");
1387 wl1271_error("Unsupported key cmd 0x%x", cmd);
1395 wl1271_ps_elp_sleep(wl);
1398 mutex_unlock(&wl->mutex);
1404 static int wl1271_op_hw_scan(struct ieee80211_hw *hw,
1405 struct cfg80211_scan_request *req)
1407 struct wl1271 *wl = hw->priv;
1412 wl1271_debug(DEBUG_MAC80211, "mac80211 hw scan");
1415 ssid = req->ssids[0].ssid;
1416 len = req->ssids[0].ssid_len;
1419 mutex_lock(&wl->mutex);
1421 ret = wl1271_ps_elp_wakeup(wl, false);
1425 if (wl1271_11a_enabled())
1426 ret = wl1271_cmd_scan(hw->priv, ssid, len, 1, 0,
1427 WL1271_SCAN_BAND_DUAL, 3);
1429 ret = wl1271_cmd_scan(hw->priv, ssid, len, 1, 0,
1430 WL1271_SCAN_BAND_2_4_GHZ, 3);
1432 wl1271_ps_elp_sleep(wl);
1435 mutex_unlock(&wl->mutex);
1440 static int wl1271_op_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
1442 struct wl1271 *wl = hw->priv;
1445 mutex_lock(&wl->mutex);
1447 ret = wl1271_ps_elp_wakeup(wl, false);
1451 ret = wl1271_acx_rts_threshold(wl, (u16) value);
1453 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret);
1455 wl1271_ps_elp_sleep(wl);
1458 mutex_unlock(&wl->mutex);
1463 static void wl1271_ssid_set(struct wl1271 *wl, struct sk_buff *beacon)
1465 u8 *ptr = beacon->data +
1466 offsetof(struct ieee80211_mgmt, u.beacon.variable);
1468 /* find the location of the ssid in the beacon */
1469 while (ptr < beacon->data + beacon->len) {
1470 if (ptr[0] == WLAN_EID_SSID) {
1471 wl->ssid_len = ptr[1];
1472 memcpy(wl->ssid, ptr+2, wl->ssid_len);
1477 wl1271_error("ad-hoc beacon template has no SSID!\n");
1480 static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
1481 struct ieee80211_vif *vif,
1482 struct ieee80211_bss_conf *bss_conf,
1485 enum wl1271_cmd_ps_mode mode;
1486 struct wl1271 *wl = hw->priv;
1489 wl1271_debug(DEBUG_MAC80211, "mac80211 bss info changed");
1491 mutex_lock(&wl->mutex);
1493 ret = wl1271_ps_elp_wakeup(wl, false);
1497 if (wl->bss_type == BSS_TYPE_IBSS) {
1498 /* FIXME: This implements rudimentary ad-hoc support -
1499 proper templates are on the wish list and notification
1500 on when they change. This patch will update the templates
1501 on every call to this function. */
1502 struct sk_buff *beacon = ieee80211_beacon_get(hw, vif);
1505 struct ieee80211_hdr *hdr;
1507 wl1271_ssid_set(wl, beacon);
1508 ret = wl1271_cmd_template_set(wl, CMD_TEMPL_BEACON,
1513 dev_kfree_skb(beacon);
1517 hdr = (struct ieee80211_hdr *) beacon->data;
1518 hdr->frame_control = cpu_to_le16(
1519 IEEE80211_FTYPE_MGMT |
1520 IEEE80211_STYPE_PROBE_RESP);
1522 ret = wl1271_cmd_template_set(wl,
1523 CMD_TEMPL_PROBE_RESPONSE,
1526 dev_kfree_skb(beacon);
1532 if ((changed & BSS_CHANGED_BSSID) &&
1534 * Now we know the correct bssid, so we send a new join command
1535 * and enable the BSSID filter
1537 memcmp(wl->bssid, bss_conf->bssid, ETH_ALEN)) {
1538 wl->rx_config |= CFG_BSSID_FILTER_EN;
1539 memcpy(wl->bssid, bss_conf->bssid, ETH_ALEN);
1540 ret = wl1271_cmd_build_null_data(wl);
1542 wl1271_warning("cmd buld null data failed %d",
1547 ret = wl1271_cmd_join(wl);
1549 wl1271_warning("cmd join failed %d", ret);
1552 set_bit(WL1271_FLAG_JOINED, &wl->flags);
1555 if (changed & BSS_CHANGED_ASSOC) {
1556 if (bss_conf->assoc) {
1557 wl->aid = bss_conf->aid;
1558 set_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
1561 * with wl1271, we don't need to update the
1562 * beacon_int and dtim_period, because the firmware
1563 * updates it by itself when the first beacon is
1564 * received after a join.
1566 ret = wl1271_cmd_build_ps_poll(wl, wl->aid);
1570 ret = wl1271_acx_aid(wl, wl->aid);
1574 /* If we want to go in PSM but we're not there yet */
1575 if (test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags) &&
1576 !test_bit(WL1271_FLAG_PSM, &wl->flags)) {
1577 mode = STATION_POWER_SAVE_MODE;
1578 ret = wl1271_ps_set_mode(wl, mode, true);
1583 /* use defaults when not associated */
1584 clear_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
1590 if (changed & BSS_CHANGED_ERP_SLOT) {
1591 if (bss_conf->use_short_slot)
1592 ret = wl1271_acx_slot(wl, SLOT_TIME_SHORT);
1594 ret = wl1271_acx_slot(wl, SLOT_TIME_LONG);
1596 wl1271_warning("Set slot time failed %d", ret);
1601 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
1602 if (bss_conf->use_short_preamble)
1603 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_SHORT);
1605 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_LONG);
1608 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
1609 if (bss_conf->use_cts_prot)
1610 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_ENABLE);
1612 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_DISABLE);
1614 wl1271_warning("Set ctsprotect failed %d", ret);
1620 wl1271_ps_elp_sleep(wl);
1623 mutex_unlock(&wl->mutex);
1626 static int wl1271_op_conf_tx(struct ieee80211_hw *hw, u16 queue,
1627 const struct ieee80211_tx_queue_params *params)
1629 struct wl1271 *wl = hw->priv;
1632 mutex_lock(&wl->mutex);
1634 wl1271_debug(DEBUG_MAC80211, "mac80211 conf tx %d", queue);
1636 ret = wl1271_acx_ac_cfg(wl, wl1271_tx_get_queue(queue),
1637 params->cw_min, params->cw_max,
1638 params->aifs, params->txop);
1642 ret = wl1271_acx_tid_cfg(wl, wl1271_tx_get_queue(queue),
1643 CONF_CHANNEL_TYPE_EDCF,
1644 wl1271_tx_get_queue(queue),
1645 CONF_PS_SCHEME_LEGACY_PSPOLL,
1646 CONF_ACK_POLICY_LEGACY, 0, 0);
1651 mutex_unlock(&wl->mutex);
1657 /* can't be const, mac80211 writes to this */
1658 static struct ieee80211_rate wl1271_rates[] = {
1660 .hw_value = CONF_HW_BIT_RATE_1MBPS,
1661 .hw_value_short = CONF_HW_BIT_RATE_1MBPS, },
1663 .hw_value = CONF_HW_BIT_RATE_2MBPS,
1664 .hw_value_short = CONF_HW_BIT_RATE_2MBPS,
1665 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
1667 .hw_value = CONF_HW_BIT_RATE_5_5MBPS,
1668 .hw_value_short = CONF_HW_BIT_RATE_5_5MBPS,
1669 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
1671 .hw_value = CONF_HW_BIT_RATE_11MBPS,
1672 .hw_value_short = CONF_HW_BIT_RATE_11MBPS,
1673 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
1675 .hw_value = CONF_HW_BIT_RATE_6MBPS,
1676 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
1678 .hw_value = CONF_HW_BIT_RATE_9MBPS,
1679 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
1681 .hw_value = CONF_HW_BIT_RATE_12MBPS,
1682 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
1684 .hw_value = CONF_HW_BIT_RATE_18MBPS,
1685 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
1687 .hw_value = CONF_HW_BIT_RATE_24MBPS,
1688 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
1690 .hw_value = CONF_HW_BIT_RATE_36MBPS,
1691 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
1693 .hw_value = CONF_HW_BIT_RATE_48MBPS,
1694 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
1696 .hw_value = CONF_HW_BIT_RATE_54MBPS,
1697 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
1700 /* can't be const, mac80211 writes to this */
1701 static struct ieee80211_channel wl1271_channels[] = {
1702 { .hw_value = 1, .center_freq = 2412, .max_power = 25 },
1703 { .hw_value = 2, .center_freq = 2417, .max_power = 25 },
1704 { .hw_value = 3, .center_freq = 2422, .max_power = 25 },
1705 { .hw_value = 4, .center_freq = 2427, .max_power = 25 },
1706 { .hw_value = 5, .center_freq = 2432, .max_power = 25 },
1707 { .hw_value = 6, .center_freq = 2437, .max_power = 25 },
1708 { .hw_value = 7, .center_freq = 2442, .max_power = 25 },
1709 { .hw_value = 8, .center_freq = 2447, .max_power = 25 },
1710 { .hw_value = 9, .center_freq = 2452, .max_power = 25 },
1711 { .hw_value = 10, .center_freq = 2457, .max_power = 25 },
1712 { .hw_value = 11, .center_freq = 2462, .max_power = 25 },
1713 { .hw_value = 12, .center_freq = 2467, .max_power = 25 },
1714 { .hw_value = 13, .center_freq = 2472, .max_power = 25 },
1717 /* can't be const, mac80211 writes to this */
1718 static struct ieee80211_supported_band wl1271_band_2ghz = {
1719 .channels = wl1271_channels,
1720 .n_channels = ARRAY_SIZE(wl1271_channels),
1721 .bitrates = wl1271_rates,
1722 .n_bitrates = ARRAY_SIZE(wl1271_rates),
1725 /* 5 GHz data rates for WL1273 */
1726 static struct ieee80211_rate wl1271_rates_5ghz[] = {
1728 .hw_value = CONF_HW_BIT_RATE_6MBPS,
1729 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
1731 .hw_value = CONF_HW_BIT_RATE_9MBPS,
1732 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
1734 .hw_value = CONF_HW_BIT_RATE_12MBPS,
1735 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
1737 .hw_value = CONF_HW_BIT_RATE_18MBPS,
1738 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
1740 .hw_value = CONF_HW_BIT_RATE_24MBPS,
1741 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
1743 .hw_value = CONF_HW_BIT_RATE_36MBPS,
1744 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
1746 .hw_value = CONF_HW_BIT_RATE_48MBPS,
1747 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
1749 .hw_value = CONF_HW_BIT_RATE_54MBPS,
1750 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
1753 /* 5 GHz band channels for WL1273 */
1754 static struct ieee80211_channel wl1271_channels_5ghz[] = {
1755 { .hw_value = 183, .center_freq = 4915},
1756 { .hw_value = 184, .center_freq = 4920},
1757 { .hw_value = 185, .center_freq = 4925},
1758 { .hw_value = 187, .center_freq = 4935},
1759 { .hw_value = 188, .center_freq = 4940},
1760 { .hw_value = 189, .center_freq = 4945},
1761 { .hw_value = 192, .center_freq = 4960},
1762 { .hw_value = 196, .center_freq = 4980},
1763 { .hw_value = 7, .center_freq = 5035},
1764 { .hw_value = 8, .center_freq = 5040},
1765 { .hw_value = 9, .center_freq = 5045},
1766 { .hw_value = 11, .center_freq = 5055},
1767 { .hw_value = 12, .center_freq = 5060},
1768 { .hw_value = 16, .center_freq = 5080},
1769 { .hw_value = 34, .center_freq = 5170},
1770 { .hw_value = 36, .center_freq = 5180},
1771 { .hw_value = 38, .center_freq = 5190},
1772 { .hw_value = 40, .center_freq = 5200},
1773 { .hw_value = 42, .center_freq = 5210},
1774 { .hw_value = 44, .center_freq = 5220},
1775 { .hw_value = 46, .center_freq = 5230},
1776 { .hw_value = 48, .center_freq = 5240},
1777 { .hw_value = 52, .center_freq = 5260},
1778 { .hw_value = 56, .center_freq = 5280},
1779 { .hw_value = 60, .center_freq = 5300},
1780 { .hw_value = 64, .center_freq = 5320},
1781 { .hw_value = 100, .center_freq = 5500},
1782 { .hw_value = 104, .center_freq = 5520},
1783 { .hw_value = 108, .center_freq = 5540},
1784 { .hw_value = 112, .center_freq = 5560},
1785 { .hw_value = 116, .center_freq = 5580},
1786 { .hw_value = 120, .center_freq = 5600},
1787 { .hw_value = 124, .center_freq = 5620},
1788 { .hw_value = 128, .center_freq = 5640},
1789 { .hw_value = 132, .center_freq = 5660},
1790 { .hw_value = 136, .center_freq = 5680},
1791 { .hw_value = 140, .center_freq = 5700},
1792 { .hw_value = 149, .center_freq = 5745},
1793 { .hw_value = 153, .center_freq = 5765},
1794 { .hw_value = 157, .center_freq = 5785},
1795 { .hw_value = 161, .center_freq = 5805},
1796 { .hw_value = 165, .center_freq = 5825},
1800 static struct ieee80211_supported_band wl1271_band_5ghz = {
1801 .channels = wl1271_channels_5ghz,
1802 .n_channels = ARRAY_SIZE(wl1271_channels_5ghz),
1803 .bitrates = wl1271_rates_5ghz,
1804 .n_bitrates = ARRAY_SIZE(wl1271_rates_5ghz),
1807 static const struct ieee80211_ops wl1271_ops = {
1808 .start = wl1271_op_start,
1809 .stop = wl1271_op_stop,
1810 .add_interface = wl1271_op_add_interface,
1811 .remove_interface = wl1271_op_remove_interface,
1812 .config = wl1271_op_config,
1813 /* .config_interface = wl1271_op_config_interface, */
1814 .prepare_multicast = wl1271_op_prepare_multicast,
1815 .configure_filter = wl1271_op_configure_filter,
1817 .set_key = wl1271_op_set_key,
1818 .hw_scan = wl1271_op_hw_scan,
1819 .bss_info_changed = wl1271_op_bss_info_changed,
1820 .set_rts_threshold = wl1271_op_set_rts_threshold,
1821 .conf_tx = wl1271_op_conf_tx,
1824 static int wl1271_register_hw(struct wl1271 *wl)
1828 if (wl->mac80211_registered)
1831 SET_IEEE80211_PERM_ADDR(wl->hw, wl->mac_addr);
1833 ret = ieee80211_register_hw(wl->hw);
1835 wl1271_error("unable to register mac80211 hw: %d", ret);
1839 wl->mac80211_registered = true;
1841 wl1271_notice("loaded");
1846 static int wl1271_init_ieee80211(struct wl1271 *wl)
1848 /* The tx descriptor buffer and the TKIP space. */
1849 wl->hw->extra_tx_headroom = WL1271_TKIP_IV_SPACE +
1850 sizeof(struct wl1271_tx_hw_descr);
1853 /* FIXME: find a proper value */
1854 wl->hw->channel_change_time = 10000;
1856 wl->hw->flags = IEEE80211_HW_SIGNAL_DBM |
1857 IEEE80211_HW_NOISE_DBM |
1858 IEEE80211_HW_BEACON_FILTER |
1859 IEEE80211_HW_SUPPORTS_PS;
1861 wl->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
1862 BIT(NL80211_IFTYPE_ADHOC);
1863 wl->hw->wiphy->max_scan_ssids = 1;
1864 wl->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = &wl1271_band_2ghz;
1866 if (wl1271_11a_enabled())
1867 wl->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = &wl1271_band_5ghz;
1869 SET_IEEE80211_DEV(wl->hw, &wl->spi->dev);
1874 static void wl1271_device_release(struct device *dev)
1879 static struct platform_device wl1271_device = {
1883 /* device model insists to have a release function */
1885 .release = wl1271_device_release,
1889 #define WL1271_DEFAULT_CHANNEL 0
1890 static int __devinit wl1271_probe(struct spi_device *spi)
1892 struct wl12xx_platform_data *pdata;
1893 struct ieee80211_hw *hw;
1896 static const u8 nokia_oui[3] = {0x00, 0x1f, 0xdf};
1898 pdata = spi->dev.platform_data;
1900 wl1271_error("no platform data");
1904 hw = ieee80211_alloc_hw(sizeof(*wl), &wl1271_ops);
1906 wl1271_error("could not alloc ieee80211_hw");
1911 memset(wl, 0, sizeof(*wl));
1913 INIT_LIST_HEAD(&wl->list);
1916 dev_set_drvdata(&spi->dev, wl);
1919 skb_queue_head_init(&wl->tx_queue);
1921 INIT_DELAYED_WORK(&wl->elp_work, wl1271_elp_work);
1922 wl->channel = WL1271_DEFAULT_CHANNEL;
1923 wl->default_key = 0;
1925 wl->rx_config = WL1271_DEFAULT_RX_CONFIG;
1926 wl->rx_filter = WL1271_DEFAULT_RX_FILTER;
1927 wl->psm_entry_retry = 0;
1928 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
1929 wl->basic_rate_set = CONF_TX_RATE_MASK_BASIC;
1930 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
1931 wl->sta_rate_set = 0;
1932 wl->band = IEEE80211_BAND_2GHZ;
1936 for (i = 0; i < ACX_TX_DESCRIPTORS; i++)
1937 wl->tx_frames[i] = NULL;
1939 spin_lock_init(&wl->wl_lock);
1942 * In case our MAC address is not correctly set,
1943 * we use a random but Nokia MAC.
1945 memcpy(wl->mac_addr, nokia_oui, 3);
1946 get_random_bytes(wl->mac_addr + 3, 3);
1948 wl->state = WL1271_STATE_OFF;
1949 mutex_init(&wl->mutex);
1951 /* This is the only SPI value that we need to set here, the rest
1952 * comes from the board-peripherals file */
1953 spi->bits_per_word = 32;
1955 ret = spi_setup(spi);
1957 wl1271_error("spi_setup failed");
1961 wl->set_power = pdata->set_power;
1962 if (!wl->set_power) {
1963 wl1271_error("set power function missing in platform data");
1970 wl1271_error("irq missing in platform data");
1975 ret = request_irq(wl->irq, wl1271_irq, 0, DRIVER_NAME, wl);
1977 wl1271_error("request_irq() failed: %d", ret);
1981 set_irq_type(wl->irq, IRQ_TYPE_EDGE_RISING);
1983 disable_irq(wl->irq);
1985 ret = platform_device_register(&wl1271_device);
1987 wl1271_error("couldn't register platform device");
1990 dev_set_drvdata(&wl1271_device.dev, wl);
1992 /* Apply default driver configuration. */
1993 wl1271_conf_init(wl);
1995 ret = wl1271_init_ieee80211(wl);
1999 ret = wl1271_register_hw(wl);
2003 wl1271_debugfs_init(wl);
2005 wl1271_notice("initialized");
2010 platform_device_unregister(&wl1271_device);
2013 free_irq(wl->irq, wl);
2016 ieee80211_free_hw(hw);
2021 static int __devexit wl1271_remove(struct spi_device *spi)
2023 struct wl1271 *wl = dev_get_drvdata(&spi->dev);
2025 ieee80211_unregister_hw(wl->hw);
2027 wl1271_debugfs_exit(wl);
2028 platform_device_unregister(&wl1271_device);
2029 free_irq(wl->irq, wl);
2030 kfree(wl->target_mem_map);
2036 kfree(wl->fw_status);
2037 kfree(wl->tx_res_if);
2039 ieee80211_free_hw(wl->hw);
2045 static struct spi_driver wl1271_spi_driver = {
2048 .bus = &spi_bus_type,
2049 .owner = THIS_MODULE,
2052 .probe = wl1271_probe,
2053 .remove = __devexit_p(wl1271_remove),
2056 static int __init wl1271_init(void)
2060 ret = spi_register_driver(&wl1271_spi_driver);
2062 wl1271_error("failed to register spi driver: %d", ret);
2070 static void __exit wl1271_exit(void)
2072 spi_unregister_driver(&wl1271_spi_driver);
2074 wl1271_notice("unloaded");
2077 module_init(wl1271_init);
2078 module_exit(wl1271_exit);
2080 MODULE_LICENSE("GPL");
2081 MODULE_AUTHOR("Luciano Coelho <luciano.coelho@nokia.com>");
2082 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");
2083 MODULE_FIRMWARE(WL1271_FW_NAME);