~ubuntu-branches/ubuntu/natty/linux-backports-modules-2.6.38/natty-proposed

« back to all changes in this revision

Viewing changes to updates/compat-wireless-2.6.36/drivers/net/wireless/ath/ath9k/mac.h

  • Committer: Bazaar Package Importer
  • Author(s): Tim Gardner, Tim Gardner
  • Date: 2011-06-08 10:44:09 UTC
  • Revision ID: james.westby@ubuntu.com-20110608104409-fnl8carkdo15bwsz
Tags: 2.6.38-10.6
[ Tim Gardner ]

Shorten compat-wireless package name to cw to accomodate
CDROM file name length restrictions.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * Copyright (c) 2008-2009 Atheros Communications Inc.
3
 
 *
4
 
 * Permission to use, copy, modify, and/or distribute this software for any
5
 
 * purpose with or without fee is hereby granted, provided that the above
6
 
 * copyright notice and this permission notice appear in all copies.
7
 
 *
8
 
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9
 
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10
 
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11
 
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12
 
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13
 
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14
 
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15
 
 */
16
 
 
17
 
#ifndef MAC_H
18
 
#define MAC_H
19
 
 
20
 
#define RXSTATUS_RATE(ah, ads) (AR_SREV_5416_20_OR_LATER(ah) ?          \
21
 
                                MS(ads->ds_rxstatus0, AR_RxRate) :      \
22
 
                                (ads->ds_rxstatus3 >> 2) & 0xFF)
23
 
 
24
 
#define set11nTries(_series, _index) \
25
 
        (SM((_series)[_index].Tries, AR_XmitDataTries##_index))
26
 
 
27
 
#define set11nRate(_series, _index) \
28
 
        (SM((_series)[_index].Rate, AR_XmitRate##_index))
29
 
 
30
 
#define set11nPktDurRTSCTS(_series, _index)                             \
31
 
        (SM((_series)[_index].PktDuration, AR_PacketDur##_index) |      \
32
 
         ((_series)[_index].RateFlags & ATH9K_RATESERIES_RTS_CTS   ?    \
33
 
          AR_RTSCTSQual##_index : 0))
34
 
 
35
 
#define set11nRateFlags(_series, _index)                                \
36
 
        (((_series)[_index].RateFlags & ATH9K_RATESERIES_2040 ?         \
37
 
          AR_2040_##_index : 0)                                         \
38
 
         |((_series)[_index].RateFlags & ATH9K_RATESERIES_HALFGI ?      \
39
 
           AR_GI##_index : 0)                                           \
40
 
         |((_series)[_index].RateFlags & ATH9K_RATESERIES_STBC ?        \
41
 
           AR_STBC##_index : 0)                                         \
42
 
         |SM((_series)[_index].ChSel, AR_ChainSel##_index))
43
 
 
44
 
#define CCK_SIFS_TIME        10
45
 
#define CCK_PREAMBLE_BITS   144
46
 
#define CCK_PLCP_BITS        48
47
 
 
48
 
#define OFDM_SIFS_TIME        16
49
 
#define OFDM_PREAMBLE_TIME    20
50
 
#define OFDM_PLCP_BITS        22
51
 
#define OFDM_SYMBOL_TIME      4
52
 
 
53
 
#define OFDM_SIFS_TIME_HALF     32
54
 
#define OFDM_PREAMBLE_TIME_HALF 40
55
 
#define OFDM_PLCP_BITS_HALF     22
56
 
#define OFDM_SYMBOL_TIME_HALF   8
57
 
 
58
 
#define OFDM_SIFS_TIME_QUARTER      64
59
 
#define OFDM_PREAMBLE_TIME_QUARTER  80
60
 
#define OFDM_PLCP_BITS_QUARTER      22
61
 
#define OFDM_SYMBOL_TIME_QUARTER    16
62
 
 
63
 
#define INIT_AIFS       2
64
 
#define INIT_CWMIN      15
65
 
#define INIT_CWMIN_11B  31
66
 
#define INIT_CWMAX      1023
67
 
#define INIT_SH_RETRY   10
68
 
#define INIT_LG_RETRY   10
69
 
#define INIT_SSH_RETRY  32
70
 
#define INIT_SLG_RETRY  32
71
 
 
72
 
#define ATH9K_SLOT_TIME_6 6
73
 
#define ATH9K_SLOT_TIME_9 9
74
 
#define ATH9K_SLOT_TIME_20 20
75
 
 
76
 
#define ATH9K_TXERR_XRETRY         0x01
77
 
#define ATH9K_TXERR_FILT           0x02
78
 
#define ATH9K_TXERR_FIFO           0x04
79
 
#define ATH9K_TXERR_XTXOP          0x08
80
 
#define ATH9K_TXERR_TIMER_EXPIRED  0x10
81
 
#define ATH9K_TX_ACKED             0x20
82
 
#define ATH9K_TXERR_MASK                                                \
83
 
        (ATH9K_TXERR_XRETRY | ATH9K_TXERR_FILT | ATH9K_TXERR_FIFO |     \
84
 
         ATH9K_TXERR_XTXOP | ATH9K_TXERR_TIMER_EXPIRED)
85
 
 
86
 
#define ATH9K_TX_BA                0x01
87
 
#define ATH9K_TX_PWRMGMT           0x02
88
 
#define ATH9K_TX_DESC_CFG_ERR      0x04
89
 
#define ATH9K_TX_DATA_UNDERRUN     0x08
90
 
#define ATH9K_TX_DELIM_UNDERRUN    0x10
91
 
#define ATH9K_TX_SW_FILTERED       0x80
92
 
 
93
 
/* 64 bytes */
94
 
#define MIN_TX_FIFO_THRESHOLD   0x1
95
 
 
96
 
/*
97
 
 * Single stream device AR9285 and AR9271 require 2 KB
98
 
 * to work around a hardware issue, all other devices
99
 
 * have can use the max 4 KB limit.
100
 
 */
101
 
#define MAX_TX_FIFO_THRESHOLD   ((4096 / 64) - 1)
102
 
 
103
 
struct ath_tx_status {
104
 
        u32 ts_tstamp;
105
 
        u16 ts_seqnum;
106
 
        u8 ts_status;
107
 
        u8 ts_ratecode;
108
 
        u8 ts_rateindex;
109
 
        int8_t ts_rssi;
110
 
        u8 ts_shortretry;
111
 
        u8 ts_longretry;
112
 
        u8 ts_virtcol;
113
 
        u8 ts_antenna;
114
 
        u8 ts_flags;
115
 
        int8_t ts_rssi_ctl0;
116
 
        int8_t ts_rssi_ctl1;
117
 
        int8_t ts_rssi_ctl2;
118
 
        int8_t ts_rssi_ext0;
119
 
        int8_t ts_rssi_ext1;
120
 
        int8_t ts_rssi_ext2;
121
 
        u8 qid;
122
 
        u16 desc_id;
123
 
        u8 tid;
124
 
        u8 pad[2];
125
 
        u32 ba_low;
126
 
        u32 ba_high;
127
 
        u32 evm0;
128
 
        u32 evm1;
129
 
        u32 evm2;
130
 
};
131
 
 
132
 
struct ath_rx_status {
133
 
        u32 rs_tstamp;
134
 
        u16 rs_datalen;
135
 
        u8 rs_status;
136
 
        u8 rs_phyerr;
137
 
        int8_t rs_rssi;
138
 
        u8 rs_keyix;
139
 
        u8 rs_rate;
140
 
        u8 rs_antenna;
141
 
        u8 rs_more;
142
 
        int8_t rs_rssi_ctl0;
143
 
        int8_t rs_rssi_ctl1;
144
 
        int8_t rs_rssi_ctl2;
145
 
        int8_t rs_rssi_ext0;
146
 
        int8_t rs_rssi_ext1;
147
 
        int8_t rs_rssi_ext2;
148
 
        u8 rs_isaggr;
149
 
        u8 rs_moreaggr;
150
 
        u8 rs_num_delims;
151
 
        u8 rs_flags;
152
 
        u32 evm0;
153
 
        u32 evm1;
154
 
        u32 evm2;
155
 
        u32 evm3;
156
 
        u32 evm4;
157
 
};
158
 
 
159
 
struct ath_htc_rx_status {
160
 
        __be64 rs_tstamp;
161
 
        __be16 rs_datalen;
162
 
        u8 rs_status;
163
 
        u8 rs_phyerr;
164
 
        int8_t rs_rssi;
165
 
        int8_t rs_rssi_ctl0;
166
 
        int8_t rs_rssi_ctl1;
167
 
        int8_t rs_rssi_ctl2;
168
 
        int8_t rs_rssi_ext0;
169
 
        int8_t rs_rssi_ext1;
170
 
        int8_t rs_rssi_ext2;
171
 
        u8 rs_keyix;
172
 
        u8 rs_rate;
173
 
        u8 rs_antenna;
174
 
        u8 rs_more;
175
 
        u8 rs_isaggr;
176
 
        u8 rs_moreaggr;
177
 
        u8 rs_num_delims;
178
 
        u8 rs_flags;
179
 
        u8 rs_dummy;
180
 
        __be32 evm0;
181
 
        __be32 evm1;
182
 
        __be32 evm2;
183
 
};
184
 
 
185
 
#define ATH9K_RXERR_CRC           0x01
186
 
#define ATH9K_RXERR_PHY           0x02
187
 
#define ATH9K_RXERR_FIFO          0x04
188
 
#define ATH9K_RXERR_DECRYPT       0x08
189
 
#define ATH9K_RXERR_MIC           0x10
190
 
 
191
 
#define ATH9K_RX_MORE             0x01
192
 
#define ATH9K_RX_MORE_AGGR        0x02
193
 
#define ATH9K_RX_GI               0x04
194
 
#define ATH9K_RX_2040             0x08
195
 
#define ATH9K_RX_DELIM_CRC_PRE    0x10
196
 
#define ATH9K_RX_DELIM_CRC_POST   0x20
197
 
#define ATH9K_RX_DECRYPT_BUSY     0x40
198
 
 
199
 
#define ATH9K_RXKEYIX_INVALID   ((u8)-1)
200
 
#define ATH9K_TXKEYIX_INVALID   ((u32)-1)
201
 
 
202
 
enum ath9k_phyerr {
203
 
        ATH9K_PHYERR_UNDERRUN             = 0,  /* Transmit underrun */
204
 
        ATH9K_PHYERR_TIMING               = 1,  /* Timing error */
205
 
        ATH9K_PHYERR_PARITY               = 2,  /* Illegal parity */
206
 
        ATH9K_PHYERR_RATE                 = 3,  /* Illegal rate */
207
 
        ATH9K_PHYERR_LENGTH               = 4,  /* Illegal length */
208
 
        ATH9K_PHYERR_RADAR                = 5,  /* Radar detect */
209
 
        ATH9K_PHYERR_SERVICE              = 6,  /* Illegal service */
210
 
        ATH9K_PHYERR_TOR                  = 7,  /* Transmit override receive */
211
 
 
212
 
        ATH9K_PHYERR_OFDM_TIMING          = 17,
213
 
        ATH9K_PHYERR_OFDM_SIGNAL_PARITY   = 18,
214
 
        ATH9K_PHYERR_OFDM_RATE_ILLEGAL    = 19,
215
 
        ATH9K_PHYERR_OFDM_LENGTH_ILLEGAL  = 20,
216
 
        ATH9K_PHYERR_OFDM_POWER_DROP      = 21,
217
 
        ATH9K_PHYERR_OFDM_SERVICE         = 22,
218
 
        ATH9K_PHYERR_OFDM_RESTART         = 23,
219
 
        ATH9K_PHYERR_FALSE_RADAR_EXT      = 24,
220
 
 
221
 
        ATH9K_PHYERR_CCK_TIMING           = 25,
222
 
        ATH9K_PHYERR_CCK_HEADER_CRC       = 26,
223
 
        ATH9K_PHYERR_CCK_RATE_ILLEGAL     = 27,
224
 
        ATH9K_PHYERR_CCK_SERVICE          = 30,
225
 
        ATH9K_PHYERR_CCK_RESTART          = 31,
226
 
        ATH9K_PHYERR_CCK_LENGTH_ILLEGAL   = 32,
227
 
        ATH9K_PHYERR_CCK_POWER_DROP       = 33,
228
 
 
229
 
        ATH9K_PHYERR_HT_CRC_ERROR         = 34,
230
 
        ATH9K_PHYERR_HT_LENGTH_ILLEGAL    = 35,
231
 
        ATH9K_PHYERR_HT_RATE_ILLEGAL      = 36,
232
 
 
233
 
        ATH9K_PHYERR_MAX                  = 37,
234
 
};
235
 
 
236
 
struct ath_desc {
237
 
        u32 ds_link;
238
 
        u32 ds_data;
239
 
        u32 ds_ctl0;
240
 
        u32 ds_ctl1;
241
 
        u32 ds_hw[20];
242
 
        void *ds_vdata;
243
 
} __packed;
244
 
 
245
 
#define ATH9K_TXDESC_CLRDMASK           0x0001
246
 
#define ATH9K_TXDESC_NOACK              0x0002
247
 
#define ATH9K_TXDESC_RTSENA             0x0004
248
 
#define ATH9K_TXDESC_CTSENA             0x0008
249
 
/* ATH9K_TXDESC_INTREQ forces a tx interrupt to be generated for
250
 
 * the descriptor its marked on.  We take a tx interrupt to reap
251
 
 * descriptors when the h/w hits an EOL condition or
252
 
 * when the descriptor is specifically marked to generate
253
 
 * an interrupt with this flag. Descriptors should be
254
 
 * marked periodically to insure timely replenishing of the
255
 
 * supply needed for sending frames. Defering interrupts
256
 
 * reduces system load and potentially allows more concurrent
257
 
 * work to be done but if done to aggressively can cause
258
 
 * senders to backup. When the hardware queue is left too
259
 
 * large rate control information may also be too out of
260
 
 * date. An Alternative for this is TX interrupt mitigation
261
 
 * but this needs more testing. */
262
 
#define ATH9K_TXDESC_INTREQ             0x0010
263
 
#define ATH9K_TXDESC_VEOL               0x0020
264
 
#define ATH9K_TXDESC_EXT_ONLY           0x0040
265
 
#define ATH9K_TXDESC_EXT_AND_CTL        0x0080
266
 
#define ATH9K_TXDESC_VMF                0x0100
267
 
#define ATH9K_TXDESC_FRAG_IS_ON         0x0200
268
 
#define ATH9K_TXDESC_LOWRXCHAIN         0x0400
269
 
#define ATH9K_TXDESC_LDPC               0x00010000
270
 
 
271
 
#define ATH9K_RXDESC_INTREQ             0x0020
272
 
 
273
 
struct ar5416_desc {
274
 
        u32 ds_link;
275
 
        u32 ds_data;
276
 
        u32 ds_ctl0;
277
 
        u32 ds_ctl1;
278
 
        union {
279
 
                struct {
280
 
                        u32 ctl2;
281
 
                        u32 ctl3;
282
 
                        u32 ctl4;
283
 
                        u32 ctl5;
284
 
                        u32 ctl6;
285
 
                        u32 ctl7;
286
 
                        u32 ctl8;
287
 
                        u32 ctl9;
288
 
                        u32 ctl10;
289
 
                        u32 ctl11;
290
 
                        u32 status0;
291
 
                        u32 status1;
292
 
                        u32 status2;
293
 
                        u32 status3;
294
 
                        u32 status4;
295
 
                        u32 status5;
296
 
                        u32 status6;
297
 
                        u32 status7;
298
 
                        u32 status8;
299
 
                        u32 status9;
300
 
                } tx;
301
 
                struct {
302
 
                        u32 status0;
303
 
                        u32 status1;
304
 
                        u32 status2;
305
 
                        u32 status3;
306
 
                        u32 status4;
307
 
                        u32 status5;
308
 
                        u32 status6;
309
 
                        u32 status7;
310
 
                        u32 status8;
311
 
                } rx;
312
 
        } u;
313
 
} __packed;
314
 
 
315
 
#define AR5416DESC(_ds)         ((struct ar5416_desc *)(_ds))
316
 
#define AR5416DESC_CONST(_ds)   ((const struct ar5416_desc *)(_ds))
317
 
 
318
 
#define ds_ctl2     u.tx.ctl2
319
 
#define ds_ctl3     u.tx.ctl3
320
 
#define ds_ctl4     u.tx.ctl4
321
 
#define ds_ctl5     u.tx.ctl5
322
 
#define ds_ctl6     u.tx.ctl6
323
 
#define ds_ctl7     u.tx.ctl7
324
 
#define ds_ctl8     u.tx.ctl8
325
 
#define ds_ctl9     u.tx.ctl9
326
 
#define ds_ctl10    u.tx.ctl10
327
 
#define ds_ctl11    u.tx.ctl11
328
 
 
329
 
#define ds_txstatus0    u.tx.status0
330
 
#define ds_txstatus1    u.tx.status1
331
 
#define ds_txstatus2    u.tx.status2
332
 
#define ds_txstatus3    u.tx.status3
333
 
#define ds_txstatus4    u.tx.status4
334
 
#define ds_txstatus5    u.tx.status5
335
 
#define ds_txstatus6    u.tx.status6
336
 
#define ds_txstatus7    u.tx.status7
337
 
#define ds_txstatus8    u.tx.status8
338
 
#define ds_txstatus9    u.tx.status9
339
 
 
340
 
#define ds_rxstatus0    u.rx.status0
341
 
#define ds_rxstatus1    u.rx.status1
342
 
#define ds_rxstatus2    u.rx.status2
343
 
#define ds_rxstatus3    u.rx.status3
344
 
#define ds_rxstatus4    u.rx.status4
345
 
#define ds_rxstatus5    u.rx.status5
346
 
#define ds_rxstatus6    u.rx.status6
347
 
#define ds_rxstatus7    u.rx.status7
348
 
#define ds_rxstatus8    u.rx.status8
349
 
 
350
 
#define AR_FrameLen         0x00000fff
351
 
#define AR_VirtMoreFrag     0x00001000
352
 
#define AR_TxCtlRsvd00      0x0000e000
353
 
#define AR_XmitPower        0x003f0000
354
 
#define AR_XmitPower_S      16
355
 
#define AR_RTSEnable        0x00400000
356
 
#define AR_VEOL             0x00800000
357
 
#define AR_ClrDestMask      0x01000000
358
 
#define AR_TxCtlRsvd01      0x1e000000
359
 
#define AR_TxIntrReq        0x20000000
360
 
#define AR_DestIdxValid     0x40000000
361
 
#define AR_CTSEnable        0x80000000
362
 
 
363
 
#define AR_TxMore           0x00001000
364
 
#define AR_DestIdx          0x000fe000
365
 
#define AR_DestIdx_S        13
366
 
#define AR_FrameType        0x00f00000
367
 
#define AR_FrameType_S      20
368
 
#define AR_NoAck            0x01000000
369
 
#define AR_InsertTS         0x02000000
370
 
#define AR_CorruptFCS       0x04000000
371
 
#define AR_ExtOnly          0x08000000
372
 
#define AR_ExtAndCtl        0x10000000
373
 
#define AR_MoreAggr         0x20000000
374
 
#define AR_IsAggr           0x40000000
375
 
 
376
 
#define AR_BurstDur         0x00007fff
377
 
#define AR_BurstDur_S       0
378
 
#define AR_DurUpdateEna     0x00008000
379
 
#define AR_XmitDataTries0   0x000f0000
380
 
#define AR_XmitDataTries0_S 16
381
 
#define AR_XmitDataTries1   0x00f00000
382
 
#define AR_XmitDataTries1_S 20
383
 
#define AR_XmitDataTries2   0x0f000000
384
 
#define AR_XmitDataTries2_S 24
385
 
#define AR_XmitDataTries3   0xf0000000
386
 
#define AR_XmitDataTries3_S 28
387
 
 
388
 
#define AR_XmitRate0        0x000000ff
389
 
#define AR_XmitRate0_S      0
390
 
#define AR_XmitRate1        0x0000ff00
391
 
#define AR_XmitRate1_S      8
392
 
#define AR_XmitRate2        0x00ff0000
393
 
#define AR_XmitRate2_S      16
394
 
#define AR_XmitRate3        0xff000000
395
 
#define AR_XmitRate3_S      24
396
 
 
397
 
#define AR_PacketDur0       0x00007fff
398
 
#define AR_PacketDur0_S     0
399
 
#define AR_RTSCTSQual0      0x00008000
400
 
#define AR_PacketDur1       0x7fff0000
401
 
#define AR_PacketDur1_S     16
402
 
#define AR_RTSCTSQual1      0x80000000
403
 
 
404
 
#define AR_PacketDur2       0x00007fff
405
 
#define AR_PacketDur2_S     0
406
 
#define AR_RTSCTSQual2      0x00008000
407
 
#define AR_PacketDur3       0x7fff0000
408
 
#define AR_PacketDur3_S     16
409
 
#define AR_RTSCTSQual3      0x80000000
410
 
 
411
 
#define AR_AggrLen          0x0000ffff
412
 
#define AR_AggrLen_S        0
413
 
#define AR_TxCtlRsvd60      0x00030000
414
 
#define AR_PadDelim         0x03fc0000
415
 
#define AR_PadDelim_S       18
416
 
#define AR_EncrType         0x0c000000
417
 
#define AR_EncrType_S       26
418
 
#define AR_TxCtlRsvd61      0xf0000000
419
 
#define AR_LDPC             0x80000000
420
 
 
421
 
#define AR_2040_0           0x00000001
422
 
#define AR_GI0              0x00000002
423
 
#define AR_ChainSel0        0x0000001c
424
 
#define AR_ChainSel0_S      2
425
 
#define AR_2040_1           0x00000020
426
 
#define AR_GI1              0x00000040
427
 
#define AR_ChainSel1        0x00000380
428
 
#define AR_ChainSel1_S      7
429
 
#define AR_2040_2           0x00000400
430
 
#define AR_GI2              0x00000800
431
 
#define AR_ChainSel2        0x00007000
432
 
#define AR_ChainSel2_S      12
433
 
#define AR_2040_3           0x00008000
434
 
#define AR_GI3              0x00010000
435
 
#define AR_ChainSel3        0x000e0000
436
 
#define AR_ChainSel3_S      17
437
 
#define AR_RTSCTSRate       0x0ff00000
438
 
#define AR_RTSCTSRate_S     20
439
 
#define AR_STBC0            0x10000000
440
 
#define AR_STBC1            0x20000000
441
 
#define AR_STBC2            0x40000000
442
 
#define AR_STBC3            0x80000000
443
 
 
444
 
#define AR_TxRSSIAnt00      0x000000ff
445
 
#define AR_TxRSSIAnt00_S    0
446
 
#define AR_TxRSSIAnt01      0x0000ff00
447
 
#define AR_TxRSSIAnt01_S    8
448
 
#define AR_TxRSSIAnt02      0x00ff0000
449
 
#define AR_TxRSSIAnt02_S    16
450
 
#define AR_TxStatusRsvd00   0x3f000000
451
 
#define AR_TxBaStatus       0x40000000
452
 
#define AR_TxStatusRsvd01   0x80000000
453
 
 
454
 
/*
455
 
 * AR_FrmXmitOK - Frame transmission success flag. If set, the frame was
456
 
 * transmitted successfully. If clear, no ACK or BA was received to indicate
457
 
 * successful transmission when we were expecting an ACK or BA.
458
 
 */
459
 
#define AR_FrmXmitOK            0x00000001
460
 
#define AR_ExcessiveRetries     0x00000002
461
 
#define AR_FIFOUnderrun         0x00000004
462
 
#define AR_Filtered             0x00000008
463
 
#define AR_RTSFailCnt           0x000000f0
464
 
#define AR_RTSFailCnt_S         4
465
 
#define AR_DataFailCnt          0x00000f00
466
 
#define AR_DataFailCnt_S        8
467
 
#define AR_VirtRetryCnt         0x0000f000
468
 
#define AR_VirtRetryCnt_S       12
469
 
#define AR_TxDelimUnderrun      0x00010000
470
 
#define AR_TxDataUnderrun       0x00020000
471
 
#define AR_DescCfgErr           0x00040000
472
 
#define AR_TxTimerExpired       0x00080000
473
 
#define AR_TxStatusRsvd10       0xfff00000
474
 
 
475
 
#define AR_SendTimestamp    ds_txstatus2
476
 
#define AR_BaBitmapLow      ds_txstatus3
477
 
#define AR_BaBitmapHigh     ds_txstatus4
478
 
 
479
 
#define AR_TxRSSIAnt10      0x000000ff
480
 
#define AR_TxRSSIAnt10_S    0
481
 
#define AR_TxRSSIAnt11      0x0000ff00
482
 
#define AR_TxRSSIAnt11_S    8
483
 
#define AR_TxRSSIAnt12      0x00ff0000
484
 
#define AR_TxRSSIAnt12_S    16
485
 
#define AR_TxRSSICombined   0xff000000
486
 
#define AR_TxRSSICombined_S 24
487
 
 
488
 
#define AR_TxTid        0xf0000000
489
 
#define AR_TxTid_S      28
490
 
 
491
 
#define AR_TxEVM0           ds_txstatus5
492
 
#define AR_TxEVM1           ds_txstatus6
493
 
#define AR_TxEVM2           ds_txstatus7
494
 
 
495
 
#define AR_TxDone           0x00000001
496
 
#define AR_SeqNum           0x00001ffe
497
 
#define AR_SeqNum_S         1
498
 
#define AR_TxStatusRsvd80   0x0001e000
499
 
#define AR_TxOpExceeded     0x00020000
500
 
#define AR_TxStatusRsvd81   0x001c0000
501
 
#define AR_FinalTxIdx       0x00600000
502
 
#define AR_FinalTxIdx_S     21
503
 
#define AR_TxStatusRsvd82   0x01800000
504
 
#define AR_PowerMgmt        0x02000000
505
 
#define AR_TxStatusRsvd83   0xfc000000
506
 
 
507
 
#define AR_RxCTLRsvd00  0xffffffff
508
 
 
509
 
#define AR_RxCtlRsvd00  0x00001000
510
 
#define AR_RxIntrReq    0x00002000
511
 
#define AR_RxCtlRsvd01  0xffffc000
512
 
 
513
 
#define AR_RxRSSIAnt00      0x000000ff
514
 
#define AR_RxRSSIAnt00_S    0
515
 
#define AR_RxRSSIAnt01      0x0000ff00
516
 
#define AR_RxRSSIAnt01_S    8
517
 
#define AR_RxRSSIAnt02      0x00ff0000
518
 
#define AR_RxRSSIAnt02_S    16
519
 
#define AR_RxRate           0xff000000
520
 
#define AR_RxRate_S         24
521
 
#define AR_RxStatusRsvd00   0xff000000
522
 
 
523
 
#define AR_DataLen          0x00000fff
524
 
#define AR_RxMore           0x00001000
525
 
#define AR_NumDelim         0x003fc000
526
 
#define AR_NumDelim_S       14
527
 
#define AR_RxStatusRsvd10   0xff800000
528
 
 
529
 
#define AR_RcvTimestamp     ds_rxstatus2
530
 
 
531
 
#define AR_GI               0x00000001
532
 
#define AR_2040             0x00000002
533
 
#define AR_Parallel40       0x00000004
534
 
#define AR_Parallel40_S     2
535
 
#define AR_RxStatusRsvd30   0x000000f8
536
 
#define AR_RxAntenna        0xffffff00
537
 
#define AR_RxAntenna_S      8
538
 
 
539
 
#define AR_RxRSSIAnt10            0x000000ff
540
 
#define AR_RxRSSIAnt10_S          0
541
 
#define AR_RxRSSIAnt11            0x0000ff00
542
 
#define AR_RxRSSIAnt11_S          8
543
 
#define AR_RxRSSIAnt12            0x00ff0000
544
 
#define AR_RxRSSIAnt12_S          16
545
 
#define AR_RxRSSICombined         0xff000000
546
 
#define AR_RxRSSICombined_S       24
547
 
 
548
 
#define AR_RxEVM0           ds_rxstatus4
549
 
#define AR_RxEVM1           ds_rxstatus5
550
 
#define AR_RxEVM2           ds_rxstatus6
551
 
 
552
 
#define AR_RxDone           0x00000001
553
 
#define AR_RxFrameOK        0x00000002
554
 
#define AR_CRCErr           0x00000004
555
 
#define AR_DecryptCRCErr    0x00000008
556
 
#define AR_PHYErr           0x00000010
557
 
#define AR_MichaelErr       0x00000020
558
 
#define AR_PreDelimCRCErr   0x00000040
559
 
#define AR_RxStatusRsvd70   0x00000080
560
 
#define AR_RxKeyIdxValid    0x00000100
561
 
#define AR_KeyIdx           0x0000fe00
562
 
#define AR_KeyIdx_S         9
563
 
#define AR_PHYErrCode       0x0000ff00
564
 
#define AR_PHYErrCode_S     8
565
 
#define AR_RxMoreAggr       0x00010000
566
 
#define AR_RxAggr           0x00020000
567
 
#define AR_PostDelimCRCErr  0x00040000
568
 
#define AR_RxStatusRsvd71   0x3ff80000
569
 
#define AR_DecryptBusyErr   0x40000000
570
 
#define AR_KeyMiss          0x80000000
571
 
 
572
 
enum ath9k_tx_queue {
573
 
        ATH9K_TX_QUEUE_INACTIVE = 0,
574
 
        ATH9K_TX_QUEUE_DATA,
575
 
        ATH9K_TX_QUEUE_BEACON,
576
 
        ATH9K_TX_QUEUE_CAB,
577
 
        ATH9K_TX_QUEUE_UAPSD,
578
 
        ATH9K_TX_QUEUE_PSPOLL
579
 
};
580
 
 
581
 
#define ATH9K_NUM_TX_QUEUES 10
582
 
 
583
 
/* Used as a queue subtype instead of a WMM AC */
584
 
#define ATH9K_WME_UPSD  4
585
 
 
586
 
enum ath9k_tx_queue_flags {
587
 
        TXQ_FLAG_TXOKINT_ENABLE = 0x0001,
588
 
        TXQ_FLAG_TXERRINT_ENABLE = 0x0001,
589
 
        TXQ_FLAG_TXDESCINT_ENABLE = 0x0002,
590
 
        TXQ_FLAG_TXEOLINT_ENABLE = 0x0004,
591
 
        TXQ_FLAG_TXURNINT_ENABLE = 0x0008,
592
 
        TXQ_FLAG_BACKOFF_DISABLE = 0x0010,
593
 
        TXQ_FLAG_COMPRESSION_ENABLE = 0x0020,
594
 
        TXQ_FLAG_RDYTIME_EXP_POLICY_ENABLE = 0x0040,
595
 
        TXQ_FLAG_FRAG_BURST_BACKOFF_ENABLE = 0x0080,
596
 
};
597
 
 
598
 
#define ATH9K_TXQ_USEDEFAULT ((u32) -1)
599
 
#define ATH9K_TXQ_USE_LOCKOUT_BKOFF_DIS 0x00000001
600
 
 
601
 
#define ATH9K_DECOMP_MASK_SIZE     128
602
 
#define ATH9K_READY_TIME_LO_BOUND  50
603
 
#define ATH9K_READY_TIME_HI_BOUND  96
604
 
 
605
 
enum ath9k_pkt_type {
606
 
        ATH9K_PKT_TYPE_NORMAL = 0,
607
 
        ATH9K_PKT_TYPE_ATIM,
608
 
        ATH9K_PKT_TYPE_PSPOLL,
609
 
        ATH9K_PKT_TYPE_BEACON,
610
 
        ATH9K_PKT_TYPE_PROBE_RESP,
611
 
        ATH9K_PKT_TYPE_CHIRP,
612
 
        ATH9K_PKT_TYPE_GRP_POLL,
613
 
};
614
 
 
615
 
struct ath9k_tx_queue_info {
616
 
        u32 tqi_ver;
617
 
        enum ath9k_tx_queue tqi_type;
618
 
        int tqi_subtype;
619
 
        enum ath9k_tx_queue_flags tqi_qflags;
620
 
        u32 tqi_priority;
621
 
        u32 tqi_aifs;
622
 
        u32 tqi_cwmin;
623
 
        u32 tqi_cwmax;
624
 
        u16 tqi_shretry;
625
 
        u16 tqi_lgretry;
626
 
        u32 tqi_cbrPeriod;
627
 
        u32 tqi_cbrOverflowLimit;
628
 
        u32 tqi_burstTime;
629
 
        u32 tqi_readyTime;
630
 
        u32 tqi_physCompBuf;
631
 
        u32 tqi_intFlags;
632
 
};
633
 
 
634
 
enum ath9k_rx_filter {
635
 
        ATH9K_RX_FILTER_UCAST = 0x00000001,
636
 
        ATH9K_RX_FILTER_MCAST = 0x00000002,
637
 
        ATH9K_RX_FILTER_BCAST = 0x00000004,
638
 
        ATH9K_RX_FILTER_CONTROL = 0x00000008,
639
 
        ATH9K_RX_FILTER_BEACON = 0x00000010,
640
 
        ATH9K_RX_FILTER_PROM = 0x00000020,
641
 
        ATH9K_RX_FILTER_PROBEREQ = 0x00000080,
642
 
        ATH9K_RX_FILTER_PHYERR = 0x00000100,
643
 
        ATH9K_RX_FILTER_MYBEACON = 0x00000200,
644
 
        ATH9K_RX_FILTER_COMP_BAR = 0x00000400,
645
 
        ATH9K_RX_FILTER_PSPOLL = 0x00004000,
646
 
        ATH9K_RX_FILTER_PHYRADAR = 0x00002000,
647
 
        ATH9K_RX_FILTER_MCAST_BCAST_ALL = 0x00008000,
648
 
};
649
 
 
650
 
#define ATH9K_RATESERIES_RTS_CTS  0x0001
651
 
#define ATH9K_RATESERIES_2040     0x0002
652
 
#define ATH9K_RATESERIES_HALFGI   0x0004
653
 
#define ATH9K_RATESERIES_STBC     0x0008
654
 
 
655
 
struct ath9k_11n_rate_series {
656
 
        u32 Tries;
657
 
        u32 Rate;
658
 
        u32 PktDuration;
659
 
        u32 ChSel;
660
 
        u32 RateFlags;
661
 
};
662
 
 
663
 
struct ath9k_keyval {
664
 
        u8 kv_type;
665
 
        u8 kv_pad;
666
 
        u16 kv_len;
667
 
        u8 kv_val[16]; /* TK */
668
 
        u8 kv_mic[8]; /* Michael MIC key */
669
 
        u8 kv_txmic[8]; /* Michael MIC TX key (used only if the hardware
670
 
                         * supports both MIC keys in the same key cache entry;
671
 
                         * in that case, kv_mic is the RX key) */
672
 
};
673
 
 
674
 
enum ath9k_key_type {
675
 
        ATH9K_KEY_TYPE_CLEAR,
676
 
        ATH9K_KEY_TYPE_WEP,
677
 
        ATH9K_KEY_TYPE_AES,
678
 
        ATH9K_KEY_TYPE_TKIP,
679
 
};
680
 
 
681
 
enum ath9k_cipher {
682
 
        ATH9K_CIPHER_WEP = 0,
683
 
        ATH9K_CIPHER_AES_OCB = 1,
684
 
        ATH9K_CIPHER_AES_CCM = 2,
685
 
        ATH9K_CIPHER_CKIP = 3,
686
 
        ATH9K_CIPHER_TKIP = 4,
687
 
        ATH9K_CIPHER_CLR = 5,
688
 
        ATH9K_CIPHER_MIC = 127
689
 
};
690
 
 
691
 
struct ath_hw;
692
 
struct ath9k_channel;
693
 
 
694
 
u32 ath9k_hw_gettxbuf(struct ath_hw *ah, u32 q);
695
 
void ath9k_hw_puttxbuf(struct ath_hw *ah, u32 q, u32 txdp);
696
 
void ath9k_hw_txstart(struct ath_hw *ah, u32 q);
697
 
void ath9k_hw_cleartxdesc(struct ath_hw *ah, void *ds);
698
 
u32 ath9k_hw_numtxpending(struct ath_hw *ah, u32 q);
699
 
bool ath9k_hw_updatetxtriglevel(struct ath_hw *ah, bool bIncTrigLevel);
700
 
bool ath9k_hw_stoptxdma(struct ath_hw *ah, u32 q);
701
 
void ath9k_hw_gettxintrtxqs(struct ath_hw *ah, u32 *txqs);
702
 
bool ath9k_hw_set_txq_props(struct ath_hw *ah, int q,
703
 
                            const struct ath9k_tx_queue_info *qinfo);
704
 
bool ath9k_hw_get_txq_props(struct ath_hw *ah, int q,
705
 
                            struct ath9k_tx_queue_info *qinfo);
706
 
int ath9k_hw_setuptxqueue(struct ath_hw *ah, enum ath9k_tx_queue type,
707
 
                          const struct ath9k_tx_queue_info *qinfo);
708
 
bool ath9k_hw_releasetxqueue(struct ath_hw *ah, u32 q);
709
 
bool ath9k_hw_resettxqueue(struct ath_hw *ah, u32 q);
710
 
int ath9k_hw_rxprocdesc(struct ath_hw *ah, struct ath_desc *ds,
711
 
                        struct ath_rx_status *rs, u64 tsf);
712
 
void ath9k_hw_setuprxdesc(struct ath_hw *ah, struct ath_desc *ds,
713
 
                          u32 size, u32 flags);
714
 
bool ath9k_hw_setrxabort(struct ath_hw *ah, bool set);
715
 
void ath9k_hw_putrxbuf(struct ath_hw *ah, u32 rxdp);
716
 
void ath9k_hw_startpcureceive(struct ath_hw *ah, bool is_scanning);
717
 
void ath9k_hw_stoppcurecv(struct ath_hw *ah);
718
 
void ath9k_hw_abortpcurecv(struct ath_hw *ah);
719
 
bool ath9k_hw_stopdmarecv(struct ath_hw *ah);
720
 
int ath9k_hw_beaconq_setup(struct ath_hw *ah);
721
 
 
722
 
/* Interrupt Handling */
723
 
bool ath9k_hw_intrpend(struct ath_hw *ah);
724
 
enum ath9k_int ath9k_hw_set_interrupts(struct ath_hw *ah,
725
 
                                       enum ath9k_int ints);
726
 
 
727
 
void ar9002_hw_attach_mac_ops(struct ath_hw *ah);
728
 
 
729
 
#endif /* MAC_H */