]>
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 | |
aa21c004 | 4 | * structure struct lbs_private.. |
876c9d3a | 5 | */ |
10078321 HS |
6 | #ifndef _LBS_DEV_H_ |
7 | #define _LBS_DEV_H_ | |
876c9d3a MT |
8 | |
9 | #include <linux/netdevice.h> | |
10 | #include <linux/wireless.h> | |
11 | #include <linux/ethtool.h> | |
12 | #include <linux/debugfs.h> | |
13 | ||
14 | #include "defs.h" | |
245bf20f | 15 | #include "hostcmd.h" |
876c9d3a | 16 | |
10078321 | 17 | extern struct ethtool_ops lbs_ethtool_ops; |
876c9d3a MT |
18 | |
19 | #define MAX_BSSID_PER_CHANNEL 16 | |
20 | ||
21 | #define NR_TX_QUEUE 3 | |
22 | ||
23 | /* For the extended Scan */ | |
24 | #define MAX_EXTENDED_SCAN_BSSID_LIST MAX_BSSID_PER_CHANNEL * \ | |
25 | MRVDRV_MAX_CHANNEL_SIZE + 1 | |
26 | ||
27 | #define MAX_REGION_CHANNEL_NUM 2 | |
28 | ||
29 | /** Chan-freq-TxPower mapping table*/ | |
30 | struct chan_freq_power { | |
31 | /** channel Number */ | |
32 | u16 channel; | |
33 | /** frequency of this channel */ | |
34 | u32 freq; | |
35 | /** Max allowed Tx power level */ | |
36 | u16 maxtxpower; | |
37 | /** TRUE:channel unsupported; FLASE:supported*/ | |
38 | u8 unsupported; | |
39 | }; | |
40 | ||
41 | /** region-band mapping table*/ | |
42 | struct region_channel { | |
43 | /** TRUE if this entry is valid */ | |
44 | u8 valid; | |
45 | /** region code for US, Japan ... */ | |
46 | u8 region; | |
47 | /** band B/G/A, used for BAND_CONFIG cmd */ | |
48 | u8 band; | |
49 | /** Actual No. of elements in the array below */ | |
50 | u8 nrcfp; | |
51 | /** chan-freq-txpower mapping table*/ | |
52 | struct chan_freq_power *CFP; | |
53 | }; | |
54 | ||
10078321 | 55 | struct lbs_802_11_security { |
876c9d3a MT |
56 | u8 WPAenabled; |
57 | u8 WPA2enabled; | |
889c05bd | 58 | u8 wep_enabled; |
6affe785 | 59 | u8 auth_mode; |
9c40fc51 | 60 | u32 key_mgmt; |
876c9d3a MT |
61 | }; |
62 | ||
63 | /** Current Basic Service Set State Structure */ | |
64 | struct current_bss_params { | |
876c9d3a MT |
65 | /** bssid */ |
66 | u8 bssid[ETH_ALEN]; | |
67 | /** ssid */ | |
d8efea25 DW |
68 | u8 ssid[IW_ESSID_MAX_SIZE + 1]; |
69 | u8 ssid_len; | |
876c9d3a MT |
70 | |
71 | /** band */ | |
72 | u8 band; | |
73 | /** channel */ | |
74 | u8 channel; | |
8c512765 DW |
75 | /** zero-terminated array of supported data rates */ |
76 | u8 rates[MAX_RATES + 1]; | |
876c9d3a MT |
77 | }; |
78 | ||
79 | /** sleep_params */ | |
80 | struct sleep_params { | |
3fbe104c DW |
81 | uint16_t sp_error; |
82 | uint16_t sp_offset; | |
83 | uint16_t sp_stabletime; | |
84 | uint8_t sp_calcontrol; | |
85 | uint8_t sp_extsleepclk; | |
86 | uint16_t sp_reserved; | |
876c9d3a MT |
87 | }; |
88 | ||
876c9d3a | 89 | /* Mesh statistics */ |
10078321 | 90 | struct lbs_mesh_stats { |
876c9d3a MT |
91 | u32 fwd_bcast_cnt; /* Fwd: Broadcast counter */ |
92 | u32 fwd_unicast_cnt; /* Fwd: Unicast counter */ | |
93 | u32 fwd_drop_ttl; /* Fwd: TTL zero */ | |
94 | u32 fwd_drop_rbt; /* Fwd: Recently Broadcasted */ | |
95 | u32 fwd_drop_noroute; /* Fwd: No route to Destination */ | |
96 | u32 fwd_drop_nobuf; /* Fwd: Run out of internal buffers */ | |
97 | u32 drop_blind; /* Rx: Dropped by blinding table */ | |
0601e7ee | 98 | u32 tx_failed_cnt; /* Tx: Failed transmissions */ |
876c9d3a MT |
99 | }; |
100 | ||
101 | /** Private structure for the MV device */ | |
69f9032d | 102 | struct lbs_private { |
876c9d3a | 103 | int mesh_open; |
684d6b36 | 104 | int mesh_fw_ver; |
876c9d3a | 105 | int infra_open; |
d21b31fd | 106 | int mesh_autostart_enabled; |
876c9d3a | 107 | |
634b8f49 HS |
108 | char name[DEV_NAME_LEN]; |
109 | ||
110 | void *card; | |
634b8f49 | 111 | struct net_device *dev; |
876c9d3a | 112 | |
965f8bbc LCC |
113 | struct net_device *mesh_dev; /* Virtual device */ |
114 | struct net_device *rtap_net_dev; | |
876c9d3a MT |
115 | |
116 | struct iw_statistics wstats; | |
10078321 | 117 | struct lbs_mesh_stats mstats; |
876c9d3a MT |
118 | struct dentry *debugfs_dir; |
119 | struct dentry *debugfs_debug; | |
120 | struct dentry *debugfs_files[6]; | |
121 | ||
122 | struct dentry *events_dir; | |
123 | struct dentry *debugfs_events_files[6]; | |
124 | ||
125 | struct dentry *regs_dir; | |
126 | struct dentry *debugfs_regs_files[6]; | |
127 | ||
128 | u32 mac_offset; | |
129 | u32 bbp_offset; | |
130 | u32 rf_offset; | |
131 | ||
634b8f49 HS |
132 | /* Download sent: |
133 | bit0 1/0=data_sent/data_tx_done, | |
134 | bit1 1/0=cmd_sent/cmd_tx_done, | |
135 | all other bits reserved 0 */ | |
136 | u8 dnld_sent; | |
137 | ||
876c9d3a | 138 | /** thread to service interrupts */ |
fe336150 DW |
139 | struct task_struct *main_thread; |
140 | wait_queue_head_t waitq; | |
2afc0c5d | 141 | struct workqueue_struct *work_thread; |
876c9d3a | 142 | |
75bf45a7 DW |
143 | struct work_struct mcast_work; |
144 | ||
8816edce | 145 | /** Scanning */ |
2afc0c5d | 146 | struct delayed_work scan_work; |
876c9d3a | 147 | struct delayed_work assoc_work; |
b8bedefd | 148 | struct work_struct sync_channel; |
8816edce HS |
149 | /* remember which channel was scanned last, != 0 if currently scanning */ |
150 | int scan_channel; | |
52933d81 HS |
151 | u8 scan_ssid[IW_ESSID_MAX_SIZE + 1]; |
152 | u8 scan_ssid_len; | |
208fdd2f HS |
153 | |
154 | /** Hardware access */ | |
69f9032d | 155 | int (*hw_host_to_card) (struct lbs_private *priv, u8 type, u8 *payload, u16 nb); |
edf5dabf | 156 | void (*reset_card) (struct lbs_private *priv); |
876c9d3a | 157 | |
506e9025 DW |
158 | /* Wake On LAN */ |
159 | uint32_t wol_criteria; | |
160 | uint8_t wol_gpio; | |
161 | uint8_t wol_gap; | |
162 | ||
aa21c004 | 163 | /** Wlan adapter data structure*/ |
876c9d3a | 164 | /** STATUS variables */ |
dac10a9f | 165 | u32 fwrelease; |
876c9d3a | 166 | u32 fwcapinfo; |
876c9d3a MT |
167 | |
168 | struct mutex lock; | |
169 | ||
2eb188a1 DW |
170 | /* TX packet ready to be sent... */ |
171 | int tx_pending_len; /* -1 while building packet */ | |
172 | ||
173 | u8 tx_pending_buf[LBS_UPLD_SIZE]; | |
876c9d3a MT |
174 | /* protected by hard_start_xmit serialization */ |
175 | ||
176 | /** command-related variables */ | |
177 | u16 seqnum; | |
876c9d3a MT |
178 | |
179 | struct cmd_ctrl_node *cmd_array; | |
180 | /** Current command */ | |
181 | struct cmd_ctrl_node *cur_cmd; | |
182 | int cur_cmd_retcode; | |
183 | /** command Queues */ | |
184 | /** Free command buffers */ | |
185 | struct list_head cmdfreeq; | |
186 | /** Pending command buffers */ | |
187 | struct list_head cmdpendingq; | |
188 | ||
189 | wait_queue_head_t cmd_pending; | |
876c9d3a | 190 | |
7919b89c HS |
191 | /* Command responses sent from the hardware to the driver */ |
192 | u8 resp_idx; | |
193 | u8 resp_buf[2][LBS_UPLD_SIZE]; | |
194 | u32 resp_len[2]; | |
195 | ||
196 | /* Events sent from hardware to driver */ | |
197 | struct kfifo *event_fifo; | |
198 | ||
199 | /* nickname */ | |
200 | u8 nodename[16]; | |
876c9d3a MT |
201 | |
202 | /** spin locks */ | |
203 | spinlock_t driver_lock; | |
204 | ||
205 | /** Timers */ | |
206 | struct timer_list command_timer; | |
2a345099 DW |
207 | int nr_retries; |
208 | int cmd_timed_out; | |
876c9d3a | 209 | |
876c9d3a MT |
210 | /** current ssid/bssid related parameters*/ |
211 | struct current_bss_params curbssparams; | |
020f3d00 DW |
212 | |
213 | uint16_t mesh_tlv; | |
23a397ac DW |
214 | u8 mesh_ssid[IW_ESSID_MAX_SIZE + 1]; |
215 | u8 mesh_ssid_len; | |
876c9d3a | 216 | |
0dc5a290 DW |
217 | /* IW_MODE_* */ |
218 | u8 mode; | |
876c9d3a | 219 | |
fcdb53db DW |
220 | /* Scan results list */ |
221 | struct list_head network_list; | |
222 | struct list_head network_free_list; | |
223 | struct bss_descriptor *networks; | |
876c9d3a | 224 | |
96287ac4 BD |
225 | u16 beacon_period; |
226 | u8 beacon_enable; | |
876c9d3a MT |
227 | u8 adhoccreate; |
228 | ||
229 | /** capability Info used in Association, start, join */ | |
0c9ca690 | 230 | u16 capability; |
876c9d3a MT |
231 | |
232 | /** MAC address information */ | |
233 | u8 current_addr[ETH_ALEN]; | |
234 | u8 multicastlist[MRVDRV_MAX_MULTICAST_LIST_SIZE][ETH_ALEN]; | |
235 | u32 nr_of_multicastmacaddr; | |
236 | ||
237 | /** 802.11 statistics */ | |
238 | // struct cmd_DS_802_11_GET_STAT wlan802_11Stat; | |
239 | ||
85319f93 JC |
240 | uint16_t enablehwauto; |
241 | uint16_t ratebitmap; | |
876c9d3a | 242 | |
876c9d3a MT |
243 | u8 txretrycount; |
244 | ||
245 | /** Tx-related variables (for single packet tx) */ | |
246 | struct sk_buff *currenttxskb; | |
876c9d3a MT |
247 | |
248 | /** NIC Operation characteristics */ | |
d9e9778c | 249 | u16 mac_control; |
876c9d3a | 250 | u32 connect_status; |
01d77d8d | 251 | u32 mesh_connect_status; |
876c9d3a | 252 | u16 regioncode; |
87c8c72d DW |
253 | s16 txpower_cur; |
254 | s16 txpower_min; | |
255 | s16 txpower_max; | |
876c9d3a MT |
256 | |
257 | /** POWER MANAGEMENT AND PnP SUPPORT */ | |
258 | u8 surpriseremoved; | |
876c9d3a MT |
259 | |
260 | u16 psmode; /* Wlan802_11PowermodeCAM=disable | |
261 | Wlan802_11PowermodeMAX_PSP=enable */ | |
876c9d3a | 262 | u32 psstate; |
b2c57eee | 263 | char ps_supported; |
876c9d3a MT |
264 | u8 needtowakeup; |
265 | ||
e76850d6 DW |
266 | struct assoc_request * pending_assoc_req; |
267 | struct assoc_request * in_progress_assoc_req; | |
876c9d3a MT |
268 | |
269 | /** Encryption parameter */ | |
10078321 | 270 | struct lbs_802_11_security secinfo; |
876c9d3a MT |
271 | |
272 | /** WEP keys */ | |
1443b653 | 273 | struct enc_key wep_keys[4]; |
876c9d3a MT |
274 | u16 wep_tx_keyidx; |
275 | ||
276 | /** WPA keys */ | |
1443b653 DW |
277 | struct enc_key wpa_mcast_key; |
278 | struct enc_key wpa_unicast_key; | |
876c9d3a | 279 | |
2c706002 JB |
280 | /* |
281 | * In theory, the IE is limited to the IE length, 255, | |
282 | * but in practice 64 bytes are enough. | |
283 | */ | |
284 | #define MAX_WPA_IE_LEN 64 | |
285 | ||
876c9d3a | 286 | /** WPA Information Elements*/ |
876c9d3a MT |
287 | u8 wpa_ie[MAX_WPA_IE_LEN]; |
288 | u8 wpa_ie_len; | |
289 | ||
876c9d3a | 290 | /** Requested Signal Strength*/ |
876c9d3a MT |
291 | u16 SNR[MAX_TYPE_B][MAX_TYPE_AVG]; |
292 | u16 NF[MAX_TYPE_B][MAX_TYPE_AVG]; | |
293 | u8 RSSI[MAX_TYPE_B][MAX_TYPE_AVG]; | |
294 | u8 rawSNR[DEFAULT_DATA_AVG_FACTOR]; | |
295 | u8 rawNF[DEFAULT_DATA_AVG_FACTOR]; | |
296 | u16 nextSNRNF; | |
297 | u16 numSNRNF; | |
876c9d3a | 298 | |
d5db2dfa | 299 | u8 radio_on; |
876c9d3a | 300 | |
8c512765 DW |
301 | /** data rate stuff */ |
302 | u8 cur_rate; | |
876c9d3a | 303 | |
876c9d3a MT |
304 | /** RF calibration data */ |
305 | ||
306 | #define MAX_REGION_CHANNEL_NUM 2 | |
307 | /** region channel data */ | |
308 | struct region_channel region_channel[MAX_REGION_CHANNEL_NUM]; | |
309 | ||
310 | struct region_channel universal_channel[MAX_REGION_CHANNEL_NUM]; | |
311 | ||
312 | /** 11D and Domain Regulatory Data */ | |
10078321 | 313 | struct lbs_802_11d_domain_reg domainreg; |
876c9d3a MT |
314 | struct parsed_region_chan_11d parsed_region_chan; |
315 | ||
316 | /** FSM variable for 11d support */ | |
317 | u32 enable11d; | |
318 | ||
319 | /** MISCELLANEOUS */ | |
10078321 | 320 | struct lbs_offset_value offsetvalue; |
876c9d3a | 321 | |
965f8bbc | 322 | u32 monitormode; |
876c9d3a MT |
323 | u8 fw_ready; |
324 | }; | |
325 | ||
f539f2ef HS |
326 | extern struct cmd_confirm_sleep confirm_sleep; |
327 | ||
245bf20f HS |
328 | /** |
329 | * @brief Structure used to store information for each beacon/probe response | |
330 | */ | |
331 | struct bss_descriptor { | |
332 | u8 bssid[ETH_ALEN]; | |
333 | ||
334 | u8 ssid[IW_ESSID_MAX_SIZE + 1]; | |
335 | u8 ssid_len; | |
336 | ||
337 | u16 capability; | |
338 | u32 rssi; | |
339 | u32 channel; | |
340 | u16 beaconperiod; | |
341 | u32 atimwindow; | |
342 | ||
343 | /* IW_MODE_AUTO, IW_MODE_ADHOC, IW_MODE_INFRA */ | |
344 | u8 mode; | |
345 | ||
346 | /* zero-terminated array of supported data rates */ | |
347 | u8 rates[MAX_RATES + 1]; | |
348 | ||
349 | unsigned long last_scanned; | |
350 | ||
351 | union ieeetypes_phyparamset phyparamset; | |
352 | union IEEEtypes_ssparamset ssparamset; | |
353 | ||
354 | struct ieeetypes_countryinfofullset countryinfo; | |
355 | ||
356 | u8 wpa_ie[MAX_WPA_IE_LEN]; | |
357 | size_t wpa_ie_len; | |
358 | u8 rsn_ie[MAX_WPA_IE_LEN]; | |
359 | size_t rsn_ie_len; | |
360 | ||
361 | u8 mesh; | |
362 | ||
363 | struct list_head list; | |
364 | }; | |
365 | ||
aa21c004 DW |
366 | /** Association request |
367 | * | |
368 | * Encapsulates all the options that describe a specific assocation request | |
369 | * or configuration of the wireless card's radio, mode, and security settings. | |
370 | */ | |
371 | struct assoc_request { | |
372 | #define ASSOC_FLAG_SSID 1 | |
373 | #define ASSOC_FLAG_CHANNEL 2 | |
374 | #define ASSOC_FLAG_BAND 3 | |
375 | #define ASSOC_FLAG_MODE 4 | |
376 | #define ASSOC_FLAG_BSSID 5 | |
377 | #define ASSOC_FLAG_WEP_KEYS 6 | |
378 | #define ASSOC_FLAG_WEP_TX_KEYIDX 7 | |
379 | #define ASSOC_FLAG_WPA_MCAST_KEY 8 | |
380 | #define ASSOC_FLAG_WPA_UCAST_KEY 9 | |
381 | #define ASSOC_FLAG_SECINFO 10 | |
382 | #define ASSOC_FLAG_WPA_IE 11 | |
383 | unsigned long flags; | |
384 | ||
385 | u8 ssid[IW_ESSID_MAX_SIZE + 1]; | |
386 | u8 ssid_len; | |
387 | u8 channel; | |
388 | u8 band; | |
389 | u8 mode; | |
5a6e0434 | 390 | u8 bssid[ETH_ALEN] __attribute__ ((aligned (2))); |
aa21c004 DW |
391 | |
392 | /** WEP keys */ | |
393 | struct enc_key wep_keys[4]; | |
394 | u16 wep_tx_keyidx; | |
395 | ||
396 | /** WPA keys */ | |
397 | struct enc_key wpa_mcast_key; | |
398 | struct enc_key wpa_unicast_key; | |
399 | ||
400 | struct lbs_802_11_security secinfo; | |
401 | ||
402 | /** WPA Information Elements*/ | |
403 | u8 wpa_ie[MAX_WPA_IE_LEN]; | |
404 | u8 wpa_ie_len; | |
405 | ||
406 | /* BSS to associate with for infrastructure of Ad-Hoc join */ | |
407 | struct bss_descriptor bss; | |
408 | }; | |
409 | ||
10078321 | 410 | #endif |