iPXE
ath9k_mac.c
Go to the documentation of this file.
1/*
2 * Copyright (c) 2008-2011 Atheros Communications Inc.
3 *
4 * Modified for iPXE by Scott K Logan <logans@cottsay.net> July 2011
5 * Original from Linux kernel 3.0.1
6 *
7 * Permission to use, copy, modify, and/or distribute this software for any
8 * purpose with or without fee is hereby granted, provided that the above
9 * copyright notice and this permission notice appear in all copies.
10 *
11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 */
19
20FILE_SECBOOT ( FORBIDDEN );
21
22#include <ipxe/io.h>
23
24#include "hw.h"
25#include "hw-ops.h"
26
29{
30 DBG2("ath9k: "
31 "tx ok 0x%x err 0x%x desc 0x%x eol 0x%x urn 0x%x\n",
32 ah->txok_interrupt_mask, ah->txerr_interrupt_mask,
33 ah->txdesc_interrupt_mask, ah->txeol_interrupt_mask,
34 ah->txurn_interrupt_mask);
35
37
39 SM(ah->txok_interrupt_mask, AR_IMR_S0_QCU_TXOK)
40 | SM(ah->txdesc_interrupt_mask, AR_IMR_S0_QCU_TXDESC));
42 SM(ah->txerr_interrupt_mask, AR_IMR_S1_QCU_TXERR)
43 | SM(ah->txeol_interrupt_mask, AR_IMR_S1_QCU_TXEOL));
44
45 ah->imrs2_reg &= ~AR_IMR_S2_QCU_TXURN;
46 ah->imrs2_reg |= (ah->txurn_interrupt_mask & AR_IMR_S2_QCU_TXURN);
47 REG_WRITE(ah, AR_IMR_S2, ah->imrs2_reg);
48
50}
51
53{
55}
56
57void ath9k_hw_txstart(struct ath_hw *ah, u32 q)
58{
59 DBG2("ath9k: "
60 "Enable TXE on queue: %d\n", q);
61 REG_WRITE(ah, AR_Q_TXE, 1 << q);
62}
63
65{
66 u32 npend;
67
69 if (npend == 0) {
70
71 if (REG_READ(ah, AR_Q_TXE) & (1 << q))
72 npend = 1;
73 }
74
75 return npend;
76}
77
78/**
79 * ath9k_hw_updatetxtriglevel - adjusts the frame trigger level
80 *
81 * @ah: atheros hardware struct
82 * @bIncTrigLevel: whether or not the frame trigger level should be updated
83 *
84 * The frame trigger level specifies the minimum number of bytes,
85 * in units of 64 bytes, that must be DMA'ed into the PCU TX FIFO
86 * before the PCU will initiate sending the frame on the air. This can
87 * mean we initiate transmit before a full frame is on the PCU TX FIFO.
88 * Resets to 0x1 (meaning 64 bytes or a full frame, whichever occurs
89 * first)
90 *
91 * Caution must be taken to ensure to set the frame trigger level based
92 * on the DMA request size. For example if the DMA request size is set to
93 * 128 bytes the trigger level cannot exceed 6 * 64 = 384. This is because
94 * there need to be enough space in the tx FIFO for the requested transfer
95 * size. Hence the tx FIFO will stop with 512 - 128 = 384 bytes. If we set
96 * the threshold to a value beyond 6, then the transmit will hang.
97 *
98 * Current dual stream devices have a PCU TX FIFO size of 8 KB.
99 * Current single stream devices have a PCU TX FIFO size of 4 KB, however,
100 * there is a hardware issue which forces us to use 2 KB instead so the
101 * frame trigger level must not exceed 2 KB for these chipsets.
102 */
103int ath9k_hw_updatetxtriglevel(struct ath_hw *ah, int bIncTrigLevel)
104{
105 u32 txcfg, curLevel, newLevel;
106
107 if (ah->tx_trig_level >= ah->config.max_txtrig_level)
108 return 0;
109
111
113 curLevel = MS(txcfg, AR_FTRIG);
114 newLevel = curLevel;
115 if (bIncTrigLevel) {
116 if (curLevel < ah->config.max_txtrig_level)
117 newLevel++;
118 } else if (curLevel > MIN_TX_FIFO_THRESHOLD)
119 newLevel--;
120 if (newLevel != curLevel)
122 (txcfg & ~AR_FTRIG) | SM(newLevel, AR_FTRIG));
123
125
126 ah->tx_trig_level = newLevel;
127
128 return newLevel != curLevel;
129}
130
157
159{
160 *txqs &= ah->intr_txqs;
161 ah->intr_txqs &= ~(*txqs);
162}
163
165 const struct ath9k_tx_queue_info *qinfo)
166{
167 u32 cw;
168 struct ath9k_tx_queue_info *qi;
169
170 qi = &ah->txq[q];
172 DBG("ath9k: "
173 "Set TXQ properties, inactive queue: %d\n", q);
174 return 0;
175 }
176
177 DBG2("ath9k: Set queue properties for: %d\n", q);
178
179 qi->tqi_ver = qinfo->tqi_ver;
180 qi->tqi_subtype = qinfo->tqi_subtype;
181 qi->tqi_qflags = qinfo->tqi_qflags;
182 qi->tqi_priority = qinfo->tqi_priority;
183 if (qinfo->tqi_aifs != ATH9K_TXQ_USEDEFAULT)
184 qi->tqi_aifs = min(qinfo->tqi_aifs, 255U);
185 else
186 qi->tqi_aifs = INIT_AIFS;
187 if (qinfo->tqi_cwmin != ATH9K_TXQ_USEDEFAULT) {
188 cw = min(qinfo->tqi_cwmin, 1024U);
189 qi->tqi_cwmin = 1;
190 while (qi->tqi_cwmin < cw)
191 qi->tqi_cwmin = (qi->tqi_cwmin << 1) | 1;
192 } else
193 qi->tqi_cwmin = qinfo->tqi_cwmin;
194 if (qinfo->tqi_cwmax != ATH9K_TXQ_USEDEFAULT) {
195 cw = min(qinfo->tqi_cwmax, 1024U);
196 qi->tqi_cwmax = 1;
197 while (qi->tqi_cwmax < cw)
198 qi->tqi_cwmax = (qi->tqi_cwmax << 1) | 1;
199 } else
200 qi->tqi_cwmax = INIT_CWMAX;
201
202 if (qinfo->tqi_shretry != 0)
203 qi->tqi_shretry = min((u32) qinfo->tqi_shretry, 15U);
204 else
206 if (qinfo->tqi_lgretry != 0)
207 qi->tqi_lgretry = min((u32) qinfo->tqi_lgretry, 15U);
208 else
210 qi->tqi_cbrPeriod = qinfo->tqi_cbrPeriod;
212 qi->tqi_burstTime = qinfo->tqi_burstTime;
213 qi->tqi_readyTime = qinfo->tqi_readyTime;
214
215 return 1;
216}
217
219 const struct ath9k_tx_queue_info *qinfo)
220{
221 struct ath9k_tx_queue_info *qi;
222 int q;
223
224 for (q = 0; q < ATH9K_NUM_TX_QUEUES; q++)
225 if (ah->txq[q].tqi_type ==
227 break;
228 if (q == ATH9K_NUM_TX_QUEUES) {
229 DBG("No available TX queue\n");
230 return -1;
231 }
232
233 DBG2("ath9K: Setup TX queue: %d\n", q);
234
235 qi = &ah->txq[q];
237 DBG("ath9k: TX queue: %d already active\n", q);
238 return -1;
239 }
240 memset(qi, 0, sizeof(struct ath9k_tx_queue_info));
241 qi->tqi_type = type;
242 if (qinfo == NULL) {
243 qi->tqi_qflags =
247 qi->tqi_aifs = INIT_AIFS;
249 qi->tqi_cwmax = INIT_CWMAX;
252 qi->tqi_physCompBuf = 0;
253 } else {
254 qi->tqi_physCompBuf = qinfo->tqi_physCompBuf;
255 (void) ath9k_hw_set_txq_props(ah, q, qinfo);
256 }
257
258 return q;
259}
260
262{
263 struct ath9k_tx_queue_info *qi;
264
265 qi = &ah->txq[q];
267 DBG("ath9k: "
268 "Release TXQ, inactive queue: %d\n", q);
269 return 0;
270 }
271
272 DBG2("ath9k: Release TX queue: %d\n", q);
273
275 ah->txok_interrupt_mask &= ~(1 << q);
276 ah->txerr_interrupt_mask &= ~(1 << q);
277 ah->txdesc_interrupt_mask &= ~(1 << q);
278 ah->txeol_interrupt_mask &= ~(1 << q);
279 ah->txurn_interrupt_mask &= ~(1 << q);
281
282 return 1;
283}
284
286{
287 struct ath9k_channel *chan = ah->curchan;
288 struct ath9k_tx_queue_info *qi;
289 u32 cwMin, chanCwMin, value __unused;
290
291 qi = &ah->txq[q];
293 DBG("ath9k: "
294 "Reset TXQ, inactive queue: %d\n", q);
295 return 1;
296 }
297
298 DBG2("ath9k: Reset TX queue: %d\n", q);
299
300 if (qi->tqi_cwmin == ATH9K_TXQ_USEDEFAULT) {
301 if (chan && IS_CHAN_B(chan))
302 chanCwMin = INIT_CWMIN_11B;
303 else
304 chanCwMin = INIT_CWMIN;
305
306 for (cwMin = 1; cwMin < chanCwMin; cwMin = (cwMin << 1) | 1);
307 } else
308 cwMin = qi->tqi_cwmin;
309
311
313 SM(cwMin, AR_D_LCL_IFS_CWMIN) |
316
321
323
324 if (AR_SREV_9340(ah))
327 else
330
331 if (qi->tqi_cbrPeriod) {
338 }
339 if (qi->tqi_readyTime) {
343 }
344
347 (qi->tqi_burstTime ? AR_D_CHNTIME_EN : 0));
348
349 if (qi->tqi_burstTime
352
355
357
360
366 }
367
370
372 ah->txok_interrupt_mask |= 1 << q;
373 else
374 ah->txok_interrupt_mask &= ~(1 << q);
376 ah->txerr_interrupt_mask |= 1 << q;
377 else
378 ah->txerr_interrupt_mask &= ~(1 << q);
380 ah->txdesc_interrupt_mask |= 1 << q;
381 else
382 ah->txdesc_interrupt_mask &= ~(1 << q);
384 ah->txeol_interrupt_mask |= 1 << q;
385 else
386 ah->txeol_interrupt_mask &= ~(1 << q);
388 ah->txurn_interrupt_mask |= 1 << q;
389 else
390 ah->txurn_interrupt_mask &= ~(1 << q);
392
393 return 1;
394}
395
397 struct ath_rx_status *rs, u64 tsf __unused)
398{
399 struct ar5416_desc ads;
400 struct ar5416_desc *adsp = AR5416DESC(ds);
401 u32 phyerr;
402
403 if ((adsp->ds_rxstatus8 & AR_RxDone) == 0)
404 return -EINPROGRESS;
405
406 ads.u.rx = adsp->u.rx;
407
408 rs->rs_status = 0;
409 rs->rs_flags = 0;
410
411 rs->rs_datalen = ads.ds_rxstatus1 & AR_DataLen;
412 rs->rs_tstamp = ads.AR_RcvTimestamp;
413
414 if (ads.ds_rxstatus8 & AR_PostDelimCRCErr) {
422 } else {
423 rs->rs_rssi = MS(ads.ds_rxstatus4, AR_RxRSSICombined);
424 rs->rs_rssi_ctl0 = MS(ads.ds_rxstatus0,
426 rs->rs_rssi_ctl1 = MS(ads.ds_rxstatus0,
428 rs->rs_rssi_ctl2 = MS(ads.ds_rxstatus0,
430 rs->rs_rssi_ext0 = MS(ads.ds_rxstatus4,
432 rs->rs_rssi_ext1 = MS(ads.ds_rxstatus4,
434 rs->rs_rssi_ext2 = MS(ads.ds_rxstatus4,
436 }
437 if (ads.ds_rxstatus8 & AR_RxKeyIdxValid)
438 rs->rs_keyix = MS(ads.ds_rxstatus8, AR_KeyIdx);
439 else
441
442 rs->rs_rate = RXSTATUS_RATE(ah, (&ads));
443 rs->rs_more = (ads.ds_rxstatus1 & AR_RxMore) ? 1 : 0;
444
445 rs->rs_isaggr = (ads.ds_rxstatus8 & AR_RxAggr) ? 1 : 0;
446 rs->rs_moreaggr =
447 (ads.ds_rxstatus8 & AR_RxMoreAggr) ? 1 : 0;
448 rs->rs_antenna = MS(ads.ds_rxstatus3, AR_RxAntenna);
449 rs->rs_flags =
450 (ads.ds_rxstatus3 & AR_GI) ? ATH9K_RX_GI : 0;
451 rs->rs_flags |=
452 (ads.ds_rxstatus3 & AR_2040) ? ATH9K_RX_2040 : 0;
453
454 if (ads.ds_rxstatus8 & AR_PreDelimCRCErr)
456 if (ads.ds_rxstatus8 & AR_PostDelimCRCErr)
458 if (ads.ds_rxstatus8 & AR_DecryptBusyErr)
460
461 if ((ads.ds_rxstatus8 & AR_RxFrameOK) == 0) {
462 /*
463 * Treat these errors as mutually exclusive to avoid spurious
464 * extra error reports from the hardware. If a CRC error is
465 * reported, then decryption and MIC errors are irrelevant,
466 * the frame is going to be dropped either way
467 */
468 if (ads.ds_rxstatus8 & AR_CRCErr)
470 else if (ads.ds_rxstatus8 & AR_PHYErr) {
472 phyerr = MS(ads.ds_rxstatus8, AR_PHYErrCode);
473 rs->rs_phyerr = phyerr;
474 } else if (ads.ds_rxstatus8 & AR_DecryptCRCErr)
476 else if (ads.ds_rxstatus8 & AR_MichaelErr)
478 else if (ads.ds_rxstatus8 & AR_KeyMiss)
480 }
481
482 return 0;
483}
484
485/*
486 * This can stop or re-enables RX.
487 *
488 * If bool is set this will kill any frame which is currently being
489 * transferred between the MAC and baseband and also prevent any new
490 * frames from getting started.
491 */
493{
494 u32 reg;
495
496 if (set) {
499
501 0, AH_WAIT_TIMEOUT)) {
505
507 DBG("ath9k: "
508 "RX failed to go idle in 10 ms RXSM=0x%x\n",
509 reg);
510
511 return 0;
512 }
513 } else {
516 }
517
518 return 1;
519}
520
522{
524}
525
526void ath9k_hw_startpcureceive(struct ath_hw *ah, int is_scanning)
527{
528 ath9k_ani_reset(ah, is_scanning);
529
531}
532
537
538int ath9k_hw_stopdmarecv(struct ath_hw *ah, int *reset)
539{
540#define AH_RX_STOP_DMA_TIMEOUT 10000 /* usec */
541 u32 mac_status, last_mac_status = 0;
542 int i;
543
544 /* Enable access to the DMA observation bus */
549
551
552 /* Wait for rx enable bit to go low */
553 for (i = AH_RX_STOP_DMA_TIMEOUT / AH_TIME_QUANTUM; i != 0; i--) {
554 if ((REG_READ(ah, AR_CR) & AR_CR_RXE) == 0)
555 break;
556
558 mac_status = REG_READ(ah, AR_DMADBG_7) & 0x7f0;
559 if (mac_status == 0x1c0 && mac_status == last_mac_status) {
560 *reset = 1;
561 break;
562 }
563
564 last_mac_status = mac_status;
565 }
566
568 }
569
570 if (i == 0) {
571 DBG("ath9k: "
572 "DMA failed to stop in %d ms AR_CR=0x%08x AR_DIAG_SW=0x%08x DMADBG_7=0x%08x\n",
574 REG_READ(ah, AR_CR),
577 return 0;
578 } else {
579 return 1;
580 }
581
582#undef AH_RX_STOP_DMA_TIMEOUT
583}
584
586{
587 u32 host_isr;
588
589 if (AR_SREV_9100(ah) || !(ah->ah_ier & AR_IER_ENABLE))
590 return 1;
591
592 host_isr = REG_READ(ah, AR_INTR_ASYNC_CAUSE);
593 if ((host_isr & AR_INTR_MAC_IRQ) && (host_isr != AR_INTR_SPURIOUS))
594 return 1;
595
596 host_isr = REG_READ(ah, AR_INTR_SYNC_CAUSE);
597 if ((host_isr & AR_INTR_SYNC_DEFAULT)
598 && (host_isr != AR_INTR_SPURIOUS))
599 return 1;
600
601 return 0;
602}
603
605{
606 DBG2("ath9k: disable IER\n");
607 REG_WRITE(ah, AR_IER, ah->ah_ier);
608 (void) REG_READ(ah, AR_IER);
609 if (!AR_SREV_9100(ah)) {
612
615 }
616}
617
619{
620 u32 sync_default = AR_INTR_SYNC_DEFAULT;
621
622 if (!(ah->imask & ATH9K_INT_GLOBAL))
623 return;
624
625 if (AR_SREV_9340(ah))
626 sync_default &= ~AR_INTR_SYNC_HOST1_FATAL;
627
628 DBG2("ath9k: enable IER\n");
629 REG_WRITE(ah, AR_IER, ah->ah_ier);
630 if (!AR_SREV_9100(ah)) {
634
635
636 REG_WRITE(ah, AR_INTR_SYNC_ENABLE, sync_default);
637 REG_WRITE(ah, AR_INTR_SYNC_MASK, sync_default);
638 }
639 DBG2("ath9k: AR_IMR 0x%x IER 0x%x\n",
641}
642
643void ath9k_hw_set_interrupts(struct ath_hw *ah, unsigned int ints)
644{
645 enum ath9k_int omask = ah->imask;
646 u32 mask, mask2;
647 struct ath9k_hw_capabilities *pCap = &ah->caps;
648
649 if (!(ints & ATH9K_INT_GLOBAL))
651
652 DBG2("ath9k: 0x%x => 0x%x\n", omask, ints);
653
654 /* TODO: global int Ref count */
655 mask = ints & ATH9K_INT_COMMON;
656 mask2 = 0;
657
658 if (ints & ATH9K_INT_TX) {
659 if (ah->config.tx_intr_mitigation)
661 else {
662 if (ah->txok_interrupt_mask)
663 mask |= AR_IMR_TXOK;
664 if (ah->txdesc_interrupt_mask)
665 mask |= AR_IMR_TXDESC;
666 }
667 if (ah->txerr_interrupt_mask)
668 mask |= AR_IMR_TXERR;
669 if (ah->txeol_interrupt_mask)
670 mask |= AR_IMR_TXEOL;
671 }
672 if (ints & ATH9K_INT_RX) {
675 if (ah->config.rx_intr_mitigation) {
676 mask &= ~AR_IMR_RXOK_LP;
678 } else {
679 mask |= AR_IMR_RXOK_LP;
680 }
681 } else {
682 if (ah->config.rx_intr_mitigation)
684 else
685 mask |= AR_IMR_RXOK | AR_IMR_RXDESC;
686 }
687 if (!(pCap->hw_caps & ATH9K_HW_CAP_AUTOSLEEP))
688 mask |= AR_IMR_GENTMR;
689 }
690
691 if (ints & ATH9K_INT_GENTIMER)
692 mask |= AR_IMR_GENTMR;
693
694 if (ints & (ATH9K_INT_BMISC)) {
695 mask |= AR_IMR_BCNMISC;
696 if (ints & ATH9K_INT_TIM)
697 mask2 |= AR_IMR_S2_TIM;
698 if (ints & ATH9K_INT_DTIM)
699 mask2 |= AR_IMR_S2_DTIM;
700 if (ints & ATH9K_INT_DTIMSYNC)
701 mask2 |= AR_IMR_S2_DTIMSYNC;
702 if (ints & ATH9K_INT_CABEND)
703 mask2 |= AR_IMR_S2_CABEND;
704 if (ints & ATH9K_INT_TSFOOR)
705 mask2 |= AR_IMR_S2_TSFOOR;
706 }
707
708 if (ints & (ATH9K_INT_GTT | ATH9K_INT_CST)) {
709 mask |= AR_IMR_BCNMISC;
710 if (ints & ATH9K_INT_GTT)
711 mask2 |= AR_IMR_S2_GTT;
712 if (ints & ATH9K_INT_CST)
713 mask2 |= AR_IMR_S2_CST;
714 }
715
716 DBG2("ath9k: new IMR 0x%x\n", mask);
717 REG_WRITE(ah, AR_IMR, mask);
721 ah->imrs2_reg |= mask2;
722 REG_WRITE(ah, AR_IMR_S2, ah->imrs2_reg);
723
724 if (!(pCap->hw_caps & ATH9K_HW_CAP_AUTOSLEEP)) {
725 if (ints & ATH9K_INT_TIM_TIMER)
727 else
729 }
730
731 if (ints & ATH9K_INT_GLOBAL)
733
734 return;
735}
#define NULL
NULL pointer (VOID *)
Definition Base.h:322
pseudo_bit_t value[0x00020]
Definition arbel.h:2
#define IS_CHAN_B(_c)
Definition ath5k.h:660
#define AR_IMR_TXERR
Definition reg.h:270
#define AR_IMR_S2_TSFOOR
Definition reg.h:318
#define AR_D_CHNTIME_DUR
Definition reg.h:563
#define AR_IMR_RXERR
Definition reg.h:264
#define AR_D_MISC_ARB_LOCKOUT_CNTRL
Definition reg.h:590
#define AR_D_LCL_IFS_CWMIN
Definition reg.h:524
#define AR_MACMISC_MISC_OBS_BUS_1
Definition reg.h:148
#define AR_PCU_CLEAR_VMF
Definition reg.h:1652
#define AR_IMR_BCNMISC
Definition reg.h:283
#define AR_QSTS(_i)
Definition reg.h:470
#define AR_IMR_RXOK_HP
Definition reg.h:262
#define AR_OBS_BUS_1
Definition reg.h:1559
#define AR_IMR_S5
Definition reg.h:247
#define AR_D_GBL_IFS_MISC_IGNORE_BACKOFF
Definition reg.h:637
#define AR_D_MISC_FRAG_BKOFF_EN
Definition reg.h:583
#define AR_Q_MISC_FSP_CBR
Definition reg.h:445
#define AR_IMR_TXEOL
Definition reg.h:272
#define AR_QMISC(_i)
Definition reg.h:442
#define AR_INTR_MAC_IRQ
Definition reg.h:916
#define AR_DIAG_RX_ABORT
Definition reg.h:1525
#define AR_IMR_S1_QCU_TXEOL
Definition reg.h:304
#define AR_DRETRY_LIMIT(_i)
Definition reg.h:543
#define AR_IER_ENABLE
Definition reg.h:56
#define AR_SREV_9100(ah)
Definition reg.h:811
#define AR_IMR_S2
Definition reg.h:307
#define AR_IMR_TXMINTR
Definition reg.h:290
#define AR_D_MISC_ARB_LOCKOUT_CNTRL_GLOBAL
Definition reg.h:594
#define AR_IMR_S1
Definition reg.h:301
#define AR_DIAG_FORCE_CH_IDLE_HIGH
Definition reg.h:1522
#define AR_MACMISC
Definition reg.h:129
#define AR_IMR_S2_GTT
Definition reg.h:311
#define AR_RXDP
Definition reg.h:30
#define AR_INTR_SPURIOUS
Definition reg.h:920
#define AR_NUM_QCU
Definition reg.h:360
#define AR_D_MISC_FRAG_WAIT_EN
Definition reg.h:582
#define AR_INTR_ASYNC_ENABLE
Definition reg.h:978
#define AR_IMR_S0_QCU_TXDESC
Definition reg.h:298
#define AR_OBS_BUS_1_RX_STATE
Definition reg.h:1574
#define AR_MACMISC_DMA_OBS_LINE_8
Definition reg.h:141
#define AR_Q_DESC_CRCCHK
Definition reg.h:480
#define AR_IMR_S2_CST
Definition reg.h:310
#define AR_IMR_RXOK_LP
Definition reg.h:263
#define AR_DLCL_IFS(_i)
Definition reg.h:523
#define AR_QRDYTIMECFG(_i)
Definition reg.h:419
#define AR_D_MISC_CW_BKOFF_EN
Definition reg.h:584
#define AR_CR_RXD
Definition reg.h:27
#define AR_D_GBL_IFS_MISC
Definition reg.h:629
#define AR_D_LCL_IFS_CWMAX
Definition reg.h:526
#define AR_IMR_S0_QCU_TXOK
Definition reg.h:296
#define AR_Q_DESC_CRCCHK_EN
Definition reg.h:482
#define AR_IMR
Definition reg.h:259
#define AR_IMR_S2_CABTO
Definition reg.h:316
#define AR_IMR_S5_TIM_TIMER
Definition reg.h:248
#define AR_IMR_S2_DTIM
Definition reg.h:317
#define AR_D_CHNTIME_EN
Definition reg.h:565
#define AR_Q_MISC_RDYTIME_EXP_POLICY
Definition reg.h:455
#define AR_MACMISC_MISC_OBS_BUS_MSB_S
Definition reg.h:147
#define AR_INTR_SYNC_MASK
Definition reg.h:971
#define AR_DMISC(_i)
Definition reg.h:578
#define AR_IMR_S0
Definition reg.h:295
#define AR_IMR_S2_TIM
Definition reg.h:312
#define AR_Q_TXD_M
Definition reg.h:391
#define AR_Q_MISC_CBR_EXP_CNTR_LIMIT_EN
Definition reg.h:454
#define AR_IMR_RXDESC
Definition reg.h:261
#define AR_Q_CBRCFG_INTERVAL
Definition reg.h:404
#define AR_Q_RDYTIMECFG_DURATION
Definition reg.h:420
#define AR_D_RETRY_LIMIT_FR_SH
Definition reg.h:544
#define AR_D_LCL_IFS_AIFS
Definition reg.h:528
#define AR_DCHNTIME(_i)
Definition reg.h:562
#define AR_CR
Definition reg.h:25
#define AR_INTR_ASYNC_CAUSE
Definition reg.h:976
#define AR_D_RETRY_LIMIT_STA_SH
Definition reg.h:546
#define AR_INTR_ASYNC_MASK
Definition reg.h:967
#define AR_Q_STS_PEND_FR_CNT
Definition reg.h:471
#define AR_IMR_TXDESC
Definition reg.h:269
#define AR_D_RETRY_LIMIT_STA_LG
Definition reg.h:548
#define AR_INTR_SYNC_CAUSE
Definition reg.h:923
#define AR_Q_CBRCFG_OVF_THRESH
Definition reg.h:406
#define AR_FTRIG
Definition reg.h:90
#define AR_Q_MISC_DCU_EARLY_TERM_REQ
Definition reg.h:457
#define AR_TXCFG
Definition reg.h:80
#define AR_D_MISC_POST_FR_BKOFF_DIS
Definition reg.h:597
#define AR_IMR_S1_QCU_TXERR
Definition reg.h:302
#define AR_PCU_MISC
Definition reg.h:1641
#define AR_IMR_TXINTM
Definition reg.h:292
#define AR_PCU_FORCE_QUIET_COLL
Definition reg.h:1650
#define AR_Q_TXE
Definition reg.h:387
#define AR_IMR_TXOK
Definition reg.h:268
#define AR_Q_RDYTIMECFG_EN
Definition reg.h:422
#define AR_IMR_S2_CABEND
Definition reg.h:313
#define AR_QCBRCFG(_i)
Definition reg.h:403
#define AR_IMR_GENTMR
Definition reg.h:288
@ AR_INTR_SYNC_HOST1_FATAL
Definition reg.h:937
@ AR_INTR_SYNC_DEFAULT
Definition reg.h:953
#define AR_CR_RXE
Definition reg.h:26
#define AR_INTR_SYNC_ENABLE
Definition reg.h:927
#define AR_SREV_9340(_ah)
Definition reg.h:879
#define AR_IMR_S2_QCU_TXURN
Definition reg.h:308
#define AR_DIAG_RX_DIS
Definition reg.h:1511
#define AR_DIAG_SW
Definition reg.h:1505
#define AR_MACMISC_DMA_OBS_S
Definition reg.h:132
#define AR_IER
Definition reg.h:55
#define AR_DMADBG_7
Definition reg.h:358
#define AR_IMR_RXINTM
Definition reg.h:293
#define AR_IMR_RXMINTR
Definition reg.h:291
#define AR_IMR_S2_DTIMSYNC
Definition reg.h:314
#define AR_IMR_RXOK
Definition reg.h:260
#define AR_QTXDP(_i)
Definition reg.h:382
#define AR_Q_TXD
Definition reg.h:390
#define AR_SREV_9300_20_OR_LATER(_ah)
Definition reg.h:865
void ath9k_ani_reset(struct ath_hw *ah, int is_scanning)
Definition ath9k_ani.c:468
int ath9k_hw_wait(struct ath_hw *ah, u32 reg, u32 mask, u32 val, u32 timeout)
Definition ath9k_hw.c:95
#define AH_RX_STOP_DMA_TIMEOUT
int ath9k_hw_intrpend(struct ath_hw *ah)
Definition ath9k_mac.c:585
void ath9k_hw_putrxbuf(struct ath_hw *ah, u32 rxdp)
Definition ath9k_mac.c:521
void ath9k_hw_enable_interrupts(struct ath_hw *ah)
Definition ath9k_mac.c:618
int ath9k_hw_setuptxqueue(struct ath_hw *ah, enum ath9k_tx_queue type, const struct ath9k_tx_queue_info *qinfo)
Definition ath9k_mac.c:218
void ath9k_hw_set_interrupts(struct ath_hw *ah, unsigned int ints)
Definition ath9k_mac.c:643
u32 ath9k_hw_numtxpending(struct ath_hw *ah, u32 q)
Definition ath9k_mac.c:64
void ath9k_hw_abortpcurecv(struct ath_hw *ah)
Definition ath9k_mac.c:533
void ath9k_hw_disable_interrupts(struct ath_hw *ah)
Definition ath9k_mac.c:604
void ath9k_hw_puttxbuf(struct ath_hw *ah, u32 q, u32 txdp)
Definition ath9k_mac.c:52
int ath9k_hw_releasetxqueue(struct ath_hw *ah, u32 q)
Definition ath9k_mac.c:261
void ath9k_hw_abort_tx_dma(struct ath_hw *ah)
Definition ath9k_mac.c:131
int ath9k_hw_stopdmarecv(struct ath_hw *ah, int *reset)
Definition ath9k_mac.c:538
void ath9k_hw_txstart(struct ath_hw *ah, u32 q)
Definition ath9k_mac.c:57
static void ath9k_hw_set_txq_interrupts(struct ath_hw *ah, struct ath9k_tx_queue_info *qi __unused)
Definition ath9k_mac.c:27
int ath9k_hw_rxprocdesc(struct ath_hw *ah, struct ath_desc *ds, struct ath_rx_status *rs, u64 tsf __unused)
Definition ath9k_mac.c:396
void ath9k_hw_startpcureceive(struct ath_hw *ah, int is_scanning)
Definition ath9k_mac.c:526
void ath9k_hw_gettxintrtxqs(struct ath_hw *ah, u32 *txqs)
Definition ath9k_mac.c:158
int ath9k_hw_updatetxtriglevel(struct ath_hw *ah, int bIncTrigLevel)
ath9k_hw_updatetxtriglevel - adjusts the frame trigger level
Definition ath9k_mac.c:103
int ath9k_hw_resettxqueue(struct ath_hw *ah, u32 q)
Definition ath9k_mac.c:285
int ath9k_hw_set_txq_props(struct ath_hw *ah, int q, const struct ath9k_tx_queue_info *qinfo)
Definition ath9k_mac.c:164
int ath9k_hw_setrxabort(struct ath_hw *ah, int set)
Definition ath9k_mac.c:492
#define min(x, y)
Definition ath.h:36
uint32_t type
Operating system type.
Definition ena.h:1
#define __unused
Declare a variable or data structure as unused.
Definition compiler.h:573
#define DBG2(...)
Definition compiler.h:515
#define DBG(...)
Print a debugging message.
Definition compiler.h:498
#define EINPROGRESS
Operation in progress.
Definition errno.h:419
#define FILE_SECBOOT(_status)
Declare a file's UEFI Secure Boot permission status.
Definition compiler.h:926
@ ATH9K_HW_CAP_AUTOSLEEP
Definition hw.h:185
#define AH_TIME_QUANTUM
Definition hw.h:148
#define ATH9K_RSSI_BAD
Definition hw.h:73
#define REGWRITE_BUFFER_FLUSH(_ah)
Definition hw.h:96
#define REG_WRITE(_ah, _reg, _val)
Definition hw.h:78
#define SM(_v, _f)
Definition hw.h:102
#define MS(_v, _f)
Definition hw.h:103
#define REG_READ(_ah, _reg)
Definition hw.h:81
#define AH_WAIT_TIMEOUT
Definition hw.h:146
#define ENABLE_REGWRITE_BUFFER(_ah)
Definition hw.h:90
#define REG_CLR_BIT(_a, _r, _f)
Definition hw.h:110
ath9k_int
Definition hw.h:252
@ ATH9K_INT_CST
Definition hw.h:278
@ ATH9K_INT_GENTIMER
Definition hw.h:277
@ ATH9K_INT_RX
Definition hw.h:253
@ ATH9K_INT_GTT
Definition hw.h:279
@ ATH9K_INT_COMMON
Definition hw.h:287
@ ATH9K_INT_CABEND
Definition hw.h:275
@ ATH9K_INT_TX
Definition hw.h:260
@ ATH9K_INT_DTIM
Definition hw.h:272
@ ATH9K_INT_DTIMSYNC
Definition hw.h:273
@ ATH9K_INT_TIM
Definition hw.h:271
@ ATH9K_INT_BMISC
Definition hw.h:282
@ ATH9K_INT_TSFOOR
Definition hw.h:276
@ ATH9K_INT_TIM_TIMER
Definition hw.h:262
@ ATH9K_INT_GLOBAL
Definition hw.h:281
#define REG_SET_BIT(_a, _r, _f)
Definition hw.h:108
iPXE I/O API
uint64_t u64
Definition stdint.h:26
void * memset(void *dest, int character, size_t len) __nonnull
uint32_t ds
Definition librm.h:5
#define AR_RxKeyIdxValid
Definition mac.h:564
#define AR_KeyIdx
Definition mac.h:565
#define AR_RxAntenna
Definition mac.h:540
#define MIN_TX_FIFO_THRESHOLD
Definition mac.h:102
#define ATH9K_TXQ_USEDEFAULT
Definition mac.h:598
#define ATH9K_RXERR_DECRYPT
Definition mac.h:193
#define AR_RxRSSIAnt10
Definition mac.h:543
#define AR_PHYErr
Definition mac.h:560
#define AR_RxMore
Definition mac.h:528
#define ATH9K_RX_DELIM_CRC_POST
Definition mac.h:201
#define AR_DecryptBusyErr
Definition mac.h:573
#define INIT_CWMIN_11B
Definition mac.h:73
#define AR_2040
Definition mac.h:536
#define AR_RxMoreAggr
Definition mac.h:569
#define AR_RxRSSIAnt01
Definition mac.h:519
#define AR_RxRSSICombined
Definition mac.h:549
#define ATH9K_RXERR_MIC
Definition mac.h:194
#define AR_KeyMiss
Definition mac.h:574
#define AR_RxAggr
Definition mac.h:570
#define ATH9K_RX_GI
Definition mac.h:198
#define AR_RxRSSIAnt12
Definition mac.h:547
#define INIT_SH_RETRY
Definition mac.h:75
#define INIT_AIFS
Definition mac.h:71
#define AR_GI
Definition mac.h:535
ath9k_tx_queue
Definition mac.h:576
@ ATH9K_TX_QUEUE_INACTIVE
Definition mac.h:577
#define AR_CRCErr
Definition mac.h:558
#define AR5416DESC(_ds)
Definition mac.h:319
#define AR_RxRSSIAnt02
Definition mac.h:521
#define INIT_LG_RETRY
Definition mac.h:76
#define RXSTATUS_RATE(ah, ads)
Definition mac.h:28
#define ATH9K_RXERR_CRC
Definition mac.h:190
#define AR_MichaelErr
Definition mac.h:561
#define ATH9K_NUM_TX_QUEUES
Definition mac.h:581
#define AR_RxRSSIAnt11
Definition mac.h:545
#define AR_PostDelimCRCErr
Definition mac.h:571
#define AR_PHYErrCode
Definition mac.h:567
#define ATH9K_TXQ_USE_LOCKOUT_BKOFF_DIS
Definition mac.h:599
#define AR_DecryptCRCErr
Definition mac.h:559
@ TXQ_FLAG_RDYTIME_EXP_POLICY_ENABLE
Definition mac.h:594
@ TXQ_FLAG_BACKOFF_DISABLE
Definition mac.h:592
@ TXQ_FLAG_TXERRINT_ENABLE
Definition mac.h:588
@ TXQ_FLAG_TXDESCINT_ENABLE
Definition mac.h:589
@ TXQ_FLAG_FRAG_BURST_BACKOFF_ENABLE
Definition mac.h:595
@ TXQ_FLAG_TXEOLINT_ENABLE
Definition mac.h:590
@ TXQ_FLAG_TXURNINT_ENABLE
Definition mac.h:591
@ TXQ_FLAG_TXOKINT_ENABLE
Definition mac.h:587
#define AR_DataLen
Definition mac.h:527
#define INIT_SSH_RETRY
Definition mac.h:77
#define INIT_CWMIN
Definition mac.h:72
#define ATH9K_RXKEYIX_INVALID
Definition mac.h:204
#define ATH9K_RXERR_PHY
Definition mac.h:191
#define INIT_CWMAX
Definition mac.h:74
#define INIT_SLG_RETRY
Definition mac.h:78
#define AR_RxDone
Definition mac.h:556
#define AR_RxRSSIAnt00
Definition mac.h:517
#define AR_RxFrameOK
Definition mac.h:557
#define ATH9K_RX_DECRYPT_BUSY
Definition mac.h:202
#define ATH9K_RX_DELIM_CRC_PRE
Definition mac.h:200
#define AR_PreDelimCRCErr
Definition mac.h:562
#define ATH9K_RX_2040
Definition mac.h:199
static unsigned int unsigned int reg
Definition myson.h:162
struct option_descriptor set[0]
Definition nvo_cmd.c:112
uint8_t ah
Definition registers.h:1
@ rxdp
Definition sis900.h:32
@ txcfg
Definition sis900.h:31
@ txdp
Definition sis900.h:30
struct ar5416_desc::@121210011246275171146040323047134135046230216042::@153207345350322213010257355102112176136022331213 rx
union ar5416_desc::@121210011246275171146040323047134135046230216042 u
struct net80211_channel * chan
Definition hw.h:348
u32 tqi_cbrOverflowLimit
Definition mac.h:627
enum ath9k_tx_queue_flags tqi_qflags
Definition mac.h:619
enum ath9k_tx_queue tqi_type
Definition mac.h:617
u32 tqi_physCompBuf
Definition mac.h:630
Definition hw.h:657
u8 rs_flags
Definition mac.h:156
int8_t rs_rssi_ext1
Definition mac.h:151
u8 rs_rate
Definition mac.h:144
u8 rs_more
Definition mac.h:146
int8_t rs_rssi_ctl1
Definition mac.h:148
u8 rs_status
Definition mac.h:140
int8_t rs_rssi_ext2
Definition mac.h:152
u8 rs_moreaggr
Definition mac.h:154
int8_t rs_rssi_ext0
Definition mac.h:150
int8_t rs_rssi_ctl0
Definition mac.h:147
u8 rs_phyerr
Definition mac.h:141
u8 rs_antenna
Definition mac.h:145
u8 rs_isaggr
Definition mac.h:153
u16 rs_datalen
Definition mac.h:139
u8 rs_keyix
Definition mac.h:143
int8_t rs_rssi_ctl2
Definition mac.h:149
u32 rs_tstamp
Definition mac.h:138
int8_t rs_rssi
Definition mac.h:142
void udelay(unsigned long usecs)
Delay for a fixed number of microseconds.
Definition timer.c:61
#define u32
Definition vga.h:21