]>
Commit | Line | Data |
---|---|---|
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 | ||
8388569a LC |
25 | #ifndef __WLCORE_I_H__ |
26 | #define __WLCORE_I_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 | |
5aa42346 SL |
38 | /* |
39 | * wl127x and wl128x are using the same NVS file name. However, the | |
40 | * ini parameters between them are different. The driver validates | |
41 | * the correct NVS size in wl1271_boot_upload_nvs(). | |
42 | */ | |
43 | #define WL12XX_NVS_NAME "ti-connectivity/wl1271-nvs.bin" | |
152ee6e0 | 44 | |
04e36fc5 JO |
45 | #define WL1271_TX_SECURITY_LO16(s) ((u16)((s) & 0xffff)) |
46 | #define WL1271_TX_SECURITY_HI32(s) ((u32)(((s) >> 16) & 0xffffffff)) | |
b992c682 | 47 | #define WL1271_TX_SQN_POST_RECOVERY_PADDING 0xff |
04e36fc5 | 48 | |
7a55724e JO |
49 | #define WL1271_CIPHER_SUITE_GEM 0x00147201 |
50 | ||
259da430 | 51 | #define WL1271_BUSY_WORD_CNT 1 |
545f1da8 | 52 | #define WL1271_BUSY_WORD_LEN (WL1271_BUSY_WORD_CNT * sizeof(u32)) |
f5fc0f86 LC |
53 | |
54 | #define WL1271_ELP_HW_STATE_ASLEEP 0 | |
55 | #define WL1271_ELP_HW_STATE_IRQ 1 | |
56 | ||
d94cd297 JO |
57 | #define WL1271_DEFAULT_BEACON_INT 100 |
58 | #define WL1271_DEFAULT_DTIM_PERIOD 1 | |
59 | ||
c690ec81 | 60 | #define WL12XX_MAX_ROLES 4 |
f80c2d12 | 61 | #define WL12XX_MAX_LINKS 12 |
7f097988 EP |
62 | #define WL12XX_INVALID_ROLE_ID 0xff |
63 | #define WL12XX_INVALID_LINK_ID 0xff | |
e51ae9be | 64 | |
091185d6 AN |
65 | /* the driver supports the 2.4Ghz and 5Ghz bands */ |
66 | #define WLCORE_NUM_BANDS 2 | |
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 | ||
5a7589be | 86 | #define WL1271_AGGR_BUFFER_SIZE (5 * PAGE_SIZE) |
1f37cbc9 | 87 | |
f5fc0f86 LC |
88 | enum wl1271_state { |
89 | WL1271_STATE_OFF, | |
90 | WL1271_STATE_ON, | |
3fcdab70 EP |
91 | }; |
92 | ||
93 | enum wl12xx_fw_type { | |
94 | WL12XX_FW_TYPE_NONE, | |
95 | WL12XX_FW_TYPE_NORMAL, | |
4549d09c | 96 | WL12XX_FW_TYPE_MULTI, |
3fcdab70 | 97 | WL12XX_FW_TYPE_PLT, |
f5fc0f86 LC |
98 | }; |
99 | ||
f5fc0f86 LC |
100 | struct wl1271; |
101 | ||
e7ddf549 LC |
102 | enum { |
103 | FW_VER_CHIP, | |
104 | FW_VER_IF_TYPE, | |
105 | FW_VER_MAJOR, | |
106 | FW_VER_SUBTYPE, | |
107 | FW_VER_MINOR, | |
108 | ||
109 | NUM_FW_VER | |
110 | }; | |
111 | ||
112 | #define FW_VER_CHIP_WL127X 6 | |
113 | #define FW_VER_CHIP_WL128X 7 | |
114 | ||
115 | #define FW_VER_IF_TYPE_STA 1 | |
116 | #define FW_VER_IF_TYPE_AP 2 | |
117 | ||
118 | #define FW_VER_MINOR_1_SPARE_STA_MIN 58 | |
119 | #define FW_VER_MINOR_1_SPARE_AP_MIN 47 | |
4b7fac77 | 120 | |
95dac04f IY |
121 | #define FW_VER_MINOR_FWLOG_STA_MIN 70 |
122 | ||
f5fc0f86 LC |
123 | struct wl1271_chip { |
124 | u32 id; | |
4b7fac77 | 125 | char fw_ver_str[ETHTOOL_BUSINFO_LEN]; |
e7ddf549 | 126 | unsigned int fw_ver[NUM_FW_VER]; |
f5fc0f86 LC |
127 | }; |
128 | ||
f5fc0f86 | 129 | #define NUM_TX_QUEUES 4 |
f5fc0f86 | 130 | |
c47e8229 | 131 | #define AP_MAX_STATIONS 8 |
beb6c880 | 132 | |
6bac40a6 AN |
133 | struct wl_fw_packet_counters { |
134 | /* Cumulative counter of released packets per AC */ | |
135 | u8 tx_released_pkts[NUM_TX_QUEUES]; | |
136 | ||
137 | /* Cumulative counter of freed packets per HLID */ | |
138 | u8 tx_lnk_free_pkts[WL12XX_MAX_LINKS]; | |
139 | ||
140 | /* Cumulative counter of released Voice memory blocks */ | |
141 | u8 tx_voice_released_blks; | |
142 | ||
143 | u8 padding[3]; | |
144 | } __packed; | |
145 | ||
4d56ad9c | 146 | /* FW status registers */ |
0afd04e5 | 147 | struct wl_fw_status_1 { |
d0f63b20 | 148 | __le32 intr; |
f5fc0f86 LC |
149 | u8 fw_rx_counter; |
150 | u8 drv_rx_counter; | |
151 | u8 reserved; | |
152 | u8 tx_results_counter; | |
0afd04e5 AN |
153 | __le32 rx_pkt_descs[0]; |
154 | } __packed; | |
155 | ||
156 | /* | |
157 | * Each HW arch has a different number of Rx descriptors. | |
158 | * The length of the status depends on it, since it holds an array | |
159 | * of descriptors. | |
160 | */ | |
161 | #define WLCORE_FW_STATUS_1_LEN(num_rx_desc) \ | |
162 | (sizeof(struct wl_fw_status_1) + \ | |
163 | (sizeof(((struct wl_fw_status_1 *)0)->rx_pkt_descs[0])) * \ | |
164 | num_rx_desc) | |
165 | ||
166 | struct wl_fw_status_2 { | |
d0f63b20 | 167 | __le32 fw_localtime; |
beb6c880 AN |
168 | |
169 | /* | |
170 | * A bitmap (where each bit represents a single HLID) | |
171 | * to indicate if the station is in PS mode. | |
172 | */ | |
173 | __le32 link_ps_bitmap; | |
174 | ||
4d56ad9c EP |
175 | /* |
176 | * A bitmap (where each bit represents a single HLID) to indicate | |
177 | * if the station is in Fast mode | |
178 | */ | |
179 | __le32 link_fast_bitmap; | |
f5fc0f86 | 180 | |
4d56ad9c EP |
181 | /* Cumulative counter of total released mem blocks since FW-reset */ |
182 | __le32 total_released_blks; | |
c8bde243 | 183 | |
4d56ad9c EP |
184 | /* Size (in Memory Blocks) of TX pool */ |
185 | __le32 tx_total; | |
c8bde243 | 186 | |
6bac40a6 | 187 | struct wl_fw_packet_counters counters; |
c8bde243 | 188 | |
4d56ad9c | 189 | __le32 log_start_addr; |
6bac40a6 AN |
190 | |
191 | /* Private status to be used by the lower drivers */ | |
192 | u8 priv[0]; | |
4d56ad9c | 193 | } __packed; |
c8bde243 | 194 | |
4a31c11c | 195 | #define WL1271_MAX_CHANNELS 64 |
abb0b3bf | 196 | struct wl1271_scan { |
4fb26fa9 | 197 | struct cfg80211_scan_request *req; |
4a31c11c | 198 | unsigned long scanned_ch[BITS_TO_LONGS(WL1271_MAX_CHANNELS)]; |
78abd320 | 199 | bool failed; |
abb0b3bf | 200 | u8 state; |
3b40c040 | 201 | u8 ssid[IEEE80211_MAX_SSID_LEN+1]; |
abb0b3bf | 202 | size_t ssid_len; |
abb0b3bf TP |
203 | }; |
204 | ||
8197b711 | 205 | struct wl1271_if_operations { |
f1a26e63 IY |
206 | int __must_check (*read)(struct device *child, int addr, void *buf, |
207 | size_t len, bool fixed); | |
208 | int __must_check (*write)(struct device *child, int addr, void *buf, | |
209 | size_t len, bool fixed); | |
a390e85c FB |
210 | void (*reset)(struct device *child); |
211 | void (*init)(struct device *child); | |
212 | int (*power)(struct device *child, bool enable); | |
213 | void (*set_block_size) (struct device *child, unsigned int blksz); | |
8197b711 TP |
214 | }; |
215 | ||
7f179b46 AN |
216 | #define MAX_NUM_KEYS 14 |
217 | #define MAX_KEY_SIZE 32 | |
218 | ||
219 | struct wl1271_ap_key { | |
220 | u8 id; | |
221 | u8 key_type; | |
222 | u8 key_size; | |
223 | u8 key[MAX_KEY_SIZE]; | |
224 | u8 hlid; | |
225 | u32 tx_seq_32; | |
226 | u16 tx_seq_16; | |
227 | }; | |
228 | ||
72c2d9e5 | 229 | enum wl12xx_flags { |
72c2d9e5 EP |
230 | WL1271_FLAG_GPIO_POWER, |
231 | WL1271_FLAG_TX_QUEUE_STOPPED, | |
b07d4037 | 232 | WL1271_FLAG_TX_PENDING, |
72c2d9e5 | 233 | WL1271_FLAG_IN_ELP, |
a665d6e2 | 234 | WL1271_FLAG_ELP_REQUESTED, |
72c2d9e5 | 235 | WL1271_FLAG_IRQ_RUNNING, |
72c2d9e5 | 236 | WL1271_FLAG_FW_TX_BUSY, |
990f5de7 | 237 | WL1271_FLAG_DUMMY_PACKET_PENDING, |
f44e5868 EP |
238 | WL1271_FLAG_SUSPENDED, |
239 | WL1271_FLAG_PENDING_WORK, | |
77ddaa10 | 240 | WL1271_FLAG_SOFT_GEMINI, |
baacb9ae | 241 | WL1271_FLAG_RECOVERY_IN_PROGRESS, |
4549d09c | 242 | WL1271_FLAG_VIF_CHANGE_IN_PROGRESS, |
e9ba7152 | 243 | WL1271_FLAG_INTENDED_FW_RECOVERY, |
4455556d | 244 | WL1271_FLAG_IO_FAILED, |
72c2d9e5 EP |
245 | }; |
246 | ||
ba8447f6 | 247 | enum wl12xx_vif_flags { |
10c8cd01 | 248 | WLVIF_FLAG_INITIALIZED, |
ba8447f6 | 249 | WLVIF_FLAG_STA_ASSOCIATED, |
9fd6f21b | 250 | WLVIF_FLAG_STA_AUTHORIZED, |
eee514e3 | 251 | WLVIF_FLAG_IBSS_JOINED, |
53d40d0b | 252 | WLVIF_FLAG_AP_STARTED, |
5c0dc2fc | 253 | WLVIF_FLAG_IN_PS, |
8181aecc | 254 | WLVIF_FLAG_STA_STATE_SENT, |
0744bdb6 | 255 | WLVIF_FLAG_RX_STREAMING_STARTED, |
836d6600 | 256 | WLVIF_FLAG_PSPOLL_FAILURE, |
52630c5d | 257 | WLVIF_FLAG_CS_PROGRESS, |
560f0024 | 258 | WLVIF_FLAG_AP_PROBE_RESP_SET, |
a0c7b782 | 259 | WLVIF_FLAG_IN_USE, |
ba8447f6 EP |
260 | }; |
261 | ||
a8c0ddb5 AN |
262 | struct wl1271_link { |
263 | /* AP-mode - TX queue per AC in link */ | |
264 | struct sk_buff_head tx_queue[NUM_TX_QUEUES]; | |
09039f42 | 265 | |
9b17f1b3 AN |
266 | /* accounting for allocated / freed packets in FW */ |
267 | u8 allocated_pkts; | |
268 | u8 prev_freed_pkts; | |
b622d992 AN |
269 | |
270 | u8 addr[ETH_ALEN]; | |
0f9c8250 AN |
271 | |
272 | /* bitmap of TIDs where RX BA sessions are active for this link */ | |
273 | u8 ba_bitmap; | |
a8c0ddb5 AN |
274 | }; |
275 | ||
c21eebb5 | 276 | #define WL1271_MAX_RX_FILTERS 5 |
a6eab0c8 | 277 | #define WL1271_RX_FILTER_MAX_FIELDS 8 |
b95d7cef ES |
278 | |
279 | #define WL1271_RX_FILTER_ETH_HEADER_SIZE 14 | |
280 | #define WL1271_RX_FILTER_MAX_FIELDS_SIZE 95 | |
281 | #define RX_FILTER_FIELD_OVERHEAD \ | |
282 | (sizeof(struct wl12xx_rx_filter_field) - sizeof(u8 *)) | |
283 | #define WL1271_RX_FILTER_MAX_PATTERN_SIZE \ | |
284 | (WL1271_RX_FILTER_MAX_FIELDS_SIZE - RX_FILTER_FIELD_OVERHEAD) | |
285 | ||
286 | #define WL1271_RX_FILTER_FLAG_MASK BIT(0) | |
287 | #define WL1271_RX_FILTER_FLAG_IP_HEADER 0 | |
288 | #define WL1271_RX_FILTER_FLAG_ETHERNET_HEADER BIT(1) | |
289 | ||
a6eab0c8 ES |
290 | enum rx_filter_action { |
291 | FILTER_DROP = 0, | |
292 | FILTER_SIGNAL = 1, | |
293 | FILTER_FW_HANDLE = 2 | |
294 | }; | |
295 | ||
296 | struct wl12xx_rx_filter_field { | |
297 | __le16 offset; | |
298 | u8 len; | |
299 | u8 flags; | |
300 | u8 *pattern; | |
301 | } __packed; | |
302 | ||
303 | struct wl12xx_rx_filter { | |
304 | u8 action; | |
305 | int num_fields; | |
306 | struct wl12xx_rx_filter_field fields[WL1271_RX_FILTER_MAX_FIELDS]; | |
307 | }; | |
308 | ||
f84f7d78 AN |
309 | struct wl1271_station { |
310 | u8 hlid; | |
f5fc0f86 LC |
311 | }; |
312 | ||
87fbcb0f | 313 | struct wl12xx_vif { |
252efa4f | 314 | struct wl1271 *wl; |
87627214 | 315 | struct list_head list; |
ba8447f6 | 316 | unsigned long flags; |
536129c8 | 317 | u8 bss_type; |
fb0e707c | 318 | u8 p2p; /* we are using p2p role */ |
0603d891 | 319 | u8 role_id; |
536129c8 | 320 | |
7edebf56 EP |
321 | /* sta/ibss specific */ |
322 | u8 dev_role_id; | |
afaf8bdb | 323 | u8 dev_hlid; |
7edebf56 | 324 | |
154da67c EP |
325 | union { |
326 | struct { | |
327 | u8 hlid; | |
d0802abd | 328 | u8 ba_rx_bitmap; |
e5a359f8 EP |
329 | |
330 | u8 basic_rate_idx; | |
331 | u8 ap_rate_idx; | |
332 | u8 p2p_rate_idx; | |
5ec8a448 EP |
333 | |
334 | bool qos; | |
154da67c | 335 | } sta; |
a8ab39a4 EP |
336 | struct { |
337 | u8 global_hlid; | |
338 | u8 bcast_hlid; | |
c7ffb902 EP |
339 | |
340 | /* HLIDs bitmap of associated stations */ | |
341 | unsigned long sta_hlid_map[BITS_TO_LONGS( | |
342 | WL12XX_MAX_LINKS)]; | |
170d0e67 EP |
343 | |
344 | /* recoreded keys - set here before AP startup */ | |
345 | struct wl1271_ap_key *recorded_keys[MAX_NUM_KEYS]; | |
e5a359f8 EP |
346 | |
347 | u8 mgmt_rate_idx; | |
348 | u8 bcast_rate_idx; | |
349 | u8 ucast_rate_idx[CONF_TX_MAX_AC_COUNT]; | |
a8ab39a4 | 350 | } ap; |
154da67c EP |
351 | }; |
352 | ||
4438aca9 EP |
353 | /* the hlid of the last transmitted skb */ |
354 | int last_tx_hlid; | |
355 | ||
c7ffb902 EP |
356 | unsigned long links_map[BITS_TO_LONGS(WL12XX_MAX_LINKS)]; |
357 | ||
1fe9f161 EP |
358 | u8 ssid[IEEE80211_MAX_SSID_LEN + 1]; |
359 | u8 ssid_len; | |
360 | ||
1b92f15e EP |
361 | /* The current band */ |
362 | enum ieee80211_band band; | |
61f845f4 | 363 | int channel; |
83d08d3f | 364 | enum nl80211_channel_type channel_type; |
1b92f15e | 365 | |
091185d6 | 366 | u32 bitrate_masks[WLCORE_NUM_BANDS]; |
87fbcb0f | 367 | u32 basic_rate_set; |
30d0c8fd EP |
368 | |
369 | /* | |
370 | * currently configured rate set: | |
371 | * bits 0-15 - 802.11abg rates | |
372 | * bits 16-23 - 802.11n MCS index mask | |
373 | * support only 1 stream, thus only 8 bits for the MCS rates (0-7). | |
374 | */ | |
d2d66c56 | 375 | u32 basic_rate; |
30d0c8fd | 376 | u32 rate_set; |
bddb29b8 EP |
377 | |
378 | /* probe-req template for the current AP */ | |
379 | struct sk_buff *probereq; | |
6840e37a | 380 | |
6a899796 EP |
381 | /* Beaconing interval (needed for ad-hoc) */ |
382 | u32 beacon_int; | |
383 | ||
f75c753f EP |
384 | /* Default key (for WEP) */ |
385 | u32 default_key; | |
386 | ||
6840e37a EP |
387 | /* Our association ID */ |
388 | u16 aid; | |
98b86253 EP |
389 | |
390 | /* Session counter for the chipset */ | |
391 | int session_counter; | |
252efa4f | 392 | |
74ec8395 EP |
393 | /* retry counter for PSM entries */ |
394 | u8 psm_entry_retry; | |
04324d99 | 395 | |
6bd65029 EP |
396 | /* in dBm */ |
397 | int power_level; | |
398 | ||
04324d99 EP |
399 | int rssi_thold; |
400 | int last_rssi_event; | |
d0802abd | 401 | |
5ec8a448 EP |
402 | /* save the current encryption type for auto-arp config */ |
403 | u8 encryption_type; | |
404 | __be32 ip_addr; | |
405 | ||
d0802abd EP |
406 | /* RX BA constraint value */ |
407 | bool ba_support; | |
408 | bool ba_allowed; | |
48e93e40 | 409 | |
9eb599e9 EP |
410 | /* Rx Streaming */ |
411 | struct work_struct rx_streaming_enable_work; | |
412 | struct work_struct rx_streaming_disable_work; | |
413 | struct timer_list rx_streaming_timer; | |
414 | ||
48e93e40 EP |
415 | /* |
416 | * This struct must be last! | |
417 | * data that has to be saved acrossed reconfigs (e.g. recovery) | |
418 | * should be declared in this struct. | |
419 | */ | |
420 | struct { | |
421 | u8 persistent[0]; | |
422 | /* | |
423 | * Security sequence number | |
424 | * bits 0-15: lower 16 bits part of sequence number | |
425 | * bits 16-47: higher 32 bits part of sequence number | |
426 | * bits 48-63: not in use | |
427 | */ | |
428 | u64 tx_security_seq; | |
429 | ||
430 | /* 8 bits of the last sequence number in use */ | |
431 | u8 tx_security_last_seq_lsb; | |
432 | }; | |
87fbcb0f EP |
433 | }; |
434 | ||
435 | static inline struct wl12xx_vif *wl12xx_vif_to_data(struct ieee80211_vif *vif) | |
436 | { | |
437 | return (struct wl12xx_vif *)vif->drv_priv; | |
438 | } | |
439 | ||
440 | static inline | |
441 | struct ieee80211_vif *wl12xx_wlvif_to_vif(struct wl12xx_vif *wlvif) | |
442 | { | |
443 | return container_of((void *)wlvif, struct ieee80211_vif, drv_priv); | |
444 | } | |
445 | ||
87627214 EP |
446 | #define wl12xx_for_each_wlvif(wl, wlvif) \ |
447 | list_for_each_entry(wlvif, &wl->wlvif_list, list) | |
448 | ||
e4120df9 EP |
449 | #define wl12xx_for_each_wlvif_continue(wl, wlvif) \ |
450 | list_for_each_entry_continue(wlvif, &wl->wlvif_list, list) | |
451 | ||
4b730b6a EP |
452 | #define wl12xx_for_each_wlvif_bss_type(wl, wlvif, _bss_type) \ |
453 | wl12xx_for_each_wlvif(wl, wlvif) \ | |
454 | if (wlvif->bss_type == _bss_type) | |
455 | ||
456 | #define wl12xx_for_each_wlvif_sta(wl, wlvif) \ | |
457 | wl12xx_for_each_wlvif_bss_type(wl, wlvif, BSS_TYPE_STA_BSS) | |
458 | ||
459 | #define wl12xx_for_each_wlvif_ap(wl, wlvif) \ | |
460 | wl12xx_for_each_wlvif_bss_type(wl, wlvif, BSS_TYPE_AP_BSS) | |
461 | ||
f5fc0f86 LC |
462 | int wl1271_plt_start(struct wl1271 *wl); |
463 | int wl1271_plt_stop(struct wl1271 *wl); | |
9eb599e9 | 464 | int wl1271_recalc_rx_streaming(struct wl1271 *wl, struct wl12xx_vif *wlvif); |
baacb9ae | 465 | void wl12xx_queue_recovery_work(struct wl1271 *wl); |
95dac04f | 466 | size_t wl12xx_copy_fwlog(struct wl1271 *wl, u8 *memblock, size_t maxlen); |
a6eab0c8 ES |
467 | int wl1271_rx_filter_alloc_field(struct wl12xx_rx_filter *filter, |
468 | u16 offset, u8 flags, | |
469 | u8 *pattern, u8 len); | |
470 | void wl1271_rx_filter_free(struct wl12xx_rx_filter *filter); | |
471 | struct wl12xx_rx_filter *wl1271_rx_filter_alloc(void); | |
472 | int wl1271_rx_filter_get_fields_size(struct wl12xx_rx_filter *filter); | |
473 | void wl1271_rx_filter_flatten_fields(struct wl12xx_rx_filter *filter, | |
474 | u8 *buf); | |
f5fc0f86 LC |
475 | |
476 | #define JOIN_TIMEOUT 5000 /* 5000 milliseconds to join */ | |
477 | ||
98b86253 EP |
478 | #define SESSION_COUNTER_MAX 6 /* maximum value for the session counter */ |
479 | #define SESSION_COUNTER_INVALID 7 /* used with dummy_packet */ | |
f5fc0f86 LC |
480 | |
481 | #define WL1271_DEFAULT_POWER_LEVEL 0 | |
482 | ||
787b2dc4 IY |
483 | #define WL1271_TX_QUEUE_LOW_WATERMARK 32 |
484 | #define WL1271_TX_QUEUE_HIGH_WATERMARK 256 | |
f5fc0f86 | 485 | |
a620865e IY |
486 | #define WL1271_DEFERRED_QUEUE_LIMIT 64 |
487 | ||
01ac17ec JO |
488 | /* WL1271 needs a 200ms sleep after power on, and a 20ms sleep before power |
489 | on in case is has been shut down shortly before */ | |
e8a8b252 SW |
490 | #define WL1271_PRE_POWER_ON_SLEEP 20 /* in milliseconds */ |
491 | #define WL1271_POWER_ON_SLEEP 200 /* in milliseconds */ | |
f5fc0f86 | 492 | |
e8b03a2b SL |
493 | /* Macros to handle wl1271.sta_rate_set */ |
494 | #define HW_BG_RATES_MASK 0xffff | |
495 | #define HW_HT_RATES_OFFSET 16 | |
b3a47ee0 | 496 | #define HW_MIMO_RATES_OFFSET 24 |
e8b03a2b | 497 | |
95dac04f IY |
498 | #define WL12XX_HW_BLOCK_SIZE 256 |
499 | ||
8388569a | 500 | #endif /* __WLCORE_I_H__ */ |