1bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo/*
2bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo * Copyright (c) 2010-2011 Atheros Communications Inc.
31b2df4073447234034e2329f0df584c6346a8ec3Vasanthakumar Thiagarajan * Copyright (c) 2011-2012 Qualcomm Atheros, Inc.
4bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo *
5bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo * Permission to use, copy, modify, and/or distribute this software for any
6bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo * purpose with or without fee is hereby granted, provided that the above
7bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo * copyright notice and this permission notice appear in all copies.
8bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo *
9bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo */
17bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
18bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#ifndef CORE_H
19bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define CORE_H
20bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
21bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#include <linux/etherdevice.h>
22bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#include <linux/rtnetlink.h>
23bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#include <linux/firmware.h>
24bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#include <linux/sched.h>
25bdf5396be177b689c00ae6ebed00d13fafaed36eKalle Valo#include <linux/circ_buf.h>
26bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#include <net/cfg80211.h>
27bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#include "htc.h"
28bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#include "wmi.h"
29bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#include "bmi.h"
30bc07ddb29a7b71ad009bcd84bee4c93908cf22b6Kalle Valo#include "target.h"
31bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
32bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define MAX_ATH6KL                        1
33bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define ATH6KL_MAX_RX_BUFFERS             16
34bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define ATH6KL_BUFFER_SIZE                1664
35bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define ATH6KL_MAX_AMSDU_RX_BUFFERS       4
36bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define ATH6KL_AMSDU_REFILL_THRESHOLD     3
37bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define ATH6KL_AMSDU_BUFFER_SIZE     (WMI_MAX_AMSDU_RX_DATA_FRAME_LENGTH + 128)
38bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define MAX_MSDU_SUBFRAME_PAYLOAD_LEN	1508
39bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define MIN_MSDU_SUBFRAME_PAYLOAD_LEN	46
40bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
41bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define USER_SAVEDKEYS_STAT_INIT     0
42bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define USER_SAVEDKEYS_STAT_RUN      1
43bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
44bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define ATH6KL_TX_TIMEOUT      10
45bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define ATH6KL_MAX_ENDPOINTS   4
46bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define MAX_NODE_NUM           15
47bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
48c1762a3fe196483981f91b926f5f6ee18af757f2Thirumalai Pachamuthu#define ATH6KL_APSD_ALL_FRAME		0xFFFF
49c1762a3fe196483981f91b926f5f6ee18af757f2Thirumalai Pachamuthu#define ATH6KL_APSD_NUM_OF_AC		0x4
50c1762a3fe196483981f91b926f5f6ee18af757f2Thirumalai Pachamuthu#define ATH6KL_APSD_FRAME_MASK		0xF
51c1762a3fe196483981f91b926f5f6ee18af757f2Thirumalai Pachamuthu
521df94a8578eb099d9362cc0b84ef85015c47bbc5Vasanthakumar Thiagarajan/* Extra bytes for htc header alignment */
531df94a8578eb099d9362cc0b84ef85015c47bbc5Vasanthakumar Thiagarajan#define ATH6KL_HTC_ALIGN_BYTES 3
541df94a8578eb099d9362cc0b84ef85015c47bbc5Vasanthakumar Thiagarajan
55bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo/* MAX_HI_COOKIE_NUM are reserved for high priority traffic */
56bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define MAX_DEF_COOKIE_NUM                180
57bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define MAX_HI_COOKIE_NUM                 18	/* 10% of MAX_COOKIE_NUM */
58bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define MAX_COOKIE_NUM                 (MAX_DEF_COOKIE_NUM + MAX_HI_COOKIE_NUM)
59bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
60bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define MAX_DEFAULT_SEND_QUEUE_DEPTH      (MAX_DEF_COOKIE_NUM / WMM_NUM_AC)
61bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
62bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define DISCON_TIMER_INTVAL               10000  /* in msec */
63bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
6413423c31195efb1a1ac319294f5a0148a13433e6Vasanthakumar Thiagarajan/* Channel dwell time in fg scan */
6513423c31195efb1a1ac319294f5a0148a13433e6Vasanthakumar Thiagarajan#define ATH6KL_FG_SCAN_INTERVAL		50 /* in ms */
6613423c31195efb1a1ac319294f5a0148a13433e6Vasanthakumar Thiagarajan
6750d412346e49aee71b66d90dffb68f8d90ed35b2Kalle Valo/* includes also the null byte */
6850d412346e49aee71b66d90dffb68f8d90ed35b2Kalle Valo#define ATH6KL_FIRMWARE_MAGIC               "QCA-ATH6KL"
6950d412346e49aee71b66d90dffb68f8d90ed35b2Kalle Valo
7050d412346e49aee71b66d90dffb68f8d90ed35b2Kalle Valoenum ath6kl_fw_ie_type {
7150d412346e49aee71b66d90dffb68f8d90ed35b2Kalle Valo	ATH6KL_FW_IE_FW_VERSION = 0,
7250d412346e49aee71b66d90dffb68f8d90ed35b2Kalle Valo	ATH6KL_FW_IE_TIMESTAMP = 1,
7350d412346e49aee71b66d90dffb68f8d90ed35b2Kalle Valo	ATH6KL_FW_IE_OTP_IMAGE = 2,
7450d412346e49aee71b66d90dffb68f8d90ed35b2Kalle Valo	ATH6KL_FW_IE_FW_IMAGE = 3,
7550d412346e49aee71b66d90dffb68f8d90ed35b2Kalle Valo	ATH6KL_FW_IE_PATCH_IMAGE = 4,
768a13748034e93b4134455ebf51e2fada8eb00acaKalle Valo	ATH6KL_FW_IE_RESERVED_RAM_SIZE = 5,
7797e0496d056726ab46e7e977315f2ab847b34209Kalle Valo	ATH6KL_FW_IE_CAPABILITIES = 6,
781b4304da0adcc31727da3ee7f89dd180f4e65473Kalle Valo	ATH6KL_FW_IE_PATCH_ADDR = 7,
7903ef0250aea65c0afc217d7832485f6984e1fde4Kalle Valo	ATH6KL_FW_IE_BOARD_ADDR = 8,
80368b1b0f4b0328f488780605c423aafe1e6235b5Kalle Valo	ATH6KL_FW_IE_VIF_MAX = 9,
8150d412346e49aee71b66d90dffb68f8d90ed35b2Kalle Valo};
8250d412346e49aee71b66d90dffb68f8d90ed35b2Kalle Valo
8397e0496d056726ab46e7e977315f2ab847b34209Kalle Valoenum ath6kl_fw_capability {
8497e0496d056726ab46e7e977315f2ab847b34209Kalle Valo	ATH6KL_FW_CAPABILITY_HOST_P2P = 0,
8510509f903ebb7d2a02571f30cb937dd923b023cfKalle Valo	ATH6KL_FW_CAPABILITY_SCHED_SCAN = 1,
8697e0496d056726ab46e7e977315f2ab847b34209Kalle Valo
873ca9d1fc9aa64077645a26c396de9399b49ea226Aarthi Thiruvengadam	/*
883ca9d1fc9aa64077645a26c396de9399b49ea226Aarthi Thiruvengadam	 * Firmware is capable of supporting P2P mgmt operations on a
893ca9d1fc9aa64077645a26c396de9399b49ea226Aarthi Thiruvengadam	 * station interface. After group formation, the station
903ca9d1fc9aa64077645a26c396de9399b49ea226Aarthi Thiruvengadam	 * interface will become a P2P client/GO interface as the case may be
913ca9d1fc9aa64077645a26c396de9399b49ea226Aarthi Thiruvengadam	 */
923ca9d1fc9aa64077645a26c396de9399b49ea226Aarthi Thiruvengadam	ATH6KL_FW_CAPABILITY_STA_P2PDEV_DUPLEX,
933ca9d1fc9aa64077645a26c396de9399b49ea226Aarthi Thiruvengadam
9497e0496d056726ab46e7e977315f2ab847b34209Kalle Valo	/* this needs to be last */
9597e0496d056726ab46e7e977315f2ab847b34209Kalle Valo	ATH6KL_FW_CAPABILITY_MAX,
9697e0496d056726ab46e7e977315f2ab847b34209Kalle Valo};
9797e0496d056726ab46e7e977315f2ab847b34209Kalle Valo
9897e0496d056726ab46e7e977315f2ab847b34209Kalle Valo#define ATH6KL_CAPABILITY_LEN (ALIGN(ATH6KL_FW_CAPABILITY_MAX, 32) / 32)
9997e0496d056726ab46e7e977315f2ab847b34209Kalle Valo
10050d412346e49aee71b66d90dffb68f8d90ed35b2Kalle Valostruct ath6kl_fw_ie {
10150d412346e49aee71b66d90dffb68f8d90ed35b2Kalle Valo	__le32 id;
10250d412346e49aee71b66d90dffb68f8d90ed35b2Kalle Valo	__le32 len;
10350d412346e49aee71b66d90dffb68f8d90ed35b2Kalle Valo	u8 data[0];
10450d412346e49aee71b66d90dffb68f8d90ed35b2Kalle Valo};
10550d412346e49aee71b66d90dffb68f8d90ed35b2Kalle Valo
106c0038972b1253ad7f3ab7cc35ed57a830f5c8568Kalle Valo#define ATH6KL_FW_API2_FILE "fw-2.bin"
10765a8b4cc511b68712799e91137324f2abece7d3eKalle Valo#define ATH6KL_FW_API3_FILE "fw-3.bin"
108c0038972b1253ad7f3ab7cc35ed57a830f5c8568Kalle Valo
109bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo/* AR6003 1.0 definitions */
1100d0192babc2f5ff9a5c047e61567d414806c1137Kalle Valo#define AR6003_HW_1_0_VERSION                 0x300002ba
111bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
112bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo/* AR6003 2.0 definitions */
1130d0192babc2f5ff9a5c047e61567d414806c1137Kalle Valo#define AR6003_HW_2_0_VERSION                 0x30000384
1140d0192babc2f5ff9a5c047e61567d414806c1137Kalle Valo#define AR6003_HW_2_0_PATCH_DOWNLOAD_ADDRESS  0x57e910
115c0038972b1253ad7f3ab7cc35ed57a830f5c8568Kalle Valo#define AR6003_HW_2_0_FW_DIR			"ath6k/AR6003/hw2.0"
116c0038972b1253ad7f3ab7cc35ed57a830f5c8568Kalle Valo#define AR6003_HW_2_0_OTP_FILE			"otp.bin.z77"
117c0038972b1253ad7f3ab7cc35ed57a830f5c8568Kalle Valo#define AR6003_HW_2_0_FIRMWARE_FILE		"athwlan.bin.z77"
118c0038972b1253ad7f3ab7cc35ed57a830f5c8568Kalle Valo#define AR6003_HW_2_0_TCMD_FIRMWARE_FILE	"athtcmd_ram.bin"
119c0038972b1253ad7f3ab7cc35ed57a830f5c8568Kalle Valo#define AR6003_HW_2_0_PATCH_FILE		"data.patch.bin"
1200d0192babc2f5ff9a5c047e61567d414806c1137Kalle Valo#define AR6003_HW_2_0_BOARD_DATA_FILE "ath6k/AR6003/hw2.0/bdata.bin"
1210d0192babc2f5ff9a5c047e61567d414806c1137Kalle Valo#define AR6003_HW_2_0_DEFAULT_BOARD_DATA_FILE \
1220d0192babc2f5ff9a5c047e61567d414806c1137Kalle Valo			"ath6k/AR6003/hw2.0/bdata.SD31.bin"
123bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
124bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo/* AR6003 3.0 definitions */
1250d0192babc2f5ff9a5c047e61567d414806c1137Kalle Valo#define AR6003_HW_2_1_1_VERSION                 0x30000582
126c0038972b1253ad7f3ab7cc35ed57a830f5c8568Kalle Valo#define AR6003_HW_2_1_1_FW_DIR			"ath6k/AR6003/hw2.1.1"
127c0038972b1253ad7f3ab7cc35ed57a830f5c8568Kalle Valo#define AR6003_HW_2_1_1_OTP_FILE		"otp.bin"
128c0038972b1253ad7f3ab7cc35ed57a830f5c8568Kalle Valo#define AR6003_HW_2_1_1_FIRMWARE_FILE		"athwlan.bin"
129c0038972b1253ad7f3ab7cc35ed57a830f5c8568Kalle Valo#define AR6003_HW_2_1_1_TCMD_FIRMWARE_FILE	"athtcmd_ram.bin"
130cd23c1c9b8a2de64477a795ab5a9cd5278397f24Alex Yang#define AR6003_HW_2_1_1_UTF_FIRMWARE_FILE	"utf.bin"
131cd23c1c9b8a2de64477a795ab5a9cd5278397f24Alex Yang#define AR6003_HW_2_1_1_TESTSCRIPT_FILE	"nullTestFlow.bin"
132c0038972b1253ad7f3ab7cc35ed57a830f5c8568Kalle Valo#define AR6003_HW_2_1_1_PATCH_FILE		"data.patch.bin"
1330d0192babc2f5ff9a5c047e61567d414806c1137Kalle Valo#define AR6003_HW_2_1_1_BOARD_DATA_FILE "ath6k/AR6003/hw2.1.1/bdata.bin"
1340d0192babc2f5ff9a5c047e61567d414806c1137Kalle Valo#define AR6003_HW_2_1_1_DEFAULT_BOARD_DATA_FILE	\
1350d0192babc2f5ff9a5c047e61567d414806c1137Kalle Valo			"ath6k/AR6003/hw2.1.1/bdata.SD31.bin"
136bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
13731024d99003486c90c793dea58b55f7920f0488bKevin Fang/* AR6004 1.0 definitions */
1380d0192babc2f5ff9a5c047e61567d414806c1137Kalle Valo#define AR6004_HW_1_0_VERSION                 0x30000623
139c0038972b1253ad7f3ab7cc35ed57a830f5c8568Kalle Valo#define AR6004_HW_1_0_FW_DIR			"ath6k/AR6004/hw1.0"
140c0038972b1253ad7f3ab7cc35ed57a830f5c8568Kalle Valo#define AR6004_HW_1_0_FIRMWARE_FILE		"fw.ram.bin"
1410d0192babc2f5ff9a5c047e61567d414806c1137Kalle Valo#define AR6004_HW_1_0_BOARD_DATA_FILE         "ath6k/AR6004/hw1.0/bdata.bin"
1420d0192babc2f5ff9a5c047e61567d414806c1137Kalle Valo#define AR6004_HW_1_0_DEFAULT_BOARD_DATA_FILE \
143d5720e59410578d00c1767d66b2b8dfeda91a08bKalle Valo	"ath6k/AR6004/hw1.0/bdata.DB132.bin"
144d5720e59410578d00c1767d66b2b8dfeda91a08bKalle Valo
145d5720e59410578d00c1767d66b2b8dfeda91a08bKalle Valo/* AR6004 1.1 definitions */
1460d0192babc2f5ff9a5c047e61567d414806c1137Kalle Valo#define AR6004_HW_1_1_VERSION                 0x30000001
147c0038972b1253ad7f3ab7cc35ed57a830f5c8568Kalle Valo#define AR6004_HW_1_1_FW_DIR			"ath6k/AR6004/hw1.1"
148c0038972b1253ad7f3ab7cc35ed57a830f5c8568Kalle Valo#define AR6004_HW_1_1_FIRMWARE_FILE		"fw.ram.bin"
1490d0192babc2f5ff9a5c047e61567d414806c1137Kalle Valo#define AR6004_HW_1_1_BOARD_DATA_FILE         "ath6k/AR6004/hw1.1/bdata.bin"
1500d0192babc2f5ff9a5c047e61567d414806c1137Kalle Valo#define AR6004_HW_1_1_DEFAULT_BOARD_DATA_FILE \
151d5720e59410578d00c1767d66b2b8dfeda91a08bKalle Valo	"ath6k/AR6004/hw1.1/bdata.DB132.bin"
15231024d99003486c90c793dea58b55f7920f0488bKevin Fang
153bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo/* Per STA data, used in AP mode */
154bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define STA_PS_AWAKE		BIT(0)
155bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define	STA_PS_SLEEP		BIT(1)
156bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define	STA_PS_POLLED		BIT(2)
157c1762a3fe196483981f91b926f5f6ee18af757f2Thirumalai Pachamuthu#define STA_PS_APSD_TRIGGER     BIT(3)
158c1762a3fe196483981f91b926f5f6ee18af757f2Thirumalai Pachamuthu#define STA_PS_APSD_EOSP        BIT(4)
159bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
160bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo/* HTC TX packet tagging definitions */
161bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define ATH6KL_CONTROL_PKT_TAG    HTC_TX_PACKET_TAG_USER_DEFINED
162bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define ATH6KL_DATA_PKT_TAG       (ATH6KL_CONTROL_PKT_TAG + 1)
163bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
164bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define AR6003_CUST_DATA_SIZE 16
165bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
166bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define AGGR_WIN_IDX(x, y)          ((x) % (y))
167bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define AGGR_INCR_IDX(x, y)         AGGR_WIN_IDX(((x) + 1), (y))
168bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define AGGR_DCRM_IDX(x, y)         AGGR_WIN_IDX(((x) - 1), (y))
169bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define ATH6KL_MAX_SEQ_NO		0xFFF
170bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define ATH6KL_NEXT_SEQ_NO(x)		(((x) + 1) & ATH6KL_MAX_SEQ_NO)
171bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
172bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define NUM_OF_TIDS         8
173bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define AGGR_SZ_DEFAULT     8
174bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
175bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define AGGR_WIN_SZ_MIN     2
176bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define AGGR_WIN_SZ_MAX     8
177bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
178bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define TID_WINDOW_SZ(_x)   ((_x) << 1)
179bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
180bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define AGGR_NUM_OF_FREE_NETBUFS    16
181bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
182bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define AGGR_RX_TIMEOUT     400	/* in ms */
183bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
184bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define WMI_TIMEOUT (2 * HZ)
185bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
186bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define MBOX_YIELD_LIMIT 99
187bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
1888f46fccd6cd0d7ba70ba1636e59e98ca17dd2239Raja Mani#define ATH6KL_DEFAULT_LISTEN_INTVAL	100 /* in TUs */
189ce0dc0cfeac9fde9964fa4b07aecd7cc604060e0Raja Mani#define ATH6KL_DEFAULT_BMISS_TIME	1500
190ce0dc0cfeac9fde9964fa4b07aecd7cc604060e0Raja Mani#define ATH6KL_MAX_WOW_LISTEN_INTL	300 /* in TUs */
191ce0dc0cfeac9fde9964fa4b07aecd7cc604060e0Raja Mani#define ATH6KL_MAX_BMISS_TIME		5000
1928f46fccd6cd0d7ba70ba1636e59e98ca17dd2239Raja Mani
193bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo/* configuration lags */
194bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo/*
195bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo * ATH6KL_CONF_IGNORE_ERP_BARKER: Ignore the barker premable in
196bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo * ERP IE of beacon to determine the short premable support when
197bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo * sending (Re)Assoc req.
198bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo * ATH6KL_CONF_IGNORE_PS_FAIL_EVT_IN_SCAN: Don't send the power
199bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo * module state transition failure events which happen during
200bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo * scan, to the host.
201bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo */
202bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define ATH6KL_CONF_IGNORE_ERP_BARKER		BIT(0)
203bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define ATH6KL_CONF_IGNORE_PS_FAIL_EVT_IN_SCAN  BIT(1)
204bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define ATH6KL_CONF_ENABLE_11N			BIT(2)
205bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define ATH6KL_CONF_ENABLE_TX_BURST		BIT(3)
206e390af779dc671551800514d391928f5a798089aRaja Mani#define ATH6KL_CONF_UART_DEBUG			BIT(4)
207bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
208bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valoenum wlan_low_pwr_state {
209bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	WLAN_POWER_STATE_ON,
210bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	WLAN_POWER_STATE_CUT_PWR,
211bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	WLAN_POWER_STATE_DEEP_SLEEP,
212bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	WLAN_POWER_STATE_WOW
213bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo};
214bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
215bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valoenum sme_state {
216bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	SME_DISCONNECTED,
217bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	SME_CONNECTING,
218bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	SME_CONNECTED
219bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo};
220bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
221bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valostruct skb_hold_q {
222bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	struct sk_buff *skb;
223bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	bool is_amsdu;
224bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u16 seq_no;
225bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo};
226bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
227bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valostruct rxtid {
228bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	bool aggr;
229bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	bool progress;
230bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	bool timer_mon;
231bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u16 win_sz;
232bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u16 seq_next;
233bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 hold_q_sz;
234bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	struct skb_hold_q *hold_q;
235bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	struct sk_buff_head q;
23612eb9444a8df7ab4aa5f4c91f8e3049af5d9819bKalle Valo
23712eb9444a8df7ab4aa5f4c91f8e3049af5d9819bKalle Valo	/*
23812eb9444a8df7ab4aa5f4c91f8e3049af5d9819bKalle Valo	 * FIXME: No clue what this should protect. Apparently it should
23912eb9444a8df7ab4aa5f4c91f8e3049af5d9819bKalle Valo	 * protect some of the fields above but they are also accessed
24012eb9444a8df7ab4aa5f4c91f8e3049af5d9819bKalle Valo	 * without taking the lock.
24112eb9444a8df7ab4aa5f4c91f8e3049af5d9819bKalle Valo	 */
242bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	spinlock_t lock;
243bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo};
244bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
245bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valostruct rxtid_stats {
246bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 num_into_aggr;
247bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 num_dups;
248bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 num_oow;
249bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 num_mpdu;
250bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 num_amsdu;
251bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 num_delivered;
252bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 num_timeouts;
253bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 num_hole;
254bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 num_bar;
255bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo};
256bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
2577baef812eb5f02ccacf6fac3888c1cfa36293e91Vasanthakumar Thiagarajanstruct aggr_info_conn {
258bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 aggr_sz;
259bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 timer_scheduled;
260bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	struct timer_list timer;
261bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	struct net_device *dev;
262bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	struct rxtid rx_tid[NUM_OF_TIDS];
263bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	struct rxtid_stats stat[NUM_OF_TIDS];
2647baef812eb5f02ccacf6fac3888c1cfa36293e91Vasanthakumar Thiagarajan	struct aggr_info *aggr_info;
2657baef812eb5f02ccacf6fac3888c1cfa36293e91Vasanthakumar Thiagarajan};
2667baef812eb5f02ccacf6fac3888c1cfa36293e91Vasanthakumar Thiagarajan
2677baef812eb5f02ccacf6fac3888c1cfa36293e91Vasanthakumar Thiagarajanstruct aggr_info {
2687baef812eb5f02ccacf6fac3888c1cfa36293e91Vasanthakumar Thiagarajan	struct aggr_info_conn *aggr_conn;
2697baef812eb5f02ccacf6fac3888c1cfa36293e91Vasanthakumar Thiagarajan	struct sk_buff_head rx_amsdu_freeq;
270bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo};
271bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
272bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valostruct ath6kl_wep_key {
273bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 key_index;
274bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 key_len;
275bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 key[64];
276bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo};
277bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
278bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define ATH6KL_KEY_SEQ_LEN 8
279bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
280bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valostruct ath6kl_key {
281bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 key[WLAN_MAX_KEY_LEN];
282bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 key_len;
283bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 seq[ATH6KL_KEY_SEQ_LEN];
284bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 seq_len;
285bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 cipher;
286bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo};
287bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
288bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valostruct ath6kl_node_mapping {
289bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 mac_addr[ETH_ALEN];
290bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 ep_id;
291bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 tx_pend;
292bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo};
293bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
294bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valostruct ath6kl_cookie {
295bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	struct sk_buff *skb;
296bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 map_no;
297bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	struct htc_packet htc_pkt;
298bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	struct ath6kl_cookie *arc_list_next;
299bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo};
300bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
301d0ff7383a3164adff7072719717d574436ec1677Naveen Gangadharanstruct ath6kl_mgmt_buff {
302d0ff7383a3164adff7072719717d574436ec1677Naveen Gangadharan	struct list_head list;
303d0ff7383a3164adff7072719717d574436ec1677Naveen Gangadharan	u32 freq;
304d0ff7383a3164adff7072719717d574436ec1677Naveen Gangadharan	u32 wait;
305d0ff7383a3164adff7072719717d574436ec1677Naveen Gangadharan	u32 id;
306d0ff7383a3164adff7072719717d574436ec1677Naveen Gangadharan	bool no_cck;
307d0ff7383a3164adff7072719717d574436ec1677Naveen Gangadharan	size_t len;
308d0ff7383a3164adff7072719717d574436ec1677Naveen Gangadharan	u8 buf[0];
309d0ff7383a3164adff7072719717d574436ec1677Naveen Gangadharan};
310d0ff7383a3164adff7072719717d574436ec1677Naveen Gangadharan
311bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valostruct ath6kl_sta {
312bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u16 sta_flags;
313bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 mac[ETH_ALEN];
314bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 aid;
315bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 keymgmt;
316bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 ucipher;
317bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 auth;
318bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 wpa_ie[ATH6KL_MAX_IE];
319bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	struct sk_buff_head psq;
32012eb9444a8df7ab4aa5f4c91f8e3049af5d9819bKalle Valo
32112eb9444a8df7ab4aa5f4c91f8e3049af5d9819bKalle Valo	/* protects psq, mgmt_psq, apsdq, and mgmt_psq_len fields */
322bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	spinlock_t psq_lock;
32312eb9444a8df7ab4aa5f4c91f8e3049af5d9819bKalle Valo
324d0ff7383a3164adff7072719717d574436ec1677Naveen Gangadharan	struct list_head mgmt_psq;
325d0ff7383a3164adff7072719717d574436ec1677Naveen Gangadharan	size_t mgmt_psq_len;
326c1762a3fe196483981f91b926f5f6ee18af757f2Thirumalai Pachamuthu	u8 apsd_info;
327c1762a3fe196483981f91b926f5f6ee18af757f2Thirumalai Pachamuthu	struct sk_buff_head apsdq;
3281d2a4456de20db73362c86c88fe9c02169f29d0aVasanthakumar Thiagarajan	struct aggr_info_conn *aggr_conn;
329bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo};
330bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
331bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valostruct ath6kl_version {
332bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 target_ver;
333bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 wlan_ver;
334bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 abi_ver;
335bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo};
336bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
337bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valostruct ath6kl_bmi {
338bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 cmd_credits;
339bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	bool done_sent;
340bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 *cmd_buf;
3411f4c894d3a35e88331c01e681d033a2000c3667bKalle Valo	u32 max_data_size;
3421f4c894d3a35e88331c01e681d033a2000c3667bKalle Valo	u32 max_cmd_size;
343bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo};
344bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
345bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valostruct target_stats {
346bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 tx_pkt;
347bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 tx_byte;
348bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 tx_ucast_pkt;
349bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 tx_ucast_byte;
350bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 tx_mcast_pkt;
351bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 tx_mcast_byte;
352bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 tx_bcast_pkt;
353bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 tx_bcast_byte;
354bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 tx_rts_success_cnt;
355bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 tx_pkt_per_ac[4];
356bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
357bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 tx_err;
358bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 tx_fail_cnt;
359bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 tx_retry_cnt;
360bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 tx_mult_retry_cnt;
361bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 tx_rts_fail_cnt;
362bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
363bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 rx_pkt;
364bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 rx_byte;
365bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 rx_ucast_pkt;
366bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 rx_ucast_byte;
367bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 rx_mcast_pkt;
368bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 rx_mcast_byte;
369bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 rx_bcast_pkt;
370bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 rx_bcast_byte;
371bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 rx_frgment_pkt;
372bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
373bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 rx_err;
374bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 rx_crc_err;
375bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 rx_key_cache_miss;
376bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 rx_decrypt_err;
377bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 rx_dupl_frame;
378bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
379bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 tkip_local_mic_fail;
380bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 tkip_cnter_measures_invoked;
381bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 tkip_replays;
382bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 tkip_fmt_err;
383bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 ccmp_fmt_err;
384bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 ccmp_replays;
385bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
386bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 pwr_save_fail_cnt;
387bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
388bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 cs_bmiss_cnt;
389bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 cs_low_rssi_cnt;
390bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 cs_connect_cnt;
391bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u64 cs_discon_cnt;
392bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
393bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	s32 tx_ucast_rate;
394bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	s32 rx_ucast_rate;
395bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
396bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 lq_val;
397bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
398bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 wow_pkt_dropped;
399bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u16 wow_evt_discarded;
400bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
401bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	s16 noise_floor_calib;
402bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	s16 cs_rssi;
403bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	s16 cs_ave_beacon_rssi;
404bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 cs_ave_beacon_snr;
405bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 cs_last_roam_msec;
406bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 cs_snr;
407bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
408bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 wow_host_pkt_wakeups;
409bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 wow_host_evt_wakeups;
410bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
411bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 arp_received;
412bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 arp_matched;
413bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 arp_replied;
414bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo};
415bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
416bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valostruct ath6kl_mbox_info {
417bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 htc_addr;
418bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 htc_ext_addr;
419bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 htc_ext_sz;
420bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
421bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 block_size;
422bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
423bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 gmbox_addr;
424bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
425bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 gmbox_sz;
426bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo};
427bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
428bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo/*
429bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo * 802.11i defines an extended IV for use with non-WEP ciphers.
430bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo * When the EXTIV bit is set in the key id byte an additional
431bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo * 4 bytes immediately follow the IV for TKIP.  For CCMP the
432bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo * EXTIV bit is likewise set but the 8 bytes represent the
433bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo * CCMP header rather than IV+extended-IV.
434bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo */
435bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
436bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define ATH6KL_KEYBUF_SIZE 16
437bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define ATH6KL_MICBUF_SIZE (8+8)	/* space for both tx and rx */
438bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
439bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define ATH6KL_KEY_XMIT  0x01
440bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define ATH6KL_KEY_RECV  0x02
441bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define ATH6KL_KEY_DEFAULT   0x80	/* default xmit key */
442bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
4439a5b13182cc10d693c55a5c02d753e54514b9bfcJouni Malinen/* Initial group key for AP mode */
444bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valostruct ath6kl_req_key {
4459a5b13182cc10d693c55a5c02d753e54514b9bfcJouni Malinen	bool valid;
4469a5b13182cc10d693c55a5c02d753e54514b9bfcJouni Malinen	u8 key_index;
4479a5b13182cc10d693c55a5c02d753e54514b9bfcJouni Malinen	int key_type;
4489a5b13182cc10d693c55a5c02d753e54514b9bfcJouni Malinen	u8 key[WLAN_MAX_KEY_LEN];
4499a5b13182cc10d693c55a5c02d753e54514b9bfcJouni Malinen	u8 key_len;
450bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo};
451bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
45277eab1e929c371f98c6a17a8c5f566529d3b0be2Kalle Valoenum ath6kl_hif_type {
45377eab1e929c371f98c6a17a8c5f566529d3b0be2Kalle Valo	ATH6KL_HIF_TYPE_SDIO,
45477eab1e929c371f98c6a17a8c5f566529d3b0be2Kalle Valo	ATH6KL_HIF_TYPE_USB,
45577eab1e929c371f98c6a17a8c5f566529d3b0be2Kalle Valo};
45677eab1e929c371f98c6a17a8c5f566529d3b0be2Kalle Valo
45780abaf9b4c920cab044e185ed4327f801c1ff99dVasanthakumar Thiagarajan/* Max number of filters that hw supports */
45880abaf9b4c920cab044e185ed4327f801c1ff99dVasanthakumar Thiagarajan#define ATH6K_MAX_MC_FILTERS_PER_LIST 7
45980abaf9b4c920cab044e185ed4327f801c1ff99dVasanthakumar Thiagarajanstruct ath6kl_mc_filter {
46080abaf9b4c920cab044e185ed4327f801c1ff99dVasanthakumar Thiagarajan	struct list_head list;
46180abaf9b4c920cab044e185ed4327f801c1ff99dVasanthakumar Thiagarajan	char hw_addr[ATH6KL_MCAST_FILTER_MAC_ADDR_SIZE];
46280abaf9b4c920cab044e185ed4327f801c1ff99dVasanthakumar Thiagarajan};
46380abaf9b4c920cab044e185ed4327f801c1ff99dVasanthakumar Thiagarajan
46471f96ee6c6fd50fefb3f5550f25380060a85eebfKalle Valo/*
46571f96ee6c6fd50fefb3f5550f25380060a85eebfKalle Valo * Driver's maximum limit, note that some firmwares support only one vif
46671f96ee6c6fd50fefb3f5550f25380060a85eebfKalle Valo * and the runtime (current) limit must be checked from ar->vif_max.
46771f96ee6c6fd50fefb3f5550f25380060a85eebfKalle Valo */
468b64de35654cea2f5301d08f9195836f7ea8118c0Vasanthakumar Thiagarajan#define ATH6KL_VIF_MAX	3
469334234b51453fe5def250bd60ea63b1f04a8e0d2Vasanthakumar Thiagarajan
47059c98449b8af405aa6245ea9f640c5847f42d26eVasanthakumar Thiagarajan/* vif flags info */
47159c98449b8af405aa6245ea9f640c5847f42d26eVasanthakumar Thiagarajanenum ath6kl_vif_state {
47259c98449b8af405aa6245ea9f640c5847f42d26eVasanthakumar Thiagarajan	CONNECTED,
47359c98449b8af405aa6245ea9f640c5847f42d26eVasanthakumar Thiagarajan	CONNECT_PEND,
47459c98449b8af405aa6245ea9f640c5847f42d26eVasanthakumar Thiagarajan	WMM_ENABLED,
47559c98449b8af405aa6245ea9f640c5847f42d26eVasanthakumar Thiagarajan	NETQ_STOPPED,
47659c98449b8af405aa6245ea9f640c5847f42d26eVasanthakumar Thiagarajan	DTIM_EXPIRED,
47759c98449b8af405aa6245ea9f640c5847f42d26eVasanthakumar Thiagarajan	NETDEV_REGISTERED,
47859c98449b8af405aa6245ea9f640c5847f42d26eVasanthakumar Thiagarajan	CLEAR_BSSFILTER_ON_BEACON,
47959c98449b8af405aa6245ea9f640c5847f42d26eVasanthakumar Thiagarajan	DTIM_PERIOD_AVAIL,
48059c98449b8af405aa6245ea9f640c5847f42d26eVasanthakumar Thiagarajan	WLAN_ENABLED,
481b95907a744fb2afe282cebd9b58371533818fbaeVasanthakumar Thiagarajan	STATS_UPDATE_PEND,
482081c7a84e969453716e2a7bd315417067c3643adRaja Mani	HOST_SLEEP_MODE_CMD_PROCESSED,
48359c98449b8af405aa6245ea9f640c5847f42d26eVasanthakumar Thiagarajan};
48459c98449b8af405aa6245ea9f640c5847f42d26eVasanthakumar Thiagarajan
485108438bc6ad16b3962aa5009123cd810d1c1f643Vasanthakumar Thiagarajanstruct ath6kl_vif {
486990bd9151927ad55c7e3da3b05cf13ecfe7a31bfVasanthakumar Thiagarajan	struct list_head list;
487108438bc6ad16b3962aa5009123cd810d1c1f643Vasanthakumar Thiagarajan	struct wireless_dev wdev;
488108438bc6ad16b3962aa5009123cd810d1c1f643Vasanthakumar Thiagarajan	struct net_device *ndev;
489108438bc6ad16b3962aa5009123cd810d1c1f643Vasanthakumar Thiagarajan	struct ath6kl *ar;
490478ac0272154023abb813db7ae12dc380caeb68eVasanthakumar Thiagarajan	/* Lock to protect vif specific net_stats and flags */
491478ac0272154023abb813db7ae12dc380caeb68eVasanthakumar Thiagarajan	spinlock_t if_lock;
492334234b51453fe5def250bd60ea63b1f04a8e0d2Vasanthakumar Thiagarajan	u8 fw_vif_idx;
49359c98449b8af405aa6245ea9f640c5847f42d26eVasanthakumar Thiagarajan	unsigned long flags;
4943450334f392bca1fccbf04a90020161ec4404a1eVasanthakumar Thiagarajan	int ssid_len;
4953450334f392bca1fccbf04a90020161ec4404a1eVasanthakumar Thiagarajan	u8 ssid[IEEE80211_MAX_SSID_LEN];
4963450334f392bca1fccbf04a90020161ec4404a1eVasanthakumar Thiagarajan	u8 dot11_auth_mode;
4973450334f392bca1fccbf04a90020161ec4404a1eVasanthakumar Thiagarajan	u8 auth_mode;
4983450334f392bca1fccbf04a90020161ec4404a1eVasanthakumar Thiagarajan	u8 prwise_crypto;
4993450334f392bca1fccbf04a90020161ec4404a1eVasanthakumar Thiagarajan	u8 prwise_crypto_len;
5003450334f392bca1fccbf04a90020161ec4404a1eVasanthakumar Thiagarajan	u8 grp_crypto;
5013450334f392bca1fccbf04a90020161ec4404a1eVasanthakumar Thiagarajan	u8 grp_crypto_len;
5023450334f392bca1fccbf04a90020161ec4404a1eVasanthakumar Thiagarajan	u8 def_txkey_index;
503f5938f249a08a4e6c9046fa095be00db664158ccVasanthakumar Thiagarajan	u8 next_mode;
504f5938f249a08a4e6c9046fa095be00db664158ccVasanthakumar Thiagarajan	u8 nw_type;
5058c8b65e3e3b81d28d185f0a8b6543e42b50a812dVasanthakumar Thiagarajan	u8 bssid[ETH_ALEN];
5068c8b65e3e3b81d28d185f0a8b6543e42b50a812dVasanthakumar Thiagarajan	u8 req_bssid[ETH_ALEN];
507f74bac54a507a1b71be352d422b25cb5fd38db54Vasanthakumar Thiagarajan	u16 ch_hint;
508f74bac54a507a1b71be352d422b25cb5fd38db54Vasanthakumar Thiagarajan	u16 bss_ch;
5096f2a73f9e5c7013e14cf898fead81a363cdf0548Vasanthakumar Thiagarajan	struct ath6kl_wep_key wep_key_list[WMI_MAX_KEY_INDEX + 1];
5106f2a73f9e5c7013e14cf898fead81a363cdf0548Vasanthakumar Thiagarajan	struct ath6kl_key keys[WMI_MAX_KEY_INDEX + 1];
5112132c69cb9efaf2b7300f6da916ab5f96c9c95b7Vasanthakumar Thiagarajan	struct aggr_info *aggr_cntxt;
51210509f903ebb7d2a02571f30cb937dd923b023cfKalle Valo
513de3ad7138c853fb3f5c239a40e0228bd94d583e7Vasanthakumar Thiagarajan	struct timer_list disconnect_timer;
51410509f903ebb7d2a02571f30cb937dd923b023cfKalle Valo	struct timer_list sched_scan_timer;
51510509f903ebb7d2a02571f30cb937dd923b023cfKalle Valo
51614ee6f6b7db968229edb7524588e71182c843080Vasanthakumar Thiagarajan	struct cfg80211_scan_request *scan_req;
51714ee6f6b7db968229edb7524588e71182c843080Vasanthakumar Thiagarajan	enum sme_state sme_state;
518cf5333d70f822d950f0c2f4bec7a8939871d9b6aVasanthakumar Thiagarajan	int reconnect_flag;
5191052261e4bba9879c1d7d519c8e8606c5d4264d5Jouni Malinen	u32 last_roc_id;
5201052261e4bba9879c1d7d519c8e8606c5d4264d5Jouni Malinen	u32 last_cancel_roc_id;
521cf5333d70f822d950f0c2f4bec7a8939871d9b6aVasanthakumar Thiagarajan	u32 send_action_id;
522cf5333d70f822d950f0c2f4bec7a8939871d9b6aVasanthakumar Thiagarajan	bool probe_req_report;
523cf5333d70f822d950f0c2f4bec7a8939871d9b6aVasanthakumar Thiagarajan	u16 next_chan;
524cf5333d70f822d950f0c2f4bec7a8939871d9b6aVasanthakumar Thiagarajan	u16 assoc_bss_beacon_int;
5258f46fccd6cd0d7ba70ba1636e59e98ca17dd2239Raja Mani	u16 listen_intvl_t;
526ce0dc0cfeac9fde9964fa4b07aecd7cc604060e0Raja Mani	u16 bmiss_time_t;
527cf5333d70f822d950f0c2f4bec7a8939871d9b6aVasanthakumar Thiagarajan	u8 assoc_bss_dtim_period;
528b95907a744fb2afe282cebd9b58371533818fbaeVasanthakumar Thiagarajan	struct net_device_stats net_stats;
529b95907a744fb2afe282cebd9b58371533818fbaeVasanthakumar Thiagarajan	struct target_stats target_stats;
53080abaf9b4c920cab044e185ed4327f801c1ff99dVasanthakumar Thiagarajan
53180abaf9b4c920cab044e185ed4327f801c1ff99dVasanthakumar Thiagarajan	struct list_head mc_filter;
532108438bc6ad16b3962aa5009123cd810d1c1f643Vasanthakumar Thiagarajan};
533108438bc6ad16b3962aa5009123cd810d1c1f643Vasanthakumar Thiagarajan
5346cb3c714e75c6e70fa1c379b7f3af2f143f31c70Raja Mani#define WOW_LIST_ID		0
5356cb3c714e75c6e70fa1c379b7f3af2f143f31c70Raja Mani#define WOW_HOST_REQ_DELAY	500 /* ms */
5366cb3c714e75c6e70fa1c379b7f3af2f143f31c70Raja Mani
53710509f903ebb7d2a02571f30cb937dd923b023cfKalle Valo#define ATH6KL_SCHED_SCAN_RESULT_DELAY 5000 /* ms */
53810509f903ebb7d2a02571f30cb937dd923b023cfKalle Valo
539bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo/* Flag info */
54059c98449b8af405aa6245ea9f640c5847f42d26eVasanthakumar Thiagarajanenum ath6kl_dev_state {
54159c98449b8af405aa6245ea9f640c5847f42d26eVasanthakumar Thiagarajan	WMI_ENABLED,
54259c98449b8af405aa6245ea9f640c5847f42d26eVasanthakumar Thiagarajan	WMI_READY,
54359c98449b8af405aa6245ea9f640c5847f42d26eVasanthakumar Thiagarajan	WMI_CTRL_EP_FULL,
54459c98449b8af405aa6245ea9f640c5847f42d26eVasanthakumar Thiagarajan	TESTMODE,
54559c98449b8af405aa6245ea9f640c5847f42d26eVasanthakumar Thiagarajan	DESTROY_IN_PROGRESS,
54659c98449b8af405aa6245ea9f640c5847f42d26eVasanthakumar Thiagarajan	SKIP_SCAN,
54759c98449b8af405aa6245ea9f640c5847f42d26eVasanthakumar Thiagarajan	ROAM_TBL_PEND,
5485fe4dffbc12b22507d2416667720cbd4b27c693bKalle Valo	FIRST_BOOT,
54959c98449b8af405aa6245ea9f640c5847f42d26eVasanthakumar Thiagarajan};
550bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
55176a9fbe27ec04420844ddf49b9e7a2f872222983Kalle Valoenum ath6kl_state {
55276a9fbe27ec04420844ddf49b9e7a2f872222983Kalle Valo	ATH6KL_STATE_OFF,
55376a9fbe27ec04420844ddf49b9e7a2f872222983Kalle Valo	ATH6KL_STATE_ON,
554390a8c8fae2e7072579198414e631984a61c485eRaja Mani	ATH6KL_STATE_SUSPENDING,
555390a8c8fae2e7072579198414e631984a61c485eRaja Mani	ATH6KL_STATE_RESUMING,
55676a9fbe27ec04420844ddf49b9e7a2f872222983Kalle Valo	ATH6KL_STATE_DEEPSLEEP,
557b4b2a0b116d79510640622a5f28f219065e61b03Kalle Valo	ATH6KL_STATE_CUTPOWER,
558dd6c0c63b43afc3a99b6c69d0b509f0395bb4fe2Raja Mani	ATH6KL_STATE_WOW,
55910509f903ebb7d2a02571f30cb937dd923b023cfKalle Valo	ATH6KL_STATE_SCHED_SCAN,
56076a9fbe27ec04420844ddf49b9e7a2f872222983Kalle Valo};
56176a9fbe27ec04420844ddf49b9e7a2f872222983Kalle Valo
562bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valostruct ath6kl {
563bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	struct device *dev;
564be98e3a48cb9b9e63da8537a378f656af2a9f2c6Vasanthakumar Thiagarajan	struct wiphy *wiphy;
56576a9fbe27ec04420844ddf49b9e7a2f872222983Kalle Valo
56676a9fbe27ec04420844ddf49b9e7a2f872222983Kalle Valo	enum ath6kl_state state;
5675f1127ffbae3029fde5dc1464ec3c26cdf34cb80Kalle Valo	unsigned int testmode;
56876a9fbe27ec04420844ddf49b9e7a2f872222983Kalle Valo
569bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	struct ath6kl_bmi bmi;
570bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	const struct ath6kl_hif_ops *hif_ops;
571bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	struct wmi *wmi;
572bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	int tx_pending[ENDPOINT_MAX];
573bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	int total_tx_data_pend;
574bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	struct htc_target *htc_target;
57577eab1e929c371f98c6a17a8c5f566529d3b0be2Kalle Valo	enum ath6kl_hif_type hif_type;
576bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	void *hif_priv;
577990bd9151927ad55c7e3da3b05cf13ecfe7a31bfVasanthakumar Thiagarajan	struct list_head vif_list;
578990bd9151927ad55c7e3da3b05cf13ecfe7a31bfVasanthakumar Thiagarajan	/* Lock to avoid race in vif_list entries among add/del/traverse */
579990bd9151927ad55c7e3da3b05cf13ecfe7a31bfVasanthakumar Thiagarajan	spinlock_t list_lock;
58055055976fe15f450aded0a6f2ed2996411bd3e2eVasanthakumar Thiagarajan	u8 num_vif;
581368b1b0f4b0328f488780605c423aafe1e6235b5Kalle Valo	unsigned int vif_max;
5823226f68af4fe74932677db271b4ac4f26556954dVasanthakumar Thiagarajan	u8 max_norm_iface;
58355055976fe15f450aded0a6f2ed2996411bd3e2eVasanthakumar Thiagarajan	u8 avail_idx_map;
58412eb9444a8df7ab4aa5f4c91f8e3049af5d9819bKalle Valo
58512eb9444a8df7ab4aa5f4c91f8e3049af5d9819bKalle Valo	/*
58612eb9444a8df7ab4aa5f4c91f8e3049af5d9819bKalle Valo	 * Protects at least amsdu_rx_buffer_queue, ath6kl_alloc_cookie()
58712eb9444a8df7ab4aa5f4c91f8e3049af5d9819bKalle Valo	 * calls, tx_pending and total_tx_data_pend.
58812eb9444a8df7ab4aa5f4c91f8e3049af5d9819bKalle Valo	 */
589bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	spinlock_t lock;
59012eb9444a8df7ab4aa5f4c91f8e3049af5d9819bKalle Valo
591bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	struct semaphore sem;
592e5090444be811ce45653969363be8fcb4c52d597Vivek Natarajan	u8 lrssi_roam_threshold;
593bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	struct ath6kl_version version;
594bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 target_type;
595bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 tx_pwr;
596bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	struct ath6kl_node_mapping node_map[MAX_NODE_NUM];
597bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 ibss_ps_enable;
59855055976fe15f450aded0a6f2ed2996411bd3e2eVasanthakumar Thiagarajan	bool ibss_if_active;
599bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 node_num;
600bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 next_ep_id;
601bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	struct ath6kl_cookie *cookie_list;
602bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 cookie_count;
603bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	enum htc_endpoint_id ac2ep_map[WMM_NUM_AC];
604bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	bool ac_stream_active[WMM_NUM_AC];
605bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 ac_stream_pri_map[WMM_NUM_AC];
606bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 hiac_stream_active_pri;
607bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 ep2ac_map[ENDPOINT_MAX];
608bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	enum htc_endpoint_id ctrl_ep;
6093c3703987a43b969e2f1e54c4e28f1fc8594c9d8Kalle Valo	struct ath6kl_htc_credit_info credit_state_info;
610bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 connect_ctrl_flags;
611bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u32 user_key_ctrl;
612bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 usr_bss_filter;
613bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	struct ath6kl_sta sta_list[AP_MAX_NUM_STA];
614bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 sta_list_index;
615bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	struct ath6kl_req_key ap_mode_bkey;
616bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	struct sk_buff_head mcastpsq;
61712eb9444a8df7ab4aa5f4c91f8e3049af5d9819bKalle Valo
61812eb9444a8df7ab4aa5f4c91f8e3049af5d9819bKalle Valo	/*
61912eb9444a8df7ab4aa5f4c91f8e3049af5d9819bKalle Valo	 * FIXME: protects access to mcastpsq but is actually useless as
62012eb9444a8df7ab4aa5f4c91f8e3049af5d9819bKalle Valo	 * all skbe_queue_*() functions provide serialisation themselves
62112eb9444a8df7ab4aa5f4c91f8e3049af5d9819bKalle Valo	 */
622bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	spinlock_t mcastpsq_lock;
62312eb9444a8df7ab4aa5f4c91f8e3049af5d9819bKalle Valo
624bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 intra_bss;
625bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	struct wmi_ap_mode_stat ap_stats;
626bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 ap_country_code[3];
627bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	struct list_head amsdu_rx_buffer_queue;
628bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 rx_meta_ver;
629bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	enum wlan_low_pwr_state wlan_pwr_state;
630d66ea4f9d63732790ae260eccb6c991dfa7a3b32Vasanthakumar Thiagarajan	u8 mac_addr[ETH_ALEN];
631bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#define AR_MCAST_FILTER_MAC_ADDR_SIZE  4
632003353b0d27489228eff79447d0731687cea0207Kalle Valo	struct {
633003353b0d27489228eff79447d0731687cea0207Kalle Valo		void *rx_report;
634003353b0d27489228eff79447d0731687cea0207Kalle Valo		size_t rx_report_len;
635003353b0d27489228eff79447d0731687cea0207Kalle Valo	} tm;
636003353b0d27489228eff79447d0731687cea0207Kalle Valo
637856f4b313abaeeffff97792c72d17b8b7019440bKalle Valo	struct ath6kl_hw {
638856f4b313abaeeffff97792c72d17b8b7019440bKalle Valo		u32 id;
639293badf4e2fcb81aeab92616856c65fedc454c94Kalle Valo		const char *name;
640a01ac4144e7af80f8c1fd861dc5d280c5687c2a9Kalle Valo		u32 dataset_patch_addr;
641a01ac4144e7af80f8c1fd861dc5d280c5687c2a9Kalle Valo		u32 app_load_addr;
642a01ac4144e7af80f8c1fd861dc5d280c5687c2a9Kalle Valo		u32 app_start_override_addr;
643991b27eaf937a67bb575a95be5c592d9b9109a84Kalle Valo		u32 board_ext_data_addr;
644991b27eaf937a67bb575a95be5c592d9b9109a84Kalle Valo		u32 reserved_ram_size;
6450d4d72bf8e15199c4cf8d5491c9c45464a1d6f08Kalle Valo		u32 board_addr;
64639586bf272c77365a547867c8009bb92cc70b9f0Ryan Hsu		u32 refclk_hz;
64739586bf272c77365a547867c8009bb92cc70b9f0Ryan Hsu		u32 uarttx_pin;
648cd23c1c9b8a2de64477a795ab5a9cd5278397f24Alex Yang		u32 testscript_addr;
649d1a9421ddc63c2b81f9b05ea7ba6082c13b933b5Kalle Valo
650c0038972b1253ad7f3ab7cc35ed57a830f5c8568Kalle Valo		struct ath6kl_hw_fw {
651c0038972b1253ad7f3ab7cc35ed57a830f5c8568Kalle Valo			const char *dir;
652c0038972b1253ad7f3ab7cc35ed57a830f5c8568Kalle Valo			const char *otp;
653c0038972b1253ad7f3ab7cc35ed57a830f5c8568Kalle Valo			const char *fw;
654c0038972b1253ad7f3ab7cc35ed57a830f5c8568Kalle Valo			const char *tcmd;
655c0038972b1253ad7f3ab7cc35ed57a830f5c8568Kalle Valo			const char *patch;
656cd23c1c9b8a2de64477a795ab5a9cd5278397f24Alex Yang			const char *utf;
657cd23c1c9b8a2de64477a795ab5a9cd5278397f24Alex Yang			const char *testscript;
658c0038972b1253ad7f3ab7cc35ed57a830f5c8568Kalle Valo		} fw;
659c0038972b1253ad7f3ab7cc35ed57a830f5c8568Kalle Valo
660d1a9421ddc63c2b81f9b05ea7ba6082c13b933b5Kalle Valo		const char *fw_board;
661d1a9421ddc63c2b81f9b05ea7ba6082c13b933b5Kalle Valo		const char *fw_default_board;
662a01ac4144e7af80f8c1fd861dc5d280c5687c2a9Kalle Valo	} hw;
663a01ac4144e7af80f8c1fd861dc5d280c5687c2a9Kalle Valo
664bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u16 conf_flags;
665e390af779dc671551800514d391928f5a798089aRaja Mani	u16 suspend_mode;
6661e9a905d9afd289bf19f02092a56660c2bcc50dbRaja Mani	u16 wow_suspend_mode;
667bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	wait_queue_head_t event_wq;
668bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	struct ath6kl_mbox_info mbox_info;
669bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
670bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	struct ath6kl_cookie cookie_mem[MAX_COOKIE_NUM];
671bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	unsigned long flag;
672bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
673bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 *fw_board;
674bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	size_t fw_board_len;
675bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
676bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 *fw_otp;
677bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	size_t fw_otp_len;
678bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
679bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 *fw;
680bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	size_t fw_len;
681bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
682bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	u8 *fw_patch;
683bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	size_t fw_patch_len;
684bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
685cd23c1c9b8a2de64477a795ab5a9cd5278397f24Alex Yang	u8 *fw_testscript;
686cd23c1c9b8a2de64477a795ab5a9cd5278397f24Alex Yang	size_t fw_testscript_len;
687cd23c1c9b8a2de64477a795ab5a9cd5278397f24Alex Yang
68865a8b4cc511b68712799e91137324f2abece7d3eKalle Valo	unsigned int fw_api;
68997e0496d056726ab46e7e977315f2ab847b34209Kalle Valo	unsigned long fw_capabilities[ATH6KL_CAPABILITY_LEN];
69097e0496d056726ab46e7e977315f2ab847b34209Kalle Valo
691bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo	struct workqueue_struct *ath6kl_wq;
6927c3075e9ea20a5feca48c8ff22dd23140e55ab1eVasanthakumar Thiagarajan
693d999ba3e21dc1c84cac9caf68db78fd6dbde7817Vasanthakumar Thiagarajan	struct dentry *debugfs_phy;
6946a7c9badab158086b6162c661a47c4f1a4a68e92Jouni Malinen
6956bbc7c35ed0fb61c7739e91d5ee7016455770511Jouni Malinen	bool p2p;
6966bbc7c35ed0fb61c7739e91d5ee7016455770511Jouni Malinen
697e5348a1e3341dca3e53a6db568c2d4d48929dd95Vasanthakumar Thiagarajan	bool wiphy_registered;
698e5348a1e3341dca3e53a6db568c2d4d48929dd95Vasanthakumar Thiagarajan
699bdf5396be177b689c00ae6ebed00d13fafaed36eKalle Valo#ifdef CONFIG_ATH6KL_DEBUG
700bdf5396be177b689c00ae6ebed00d13fafaed36eKalle Valo	struct {
7019b9a4f2acac2a04416ba15242b8666d4f8273e31Kalle Valo		struct sk_buff_head fwlog_queue;
702c807b30d2588dd3c74db1f690a0e9e724dd332daKalle Valo		struct completion fwlog_completion;
703c807b30d2588dd3c74db1f690a0e9e724dd332daKalle Valo		bool fwlog_open;
704c807b30d2588dd3c74db1f690a0e9e724dd332daKalle Valo
705939f1ccec80bd2dad5638de2a6819c66d4cb6f32Kalle Valo		u32 fwlog_mask;
7069b9a4f2acac2a04416ba15242b8666d4f8273e31Kalle Valo
70791d57de5adfc40184ef7cb8974104459c5211addVasanthakumar Thiagarajan		unsigned int dbgfs_diag_reg;
708252c068b9fba57493940af344b6d92ee3c278941Vasanthakumar Thiagarajan		u32 diag_reg_addr_wr;
709252c068b9fba57493940af344b6d92ee3c278941Vasanthakumar Thiagarajan		u32 diag_reg_val_wr;
7109a7308341b71f3c5e88e6a30f9d6a1cfb3bc2b4fKalle Valo
7119a7308341b71f3c5e88e6a30f9d6a1cfb3bc2b4fKalle Valo		struct {
7129a7308341b71f3c5e88e6a30f9d6a1cfb3bc2b4fKalle Valo			unsigned int invalid_rate;
7139a7308341b71f3c5e88e6a30f9d6a1cfb3bc2b4fKalle Valo		} war_stats;
7144b28a80dd6713c404f4f0084007456b769aba553Jouni Malinen
7154b28a80dd6713c404f4f0084007456b769aba553Jouni Malinen		u8 *roam_tbl;
7164b28a80dd6713c404f4f0084007456b769aba553Jouni Malinen		unsigned int roam_tbl_len;
717ff0b007573c70be88c4efd3c1d8b41e9ba9710b3Jouni Malinen
718ff0b007573c70be88c4efd3c1d8b41e9ba9710b3Jouni Malinen		u8 keepalive;
719ff0b007573c70be88c4efd3c1d8b41e9ba9710b3Jouni Malinen		u8 disc_timeout;
720bdf5396be177b689c00ae6ebed00d13fafaed36eKalle Valo	} debug;
721bdf5396be177b689c00ae6ebed00d13fafaed36eKalle Valo#endif /* CONFIG_ATH6KL_DEBUG */
722bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo};
723bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
724d6d5c06c3cf6b1b5b4ffaac8a05c0cea97f90857Kalle Valostatic inline struct ath6kl *ath6kl_priv(struct net_device *dev)
725bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo{
726108438bc6ad16b3962aa5009123cd810d1c1f643Vasanthakumar Thiagarajan	return ((struct ath6kl_vif *) netdev_priv(dev))->ar;
727bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo}
728bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
729bc07ddb29a7b71ad009bcd84bee4c93908cf22b6Kalle Valostatic inline u32 ath6kl_get_hi_item_addr(struct ath6kl *ar,
730bc07ddb29a7b71ad009bcd84bee4c93908cf22b6Kalle Valo					  u32 item_offset)
731bc07ddb29a7b71ad009bcd84bee4c93908cf22b6Kalle Valo{
732bc07ddb29a7b71ad009bcd84bee4c93908cf22b6Kalle Valo	u32 addr = 0;
733bc07ddb29a7b71ad009bcd84bee4c93908cf22b6Kalle Valo
734bc07ddb29a7b71ad009bcd84bee4c93908cf22b6Kalle Valo	if (ar->target_type == TARGET_TYPE_AR6003)
735bc07ddb29a7b71ad009bcd84bee4c93908cf22b6Kalle Valo		addr = ATH6KL_AR6003_HI_START_ADDR + item_offset;
736bc07ddb29a7b71ad009bcd84bee4c93908cf22b6Kalle Valo	else if (ar->target_type == TARGET_TYPE_AR6004)
737bc07ddb29a7b71ad009bcd84bee4c93908cf22b6Kalle Valo		addr = ATH6KL_AR6004_HI_START_ADDR + item_offset;
738bc07ddb29a7b71ad009bcd84bee4c93908cf22b6Kalle Valo
739bc07ddb29a7b71ad009bcd84bee4c93908cf22b6Kalle Valo	return addr;
740bc07ddb29a7b71ad009bcd84bee4c93908cf22b6Kalle Valo}
741bc07ddb29a7b71ad009bcd84bee4c93908cf22b6Kalle Valo
742bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valoint ath6kl_configure_target(struct ath6kl *ar);
743bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valovoid ath6kl_detect_error(unsigned long ptr);
744bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valovoid disconnect_timer_handler(unsigned long ptr);
745bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valovoid init_netdev(struct net_device *dev);
746bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valovoid ath6kl_cookie_init(struct ath6kl *ar);
747bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valovoid ath6kl_cookie_cleanup(struct ath6kl *ar);
748bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valovoid ath6kl_rx(struct htc_target *target, struct htc_packet *packet);
749bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valovoid ath6kl_tx_complete(void *context, struct list_head *packet_queue);
750bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valoenum htc_send_full_action ath6kl_tx_queue_full(struct htc_target *target,
751bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo					       struct htc_packet *packet);
752bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valovoid ath6kl_stop_txrx(struct ath6kl *ar);
753bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valovoid ath6kl_cleanup_amsdu_rxbufs(struct ath6kl *ar);
754f9ea0753a18448a5e92369317b6ac061fe1275bfVasanthakumar Thiagarajanint ath6kl_diag_write32(struct ath6kl *ar, u32 address, __le32 value);
755addb44be036dd5fc814be770ec4b90f08c820e76Kalle Valoint ath6kl_diag_write(struct ath6kl *ar, u32 address, void *data, u32 length);
756addb44be036dd5fc814be770ec4b90f08c820e76Kalle Valoint ath6kl_diag_read32(struct ath6kl *ar, u32 address, u32 *value);
757addb44be036dd5fc814be770ec4b90f08c820e76Kalle Valoint ath6kl_diag_read(struct ath6kl *ar, u32 address, void *data, u32 length);
758bc07ddb29a7b71ad009bcd84bee4c93908cf22b6Kalle Valoint ath6kl_read_fwlogs(struct ath6kl *ar);
759e29f25f5cd23d705b3a186e53cfddd3663875c45Vasanthakumar Thiagarajanvoid ath6kl_init_profile_info(struct ath6kl_vif *vif);
760bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valovoid ath6kl_tx_data_cleanup(struct ath6kl *ar);
761bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
762bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valostruct ath6kl_cookie *ath6kl_alloc_cookie(struct ath6kl *ar);
763bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valovoid ath6kl_free_cookie(struct ath6kl *ar, struct ath6kl_cookie *cookie);
764bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valoint ath6kl_data_tx(struct sk_buff *skb, struct net_device *dev);
765bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
7667baef812eb5f02ccacf6fac3888c1cfa36293e91Vasanthakumar Thiagarajanstruct aggr_info *aggr_init(struct ath6kl_vif *vif);
767c86515412f0c364f2d45029b45d5909614087af3Vasanthakumar Thiagarajanvoid aggr_conn_init(struct ath6kl_vif *vif, struct aggr_info *aggr_info,
768c86515412f0c364f2d45029b45d5909614087af3Vasanthakumar Thiagarajan		    struct aggr_info_conn *aggr_conn);
769bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valovoid ath6kl_rx_refill(struct htc_target *target,
770bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo		      enum htc_endpoint_id endpoint);
771bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valovoid ath6kl_refill_amsdu_rxbufs(struct ath6kl *ar, int count);
772bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valostruct htc_packet *ath6kl_alloc_amsdu_rxbuf(struct htc_target *target,
773bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo					    enum htc_endpoint_id endpoint,
774bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo					    int len);
775bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valovoid aggr_module_destroy(struct aggr_info *aggr_info);
7761d2a4456de20db73362c86c88fe9c02169f29d0aVasanthakumar Thiagarajanvoid aggr_reset_state(struct aggr_info_conn *aggr_conn);
777bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
77851b56e263fb875a86e1f90e41b8c0b8a47c69b47Kalle Valostruct ath6kl_sta *ath6kl_find_sta(struct ath6kl_vif *vif, u8 *node_addr);
779bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valostruct ath6kl_sta *ath6kl_find_sta_by_aid(struct ath6kl *ar, u8 aid);
780bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
78151b56e263fb875a86e1f90e41b8c0b8a47c69b47Kalle Valovoid ath6kl_ready_event(void *devt, u8 *datap, u32 sw_ver, u32 abi_ver);
782bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valoint ath6kl_control_tx(void *devt, struct sk_buff *skb,
783bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo		      enum htc_endpoint_id eid);
784240d279940ef496e9456db2287b7989f6521e2e2Vasanthakumar Thiagarajanvoid ath6kl_connect_event(struct ath6kl_vif *vif, u16 channel,
785bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo			  u8 *bssid, u16 listen_int,
786bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo			  u16 beacon_int, enum network_type net_type,
787bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo			  u8 beacon_ie_len, u8 assoc_req_len,
788bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo			  u8 assoc_resp_len, u8 *assoc_info);
789240d279940ef496e9456db2287b7989f6521e2e2Vasanthakumar Thiagarajanvoid ath6kl_connect_ap_mode_bss(struct ath6kl_vif *vif, u16 channel);
790240d279940ef496e9456db2287b7989f6521e2e2Vasanthakumar Thiagarajanvoid ath6kl_connect_ap_mode_sta(struct ath6kl_vif *vif, u16 aid, u8 *mac_addr,
791572e27c00c9d1250ae2b4951eae7e73992174138Jouni Malinen				u8 keymgmt, u8 ucipher, u8 auth,
792c1762a3fe196483981f91b926f5f6ee18af757f2Thirumalai Pachamuthu				u8 assoc_req_len, u8 *assoc_info, u8 apsd_info);
793240d279940ef496e9456db2287b7989f6521e2e2Vasanthakumar Thiagarajanvoid ath6kl_disconnect_event(struct ath6kl_vif *vif, u8 reason,
794bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo			     u8 *bssid, u8 assoc_resp_len,
795bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo			     u8 *assoc_info, u16 prot_reason_status);
796240d279940ef496e9456db2287b7989f6521e2e2Vasanthakumar Thiagarajanvoid ath6kl_tkip_micerr_event(struct ath6kl_vif *vif, u8 keyid, bool ismcast);
797bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valovoid ath6kl_txpwr_rx_evt(void *devt, u8 tx_pwr);
798240d279940ef496e9456db2287b7989f6521e2e2Vasanthakumar Thiagarajanvoid ath6kl_scan_complete_evt(struct ath6kl_vif *vif, int status);
799240d279940ef496e9456db2287b7989f6521e2e2Vasanthakumar Thiagarajanvoid ath6kl_tgt_stats_event(struct ath6kl_vif *vif, u8 *ptr, u32 len);
800bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valovoid ath6kl_indicate_tx_activity(void *devt, u8 traffic_class, bool active);
801bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valoenum htc_endpoint_id ath6kl_ac2_endpoint_id(void *devt, u8 ac);
802bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
803240d279940ef496e9456db2287b7989f6521e2e2Vasanthakumar Thiagarajanvoid ath6kl_pspoll_event(struct ath6kl_vif *vif, u8 aid);
804bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
805240d279940ef496e9456db2287b7989f6521e2e2Vasanthakumar Thiagarajanvoid ath6kl_dtimexpiry_event(struct ath6kl_vif *vif);
806240d279940ef496e9456db2287b7989f6521e2e2Vasanthakumar Thiagarajanvoid ath6kl_disconnect(struct ath6kl_vif *vif);
807240d279940ef496e9456db2287b7989f6521e2e2Vasanthakumar Thiagarajanvoid aggr_recv_delba_req_evt(struct ath6kl_vif *vif, u8 tid);
808240d279940ef496e9456db2287b7989f6521e2e2Vasanthakumar Thiagarajanvoid aggr_recv_addba_req_evt(struct ath6kl_vif *vif, u8 tid, u16 seq_no,
809bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo			     u8 win_sz);
810bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valovoid ath6kl_wakeup_event(void *dev);
811bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo
8126db8fa53ad4fa6d4b390e9bdd68f1238a01070eeVasanthakumar Thiagarajanvoid ath6kl_reset_device(struct ath6kl *ar, u32 target_type,
8136db8fa53ad4fa6d4b390e9bdd68f1238a01070eeVasanthakumar Thiagarajan			 bool wait_fot_compltn, bool cold_reset);
814e29f25f5cd23d705b3a186e53cfddd3663875c45Vasanthakumar Thiagarajanvoid ath6kl_init_control_info(struct ath6kl_vif *vif);
815990bd9151927ad55c7e3da3b05cf13ecfe7a31bfVasanthakumar Thiagarajanstruct ath6kl_vif *ath6kl_vif_first(struct ath6kl *ar);
81655055976fe15f450aded0a6f2ed2996411bd3e2eVasanthakumar Thiagarajanvoid ath6kl_cleanup_vif(struct ath6kl_vif *vif, bool wmi_ready);
8175fe4dffbc12b22507d2416667720cbd4b27c693bKalle Valoint ath6kl_init_hw_start(struct ath6kl *ar);
8185fe4dffbc12b22507d2416667720cbd4b27c693bKalle Valoint ath6kl_init_hw_stop(struct ath6kl *ar);
81945eaa78f757b3b3992ca02c753764665e9fba0a4Kalle Valoint ath6kl_init_fetch_firmwares(struct ath6kl *ar);
82045eaa78f757b3b3992ca02c753764665e9fba0a4Kalle Valoint ath6kl_init_hw_params(struct ath6kl *ar);
82145eaa78f757b3b3992ca02c753764665e9fba0a4Kalle Valo
822a918fb3cc6a58f918f36348c43c3170bb88bc599Raja Manivoid ath6kl_check_wow_status(struct ath6kl *ar);
8235fe4dffbc12b22507d2416667720cbd4b27c693bKalle Valo
82445eaa78f757b3b3992ca02c753764665e9fba0a4Kalle Valostruct ath6kl *ath6kl_core_create(struct device *dev);
82545eaa78f757b3b3992ca02c753764665e9fba0a4Kalle Valoint ath6kl_core_init(struct ath6kl *ar);
82645eaa78f757b3b3992ca02c753764665e9fba0a4Kalle Valovoid ath6kl_core_cleanup(struct ath6kl *ar);
82745eaa78f757b3b3992ca02c753764665e9fba0a4Kalle Valovoid ath6kl_core_destroy(struct ath6kl *ar);
82845eaa78f757b3b3992ca02c753764665e9fba0a4Kalle Valo
829bdcd81707973cf8aa9305337166f8ee842a050d4Kalle Valo#endif /* CORE_H */
830