iPXE
ath5k_desc.c
Go to the documentation of this file.
1/*
2 * Copyright (c) 2004-2008 Reyk Floeter <reyk@openbsd.org>
3 * Copyright (c) 2006-2008 Nick Kossifidis <mickflemm@gmail.com>
4 * Copyright (c) 2007-2008 Pavel Roskin <proski@gnu.org>
5 *
6 * Lightly modified for iPXE, July 2009, by Joshua Oreman <oremanj@rwcr.net>.
7 *
8 * Permission to use, copy, modify, and distribute this software for any
9 * purpose with or without fee is hereby granted, provided that the above
10 * copyright notice and this permission notice appear in all copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
15 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 *
20 */
21
23FILE_SECBOOT ( FORBIDDEN );
24
25/******************************\
26 Hardware Descriptor Functions
27\******************************/
28
29#include "ath5k.h"
30#include "reg.h"
31#include "base.h"
32
33/*
34 * TX Descriptors
35 */
36
37#define FCS_LEN 4
38
39/*
40 * Initialize the 2-word tx control descriptor on 5210/5211
41 */
42static int
44 unsigned int pkt_len, unsigned int hdr_len, enum ath5k_pkt_type type,
45 unsigned int tx_power __unused, unsigned int tx_rate0, unsigned int tx_tries0,
46 unsigned int key_index __unused, unsigned int antenna_mode, unsigned int flags,
47 unsigned int rtscts_rate __unused, unsigned int rtscts_duration)
48{
49 u32 frame_type;
51 unsigned int frame_len;
52
53 tx_ctl = &desc->ud.ds_tx5210.tx_ctl;
54
55 /*
56 * Validate input
57 * - Zero retries don't make sense.
58 * - A zero rate will put the HW into a mode where it continously sends
59 * noise on the channel, so it is important to avoid this.
60 */
61 if (tx_tries0 == 0) {
62 DBG("ath5k: zero retries\n");
63 return -EINVAL;
64 }
65 if (tx_rate0 == 0) {
66 DBG("ath5k: zero rate\n");
67 return -EINVAL;
68 }
69
70 /* Clear descriptor */
71 memset(&desc->ud.ds_tx5210, 0, sizeof(struct ath5k_hw_5210_tx_desc));
72
73 /* Setup control descriptor */
74
75 /* Verify and set frame length */
76
77 frame_len = pkt_len + FCS_LEN;
78
79 if (frame_len & ~AR5K_2W_TX_DESC_CTL0_FRAME_LEN)
80 return -EINVAL;
81
82 tx_ctl->tx_control_0 = frame_len & AR5K_2W_TX_DESC_CTL0_FRAME_LEN;
83
84 /* Verify and set buffer length */
85
87 return -EINVAL;
88
90
91 /*
92 * Verify and set header length
93 * XXX: I only found that on 5210 code, does it work on 5211 ?
94 */
95 if (ah->ah_version == AR5K_AR5210) {
97 return -EINVAL;
98 tx_ctl->tx_control_0 |=
100 }
101
102 /*Diferences between 5210-5211*/
103 if (ah->ah_version == AR5K_AR5210) {
104 switch (type) {
108 break;
111 break;
112 default:
113 frame_type = type /*<< 2 ?*/;
114 break;
115 }
116
117 tx_ctl->tx_control_0 |=
120
121 } else {
122 tx_ctl->tx_control_0 |=
124 AR5K_REG_SM(antenna_mode,
126 tx_ctl->tx_control_1 |=
128 }
129#define _TX_FLAGS(_c, _flag) \
130 if (flags & AR5K_TXDESC_##_flag) { \
131 tx_ctl->tx_control_##_c |= \
132 AR5K_2W_TX_DESC_CTL##_c##_##_flag; \
133 }
134
135 _TX_FLAGS(0, CLRDMASK);
136 _TX_FLAGS(0, VEOL);
137 _TX_FLAGS(0, INTREQ);
138 _TX_FLAGS(0, RTSENA);
139 _TX_FLAGS(1, NOACK);
140
141#undef _TX_FLAGS
142
143 /*
144 * RTS/CTS Duration [5210 ?]
145 */
146 if ((ah->ah_version == AR5K_AR5210) &&
148 tx_ctl->tx_control_1 |= rtscts_duration &
150
151 return 0;
152}
153
154/*
155 * Initialize the 4-word tx control descriptor on 5212
156 */
158 struct ath5k_desc *desc, unsigned int pkt_len, unsigned int hdr_len __unused,
159 enum ath5k_pkt_type type, unsigned int tx_power, unsigned int tx_rate0,
160 unsigned int tx_tries0, unsigned int key_index __unused,
161 unsigned int antenna_mode, unsigned int flags,
162 unsigned int rtscts_rate,
163 unsigned int rtscts_duration)
164{
166 unsigned int frame_len;
167
168 tx_ctl = &desc->ud.ds_tx5212.tx_ctl;
169
170 /*
171 * Validate input
172 * - Zero retries don't make sense.
173 * - A zero rate will put the HW into a mode where it continously sends
174 * noise on the channel, so it is important to avoid this.
175 */
176 if (tx_tries0 == 0) {
177 DBG("ath5k: zero retries\n");
178 return -EINVAL;
179 }
180 if (tx_rate0 == 0) {
181 DBG("ath5k: zero rate\n");
182 return -EINVAL;
183 }
184
185 tx_power += ah->ah_txpower.txp_offset;
186 if (tx_power > AR5K_TUNE_MAX_TXPOWER)
187 tx_power = AR5K_TUNE_MAX_TXPOWER;
188
189 /* Clear descriptor */
190 memset(&desc->ud.ds_tx5212, 0, sizeof(struct ath5k_hw_5212_tx_desc));
191
192 /* Setup control descriptor */
193
194 /* Verify and set frame length */
195
196 frame_len = pkt_len + FCS_LEN;
197
198 if (frame_len & ~AR5K_4W_TX_DESC_CTL0_FRAME_LEN)
199 return -EINVAL;
200
201 tx_ctl->tx_control_0 = frame_len & AR5K_4W_TX_DESC_CTL0_FRAME_LEN;
202
203 /* Verify and set buffer length */
204
206 return -EINVAL;
207
209
210 tx_ctl->tx_control_0 |=
213 tx_ctl->tx_control_1 |= AR5K_REG_SM(type,
215 tx_ctl->tx_control_2 = AR5K_REG_SM(tx_tries0 + AR5K_TUNE_HWTXTRIES,
217 tx_ctl->tx_control_3 = tx_rate0 & AR5K_4W_TX_DESC_CTL3_XMIT_RATE0;
218
219#define _TX_FLAGS(_c, _flag) \
220 if (flags & AR5K_TXDESC_##_flag) { \
221 tx_ctl->tx_control_##_c |= \
222 AR5K_4W_TX_DESC_CTL##_c##_##_flag; \
223 }
224
225 _TX_FLAGS(0, CLRDMASK);
226 _TX_FLAGS(0, VEOL);
227 _TX_FLAGS(0, INTREQ);
228 _TX_FLAGS(0, RTSENA);
229 _TX_FLAGS(0, CTSENA);
230 _TX_FLAGS(1, NOACK);
231
232#undef _TX_FLAGS
233
234 /*
235 * RTS/CTS
236 */
238 if ((flags & AR5K_TXDESC_RTSENA) &&
240 return -EINVAL;
241 tx_ctl->tx_control_2 |= rtscts_duration &
243 tx_ctl->tx_control_3 |= AR5K_REG_SM(rtscts_rate,
245 }
246
247 return 0;
248}
249
250/*
251 * Proccess the tx status descriptor on 5210/5211
252 */
254 struct ath5k_desc *desc, struct ath5k_tx_status *ts)
255{
257 struct ath5k_hw_tx_status *tx_status;
258
259 tx_ctl = &desc->ud.ds_tx5210.tx_ctl;
260 tx_status = &desc->ud.ds_tx5210.tx_stat;
261
262 /* No frame has been send or error */
263 if ((tx_status->tx_status_1 & AR5K_DESC_TX_STATUS1_DONE) == 0)
264 return -EINPROGRESS;
265
266 /*
267 * Get descriptor status
268 */
269 ts->ts_tstamp = AR5K_REG_MS(tx_status->tx_status_0,
271 ts->ts_shortretry = AR5K_REG_MS(tx_status->tx_status_0,
273 ts->ts_longretry = AR5K_REG_MS(tx_status->tx_status_0,
275 /*TODO: ts->ts_virtcol + test*/
276 ts->ts_seqnum = AR5K_REG_MS(tx_status->tx_status_1,
278 ts->ts_rssi = AR5K_REG_MS(tx_status->tx_status_1,
280 ts->ts_antenna = 1;
281 ts->ts_status = 0;
282 ts->ts_rate[0] = AR5K_REG_MS(tx_ctl->tx_control_0,
284 ts->ts_retry[0] = ts->ts_longretry;
285 ts->ts_final_idx = 0;
286
288 if (tx_status->tx_status_0 &
291
294
297 }
298
299 return 0;
300}
301
302/*
303 * Proccess a tx status descriptor on 5212
304 */
306 struct ath5k_desc *desc, struct ath5k_tx_status *ts)
307{
309 struct ath5k_hw_tx_status *tx_status;
310
311 tx_ctl = &desc->ud.ds_tx5212.tx_ctl;
312 tx_status = &desc->ud.ds_tx5212.tx_stat;
313
314 /* No frame has been send or error */
315 if (!(tx_status->tx_status_1 & AR5K_DESC_TX_STATUS1_DONE))
316 return -EINPROGRESS;
317
318 /*
319 * Get descriptor status
320 */
321 ts->ts_tstamp = AR5K_REG_MS(tx_status->tx_status_0,
323 ts->ts_shortretry = AR5K_REG_MS(tx_status->tx_status_0,
325 ts->ts_longretry = AR5K_REG_MS(tx_status->tx_status_0,
327 ts->ts_seqnum = AR5K_REG_MS(tx_status->tx_status_1,
329 ts->ts_rssi = AR5K_REG_MS(tx_status->tx_status_1,
331 ts->ts_antenna = (tx_status->tx_status_1 &
333 ts->ts_status = 0;
334
335 ts->ts_final_idx = AR5K_REG_MS(tx_status->tx_status_1,
337
338 ts->ts_retry[0] = ts->ts_longretry;
339 ts->ts_rate[0] = tx_ctl->tx_control_3 &
341
342 /* TX error */
344 if (tx_status->tx_status_0 &
347
350
353 }
354
355 return 0;
356}
357
358/*
359 * RX Descriptors
360 */
361
362/*
363 * Initialize an rx control descriptor
364 */
366 struct ath5k_desc *desc,
367 u32 size, unsigned int flags)
368{
369 struct ath5k_hw_rx_ctl *rx_ctl;
370
371 rx_ctl = &desc->ud.ds_rx.rx_ctl;
372
373 /*
374 * Clear the descriptor
375 * If we don't clean the status descriptor,
376 * while scanning we get too many results,
377 * most of them virtual, after some secs
378 * of scanning system hangs. M.F.
379 */
380 memset(&desc->ud.ds_rx, 0, sizeof(struct ath5k_hw_all_rx_desc));
381
382 /* Setup descriptor */
383 rx_ctl->rx_control_1 = size & AR5K_DESC_RX_CTL1_BUF_LEN;
384 if (rx_ctl->rx_control_1 != size)
385 return -EINVAL;
386
388 rx_ctl->rx_control_1 |= AR5K_DESC_RX_CTL1_INTREQ;
389
390 return 0;
391}
392
393/*
394 * Proccess the rx status descriptor on 5210/5211
395 */
397 struct ath5k_desc *desc, struct ath5k_rx_status *rs)
398{
399 struct ath5k_hw_rx_status *rx_status;
400
401 rx_status = &desc->ud.ds_rx.u.rx_stat;
402
403 /* No frame received / not ready */
405 return -EINPROGRESS;
406
407 /*
408 * Frame receive status
409 */
410 rs->rs_datalen = rx_status->rx_status_0 &
412 rs->rs_rssi = AR5K_REG_MS(rx_status->rx_status_0,
414 rs->rs_rate = AR5K_REG_MS(rx_status->rx_status_0,
416 rs->rs_antenna = AR5K_REG_MS(rx_status->rx_status_0,
418 rs->rs_more = !!(rx_status->rx_status_0 &
420 /* TODO: this timestamp is 13 bit, later on we assume 15 bit */
421 rs->rs_tstamp = AR5K_REG_MS(rx_status->rx_status_1,
423 rs->rs_status = 0;
424 rs->rs_phyerr = 0;
426
427 /*
428 * Receive/descriptor errors
429 */
430 if (!(rx_status->rx_status_1 &
432 if (rx_status->rx_status_1 &
435
436 if (rx_status->rx_status_1 &
439
440 if (rx_status->rx_status_1 &
443 rs->rs_phyerr |= AR5K_REG_MS(rx_status->rx_status_1,
445 }
446
447 if (rx_status->rx_status_1 &
450 }
451
452 return 0;
453}
454
455/*
456 * Proccess the rx status descriptor on 5212
457 */
459 struct ath5k_desc *desc, struct ath5k_rx_status *rs)
460{
461 struct ath5k_hw_rx_status *rx_status;
463
464 rx_status = &desc->ud.ds_rx.u.rx_stat;
465
466 /* Overlay on error */
467 rx_err = &desc->ud.ds_rx.u.rx_err;
468
469 /* No frame received / not ready */
471 return -EINPROGRESS;
472
473 /*
474 * Frame receive status
475 */
476 rs->rs_datalen = rx_status->rx_status_0 &
478 rs->rs_rssi = AR5K_REG_MS(rx_status->rx_status_0,
480 rs->rs_rate = AR5K_REG_MS(rx_status->rx_status_0,
482 rs->rs_antenna = AR5K_REG_MS(rx_status->rx_status_0,
484 rs->rs_more = !!(rx_status->rx_status_0 &
486 rs->rs_tstamp = AR5K_REG_MS(rx_status->rx_status_1,
488 rs->rs_status = 0;
489 rs->rs_phyerr = 0;
491
492 /*
493 * Receive/descriptor errors
494 */
495 if (!(rx_status->rx_status_1 &
497 if (rx_status->rx_status_1 &
500
501 if (rx_status->rx_status_1 &
504 rs->rs_phyerr |= AR5K_REG_MS(rx_err->rx_error_1,
506 }
507
508 if (rx_status->rx_status_1 &
511
512 if (rx_status->rx_status_1 &
515 }
516
517 return 0;
518}
519
520/*
521 * Init function pointers inside ath5k_hw struct
522 */
524{
525
526 if (ah->ah_version != AR5K_AR5210 &&
527 ah->ah_version != AR5K_AR5211 &&
528 ah->ah_version != AR5K_AR5212)
529 return -ENOTSUP;
530
531 if (ah->ah_version == AR5K_AR5212) {
532 ah->ah_setup_rx_desc = ath5k_hw_setup_rx_desc;
533 ah->ah_setup_tx_desc = ath5k_hw_setup_4word_tx_desc;
534 ah->ah_proc_tx_desc = ath5k_hw_proc_4word_tx_status;
535 } else {
536 ah->ah_setup_rx_desc = ath5k_hw_setup_rx_desc;
537 ah->ah_setup_tx_desc = ath5k_hw_setup_2word_tx_desc;
538 ah->ah_proc_tx_desc = ath5k_hw_proc_2word_tx_status;
539 }
540
541 if (ah->ah_version == AR5K_AR5212)
542 ah->ah_proc_rx_desc = ath5k_hw_proc_5212_rx_status;
543 else if (ah->ah_version <= AR5K_AR5211)
544 ah->ah_proc_rx_desc = ath5k_hw_proc_5210_rx_status;
545
546 return 0;
547}
548
uint16_t pkt_len
Definition aqc1xx.h:2
#define AR5K_RXERR_CRC
Definition ath5k.h:581
#define AR5K_TXERR_FIFO
Definition ath5k.h:435
#define AR5K_TXERR_FILT
Definition ath5k.h:434
ath5k_pkt_type
Definition ath5k.h:526
@ AR5K_PKT_TYPE_BEACON
Definition ath5k.h:530
@ AR5K_PKT_TYPE_PROBE_RESP
Definition ath5k.h:531
@ AR5K_PKT_TYPE_PIFS
Definition ath5k.h:532
#define AR5K_REG_SM(_val, _flags)
Definition ath5k.h:86
#define AR5K_RXERR_PHY
Definition ath5k.h:582
#define AR5K_TUNE_MAX_TXPOWER
Definition ath5k.h:193
#define AR5K_TUNE_HWTXTRIES
Definition ath5k.h:197
#define AR5K_RXERR_MIC
Definition ath5k.h:585
#define AR5K_REG_MS(_val, _flags)
Definition ath5k.h:90
#define AR5K_RXERR_DECRYPT
Definition ath5k.h:584
#define AR5K_RXERR_FIFO
Definition ath5k.h:583
@ AR5K_AR5210
Definition ath5k.h:256
@ AR5K_AR5212
Definition ath5k.h:258
@ AR5K_AR5211
Definition ath5k.h:257
#define AR5K_RXKEYIX_INVALID
Definition ath5k.h:586
#define AR5K_TXERR_XRETRY
Definition ath5k.h:433
int ath5k_hw_init_desc_functions(struct ath5k_hw *ah)
Definition ath5k_desc.c:523
static int ath5k_hw_setup_rx_desc(struct ath5k_hw *ah __unused, struct ath5k_desc *desc, u32 size, unsigned int flags)
Definition ath5k_desc.c:365
static int ath5k_hw_proc_2word_tx_status(struct ath5k_hw *ah __unused, struct ath5k_desc *desc, struct ath5k_tx_status *ts)
Definition ath5k_desc.c:253
static int ath5k_hw_setup_4word_tx_desc(struct ath5k_hw *ah, struct ath5k_desc *desc, unsigned int pkt_len, unsigned int hdr_len __unused, enum ath5k_pkt_type type, unsigned int tx_power, unsigned int tx_rate0, unsigned int tx_tries0, unsigned int key_index __unused, unsigned int antenna_mode, unsigned int flags, unsigned int rtscts_rate, unsigned int rtscts_duration)
Definition ath5k_desc.c:157
static int ath5k_hw_setup_2word_tx_desc(struct ath5k_hw *ah, struct ath5k_desc *desc, unsigned int pkt_len, unsigned int hdr_len, enum ath5k_pkt_type type, unsigned int tx_power __unused, unsigned int tx_rate0, unsigned int tx_tries0, unsigned int key_index __unused, unsigned int antenna_mode, unsigned int flags, unsigned int rtscts_rate __unused, unsigned int rtscts_duration)
Definition ath5k_desc.c:43
static int ath5k_hw_proc_5212_rx_status(struct ath5k_hw *ah __unused, struct ath5k_desc *desc, struct ath5k_rx_status *rs)
Definition ath5k_desc.c:458
static int ath5k_hw_proc_4word_tx_status(struct ath5k_hw *ah __unused, struct ath5k_desc *desc, struct ath5k_tx_status *ts)
Definition ath5k_desc.c:305
#define _TX_FLAGS(_c, _flag)
static int ath5k_hw_proc_5210_rx_status(struct ath5k_hw *ah __unused, struct ath5k_desc *desc, struct ath5k_rx_status *rs)
Definition ath5k_desc.c:396
#define FCS_LEN
Definition ath5k_desc.c:37
struct ath5k_hw_rx_ctl rx_ctl
Definition desc.h:0
#define AR5K_DESC_TX_STATUS0_LONG_RETRY_COUNT
Definition desc.h:266
#define AR5K_4W_TX_DESC_CTL3_RTS_CTS_RATE
Definition desc.h:239
#define AR5K_2W_TX_DESC_CTL0_FRAME_TYPE
Definition desc.h:145
#define AR5K_5210_RX_DESC_STATUS0_RECEIVE_RATE
Definition desc.h:54
#define AR5K_2W_TX_DESC_CTL0_XMIT_RATE
Definition desc.h:139
#define AR5K_DESC_RX_CTL1_BUF_LEN
Definition desc.h:38
#define AR5K_DESC_RX_CTL1_INTREQ
Definition desc.h:39
#define AR5K_2W_TX_DESC_CTL0_HEADER_LEN
Definition desc.h:137
#define AR5K_4W_TX_DESC_CTL1_FRAME_TYPE
Definition desc.h:207
#define AR5K_4W_TX_DESC_CTL3_XMIT_RATE0
Definition desc.h:232
#define AR5K_DESC_TX_STATUS0_EXCESSIVE_RETRIES
Definition desc.h:253
#define AR5K_5212_RX_DESC_STATUS0_RECEIVE_ANTENNA
Definition desc.h:85
#define AR5K_4W_TX_DESC_CTL2_RTS_DURATION
Definition desc.h:219
#define AR5K_DESC_TX_STATUS1_SEQ_NUM
Definition desc.h:275
#define AR5K_5212_RX_DESC_STATUS1_PHY_ERROR
Definition desc.h:93
#define AR5K_4W_TX_DESC_CTL2_XMIT_TRIES0
Definition desc.h:221
#define AR5K_2W_TX_DESC_CTL0_ANT_MODE_XMIT
Definition desc.h:150
#define AR5K_DESC_TX_STATUS1_ACK_SIG_STRENGTH
Definition desc.h:277
#define AR5K_5210_RX_DESC_STATUS1_FIFO_OVERRUN
Definition desc.h:65
#define AR5K_DESC_TX_STATUS0_SEND_TIMESTAMP
Definition desc.h:270
#define AR5K_5212_RX_DESC_STATUS1_MIC_ERROR
Definition desc.h:94
#define AR5K_DESC_TX_STATUS0_SHORT_RETRY_COUNT
Definition desc.h:260
#define AR5K_5210_RX_DESC_STATUS0_RECEIVE_SIGNAL
Definition desc.h:56
#define AR5K_TXDESC_RTSENA
Definition desc.h:330
#define AR5K_5210_RX_DESC_STATUS0_MORE
Definition desc.h:53
#define AR5K_5212_RX_DESC_STATUS0_MORE
Definition desc.h:79
#define AR5K_5210_RX_DESC_STATUS0_DATA_LEN
Definition desc.h:52
#define AR5K_AR5210_TX_DESC_FRAME_TYPE_PIFS
Definition desc.h:181
#define AR5K_DESC_TX_STATUS0_FRAME_XMIT_OK
Definition desc.h:252
#define AR5K_DESC_TX_STATUS0_FIFO_UNDERRUN
Definition desc.h:254
#define AR5K_5212_RX_DESC_STATUS1_DECRYPT_CRC_ERROR
Definition desc.h:92
#define AR5K_4W_TX_DESC_CTL1_BUF_LEN
Definition desc.h:203
#define AR5K_5210_RX_DESC_STATUS1_CRC_ERROR
Definition desc.h:64
#define AR5K_5212_RX_DESC_STATUS1_RECEIVE_TIMESTAMP
Definition desc.h:98
#define AR5K_5212_RX_DESC_STATUS0_DATA_LEN
Definition desc.h:78
#define AR5K_DESC_TX_STATUS1_XMIT_ANTENNA
Definition desc.h:282
#define AR5K_5212_RX_DESC_STATUS0_RECEIVE_SIGNAL
Definition desc.h:83
#define AR5K_RX_DESC_ERROR1_PHY_ERROR_CODE
Definition desc.h:114
#define AR5K_4W_TX_DESC_CTL0_FRAME_LEN
Definition desc.h:189
#define AR5K_2W_TX_DESC_CTL0_FRAME_LEN
Definition desc.h:136
#define AR5K_DESC_TX_STATUS0_FILTERED
Definition desc.h:255
#define AR5K_RXDESC_INTREQ
Definition desc.h:326
#define AR5K_TXDESC_CTSENA
Definition desc.h:331
#define AR5K_DESC_TX_STATUS1_FINAL_TS_INDEX
Definition desc.h:279
#define AR5K_5212_RX_DESC_STATUS1_FRAME_RECEIVE_OK
Definition desc.h:90
struct ath5k_hw_2w_tx_ctl tx_ctl
Definition desc.h:0
#define AR5K_4W_TX_DESC_CTL0_ANT_MODE_XMIT
Definition desc.h:195
#define AR5K_2W_TX_DESC_CTL1_FRAME_TYPE
Definition desc.h:171
#define AR5K_2W_TX_DESC_CTL1_RTS_DURATION
Definition desc.h:174
#define AR5K_5210_RX_DESC_STATUS1_PHY_ERROR
Definition desc.h:67
struct ath5k_hw_rx_error rx_err
Definition desc.h:3
#define AR5K_2W_TX_DESC_CTL1_BUF_LEN
Definition desc.h:160
#define AR5K_DESC_TX_STATUS1_DONE
Definition desc.h:274
#define AR5K_AR5210_TX_DESC_FRAME_TYPE_NO_DELAY
Definition desc.h:180
#define AR5K_4W_TX_DESC_CTL0_XMIT_POWER
Definition desc.h:190
#define AR5K_5210_RX_DESC_STATUS1_RECEIVE_TIMESTAMP
Definition desc.h:72
#define AR5K_5210_RX_DESC_STATUS1_FRAME_RECEIVE_OK
Definition desc.h:63
#define AR5K_5212_RX_DESC_STATUS0_RECEIVE_RATE
Definition desc.h:81
#define AR5K_5210_RX_DESC_STATUS1_DONE
Definition desc.h:62
#define AR5K_5210_RX_DESC_STATUS1_DECRYPT_CRC_ERROR
Definition desc.h:66
#define AR5K_5212_RX_DESC_STATUS1_DONE
Definition desc.h:89
#define AR5K_5212_RX_DESC_STATUS1_CRC_ERROR
Definition desc.h:91
#define AR5K_5210_RX_DESC_STATUS0_RECEIVE_ANTENNA
Definition desc.h:58
uint32_t type
Operating system type.
Definition ena.h:1
uint8_t flags
Flags.
Definition ena.h:7
struct ena_llq_option desc
Descriptor counts.
Definition ena.h:9
#define __unused
Declare a variable or data structure as unused.
Definition compiler.h:573
#define DBG(...)
Print a debugging message.
Definition compiler.h:498
uint16_t size
Buffer size.
Definition dwmac.h:3
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
Definition compiler.h:896
#define EINVAL
Invalid argument.
Definition errno.h:429
#define EINPROGRESS
Operation in progress.
Definition errno.h:419
#define ENOTSUP
Operation not supported.
Definition errno.h:590
#define FILE_SECBOOT(_status)
Declare a file's UEFI Secure Boot permission status.
Definition compiler.h:926
void * memset(void *dest, int character, size_t len) __nonnull
uint8_t ah
Definition registers.h:1
ath5k_hw_get_isr - Get interrupt status
Definition ath5k.h:955
u8 ts_rate[4]
Definition ath5k.h:422
u8 ts_retry[4]
Definition ath5k.h:423
#define u32
Definition vga.h:21