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