aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath5k/desc.h
diff options
context:
space:
mode:
authorNick Kossifidis <mick@madwifi.org>2008-08-29 15:45:39 -0400
committerJohn W. Linville <linville@tuxdriver.com>2008-09-05 16:15:24 -0400
commitc6e387a214f4b2c4bd48020409e366c133385d98 (patch)
tree11fd58fd71e113a62d05f6f191771ca3d7d544f0 /drivers/net/wireless/ath5k/desc.h
parentfa9abe050d0a018b888fce61a4353afab17b0860 (diff)
ath5k: HW code cleanup
* No code changes... * Split hw.c to multiple files for better maintenance and add some documentation on each file code is going to grow soon (eeprom.c for example is going to get much stuff currently developed on ath_info) so it's better this way. * Rename following functions to maintain naming scheme: ah_setup_xtx_desc -> ah_setup_mrr_tx_desc (Because xtx doesn't say much, it's actually a multi-rate-retry tx descriptor) ath5k_hw_put_tx/rx_buf - > ath5k_hw_set_tx/rxdp ath5k_hw_get_tx/rx_buf -> ath5k_hw_get_tx/rxdp (We don't put any "buf" we set descriptor pointers on hw) ath5k_hw_tx_start -> ath5k_hw_start_tx_dma ath5k_hw_start_rx -> ath5k_hw_start_rx_dma ath5k_hw_stop_pcu_recv -> ath5k_hw_stop_rx_pcu (It's easier this way to identify them, we also have ath5k_hw_start_rx_pcu which completes the set) ath5k_hw_set_intr -> ath5k_hw_set_imr (As in get_isr we set imr here, not "intr") * Move ath5k_hw_setup_rx_desc on ah->ah_setup_rx_desc so we can include support for different rx descriptors in the future * Further cleanups so that checkpatch doesn't complain (only some > 80 col warnings for eeprom.h and reg.h as usual due to comments) Tested on 5211 and 5213 cards and works ok. Changes-licensed-under: ISC Signed-off-by: Nick Kossifidis <mickflemm@gmail.com> Acked-by: Luis R. Rodriguez <lrodriguez@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ath5k/desc.h')
-rw-r--r--drivers/net/wireless/ath5k/desc.h332
1 files changed, 332 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath5k/desc.h b/drivers/net/wireless/ath5k/desc.h
new file mode 100644
index 000000000000..56158c804e3e
--- /dev/null
+++ b/drivers/net/wireless/ath5k/desc.h
@@ -0,0 +1,332 @@
1/*
2 * Copyright (c) 2004-2008 Reyk Floeter <reyk@openbsd.org>
3 * Copyright (c) 2006-2008 Nick Kossifidis <mickflemm@gmail.com>
4 *
5 * Permission to use, copy, modify, and distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 *
17 */
18
19/*
20 * Internal RX/TX descriptor structures
21 * (rX: reserved fields possibily used by future versions of the ar5k chipset)
22 */
23
24/*
25 * common hardware RX control descriptor
26 */
27struct ath5k_hw_rx_ctl {
28 u32 rx_control_0; /* RX control word 0 */
29 u32 rx_control_1; /* RX control word 1 */
30} __packed;
31
32/* RX control word 0 field/sflags */
33#define AR5K_DESC_RX_CTL0 0x00000000
34
35/* RX control word 1 fields/flags */
36#define AR5K_DESC_RX_CTL1_BUF_LEN 0x00000fff
37#define AR5K_DESC_RX_CTL1_INTREQ 0x00002000
38
39/*
40 * common hardware RX status descriptor
41 * 5210/11 and 5212 differ only in the flags defined below
42 */
43struct ath5k_hw_rx_status {
44 u32 rx_status_0; /* RX status word 0 */
45 u32 rx_status_1; /* RX status word 1 */
46} __packed;
47
48/* 5210/5211 */
49/* RX status word 0 fields/flags */
50#define AR5K_5210_RX_DESC_STATUS0_DATA_LEN 0x00000fff
51#define AR5K_5210_RX_DESC_STATUS0_MORE 0x00001000
52#define AR5K_5210_RX_DESC_STATUS0_RECEIVE_RATE 0x00078000
53#define AR5K_5210_RX_DESC_STATUS0_RECEIVE_RATE_S 15
54#define AR5K_5210_RX_DESC_STATUS0_RECEIVE_SIGNAL 0x07f80000
55#define AR5K_5210_RX_DESC_STATUS0_RECEIVE_SIGNAL_S 19
56#define AR5K_5210_RX_DESC_STATUS0_RECEIVE_ANTENNA 0x38000000
57#define AR5K_5210_RX_DESC_STATUS0_RECEIVE_ANTENNA_S 27
58
59/* RX status word 1 fields/flags */
60#define AR5K_5210_RX_DESC_STATUS1_DONE 0x00000001
61#define AR5K_5210_RX_DESC_STATUS1_FRAME_RECEIVE_OK 0x00000002
62#define AR5K_5210_RX_DESC_STATUS1_CRC_ERROR 0x00000004
63#define AR5K_5210_RX_DESC_STATUS1_FIFO_OVERRUN 0x00000008
64#define AR5K_5210_RX_DESC_STATUS1_DECRYPT_CRC_ERROR 0x00000010
65#define AR5K_5210_RX_DESC_STATUS1_PHY_ERROR 0x000000e0
66#define AR5K_5210_RX_DESC_STATUS1_PHY_ERROR_S 5
67#define AR5K_5210_RX_DESC_STATUS1_KEY_INDEX_VALID 0x00000100
68#define AR5K_5210_RX_DESC_STATUS1_KEY_INDEX 0x00007e00
69#define AR5K_5210_RX_DESC_STATUS1_KEY_INDEX_S 9
70#define AR5K_5210_RX_DESC_STATUS1_RECEIVE_TIMESTAMP 0x0fff8000
71#define AR5K_5210_RX_DESC_STATUS1_RECEIVE_TIMESTAMP_S 15
72#define AR5K_5210_RX_DESC_STATUS1_KEY_CACHE_MISS 0x10000000
73
74/* 5212 */
75/* RX status word 0 fields/flags */
76#define AR5K_5212_RX_DESC_STATUS0_DATA_LEN 0x00000fff
77#define AR5K_5212_RX_DESC_STATUS0_MORE 0x00001000
78#define AR5K_5212_RX_DESC_STATUS0_DECOMP_CRC_ERROR 0x00002000
79#define AR5K_5212_RX_DESC_STATUS0_RECEIVE_RATE 0x000f8000
80#define AR5K_5212_RX_DESC_STATUS0_RECEIVE_RATE_S 15
81#define AR5K_5212_RX_DESC_STATUS0_RECEIVE_SIGNAL 0x0ff00000
82#define AR5K_5212_RX_DESC_STATUS0_RECEIVE_SIGNAL_S 20
83#define AR5K_5212_RX_DESC_STATUS0_RECEIVE_ANTENNA 0xf0000000
84#define AR5K_5212_RX_DESC_STATUS0_RECEIVE_ANTENNA_S 28
85
86/* RX status word 1 fields/flags */
87#define AR5K_5212_RX_DESC_STATUS1_DONE 0x00000001
88#define AR5K_5212_RX_DESC_STATUS1_FRAME_RECEIVE_OK 0x00000002
89#define AR5K_5212_RX_DESC_STATUS1_CRC_ERROR 0x00000004
90#define AR5K_5212_RX_DESC_STATUS1_DECRYPT_CRC_ERROR 0x00000008
91#define AR5K_5212_RX_DESC_STATUS1_PHY_ERROR 0x00000010
92#define AR5K_5212_RX_DESC_STATUS1_MIC_ERROR 0x00000020
93#define AR5K_5212_RX_DESC_STATUS1_KEY_INDEX_VALID 0x00000100
94#define AR5K_5212_RX_DESC_STATUS1_KEY_INDEX 0x0000fe00
95#define AR5K_5212_RX_DESC_STATUS1_KEY_INDEX_S 9
96#define AR5K_5212_RX_DESC_STATUS1_RECEIVE_TIMESTAMP 0x7fff0000
97#define AR5K_5212_RX_DESC_STATUS1_RECEIVE_TIMESTAMP_S 16
98#define AR5K_5212_RX_DESC_STATUS1_KEY_CACHE_MISS 0x80000000
99
100/*
101 * common hardware RX error descriptor
102 */
103struct ath5k_hw_rx_error {
104 u32 rx_error_0; /* RX status word 0 */
105 u32 rx_error_1; /* RX status word 1 */
106} __packed;
107
108/* RX error word 0 fields/flags */
109#define AR5K_RX_DESC_ERROR0 0x00000000
110
111/* RX error word 1 fields/flags */
112#define AR5K_RX_DESC_ERROR1_PHY_ERROR_CODE 0x0000ff00
113#define AR5K_RX_DESC_ERROR1_PHY_ERROR_CODE_S 8
114
115/* PHY Error codes */
116#define AR5K_DESC_RX_PHY_ERROR_NONE 0x00
117#define AR5K_DESC_RX_PHY_ERROR_TIMING 0x20
118#define AR5K_DESC_RX_PHY_ERROR_PARITY 0x40
119#define AR5K_DESC_RX_PHY_ERROR_RATE 0x60
120#define AR5K_DESC_RX_PHY_ERROR_LENGTH 0x80
121#define AR5K_DESC_RX_PHY_ERROR_64QAM 0xa0
122#define AR5K_DESC_RX_PHY_ERROR_SERVICE 0xc0
123#define AR5K_DESC_RX_PHY_ERROR_TRANSMITOVR 0xe0
124
125/*
126 * 5210/5211 hardware 2-word TX control descriptor
127 */
128struct ath5k_hw_2w_tx_ctl {
129 u32 tx_control_0; /* TX control word 0 */
130 u32 tx_control_1; /* TX control word 1 */
131} __packed;
132
133/* TX control word 0 fields/flags */
134#define AR5K_2W_TX_DESC_CTL0_FRAME_LEN 0x00000fff
135#define AR5K_2W_TX_DESC_CTL0_HEADER_LEN 0x0003f000 /*[5210 ?]*/
136#define AR5K_2W_TX_DESC_CTL0_HEADER_LEN_S 12
137#define AR5K_2W_TX_DESC_CTL0_XMIT_RATE 0x003c0000
138#define AR5K_2W_TX_DESC_CTL0_XMIT_RATE_S 18
139#define AR5K_2W_TX_DESC_CTL0_RTSENA 0x00400000
140#define AR5K_2W_TX_DESC_CTL0_CLRDMASK 0x01000000
141#define AR5K_2W_TX_DESC_CTL0_LONG_PACKET 0x00800000 /*[5210]*/
142#define AR5K_2W_TX_DESC_CTL0_VEOL 0x00800000 /*[5211]*/
143#define AR5K_2W_TX_DESC_CTL0_FRAME_TYPE 0x1c000000 /*[5210]*/
144#define AR5K_2W_TX_DESC_CTL0_FRAME_TYPE_S 26
145#define AR5K_2W_TX_DESC_CTL0_ANT_MODE_XMIT_5210 0x02000000
146#define AR5K_2W_TX_DESC_CTL0_ANT_MODE_XMIT_5211 0x1e000000
147
148#define AR5K_2W_TX_DESC_CTL0_ANT_MODE_XMIT \
149 (ah->ah_version == AR5K_AR5210 ? \
150 AR5K_2W_TX_DESC_CTL0_ANT_MODE_XMIT_5210 : \
151 AR5K_2W_TX_DESC_CTL0_ANT_MODE_XMIT_5211)
152
153#define AR5K_2W_TX_DESC_CTL0_ANT_MODE_XMIT_S 25
154#define AR5K_2W_TX_DESC_CTL0_INTREQ 0x20000000
155#define AR5K_2W_TX_DESC_CTL0_ENCRYPT_KEY_VALID 0x40000000
156
157/* TX control word 1 fields/flags */
158#define AR5K_2W_TX_DESC_CTL1_BUF_LEN 0x00000fff
159#define AR5K_2W_TX_DESC_CTL1_MORE 0x00001000
160#define AR5K_2W_TX_DESC_CTL1_ENCRYPT_KEY_INDEX_5210 0x0007e000
161#define AR5K_2W_TX_DESC_CTL1_ENCRYPT_KEY_INDEX_5211 0x000fe000
162
163#define AR5K_2W_TX_DESC_CTL1_ENCRYPT_KEY_INDEX \
164 (ah->ah_version == AR5K_AR5210 ? \
165 AR5K_2W_TX_DESC_CTL1_ENCRYPT_KEY_INDEX_5210 : \
166 AR5K_2W_TX_DESC_CTL1_ENCRYPT_KEY_INDEX_5211)
167
168#define AR5K_2W_TX_DESC_CTL1_ENCRYPT_KEY_INDEX_S 13
169#define AR5K_2W_TX_DESC_CTL1_FRAME_TYPE 0x00700000 /*[5211]*/
170#define AR5K_2W_TX_DESC_CTL1_FRAME_TYPE_S 20
171#define AR5K_2W_TX_DESC_CTL1_NOACK 0x00800000 /*[5211]*/
172#define AR5K_2W_TX_DESC_CTL1_RTS_DURATION 0xfff80000 /*[5210 ?]*/
173
174/* Frame types */
175#define AR5K_AR5210_TX_DESC_FRAME_TYPE_NORMAL 0x00
176#define AR5K_AR5210_TX_DESC_FRAME_TYPE_ATIM 0x04
177#define AR5K_AR5210_TX_DESC_FRAME_TYPE_PSPOLL 0x08
178#define AR5K_AR5210_TX_DESC_FRAME_TYPE_NO_DELAY 0x0c
179#define AR5K_AR5210_TX_DESC_FRAME_TYPE_PIFS 0x10
180
181/*
182 * 5212 hardware 4-word TX control descriptor
183 */
184struct ath5k_hw_4w_tx_ctl {
185 u32 tx_control_0; /* TX control word 0 */
186
187#define AR5K_4W_TX_DESC_CTL0_FRAME_LEN 0x00000fff
188#define AR5K_4W_TX_DESC_CTL0_XMIT_POWER 0x003f0000
189#define AR5K_4W_TX_DESC_CTL0_XMIT_POWER_S 16
190#define AR5K_4W_TX_DESC_CTL0_RTSENA 0x00400000
191#define AR5K_4W_TX_DESC_CTL0_VEOL 0x00800000
192#define AR5K_4W_TX_DESC_CTL0_CLRDMASK 0x01000000
193#define AR5K_4W_TX_DESC_CTL0_ANT_MODE_XMIT 0x1e000000
194#define AR5K_4W_TX_DESC_CTL0_ANT_MODE_XMIT_S 25
195#define AR5K_4W_TX_DESC_CTL0_INTREQ 0x20000000
196#define AR5K_4W_TX_DESC_CTL0_ENCRYPT_KEY_VALID 0x40000000
197#define AR5K_4W_TX_DESC_CTL0_CTSENA 0x80000000
198
199 u32 tx_control_1; /* TX control word 1 */
200
201#define AR5K_4W_TX_DESC_CTL1_BUF_LEN 0x00000fff
202#define AR5K_4W_TX_DESC_CTL1_MORE 0x00001000
203#define AR5K_4W_TX_DESC_CTL1_ENCRYPT_KEY_INDEX 0x000fe000
204#define AR5K_4W_TX_DESC_CTL1_ENCRYPT_KEY_INDEX_S 13
205#define AR5K_4W_TX_DESC_CTL1_FRAME_TYPE 0x00f00000
206#define AR5K_4W_TX_DESC_CTL1_FRAME_TYPE_S 20
207#define AR5K_4W_TX_DESC_CTL1_NOACK 0x01000000
208#define AR5K_4W_TX_DESC_CTL1_COMP_PROC 0x06000000
209#define AR5K_4W_TX_DESC_CTL1_COMP_PROC_S 25
210#define AR5K_4W_TX_DESC_CTL1_COMP_IV_LEN 0x18000000
211#define AR5K_4W_TX_DESC_CTL1_COMP_IV_LEN_S 27
212#define AR5K_4W_TX_DESC_CTL1_COMP_ICV_LEN 0x60000000
213#define AR5K_4W_TX_DESC_CTL1_COMP_ICV_LEN_S 29
214
215 u32 tx_control_2; /* TX control word 2 */
216
217#define AR5K_4W_TX_DESC_CTL2_RTS_DURATION 0x00007fff
218#define AR5K_4W_TX_DESC_CTL2_DURATION_UPDATE_ENABLE 0x00008000
219#define AR5K_4W_TX_DESC_CTL2_XMIT_TRIES0 0x000f0000
220#define AR5K_4W_TX_DESC_CTL2_XMIT_TRIES0_S 16
221#define AR5K_4W_TX_DESC_CTL2_XMIT_TRIES1 0x00f00000
222#define AR5K_4W_TX_DESC_CTL2_XMIT_TRIES1_S 20
223#define AR5K_4W_TX_DESC_CTL2_XMIT_TRIES2 0x0f000000
224#define AR5K_4W_TX_DESC_CTL2_XMIT_TRIES2_S 24
225#define AR5K_4W_TX_DESC_CTL2_XMIT_TRIES3 0xf0000000
226#define AR5K_4W_TX_DESC_CTL2_XMIT_TRIES3_S 28
227
228 u32 tx_control_3; /* TX control word 3 */
229
230#define AR5K_4W_TX_DESC_CTL3_XMIT_RATE0 0x0000001f
231#define AR5K_4W_TX_DESC_CTL3_XMIT_RATE1 0x000003e0
232#define AR5K_4W_TX_DESC_CTL3_XMIT_RATE1_S 5
233#define AR5K_4W_TX_DESC_CTL3_XMIT_RATE2 0x00007c00
234#define AR5K_4W_TX_DESC_CTL3_XMIT_RATE2_S 10
235#define AR5K_4W_TX_DESC_CTL3_XMIT_RATE3 0x000f8000
236#define AR5K_4W_TX_DESC_CTL3_XMIT_RATE3_S 15
237#define AR5K_4W_TX_DESC_CTL3_RTS_CTS_RATE 0x01f00000
238#define AR5K_4W_TX_DESC_CTL3_RTS_CTS_RATE_S 20
239} __packed;
240
241/*
242 * Common TX status descriptor
243 */
244struct ath5k_hw_tx_status {
245 u32 tx_status_0; /* TX status word 0 */
246 u32 tx_status_1; /* TX status word 1 */
247} __packed;
248
249/* TX status word 0 fields/flags */
250#define AR5K_DESC_TX_STATUS0_FRAME_XMIT_OK 0x00000001
251#define AR5K_DESC_TX_STATUS0_EXCESSIVE_RETRIES 0x00000002
252#define AR5K_DESC_TX_STATUS0_FIFO_UNDERRUN 0x00000004
253#define AR5K_DESC_TX_STATUS0_FILTERED 0x00000008
254/*???
255#define AR5K_DESC_TX_STATUS0_RTS_FAIL_COUNT 0x000000f0
256#define AR5K_DESC_TX_STATUS0_RTS_FAIL_COUNT_S 4
257*/
258#define AR5K_DESC_TX_STATUS0_SHORT_RETRY_COUNT 0x000000f0
259#define AR5K_DESC_TX_STATUS0_SHORT_RETRY_COUNT_S 4
260/*???
261#define AR5K_DESC_TX_STATUS0_DATA_FAIL_COUNT 0x00000f00
262#define AR5K_DESC_TX_STATUS0_DATA_FAIL_COUNT_S 8
263*/
264#define AR5K_DESC_TX_STATUS0_LONG_RETRY_COUNT 0x00000f00
265#define AR5K_DESC_TX_STATUS0_LONG_RETRY_COUNT_S 8
266#define AR5K_DESC_TX_STATUS0_VIRT_COLL_COUNT 0x0000f000
267#define AR5K_DESC_TX_STATUS0_VIRT_COLL_COUNT_S 12
268#define AR5K_DESC_TX_STATUS0_SEND_TIMESTAMP 0xffff0000
269#define AR5K_DESC_TX_STATUS0_SEND_TIMESTAMP_S 16
270
271/* TX status word 1 fields/flags */
272#define AR5K_DESC_TX_STATUS1_DONE 0x00000001
273#define AR5K_DESC_TX_STATUS1_SEQ_NUM 0x00001ffe
274#define AR5K_DESC_TX_STATUS1_SEQ_NUM_S 1
275#define AR5K_DESC_TX_STATUS1_ACK_SIG_STRENGTH 0x001fe000
276#define AR5K_DESC_TX_STATUS1_ACK_SIG_STRENGTH_S 13
277#define AR5K_DESC_TX_STATUS1_FINAL_TS_INDEX 0x00600000
278#define AR5K_DESC_TX_STATUS1_FINAL_TS_INDEX_S 21
279#define AR5K_DESC_TX_STATUS1_COMP_SUCCESS 0x00800000
280#define AR5K_DESC_TX_STATUS1_XMIT_ANTENNA 0x01000000
281
282/*
283 * 5210/5211 hardware TX descriptor
284 */
285struct ath5k_hw_5210_tx_desc {
286 struct ath5k_hw_2w_tx_ctl tx_ctl;
287 struct ath5k_hw_tx_status tx_stat;
288} __packed;
289
290/*
291 * 5212 hardware TX descriptor
292 */
293struct ath5k_hw_5212_tx_desc {
294 struct ath5k_hw_4w_tx_ctl tx_ctl;
295 struct ath5k_hw_tx_status tx_stat;
296} __packed;
297
298/*
299 * common hardware RX descriptor
300 */
301struct ath5k_hw_all_rx_desc {
302 struct ath5k_hw_rx_ctl rx_ctl;
303 union {
304 struct ath5k_hw_rx_status rx_stat;
305 struct ath5k_hw_rx_error rx_err;
306 } u;
307} __packed;
308
309/*
310 * Atheros hardware descriptor
311 * This is read and written to by the hardware
312 */
313struct ath5k_desc {
314 u32 ds_link; /* physical address of the next descriptor */
315 u32 ds_data; /* physical address of data buffer (skb) */
316
317 union {
318 struct ath5k_hw_5210_tx_desc ds_tx5210;
319 struct ath5k_hw_5212_tx_desc ds_tx5212;
320 struct ath5k_hw_all_rx_desc ds_rx;
321 } ud;
322} __packed;
323
324#define AR5K_RXDESC_INTREQ 0x0020
325
326#define AR5K_TXDESC_CLRDMASK 0x0001
327#define AR5K_TXDESC_NOACK 0x0002 /*[5211+]*/
328#define AR5K_TXDESC_RTSENA 0x0004
329#define AR5K_TXDESC_CTSENA 0x0008
330#define AR5K_TXDESC_INTREQ 0x0010
331#define AR5K_TXDESC_VEOL 0x0020 /*[5211+]*/
332