if_iwnvar.h revision 1.1 1 1.1 ober /* $OpenBSD: if_iwnvar.h,v 1.2 2007/11/19 19:34:25 damien Exp $ */
2 1.1 ober
3 1.1 ober /*-
4 1.1 ober * Copyright (c) 2007
5 1.1 ober * Damien Bergamini <damien.bergamini (at) free.fr>
6 1.1 ober *
7 1.1 ober * Permission to use, copy, modify, and distribute this software for any
8 1.1 ober * purpose with or without fee is hereby granted, provided that the above
9 1.1 ober * copyright notice and this permission notice appear in all copies.
10 1.1 ober *
11 1.1 ober * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 1.1 ober * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 1.1 ober * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 1.1 ober * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 1.1 ober * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 1.1 ober * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 1.1 ober * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 1.1 ober */
19 1.1 ober
20 1.1 ober struct iwn_rx_radiotap_header {
21 1.1 ober struct ieee80211_radiotap_header wr_ihdr;
22 1.1 ober uint64_t wr_tsft;
23 1.1 ober uint8_t wr_flags;
24 1.1 ober uint8_t wr_rate;
25 1.1 ober uint16_t wr_chan_freq;
26 1.1 ober uint16_t wr_chan_flags;
27 1.1 ober int8_t wr_dbm_antsignal;
28 1.1 ober int8_t wr_dbm_antnoise;
29 1.1 ober } __packed;
30 1.1 ober
31 1.1 ober #define IWN_RX_RADIOTAP_PRESENT \
32 1.1 ober ((1 << IEEE80211_RADIOTAP_TSFT) | \
33 1.1 ober (1 << IEEE80211_RADIOTAP_FLAGS) | \
34 1.1 ober (1 << IEEE80211_RADIOTAP_RATE) | \
35 1.1 ober (1 << IEEE80211_RADIOTAP_CHANNEL) | \
36 1.1 ober (1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL) | \
37 1.1 ober (1 << IEEE80211_RADIOTAP_DBM_ANTNOISE))
38 1.1 ober
39 1.1 ober struct iwn_tx_radiotap_header {
40 1.1 ober struct ieee80211_radiotap_header wt_ihdr;
41 1.1 ober uint8_t wt_flags;
42 1.1 ober uint8_t wt_rate;
43 1.1 ober uint16_t wt_chan_freq;
44 1.1 ober uint16_t wt_chan_flags;
45 1.1 ober uint8_t wt_hwqueue;
46 1.1 ober } __packed;
47 1.1 ober
48 1.1 ober #define IWN_TX_RADIOTAP_PRESENT \
49 1.1 ober ((1 << IEEE80211_RADIOTAP_FLAGS) | \
50 1.1 ober (1 << IEEE80211_RADIOTAP_RATE) | \
51 1.1 ober (1 << IEEE80211_RADIOTAP_CHANNEL))
52 1.1 ober
53 1.1 ober struct iwn_dma_info {
54 1.1 ober bus_dma_tag_t tag;
55 1.1 ober bus_dmamap_t map;
56 1.1 ober bus_dma_segment_t seg;
57 1.1 ober bus_addr_t paddr;
58 1.1 ober void * vaddr;
59 1.1 ober bus_size_t size;
60 1.1 ober };
61 1.1 ober
62 1.1 ober struct iwn_tx_data {
63 1.1 ober bus_dmamap_t map;
64 1.1 ober struct mbuf *m;
65 1.1 ober struct ieee80211_node *ni;
66 1.1 ober };
67 1.1 ober
68 1.1 ober struct iwn_tx_ring {
69 1.1 ober struct iwn_dma_info desc_dma;
70 1.1 ober struct iwn_dma_info cmd_dma;
71 1.1 ober struct iwn_tx_desc *desc;
72 1.1 ober struct iwn_tx_cmd *cmd;
73 1.1 ober struct iwn_tx_data *data;
74 1.1 ober int qid;
75 1.1 ober int queued;
76 1.1 ober int count;
77 1.1 ober int cur;
78 1.1 ober };
79 1.1 ober
80 1.1 ober #define IWN_RBUF_COUNT (IWN_RX_RING_COUNT + 32)
81 1.1 ober
82 1.1 ober struct iwn_softc;
83 1.1 ober
84 1.1 ober struct iwn_rbuf {
85 1.1 ober struct iwn_softc *sc;
86 1.1 ober void * vaddr;
87 1.1 ober bus_addr_t paddr;
88 1.1 ober SLIST_ENTRY(iwn_rbuf) next;
89 1.1 ober };
90 1.1 ober
91 1.1 ober struct iwn_rx_data {
92 1.1 ober struct mbuf *m;
93 1.1 ober };
94 1.1 ober
95 1.1 ober struct iwn_rx_ring {
96 1.1 ober struct iwn_dma_info desc_dma;
97 1.1 ober struct iwn_dma_info buf_dma;
98 1.1 ober uint32_t *desc;
99 1.1 ober struct iwn_rx_data data[IWN_RX_RING_COUNT];
100 1.1 ober struct iwn_rbuf rbuf[IWN_RBUF_COUNT];
101 1.1 ober SLIST_HEAD(, iwn_rbuf) freelist;
102 1.1 ober int nb_free_entries;
103 1.1 ober int cur;
104 1.1 ober };
105 1.1 ober
106 1.1 ober struct iwn_node {
107 1.1 ober struct ieee80211_node ni; /* must be the first */
108 1.1 ober struct ieee80211_amrr_node amn;
109 1.1 ober };
110 1.1 ober
111 1.1 ober struct iwn_calib_state {
112 1.1 ober uint8_t state;
113 1.1 ober #define IWN_CALIB_STATE_INIT 0
114 1.1 ober #define IWN_CALIB_STATE_ASSOC 1
115 1.1 ober #define IWN_CALIB_STATE_RUN 2
116 1.1 ober
117 1.1 ober u_int nbeacons;
118 1.1 ober uint32_t noise[3];
119 1.1 ober uint32_t rssi[3];
120 1.1 ober uint32_t corr_ofdm_x1;
121 1.1 ober uint32_t corr_ofdm_mrc_x1;
122 1.1 ober uint32_t corr_ofdm_x4;
123 1.1 ober uint32_t corr_ofdm_mrc_x4;
124 1.1 ober uint32_t corr_cck_x4;
125 1.1 ober uint32_t corr_cck_mrc_x4;
126 1.1 ober uint32_t bad_plcp_ofdm;
127 1.1 ober uint32_t fa_ofdm;
128 1.1 ober uint32_t bad_plcp_cck;
129 1.1 ober uint32_t fa_cck;
130 1.1 ober uint32_t low_fa;
131 1.1 ober uint8_t cck_state;
132 1.1 ober #define IWN_CCK_STATE_INIT 0
133 1.1 ober #define IWN_CCK_STATE_LOFA 1
134 1.1 ober #define IWN_CCK_STATE_HIFA 2
135 1.1 ober
136 1.1 ober uint8_t noise_samples[20];
137 1.1 ober u_int cur_noise_sample;
138 1.1 ober uint8_t noise_ref;
139 1.1 ober uint32_t energy_samples[10];
140 1.1 ober u_int cur_energy_sample;
141 1.1 ober uint32_t energy_cck;
142 1.1 ober };
143 1.1 ober
144 1.1 ober struct iwn_softc {
145 1.1 ober device_t sc_dev;
146 1.1 ober struct ethercom sc_ec;
147 1.1 ober struct ieee80211com sc_ic;
148 1.1 ober int (*sc_newstate)(struct ieee80211com *,
149 1.1 ober enum ieee80211_state, int);
150 1.1 ober
151 1.1 ober struct ieee80211_amrr amrr;
152 1.1 ober
153 1.1 ober bus_dma_tag_t sc_dmat;
154 1.1 ober
155 1.1 ober /* shared area */
156 1.1 ober struct iwn_dma_info shared_dma;
157 1.1 ober struct iwn_shared *shared;
158 1.1 ober
159 1.1 ober /* "keep warm" page */
160 1.1 ober struct iwn_dma_info kw_dma;
161 1.1 ober
162 1.1 ober /* firmware DMA transfer */
163 1.1 ober struct iwn_dma_info fw_dma;
164 1.1 ober
165 1.1 ober /* rings */
166 1.1 ober struct iwn_tx_ring txq[IWN_NTXQUEUES];
167 1.1 ober struct iwn_rx_ring rxq;
168 1.1 ober
169 1.1 ober bus_space_tag_t sc_st;
170 1.1 ober bus_space_handle_t sc_sh;
171 1.1 ober void *sc_ih;
172 1.1 ober pci_chipset_tag_t sc_pct;
173 1.1 ober pcitag_t sc_pcitag;
174 1.1 ober bus_size_t sc_sz;
175 1.1 ober
176 1.1 ober struct callout calib_to;
177 1.1 ober int calib_cnt;
178 1.1 ober struct iwn_calib_state calib;
179 1.1 ober
180 1.1 ober struct iwn_rx_stat last_rx_stat;
181 1.1 ober int last_rx_valid;
182 1.1 ober struct iwn_ucode_info ucode_info;
183 1.1 ober struct iwn_config config;
184 1.1 ober uint32_t rawtemp;
185 1.1 ober int temp;
186 1.1 ober int noise;
187 1.1 ober uint8_t antmsk;
188 1.1 ober
189 1.1 ober struct iwn_eeprom_band bands[IWN_NBANDS];
190 1.1 ober int16_t eeprom_voltage;
191 1.1 ober int8_t maxpwr2GHz;
192 1.1 ober int8_t maxpwr5GHz;
193 1.1 ober int8_t maxpwr[IEEE80211_CHAN_MAX];
194 1.1 ober
195 1.1 ober int sc_tx_timer;
196 1.1 ober
197 1.1 ober #if NBPFILTER > 0
198 1.1 ober void * sc_drvbpf;
199 1.1 ober
200 1.1 ober union {
201 1.1 ober struct iwn_rx_radiotap_header th;
202 1.1 ober uint8_t pad[IEEE80211_RADIOTAP_HDRLEN];
203 1.1 ober } sc_rxtapu;
204 1.1 ober #define sc_rxtap sc_rxtapu.th
205 1.1 ober int sc_rxtap_len;
206 1.1 ober
207 1.1 ober union {
208 1.1 ober struct iwn_tx_radiotap_header th;
209 1.1 ober uint8_t pad[IEEE80211_RADIOTAP_HDRLEN];
210 1.1 ober } sc_txtapu;
211 1.1 ober #define sc_txtap sc_txtapu.th
212 1.1 ober int sc_txtap_len;
213 1.1 ober #endif
214 1.1 ober
215 1.1 ober bool is_scanning;
216 1.1 ober };
217