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) |