if_athvar.h
来自「madwifi上的atheros无线网卡驱动源码」· C头文件 代码 · 共 1,040 行 · 第 1/3 页
H
1,040 行
#define ATH_NODE_CONST(ni) ((const struct ath_node *)(ni))#define ATH_NODE_UAPSD_LOCK_INIT(_an) spin_lock_init(&(_an)->an_uapsd_lock)#define ATH_NODE_UAPSD_LOCK(_an) spin_lock(&(_an)->an_uapsd_lock)#define ATH_NODE_UAPSD_UNLOCK(_an) spin_unlock(&(_an)->an_uapsd_lock)#define ATH_NODE_UAPSD_LOCK_IRQ(_an) do { \ unsigned long __an_uapsd_lockflags; \ spin_lock_irqsave(&(_an)->an_uapsd_lock, __an_uapsd_lockflags);#define ATH_NODE_UAPSD_UNLOCK_IRQ(_an) \ spin_unlock_irqrestore(&(_an)->an_uapsd_lock, __an_uapsd_lockflags); \} while (0)#define ATH_NODE_UAPSD_UNLOCK_IRQ_EARLY(_an) \ spin_unlock_irqrestore(&(_an)->an_uapsd_lock, __an_uapsd_lockflags);#define ATH_RSSI_LPF_LEN 10#define ATH_RSSI_DUMMY_MARKER 0x127#define ATH_EP_MUL(x, mul) ((x) * (mul))#define ATH_RSSI_IN(x) (ATH_EP_MUL((x), HAL_RSSI_EP_MULTIPLIER))#define ATH_LPF_RSSI(x, y, len) \ ((x != ATH_RSSI_DUMMY_MARKER) ? (((x) * ((len) - 1) + (y)) / (len)) : (y))#define ATH_RSSI_LPF(x, y) do { \ if ((y) >= -20) \ x = ATH_LPF_RSSI((x), ATH_RSSI_IN((y)), ATH_RSSI_LPF_LEN); \} while (0)#define ATH_ANTENNA_DIFF 2 /* Num frames difference in * tx to flip default recv * antenna */struct ath_buf { /* FFXXX: convert both list types to TAILQ to save a field? */ STAILQ_ENTRY(ath_buf) bf_list;#ifdef ATH_SUPERG_FF TAILQ_ENTRY(ath_buf) bf_stagelist; /* fast-frame staging list */#endif struct ath_desc *bf_desc; /* virtual addr of desc */ dma_addr_t bf_daddr; /* physical addr of desc */ struct sk_buff *bf_skb; /* skbuff for buf */ dma_addr_t bf_skbaddr; /* physical addr of skb data */ struct ieee80211_node *bf_node; /* pointer to the node */ u_int32_t bf_status; /* status flags */ u_int16_t bf_flags; /* tx descriptor flags */#ifdef ATH_SUPERG_FF /* XXX: combine this with bf_skbaddr if it ever changes to accommodate * multiple segments. */ u_int16_t bf_numdesc; /* number of descs used */ u_int32_t bf_queueage; /* "age" of txq when this buffer placed on stageq */ dma_addr_t bf_skbaddrff[ATH_TXDESC-1]; /* extra addrs for ff */#endif};/* * reset the rx buffer. * any new fields added to the athbuf and require * reset need to be added to this macro. * currently bf_status is the only one requires that * requires reset. */#define ATH_RXBUF_RESET(bf) bf->bf_status=0/* XXX: only managed for rx at the moment */#define ATH_BUFSTATUS_DONE 0x00000001 /* hw processing complete, desc processed by hal *//* * DMA state for tx/rx descriptors. */struct ath_descdma { const char *dd_name; struct ath_desc *dd_desc; /* descriptors */ dma_addr_t dd_desc_paddr; /* physical addr of dd_desc */ size_t dd_desc_len; /* size of dd_desc */ struct ath_buf *dd_bufptr; /* associated buffers */};struct ath_hal;struct ath_desc;struct ath_ratectrl;struct ath_tx99;struct proc_dir_entry;/* * Data transmit queue state. One of these exists for each * hardware transmit queue. Packets sent to us from above * are assigned to queues based on their priority. Not all * devices support a complete set of hardware transmit queues. * For those devices the array sc_ac2q will map multiple * priorities to fewer hardware queues (typically all to one * hardware queue). */struct ath_txq { u_int axq_qnum; /* hardware q number */ u_int32_t *axq_link; /* link ptr in last TX desc */ STAILQ_HEAD(, ath_buf) axq_q; /* transmit queue */ spinlock_t axq_lock; /* lock on q and link */ int axq_depth; /* queue depth */ u_int32_t axq_totalqueued; /* total ever queued */ u_int axq_intrcnt; /* count to determine if descriptor * should generate int on this txq. */ /* * Staging queue for frames awaiting a fast-frame pairing. */ TAILQ_HEAD(axq_headtype, ath_buf) axq_stageq; /* scratch compression buffer */ char *axq_compbuf; /* scratch comp buffer */ dma_addr_t axq_compbufp; /* scratch comp buffer (phys)*/ u_int axq_compbufsz; /* scratch comp buffer size */};/* driver-specific vap state */struct ath_vap { struct ieee80211vap av_vap; /* base class */ int (*av_newstate)(struct ieee80211vap *, enum ieee80211_state, int); /* XXX beacon state */ struct ath_buf *av_bcbuf; /* beacon buffer */ struct ieee80211_beacon_offsets av_boff;/* dynamic update state */ int av_bslot; /* beacon slot index */ struct ath_txq av_mcastq; /* multicast transmit queue */ u_int8_t av_dfswait_run;};#define ATH_VAP(_v) ((struct ath_vap *)(_v))#define ATH_BEACON_AIFS_DEFAULT 0 /* Default aifs for ap beacon q */#define ATH_BEACON_CWMIN_DEFAULT 0 /* Default cwmin for ap beacon q */#define ATH_BEACON_CWMAX_DEFAULT 0 /* Default cwmax for ap beacon q */#define ATH_TXQ_INTR_PERIOD 5 /* axq_intrcnt period for intr gen */#define ATH_TXQ_LOCK_INIT(_tq) spin_lock_init(&(_tq)->axq_lock)#define ATH_TXQ_LOCK_DESTROY(_tq) #define ATH_TXQ_LOCK(_tq) spin_lock(&(_tq)->axq_lock)#define ATH_TXQ_UNLOCK(_tq) spin_unlock(&(_tq)->axq_lock)#define ATH_TXQ_LOCK_BH(_tq) spin_lock_bh(&(_tq)->axq_lock)#define ATH_TXQ_UNLOCK_BH(_tq) spin_unlock_bh(&(_tq)->axq_lock)#define ATH_TXQ_LOCK_IRQ(_tq) do { \ unsigned long __axq_lockflags; \ spin_lock_irqsave(&(_tq)->axq_lock, __axq_lockflags);#define ATH_TXQ_UNLOCK_IRQ(_tq) \ spin_unlock_irqrestore(&(_tq)->axq_lock, __axq_lockflags); \} while (0)#define ATH_TXQ_UNLOCK_IRQ_EARLY(_tq) \ spin_unlock_irqrestore(&(_tq)->axq_lock, __axq_lockflags);#define ATH_TXQ_UAPSDQ_LOCK_IRQ(_tq) spin_lock_irqsave(&(_tq)->axq_lock, uapsdq_lockflags)#define ATH_TXQ_UAPSDQ_UNLOCK_IRQ(_tq) spin_unlock_irqrestore(&(_tq)->axq_lock, uapsdq_lockflags)#define ATH_TXQ_LOCK_ASSERT(_tq) \ KASSERT(spin_is_locked(&(_tq)->axq_lock), ("txq not locked!"))#define ATH_TXQ_INSERT_TAIL(_tq, _elm, _field) do { \ STAILQ_INSERT_TAIL( &(_tq)->axq_q, (_elm), _field); \ (_tq)->axq_depth++; \ (_tq)->axq_totalqueued++; \} while (0)#define ATH_TXQ_REMOVE_HEAD(_tq, _field) do { \ STAILQ_REMOVE_HEAD(&(_tq)->axq_q, _field); \ (_tq)->axq_depth--; \} while (0)/* move buffers from MCASTQ to CABQ */#define ATH_TXQ_MOVE_MCASTQ(_tqs,_tqd) do { \ (_tqd)->axq_depth += (_tqs)->axq_depth; \ (_tqd)->axq_totalqueued += (_tqs)->axq_totalqueued; \ (_tqd)->axq_link = (_tqs)->axq_link; \ STAILQ_CONCAT(&(_tqd)->axq_q,&(_tqs)->axq_q); \ (_tqs)->axq_depth=0; \ (_tqs)->axq_totalqueued = 0; \ (_tqs)->axq_link = NULL; \} while (0)/* * concat buffers from one queue to other */#define ATH_TXQ_MOVE_Q(_tqs,_tqd) ATH_TXQ_MOVE_MCASTQ(_tqs,_tqd)#define BSTUCK_THRESH 10 /* # of stuck beacons before resetting NB: this is a guess*/struct ath_softc { struct ieee80211com sc_ic; /* NB: must be first */ struct net_device *sc_dev; void __iomem *sc_iobase; /* address of the device */ struct semaphore sc_lock; /* dev-level lock */ struct net_device_stats sc_devstats; /* device statistics */ struct ath_stats sc_stats; /* private statistics */ int devid; int sc_debug; void (*sc_recv_mgmt)(struct ieee80211_node *, struct sk_buff *, int, int, u_int32_t); void (*sc_node_cleanup)(struct ieee80211_node *); void (*sc_node_free)(struct ieee80211_node *); void *sc_bdev; /* associated bus device */ struct ath_hal *sc_ah; /* Atheros HAL */ struct ath_ratectrl *sc_rc; /* tx rate control support */ struct ath_tx99 *sc_tx99; /* tx99 support */ void (*sc_setdefantenna)(struct ath_softc *, u_int); unsigned int sc_invalid:1; /* being detached */ unsigned int sc_mrretry:1; /* multi-rate retry support */ unsigned int sc_softled:1; /* enable LED gpio status */ unsigned int sc_splitmic:1; /* split TKIP MIC keys */ unsigned int sc_needmib:1; /* enable MIB stats intr */ unsigned int sc_hasdiversity:1; /* rx diversity available */ unsigned int sc_diversity:1; /* enable rx diversity */ unsigned int sc_olddiversity:1; /* diversity setting before XR enable */ unsigned int sc_hasveol:1; /* tx VEOL support */ unsigned int sc_hastpc:1; /* per-packet TPC support */ unsigned int sc_dturbo:1; /* dynamic turbo capable */ unsigned int sc_dturbo_switch:1; /* turbo switch mode*/ unsigned int sc_dturbo_hold:1; /* dynamic turbo hold state */ unsigned int sc_rate_recn_state:1; /* dynamic turbo state recmded by ratectrl */ unsigned int sc_ignore_ar:1; /* ignore AR during transition */ unsigned int sc_ledstate:1; /* LED on/off state */ unsigned int sc_blinking:1; /* LED blink operation active */ unsigned int sc_beacons:1; /* beacons running */ unsigned int sc_hasbmask:1; /* bssid mask support */ unsigned int sc_mcastkey:1; /* mcast key cache search */ unsigned int sc_hastsfadd:1; /* tsf adjust support */ unsigned int sc_scanning:1; /* scanning active */ unsigned int sc_nostabeacons:1; /* no beacons for station */ unsigned int sc_xrgrppoll:1; /* xr group polls are active */ unsigned int sc_syncbeacon:1; /* sync/resync beacon timers */ unsigned int sc_hasclrkey:1; /* CLR key supported */ unsigned int sc_devstopped:1; /* stopped due to of no tx bufs */ unsigned int sc_stagbeacons:1; /* use staggered beacons */ unsigned int sc_rtasksched:1; /* radar task is scheduled */ unsigned int sc_dfswait:1; /* waiting on channel for radar detect */ unsigned int sc_dfstest:1; /* Test timer in progress */ unsigned int sc_ackrate:1; /* send acks at high bitrate */ unsigned int sc_hasintmit:1; /* Has interference mitigation */ unsigned int sc_useintmit:1; /* Use interference mitigation (ANI) */ /* rate tables */ const HAL_RATE_TABLE *sc_rates[IEEE80211_MODE_MAX]; const HAL_RATE_TABLE *sc_currates; /* current rate table */ const HAL_RATE_TABLE *sc_xr_rates; /* XR rate table */ const HAL_RATE_TABLE *sc_half_rates; /* half rate table */ const HAL_RATE_TABLE *sc_quarter_rates; /* quarter rate table */ HAL_OPMODE sc_opmode; /* current hal operating mode */ enum ieee80211_phymode sc_curmode; /* current phy mode */ u_int16_t sc_curtxpow; /* current tx power limit */ u_int16_t sc_curaid; /* current association id */ HAL_CHANNEL sc_curchan; /* current h/w channel */ u_int8_t sc_curbssid[IEEE80211_ADDR_LEN]; u_int8_t sc_rixmap[256]; /* IEEE to h/w rate table ix */ struct { u_int8_t ieeerate; /* IEEE rate */ u_int8_t flags; /* radiotap flags */ u_int16_t ledon; /* softled on time */ u_int16_t ledoff; /* softled off time */ } sc_hwmap[32]; /* h/w rate ix mappings */ u_int8_t sc_minrateix; /* min h/w rate index */ u_int8_t sc_protrix; /* protection rate index */ u_int8_t sc_mcastantenna; /* Multicast antenna number */ u_int8_t sc_txantenna; /* data tx antenna (fixed or auto) */ u_int8_t sc_dfstest_ieeechan; /* IEEE channel number to return to after a dfs mute test */ u_int32_t sc_dfstesttime; /* Time to stay off chan during dfs test */ u_int16_t sc_nvaps; /* # of active virtual ap's */ u_int8_t sc_nstavaps; /* # of active station vaps */ u_int8_t sc_nmonvaps; /* # of monitor vaps */ u_int8_t sc_nbcnvaps; /* # of vaps sending beacons */ u_int sc_fftxqmin; /* aggregation threshold */ HAL_INT sc_imask; /* interrupt mask copy */ u_int sc_keymax; /* size of key cache */ u_int8_t sc_keymap[ATH_KEYBYTES]; /* key use bit map */ struct ieee80211_node *sc_keyixmap[ATH_KEYMAX];/* key ix->node map */ u_int8_t sc_bssidmask[IEEE80211_ADDR_LEN]; u_int sc_ledpin; /* GPIO pin for driving LED */ u_int sc_ledon; /* pin setting for LED on */ u_int sc_ledidle; /* idle polling interval */ int sc_ledevent; /* time of last LED event */ u_int8_t sc_rxrate; /* current rx rate for LED */ u_int8_t sc_txrate; /* current tx rate for LED */ u_int16_t sc_ledoff; /* off time for current blink */ struct timer_list sc_ledtimer; /* led off timer */ struct timer_list sc_dfswaittimer; /* dfs wait timer */ struct timer_list sc_dfstesttimer; /* dfs mute test timer */ struct ATH_TQ_STRUCT sc_fataltq; /* fatal error intr tasklet */ int sc_rxbufsize; /* rx size based on mtu */ struct ath_descdma sc_rxdma; /* RX descriptors */ ath_bufhead sc_rxbuf; /* receive buffer */ struct ath_buf *sc_rxbufcur; /* current rx buffer */ u_int32_t *sc_rxlink; /* link ptr in last RX desc */ spinlock_t sc_rxbuflock; struct ATH_TQ_STRUCT sc_rxtq; /* rx intr tasklet */ struct ATH_TQ_STRUCT sc_rxorntq; /* rxorn intr tasklet */ u_int8_t sc_defant; /* current default antenna */ u_int8_t sc_rxotherant; /* rx's on non-default antenna*/ u_int16_t sc_cachelsz; /* cache line size */ struct ath_descdma sc_txdma; /* TX descriptors */ ath_bufhead sc_txbuf; /* transmit buffer */ spinlock_t sc_txbuflock; /* txbuf lock */ u_int sc_txqsetup; /* h/w queues setup */ u_int sc_txintrperiod; /* tx interrupt batching */ struct ath_txq sc_txq[HAL_NUM_TX_QUEUES]; struct ath_txq *sc_ac2q[WME_NUM_AC]; /* WME AC -> h/w qnum */ struct ATH_TQ_STRUCT sc_txtq; /* tx intr tasklet */ u_int8_t sc_grppoll_str[GRPPOLL_RATE_STR_LEN]; struct ath_descdma sc_bdma; /* beacon descriptors */ ath_bufhead sc_bbuf; /* beacon buffers */ u_int sc_bhalq; /* HAL q for outgoing beacons */ u_int sc_bmisscount; /* missed beacon transmits */ u_int32_t sc_ant_tx[8]; /* recent tx frames/antenna */ struct ath_txq *sc_cabq; /* tx q for cab frames */ struct ath_txq sc_grpplq; /* tx q for XR group polls */ struct ath_txq *sc_xrtxq; /* tx q for XR data */ struct ath_descdma sc_grppolldma; /* TX descriptors for grppoll */ ath_bufhead sc_grppollbuf; /* transmit buffers for grouppoll */ u_int16_t sc_xrpollint; /* xr poll interval */ u_int16_t sc_xrpollcount; /* xr poll count */ struct ath_txq *sc_uapsdq; /* tx q for uapsd */ struct ATH_TQ_STRUCT sc_bmisstq; /* bmiss intr tasklet */ struct ATH_TQ_STRUCT sc_bstucktq; /* beacon stuck intr tasklet */ enum { OK, /* no change needed */ UPDATE, /* update pending */ COMMIT /* beacon sent, commit change */ } sc_updateslot; /* slot time update fsm */ int sc_slotupdate; /* slot to next advance fsm */ struct ieee80211vap **sc_bslot; /* beacon xmit slots */ int sc_bnext; /* next slot for beacon xmit */ struct timer_list sc_cal_ch; /* calibration timer */ HAL_NODE_STATS sc_halstats; /* station-mode rssi stats */ struct work_struct sc_radartask; /* Schedule task for DFS handling */ struct ctl_table_header *sc_sysctl_header; struct ctl_table *sc_sysctls; u_int16_t sc_reapcount; /* # of tx buffers reaped after net dev stopped */#ifdef ATH_SUPERG_DYNTURBO struct timer_list sc_dturbo_switch_mode;/* AP scan timer */ u_int32_t sc_dturbo_tcount; /* beacon intval count */ u_int32_t sc_dturbo_hold_max; /* hold count before switching to base*/ u_int16_t sc_dturbo_hold_count; /* hold count before switching to base*/ u_int16_t sc_dturbo_turbo_tmin; /* min turbo count */ u_int32_t sc_dturbo_bytes; /* bandwidth stats */ u_int32_t sc_dturbo_base_tmin; /* min time in base */ u_int32_t sc_dturbo_turbo_tmax; /* max time in turbo */ u_int32_t sc_dturbo_bw_base; /* bandwidth threshold */ u_int32_t sc_dturbo_bw_turbo; /* bandwidth threshold */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?