Deleted Added
full compact
if_iwnvar.h (192468) if_iwnvar.h (198429)
1/* $FreeBSD: head/sys/dev/iwn/if_iwnvar.h 192468 2009-05-20 20:00:40Z sam $ */
1/* $FreeBSD: head/sys/dev/iwn/if_iwnvar.h 198429 2009-10-23 22:04:18Z rpaulo $ */
2/* $OpenBSD: if_iwnvar.h,v 1.12 2009/05/29 08:25:45 damien Exp $ */
3
2/*-
4/*-
3 * Copyright (c) 2007
5 * Copyright (c) 2007, 2008
4 * Damien Bergamini <damien.bergamini@free.fr>
5 * Copyright (c) 2008 Sam Leffler, Errno Consulting
6 *
7 * Permission to use, copy, modify, and distribute this software for any
8 * purpose with or without fee is hereby granted, provided that the above
9 * copyright notice and this permission notice appear in all copies.
10 *
11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES

--- 43 unchanged lines hidden (view full) ---

55 bus_dma_segment_t seg;
56 bus_addr_t paddr;
57 caddr_t vaddr;
58 bus_size_t size;
59};
60
61struct iwn_tx_data {
62 bus_dmamap_t map;
6 * Damien Bergamini <damien.bergamini@free.fr>
7 * Copyright (c) 2008 Sam Leffler, Errno Consulting
8 *
9 * Permission to use, copy, modify, and distribute this software for any
10 * purpose with or without fee is hereby granted, provided that the above
11 * copyright notice and this permission notice appear in all copies.
12 *
13 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES

--- 43 unchanged lines hidden (view full) ---

57 bus_dma_segment_t seg;
58 bus_addr_t paddr;
59 caddr_t vaddr;
60 bus_size_t size;
61};
62
63struct iwn_tx_data {
64 bus_dmamap_t map;
65 bus_addr_t cmd_paddr;
66 bus_addr_t scratch_paddr;
63 struct mbuf *m;
64 struct ieee80211_node *ni;
65};
66
67struct iwn_tx_ring {
68 struct iwn_dma_info desc_dma;
69 struct iwn_dma_info cmd_dma;
70 struct iwn_tx_desc *desc;
71 struct iwn_tx_cmd *cmd;
72 struct iwn_tx_data data[IWN_TX_RING_COUNT];
67 struct mbuf *m;
68 struct ieee80211_node *ni;
69};
70
71struct iwn_tx_ring {
72 struct iwn_dma_info desc_dma;
73 struct iwn_dma_info cmd_dma;
74 struct iwn_tx_desc *desc;
75 struct iwn_tx_cmd *cmd;
76 struct iwn_tx_data data[IWN_TX_RING_COUNT];
73 bus_dma_tag_t data_dmat;
74 int qid;
75 int queued;
76 int cur;
77};
78
77 int qid;
78 int queued;
79 int cur;
80};
81
82struct iwn_softc;
83
79struct iwn_rx_data {
84struct iwn_rx_data {
80 bus_dmamap_t map;
81 struct mbuf *m;
85 struct mbuf *m;
86 bus_dmamap_t map;
82};
83
84struct iwn_rx_ring {
85 struct iwn_dma_info desc_dma;
87};
88
89struct iwn_rx_ring {
90 struct iwn_dma_info desc_dma;
91 struct iwn_dma_info stat_dma;
86 uint32_t *desc;
92 uint32_t *desc;
93 struct iwn_rx_status *stat;
87 struct iwn_rx_data data[IWN_RX_RING_COUNT];
94 struct iwn_rx_data data[IWN_RX_RING_COUNT];
88 bus_dma_tag_t data_dmat;
89 int cur;
90};
91
92struct iwn_node {
93 struct ieee80211_node ni; /* must be the first */
95 int cur;
96};
97
98struct iwn_node {
99 struct ieee80211_node ni; /* must be the first */
100#define IWN_NODE(_ni) ((struct iwn_node *)(_ni))
101
94 struct ieee80211_amrr_node amn;
102 struct ieee80211_amrr_node amn;
103 uint16_t disable_tid;
104 uint8_t id;
105 uint8_t ridx[IEEE80211_RATE_MAXSIZE];
95};
106};
96#define IWN_NODE(_ni) ((struct iwn_node *)(_ni))
97
98struct iwn_calib_state {
99 uint8_t state;
100#define IWN_CALIB_STATE_INIT 0
101#define IWN_CALIB_STATE_ASSOC 1
102#define IWN_CALIB_STATE_RUN 2
107
108struct iwn_calib_state {
109 uint8_t state;
110#define IWN_CALIB_STATE_INIT 0
111#define IWN_CALIB_STATE_ASSOC 1
112#define IWN_CALIB_STATE_RUN 2
113
103 u_int nbeacons;
104 uint32_t noise[3];
105 uint32_t rssi[3];
114 u_int nbeacons;
115 uint32_t noise[3];
116 uint32_t rssi[3];
106 uint32_t corr_ofdm_x1;
107 uint32_t corr_ofdm_mrc_x1;
108 uint32_t corr_ofdm_x4;
109 uint32_t corr_ofdm_mrc_x4;
110 uint32_t corr_cck_x4;
111 uint32_t corr_cck_mrc_x4;
117 uint32_t ofdm_x1;
118 uint32_t ofdm_mrc_x1;
119 uint32_t ofdm_x4;
120 uint32_t ofdm_mrc_x4;
121 uint32_t cck_x4;
122 uint32_t cck_mrc_x4;
112 uint32_t bad_plcp_ofdm;
113 uint32_t fa_ofdm;
114 uint32_t bad_plcp_cck;
115 uint32_t fa_cck;
116 uint32_t low_fa;
117 uint8_t cck_state;
118#define IWN_CCK_STATE_INIT 0
119#define IWN_CCK_STATE_LOFA 1
120#define IWN_CCK_STATE_HIFA 2
123 uint32_t bad_plcp_ofdm;
124 uint32_t fa_ofdm;
125 uint32_t bad_plcp_cck;
126 uint32_t fa_cck;
127 uint32_t low_fa;
128 uint8_t cck_state;
129#define IWN_CCK_STATE_INIT 0
130#define IWN_CCK_STATE_LOFA 1
131#define IWN_CCK_STATE_HIFA 2
132
121 uint8_t noise_samples[20];
122 u_int cur_noise_sample;
123 uint8_t noise_ref;
124 uint32_t energy_samples[10];
125 u_int cur_energy_sample;
126 uint32_t energy_cck;
127};
128
133 uint8_t noise_samples[20];
134 u_int cur_noise_sample;
135 uint8_t noise_ref;
136 uint32_t energy_samples[10];
137 u_int cur_energy_sample;
138 uint32_t energy_cck;
139};
140
141struct iwn_calib_info {
142 uint8_t *buf;
143 u_int len;
144};
145
146struct iwn_fw_part {
147 const uint8_t *text;
148 uint32_t textsz;
149 const uint8_t *data;
150 uint32_t datasz;
151};
152
153struct iwn_fw_info {
154 u_char *data;
155 struct iwn_fw_part init;
156 struct iwn_fw_part main;
157 struct iwn_fw_part boot;
158};
159
160struct iwn_hal {
161 int (*load_firmware)(struct iwn_softc *);
162 void (*read_eeprom)(struct iwn_softc *);
163 int (*post_alive)(struct iwn_softc *);
164 int (*apm_init)(struct iwn_softc *);
165 int (*nic_config)(struct iwn_softc *);
166 void (*update_sched)(struct iwn_softc *, int, int, uint8_t,
167 uint16_t);
168 int (*get_temperature)(struct iwn_softc *);
169 int (*get_rssi)(struct iwn_softc *, struct iwn_rx_stat *);
170 int (*set_txpower)(struct iwn_softc *,
171 struct ieee80211_channel *, int);
172 int (*init_gains)(struct iwn_softc *);
173 int (*set_gains)(struct iwn_softc *);
174 int (*add_node)(struct iwn_softc *, struct iwn_node_info *,
175 int);
176 void (*tx_done)(struct iwn_softc *, struct iwn_rx_desc *,
177 struct iwn_rx_data *);
178 const struct iwn_sensitivity_limits *limits;
179 int ntxqs;
180 int ndmachnls;
181 uint8_t broadcast_id;
182 int rxonsz;
183 int schedsz;
184 uint32_t fw_text_maxsz;
185 uint32_t fw_data_maxsz;
186 uint32_t fwsz;
187 bus_size_t sched_txfact_addr;
188};
189
129struct iwn_vap {
130 struct ieee80211vap iv_vap;
131 struct ieee80211_amrr iv_amrr;
132 struct callout iv_amrr_to;
190struct iwn_vap {
191 struct ieee80211vap iv_vap;
192 struct ieee80211_amrr iv_amrr;
193 struct callout iv_amrr_to;
194 uint8_t iv_ridx;
133
134 int (*iv_newstate)(struct ieee80211vap *,
135 enum ieee80211_state, int);
136};
137#define IWN_VAP(_vap) ((struct iwn_vap *)(_vap))
138
139struct iwn_softc {
140 struct ifnet *sc_ifp;
141 int sc_debug;
195
196 int (*iv_newstate)(struct ieee80211vap *,
197 enum ieee80211_state, int);
198};
199#define IWN_VAP(_vap) ((struct iwn_vap *)(_vap))
200
201struct iwn_softc {
202 struct ifnet *sc_ifp;
203 int sc_debug;
142 struct callout sc_timer_to; /* calib+watchdog timer */
143 int sc_tx_timer; /* tx watchdog timer/counter */
144 const struct ieee80211_channel *sc_curchan;
145
204
146 struct iwn_rx_radiotap_header sc_rxtap;
147 struct iwn_tx_radiotap_header sc_txtap;
148
149 /* locks */
150 struct mtx sc_mtx;
151
205 /* locks */
206 struct mtx sc_mtx;
207
152 /* bus */
208 /* Bus */
153 device_t sc_dev;
154 int mem_rid;
155 int irq_rid;
156 struct resource *mem;
157 struct resource *irq;
158
209 device_t sc_dev;
210 int mem_rid;
211 int irq_rid;
212 struct resource *mem;
213 struct resource *irq;
214
159 /* shared area */
160 struct iwn_dma_info shared_dma;
161 struct iwn_shared *shared;
215 u_int sc_flags;
216#define IWN_FLAG_HAS_5GHZ (1 << 0)
217#define IWN_FLAG_HAS_OTPROM (1 << 1)
218#define IWN_FLAG_FIRST_BOOT (1 << 2)
162
219
163 /* "keep warm" page */
220 uint8_t hw_type;
221 const struct iwn_hal *sc_hal;
222 const char *fwname;
223
224 /* TX scheduler rings. */
225 struct iwn_dma_info sched_dma;
226 uint16_t *sched;
227 uint32_t sched_base;
228
229 /* "Keep Warm" page. */
164 struct iwn_dma_info kw_dma;
165
230 struct iwn_dma_info kw_dma;
231
166 /* firmware image */
232 /* Firmware image. */
167 const struct firmware *fw_fp;
168
233 const struct firmware *fw_fp;
234
169 /* firmware DMA transfer */
235 /* Firmware DMA transfer. */
170 struct iwn_dma_info fw_dma;
171
236 struct iwn_dma_info fw_dma;
237
172 /* rings */
173 struct iwn_tx_ring txq[IWN_NTXQUEUES];
238 /* TX/RX rings. */
239 struct iwn_tx_ring txq[IWN5000_NTXQUEUES];
174 struct iwn_rx_ring rxq;
175
176 bus_space_tag_t sc_st;
177 bus_space_handle_t sc_sh;
178 void *sc_ih;
179 bus_size_t sc_sz;
240 struct iwn_rx_ring rxq;
241
242 bus_space_tag_t sc_st;
243 bus_space_handle_t sc_sh;
244 void *sc_ih;
245 bus_size_t sc_sz;
246 int sc_cap_off; /* PCIe Capabilities. */
180
181 /* Tasks used by the driver */
182 struct task sc_reinit_task;
183 struct task sc_radioon_task;
184 struct task sc_radiooff_task;
247
248 /* Tasks used by the driver */
249 struct task sc_reinit_task;
250 struct task sc_radioon_task;
251 struct task sc_radiooff_task;
185
186 /* Thermal calibration */
252
187 int calib_cnt;
188 struct iwn_calib_state calib;
189
253 int calib_cnt;
254 struct iwn_calib_state calib;
255
256 struct iwn_fw_info fw;
257 struct iwn_calib_info calibcmd[5];
258 uint32_t errptr;
259
190 struct iwn_rx_stat last_rx_stat;
191 int last_rx_valid;
192 struct iwn_ucode_info ucode_info;
260 struct iwn_rx_stat last_rx_stat;
261 int last_rx_valid;
262 struct iwn_ucode_info ucode_info;
193 struct iwn_config config;
263 struct iwn_rxon rxon;
194 uint32_t rawtemp;
195 int temp;
196 int noise;
264 uint32_t rawtemp;
265 int temp;
266 int noise;
197 uint8_t antmsk;
267 uint32_t qfullmsk;
198
268
199 struct iwn_eeprom_band bands[IWN_NBANDS];
269 struct iwn4965_eeprom_band
270 bands[IWN_NBANDS];
271 uint16_t rfcfg;
272 char eeprom_domain[4];
273 uint32_t eeprom_crystal;
200 int16_t eeprom_voltage;
201 int8_t maxpwr2GHz;
202 int8_t maxpwr5GHz;
274 int16_t eeprom_voltage;
275 int8_t maxpwr2GHz;
276 int8_t maxpwr5GHz;
277 int8_t maxpwr[IEEE80211_CHAN_MAX];
278
279 uint32_t critical_temp;
280 uint8_t ntxchains;
281 uint8_t nrxchains;
282 uint8_t txantmsk;
283 uint8_t rxantmsk;
284 uint8_t antmsk;
285
286 struct callout sc_timer_to;
287 int sc_tx_timer;
288
289 struct iwn_rx_radiotap_header sc_rxtap;
290 struct iwn_tx_radiotap_header sc_txtap;
291 const struct ieee80211_channel *sc_curchan;
203};
204
205#define IWN_LOCK_INIT(_sc) \
206 mtx_init(&(_sc)->sc_mtx, device_get_nameunit((_sc)->sc_dev), \
207 MTX_NETWORK_LOCK, MTX_DEF)
208#define IWN_LOCK(_sc) mtx_lock(&(_sc)->sc_mtx)
209#define IWN_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->sc_mtx, MA_OWNED)
210#define IWN_UNLOCK(_sc) mtx_unlock(&(_sc)->sc_mtx)
211#define IWN_LOCK_DESTROY(_sc) mtx_destroy(&(_sc)->sc_mtx)
292};
293
294#define IWN_LOCK_INIT(_sc) \
295 mtx_init(&(_sc)->sc_mtx, device_get_nameunit((_sc)->sc_dev), \
296 MTX_NETWORK_LOCK, MTX_DEF)
297#define IWN_LOCK(_sc) mtx_lock(&(_sc)->sc_mtx)
298#define IWN_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->sc_mtx, MA_OWNED)
299#define IWN_UNLOCK(_sc) mtx_unlock(&(_sc)->sc_mtx)
300#define IWN_LOCK_DESTROY(_sc) mtx_destroy(&(_sc)->sc_mtx)