Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
net
wireless
ti
wlcore
acx.h
Go to the documentation of this file.
1
/*
2
* This file is part of wl1271
3
*
4
* Copyright (C) 1998-2009 Texas Instruments. All rights reserved.
5
* Copyright (C) 2008-2010 Nokia Corporation
6
*
7
* Contact: Luciano Coelho <
[email protected]
>
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
25
#ifndef __ACX_H__
26
#define __ACX_H__
27
28
#include "
wlcore.h
"
29
#include "
cmd.h
"
30
31
/*************************************************************************
32
33
Host Interrupt Register (WiLink -> Host)
34
35
**************************************************************************/
36
/* HW Initiated interrupt Watchdog timer expiration */
37
#define WL1271_ACX_INTR_WATCHDOG BIT(0)
38
/* Init sequence is done (masked interrupt, detection through polling only ) */
39
#define WL1271_ACX_INTR_INIT_COMPLETE BIT(1)
40
/* Event was entered to Event MBOX #A*/
41
#define WL1271_ACX_INTR_EVENT_A BIT(2)
42
/* Event was entered to Event MBOX #B*/
43
#define WL1271_ACX_INTR_EVENT_B BIT(3)
44
/* Command processing completion*/
45
#define WL1271_ACX_INTR_CMD_COMPLETE BIT(4)
46
/* Signaling the host on HW wakeup */
47
#define WL1271_ACX_INTR_HW_AVAILABLE BIT(5)
48
/* The MISC bit is used for aggregation of RX, TxComplete and TX rate update */
49
#define WL1271_ACX_INTR_DATA BIT(6)
50
/* Trace message on MBOX #A */
51
#define WL1271_ACX_INTR_TRACE_A BIT(7)
52
/* Trace message on MBOX #B */
53
#define WL1271_ACX_INTR_TRACE_B BIT(8)
54
/* SW FW Initiated interrupt Watchdog timer expiration */
55
#define WL1271_ACX_SW_INTR_WATCHDOG BIT(9)
56
57
#define WL1271_ACX_INTR_ALL 0xFFFFFFFF
58
59
/* all possible interrupts - only appropriate ones will be masked in */
60
#define WLCORE_ALL_INTR_MASK (WL1271_ACX_INTR_WATCHDOG | \
61
WL1271_ACX_INTR_EVENT_A | \
62
WL1271_ACX_INTR_EVENT_B | \
63
WL1271_ACX_INTR_HW_AVAILABLE | \
64
WL1271_ACX_INTR_DATA | \
65
WL1271_ACX_SW_INTR_WATCHDOG)
66
67
/* Target's information element */
68
struct
acx_header
{
69
struct
wl1271_cmd_header
cmd
;
70
71
/* acx (or information element) header */
72
__le16
id
;
73
74
/* payload length (not including headers */
75
__le16
len
;
76
}
__packed
;
77
78
struct
acx_error_counter
{
79
struct
acx_header
header;
80
81
/* The number of PLCP errors since the last time this */
82
/* information element was interrogated. This field is */
83
/* automatically cleared when it is interrogated.*/
84
__le32
PLCP_error
;
85
86
/* The number of FCS errors since the last time this */
87
/* information element was interrogated. This field is */
88
/* automatically cleared when it is interrogated.*/
89
__le32
FCS_error
;
90
91
/* The number of MPDUs without PLCP header errors received*/
92
/* since the last time this information element was interrogated. */
93
/* This field is automatically cleared when it is interrogated.*/
94
__le32
valid_frame
;
95
96
/* the number of missed sequence numbers in the squentially */
97
/* values of frames seq numbers */
98
__le32
seq_num_miss
;
99
}
__packed
;
100
101
enum
wl12xx_role
{
102
WL1271_ROLE_STA
= 0,
103
WL1271_ROLE_IBSS
,
104
WL1271_ROLE_AP
,
105
WL1271_ROLE_DEVICE
,
106
WL1271_ROLE_P2P_CL
,
107
WL1271_ROLE_P2P_GO
,
108
109
WL12XX_INVALID_ROLE_TYPE
= 0xff
110
};
111
112
enum
wl1271_psm_mode
{
113
/* Active mode */
114
WL1271_PSM_CAM
= 0,
115
116
/* Power save mode */
117
WL1271_PSM_PS
= 1,
118
119
/* Extreme low power */
120
WL1271_PSM_ELP
= 2,
121
122
WL1271_PSM_MAX
=
WL1271_PSM_ELP
,
123
124
/* illegal out of band value of PSM mode */
125
WL1271_PSM_ILLEGAL
= 0xff
126
};
127
128
struct
acx_sleep_auth
{
129
struct
acx_header
header;
130
131
/* The sleep level authorization of the device. */
132
/* 0 - Always active*/
133
/* 1 - Power down mode: light / fast sleep*/
134
/* 2 - ELP mode: Deep / Max sleep*/
135
u8
sleep_auth
;
136
u8
padding
[3];
137
}
__packed
;
138
139
enum
{
140
HOSTIF_PCI_MASTER_HOST_INDIRECT
,
141
HOSTIF_PCI_MASTER_HOST_DIRECT
,
142
HOSTIF_SLAVE
,
143
HOSTIF_PKT_RING
,
144
HOSTIF_DONTCARE
= 0xFF
145
};
146
147
#define DEFAULT_UCAST_PRIORITY 0
148
#define DEFAULT_RX_Q_PRIORITY 0
149
#define DEFAULT_RXQ_PRIORITY 0
/* low 0 .. 15 high */
150
#define DEFAULT_RXQ_TYPE 0x07
/* All frames, Data/Ctrl/Mgmt */
151
#define TRACE_BUFFER_MAX_SIZE 256
152
153
#define DP_RX_PACKET_RING_CHUNK_SIZE 1600
154
#define DP_TX_PACKET_RING_CHUNK_SIZE 1600
155
#define DP_RX_PACKET_RING_CHUNK_NUM 2
156
#define DP_TX_PACKET_RING_CHUNK_NUM 2
157
#define DP_TX_COMPLETE_TIME_OUT 20
158
159
#define TX_MSDU_LIFETIME_MIN 0
160
#define TX_MSDU_LIFETIME_MAX 3000
161
#define TX_MSDU_LIFETIME_DEF 512
162
#define RX_MSDU_LIFETIME_MIN 0
163
#define RX_MSDU_LIFETIME_MAX 0xFFFFFFFF
164
#define RX_MSDU_LIFETIME_DEF 512000
165
166
struct
acx_rx_msdu_lifetime
{
167
struct
acx_header
header;
168
169
/*
170
* The maximum amount of time, in TU, before the
171
* firmware discards the MSDU.
172
*/
173
__le32
lifetime
;
174
}
__packed
;
175
176
enum
acx_slot_type
{
177
SLOT_TIME_LONG
= 0,
178
SLOT_TIME_SHORT
= 1,
179
DEFAULT_SLOT_TIME
=
SLOT_TIME_SHORT
,
180
MAX_SLOT_TIMES
= 0xFF
181
};
182
183
#define STATION_WONE_INDEX 0
184
185
struct
acx_slot
{
186
struct
acx_header
header;
187
188
u8
role_id
;
189
u8
wone_index
;
/* Reserved */
190
u8
slot_time
;
191
u8
reserved
[5];
192
}
__packed
;
193
194
195
#define ACX_MC_ADDRESS_GROUP_MAX (8)
196
#define ADDRESS_GROUP_MAX_LEN (ETH_ALEN * ACX_MC_ADDRESS_GROUP_MAX)
197
198
struct
acx_dot11_grp_addr_tbl
{
199
struct
acx_header
header;
200
201
u8
role_id
;
202
u8
enabled
;
203
u8
num_groups
;
204
u8
pad
[1];
205
u8
mac_table
[
ADDRESS_GROUP_MAX_LEN
];
206
}
__packed
;
207
208
struct
acx_rx_timeout
{
209
struct
acx_header
header;
210
211
u8
role_id
;
212
u8
reserved
;
213
__le16
ps_poll_timeout
;
214
__le16
upsd_timeout
;
215
u8
padding
[2];
216
}
__packed
;
217
218
struct
acx_rts_threshold
{
219
struct
acx_header
header;
220
221
u8
role_id
;
222
u8
reserved
;
223
__le16
threshold
;
224
}
__packed
;
225
226
struct
acx_beacon_filter_option
{
227
struct
acx_header
header;
228
229
u8
role_id
;
230
u8
enable
;
231
/*
232
* The number of beacons without the unicast TIM
233
* bit set that the firmware buffers before
234
* signaling the host about ready frames.
235
* When set to 0 and the filter is enabled, beacons
236
* without the unicast TIM bit set are dropped.
237
*/
238
u8
max_num_beacons
;
239
u8
pad
[1];
240
}
__packed
;
241
242
/*
243
* ACXBeaconFilterEntry (not 221)
244
* Byte Offset Size (Bytes) Definition
245
* =========== ============ ==========
246
* 0 1 IE identifier
247
* 1 1 Treatment bit mask
248
*
249
* ACXBeaconFilterEntry (221)
250
* Byte Offset Size (Bytes) Definition
251
* =========== ============ ==========
252
* 0 1 IE identifier
253
* 1 1 Treatment bit mask
254
* 2 3 OUI
255
* 5 1 Type
256
* 6 2 Version
257
*
258
*
259
* Treatment bit mask - The information element handling:
260
* bit 0 - The information element is compared and transferred
261
* in case of change.
262
* bit 1 - The information element is transferred to the host
263
* with each appearance or disappearance.
264
* Note that both bits can be set at the same time.
265
*/
266
#define BEACON_FILTER_TABLE_MAX_IE_NUM (32)
267
#define BEACON_FILTER_TABLE_MAX_VENDOR_SPECIFIC_IE_NUM (6)
268
#define BEACON_FILTER_TABLE_IE_ENTRY_SIZE (2)
269
#define BEACON_FILTER_TABLE_EXTRA_VENDOR_SPECIFIC_IE_SIZE (6)
270
#define BEACON_FILTER_TABLE_MAX_SIZE ((BEACON_FILTER_TABLE_MAX_IE_NUM * \
271
BEACON_FILTER_TABLE_IE_ENTRY_SIZE) + \
272
(BEACON_FILTER_TABLE_MAX_VENDOR_SPECIFIC_IE_NUM * \
273
BEACON_FILTER_TABLE_EXTRA_VENDOR_SPECIFIC_IE_SIZE))
274
275
struct
acx_beacon_filter_ie_table
{
276
struct
acx_header
header;
277
278
u8
role_id
;
279
u8
num_ie
;
280
u8
pad
[2];
281
u8
table
[
BEACON_FILTER_TABLE_MAX_SIZE
];
282
}
__packed
;
283
284
struct
acx_conn_monit_params
{
285
struct
acx_header
header;
286
287
u8
role_id
;
288
u8
padding
[3];
289
__le32
synch_fail_thold
;
/* number of beacons missed */
290
__le32
bss_lose_timeout
;
/* number of TU's from synch fail */
291
}
__packed
;
292
293
struct
acx_bt_wlan_coex
{
294
struct
acx_header
header;
295
296
u8
enable
;
297
u8
pad
[3];
298
}
__packed
;
299
300
struct
acx_bt_wlan_coex_param
{
301
struct
acx_header
header
;
302
303
__le32
params
[
CONF_SG_PARAMS_MAX
];
304
u8
param_idx
;
305
u8
padding
[3];
306
}
__packed
;
307
308
struct
acx_dco_itrim_params
{
309
struct
acx_header
header
;
310
311
u8
enable
;
312
u8
padding
[3];
313
__le32
timeout
;
314
}
__packed
;
315
316
struct
acx_energy_detection
{
317
struct
acx_header
header;
318
319
/* The RX Clear Channel Assessment threshold in the PHY */
320
__le16
rx_cca_threshold
;
321
u8
tx_energy_detection
;
322
u8
pad
;
323
}
__packed
;
324
325
struct
acx_beacon_broadcast
{
326
struct
acx_header
header;
327
328
u8
role_id
;
329
/* Enables receiving of broadcast packets in PS mode */
330
u8
rx_broadcast_in_ps
;
331
332
__le16
beacon_rx_timeout
;
333
__le16
broadcast_timeout
;
334
335
/* Consecutive PS Poll failures before updating the host */
336
u8
ps_poll_threshold
;
337
u8
pad
[1];
338
}
__packed
;
339
340
struct
acx_event_mask
{
341
struct
acx_header
header;
342
343
__le32
event_mask
;
344
__le32
high_event_mask
;
/* Unused */
345
}
__packed
;
346
347
#define SCAN_PASSIVE BIT(0)
348
#define SCAN_5GHZ_BAND BIT(1)
349
#define SCAN_TRIGGERED BIT(2)
350
#define SCAN_PRIORITY_HIGH BIT(3)
351
352
/* When set, disable HW encryption */
353
#define DF_ENCRYPTION_DISABLE 0x01
354
#define DF_SNIFF_MODE_ENABLE 0x80
355
356
struct
acx_feature_config
{
357
struct
acx_header
header;
358
359
u8
role_id
;
360
u8
padding
[3];
361
__le32
options
;
362
__le32
data_flow_options
;
363
}
__packed
;
364
365
struct
acx_current_tx_power
{
366
struct
acx_header
header;
367
368
u8
role_id
;
369
u8
current_tx_power
;
370
u8
padding
[2];
371
}
__packed
;
372
373
struct
acx_wake_up_condition
{
374
struct
acx_header
header;
375
376
u8
role_id
;
377
u8
wake_up_event
;
/* Only one bit can be set */
378
u8
listen_interval
;
379
u8
pad
[1];
380
}
__packed
;
381
382
struct
acx_aid
{
383
struct
acx_header
header;
384
385
/*
386
* To be set when associated with an AP.
387
*/
388
u8
role_id
;
389
u8
reserved
;
390
__le16
aid
;
391
}
__packed
;
392
393
enum
acx_preamble_type
{
394
ACX_PREAMBLE_LONG
= 0,
395
ACX_PREAMBLE_SHORT
= 1
396
};
397
398
struct
acx_preamble
{
399
struct
acx_header
header;
400
401
/*
402
* When set, the WiLink transmits the frames with a short preamble and
403
* when cleared, the WiLink transmits the frames with a long preamble.
404
*/
405
u8
role_id
;
406
u8
preamble
;
407
u8
padding
[2];
408
}
__packed
;
409
410
enum
acx_ctsprotect_type
{
411
CTSPROTECT_DISABLE
= 0,
412
CTSPROTECT_ENABLE
= 1
413
};
414
415
struct
acx_ctsprotect
{
416
struct
acx_header
header;
417
u8
role_id
;
418
u8
ctsprotect
;
419
u8
padding
[2];
420
}
__packed
;
421
422
struct
acx_rate_class
{
423
__le32
enabled_rates
;
424
u8
short_retry_limit
;
425
u8
long_retry_limit
;
426
u8
aflags
;
427
u8
reserved
;
428
};
429
430
struct
acx_rate_policy
{
431
struct
acx_header
header;
432
433
__le32
rate_policy_idx
;
434
struct
acx_rate_class
rate_policy
;
435
}
__packed
;
436
437
struct
acx_ac_cfg
{
438
struct
acx_header
header
;
439
u8
role_id
;
440
u8
ac
;
441
u8
aifsn
;
442
u8
cw_min
;
443
__le16
cw_max
;
444
__le16
tx_op_limit
;
445
}
__packed
;
446
447
struct
acx_tid_config
{
448
struct
acx_header
header
;
449
u8
role_id
;
450
u8
queue_id
;
451
u8
channel_type
;
452
u8
tsid
;
453
u8
ps_scheme
;
454
u8
ack_policy
;
455
u8
padding
[2];
456
__le32
apsd_conf
[2];
457
}
__packed
;
458
459
struct
acx_frag_threshold
{
460
struct
acx_header
header
;
461
__le16
frag_threshold
;
462
u8
padding
[2];
463
}
__packed
;
464
465
struct
acx_tx_config_options
{
466
struct
acx_header
header
;
467
__le16
tx_compl_timeout
;
/* msec */
468
__le16
tx_compl_threshold
;
/* number of packets */
469
}
__packed
;
470
471
struct
wl12xx_acx_config_memory
{
472
struct
acx_header
header
;
473
474
u8
rx_mem_block_num
;
475
u8
tx_min_mem_block_num
;
476
u8
num_stations
;
477
u8
num_ssid_profiles
;
478
__le32
total_tx_descriptors
;
479
u8
dyn_mem_enable
;
480
u8
tx_free_req
;
481
u8
rx_free_req
;
482
u8
tx_min
;
483
u8
fwlog_blocks
;
484
u8
padding
[3];
485
}
__packed
;
486
487
struct
wl1271_acx_mem_map
{
488
struct
acx_header
header
;
489
490
__le32
code_start
;
491
__le32
code_end
;
492
493
__le32
wep_defkey_start
;
494
__le32
wep_defkey_end
;
495
496
__le32
sta_table_start
;
497
__le32
sta_table_end
;
498
499
__le32
packet_template_start
;
500
__le32
packet_template_end
;
501
502
/* Address of the TX result interface (control block) */
503
__le32
tx_result
;
504
__le32
tx_result_queue_start
;
505
506
__le32
queue_memory_start
;
507
__le32
queue_memory_end
;
508
509
__le32
packet_memory_pool_start
;
510
__le32
packet_memory_pool_end
;
511
512
__le32
debug_buffer1_start
;
513
__le32
debug_buffer1_end
;
514
515
__le32
debug_buffer2_start
;
516
__le32
debug_buffer2_end
;
517
518
/* Number of blocks FW allocated for TX packets */
519
__le32
num_tx_mem_blocks
;
520
521
/* Number of blocks FW allocated for RX packets */
522
__le32
num_rx_mem_blocks
;
523
524
/* the following 4 fields are valid in SLAVE mode only */
525
u8
*
tx_cbuf
;
526
u8
*
rx_cbuf
;
527
__le32
rx_ctrl
;
528
__le32
tx_ctrl
;
529
}
__packed
;
530
531
struct
wl1271_acx_rx_config_opt
{
532
struct
acx_header
header
;
533
534
__le16
mblk_threshold
;
535
__le16
threshold
;
536
__le16
timeout
;
537
u8
queue_type
;
538
u8
reserved
;
539
}
__packed
;
540
541
542
struct
wl1271_acx_bet_enable
{
543
struct
acx_header
header
;
544
545
u8
role_id
;
546
u8
enable
;
547
u8
max_consecutive
;
548
u8
padding
[1];
549
}
__packed
;
550
551
#define ACX_IPV4_VERSION 4
552
#define ACX_IPV6_VERSION 6
553
#define ACX_IPV4_ADDR_SIZE 4
554
555
/* bitmap of enabled arp_filter features */
556
#define ACX_ARP_FILTER_ARP_FILTERING BIT(0)
557
#define ACX_ARP_FILTER_AUTO_ARP BIT(1)
558
559
struct
wl1271_acx_arp_filter
{
560
struct
acx_header
header
;
561
u8
role_id
;
562
u8
version
;
/* ACX_IPV4_VERSION, ACX_IPV6_VERSION */
563
u8
enable
;
/* bitmap of enabled ARP filtering features */
564
u8
padding
[1];
565
u8
address
[16];
/* The configured device IP address - all ARP
566
requests directed to this IP address will pass
567
through. For IPv4, the first four bytes are
568
used. */
569
}
__packed
;
570
571
struct
wl1271_acx_pm_config
{
572
struct
acx_header
header
;
573
574
__le32
host_clk_settling_time
;
575
u8
host_fast_wakeup_support
;
576
u8
padding
[3];
577
}
__packed
;
578
579
struct
wl1271_acx_keep_alive_mode
{
580
struct
acx_header
header
;
581
582
u8
role_id
;
583
u8
enabled
;
584
u8
padding
[2];
585
}
__packed
;
586
587
enum
{
588
ACX_KEEP_ALIVE_NO_TX
= 0,
589
ACX_KEEP_ALIVE_PERIOD_ONLY
590
};
591
592
enum
{
593
ACX_KEEP_ALIVE_TPL_INVALID
= 0,
594
ACX_KEEP_ALIVE_TPL_VALID
595
};
596
597
struct
wl1271_acx_keep_alive_config
{
598
struct
acx_header
header
;
599
600
u8
role_id
;
601
u8
index
;
602
u8
tpl_validation
;
603
u8
trigger
;
604
__le32
period
;
605
}
__packed
;
606
607
/* TODO: maybe this needs to be moved somewhere else? */
608
#define HOST_IF_CFG_RX_FIFO_ENABLE BIT(0)
609
#define HOST_IF_CFG_TX_EXTRA_BLKS_SWAP BIT(1)
610
#define HOST_IF_CFG_TX_PAD_TO_SDIO_BLK BIT(3)
611
#define HOST_IF_CFG_RX_PAD_TO_SDIO_BLK BIT(4)
612
#define HOST_IF_CFG_ADD_RX_ALIGNMENT BIT(6)
613
614
enum
{
615
WL1271_ACX_TRIG_TYPE_LEVEL
= 0,
616
WL1271_ACX_TRIG_TYPE_EDGE
,
617
};
618
619
enum
{
620
WL1271_ACX_TRIG_DIR_LOW
= 0,
621
WL1271_ACX_TRIG_DIR_HIGH
,
622
WL1271_ACX_TRIG_DIR_BIDIR
,
623
};
624
625
enum
{
626
WL1271_ACX_TRIG_ENABLE
= 1,
627
WL1271_ACX_TRIG_DISABLE
,
628
};
629
630
enum
{
631
WL1271_ACX_TRIG_METRIC_RSSI_BEACON
= 0,
632
WL1271_ACX_TRIG_METRIC_RSSI_DATA
,
633
WL1271_ACX_TRIG_METRIC_SNR_BEACON
,
634
WL1271_ACX_TRIG_METRIC_SNR_DATA
,
635
};
636
637
enum
{
638
WL1271_ACX_TRIG_IDX_RSSI
= 0,
639
WL1271_ACX_TRIG_COUNT
= 8,
640
};
641
642
struct
wl1271_acx_rssi_snr_trigger
{
643
struct
acx_header
header
;
644
645
u8
role_id
;
646
u8
metric
;
647
u8
type
;
648
u8
dir
;
649
__le16
threshold
;
650
__le16
pacing
;
/* 0 - 60000 ms */
651
u8
hysteresis
;
652
u8
index
;
653
u8
enable
;
654
u8
padding
[1];
655
};
656
657
struct
wl1271_acx_rssi_snr_avg_weights
{
658
struct
acx_header
header
;
659
660
u8
role_id
;
661
u8
padding
[3];
662
u8
rssi_beacon
;
663
u8
rssi_data
;
664
u8
snr_beacon
;
665
u8
snr_data
;
666
};
667
668
669
/* special capability bit (not employed by the 802.11n spec) */
670
#define WL12XX_HT_CAP_HT_OPERATION BIT(16)
671
672
/*
673
* ACX_PEER_HT_CAP
674
* Configure HT capabilities - declare the capabilities of the peer
675
* we are connected to.
676
*/
677
struct
wl1271_acx_ht_capabilities
{
678
struct
acx_header
header
;
679
680
/* bitmask of capability bits supported by the peer */
681
__le32
ht_capabilites
;
682
683
/* Indicates to which link these capabilities apply. */
684
u8
hlid
;
685
686
/*
687
* This the maximum A-MPDU length supported by the AP. The FW may not
688
* exceed this length when sending A-MPDUs
689
*/
690
u8
ampdu_max_length
;
691
692
/* This is the minimal spacing required when sending A-MPDUs to the AP*/
693
u8
ampdu_min_spacing
;
694
695
u8
padding
;
696
}
__packed
;
697
698
/*
699
* ACX_HT_BSS_OPERATION
700
* Configure HT capabilities - AP rules for behavior in the BSS.
701
*/
702
struct
wl1271_acx_ht_information
{
703
struct
acx_header
header
;
704
705
u8
role_id
;
706
707
/* Values: 0 - RIFS not allowed, 1 - RIFS allowed */
708
u8
rifs_mode
;
709
710
/* Values: 0 - 3 like in spec */
711
u8
ht_protection
;
712
713
/* Values: 0 - GF protection not required, 1 - GF protection required */
714
u8
gf_protection
;
715
716
/*Values: 0 - TX Burst limit not required, 1 - TX Burst Limit required*/
717
u8
ht_tx_burst_limit
;
718
719
/*
720
* Values: 0 - Dual CTS protection not required,
721
* 1 - Dual CTS Protection required
722
* Note: When this value is set to 1 FW will protect all TXOP with RTS
723
* frame and will not use CTS-to-self regardless of the value of the
724
* ACX_CTS_PROTECTION information element
725
*/
726
u8
dual_cts_protection
;
727
728
u8
padding
[2];
729
}
__packed
;
730
731
#define RX_BA_MAX_SESSIONS 3
732
733
struct
wl1271_acx_ba_initiator_policy
{
734
struct
acx_header
header
;
735
736
/* Specifies role Id, Range 0-7, 0xFF means ANY role. */
737
u8
role_id
;
738
739
/*
740
* Per TID setting for allowing TX BA. Set a bit to 1 to allow
741
* TX BA sessions for the corresponding TID.
742
*/
743
u8
tid_bitmap
;
744
745
/* Windows size in number of packets */
746
u8
win_size
;
747
748
u8
padding1
[1];
749
750
/* As initiator inactivity timeout in time units(TU) of 1024us */
751
u16
inactivity_timeout
;
752
753
u8
padding
[2];
754
}
__packed
;
755
756
struct
wl1271_acx_ba_receiver_setup
{
757
struct
acx_header
header
;
758
759
/* Specifies link id, range 0-31 */
760
u8
hlid
;
761
762
u8
tid
;
763
764
u8
enable
;
765
766
/* Windows size in number of packets */
767
u8
win_size
;
768
769
/* BA session starting sequence number. RANGE 0-FFF */
770
u16
ssn
;
771
772
u8
padding
[2];
773
}
__packed
;
774
775
struct
wl12xx_acx_fw_tsf_information
{
776
struct
acx_header
header
;
777
778
u8
role_id
;
779
u8
padding1
[3];
780
__le32
current_tsf_high
;
781
__le32
current_tsf_low
;
782
__le32
last_bttt_high
;
783
__le32
last_tbtt_low
;
784
u8
last_dtim_count
;
785
u8
padding2
[3];
786
}
__packed
;
787
788
struct
wl1271_acx_ps_rx_streaming
{
789
struct
acx_header
header
;
790
791
u8
role_id
;
792
u8
tid
;
793
u8
enable
;
794
795
/* interval between triggers (10-100 msec) */
796
u8
period
;
797
798
/* timeout before first trigger (0-200 msec) */
799
u8
timeout
;
800
u8
padding
[3];
801
}
__packed
;
802
803
struct
wl1271_acx_ap_max_tx_retry
{
804
struct
acx_header
header
;
805
806
u8
role_id
;
807
u8
padding_1
;
808
809
/*
810
* the number of frames transmission failures before
811
* issuing the aging event.
812
*/
813
__le16
max_tx_retry
;
814
}
__packed
;
815
816
struct
wl1271_acx_config_ps
{
817
struct
acx_header
header
;
818
819
u8
exit_retries
;
820
u8
enter_retries
;
821
u8
padding
[2];
822
__le32
null_data_rate
;
823
}
__packed
;
824
825
struct
wl1271_acx_inconnection_sta
{
826
struct
acx_header
header
;
827
828
u8
addr
[
ETH_ALEN
];
829
u8
padding1
[2];
830
}
__packed
;
831
832
/*
833
* ACX_FM_COEX_CFG
834
* set the FM co-existence parameters.
835
*/
836
struct
wl1271_acx_fm_coex
{
837
struct
acx_header
header
;
838
/* enable(1) / disable(0) the FM Coex feature */
839
u8
enable
;
840
/*
841
* Swallow period used in COEX PLL swallowing mechanism.
842
* 0xFF = use FW default
843
*/
844
u8
swallow_period
;
845
/*
846
* The N divider used in COEX PLL swallowing mechanism for Fref of
847
* 38.4/19.2 Mhz. 0xFF = use FW default
848
*/
849
u8
n_divider_fref_set_1
;
850
/*
851
* The N divider used in COEX PLL swallowing mechanism for Fref of
852
* 26/52 Mhz. 0xFF = use FW default
853
*/
854
u8
n_divider_fref_set_2
;
855
/*
856
* The M divider used in COEX PLL swallowing mechanism for Fref of
857
* 38.4/19.2 Mhz. 0xFFFF = use FW default
858
*/
859
__le16
m_divider_fref_set_1
;
860
/*
861
* The M divider used in COEX PLL swallowing mechanism for Fref of
862
* 26/52 Mhz. 0xFFFF = use FW default
863
*/
864
__le16
m_divider_fref_set_2
;
865
/*
866
* The time duration in uSec required for COEX PLL to stabilize.
867
* 0xFFFFFFFF = use FW default
868
*/
869
__le32
coex_pll_stabilization_time
;
870
/*
871
* The time duration in uSec required for LDO to stabilize.
872
* 0xFFFFFFFF = use FW default
873
*/
874
__le16
ldo_stabilization_time
;
875
/*
876
* The disturbed frequency band margin around the disturbed frequency
877
* center (single sided).
878
* For example, if 2 is configured, the following channels will be
879
* considered disturbed channel:
880
* 80 +- 0.1 MHz, 91 +- 0.1 MHz, 98 +- 0.1 MHz, 102 +- 0.1 MH
881
* 0xFF = use FW default
882
*/
883
u8
fm_disturbed_band_margin
;
884
/*
885
* The swallow clock difference of the swallowing mechanism.
886
* 0xFF = use FW default
887
*/
888
u8
swallow_clk_diff
;
889
}
__packed
;
890
891
#define ACX_RATE_MGMT_ALL_PARAMS 0xff
892
struct
wl12xx_acx_set_rate_mgmt_params
{
893
struct
acx_header
header
;
894
895
u8
index
;
/* 0xff to configure all params */
896
u8
padding1
;
897
__le16
rate_retry_score
;
898
__le16
per_add
;
899
__le16
per_th1
;
900
__le16
per_th2
;
901
__le16
max_per
;
902
u8
inverse_curiosity_factor
;
903
u8
tx_fail_low_th
;
904
u8
tx_fail_high_th
;
905
u8
per_alpha_shift
;
906
u8
per_add_shift
;
907
u8
per_beta1_shift
;
908
u8
per_beta2_shift
;
909
u8
rate_check_up
;
910
u8
rate_check_down
;
911
u8
rate_retry_policy
[
ACX_RATE_MGMT_NUM_OF_RATES
];
912
u8
padding2
[2];
913
}
__packed
;
914
915
struct
wl12xx_acx_config_hangover
{
916
struct
acx_header
header
;
917
918
__le32
recover_time
;
919
u8
hangover_period
;
920
u8
dynamic_mode
;
921
u8
early_termination_mode
;
922
u8
max_period
;
923
u8
min_period
;
924
u8
increase_delta
;
925
u8
decrease_delta
;
926
u8
quiet_time
;
927
u8
increase_time
;
928
u8
window_size
;
929
u8
padding
[2];
930
}
__packed
;
931
932
933
struct
acx_default_rx_filter
{
934
struct
acx_header
header
;
935
u8
enable
;
936
937
/* action of type FILTER_XXX */
938
u8
default_action
;
939
940
u8
pad
[2];
941
}
__packed
;
942
943
944
struct
acx_rx_filter_cfg
{
945
struct
acx_header
header
;
946
947
u8
enable
;
948
949
/* 0 - WL1271_MAX_RX_FILTERS-1 */
950
u8
index
;
951
952
u8
action
;
953
954
u8
num_fields
;
955
u8
fields
[0];
956
}
__packed
;
957
958
enum
{
959
ACX_WAKE_UP_CONDITIONS
= 0x0000,
960
ACX_MEM_CFG
= 0x0001,
961
ACX_SLOT
= 0x0002,
962
ACX_AC_CFG
= 0x0003,
963
ACX_MEM_MAP
= 0x0004,
964
ACX_AID
= 0x0005,
965
ACX_MEDIUM_USAGE
= 0x0006,
966
ACX_STATISTICS
= 0x0007,
967
ACX_PWR_CONSUMPTION_STATISTICS
= 0x0008,
968
ACX_TID_CFG
= 0x0009,
969
ACX_PS_RX_STREAMING
= 0x000A,
970
ACX_BEACON_FILTER_OPT
= 0x000B,
971
ACX_NOISE_HIST
= 0x000C,
972
ACX_HDK_VERSION
= 0x000D,
973
ACX_PD_THRESHOLD
= 0x000E,
974
ACX_TX_CONFIG_OPT
= 0x000F,
975
ACX_CCA_THRESHOLD
= 0x0010,
976
ACX_EVENT_MBOX_MASK
= 0x0011,
977
ACX_CONN_MONIT_PARAMS
= 0x0012,
978
ACX_DISABLE_BROADCASTS
= 0x0013,
979
ACX_BCN_DTIM_OPTIONS
= 0x0014,
980
ACX_SG_ENABLE
= 0x0015,
981
ACX_SG_CFG
= 0x0016,
982
ACX_FM_COEX_CFG
= 0x0017,
983
ACX_BEACON_FILTER_TABLE
= 0x0018,
984
ACX_ARP_IP_FILTER
= 0x0019,
985
ACX_ROAMING_STATISTICS_TBL
= 0x001A,
986
ACX_RATE_POLICY
= 0x001B,
987
ACX_CTS_PROTECTION
= 0x001C,
988
ACX_SLEEP_AUTH
= 0x001D,
989
ACX_PREAMBLE_TYPE
= 0x001E,
990
ACX_ERROR_CNT
= 0x001F,
991
ACX_IBSS_FILTER
= 0x0020,
992
ACX_SERVICE_PERIOD_TIMEOUT
= 0x0021,
993
ACX_TSF_INFO
= 0x0022,
994
ACX_CONFIG_PS_WMM
= 0x0023,
995
ACX_ENABLE_RX_DATA_FILTER
= 0x0024,
996
ACX_SET_RX_DATA_FILTER
= 0x0025,
997
ACX_GET_DATA_FILTER_STATISTICS
= 0x0026,
998
ACX_RX_CONFIG_OPT
= 0x0027,
999
ACX_FRAG_CFG
= 0x0028,
1000
ACX_BET_ENABLE
= 0x0029,
1001
ACX_RSSI_SNR_TRIGGER
= 0x002A,
1002
ACX_RSSI_SNR_WEIGHTS
= 0x002B,
1003
ACX_KEEP_ALIVE_MODE
= 0x002C,
1004
ACX_SET_KEEP_ALIVE_CONFIG
= 0x002D,
1005
ACX_BA_SESSION_INIT_POLICY
= 0x002E,
1006
ACX_BA_SESSION_RX_SETUP
= 0x002F,
1007
ACX_PEER_HT_CAP
= 0x0030,
1008
ACX_HT_BSS_OPERATION
= 0x0031,
1009
ACX_COEX_ACTIVITY
= 0x0032,
1010
ACX_BURST_MODE
= 0x0033,
1011
ACX_SET_RATE_MGMT_PARAMS
= 0x0034,
1012
ACX_GET_RATE_MGMT_PARAMS
= 0x0035,
1013
ACX_SET_RATE_ADAPT_PARAMS
= 0x0036,
1014
ACX_SET_DCO_ITRIM_PARAMS
= 0x0037,
1015
ACX_GEN_FW_CMD
= 0x0038,
1016
ACX_HOST_IF_CFG_BITMAP
= 0x0039,
1017
ACX_MAX_TX_FAILURE
= 0x003A,
1018
ACX_UPDATE_INCONNECTION_STA_LIST
= 0x003B,
1019
DOT11_RX_MSDU_LIFE_TIME
= 0x003C,
1020
DOT11_CUR_TX_PWR
= 0x003D,
1021
DOT11_RTS_THRESHOLD
= 0x003E,
1022
DOT11_GROUP_ADDRESS_TBL
= 0x003F,
1023
ACX_PM_CONFIG
= 0x0040,
1024
ACX_CONFIG_PS
= 0x0041,
1025
ACX_CONFIG_HANGOVER
= 0x0042,
1026
ACX_FEATURE_CFG
= 0x0043,
1027
ACX_PROTECTION_CFG
= 0x0044,
1028
ACX_CHECKSUM_CONFIG
= 0x0045,
1029
};
1030
1031
1032
int
wl1271_acx_wake_up_conditions
(
struct
wl1271
*wl,
1033
struct
wl12xx_vif
*wlvif,
1034
u8
wake_up_event,
u8
listen_interval
);
1035
int
wl1271_acx_sleep_auth
(
struct
wl1271
*wl,
u8
sleep_auth);
1036
int
wl1271_acx_tx_power
(
struct
wl1271
*wl,
struct
wl12xx_vif
*wlvif,
1037
int
power);
1038
int
wl1271_acx_feature_cfg
(
struct
wl1271
*wl,
struct
wl12xx_vif
*wlvif);
1039
int
wl1271_acx_mem_map
(
struct
wl1271
*wl,
1040
struct
acx_header
*
mem_map
,
size_t
len
);
1041
int
wl1271_acx_rx_msdu_life_time
(
struct
wl1271
*wl);
1042
int
wl1271_acx_slot
(
struct
wl1271
*wl,
struct
wl12xx_vif
*wlvif,
1043
enum
acx_slot_type
slot_time);
1044
int
wl1271_acx_group_address_tbl
(
struct
wl1271
*wl,
struct
wl12xx_vif
*wlvif,
1045
bool
enable
,
void
*mc_list,
u32
mc_list_len);
1046
int
wl1271_acx_service_period_timeout
(
struct
wl1271
*wl,
1047
struct
wl12xx_vif
*wlvif);
1048
int
wl1271_acx_rts_threshold
(
struct
wl1271
*wl,
struct
wl12xx_vif
*wlvif,
1049
u32
rts_threshold);
1050
int
wl1271_acx_dco_itrim_params
(
struct
wl1271
*wl);
1051
int
wl1271_acx_beacon_filter_opt
(
struct
wl1271
*wl,
struct
wl12xx_vif
*wlvif,
1052
bool
enable_filter);
1053
int
wl1271_acx_beacon_filter_table
(
struct
wl1271
*wl,
1054
struct
wl12xx_vif
*wlvif);
1055
int
wl1271_acx_conn_monit_params
(
struct
wl1271
*wl,
struct
wl12xx_vif
*wlvif,
1056
bool
enable
);
1057
int
wl1271_acx_sg_enable
(
struct
wl1271
*wl,
bool
enable
);
1058
int
wl12xx_acx_sg_cfg
(
struct
wl1271
*wl);
1059
int
wl1271_acx_cca_threshold
(
struct
wl1271
*wl);
1060
int
wl1271_acx_bcn_dtim_options
(
struct
wl1271
*wl,
struct
wl12xx_vif
*wlvif);
1061
int
wl1271_acx_aid
(
struct
wl1271
*wl,
struct
wl12xx_vif
*wlvif,
u16
aid
);
1062
int
wl1271_acx_event_mbox_mask
(
struct
wl1271
*wl,
u32
event_mask);
1063
int
wl1271_acx_set_preamble
(
struct
wl1271
*wl,
struct
wl12xx_vif
*wlvif,
1064
enum
acx_preamble_type
preamble);
1065
int
wl1271_acx_cts_protect
(
struct
wl1271
*wl,
struct
wl12xx_vif
*wlvif,
1066
enum
acx_ctsprotect_type
ctsprotect);
1067
int
wl1271_acx_statistics
(
struct
wl1271
*wl,
void
*
stats
);
1068
int
wl1271_acx_sta_rate_policies
(
struct
wl1271
*wl,
struct
wl12xx_vif
*wlvif);
1069
int
wl1271_acx_ap_rate_policy
(
struct
wl1271
*wl,
struct
conf_tx_rate_class
*
c
,
1070
u8
idx
);
1071
int
wl1271_acx_ac_cfg
(
struct
wl1271
*wl,
struct
wl12xx_vif
*wlvif,
1072
u8
ac
,
u8
cw_min
,
u16
cw_max
,
u8
aifsn,
u16
txop
);
1073
int
wl1271_acx_tid_cfg
(
struct
wl1271
*wl,
struct
wl12xx_vif
*wlvif,
1074
u8
queue_id,
u8
channel_type
,
1075
u8
tsid,
u8
ps_scheme,
u8
ack_policy
,
1076
u32
apsd_conf0,
u32
apsd_conf1);
1077
int
wl1271_acx_frag_threshold
(
struct
wl1271
*wl,
u32
frag_threshold
);
1078
int
wl1271_acx_tx_config_options
(
struct
wl1271
*wl);
1079
int
wl12xx_acx_mem_cfg
(
struct
wl1271
*wl);
1080
int
wl1271_acx_init_mem_config
(
struct
wl1271
*wl);
1081
int
wl1271_acx_init_rx_interrupt
(
struct
wl1271
*wl);
1082
int
wl1271_acx_smart_reflex
(
struct
wl1271
*wl);
1083
int
wl1271_acx_bet_enable
(
struct
wl1271
*wl,
struct
wl12xx_vif
*wlvif,
1084
bool
enable
);
1085
int
wl1271_acx_arp_ip_filter
(
struct
wl1271
*wl,
struct
wl12xx_vif
*wlvif,
1086
u8
enable
,
__be32
address
);
1087
int
wl1271_acx_pm_config
(
struct
wl1271
*wl);
1088
int
wl1271_acx_keep_alive_mode
(
struct
wl1271
*wl,
struct
wl12xx_vif
*vif,
1089
bool
enable
);
1090
int
wl1271_acx_keep_alive_config
(
struct
wl1271
*wl,
struct
wl12xx_vif
*wlvif,
1091
u8
index
,
u8
tpl_valid);
1092
int
wl1271_acx_rssi_snr_trigger
(
struct
wl1271
*wl,
struct
wl12xx_vif
*wlvif,
1093
bool
enable
,
s16
thold,
u8
hyst);
1094
int
wl1271_acx_rssi_snr_avg_weights
(
struct
wl1271
*wl,
1095
struct
wl12xx_vif
*wlvif);
1096
int
wl1271_acx_set_ht_capabilities
(
struct
wl1271
*wl,
1097
struct
ieee80211_sta_ht_cap
*ht_cap,
1098
bool
allow_ht_operation,
u8
hlid);
1099
int
wl1271_acx_set_ht_information
(
struct
wl1271
*wl,
1100
struct
wl12xx_vif
*wlvif,
1101
u16
ht_operation_mode);
1102
int
wl12xx_acx_set_ba_initiator_policy
(
struct
wl1271
*wl,
1103
struct
wl12xx_vif
*wlvif);
1104
int
wl12xx_acx_set_ba_receiver_session
(
struct
wl1271
*wl,
u8
tid_index,
1105
u16
ssn
,
bool
enable
,
u8
peer_hlid);
1106
int
wl12xx_acx_tsf_info
(
struct
wl1271
*wl,
struct
wl12xx_vif
*wlvif,
1107
u64
*mactime);
1108
int
wl1271_acx_ps_rx_streaming
(
struct
wl1271
*wl,
struct
wl12xx_vif
*wlvif,
1109
bool
enable
);
1110
int
wl1271_acx_ap_max_tx_retry
(
struct
wl1271
*wl,
struct
wl12xx_vif
*wlvif);
1111
int
wl12xx_acx_config_ps
(
struct
wl1271
*wl,
struct
wl12xx_vif
*wlvif);
1112
int
wl1271_acx_set_inconnection_sta
(
struct
wl1271
*wl,
u8
*
addr
);
1113
int
wl1271_acx_fm_coex
(
struct
wl1271
*wl);
1114
int
wl12xx_acx_set_rate_mgmt_params
(
struct
wl1271
*wl);
1115
int
wl12xx_acx_config_hangover
(
struct
wl1271
*wl);
1116
1117
#ifdef CONFIG_PM
1118
int
wl1271_acx_default_rx_filter_enable(
struct
wl1271
*wl,
bool
enable
,
1119
enum
rx_filter_action
action
);
1120
int
wl1271_acx_set_rx_filter(
struct
wl1271
*wl,
u8
index
,
bool
enable
,
1121
struct
wl12xx_rx_filter
*
filter
);
1122
#endif
/* CONFIG_PM */
1123
#endif
/* __WL1271_ACX_H__ */
Generated on Thu Jan 10 2013 14:13:12 for Linux Kernel by
1.8.2