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
ath
ath6kl
core.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2010-2011 Atheros Communications Inc.
3
* Copyright (c) 2011-2012 Qualcomm Atheros, Inc.
4
*
5
* Permission to use, copy, modify, and/or distribute this software for any
6
* purpose with or without fee is hereby granted, provided that the above
7
* copyright notice and this permission notice appear in all copies.
8
*
9
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
*/
17
18
#ifndef CORE_H
19
#define CORE_H
20
21
#include <
linux/etherdevice.h
>
22
#include <linux/rtnetlink.h>
23
#include <
linux/firmware.h
>
24
#include <linux/sched.h>
25
#include <
linux/circ_buf.h
>
26
#include <
net/cfg80211.h
>
27
#include "
htc.h
"
28
#include "
wmi.h
"
29
#include "
bmi.h
"
30
#include "
target.h
"
31
32
#define MAX_ATH6KL 1
33
#define ATH6KL_MAX_RX_BUFFERS 16
34
#define ATH6KL_BUFFER_SIZE 1664
35
#define ATH6KL_MAX_AMSDU_RX_BUFFERS 4
36
#define ATH6KL_AMSDU_REFILL_THRESHOLD 3
37
#define ATH6KL_AMSDU_BUFFER_SIZE (WMI_MAX_AMSDU_RX_DATA_FRAME_LENGTH + 128)
38
#define MAX_MSDU_SUBFRAME_PAYLOAD_LEN 1508
39
#define MIN_MSDU_SUBFRAME_PAYLOAD_LEN 46
40
41
#define USER_SAVEDKEYS_STAT_INIT 0
42
#define USER_SAVEDKEYS_STAT_RUN 1
43
44
#define ATH6KL_TX_TIMEOUT 10
45
#define ATH6KL_MAX_ENDPOINTS 4
46
#define MAX_NODE_NUM 15
47
48
#define ATH6KL_APSD_ALL_FRAME 0xFFFF
49
#define ATH6KL_APSD_NUM_OF_AC 0x4
50
#define ATH6KL_APSD_FRAME_MASK 0xF
51
52
/* Extra bytes for htc header alignment */
53
#define ATH6KL_HTC_ALIGN_BYTES 3
54
55
/* MAX_HI_COOKIE_NUM are reserved for high priority traffic */
56
#define MAX_DEF_COOKIE_NUM 180
57
#define MAX_HI_COOKIE_NUM 18
/* 10% of MAX_COOKIE_NUM */
58
#define MAX_COOKIE_NUM (MAX_DEF_COOKIE_NUM + MAX_HI_COOKIE_NUM)
59
60
#define MAX_DEFAULT_SEND_QUEUE_DEPTH (MAX_DEF_COOKIE_NUM / WMM_NUM_AC)
61
62
#define DISCON_TIMER_INTVAL 10000
/* in msec */
63
64
/* Channel dwell time in fg scan */
65
#define ATH6KL_FG_SCAN_INTERVAL 50
/* in ms */
66
67
/* includes also the null byte */
68
#define ATH6KL_FIRMWARE_MAGIC "QCA-ATH6KL"
69
70
enum
ath6kl_fw_ie_type
{
71
ATH6KL_FW_IE_FW_VERSION
= 0,
72
ATH6KL_FW_IE_TIMESTAMP
= 1,
73
ATH6KL_FW_IE_OTP_IMAGE
= 2,
74
ATH6KL_FW_IE_FW_IMAGE
= 3,
75
ATH6KL_FW_IE_PATCH_IMAGE
= 4,
76
ATH6KL_FW_IE_RESERVED_RAM_SIZE
= 5,
77
ATH6KL_FW_IE_CAPABILITIES
= 6,
78
ATH6KL_FW_IE_PATCH_ADDR
= 7,
79
ATH6KL_FW_IE_BOARD_ADDR
= 8,
80
ATH6KL_FW_IE_VIF_MAX
= 9,
81
};
82
83
enum
ath6kl_fw_capability
{
84
ATH6KL_FW_CAPABILITY_HOST_P2P
= 0,
85
ATH6KL_FW_CAPABILITY_SCHED_SCAN
= 1,
86
87
/*
88
* Firmware is capable of supporting P2P mgmt operations on a
89
* station interface. After group formation, the station
90
* interface will become a P2P client/GO interface as the case may be
91
*/
92
ATH6KL_FW_CAPABILITY_STA_P2PDEV_DUPLEX
,
93
94
/*
95
* Firmware has support to cleanup inactive stations
96
* in AP mode.
97
*/
98
ATH6KL_FW_CAPABILITY_INACTIVITY_TIMEOUT
,
99
100
/* Firmware has support to override rsn cap of rsn ie */
101
ATH6KL_FW_CAPABILITY_RSN_CAP_OVERRIDE
,
102
103
/*
104
* Multicast support in WOW and host awake mode.
105
* Allow all multicast in host awake mode.
106
* Apply multicast filter in WOW mode.
107
*/
108
ATH6KL_FW_CAPABILITY_WOW_MULTICAST_FILTER
,
109
110
/* Firmware supports enhanced bmiss detection */
111
ATH6KL_FW_CAPABILITY_BMISS_ENHANCE
,
112
113
/*
114
* FW supports matching of ssid in schedule scan
115
*/
116
ATH6KL_FW_CAPABILITY_SCHED_SCAN_MATCH_LIST
,
117
118
/* this needs to be last */
119
ATH6KL_FW_CAPABILITY_MAX
,
120
};
121
122
#define ATH6KL_CAPABILITY_LEN (ALIGN(ATH6KL_FW_CAPABILITY_MAX, 32) / 32)
123
124
struct
ath6kl_fw_ie
{
125
__le32
id
;
126
__le32
len
;
127
u8
data
[0];
128
};
129
130
enum
ath6kl_hw_flags
{
131
ATH6KL_HW_FLAG_64BIT_RATES
=
BIT
(0),
132
};
133
134
#define ATH6KL_FW_API2_FILE "fw-2.bin"
135
#define ATH6KL_FW_API3_FILE "fw-3.bin"
136
137
/* AR6003 1.0 definitions */
138
#define AR6003_HW_1_0_VERSION 0x300002ba
139
140
/* AR6003 2.0 definitions */
141
#define AR6003_HW_2_0_VERSION 0x30000384
142
#define AR6003_HW_2_0_PATCH_DOWNLOAD_ADDRESS 0x57e910
143
#define AR6003_HW_2_0_FW_DIR "ath6k/AR6003/hw2.0"
144
#define AR6003_HW_2_0_OTP_FILE "otp.bin.z77"
145
#define AR6003_HW_2_0_FIRMWARE_FILE "athwlan.bin.z77"
146
#define AR6003_HW_2_0_TCMD_FIRMWARE_FILE "athtcmd_ram.bin"
147
#define AR6003_HW_2_0_PATCH_FILE "data.patch.bin"
148
#define AR6003_HW_2_0_BOARD_DATA_FILE AR6003_HW_2_0_FW_DIR "/bdata.bin"
149
#define AR6003_HW_2_0_DEFAULT_BOARD_DATA_FILE \
150
AR6003_HW_2_0_FW_DIR "/bdata.SD31.bin"
151
152
/* AR6003 3.0 definitions */
153
#define AR6003_HW_2_1_1_VERSION 0x30000582
154
#define AR6003_HW_2_1_1_FW_DIR "ath6k/AR6003/hw2.1.1"
155
#define AR6003_HW_2_1_1_OTP_FILE "otp.bin"
156
#define AR6003_HW_2_1_1_FIRMWARE_FILE "athwlan.bin"
157
#define AR6003_HW_2_1_1_TCMD_FIRMWARE_FILE "athtcmd_ram.bin"
158
#define AR6003_HW_2_1_1_UTF_FIRMWARE_FILE "utf.bin"
159
#define AR6003_HW_2_1_1_TESTSCRIPT_FILE "nullTestFlow.bin"
160
#define AR6003_HW_2_1_1_PATCH_FILE "data.patch.bin"
161
#define AR6003_HW_2_1_1_BOARD_DATA_FILE AR6003_HW_2_1_1_FW_DIR "/bdata.bin"
162
#define AR6003_HW_2_1_1_DEFAULT_BOARD_DATA_FILE \
163
AR6003_HW_2_1_1_FW_DIR "/bdata.SD31.bin"
164
165
/* AR6004 1.0 definitions */
166
#define AR6004_HW_1_0_VERSION 0x30000623
167
#define AR6004_HW_1_0_FW_DIR "ath6k/AR6004/hw1.0"
168
#define AR6004_HW_1_0_FIRMWARE_FILE "fw.ram.bin"
169
#define AR6004_HW_1_0_BOARD_DATA_FILE AR6004_HW_1_0_FW_DIR "/bdata.bin"
170
#define AR6004_HW_1_0_DEFAULT_BOARD_DATA_FILE \
171
AR6004_HW_1_0_FW_DIR "/bdata.DB132.bin"
172
173
/* AR6004 1.1 definitions */
174
#define AR6004_HW_1_1_VERSION 0x30000001
175
#define AR6004_HW_1_1_FW_DIR "ath6k/AR6004/hw1.1"
176
#define AR6004_HW_1_1_FIRMWARE_FILE "fw.ram.bin"
177
#define AR6004_HW_1_1_BOARD_DATA_FILE AR6004_HW_1_1_FW_DIR "/bdata.bin"
178
#define AR6004_HW_1_1_DEFAULT_BOARD_DATA_FILE \
179
AR6004_HW_1_1_FW_DIR "/bdata.DB132.bin"
180
181
/* AR6004 1.2 definitions */
182
#define AR6004_HW_1_2_VERSION 0x300007e8
183
#define AR6004_HW_1_2_FW_DIR "ath6k/AR6004/hw1.2"
184
#define AR6004_HW_1_2_FIRMWARE_FILE "fw.ram.bin"
185
#define AR6004_HW_1_2_BOARD_DATA_FILE AR6004_HW_1_2_FW_DIR "/bdata.bin"
186
#define AR6004_HW_1_2_DEFAULT_BOARD_DATA_FILE \
187
AR6004_HW_1_2_FW_DIR "/bdata.bin"
188
189
/* Per STA data, used in AP mode */
190
#define STA_PS_AWAKE BIT(0)
191
#define STA_PS_SLEEP BIT(1)
192
#define STA_PS_POLLED BIT(2)
193
#define STA_PS_APSD_TRIGGER BIT(3)
194
#define STA_PS_APSD_EOSP BIT(4)
195
196
/* HTC TX packet tagging definitions */
197
#define ATH6KL_CONTROL_PKT_TAG HTC_TX_PACKET_TAG_USER_DEFINED
198
#define ATH6KL_DATA_PKT_TAG (ATH6KL_CONTROL_PKT_TAG + 1)
199
200
#define AR6003_CUST_DATA_SIZE 16
201
202
#define AGGR_WIN_IDX(x, y) ((x) % (y))
203
#define AGGR_INCR_IDX(x, y) AGGR_WIN_IDX(((x) + 1), (y))
204
#define AGGR_DCRM_IDX(x, y) AGGR_WIN_IDX(((x) - 1), (y))
205
#define ATH6KL_MAX_SEQ_NO 0xFFF
206
#define ATH6KL_NEXT_SEQ_NO(x) (((x) + 1) & ATH6KL_MAX_SEQ_NO)
207
208
#define NUM_OF_TIDS 8
209
#define AGGR_SZ_DEFAULT 8
210
211
#define AGGR_WIN_SZ_MIN 2
212
#define AGGR_WIN_SZ_MAX 8
213
214
#define TID_WINDOW_SZ(_x) ((_x) << 1)
215
216
#define AGGR_NUM_OF_FREE_NETBUFS 16
217
218
#define AGGR_RX_TIMEOUT 100
/* in ms */
219
220
#define WMI_TIMEOUT (2 * HZ)
221
222
#define MBOX_YIELD_LIMIT 99
223
224
#define ATH6KL_DEFAULT_LISTEN_INTVAL 100
/* in TUs */
225
#define ATH6KL_DEFAULT_BMISS_TIME 1500
226
#define ATH6KL_MAX_WOW_LISTEN_INTL 300
/* in TUs */
227
#define ATH6KL_MAX_BMISS_TIME 5000
228
229
/* configuration lags */
230
/*
231
* ATH6KL_CONF_IGNORE_ERP_BARKER: Ignore the barker premable in
232
* ERP IE of beacon to determine the short premable support when
233
* sending (Re)Assoc req.
234
* ATH6KL_CONF_IGNORE_PS_FAIL_EVT_IN_SCAN: Don't send the power
235
* module state transition failure events which happen during
236
* scan, to the host.
237
*/
238
#define ATH6KL_CONF_IGNORE_ERP_BARKER BIT(0)
239
#define ATH6KL_CONF_IGNORE_PS_FAIL_EVT_IN_SCAN BIT(1)
240
#define ATH6KL_CONF_ENABLE_11N BIT(2)
241
#define ATH6KL_CONF_ENABLE_TX_BURST BIT(3)
242
#define ATH6KL_CONF_UART_DEBUG BIT(4)
243
244
#define P2P_WILDCARD_SSID_LEN 7
/* DIRECT- */
245
246
enum
wlan_low_pwr_state
{
247
WLAN_POWER_STATE_ON
,
248
WLAN_POWER_STATE_CUT_PWR
,
249
WLAN_POWER_STATE_DEEP_SLEEP
,
250
WLAN_POWER_STATE_WOW
251
};
252
253
enum
sme_state
{
254
SME_DISCONNECTED
,
255
SME_CONNECTING
,
256
SME_CONNECTED
257
};
258
259
struct
skb_hold_q
{
260
struct
sk_buff
*
skb
;
261
bool
is_amsdu
;
262
u16
seq_no
;
263
};
264
265
struct
rxtid
{
266
bool
aggr
;
267
bool
timer_mon
;
268
u16
win_sz
;
269
u16
seq_next
;
270
u32
hold_q_sz
;
271
struct
skb_hold_q
*
hold_q
;
272
struct
sk_buff_head
q
;
273
274
/*
275
* lock mainly protects seq_next and hold_q. Movement of seq_next
276
* needs to be protected between aggr_timeout() and
277
* aggr_process_recv_frm(). hold_q will be holding the pending
278
* reorder frames and it's access should also be protected.
279
* Some of the other fields like hold_q_sz, win_sz and aggr are
280
* initialized/reset when receiving addba/delba req, also while
281
* deleting aggr state all the pending buffers are flushed before
282
* resetting these fields, so there should not be any race in accessing
283
* these fields.
284
*/
285
spinlock_t
lock
;
286
};
287
288
struct
rxtid_stats
{
289
u32
num_into_aggr
;
290
u32
num_dups
;
291
u32
num_oow
;
292
u32
num_mpdu
;
293
u32
num_amsdu
;
294
u32
num_delivered
;
295
u32
num_timeouts
;
296
u32
num_hole
;
297
u32
num_bar
;
298
};
299
300
struct
aggr_info_conn
{
301
u8
aggr_sz
;
302
u8
timer_scheduled
;
303
struct
timer_list
timer
;
304
struct
net_device
*
dev
;
305
struct
rxtid
rx_tid
[
NUM_OF_TIDS
];
306
struct
rxtid_stats
stat
[
NUM_OF_TIDS
];
307
struct
aggr_info
*
aggr_info
;
308
};
309
310
struct
aggr_info
{
311
struct
aggr_info_conn
*
aggr_conn
;
312
struct
sk_buff_head
rx_amsdu_freeq
;
313
};
314
315
struct
ath6kl_wep_key
{
316
u8
key_index
;
317
u8
key_len
;
318
u8
key
[64];
319
};
320
321
#define ATH6KL_KEY_SEQ_LEN 8
322
323
struct
ath6kl_key
{
324
u8
key
[
WLAN_MAX_KEY_LEN
];
325
u8
key_len
;
326
u8
seq
[
ATH6KL_KEY_SEQ_LEN
];
327
u8
seq_len
;
328
u32
cipher
;
329
};
330
331
struct
ath6kl_node_mapping
{
332
u8
mac_addr
[
ETH_ALEN
];
333
u8
ep_id
;
334
u8
tx_pend
;
335
};
336
337
struct
ath6kl_cookie
{
338
struct
sk_buff
*
skb
;
339
u32
map_no
;
340
struct
htc_packet
htc_pkt
;
341
struct
ath6kl_cookie
*
arc_list_next
;
342
};
343
344
struct
ath6kl_mgmt_buff
{
345
struct
list_head
list
;
346
u32
freq
;
347
u32
wait
;
348
u32
id
;
349
bool
no_cck
;
350
size_t
len
;
351
u8
buf
[0];
352
};
353
354
struct
ath6kl_sta
{
355
u16
sta_flags
;
356
u8
mac
[
ETH_ALEN
];
357
u8
aid
;
358
u8
keymgmt
;
359
u8
ucipher
;
360
u8
auth
;
361
u8
wpa_ie
[
ATH6KL_MAX_IE
];
362
struct
sk_buff_head
psq
;
363
364
/* protects psq, mgmt_psq, apsdq, and mgmt_psq_len fields */
365
spinlock_t
psq_lock
;
366
367
struct
list_head
mgmt_psq
;
368
size_t
mgmt_psq_len
;
369
u8
apsd_info
;
370
struct
sk_buff_head
apsdq
;
371
struct
aggr_info_conn
*
aggr_conn
;
372
};
373
374
struct
ath6kl_version
{
375
u32
target_ver
;
376
u32
wlan_ver
;
377
u32
abi_ver
;
378
};
379
380
struct
ath6kl_bmi
{
381
u32
cmd_credits
;
382
bool
done_sent
;
383
u8
*
cmd_buf
;
384
u32
max_data_size
;
385
u32
max_cmd_size
;
386
};
387
388
struct
target_stats
{
389
u64
tx_pkt
;
390
u64
tx_byte
;
391
u64
tx_ucast_pkt
;
392
u64
tx_ucast_byte
;
393
u64
tx_mcast_pkt
;
394
u64
tx_mcast_byte
;
395
u64
tx_bcast_pkt
;
396
u64
tx_bcast_byte
;
397
u64
tx_rts_success_cnt
;
398
u64
tx_pkt_per_ac
[4];
399
400
u64
tx_err
;
401
u64
tx_fail_cnt
;
402
u64
tx_retry_cnt
;
403
u64
tx_mult_retry_cnt
;
404
u64
tx_rts_fail_cnt
;
405
406
u64
rx_pkt
;
407
u64
rx_byte
;
408
u64
rx_ucast_pkt
;
409
u64
rx_ucast_byte
;
410
u64
rx_mcast_pkt
;
411
u64
rx_mcast_byte
;
412
u64
rx_bcast_pkt
;
413
u64
rx_bcast_byte
;
414
u64
rx_frgment_pkt
;
415
416
u64
rx_err
;
417
u64
rx_crc_err
;
418
u64
rx_key_cache_miss
;
419
u64
rx_decrypt_err
;
420
u64
rx_dupl_frame
;
421
422
u64
tkip_local_mic_fail
;
423
u64
tkip_cnter_measures_invoked
;
424
u64
tkip_replays
;
425
u64
tkip_fmt_err
;
426
u64
ccmp_fmt_err
;
427
u64
ccmp_replays
;
428
429
u64
pwr_save_fail_cnt
;
430
431
u64
cs_bmiss_cnt
;
432
u64
cs_low_rssi_cnt
;
433
u64
cs_connect_cnt
;
434
u64
cs_discon_cnt
;
435
436
s32
tx_ucast_rate
;
437
s32
rx_ucast_rate
;
438
439
u32
lq_val
;
440
441
u32
wow_pkt_dropped
;
442
u16
wow_evt_discarded
;
443
444
s16
noise_floor_calib
;
445
s16
cs_rssi
;
446
s16
cs_ave_beacon_rssi
;
447
u8
cs_ave_beacon_snr
;
448
u8
cs_last_roam_msec
;
449
u8
cs_snr
;
450
451
u8
wow_host_pkt_wakeups
;
452
u8
wow_host_evt_wakeups
;
453
454
u32
arp_received
;
455
u32
arp_matched
;
456
u32
arp_replied
;
457
};
458
459
struct
ath6kl_mbox_info
{
460
u32
htc_addr
;
461
u32
htc_ext_addr
;
462
u32
htc_ext_sz
;
463
464
u32
block_size
;
465
466
u32
gmbox_addr
;
467
468
u32
gmbox_sz
;
469
};
470
471
/*
472
* 802.11i defines an extended IV for use with non-WEP ciphers.
473
* When the EXTIV bit is set in the key id byte an additional
474
* 4 bytes immediately follow the IV for TKIP. For CCMP the
475
* EXTIV bit is likewise set but the 8 bytes represent the
476
* CCMP header rather than IV+extended-IV.
477
*/
478
479
#define ATH6KL_KEYBUF_SIZE 16
480
#define ATH6KL_MICBUF_SIZE (8+8)
/* space for both tx and rx */
481
482
#define ATH6KL_KEY_XMIT 0x01
483
#define ATH6KL_KEY_RECV 0x02
484
#define ATH6KL_KEY_DEFAULT 0x80
/* default xmit key */
485
486
/* Initial group key for AP mode */
487
struct
ath6kl_req_key
{
488
bool
valid
;
489
u8
key_index
;
490
int
key_type
;
491
u8
key
[
WLAN_MAX_KEY_LEN
];
492
u8
key_len
;
493
};
494
495
enum
ath6kl_hif_type
{
496
ATH6KL_HIF_TYPE_SDIO
,
497
ATH6KL_HIF_TYPE_USB
,
498
};
499
500
enum
ath6kl_htc_type
{
501
ATH6KL_HTC_TYPE_MBOX
,
502
ATH6KL_HTC_TYPE_PIPE
,
503
};
504
505
/* Max number of filters that hw supports */
506
#define ATH6K_MAX_MC_FILTERS_PER_LIST 7
507
struct
ath6kl_mc_filter
{
508
struct
list_head
list
;
509
char
hw_addr
[
ATH6KL_MCAST_FILTER_MAC_ADDR_SIZE
];
510
};
511
512
struct
ath6kl_htcap
{
513
bool
ht_enable
;
514
u8
ampdu_factor
;
515
unsigned
short
cap_info
;
516
};
517
518
/*
519
* Driver's maximum limit, note that some firmwares support only one vif
520
* and the runtime (current) limit must be checked from ar->vif_max.
521
*/
522
#define ATH6KL_VIF_MAX 3
523
524
/* vif flags info */
525
enum
ath6kl_vif_state
{
526
CONNECTED
,
527
CONNECT_PEND
,
528
WMM_ENABLED
,
529
NETQ_STOPPED
,
530
DTIM_EXPIRED
,
531
NETDEV_REGISTERED
,
532
CLEAR_BSSFILTER_ON_BEACON
,
533
DTIM_PERIOD_AVAIL
,
534
WLAN_ENABLED
,
535
STATS_UPDATE_PEND
,
536
HOST_SLEEP_MODE_CMD_PROCESSED
,
537
NETDEV_MCAST_ALL_ON
,
538
NETDEV_MCAST_ALL_OFF
,
539
};
540
541
struct
ath6kl_vif
{
542
struct
list_head
list
;
543
struct
wireless_dev
wdev
;
544
struct
net_device
*
ndev
;
545
struct
ath6kl
*
ar
;
546
/* Lock to protect vif specific net_stats and flags */
547
spinlock_t
if_lock
;
548
u8
fw_vif_idx
;
549
unsigned
long
flags
;
550
int
ssid_len
;
551
u8
ssid
[
IEEE80211_MAX_SSID_LEN
];
552
u8
dot11_auth_mode
;
553
u8
auth_mode
;
554
u8
prwise_crypto
;
555
u8
prwise_crypto_len
;
556
u8
grp_crypto
;
557
u8
grp_crypto_len
;
558
u8
def_txkey_index
;
559
u8
next_mode
;
560
u8
nw_type
;
561
u8
bssid
[
ETH_ALEN
];
562
u8
req_bssid
[
ETH_ALEN
];
563
u16
ch_hint
;
564
u16
bss_ch
;
565
struct
ath6kl_wep_key
wep_key_list
[
WMI_MAX_KEY_INDEX
+ 1];
566
struct
ath6kl_key
keys
[
WMI_MAX_KEY_INDEX
+ 1];
567
struct
aggr_info
*
aggr_cntxt
;
568
struct
ath6kl_htcap
htcap
[
IEEE80211_NUM_BANDS
];
569
570
struct
timer_list
disconnect_timer
;
571
struct
timer_list
sched_scan_timer
;
572
573
struct
cfg80211_scan_request
*
scan_req
;
574
enum
sme_state
sme_state
;
575
int
reconnect_flag
;
576
u32
last_roc_id
;
577
u32
last_cancel_roc_id
;
578
u32
send_action_id
;
579
bool
probe_req_report
;
580
u16
assoc_bss_beacon_int
;
581
u16
listen_intvl_t
;
582
u16
bmiss_time_t
;
583
u16
bg_scan_period
;
584
u8
assoc_bss_dtim_period
;
585
struct
net_device_stats
net_stats
;
586
struct
target_stats
target_stats
;
587
struct
wmi_connect_cmd
profile
;
588
589
struct
list_head
mc_filter
;
590
};
591
592
static
inline
struct
ath6kl_vif
*ath6kl_vif_from_wdev(
struct
wireless_dev
*
wdev
)
593
{
594
return
container_of
(wdev,
struct
ath6kl_vif
, wdev);
595
}
596
597
#define WOW_LIST_ID 0
598
#define WOW_HOST_REQ_DELAY 500
/* ms */
599
600
#define ATH6KL_SCHED_SCAN_RESULT_DELAY 5000
/* ms */
601
602
/* Flag info */
603
enum
ath6kl_dev_state
{
604
WMI_ENABLED
,
605
WMI_READY
,
606
WMI_CTRL_EP_FULL
,
607
TESTMODE
,
608
DESTROY_IN_PROGRESS
,
609
SKIP_SCAN
,
610
ROAM_TBL_PEND
,
611
FIRST_BOOT
,
612
};
613
614
enum
ath6kl_state
{
615
ATH6KL_STATE_OFF
,
616
ATH6KL_STATE_ON
,
617
ATH6KL_STATE_SUSPENDING
,
618
ATH6KL_STATE_RESUMING
,
619
ATH6KL_STATE_DEEPSLEEP
,
620
ATH6KL_STATE_CUTPOWER
,
621
ATH6KL_STATE_WOW
,
622
ATH6KL_STATE_SCHED_SCAN
,
623
};
624
625
struct
ath6kl
{
626
struct
device
*
dev
;
627
struct
wiphy
*
wiphy
;
628
629
enum
ath6kl_state
state
;
630
unsigned
int
testmode
;
631
632
struct
ath6kl_bmi
bmi
;
633
const
struct
ath6kl_hif_ops
*
hif_ops
;
634
const
struct
ath6kl_htc_ops
*
htc_ops
;
635
struct
wmi
*
wmi
;
636
int
tx_pending
[
ENDPOINT_MAX
];
637
int
total_tx_data_pend
;
638
struct
htc_target
*
htc_target
;
639
enum
ath6kl_hif_type
hif_type
;
640
void
*
hif_priv
;
641
struct
list_head
vif_list
;
642
/* Lock to avoid race in vif_list entries among add/del/traverse */
643
spinlock_t
list_lock
;
644
u8
num_vif
;
645
unsigned
int
vif_max
;
646
u8
max_norm_iface
;
647
u8
avail_idx_map
;
648
649
/*
650
* Protects at least amsdu_rx_buffer_queue, ath6kl_alloc_cookie()
651
* calls, tx_pending and total_tx_data_pend.
652
*/
653
spinlock_t
lock
;
654
655
struct
semaphore
sem
;
656
u8
lrssi_roam_threshold
;
657
struct
ath6kl_version
version
;
658
u32
target_type
;
659
u8
tx_pwr
;
660
struct
ath6kl_node_mapping
node_map
[
MAX_NODE_NUM
];
661
u8
ibss_ps_enable
;
662
bool
ibss_if_active
;
663
u8
node_num
;
664
u8
next_ep_id
;
665
struct
ath6kl_cookie
*
cookie_list
;
666
u32
cookie_count
;
667
enum
htc_endpoint_id
ac2ep_map
[
WMM_NUM_AC
];
668
bool
ac_stream_active
[
WMM_NUM_AC
];
669
u8
ac_stream_pri_map
[
WMM_NUM_AC
];
670
u8
hiac_stream_active_pri
;
671
u8
ep2ac_map
[
ENDPOINT_MAX
];
672
enum
htc_endpoint_id
ctrl_ep
;
673
struct
ath6kl_htc_credit_info
credit_state_info
;
674
u32
connect_ctrl_flags
;
675
u32
user_key_ctrl
;
676
u8
usr_bss_filter
;
677
struct
ath6kl_sta
sta_list
[
AP_MAX_NUM_STA
];
678
u8
sta_list_index
;
679
struct
ath6kl_req_key
ap_mode_bkey
;
680
struct
sk_buff_head
mcastpsq
;
681
u32
want_ch_switch
;
682
683
/*
684
* FIXME: protects access to mcastpsq but is actually useless as
685
* all skbe_queue_*() functions provide serialisation themselves
686
*/
687
spinlock_t
mcastpsq_lock
;
688
689
u8
intra_bss
;
690
struct
wmi_ap_mode_stat
ap_stats
;
691
u8
ap_country_code
[3];
692
struct
list_head
amsdu_rx_buffer_queue
;
693
u8
rx_meta_ver
;
694
enum
wlan_low_pwr_state
wlan_pwr_state
;
695
u8
mac_addr
[
ETH_ALEN
];
696
#define AR_MCAST_FILTER_MAC_ADDR_SIZE 4
697
struct
{
698
void
*
rx_report
;
699
size_t
rx_report_len
;
700
}
tm
;
701
702
struct
ath6kl_hw
{
703
u32
id
;
704
const
char
*
name
;
705
u32
dataset_patch_addr
;
706
u32
app_load_addr
;
707
u32
app_start_override_addr
;
708
u32
board_ext_data_addr
;
709
u32
reserved_ram_size
;
710
u32
board_addr
;
711
u32
refclk_hz
;
712
u32
uarttx_pin
;
713
u32
testscript_addr
;
714
enum
wmi_phy_cap
cap
;
715
716
u32
flags
;
717
718
struct
ath6kl_hw_fw
{
719
const
char
*
dir
;
720
const
char
*
otp
;
721
const
char
*
fw
;
722
const
char
*
tcmd
;
723
const
char
*
patch
;
724
const
char
*
utf
;
725
const
char
*
testscript
;
726
}
fw
;
727
728
const
char
*
fw_board
;
729
const
char
*
fw_default_board
;
730
}
hw
;
731
732
u16
conf_flags
;
733
u16
suspend_mode
;
734
u16
wow_suspend_mode
;
735
wait_queue_head_t
event_wq
;
736
struct
ath6kl_mbox_info
mbox_info
;
737
738
struct
ath6kl_cookie
cookie_mem
[
MAX_COOKIE_NUM
];
739
unsigned
long
flag
;
740
741
u8
*
fw_board
;
742
size_t
fw_board_len
;
743
744
u8
*
fw_otp
;
745
size_t
fw_otp_len
;
746
747
u8
*
fw
;
748
size_t
fw_len
;
749
750
u8
*
fw_patch
;
751
size_t
fw_patch_len
;
752
753
u8
*
fw_testscript
;
754
size_t
fw_testscript_len
;
755
756
unsigned
int
fw_api
;
757
unsigned
long
fw_capabilities
[
ATH6KL_CAPABILITY_LEN
];
758
759
struct
workqueue_struct
*
ath6kl_wq
;
760
761
struct
dentry
*
debugfs_phy
;
762
763
bool
p2p
;
764
765
bool
wiphy_registered
;
766
767
#ifdef CONFIG_ATH6KL_DEBUG
768
struct
{
769
struct
sk_buff_head
fwlog_queue;
770
struct
completion
fwlog_completion;
771
bool
fwlog_open;
772
773
u32
fwlog_mask;
774
775
unsigned
int
dbgfs_diag_reg;
776
u32
diag_reg_addr_wr;
777
u32
diag_reg_val_wr;
778
779
struct
{
780
unsigned
int
invalid_rate;
781
} war_stats;
782
783
u8
*roam_tbl;
784
unsigned
int
roam_tbl_len;
785
786
u8
keepalive;
787
u8
disc_timeout;
788
}
debug
;
789
#endif
/* CONFIG_ATH6KL_DEBUG */
790
};
791
792
static
inline
struct
ath6kl
*ath6kl_priv(
struct
net_device
*
dev
)
793
{
794
return
((
struct
ath6kl_vif
*) netdev_priv(dev))->ar;
795
}
796
797
static
inline
u32
ath6kl_get_hi_item_addr(
struct
ath6kl
*
ar
,
798
u32
item_offset)
799
{
800
u32
addr
= 0;
801
802
if
(ar->
target_type
==
TARGET_TYPE_AR6003
)
803
addr =
ATH6KL_AR6003_HI_START_ADDR
+ item_offset;
804
else
if
(ar->
target_type
==
TARGET_TYPE_AR6004
)
805
addr =
ATH6KL_AR6004_HI_START_ADDR
+ item_offset;
806
807
return
addr
;
808
}
809
810
int
ath6kl_configure_target
(
struct
ath6kl
*ar);
811
void
ath6kl_detect_error
(
unsigned
long
ptr
);
812
void
disconnect_timer_handler
(
unsigned
long
ptr
);
813
void
init_netdev
(
struct
net_device
*dev);
814
void
ath6kl_cookie_init
(
struct
ath6kl
*ar);
815
void
ath6kl_cookie_cleanup
(
struct
ath6kl
*ar);
816
void
ath6kl_rx
(
struct
htc_target
*
target
,
struct
htc_packet
*
packet
);
817
void
ath6kl_tx_complete
(
struct
htc_target
*
context
,
818
struct
list_head
*packet_queue);
819
enum
htc_send_full_action
ath6kl_tx_queue_full
(
struct
htc_target
*
target
,
820
struct
htc_packet
*
packet
);
821
void
ath6kl_stop_txrx
(
struct
ath6kl
*ar);
822
void
ath6kl_cleanup_amsdu_rxbufs
(
struct
ath6kl
*ar);
823
int
ath6kl_diag_write32
(
struct
ath6kl
*ar,
u32
address
,
__le32
value
);
824
int
ath6kl_diag_write
(
struct
ath6kl
*ar,
u32
address
,
void
*
data
,
u32
length
);
825
int
ath6kl_diag_read32
(
struct
ath6kl
*ar,
u32
address
,
u32
*
value
);
826
int
ath6kl_diag_read
(
struct
ath6kl
*ar,
u32
address
,
void
*
data
,
u32
length
);
827
int
ath6kl_read_fwlogs
(
struct
ath6kl
*ar);
828
void
ath6kl_init_profile_info
(
struct
ath6kl_vif
*vif);
829
void
ath6kl_tx_data_cleanup
(
struct
ath6kl
*ar);
830
831
struct
ath6kl_cookie
*
ath6kl_alloc_cookie
(
struct
ath6kl
*ar);
832
void
ath6kl_free_cookie
(
struct
ath6kl
*ar,
struct
ath6kl_cookie
*
cookie
);
833
int
ath6kl_data_tx
(
struct
sk_buff
*
skb
,
struct
net_device
*dev);
834
835
struct
aggr_info
*
aggr_init
(
struct
ath6kl_vif
*vif);
836
void
aggr_conn_init
(
struct
ath6kl_vif
*vif,
struct
aggr_info
*
aggr_info
,
837
struct
aggr_info_conn
*
aggr_conn
);
838
void
ath6kl_rx_refill
(
struct
htc_target
*
target
,
839
enum
htc_endpoint_id
endpoint
);
840
void
ath6kl_refill_amsdu_rxbufs
(
struct
ath6kl
*ar,
int
count
);
841
struct
htc_packet
*
ath6kl_alloc_amsdu_rxbuf
(
struct
htc_target
*
target
,
842
enum
htc_endpoint_id
endpoint
,
843
int
len);
844
void
aggr_module_destroy
(
struct
aggr_info
*
aggr_info
);
845
void
aggr_reset_state
(
struct
aggr_info_conn
*aggr_conn);
846
847
struct
ath6kl_sta
*
ath6kl_find_sta
(
struct
ath6kl_vif
*vif,
u8
*node_addr);
848
struct
ath6kl_sta
*
ath6kl_find_sta_by_aid
(
struct
ath6kl
*ar,
u8
aid
);
849
850
void
ath6kl_ready_event
(
void
*
devt
,
u8
*datap,
u32
sw_ver,
u32
abi_ver
,
851
enum
wmi_phy_cap
cap
);
852
int
ath6kl_control_tx
(
void
*
devt
,
struct
sk_buff
*
skb
,
853
enum
htc_endpoint_id
eid);
854
void
ath6kl_connect_event
(
struct
ath6kl_vif
*vif,
u16
channel
,
855
u8
*
bssid
,
u16
listen_int,
856
u16
beacon_int
,
enum
network_type
net_type,
857
u8
beacon_ie_len,
u8
assoc_req_len,
858
u8
assoc_resp_len,
u8
*assoc_info);
859
void
ath6kl_connect_ap_mode_bss
(
struct
ath6kl_vif
*vif,
u16
channel
);
860
void
ath6kl_connect_ap_mode_sta
(
struct
ath6kl_vif
*vif,
u16
aid
,
u8
*
mac_addr
,
861
u8
keymgmt
,
u8
ucipher
,
u8
auth
,
862
u8
assoc_req_len,
u8
*assoc_info,
u8
apsd_info
);
863
void
ath6kl_disconnect_event
(
struct
ath6kl_vif
*vif,
u8
reason
,
864
u8
*
bssid
,
u8
assoc_resp_len,
865
u8
*assoc_info,
u16
prot_reason_status);
866
void
ath6kl_tkip_micerr_event
(
struct
ath6kl_vif
*vif,
u8
keyid,
bool
ismcast);
867
void
ath6kl_txpwr_rx_evt
(
void
*
devt
,
u8
tx_pwr);
868
void
ath6kl_scan_complete_evt
(
struct
ath6kl_vif
*vif,
int
status
);
869
void
ath6kl_tgt_stats_event
(
struct
ath6kl_vif
*vif,
u8
*
ptr
,
u32
len);
870
void
ath6kl_indicate_tx_activity
(
void
*
devt
,
u8
traffic_class,
bool
active
);
871
enum
htc_endpoint_id
ath6kl_ac2_endpoint_id
(
void
*
devt
,
u8
ac
);
872
873
void
ath6kl_pspoll_event
(
struct
ath6kl_vif
*vif,
u8
aid
);
874
875
void
ath6kl_dtimexpiry_event
(
struct
ath6kl_vif
*vif);
876
void
ath6kl_disconnect
(
struct
ath6kl_vif
*vif);
877
void
aggr_recv_delba_req_evt
(
struct
ath6kl_vif
*vif,
u8
tid);
878
void
aggr_recv_addba_req_evt
(
struct
ath6kl_vif
*vif,
u8
tid,
u16
seq_no
,
879
u8
win_sz);
880
void
ath6kl_wakeup_event
(
void
*dev);
881
882
void
ath6kl_reset_device
(
struct
ath6kl
*ar,
u32
target_type
,
883
bool
wait_fot_compltn,
bool
cold_reset);
884
void
ath6kl_init_control_info
(
struct
ath6kl_vif
*vif);
885
struct
ath6kl_vif
*
ath6kl_vif_first
(
struct
ath6kl
*ar);
886
void
ath6kl_cleanup_vif
(
struct
ath6kl_vif
*vif,
bool
wmi_ready);
887
int
ath6kl_init_hw_start
(
struct
ath6kl
*ar);
888
int
ath6kl_init_hw_stop
(
struct
ath6kl
*ar);
889
int
ath6kl_init_fetch_firmwares
(
struct
ath6kl
*ar);
890
int
ath6kl_init_hw_params
(
struct
ath6kl
*ar);
891
892
void
ath6kl_check_wow_status
(
struct
ath6kl
*ar);
893
894
void
ath6kl_core_tx_complete
(
struct
ath6kl
*ar,
struct
sk_buff
*
skb
);
895
void
ath6kl_core_rx_complete
(
struct
ath6kl
*ar,
struct
sk_buff
*
skb
,
u8
pipe
);
896
897
struct
ath6kl
*
ath6kl_core_create
(
struct
device
*dev);
898
int
ath6kl_core_init
(
struct
ath6kl
*ar,
enum
ath6kl_htc_type
htc_type);
899
void
ath6kl_core_cleanup
(
struct
ath6kl
*ar);
900
void
ath6kl_core_destroy
(
struct
ath6kl
*ar);
901
902
#endif
/* CORE_H */
Generated on Thu Jan 10 2013 12:58:10 for Linux Kernel by
1.8.2