if_athioctl.h revision 218924
1238106Sdes/*- 2238106Sdes * Copyright (c) 2002-2009 Sam Leffler, Errno Consulting 3238106Sdes * All rights reserved. 4238106Sdes * 5238106Sdes * Redistribution and use in source and binary forms, with or without 6238106Sdes * modification, are permitted provided that the following conditions 7238106Sdes * are met: 8238106Sdes * 1. Redistributions of source code must retain the above copyright 9238106Sdes * notice, this list of conditions and the following disclaimer, 10238106Sdes * without modification. 11238106Sdes * 2. Redistributions in binary form must reproduce at minimum a disclaimer 12238106Sdes * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any 13238106Sdes * redistribution must be conditioned upon including a substantially 14238106Sdes * similar Disclaimer requirement for further binary redistribution. 15238106Sdes * 16238106Sdes * NO WARRANTY 17238106Sdes * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18238106Sdes * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19238106Sdes * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY 20238106Sdes * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 21238106Sdes * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, 22238106Sdes * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23238106Sdes * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24238106Sdes * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 25238106Sdes * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26238106Sdes * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 27238106Sdes * THE POSSIBILITY OF SUCH DAMAGES. 28238106Sdes * 29238106Sdes * $FreeBSD: head/sys/dev/ath/if_athioctl.h 218924 2011-02-21 19:19:05Z adrian $ 30238106Sdes */ 31238106Sdes 32238106Sdes/* 33238106Sdes * Ioctl-related defintions for the Atheros Wireless LAN controller driver. 34238106Sdes */ 35238106Sdes#ifndef _DEV_ATH_ATHIOCTL_H 36238106Sdes#define _DEV_ATH_ATHIOCTL_H 37238106Sdes 38238106Sdesstruct ath_stats { 39238106Sdes u_int32_t ast_watchdog; /* device reset by watchdog */ 40238106Sdes u_int32_t ast_hardware; /* fatal hardware error interrupts */ 41238106Sdes u_int32_t ast_bmiss; /* beacon miss interrupts */ 42238106Sdes u_int32_t ast_bmiss_phantom;/* beacon miss interrupts */ 43238106Sdes u_int32_t ast_bstuck; /* beacon stuck interrupts */ 44238106Sdes u_int32_t ast_rxorn; /* rx overrun interrupts */ 45238106Sdes u_int32_t ast_rxeol; /* rx eol interrupts */ 46238106Sdes u_int32_t ast_txurn; /* tx underrun interrupts */ 47238106Sdes u_int32_t ast_mib; /* mib interrupts */ 48238106Sdes u_int32_t ast_intrcoal; /* interrupts coalesced */ 49238106Sdes u_int32_t ast_tx_packets; /* packet sent on the interface */ 50238106Sdes u_int32_t ast_tx_mgmt; /* management frames transmitted */ 51238106Sdes u_int32_t ast_tx_discard; /* frames discarded prior to assoc */ 52238106Sdes u_int32_t ast_tx_qstop; /* output stopped 'cuz no buffer */ 53238106Sdes u_int32_t ast_tx_encap; /* tx encapsulation failed */ 54238106Sdes u_int32_t ast_tx_nonode; /* tx failed 'cuz no node */ 55238106Sdes u_int32_t ast_tx_nombuf; /* tx failed 'cuz no mbuf */ 56238106Sdes u_int32_t ast_tx_nomcl; /* tx failed 'cuz no cluster */ 57238106Sdes u_int32_t ast_tx_linear; /* tx linearized to cluster */ 58238106Sdes u_int32_t ast_tx_nodata; /* tx discarded empty frame */ 59238106Sdes u_int32_t ast_tx_busdma; /* tx failed for dma resrcs */ 60238106Sdes u_int32_t ast_tx_xretries;/* tx failed 'cuz too many retries */ 61238106Sdes u_int32_t ast_tx_fifoerr; /* tx failed 'cuz FIFO underrun */ 62238106Sdes u_int32_t ast_tx_filtered;/* tx failed 'cuz xmit filtered */ 63238106Sdes u_int32_t ast_tx_shortretry;/* tx on-chip retries (short) */ 64238106Sdes u_int32_t ast_tx_longretry;/* tx on-chip retries (long) */ 65238106Sdes u_int32_t ast_tx_badrate; /* tx failed 'cuz bogus xmit rate */ 66238106Sdes u_int32_t ast_tx_noack; /* tx frames with no ack marked */ 67238106Sdes u_int32_t ast_tx_rts; /* tx frames with rts enabled */ 68238106Sdes u_int32_t ast_tx_cts; /* tx frames with cts enabled */ 69238106Sdes u_int32_t ast_tx_shortpre;/* tx frames with short preamble */ 70238106Sdes u_int32_t ast_tx_altrate; /* tx frames with alternate rate */ 71238106Sdes u_int32_t ast_tx_protect; /* tx frames with protection */ 72238106Sdes u_int32_t ast_tx_ctsburst;/* tx frames with cts and bursting */ 73238106Sdes u_int32_t ast_tx_ctsext; /* tx frames with cts extension */ 74238106Sdes u_int32_t ast_rx_nombuf; /* rx setup failed 'cuz no mbuf */ 75238106Sdes u_int32_t ast_rx_busdma; /* rx setup failed for dma resrcs */ 76238106Sdes u_int32_t ast_rx_orn; /* rx failed 'cuz of desc overrun */ 77238106Sdes u_int32_t ast_rx_crcerr; /* rx failed 'cuz of bad CRC */ 78238106Sdes u_int32_t ast_rx_fifoerr; /* rx failed 'cuz of FIFO overrun */ 79238106Sdes u_int32_t ast_rx_badcrypt;/* rx failed 'cuz decryption */ 80238106Sdes u_int32_t ast_rx_badmic; /* rx failed 'cuz MIC failure */ 81238106Sdes u_int32_t ast_rx_phyerr; /* rx failed 'cuz of PHY err */ 82238106Sdes u_int32_t ast_rx_phy[64]; /* rx PHY error per-code counts */ 83238106Sdes u_int32_t ast_rx_tooshort;/* rx discarded 'cuz frame too short */ 84238106Sdes u_int32_t ast_rx_toobig; /* rx discarded 'cuz frame too large */ 85238106Sdes u_int32_t ast_rx_packets; /* packet recv on the interface */ 86238106Sdes u_int32_t ast_rx_mgt; /* management frames received */ 87238106Sdes u_int32_t ast_rx_ctl; /* rx discarded 'cuz ctl frame */ 88238106Sdes int8_t ast_tx_rssi; /* tx rssi of last ack */ 89238106Sdes int8_t ast_rx_rssi; /* rx rssi from histogram */ 90238106Sdes u_int8_t ast_tx_rate; /* IEEE rate of last unicast tx */ 91238106Sdes u_int32_t ast_be_xmit; /* beacons transmitted */ 92238106Sdes u_int32_t ast_be_nombuf; /* beacon setup failed 'cuz no mbuf */ 93238106Sdes u_int32_t ast_per_cal; /* periodic calibration calls */ 94238106Sdes u_int32_t ast_per_calfail;/* periodic calibration failed */ 95238106Sdes u_int32_t ast_per_rfgain; /* periodic calibration rfgain reset */ 96238106Sdes u_int32_t ast_rate_calls; /* rate control checks */ 97238106Sdes u_int32_t ast_rate_raise; /* rate control raised xmit rate */ 98238106Sdes u_int32_t ast_rate_drop; /* rate control dropped xmit rate */ 99238106Sdes u_int32_t ast_ant_defswitch;/* rx/default antenna switches */ 100238106Sdes u_int32_t ast_ant_txswitch;/* tx antenna switches */ 101238106Sdes u_int32_t ast_ant_rx[8]; /* rx frames with antenna */ 102238106Sdes u_int32_t ast_ant_tx[8]; /* tx frames with antenna */ 103238106Sdes u_int32_t ast_cabq_xmit; /* cabq frames transmitted */ 104238106Sdes u_int32_t ast_cabq_busy; /* cabq found busy */ 105238106Sdes u_int32_t ast_tx_raw; /* tx frames through raw api */ 106238106Sdes u_int32_t ast_ff_txok; /* fast frames tx'd successfully */ 107238106Sdes u_int32_t ast_ff_txerr; /* fast frames tx'd w/ error */ 108238106Sdes u_int32_t ast_ff_rx; /* fast frames rx'd */ 109238106Sdes u_int32_t ast_ff_flush; /* fast frames flushed from staging q */ 110238106Sdes u_int32_t ast_tx_qfull; /* tx dropped 'cuz of queue limit */ 111238106Sdes int8_t ast_rx_noise; /* rx noise floor */ 112238106Sdes u_int32_t ast_tx_nobuf; /* tx dropped 'cuz no ath buffer */ 113238106Sdes u_int32_t ast_tdma_update;/* TDMA slot timing updates */ 114238106Sdes u_int32_t ast_tdma_timers;/* TDMA slot update set beacon timers */ 115238106Sdes u_int32_t ast_tdma_tsf; /* TDMA slot update set TSF */ 116238106Sdes u_int16_t ast_tdma_tsfadjp;/* TDMA slot adjust+ (usec, smoothed)*/ 117238106Sdes u_int16_t ast_tdma_tsfadjm;/* TDMA slot adjust- (usec, smoothed)*/ 118238106Sdes u_int32_t ast_tdma_ack; /* TDMA tx failed 'cuz ACK required */ 119238106Sdes u_int32_t ast_tx_raw_fail;/* raw tx failed 'cuz h/w down */ 120238106Sdes u_int32_t ast_tx_nofrag; /* tx dropped 'cuz no ath frag buffer */ 121238106Sdes u_int32_t ast_be_missed; /* missed beacons */ 122238106Sdes u_int32_t ast_ani_cal; /* ANI calibrations performed */ 123238106Sdes u_int32_t ast_rx_agg; /* number of aggregate frames RX'ed */ 124238106Sdes u_int32_t ast_rx_halfgi; 125238106Sdes u_int32_t ast_rx_2040; 126238106Sdes u_int32_t ast_rx_pre_crc_err; 127238106Sdes u_int32_t ast_rx_post_crc_err; 128238106Sdes u_int32_t ast_rx_decrypt_busy_err; 129238106Sdes u_int32_t ast_rx_hi_rx_chain; 130238106Sdes u_int32_t ast_tx_htprotect; /* HT tx frames with protection */ 131238106Sdes u_int32_t ast_pad[3]; 132238106Sdes}; 133238106Sdes 134238106Sdes#define SIOCGATHSTATS _IOWR('i', 137, struct ifreq) 135238106Sdes#define SIOCZATHSTATS _IOWR('i', 139, struct ifreq) 136238106Sdes 137238106Sdesstruct ath_diag { 138238106Sdes char ad_name[IFNAMSIZ]; /* if name, e.g. "ath0" */ 139238106Sdes u_int16_t ad_id; 140238106Sdes#define ATH_DIAG_DYN 0x8000 /* allocate buffer in caller */ 141238106Sdes#define ATH_DIAG_IN 0x4000 /* copy in parameters */ 142238106Sdes#define ATH_DIAG_OUT 0x0000 /* copy out results (always) */ 143238106Sdes#define ATH_DIAG_ID 0x0fff 144238106Sdes u_int16_t ad_in_size; /* pack to fit, yech */ 145238106Sdes caddr_t ad_in_data; 146238106Sdes caddr_t ad_out_data; 147238106Sdes u_int ad_out_size; 148238106Sdes 149238106Sdes}; 150238106Sdes#define SIOCGATHDIAG _IOWR('i', 138, struct ath_diag) 151238106Sdes 152238106Sdes/* 153238106Sdes * Radio capture format. 154238106Sdes */ 155238106Sdes#define ATH_RX_RADIOTAP_PRESENT ( \ 156238106Sdes (1 << IEEE80211_RADIOTAP_TSFT) | \ 157238106Sdes (1 << IEEE80211_RADIOTAP_FLAGS) | \ 158238106Sdes (1 << IEEE80211_RADIOTAP_RATE) | \ 159238106Sdes (1 << IEEE80211_RADIOTAP_ANTENNA) | \ 160238106Sdes (1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL) | \ 161238106Sdes (1 << IEEE80211_RADIOTAP_DBM_ANTNOISE) | \ 162238106Sdes (1 << IEEE80211_RADIOTAP_XCHANNEL) | \ 163238106Sdes 0) 164238106Sdes 165238106Sdesstruct ath_rx_radiotap_header { 166238106Sdes struct ieee80211_radiotap_header wr_ihdr; 167238106Sdes u_int64_t wr_tsf; 168238106Sdes u_int8_t wr_flags; 169238106Sdes u_int8_t wr_rate; 170238106Sdes int8_t wr_antsignal; 171238106Sdes int8_t wr_antnoise; 172238106Sdes u_int8_t wr_antenna; 173238106Sdes u_int8_t wr_pad[3]; 174238106Sdes u_int32_t wr_chan_flags; 175238106Sdes u_int16_t wr_chan_freq; 176238106Sdes u_int8_t wr_chan_ieee; 177238106Sdes int8_t wr_chan_maxpow; 178238106Sdes} __packed; 179238106Sdes 180238106Sdes#define ATH_TX_RADIOTAP_PRESENT ( \ 181238106Sdes (1 << IEEE80211_RADIOTAP_TSFT) | \ 182238106Sdes (1 << IEEE80211_RADIOTAP_FLAGS) | \ 183238106Sdes (1 << IEEE80211_RADIOTAP_RATE) | \ 184238106Sdes (1 << IEEE80211_RADIOTAP_DBM_TX_POWER) | \ 185238106Sdes (1 << IEEE80211_RADIOTAP_ANTENNA) | \ 186238106Sdes (1 << IEEE80211_RADIOTAP_XCHANNEL) | \ 187238106Sdes 0) 188238106Sdes 189238106Sdesstruct ath_tx_radiotap_header { 190238106Sdes struct ieee80211_radiotap_header wt_ihdr; 191238106Sdes u_int64_t wt_tsf; 192238106Sdes u_int8_t wt_flags; 193238106Sdes u_int8_t wt_rate; 194238106Sdes u_int8_t wt_txpower; 195238106Sdes u_int8_t wt_antenna; 196238106Sdes u_int32_t wt_chan_flags; 197238106Sdes u_int16_t wt_chan_freq; 198238106Sdes u_int8_t wt_chan_ieee; 199238106Sdes int8_t wt_chan_maxpow; 200238106Sdes} __packed; 201238106Sdes 202238106Sdes#endif /* _DEV_ATH_ATHIOCTL_H */ 203238106Sdes