~ubuntu-branches/ubuntu/trusty/linux-armadaxp/trusty

« back to all changes in this revision

Viewing changes to drivers/net/wireless/ath/ath6kl/core.h

  • Committer: Package Import Robot
  • Author(s): Michael Casadevall, Bryan Wu, Dann Frazier, Michael Casadeall
  • Date: 2012-03-10 15:00:54 UTC
  • mfrom: (1.1.1)
  • Revision ID: package-import@ubuntu.com-20120310150054-flugb39zon8vvgwe
Tags: 3.2.0-1600.1
[ Bryan Wu ]
* UBUNTU: import debian/debian.env and debian.armadaxp

[ Dann Frazier ]
* ARM: Armada XP: remove trailing '/' in dirnames in mvRules.mk

[ Michael Casadeall ]
* tools: add some tools for Marvell Armada XP processor
* kernel: timer tick hacking from Marvell
* kernel: Sheeva Errata: add delay on Sheeva when powering down
* net: add Marvell NFP netfilter
* net: socket and skb modifications made by Marvell
* miscdevice: add minor IDs for some Marvell Armada drivers
* fs: introduce memory pool for splice()
* video: EDID detection updates from Marvell Armada XP patchset
* video: backlight: add Marvell Dove LCD backlight driver
* video: display: add THS8200 display driver
* video: framebuffer: add Marvell Dove and Armada XP processor onchip LCD controller driver
* usbtest: add Interrupt transfer testing by Marvell Armada XP code
* usb: ehci: add support for Marvell EHCI controler
* tty/serial: 8250: add support for Marvell Armada XP processor and DeviceTree work
* rtc: add support for Marvell Armada XP onchip RTC controller
* net: pppoe: add Marvell ethernet NFP hook in PPPoE networking driver
* mtd: nand: add support for Marvell Armada XP Nand Flash Controller
* mtd: maps: add Marvell Armada XP specific map driver
* mmc: add support for Marvell Armada XP MMC/SD host controller
* i2c: add support for Marvell Armada XP onchip i2c bus controller
* hwmon: add Kconfig option for Armada XP onchip thermal sensor driver
* dmaengine: add Net DMA support for splice and update Marvell XOR DMA engine driver
* ata: add support for Marvell Armada XP SATA controller and update some quirks
* ARM: add Marvell Armada XP machine to mach-types
* ARM: oprofile: add support for Marvell PJ4B core
* ARM: mm: more ARMv6 switches for Marvell Armada XP
* ARM: remove static declaration to allow compilation
* ARM: alignment access fault trick
* ARM: mm: skip some fault fixing when run on NONE SMP ARMv6 mode during early abort event
* ARM: mm: add Marvell Sheeva CPU Architecture for PJ4B
* ARM: introduce optimized copy operation for Marvell Armada XP
* ARM: SAUCE: hardware breakpoint trick for Marvell Armada XP
* ARM: big endian and little endian tricks for Marvell Armada XP
* ARM: SAUCE: Add Marvell Armada XP build rules to arch/arm/kernel/Makefile
* ARM: vfp: add special handling for Marvell Armada XP
* ARM: add support for Marvell U-Boot
* ARM: add mv_controller_num for ARM PCI drivers
* ARM: add support for local PMUs, general SMP tweaks and cache flushing
* ARM: add Marvell device identifies in glue-proc.h
* ARM: add IPC driver support for Marvell platforms
* ARM: add DMA mapping for Marvell platforms
* ARM: add Sheeva errata and PJ4B code for booting
* ARM: update Kconfig and Makefile to include Marvell Armada XP platforms
* ARM: Armada XP: import LSP from Marvell for Armada XP 3.2 kernel enablement

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (c) 2010-2011 Atheros Communications Inc.
 
3
 *
 
4
 * Permission to use, copy, modify, and/or distribute this software for any
 
5
 * purpose with or without fee is hereby granted, provided that the above
 
6
 * copyright notice and this permission notice appear in all copies.
 
7
 *
 
8
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 
9
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 
10
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 
11
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 
12
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 
13
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 
14
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
15
 */
 
16
 
 
17
#ifndef CORE_H
 
18
#define CORE_H
 
19
 
 
20
#include <linux/etherdevice.h>
 
21
#include <linux/rtnetlink.h>
 
22
#include <linux/firmware.h>
 
23
#include <linux/sched.h>
 
24
#include <linux/circ_buf.h>
 
25
#include <net/cfg80211.h>
 
26
#include "htc.h"
 
27
#include "wmi.h"
 
28
#include "bmi.h"
 
29
#include "target.h"
 
30
 
 
31
#define MAX_ATH6KL                        1
 
32
#define ATH6KL_MAX_RX_BUFFERS             16
 
33
#define ATH6KL_BUFFER_SIZE                1664
 
34
#define ATH6KL_MAX_AMSDU_RX_BUFFERS       4
 
35
#define ATH6KL_AMSDU_REFILL_THRESHOLD     3
 
36
#define ATH6KL_AMSDU_BUFFER_SIZE     (WMI_MAX_AMSDU_RX_DATA_FRAME_LENGTH + 128)
 
37
#define MAX_MSDU_SUBFRAME_PAYLOAD_LEN   1508
 
38
#define MIN_MSDU_SUBFRAME_PAYLOAD_LEN   46
 
39
 
 
40
#define USER_SAVEDKEYS_STAT_INIT     0
 
41
#define USER_SAVEDKEYS_STAT_RUN      1
 
42
 
 
43
#define ATH6KL_TX_TIMEOUT      10
 
44
#define ATH6KL_MAX_ENDPOINTS   4
 
45
#define MAX_NODE_NUM           15
 
46
 
 
47
/* Extra bytes for htc header alignment */
 
48
#define ATH6KL_HTC_ALIGN_BYTES 3
 
49
 
 
50
/* MAX_HI_COOKIE_NUM are reserved for high priority traffic */
 
51
#define MAX_DEF_COOKIE_NUM                180
 
52
#define MAX_HI_COOKIE_NUM                 18    /* 10% of MAX_COOKIE_NUM */
 
53
#define MAX_COOKIE_NUM                 (MAX_DEF_COOKIE_NUM + MAX_HI_COOKIE_NUM)
 
54
 
 
55
#define MAX_DEFAULT_SEND_QUEUE_DEPTH      (MAX_DEF_COOKIE_NUM / WMM_NUM_AC)
 
56
 
 
57
#define DISCON_TIMER_INTVAL               10000  /* in msec */
 
58
#define A_DEFAULT_LISTEN_INTERVAL         100
 
59
#define A_MAX_WOW_LISTEN_INTERVAL         1000
 
60
 
 
61
/* includes also the null byte */
 
62
#define ATH6KL_FIRMWARE_MAGIC               "QCA-ATH6KL"
 
63
 
 
64
enum ath6kl_fw_ie_type {
 
65
        ATH6KL_FW_IE_FW_VERSION = 0,
 
66
        ATH6KL_FW_IE_TIMESTAMP = 1,
 
67
        ATH6KL_FW_IE_OTP_IMAGE = 2,
 
68
        ATH6KL_FW_IE_FW_IMAGE = 3,
 
69
        ATH6KL_FW_IE_PATCH_IMAGE = 4,
 
70
        ATH6KL_FW_IE_RESERVED_RAM_SIZE = 5,
 
71
        ATH6KL_FW_IE_CAPABILITIES = 6,
 
72
        ATH6KL_FW_IE_PATCH_ADDR = 7,
 
73
};
 
74
 
 
75
enum ath6kl_fw_capability {
 
76
        ATH6KL_FW_CAPABILITY_HOST_P2P = 0,
 
77
 
 
78
        /* this needs to be last */
 
79
        ATH6KL_FW_CAPABILITY_MAX,
 
80
};
 
81
 
 
82
#define ATH6KL_CAPABILITY_LEN (ALIGN(ATH6KL_FW_CAPABILITY_MAX, 32) / 32)
 
83
 
 
84
struct ath6kl_fw_ie {
 
85
        __le32 id;
 
86
        __le32 len;
 
87
        u8 data[0];
 
88
};
 
89
 
 
90
/* AR6003 1.0 definitions */
 
91
#define AR6003_REV1_VERSION                 0x300002ba
 
92
 
 
93
/* AR6003 2.0 definitions */
 
94
#define AR6003_REV2_VERSION                 0x30000384
 
95
#define AR6003_REV2_PATCH_DOWNLOAD_ADDRESS  0x57e910
 
96
#define AR6003_REV2_OTP_FILE                "ath6k/AR6003/hw2.0/otp.bin.z77"
 
97
#define AR6003_REV2_FIRMWARE_FILE           "ath6k/AR6003/hw2.0/athwlan.bin.z77"
 
98
#define AR6003_REV2_TCMD_FIRMWARE_FILE      "ath6k/AR6003/hw2.0/athtcmd_ram.bin"
 
99
#define AR6003_REV2_PATCH_FILE              "ath6k/AR6003/hw2.0/data.patch.bin"
 
100
#define AR6003_REV2_FIRMWARE_2_FILE         "ath6k/AR6003/hw2.0/fw-2.bin"
 
101
#define AR6003_REV2_BOARD_DATA_FILE         "ath6k/AR6003/hw2.0/bdata.bin"
 
102
#define AR6003_REV2_DEFAULT_BOARD_DATA_FILE "ath6k/AR6003/hw2.0/bdata.SD31.bin"
 
103
 
 
104
/* AR6003 3.0 definitions */
 
105
#define AR6003_REV3_VERSION                 0x30000582
 
106
#define AR6003_REV3_OTP_FILE                "ath6k/AR6003/hw2.1.1/otp.bin"
 
107
#define AR6003_REV3_FIRMWARE_FILE           "ath6k/AR6003/hw2.1.1/athwlan.bin"
 
108
#define AR6003_REV3_TCMD_FIRMWARE_FILE    "ath6k/AR6003/hw2.1.1/athtcmd_ram.bin"
 
109
#define AR6003_REV3_PATCH_FILE            "ath6k/AR6003/hw2.1.1/data.patch.bin"
 
110
#define AR6003_REV3_FIRMWARE_2_FILE           "ath6k/AR6003/hw2.1.1/fw-2.bin"
 
111
#define AR6003_REV3_BOARD_DATA_FILE       "ath6k/AR6003/hw2.1.1/bdata.bin"
 
112
#define AR6003_REV3_DEFAULT_BOARD_DATA_FILE     \
 
113
        "ath6k/AR6003/hw2.1.1/bdata.SD31.bin"
 
114
 
 
115
/* AR6004 1.0 definitions */
 
116
#define AR6004_REV1_VERSION                 0x30000623
 
117
#define AR6004_REV1_FIRMWARE_FILE           "ath6k/AR6004/hw6.1/fw.ram.bin"
 
118
#define AR6004_REV1_FIRMWARE_2_FILE         "ath6k/AR6004/hw6.1/fw-2.bin"
 
119
#define AR6004_REV1_BOARD_DATA_FILE         "ath6k/AR6004/hw6.1/bdata.bin"
 
120
#define AR6004_REV1_DEFAULT_BOARD_DATA_FILE "ath6k/AR6004/hw6.1/bdata.DB132.bin"
 
121
#define AR6004_REV1_EPPING_FIRMWARE_FILE "ath6k/AR6004/hw6.1/endpointping.bin"
 
122
 
 
123
/* Per STA data, used in AP mode */
 
124
#define STA_PS_AWAKE            BIT(0)
 
125
#define STA_PS_SLEEP            BIT(1)
 
126
#define STA_PS_POLLED           BIT(2)
 
127
 
 
128
/* HTC TX packet tagging definitions */
 
129
#define ATH6KL_CONTROL_PKT_TAG    HTC_TX_PACKET_TAG_USER_DEFINED
 
130
#define ATH6KL_DATA_PKT_TAG       (ATH6KL_CONTROL_PKT_TAG + 1)
 
131
 
 
132
#define AR6003_CUST_DATA_SIZE 16
 
133
 
 
134
#define AGGR_WIN_IDX(x, y)          ((x) % (y))
 
135
#define AGGR_INCR_IDX(x, y)         AGGR_WIN_IDX(((x) + 1), (y))
 
136
#define AGGR_DCRM_IDX(x, y)         AGGR_WIN_IDX(((x) - 1), (y))
 
137
#define ATH6KL_MAX_SEQ_NO               0xFFF
 
138
#define ATH6KL_NEXT_SEQ_NO(x)           (((x) + 1) & ATH6KL_MAX_SEQ_NO)
 
139
 
 
140
#define NUM_OF_TIDS         8
 
141
#define AGGR_SZ_DEFAULT     8
 
142
 
 
143
#define AGGR_WIN_SZ_MIN     2
 
144
#define AGGR_WIN_SZ_MAX     8
 
145
 
 
146
#define TID_WINDOW_SZ(_x)   ((_x) << 1)
 
147
 
 
148
#define AGGR_NUM_OF_FREE_NETBUFS    16
 
149
 
 
150
#define AGGR_RX_TIMEOUT     400 /* in ms */
 
151
 
 
152
#define WMI_TIMEOUT (2 * HZ)
 
153
 
 
154
#define MBOX_YIELD_LIMIT 99
 
155
 
 
156
/* configuration lags */
 
157
/*
 
158
 * ATH6KL_CONF_IGNORE_ERP_BARKER: Ignore the barker premable in
 
159
 * ERP IE of beacon to determine the short premable support when
 
160
 * sending (Re)Assoc req.
 
161
 * ATH6KL_CONF_IGNORE_PS_FAIL_EVT_IN_SCAN: Don't send the power
 
162
 * module state transition failure events which happen during
 
163
 * scan, to the host.
 
164
 */
 
165
#define ATH6KL_CONF_IGNORE_ERP_BARKER           BIT(0)
 
166
#define ATH6KL_CONF_IGNORE_PS_FAIL_EVT_IN_SCAN  BIT(1)
 
167
#define ATH6KL_CONF_ENABLE_11N                  BIT(2)
 
168
#define ATH6KL_CONF_ENABLE_TX_BURST             BIT(3)
 
169
 
 
170
enum wlan_low_pwr_state {
 
171
        WLAN_POWER_STATE_ON,
 
172
        WLAN_POWER_STATE_CUT_PWR,
 
173
        WLAN_POWER_STATE_DEEP_SLEEP,
 
174
        WLAN_POWER_STATE_WOW
 
175
};
 
176
 
 
177
enum sme_state {
 
178
        SME_DISCONNECTED,
 
179
        SME_CONNECTING,
 
180
        SME_CONNECTED
 
181
};
 
182
 
 
183
struct skb_hold_q {
 
184
        struct sk_buff *skb;
 
185
        bool is_amsdu;
 
186
        u16 seq_no;
 
187
};
 
188
 
 
189
struct rxtid {
 
190
        bool aggr;
 
191
        bool progress;
 
192
        bool timer_mon;
 
193
        u16 win_sz;
 
194
        u16 seq_next;
 
195
        u32 hold_q_sz;
 
196
        struct skb_hold_q *hold_q;
 
197
        struct sk_buff_head q;
 
198
        spinlock_t lock;
 
199
};
 
200
 
 
201
struct rxtid_stats {
 
202
        u32 num_into_aggr;
 
203
        u32 num_dups;
 
204
        u32 num_oow;
 
205
        u32 num_mpdu;
 
206
        u32 num_amsdu;
 
207
        u32 num_delivered;
 
208
        u32 num_timeouts;
 
209
        u32 num_hole;
 
210
        u32 num_bar;
 
211
};
 
212
 
 
213
struct aggr_info {
 
214
        u8 aggr_sz;
 
215
        u8 timer_scheduled;
 
216
        struct timer_list timer;
 
217
        struct net_device *dev;
 
218
        struct rxtid rx_tid[NUM_OF_TIDS];
 
219
        struct sk_buff_head free_q;
 
220
        struct rxtid_stats stat[NUM_OF_TIDS];
 
221
};
 
222
 
 
223
struct ath6kl_wep_key {
 
224
        u8 key_index;
 
225
        u8 key_len;
 
226
        u8 key[64];
 
227
};
 
228
 
 
229
#define ATH6KL_KEY_SEQ_LEN 8
 
230
 
 
231
struct ath6kl_key {
 
232
        u8 key[WLAN_MAX_KEY_LEN];
 
233
        u8 key_len;
 
234
        u8 seq[ATH6KL_KEY_SEQ_LEN];
 
235
        u8 seq_len;
 
236
        u32 cipher;
 
237
};
 
238
 
 
239
struct ath6kl_node_mapping {
 
240
        u8 mac_addr[ETH_ALEN];
 
241
        u8 ep_id;
 
242
        u8 tx_pend;
 
243
};
 
244
 
 
245
struct ath6kl_cookie {
 
246
        struct sk_buff *skb;
 
247
        u32 map_no;
 
248
        struct htc_packet htc_pkt;
 
249
        struct ath6kl_cookie *arc_list_next;
 
250
};
 
251
 
 
252
struct ath6kl_sta {
 
253
        u16 sta_flags;
 
254
        u8 mac[ETH_ALEN];
 
255
        u8 aid;
 
256
        u8 keymgmt;
 
257
        u8 ucipher;
 
258
        u8 auth;
 
259
        u8 wpa_ie[ATH6KL_MAX_IE];
 
260
        struct sk_buff_head psq;
 
261
        spinlock_t psq_lock;
 
262
};
 
263
 
 
264
struct ath6kl_version {
 
265
        u32 target_ver;
 
266
        u32 wlan_ver;
 
267
        u32 abi_ver;
 
268
};
 
269
 
 
270
struct ath6kl_bmi {
 
271
        u32 cmd_credits;
 
272
        bool done_sent;
 
273
        u8 *cmd_buf;
 
274
};
 
275
 
 
276
struct target_stats {
 
277
        u64 tx_pkt;
 
278
        u64 tx_byte;
 
279
        u64 tx_ucast_pkt;
 
280
        u64 tx_ucast_byte;
 
281
        u64 tx_mcast_pkt;
 
282
        u64 tx_mcast_byte;
 
283
        u64 tx_bcast_pkt;
 
284
        u64 tx_bcast_byte;
 
285
        u64 tx_rts_success_cnt;
 
286
        u64 tx_pkt_per_ac[4];
 
287
 
 
288
        u64 tx_err;
 
289
        u64 tx_fail_cnt;
 
290
        u64 tx_retry_cnt;
 
291
        u64 tx_mult_retry_cnt;
 
292
        u64 tx_rts_fail_cnt;
 
293
 
 
294
        u64 rx_pkt;
 
295
        u64 rx_byte;
 
296
        u64 rx_ucast_pkt;
 
297
        u64 rx_ucast_byte;
 
298
        u64 rx_mcast_pkt;
 
299
        u64 rx_mcast_byte;
 
300
        u64 rx_bcast_pkt;
 
301
        u64 rx_bcast_byte;
 
302
        u64 rx_frgment_pkt;
 
303
 
 
304
        u64 rx_err;
 
305
        u64 rx_crc_err;
 
306
        u64 rx_key_cache_miss;
 
307
        u64 rx_decrypt_err;
 
308
        u64 rx_dupl_frame;
 
309
 
 
310
        u64 tkip_local_mic_fail;
 
311
        u64 tkip_cnter_measures_invoked;
 
312
        u64 tkip_replays;
 
313
        u64 tkip_fmt_err;
 
314
        u64 ccmp_fmt_err;
 
315
        u64 ccmp_replays;
 
316
 
 
317
        u64 pwr_save_fail_cnt;
 
318
 
 
319
        u64 cs_bmiss_cnt;
 
320
        u64 cs_low_rssi_cnt;
 
321
        u64 cs_connect_cnt;
 
322
        u64 cs_discon_cnt;
 
323
 
 
324
        s32 tx_ucast_rate;
 
325
        s32 rx_ucast_rate;
 
326
 
 
327
        u32 lq_val;
 
328
 
 
329
        u32 wow_pkt_dropped;
 
330
        u16 wow_evt_discarded;
 
331
 
 
332
        s16 noise_floor_calib;
 
333
        s16 cs_rssi;
 
334
        s16 cs_ave_beacon_rssi;
 
335
        u8 cs_ave_beacon_snr;
 
336
        u8 cs_last_roam_msec;
 
337
        u8 cs_snr;
 
338
 
 
339
        u8 wow_host_pkt_wakeups;
 
340
        u8 wow_host_evt_wakeups;
 
341
 
 
342
        u32 arp_received;
 
343
        u32 arp_matched;
 
344
        u32 arp_replied;
 
345
};
 
346
 
 
347
struct ath6kl_mbox_info {
 
348
        u32 htc_addr;
 
349
        u32 htc_ext_addr;
 
350
        u32 htc_ext_sz;
 
351
 
 
352
        u32 block_size;
 
353
 
 
354
        u32 gmbox_addr;
 
355
 
 
356
        u32 gmbox_sz;
 
357
};
 
358
 
 
359
/*
 
360
 * 802.11i defines an extended IV for use with non-WEP ciphers.
 
361
 * When the EXTIV bit is set in the key id byte an additional
 
362
 * 4 bytes immediately follow the IV for TKIP.  For CCMP the
 
363
 * EXTIV bit is likewise set but the 8 bytes represent the
 
364
 * CCMP header rather than IV+extended-IV.
 
365
 */
 
366
 
 
367
#define ATH6KL_KEYBUF_SIZE 16
 
368
#define ATH6KL_MICBUF_SIZE (8+8)        /* space for both tx and rx */
 
369
 
 
370
#define ATH6KL_KEY_XMIT  0x01
 
371
#define ATH6KL_KEY_RECV  0x02
 
372
#define ATH6KL_KEY_DEFAULT   0x80       /* default xmit key */
 
373
 
 
374
/* Initial group key for AP mode */
 
375
struct ath6kl_req_key {
 
376
        bool valid;
 
377
        u8 key_index;
 
378
        int key_type;
 
379
        u8 key[WLAN_MAX_KEY_LEN];
 
380
        u8 key_len;
 
381
};
 
382
 
 
383
/* Flag info */
 
384
#define WMI_ENABLED     0
 
385
#define WMI_READY       1
 
386
#define CONNECTED       2
 
387
#define STATS_UPDATE_PEND 3
 
388
#define CONNECT_PEND      4
 
389
#define WMM_ENABLED       5
 
390
#define NETQ_STOPPED      6
 
391
#define WMI_CTRL_EP_FULL  7
 
392
#define DTIM_EXPIRED      8
 
393
#define DESTROY_IN_PROGRESS  9
 
394
#define NETDEV_REGISTERED    10
 
395
#define SKIP_SCAN            11
 
396
#define WLAN_ENABLED         12
 
397
#define TESTMODE             13
 
398
#define CLEAR_BSSFILTER_ON_BEACON 14
 
399
#define DTIM_PERIOD_AVAIL    15
 
400
 
 
401
struct ath6kl {
 
402
        struct device *dev;
 
403
        struct net_device *net_dev;
 
404
        struct ath6kl_bmi bmi;
 
405
        const struct ath6kl_hif_ops *hif_ops;
 
406
        struct wmi *wmi;
 
407
        int tx_pending[ENDPOINT_MAX];
 
408
        int total_tx_data_pend;
 
409
        struct htc_target *htc_target;
 
410
        void *hif_priv;
 
411
        spinlock_t lock;
 
412
        struct semaphore sem;
 
413
        int ssid_len;
 
414
        u8 ssid[IEEE80211_MAX_SSID_LEN];
 
415
        u8 next_mode;
 
416
        u8 nw_type;
 
417
        u8 dot11_auth_mode;
 
418
        u8 auth_mode;
 
419
        u8 prwise_crypto;
 
420
        u8 prwise_crypto_len;
 
421
        u8 grp_crypto;
 
422
        u8 grp_crypto_len;
 
423
        u8 def_txkey_index;
 
424
        struct ath6kl_wep_key wep_key_list[WMI_MAX_KEY_INDEX + 1];
 
425
        u8 bssid[ETH_ALEN];
 
426
        u8 req_bssid[ETH_ALEN];
 
427
        u16 ch_hint;
 
428
        u16 bss_ch;
 
429
        u16 listen_intvl_b;
 
430
        u16 listen_intvl_t;
 
431
        u8 lrssi_roam_threshold;
 
432
        struct ath6kl_version version;
 
433
        u32 target_type;
 
434
        u8 tx_pwr;
 
435
        struct net_device_stats net_stats;
 
436
        struct target_stats target_stats;
 
437
        struct ath6kl_node_mapping node_map[MAX_NODE_NUM];
 
438
        u8 ibss_ps_enable;
 
439
        u8 node_num;
 
440
        u8 next_ep_id;
 
441
        struct ath6kl_cookie *cookie_list;
 
442
        u32 cookie_count;
 
443
        enum htc_endpoint_id ac2ep_map[WMM_NUM_AC];
 
444
        bool ac_stream_active[WMM_NUM_AC];
 
445
        u8 ac_stream_pri_map[WMM_NUM_AC];
 
446
        u8 hiac_stream_active_pri;
 
447
        u8 ep2ac_map[ENDPOINT_MAX];
 
448
        enum htc_endpoint_id ctrl_ep;
 
449
        struct htc_credit_state_info credit_state_info;
 
450
        u32 connect_ctrl_flags;
 
451
        u32 user_key_ctrl;
 
452
        u8 usr_bss_filter;
 
453
        struct ath6kl_sta sta_list[AP_MAX_NUM_STA];
 
454
        u8 sta_list_index;
 
455
        struct ath6kl_req_key ap_mode_bkey;
 
456
        struct sk_buff_head mcastpsq;
 
457
        spinlock_t mcastpsq_lock;
 
458
        u8 intra_bss;
 
459
        struct aggr_info *aggr_cntxt;
 
460
        struct wmi_ap_mode_stat ap_stats;
 
461
        u8 ap_country_code[3];
 
462
        struct list_head amsdu_rx_buffer_queue;
 
463
        struct timer_list disconnect_timer;
 
464
        u8 rx_meta_ver;
 
465
        struct wireless_dev *wdev;
 
466
        struct cfg80211_scan_request *scan_req;
 
467
        struct ath6kl_key keys[WMI_MAX_KEY_INDEX + 1];
 
468
        enum sme_state sme_state;
 
469
        enum wlan_low_pwr_state wlan_pwr_state;
 
470
        struct wmi_scan_params_cmd sc_params;
 
471
#define AR_MCAST_FILTER_MAC_ADDR_SIZE  4
 
472
        struct {
 
473
                void *rx_report;
 
474
                size_t rx_report_len;
 
475
        } tm;
 
476
 
 
477
        struct {
 
478
                u32 dataset_patch_addr;
 
479
                u32 app_load_addr;
 
480
                u32 app_start_override_addr;
 
481
                u32 board_ext_data_addr;
 
482
                u32 reserved_ram_size;
 
483
        } hw;
 
484
 
 
485
        u16 conf_flags;
 
486
        wait_queue_head_t event_wq;
 
487
        struct ath6kl_mbox_info mbox_info;
 
488
 
 
489
        struct ath6kl_cookie cookie_mem[MAX_COOKIE_NUM];
 
490
        int reconnect_flag;
 
491
        unsigned long flag;
 
492
 
 
493
        u8 *fw_board;
 
494
        size_t fw_board_len;
 
495
 
 
496
        u8 *fw_otp;
 
497
        size_t fw_otp_len;
 
498
 
 
499
        u8 *fw;
 
500
        size_t fw_len;
 
501
 
 
502
        u8 *fw_patch;
 
503
        size_t fw_patch_len;
 
504
 
 
505
        unsigned long fw_capabilities[ATH6KL_CAPABILITY_LEN];
 
506
 
 
507
        struct workqueue_struct *ath6kl_wq;
 
508
 
 
509
        struct dentry *debugfs_phy;
 
510
 
 
511
        u32 send_action_id;
 
512
        bool probe_req_report;
 
513
        u16 next_chan;
 
514
 
 
515
        bool p2p;
 
516
        u16 assoc_bss_beacon_int;
 
517
        u8 assoc_bss_dtim_period;
 
518
 
 
519
#ifdef CONFIG_ATH6KL_DEBUG
 
520
        struct {
 
521
                struct circ_buf fwlog_buf;
 
522
                spinlock_t fwlog_lock;
 
523
                void *fwlog_tmp;
 
524
                u32 fwlog_mask;
 
525
                unsigned int dbgfs_diag_reg;
 
526
                u32 diag_reg_addr_wr;
 
527
                u32 diag_reg_val_wr;
 
528
 
 
529
                struct {
 
530
                        unsigned int invalid_rate;
 
531
                } war_stats;
 
532
        } debug;
 
533
#endif /* CONFIG_ATH6KL_DEBUG */
 
534
};
 
535
 
 
536
static inline void *ath6kl_priv(struct net_device *dev)
 
537
{
 
538
        return wdev_priv(dev->ieee80211_ptr);
 
539
}
 
540
 
 
541
static inline void ath6kl_deposit_credit_to_ep(struct htc_credit_state_info
 
542
                                               *cred_info,
 
543
                                               struct htc_endpoint_credit_dist
 
544
                                               *ep_dist, int credits)
 
545
{
 
546
        ep_dist->credits += credits;
 
547
        ep_dist->cred_assngd += credits;
 
548
        cred_info->cur_free_credits -= credits;
 
549
}
 
550
 
 
551
static inline u32 ath6kl_get_hi_item_addr(struct ath6kl *ar,
 
552
                                          u32 item_offset)
 
553
{
 
554
        u32 addr = 0;
 
555
 
 
556
        if (ar->target_type == TARGET_TYPE_AR6003)
 
557
                addr = ATH6KL_AR6003_HI_START_ADDR + item_offset;
 
558
        else if (ar->target_type == TARGET_TYPE_AR6004)
 
559
                addr = ATH6KL_AR6004_HI_START_ADDR + item_offset;
 
560
 
 
561
        return addr;
 
562
}
 
563
 
 
564
void ath6kl_destroy(struct net_device *dev, unsigned int unregister);
 
565
int ath6kl_configure_target(struct ath6kl *ar);
 
566
void ath6kl_detect_error(unsigned long ptr);
 
567
void disconnect_timer_handler(unsigned long ptr);
 
568
void init_netdev(struct net_device *dev);
 
569
void ath6kl_cookie_init(struct ath6kl *ar);
 
570
void ath6kl_cookie_cleanup(struct ath6kl *ar);
 
571
void ath6kl_rx(struct htc_target *target, struct htc_packet *packet);
 
572
void ath6kl_tx_complete(void *context, struct list_head *packet_queue);
 
573
enum htc_send_full_action ath6kl_tx_queue_full(struct htc_target *target,
 
574
                                               struct htc_packet *packet);
 
575
void ath6kl_stop_txrx(struct ath6kl *ar);
 
576
void ath6kl_cleanup_amsdu_rxbufs(struct ath6kl *ar);
 
577
int ath6kl_diag_write32(struct ath6kl *ar, u32 address, __le32 value);
 
578
int ath6kl_diag_write(struct ath6kl *ar, u32 address, void *data, u32 length);
 
579
int ath6kl_diag_read32(struct ath6kl *ar, u32 address, u32 *value);
 
580
int ath6kl_diag_read(struct ath6kl *ar, u32 address, void *data, u32 length);
 
581
int ath6kl_read_fwlogs(struct ath6kl *ar);
 
582
void ath6kl_init_profile_info(struct ath6kl *ar);
 
583
void ath6kl_tx_data_cleanup(struct ath6kl *ar);
 
584
void ath6kl_stop_endpoint(struct net_device *dev, bool keep_profile,
 
585
                          bool get_dbglogs);
 
586
 
 
587
struct ath6kl_cookie *ath6kl_alloc_cookie(struct ath6kl *ar);
 
588
void ath6kl_free_cookie(struct ath6kl *ar, struct ath6kl_cookie *cookie);
 
589
int ath6kl_data_tx(struct sk_buff *skb, struct net_device *dev);
 
590
 
 
591
struct aggr_info *aggr_init(struct net_device *dev);
 
592
void ath6kl_rx_refill(struct htc_target *target,
 
593
                      enum htc_endpoint_id endpoint);
 
594
void ath6kl_refill_amsdu_rxbufs(struct ath6kl *ar, int count);
 
595
struct htc_packet *ath6kl_alloc_amsdu_rxbuf(struct htc_target *target,
 
596
                                            enum htc_endpoint_id endpoint,
 
597
                                            int len);
 
598
void aggr_module_destroy(struct aggr_info *aggr_info);
 
599
void aggr_reset_state(struct aggr_info *aggr_info);
 
600
 
 
601
struct ath6kl_sta *ath6kl_find_sta(struct ath6kl *ar, u8 * node_addr);
 
602
struct ath6kl_sta *ath6kl_find_sta_by_aid(struct ath6kl *ar, u8 aid);
 
603
 
 
604
void ath6kl_ready_event(void *devt, u8 * datap, u32 sw_ver, u32 abi_ver);
 
605
int ath6kl_control_tx(void *devt, struct sk_buff *skb,
 
606
                      enum htc_endpoint_id eid);
 
607
void ath6kl_connect_event(struct ath6kl *ar, u16 channel,
 
608
                          u8 *bssid, u16 listen_int,
 
609
                          u16 beacon_int, enum network_type net_type,
 
610
                          u8 beacon_ie_len, u8 assoc_req_len,
 
611
                          u8 assoc_resp_len, u8 *assoc_info);
 
612
void ath6kl_connect_ap_mode_bss(struct ath6kl *ar, u16 channel);
 
613
void ath6kl_connect_ap_mode_sta(struct ath6kl *ar, u16 aid, u8 *mac_addr,
 
614
                                u8 keymgmt, u8 ucipher, u8 auth,
 
615
                                u8 assoc_req_len, u8 *assoc_info);
 
616
void ath6kl_disconnect_event(struct ath6kl *ar, u8 reason,
 
617
                             u8 *bssid, u8 assoc_resp_len,
 
618
                             u8 *assoc_info, u16 prot_reason_status);
 
619
void ath6kl_tkip_micerr_event(struct ath6kl *ar, u8 keyid, bool ismcast);
 
620
void ath6kl_txpwr_rx_evt(void *devt, u8 tx_pwr);
 
621
void ath6kl_scan_complete_evt(struct ath6kl *ar, int status);
 
622
void ath6kl_tgt_stats_event(struct ath6kl *ar, u8 *ptr, u32 len);
 
623
void ath6kl_indicate_tx_activity(void *devt, u8 traffic_class, bool active);
 
624
enum htc_endpoint_id ath6kl_ac2_endpoint_id(void *devt, u8 ac);
 
625
 
 
626
void ath6kl_pspoll_event(struct ath6kl *ar, u8 aid);
 
627
 
 
628
void ath6kl_dtimexpiry_event(struct ath6kl *ar);
 
629
void ath6kl_disconnect(struct ath6kl *ar);
 
630
void ath6kl_deep_sleep_enable(struct ath6kl *ar);
 
631
void aggr_recv_delba_req_evt(struct ath6kl *ar, u8 tid);
 
632
void aggr_recv_addba_req_evt(struct ath6kl *ar, u8 tid, u16 seq_no,
 
633
                             u8 win_sz);
 
634
void ath6kl_wakeup_event(void *dev);
 
635
void ath6kl_target_failure(struct ath6kl *ar);
 
636
 
 
637
#endif /* CORE_H */