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)
268 struct conf_tx_ac_category *conf_ac;
269 struct conf_tx_tid *conf_tid;
272 ret = wl1271_cmd_general_parms(wl);
276 ret = wl1271_cmd_radio_parms(wl);
280 ret = wl1271_init_templates_config(wl);
284 ret = wl1271_acx_init_mem_config(wl);
288 /* PHY layer config */
289 ret = wl1271_init_phy_config(wl);
291 goto out_free_memmap;
293 ret = wl1271_acx_dco_itrim_params(wl);
295 goto out_free_memmap;
297 /* Initialize connection monitoring thresholds */
298 ret = wl1271_acx_conn_monit_params(wl);
300 goto out_free_memmap;
302 /* Bluetooth WLAN coexistence */
303 ret = wl1271_init_pta(wl);
305 goto out_free_memmap;
307 /* Energy detection */
308 ret = wl1271_init_energy_detection(wl);
310 goto out_free_memmap;
312 /* Default fragmentation threshold */
313 ret = wl1271_acx_frag_threshold(wl);
315 goto out_free_memmap;
317 /* Default TID configuration */
318 for (i = 0; i < wl->conf.tx.tid_conf_count; i++) {
319 conf_tid = &wl->conf.tx.tid_conf[i];
320 ret = wl1271_acx_tid_cfg(wl, conf_tid->queue_id,
321 conf_tid->channel_type,
324 conf_tid->ack_policy,
325 conf_tid->apsd_conf[0],
326 conf_tid->apsd_conf[1]);
328 goto out_free_memmap;
331 /* Default AC configuration */
332 for (i = 0; i < wl->conf.tx.ac_conf_count; i++) {
333 conf_ac = &wl->conf.tx.ac_conf[i];
334 ret = wl1271_acx_ac_cfg(wl, conf_ac->ac, conf_ac->cw_min,
335 conf_ac->cw_max, conf_ac->aifsn,
336 conf_ac->tx_op_limit);
338 goto out_free_memmap;
341 /* Enable data path */
342 ret = wl1271_cmd_data_path(wl, 1);
344 goto out_free_memmap;
346 /* Configure for CAM power saving (ie. always active) */
347 ret = wl1271_acx_sleep_auth(wl, WL1271_PSM_CAM);
349 goto out_free_memmap;
352 ret = wl1271_acx_pm_config(wl);
354 goto out_free_memmap;
359 kfree(wl->target_mem_map);
360 wl->target_mem_map = NULL;
365 static void wl1271_disable_interrupts(struct wl1271 *wl)
367 disable_irq(wl->irq);
370 static void wl1271_power_off(struct wl1271 *wl)
372 wl->set_power(false);
373 clear_bit(WL1271_FLAG_GPIO_POWER, &wl->flags);
376 static void wl1271_power_on(struct wl1271 *wl)
379 set_bit(WL1271_FLAG_GPIO_POWER, &wl->flags);
382 static void wl1271_fw_status(struct wl1271 *wl,
383 struct wl1271_fw_status *status)
388 wl1271_spi_read(wl, FW_STATUS_ADDR, status,
389 sizeof(*status), false);
391 wl1271_debug(DEBUG_IRQ, "intr: 0x%x (fw_rx_counter = %d, "
392 "drv_rx_counter = %d, tx_results_counter = %d)",
394 status->fw_rx_counter,
395 status->drv_rx_counter,
396 status->tx_results_counter);
398 /* update number of available TX blocks */
399 for (i = 0; i < NUM_TX_QUEUES; i++) {
400 u32 cnt = le32_to_cpu(status->tx_released_blks[i]) -
401 wl->tx_blocks_freed[i];
403 wl->tx_blocks_freed[i] =
404 le32_to_cpu(status->tx_released_blks[i]);
405 wl->tx_blocks_available += cnt;
409 /* if more blocks are available now, schedule some tx work */
410 if (total && !skb_queue_empty(&wl->tx_queue))
411 ieee80211_queue_work(wl->hw, &wl->tx_work);
413 /* update the host-chipset time offset */
414 wl->time_offset = jiffies_to_usecs(jiffies) -
415 le32_to_cpu(status->fw_localtime);
418 static void wl1271_irq_work(struct work_struct *work)
423 container_of(work, struct wl1271, irq_work);
425 mutex_lock(&wl->mutex);
427 wl1271_debug(DEBUG_IRQ, "IRQ work");
429 if (wl->state == WL1271_STATE_OFF)
432 ret = wl1271_ps_elp_wakeup(wl, true);
436 wl1271_spi_write32(wl, ACX_REG_INTERRUPT_MASK, WL1271_ACX_INTR_ALL);
438 wl1271_fw_status(wl, wl->fw_status);
439 intr = le32_to_cpu(wl->fw_status->intr);
441 wl1271_debug(DEBUG_IRQ, "Zero interrupt received.");
445 intr &= WL1271_INTR_MASK;
447 if (intr & WL1271_ACX_INTR_EVENT_A) {
448 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_A");
449 wl1271_event_handle(wl, 0);
452 if (intr & WL1271_ACX_INTR_EVENT_B) {
453 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_B");
454 wl1271_event_handle(wl, 1);
457 if (intr & WL1271_ACX_INTR_INIT_COMPLETE)
458 wl1271_debug(DEBUG_IRQ,
459 "WL1271_ACX_INTR_INIT_COMPLETE");
461 if (intr & WL1271_ACX_INTR_HW_AVAILABLE)
462 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_HW_AVAILABLE");
464 if (intr & WL1271_ACX_INTR_DATA) {
465 u8 tx_res_cnt = wl->fw_status->tx_results_counter -
466 wl->tx_results_count;
468 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_DATA");
470 /* check for tx results */
472 wl1271_tx_complete(wl, tx_res_cnt);
474 wl1271_rx(wl, wl->fw_status);
478 wl1271_spi_write32(wl, ACX_REG_INTERRUPT_MASK,
479 WL1271_ACX_INTR_ALL & ~(WL1271_INTR_MASK));
480 wl1271_ps_elp_sleep(wl);
483 mutex_unlock(&wl->mutex);
486 static irqreturn_t wl1271_irq(int irq, void *cookie)
491 wl1271_debug(DEBUG_IRQ, "IRQ");
495 /* complete the ELP completion */
496 spin_lock_irqsave(&wl->wl_lock, flags);
498 complete(wl->elp_compl);
499 wl->elp_compl = NULL;
502 ieee80211_queue_work(wl->hw, &wl->irq_work);
503 spin_unlock_irqrestore(&wl->wl_lock, flags);
508 static int wl1271_fetch_firmware(struct wl1271 *wl)
510 const struct firmware *fw;
513 ret = request_firmware(&fw, WL1271_FW_NAME, &wl->spi->dev);
516 wl1271_error("could not get firmware: %d", ret);
521 wl1271_error("firmware size is not multiple of 32 bits: %zu",
527 wl->fw_len = fw->size;
528 wl->fw = vmalloc(wl->fw_len);
531 wl1271_error("could not allocate memory for the firmware");
536 memcpy(wl->fw, fw->data, wl->fw_len);
541 release_firmware(fw);
546 static int wl1271_update_mac_addr(struct wl1271 *wl)
549 u8 *nvs_ptr = (u8 *)wl->nvs->nvs;
551 /* get mac address from the NVS */
552 wl->mac_addr[0] = nvs_ptr[11];
553 wl->mac_addr[1] = nvs_ptr[10];
554 wl->mac_addr[2] = nvs_ptr[6];
555 wl->mac_addr[3] = nvs_ptr[5];
556 wl->mac_addr[4] = nvs_ptr[4];
557 wl->mac_addr[5] = nvs_ptr[3];
559 /* FIXME: if it is a zero-address, we should bail out. Now, instead,
560 we randomize an address */
561 if (is_zero_ether_addr(wl->mac_addr)) {
562 static const u8 nokia_oui[3] = {0x00, 0x1f, 0xdf};
563 memcpy(wl->mac_addr, nokia_oui, 3);
564 get_random_bytes(wl->mac_addr + 3, 3);
566 /* update this address to the NVS */
567 nvs_ptr[11] = wl->mac_addr[0];
568 nvs_ptr[10] = wl->mac_addr[1];
569 nvs_ptr[6] = wl->mac_addr[2];
570 nvs_ptr[5] = wl->mac_addr[3];
571 nvs_ptr[4] = wl->mac_addr[4];
572 nvs_ptr[3] = wl->mac_addr[5];
575 SET_IEEE80211_PERM_ADDR(wl->hw, wl->mac_addr);
580 static int wl1271_fetch_nvs(struct wl1271 *wl)
582 const struct firmware *fw;
585 ret = request_firmware(&fw, WL1271_NVS_NAME, &wl->spi->dev);
588 wl1271_error("could not get nvs file: %d", ret);
592 if (fw->size != sizeof(struct wl1271_nvs_file)) {
593 wl1271_error("nvs size is not as expected: %zu != %zu",
594 fw->size, sizeof(struct wl1271_nvs_file));
599 wl->nvs = kmalloc(sizeof(struct wl1271_nvs_file), GFP_KERNEL);
602 wl1271_error("could not allocate memory for the nvs file");
607 memcpy(wl->nvs, fw->data, sizeof(struct wl1271_nvs_file));
609 ret = wl1271_update_mac_addr(wl);
612 release_firmware(fw);
617 static void wl1271_fw_wakeup(struct wl1271 *wl)
621 elp_reg = ELPCTRL_WAKE_UP;
622 wl1271_raw_write32(wl, HW_ACCESS_ELP_CTRL_REG_ADDR, elp_reg);
625 static int wl1271_setup(struct wl1271 *wl)
627 wl->fw_status = kmalloc(sizeof(*wl->fw_status), GFP_KERNEL);
631 wl->tx_res_if = kmalloc(sizeof(*wl->tx_res_if), GFP_KERNEL);
632 if (!wl->tx_res_if) {
633 kfree(wl->fw_status);
637 INIT_WORK(&wl->irq_work, wl1271_irq_work);
638 INIT_WORK(&wl->tx_work, wl1271_tx_work);
642 static int wl1271_chip_wakeup(struct wl1271 *wl)
644 struct wl1271_partition_set partition;
647 msleep(WL1271_PRE_POWER_ON_SLEEP);
649 msleep(WL1271_POWER_ON_SLEEP);
650 wl1271_spi_reset(wl);
653 /* We don't need a real memory partition here, because we only want
654 * to use the registers at this point. */
655 memset(&partition, 0, sizeof(partition));
656 partition.reg.start = REGISTERS_BASE;
657 partition.reg.size = REGISTERS_DOWN_SIZE;
658 wl1271_set_partition(wl, &partition);
660 /* ELP module wake up */
661 wl1271_fw_wakeup(wl);
663 /* whal_FwCtrl_BootSm() */
665 /* 0. read chip id from CHIP_ID */
666 wl->chip.id = wl1271_spi_read32(wl, CHIP_ID_B);
668 /* 1. check if chip id is valid */
670 switch (wl->chip.id) {
671 case CHIP_ID_1271_PG10:
672 wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
675 ret = wl1271_setup(wl);
679 case CHIP_ID_1271_PG20:
680 wl1271_debug(DEBUG_BOOT, "chip id 0x%x (1271 PG20)",
683 ret = wl1271_setup(wl);
688 wl1271_warning("unsupported chip id: 0x%x", wl->chip.id);
693 if (wl->fw == NULL) {
694 ret = wl1271_fetch_firmware(wl);
699 /* No NVS from netlink, try to get it from the filesystem */
700 if (wl->nvs == NULL) {
701 ret = wl1271_fetch_nvs(wl);
710 int wl1271_plt_start(struct wl1271 *wl)
712 int retries = WL1271_BOOT_RETRIES;
715 mutex_lock(&wl->mutex);
717 wl1271_notice("power up");
719 if (wl->state != WL1271_STATE_OFF) {
720 wl1271_error("cannot go into PLT state because not "
721 "in off state: %d", wl->state);
728 ret = wl1271_chip_wakeup(wl);
732 ret = wl1271_boot(wl);
736 ret = wl1271_plt_init(wl);
740 wl->state = WL1271_STATE_PLT;
741 wl1271_notice("firmware booted in PLT mode (%s)",
746 wl1271_disable_interrupts(wl);
747 mutex_unlock(&wl->mutex);
748 /* Unlocking the mutex in the middle of handling is
749 inherently unsafe. In this case we deem it safe to do,
750 because we need to let any possibly pending IRQ out of
751 the system (and while we are WL1271_STATE_OFF the IRQ
752 work function will not do anything.) Also, any other
753 possible concurrent operations will fail due to the
754 current state, hence the wl1271 struct should be safe. */
755 cancel_work_sync(&wl->irq_work);
756 mutex_lock(&wl->mutex);
758 wl1271_power_off(wl);
761 wl1271_error("firmware boot in PLT mode failed despite %d retries",
762 WL1271_BOOT_RETRIES);
764 mutex_unlock(&wl->mutex);
769 int wl1271_plt_stop(struct wl1271 *wl)
773 mutex_lock(&wl->mutex);
775 wl1271_notice("power down");
777 if (wl->state != WL1271_STATE_PLT) {
778 wl1271_error("cannot power down because not in PLT "
779 "state: %d", wl->state);
784 wl1271_disable_interrupts(wl);
785 wl1271_power_off(wl);
787 wl->state = WL1271_STATE_OFF;
791 mutex_unlock(&wl->mutex);
797 static int wl1271_op_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
799 struct wl1271 *wl = hw->priv;
800 struct ieee80211_conf *conf = &hw->conf;
801 struct ieee80211_tx_info *txinfo = IEEE80211_SKB_CB(skb);
802 struct ieee80211_sta *sta = txinfo->control.sta;
805 /* peek into the rates configured in the STA entry */
806 spin_lock_irqsave(&wl->wl_lock, flags);
807 if (sta && sta->supp_rates[conf->channel->band] != wl->sta_rate_set) {
808 wl->sta_rate_set = sta->supp_rates[conf->channel->band];
809 set_bit(WL1271_FLAG_STA_RATES_CHANGED, &wl->flags);
811 spin_unlock_irqrestore(&wl->wl_lock, flags);
813 /* queue the packet */
814 skb_queue_tail(&wl->tx_queue, skb);
817 * The chip specific setup must run before the first TX packet -
818 * before that, the tx_work will not be initialized!
821 ieee80211_queue_work(wl->hw, &wl->tx_work);
824 * The workqueue is slow to process the tx_queue and we need stop
825 * the queue here, otherwise the queue will get too long.
827 if (skb_queue_len(&wl->tx_queue) >= WL1271_TX_QUEUE_MAX_LENGTH) {
828 ieee80211_stop_queues(wl->hw);
831 * FIXME: this is racy, the variable is not properly
832 * protected. Maybe fix this by removing the stupid
833 * variable altogether and checking the real queue state?
835 set_bit(WL1271_FLAG_TX_QUEUE_STOPPED, &wl->flags);
841 static int wl1271_dev_notify(struct notifier_block *me, unsigned long what,
844 struct net_device *dev;
845 struct wireless_dev *wdev;
847 struct ieee80211_hw *hw;
849 struct wl1271 *wl_temp;
850 struct in_device *idev;
851 struct in_ifaddr *ifa = arg;
854 /* FIXME: this ugly function should probably be implemented in the
855 * mac80211, and here should only be a simple callback handling actual
856 * setting of the filters. Now we need to dig up references to
857 * various structures to gain access to what we need.
858 * Also, because of this, there is no "initial" setting of the filter
859 * in "op_start", because we don't want to dig up struct net_device
860 * there - the filter will be set upon first change of the interface
863 dev = ifa->ifa_dev->dev;
865 wdev = dev->ieee80211_ptr;
873 hw = wiphy_priv(wiphy);
877 /* Check that the interface is one supported by this driver. */
879 list_for_each_entry(wl, &wl_list, list) {
886 /* Get the interface IP address for the device. "ifa" will become
888 - there is no IPV4 protocol address configured
889 - there are multiple (virtual) IPV4 addresses configured
890 When "ifa" is NULL, filtering will be disabled.
895 ifa = idev->ifa_list;
897 if (ifa && ifa->ifa_next)
900 mutex_lock(&wl->mutex);
902 if (wl->state == WL1271_STATE_OFF)
905 ret = wl1271_ps_elp_wakeup(wl, false);
909 ret = wl1271_acx_arp_ip_filter(wl, true,
910 (u8 *)&ifa->ifa_address,
913 ret = wl1271_acx_arp_ip_filter(wl, false, NULL,
915 wl1271_ps_elp_sleep(wl);
918 mutex_unlock(&wl->mutex);
923 static struct notifier_block wl1271_dev_notifier = {
924 .notifier_call = wl1271_dev_notify,
928 static int wl1271_op_start(struct ieee80211_hw *hw)
930 struct wl1271 *wl = hw->priv;
931 int retries = WL1271_BOOT_RETRIES;
934 wl1271_debug(DEBUG_MAC80211, "mac80211 start");
936 mutex_lock(&wl->mutex);
938 if (wl->state != WL1271_STATE_OFF) {
939 wl1271_error("cannot start because not in off state: %d",
947 ret = wl1271_chip_wakeup(wl);
951 ret = wl1271_boot(wl);
955 ret = wl1271_hw_init(wl);
959 wl->state = WL1271_STATE_ON;
960 wl1271_info("firmware booted (%s)", wl->chip.fw_ver);
964 wl1271_disable_interrupts(wl);
965 mutex_unlock(&wl->mutex);
966 /* Unlocking the mutex in the middle of handling is
967 inherently unsafe. In this case we deem it safe to do,
968 because we need to let any possibly pending IRQ out of
969 the system (and while we are WL1271_STATE_OFF the IRQ
970 work function will not do anything.) Also, any other
971 possible concurrent operations will fail due to the
972 current state, hence the wl1271 struct should be safe. */
973 cancel_work_sync(&wl->irq_work);
974 mutex_lock(&wl->mutex);
976 wl1271_power_off(wl);
979 wl1271_error("firmware boot failed despite %d retries",
980 WL1271_BOOT_RETRIES);
982 mutex_unlock(&wl->mutex);
985 list_add(&wl->list, &wl_list);
986 register_inetaddr_notifier(&wl1271_dev_notifier);
992 static void wl1271_op_stop(struct ieee80211_hw *hw)
994 struct wl1271 *wl = hw->priv;
999 wl1271_debug(DEBUG_MAC80211, "mac80211 stop");
1001 unregister_inetaddr_notifier(&wl1271_dev_notifier);
1002 list_del(&wl->list);
1004 mutex_lock(&wl->mutex);
1006 WARN_ON(wl->state != WL1271_STATE_ON);
1008 if (test_and_clear_bit(WL1271_FLAG_SCANNING, &wl->flags)) {
1009 mutex_unlock(&wl->mutex);
1010 ieee80211_scan_completed(wl->hw, true);
1011 mutex_lock(&wl->mutex);
1014 wl->state = WL1271_STATE_OFF;
1016 wl1271_disable_interrupts(wl);
1018 mutex_unlock(&wl->mutex);
1020 cancel_work_sync(&wl->irq_work);
1021 cancel_work_sync(&wl->tx_work);
1023 mutex_lock(&wl->mutex);
1025 /* let's notify MAC80211 about the remaining pending TX frames */
1026 wl1271_tx_flush(wl);
1027 wl1271_power_off(wl);
1029 memset(wl->bssid, 0, ETH_ALEN);
1030 memset(wl->ssid, 0, IW_ESSID_MAX_SIZE + 1);
1032 wl->bss_type = MAX_BSS_TYPE;
1033 wl->band = IEEE80211_BAND_2GHZ;
1036 wl->psm_entry_retry = 0;
1037 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
1038 wl->tx_blocks_available = 0;
1039 wl->tx_results_count = 0;
1040 wl->tx_packets_count = 0;
1041 wl->tx_security_last_seq = 0;
1042 wl->tx_security_seq_16 = 0;
1043 wl->tx_security_seq_32 = 0;
1044 wl->time_offset = 0;
1045 wl->session_counter = 0;
1046 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
1047 wl->sta_rate_set = 0;
1050 for (i = 0; i < NUM_TX_QUEUES; i++)
1051 wl->tx_blocks_freed[i] = 0;
1053 wl1271_debugfs_reset(wl);
1054 mutex_unlock(&wl->mutex);
1057 static int wl1271_op_add_interface(struct ieee80211_hw *hw,
1058 struct ieee80211_vif *vif)
1060 struct wl1271 *wl = hw->priv;
1063 wl1271_debug(DEBUG_MAC80211, "mac80211 add interface type %d mac %pM",
1064 vif->type, vif->addr);
1066 mutex_lock(&wl->mutex);
1074 switch (vif->type) {
1075 case NL80211_IFTYPE_STATION:
1076 wl->bss_type = BSS_TYPE_STA_BSS;
1078 case NL80211_IFTYPE_ADHOC:
1079 wl->bss_type = BSS_TYPE_IBSS;
1086 /* FIXME: what if conf->mac_addr changes? */
1089 mutex_unlock(&wl->mutex);
1093 static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
1094 struct ieee80211_vif *vif)
1096 struct wl1271 *wl = hw->priv;
1098 mutex_lock(&wl->mutex);
1099 wl1271_debug(DEBUG_MAC80211, "mac80211 remove interface");
1101 mutex_unlock(&wl->mutex);
1105 static int wl1271_op_config_interface(struct ieee80211_hw *hw,
1106 struct ieee80211_vif *vif,
1107 struct ieee80211_if_conf *conf)
1109 struct wl1271 *wl = hw->priv;
1110 struct sk_buff *beacon;
1113 wl1271_debug(DEBUG_MAC80211, "mac80211 config_interface bssid %pM",
1115 wl1271_dump_ascii(DEBUG_MAC80211, "ssid: ", conf->ssid,
1118 mutex_lock(&wl->mutex);
1120 ret = wl1271_ps_elp_wakeup(wl, false);
1124 if (memcmp(wl->bssid, conf->bssid, ETH_ALEN)) {
1125 wl1271_debug(DEBUG_MAC80211, "bssid changed");
1127 memcpy(wl->bssid, conf->bssid, ETH_ALEN);
1129 ret = wl1271_cmd_join(wl);
1133 ret = wl1271_cmd_build_null_data(wl);
1138 wl->ssid_len = conf->ssid_len;
1140 memcpy(wl->ssid, conf->ssid, wl->ssid_len);
1142 if (conf->changed & IEEE80211_IFCC_BEACON) {
1143 beacon = ieee80211_beacon_get(hw, vif);
1144 ret = wl1271_cmd_template_set(wl, CMD_TEMPL_BEACON,
1145 beacon->data, beacon->len);
1148 dev_kfree_skb(beacon);
1152 ret = wl1271_cmd_template_set(wl, CMD_TEMPL_PROBE_RESPONSE,
1153 beacon->data, beacon->len);
1155 dev_kfree_skb(beacon);
1162 wl1271_ps_elp_sleep(wl);
1165 mutex_unlock(&wl->mutex);
1171 static int wl1271_join_channel(struct wl1271 *wl, int channel)
1174 /* we need to use a dummy BSSID for now */
1175 static const u8 dummy_bssid[ETH_ALEN] = { 0x0b, 0xad, 0xde,
1178 /* the dummy join is not required for ad-hoc */
1179 if (wl->bss_type == BSS_TYPE_IBSS)
1182 /* disable mac filter, so we hear everything */
1183 wl->rx_config &= ~CFG_BSSID_FILTER_EN;
1185 wl->channel = channel;
1186 memcpy(wl->bssid, dummy_bssid, ETH_ALEN);
1188 ret = wl1271_cmd_join(wl);
1192 set_bit(WL1271_FLAG_JOINED, &wl->flags);
1198 static int wl1271_unjoin_channel(struct wl1271 *wl)
1202 /* to stop listening to a channel, we disconnect */
1203 ret = wl1271_cmd_disconnect(wl);
1207 clear_bit(WL1271_FLAG_JOINED, &wl->flags);
1209 memset(wl->bssid, 0, ETH_ALEN);
1210 wl->rx_config = WL1271_DEFAULT_RX_CONFIG;
1216 static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed)
1218 struct wl1271 *wl = hw->priv;
1219 struct ieee80211_conf *conf = &hw->conf;
1220 int channel, ret = 0;
1222 channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
1224 wl1271_debug(DEBUG_MAC80211, "mac80211 config ch %d psm %s power %d %s",
1226 conf->flags & IEEE80211_CONF_PS ? "on" : "off",
1228 conf->flags & IEEE80211_CONF_IDLE ? "idle" : "in use");
1230 mutex_lock(&wl->mutex);
1232 wl->band = conf->channel->band;
1234 ret = wl1271_ps_elp_wakeup(wl, false);
1238 if (changed & IEEE80211_CONF_CHANGE_IDLE) {
1239 if (conf->flags & IEEE80211_CONF_IDLE &&
1240 test_bit(WL1271_FLAG_JOINED, &wl->flags))
1241 wl1271_unjoin_channel(wl);
1242 else if (!(conf->flags & IEEE80211_CONF_IDLE))
1243 wl1271_join_channel(wl, channel);
1245 if (conf->flags & IEEE80211_CONF_IDLE) {
1246 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
1247 wl->sta_rate_set = 0;
1248 wl1271_acx_rate_policies(wl);
1252 /* if the channel changes while joined, join again */
1253 if (channel != wl->channel &&
1254 test_bit(WL1271_FLAG_JOINED, &wl->flags)) {
1255 wl->channel = channel;
1256 /* FIXME: maybe use CMD_CHANNEL_SWITCH for this? */
1257 ret = wl1271_cmd_join(wl);
1259 wl1271_warning("cmd join to update channel failed %d",
1262 wl->channel = channel;
1264 if (conf->flags & IEEE80211_CONF_PS &&
1265 !test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
1266 set_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
1269 * We enter PSM only if we're already associated.
1270 * If we're not, we'll enter it when joining an SSID,
1271 * through the bss_info_changed() hook.
1273 if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags)) {
1274 wl1271_info("psm enabled");
1275 ret = wl1271_ps_set_mode(wl, STATION_POWER_SAVE_MODE,
1278 } else if (!(conf->flags & IEEE80211_CONF_PS) &&
1279 test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {
1280 wl1271_info("psm disabled");
1282 clear_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags);
1284 if (test_bit(WL1271_FLAG_PSM, &wl->flags))
1285 ret = wl1271_ps_set_mode(wl, STATION_ACTIVE_MODE,
1289 if (conf->power_level != wl->power_level) {
1290 ret = wl1271_acx_tx_power(wl, conf->power_level);
1294 wl->power_level = conf->power_level;
1298 wl1271_ps_elp_sleep(wl);
1301 mutex_unlock(&wl->mutex);
1306 struct wl1271_filter_params {
1309 u8 mc_list[ACX_MC_ADDRESS_GROUP_MAX][ETH_ALEN];
1312 static u64 wl1271_op_prepare_multicast(struct ieee80211_hw *hw, int mc_count,
1313 struct dev_addr_list *mc_list)
1315 struct wl1271_filter_params *fp;
1318 fp = kzalloc(sizeof(*fp), GFP_ATOMIC);
1320 wl1271_error("Out of memory setting filters.");
1324 /* update multicast filtering parameters */
1326 if (mc_count > ACX_MC_ADDRESS_GROUP_MAX) {
1328 fp->enabled = false;
1331 fp->mc_list_length = 0;
1332 for (i = 0; i < mc_count; i++) {
1333 if (mc_list->da_addrlen == ETH_ALEN) {
1334 memcpy(fp->mc_list[fp->mc_list_length],
1335 mc_list->da_addr, ETH_ALEN);
1336 fp->mc_list_length++;
1338 wl1271_warning("Unknown mc address length.");
1339 mc_list = mc_list->next;
1342 return (u64)(unsigned long)fp;
1345 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
1348 FIF_BCN_PRBRESP_PROMISC | \
1352 static void wl1271_op_configure_filter(struct ieee80211_hw *hw,
1353 unsigned int changed,
1354 unsigned int *total, u64 multicast)
1356 struct wl1271_filter_params *fp = (void *)(unsigned long)multicast;
1357 struct wl1271 *wl = hw->priv;
1360 wl1271_debug(DEBUG_MAC80211, "mac80211 configure filter");
1362 mutex_lock(&wl->mutex);
1364 if (wl->state == WL1271_STATE_OFF)
1367 ret = wl1271_ps_elp_wakeup(wl, false);
1371 *total &= WL1271_SUPPORTED_FILTERS;
1372 changed &= WL1271_SUPPORTED_FILTERS;
1374 if (*total & FIF_ALLMULTI)
1375 ret = wl1271_acx_group_address_tbl(wl, false, NULL, 0);
1377 ret = wl1271_acx_group_address_tbl(wl, fp->enabled,
1379 fp->mc_list_length);
1385 /* FIXME: We still need to set our filters properly */
1387 /* determine, whether supported filter values have changed */
1391 /* apply configured filters */
1392 ret = wl1271_acx_rx_config(wl, wl->rx_config, wl->rx_filter);
1397 wl1271_ps_elp_sleep(wl);
1400 mutex_unlock(&wl->mutex);
1403 static int wl1271_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
1404 struct ieee80211_vif *vif,
1405 struct ieee80211_sta *sta,
1406 struct ieee80211_key_conf *key_conf)
1408 struct wl1271 *wl = hw->priv;
1415 static const u8 bcast_addr[ETH_ALEN] =
1416 { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
1418 wl1271_debug(DEBUG_MAC80211, "mac80211 set key");
1420 addr = sta ? sta->addr : bcast_addr;
1422 wl1271_debug(DEBUG_CRYPT, "CMD: 0x%x", cmd);
1423 wl1271_dump(DEBUG_CRYPT, "ADDR: ", addr, ETH_ALEN);
1424 wl1271_debug(DEBUG_CRYPT, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
1425 key_conf->alg, key_conf->keyidx,
1426 key_conf->keylen, key_conf->flags);
1427 wl1271_dump(DEBUG_CRYPT, "KEY: ", key_conf->key, key_conf->keylen);
1429 if (is_zero_ether_addr(addr)) {
1430 /* We dont support TX only encryption */
1435 mutex_lock(&wl->mutex);
1437 ret = wl1271_ps_elp_wakeup(wl, false);
1441 switch (key_conf->alg) {
1445 key_conf->hw_key_idx = key_conf->keyidx;
1448 key_type = KEY_TKIP;
1450 key_conf->hw_key_idx = key_conf->keyidx;
1451 tx_seq_32 = wl->tx_security_seq_32;
1452 tx_seq_16 = wl->tx_security_seq_16;
1457 key_conf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
1458 tx_seq_32 = wl->tx_security_seq_32;
1459 tx_seq_16 = wl->tx_security_seq_16;
1462 wl1271_error("Unknown key algo 0x%x", key_conf->alg);
1470 ret = wl1271_cmd_set_key(wl, KEY_ADD_OR_REPLACE,
1471 key_conf->keyidx, key_type,
1472 key_conf->keylen, key_conf->key,
1473 addr, tx_seq_32, tx_seq_16);
1475 wl1271_error("Could not add or replace key");
1481 ret = wl1271_cmd_set_key(wl, KEY_REMOVE,
1482 key_conf->keyidx, key_type,
1483 key_conf->keylen, key_conf->key,
1486 wl1271_error("Could not remove key");
1492 wl1271_error("Unsupported key cmd 0x%x", cmd);
1500 wl1271_ps_elp_sleep(wl);
1503 mutex_unlock(&wl->mutex);
1509 static int wl1271_op_hw_scan(struct ieee80211_hw *hw,
1510 struct cfg80211_scan_request *req)
1512 struct wl1271 *wl = hw->priv;
1517 wl1271_debug(DEBUG_MAC80211, "mac80211 hw scan");
1520 ssid = req->ssids[0].ssid;
1521 len = req->ssids[0].ssid_len;
1524 mutex_lock(&wl->mutex);
1526 ret = wl1271_ps_elp_wakeup(wl, false);
1530 if (wl1271_11a_enabled())
1531 ret = wl1271_cmd_scan(hw->priv, ssid, len, 1, 0,
1532 WL1271_SCAN_BAND_DUAL, 3);
1534 ret = wl1271_cmd_scan(hw->priv, ssid, len, 1, 0,
1535 WL1271_SCAN_BAND_2_4_GHZ, 3);
1537 wl1271_ps_elp_sleep(wl);
1540 mutex_unlock(&wl->mutex);
1545 static int wl1271_op_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
1547 struct wl1271 *wl = hw->priv;
1550 mutex_lock(&wl->mutex);
1552 ret = wl1271_ps_elp_wakeup(wl, false);
1556 ret = wl1271_acx_rts_threshold(wl, (u16) value);
1558 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret);
1560 wl1271_ps_elp_sleep(wl);
1563 mutex_unlock(&wl->mutex);
1568 static void wl1271_ssid_set(struct wl1271 *wl, struct sk_buff *beacon)
1570 u8 *ptr = beacon->data +
1571 offsetof(struct ieee80211_mgmt, u.beacon.variable);
1573 /* find the location of the ssid in the beacon */
1574 while (ptr < beacon->data + beacon->len) {
1575 if (ptr[0] == WLAN_EID_SSID) {
1576 wl->ssid_len = ptr[1];
1577 memcpy(wl->ssid, ptr+2, wl->ssid_len);
1582 wl1271_error("ad-hoc beacon template has no SSID!\n");
1585 static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
1586 struct ieee80211_vif *vif,
1587 struct ieee80211_bss_conf *bss_conf,
1590 enum wl1271_cmd_ps_mode mode;
1591 struct wl1271 *wl = hw->priv;
1594 wl1271_debug(DEBUG_MAC80211, "mac80211 bss info changed");
1596 mutex_lock(&wl->mutex);
1598 ret = wl1271_ps_elp_wakeup(wl, false);
1602 if (wl->bss_type == BSS_TYPE_IBSS) {
1603 /* FIXME: This implements rudimentary ad-hoc support -
1604 proper templates are on the wish list and notification
1605 on when they change. This patch will update the templates
1606 on every call to this function. */
1607 struct sk_buff *beacon = ieee80211_beacon_get(hw, vif);
1610 struct ieee80211_hdr *hdr;
1612 wl1271_ssid_set(wl, beacon);
1613 ret = wl1271_cmd_template_set(wl, CMD_TEMPL_BEACON,
1618 dev_kfree_skb(beacon);
1622 hdr = (struct ieee80211_hdr *) beacon->data;
1623 hdr->frame_control = cpu_to_le16(
1624 IEEE80211_FTYPE_MGMT |
1625 IEEE80211_STYPE_PROBE_RESP);
1627 ret = wl1271_cmd_template_set(wl,
1628 CMD_TEMPL_PROBE_RESPONSE,
1631 dev_kfree_skb(beacon);
1637 if ((changed & BSS_CHANGED_BSSID) &&
1639 * Now we know the correct bssid, so we send a new join command
1640 * and enable the BSSID filter
1642 memcmp(wl->bssid, bss_conf->bssid, ETH_ALEN)) {
1643 wl->rx_config |= CFG_BSSID_FILTER_EN;
1644 memcpy(wl->bssid, bss_conf->bssid, ETH_ALEN);
1645 ret = wl1271_cmd_build_null_data(wl);
1647 wl1271_warning("cmd buld null data failed %d",
1652 ret = wl1271_cmd_join(wl);
1654 wl1271_warning("cmd join failed %d", ret);
1657 set_bit(WL1271_FLAG_JOINED, &wl->flags);
1660 if (changed & BSS_CHANGED_ASSOC) {
1661 if (bss_conf->assoc) {
1662 wl->aid = bss_conf->aid;
1663 set_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
1666 * with wl1271, we don't need to update the
1667 * beacon_int and dtim_period, because the firmware
1668 * updates it by itself when the first beacon is
1669 * received after a join.
1671 ret = wl1271_cmd_build_ps_poll(wl, wl->aid);
1675 ret = wl1271_acx_aid(wl, wl->aid);
1679 /* If we want to go in PSM but we're not there yet */
1680 if (test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags) &&
1681 !test_bit(WL1271_FLAG_PSM, &wl->flags)) {
1682 mode = STATION_POWER_SAVE_MODE;
1683 ret = wl1271_ps_set_mode(wl, mode, true);
1688 /* use defaults when not associated */
1689 clear_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
1695 if (changed & BSS_CHANGED_ERP_SLOT) {
1696 if (bss_conf->use_short_slot)
1697 ret = wl1271_acx_slot(wl, SLOT_TIME_SHORT);
1699 ret = wl1271_acx_slot(wl, SLOT_TIME_LONG);
1701 wl1271_warning("Set slot time failed %d", ret);
1706 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
1707 if (bss_conf->use_short_preamble)
1708 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_SHORT);
1710 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_LONG);
1713 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
1714 if (bss_conf->use_cts_prot)
1715 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_ENABLE);
1717 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_DISABLE);
1719 wl1271_warning("Set ctsprotect failed %d", ret);
1725 wl1271_ps_elp_sleep(wl);
1728 mutex_unlock(&wl->mutex);
1731 static int wl1271_op_conf_tx(struct ieee80211_hw *hw, u16 queue,
1732 const struct ieee80211_tx_queue_params *params)
1734 struct wl1271 *wl = hw->priv;
1737 mutex_lock(&wl->mutex);
1739 wl1271_debug(DEBUG_MAC80211, "mac80211 conf tx %d", queue);
1741 ret = wl1271_ps_elp_wakeup(wl, false);
1745 ret = wl1271_acx_ac_cfg(wl, wl1271_tx_get_queue(queue),
1746 params->cw_min, params->cw_max,
1747 params->aifs, params->txop);
1751 ret = wl1271_acx_tid_cfg(wl, wl1271_tx_get_queue(queue),
1752 CONF_CHANNEL_TYPE_EDCF,
1753 wl1271_tx_get_queue(queue),
1754 CONF_PS_SCHEME_LEGACY_PSPOLL,
1755 CONF_ACK_POLICY_LEGACY, 0, 0);
1760 wl1271_ps_elp_sleep(wl);
1763 mutex_unlock(&wl->mutex);
1769 /* can't be const, mac80211 writes to this */
1770 static struct ieee80211_rate wl1271_rates[] = {
1772 .hw_value = CONF_HW_BIT_RATE_1MBPS,
1773 .hw_value_short = CONF_HW_BIT_RATE_1MBPS, },
1775 .hw_value = CONF_HW_BIT_RATE_2MBPS,
1776 .hw_value_short = CONF_HW_BIT_RATE_2MBPS,
1777 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
1779 .hw_value = CONF_HW_BIT_RATE_5_5MBPS,
1780 .hw_value_short = CONF_HW_BIT_RATE_5_5MBPS,
1781 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
1783 .hw_value = CONF_HW_BIT_RATE_11MBPS,
1784 .hw_value_short = CONF_HW_BIT_RATE_11MBPS,
1785 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
1787 .hw_value = CONF_HW_BIT_RATE_6MBPS,
1788 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
1790 .hw_value = CONF_HW_BIT_RATE_9MBPS,
1791 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
1793 .hw_value = CONF_HW_BIT_RATE_12MBPS,
1794 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
1796 .hw_value = CONF_HW_BIT_RATE_18MBPS,
1797 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
1799 .hw_value = CONF_HW_BIT_RATE_24MBPS,
1800 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
1802 .hw_value = CONF_HW_BIT_RATE_36MBPS,
1803 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
1805 .hw_value = CONF_HW_BIT_RATE_48MBPS,
1806 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
1808 .hw_value = CONF_HW_BIT_RATE_54MBPS,
1809 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
1812 /* can't be const, mac80211 writes to this */
1813 static struct ieee80211_channel wl1271_channels[] = {
1814 { .hw_value = 1, .center_freq = 2412, .max_power = 25 },
1815 { .hw_value = 2, .center_freq = 2417, .max_power = 25 },
1816 { .hw_value = 3, .center_freq = 2422, .max_power = 25 },
1817 { .hw_value = 4, .center_freq = 2427, .max_power = 25 },
1818 { .hw_value = 5, .center_freq = 2432, .max_power = 25 },
1819 { .hw_value = 6, .center_freq = 2437, .max_power = 25 },
1820 { .hw_value = 7, .center_freq = 2442, .max_power = 25 },
1821 { .hw_value = 8, .center_freq = 2447, .max_power = 25 },
1822 { .hw_value = 9, .center_freq = 2452, .max_power = 25 },
1823 { .hw_value = 10, .center_freq = 2457, .max_power = 25 },
1824 { .hw_value = 11, .center_freq = 2462, .max_power = 25 },
1825 { .hw_value = 12, .center_freq = 2467, .max_power = 25 },
1826 { .hw_value = 13, .center_freq = 2472, .max_power = 25 },
1829 /* can't be const, mac80211 writes to this */
1830 static struct ieee80211_supported_band wl1271_band_2ghz = {
1831 .channels = wl1271_channels,
1832 .n_channels = ARRAY_SIZE(wl1271_channels),
1833 .bitrates = wl1271_rates,
1834 .n_bitrates = ARRAY_SIZE(wl1271_rates),
1837 /* 5 GHz data rates for WL1273 */
1838 static struct ieee80211_rate wl1271_rates_5ghz[] = {
1840 .hw_value = CONF_HW_BIT_RATE_6MBPS,
1841 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
1843 .hw_value = CONF_HW_BIT_RATE_9MBPS,
1844 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
1846 .hw_value = CONF_HW_BIT_RATE_12MBPS,
1847 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
1849 .hw_value = CONF_HW_BIT_RATE_18MBPS,
1850 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
1852 .hw_value = CONF_HW_BIT_RATE_24MBPS,
1853 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
1855 .hw_value = CONF_HW_BIT_RATE_36MBPS,
1856 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
1858 .hw_value = CONF_HW_BIT_RATE_48MBPS,
1859 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
1861 .hw_value = CONF_HW_BIT_RATE_54MBPS,
1862 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
1865 /* 5 GHz band channels for WL1273 */
1866 static struct ieee80211_channel wl1271_channels_5ghz[] = {
1867 { .hw_value = 183, .center_freq = 4915},
1868 { .hw_value = 184, .center_freq = 4920},
1869 { .hw_value = 185, .center_freq = 4925},
1870 { .hw_value = 187, .center_freq = 4935},
1871 { .hw_value = 188, .center_freq = 4940},
1872 { .hw_value = 189, .center_freq = 4945},
1873 { .hw_value = 192, .center_freq = 4960},
1874 { .hw_value = 196, .center_freq = 4980},
1875 { .hw_value = 7, .center_freq = 5035},
1876 { .hw_value = 8, .center_freq = 5040},
1877 { .hw_value = 9, .center_freq = 5045},
1878 { .hw_value = 11, .center_freq = 5055},
1879 { .hw_value = 12, .center_freq = 5060},
1880 { .hw_value = 16, .center_freq = 5080},
1881 { .hw_value = 34, .center_freq = 5170},
1882 { .hw_value = 36, .center_freq = 5180},
1883 { .hw_value = 38, .center_freq = 5190},
1884 { .hw_value = 40, .center_freq = 5200},
1885 { .hw_value = 42, .center_freq = 5210},
1886 { .hw_value = 44, .center_freq = 5220},
1887 { .hw_value = 46, .center_freq = 5230},
1888 { .hw_value = 48, .center_freq = 5240},
1889 { .hw_value = 52, .center_freq = 5260},
1890 { .hw_value = 56, .center_freq = 5280},
1891 { .hw_value = 60, .center_freq = 5300},
1892 { .hw_value = 64, .center_freq = 5320},
1893 { .hw_value = 100, .center_freq = 5500},
1894 { .hw_value = 104, .center_freq = 5520},
1895 { .hw_value = 108, .center_freq = 5540},
1896 { .hw_value = 112, .center_freq = 5560},
1897 { .hw_value = 116, .center_freq = 5580},
1898 { .hw_value = 120, .center_freq = 5600},
1899 { .hw_value = 124, .center_freq = 5620},
1900 { .hw_value = 128, .center_freq = 5640},
1901 { .hw_value = 132, .center_freq = 5660},
1902 { .hw_value = 136, .center_freq = 5680},
1903 { .hw_value = 140, .center_freq = 5700},
1904 { .hw_value = 149, .center_freq = 5745},
1905 { .hw_value = 153, .center_freq = 5765},
1906 { .hw_value = 157, .center_freq = 5785},
1907 { .hw_value = 161, .center_freq = 5805},
1908 { .hw_value = 165, .center_freq = 5825},
1912 static struct ieee80211_supported_band wl1271_band_5ghz = {
1913 .channels = wl1271_channels_5ghz,
1914 .n_channels = ARRAY_SIZE(wl1271_channels_5ghz),
1915 .bitrates = wl1271_rates_5ghz,
1916 .n_bitrates = ARRAY_SIZE(wl1271_rates_5ghz),
1919 static const struct ieee80211_ops wl1271_ops = {
1920 .start = wl1271_op_start,
1921 .stop = wl1271_op_stop,
1922 .add_interface = wl1271_op_add_interface,
1923 .remove_interface = wl1271_op_remove_interface,
1924 .config = wl1271_op_config,
1925 /* .config_interface = wl1271_op_config_interface, */
1926 .prepare_multicast = wl1271_op_prepare_multicast,
1927 .configure_filter = wl1271_op_configure_filter,
1929 .set_key = wl1271_op_set_key,
1930 .hw_scan = wl1271_op_hw_scan,
1931 .bss_info_changed = wl1271_op_bss_info_changed,
1932 .set_rts_threshold = wl1271_op_set_rts_threshold,
1933 .conf_tx = wl1271_op_conf_tx,
1936 static int wl1271_register_hw(struct wl1271 *wl)
1940 if (wl->mac80211_registered)
1943 SET_IEEE80211_PERM_ADDR(wl->hw, wl->mac_addr);
1945 ret = ieee80211_register_hw(wl->hw);
1947 wl1271_error("unable to register mac80211 hw: %d", ret);
1951 wl->mac80211_registered = true;
1953 wl1271_notice("loaded");
1958 static int wl1271_init_ieee80211(struct wl1271 *wl)
1960 /* The tx descriptor buffer and the TKIP space. */
1961 wl->hw->extra_tx_headroom = WL1271_TKIP_IV_SPACE +
1962 sizeof(struct wl1271_tx_hw_descr);
1965 /* FIXME: find a proper value */
1966 wl->hw->channel_change_time = 10000;
1968 wl->hw->flags = IEEE80211_HW_SIGNAL_DBM |
1969 IEEE80211_HW_NOISE_DBM |
1970 IEEE80211_HW_BEACON_FILTER |
1971 IEEE80211_HW_SUPPORTS_PS;
1973 wl->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
1974 BIT(NL80211_IFTYPE_ADHOC);
1975 wl->hw->wiphy->max_scan_ssids = 1;
1976 wl->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = &wl1271_band_2ghz;
1978 if (wl1271_11a_enabled())
1979 wl->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = &wl1271_band_5ghz;
1981 SET_IEEE80211_DEV(wl->hw, &wl->spi->dev);
1986 static void wl1271_device_release(struct device *dev)
1991 static struct platform_device wl1271_device = {
1995 /* device model insists to have a release function */
1997 .release = wl1271_device_release,
2001 #define WL1271_DEFAULT_CHANNEL 0
2002 static int __devinit wl1271_probe(struct spi_device *spi)
2004 struct wl12xx_platform_data *pdata;
2005 struct ieee80211_hw *hw;
2009 pdata = spi->dev.platform_data;
2011 wl1271_error("no platform data");
2015 hw = ieee80211_alloc_hw(sizeof(*wl), &wl1271_ops);
2017 wl1271_error("could not alloc ieee80211_hw");
2022 memset(wl, 0, sizeof(*wl));
2024 INIT_LIST_HEAD(&wl->list);
2027 dev_set_drvdata(&spi->dev, wl);
2030 skb_queue_head_init(&wl->tx_queue);
2032 INIT_DELAYED_WORK(&wl->elp_work, wl1271_elp_work);
2033 wl->channel = WL1271_DEFAULT_CHANNEL;
2034 wl->default_key = 0;
2036 wl->rx_config = WL1271_DEFAULT_RX_CONFIG;
2037 wl->rx_filter = WL1271_DEFAULT_RX_FILTER;
2038 wl->psm_entry_retry = 0;
2039 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
2040 wl->basic_rate_set = CONF_TX_RATE_MASK_BASIC;
2041 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
2042 wl->sta_rate_set = 0;
2043 wl->band = IEEE80211_BAND_2GHZ;
2047 for (i = 0; i < ACX_TX_DESCRIPTORS; i++)
2048 wl->tx_frames[i] = NULL;
2050 spin_lock_init(&wl->wl_lock);
2052 wl->state = WL1271_STATE_OFF;
2053 mutex_init(&wl->mutex);
2055 /* This is the only SPI value that we need to set here, the rest
2056 * comes from the board-peripherals file */
2057 spi->bits_per_word = 32;
2059 ret = spi_setup(spi);
2061 wl1271_error("spi_setup failed");
2065 wl->set_power = pdata->set_power;
2066 if (!wl->set_power) {
2067 wl1271_error("set power function missing in platform data");
2074 wl1271_error("irq missing in platform data");
2079 ret = request_irq(wl->irq, wl1271_irq, 0, DRIVER_NAME, wl);
2081 wl1271_error("request_irq() failed: %d", ret);
2085 set_irq_type(wl->irq, IRQ_TYPE_EDGE_RISING);
2087 disable_irq(wl->irq);
2089 ret = platform_device_register(&wl1271_device);
2091 wl1271_error("couldn't register platform device");
2094 dev_set_drvdata(&wl1271_device.dev, wl);
2096 /* Apply default driver configuration. */
2097 wl1271_conf_init(wl);
2099 ret = wl1271_init_ieee80211(wl);
2103 ret = wl1271_register_hw(wl);
2107 wl1271_debugfs_init(wl);
2109 wl1271_notice("initialized");
2114 platform_device_unregister(&wl1271_device);
2117 free_irq(wl->irq, wl);
2120 ieee80211_free_hw(hw);
2125 static int __devexit wl1271_remove(struct spi_device *spi)
2127 struct wl1271 *wl = dev_get_drvdata(&spi->dev);
2129 ieee80211_unregister_hw(wl->hw);
2131 wl1271_debugfs_exit(wl);
2132 platform_device_unregister(&wl1271_device);
2133 free_irq(wl->irq, wl);
2134 kfree(wl->target_mem_map);
2140 kfree(wl->fw_status);
2141 kfree(wl->tx_res_if);
2143 ieee80211_free_hw(wl->hw);
2149 static struct spi_driver wl1271_spi_driver = {
2152 .bus = &spi_bus_type,
2153 .owner = THIS_MODULE,
2156 .probe = wl1271_probe,
2157 .remove = __devexit_p(wl1271_remove),
2160 static int __init wl1271_init(void)
2164 ret = spi_register_driver(&wl1271_spi_driver);
2166 wl1271_error("failed to register spi driver: %d", ret);
2174 static void __exit wl1271_exit(void)
2176 spi_unregister_driver(&wl1271_spi_driver);
2178 wl1271_notice("unloaded");
2181 module_init(wl1271_init);
2182 module_exit(wl1271_exit);
2184 MODULE_LICENSE("GPL");
2185 MODULE_AUTHOR("Luciano Coelho <luciano.coelho@nokia.com>");
2186 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");
2187 MODULE_FIRMWARE(WL1271_FW_NAME);