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