[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     ! 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