[BACK]Return to athvar.h CVS log [TXT][DIR] Up to [local] / sys / dev / ic

Annotation of sys/dev/ic/athvar.h, Revision 1.1.1.1

1.1       nbrk        1: /*      $OpenBSD: athvar.h,v 1.20 2007/06/06 21:41:32 reyk Exp $  */
                      2: /*     $NetBSD: athvar.h,v 1.10 2004/08/10 01:03:53 dyoung Exp $       */
                      3:
                      4: /*-
                      5:  * Copyright (c) 2002-2004 Sam Leffler, Errno Consulting
                      6:  * All rights reserved.
                      7:  *
                      8:  * Redistribution and use in source and binary forms, with or without
                      9:  * modification, are permitted provided that the following conditions
                     10:  * are met:
                     11:  * 1. Redistributions of source code must retain the above copyright
                     12:  *    notice, this list of conditions and the following disclaimer,
                     13:  *    without modification.
                     14:  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
                     15:  *    similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
                     16:  *    redistribution must be conditioned upon including a substantially
                     17:  *    similar Disclaimer requirement for further binary redistribution.
                     18:  * 3. Neither the names of the above-listed copyright holders nor the names
                     19:  *    of any contributors may be used to endorse or promote products derived
                     20:  *    from this software without specific prior written permission.
                     21:  *
                     22:  * NO WARRANTY
                     23:  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
                     24:  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
                     25:  * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
                     26:  * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
                     27:  * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
                     28:  * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
                     29:  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
                     30:  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
                     31:  * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
                     32:  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
                     33:  * THE POSSIBILITY OF SUCH DAMAGES.
                     34:  *
                     35:  * $FreeBSD: src/sys/dev/ath/if_athvar.h,v 1.14 2004/04/03 03:33:02 sam Exp $
                     36:  */
                     37:
                     38: /*
                     39:  * Definitions for the Atheros Wireless LAN controller driver.
                     40:  */
                     41: #ifndef _DEV_ATH_ATHVAR_H
                     42: #define _DEV_ATH_ATHVAR_H
                     43:
                     44: #include <net80211/ieee80211_radiotap.h>
                     45: #include <dev/ic/ar5xxx.h>
                     46:
                     47: #ifdef notyet
                     48: #include "gpio.h"
                     49: #endif
                     50:
                     51: #define        ATH_TIMEOUT             1000
                     52:
                     53: #define        ATH_RXBUF       40              /* number of RX buffers */
                     54: #define        ATH_TXBUF       60              /* number of TX buffers */
                     55: #define        ATH_TXDESC      8               /* number of descriptors per buffer */
                     56: #define ATH_MAXGPIO    10              /* maximal number of gpio pins */
                     57:
                     58: struct ath_recv_hist {
                     59:        int             arh_ticks;      /* sample time by system clock */
                     60:        u_int8_t        arh_rssi;       /* rssi */
                     61:        u_int8_t        arh_antenna;    /* antenna */
                     62: };
                     63: #define        ATH_RHIST_SIZE          16      /* number of samples */
                     64: #define        ATH_RHIST_NOTIME        (~0)
                     65:
                     66: /*
                     67:  * Ioctl-related definitions for the Atheros Wireless LAN controller driver.
                     68:  */
                     69: struct ath_stats {
                     70:        u_int32_t       ast_watchdog;   /* device reset by watchdog */
                     71:        u_int32_t       ast_hardware;   /* fatal hardware error interrupts */
                     72:        u_int32_t       ast_bmiss;      /* beacon miss interrupts */
                     73:        u_int32_t       ast_mib;        /* MIB counter interrupts */
                     74:        u_int32_t       ast_rxorn;      /* rx overrun interrupts */
                     75:        u_int32_t       ast_rxeol;      /* rx eol interrupts */
                     76:        u_int32_t       ast_txurn;      /* tx underrun interrupts */
                     77:        u_int32_t       ast_intrcoal;   /* interrupts coalesced */
                     78:        u_int32_t       ast_tx_mgmt;    /* management frames transmitted */
                     79:        u_int32_t       ast_tx_discard; /* frames discarded prior to assoc */
                     80:        u_int32_t       ast_tx_qstop;   /* output stopped 'cuz no buffer */
                     81:        u_int32_t       ast_tx_encap;   /* tx encapsulation failed */
                     82:        u_int32_t       ast_tx_nonode;  /* tx failed 'cuz no node */
                     83:        u_int32_t       ast_tx_nombuf;  /* tx failed 'cuz no mbuf */
                     84:        u_int32_t       ast_tx_nomcl;   /* tx failed 'cuz no cluster */
                     85:        u_int32_t       ast_tx_linear;  /* tx linearized to cluster */
                     86:        u_int32_t       ast_tx_nodata;  /* tx discarded empty frame */
                     87:        u_int32_t       ast_tx_busdma;  /* tx failed for dma resrcs */
                     88:        u_int32_t       ast_tx_xretries;/* tx failed 'cuz too many retries */
                     89:        u_int32_t       ast_tx_fifoerr; /* tx failed 'cuz FIFO underrun */
                     90:        u_int32_t       ast_tx_filtered;/* tx failed 'cuz xmit filtered */
                     91:        u_int32_t       ast_tx_shortretry;/* tx on-chip retries (short) */
                     92:        u_int32_t       ast_tx_longretry;/* tx on-chip retries (long) */
                     93:        u_int32_t       ast_tx_badrate; /* tx failed 'cuz bogus xmit rate */
                     94:        u_int32_t       ast_tx_noack;   /* tx frames with no ack marked */
                     95:        u_int32_t       ast_tx_rts;     /* tx frames with rts enabled */
                     96:        u_int32_t       ast_tx_cts;     /* tx frames with cts enabled */
                     97:        u_int32_t       ast_tx_shortpre;/* tx frames with short preamble */
                     98:        u_int32_t       ast_tx_altrate; /* tx frames with alternate rate */
                     99:        u_int32_t       ast_tx_protect; /* tx frames with protection */
                    100:        u_int32_t       ast_rx_nombuf;  /* rx setup failed 'cuz no mbuf */
                    101:        u_int32_t       ast_rx_busdma;  /* rx setup failed for dma resrcs */
                    102:        u_int32_t       ast_rx_orn;     /* rx failed 'cuz of desc overrun */
                    103:        u_int32_t       ast_rx_crcerr;  /* rx failed 'cuz of bad CRC */
                    104:        u_int32_t       ast_rx_fifoerr; /* rx failed 'cuz of FIFO overrun */
                    105:        u_int32_t       ast_rx_badcrypt;/* rx failed 'cuz decryption */
                    106:        u_int32_t       ast_rx_phyerr;  /* rx failed 'cuz of PHY err */
                    107:        u_int32_t       ast_rx_phy[32]; /* rx PHY error per-code counts */
                    108:        u_int32_t       ast_rx_tooshort;/* rx discarded 'cuz frame too short */
                    109:        u_int32_t       ast_rx_toobig;  /* rx discarded 'cuz frame too large */
                    110:        u_int32_t       ast_rx_ctl;     /* rx discarded 'cuz ctl frame */
                    111:        u_int32_t       ast_be_nombuf;  /* beacon setup failed 'cuz no mbuf */
                    112:        u_int32_t       ast_per_cal;    /* periodic calibration calls */
                    113:        u_int32_t       ast_per_calfail;/* periodic calibration failed */
                    114:        u_int32_t       ast_per_rfgain; /* periodic calibration rfgain reset */
                    115:        u_int32_t       ast_rate_calls; /* rate control checks */
                    116:        u_int32_t       ast_rate_raise; /* rate control raised xmit rate */
                    117:        u_int32_t       ast_rate_drop;  /* rate control dropped xmit rate */
                    118: };
                    119:
                    120: #define        SIOCGATHSTATS   _IOWR('i', 137, struct ifreq)
                    121:
                    122: /*
                    123:  * Radio capture format.
                    124:  */
                    125: #define ATH_RX_RADIOTAP_PRESENT (              \
                    126:        (1 << IEEE80211_RADIOTAP_FLAGS)         | \
                    127:        (1 << IEEE80211_RADIOTAP_RATE)          | \
                    128:        (1 << IEEE80211_RADIOTAP_CHANNEL)       | \
                    129:        (1 << IEEE80211_RADIOTAP_ANTENNA)       | \
                    130:        (1 << IEEE80211_RADIOTAP_RSSI)          | \
                    131:        0)
                    132:
                    133: struct ath_rx_radiotap_header {
                    134:        struct ieee80211_radiotap_header wr_ihdr;
                    135:        u_int8_t        wr_flags;
                    136:        u_int8_t        wr_rate;
                    137:        u_int16_t       wr_chan_freq;
                    138:        u_int16_t       wr_chan_flags;
                    139:        u_int8_t        wr_antenna;
                    140:        u_int8_t        wr_rssi;
                    141:        u_int8_t        wr_max_rssi;
                    142: } __packed;
                    143:
                    144: #define ATH_TX_RADIOTAP_PRESENT (              \
                    145:        (1 << IEEE80211_RADIOTAP_FLAGS)         | \
                    146:        (1 << IEEE80211_RADIOTAP_RATE)          | \
                    147:        (1 << IEEE80211_RADIOTAP_CHANNEL)       | \
                    148:        (1 << IEEE80211_RADIOTAP_DBM_TX_POWER)  | \
                    149:        (1 << IEEE80211_RADIOTAP_ANTENNA)       | \
                    150:        (1 << IEEE80211_RADIOTAP_HWQUEUE)       | \
                    151:        0)
                    152:
                    153: struct ath_tx_radiotap_header {
                    154:        struct ieee80211_radiotap_header wt_ihdr;
                    155:        u_int8_t        wt_flags;
                    156:        u_int8_t        wt_rate;
                    157:        u_int16_t       wt_chan_freq;
                    158:        u_int16_t       wt_chan_flags;
                    159:        u_int8_t        wt_txpower;
                    160:        u_int8_t        wt_antenna;
                    161:        u_int8_t        wt_hwqueue;
                    162: } __packed;
                    163:
                    164: /*
                    165:  * driver-specific node
                    166:  */
                    167: struct ath_node {
                    168:        struct ieee80211_node           an_node;        /* base class */
                    169:        struct ieee80211_rssadapt       an_rssadapt;    /* rate adaption */
                    170:        u_int                           an_tx_antenna;  /* antenna for last good frame */
                    171:        u_int                           an_rx_antenna;  /* antenna for last rcvd frame */
                    172:        struct ath_recv_hist            an_rx_hist[ATH_RHIST_SIZE];
                    173:        u_int                           an_rx_hist_next;/* index of next ``free entry'' */
                    174: };
                    175: #define        ATH_NODE(_n)    ((struct ath_node *)(_n))
                    176:
                    177: struct ath_buf {
                    178:        TAILQ_ENTRY(ath_buf)            bf_list;
                    179:        bus_dmamap_t                    bf_dmamap;      /* DMA map of the buffer */
                    180: #define bf_nseg                                bf_dmamap->dm_nsegs
                    181: #define bf_mapsize                     bf_dmamap->dm_mapsize
                    182: #define bf_segs                                bf_dmamap->dm_segs
                    183:        struct ath_desc                 *bf_desc;       /* virtual addr of desc */
                    184:        bus_addr_t                      bf_daddr;       /* physical addr of desc */
                    185:        struct mbuf                     *bf_m;          /* mbuf for buf */
                    186:        struct ieee80211_node           *bf_node;       /* pointer to the node */
                    187:        struct ieee80211_rssdesc        bf_id;
                    188: #define        ATH_MAX_SCATTER                 64
                    189: };
                    190:
                    191: typedef struct ath_task {
                    192:        void    (*t_func)(void*, int);
                    193:        void    *t_context;
                    194: } ath_task_t;
                    195:
                    196: struct ath_softc {
                    197: #ifndef __FreeBSD__
                    198:        struct device           sc_dev;
                    199: #endif
                    200:        struct ieee80211com     sc_ic;          /* IEEE 802.11 common */
                    201: #ifndef __FreeBSD__
                    202:        int                     (*sc_enable)(struct ath_softc *);
                    203:        void                    (*sc_disable)(struct ath_softc *);
                    204:        void                    (*sc_power)(struct ath_softc *, int);
                    205: #endif
                    206:        int                     (*sc_newstate)(struct ieee80211com *,
                    207:                                        enum ieee80211_state, int);
                    208:        void                    (*sc_node_free)(struct ieee80211com *,
                    209:                                        struct ieee80211_node *);
                    210:        void                    (*sc_node_copy)(struct ieee80211com *,
                    211:                                        struct ieee80211_node *,
                    212:                                        const struct ieee80211_node *);
                    213:        void                    (*sc_recv_mgmt)(struct ieee80211com *,
                    214:                                    struct mbuf *, struct ieee80211_node *,
                    215:                                    int, int, u_int32_t);
                    216: #ifdef __FreeBSD__
                    217:        device_t                sc_dev;
                    218: #endif
                    219:        bus_space_tag_t         sc_st;          /* bus space tag */
                    220:        bus_space_handle_t      sc_sh;          /* bus space handle */
                    221:        bus_dma_tag_t           sc_dmat;        /* bus DMA tag */
                    222: #ifdef __FreeBSD__
                    223:        struct mtx              sc_mtx;         /* master lock (recursive) */
                    224: #endif
                    225:        struct ath_hal          *sc_ah;         /* Atheros HAL */
                    226:        unsigned int            sc_invalid : 1, /* disable hardware accesses */
                    227:                                sc_doani : 1,   /* dynamic noise immunity */
                    228:                                sc_veol : 1,    /* tx VEOL support */
                    229:                                sc_softled : 1, /* GPIO software LED */
                    230:                                sc_probing : 1, /* probing AP on beacon miss */
                    231:                                sc_64bit : 1;   /* indicates PCI Express */
                    232:        u_int                   sc_nchan;       /* number of valid channels */
                    233:        const HAL_RATE_TABLE    *sc_rates[IEEE80211_MODE_MAX];
                    234:        const HAL_RATE_TABLE    *sc_currates;   /* current rate table */
                    235:        enum ieee80211_phymode  sc_curmode;     /* current phy mode */
                    236:        u_int8_t                sc_rixmap[256]; /* IEEE to h/w rate table ix */
                    237:        u_int8_t                sc_hwmap[32];   /* h/w rate ix to IEEE table */
                    238:        HAL_INT                 sc_imask;       /* interrupt mask copy */
                    239:
                    240: #if NBPFILTER > 0
                    241:        caddr_t                 sc_drvbpf;
                    242:
                    243:        union {
                    244:                struct ath_rx_radiotap_header   th;
                    245:                uint8_t                         pad[IEEE80211_RADIOTAP_HDRLEN];
                    246:        }                       sc_rxtapu;
                    247: #define sc_rxtap               sc_rxtapu.th
                    248:        int                     sc_rxtap_len;
                    249:
                    250:        union {
                    251:                struct ath_tx_radiotap_header   th;
                    252:                uint8_t                         pad[IEEE80211_RADIOTAP_HDRLEN];
                    253:        }                       sc_txtapu;
                    254: #define sc_txtap               sc_txtapu.th
                    255:        int                     sc_txtap_len;
                    256: #endif
                    257:
                    258:        struct ath_desc         *sc_desc;       /* TX/RX descriptors */
                    259:        bus_dma_segment_t       sc_dseg;
                    260: #ifndef __NetBSD__
                    261:        int                     sc_dnseg;       /* number of segments */
                    262: #endif
                    263:        bus_dmamap_t            sc_ddmamap;     /* DMA map for descriptors */
                    264:        bus_addr_t              sc_desc_paddr;  /* physical addr of sc_desc */
                    265:        bus_addr_t              sc_desc_len;    /* size of sc_desc */
                    266:
                    267:        ath_task_t              sc_fataltask;   /* fatal int processing */
                    268:        ath_task_t              sc_rxorntask;   /* rxorn int processing */
                    269:
                    270:        TAILQ_HEAD(, ath_buf)   sc_rxbuf;       /* receive buffer */
                    271:        u_int32_t               *sc_rxlink;     /* link ptr in last RX desc */
                    272:        ath_task_t              sc_rxtask;      /* rx int processing */
                    273:
                    274:        u_int                   sc_txhalq[HAL_NUM_TX_QUEUES];   /* HAL q for outgoing frames */
                    275:        u_int32_t               *sc_txlink;     /* link ptr in last TX desc */
                    276:        int                     sc_tx_timer;    /* transmit timeout */
                    277:        TAILQ_HEAD(, ath_buf)   sc_txbuf;       /* transmit buffer */
                    278: #ifdef __FreeBSD__
                    279:        struct mtx              sc_txbuflock;   /* txbuf lock */
                    280: #endif
                    281:        TAILQ_HEAD(, ath_buf)   sc_txq;         /* transmitting queue */
                    282: #ifdef __FreeBSD__
                    283:        struct mtx              sc_txqlock;     /* lock on txq and txlink */
                    284: #endif
                    285:        ath_task_t              sc_txtask;      /* tx int processing */
                    286:
                    287:        u_int                   sc_bhalq;       /* HAL q for outgoing beacons */
                    288:        struct ath_buf          *sc_bcbuf;      /* beacon buffer */
                    289:        struct ath_buf          *sc_bufptr;     /* allocated buffer ptr */
                    290:        ath_task_t              sc_swbatask;    /* swba int processing */
                    291:        ath_task_t              sc_bmisstask;   /* bmiss int processing */
                    292:
                    293: #ifdef __OpenBSD__
                    294:        struct timeval          sc_last_ch;
                    295:        struct timeout          sc_cal_to;
                    296:        struct timeval          sc_last_beacon;
                    297:        struct timeout          sc_scan_to;
                    298:        struct timeout          sc_rssadapt_to;
                    299: #else
                    300:        struct callout          sc_cal_ch;      /* callout handle for cals */
                    301:        struct callout          sc_scan_ch;     /* callout handle for scan */
                    302: #endif
                    303:        struct ath_stats        sc_stats;       /* interface statistics */
                    304:        HAL_MIB_STATS           sc_mib_stats;   /* MIB counter statistics */
                    305:
                    306: #ifndef __FreeBSD__
                    307:        void                    *sc_sdhook;     /* shutdown hook */
                    308:        void                    *sc_powerhook;  /* power management hook */
                    309:        u_int                   sc_flags;       /* misc flags */
                    310: #endif
                    311:
                    312:        u_int8_t                sc_broadcast_addr[IEEE80211_ADDR_LEN];
                    313:
                    314:        struct gpio_chipset_tag sc_gpio_gc;     /* gpio(4) framework */
                    315:        gpio_pin_t              sc_gpio_pins[ATH_MAXGPIO];
                    316: };
                    317:
                    318: /* unaligned little endian access */
                    319: #define LE_READ_2(p)                                                   \
                    320:        ((u_int16_t)                                                    \
                    321:         ((((u_int8_t *)(p))[0]      ) | (((u_int8_t *)(p))[1] <<  8)))
                    322: #define LE_READ_4(p)                                                   \
                    323:        ((u_int32_t)                                                    \
                    324:         ((((u_int8_t *)(p))[0]      ) | (((u_int8_t *)(p))[1] <<  8) | \
                    325:         (((u_int8_t *)(p))[2] << 16) | (((u_int8_t *)(p))[3] << 24)))
                    326:
                    327: #ifdef AR_DEBUG
                    328: enum {
                    329:        ATH_DEBUG_XMIT          = 0x00000001,   /* basic xmit operation */
                    330:        ATH_DEBUG_XMIT_DESC     = 0x00000002,   /* xmit descriptors */
                    331:        ATH_DEBUG_RECV          = 0x00000004,   /* basic recv operation */
                    332:        ATH_DEBUG_RECV_DESC     = 0x00000008,   /* recv descriptors */
                    333:        ATH_DEBUG_RATE          = 0x00000010,   /* rate control */
                    334:        ATH_DEBUG_RESET         = 0x00000020,   /* reset processing */
                    335:        ATH_DEBUG_MODE          = 0x00000040,   /* mode init/setup */
                    336:        ATH_DEBUG_BEACON        = 0x00000080,   /* beacon handling */
                    337:        ATH_DEBUG_WATCHDOG      = 0x00000100,   /* watchdog timeout */
                    338:        ATH_DEBUG_INTR          = 0x00001000,   /* ISR */
                    339:        ATH_DEBUG_TX_PROC       = 0x00002000,   /* tx ISR proc */
                    340:        ATH_DEBUG_RX_PROC       = 0x00004000,   /* rx ISR proc */
                    341:        ATH_DEBUG_BEACON_PROC   = 0x00008000,   /* beacon ISR proc */
                    342:        ATH_DEBUG_CALIBRATE     = 0x00010000,   /* periodic calibration */
                    343:        ATH_DEBUG_ANY           = 0xffffffff
                    344: };
                    345: #define        IFF_DUMPPKTS(_ifp, _m) \
                    346:        ((ath_debug & _m) || \
                    347:            ((_ifp)->if_flags & (IFF_DEBUG|IFF_LINK2)) == (IFF_DEBUG|IFF_LINK2))
                    348: #define        DPRINTF(_m,X)   if (ath_debug & (_m)) printf X
                    349: #else
                    350: #define        IFF_DUMPPKTS(_ifp, _m) \
                    351:        (((_ifp)->if_flags & (IFF_DEBUG|IFF_LINK2)) == (IFF_DEBUG|IFF_LINK2))
                    352: #define        DPRINTF(_m, X)
                    353: #endif
                    354:
                    355: /*
                    356:  * Wrapper code
                    357:  */
                    358: #ifndef __FreeBSD__
                    359: #undef KASSERT
                    360: #define KASSERT(cond, complaint) if (!(cond)) panic complaint
                    361:
                    362: #define        ATH_ATTACHED            0x0001          /* attach has succeeded */
                    363: #define ATH_ENABLED            0x0002          /* chip is enabled */
                    364: #define ATH_GPIO               0x0004          /* gpio device attached */
                    365:
                    366: #define        ATH_IS_ENABLED(sc)      ((sc)->sc_flags & ATH_ENABLED)
                    367: #endif
                    368:
                    369: #define        ATH_LOCK_INIT(_sc) \
                    370:        mtx_init(&(_sc)->sc_mtx, device_get_nameunit((_sc)->sc_dev), \
                    371:                 MTX_NETWORK_LOCK, MTX_DEF | MTX_RECURSE)
                    372: #define        ATH_LOCK_DESTROY(_sc)   mtx_destroy(&(_sc)->sc_mtx)
                    373: #define        ATH_LOCK(_sc)           mtx_lock(&(_sc)->sc_mtx)
                    374: #define        ATH_UNLOCK(_sc)         mtx_unlock(&(_sc)->sc_mtx)
                    375: #define        ATH_LOCK_ASSERT(_sc)    mtx_assert(&(_sc)->sc_mtx, MA_OWNED)
                    376:
                    377: #define        ATH_TXBUF_LOCK_INIT(_sc) \
                    378:        mtx_init(&(_sc)->sc_txbuflock, \
                    379:                device_get_nameunit((_sc)->sc_dev), "xmit buf q", MTX_DEF)
                    380: #define        ATH_TXBUF_LOCK_DESTROY(_sc)     mtx_destroy(&(_sc)->sc_txbuflock)
                    381: #define        ATH_TXBUF_LOCK(_sc)             mtx_lock(&(_sc)->sc_txbuflock)
                    382: #define        ATH_TXBUF_UNLOCK(_sc)           mtx_unlock(&(_sc)->sc_txbuflock)
                    383: #define        ATH_TXBUF_LOCK_ASSERT(_sc) \
                    384:        mtx_assert(&(_sc)->sc_txbuflock, MA_OWNED)
                    385:
                    386: #define        ATH_TXQ_LOCK_INIT(_sc) \
                    387:        mtx_init(&(_sc)->sc_txqlock, \
                    388:                device_get_nameunit((_sc)->sc_dev), "xmit q", MTX_DEF)
                    389: #define        ATH_TXQ_LOCK_DESTROY(_sc)       mtx_destroy(&(_sc)->sc_txqlock)
                    390: #define        ATH_TXQ_LOCK(_sc)               mtx_lock(&(_sc)->sc_txqlock)
                    391: #define        ATH_TXQ_UNLOCK(_sc)             mtx_unlock(&(_sc)->sc_txqlock)
                    392: #define        ATH_TXQ_LOCK_ASSERT(_sc)        mtx_assert(&(_sc)->sc_txqlock, MA_OWNED)
                    393:
                    394: #define ATH_TICKS() (tick)
                    395: #define ATH_CALLOUT_INIT(chp) callout_init((chp))
                    396: #define ATH_TASK_INIT(task, func, context)     \
                    397:        do {                                    \
                    398:                (task)->t_func = (func);        \
                    399:                (task)->t_context = (context);  \
                    400:        } while (0)
                    401: #define ATH_TASK_RUN_OR_ENQUEUE(task) ((*(task)->t_func)((task)->t_context, 1))
                    402:
                    403: typedef unsigned long u_intptr_t;
                    404:
                    405: int    ath_attach(u_int16_t, struct ath_softc *);
                    406: int    ath_detach(struct ath_softc *, int);
                    407: int    ath_enable(struct ath_softc *);
                    408: void   ath_resume(struct ath_softc *, int);
                    409: void   ath_suspend(struct ath_softc *, int);
                    410: #ifdef __NetBSD__
                    411: int    ath_activate(struct device *, enum devact);
                    412: void   ath_power(int, void *);
                    413: #endif
                    414: void   ath_shutdown(void *);
                    415: int    ath_intr(void *);
                    416: int    ath_enable(struct ath_softc *);
                    417:
                    418: /*
                    419:  * HAL definitions to comply with local coding convention.
                    420:  */
                    421: #define        ath_hal_reset(_ah, _opmode, _chan, _outdoor, _pstatus) \
                    422:        ((*(_ah)->ah_reset)((_ah), (_opmode), (_chan), (_outdoor), (_pstatus)))
                    423: #define        ath_hal_get_rate_table(_ah, _mode) \
                    424:        ((*(_ah)->ah_get_rate_table)((_ah), (_mode)))
                    425: #define        ath_hal_get_lladdr(_ah, _mac) \
                    426:        ((*(_ah)->ah_get_lladdr)((_ah), (_mac)))
                    427: #define        ath_hal_set_lladdr(_ah, _mac) \
                    428:        ((*(_ah)->ah_set_lladdr)((_ah), (_mac)))
                    429: #define        ath_hal_set_intr(_ah, _mask) \
                    430:        ((*(_ah)->ah_set_intr)((_ah), (_mask)))
                    431: #define        ath_hal_get_intr(_ah) \
                    432:        ((*(_ah)->ah_get_intr)((_ah)))
                    433: #define        ath_hal_is_intr_pending(_ah) \
                    434:        ((*(_ah)->ah_is_intr_pending)((_ah)))
                    435: #define        ath_hal_get_isr(_ah, _pmask) \
                    436:        ((*(_ah)->ah_get_isr)((_ah), (_pmask)))
                    437: #define        ath_hal_update_tx_triglevel(_ah, _inc) \
                    438:        ((*(_ah)->ah_update_tx_triglevel)((_ah), (_inc)))
                    439: #define        ath_hal_set_power(_ah, _mode, _sleepduration) \
                    440:        ((*(_ah)->ah_set_power)((_ah), (_mode), AH_TRUE, (_sleepduration)))
                    441: #define        ath_hal_reset_key(_ah, _ix) \
                    442:        ((*(_ah)->ah_reset_key)((_ah), (_ix)))
                    443: #define        ath_hal_set_key(_ah, _ix, _pk) \
                    444:        ((*(_ah)->ah_set_key)((_ah), (_ix), (_pk), NULL, AH_FALSE))
                    445: #define        ath_hal_is_key_valid(_ah, _ix) \
                    446:        (((*(_ah)->ah_is_key_valid)((_ah), (_ix))))
                    447: #define        ath_hal_set_key_lladdr(_ah, _ix, _mac) \
                    448:        ((*(_ah)->ah_set_key_lladdr)((_ah), (_ix), (_mac)))
                    449: #define        ath_hal_get_rx_filter(_ah) \
                    450:        ((*(_ah)->ah_get_rx_filter)((_ah)))
                    451: #define        ath_hal_set_rx_filter(_ah, _filter) \
                    452:        ((*(_ah)->ah_set_rx_filter)((_ah), (_filter)))
                    453: #define        ath_hal_set_mcast_filter(_ah, _mfilt0, _mfilt1) \
                    454:        ((*(_ah)->ah_set_mcast_filter)((_ah), (_mfilt0), (_mfilt1)))
                    455: #define        ath_hal_wait_for_beacon(_ah, _bf) \
                    456:        ((*(_ah)->ah_wait_for_beacon)((_ah), (_bf)->bf_daddr))
                    457: #define        ath_hal_put_rx_buf(_ah, _bufaddr) \
                    458:        ((*(_ah)->ah_put_rx_buf)((_ah), (_bufaddr)))
                    459: #define        ath_hal_get_tsf32(_ah) \
                    460:        ((*(_ah)->ah_get_tsf32)((_ah)))
                    461: #define        ath_hal_get_tsf64(_ah) \
                    462:        ((*(_ah)->ah_get_tsf64)((_ah)))
                    463: #define        ath_hal_reset_tsf(_ah) \
                    464:        ((*(_ah)->ah_reset_tsf)((_ah)))
                    465: #define        ath_hal_start_rx(_ah) \
                    466:        ((*(_ah)->ah_start_rx)((_ah)))
                    467: #define        ath_hal_put_tx_buf(_ah, _q, _bufaddr) \
                    468:        ((*(_ah)->ah_put_tx_buf)((_ah), (_q), (_bufaddr)))
                    469: #define        ath_hal_get_tx_buf(_ah, _q) \
                    470:        ((*(_ah)->ah_get_tx_buf)((_ah), (_q)))
                    471: #define        ath_hal_get_rx_buf(_ah) \
                    472:        ((*(_ah)->ah_get_rx_buf)((_ah)))
                    473: #define        ath_hal_tx_start(_ah, _q) \
                    474:        ((*(_ah)->ah_tx_start)((_ah), (_q)))
                    475: #define        ath_hal_setchannel(_ah, _chan) \
                    476:        ((*(_ah)->ah_setchannel)((_ah), (_chan)))
                    477: #define        ath_hal_calibrate(_ah, _chan) \
                    478:        ((*(_ah)->ah_calibrate)((_ah), (_chan)))
                    479: #define        ath_hal_set_ledstate(_ah, _state) \
                    480:        ((*(_ah)->ah_set_ledstate)((_ah), (_state)))
                    481: #define        ath_hal_init_beacon(_ah, _nextb, _bperiod) \
                    482:        ((*(_ah)->ah_init_beacon)((_ah), (_nextb), (_bperiod)))
                    483: #define        ath_hal_reset_beacon(_ah) \
                    484:        ((*(_ah)->ah_reset_beacon)((_ah)))
                    485: #define        ath_hal_set_beacon_timers(_ah, _bs, _tsf, _dc, _cc) \
                    486:        ((*(_ah)->ah_set_beacon_timers)((_ah), (_bs), (_tsf), \
                    487:         (_dc), (_cc)))
                    488: #define        ath_hal_set_associd(_ah, _bss, _associd) \
                    489:        ((*(_ah)->ah_set_associd)((_ah), (_bss), (_associd), 0))
                    490: #define        ath_hal_get_regdomain(_ah, _prd) \
                    491:        (*(_prd) = (_ah)->ah_get_regdomain(_ah))
                    492: #define        ath_hal_detach(_ah) \
                    493:        ((*(_ah)->ah_detach)(_ah))
                    494: #define ath_hal_set_slot_time(_ah, _t) \
                    495:        ((*(_ah)->ah_set_slot_time)(_ah, _t))
                    496: #define ath_hal_set_gpio_output(_ah, _gpio) \
                    497:        ((*(_ah)->ah_set_gpio_output)((_ah), (_gpio)))
                    498: #define ath_hal_set_gpio_input(_ah, _gpio) \
                    499:        ((*(_ah)->ah_set_gpio_input)((_ah), (_gpio)))
                    500: #define ath_hal_get_gpio(_ah, _gpio) \
                    501:        ((*(_ah)->ah_get_gpio)((_ah), (_gpio)))
                    502: #define ath_hal_set_gpio(_ah, _gpio, _b) \
                    503:        ((*(_ah)->ah_set_gpio)((_ah), (_gpio), (_b)))
                    504: #define ath_hal_set_gpio_intr(_ah, _gpio, _b) \
                    505:        ((*(_ah)->ah_set_gpio_intr)((_ah), (_gpio), (_b)))
                    506:
                    507: #define        ath_hal_set_opmode(_ah) \
                    508:        ((*(_ah)->ah_set_opmode)((_ah)))
                    509: #define        ath_hal_stop_tx_dma(_ah, _qnum) \
                    510:        ((*(_ah)->ah_stop_tx_dma)((_ah), (_qnum)))
                    511: #define        ath_hal_stop_pcu_recv(_ah) \
                    512:        ((*(_ah)->ah_stop_pcu_recv)((_ah)))
                    513: #define        ath_hal_start_rx_pcu(_ah) \
                    514:        ((*(_ah)->ah_start_rx_pcu)((_ah)))
                    515: #define        ath_hal_stop_rx_dma(_ah) \
                    516:        ((*(_ah)->ah_stop_rx_dma)((_ah)))
                    517: #define        ath_hal_get_diag_state(_ah, _id, _indata, _insize, _outdata, _outsize) \
                    518:        ((*(_ah)->ah_get_diag_state)((_ah), (_id), \
                    519:         (_indata), (_insize), (_outdata), (_outsize)))
                    520:
                    521: #define        ath_hal_setup_tx_queue(_ah, _type, _qinfo) \
                    522:        ((*(_ah)->ah_setup_tx_queue)((_ah), (_type), (_qinfo)))
                    523: #define        ath_hal_reset_tx_queue(_ah, _q) \
                    524:        ((*(_ah)->ah_reset_tx_queue)((_ah), (_q)))
                    525: #define        ath_hal_release_tx_queue(_ah, _q) \
                    526:        ((*(_ah)->ah_release_tx_queue)((_ah), (_q)))
                    527: #define        ath_hal_has_veol(_ah) \
                    528:        ((*(_ah)->ah_has_veol)((_ah)))
                    529: #define ath_hal_update_mib_counters(_ah, _stats) \
                    530:        ((*(_ah)->ah_update_mib_counters)((_ah), (_stats)))
                    531: #define        ath_hal_get_rf_gain(_ah) \
                    532:        ((*(_ah)->ah_get_rf_gain)((_ah)))
                    533: #define        ath_hal_set_rx_signal(_ah) \
                    534:        ((*(_ah)->ah_set_rx_signal)((_ah)))
                    535:
                    536: #define        ath_hal_setup_rx_desc(_ah, _ds, _size, _intreq) \
                    537:        ((*(_ah)->ah_setup_rx_desc)((_ah), (_ds), (_size), (_intreq)))
                    538: #define        ath_hal_proc_rx_desc(_ah, _ds, _dspa, _dsnext) \
                    539:        ((*(_ah)->ah_proc_rx_desc)((_ah), (_ds), (_dspa), (_dsnext)))
                    540: #define        ath_hal_setup_tx_desc(_ah, _ds, _plen, _hlen, _atype, _txpow, \
                    541:            _txr0, _txtr0, _keyix, _ant, _flags, \
                    542:            _rtsrate, _rtsdura) \
                    543:        ((*(_ah)->ah_setup_tx_desc)((_ah), (_ds), (_plen), (_hlen), (_atype), \
                    544:            (_txpow), (_txr0), (_txtr0), (_keyix), (_ant), \
                    545:            (_flags), (_rtsrate), (_rtsdura)))
                    546: #define        ath_hal_setup_xtx_desc(_ah, _ds, \
                    547:            _txr1, _txtr1, _txr2, _txtr2, _txr3, _txtr3) \
                    548:        ((*(_ah)->ah_setup_xtx_desc)((_ah), (_ds), \
                    549:            (_txr1), (_txtr1), (_txr2), (_txtr2), (_txr3), (_txtr3)))
                    550: #define        ath_hal_fill_tx_desc(_ah, _ds, _l, _first, _last) \
                    551:        ((*(_ah)->ah_fill_tx_desc)((_ah), (_ds), (_l), (_first), (_last)))
                    552: #define        ath_hal_proc_tx_desc(_ah, _ds) \
                    553:        ((*(_ah)->ah_proc_tx_desc)((_ah), (_ds)))
                    554:
                    555: #endif /* _DEV_ATH_ATHVAR_H */

CVSweb