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 static struct conf_drv_settings default_conf = {
52 .per_threshold = 7500,
53 .max_scan_compensation_time = 120000,
54 .nfs_sample_interval = 400,
57 .probe_req_compensation = 170,
58 .scan_window_compensation = 50,
60 .beacon_miss_threshold = 60,
61 .rate_adaptation_threshold = CONF_HW_BIT_RATE_12MBPS,
62 .rate_adaptation_snr = 0
65 .rx_msdu_life_time = 512000,
66 .packet_detection_threshold = 0,
67 .ps_poll_timeout = 15,
69 .rts_threshold = 2347,
70 .rx_cca_threshold = 0xFFEF,
71 .irq_blk_threshold = 0,
72 .irq_pkt_threshold = USHORT_MAX,
74 .queue_type = CONF_RX_QUEUE_TYPE_LOW_PRIORITY,
77 .tx_energy_detection = 0,
79 .enabled_rates = CONF_TX_RATE_MASK_UNSPECIFIED,
80 .short_retry_limit = 10,
81 .long_retry_limit = 10,
104 .aifsn = CONF_TX_AIFS_PIFS,
111 .aifsn = CONF_TX_AIFS_PIFS,
119 .channel_type = CONF_CHANNEL_TYPE_DCF,
120 .tsid = CONF_TX_AC_BE,
121 .ps_scheme = CONF_PS_SCHEME_LEGACY,
122 .ack_policy = CONF_ACK_POLICY_LEGACY,
127 .channel_type = CONF_CHANNEL_TYPE_DCF,
128 .tsid = CONF_TX_AC_BE,
129 .ps_scheme = CONF_PS_SCHEME_LEGACY,
130 .ack_policy = CONF_ACK_POLICY_LEGACY,
135 .channel_type = CONF_CHANNEL_TYPE_DCF,
136 .tsid = CONF_TX_AC_BE,
137 .ps_scheme = CONF_PS_SCHEME_LEGACY,
138 .ack_policy = CONF_ACK_POLICY_LEGACY,
143 .channel_type = CONF_CHANNEL_TYPE_DCF,
144 .tsid = CONF_TX_AC_BE,
145 .ps_scheme = CONF_PS_SCHEME_LEGACY,
146 .ack_policy = CONF_ACK_POLICY_LEGACY,
151 .channel_type = CONF_CHANNEL_TYPE_DCF,
152 .tsid = CONF_TX_AC_BE,
153 .ps_scheme = CONF_PS_SCHEME_LEGACY,
154 .ack_policy = CONF_ACK_POLICY_LEGACY,
159 .channel_type = CONF_CHANNEL_TYPE_DCF,
160 .tsid = CONF_TX_AC_BE,
161 .ps_scheme = CONF_PS_SCHEME_LEGACY,
162 .ack_policy = CONF_ACK_POLICY_LEGACY,
167 .channel_type = CONF_CHANNEL_TYPE_DCF,
168 .tsid = CONF_TX_AC_BE,
169 .ps_scheme = CONF_PS_SCHEME_LEGACY,
170 .ack_policy = CONF_ACK_POLICY_LEGACY,
174 .frag_threshold = IEEE80211_MAX_FRAG_THRESHOLD,
175 .tx_compl_timeout = 5,
176 .tx_compl_threshold = 5
179 .wake_up_event = CONF_WAKE_UP_EVENT_DTIM,
180 .listen_interval = 0,
181 .bcn_filt_mode = CONF_BCN_FILT_MODE_ENABLED,
182 .bcn_filt_ie_count = 1,
185 .ie = WLAN_EID_CHANNEL_SWITCH,
186 .rule = CONF_BCN_RULE_PASS_ON_APPEARANCE,
189 .synch_fail_thold = 5,
190 .bss_lose_timeout = 100,
191 .beacon_rx_timeout = 10000,
192 .broadcast_timeout = 20000,
193 .rx_broadcast_in_ps = 1,
194 .ps_poll_threshold = 4,
195 .sig_trigger_count = 2,
200 .metric = CONF_TRIG_METRIC_RSSI_BEACON,
201 .type = CONF_TRIG_EVENT_TYPE_EDGE,
202 .direction = CONF_TRIG_EVENT_DIR_LOW,
210 .metric = CONF_TRIG_METRIC_RSSI_BEACON,
211 .type = CONF_TRIG_EVENT_TYPE_EDGE,
212 .direction = CONF_TRIG_EVENT_DIR_HIGH,
219 .rssi_bcn_avg_weight = 10,
220 .rssi_pkt_avg_weight = 10,
221 .snr_bcn_avg_weight = 10,
222 .snr_pkt_avg_weight = 10
224 .bet_enable = CONF_BET_MODE_ENABLE,
225 .bet_max_consecutive = 100,
226 .psm_entry_retries = 3
234 0x18, 0x10, 0x05, 0xfb, 0xf0, 0xe8,
241 0x18, 0x10, 0x05, 0xf6, 0xf0, 0xe8,
248 0x18, 0x10, 0x05, 0xfb, 0xf0, 0xe8,
255 * FIXME: The correct value CONF_REF_CLK_38_4_E
256 * causes the firmware to crash on boot.
257 * The value 5 apparently is an
258 * unnoficial XTAL configuration of the
259 * same frequency, which appears to work.
263 .clk_valid_on_wakeup = 0,
265 .single_dual_band = CONF_SINGLE_BAND,
266 .tx_bip_fem_autodetect = 0,
267 .tx_bip_fem_manufacturer = 1,
273 .rx_rssi_and_proc_compens = {
274 0xec, 0xf6, 0x00, 0x0c, 0x18, 0xf8,
275 0xfc, 0x00, 0x08, 0x10, 0xf0, 0xf8,
277 .rx_trace_loss_5 = { 0, 0, 0, 0, 0, 0, 0 },
278 .tx_trace_loss_5 = { 0, 0, 0, 0, 0, 0, 0 },
279 .rx_rssi_and_proc_compens_5 = {
280 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
281 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
283 .tx_ref_pd_voltage = 0x24e,
284 .tx_ref_power = 0x78,
286 .tx_rate_limits_normal = {
287 0x1e, 0x1f, 0x22, 0x24, 0x28, 0x29 },
288 .tx_rate_limits_degraded = {
289 0x1b, 0x1c, 0x1e, 0x20, 0x24, 0x25 },
290 .tx_channel_limits_11b = {
291 0x22, 0x50, 0x50, 0x50, 0x50, 0x50,
292 0x50, 0x50, 0x50, 0x50, 0x22, 0x50,
294 .tx_channel_limits_ofdm = {
295 0x20, 0x50, 0x50, 0x50, 0x50, 0x50,
296 0x50, 0x50, 0x50, 0x50, 0x20, 0x50,
298 .tx_pdv_rate_offsets = {
299 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
301 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x27 },
302 .rx_fem_insertion_loss = 0x14,
303 .tx_ref_pd_voltage_5 = {
304 0x0190, 0x01a4, 0x01c3, 0x01d8,
307 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 },
309 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
310 .tx_rate_limits_normal_5 = {
311 0x1b, 0x1e, 0x21, 0x23, 0x27, 0x00 },
312 .tx_rate_limits_degraded_5 = {
313 0x1b, 0x1e, 0x21, 0x23, 0x27, 0x00 },
314 .tx_channel_limits_ofdm_5 = {
315 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
316 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
317 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
318 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
320 .tx_pdv_rate_offsets_5 = {
321 0x01, 0x02, 0x02, 0x02, 0x02, 0x00 },
323 0x10, 0x10, 0x10, 0x10, 0x10, 0x10 },
324 .rx_fem_insertion_loss_5 = {
325 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10 }
330 static LIST_HEAD(wl_list);
332 static void wl1271_conf_init(struct wl1271 *wl)
336 * This function applies the default configuration to the driver. This
337 * function is invoked upon driver load (spi probe.)
339 * The configuration is stored in a run-time structure in order to
340 * facilitate for run-time adjustment of any of the parameters. Making
341 * changes to the configuration structure will apply the new values on
342 * the next interface up (wl1271_op_start.)
345 /* apply driver default configuration */
346 memcpy(&wl->conf, &default_conf, sizeof(default_conf));
348 if (wl1271_11a_enabled())
349 wl->conf.init.genparam.single_dual_band = CONF_DUAL_BAND;
353 static int wl1271_plt_init(struct wl1271 *wl)
357 ret = wl1271_acx_init_mem_config(wl);
361 ret = wl1271_cmd_data_path(wl, wl->channel, 1);
368 static void wl1271_disable_interrupts(struct wl1271 *wl)
370 disable_irq(wl->irq);
373 static void wl1271_power_off(struct wl1271 *wl)
375 wl->set_power(false);
378 static void wl1271_power_on(struct wl1271 *wl)
383 static void wl1271_fw_status(struct wl1271 *wl,
384 struct wl1271_fw_status *status)
389 wl1271_spi_read(wl, FW_STATUS_ADDR, status,
390 sizeof(*status), false);
392 wl1271_debug(DEBUG_IRQ, "intr: 0x%x (fw_rx_counter = %d, "
393 "drv_rx_counter = %d, tx_results_counter = %d)",
395 status->fw_rx_counter,
396 status->drv_rx_counter,
397 status->tx_results_counter);
399 /* update number of available TX blocks */
400 for (i = 0; i < NUM_TX_QUEUES; i++) {
401 u32 cnt = le32_to_cpu(status->tx_released_blks[i]) -
402 wl->tx_blocks_freed[i];
404 wl->tx_blocks_freed[i] =
405 le32_to_cpu(status->tx_released_blks[i]);
406 wl->tx_blocks_available += cnt;
410 /* if more blocks are available now, schedule some tx work */
411 if (total && !skb_queue_empty(&wl->tx_queue))
412 ieee80211_queue_work(wl->hw, &wl->tx_work);
414 /* update the host-chipset time offset */
415 wl->time_offset = jiffies_to_usecs(jiffies) -
416 le32_to_cpu(status->fw_localtime);
419 static void wl1271_irq_work(struct work_struct *work)
424 container_of(work, struct wl1271, irq_work);
426 mutex_lock(&wl->mutex);
428 wl1271_debug(DEBUG_IRQ, "IRQ work");
430 if (wl->state == WL1271_STATE_OFF)
433 ret = wl1271_ps_elp_wakeup(wl, true);
437 wl1271_spi_write32(wl, ACX_REG_INTERRUPT_MASK, WL1271_ACX_INTR_ALL);
439 wl1271_fw_status(wl, wl->fw_status);
440 intr = le32_to_cpu(wl->fw_status->intr);
442 wl1271_debug(DEBUG_IRQ, "Zero interrupt received.");
446 intr &= WL1271_INTR_MASK;
448 if (intr & WL1271_ACX_INTR_EVENT_A) {
449 bool do_ack = (intr & WL1271_ACX_INTR_EVENT_B) ? false : true;
450 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_A");
451 wl1271_event_handle(wl, 0, do_ack);
454 if (intr & WL1271_ACX_INTR_EVENT_B) {
455 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_B");
456 wl1271_event_handle(wl, 1, true);
459 if (intr & WL1271_ACX_INTR_INIT_COMPLETE)
460 wl1271_debug(DEBUG_IRQ,
461 "WL1271_ACX_INTR_INIT_COMPLETE");
463 if (intr & WL1271_ACX_INTR_HW_AVAILABLE)
464 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_HW_AVAILABLE");
466 if (intr & WL1271_ACX_INTR_DATA) {
467 u8 tx_res_cnt = wl->fw_status->tx_results_counter -
468 wl->tx_results_count;
470 wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_DATA");
472 /* check for tx results */
474 wl1271_tx_complete(wl, tx_res_cnt);
476 wl1271_rx(wl, wl->fw_status);
480 wl1271_spi_write32(wl, ACX_REG_INTERRUPT_MASK,
481 WL1271_ACX_INTR_ALL & ~(WL1271_INTR_MASK));
482 wl1271_ps_elp_sleep(wl);
485 mutex_unlock(&wl->mutex);
488 static irqreturn_t wl1271_irq(int irq, void *cookie)
493 wl1271_debug(DEBUG_IRQ, "IRQ");
497 /* complete the ELP completion */
498 spin_lock_irqsave(&wl->wl_lock, flags);
500 complete(wl->elp_compl);
501 wl->elp_compl = NULL;
504 ieee80211_queue_work(wl->hw, &wl->irq_work);
505 spin_unlock_irqrestore(&wl->wl_lock, flags);
510 static int wl1271_fetch_firmware(struct wl1271 *wl)
512 const struct firmware *fw;
515 ret = request_firmware(&fw, WL1271_FW_NAME, &wl->spi->dev);
518 wl1271_error("could not get firmware: %d", ret);
523 wl1271_error("firmware size is not multiple of 32 bits: %zu",
529 wl->fw_len = fw->size;
530 wl->fw = vmalloc(wl->fw_len);
533 wl1271_error("could not allocate memory for the firmware");
538 memcpy(wl->fw, fw->data, wl->fw_len);
543 release_firmware(fw);
548 static int wl1271_fetch_nvs(struct wl1271 *wl)
550 const struct firmware *fw;
553 ret = request_firmware(&fw, WL1271_NVS_NAME, &wl->spi->dev);
556 wl1271_error("could not get nvs file: %d", ret);
561 wl1271_error("nvs size is not multiple of 32 bits: %zu",
567 wl->nvs_len = fw->size;
568 wl->nvs = kmalloc(wl->nvs_len, GFP_KERNEL);
571 wl1271_error("could not allocate memory for the nvs file");
576 memcpy(wl->nvs, fw->data, wl->nvs_len);
581 release_firmware(fw);
586 static void wl1271_fw_wakeup(struct wl1271 *wl)
590 elp_reg = ELPCTRL_WAKE_UP;
591 wl1271_raw_write32(wl, HW_ACCESS_ELP_CTRL_REG_ADDR, elp_reg);
594 static int wl1271_setup(struct wl1271 *wl)
596 wl->fw_status = kmalloc(sizeof(*wl->fw_status), GFP_KERNEL);
600 wl->tx_res_if = kmalloc(sizeof(*wl->tx_res_if), GFP_KERNEL);
601 if (!wl->tx_res_if) {
602 kfree(wl->fw_status);
606 INIT_WORK(&wl->irq_work, wl1271_irq_work);
607 INIT_WORK(&wl->tx_work, wl1271_tx_work);
611 static int wl1271_chip_wakeup(struct wl1271 *wl)
613 struct wl1271_partition_set partition;
617 msleep(WL1271_POWER_ON_SLEEP);
618 wl1271_spi_reset(wl);
621 /* We don't need a real memory partition here, because we only want
622 * to use the registers at this point. */
623 memset(&partition, 0, sizeof(partition));
624 partition.reg.start = REGISTERS_BASE;
625 partition.reg.size = REGISTERS_DOWN_SIZE;
626 wl1271_set_partition(wl, &partition);
628 /* ELP module wake up */
629 wl1271_fw_wakeup(wl);
631 /* whal_FwCtrl_BootSm() */
633 /* 0. read chip id from CHIP_ID */
634 wl->chip.id = wl1271_spi_read32(wl, CHIP_ID_B);
636 /* 1. check if chip id is valid */
638 switch (wl->chip.id) {
639 case CHIP_ID_1271_PG10:
640 wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
643 ret = wl1271_setup(wl);
647 case CHIP_ID_1271_PG20:
648 wl1271_debug(DEBUG_BOOT, "chip id 0x%x (1271 PG20)",
651 ret = wl1271_setup(wl);
656 wl1271_error("unsupported chip id: 0x%x", wl->chip.id);
661 if (wl->fw == NULL) {
662 ret = wl1271_fetch_firmware(wl);
667 /* No NVS from netlink, try to get it from the filesystem */
668 if (wl->nvs == NULL) {
669 ret = wl1271_fetch_nvs(wl);
677 wl1271_power_off(wl);
683 int wl1271_plt_start(struct wl1271 *wl)
687 mutex_lock(&wl->mutex);
689 wl1271_notice("power up");
691 if (wl->state != WL1271_STATE_OFF) {
692 wl1271_error("cannot go into PLT state because not "
693 "in off state: %d", wl->state);
698 wl->state = WL1271_STATE_PLT;
700 ret = wl1271_chip_wakeup(wl);
704 ret = wl1271_boot(wl);
708 wl1271_notice("firmware booted in PLT mode (%s)", wl->chip.fw_ver);
710 ret = wl1271_plt_init(wl);
712 goto out_irq_disable;
714 /* Make sure power saving is disabled */
715 ret = wl1271_acx_sleep_auth(wl, WL1271_PSM_CAM);
717 goto out_irq_disable;
722 wl1271_disable_interrupts(wl);
725 wl1271_power_off(wl);
728 mutex_unlock(&wl->mutex);
733 int wl1271_plt_stop(struct wl1271 *wl)
737 mutex_lock(&wl->mutex);
739 wl1271_notice("power down");
741 if (wl->state != WL1271_STATE_PLT) {
742 wl1271_error("cannot power down because not in PLT "
743 "state: %d", wl->state);
748 wl1271_disable_interrupts(wl);
749 wl1271_power_off(wl);
751 wl->state = WL1271_STATE_OFF;
755 mutex_unlock(&wl->mutex);
761 static int wl1271_op_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
763 struct wl1271 *wl = hw->priv;
765 skb_queue_tail(&wl->tx_queue, skb);
768 * The chip specific setup must run before the first TX packet -
769 * before that, the tx_work will not be initialized!
772 ieee80211_queue_work(wl->hw, &wl->tx_work);
775 * The workqueue is slow to process the tx_queue and we need stop
776 * the queue here, otherwise the queue will get too long.
778 if (skb_queue_len(&wl->tx_queue) >= WL1271_TX_QUEUE_MAX_LENGTH) {
779 ieee80211_stop_queues(wl->hw);
782 * FIXME: this is racy, the variable is not properly
783 * protected. Maybe fix this by removing the stupid
784 * variable altogether and checking the real queue state?
786 wl->tx_queue_stopped = true;
792 static int wl1271_dev_notify(struct notifier_block *me, unsigned long what,
795 struct net_device *dev;
796 struct wireless_dev *wdev;
798 struct ieee80211_hw *hw;
800 struct wl1271 *wl_temp;
801 struct in_device *idev;
802 struct in_ifaddr *ifa = arg;
805 /* FIXME: this ugly function should probably be implemented in the
806 * mac80211, and here should only be a simple callback handling actual
807 * setting of the filters. Now we need to dig up references to
808 * various structures to gain access to what we need.
809 * Also, because of this, there is no "initial" setting of the filter
810 * in "op_start", because we don't want to dig up struct net_device
811 * there - the filter will be set upon first change of the interface
814 dev = ifa->ifa_dev->dev;
816 wdev = dev->ieee80211_ptr;
824 hw = wiphy_priv(wiphy);
828 /* Check that the interface is one supported by this driver. */
830 list_for_each_entry(wl, &wl_list, list) {
837 /* Get the interface IP address for the device. "ifa" will become
839 - there is no IPV4 protocol address configured
840 - there are multiple (virtual) IPV4 addresses configured
841 When "ifa" is NULL, filtering will be disabled.
846 ifa = idev->ifa_list;
848 if (ifa && ifa->ifa_next)
851 mutex_lock(&wl->mutex);
853 if (wl->state == WL1271_STATE_OFF)
856 ret = wl1271_ps_elp_wakeup(wl, false);
860 ret = wl1271_acx_arp_ip_filter(wl, true,
861 (u8 *)&ifa->ifa_address,
864 ret = wl1271_acx_arp_ip_filter(wl, false, NULL,
866 wl1271_ps_elp_sleep(wl);
869 mutex_unlock(&wl->mutex);
874 static struct notifier_block wl1271_dev_notifier = {
875 .notifier_call = wl1271_dev_notify,
879 static int wl1271_op_start(struct ieee80211_hw *hw)
881 struct wl1271 *wl = hw->priv;
884 wl1271_debug(DEBUG_MAC80211, "mac80211 start");
886 mutex_lock(&wl->mutex);
888 if (wl->state != WL1271_STATE_OFF) {
889 wl1271_error("cannot start because not in off state: %d",
895 ret = wl1271_chip_wakeup(wl);
899 ret = wl1271_boot(wl);
903 ret = wl1271_hw_init(wl);
905 goto out_irq_disable;
907 wl->state = WL1271_STATE_ON;
909 wl1271_info("firmware booted (%s)", wl->chip.fw_ver);
914 wl1271_disable_interrupts(wl);
917 wl1271_power_off(wl);
920 mutex_unlock(&wl->mutex);
923 list_add(&wl->list, &wl_list);
924 register_inetaddr_notifier(&wl1271_dev_notifier);
930 static void wl1271_op_stop(struct ieee80211_hw *hw)
932 struct wl1271 *wl = hw->priv;
937 wl1271_debug(DEBUG_MAC80211, "mac80211 stop");
939 unregister_inetaddr_notifier(&wl1271_dev_notifier);
942 mutex_lock(&wl->mutex);
944 WARN_ON(wl->state != WL1271_STATE_ON);
947 mutex_unlock(&wl->mutex);
948 ieee80211_scan_completed(wl->hw, true);
949 mutex_lock(&wl->mutex);
950 wl->scanning = false;
953 wl->state = WL1271_STATE_OFF;
955 wl1271_disable_interrupts(wl);
957 mutex_unlock(&wl->mutex);
959 cancel_work_sync(&wl->irq_work);
960 cancel_work_sync(&wl->tx_work);
962 mutex_lock(&wl->mutex);
964 /* let's notify MAC80211 about the remaining pending TX frames */
966 wl1271_power_off(wl);
968 memset(wl->bssid, 0, ETH_ALEN);
969 memset(wl->ssid, 0, IW_ESSID_MAX_SIZE + 1);
971 wl->bss_type = MAX_BSS_TYPE;
972 wl->band = IEEE80211_BAND_2GHZ;
977 wl->psm_entry_retry = 0;
978 wl->tx_queue_stopped = false;
979 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
980 wl->tx_blocks_available = 0;
981 wl->tx_results_count = 0;
982 wl->tx_packets_count = 0;
983 wl->tx_security_last_seq = 0;
984 wl->tx_security_seq_16 = 0;
985 wl->tx_security_seq_32 = 0;
987 wl->session_counter = 0;
990 for (i = 0; i < NUM_TX_QUEUES; i++)
991 wl->tx_blocks_freed[i] = 0;
993 wl1271_debugfs_reset(wl);
994 mutex_unlock(&wl->mutex);
997 static int wl1271_op_add_interface(struct ieee80211_hw *hw,
998 struct ieee80211_if_init_conf *conf)
1000 struct wl1271 *wl = hw->priv;
1003 wl1271_debug(DEBUG_MAC80211, "mac80211 add interface type %d mac %pM",
1004 conf->type, conf->mac_addr);
1006 mutex_lock(&wl->mutex);
1012 wl->vif = conf->vif;
1014 switch (conf->type) {
1015 case NL80211_IFTYPE_STATION:
1016 wl->bss_type = BSS_TYPE_STA_BSS;
1018 case NL80211_IFTYPE_ADHOC:
1019 wl->bss_type = BSS_TYPE_IBSS;
1026 /* FIXME: what if conf->mac_addr changes? */
1029 mutex_unlock(&wl->mutex);
1033 static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
1034 struct ieee80211_if_init_conf *conf)
1036 struct wl1271 *wl = hw->priv;
1038 mutex_lock(&wl->mutex);
1039 wl1271_debug(DEBUG_MAC80211, "mac80211 remove interface");
1041 mutex_unlock(&wl->mutex);
1045 static int wl1271_op_config_interface(struct ieee80211_hw *hw,
1046 struct ieee80211_vif *vif,
1047 struct ieee80211_if_conf *conf)
1049 struct wl1271 *wl = hw->priv;
1050 struct sk_buff *beacon;
1053 wl1271_debug(DEBUG_MAC80211, "mac80211 config_interface bssid %pM",
1055 wl1271_dump_ascii(DEBUG_MAC80211, "ssid: ", conf->ssid,
1058 mutex_lock(&wl->mutex);
1060 ret = wl1271_ps_elp_wakeup(wl, false);
1064 if (memcmp(wl->bssid, conf->bssid, ETH_ALEN)) {
1065 wl1271_debug(DEBUG_MAC80211, "bssid changed");
1067 memcpy(wl->bssid, conf->bssid, ETH_ALEN);
1069 ret = wl1271_cmd_join(wl);
1073 ret = wl1271_cmd_build_null_data(wl);
1078 wl->ssid_len = conf->ssid_len;
1080 memcpy(wl->ssid, conf->ssid, wl->ssid_len);
1082 if (conf->changed & IEEE80211_IFCC_BEACON) {
1083 beacon = ieee80211_beacon_get(hw, vif);
1084 ret = wl1271_cmd_template_set(wl, CMD_TEMPL_BEACON,
1085 beacon->data, beacon->len);
1088 dev_kfree_skb(beacon);
1092 ret = wl1271_cmd_template_set(wl, CMD_TEMPL_PROBE_RESPONSE,
1093 beacon->data, beacon->len);
1095 dev_kfree_skb(beacon);
1102 wl1271_ps_elp_sleep(wl);
1105 mutex_unlock(&wl->mutex);
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",
1121 conf->flags & IEEE80211_CONF_PS ? "on" : "off",
1124 mutex_lock(&wl->mutex);
1126 wl->band = conf->channel->band;
1128 ret = wl1271_ps_elp_wakeup(wl, false);
1132 if (channel != wl->channel) {
1134 * We assume that the stack will configure the right channel
1135 * before associating, so we don't need to send a join
1136 * command here. We will join the right channel when the
1139 wl->channel = channel;
1142 if (conf->flags & IEEE80211_CONF_PS && !wl->psm_requested) {
1143 wl1271_info("psm enabled");
1145 wl->psm_requested = true;
1148 * We enter PSM only if we're already associated.
1149 * If we're not, we'll enter it when joining an SSID,
1150 * through the bss_info_changed() hook.
1152 ret = wl1271_ps_set_mode(wl, STATION_POWER_SAVE_MODE);
1153 } else if (!(conf->flags & IEEE80211_CONF_PS) &&
1154 wl->psm_requested) {
1155 wl1271_info("psm disabled");
1157 wl->psm_requested = false;
1160 ret = wl1271_ps_set_mode(wl, STATION_ACTIVE_MODE);
1163 if (conf->power_level != wl->power_level) {
1164 ret = wl1271_acx_tx_power(wl, conf->power_level);
1168 wl->power_level = conf->power_level;
1172 wl1271_ps_elp_sleep(wl);
1175 mutex_unlock(&wl->mutex);
1180 struct wl1271_filter_params {
1183 u8 mc_list[ACX_MC_ADDRESS_GROUP_MAX][ETH_ALEN];
1186 static u64 wl1271_op_prepare_multicast(struct ieee80211_hw *hw, int mc_count,
1187 struct dev_addr_list *mc_list)
1189 struct wl1271_filter_params *fp;
1192 fp = kzalloc(sizeof(*fp), GFP_ATOMIC);
1194 wl1271_error("Out of memory setting filters.");
1198 /* update multicast filtering parameters */
1200 if (mc_count > ACX_MC_ADDRESS_GROUP_MAX) {
1202 fp->enabled = false;
1205 fp->mc_list_length = 0;
1206 for (i = 0; i < mc_count; i++) {
1207 if (mc_list->da_addrlen == ETH_ALEN) {
1208 memcpy(fp->mc_list[fp->mc_list_length],
1209 mc_list->da_addr, ETH_ALEN);
1210 fp->mc_list_length++;
1212 wl1271_warning("Unknown mc address length.");
1213 mc_list = mc_list->next;
1216 return (u64)(unsigned long)fp;
1219 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
1222 FIF_BCN_PRBRESP_PROMISC | \
1226 static void wl1271_op_configure_filter(struct ieee80211_hw *hw,
1227 unsigned int changed,
1228 unsigned int *total, u64 multicast)
1230 struct wl1271_filter_params *fp = (void *)(unsigned long)multicast;
1231 struct wl1271 *wl = hw->priv;
1234 wl1271_debug(DEBUG_MAC80211, "mac80211 configure filter");
1236 mutex_lock(&wl->mutex);
1238 if (wl->state == WL1271_STATE_OFF)
1241 ret = wl1271_ps_elp_wakeup(wl, false);
1245 *total &= WL1271_SUPPORTED_FILTERS;
1246 changed &= WL1271_SUPPORTED_FILTERS;
1248 if (*total & FIF_ALLMULTI)
1249 ret = wl1271_acx_group_address_tbl(wl, false, NULL, 0);
1251 ret = wl1271_acx_group_address_tbl(wl, fp->enabled,
1253 fp->mc_list_length);
1259 /* FIXME: We still need to set our filters properly */
1261 /* determine, whether supported filter values have changed */
1265 /* apply configured filters */
1266 ret = wl1271_acx_rx_config(wl, wl->rx_config, wl->rx_filter);
1271 wl1271_ps_elp_sleep(wl);
1274 mutex_unlock(&wl->mutex);
1277 static int wl1271_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
1278 struct ieee80211_vif *vif,
1279 struct ieee80211_sta *sta,
1280 struct ieee80211_key_conf *key_conf)
1282 struct wl1271 *wl = hw->priv;
1289 static const u8 bcast_addr[ETH_ALEN] =
1290 { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
1292 wl1271_debug(DEBUG_MAC80211, "mac80211 set key");
1294 addr = sta ? sta->addr : bcast_addr;
1296 wl1271_debug(DEBUG_CRYPT, "CMD: 0x%x", cmd);
1297 wl1271_dump(DEBUG_CRYPT, "ADDR: ", addr, ETH_ALEN);
1298 wl1271_debug(DEBUG_CRYPT, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
1299 key_conf->alg, key_conf->keyidx,
1300 key_conf->keylen, key_conf->flags);
1301 wl1271_dump(DEBUG_CRYPT, "KEY: ", key_conf->key, key_conf->keylen);
1303 if (is_zero_ether_addr(addr)) {
1304 /* We dont support TX only encryption */
1309 mutex_lock(&wl->mutex);
1311 ret = wl1271_ps_elp_wakeup(wl, false);
1315 switch (key_conf->alg) {
1319 key_conf->hw_key_idx = key_conf->keyidx;
1322 key_type = KEY_TKIP;
1324 key_conf->hw_key_idx = key_conf->keyidx;
1325 tx_seq_32 = wl->tx_security_seq_32;
1326 tx_seq_16 = wl->tx_security_seq_16;
1331 key_conf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
1332 tx_seq_32 = wl->tx_security_seq_32;
1333 tx_seq_16 = wl->tx_security_seq_16;
1336 wl1271_error("Unknown key algo 0x%x", key_conf->alg);
1344 ret = wl1271_cmd_set_key(wl, KEY_ADD_OR_REPLACE,
1345 key_conf->keyidx, key_type,
1346 key_conf->keylen, key_conf->key,
1347 addr, tx_seq_32, tx_seq_16);
1349 wl1271_error("Could not add or replace key");
1355 ret = wl1271_cmd_set_key(wl, KEY_REMOVE,
1356 key_conf->keyidx, key_type,
1357 key_conf->keylen, key_conf->key,
1360 wl1271_error("Could not remove key");
1366 wl1271_error("Unsupported key cmd 0x%x", cmd);
1374 wl1271_ps_elp_sleep(wl);
1377 mutex_unlock(&wl->mutex);
1383 static int wl1271_op_hw_scan(struct ieee80211_hw *hw,
1384 struct cfg80211_scan_request *req)
1386 struct wl1271 *wl = hw->priv;
1391 wl1271_debug(DEBUG_MAC80211, "mac80211 hw scan");
1394 ssid = req->ssids[0].ssid;
1395 len = req->ssids[0].ssid_len;
1398 mutex_lock(&wl->mutex);
1400 ret = wl1271_ps_elp_wakeup(wl, false);
1404 if (wl1271_11a_enabled())
1405 ret = wl1271_cmd_scan(hw->priv, ssid, len, 1, 0,
1406 WL1271_SCAN_BAND_DUAL, 3);
1408 ret = wl1271_cmd_scan(hw->priv, ssid, len, 1, 0,
1409 WL1271_SCAN_BAND_2_4_GHZ, 3);
1411 wl1271_ps_elp_sleep(wl);
1414 mutex_unlock(&wl->mutex);
1419 static int wl1271_op_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
1421 struct wl1271 *wl = hw->priv;
1424 mutex_lock(&wl->mutex);
1426 ret = wl1271_ps_elp_wakeup(wl, false);
1430 ret = wl1271_acx_rts_threshold(wl, (u16) value);
1432 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret);
1434 wl1271_ps_elp_sleep(wl);
1437 mutex_unlock(&wl->mutex);
1442 static u32 wl1271_enabled_rates_get(struct wl1271 *wl, u64 basic_rate_set)
1444 struct ieee80211_supported_band *band;
1445 u32 enabled_rates = 0;
1448 band = wl->hw->wiphy->bands[wl->band];
1449 for (bit = 0; bit < band->n_bitrates; bit++) {
1450 if (basic_rate_set & 0x1)
1451 enabled_rates |= band->bitrates[bit].hw_value;
1452 basic_rate_set >>= 1;
1455 return enabled_rates;
1458 static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
1459 struct ieee80211_vif *vif,
1460 struct ieee80211_bss_conf *bss_conf,
1463 enum wl1271_cmd_ps_mode mode;
1464 struct wl1271 *wl = hw->priv;
1467 wl1271_debug(DEBUG_MAC80211, "mac80211 bss info changed");
1469 mutex_lock(&wl->mutex);
1471 ret = wl1271_ps_elp_wakeup(wl, false);
1475 if (changed & BSS_CHANGED_ASSOC) {
1476 if (bss_conf->assoc) {
1477 wl->aid = bss_conf->aid;
1480 * with wl1271, we don't need to update the
1481 * beacon_int and dtim_period, because the firmware
1482 * updates it by itself when the first beacon is
1483 * received after a join.
1485 ret = wl1271_cmd_build_ps_poll(wl, wl->aid);
1489 ret = wl1271_acx_aid(wl, wl->aid);
1493 /* If we want to go in PSM but we're not there yet */
1494 if (wl->psm_requested && !wl->psm) {
1495 mode = STATION_POWER_SAVE_MODE;
1496 ret = wl1271_ps_set_mode(wl, mode);
1501 /* use defaults when not associated */
1502 wl->basic_rate_set = WL1271_DEFAULT_BASIC_RATE_SET;
1508 if (changed & BSS_CHANGED_ERP_SLOT) {
1509 if (bss_conf->use_short_slot)
1510 ret = wl1271_acx_slot(wl, SLOT_TIME_SHORT);
1512 ret = wl1271_acx_slot(wl, SLOT_TIME_LONG);
1514 wl1271_warning("Set slot time failed %d", ret);
1519 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
1520 if (bss_conf->use_short_preamble)
1521 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_SHORT);
1523 wl1271_acx_set_preamble(wl, ACX_PREAMBLE_LONG);
1526 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
1527 if (bss_conf->use_cts_prot)
1528 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_ENABLE);
1530 ret = wl1271_acx_cts_protect(wl, CTSPROTECT_DISABLE);
1532 wl1271_warning("Set ctsprotect failed %d", ret);
1537 if (changed & BSS_CHANGED_BASIC_RATES) {
1538 wl->basic_rate_set = wl1271_enabled_rates_get(
1539 wl, bss_conf->basic_rates);
1541 ret = wl1271_acx_rate_policies(wl, wl->basic_rate_set);
1543 wl1271_warning("Set rate policies failed %d", ret);
1549 wl1271_ps_elp_sleep(wl);
1552 mutex_unlock(&wl->mutex);
1556 /* can't be const, mac80211 writes to this */
1557 static struct ieee80211_rate wl1271_rates[] = {
1559 .hw_value = CONF_HW_BIT_RATE_1MBPS,
1560 .hw_value_short = CONF_HW_BIT_RATE_1MBPS, },
1562 .hw_value = CONF_HW_BIT_RATE_2MBPS,
1563 .hw_value_short = CONF_HW_BIT_RATE_2MBPS,
1564 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
1566 .hw_value = CONF_HW_BIT_RATE_5_5MBPS,
1567 .hw_value_short = CONF_HW_BIT_RATE_5_5MBPS,
1568 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
1570 .hw_value = CONF_HW_BIT_RATE_11MBPS,
1571 .hw_value_short = CONF_HW_BIT_RATE_11MBPS,
1572 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
1574 .hw_value = CONF_HW_BIT_RATE_6MBPS,
1575 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
1577 .hw_value = CONF_HW_BIT_RATE_9MBPS,
1578 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
1580 .hw_value = CONF_HW_BIT_RATE_12MBPS,
1581 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
1583 .hw_value = CONF_HW_BIT_RATE_18MBPS,
1584 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
1586 .hw_value = CONF_HW_BIT_RATE_24MBPS,
1587 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
1589 .hw_value = CONF_HW_BIT_RATE_36MBPS,
1590 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
1592 .hw_value = CONF_HW_BIT_RATE_48MBPS,
1593 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
1595 .hw_value = CONF_HW_BIT_RATE_54MBPS,
1596 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
1599 /* can't be const, mac80211 writes to this */
1600 static struct ieee80211_channel wl1271_channels[] = {
1601 { .hw_value = 1, .center_freq = 2412},
1602 { .hw_value = 2, .center_freq = 2417},
1603 { .hw_value = 3, .center_freq = 2422},
1604 { .hw_value = 4, .center_freq = 2427},
1605 { .hw_value = 5, .center_freq = 2432},
1606 { .hw_value = 6, .center_freq = 2437},
1607 { .hw_value = 7, .center_freq = 2442},
1608 { .hw_value = 8, .center_freq = 2447},
1609 { .hw_value = 9, .center_freq = 2452},
1610 { .hw_value = 10, .center_freq = 2457},
1611 { .hw_value = 11, .center_freq = 2462},
1612 { .hw_value = 12, .center_freq = 2467},
1613 { .hw_value = 13, .center_freq = 2472},
1616 /* can't be const, mac80211 writes to this */
1617 static struct ieee80211_supported_band wl1271_band_2ghz = {
1618 .channels = wl1271_channels,
1619 .n_channels = ARRAY_SIZE(wl1271_channels),
1620 .bitrates = wl1271_rates,
1621 .n_bitrates = ARRAY_SIZE(wl1271_rates),
1624 /* 5 GHz data rates for WL1273 */
1625 static struct ieee80211_rate wl1271_rates_5ghz[] = {
1627 .hw_value = CONF_HW_BIT_RATE_6MBPS,
1628 .hw_value_short = CONF_HW_BIT_RATE_6MBPS, },
1630 .hw_value = CONF_HW_BIT_RATE_9MBPS,
1631 .hw_value_short = CONF_HW_BIT_RATE_9MBPS, },
1633 .hw_value = CONF_HW_BIT_RATE_12MBPS,
1634 .hw_value_short = CONF_HW_BIT_RATE_12MBPS, },
1636 .hw_value = CONF_HW_BIT_RATE_18MBPS,
1637 .hw_value_short = CONF_HW_BIT_RATE_18MBPS, },
1639 .hw_value = CONF_HW_BIT_RATE_24MBPS,
1640 .hw_value_short = CONF_HW_BIT_RATE_24MBPS, },
1642 .hw_value = CONF_HW_BIT_RATE_36MBPS,
1643 .hw_value_short = CONF_HW_BIT_RATE_36MBPS, },
1645 .hw_value = CONF_HW_BIT_RATE_48MBPS,
1646 .hw_value_short = CONF_HW_BIT_RATE_48MBPS, },
1648 .hw_value = CONF_HW_BIT_RATE_54MBPS,
1649 .hw_value_short = CONF_HW_BIT_RATE_54MBPS, },
1652 /* 5 GHz band channels for WL1273 */
1653 static struct ieee80211_channel wl1271_channels_5ghz[] = {
1654 { .hw_value = 183, .center_freq = 4915},
1655 { .hw_value = 184, .center_freq = 4920},
1656 { .hw_value = 185, .center_freq = 4925},
1657 { .hw_value = 187, .center_freq = 4935},
1658 { .hw_value = 188, .center_freq = 4940},
1659 { .hw_value = 189, .center_freq = 4945},
1660 { .hw_value = 192, .center_freq = 4960},
1661 { .hw_value = 196, .center_freq = 4980},
1662 { .hw_value = 7, .center_freq = 5035},
1663 { .hw_value = 8, .center_freq = 5040},
1664 { .hw_value = 9, .center_freq = 5045},
1665 { .hw_value = 11, .center_freq = 5055},
1666 { .hw_value = 12, .center_freq = 5060},
1667 { .hw_value = 16, .center_freq = 5080},
1668 { .hw_value = 34, .center_freq = 5170},
1669 { .hw_value = 36, .center_freq = 5180},
1670 { .hw_value = 38, .center_freq = 5190},
1671 { .hw_value = 40, .center_freq = 5200},
1672 { .hw_value = 42, .center_freq = 5210},
1673 { .hw_value = 44, .center_freq = 5220},
1674 { .hw_value = 46, .center_freq = 5230},
1675 { .hw_value = 48, .center_freq = 5240},
1676 { .hw_value = 52, .center_freq = 5260},
1677 { .hw_value = 56, .center_freq = 5280},
1678 { .hw_value = 60, .center_freq = 5300},
1679 { .hw_value = 64, .center_freq = 5320},
1680 { .hw_value = 100, .center_freq = 5500},
1681 { .hw_value = 104, .center_freq = 5520},
1682 { .hw_value = 108, .center_freq = 5540},
1683 { .hw_value = 112, .center_freq = 5560},
1684 { .hw_value = 116, .center_freq = 5580},
1685 { .hw_value = 120, .center_freq = 5600},
1686 { .hw_value = 124, .center_freq = 5620},
1687 { .hw_value = 128, .center_freq = 5640},
1688 { .hw_value = 132, .center_freq = 5660},
1689 { .hw_value = 136, .center_freq = 5680},
1690 { .hw_value = 140, .center_freq = 5700},
1691 { .hw_value = 149, .center_freq = 5745},
1692 { .hw_value = 153, .center_freq = 5765},
1693 { .hw_value = 157, .center_freq = 5785},
1694 { .hw_value = 161, .center_freq = 5805},
1695 { .hw_value = 165, .center_freq = 5825},
1699 static struct ieee80211_supported_band wl1271_band_5ghz = {
1700 .channels = wl1271_channels_5ghz,
1701 .n_channels = ARRAY_SIZE(wl1271_channels_5ghz),
1702 .bitrates = wl1271_rates_5ghz,
1703 .n_bitrates = ARRAY_SIZE(wl1271_rates_5ghz),
1706 static const struct ieee80211_ops wl1271_ops = {
1707 .start = wl1271_op_start,
1708 .stop = wl1271_op_stop,
1709 .add_interface = wl1271_op_add_interface,
1710 .remove_interface = wl1271_op_remove_interface,
1711 .config = wl1271_op_config,
1712 /* .config_interface = wl1271_op_config_interface, */
1713 .prepare_multicast = wl1271_op_prepare_multicast,
1714 .configure_filter = wl1271_op_configure_filter,
1716 .set_key = wl1271_op_set_key,
1717 .hw_scan = wl1271_op_hw_scan,
1718 .bss_info_changed = wl1271_op_bss_info_changed,
1719 .set_rts_threshold = wl1271_op_set_rts_threshold,
1722 static int wl1271_register_hw(struct wl1271 *wl)
1726 if (wl->mac80211_registered)
1729 SET_IEEE80211_PERM_ADDR(wl->hw, wl->mac_addr);
1731 ret = ieee80211_register_hw(wl->hw);
1733 wl1271_error("unable to register mac80211 hw: %d", ret);
1737 wl->mac80211_registered = true;
1739 wl1271_notice("loaded");
1744 static int wl1271_init_ieee80211(struct wl1271 *wl)
1746 /* The tx descriptor buffer and the TKIP space. */
1747 wl->hw->extra_tx_headroom = WL1271_TKIP_IV_SPACE +
1748 sizeof(struct wl1271_tx_hw_descr);
1751 /* FIXME: find a proper value */
1752 wl->hw->channel_change_time = 10000;
1754 wl->hw->flags = IEEE80211_HW_SIGNAL_DBM |
1755 IEEE80211_HW_NOISE_DBM |
1756 IEEE80211_HW_BEACON_FILTER;
1758 wl->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION);
1759 wl->hw->wiphy->max_scan_ssids = 1;
1760 wl->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = &wl1271_band_2ghz;
1762 if (wl1271_11a_enabled())
1763 wl->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = &wl1271_band_5ghz;
1765 SET_IEEE80211_DEV(wl->hw, &wl->spi->dev);
1770 static void wl1271_device_release(struct device *dev)
1775 static struct platform_device wl1271_device = {
1779 /* device model insists to have a release function */
1781 .release = wl1271_device_release,
1785 #define WL1271_DEFAULT_CHANNEL 0
1786 static int __devinit wl1271_probe(struct spi_device *spi)
1788 struct wl12xx_platform_data *pdata;
1789 struct ieee80211_hw *hw;
1792 static const u8 nokia_oui[3] = {0x00, 0x1f, 0xdf};
1794 pdata = spi->dev.platform_data;
1796 wl1271_error("no platform data");
1800 hw = ieee80211_alloc_hw(sizeof(*wl), &wl1271_ops);
1802 wl1271_error("could not alloc ieee80211_hw");
1807 memset(wl, 0, sizeof(*wl));
1809 INIT_LIST_HEAD(&wl->list);
1812 dev_set_drvdata(&spi->dev, wl);
1815 skb_queue_head_init(&wl->tx_queue);
1817 INIT_DELAYED_WORK(&wl->elp_work, wl1271_elp_work);
1818 wl->channel = WL1271_DEFAULT_CHANNEL;
1819 wl->scanning = false;
1820 wl->default_key = 0;
1822 wl->rx_config = WL1271_DEFAULT_RX_CONFIG;
1823 wl->rx_filter = WL1271_DEFAULT_RX_FILTER;
1826 wl->psm_requested = false;
1827 wl->psm_entry_retry = 0;
1828 wl->tx_queue_stopped = false;
1829 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
1830 wl->basic_rate_set = WL1271_DEFAULT_BASIC_RATE_SET;
1831 wl->band = IEEE80211_BAND_2GHZ;
1835 for (i = 0; i < ACX_TX_DESCRIPTORS; i++)
1836 wl->tx_frames[i] = NULL;
1838 spin_lock_init(&wl->wl_lock);
1841 * In case our MAC address is not correctly set,
1842 * we use a random but Nokia MAC.
1844 memcpy(wl->mac_addr, nokia_oui, 3);
1845 get_random_bytes(wl->mac_addr + 3, 3);
1847 wl->state = WL1271_STATE_OFF;
1848 mutex_init(&wl->mutex);
1850 /* This is the only SPI value that we need to set here, the rest
1851 * comes from the board-peripherals file */
1852 spi->bits_per_word = 32;
1854 ret = spi_setup(spi);
1856 wl1271_error("spi_setup failed");
1860 wl->set_power = pdata->set_power;
1861 if (!wl->set_power) {
1862 wl1271_error("set power function missing in platform data");
1869 wl1271_error("irq missing in platform data");
1874 ret = request_irq(wl->irq, wl1271_irq, 0, DRIVER_NAME, wl);
1876 wl1271_error("request_irq() failed: %d", ret);
1880 set_irq_type(wl->irq, IRQ_TYPE_EDGE_RISING);
1882 disable_irq(wl->irq);
1884 ret = platform_device_register(&wl1271_device);
1886 wl1271_error("couldn't register platform device");
1889 dev_set_drvdata(&wl1271_device.dev, wl);
1891 /* Apply default driver configuration. */
1892 wl1271_conf_init(wl);
1894 ret = wl1271_init_ieee80211(wl);
1898 ret = wl1271_register_hw(wl);
1902 wl1271_debugfs_init(wl);
1904 wl1271_notice("initialized");
1909 platform_device_unregister(&wl1271_device);
1912 free_irq(wl->irq, wl);
1915 ieee80211_free_hw(hw);
1920 static int __devexit wl1271_remove(struct spi_device *spi)
1922 struct wl1271 *wl = dev_get_drvdata(&spi->dev);
1924 ieee80211_unregister_hw(wl->hw);
1926 wl1271_debugfs_exit(wl);
1927 platform_device_unregister(&wl1271_device);
1928 free_irq(wl->irq, wl);
1929 kfree(wl->target_mem_map);
1935 kfree(wl->fw_status);
1936 kfree(wl->tx_res_if);
1938 ieee80211_free_hw(wl->hw);
1944 static struct spi_driver wl1271_spi_driver = {
1947 .bus = &spi_bus_type,
1948 .owner = THIS_MODULE,
1951 .probe = wl1271_probe,
1952 .remove = __devexit_p(wl1271_remove),
1955 static int __init wl1271_init(void)
1959 ret = spi_register_driver(&wl1271_spi_driver);
1961 wl1271_error("failed to register spi driver: %d", ret);
1969 static void __exit wl1271_exit(void)
1971 spi_unregister_driver(&wl1271_spi_driver);
1973 wl1271_notice("unloaded");
1976 module_init(wl1271_init);
1977 module_exit(wl1271_exit);
1979 MODULE_LICENSE("GPL");
1980 MODULE_AUTHOR("Luciano Coelho <luciano.coelho@nokia.com>");
1981 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");
1982 MODULE_FIRMWARE(WL1271_FW_NAME);