]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blame - drivers/net/wireless/wl12xx/wl12xx.h
wl12xx: add suspend_listen_interval debugfs file
[mirror_ubuntu-bionic-kernel.git] / drivers / net / wireless / wl12xx / wl12xx.h
CommitLineData
f5fc0f86
LC
1/*
2 * This file is part of wl1271
3 *
4 * Copyright (C) 1998-2009 Texas Instruments. All rights reserved.
5 * Copyright (C) 2008-2009 Nokia Corporation
6 *
7 * Contact: Luciano Coelho <luciano.coelho@nokia.com>
8 *
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License
11 * version 2 as published by the Free Software Foundation.
12 *
13 * This program is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
21 * 02110-1301 USA
22 *
23 */
24
00d20100
SL
25#ifndef __WL12XX_H__
26#define __WL12XX_H__
f5fc0f86
LC
27
28#include <linux/mutex.h>
29#include <linux/completion.h>
30#include <linux/spinlock.h>
31#include <linux/list.h>
32#include <linux/bitops.h>
33#include <net/mac80211.h>
34
00d20100
SL
35#include "conf.h"
36#include "ini.h"
2b60100b 37
cdaac628
EP
38#define WL127X_FW_NAME "ti-connectivity/wl127x-fw-4-sr.bin"
39#define WL128X_FW_NAME "ti-connectivity/wl128x-fw-4-sr.bin"
166d504e 40
5aa42346
SL
41/*
42 * wl127x and wl128x are using the same NVS file name. However, the
43 * ini parameters between them are different. The driver validates
44 * the correct NVS size in wl1271_boot_upload_nvs().
45 */
46#define WL12XX_NVS_NAME "ti-connectivity/wl1271-nvs.bin"
152ee6e0 47
04e36fc5
JO
48#define WL1271_TX_SECURITY_LO16(s) ((u16)((s) & 0xffff))
49#define WL1271_TX_SECURITY_HI32(s) ((u32)(((s) >> 16) & 0xffffffff))
b992c682 50#define WL1271_TX_SQN_POST_RECOVERY_PADDING 0xff
04e36fc5 51
7a55724e
JO
52#define WL1271_CIPHER_SUITE_GEM 0x00147201
53
259da430 54#define WL1271_BUSY_WORD_CNT 1
545f1da8 55#define WL1271_BUSY_WORD_LEN (WL1271_BUSY_WORD_CNT * sizeof(u32))
f5fc0f86
LC
56
57#define WL1271_ELP_HW_STATE_ASLEEP 0
58#define WL1271_ELP_HW_STATE_IRQ 1
59
d94cd297
JO
60#define WL1271_DEFAULT_BEACON_INT 100
61#define WL1271_DEFAULT_DTIM_PERIOD 1
62
c690ec81 63#define WL12XX_MAX_ROLES 4
f80c2d12 64#define WL12XX_MAX_LINKS 12
7f097988
EP
65#define WL12XX_INVALID_ROLE_ID 0xff
66#define WL12XX_INVALID_LINK_ID 0xff
e51ae9be 67
e5a359f8
EP
68#define WL12XX_MAX_RATE_POLICIES 16
69
e51ae9be 70/* Defined by FW as 0. Will not be freed or allocated. */
f4df1bd5 71#define WL12XX_SYSTEM_HLID 0
e51ae9be 72
b622d992 73/*
9b17f1b3 74 * When in AP-mode, we allow (at least) this number of packets
b622d992
AN
75 * to be transmitted to FW for a STA in PS-mode. Only when packets are
76 * present in the FW buffers it will wake the sleeping STA. We want to put
77 * enough packets for the driver to transmit all of its buffered data before
9b17f1b3 78 * the STA goes to sleep again. But we don't want to take too much memory
b622d992 79 * as it might hurt the throughput of active STAs.
b622d992 80 */
9b17f1b3 81#define WL1271_PS_STA_MAX_PACKETS 2
b622d992 82
98bdaabb 83#define WL1271_AP_BSS_INDEX 0
98bdaabb
AN
84#define WL1271_AP_DEF_BEACON_EXP 20
85
79b122dc 86#define ACX_TX_DESCRIPTORS 16
be7078c2 87
1f37cbc9
IY
88#define WL1271_AGGR_BUFFER_SIZE (4 * PAGE_SIZE)
89
f5fc0f86
LC
90enum wl1271_state {
91 WL1271_STATE_OFF,
92 WL1271_STATE_ON,
93 WL1271_STATE_PLT,
94};
95
96enum wl1271_partition_type {
97 PART_DOWN,
98 PART_WORK,
99 PART_DRPW,
100
101 PART_TABLE_LEN
102};
103
104struct wl1271_partition {
105 u32 size;
106 u32 start;
107};
108
109struct wl1271_partition_set {
110 struct wl1271_partition mem;
111 struct wl1271_partition reg;
451de97a
JO
112 struct wl1271_partition mem2;
113 struct wl1271_partition mem3;
f5fc0f86
LC
114};
115
116struct wl1271;
117
e7ddf549
LC
118enum {
119 FW_VER_CHIP,
120 FW_VER_IF_TYPE,
121 FW_VER_MAJOR,
122 FW_VER_SUBTYPE,
123 FW_VER_MINOR,
124
125 NUM_FW_VER
126};
127
128#define FW_VER_CHIP_WL127X 6
129#define FW_VER_CHIP_WL128X 7
130
131#define FW_VER_IF_TYPE_STA 1
132#define FW_VER_IF_TYPE_AP 2
133
134#define FW_VER_MINOR_1_SPARE_STA_MIN 58
135#define FW_VER_MINOR_1_SPARE_AP_MIN 47
4b7fac77 136
95dac04f
IY
137#define FW_VER_MINOR_FWLOG_STA_MIN 70
138
f5fc0f86
LC
139struct wl1271_chip {
140 u32 id;
4b7fac77 141 char fw_ver_str[ETHTOOL_BUSINFO_LEN];
e7ddf549 142 unsigned int fw_ver[NUM_FW_VER];
f5fc0f86
LC
143};
144
145struct wl1271_stats {
146 struct acx_statistics *fw_stats;
147 unsigned long fw_stats_update;
148
149 unsigned int retry_count;
150 unsigned int excessive_retries;
151};
152
f5fc0f86
LC
153#define NUM_TX_QUEUES 4
154#define NUM_RX_PKT_DESC 8
155
c47e8229 156#define AP_MAX_STATIONS 8
beb6c880 157
4d56ad9c
EP
158/* FW status registers */
159struct wl12xx_fw_status {
d0f63b20 160 __le32 intr;
f5fc0f86
LC
161 u8 fw_rx_counter;
162 u8 drv_rx_counter;
163 u8 reserved;
164 u8 tx_results_counter;
d0f63b20 165 __le32 rx_pkt_descs[NUM_RX_PKT_DESC];
d0f63b20 166 __le32 fw_localtime;
beb6c880
AN
167
168 /*
169 * A bitmap (where each bit represents a single HLID)
170 * to indicate if the station is in PS mode.
171 */
172 __le32 link_ps_bitmap;
173
4d56ad9c
EP
174 /*
175 * A bitmap (where each bit represents a single HLID) to indicate
176 * if the station is in Fast mode
177 */
178 __le32 link_fast_bitmap;
f5fc0f86 179
4d56ad9c
EP
180 /* Cumulative counter of total released mem blocks since FW-reset */
181 __le32 total_released_blks;
c8bde243 182
4d56ad9c
EP
183 /* Size (in Memory Blocks) of TX pool */
184 __le32 tx_total;
c8bde243 185
bf54e301
AN
186 /* Cumulative counter of released packets per AC */
187 u8 tx_released_pkts[NUM_TX_QUEUES];
c8bde243 188
9b17f1b3
AN
189 /* Cumulative counter of freed packets per HLID */
190 u8 tx_lnk_free_pkts[WL12XX_MAX_LINKS];
4d56ad9c
EP
191
192 /* Cumulative counter of released Voice memory blocks */
193 u8 tx_voice_released_blks;
f80c2d12 194 u8 padding_1[3];
4d56ad9c
EP
195 __le32 log_start_addr;
196} __packed;
c8bde243 197
f5fc0f86
LC
198struct wl1271_rx_mem_pool_addr {
199 u32 addr;
200 u32 addr_extra;
201};
202
4a31c11c 203#define WL1271_MAX_CHANNELS 64
abb0b3bf 204struct wl1271_scan {
4fb26fa9 205 struct cfg80211_scan_request *req;
4a31c11c 206 unsigned long scanned_ch[BITS_TO_LONGS(WL1271_MAX_CHANNELS)];
78abd320 207 bool failed;
abb0b3bf 208 u8 state;
3b40c040 209 u8 ssid[IEEE80211_MAX_SSID_LEN+1];
abb0b3bf 210 size_t ssid_len;
abb0b3bf
TP
211};
212
8197b711 213struct wl1271_if_operations {
a390e85c 214 void (*read)(struct device *child, int addr, void *buf, size_t len,
8197b711 215 bool fixed);
a390e85c 216 void (*write)(struct device *child, int addr, void *buf, size_t len,
8197b711 217 bool fixed);
a390e85c
FB
218 void (*reset)(struct device *child);
219 void (*init)(struct device *child);
220 int (*power)(struct device *child, bool enable);
221 void (*set_block_size) (struct device *child, unsigned int blksz);
8197b711
TP
222};
223
7f179b46
AN
224#define MAX_NUM_KEYS 14
225#define MAX_KEY_SIZE 32
226
227struct wl1271_ap_key {
228 u8 id;
229 u8 key_type;
230 u8 key_size;
231 u8 key[MAX_KEY_SIZE];
232 u8 hlid;
233 u32 tx_seq_32;
234 u16 tx_seq_16;
235};
236
72c2d9e5 237enum wl12xx_flags {
72c2d9e5
EP
238 WL1271_FLAG_GPIO_POWER,
239 WL1271_FLAG_TX_QUEUE_STOPPED,
b07d4037 240 WL1271_FLAG_TX_PENDING,
72c2d9e5 241 WL1271_FLAG_IN_ELP,
a665d6e2 242 WL1271_FLAG_ELP_REQUESTED,
72c2d9e5 243 WL1271_FLAG_IRQ_RUNNING,
72c2d9e5 244 WL1271_FLAG_FW_TX_BUSY,
990f5de7 245 WL1271_FLAG_DUMMY_PACKET_PENDING,
f44e5868
EP
246 WL1271_FLAG_SUSPENDED,
247 WL1271_FLAG_PENDING_WORK,
77ddaa10 248 WL1271_FLAG_SOFT_GEMINI,
baacb9ae 249 WL1271_FLAG_RECOVERY_IN_PROGRESS,
72c2d9e5
EP
250};
251
ba8447f6 252enum wl12xx_vif_flags {
10c8cd01 253 WLVIF_FLAG_INITIALIZED,
ba8447f6 254 WLVIF_FLAG_STA_ASSOCIATED,
eee514e3 255 WLVIF_FLAG_IBSS_JOINED,
53d40d0b 256 WLVIF_FLAG_AP_STARTED,
d18da7fc 257 WLVIF_FLAG_IN_AUTO_PS,
8181aecc 258 WLVIF_FLAG_STA_STATE_SENT,
0744bdb6 259 WLVIF_FLAG_RX_STREAMING_STARTED,
836d6600 260 WLVIF_FLAG_PSPOLL_FAILURE,
52630c5d 261 WLVIF_FLAG_CS_PROGRESS,
560f0024 262 WLVIF_FLAG_AP_PROBE_RESP_SET,
a0c7b782 263 WLVIF_FLAG_IN_USE,
ba8447f6
EP
264};
265
a8c0ddb5
AN
266struct wl1271_link {
267 /* AP-mode - TX queue per AC in link */
268 struct sk_buff_head tx_queue[NUM_TX_QUEUES];
09039f42 269
9b17f1b3
AN
270 /* accounting for allocated / freed packets in FW */
271 u8 allocated_pkts;
272 u8 prev_freed_pkts;
b622d992
AN
273
274 u8 addr[ETH_ALEN];
0f9c8250
AN
275
276 /* bitmap of TIDs where RX BA sessions are active for this link */
277 u8 ba_bitmap;
a8c0ddb5
AN
278};
279
f5fc0f86
LC
280struct wl1271 {
281 struct ieee80211_hw *hw;
282 bool mac80211_registered;
283
a390e85c
FB
284 struct device *dev;
285
8197b711
TP
286 void *if_priv;
287
288 struct wl1271_if_operations *if_ops;
f5fc0f86
LC
289
290 void (*set_power)(bool enable);
291 int irq;
15cea993 292 int ref_clock;
f5fc0f86
LC
293
294 spinlock_t wl_lock;
295
296 enum wl1271_state state;
297 struct mutex mutex;
298
830fb67b
JO
299 unsigned long flags;
300
451de97a 301 struct wl1271_partition_set part;
f5fc0f86
LC
302
303 struct wl1271_chip chip;
304
305 int cmd_box_addr;
306 int event_box_addr;
307
308 u8 *fw;
309 size_t fw_len;
bc765bf3 310 void *nvs;
02fabb0e 311 size_t nvs_len;
f5fc0f86 312
d717fd61
JO
313 s8 hw_pg_ver;
314
5e037e74
LC
315 /* address read from the fuse ROM */
316 u32 fuse_oui_addr;
317 u32 fuse_nic_addr;
318
319 /* we have up to 2 MAC addresses */
320 struct mac_address addresses[2];
f5fc0f86 321 int channel;
f4df1bd5 322 u8 system_hlid;
c690ec81
EP
323
324 unsigned long links_map[BITS_TO_LONGS(WL12XX_MAX_LINKS)];
325 unsigned long roles_map[BITS_TO_LONGS(WL12XX_MAX_ROLES)];
251c177f 326 unsigned long roc_map[BITS_TO_LONGS(WL12XX_MAX_ROLES)];
e5a359f8
EP
327 unsigned long rate_policies_map[
328 BITS_TO_LONGS(WL12XX_MAX_RATE_POLICIES)];
f5fc0f86 329
87627214 330 struct list_head wlvif_list;
e5a359f8 331
a4e4130d
EP
332 u8 sta_count;
333 u8 ap_count;
87627214 334
f5fc0f86
LC
335 struct wl1271_acx_mem_map *target_mem_map;
336
337 /* Accounting for allocated / available TX blocks on HW */
4d56ad9c 338 u32 tx_blocks_freed;
f5fc0f86 339 u32 tx_blocks_available;
7bb5d6ce 340 u32 tx_allocated_blocks;
ffb591cd 341 u32 tx_results_count;
f5fc0f86 342
e9eb8cbe
GE
343 /* amount of spare TX blocks to use */
344 u32 tx_spare_blocks;
345
bf54e301
AN
346 /* Accounting for allocated / available Tx packets in HW */
347 u32 tx_pkts_freed[NUM_TX_QUEUES];
742246f8 348 u32 tx_allocated_pkts[NUM_TX_QUEUES];
bf54e301 349
f5fc0f86 350 /* Transmitted TX packets counter for chipset interface */
ffb591cd 351 u32 tx_packets_count;
f5fc0f86
LC
352
353 /* Time-offset between host and chipset clocks */
ac5e1e39 354 s64 time_offset;
f5fc0f86 355
f5fc0f86 356 /* Frames scheduled for transmission, not handled yet */
f1a46384 357 int tx_queue_count[NUM_TX_QUEUES];
708bb3cf 358 long stopped_queues_map;
f5fc0f86 359
a620865e
IY
360 /* Frames received, not handled yet by mac80211 */
361 struct sk_buff_head deferred_rx_queue;
362
363 /* Frames sent, not returned yet to mac80211 */
364 struct sk_buff_head deferred_tx_queue;
365
f5fc0f86 366 struct work_struct tx_work;
92ef8960 367 struct workqueue_struct *freezable_wq;
c87dec9f 368
f5fc0f86 369 /* Pending TX frames */
25eeb9e3 370 unsigned long tx_frames_map[BITS_TO_LONGS(ACX_TX_DESCRIPTORS)];
be7078c2 371 struct sk_buff *tx_frames[ACX_TX_DESCRIPTORS];
781608c4 372 int tx_frames_cnt;
f5fc0f86
LC
373
374 /* FW Rx counter */
375 u32 rx_counter;
376
377 /* Rx memory pool address */
378 struct wl1271_rx_mem_pool_addr rx_mem_pool_addr;
379
1f37cbc9
IY
380 /* Intermediate buffer, used for packet aggregation */
381 u8 *aggr_buf;
382
990f5de7
IY
383 /* Reusable dummy packet template */
384 struct sk_buff *dummy_packet;
385
a620865e
IY
386 /* Network stack work */
387 struct work_struct netstack_work;
f5fc0f86 388
95dac04f
IY
389 /* FW log buffer */
390 u8 *fwlog;
391
392 /* Number of valid bytes in the FW log buffer */
393 ssize_t fwlog_size;
394
395 /* Sysfs FW log entry readers wait queue */
396 wait_queue_head_t fwlog_waitq;
397
52b0e7a6
JO
398 /* Hardware recovery work */
399 struct work_struct recovery_work;
400
f5fc0f86
LC
401 /* The mbox event mask */
402 u32 event_mask;
403
404 /* Mailbox pointers */
405 u32 mbox_ptr[2];
406
407 /* Are we currently scanning */
784f694d 408 struct ieee80211_vif *scan_vif;
abb0b3bf 409 struct wl1271_scan scan;
78abd320 410 struct delayed_work scan_complete_work;
f5fc0f86 411
33c2c06c
LC
412 bool sched_scanning;
413
8a5a37a6
JO
414 /* The current band */
415 enum ieee80211_band band;
416
f5fc0f86 417 struct completion *elp_compl;
37b70a81 418 struct delayed_work elp_work;
90494a90 419
f5fc0f86
LC
420 /* in dBm */
421 int power_level;
422
423 struct wl1271_stats stats;
f5fc0f86 424
554d7209 425 __le32 buffer_32;
f5fc0f86 426 u32 buffer_cmd;
545f1da8 427 u32 buffer_busyword[WL1271_BUSY_WORD_CNT];
f5fc0f86 428
4d56ad9c 429 struct wl12xx_fw_status *fw_status;
f5fc0f86 430 struct wl1271_tx_hw_res_if *tx_res_if;
b771eee5
JO
431
432 struct ieee80211_vif *vif;
d6e19d13 433
2b60100b
JO
434 /* Current chipset configuration */
435 struct conf_drv_settings conf;
01c09162 436
7fc3a864
JO
437 bool sg_enabled;
438
02fabb0e
JO
439 bool enable_11a;
440
01c09162 441 struct list_head list;
ece550d0
JL
442
443 /* Most recently reported noise in dBm */
444 s8 noise;
f84f7d78 445
a8aaaf53
LC
446 /* bands supported by this instance of wl12xx */
447 struct ieee80211_supported_band bands[IEEE80211_NUM_BANDS];
4b7fac77 448
5ea417ae 449 int tcxo_clock;
48a61477 450
402e4861
EP
451 /*
452 * wowlan trigger was configured during suspend.
453 * (currently, only "ANY" trigger is supported)
454 */
455 bool wow_enabled;
6bb04332 456 bool irq_wake_enabled;
402e4861 457
a8c0ddb5
AN
458 /*
459 * AP-mode - links indexed by HLID. The global and broadcast links
460 * are always active.
461 */
c7ffb902 462 struct wl1271_link links[WL12XX_MAX_LINKS];
a8c0ddb5 463
b622d992
AN
464 /* AP-mode - a bitmap of links currently in PS mode according to FW */
465 u32 ap_fw_ps_map;
466
467 /* AP-mode - a bitmap of links currently in PS mode in mac80211 */
468 unsigned long ap_ps_map;
606ea9fa
IY
469
470 /* Quirks of specific hardware revisions */
471 unsigned int quirks;
341b7cde
IY
472
473 /* Platform limitations */
474 unsigned int platform_quirks;
0f9c8250
AN
475
476 /* number of currently active RX BA sessions */
477 int ba_rx_session_count;
da03209e
AN
478
479 /* AP-mode - number of currently connected stations */
480 int active_sta_count;
e4120df9
EP
481
482 /* last wlvif we transmitted from */
483 struct wl12xx_vif *last_wlvif;
f84f7d78
AN
484};
485
486struct wl1271_station {
487 u8 hlid;
f5fc0f86
LC
488};
489
87fbcb0f 490struct wl12xx_vif {
252efa4f 491 struct wl1271 *wl;
87627214 492 struct list_head list;
ba8447f6 493 unsigned long flags;
536129c8 494 u8 bss_type;
fb0e707c 495 u8 p2p; /* we are using p2p role */
0603d891 496 u8 role_id;
536129c8 497
7edebf56
EP
498 /* sta/ibss specific */
499 u8 dev_role_id;
afaf8bdb 500 u8 dev_hlid;
7edebf56 501
154da67c
EP
502 union {
503 struct {
504 u8 hlid;
d0802abd 505 u8 ba_rx_bitmap;
e5a359f8
EP
506
507 u8 basic_rate_idx;
508 u8 ap_rate_idx;
509 u8 p2p_rate_idx;
154da67c 510 } sta;
a8ab39a4
EP
511 struct {
512 u8 global_hlid;
513 u8 bcast_hlid;
c7ffb902
EP
514
515 /* HLIDs bitmap of associated stations */
516 unsigned long sta_hlid_map[BITS_TO_LONGS(
517 WL12XX_MAX_LINKS)];
170d0e67
EP
518
519 /* recoreded keys - set here before AP startup */
520 struct wl1271_ap_key *recorded_keys[MAX_NUM_KEYS];
e5a359f8
EP
521
522 u8 mgmt_rate_idx;
523 u8 bcast_rate_idx;
524 u8 ucast_rate_idx[CONF_TX_MAX_AC_COUNT];
a8ab39a4 525 } ap;
154da67c
EP
526 };
527
4438aca9
EP
528 /* the hlid of the last transmitted skb */
529 int last_tx_hlid;
530
c7ffb902
EP
531 unsigned long links_map[BITS_TO_LONGS(WL12XX_MAX_LINKS)];
532
1fe9f161
EP
533 u8 ssid[IEEE80211_MAX_SSID_LEN + 1];
534 u8 ssid_len;
535
1b92f15e
EP
536 /* The current band */
537 enum ieee80211_band band;
61f845f4 538 int channel;
1b92f15e 539
83587505 540 u32 bitrate_masks[IEEE80211_NUM_BANDS];
87fbcb0f 541 u32 basic_rate_set;
30d0c8fd
EP
542
543 /*
544 * currently configured rate set:
545 * bits 0-15 - 802.11abg rates
546 * bits 16-23 - 802.11n MCS index mask
547 * support only 1 stream, thus only 8 bits for the MCS rates (0-7).
548 */
d2d66c56 549 u32 basic_rate;
30d0c8fd 550 u32 rate_set;
bddb29b8
EP
551
552 /* probe-req template for the current AP */
553 struct sk_buff *probereq;
6840e37a 554
6a899796
EP
555 /* Beaconing interval (needed for ad-hoc) */
556 u32 beacon_int;
557
f75c753f
EP
558 /* Default key (for WEP) */
559 u32 default_key;
560
6840e37a
EP
561 /* Our association ID */
562 u16 aid;
98b86253
EP
563
564 /* Session counter for the chipset */
565 int session_counter;
252efa4f 566
74ec8395
EP
567 /* retry counter for PSM entries */
568 u8 psm_entry_retry;
04324d99 569
6bd65029
EP
570 /* in dBm */
571 int power_level;
572
04324d99
EP
573 int rssi_thold;
574 int last_rssi_event;
d0802abd
EP
575
576 /* RX BA constraint value */
577 bool ba_support;
578 bool ba_allowed;
48e93e40 579
9eb599e9
EP
580 /* Rx Streaming */
581 struct work_struct rx_streaming_enable_work;
582 struct work_struct rx_streaming_disable_work;
583 struct timer_list rx_streaming_timer;
584
48e93e40
EP
585 /*
586 * This struct must be last!
587 * data that has to be saved acrossed reconfigs (e.g. recovery)
588 * should be declared in this struct.
589 */
590 struct {
591 u8 persistent[0];
592 /*
593 * Security sequence number
594 * bits 0-15: lower 16 bits part of sequence number
595 * bits 16-47: higher 32 bits part of sequence number
596 * bits 48-63: not in use
597 */
598 u64 tx_security_seq;
599
600 /* 8 bits of the last sequence number in use */
601 u8 tx_security_last_seq_lsb;
602 };
87fbcb0f
EP
603};
604
605static inline struct wl12xx_vif *wl12xx_vif_to_data(struct ieee80211_vif *vif)
606{
607 return (struct wl12xx_vif *)vif->drv_priv;
608}
609
610static inline
611struct ieee80211_vif *wl12xx_wlvif_to_vif(struct wl12xx_vif *wlvif)
612{
613 return container_of((void *)wlvif, struct ieee80211_vif, drv_priv);
614}
615
87627214
EP
616#define wl12xx_for_each_wlvif(wl, wlvif) \
617 list_for_each_entry(wlvif, &wl->wlvif_list, list)
618
e4120df9
EP
619#define wl12xx_for_each_wlvif_continue(wl, wlvif) \
620 list_for_each_entry_continue(wlvif, &wl->wlvif_list, list)
621
4b730b6a
EP
622#define wl12xx_for_each_wlvif_bss_type(wl, wlvif, _bss_type) \
623 wl12xx_for_each_wlvif(wl, wlvif) \
624 if (wlvif->bss_type == _bss_type)
625
626#define wl12xx_for_each_wlvif_sta(wl, wlvif) \
627 wl12xx_for_each_wlvif_bss_type(wl, wlvif, BSS_TYPE_STA_BSS)
628
629#define wl12xx_for_each_wlvif_ap(wl, wlvif) \
630 wl12xx_for_each_wlvif_bss_type(wl, wlvif, BSS_TYPE_AP_BSS)
631
f5fc0f86
LC
632int wl1271_plt_start(struct wl1271 *wl);
633int wl1271_plt_stop(struct wl1271 *wl);
9eb599e9 634int wl1271_recalc_rx_streaming(struct wl1271 *wl, struct wl12xx_vif *wlvif);
baacb9ae 635void wl12xx_queue_recovery_work(struct wl1271 *wl);
95dac04f 636size_t wl12xx_copy_fwlog(struct wl1271 *wl, u8 *memblock, size_t maxlen);
f5fc0f86
LC
637
638#define JOIN_TIMEOUT 5000 /* 5000 milliseconds to join */
639
98b86253
EP
640#define SESSION_COUNTER_MAX 6 /* maximum value for the session counter */
641#define SESSION_COUNTER_INVALID 7 /* used with dummy_packet */
f5fc0f86
LC
642
643#define WL1271_DEFAULT_POWER_LEVEL 0
644
787b2dc4
IY
645#define WL1271_TX_QUEUE_LOW_WATERMARK 32
646#define WL1271_TX_QUEUE_HIGH_WATERMARK 256
f5fc0f86 647
a620865e
IY
648#define WL1271_DEFERRED_QUEUE_LIMIT 64
649
01ac17ec
JO
650/* WL1271 needs a 200ms sleep after power on, and a 20ms sleep before power
651 on in case is has been shut down shortly before */
e8a8b252
SW
652#define WL1271_PRE_POWER_ON_SLEEP 20 /* in milliseconds */
653#define WL1271_POWER_ON_SLEEP 200 /* in milliseconds */
f5fc0f86 654
e8b03a2b
SL
655/* Macros to handle wl1271.sta_rate_set */
656#define HW_BG_RATES_MASK 0xffff
657#define HW_HT_RATES_OFFSET 16
658
606ea9fa
IY
659/* Quirks */
660
661/* Each RX/TX transaction requires an end-of-transaction transfer */
0da13da7 662#define WL12XX_QUIRK_END_OF_TRANSACTION BIT(0)
606ea9fa 663
ce39defb
LC
664/* wl127x and SPI don't support SDIO block size alignment */
665#define WL12XX_QUIRK_NO_BLOCKSIZE_ALIGNMENT BIT(2)
e7ddf549 666
95dac04f
IY
667/* Older firmwares did not implement the FW logger over bus feature */
668#define WL12XX_QUIRK_FWLOG_NOT_IMPLEMENTED BIT(4)
669
670#define WL12XX_HW_BLOCK_SIZE 256
671
f5fc0f86 672#endif