1 /*        $NetBSD: athioctl.h,v 1.17 2017/10/28 06:27:32 riastradh Exp $        */
2 
3 /*-
4  * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer,
12  *    without modification.
13  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
14  *    similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
15  *    redistribution must be conditioned upon including a substantially
16  *    similar Disclaimer requirement for further binary redistribution.
17  * 3. Neither the names of the above-listed copyright holders nor the names
18  *    of any contributors may be used to endorse or promote products derived
19  *    from this software without specific prior written permission.
20  *
21  * Alternatively, this software may be distributed under the terms of the
22  * GNU General Public License ("GPL") version 2 as published by the Free
23  * Software Foundation.
24  *
25  * NO WARRANTY
26  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
27  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
28  * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
29  * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
30  * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
31  * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
32  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
33  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
34  * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
35  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
36  * THE POSSIBILITY OF SUCH DAMAGES.
37  *
38  * $FreeBSD: src/sys/dev/ath/if_athioctl.h,v 1.10 2005/03/30 20:13:08 sam Exp $
39  */
40 
41 /*
42  * Ioctl-related definitions for the Atheros Wireless LAN controller driver.
43  */
44 #ifndef _DEV_ATH_ATHIOCTL_H
45 #define _DEV_ATH_ATHIOCTL_H
46 
47 #include <sys/types.h>
48 #include <sys/ioccom.h>
49 
50 #include <net/if.h>
51 
52 #include <net80211/ieee80211_radiotap.h>
53 
54 struct ath_stats {
55           u_int32_t ast_watchdog;       /* device reset by watchdog */
56           u_int32_t ast_hardware;       /* fatal hardware error interrupts */
57           u_int32_t ast_bmiss;          /* beacon miss interrupts */
58           u_int32_t ast_bstuck;         /* beacon stuck interrupts */
59           u_int32_t ast_rxorn;          /* rx overrun interrupts */
60           u_int32_t ast_rxeol;          /* rx eol interrupts */
61           u_int32_t ast_txurn;          /* tx underrun interrupts */
62           u_int32_t ast_mib;  /* mib interrupts */
63           u_int32_t ast_intrcoal;       /* interrupts coalesced */
64           u_int32_t ast_tx_packets;     /* packet sent on the interface */
65           u_int32_t ast_tx_mgmt;        /* management frames transmitted */
66           u_int32_t ast_tx_discard;     /* frames discarded prior to assoc */
67           u_int32_t ast_tx_qstop;       /* output stopped 'cuz no buffer */
68           u_int32_t ast_tx_encap;       /* tx encapsulation failed */
69           u_int32_t ast_tx_nonode;      /* tx failed 'cuz no node */
70           u_int32_t ast_tx_nombuf;      /* tx failed 'cuz no mbuf */
71           u_int32_t ast_tx_nomcl;       /* tx failed 'cuz no cluster */
72           u_int32_t ast_tx_linear;      /* tx linearized to cluster */
73           u_int32_t ast_tx_nodata;      /* tx discarded empty frame */
74           u_int32_t ast_tx_busdma;      /* tx failed for dma resrcs */
75           u_int32_t ast_tx_xretries;/* tx failed 'cuz too many retries */
76           u_int32_t ast_tx_fifoerr;     /* tx failed 'cuz FIFO underrun */
77           u_int32_t ast_tx_filtered;/* tx failed 'cuz xmit filtered */
78           u_int32_t ast_tx_shortretry;/* tx on-chip retries (short) */
79           u_int32_t ast_tx_longretry;/* tx on-chip retries (long) */
80           u_int32_t ast_tx_badrate;     /* tx failed 'cuz bogus xmit rate */
81           u_int32_t ast_tx_noack;       /* tx frames with no ack marked */
82           u_int32_t ast_tx_rts;         /* tx frames with rts enabled */
83           u_int32_t ast_tx_cts;         /* tx frames with cts enabled */
84           u_int32_t ast_tx_shortpre;/* tx frames with short preamble */
85           u_int32_t ast_tx_altrate;     /* tx frames with alternate rate */
86           u_int32_t ast_tx_protect;     /* tx frames with protection */
87           u_int32_t ast_tx_ctsburst;/* tx frames with cts and bursting */
88           u_int32_t ast_tx_ctsext;      /* tx frames with cts extension */
89           u_int32_t ast_rx_nombuf;      /* rx setup failed 'cuz no mbuf */
90           u_int32_t ast_rx_busdma;      /* rx setup failed for dma resrcs */
91           u_int32_t ast_rx_orn;         /* rx failed 'cuz of desc overrun */
92           u_int32_t ast_rx_crcerr;      /* rx failed 'cuz of bad CRC */
93           u_int32_t ast_rx_fifoerr;     /* rx failed 'cuz of FIFO overrun */
94           u_int32_t ast_rx_badcrypt;/* rx failed 'cuz decryption */
95           u_int32_t ast_rx_badmic;      /* rx failed 'cuz MIC failure */
96           u_int32_t ast_rx_phyerr;      /* rx failed 'cuz of PHY err */
97           u_int32_t ast_rx_phy[32];     /* rx PHY error per-code counts */
98           u_int32_t ast_rx_tooshort;/* rx discarded 'cuz frame too short */
99           u_int32_t ast_rx_toobig;      /* rx discarded 'cuz frame too large */
100           u_int32_t ast_rx_packets;     /* packet recv on the interface */
101           u_int32_t ast_rx_mgt;         /* management frames received */
102           u_int32_t ast_rx_ctl;         /* rx discarded 'cuz ctl frame */
103           int8_t              ast_tx_rssi;        /* tx rssi of last ack */
104           int8_t              ast_rx_rssi;        /* rx rssi from histogram */
105           u_int32_t ast_be_xmit;        /* beacons transmitted */
106           u_int32_t ast_be_nombuf;      /* beacon setup failed 'cuz no mbuf */
107           u_int32_t ast_per_cal;        /* periodic calibration calls */
108           u_int32_t ast_per_calfail;/* periodic calibration failed */
109           u_int32_t ast_per_rfgain;     /* periodic calibration rfgain reset */
110           u_int32_t ast_rate_calls;     /* rate control checks */
111           u_int32_t ast_rate_raise;     /* rate control raised xmit rate */
112           u_int32_t ast_rate_drop;      /* rate control dropped xmit rate */
113           u_int32_t ast_ant_defswitch;/* rx/default antenna switches */
114           u_int32_t ast_ant_txswitch;/* tx antenna switches */
115           u_int32_t ast_ant_rx[8];      /* rx frames with antenna */
116           u_int32_t ast_ant_tx[8];      /* tx frames with antenna */
117           u_int32_t ast_bmiss_phantom;/* beacon miss interrupts */
118           u_int32_t ast_pad[32];
119 };
120 
121 #define   SIOCGATHSTATS       _IOWR('i', 137, struct ifreq)
122 
123 struct ath_diag {
124           char      ad_name[IFNAMSIZ];  /* if name, e.g. "ath0" */
125           u_int16_t ad_id;
126 #define   ATH_DIAG_DYN        0x8000              /* allocate buffer in caller */
127 #define   ATH_DIAG_IN         0x4000              /* copy in parameters */
128 #define   ATH_DIAG_OUT        0x0000              /* copy out results (always) */
129 #define   ATH_DIAG_ID         0x0fff
130           u_int16_t ad_in_size;                   /* pack to fit, yech */
131           void *    ad_in_data;
132           void *    ad_out_data;
133           u_int     ad_out_size;
134 
135 };
136 #define   SIOCGATHDIAG        _IOWR('i', 138, struct ath_diag)
137 
138 /*
139  * Radio capture format.
140  */
141 #define ATH_RX_RADIOTAP_PRESENT (                 \
142           (1 << IEEE80211_RADIOTAP_TSFT)                    | \
143           (1 << IEEE80211_RADIOTAP_FLAGS)                   | \
144           (1 << IEEE80211_RADIOTAP_RATE)                    | \
145           (1 << IEEE80211_RADIOTAP_CHANNEL)       | \
146           (1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL) | \
147           (1 << IEEE80211_RADIOTAP_DBM_ANTNOISE)  | \
148           (1 << IEEE80211_RADIOTAP_ANTENNA)       | \
149           0)
150 
151 struct ath_rx_radiotap_header {
152           struct ieee80211_radiotap_header wr_ihdr;
153           u_int64_t wr_tsf;
154           u_int8_t  wr_flags;
155           u_int8_t  wr_rate;
156           u_int16_t wr_chan_freq;
157           u_int16_t wr_chan_flags;
158           int8_t              wr_antsignal;
159           int8_t              wr_antnoise;
160           u_int8_t  wr_antenna;
161 };
162 
163 #define ATH_TX_RADIOTAP_PRESENT (                 \
164           (1 << IEEE80211_RADIOTAP_TSFT)                    | \
165           (1 << IEEE80211_RADIOTAP_FLAGS)                   | \
166           (1 << IEEE80211_RADIOTAP_RATE)                    | \
167           (1 << IEEE80211_RADIOTAP_CHANNEL)       | \
168           (1 << IEEE80211_RADIOTAP_DBM_TX_POWER)  | \
169           (1 << IEEE80211_RADIOTAP_ANTENNA)       | \
170           0)
171 
172 struct ath_tx_radiotap_header {
173           struct ieee80211_radiotap_header wt_ihdr;
174           u_int64_t wt_tsf;
175           u_int8_t  wt_flags;
176           u_int8_t  wt_rate;
177           u_int16_t wt_chan_freq;
178           u_int16_t wt_chan_flags;
179           u_int8_t  wt_txpower;
180           u_int8_t  wt_antenna;
181 };
182 
183 #endif /* _DEV_ATH_ATHIOCTL_H */
184