1 /*
2  * This file is part of wl1271
3  *
4  * Copyright (C) 2009 Nokia Corporation
5  *
6  * Contact: Luciano Coelho <luciano.coelho@nokia.com>
7  *
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.
11  *
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.
16  *
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
20  * 02110-1301 USA
21  *
22  */
23 
24 #ifndef __CONF_H__
25 #define __CONF_H__
26 
27 enum {
28 	CONF_HW_BIT_RATE_1MBPS   = BIT(0),
29 	CONF_HW_BIT_RATE_2MBPS   = BIT(1),
30 	CONF_HW_BIT_RATE_5_5MBPS = BIT(2),
31 	CONF_HW_BIT_RATE_6MBPS   = BIT(3),
32 	CONF_HW_BIT_RATE_9MBPS   = BIT(4),
33 	CONF_HW_BIT_RATE_11MBPS  = BIT(5),
34 	CONF_HW_BIT_RATE_12MBPS  = BIT(6),
35 	CONF_HW_BIT_RATE_18MBPS  = BIT(7),
36 	CONF_HW_BIT_RATE_22MBPS  = BIT(8),
37 	CONF_HW_BIT_RATE_24MBPS  = BIT(9),
38 	CONF_HW_BIT_RATE_36MBPS  = BIT(10),
39 	CONF_HW_BIT_RATE_48MBPS  = BIT(11),
40 	CONF_HW_BIT_RATE_54MBPS  = BIT(12),
41 	CONF_HW_BIT_RATE_MCS_0   = BIT(13),
42 	CONF_HW_BIT_RATE_MCS_1   = BIT(14),
43 	CONF_HW_BIT_RATE_MCS_2   = BIT(15),
44 	CONF_HW_BIT_RATE_MCS_3   = BIT(16),
45 	CONF_HW_BIT_RATE_MCS_4   = BIT(17),
46 	CONF_HW_BIT_RATE_MCS_5   = BIT(18),
47 	CONF_HW_BIT_RATE_MCS_6   = BIT(19),
48 	CONF_HW_BIT_RATE_MCS_7   = BIT(20)
49 };
50 
51 enum {
52 	CONF_HW_RATE_INDEX_1MBPS   = 0,
53 	CONF_HW_RATE_INDEX_2MBPS   = 1,
54 	CONF_HW_RATE_INDEX_5_5MBPS = 2,
55 	CONF_HW_RATE_INDEX_6MBPS   = 3,
56 	CONF_HW_RATE_INDEX_9MBPS   = 4,
57 	CONF_HW_RATE_INDEX_11MBPS  = 5,
58 	CONF_HW_RATE_INDEX_12MBPS  = 6,
59 	CONF_HW_RATE_INDEX_18MBPS  = 7,
60 	CONF_HW_RATE_INDEX_22MBPS  = 8,
61 	CONF_HW_RATE_INDEX_24MBPS  = 9,
62 	CONF_HW_RATE_INDEX_36MBPS  = 10,
63 	CONF_HW_RATE_INDEX_48MBPS  = 11,
64 	CONF_HW_RATE_INDEX_54MBPS  = 12,
65 	CONF_HW_RATE_INDEX_MAX     = CONF_HW_RATE_INDEX_54MBPS,
66 };
67 
68 enum {
69 	CONF_HW_RXTX_RATE_MCS7 = 0,
70 	CONF_HW_RXTX_RATE_MCS6,
71 	CONF_HW_RXTX_RATE_MCS5,
72 	CONF_HW_RXTX_RATE_MCS4,
73 	CONF_HW_RXTX_RATE_MCS3,
74 	CONF_HW_RXTX_RATE_MCS2,
75 	CONF_HW_RXTX_RATE_MCS1,
76 	CONF_HW_RXTX_RATE_MCS0,
77 	CONF_HW_RXTX_RATE_54,
78 	CONF_HW_RXTX_RATE_48,
79 	CONF_HW_RXTX_RATE_36,
80 	CONF_HW_RXTX_RATE_24,
81 	CONF_HW_RXTX_RATE_22,
82 	CONF_HW_RXTX_RATE_18,
83 	CONF_HW_RXTX_RATE_12,
84 	CONF_HW_RXTX_RATE_11,
85 	CONF_HW_RXTX_RATE_9,
86 	CONF_HW_RXTX_RATE_6,
87 	CONF_HW_RXTX_RATE_5_5,
88 	CONF_HW_RXTX_RATE_2,
89 	CONF_HW_RXTX_RATE_1,
90 	CONF_HW_RXTX_RATE_MAX,
91 	CONF_HW_RXTX_RATE_UNSUPPORTED = 0xff
92 };
93 
94 enum {
95 	CONF_SG_DISABLE = 0,
96 	CONF_SG_PROTECTIVE,
97 	CONF_SG_OPPORTUNISTIC
98 };
99 
100 enum {
101 	/*
102 	 * PER threshold in PPM of the BT voice
103 	 *
104 	 * Range: 0 - 10000000
105 	 */
106 	CONF_SG_BT_PER_THRESHOLD = 0,
107 
108 	/*
109 	 * Number of consequent RX_ACTIVE activities to override BT voice
110 	 * frames to ensure WLAN connection
111 	 *
112 	 * Range: 0 - 100
113 	 */
114 	CONF_SG_HV3_MAX_OVERRIDE,
115 
116 	/*
117 	 * Defines the PER threshold of the BT voice
118 	 *
119 	 * Range: 0 - 65000
120 	 */
121 	CONF_SG_BT_NFS_SAMPLE_INTERVAL,
122 
123 	/*
124 	 * Defines the load ratio of BT
125 	 *
126 	 * Range: 0 - 100 (%)
127 	 */
128 	CONF_SG_BT_LOAD_RATIO,
129 
130 	/*
131 	 * Defines whether the SG will force WLAN host to enter/exit PSM
132 	 *
133 	 * Range: 1 - SG can force, 0 - host handles PSM
134 	 */
135 	CONF_SG_AUTO_PS_MODE,
136 
137 	/*
138 	 * Compensation percentage of probe requests when scan initiated
139 	 * during BT voice/ACL link.
140 	 *
141 	 * Range: 0 - 255 (%)
142 	 */
143 	CONF_SG_AUTO_SCAN_PROBE_REQ,
144 
145 	/*
146 	 * Compensation percentage of probe requests when active scan initiated
147 	 * during BT voice
148 	 *
149 	 * Range: 0 - 255 (%)
150 	 */
151 	CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_HV3,
152 
153 	/*
154 	 * Defines antenna configuration (single/dual antenna)
155 	 *
156 	 * Range: 0 - single antenna, 1 - dual antenna
157 	 */
158 	CONF_SG_ANTENNA_CONFIGURATION,
159 
160 	/*
161 	 * The threshold (percent) of max consequtive beacon misses before
162 	 * increasing priority of beacon reception.
163 	 *
164 	 * Range: 0 - 100 (%)
165 	 */
166 	CONF_SG_BEACON_MISS_PERCENT,
167 
168 	/*
169 	 * The rate threshold below which receiving a data frame from the AP
170 	 * will increase the priority of the data frame above BT traffic.
171 	 *
172 	 * Range: 0,2, 5(=5.5), 6, 9, 11, 12, 18, 24, 36, 48, 54
173 	 */
174 	CONF_SG_RATE_ADAPT_THRESH,
175 
176 	/*
177 	 * Not used currently.
178 	 *
179 	 * Range: 0
180 	 */
181 	CONF_SG_RATE_ADAPT_SNR,
182 
183 	/*
184 	 * Configure the min and max time BT gains the antenna
185 	 * in WLAN PSM / BT master basic rate
186 	 *
187 	 * Range: 0 - 255 (ms)
188 	 */
189 	CONF_SG_WLAN_PS_BT_ACL_MASTER_MIN_BR,
190 	CONF_SG_WLAN_PS_BT_ACL_MASTER_MAX_BR,
191 
192 	/*
193 	 * The time after it expires no new WLAN trigger frame is trasmitted
194 	 * in WLAN PSM / BT master basic rate
195 	 *
196 	 * Range: 0 - 255 (ms)
197 	 */
198 	CONF_SG_WLAN_PS_MAX_BT_ACL_MASTER_BR,
199 
200 	/*
201 	 * Configure the min and max time BT gains the antenna
202 	 * in WLAN PSM / BT slave basic rate
203 	 *
204 	 * Range: 0 - 255 (ms)
205 	 */
206 	CONF_SG_WLAN_PS_BT_ACL_SLAVE_MIN_BR,
207 	CONF_SG_WLAN_PS_BT_ACL_SLAVE_MAX_BR,
208 
209 	/*
210 	 * The time after it expires no new WLAN trigger frame is trasmitted
211 	 * in WLAN PSM / BT slave basic rate
212 	 *
213 	 * Range: 0 - 255 (ms)
214 	 */
215 	CONF_SG_WLAN_PS_MAX_BT_ACL_SLAVE_BR,
216 
217 	/*
218 	 * Configure the min and max time BT gains the antenna
219 	 * in WLAN PSM / BT master EDR
220 	 *
221 	 * Range: 0 - 255 (ms)
222 	 */
223 	CONF_SG_WLAN_PS_BT_ACL_MASTER_MIN_EDR,
224 	CONF_SG_WLAN_PS_BT_ACL_MASTER_MAX_EDR,
225 
226 	/*
227 	 * The time after it expires no new WLAN trigger frame is trasmitted
228 	 * in WLAN PSM / BT master EDR
229 	 *
230 	 * Range: 0 - 255 (ms)
231 	 */
232 	CONF_SG_WLAN_PS_MAX_BT_ACL_MASTER_EDR,
233 
234 	/*
235 	 * Configure the min and max time BT gains the antenna
236 	 * in WLAN PSM / BT slave EDR
237 	 *
238 	 * Range: 0 - 255 (ms)
239 	 */
240 	CONF_SG_WLAN_PS_BT_ACL_SLAVE_MIN_EDR,
241 	CONF_SG_WLAN_PS_BT_ACL_SLAVE_MAX_EDR,
242 
243 	/*
244 	 * The time after it expires no new WLAN trigger frame is trasmitted
245 	 * in WLAN PSM / BT slave EDR
246 	 *
247 	 * Range: 0 - 255 (ms)
248 	 */
249 	CONF_SG_WLAN_PS_MAX_BT_ACL_SLAVE_EDR,
250 
251 	/*
252 	 * RX guard time before the beginning of a new BT voice frame during
253 	 * which no new WLAN trigger frame is transmitted.
254 	 *
255 	 * Range: 0 - 100000 (us)
256 	 */
257 	CONF_SG_RXT,
258 
259 	/*
260 	 * TX guard time before the beginning of a new BT voice frame during
261 	 * which no new WLAN frame is transmitted.
262 	 *
263 	 * Range: 0 - 100000 (us)
264 	 */
265 
266 	CONF_SG_TXT,
267 
268 	/*
269 	 * Enable adaptive RXT/TXT algorithm. If disabled, the host values
270 	 * will be utilized.
271 	 *
272 	 * Range: 0 - disable, 1 - enable
273 	 */
274 	CONF_SG_ADAPTIVE_RXT_TXT,
275 
276 	/*
277 	 * The used WLAN legacy service period during active BT ACL link
278 	 *
279 	 * Range: 0 - 255 (ms)
280 	 */
281 	CONF_SG_PS_POLL_TIMEOUT,
282 
283 	/*
284 	 * The used WLAN UPSD service period during active BT ACL link
285 	 *
286 	 * Range: 0 - 255 (ms)
287 	 */
288 	CONF_SG_UPSD_TIMEOUT,
289 
290 	/*
291 	 * Configure the min and max time BT gains the antenna
292 	 * in WLAN Active / BT master EDR
293 	 *
294 	 * Range: 0 - 255 (ms)
295 	 */
296 	CONF_SG_WLAN_ACTIVE_BT_ACL_MASTER_MIN_EDR,
297 	CONF_SG_WLAN_ACTIVE_BT_ACL_MASTER_MAX_EDR,
298 
299 	/*
300 	 * The maximum time WLAN can gain the antenna for
301 	 * in WLAN Active / BT master EDR
302 	 *
303 	 * Range: 0 - 255 (ms)
304 	 */
305 	CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_MASTER_EDR,
306 
307 	/*
308 	 * Configure the min and max time BT gains the antenna
309 	 * in WLAN Active / BT slave EDR
310 	 *
311 	 * Range: 0 - 255 (ms)
312 	 */
313 	CONF_SG_WLAN_ACTIVE_BT_ACL_SLAVE_MIN_EDR,
314 	CONF_SG_WLAN_ACTIVE_BT_ACL_SLAVE_MAX_EDR,
315 
316 	/*
317 	 * The maximum time WLAN can gain the antenna for
318 	 * in WLAN Active / BT slave EDR
319 	 *
320 	 * Range: 0 - 255 (ms)
321 	 */
322 	CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_SLAVE_EDR,
323 
324 	/*
325 	 * Configure the min and max time BT gains the antenna
326 	 * in WLAN Active / BT basic rate
327 	 *
328 	 * Range: 0 - 255 (ms)
329 	 */
330 	CONF_SG_WLAN_ACTIVE_BT_ACL_MIN_BR,
331 	CONF_SG_WLAN_ACTIVE_BT_ACL_MAX_BR,
332 
333 	/*
334 	 * The maximum time WLAN can gain the antenna for
335 	 * in WLAN Active / BT basic rate
336 	 *
337 	 * Range: 0 - 255 (ms)
338 	 */
339 	CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_BR,
340 
341 	/*
342 	 * Compensation percentage of WLAN passive scan window if initiated
343 	 * during BT voice
344 	 *
345 	 * Range: 0 - 1000 (%)
346 	 */
347 	CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_HV3,
348 
349 	/*
350 	 * Compensation percentage of WLAN passive scan window if initiated
351 	 * during BT A2DP
352 	 *
353 	 * Range: 0 - 1000 (%)
354 	 */
355 	CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_A2DP,
356 
357 	/*
358 	 * Fixed time ensured for BT traffic to gain the antenna during WLAN
359 	 * passive scan.
360 	 *
361 	 * Range: 0 - 1000 ms
362 	 */
363 	CONF_SG_PASSIVE_SCAN_A2DP_BT_TIME,
364 
365 	/*
366 	 * Fixed time ensured for WLAN traffic to gain the antenna during WLAN
367 	 * passive scan.
368 	 *
369 	 * Range: 0 - 1000 ms
370 	 */
371 	CONF_SG_PASSIVE_SCAN_A2DP_WLAN_TIME,
372 
373 	/*
374 	 * Number of consequent BT voice frames not interrupted by WLAN
375 	 *
376 	 * Range: 0 - 100
377 	 */
378 	CONF_SG_HV3_MAX_SERVED,
379 
380 	/*
381 	 * Protection time of the DHCP procedure.
382 	 *
383 	 * Range: 0 - 100000 (ms)
384 	 */
385 	CONF_SG_DHCP_TIME,
386 
387 	/*
388 	 * Compensation percentage of WLAN active scan window if initiated
389 	 * during BT A2DP
390 	 *
391 	 * Range: 0 - 1000 (%)
392 	 */
393 	CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_A2DP,
394 	CONF_SG_TEMP_PARAM_1,
395 	CONF_SG_TEMP_PARAM_2,
396 	CONF_SG_TEMP_PARAM_3,
397 	CONF_SG_TEMP_PARAM_4,
398 	CONF_SG_TEMP_PARAM_5,
399 	CONF_SG_PARAMS_MAX,
400 	CONF_SG_PARAMS_ALL = 0xff
401 };
402 
403 struct conf_sg_settings {
404 	u32 params[CONF_SG_PARAMS_MAX];
405 	u8 state;
406 };
407 
408 enum conf_rx_queue_type {
409 	CONF_RX_QUEUE_TYPE_LOW_PRIORITY,  /* All except the high priority */
410 	CONF_RX_QUEUE_TYPE_HIGH_PRIORITY, /* Management and voice packets */
411 };
412 
413 struct conf_rx_settings {
414 	/*
415 	 * The maximum amount of time, in TU, before the
416 	 * firmware discards the MSDU.
417 	 *
418 	 * Range: 0 - 0xFFFFFFFF
419 	 */
420 	u32 rx_msdu_life_time;
421 
422 	/*
423 	 * Packet detection threshold in the PHY.
424 	 *
425 	 * FIXME: details unknown.
426 	 */
427 	u32 packet_detection_threshold;
428 
429 	/*
430 	 * The longest time the STA will wait to receive traffic from the AP
431 	 * after a PS-poll has been transmitted.
432 	 *
433 	 * Range: 0 - 200000
434 	 */
435 	u16 ps_poll_timeout;
436 	/*
437 	 * The longest time the STA will wait to receive traffic from the AP
438 	 * after a frame has been sent from an UPSD enabled queue.
439 	 *
440 	 * Range: 0 - 200000
441 	 */
442 	u16 upsd_timeout;
443 
444 	/*
445 	 * The number of octets in an MPDU, below which an RTS/CTS
446 	 * handshake is not performed.
447 	 *
448 	 * Range: 0 - 4096
449 	 */
450 	u16 rts_threshold;
451 
452 	/*
453 	 * The RX Clear Channel Assessment threshold in the PHY
454 	 * (the energy threshold).
455 	 *
456 	 * Range: ENABLE_ENERGY_D  == 0x140A
457 	 *        DISABLE_ENERGY_D == 0xFFEF
458 	 */
459 	u16 rx_cca_threshold;
460 
461 	/*
462 	 * Occupied Rx mem-blocks number which requires interrupting the host
463 	 * (0 = no buffering, 0xffff = disabled).
464 	 *
465 	 * Range: u16
466 	 */
467 	u16 irq_blk_threshold;
468 
469 	/*
470 	 * Rx packets number which requires interrupting the host
471 	 * (0 = no buffering).
472 	 *
473 	 * Range: u16
474 	 */
475 	u16 irq_pkt_threshold;
476 
477 	/*
478 	 * Max time in msec the FW may delay RX-Complete interrupt.
479 	 *
480 	 * Range: 1 - 100
481 	 */
482 	u16 irq_timeout;
483 
484 	/*
485 	 * The RX queue type.
486 	 *
487 	 * Range: RX_QUEUE_TYPE_RX_LOW_PRIORITY, RX_QUEUE_TYPE_RX_HIGH_PRIORITY,
488 	 */
489 	u8 queue_type;
490 };
491 
492 #define CONF_TX_MAX_RATE_CLASSES       8
493 
494 #define CONF_TX_RATE_MASK_UNSPECIFIED  0
495 #define CONF_TX_RATE_MASK_BASIC        (CONF_HW_BIT_RATE_1MBPS | \
496 					CONF_HW_BIT_RATE_2MBPS)
497 #define CONF_TX_RATE_RETRY_LIMIT       10
498 
499 /*
500  * Rates supported for data packets when operating as AP. Note the absence
501  * of the 22Mbps rate. There is a FW limitation on 12 rates so we must drop
502  * one. The rate dropped is not mandatory under any operating mode.
503  */
504 #define CONF_TX_AP_ENABLED_RATES       (CONF_HW_BIT_RATE_1MBPS | \
505 	CONF_HW_BIT_RATE_2MBPS | CONF_HW_BIT_RATE_5_5MBPS |      \
506 	CONF_HW_BIT_RATE_6MBPS | CONF_HW_BIT_RATE_9MBPS |        \
507 	CONF_HW_BIT_RATE_11MBPS | CONF_HW_BIT_RATE_12MBPS |      \
508 	CONF_HW_BIT_RATE_18MBPS | CONF_HW_BIT_RATE_24MBPS |      \
509 	CONF_HW_BIT_RATE_36MBPS | CONF_HW_BIT_RATE_48MBPS |      \
510 	CONF_HW_BIT_RATE_54MBPS)
511 
512 /*
513  * Default rates for management traffic when operating in AP mode. This
514  * should be configured according to the basic rate set of the AP
515  */
516 #define CONF_TX_AP_DEFAULT_MGMT_RATES  (CONF_HW_BIT_RATE_1MBPS | \
517 	CONF_HW_BIT_RATE_2MBPS | CONF_HW_BIT_RATE_5_5MBPS)
518 
519 struct conf_tx_rate_class {
520 
521 	/*
522 	 * The rates enabled for this rate class.
523 	 *
524 	 * Range: CONF_HW_BIT_RATE_* bit mask
525 	 */
526 	u32 enabled_rates;
527 
528 	/*
529 	 * The dot11 short retry limit used for TX retries.
530 	 *
531 	 * Range: u8
532 	 */
533 	u8 short_retry_limit;
534 
535 	/*
536 	 * The dot11 long retry limit used for TX retries.
537 	 *
538 	 * Range: u8
539 	 */
540 	u8 long_retry_limit;
541 
542 	/*
543 	 * Flags controlling the attributes of TX transmission.
544 	 *
545 	 * Range: bit 0: Truncate - when set, FW attempts to send a frame stop
546 	 *               when the total valid per-rate attempts have
547 	 *               been exhausted; otherwise transmissions
548 	 *               will continue at the lowest available rate
549 	 *               until the appropriate one of the
550 	 *               short_retry_limit, long_retry_limit,
551 	 *               dot11_max_transmit_msdu_life_time, or
552 	 *               max_tx_life_time, is exhausted.
553 	 *            1: Preamble Override - indicates if the preamble type
554 	 *               should be used in TX.
555 	 *            2: Preamble Type - the type of the preamble to be used by
556 	 *               the policy (0 - long preamble, 1 - short preamble.
557 	 */
558 	u8 aflags;
559 };
560 
561 #define CONF_TX_MAX_AC_COUNT 4
562 
563 /* Slot number setting to start transmission at PIFS interval */
564 #define CONF_TX_AIFS_PIFS 1
565 /* Slot number setting to start transmission at DIFS interval normal
566  * DCF access */
567 #define CONF_TX_AIFS_DIFS 2
568 
569 
570 enum conf_tx_ac {
571 	CONF_TX_AC_BE = 0,         /* best effort / legacy */
572 	CONF_TX_AC_BK = 1,         /* background */
573 	CONF_TX_AC_VI = 2,         /* video */
574 	CONF_TX_AC_VO = 3,         /* voice */
575 	CONF_TX_AC_CTS2SELF = 4,   /* fictitious AC, follows AC_VO */
576 	CONF_TX_AC_ANY_TID = 0x1f
577 };
578 
579 struct conf_tx_ac_category {
580 	/*
581 	 * The AC class identifier.
582 	 *
583 	 * Range: enum conf_tx_ac
584 	 */
585 	u8 ac;
586 
587 	/*
588 	 * The contention window minimum size (in slots) for the access
589 	 * class.
590 	 *
591 	 * Range: u8
592 	 */
593 	u8 cw_min;
594 
595 	/*
596 	 * The contention window maximum size (in slots) for the access
597 	 * class.
598 	 *
599 	 * Range: u8
600 	 */
601 	u16 cw_max;
602 
603 	/*
604 	 * The AIF value (in slots) for the access class.
605 	 *
606 	 * Range: u8
607 	 */
608 	u8 aifsn;
609 
610 	/*
611 	 * The TX Op Limit (in microseconds) for the access class.
612 	 *
613 	 * Range: u16
614 	 */
615 	u16 tx_op_limit;
616 };
617 
618 #define CONF_TX_MAX_TID_COUNT 8
619 
620 enum {
621 	CONF_CHANNEL_TYPE_DCF = 0,   /* DC/LEGACY*/
622 	CONF_CHANNEL_TYPE_EDCF = 1,  /* EDCA*/
623 	CONF_CHANNEL_TYPE_HCCA = 2,  /* HCCA*/
624 };
625 
626 enum {
627 	CONF_PS_SCHEME_LEGACY = 0,
628 	CONF_PS_SCHEME_UPSD_TRIGGER = 1,
629 	CONF_PS_SCHEME_LEGACY_PSPOLL = 2,
630 	CONF_PS_SCHEME_SAPSD = 3,
631 };
632 
633 enum {
634 	CONF_ACK_POLICY_LEGACY = 0,
635 	CONF_ACK_POLICY_NO_ACK = 1,
636 	CONF_ACK_POLICY_BLOCK = 2,
637 };
638 
639 
640 struct conf_tx_tid {
641 	u8 queue_id;
642 	u8 channel_type;
643 	u8 tsid;
644 	u8 ps_scheme;
645 	u8 ack_policy;
646 	u32 apsd_conf[2];
647 };
648 
649 struct conf_tx_settings {
650 	/*
651 	 * The TX ED value for TELEC Enable/Disable.
652 	 *
653 	 * Range: 0, 1
654 	 */
655 	u8 tx_energy_detection;
656 
657 	/*
658 	 * Configuration for rate classes for TX (currently only one
659 	 * rate class supported). Used in non-AP mode.
660 	 */
661 	struct conf_tx_rate_class sta_rc_conf;
662 
663 	/*
664 	 * Configuration for access categories for TX rate control.
665 	 */
666 	u8 ac_conf_count;
667 	struct conf_tx_ac_category ac_conf[CONF_TX_MAX_AC_COUNT];
668 
669 	/*
670 	 * Configuration for rate classes in AP-mode. These rate classes
671 	 * are for the AC TX queues
672 	 */
673 	struct conf_tx_rate_class ap_rc_conf[CONF_TX_MAX_AC_COUNT];
674 
675 	/*
676 	 * Management TX rate class for AP-mode.
677 	 */
678 	struct conf_tx_rate_class ap_mgmt_conf;
679 
680 	/*
681 	 * Broadcast TX rate class for AP-mode.
682 	 */
683 	struct conf_tx_rate_class ap_bcst_conf;
684 
685 	/*
686 	 * AP-mode - allow this number of TX retries to a station before an
687 	 * event is triggered from FW.
688 	 */
689 	u16 ap_max_tx_retries;
690 
691 	/*
692 	 * Configuration for TID parameters.
693 	 */
694 	u8 tid_conf_count;
695 	struct conf_tx_tid tid_conf[CONF_TX_MAX_TID_COUNT];
696 
697 	/*
698 	 * The TX fragmentation threshold.
699 	 *
700 	 * Range: u16
701 	 */
702 	u16 frag_threshold;
703 
704 	/*
705 	 * Max time in msec the FW may delay frame TX-Complete interrupt.
706 	 *
707 	 * Range: u16
708 	 */
709 	u16 tx_compl_timeout;
710 
711 	/*
712 	 * Completed TX packet count which requires to issue the TX-Complete
713 	 * interrupt.
714 	 *
715 	 * Range: u16
716 	 */
717 	u16 tx_compl_threshold;
718 
719 	/*
720 	 * The rate used for control messages and scanning on the 2.4GHz band
721 	 *
722 	 * Range: CONF_HW_BIT_RATE_* bit mask
723 	 */
724 	u32 basic_rate;
725 
726 	/*
727 	 * The rate used for control messages and scanning on the 5GHz band
728 	 *
729 	 * Range: CONF_HW_BIT_RATE_* bit mask
730 	 */
731 	u32 basic_rate_5;
732 
733 	/*
734 	 * TX retry limits for templates
735 	 */
736 	u8 tmpl_short_retry_limit;
737 	u8 tmpl_long_retry_limit;
738 };
739 
740 enum {
741 	CONF_WAKE_UP_EVENT_BEACON    = 0x01, /* Wake on every Beacon*/
742 	CONF_WAKE_UP_EVENT_DTIM      = 0x02, /* Wake on every DTIM*/
743 	CONF_WAKE_UP_EVENT_N_DTIM    = 0x04, /* Wake every Nth DTIM */
744 	CONF_WAKE_UP_EVENT_N_BEACONS = 0x08, /* Wake every Nth beacon */
745 	CONF_WAKE_UP_EVENT_BITS_MASK = 0x0F
746 };
747 
748 #define CONF_MAX_BCN_FILT_IE_COUNT 32
749 
750 #define CONF_BCN_RULE_PASS_ON_CHANGE         BIT(0)
751 #define CONF_BCN_RULE_PASS_ON_APPEARANCE     BIT(1)
752 
753 #define CONF_BCN_IE_OUI_LEN    3
754 #define CONF_BCN_IE_VER_LEN    2
755 
756 struct conf_bcn_filt_rule {
757 	/*
758 	 * IE number to which to associate a rule.
759 	 *
760 	 * Range: u8
761 	 */
762 	u8 ie;
763 
764 	/*
765 	 * Rule to associate with the specific ie.
766 	 *
767 	 * Range: CONF_BCN_RULE_PASS_ON_*
768 	 */
769 	u8 rule;
770 
771 	/*
772 	 * OUI for the vendor specifie IE (221)
773 	 */
774 	u8 oui[CONF_BCN_IE_OUI_LEN];
775 
776 	/*
777 	 * Type for the vendor specifie IE (221)
778 	 */
779 	u8 type;
780 
781 	/*
782 	 * Version for the vendor specifie IE (221)
783 	 */
784 	u8 version[CONF_BCN_IE_VER_LEN];
785 };
786 
787 #define CONF_MAX_RSSI_SNR_TRIGGERS 8
788 
789 enum {
790 	CONF_TRIG_METRIC_RSSI_BEACON = 0,
791 	CONF_TRIG_METRIC_RSSI_DATA,
792 	CONF_TRIG_METRIC_SNR_BEACON,
793 	CONF_TRIG_METRIC_SNR_DATA
794 };
795 
796 enum {
797 	CONF_TRIG_EVENT_TYPE_LEVEL = 0,
798 	CONF_TRIG_EVENT_TYPE_EDGE
799 };
800 
801 enum {
802 	CONF_TRIG_EVENT_DIR_LOW = 0,
803 	CONF_TRIG_EVENT_DIR_HIGH,
804 	CONF_TRIG_EVENT_DIR_BIDIR
805 };
806 
807 struct conf_sig_weights {
808 
809 	/*
810 	 * RSSI from beacons average weight.
811 	 *
812 	 * Range: u8
813 	 */
814 	u8 rssi_bcn_avg_weight;
815 
816 	/*
817 	 * RSSI from data average weight.
818 	 *
819 	 * Range: u8
820 	 */
821 	u8 rssi_pkt_avg_weight;
822 
823 	/*
824 	 * SNR from beacons average weight.
825 	 *
826 	 * Range: u8
827 	 */
828 	u8 snr_bcn_avg_weight;
829 
830 	/*
831 	 * SNR from data average weight.
832 	 *
833 	 * Range: u8
834 	 */
835 	u8 snr_pkt_avg_weight;
836 };
837 
838 enum conf_bcn_filt_mode {
839 	CONF_BCN_FILT_MODE_DISABLED = 0,
840 	CONF_BCN_FILT_MODE_ENABLED = 1
841 };
842 
843 enum conf_bet_mode {
844 	CONF_BET_MODE_DISABLE = 0,
845 	CONF_BET_MODE_ENABLE = 1,
846 };
847 
848 struct conf_conn_settings {
849 	/*
850 	 * Firmware wakeup conditions configuration. The host may set only
851 	 * one bit.
852 	 *
853 	 * Range: CONF_WAKE_UP_EVENT_*
854 	 */
855 	u8 wake_up_event;
856 
857 	/*
858 	 * Listen interval for beacons or Dtims.
859 	 *
860 	 * Range: 0 for beacon and Dtim wakeup
861 	 *        1-10 for x Dtims
862 	 *        1-255 for x beacons
863 	 */
864 	u8 listen_interval;
865 
866 	/*
867 	 * Enable or disable the beacon filtering.
868 	 *
869 	 * Range: CONF_BCN_FILT_MODE_*
870 	 */
871 	enum conf_bcn_filt_mode bcn_filt_mode;
872 
873 	/*
874 	 * Configure Beacon filter pass-thru rules.
875 	 */
876 	u8 bcn_filt_ie_count;
877 	struct conf_bcn_filt_rule bcn_filt_ie[CONF_MAX_BCN_FILT_IE_COUNT];
878 
879 	/*
880 	 * The number of consequtive beacons to lose, before the firmware
881 	 * becomes out of synch.
882 	 *
883 	 * Range: u32
884 	 */
885 	u32 synch_fail_thold;
886 
887 	/*
888 	 * After out-of-synch, the number of TU's to wait without a further
889 	 * received beacon (or probe response) before issuing the BSS_EVENT_LOSE
890 	 * event.
891 	 *
892 	 * Range: u32
893 	 */
894 	u32 bss_lose_timeout;
895 
896 	/*
897 	 * Beacon receive timeout.
898 	 *
899 	 * Range: u32
900 	 */
901 	u32 beacon_rx_timeout;
902 
903 	/*
904 	 * Broadcast receive timeout.
905 	 *
906 	 * Range: u32
907 	 */
908 	u32 broadcast_timeout;
909 
910 	/*
911 	 * Enable/disable reception of broadcast packets in power save mode
912 	 *
913 	 * Range: 1 - enable, 0 - disable
914 	 */
915 	u8 rx_broadcast_in_ps;
916 
917 	/*
918 	 * Consequtive PS Poll failures before sending event to driver
919 	 *
920 	 * Range: u8
921 	 */
922 	u8 ps_poll_threshold;
923 
924 	/*
925 	 * PS Poll failure recovery ACTIVE period length
926 	 *
927 	 * Range: u32 (ms)
928 	 */
929 	u32 ps_poll_recovery_period;
930 
931 	/*
932 	 * Configuration of signal average weights.
933 	 */
934 	struct conf_sig_weights sig_weights;
935 
936 	/*
937 	 * Specifies if beacon early termination procedure is enabled or
938 	 * disabled.
939 	 *
940 	 * Range: CONF_BET_MODE_*
941 	 */
942 	u8 bet_enable;
943 
944 	/*
945 	 * Specifies the maximum number of consecutive beacons that may be
946 	 * early terminated. After this number is reached at least one full
947 	 * beacon must be correctly received in FW before beacon ET
948 	 * resumes.
949 	 *
950 	 * Range 0 - 255
951 	 */
952 	u8 bet_max_consecutive;
953 
954 	/*
955 	 * Specifies the maximum number of times to try PSM entry if it fails
956 	 * (if sending the appropriate null-func message fails.)
957 	 *
958 	 * Range 0 - 255
959 	 */
960 	u8 psm_entry_retries;
961 
962 	/*
963 	 * Specifies the maximum number of times to try PSM exit if it fails
964 	 * (if sending the appropriate null-func message fails.)
965 	 *
966 	 * Range 0 - 255
967 	 */
968 	u8 psm_exit_retries;
969 
970 	/*
971 	 * Specifies the maximum number of times to try transmit the PSM entry
972 	 * null-func frame for each PSM entry attempt
973 	 *
974 	 * Range 0 - 255
975 	 */
976 	u8 psm_entry_nullfunc_retries;
977 
978 	/*
979 	 * Specifies the time to linger in active mode after successfully
980 	 * transmitting the PSM entry null-func frame.
981 	 *
982 	 * Range 0 - 255 TU's
983 	 */
984 	u8 psm_entry_hangover_period;
985 
986 	/*
987 	 *
988 	 * Specifies the interval of the connection keep-alive null-func
989 	 * frame in ms.
990 	 *
991 	 * Range: 1000 - 3600000
992 	 */
993 	u32 keep_alive_interval;
994 
995 	/*
996 	 * Maximum listen interval supported by the driver in units of beacons.
997 	 *
998 	 * Range: u16
999 	 */
1000 	u8 max_listen_interval;
1001 };
1002 
1003 enum {
1004 	CONF_REF_CLK_19_2_E,
1005 	CONF_REF_CLK_26_E,
1006 	CONF_REF_CLK_38_4_E,
1007 	CONF_REF_CLK_52_E
1008 };
1009 
1010 enum single_dual_band_enum {
1011 	CONF_SINGLE_BAND,
1012 	CONF_DUAL_BAND
1013 };
1014 
1015 #define CONF_RSSI_AND_PROCESS_COMPENSATION_SIZE 15
1016 #define CONF_NUMBER_OF_SUB_BANDS_5  7
1017 #define CONF_NUMBER_OF_RATE_GROUPS  6
1018 #define CONF_NUMBER_OF_CHANNELS_2_4 14
1019 #define CONF_NUMBER_OF_CHANNELS_5   35
1020 
1021 struct conf_radio_parms {
1022 	/*
1023 	 * FEM parameter set to use
1024 	 *
1025 	 * Range: 0 or 1
1026 	 */
1027 	u8 fem;
1028 };
1029 
1030 struct conf_itrim_settings {
1031 	/* enable dco itrim */
1032 	u8 enable;
1033 
1034 	/* moderation timeout in microsecs from the last TX */
1035 	u32 timeout;
1036 };
1037 
1038 struct conf_pm_config_settings {
1039 	/*
1040 	 * Host clock settling time
1041 	 *
1042 	 * Range: 0 - 30000 us
1043 	 */
1044 	u32 host_clk_settling_time;
1045 
1046 	/*
1047 	 * Host fast wakeup support
1048 	 *
1049 	 * Range: true, false
1050 	 */
1051 	bool host_fast_wakeup_support;
1052 };
1053 
1054 struct conf_roam_trigger_settings {
1055 	/*
1056 	 * The minimum interval between two trigger events.
1057 	 *
1058 	 * Range: 0 - 60000 ms
1059 	 */
1060 	u16 trigger_pacing;
1061 
1062 	/*
1063 	 * The weight for rssi/beacon average calculation
1064 	 *
1065 	 * Range: 0 - 255
1066 	 */
1067 	u8 avg_weight_rssi_beacon;
1068 
1069 	/*
1070 	 * The weight for rssi/data frame average calculation
1071 	 *
1072 	 * Range: 0 - 255
1073 	 */
1074 	u8 avg_weight_rssi_data;
1075 
1076 	/*
1077 	 * The weight for snr/beacon average calculation
1078 	 *
1079 	 * Range: 0 - 255
1080 	 */
1081 	u8 avg_weight_snr_beacon;
1082 
1083 	/*
1084 	 * The weight for snr/data frame average calculation
1085 	 *
1086 	 * Range: 0 - 255
1087 	 */
1088 	u8 avg_weight_snr_data;
1089 };
1090 
1091 struct conf_scan_settings {
1092 	/*
1093 	 * The minimum time to wait on each channel for active scans
1094 	 *
1095 	 * Range: u32 tu/1000
1096 	 */
1097 	u32 min_dwell_time_active;
1098 
1099 	/*
1100 	 * The maximum time to wait on each channel for active scans
1101 	 *
1102 	 * Range: u32 tu/1000
1103 	 */
1104 	u32 max_dwell_time_active;
1105 
1106 	/*
1107 	 * The minimum time to wait on each channel for passive scans
1108 	 *
1109 	 * Range: u32 tu/1000
1110 	 */
1111 	u32 min_dwell_time_passive;
1112 
1113 	/*
1114 	 * The maximum time to wait on each channel for passive scans
1115 	 *
1116 	 * Range: u32 tu/1000
1117 	 */
1118 	u32 max_dwell_time_passive;
1119 
1120 	/*
1121 	 * Number of probe requests to transmit on each active scan channel
1122 	 *
1123 	 * Range: u8
1124 	 */
1125 	u16 num_probe_reqs;
1126 
1127 };
1128 
1129 /* these are number of channels on the band divided by two, rounded up */
1130 #define CONF_TX_PWR_COMPENSATION_LEN_2 7
1131 #define CONF_TX_PWR_COMPENSATION_LEN_5 18
1132 
1133 struct conf_rf_settings {
1134 	/*
1135 	 * Per channel power compensation for 2.4GHz
1136 	 *
1137 	 * Range: s8
1138 	 */
1139 	u8 tx_per_channel_power_compensation_2[CONF_TX_PWR_COMPENSATION_LEN_2];
1140 
1141 	/*
1142 	 * Per channel power compensation for 5GHz
1143 	 *
1144 	 * Range: s8
1145 	 */
1146 	u8 tx_per_channel_power_compensation_5[CONF_TX_PWR_COMPENSATION_LEN_5];
1147 };
1148 
1149 struct conf_ht_setting {
1150 	u16 tx_ba_win_size;
1151 	u16 inactivity_timeout;
1152 };
1153 
1154 struct conf_memory_settings {
1155 	/* Number of stations supported in IBSS mode */
1156 	u8 num_stations;
1157 
1158 	/* Number of ssid profiles used in IBSS mode */
1159 	u8 ssid_profiles;
1160 
1161 	/* Number of memory buffers allocated to rx pool */
1162 	u8 rx_block_num;
1163 
1164 	/* Minimum number of blocks allocated to tx pool */
1165 	u8 tx_min_block_num;
1166 
1167 	/* Disable/Enable dynamic memory */
1168 	u8 dynamic_memory;
1169 
1170 	/*
1171 	 * Minimum required free tx memory blocks in order to assure optimum
1172 	 * performance
1173 	 *
1174 	 * Range: 0-120
1175 	 */
1176 	u8 min_req_tx_blocks;
1177 
1178 	/*
1179 	 * Minimum required free rx memory blocks in order to assure optimum
1180 	 * performance
1181 	 *
1182 	 * Range: 0-120
1183 	 */
1184 	u8 min_req_rx_blocks;
1185 
1186 	/*
1187 	 * Minimum number of mem blocks (free+used) guaranteed for TX
1188 	 *
1189 	 * Range: 0-120
1190 	 */
1191 	u8 tx_min;
1192 };
1193 
1194 struct conf_drv_settings {
1195 	struct conf_sg_settings sg;
1196 	struct conf_rx_settings rx;
1197 	struct conf_tx_settings tx;
1198 	struct conf_conn_settings conn;
1199 	struct conf_itrim_settings itrim;
1200 	struct conf_pm_config_settings pm_config;
1201 	struct conf_roam_trigger_settings roam_trigger;
1202 	struct conf_scan_settings scan;
1203 	struct conf_rf_settings rf;
1204 	struct conf_ht_setting ht;
1205 	struct conf_memory_settings mem;
1206 };
1207 
1208 #endif
1209