Commit | Line | Data |
---|---|---|
876c9d3a MT |
1 | /** |
2 | * This file contains definitions and data structures specific | |
3 | * to Marvell 802.11 NIC. It contains the Device Information | |
4 | * structure wlan_adapter. | |
5 | */ | |
6 | #ifndef _WLAN_DEV_H_ | |
7 | #define _WLAN_DEV_H_ | |
8 | ||
9 | #include <linux/netdevice.h> | |
10 | #include <linux/wireless.h> | |
11 | #include <linux/ethtool.h> | |
12 | #include <linux/debugfs.h> | |
4684c23d | 13 | #include <net/ieee80211.h> |
876c9d3a MT |
14 | |
15 | #include "defs.h" | |
16 | #include "scan.h" | |
17 | #include "thread.h" | |
18 | ||
19 | extern struct ethtool_ops libertas_ethtool_ops; | |
20 | ||
21 | #define MAX_BSSID_PER_CHANNEL 16 | |
22 | ||
23 | #define NR_TX_QUEUE 3 | |
24 | ||
25 | /* For the extended Scan */ | |
26 | #define MAX_EXTENDED_SCAN_BSSID_LIST MAX_BSSID_PER_CHANNEL * \ | |
27 | MRVDRV_MAX_CHANNEL_SIZE + 1 | |
28 | ||
29 | #define MAX_REGION_CHANNEL_NUM 2 | |
30 | ||
31 | /** Chan-freq-TxPower mapping table*/ | |
32 | struct chan_freq_power { | |
33 | /** channel Number */ | |
34 | u16 channel; | |
35 | /** frequency of this channel */ | |
36 | u32 freq; | |
37 | /** Max allowed Tx power level */ | |
38 | u16 maxtxpower; | |
39 | /** TRUE:channel unsupported; FLASE:supported*/ | |
40 | u8 unsupported; | |
41 | }; | |
42 | ||
43 | /** region-band mapping table*/ | |
44 | struct region_channel { | |
45 | /** TRUE if this entry is valid */ | |
46 | u8 valid; | |
47 | /** region code for US, Japan ... */ | |
48 | u8 region; | |
49 | /** band B/G/A, used for BAND_CONFIG cmd */ | |
50 | u8 band; | |
51 | /** Actual No. of elements in the array below */ | |
52 | u8 nrcfp; | |
53 | /** chan-freq-txpower mapping table*/ | |
54 | struct chan_freq_power *CFP; | |
55 | }; | |
56 | ||
57 | struct wlan_802_11_security { | |
58 | u8 WPAenabled; | |
59 | u8 WPA2enabled; | |
889c05bd | 60 | u8 wep_enabled; |
6affe785 | 61 | u8 auth_mode; |
876c9d3a MT |
62 | }; |
63 | ||
64 | /** Current Basic Service Set State Structure */ | |
65 | struct current_bss_params { | |
66 | struct bss_descriptor bssdescriptor; | |
67 | /** bssid */ | |
68 | u8 bssid[ETH_ALEN]; | |
69 | /** ssid */ | |
70 | struct WLAN_802_11_SSID ssid; | |
71 | ||
72 | /** band */ | |
73 | u8 band; | |
74 | /** channel */ | |
75 | u8 channel; | |
76 | /** number of rates supported */ | |
77 | int numofrates; | |
78 | /** supported rates*/ | |
79 | u8 datarates[WLAN_SUPPORTED_RATES]; | |
80 | }; | |
81 | ||
82 | /** sleep_params */ | |
83 | struct sleep_params { | |
84 | u16 sp_error; | |
85 | u16 sp_offset; | |
86 | u16 sp_stabletime; | |
87 | u8 sp_calcontrol; | |
88 | u8 sp_extsleepclk; | |
89 | u16 sp_reserved; | |
90 | }; | |
91 | ||
876c9d3a MT |
92 | /* Mesh statistics */ |
93 | struct wlan_mesh_stats { | |
94 | u32 fwd_bcast_cnt; /* Fwd: Broadcast counter */ | |
95 | u32 fwd_unicast_cnt; /* Fwd: Unicast counter */ | |
96 | u32 fwd_drop_ttl; /* Fwd: TTL zero */ | |
97 | u32 fwd_drop_rbt; /* Fwd: Recently Broadcasted */ | |
98 | u32 fwd_drop_noroute; /* Fwd: No route to Destination */ | |
99 | u32 fwd_drop_nobuf; /* Fwd: Run out of internal buffers */ | |
100 | u32 drop_blind; /* Rx: Dropped by blinding table */ | |
0601e7ee | 101 | u32 tx_failed_cnt; /* Tx: Failed transmissions */ |
876c9d3a MT |
102 | }; |
103 | ||
104 | /** Private structure for the MV device */ | |
105 | struct _wlan_private { | |
106 | int open; | |
107 | int mesh_open; | |
108 | int infra_open; | |
109 | ||
634b8f49 HS |
110 | char name[DEV_NAME_LEN]; |
111 | ||
112 | void *card; | |
876c9d3a | 113 | wlan_adapter *adapter; |
634b8f49 | 114 | struct net_device *dev; |
876c9d3a MT |
115 | |
116 | struct net_device_stats stats; | |
117 | struct net_device *mesh_dev ; /* Virtual device */ | |
118 | ||
119 | struct iw_statistics wstats; | |
120 | struct wlan_mesh_stats mstats; | |
121 | struct dentry *debugfs_dir; | |
122 | struct dentry *debugfs_debug; | |
123 | struct dentry *debugfs_files[6]; | |
124 | ||
125 | struct dentry *events_dir; | |
126 | struct dentry *debugfs_events_files[6]; | |
127 | ||
128 | struct dentry *regs_dir; | |
129 | struct dentry *debugfs_regs_files[6]; | |
130 | ||
131 | u32 mac_offset; | |
132 | u32 bbp_offset; | |
133 | u32 rf_offset; | |
134 | ||
634b8f49 HS |
135 | /** Upload length */ |
136 | u32 upld_len; | |
137 | /* Upload buffer */ | |
138 | u8 upld_buf[WLAN_UPLD_SIZE]; | |
139 | /* Download sent: | |
140 | bit0 1/0=data_sent/data_tx_done, | |
141 | bit1 1/0=cmd_sent/cmd_tx_done, | |
142 | all other bits reserved 0 */ | |
143 | u8 dnld_sent; | |
144 | ||
876c9d3a MT |
145 | const struct firmware *firmware; |
146 | struct device *hotplug_device; | |
147 | ||
148 | /** thread to service interrupts */ | |
149 | struct wlan_thread mainthread; | |
150 | ||
151 | struct delayed_work assoc_work; | |
152 | struct workqueue_struct *assoc_thread; | |
208fdd2f HS |
153 | |
154 | /** Hardware access */ | |
155 | int (*hw_register_dev) (wlan_private * priv); | |
156 | int (*hw_unregister_dev) (wlan_private *); | |
157 | int (*hw_prog_firmware) (wlan_private *); | |
158 | int (*hw_host_to_card) (wlan_private * priv, u8 type, u8 * payload, u16 nb); | |
159 | int (*hw_get_int_status) (wlan_private * priv, u8 *); | |
160 | int (*hw_read_event_cause) (wlan_private *); | |
876c9d3a MT |
161 | }; |
162 | ||
163 | /** Association request | |
164 | * | |
165 | * Encapsulates all the options that describe a specific assocation request | |
166 | * or configuration of the wireless card's radio, mode, and security settings. | |
167 | */ | |
168 | struct assoc_request { | |
169 | #define ASSOC_FLAG_SSID 1 | |
170 | #define ASSOC_FLAG_CHANNEL 2 | |
171 | #define ASSOC_FLAG_MODE 3 | |
172 | #define ASSOC_FLAG_BSSID 4 | |
173 | #define ASSOC_FLAG_WEP_KEYS 5 | |
174 | #define ASSOC_FLAG_WEP_TX_KEYIDX 6 | |
175 | #define ASSOC_FLAG_WPA_MCAST_KEY 7 | |
176 | #define ASSOC_FLAG_WPA_UCAST_KEY 8 | |
177 | #define ASSOC_FLAG_SECINFO 9 | |
178 | #define ASSOC_FLAG_WPA_IE 10 | |
179 | unsigned long flags; | |
180 | ||
181 | struct WLAN_802_11_SSID ssid; | |
182 | u8 channel; | |
0dc5a290 | 183 | u8 mode; |
876c9d3a MT |
184 | u8 bssid[ETH_ALEN]; |
185 | ||
186 | /** WEP keys */ | |
187 | struct WLAN_802_11_KEY wep_keys[4]; | |
188 | u16 wep_tx_keyidx; | |
189 | ||
190 | /** WPA keys */ | |
191 | struct WLAN_802_11_KEY wpa_mcast_key; | |
192 | struct WLAN_802_11_KEY wpa_unicast_key; | |
193 | ||
194 | struct wlan_802_11_security secinfo; | |
195 | ||
196 | /** WPA Information Elements*/ | |
876c9d3a MT |
197 | u8 wpa_ie[MAX_WPA_IE_LEN]; |
198 | u8 wpa_ie_len; | |
199 | }; | |
200 | ||
201 | /** Wlan adapter data structure*/ | |
202 | struct _wlan_adapter { | |
203 | /** STATUS variables */ | |
204 | u32 fwreleasenumber; | |
205 | u32 fwcapinfo; | |
206 | /* protected with big lock */ | |
207 | ||
208 | struct mutex lock; | |
209 | ||
210 | u8 tmptxbuf[WLAN_UPLD_SIZE]; | |
211 | /* protected by hard_start_xmit serialization */ | |
212 | ||
213 | /** command-related variables */ | |
214 | u16 seqnum; | |
215 | /* protected by big lock */ | |
216 | ||
217 | struct cmd_ctrl_node *cmd_array; | |
218 | /** Current command */ | |
219 | struct cmd_ctrl_node *cur_cmd; | |
220 | int cur_cmd_retcode; | |
221 | /** command Queues */ | |
222 | /** Free command buffers */ | |
223 | struct list_head cmdfreeq; | |
224 | /** Pending command buffers */ | |
225 | struct list_head cmdpendingq; | |
226 | ||
227 | wait_queue_head_t cmd_pending; | |
228 | u8 nr_cmd_pending; | |
229 | /* command related variables protected by adapter->driver_lock */ | |
230 | ||
231 | /** Async and Sync Event variables */ | |
232 | u32 intcounter; | |
233 | u32 eventcause; | |
234 | u8 nodename[16]; /* nickname */ | |
235 | ||
236 | /** spin locks */ | |
237 | spinlock_t driver_lock; | |
238 | ||
239 | /** Timers */ | |
240 | struct timer_list command_timer; | |
241 | ||
242 | /* TX queue used in PS mode */ | |
243 | spinlock_t txqueue_lock; | |
244 | struct sk_buff *tx_queue_ps[NR_TX_QUEUE]; | |
245 | unsigned int tx_queue_idx; | |
246 | ||
247 | u8 hisregcpy; | |
248 | ||
249 | /** current ssid/bssid related parameters*/ | |
250 | struct current_bss_params curbssparams; | |
251 | ||
0dc5a290 DW |
252 | /* IW_MODE_* */ |
253 | u8 mode; | |
876c9d3a MT |
254 | |
255 | struct bss_descriptor *pattemptedbssdesc; | |
256 | ||
257 | struct WLAN_802_11_SSID previousssid; | |
258 | u8 previousbssid[ETH_ALEN]; | |
259 | ||
fcdb53db DW |
260 | /* Scan results list */ |
261 | struct list_head network_list; | |
262 | struct list_head network_free_list; | |
263 | struct bss_descriptor *networks; | |
876c9d3a MT |
264 | |
265 | u8 scantype; | |
266 | u32 scanmode; | |
267 | ||
268 | u16 beaconperiod; | |
269 | u8 adhoccreate; | |
270 | ||
271 | /** capability Info used in Association, start, join */ | |
272 | struct ieeetypes_capinfo capinfo; | |
273 | ||
274 | /** MAC address information */ | |
275 | u8 current_addr[ETH_ALEN]; | |
276 | u8 multicastlist[MRVDRV_MAX_MULTICAST_LIST_SIZE][ETH_ALEN]; | |
277 | u32 nr_of_multicastmacaddr; | |
278 | ||
279 | /** 802.11 statistics */ | |
280 | // struct cmd_DS_802_11_GET_STAT wlan802_11Stat; | |
281 | ||
282 | u16 enablehwauto; | |
283 | u16 ratebitmap; | |
284 | /** control G rates */ | |
285 | u8 adhoc_grate_enabled; | |
286 | ||
287 | u32 txantenna; | |
288 | u32 rxantenna; | |
289 | ||
876c9d3a MT |
290 | u32 fragthsd; |
291 | u32 rtsthsd; | |
292 | ||
293 | u32 datarate; | |
294 | u8 is_datarate_auto; | |
295 | ||
296 | u16 listeninterval; | |
297 | u16 prescan; | |
298 | u8 txretrycount; | |
299 | ||
300 | /** Tx-related variables (for single packet tx) */ | |
301 | struct sk_buff *currenttxskb; | |
302 | u16 TxLockFlag; | |
303 | ||
304 | /** NIC Operation characteristics */ | |
305 | u16 currentpacketfilter; | |
306 | u32 connect_status; | |
307 | u16 regioncode; | |
308 | u16 regiontableindex; | |
309 | u16 txpowerlevel; | |
310 | ||
311 | /** POWER MANAGEMENT AND PnP SUPPORT */ | |
312 | u8 surpriseremoved; | |
313 | u16 atimwindow; | |
314 | ||
315 | u16 psmode; /* Wlan802_11PowermodeCAM=disable | |
316 | Wlan802_11PowermodeMAX_PSP=enable */ | |
317 | u16 multipledtim; | |
318 | u32 psstate; | |
319 | u8 needtowakeup; | |
320 | ||
321 | struct PS_CMD_ConfirmSleep libertas_ps_confirm_sleep; | |
322 | u16 locallisteninterval; | |
323 | u16 nullpktinterval; | |
324 | ||
325 | struct assoc_request * assoc_req; | |
326 | ||
327 | /** Encryption parameter */ | |
328 | struct wlan_802_11_security secinfo; | |
329 | ||
330 | /** WEP keys */ | |
331 | struct WLAN_802_11_KEY wep_keys[4]; | |
332 | u16 wep_tx_keyidx; | |
333 | ||
334 | /** WPA keys */ | |
335 | struct WLAN_802_11_KEY wpa_mcast_key; | |
336 | struct WLAN_802_11_KEY wpa_unicast_key; | |
337 | ||
338 | /** WPA Information Elements*/ | |
876c9d3a MT |
339 | u8 wpa_ie[MAX_WPA_IE_LEN]; |
340 | u8 wpa_ie_len; | |
341 | ||
342 | u16 rxantennamode; | |
343 | u16 txantennamode; | |
344 | ||
345 | /** Requested Signal Strength*/ | |
346 | u16 bcn_avg_factor; | |
347 | u16 data_avg_factor; | |
348 | u16 SNR[MAX_TYPE_B][MAX_TYPE_AVG]; | |
349 | u16 NF[MAX_TYPE_B][MAX_TYPE_AVG]; | |
350 | u8 RSSI[MAX_TYPE_B][MAX_TYPE_AVG]; | |
351 | u8 rawSNR[DEFAULT_DATA_AVG_FACTOR]; | |
352 | u8 rawNF[DEFAULT_DATA_AVG_FACTOR]; | |
353 | u16 nextSNRNF; | |
354 | u16 numSNRNF; | |
355 | u16 rxpd_rate; | |
356 | ||
357 | u8 radioon; | |
358 | u32 preamble; | |
359 | ||
360 | /** Multi bands Parameter*/ | |
361 | u8 libertas_supported_rates[G_SUPPORTED_RATES]; | |
362 | ||
363 | /** Blue Tooth Co-existence Arbitration */ | |
364 | ||
365 | /** sleep_params */ | |
366 | struct sleep_params sp; | |
367 | ||
368 | /** RF calibration data */ | |
369 | ||
370 | #define MAX_REGION_CHANNEL_NUM 2 | |
371 | /** region channel data */ | |
372 | struct region_channel region_channel[MAX_REGION_CHANNEL_NUM]; | |
373 | ||
374 | struct region_channel universal_channel[MAX_REGION_CHANNEL_NUM]; | |
375 | ||
376 | /** 11D and Domain Regulatory Data */ | |
377 | struct wlan_802_11d_domain_reg domainreg; | |
378 | struct parsed_region_chan_11d parsed_region_chan; | |
379 | ||
380 | /** FSM variable for 11d support */ | |
381 | u32 enable11d; | |
382 | ||
383 | /** MISCELLANEOUS */ | |
384 | u8 *prdeeprom; | |
385 | struct wlan_offset_value offsetvalue; | |
386 | ||
387 | struct cmd_ds_802_11_get_log logmsg; | |
388 | u16 scanprobes; | |
389 | ||
390 | u32 pkttxctrl; | |
391 | ||
392 | u16 txrate; | |
393 | u32 linkmode; | |
394 | u32 radiomode; | |
395 | u32 debugmode; | |
396 | u8 fw_ready; | |
064827ed MT |
397 | |
398 | u8 last_scanned_channel; | |
876c9d3a MT |
399 | }; |
400 | ||
401 | #endif /* _WLAN_DEV_H_ */ |