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
= 10,
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,
254 .ref_clk
= CONF_REF_CLK_38_4_E
,
256 .clk_valid_on_wakeup
= 0,
258 .single_dual_band
= CONF_SINGLE_BAND
,
259 .tx_bip_fem_autodetect
= 1,
260 .tx_bip_fem_manufacturer
= 1,
263 .srf1
= { 0, 0, 0, 0, 0, 0, 0, 0,
264 0, 0, 0, 0, 0, 0, 0, 0 },
265 .srf2
= { 0, 0, 0, 0, 0, 0, 0, 0,
266 0, 0, 0, 0, 0, 0, 0, 0 },
267 .srf3
= { 0, 0, 0, 0, 0, 0, 0, 0,
268 0, 0, 0, 0, 0, 0, 0, 0 },
269 .sr_debug_table
= { 0, 0, 0, 0, 0, 0, 0, 0,
270 0, 0, 0, 0, 0, 0, 0, 0 },
272 .sr_sen_n_p_gain
= 0,
277 .rx_trace_loss
= 0x24,
278 .tx_trace_loss
= 0x0,
279 .rx_rssi_and_proc_compens
= {
280 0xec, 0xf6, 0x00, 0x0c, 0x18, 0xf8,
281 0xfc, 0x00, 0x08, 0x10, 0xf0, 0xf8,
283 .rx_trace_loss_5
= { 0, 0, 0, 0, 0, 0, 0 },
284 .tx_trace_loss_5
= { 0, 0, 0, 0, 0, 0, 0 },
285 .rx_rssi_and_proc_compens_5
= {
286 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
287 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
289 .tx_ref_pd_voltage
= 0x1a9,
290 .tx_ref_power
= 0x80,
292 .tx_rate_limits_normal
= {
293 0x1d, 0x1f, 0x24, 0x28, 0x28, 0x29 },
294 .tx_rate_limits_degraded
= {
295 0x19, 0x1f, 0x22, 0x23, 0x27, 0x28 },
296 .tx_rate_limits_extreme
= {
297 0x19, 0x1c, 0x1e, 0x20, 0x24, 0x25 },
298 .tx_channel_limits_11b
= {
299 0x22, 0x50, 0x50, 0x50, 0x50, 0x50,
300 0x50, 0x50, 0x50, 0x50, 0x22, 0x50,
302 .tx_channel_limits_ofdm
= {
303 0x20, 0x50, 0x50, 0x50, 0x50, 0x50,
304 0x50, 0x50, 0x50, 0x50, 0x20, 0x50,
306 .tx_pdv_rate_offsets
= {
307 0x07, 0x08, 0x04, 0x02, 0x02, 0x00 },
309 0x11, 0x11, 0x15, 0x11, 0x15, 0x0f },
310 .rx_fem_insertion_loss
= 0x0e,
311 .degraded_low_to_normal_threshold
= 0x1e,
312 .degraded_normal_to_high_threshold
= 0x2d,
313 .tx_ref_pd_voltage_5
= {
314 0x0190, 0x01a4, 0x01c3, 0x01d8,
317 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 },
319 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
320 .tx_rate_limits_normal_5
= {
321 0x1b, 0x1e, 0x21, 0x23, 0x27, 0x00 },
322 .tx_rate_limits_degraded_5
= {
323 0x1b, 0x1e, 0x21, 0x23, 0x27, 0x00 },
324 .tx_rate_limits_extreme_5
= {
325 0x1b, 0x1e, 0x21, 0x23, 0x27, 0x00 },
326 .tx_channel_limits_ofdm_5
= {
327 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
328 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
329 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
330 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
332 .tx_pdv_rate_offsets_5
= {
333 0x01, 0x02, 0x02, 0x02, 0x02, 0x00 },
335 0x10, 0x10, 0x10, 0x10, 0x10, 0x10 },
336 .rx_fem_insertion_loss_5
= {
337 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10 },
338 .degraded_low_to_normal_threshold_5
= 0x00,
339 .degraded_normal_to_high_threshold_5
= 0x00
348 static LIST_HEAD(wl_list
);
350 static void wl1271_conf_init(struct wl1271
*wl
)
354 * This function applies the default configuration to the driver. This
355 * function is invoked upon driver load (spi probe.)
357 * The configuration is stored in a run-time structure in order to
358 * facilitate for run-time adjustment of any of the parameters. Making
359 * changes to the configuration structure will apply the new values on
360 * the next interface up (wl1271_op_start.)
363 /* apply driver default configuration */
364 memcpy(&wl
->conf
, &default_conf
, sizeof(default_conf
));
366 if (wl1271_11a_enabled())
367 wl
->conf
.init
.genparam
.single_dual_band
= CONF_DUAL_BAND
;
371 static int wl1271_plt_init(struct wl1271
*wl
)
375 ret
= wl1271_cmd_general_parms(wl
);
379 ret
= wl1271_cmd_radio_parms(wl
);
383 ret
= wl1271_acx_init_mem_config(wl
);
387 ret
= wl1271_cmd_data_path(wl
, wl
->channel
, 1);
394 static void wl1271_disable_interrupts(struct wl1271
*wl
)
396 disable_irq(wl
->irq
);
399 static void wl1271_power_off(struct wl1271
*wl
)
401 wl
->set_power(false);
404 static void wl1271_power_on(struct wl1271
*wl
)
409 static void wl1271_fw_status(struct wl1271
*wl
,
410 struct wl1271_fw_status
*status
)
415 wl1271_spi_read(wl
, FW_STATUS_ADDR
, status
,
416 sizeof(*status
), false);
418 wl1271_debug(DEBUG_IRQ
, "intr: 0x%x (fw_rx_counter = %d, "
419 "drv_rx_counter = %d, tx_results_counter = %d)",
421 status
->fw_rx_counter
,
422 status
->drv_rx_counter
,
423 status
->tx_results_counter
);
425 /* update number of available TX blocks */
426 for (i
= 0; i
< NUM_TX_QUEUES
; i
++) {
427 u32 cnt
= le32_to_cpu(status
->tx_released_blks
[i
]) -
428 wl
->tx_blocks_freed
[i
];
430 wl
->tx_blocks_freed
[i
] =
431 le32_to_cpu(status
->tx_released_blks
[i
]);
432 wl
->tx_blocks_available
+= cnt
;
436 /* if more blocks are available now, schedule some tx work */
437 if (total
&& !skb_queue_empty(&wl
->tx_queue
))
438 ieee80211_queue_work(wl
->hw
, &wl
->tx_work
);
440 /* update the host-chipset time offset */
441 wl
->time_offset
= jiffies_to_usecs(jiffies
) -
442 le32_to_cpu(status
->fw_localtime
);
445 static void wl1271_irq_work(struct work_struct
*work
)
450 container_of(work
, struct wl1271
, irq_work
);
452 mutex_lock(&wl
->mutex
);
454 wl1271_debug(DEBUG_IRQ
, "IRQ work");
456 if (wl
->state
== WL1271_STATE_OFF
)
459 ret
= wl1271_ps_elp_wakeup(wl
, true);
463 wl1271_spi_write32(wl
, ACX_REG_INTERRUPT_MASK
, WL1271_ACX_INTR_ALL
);
465 wl1271_fw_status(wl
, wl
->fw_status
);
466 intr
= le32_to_cpu(wl
->fw_status
->intr
);
468 wl1271_debug(DEBUG_IRQ
, "Zero interrupt received.");
472 intr
&= WL1271_INTR_MASK
;
474 if (intr
& WL1271_ACX_INTR_EVENT_A
) {
475 bool do_ack
= (intr
& WL1271_ACX_INTR_EVENT_B
) ? false : true;
476 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_EVENT_A");
477 wl1271_event_handle(wl
, 0, do_ack
);
480 if (intr
& WL1271_ACX_INTR_EVENT_B
) {
481 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_EVENT_B");
482 wl1271_event_handle(wl
, 1, true);
485 if (intr
& WL1271_ACX_INTR_INIT_COMPLETE
)
486 wl1271_debug(DEBUG_IRQ
,
487 "WL1271_ACX_INTR_INIT_COMPLETE");
489 if (intr
& WL1271_ACX_INTR_HW_AVAILABLE
)
490 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_HW_AVAILABLE");
492 if (intr
& WL1271_ACX_INTR_DATA
) {
493 u8 tx_res_cnt
= wl
->fw_status
->tx_results_counter
-
494 wl
->tx_results_count
;
496 wl1271_debug(DEBUG_IRQ
, "WL1271_ACX_INTR_DATA");
498 /* check for tx results */
500 wl1271_tx_complete(wl
, tx_res_cnt
);
502 wl1271_rx(wl
, wl
->fw_status
);
506 wl1271_spi_write32(wl
, ACX_REG_INTERRUPT_MASK
,
507 WL1271_ACX_INTR_ALL
& ~(WL1271_INTR_MASK
));
508 wl1271_ps_elp_sleep(wl
);
511 mutex_unlock(&wl
->mutex
);
514 static irqreturn_t
wl1271_irq(int irq
, void *cookie
)
519 wl1271_debug(DEBUG_IRQ
, "IRQ");
523 /* complete the ELP completion */
524 spin_lock_irqsave(&wl
->wl_lock
, flags
);
526 complete(wl
->elp_compl
);
527 wl
->elp_compl
= NULL
;
530 ieee80211_queue_work(wl
->hw
, &wl
->irq_work
);
531 spin_unlock_irqrestore(&wl
->wl_lock
, flags
);
536 static int wl1271_fetch_firmware(struct wl1271
*wl
)
538 const struct firmware
*fw
;
541 ret
= request_firmware(&fw
, WL1271_FW_NAME
, &wl
->spi
->dev
);
544 wl1271_error("could not get firmware: %d", ret
);
549 wl1271_error("firmware size is not multiple of 32 bits: %zu",
555 wl
->fw_len
= fw
->size
;
556 wl
->fw
= vmalloc(wl
->fw_len
);
559 wl1271_error("could not allocate memory for the firmware");
564 memcpy(wl
->fw
, fw
->data
, wl
->fw_len
);
569 release_firmware(fw
);
574 static int wl1271_fetch_nvs(struct wl1271
*wl
)
576 const struct firmware
*fw
;
579 ret
= request_firmware(&fw
, WL1271_NVS_NAME
, &wl
->spi
->dev
);
582 wl1271_error("could not get nvs file: %d", ret
);
587 wl1271_error("nvs size is not multiple of 32 bits: %zu",
593 wl
->nvs_len
= fw
->size
;
594 wl
->nvs
= kmalloc(wl
->nvs_len
, GFP_KERNEL
);
597 wl1271_error("could not allocate memory for the nvs file");
602 memcpy(wl
->nvs
, fw
->data
, wl
->nvs_len
);
607 release_firmware(fw
);
612 static void wl1271_fw_wakeup(struct wl1271
*wl
)
616 elp_reg
= ELPCTRL_WAKE_UP
;
617 wl1271_raw_write32(wl
, HW_ACCESS_ELP_CTRL_REG_ADDR
, elp_reg
);
620 static int wl1271_setup(struct wl1271
*wl
)
622 wl
->fw_status
= kmalloc(sizeof(*wl
->fw_status
), GFP_KERNEL
);
626 wl
->tx_res_if
= kmalloc(sizeof(*wl
->tx_res_if
), GFP_KERNEL
);
627 if (!wl
->tx_res_if
) {
628 kfree(wl
->fw_status
);
632 INIT_WORK(&wl
->irq_work
, wl1271_irq_work
);
633 INIT_WORK(&wl
->tx_work
, wl1271_tx_work
);
637 static int wl1271_chip_wakeup(struct wl1271
*wl
)
639 struct wl1271_partition_set partition
;
643 msleep(WL1271_POWER_ON_SLEEP
);
644 wl1271_spi_reset(wl
);
647 /* We don't need a real memory partition here, because we only want
648 * to use the registers at this point. */
649 memset(&partition
, 0, sizeof(partition
));
650 partition
.reg
.start
= REGISTERS_BASE
;
651 partition
.reg
.size
= REGISTERS_DOWN_SIZE
;
652 wl1271_set_partition(wl
, &partition
);
654 /* ELP module wake up */
655 wl1271_fw_wakeup(wl
);
657 /* whal_FwCtrl_BootSm() */
659 /* 0. read chip id from CHIP_ID */
660 wl
->chip
.id
= wl1271_spi_read32(wl
, CHIP_ID_B
);
662 /* 1. check if chip id is valid */
664 switch (wl
->chip
.id
) {
665 case CHIP_ID_1271_PG10
:
666 wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
669 ret
= wl1271_setup(wl
);
673 case CHIP_ID_1271_PG20
:
674 wl1271_debug(DEBUG_BOOT
, "chip id 0x%x (1271 PG20)",
677 ret
= wl1271_setup(wl
);
682 wl1271_error("unsupported chip id: 0x%x", wl
->chip
.id
);
687 if (wl
->fw
== NULL
) {
688 ret
= wl1271_fetch_firmware(wl
);
693 /* No NVS from netlink, try to get it from the filesystem */
694 if (wl
->nvs
== NULL
) {
695 ret
= wl1271_fetch_nvs(wl
);
703 wl1271_power_off(wl
);
709 int wl1271_plt_start(struct wl1271
*wl
)
713 mutex_lock(&wl
->mutex
);
715 wl1271_notice("power up");
717 if (wl
->state
!= WL1271_STATE_OFF
) {
718 wl1271_error("cannot go into PLT state because not "
719 "in off state: %d", wl
->state
);
724 wl
->state
= WL1271_STATE_PLT
;
726 ret
= wl1271_chip_wakeup(wl
);
730 ret
= wl1271_boot(wl
);
734 wl1271_notice("firmware booted in PLT mode (%s)", wl
->chip
.fw_ver
);
736 ret
= wl1271_plt_init(wl
);
738 goto out_irq_disable
;
740 /* Make sure power saving is disabled */
741 ret
= wl1271_acx_sleep_auth(wl
, WL1271_PSM_CAM
);
743 goto out_irq_disable
;
748 wl1271_disable_interrupts(wl
);
751 wl1271_power_off(wl
);
754 mutex_unlock(&wl
->mutex
);
759 int wl1271_plt_stop(struct wl1271
*wl
)
763 mutex_lock(&wl
->mutex
);
765 wl1271_notice("power down");
767 if (wl
->state
!= WL1271_STATE_PLT
) {
768 wl1271_error("cannot power down because not in PLT "
769 "state: %d", wl
->state
);
774 wl1271_disable_interrupts(wl
);
775 wl1271_power_off(wl
);
777 wl
->state
= WL1271_STATE_OFF
;
781 mutex_unlock(&wl
->mutex
);
787 static int wl1271_op_tx(struct ieee80211_hw
*hw
, struct sk_buff
*skb
)
789 struct wl1271
*wl
= hw
->priv
;
791 skb_queue_tail(&wl
->tx_queue
, skb
);
794 * The chip specific setup must run before the first TX packet -
795 * before that, the tx_work will not be initialized!
798 ieee80211_queue_work(wl
->hw
, &wl
->tx_work
);
801 * The workqueue is slow to process the tx_queue and we need stop
802 * the queue here, otherwise the queue will get too long.
804 if (skb_queue_len(&wl
->tx_queue
) >= WL1271_TX_QUEUE_MAX_LENGTH
) {
805 ieee80211_stop_queues(wl
->hw
);
808 * FIXME: this is racy, the variable is not properly
809 * protected. Maybe fix this by removing the stupid
810 * variable altogether and checking the real queue state?
812 wl
->tx_queue_stopped
= true;
818 static int wl1271_dev_notify(struct notifier_block
*me
, unsigned long what
,
821 struct net_device
*dev
;
822 struct wireless_dev
*wdev
;
824 struct ieee80211_hw
*hw
;
826 struct wl1271
*wl_temp
;
827 struct in_device
*idev
;
828 struct in_ifaddr
*ifa
= arg
;
831 /* FIXME: this ugly function should probably be implemented in the
832 * mac80211, and here should only be a simple callback handling actual
833 * setting of the filters. Now we need to dig up references to
834 * various structures to gain access to what we need.
835 * Also, because of this, there is no "initial" setting of the filter
836 * in "op_start", because we don't want to dig up struct net_device
837 * there - the filter will be set upon first change of the interface
840 dev
= ifa
->ifa_dev
->dev
;
842 wdev
= dev
->ieee80211_ptr
;
850 hw
= wiphy_priv(wiphy
);
854 /* Check that the interface is one supported by this driver. */
856 list_for_each_entry(wl
, &wl_list
, list
) {
863 /* Get the interface IP address for the device. "ifa" will become
865 - there is no IPV4 protocol address configured
866 - there are multiple (virtual) IPV4 addresses configured
867 When "ifa" is NULL, filtering will be disabled.
872 ifa
= idev
->ifa_list
;
874 if (ifa
&& ifa
->ifa_next
)
877 mutex_lock(&wl
->mutex
);
879 if (wl
->state
== WL1271_STATE_OFF
)
882 ret
= wl1271_ps_elp_wakeup(wl
, false);
886 ret
= wl1271_acx_arp_ip_filter(wl
, true,
887 (u8
*)&ifa
->ifa_address
,
890 ret
= wl1271_acx_arp_ip_filter(wl
, false, NULL
,
892 wl1271_ps_elp_sleep(wl
);
895 mutex_unlock(&wl
->mutex
);
900 static struct notifier_block wl1271_dev_notifier
= {
901 .notifier_call
= wl1271_dev_notify
,
905 static int wl1271_op_start(struct ieee80211_hw
*hw
)
907 struct wl1271
*wl
= hw
->priv
;
910 wl1271_debug(DEBUG_MAC80211
, "mac80211 start");
912 mutex_lock(&wl
->mutex
);
914 if (wl
->state
!= WL1271_STATE_OFF
) {
915 wl1271_error("cannot start because not in off state: %d",
921 ret
= wl1271_chip_wakeup(wl
);
925 ret
= wl1271_boot(wl
);
929 ret
= wl1271_hw_init(wl
);
931 goto out_irq_disable
;
933 wl
->state
= WL1271_STATE_ON
;
935 wl1271_info("firmware booted (%s)", wl
->chip
.fw_ver
);
940 wl1271_disable_interrupts(wl
);
943 wl1271_power_off(wl
);
946 mutex_unlock(&wl
->mutex
);
949 list_add(&wl
->list
, &wl_list
);
950 register_inetaddr_notifier(&wl1271_dev_notifier
);
956 static void wl1271_op_stop(struct ieee80211_hw
*hw
)
958 struct wl1271
*wl
= hw
->priv
;
963 wl1271_debug(DEBUG_MAC80211
, "mac80211 stop");
965 unregister_inetaddr_notifier(&wl1271_dev_notifier
);
968 mutex_lock(&wl
->mutex
);
970 WARN_ON(wl
->state
!= WL1271_STATE_ON
);
973 mutex_unlock(&wl
->mutex
);
974 ieee80211_scan_completed(wl
->hw
, true);
975 mutex_lock(&wl
->mutex
);
976 wl
->scanning
= false;
979 wl
->state
= WL1271_STATE_OFF
;
981 wl1271_disable_interrupts(wl
);
983 mutex_unlock(&wl
->mutex
);
985 cancel_work_sync(&wl
->irq_work
);
986 cancel_work_sync(&wl
->tx_work
);
988 mutex_lock(&wl
->mutex
);
990 /* let's notify MAC80211 about the remaining pending TX frames */
992 wl1271_power_off(wl
);
994 memset(wl
->bssid
, 0, ETH_ALEN
);
995 memset(wl
->ssid
, 0, IW_ESSID_MAX_SIZE
+ 1);
997 wl
->bss_type
= MAX_BSS_TYPE
;
998 wl
->band
= IEEE80211_BAND_2GHZ
;
1003 wl
->psm_entry_retry
= 0;
1004 wl
->tx_queue_stopped
= false;
1005 wl
->power_level
= WL1271_DEFAULT_POWER_LEVEL
;
1006 wl
->tx_blocks_available
= 0;
1007 wl
->tx_results_count
= 0;
1008 wl
->tx_packets_count
= 0;
1009 wl
->tx_security_last_seq
= 0;
1010 wl
->tx_security_seq_16
= 0;
1011 wl
->tx_security_seq_32
= 0;
1012 wl
->time_offset
= 0;
1013 wl
->session_counter
= 0;
1016 for (i
= 0; i
< NUM_TX_QUEUES
; i
++)
1017 wl
->tx_blocks_freed
[i
] = 0;
1019 wl1271_debugfs_reset(wl
);
1020 mutex_unlock(&wl
->mutex
);
1023 static int wl1271_op_add_interface(struct ieee80211_hw
*hw
,
1024 struct ieee80211_if_init_conf
*conf
)
1026 struct wl1271
*wl
= hw
->priv
;
1029 wl1271_debug(DEBUG_MAC80211
, "mac80211 add interface type %d mac %pM",
1030 conf
->type
, conf
->mac_addr
);
1032 mutex_lock(&wl
->mutex
);
1038 wl
->vif
= conf
->vif
;
1040 switch (conf
->type
) {
1041 case NL80211_IFTYPE_STATION
:
1042 wl
->bss_type
= BSS_TYPE_STA_BSS
;
1044 case NL80211_IFTYPE_ADHOC
:
1045 wl
->bss_type
= BSS_TYPE_IBSS
;
1052 /* FIXME: what if conf->mac_addr changes? */
1055 mutex_unlock(&wl
->mutex
);
1059 static void wl1271_op_remove_interface(struct ieee80211_hw
*hw
,
1060 struct ieee80211_if_init_conf
*conf
)
1062 struct wl1271
*wl
= hw
->priv
;
1064 mutex_lock(&wl
->mutex
);
1065 wl1271_debug(DEBUG_MAC80211
, "mac80211 remove interface");
1067 mutex_unlock(&wl
->mutex
);
1071 static int wl1271_op_config_interface(struct ieee80211_hw
*hw
,
1072 struct ieee80211_vif
*vif
,
1073 struct ieee80211_if_conf
*conf
)
1075 struct wl1271
*wl
= hw
->priv
;
1076 struct sk_buff
*beacon
;
1079 wl1271_debug(DEBUG_MAC80211
, "mac80211 config_interface bssid %pM",
1081 wl1271_dump_ascii(DEBUG_MAC80211
, "ssid: ", conf
->ssid
,
1084 mutex_lock(&wl
->mutex
);
1086 ret
= wl1271_ps_elp_wakeup(wl
, false);
1090 if (memcmp(wl
->bssid
, conf
->bssid
, ETH_ALEN
)) {
1091 wl1271_debug(DEBUG_MAC80211
, "bssid changed");
1093 memcpy(wl
->bssid
, conf
->bssid
, ETH_ALEN
);
1095 ret
= wl1271_cmd_join(wl
);
1099 ret
= wl1271_cmd_build_null_data(wl
);
1104 wl
->ssid_len
= conf
->ssid_len
;
1106 memcpy(wl
->ssid
, conf
->ssid
, wl
->ssid_len
);
1108 if (conf
->changed
& IEEE80211_IFCC_BEACON
) {
1109 beacon
= ieee80211_beacon_get(hw
, vif
);
1110 ret
= wl1271_cmd_template_set(wl
, CMD_TEMPL_BEACON
,
1111 beacon
->data
, beacon
->len
);
1114 dev_kfree_skb(beacon
);
1118 ret
= wl1271_cmd_template_set(wl
, CMD_TEMPL_PROBE_RESPONSE
,
1119 beacon
->data
, beacon
->len
);
1121 dev_kfree_skb(beacon
);
1128 wl1271_ps_elp_sleep(wl
);
1131 mutex_unlock(&wl
->mutex
);
1137 static int wl1271_join_channel(struct wl1271
*wl
, int channel
)
1140 /* we need to use a dummy BSSID for now */
1141 static const u8 dummy_bssid
[ETH_ALEN
] = { 0x0b, 0xad, 0xde,
1144 /* disable mac filter, so we hear everything */
1145 wl
->rx_config
&= ~CFG_BSSID_FILTER_EN
;
1147 wl
->channel
= channel
;
1148 memcpy(wl
->bssid
, dummy_bssid
, ETH_ALEN
);
1150 ret
= wl1271_cmd_join(wl
);
1160 static int wl1271_unjoin_channel(struct wl1271
*wl
)
1164 /* to stop listening to a channel, we disconnect */
1165 ret
= wl1271_cmd_disconnect(wl
);
1171 memset(wl
->bssid
, 0, ETH_ALEN
);
1172 wl
->rx_config
= WL1271_DEFAULT_RX_CONFIG
;
1178 static int wl1271_op_config(struct ieee80211_hw
*hw
, u32 changed
)
1180 struct wl1271
*wl
= hw
->priv
;
1181 struct ieee80211_conf
*conf
= &hw
->conf
;
1182 int channel
, ret
= 0;
1184 channel
= ieee80211_frequency_to_channel(conf
->channel
->center_freq
);
1186 wl1271_debug(DEBUG_MAC80211
, "mac80211 config ch %d psm %s power %d %s",
1188 conf
->flags
& IEEE80211_CONF_PS
? "on" : "off",
1190 conf
->flags
& IEEE80211_CONF_IDLE
? "idle" : "in use");
1192 mutex_lock(&wl
->mutex
);
1194 wl
->band
= conf
->channel
->band
;
1196 ret
= wl1271_ps_elp_wakeup(wl
, false);
1200 if (changed
& IEEE80211_CONF_CHANGE_IDLE
) {
1201 if (conf
->flags
& IEEE80211_CONF_IDLE
&& wl
->joined
)
1202 wl1271_unjoin_channel(wl
);
1204 wl1271_join_channel(wl
, channel
);
1207 /* if the channel changes while joined, join again */
1208 if (channel
!= wl
->channel
&& wl
->joined
)
1209 wl1271_join_channel(wl
, channel
);
1211 if (conf
->flags
& IEEE80211_CONF_PS
&& !wl
->psm_requested
) {
1212 wl1271_info("psm enabled");
1214 wl
->psm_requested
= true;
1217 * We enter PSM only if we're already associated.
1218 * If we're not, we'll enter it when joining an SSID,
1219 * through the bss_info_changed() hook.
1221 ret
= wl1271_ps_set_mode(wl
, STATION_POWER_SAVE_MODE
);
1222 } else if (!(conf
->flags
& IEEE80211_CONF_PS
) &&
1223 wl
->psm_requested
) {
1224 wl1271_info("psm disabled");
1226 wl
->psm_requested
= false;
1229 ret
= wl1271_ps_set_mode(wl
, STATION_ACTIVE_MODE
);
1232 if (conf
->power_level
!= wl
->power_level
) {
1233 ret
= wl1271_acx_tx_power(wl
, conf
->power_level
);
1237 wl
->power_level
= conf
->power_level
;
1241 wl1271_ps_elp_sleep(wl
);
1244 mutex_unlock(&wl
->mutex
);
1249 struct wl1271_filter_params
{
1252 u8 mc_list
[ACX_MC_ADDRESS_GROUP_MAX
][ETH_ALEN
];
1255 static u64
wl1271_op_prepare_multicast(struct ieee80211_hw
*hw
, int mc_count
,
1256 struct dev_addr_list
*mc_list
)
1258 struct wl1271_filter_params
*fp
;
1261 fp
= kzalloc(sizeof(*fp
), GFP_ATOMIC
);
1263 wl1271_error("Out of memory setting filters.");
1267 /* update multicast filtering parameters */
1269 if (mc_count
> ACX_MC_ADDRESS_GROUP_MAX
) {
1271 fp
->enabled
= false;
1274 fp
->mc_list_length
= 0;
1275 for (i
= 0; i
< mc_count
; i
++) {
1276 if (mc_list
->da_addrlen
== ETH_ALEN
) {
1277 memcpy(fp
->mc_list
[fp
->mc_list_length
],
1278 mc_list
->da_addr
, ETH_ALEN
);
1279 fp
->mc_list_length
++;
1281 wl1271_warning("Unknown mc address length.");
1282 mc_list
= mc_list
->next
;
1285 return (u64
)(unsigned long)fp
;
1288 #define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
1291 FIF_BCN_PRBRESP_PROMISC | \
1295 static void wl1271_op_configure_filter(struct ieee80211_hw
*hw
,
1296 unsigned int changed
,
1297 unsigned int *total
, u64 multicast
)
1299 struct wl1271_filter_params
*fp
= (void *)(unsigned long)multicast
;
1300 struct wl1271
*wl
= hw
->priv
;
1303 wl1271_debug(DEBUG_MAC80211
, "mac80211 configure filter");
1305 mutex_lock(&wl
->mutex
);
1307 if (wl
->state
== WL1271_STATE_OFF
)
1310 ret
= wl1271_ps_elp_wakeup(wl
, false);
1314 *total
&= WL1271_SUPPORTED_FILTERS
;
1315 changed
&= WL1271_SUPPORTED_FILTERS
;
1317 if (*total
& FIF_ALLMULTI
)
1318 ret
= wl1271_acx_group_address_tbl(wl
, false, NULL
, 0);
1320 ret
= wl1271_acx_group_address_tbl(wl
, fp
->enabled
,
1322 fp
->mc_list_length
);
1328 /* FIXME: We still need to set our filters properly */
1330 /* determine, whether supported filter values have changed */
1334 /* apply configured filters */
1335 ret
= wl1271_acx_rx_config(wl
, wl
->rx_config
, wl
->rx_filter
);
1340 wl1271_ps_elp_sleep(wl
);
1343 mutex_unlock(&wl
->mutex
);
1346 static int wl1271_op_set_key(struct ieee80211_hw
*hw
, enum set_key_cmd cmd
,
1347 struct ieee80211_vif
*vif
,
1348 struct ieee80211_sta
*sta
,
1349 struct ieee80211_key_conf
*key_conf
)
1351 struct wl1271
*wl
= hw
->priv
;
1358 static const u8 bcast_addr
[ETH_ALEN
] =
1359 { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
1361 wl1271_debug(DEBUG_MAC80211
, "mac80211 set key");
1363 addr
= sta
? sta
->addr
: bcast_addr
;
1365 wl1271_debug(DEBUG_CRYPT
, "CMD: 0x%x", cmd
);
1366 wl1271_dump(DEBUG_CRYPT
, "ADDR: ", addr
, ETH_ALEN
);
1367 wl1271_debug(DEBUG_CRYPT
, "Key: algo:0x%x, id:%d, len:%d flags 0x%x",
1368 key_conf
->alg
, key_conf
->keyidx
,
1369 key_conf
->keylen
, key_conf
->flags
);
1370 wl1271_dump(DEBUG_CRYPT
, "KEY: ", key_conf
->key
, key_conf
->keylen
);
1372 if (is_zero_ether_addr(addr
)) {
1373 /* We dont support TX only encryption */
1378 mutex_lock(&wl
->mutex
);
1380 ret
= wl1271_ps_elp_wakeup(wl
, false);
1384 switch (key_conf
->alg
) {
1388 key_conf
->hw_key_idx
= key_conf
->keyidx
;
1391 key_type
= KEY_TKIP
;
1393 key_conf
->hw_key_idx
= key_conf
->keyidx
;
1394 tx_seq_32
= wl
->tx_security_seq_32
;
1395 tx_seq_16
= wl
->tx_security_seq_16
;
1400 key_conf
->flags
|= IEEE80211_KEY_FLAG_GENERATE_IV
;
1401 tx_seq_32
= wl
->tx_security_seq_32
;
1402 tx_seq_16
= wl
->tx_security_seq_16
;
1405 wl1271_error("Unknown key algo 0x%x", key_conf
->alg
);
1413 ret
= wl1271_cmd_set_key(wl
, KEY_ADD_OR_REPLACE
,
1414 key_conf
->keyidx
, key_type
,
1415 key_conf
->keylen
, key_conf
->key
,
1416 addr
, tx_seq_32
, tx_seq_16
);
1418 wl1271_error("Could not add or replace key");
1424 ret
= wl1271_cmd_set_key(wl
, KEY_REMOVE
,
1425 key_conf
->keyidx
, key_type
,
1426 key_conf
->keylen
, key_conf
->key
,
1429 wl1271_error("Could not remove key");
1435 wl1271_error("Unsupported key cmd 0x%x", cmd
);
1443 wl1271_ps_elp_sleep(wl
);
1446 mutex_unlock(&wl
->mutex
);
1452 static int wl1271_op_hw_scan(struct ieee80211_hw
*hw
,
1453 struct cfg80211_scan_request
*req
)
1455 struct wl1271
*wl
= hw
->priv
;
1460 wl1271_debug(DEBUG_MAC80211
, "mac80211 hw scan");
1463 ssid
= req
->ssids
[0].ssid
;
1464 len
= req
->ssids
[0].ssid_len
;
1467 mutex_lock(&wl
->mutex
);
1469 ret
= wl1271_ps_elp_wakeup(wl
, false);
1473 if (wl1271_11a_enabled())
1474 ret
= wl1271_cmd_scan(hw
->priv
, ssid
, len
, 1, 0,
1475 WL1271_SCAN_BAND_DUAL
, 3);
1477 ret
= wl1271_cmd_scan(hw
->priv
, ssid
, len
, 1, 0,
1478 WL1271_SCAN_BAND_2_4_GHZ
, 3);
1480 wl1271_ps_elp_sleep(wl
);
1483 mutex_unlock(&wl
->mutex
);
1488 static int wl1271_op_set_rts_threshold(struct ieee80211_hw
*hw
, u32 value
)
1490 struct wl1271
*wl
= hw
->priv
;
1493 mutex_lock(&wl
->mutex
);
1495 ret
= wl1271_ps_elp_wakeup(wl
, false);
1499 ret
= wl1271_acx_rts_threshold(wl
, (u16
) value
);
1501 wl1271_warning("wl1271_op_set_rts_threshold failed: %d", ret
);
1503 wl1271_ps_elp_sleep(wl
);
1506 mutex_unlock(&wl
->mutex
);
1511 static u32
wl1271_enabled_rates_get(struct wl1271
*wl
, u64 basic_rate_set
)
1513 struct ieee80211_supported_band
*band
;
1514 u32 enabled_rates
= 0;
1517 band
= wl
->hw
->wiphy
->bands
[wl
->band
];
1518 for (bit
= 0; bit
< band
->n_bitrates
; bit
++) {
1519 if (basic_rate_set
& 0x1)
1520 enabled_rates
|= band
->bitrates
[bit
].hw_value
;
1521 basic_rate_set
>>= 1;
1524 return enabled_rates
;
1527 static void wl1271_op_bss_info_changed(struct ieee80211_hw
*hw
,
1528 struct ieee80211_vif
*vif
,
1529 struct ieee80211_bss_conf
*bss_conf
,
1532 enum wl1271_cmd_ps_mode mode
;
1533 struct wl1271
*wl
= hw
->priv
;
1536 wl1271_debug(DEBUG_MAC80211
, "mac80211 bss info changed");
1538 mutex_lock(&wl
->mutex
);
1540 ret
= wl1271_ps_elp_wakeup(wl
, false);
1544 if ((changed
& BSS_CHANGED_BSSID
) &&
1546 * Now we know the correct bssid, so we send a new join command
1547 * and enable the BSSID filter
1549 memcmp(wl
->bssid
, bss_conf
->bssid
, ETH_ALEN
)) {
1550 wl
->rx_config
|= CFG_BSSID_FILTER_EN
;
1551 memcpy(wl
->bssid
, bss_conf
->bssid
, ETH_ALEN
);
1552 ret
= wl1271_cmd_build_null_data(wl
);
1554 wl1271_warning("cmd buld null data failed %d",
1558 ret
= wl1271_cmd_join(wl
);
1560 wl1271_warning("cmd join failed %d", ret
);
1566 if (changed
& BSS_CHANGED_ASSOC
) {
1567 if (bss_conf
->assoc
) {
1568 wl
->aid
= bss_conf
->aid
;
1571 * with wl1271, we don't need to update the
1572 * beacon_int and dtim_period, because the firmware
1573 * updates it by itself when the first beacon is
1574 * received after a join.
1576 ret
= wl1271_cmd_build_ps_poll(wl
, wl
->aid
);
1580 ret
= wl1271_acx_aid(wl
, wl
->aid
);
1584 /* If we want to go in PSM but we're not there yet */
1585 if (wl
->psm_requested
&& !wl
->psm
) {
1586 mode
= STATION_POWER_SAVE_MODE
;
1587 ret
= wl1271_ps_set_mode(wl
, mode
);
1592 /* use defaults when not associated */
1593 wl
->basic_rate_set
= WL1271_DEFAULT_BASIC_RATE_SET
;
1599 if (changed
& BSS_CHANGED_ERP_SLOT
) {
1600 if (bss_conf
->use_short_slot
)
1601 ret
= wl1271_acx_slot(wl
, SLOT_TIME_SHORT
);
1603 ret
= wl1271_acx_slot(wl
, SLOT_TIME_LONG
);
1605 wl1271_warning("Set slot time failed %d", ret
);
1610 if (changed
& BSS_CHANGED_ERP_PREAMBLE
) {
1611 if (bss_conf
->use_short_preamble
)
1612 wl1271_acx_set_preamble(wl
, ACX_PREAMBLE_SHORT
);
1614 wl1271_acx_set_preamble(wl
, ACX_PREAMBLE_LONG
);
1617 if (changed
& BSS_CHANGED_ERP_CTS_PROT
) {
1618 if (bss_conf
->use_cts_prot
)
1619 ret
= wl1271_acx_cts_protect(wl
, CTSPROTECT_ENABLE
);
1621 ret
= wl1271_acx_cts_protect(wl
, CTSPROTECT_DISABLE
);
1623 wl1271_warning("Set ctsprotect failed %d", ret
);
1628 if (changed
& BSS_CHANGED_BASIC_RATES
) {
1629 wl
->basic_rate_set
= wl1271_enabled_rates_get(
1630 wl
, bss_conf
->basic_rates
);
1632 ret
= wl1271_acx_rate_policies(wl
, wl
->basic_rate_set
);
1634 wl1271_warning("Set rate policies failed %d", ret
);
1640 wl1271_ps_elp_sleep(wl
);
1643 mutex_unlock(&wl
->mutex
);
1647 /* can't be const, mac80211 writes to this */
1648 static struct ieee80211_rate wl1271_rates
[] = {
1650 .hw_value
= CONF_HW_BIT_RATE_1MBPS
,
1651 .hw_value_short
= CONF_HW_BIT_RATE_1MBPS
, },
1653 .hw_value
= CONF_HW_BIT_RATE_2MBPS
,
1654 .hw_value_short
= CONF_HW_BIT_RATE_2MBPS
,
1655 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
1657 .hw_value
= CONF_HW_BIT_RATE_5_5MBPS
,
1658 .hw_value_short
= CONF_HW_BIT_RATE_5_5MBPS
,
1659 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
1661 .hw_value
= CONF_HW_BIT_RATE_11MBPS
,
1662 .hw_value_short
= CONF_HW_BIT_RATE_11MBPS
,
1663 .flags
= IEEE80211_RATE_SHORT_PREAMBLE
},
1665 .hw_value
= CONF_HW_BIT_RATE_6MBPS
,
1666 .hw_value_short
= CONF_HW_BIT_RATE_6MBPS
, },
1668 .hw_value
= CONF_HW_BIT_RATE_9MBPS
,
1669 .hw_value_short
= CONF_HW_BIT_RATE_9MBPS
, },
1671 .hw_value
= CONF_HW_BIT_RATE_12MBPS
,
1672 .hw_value_short
= CONF_HW_BIT_RATE_12MBPS
, },
1674 .hw_value
= CONF_HW_BIT_RATE_18MBPS
,
1675 .hw_value_short
= CONF_HW_BIT_RATE_18MBPS
, },
1677 .hw_value
= CONF_HW_BIT_RATE_24MBPS
,
1678 .hw_value_short
= CONF_HW_BIT_RATE_24MBPS
, },
1680 .hw_value
= CONF_HW_BIT_RATE_36MBPS
,
1681 .hw_value_short
= CONF_HW_BIT_RATE_36MBPS
, },
1683 .hw_value
= CONF_HW_BIT_RATE_48MBPS
,
1684 .hw_value_short
= CONF_HW_BIT_RATE_48MBPS
, },
1686 .hw_value
= CONF_HW_BIT_RATE_54MBPS
,
1687 .hw_value_short
= CONF_HW_BIT_RATE_54MBPS
, },
1690 /* can't be const, mac80211 writes to this */
1691 static struct ieee80211_channel wl1271_channels
[] = {
1692 { .hw_value
= 1, .center_freq
= 2412, .max_power
= 25 },
1693 { .hw_value
= 2, .center_freq
= 2417, .max_power
= 25 },
1694 { .hw_value
= 3, .center_freq
= 2422, .max_power
= 25 },
1695 { .hw_value
= 4, .center_freq
= 2427, .max_power
= 25 },
1696 { .hw_value
= 5, .center_freq
= 2432, .max_power
= 25 },
1697 { .hw_value
= 6, .center_freq
= 2437, .max_power
= 25 },
1698 { .hw_value
= 7, .center_freq
= 2442, .max_power
= 25 },
1699 { .hw_value
= 8, .center_freq
= 2447, .max_power
= 25 },
1700 { .hw_value
= 9, .center_freq
= 2452, .max_power
= 25 },
1701 { .hw_value
= 10, .center_freq
= 2457, .max_power
= 25 },
1702 { .hw_value
= 11, .center_freq
= 2462, .max_power
= 25 },
1703 { .hw_value
= 12, .center_freq
= 2467, .max_power
= 25 },
1704 { .hw_value
= 13, .center_freq
= 2472, .max_power
= 25 },
1707 /* can't be const, mac80211 writes to this */
1708 static struct ieee80211_supported_band wl1271_band_2ghz
= {
1709 .channels
= wl1271_channels
,
1710 .n_channels
= ARRAY_SIZE(wl1271_channels
),
1711 .bitrates
= wl1271_rates
,
1712 .n_bitrates
= ARRAY_SIZE(wl1271_rates
),
1715 /* 5 GHz data rates for WL1273 */
1716 static struct ieee80211_rate wl1271_rates_5ghz
[] = {
1718 .hw_value
= CONF_HW_BIT_RATE_6MBPS
,
1719 .hw_value_short
= CONF_HW_BIT_RATE_6MBPS
, },
1721 .hw_value
= CONF_HW_BIT_RATE_9MBPS
,
1722 .hw_value_short
= CONF_HW_BIT_RATE_9MBPS
, },
1724 .hw_value
= CONF_HW_BIT_RATE_12MBPS
,
1725 .hw_value_short
= CONF_HW_BIT_RATE_12MBPS
, },
1727 .hw_value
= CONF_HW_BIT_RATE_18MBPS
,
1728 .hw_value_short
= CONF_HW_BIT_RATE_18MBPS
, },
1730 .hw_value
= CONF_HW_BIT_RATE_24MBPS
,
1731 .hw_value_short
= CONF_HW_BIT_RATE_24MBPS
, },
1733 .hw_value
= CONF_HW_BIT_RATE_36MBPS
,
1734 .hw_value_short
= CONF_HW_BIT_RATE_36MBPS
, },
1736 .hw_value
= CONF_HW_BIT_RATE_48MBPS
,
1737 .hw_value_short
= CONF_HW_BIT_RATE_48MBPS
, },
1739 .hw_value
= CONF_HW_BIT_RATE_54MBPS
,
1740 .hw_value_short
= CONF_HW_BIT_RATE_54MBPS
, },
1743 /* 5 GHz band channels for WL1273 */
1744 static struct ieee80211_channel wl1271_channels_5ghz
[] = {
1745 { .hw_value
= 183, .center_freq
= 4915},
1746 { .hw_value
= 184, .center_freq
= 4920},
1747 { .hw_value
= 185, .center_freq
= 4925},
1748 { .hw_value
= 187, .center_freq
= 4935},
1749 { .hw_value
= 188, .center_freq
= 4940},
1750 { .hw_value
= 189, .center_freq
= 4945},
1751 { .hw_value
= 192, .center_freq
= 4960},
1752 { .hw_value
= 196, .center_freq
= 4980},
1753 { .hw_value
= 7, .center_freq
= 5035},
1754 { .hw_value
= 8, .center_freq
= 5040},
1755 { .hw_value
= 9, .center_freq
= 5045},
1756 { .hw_value
= 11, .center_freq
= 5055},
1757 { .hw_value
= 12, .center_freq
= 5060},
1758 { .hw_value
= 16, .center_freq
= 5080},
1759 { .hw_value
= 34, .center_freq
= 5170},
1760 { .hw_value
= 36, .center_freq
= 5180},
1761 { .hw_value
= 38, .center_freq
= 5190},
1762 { .hw_value
= 40, .center_freq
= 5200},
1763 { .hw_value
= 42, .center_freq
= 5210},
1764 { .hw_value
= 44, .center_freq
= 5220},
1765 { .hw_value
= 46, .center_freq
= 5230},
1766 { .hw_value
= 48, .center_freq
= 5240},
1767 { .hw_value
= 52, .center_freq
= 5260},
1768 { .hw_value
= 56, .center_freq
= 5280},
1769 { .hw_value
= 60, .center_freq
= 5300},
1770 { .hw_value
= 64, .center_freq
= 5320},
1771 { .hw_value
= 100, .center_freq
= 5500},
1772 { .hw_value
= 104, .center_freq
= 5520},
1773 { .hw_value
= 108, .center_freq
= 5540},
1774 { .hw_value
= 112, .center_freq
= 5560},
1775 { .hw_value
= 116, .center_freq
= 5580},
1776 { .hw_value
= 120, .center_freq
= 5600},
1777 { .hw_value
= 124, .center_freq
= 5620},
1778 { .hw_value
= 128, .center_freq
= 5640},
1779 { .hw_value
= 132, .center_freq
= 5660},
1780 { .hw_value
= 136, .center_freq
= 5680},
1781 { .hw_value
= 140, .center_freq
= 5700},
1782 { .hw_value
= 149, .center_freq
= 5745},
1783 { .hw_value
= 153, .center_freq
= 5765},
1784 { .hw_value
= 157, .center_freq
= 5785},
1785 { .hw_value
= 161, .center_freq
= 5805},
1786 { .hw_value
= 165, .center_freq
= 5825},
1790 static struct ieee80211_supported_band wl1271_band_5ghz
= {
1791 .channels
= wl1271_channels_5ghz
,
1792 .n_channels
= ARRAY_SIZE(wl1271_channels_5ghz
),
1793 .bitrates
= wl1271_rates_5ghz
,
1794 .n_bitrates
= ARRAY_SIZE(wl1271_rates_5ghz
),
1797 static const struct ieee80211_ops wl1271_ops
= {
1798 .start
= wl1271_op_start
,
1799 .stop
= wl1271_op_stop
,
1800 .add_interface
= wl1271_op_add_interface
,
1801 .remove_interface
= wl1271_op_remove_interface
,
1802 .config
= wl1271_op_config
,
1803 /* .config_interface = wl1271_op_config_interface, */
1804 .prepare_multicast
= wl1271_op_prepare_multicast
,
1805 .configure_filter
= wl1271_op_configure_filter
,
1807 .set_key
= wl1271_op_set_key
,
1808 .hw_scan
= wl1271_op_hw_scan
,
1809 .bss_info_changed
= wl1271_op_bss_info_changed
,
1810 .set_rts_threshold
= wl1271_op_set_rts_threshold
,
1813 static int wl1271_register_hw(struct wl1271
*wl
)
1817 if (wl
->mac80211_registered
)
1820 SET_IEEE80211_PERM_ADDR(wl
->hw
, wl
->mac_addr
);
1822 ret
= ieee80211_register_hw(wl
->hw
);
1824 wl1271_error("unable to register mac80211 hw: %d", ret
);
1828 wl
->mac80211_registered
= true;
1830 wl1271_notice("loaded");
1835 static int wl1271_init_ieee80211(struct wl1271
*wl
)
1837 /* The tx descriptor buffer and the TKIP space. */
1838 wl
->hw
->extra_tx_headroom
= WL1271_TKIP_IV_SPACE
+
1839 sizeof(struct wl1271_tx_hw_descr
);
1842 /* FIXME: find a proper value */
1843 wl
->hw
->channel_change_time
= 10000;
1845 wl
->hw
->flags
= IEEE80211_HW_SIGNAL_DBM
|
1846 IEEE80211_HW_NOISE_DBM
|
1847 IEEE80211_HW_BEACON_FILTER
|
1848 IEEE80211_HW_SUPPORTS_PS
;
1850 wl
->hw
->wiphy
->interface_modes
= BIT(NL80211_IFTYPE_STATION
);
1851 wl
->hw
->wiphy
->max_scan_ssids
= 1;
1852 wl
->hw
->wiphy
->bands
[IEEE80211_BAND_2GHZ
] = &wl1271_band_2ghz
;
1854 if (wl1271_11a_enabled())
1855 wl
->hw
->wiphy
->bands
[IEEE80211_BAND_5GHZ
] = &wl1271_band_5ghz
;
1857 SET_IEEE80211_DEV(wl
->hw
, &wl
->spi
->dev
);
1862 static void wl1271_device_release(struct device
*dev
)
1867 static struct platform_device wl1271_device
= {
1871 /* device model insists to have a release function */
1873 .release
= wl1271_device_release
,
1877 #define WL1271_DEFAULT_CHANNEL 0
1878 static int __devinit
wl1271_probe(struct spi_device
*spi
)
1880 struct wl12xx_platform_data
*pdata
;
1881 struct ieee80211_hw
*hw
;
1884 static const u8 nokia_oui
[3] = {0x00, 0x1f, 0xdf};
1886 pdata
= spi
->dev
.platform_data
;
1888 wl1271_error("no platform data");
1892 hw
= ieee80211_alloc_hw(sizeof(*wl
), &wl1271_ops
);
1894 wl1271_error("could not alloc ieee80211_hw");
1899 memset(wl
, 0, sizeof(*wl
));
1901 INIT_LIST_HEAD(&wl
->list
);
1904 dev_set_drvdata(&spi
->dev
, wl
);
1907 skb_queue_head_init(&wl
->tx_queue
);
1909 INIT_DELAYED_WORK(&wl
->elp_work
, wl1271_elp_work
);
1910 wl
->channel
= WL1271_DEFAULT_CHANNEL
;
1911 wl
->scanning
= false;
1912 wl
->default_key
= 0;
1914 wl
->rx_config
= WL1271_DEFAULT_RX_CONFIG
;
1915 wl
->rx_filter
= WL1271_DEFAULT_RX_FILTER
;
1918 wl
->psm_requested
= false;
1919 wl
->psm_entry_retry
= 0;
1920 wl
->tx_queue_stopped
= false;
1921 wl
->power_level
= WL1271_DEFAULT_POWER_LEVEL
;
1922 wl
->basic_rate_set
= WL1271_DEFAULT_BASIC_RATE_SET
;
1923 wl
->band
= IEEE80211_BAND_2GHZ
;
1927 for (i
= 0; i
< ACX_TX_DESCRIPTORS
; i
++)
1928 wl
->tx_frames
[i
] = NULL
;
1930 spin_lock_init(&wl
->wl_lock
);
1933 * In case our MAC address is not correctly set,
1934 * we use a random but Nokia MAC.
1936 memcpy(wl
->mac_addr
, nokia_oui
, 3);
1937 get_random_bytes(wl
->mac_addr
+ 3, 3);
1939 wl
->state
= WL1271_STATE_OFF
;
1940 mutex_init(&wl
->mutex
);
1942 /* This is the only SPI value that we need to set here, the rest
1943 * comes from the board-peripherals file */
1944 spi
->bits_per_word
= 32;
1946 ret
= spi_setup(spi
);
1948 wl1271_error("spi_setup failed");
1952 wl
->set_power
= pdata
->set_power
;
1953 if (!wl
->set_power
) {
1954 wl1271_error("set power function missing in platform data");
1961 wl1271_error("irq missing in platform data");
1966 ret
= request_irq(wl
->irq
, wl1271_irq
, 0, DRIVER_NAME
, wl
);
1968 wl1271_error("request_irq() failed: %d", ret
);
1972 set_irq_type(wl
->irq
, IRQ_TYPE_EDGE_RISING
);
1974 disable_irq(wl
->irq
);
1976 ret
= platform_device_register(&wl1271_device
);
1978 wl1271_error("couldn't register platform device");
1981 dev_set_drvdata(&wl1271_device
.dev
, wl
);
1983 /* Apply default driver configuration. */
1984 wl1271_conf_init(wl
);
1986 ret
= wl1271_init_ieee80211(wl
);
1990 ret
= wl1271_register_hw(wl
);
1994 wl1271_debugfs_init(wl
);
1996 wl1271_notice("initialized");
2001 platform_device_unregister(&wl1271_device
);
2004 free_irq(wl
->irq
, wl
);
2007 ieee80211_free_hw(hw
);
2012 static int __devexit
wl1271_remove(struct spi_device
*spi
)
2014 struct wl1271
*wl
= dev_get_drvdata(&spi
->dev
);
2016 ieee80211_unregister_hw(wl
->hw
);
2018 wl1271_debugfs_exit(wl
);
2019 platform_device_unregister(&wl1271_device
);
2020 free_irq(wl
->irq
, wl
);
2021 kfree(wl
->target_mem_map
);
2027 kfree(wl
->fw_status
);
2028 kfree(wl
->tx_res_if
);
2030 ieee80211_free_hw(wl
->hw
);
2036 static struct spi_driver wl1271_spi_driver
= {
2039 .bus
= &spi_bus_type
,
2040 .owner
= THIS_MODULE
,
2043 .probe
= wl1271_probe
,
2044 .remove
= __devexit_p(wl1271_remove
),
2047 static int __init
wl1271_init(void)
2051 ret
= spi_register_driver(&wl1271_spi_driver
);
2053 wl1271_error("failed to register spi driver: %d", ret
);
2061 static void __exit
wl1271_exit(void)
2063 spi_unregister_driver(&wl1271_spi_driver
);
2065 wl1271_notice("unloaded");
2068 module_init(wl1271_init
);
2069 module_exit(wl1271_exit
);
2071 MODULE_LICENSE("GPL");
2072 MODULE_AUTHOR("Luciano Coelho <luciano.coelho@nokia.com>");
2073 MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");
2074 MODULE_FIRMWARE(WL1271_FW_NAME
);