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