~ubuntu-branches/debian/experimental/linux-2.6/experimental

1.1.4 by maximilian attems
Import upstream version 2.6.31
1
/*
1.2.21 by Ben Hutchings
Import upstream version 3.0.0~rc1
2
 * Copyright (c) 2008-2011 Atheros Communications Inc.
1.1.4 by maximilian attems
Import upstream version 2.6.31
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 HW_H
18
#define HW_H
19
20
#include <linux/if_ether.h>
21
#include <linux/delay.h>
22
#include <linux/io.h>
23
24
#include "mac.h"
25
#include "ani.h"
26
#include "eeprom.h"
27
#include "calib.h"
28
#include "reg.h"
29
#include "phy.h"
1.2.1 by maximilian attems
Import upstream version 2.6.33
30
#include "btcoex.h"
1.1.4 by maximilian attems
Import upstream version 2.6.31
31
32
#include "../regd.h"
33
34
#define ATHEROS_VENDOR_ID	0x168c
1.2.1 by maximilian attems
Import upstream version 2.6.33
35
1.1.4 by maximilian attems
Import upstream version 2.6.31
36
#define AR5416_DEVID_PCI	0x0023
37
#define AR5416_DEVID_PCIE	0x0024
38
#define AR9160_DEVID_PCI	0x0027
39
#define AR9280_DEVID_PCI	0x0029
40
#define AR9280_DEVID_PCIE	0x002a
41
#define AR9285_DEVID_PCIE	0x002b
1.2.2 by maximilian attems
Import upstream version 2.6.34
42
#define AR2427_DEVID_PCIE	0x002c
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
43
#define AR9287_DEVID_PCI	0x002d
44
#define AR9287_DEVID_PCIE	0x002e
45
#define AR9300_DEVID_PCIE	0x0030
1.2.21 by Ben Hutchings
Import upstream version 3.0.0~rc1
46
#define AR9300_DEVID_AR9340	0x0031
1.2.14 by maximilian attems
Import upstream version 2.6.38~rc6
47
#define AR9300_DEVID_AR9485_PCIE 0x0032
1.2.31 by Ben Hutchings
Import upstream version 3.2~rc4
48
#define AR9300_DEVID_AR9580	0x0033
49
#define AR9300_DEVID_AR9462	0x0034
1.2.27 by Ben Hutchings
Import upstream version 3.1.0~rc4
50
#define AR9300_DEVID_AR9330	0x0035
1.2.1 by maximilian attems
Import upstream version 2.6.33
51
1.1.4 by maximilian attems
Import upstream version 2.6.31
52
#define AR5416_AR9100_DEVID	0x000b
1.2.1 by maximilian attems
Import upstream version 2.6.33
53
1.1.4 by maximilian attems
Import upstream version 2.6.31
54
#define	AR_SUBVENDOR_ID_NOG	0x0e11
55
#define AR_SUBVENDOR_ID_NEW_A	0x7065
56
#define AR5416_MAGIC		0x19641014
57
1.1.5 by Bastian Blank
Import upstream version 2.6.32~rc8
58
#define AR9280_COEX2WIRE_SUBSYSID	0x309b
59
#define AT9285_COEX3WIRE_SA_SUBSYSID	0x30aa
60
#define AT9285_COEX3WIRE_DA_SUBSYSID	0x30ab
61
1.2.1 by maximilian attems
Import upstream version 2.6.33
62
#define ATH_AMPDU_LIMIT_MAX        (64 * 1024 - 1)
63
64
#define	ATH_DEFAULT_NOISE_FLOOR -95
65
66
#define ATH9K_RSSI_BAD			-128
67
1.2.10 by Ben Hutchings
Import upstream version 2.6.37~rc4
68
#define ATH9K_NUM_CHANNELS	38
69
1.1.4 by maximilian attems
Import upstream version 2.6.31
70
/* Register read/write primitives */
1.2.1 by maximilian attems
Import upstream version 2.6.33
71
#define REG_WRITE(_ah, _reg, _val) \
1.2.21 by Ben Hutchings
Import upstream version 3.0.0~rc1
72
	(_ah)->reg_ops.write((_ah), (_val), (_reg))
1.2.1 by maximilian attems
Import upstream version 2.6.33
73
74
#define REG_READ(_ah, _reg) \
1.2.21 by Ben Hutchings
Import upstream version 3.0.0~rc1
75
	(_ah)->reg_ops.read((_ah), (_reg))
1.1.4 by maximilian attems
Import upstream version 2.6.31
76
1.2.17 by Ben Hutchings
Import upstream version 2.6.39~rc4
77
#define REG_READ_MULTI(_ah, _addr, _val, _cnt)		\
1.2.21 by Ben Hutchings
Import upstream version 3.0.0~rc1
78
	(_ah)->reg_ops.multi_read((_ah), (_addr), (_val), (_cnt))
79
80
#define REG_RMW(_ah, _reg, _set, _clr) \
81
	(_ah)->reg_ops.rmw((_ah), (_reg), (_set), (_clr))
1.2.17 by Ben Hutchings
Import upstream version 2.6.39~rc4
82
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
83
#define ENABLE_REGWRITE_BUFFER(_ah)					\
84
	do {								\
1.2.21 by Ben Hutchings
Import upstream version 3.0.0~rc1
85
		if ((_ah)->reg_ops.enable_write_buffer)	\
86
			(_ah)->reg_ops.enable_write_buffer((_ah)); \
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
87
	} while (0)
88
89
#define REGWRITE_BUFFER_FLUSH(_ah)					\
90
	do {								\
1.2.21 by Ben Hutchings
Import upstream version 3.0.0~rc1
91
		if ((_ah)->reg_ops.write_flush)		\
92
			(_ah)->reg_ops.write_flush((_ah));	\
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
93
	} while (0)
94
1.2.31 by Ben Hutchings
Import upstream version 3.2~rc4
95
#define PR_EEP(_s, _val)						\
96
	do {								\
97
		len += snprintf(buf + len, size - len, "%20s : %10d\n",	\
98
				_s, (_val));				\
99
	} while (0)
100
1.1.4 by maximilian attems
Import upstream version 2.6.31
101
#define SM(_v, _f)  (((_v) << _f##_S) & _f)
102
#define MS(_v, _f)  (((_v) & _f) >> _f##_S)
103
#define REG_RMW_FIELD(_a, _r, _f, _v) \
1.2.21 by Ben Hutchings
Import upstream version 3.0.0~rc1
104
	REG_RMW(_a, _r, (((_v) << _f##_S) & _f), (_f))
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
105
#define REG_READ_FIELD(_a, _r, _f) \
106
	(((REG_READ(_a, _r) & _f) >> _f##_S))
1.1.4 by maximilian attems
Import upstream version 2.6.31
107
#define REG_SET_BIT(_a, _r, _f) \
1.2.21 by Ben Hutchings
Import upstream version 3.0.0~rc1
108
	REG_RMW(_a, _r, (_f), 0)
1.1.4 by maximilian attems
Import upstream version 2.6.31
109
#define REG_CLR_BIT(_a, _r, _f) \
1.2.21 by Ben Hutchings
Import upstream version 3.0.0~rc1
110
	REG_RMW(_a, _r, 0, (_f))
111
112
#define DO_DELAY(x) do {					\
113
		if (((++(x) % 64) == 0) &&			\
114
		    (ath9k_hw_common(ah)->bus_ops->ath_bus_type	\
115
			!= ATH_USB))				\
116
			udelay(1);				\
117
	} while (0)
118
119
#define REG_WRITE_ARRAY(iniarray, column, regWr) \
120
	ath9k_hw_write_array(ah, iniarray, column, &(regWr))
1.1.4 by maximilian attems
Import upstream version 2.6.31
121
122
#define AR_GPIO_OUTPUT_MUX_AS_OUTPUT             0
123
#define AR_GPIO_OUTPUT_MUX_AS_PCIE_ATTENTION_LED 1
124
#define AR_GPIO_OUTPUT_MUX_AS_PCIE_POWER_LED     2
125
#define AR_GPIO_OUTPUT_MUX_AS_TX_FRAME           3
1.1.5 by Bastian Blank
Import upstream version 2.6.32~rc8
126
#define AR_GPIO_OUTPUT_MUX_AS_RX_CLEAR_EXTERNAL  4
1.1.4 by maximilian attems
Import upstream version 2.6.31
127
#define AR_GPIO_OUTPUT_MUX_AS_MAC_NETWORK_LED    5
128
#define AR_GPIO_OUTPUT_MUX_AS_MAC_POWER_LED      6
1.2.33 by Ben Hutchings
Import upstream version 3.3~rc6
129
#define AR_GPIO_OUTPUT_MUX_AS_MCI_WLAN_DATA      0x16
130
#define AR_GPIO_OUTPUT_MUX_AS_MCI_WLAN_CLK       0x17
131
#define AR_GPIO_OUTPUT_MUX_AS_MCI_BT_DATA        0x18
132
#define AR_GPIO_OUTPUT_MUX_AS_MCI_BT_CLK         0x19
133
#define AR_GPIO_OUTPUT_MUX_AS_WL_IN_TX           0x14
134
#define AR_GPIO_OUTPUT_MUX_AS_WL_IN_RX           0x13
135
#define AR_GPIO_OUTPUT_MUX_AS_BT_IN_TX           9
136
#define AR_GPIO_OUTPUT_MUX_AS_BT_IN_RX           8
137
#define AR_GPIO_OUTPUT_MUX_AS_RUCKUS_STROBE      0x1d
138
#define AR_GPIO_OUTPUT_MUX_AS_RUCKUS_DATA        0x1e
1.1.4 by maximilian attems
Import upstream version 2.6.31
139
140
#define AR_GPIOD_MASK               0x00001FFF
141
#define AR_GPIO_BIT(_gpio)          (1 << (_gpio))
142
143
#define BASE_ACTIVATE_DELAY         100
1.2.21 by Ben Hutchings
Import upstream version 3.0.0~rc1
144
#define RTC_PLL_SETTLE_DELAY        (AR_SREV_9340(ah) ? 1000 : 100)
1.1.4 by maximilian attems
Import upstream version 2.6.31
145
#define COEF_SCALE_S                24
146
#define HT40_CHANNEL_CENTER_SHIFT   10
147
148
#define ATH9K_ANTENNA0_CHAINMASK    0x1
149
#define ATH9K_ANTENNA1_CHAINMASK    0x2
150
151
#define ATH9K_NUM_DMA_DEBUG_REGS    8
152
#define ATH9K_NUM_QUEUES            10
153
154
#define MAX_RATE_POWER              63
155
#define AH_WAIT_TIMEOUT             100000 /* (us) */
1.1.5 by Bastian Blank
Import upstream version 2.6.32~rc8
156
#define AH_TSF_WRITE_TIMEOUT        100    /* (us) */
1.1.4 by maximilian attems
Import upstream version 2.6.31
157
#define AH_TIME_QUANTUM             10
158
#define AR_KEYTABLE_SIZE            128
1.1.5 by Bastian Blank
Import upstream version 2.6.32~rc8
159
#define POWER_UP_TIME               10000
1.1.4 by maximilian attems
Import upstream version 2.6.31
160
#define SPUR_RSSI_THRESH            40
1.2.27 by Ben Hutchings
Import upstream version 3.1.0~rc4
161
#define UPPER_5G_SUB_BAND_START		5700
162
#define MID_5G_SUB_BAND_START		5400
1.1.4 by maximilian attems
Import upstream version 2.6.31
163
164
#define CAB_TIMEOUT_VAL             10
165
#define BEACON_TIMEOUT_VAL          10
166
#define MIN_BEACON_TIMEOUT_VAL      1
167
#define SLEEP_SLOP                  3
168
169
#define INIT_CONFIG_STATUS          0x00000000
170
#define INIT_RSSI_THR               0x00000700
171
#define INIT_BCON_CNTRL_REG         0x00000000
172
173
#define TU_TO_USEC(_tu)             ((_tu) << 10)
174
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
175
#define ATH9K_HW_RX_HP_QDEPTH	16
176
#define ATH9K_HW_RX_LP_QDEPTH	128
177
1.2.27 by Ben Hutchings
Import upstream version 3.1.0~rc4
178
#define PAPRD_GAIN_TABLE_ENTRIES	32
179
#define PAPRD_TABLE_SZ			24
180
#define PAPRD_IDEAL_AGC2_PWR_RANGE	0xe0
1.2.7 by Ben Hutchings
Import upstream version 2.6.36~rc5
181
1.2.14 by maximilian attems
Import upstream version 2.6.38~rc6
182
enum ath_hw_txq_subtype {
183
	ATH_TXQ_AC_BE = 0,
184
	ATH_TXQ_AC_BK = 1,
185
	ATH_TXQ_AC_VI = 2,
186
	ATH_TXQ_AC_VO = 3,
187
};
188
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
189
enum ath_ini_subsys {
190
	ATH_INI_PRE = 0,
191
	ATH_INI_CORE,
192
	ATH_INI_POST,
193
	ATH_INI_NUM_SPLIT,
194
};
195
1.1.4 by maximilian attems
Import upstream version 2.6.31
196
enum ath9k_hw_caps {
1.2.10 by Ben Hutchings
Import upstream version 2.6.37~rc4
197
	ATH9K_HW_CAP_HT                         = BIT(0),
198
	ATH9K_HW_CAP_RFSILENT                   = BIT(1),
1.2.33 by Ben Hutchings
Import upstream version 3.3~rc6
199
	ATH9K_HW_CAP_AUTOSLEEP                  = BIT(2),
200
	ATH9K_HW_CAP_4KB_SPLITTRANS             = BIT(3),
201
	ATH9K_HW_CAP_EDMA			= BIT(4),
202
	ATH9K_HW_CAP_RAC_SUPPORTED		= BIT(5),
203
	ATH9K_HW_CAP_LDPC			= BIT(6),
204
	ATH9K_HW_CAP_FASTCLOCK			= BIT(7),
205
	ATH9K_HW_CAP_SGI_20			= BIT(8),
206
	ATH9K_HW_CAP_PAPRD			= BIT(9),
207
	ATH9K_HW_CAP_ANT_DIV_COMB		= BIT(10),
208
	ATH9K_HW_CAP_2GHZ			= BIT(11),
209
	ATH9K_HW_CAP_5GHZ			= BIT(12),
210
	ATH9K_HW_CAP_APM			= BIT(13),
211
	ATH9K_HW_CAP_RTT			= BIT(14),
212
#ifdef CONFIG_ATH9K_BTCOEX_SUPPORT
213
	ATH9K_HW_CAP_MCI			= BIT(15),
214
#else
215
	ATH9K_HW_CAP_MCI			= 0,
216
#endif
217
	ATH9K_HW_CAP_DFS			= BIT(16),
1.1.4 by maximilian attems
Import upstream version 2.6.31
218
};
219
220
struct ath9k_hw_capabilities {
221
	u32 hw_caps; /* ATH9K_HW_CAP_* from ath9k_hw_caps */
222
	u16 rts_aggr_limit;
223
	u8 tx_chainmask;
224
	u8 rx_chainmask;
1.2.14 by maximilian attems
Import upstream version 2.6.38~rc6
225
	u8 max_txchains;
226
	u8 max_rxchains;
1.1.4 by maximilian attems
Import upstream version 2.6.31
227
	u8 num_gpio_pins;
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
228
	u8 rx_hp_qdepth;
229
	u8 rx_lp_qdepth;
230
	u8 rx_status_len;
231
	u8 tx_desc_len;
232
	u8 txs_len;
1.2.14 by maximilian attems
Import upstream version 2.6.38~rc6
233
	u16 pcie_lcr_offset;
234
	bool pcie_lcr_extsync_en;
1.1.4 by maximilian attems
Import upstream version 2.6.31
235
};
236
237
struct ath9k_ops_config {
238
	int dma_beacon_response_time;
239
	int sw_beacon_response_time;
240
	int additional_swba_backoff;
241
	int ack_6mb;
1.2.7 by Ben Hutchings
Import upstream version 2.6.36~rc5
242
	u32 cwm_ignore_extcca;
243
	bool pcieSerDesWrite;
1.1.4 by maximilian attems
Import upstream version 2.6.31
244
	u8 pcie_clock_req;
245
	u32 pcie_waen;
246
	u8 analog_shiftreg;
1.2.14 by maximilian attems
Import upstream version 2.6.38~rc6
247
	u8 paprd_disable;
1.1.4 by maximilian attems
Import upstream version 2.6.31
248
	u32 ofdm_trig_low;
249
	u32 ofdm_trig_high;
250
	u32 cck_trig_high;
251
	u32 cck_trig_low;
252
	u32 enable_ani;
253
	int serialize_regmode;
1.2.2 by maximilian attems
Import upstream version 2.6.34
254
	bool rx_intr_mitigation;
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
255
	bool tx_intr_mitigation;
1.1.4 by maximilian attems
Import upstream version 2.6.31
256
#define SPUR_DISABLE        	0
257
#define SPUR_ENABLE_IOCTL   	1
258
#define SPUR_ENABLE_EEPROM  	2
259
#define AR_SPUR_5413_1      	1640
260
#define AR_SPUR_5413_2      	1200
261
#define AR_NO_SPUR      	0x8000
262
#define AR_BASE_FREQ_2GHZ   	2300
263
#define AR_BASE_FREQ_5GHZ   	4900
264
#define AR_SPUR_FEEQ_BOUND_HT40 19
265
#define AR_SPUR_FEEQ_BOUND_HT20 10
266
	int spurmode;
267
	u16 spurchans[AR_EEPROM_MODAL_SPURS][2];
1.2.1 by maximilian attems
Import upstream version 2.6.33
268
	u8 max_txtrig_level;
1.2.7 by Ben Hutchings
Import upstream version 2.6.36~rc5
269
	u16 ani_poll_interval; /* ANI poll interval in ms */
1.1.4 by maximilian attems
Import upstream version 2.6.31
270
};
271
272
enum ath9k_int {
273
	ATH9K_INT_RX = 0x00000001,
274
	ATH9K_INT_RXDESC = 0x00000002,
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
275
	ATH9K_INT_RXHP = 0x00000001,
276
	ATH9K_INT_RXLP = 0x00000002,
1.1.4 by maximilian attems
Import upstream version 2.6.31
277
	ATH9K_INT_RXNOFRM = 0x00000008,
278
	ATH9K_INT_RXEOL = 0x00000010,
279
	ATH9K_INT_RXORN = 0x00000020,
280
	ATH9K_INT_TX = 0x00000040,
281
	ATH9K_INT_TXDESC = 0x00000080,
282
	ATH9K_INT_TIM_TIMER = 0x00000100,
1.2.33 by Ben Hutchings
Import upstream version 3.3~rc6
283
	ATH9K_INT_MCI = 0x00000200,
1.2.7 by Ben Hutchings
Import upstream version 2.6.36~rc5
284
	ATH9K_INT_BB_WATCHDOG = 0x00000400,
1.1.4 by maximilian attems
Import upstream version 2.6.31
285
	ATH9K_INT_TXURN = 0x00000800,
286
	ATH9K_INT_MIB = 0x00001000,
287
	ATH9K_INT_RXPHY = 0x00004000,
288
	ATH9K_INT_RXKCM = 0x00008000,
289
	ATH9K_INT_SWBA = 0x00010000,
290
	ATH9K_INT_BMISS = 0x00040000,
291
	ATH9K_INT_BNR = 0x00100000,
292
	ATH9K_INT_TIM = 0x00200000,
293
	ATH9K_INT_DTIM = 0x00400000,
294
	ATH9K_INT_DTIMSYNC = 0x00800000,
295
	ATH9K_INT_GPIO = 0x01000000,
296
	ATH9K_INT_CABEND = 0x02000000,
297
	ATH9K_INT_TSFOOR = 0x04000000,
1.1.5 by Bastian Blank
Import upstream version 2.6.32~rc8
298
	ATH9K_INT_GENTIMER = 0x08000000,
1.1.4 by maximilian attems
Import upstream version 2.6.31
299
	ATH9K_INT_CST = 0x10000000,
300
	ATH9K_INT_GTT = 0x20000000,
301
	ATH9K_INT_FATAL = 0x40000000,
302
	ATH9K_INT_GLOBAL = 0x80000000,
303
	ATH9K_INT_BMISC = ATH9K_INT_TIM |
304
		ATH9K_INT_DTIM |
305
		ATH9K_INT_DTIMSYNC |
306
		ATH9K_INT_TSFOOR |
307
		ATH9K_INT_CABEND,
308
	ATH9K_INT_COMMON = ATH9K_INT_RXNOFRM |
309
		ATH9K_INT_RXDESC |
310
		ATH9K_INT_RXEOL |
311
		ATH9K_INT_RXORN |
312
		ATH9K_INT_TXURN |
313
		ATH9K_INT_TXDESC |
314
		ATH9K_INT_MIB |
315
		ATH9K_INT_RXPHY |
316
		ATH9K_INT_RXKCM |
317
		ATH9K_INT_SWBA |
318
		ATH9K_INT_BMISS |
319
		ATH9K_INT_GPIO,
320
	ATH9K_INT_NOCARD = 0xffffffff
321
};
322
323
#define CHANNEL_CW_INT    0x00002
324
#define CHANNEL_CCK       0x00020
325
#define CHANNEL_OFDM      0x00040
326
#define CHANNEL_2GHZ      0x00080
327
#define CHANNEL_5GHZ      0x00100
328
#define CHANNEL_PASSIVE   0x00200
329
#define CHANNEL_DYN       0x00400
330
#define CHANNEL_HALF      0x04000
331
#define CHANNEL_QUARTER   0x08000
332
#define CHANNEL_HT20      0x10000
333
#define CHANNEL_HT40PLUS  0x20000
334
#define CHANNEL_HT40MINUS 0x40000
335
336
#define CHANNEL_A           (CHANNEL_5GHZ|CHANNEL_OFDM)
337
#define CHANNEL_B           (CHANNEL_2GHZ|CHANNEL_CCK)
338
#define CHANNEL_G           (CHANNEL_2GHZ|CHANNEL_OFDM)
339
#define CHANNEL_G_HT20      (CHANNEL_2GHZ|CHANNEL_HT20)
340
#define CHANNEL_A_HT20      (CHANNEL_5GHZ|CHANNEL_HT20)
341
#define CHANNEL_G_HT40PLUS  (CHANNEL_2GHZ|CHANNEL_HT40PLUS)
342
#define CHANNEL_G_HT40MINUS (CHANNEL_2GHZ|CHANNEL_HT40MINUS)
343
#define CHANNEL_A_HT40PLUS  (CHANNEL_5GHZ|CHANNEL_HT40PLUS)
344
#define CHANNEL_A_HT40MINUS (CHANNEL_5GHZ|CHANNEL_HT40MINUS)
345
#define CHANNEL_ALL				\
346
	(CHANNEL_OFDM|				\
347
	 CHANNEL_CCK|				\
348
	 CHANNEL_2GHZ |				\
349
	 CHANNEL_5GHZ |				\
350
	 CHANNEL_HT20 |				\
351
	 CHANNEL_HT40PLUS |			\
352
	 CHANNEL_HT40MINUS)
353
1.2.31 by Ben Hutchings
Import upstream version 3.2~rc4
354
#define MAX_RTT_TABLE_ENTRY     6
355
#define RTT_HIST_MAX            3
356
struct ath9k_rtt_hist {
357
	u32 table[AR9300_MAX_CHAINS][RTT_HIST_MAX][MAX_RTT_TABLE_ENTRY];
358
	u8 num_readings;
359
};
360
361
#define MAX_IQCAL_MEASUREMENT	8
362
#define MAX_CL_TAB_ENTRY	16
363
1.2.7 by Ben Hutchings
Import upstream version 2.6.36~rc5
364
struct ath9k_hw_cal_data {
1.1.4 by maximilian attems
Import upstream version 2.6.31
365
	u16 channel;
366
	u32 channelFlags;
367
	int32_t CalValid;
368
	int8_t iCoff;
369
	int8_t qCoff;
1.2.7 by Ben Hutchings
Import upstream version 2.6.36~rc5
370
	bool paprd_done;
371
	bool nfcal_pending;
1.2.10 by Ben Hutchings
Import upstream version 2.6.37~rc4
372
	bool nfcal_interference;
1.2.31 by Ben Hutchings
Import upstream version 3.2~rc4
373
	bool done_txiqcal_once;
374
	bool done_txclcal_once;
1.2.7 by Ben Hutchings
Import upstream version 2.6.36~rc5
375
	u16 small_signal_gain[AR9300_MAX_CHAINS];
376
	u32 pa_table[AR9300_MAX_CHAINS][PAPRD_TABLE_SZ];
1.2.31 by Ben Hutchings
Import upstream version 3.2~rc4
377
	u32 num_measures[AR9300_MAX_CHAINS];
378
	int tx_corr_coeff[MAX_IQCAL_MEASUREMENT][AR9300_MAX_CHAINS];
379
	u32 tx_clcal[AR9300_MAX_CHAINS][MAX_CL_TAB_ENTRY];
1.2.7 by Ben Hutchings
Import upstream version 2.6.36~rc5
380
	struct ath9k_nfcal_hist nfCalHist[NUM_NF_READINGS];
1.2.31 by Ben Hutchings
Import upstream version 3.2~rc4
381
	struct ath9k_rtt_hist rtt_hist;
1.2.7 by Ben Hutchings
Import upstream version 2.6.36~rc5
382
};
383
384
struct ath9k_channel {
385
	struct ieee80211_channel *chan;
1.2.10 by Ben Hutchings
Import upstream version 2.6.37~rc4
386
	struct ar5416AniState ani;
1.2.7 by Ben Hutchings
Import upstream version 2.6.36~rc5
387
	u16 channel;
388
	u32 channelFlags;
389
	u32 chanmode;
1.2.10 by Ben Hutchings
Import upstream version 2.6.37~rc4
390
	s16 noisefloor;
1.1.4 by maximilian attems
Import upstream version 2.6.31
391
};
392
393
#define IS_CHAN_G(_c) ((((_c)->channelFlags & (CHANNEL_G)) == CHANNEL_G) || \
394
       (((_c)->channelFlags & CHANNEL_G_HT20) == CHANNEL_G_HT20) || \
395
       (((_c)->channelFlags & CHANNEL_G_HT40PLUS) == CHANNEL_G_HT40PLUS) || \
396
       (((_c)->channelFlags & CHANNEL_G_HT40MINUS) == CHANNEL_G_HT40MINUS))
397
#define IS_CHAN_OFDM(_c) (((_c)->channelFlags & CHANNEL_OFDM) != 0)
398
#define IS_CHAN_5GHZ(_c) (((_c)->channelFlags & CHANNEL_5GHZ) != 0)
399
#define IS_CHAN_2GHZ(_c) (((_c)->channelFlags & CHANNEL_2GHZ) != 0)
400
#define IS_CHAN_HALF_RATE(_c) (((_c)->channelFlags & CHANNEL_HALF) != 0)
401
#define IS_CHAN_QUARTER_RATE(_c) (((_c)->channelFlags & CHANNEL_QUARTER) != 0)
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
402
#define IS_CHAN_A_FAST_CLOCK(_ah, _c)			\
1.1.4 by maximilian attems
Import upstream version 2.6.31
403
	((((_c)->channelFlags & CHANNEL_5GHZ) != 0) &&	\
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
404
	 ((_ah)->caps.hw_caps & ATH9K_HW_CAP_FASTCLOCK))
1.1.4 by maximilian attems
Import upstream version 2.6.31
405
406
/* These macros check chanmode and not channelFlags */
407
#define IS_CHAN_B(_c) ((_c)->chanmode == CHANNEL_B)
408
#define IS_CHAN_HT20(_c) (((_c)->chanmode == CHANNEL_A_HT20) ||	\
409
			  ((_c)->chanmode == CHANNEL_G_HT20))
410
#define IS_CHAN_HT40(_c) (((_c)->chanmode == CHANNEL_A_HT40PLUS) ||	\
411
			  ((_c)->chanmode == CHANNEL_A_HT40MINUS) ||	\
412
			  ((_c)->chanmode == CHANNEL_G_HT40PLUS) ||	\
413
			  ((_c)->chanmode == CHANNEL_G_HT40MINUS))
414
#define IS_CHAN_HT(_c) (IS_CHAN_HT20((_c)) || IS_CHAN_HT40((_c)))
415
416
enum ath9k_power_mode {
417
	ATH9K_PM_AWAKE = 0,
418
	ATH9K_PM_FULL_SLEEP,
419
	ATH9K_PM_NETWORK_SLEEP,
420
	ATH9K_PM_UNDEFINED
421
};
422
423
enum ser_reg_mode {
424
	SER_REG_MODE_OFF = 0,
425
	SER_REG_MODE_ON = 1,
426
	SER_REG_MODE_AUTO = 2,
427
};
428
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
429
enum ath9k_rx_qtype {
430
	ATH9K_RX_QUEUE_HP,
431
	ATH9K_RX_QUEUE_LP,
432
	ATH9K_RX_QUEUE_MAX,
433
};
434
1.2.33 by Ben Hutchings
Import upstream version 3.3~rc6
435
enum mci_message_header {		/* length of payload */
436
	MCI_LNA_CTRL     = 0x10,        /* len = 0 */
437
	MCI_CONT_NACK    = 0x20,        /* len = 0 */
438
	MCI_CONT_INFO    = 0x30,        /* len = 4 */
439
	MCI_CONT_RST     = 0x40,        /* len = 0 */
440
	MCI_SCHD_INFO    = 0x50,        /* len = 16 */
441
	MCI_CPU_INT      = 0x60,        /* len = 4 */
442
	MCI_SYS_WAKING   = 0x70,        /* len = 0 */
443
	MCI_GPM          = 0x80,        /* len = 16 */
444
	MCI_LNA_INFO     = 0x90,        /* len = 1 */
445
	MCI_LNA_STATE    = 0x94,
446
	MCI_LNA_TAKE     = 0x98,
447
	MCI_LNA_TRANS    = 0x9c,
448
	MCI_SYS_SLEEPING = 0xa0,        /* len = 0 */
449
	MCI_REQ_WAKE     = 0xc0,        /* len = 0 */
450
	MCI_DEBUG_16     = 0xfe,        /* len = 2 */
451
	MCI_REMOTE_RESET = 0xff         /* len = 16 */
452
};
453
454
enum ath_mci_gpm_coex_profile_type {
455
	MCI_GPM_COEX_PROFILE_UNKNOWN,
456
	MCI_GPM_COEX_PROFILE_RFCOMM,
457
	MCI_GPM_COEX_PROFILE_A2DP,
458
	MCI_GPM_COEX_PROFILE_HID,
459
	MCI_GPM_COEX_PROFILE_BNEP,
460
	MCI_GPM_COEX_PROFILE_VOICE,
461
	MCI_GPM_COEX_PROFILE_MAX
462
};
463
464
/* MCI GPM/Coex opcode/type definitions */
465
enum {
466
	MCI_GPM_COEX_W_GPM_PAYLOAD      = 1,
467
	MCI_GPM_COEX_B_GPM_TYPE         = 4,
468
	MCI_GPM_COEX_B_GPM_OPCODE       = 5,
469
	/* MCI_GPM_WLAN_CAL_REQ, MCI_GPM_WLAN_CAL_DONE */
470
	MCI_GPM_WLAN_CAL_W_SEQUENCE     = 2,
471
472
	/* MCI_GPM_COEX_VERSION_QUERY */
473
	/* MCI_GPM_COEX_VERSION_RESPONSE */
474
	MCI_GPM_COEX_B_MAJOR_VERSION    = 6,
475
	MCI_GPM_COEX_B_MINOR_VERSION    = 7,
476
	/* MCI_GPM_COEX_STATUS_QUERY */
477
	MCI_GPM_COEX_B_BT_BITMAP        = 6,
478
	MCI_GPM_COEX_B_WLAN_BITMAP      = 7,
479
	/* MCI_GPM_COEX_HALT_BT_GPM */
480
	MCI_GPM_COEX_B_HALT_STATE       = 6,
481
	/* MCI_GPM_COEX_WLAN_CHANNELS */
482
	MCI_GPM_COEX_B_CHANNEL_MAP      = 6,
483
	/* MCI_GPM_COEX_BT_PROFILE_INFO */
484
	MCI_GPM_COEX_B_PROFILE_TYPE     = 6,
485
	MCI_GPM_COEX_B_PROFILE_LINKID   = 7,
486
	MCI_GPM_COEX_B_PROFILE_STATE    = 8,
487
	MCI_GPM_COEX_B_PROFILE_ROLE     = 9,
488
	MCI_GPM_COEX_B_PROFILE_RATE     = 10,
489
	MCI_GPM_COEX_B_PROFILE_VOTYPE   = 11,
490
	MCI_GPM_COEX_H_PROFILE_T        = 12,
491
	MCI_GPM_COEX_B_PROFILE_W        = 14,
492
	MCI_GPM_COEX_B_PROFILE_A        = 15,
493
	/* MCI_GPM_COEX_BT_STATUS_UPDATE */
494
	MCI_GPM_COEX_B_STATUS_TYPE      = 6,
495
	MCI_GPM_COEX_B_STATUS_LINKID    = 7,
496
	MCI_GPM_COEX_B_STATUS_STATE     = 8,
497
	/* MCI_GPM_COEX_BT_UPDATE_FLAGS */
498
	MCI_GPM_COEX_W_BT_FLAGS         = 6,
499
	MCI_GPM_COEX_B_BT_FLAGS_OP      = 10
500
};
501
502
enum mci_gpm_subtype {
503
	MCI_GPM_BT_CAL_REQ      = 0,
504
	MCI_GPM_BT_CAL_GRANT    = 1,
505
	MCI_GPM_BT_CAL_DONE     = 2,
506
	MCI_GPM_WLAN_CAL_REQ    = 3,
507
	MCI_GPM_WLAN_CAL_GRANT  = 4,
508
	MCI_GPM_WLAN_CAL_DONE   = 5,
509
	MCI_GPM_COEX_AGENT      = 0x0c,
510
	MCI_GPM_RSVD_PATTERN    = 0xfe,
511
	MCI_GPM_RSVD_PATTERN32  = 0xfefefefe,
512
	MCI_GPM_BT_DEBUG        = 0xff
513
};
514
515
enum mci_bt_state {
516
	MCI_BT_SLEEP,
517
	MCI_BT_AWAKE,
518
	MCI_BT_CAL_START,
519
	MCI_BT_CAL
520
};
521
522
/* Type of state query */
523
enum mci_state_type {
524
	MCI_STATE_ENABLE,
525
	MCI_STATE_INIT_GPM_OFFSET,
526
	MCI_STATE_NEXT_GPM_OFFSET,
527
	MCI_STATE_LAST_GPM_OFFSET,
528
	MCI_STATE_BT,
529
	MCI_STATE_SET_BT_SLEEP,
530
	MCI_STATE_SET_BT_AWAKE,
531
	MCI_STATE_SET_BT_CAL_START,
532
	MCI_STATE_SET_BT_CAL,
533
	MCI_STATE_LAST_SCHD_MSG_OFFSET,
534
	MCI_STATE_REMOTE_SLEEP,
535
	MCI_STATE_CONT_RSSI_POWER,
536
	MCI_STATE_CONT_PRIORITY,
537
	MCI_STATE_CONT_TXRX,
538
	MCI_STATE_RESET_REQ_WAKE,
539
	MCI_STATE_SEND_WLAN_COEX_VERSION,
540
	MCI_STATE_SET_BT_COEX_VERSION,
541
	MCI_STATE_SEND_WLAN_CHANNELS,
542
	MCI_STATE_SEND_VERSION_QUERY,
543
	MCI_STATE_SEND_STATUS_QUERY,
544
	MCI_STATE_NEED_FLUSH_BT_INFO,
545
	MCI_STATE_SET_CONCUR_TX_PRI,
546
	MCI_STATE_RECOVER_RX,
547
	MCI_STATE_NEED_FTP_STOMP,
548
	MCI_STATE_NEED_TUNING,
549
	MCI_STATE_DEBUG,
550
	MCI_STATE_MAX
551
};
552
553
enum mci_gpm_coex_opcode {
554
	MCI_GPM_COEX_VERSION_QUERY,
555
	MCI_GPM_COEX_VERSION_RESPONSE,
556
	MCI_GPM_COEX_STATUS_QUERY,
557
	MCI_GPM_COEX_HALT_BT_GPM,
558
	MCI_GPM_COEX_WLAN_CHANNELS,
559
	MCI_GPM_COEX_BT_PROFILE_INFO,
560
	MCI_GPM_COEX_BT_STATUS_UPDATE,
561
	MCI_GPM_COEX_BT_UPDATE_FLAGS
562
};
563
564
#define MCI_GPM_NOMORE  0
565
#define MCI_GPM_MORE    1
566
#define MCI_GPM_INVALID 0xffffffff
567
568
#define MCI_GPM_RECYCLE(_p_gpm)	do {			  \
569
	*(((u32 *)_p_gpm) + MCI_GPM_COEX_W_GPM_PAYLOAD) = \
570
				MCI_GPM_RSVD_PATTERN32;   \
571
} while (0)
572
573
#define MCI_GPM_TYPE(_p_gpm)	\
574
	(*(((u8 *)(_p_gpm)) + MCI_GPM_COEX_B_GPM_TYPE) & 0xff)
575
576
#define MCI_GPM_OPCODE(_p_gpm)	\
577
	(*(((u8 *)(_p_gpm)) + MCI_GPM_COEX_B_GPM_OPCODE) & 0xff)
578
579
#define MCI_GPM_SET_CAL_TYPE(_p_gpm, _cal_type)	do {			   \
580
	*(((u8 *)(_p_gpm)) + MCI_GPM_COEX_B_GPM_TYPE) = (_cal_type) & 0xff;\
581
} while (0)
582
583
#define MCI_GPM_SET_TYPE_OPCODE(_p_gpm, _type, _opcode) do {		   \
584
	*(((u8 *)(_p_gpm)) + MCI_GPM_COEX_B_GPM_TYPE) = (_type) & 0xff;	   \
585
	*(((u8 *)(_p_gpm)) + MCI_GPM_COEX_B_GPM_OPCODE) = (_opcode) & 0xff;\
586
} while (0)
587
588
#define MCI_GPM_IS_CAL_TYPE(_type) ((_type) <= MCI_GPM_WLAN_CAL_DONE)
589
1.1.4 by maximilian attems
Import upstream version 2.6.31
590
struct ath9k_beacon_state {
591
	u32 bs_nexttbtt;
592
	u32 bs_nextdtim;
593
	u32 bs_intval;
594
#define ATH9K_TSFOOR_THRESHOLD    0x00004240 /* 16k us */
595
	u32 bs_dtimperiod;
596
	u16 bs_cfpperiod;
597
	u16 bs_cfpmaxduration;
598
	u32 bs_cfpnext;
599
	u16 bs_timoffset;
600
	u16 bs_bmissthreshold;
601
	u32 bs_sleepduration;
602
	u32 bs_tsfoor_threshold;
603
};
604
605
struct chan_centers {
606
	u16 synth_center;
607
	u16 ctl_center;
608
	u16 ext_center;
609
};
610
611
enum {
612
	ATH9K_RESET_POWER_ON,
613
	ATH9K_RESET_WARM,
614
	ATH9K_RESET_COLD,
615
};
616
617
struct ath9k_hw_version {
618
	u32 magic;
619
	u16 devid;
620
	u16 subvendorid;
621
	u32 macVersion;
622
	u16 macRev;
623
	u16 phyRev;
624
	u16 analog5GhzRev;
625
	u16 analog2GhzRev;
1.2.14 by maximilian attems
Import upstream version 2.6.38~rc6
626
	enum ath_usb_dev usbdev;
1.1.5 by Bastian Blank
Import upstream version 2.6.32~rc8
627
};
628
629
/* Generic TSF timer definitions */
630
631
#define ATH_MAX_GEN_TIMER	16
632
633
#define AR_GENTMR_BIT(_index)	(1 << (_index))
634
635
/*
1.2.7 by Ben Hutchings
Import upstream version 2.6.36~rc5
636
 * Using de Bruijin sequence to look up 1's index in a 32 bit number
1.1.5 by Bastian Blank
Import upstream version 2.6.32~rc8
637
 * debruijn32 = 0000 0111 0111 1100 1011 0101 0011 0001
638
 */
1.2.1 by maximilian attems
Import upstream version 2.6.33
639
#define debruijn32 0x077CB531U
1.1.5 by Bastian Blank
Import upstream version 2.6.32~rc8
640
641
struct ath_gen_timer_configuration {
642
	u32 next_addr;
643
	u32 period_addr;
644
	u32 mode_addr;
645
	u32 mode_mask;
646
};
647
648
struct ath_gen_timer {
649
	void (*trigger)(void *arg);
650
	void (*overflow)(void *arg);
651
	void *arg;
652
	u8 index;
653
};
654
655
struct ath_gen_timer_table {
656
	u32 gen_timer_index[32];
657
	struct ath_gen_timer *timers[ATH_MAX_GEN_TIMER];
658
	union {
659
		unsigned long timer_bits;
660
		u16 val;
661
	} timer_mask;
1.1.4 by maximilian attems
Import upstream version 2.6.31
662
};
663
1.2.10 by Ben Hutchings
Import upstream version 2.6.37~rc4
664
struct ath_hw_antcomb_conf {
665
	u8 main_lna_conf;
666
	u8 alt_lna_conf;
667
	u8 fast_div_bias;
1.2.21 by Ben Hutchings
Import upstream version 3.0.0~rc1
668
	u8 main_gaintb;
669
	u8 alt_gaintb;
670
	int lna1_lna2_delta;
671
	u8 div_group;
1.2.10 by Ben Hutchings
Import upstream version 2.6.37~rc4
672
};
673
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
674
/**
1.2.14 by maximilian attems
Import upstream version 2.6.38~rc6
675
 * struct ath_hw_radar_conf - radar detection initialization parameters
676
 *
677
 * @pulse_inband: threshold for checking the ratio of in-band power
678
 *	to total power for short radar pulses (half dB steps)
679
 * @pulse_inband_step: threshold for checking an in-band power to total
680
 *	power ratio increase for short radar pulses (half dB steps)
681
 * @pulse_height: threshold for detecting the beginning of a short
682
 *	radar pulse (dB step)
683
 * @pulse_rssi: threshold for detecting if a short radar pulse is
684
 *	gone (dB step)
685
 * @pulse_maxlen: maximum pulse length (0.8 us steps)
686
 *
687
 * @radar_rssi: RSSI threshold for starting long radar detection (dB steps)
688
 * @radar_inband: threshold for checking the ratio of in-band power
689
 *	to total power for long radar pulses (half dB steps)
690
 * @fir_power: threshold for detecting the end of a long radar pulse (dB)
691
 *
692
 * @ext_channel: enable extension channel radar detection
693
 */
694
struct ath_hw_radar_conf {
695
	unsigned int pulse_inband;
696
	unsigned int pulse_inband_step;
697
	unsigned int pulse_height;
698
	unsigned int pulse_rssi;
699
	unsigned int pulse_maxlen;
700
701
	unsigned int radar_rssi;
702
	unsigned int radar_inband;
703
	int fir_power;
704
705
	bool ext_channel;
706
};
707
708
/**
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
709
 * struct ath_hw_private_ops - callbacks used internally by hardware code
710
 *
711
 * This structure contains private callbacks designed to only be used internally
712
 * by the hardware core.
713
 *
714
 * @init_cal_settings: setup types of calibrations supported
715
 * @init_cal: starts actual calibration
716
 *
717
 * @init_mode_regs: Initializes mode registers
718
 * @init_mode_gain_regs: Initialize TX/RX gain registers
719
 *
720
 * @rf_set_freq: change frequency
721
 * @spur_mitigate_freq: spur mitigation
722
 * @rf_alloc_ext_banks:
723
 * @rf_free_ext_banks:
724
 * @set_rf_regs:
725
 * @compute_pll_control: compute the PLL control value to use for
726
 *	AR_RTC_PLL_CONTROL for a given channel
727
 * @setup_calibration: set up calibration
728
 * @iscal_supported: used to query if a type of calibration is supported
1.2.7 by Ben Hutchings
Import upstream version 2.6.36~rc5
729
 *
730
 * @ani_cache_ini_regs: cache the values for ANI from the initial
731
 *	register settings through the register initialization.
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
732
 */
733
struct ath_hw_private_ops {
734
	/* Calibration ops */
735
	void (*init_cal_settings)(struct ath_hw *ah);
736
	bool (*init_cal)(struct ath_hw *ah, struct ath9k_channel *chan);
737
738
	void (*init_mode_regs)(struct ath_hw *ah);
739
	void (*init_mode_gain_regs)(struct ath_hw *ah);
740
	void (*setup_calibration)(struct ath_hw *ah,
741
				  struct ath9k_cal_list *currCal);
742
743
	/* PHY ops */
744
	int (*rf_set_freq)(struct ath_hw *ah,
745
			   struct ath9k_channel *chan);
746
	void (*spur_mitigate_freq)(struct ath_hw *ah,
747
				   struct ath9k_channel *chan);
748
	int (*rf_alloc_ext_banks)(struct ath_hw *ah);
749
	void (*rf_free_ext_banks)(struct ath_hw *ah);
750
	bool (*set_rf_regs)(struct ath_hw *ah,
751
			    struct ath9k_channel *chan,
752
			    u16 modesIndex);
753
	void (*set_channel_regs)(struct ath_hw *ah, struct ath9k_channel *chan);
754
	void (*init_bb)(struct ath_hw *ah,
755
			struct ath9k_channel *chan);
756
	int (*process_ini)(struct ath_hw *ah, struct ath9k_channel *chan);
757
	void (*olc_init)(struct ath_hw *ah);
758
	void (*set_rfmode)(struct ath_hw *ah, struct ath9k_channel *chan);
759
	void (*mark_phy_inactive)(struct ath_hw *ah);
760
	void (*set_delta_slope)(struct ath_hw *ah, struct ath9k_channel *chan);
761
	bool (*rfbus_req)(struct ath_hw *ah);
762
	void (*rfbus_done)(struct ath_hw *ah);
763
	void (*restore_chainmask)(struct ath_hw *ah);
764
	u32 (*compute_pll_control)(struct ath_hw *ah,
765
				   struct ath9k_channel *chan);
766
	bool (*ani_control)(struct ath_hw *ah, enum ath9k_ani_cmd cmd,
767
			    int param);
768
	void (*do_getnf)(struct ath_hw *ah, int16_t nfarray[NUM_NF_READINGS]);
1.2.14 by maximilian attems
Import upstream version 2.6.38~rc6
769
	void (*set_radar_params)(struct ath_hw *ah,
770
				 struct ath_hw_radar_conf *conf);
1.2.31 by Ben Hutchings
Import upstream version 3.2~rc4
771
	int (*fast_chan_change)(struct ath_hw *ah, struct ath9k_channel *chan,
772
				u8 *ini_reloaded);
1.2.7 by Ben Hutchings
Import upstream version 2.6.36~rc5
773
774
	/* ANI */
775
	void (*ani_cache_ini_regs)(struct ath_hw *ah);
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
776
};
777
778
/**
779
 * struct ath_hw_ops - callbacks used by hardware code and driver code
780
 *
781
 * This structure contains callbacks designed to to be used internally by
782
 * hardware code and also by the lower level driver.
783
 *
784
 * @config_pci_powersave:
785
 * @calibrate: periodic calibration for NF, ANI, IQ, ADC gain, ADC-DC
786
 */
787
struct ath_hw_ops {
788
	void (*config_pci_powersave)(struct ath_hw *ah,
1.2.31 by Ben Hutchings
Import upstream version 3.2~rc4
789
				     bool power_off);
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
790
	void (*rx_enable)(struct ath_hw *ah);
791
	void (*set_desc_link)(void *ds, u32 link);
792
	bool (*calibrate)(struct ath_hw *ah,
793
			  struct ath9k_channel *chan,
794
			  u8 rxchainmask,
795
			  bool longcal);
796
	bool (*get_isr)(struct ath_hw *ah, enum ath9k_int *masked);
1.2.31 by Ben Hutchings
Import upstream version 3.2~rc4
797
	void (*set_txdesc)(struct ath_hw *ah, void *ds,
798
			   struct ath_tx_info *i);
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
799
	int (*proc_txdesc)(struct ath_hw *ah, void *ds,
800
			   struct ath_tx_status *ts);
1.2.21 by Ben Hutchings
Import upstream version 3.0.0~rc1
801
	void (*antdiv_comb_conf_get)(struct ath_hw *ah,
802
			struct ath_hw_antcomb_conf *antconf);
803
	void (*antdiv_comb_conf_set)(struct ath_hw *ah,
804
			struct ath_hw_antcomb_conf *antconf);
805
1.2.7 by Ben Hutchings
Import upstream version 2.6.36~rc5
806
};
807
808
struct ath_nf_limits {
809
	s16 max;
810
	s16 min;
811
	s16 nominal;
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
812
};
813
1.2.31 by Ben Hutchings
Import upstream version 3.2~rc4
814
enum ath_cal_list {
815
	TX_IQ_CAL         =	BIT(0),
816
	TX_IQ_ON_AGC_CAL  =	BIT(1),
817
	TX_CL_CAL         =	BIT(2),
818
};
819
1.2.14 by maximilian attems
Import upstream version 2.6.38~rc6
820
/* ah_flags */
821
#define AH_USE_EEPROM   0x1
822
#define AH_UNPLUGGED    0x2 /* The card has been physically removed. */
1.2.31 by Ben Hutchings
Import upstream version 3.2~rc4
823
#define AH_FASTCC       0x4
1.2.14 by maximilian attems
Import upstream version 2.6.38~rc6
824
1.1.4 by maximilian attems
Import upstream version 2.6.31
825
struct ath_hw {
1.2.21 by Ben Hutchings
Import upstream version 3.0.0~rc1
826
	struct ath_ops reg_ops;
827
1.2.1 by maximilian attems
Import upstream version 2.6.33
828
	struct ieee80211_hw *hw;
829
	struct ath_common common;
1.1.4 by maximilian attems
Import upstream version 2.6.31
830
	struct ath9k_hw_version hw_version;
831
	struct ath9k_ops_config config;
832
	struct ath9k_hw_capabilities caps;
1.2.10 by Ben Hutchings
Import upstream version 2.6.37~rc4
833
	struct ath9k_channel channels[ATH9K_NUM_CHANNELS];
1.1.4 by maximilian attems
Import upstream version 2.6.31
834
	struct ath9k_channel *curchan;
835
836
	union {
837
		struct ar5416_eeprom_def def;
838
		struct ar5416_eeprom_4k map4k;
1.1.5 by Bastian Blank
Import upstream version 2.6.32~rc8
839
		struct ar9287_eeprom map9287;
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
840
		struct ar9300_eeprom ar9300_eep;
1.1.4 by maximilian attems
Import upstream version 2.6.31
841
	} eeprom;
842
	const struct eeprom_ops *eep_ops;
843
844
	bool sw_mgmt_crypto;
845
	bool is_pciexpress;
1.2.27 by Ben Hutchings
Import upstream version 3.1.0~rc4
846
	bool aspm_enabled;
1.2.10 by Ben Hutchings
Import upstream version 2.6.37~rc4
847
	bool is_monitoring;
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
848
	bool need_an_top2_fixup;
1.1.4 by maximilian attems
Import upstream version 2.6.31
849
	u16 tx_trig_level;
1.2.7 by Ben Hutchings
Import upstream version 2.6.36~rc5
850
851
	u32 nf_regs[6];
852
	struct ath_nf_limits nf_2g;
853
	struct ath_nf_limits nf_5g;
1.1.4 by maximilian attems
Import upstream version 2.6.31
854
	u16 rfsilent;
855
	u32 rfkill_gpio;
856
	u32 rfkill_polarity;
857
	u32 ah_flags;
858
1.1.5 by Bastian Blank
Import upstream version 2.6.32~rc8
859
	bool htc_reset_init;
860
1.1.4 by maximilian attems
Import upstream version 2.6.31
861
	enum nl80211_iftype opmode;
862
	enum ath9k_power_mode power_mode;
863
1.2.31 by Ben Hutchings
Import upstream version 3.2~rc4
864
	s8 noise;
1.2.7 by Ben Hutchings
Import upstream version 2.6.36~rc5
865
	struct ath9k_hw_cal_data *caldata;
1.1.5 by Bastian Blank
Import upstream version 2.6.32~rc8
866
	struct ath9k_pacal_info pacal_info;
1.1.4 by maximilian attems
Import upstream version 2.6.31
867
	struct ar5416Stats stats;
868
	struct ath9k_tx_queue_info txq[ATH9K_NUM_TX_QUEUES];
869
870
	int16_t curchan_rad_index;
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
871
	enum ath9k_int imask;
872
	u32 imrs2_reg;
1.1.4 by maximilian attems
Import upstream version 2.6.31
873
	u32 txok_interrupt_mask;
874
	u32 txerr_interrupt_mask;
875
	u32 txdesc_interrupt_mask;
876
	u32 txeol_interrupt_mask;
877
	u32 txurn_interrupt_mask;
1.2.31 by Ben Hutchings
Import upstream version 3.2~rc4
878
	atomic_t intr_ref_cnt;
1.1.4 by maximilian attems
Import upstream version 2.6.31
879
	bool chip_fullsleep;
880
	u32 atim_window;
1.2.31 by Ben Hutchings
Import upstream version 3.2~rc4
881
	u32 modes_index;
1.1.4 by maximilian attems
Import upstream version 2.6.31
882
883
	/* Calibration */
1.2.10 by Ben Hutchings
Import upstream version 2.6.37~rc4
884
	u32 supp_cals;
1.1.4 by maximilian attems
Import upstream version 2.6.31
885
	struct ath9k_cal_list iq_caldata;
886
	struct ath9k_cal_list adcgain_caldata;
887
	struct ath9k_cal_list adcdc_caldata;
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
888
	struct ath9k_cal_list tempCompCalData;
1.1.4 by maximilian attems
Import upstream version 2.6.31
889
	struct ath9k_cal_list *cal_list;
890
	struct ath9k_cal_list *cal_list_last;
891
	struct ath9k_cal_list *cal_list_curr;
892
#define totalPowerMeasI meas0.unsign
893
#define totalPowerMeasQ meas1.unsign
894
#define totalIqCorrMeas meas2.sign
895
#define totalAdcIOddPhase  meas0.unsign
896
#define totalAdcIEvenPhase meas1.unsign
897
#define totalAdcQOddPhase  meas2.unsign
898
#define totalAdcQEvenPhase meas3.unsign
899
#define totalAdcDcOffsetIOddPhase  meas0.sign
900
#define totalAdcDcOffsetIEvenPhase meas1.sign
901
#define totalAdcDcOffsetQOddPhase  meas2.sign
902
#define totalAdcDcOffsetQEvenPhase meas3.sign
903
	union {
904
		u32 unsign[AR5416_MAX_CHAINS];
905
		int32_t sign[AR5416_MAX_CHAINS];
906
	} meas0;
907
	union {
908
		u32 unsign[AR5416_MAX_CHAINS];
909
		int32_t sign[AR5416_MAX_CHAINS];
910
	} meas1;
911
	union {
912
		u32 unsign[AR5416_MAX_CHAINS];
913
		int32_t sign[AR5416_MAX_CHAINS];
914
	} meas2;
915
	union {
916
		u32 unsign[AR5416_MAX_CHAINS];
917
		int32_t sign[AR5416_MAX_CHAINS];
918
	} meas3;
919
	u16 cal_samples;
1.2.31 by Ben Hutchings
Import upstream version 3.2~rc4
920
	u8 enabled_cals;
1.1.4 by maximilian attems
Import upstream version 2.6.31
921
922
	u32 sta_id1_defaults;
923
	u32 misc_mode;
924
	enum {
925
		AUTO_32KHZ,
926
		USE_32KHZ,
927
		DONT_USE_32KHZ,
928
	} enable_32kHz_clock;
929
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
930
	/* Private to hardware code */
931
	struct ath_hw_private_ops private_ops;
932
	/* Accessed by the lower level driver */
933
	struct ath_hw_ops ops;
1.2.1 by maximilian attems
Import upstream version 2.6.33
934
935
	/* Used to program the radio on non single-chip devices */
1.1.4 by maximilian attems
Import upstream version 2.6.31
936
	u32 *analogBank0Data;
937
	u32 *analogBank1Data;
938
	u32 *analogBank2Data;
939
	u32 *analogBank3Data;
940
	u32 *analogBank6Data;
941
	u32 *analogBank6TPCData;
942
	u32 *analogBank7Data;
943
	u32 *bank6Temp;
944
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
945
	u8 txpower_limit;
1.2.2 by maximilian attems
Import upstream version 2.6.34
946
	int coverage_class;
1.1.4 by maximilian attems
Import upstream version 2.6.31
947
	u32 slottime;
948
	u32 globaltxtimeout;
949
950
	/* ANI */
951
	u32 proc_phyerr;
952
	u32 aniperiod;
953
	int totalSizeDesired[5];
954
	int coarse_high[5];
955
	int coarse_low[5];
956
	int firpwr[5];
957
	enum ath9k_ani_cmd ani_function;
958
1.2.1 by maximilian attems
Import upstream version 2.6.33
959
	/* Bluetooth coexistance */
960
	struct ath_btcoex_hw btcoex_hw;
961
1.1.4 by maximilian attems
Import upstream version 2.6.31
962
	u32 intr_txqs;
963
	u8 txchainmask;
964
	u8 rxchainmask;
965
1.2.14 by maximilian attems
Import upstream version 2.6.38~rc6
966
	struct ath_hw_radar_conf radar_conf;
967
1.1.4 by maximilian attems
Import upstream version 2.6.31
968
	u32 originalGain[22];
969
	int initPDADC;
970
	int PDADCdelta;
1.2.21 by Ben Hutchings
Import upstream version 3.0.0~rc1
971
	int led_pin;
972
	u32 gpio_mask;
973
	u32 gpio_val;
1.1.4 by maximilian attems
Import upstream version 2.6.31
974
975
	struct ar5416IniArray iniModes;
976
	struct ar5416IniArray iniCommon;
977
	struct ar5416IniArray iniBank0;
978
	struct ar5416IniArray iniBB_RfGain;
979
	struct ar5416IniArray iniBank1;
980
	struct ar5416IniArray iniBank2;
981
	struct ar5416IniArray iniBank3;
982
	struct ar5416IniArray iniBank6;
983
	struct ar5416IniArray iniBank6TPC;
984
	struct ar5416IniArray iniBank7;
985
	struct ar5416IniArray iniAddac;
986
	struct ar5416IniArray iniPcieSerdes;
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
987
	struct ar5416IniArray iniPcieSerdesLowPower;
1.1.4 by maximilian attems
Import upstream version 2.6.31
988
	struct ar5416IniArray iniModesAdditional;
1.2.21 by Ben Hutchings
Import upstream version 3.0.0~rc1
989
	struct ar5416IniArray iniModesAdditional_40M;
1.1.4 by maximilian attems
Import upstream version 2.6.31
990
	struct ar5416IniArray iniModesRxGain;
991
	struct ar5416IniArray iniModesTxGain;
1.2.1 by maximilian attems
Import upstream version 2.6.33
992
	struct ar5416IniArray iniModes_9271_1_0_only;
993
	struct ar5416IniArray iniCckfirNormal;
994
	struct ar5416IniArray iniCckfirJapan2484;
1.2.31 by Ben Hutchings
Import upstream version 3.2~rc4
995
	struct ar5416IniArray ini_japan2484;
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
996
	struct ar5416IniArray iniCommon_normal_cck_fir_coeff_9271;
997
	struct ar5416IniArray iniCommon_japan_2484_cck_fir_coeff_9271;
998
	struct ar5416IniArray iniModes_9271_ANI_reg;
999
	struct ar5416IniArray iniModes_high_power_tx_gain_9271;
1000
	struct ar5416IniArray iniModes_normal_power_tx_gain_9271;
1.2.31 by Ben Hutchings
Import upstream version 3.2~rc4
1001
	struct ar5416IniArray ini_radio_post_sys2ant;
1002
	struct ar5416IniArray ini_BTCOEX_MAX_TXPWR;
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
1003
1004
	struct ar5416IniArray iniMac[ATH_INI_NUM_SPLIT];
1005
	struct ar5416IniArray iniBB[ATH_INI_NUM_SPLIT];
1006
	struct ar5416IniArray iniRadio[ATH_INI_NUM_SPLIT];
1007
	struct ar5416IniArray iniSOC[ATH_INI_NUM_SPLIT];
1.1.5 by Bastian Blank
Import upstream version 2.6.32~rc8
1008
1009
	u32 intr_gen_timer_trigger;
1010
	u32 intr_gen_timer_thresh;
1011
	struct ath_gen_timer_table hw_gen_timers;
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
1012
1013
	struct ar9003_txs *ts_ring;
1014
	void *ts_start;
1015
	u32 ts_paddr_start;
1016
	u32 ts_paddr_end;
1017
	u16 ts_tail;
1.2.33 by Ben Hutchings
Import upstream version 3.3~rc6
1018
	u16 ts_size;
1.2.7 by Ben Hutchings
Import upstream version 2.6.36~rc5
1019
1020
	u32 bb_watchdog_last_status;
1021
	u32 bb_watchdog_timeout_ms; /* in ms, 0 to disable */
1.2.22 by Ben Hutchings
Import upstream version 3.0.0~rc2
1022
	u8 bb_hang_rx_ofdm; /* true if bb hang due to rx_ofdm */
1.2.7 by Ben Hutchings
Import upstream version 2.6.36~rc5
1023
1.2.14 by maximilian attems
Import upstream version 2.6.38~rc6
1024
	unsigned int paprd_target_power;
1025
	unsigned int paprd_training_power;
1026
	unsigned int paprd_ratemask;
1027
	unsigned int paprd_ratemask_ht40;
1028
	bool paprd_table_write_done;
1.2.7 by Ben Hutchings
Import upstream version 2.6.36~rc5
1029
	u32 paprd_gain_table_entries[PAPRD_GAIN_TABLE_ENTRIES];
1030
	u8 paprd_gain_table_index[PAPRD_GAIN_TABLE_ENTRIES];
1031
	/*
1032
	 * Store the permanent value of Reg 0x4004in WARegVal
1033
	 * so we dont have to R/M/W. We should not be reading
1034
	 * this register when in sleep states.
1035
	 */
1036
	u32 WARegVal;
1.2.14 by maximilian attems
Import upstream version 2.6.38~rc6
1037
1038
	/* Enterprise mode cap */
1039
	u32 ent_mode;
1.2.21 by Ben Hutchings
Import upstream version 3.0.0~rc1
1040
1041
	bool is_clk_25mhz;
1.2.27 by Ben Hutchings
Import upstream version 3.1.0~rc4
1042
	int (*get_mac_revision)(void);
1043
	int (*external_reset)(void);
1.2.21 by Ben Hutchings
Import upstream version 3.0.0~rc1
1044
};
1045
1046
struct ath_bus_ops {
1047
	enum ath_bus_type ath_bus_type;
1048
	void (*read_cachesize)(struct ath_common *common, int *csz);
1049
	bool (*eeprom_read)(struct ath_common *common, u32 off, u16 *data);
1050
	void (*bt_coex_prep)(struct ath_common *common);
1051
	void (*extn_synch_en)(struct ath_common *common);
1.2.27 by Ben Hutchings
Import upstream version 3.1.0~rc4
1052
	void (*aspm_init)(struct ath_common *common);
1.1.4 by maximilian attems
Import upstream version 2.6.31
1053
};
1054
1.2.1 by maximilian attems
Import upstream version 2.6.33
1055
static inline struct ath_common *ath9k_hw_common(struct ath_hw *ah)
1056
{
1057
	return &ah->common;
1058
}
1059
1060
static inline struct ath_regulatory *ath9k_hw_regulatory(struct ath_hw *ah)
1061
{
1062
	return &(ath9k_hw_common(ah)->regulatory);
1063
}
1064
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
1065
static inline struct ath_hw_private_ops *ath9k_hw_private_ops(struct ath_hw *ah)
1066
{
1067
	return &ah->private_ops;
1068
}
1069
1070
static inline struct ath_hw_ops *ath9k_hw_ops(struct ath_hw *ah)
1071
{
1072
	return &ah->ops;
1073
}
1074
1.2.14 by maximilian attems
Import upstream version 2.6.38~rc6
1075
static inline u8 get_streams(int mask)
1.2.7 by Ben Hutchings
Import upstream version 2.6.36~rc5
1076
{
1.2.14 by maximilian attems
Import upstream version 2.6.38~rc6
1077
	return !!(mask & BIT(0)) + !!(mask & BIT(1)) + !!(mask & BIT(2));
1.2.7 by Ben Hutchings
Import upstream version 2.6.36~rc5
1078
}
1079
1.1.5 by Bastian Blank
Import upstream version 2.6.32~rc8
1080
/* Initialization, Detach, Reset */
1.1.4 by maximilian attems
Import upstream version 2.6.31
1081
const char *ath9k_hw_probe(u16 vendorid, u16 devid);
1.2.2 by maximilian attems
Import upstream version 2.6.34
1082
void ath9k_hw_deinit(struct ath_hw *ah);
1.1.5 by Bastian Blank
Import upstream version 2.6.32~rc8
1083
int ath9k_hw_init(struct ath_hw *ah);
1.1.4 by maximilian attems
Import upstream version 2.6.31
1084
int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
1.2.7 by Ben Hutchings
Import upstream version 2.6.36~rc5
1085
		   struct ath9k_hw_cal_data *caldata, bool bChannelChange);
1.2.1 by maximilian attems
Import upstream version 2.6.33
1086
int ath9k_hw_fill_cap_info(struct ath_hw *ah);
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
1087
u32 ath9k_regd_get_ctl(struct ath_regulatory *reg, struct ath9k_channel *chan);
1.1.4 by maximilian attems
Import upstream version 2.6.31
1088
1089
/* GPIO / RFKILL / Antennae */
1090
void ath9k_hw_cfg_gpio_input(struct ath_hw *ah, u32 gpio);
1091
u32 ath9k_hw_gpio_get(struct ath_hw *ah, u32 gpio);
1092
void ath9k_hw_cfg_output(struct ath_hw *ah, u32 gpio,
1093
			 u32 ah_signal_type);
1094
void ath9k_hw_set_gpio(struct ath_hw *ah, u32 gpio, u32 val);
1095
u32 ath9k_hw_getdefantenna(struct ath_hw *ah);
1096
void ath9k_hw_setantenna(struct ath_hw *ah, u32 antenna);
1097
1098
/* General Operation */
1099
bool ath9k_hw_wait(struct ath_hw *ah, u32 reg, u32 mask, u32 val, u32 timeout);
1.2.21 by Ben Hutchings
Import upstream version 3.0.0~rc1
1100
void ath9k_hw_write_array(struct ath_hw *ah, struct ar5416IniArray *array,
1101
			  int column, unsigned int *writecnt);
1.1.4 by maximilian attems
Import upstream version 2.6.31
1102
u32 ath9k_hw_reverse_bits(u32 val, u32 n);
1103
u16 ath9k_hw_computetxtime(struct ath_hw *ah,
1.2.1 by maximilian attems
Import upstream version 2.6.33
1104
			   u8 phy, int kbps,
1.1.4 by maximilian attems
Import upstream version 2.6.31
1105
			   u32 frameLen, u16 rateix, bool shortPreamble);
1106
void ath9k_hw_get_channel_centers(struct ath_hw *ah,
1107
				  struct ath9k_channel *chan,
1108
				  struct chan_centers *centers);
1109
u32 ath9k_hw_getrxfilter(struct ath_hw *ah);
1110
void ath9k_hw_setrxfilter(struct ath_hw *ah, u32 bits);
1111
bool ath9k_hw_phy_disable(struct ath_hw *ah);
1112
bool ath9k_hw_disable(struct ath_hw *ah);
1.2.14 by maximilian attems
Import upstream version 2.6.38~rc6
1113
void ath9k_hw_set_txpowerlimit(struct ath_hw *ah, u32 limit, bool test);
1.1.4 by maximilian attems
Import upstream version 2.6.31
1114
void ath9k_hw_setopmode(struct ath_hw *ah);
1115
void ath9k_hw_setmcastfilter(struct ath_hw *ah, u32 filter0, u32 filter1);
1.2.1 by maximilian attems
Import upstream version 2.6.33
1116
void ath9k_hw_write_associd(struct ath_hw *ah);
1.2.21 by Ben Hutchings
Import upstream version 3.0.0~rc1
1117
u32 ath9k_hw_gettsf32(struct ath_hw *ah);
1.1.4 by maximilian attems
Import upstream version 2.6.31
1118
u64 ath9k_hw_gettsf64(struct ath_hw *ah);
1119
void ath9k_hw_settsf64(struct ath_hw *ah, u64 tsf64);
1120
void ath9k_hw_reset_tsf(struct ath_hw *ah);
1.1.5 by Bastian Blank
Import upstream version 2.6.32~rc8
1121
void ath9k_hw_set_tsfadjust(struct ath_hw *ah, u32 setting);
1.2.2 by maximilian attems
Import upstream version 2.6.34
1122
void ath9k_hw_init_global_settings(struct ath_hw *ah);
1.2.21 by Ben Hutchings
Import upstream version 3.0.0~rc1
1123
u32 ar9003_get_pll_sqsum_dvc(struct ath_hw *ah);
1.2.1 by maximilian attems
Import upstream version 2.6.33
1124
void ath9k_hw_set11nmac2040(struct ath_hw *ah);
1.1.4 by maximilian attems
Import upstream version 2.6.31
1125
void ath9k_hw_beaconinit(struct ath_hw *ah, u32 next_beacon, u32 beacon_period);
1126
void ath9k_hw_set_sta_beacon_timers(struct ath_hw *ah,
1127
				    const struct ath9k_beacon_state *bs);
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
1128
bool ath9k_hw_check_alive(struct ath_hw *ah);
1.2.1 by maximilian attems
Import upstream version 2.6.33
1129
1130
bool ath9k_hw_setpower(struct ath_hw *ah, enum ath9k_power_mode mode);
1131
1.1.5 by Bastian Blank
Import upstream version 2.6.32~rc8
1132
/* Generic hw timer primitives */
1133
struct ath_gen_timer *ath_gen_timer_alloc(struct ath_hw *ah,
1134
					  void (*trigger)(void *),
1135
					  void (*overflow)(void *),
1136
					  void *arg,
1137
					  u8 timer_index);
1.2.1 by maximilian attems
Import upstream version 2.6.33
1138
void ath9k_hw_gen_timer_start(struct ath_hw *ah,
1139
			      struct ath_gen_timer *timer,
1140
			      u32 timer_next,
1141
			      u32 timer_period);
1142
void ath9k_hw_gen_timer_stop(struct ath_hw *ah, struct ath_gen_timer *timer);
1143
1.1.5 by Bastian Blank
Import upstream version 2.6.32~rc8
1144
void ath_gen_timer_free(struct ath_hw *ah, struct ath_gen_timer *timer);
1145
void ath_gen_timer_isr(struct ath_hw *hw);
1146
1.2.1 by maximilian attems
Import upstream version 2.6.33
1147
void ath9k_hw_name(struct ath_hw *ah, char *hw_name, size_t len);
1148
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
1149
/* HTC */
1150
void ath9k_hw_htc_resetinit(struct ath_hw *ah);
1151
1152
/* PHY */
1153
void ath9k_hw_get_delta_slope_vals(struct ath_hw *ah, u32 coef_scaled,
1154
				   u32 *coef_mantissa, u32 *coef_exponent);
1.2.31 by Ben Hutchings
Import upstream version 3.2~rc4
1155
void ath9k_hw_apply_txpower(struct ath_hw *ah, struct ath9k_channel *chan);
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
1156
1157
/*
1158
 * Code Specific to AR5008, AR9001 or AR9002,
1159
 * we stuff these here to avoid callbacks for AR9003.
1160
 */
1161
void ar9002_hw_cck_chan14_spread(struct ath_hw *ah);
1162
int ar9002_hw_rf_claim(struct ath_hw *ah);
1163
void ar9002_hw_enable_async_fifo(struct ath_hw *ah);
1164
1165
/*
1.2.7 by Ben Hutchings
Import upstream version 2.6.36~rc5
1166
 * Code specific to AR9003, we stuff these here to avoid callbacks
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
1167
 * for older families
1168
 */
1.2.7 by Ben Hutchings
Import upstream version 2.6.36~rc5
1169
void ar9003_hw_bb_watchdog_config(struct ath_hw *ah);
1170
void ar9003_hw_bb_watchdog_read(struct ath_hw *ah);
1171
void ar9003_hw_bb_watchdog_dbg_info(struct ath_hw *ah);
1.2.22 by Ben Hutchings
Import upstream version 3.0.0~rc2
1172
void ar9003_hw_disable_phy_restart(struct ath_hw *ah);
1.2.7 by Ben Hutchings
Import upstream version 2.6.36~rc5
1173
void ar9003_paprd_enable(struct ath_hw *ah, bool val);
1174
void ar9003_paprd_populate_single_table(struct ath_hw *ah,
1175
					struct ath9k_hw_cal_data *caldata,
1176
					int chain);
1177
int ar9003_paprd_create_curve(struct ath_hw *ah,
1178
			      struct ath9k_hw_cal_data *caldata, int chain);
1179
int ar9003_paprd_setup_gain_table(struct ath_hw *ah, int chain);
1180
int ar9003_paprd_init_table(struct ath_hw *ah);
1181
bool ar9003_paprd_is_done(struct ath_hw *ah);
1182
void ar9003_hw_set_paprd_txdesc(struct ath_hw *ah, void *ds, u8 chains);
1.2.3 by Ben Hutchings
Import upstream version 2.6.35~rc4
1183
1184
/* Hardware family op attach helpers */
1185
void ar5008_hw_attach_phy_ops(struct ath_hw *ah);
1186
void ar9002_hw_attach_phy_ops(struct ath_hw *ah);
1187
void ar9003_hw_attach_phy_ops(struct ath_hw *ah);
1188
1189
void ar9002_hw_attach_calib_ops(struct ath_hw *ah);
1190
void ar9003_hw_attach_calib_ops(struct ath_hw *ah);
1191
1192
void ar9002_hw_attach_ops(struct ath_hw *ah);
1193
void ar9003_hw_attach_ops(struct ath_hw *ah);
1194
1.2.10 by Ben Hutchings
Import upstream version 2.6.37~rc4
1195
void ar9002_hw_load_ani_reg(struct ath_hw *ah, struct ath9k_channel *chan);
1.2.7 by Ben Hutchings
Import upstream version 2.6.36~rc5
1196
/*
1197
 * ANI work can be shared between all families but a next
1198
 * generation implementation of ANI will be used only for AR9003 only
1199
 * for now as the other families still need to be tested with the same
1200
 * next generation ANI. Feel free to start testing it though for the
1201
 * older families (AR5008, AR9001, AR9002) by using modparam_force_new_ani.
1202
 */
1203
extern int modparam_force_new_ani;
1.2.10 by Ben Hutchings
Import upstream version 2.6.37~rc4
1204
void ath9k_ani_reset(struct ath_hw *ah, bool is_scanning);
1205
void ath9k_hw_proc_mib_event(struct ath_hw *ah);
1206
void ath9k_hw_ani_monitor(struct ath_hw *ah, struct ath9k_channel *chan);
1.2.7 by Ben Hutchings
Import upstream version 2.6.36~rc5
1207
1.2.33 by Ben Hutchings
Import upstream version 3.3~rc6
1208
bool ar9003_mci_send_message(struct ath_hw *ah, u8 header, u32 flag,
1209
			     u32 *payload, u8 len, bool wait_done,
1210
			     bool check_bt);
1211
void ar9003_mci_mute_bt(struct ath_hw *ah);
1212
u32 ar9003_mci_state(struct ath_hw *ah, u32 state_type, u32 *p_data);
1213
void ar9003_mci_setup(struct ath_hw *ah, u32 gpm_addr, void *gpm_buf,
1214
		      u16 len, u32 sched_addr);
1215
void ar9003_mci_cleanup(struct ath_hw *ah);
1216
void ar9003_mci_send_coex_halt_bt_gpm(struct ath_hw *ah, bool halt,
1217
				      bool wait_done);
1218
u32 ar9003_mci_wait_for_gpm(struct ath_hw *ah, u8 gpm_type,
1219
			    u8 gpm_opcode, int time_out);
1220
void ar9003_mci_2g5g_changed(struct ath_hw *ah, bool is_2g);
1221
void ar9003_mci_disable_interrupt(struct ath_hw *ah);
1222
void ar9003_mci_enable_interrupt(struct ath_hw *ah);
1223
void ar9003_mci_2g5g_switch(struct ath_hw *ah, bool wait_done);
1224
void ar9003_mci_reset(struct ath_hw *ah, bool en_int, bool is_2g,
1225
		      bool is_full_sleep);
1226
bool ar9003_mci_check_int(struct ath_hw *ah, u32 ints);
1227
void ar9003_mci_remote_reset(struct ath_hw *ah, bool wait_done);
1228
void ar9003_mci_send_sys_waking(struct ath_hw *ah, bool wait_done);
1229
void ar9003_mci_send_lna_transfer(struct ath_hw *ah, bool wait_done);
1230
void ar9003_mci_sync_bt_state(struct ath_hw *ah);
1231
void ar9003_mci_get_interrupt(struct ath_hw *ah, u32 *raw_intr,
1232
			      u32 *rx_msg_intr);
1233
1234
#ifdef CONFIG_ATH9K_BTCOEX_SUPPORT
1235
static inline enum ath_btcoex_scheme
1236
ath9k_hw_get_btcoex_scheme(struct ath_hw *ah)
1237
{
1238
	return ah->btcoex_hw.scheme;
1239
}
1240
#else
1241
#define ath9k_hw_get_btcoex_scheme(...) ATH_BTCOEX_CFG_NONE
1242
#endif
1243
1.2.7 by Ben Hutchings
Import upstream version 2.6.36~rc5
1244
#define ATH9K_CLOCK_RATE_CCK		22
1245
#define ATH9K_CLOCK_RATE_5GHZ_OFDM	40
1246
#define ATH9K_CLOCK_RATE_2GHZ_OFDM	44
1247
#define ATH9K_CLOCK_FAST_RATE_5GHZ_OFDM 44
1248
1.1.4 by maximilian attems
Import upstream version 2.6.31
1249
#endif