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 | |
10078321 | 4 | * structure lbs_adapter. |
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> | |
4684c23d | 13 | #include <net/ieee80211.h> |
876c9d3a MT |
14 | |
15 | #include "defs.h" | |
16 | #include "scan.h" | |
876c9d3a | 17 | |
10078321 | 18 | extern struct ethtool_ops lbs_ethtool_ops; |
876c9d3a MT |
19 | |
20 | #define MAX_BSSID_PER_CHANNEL 16 | |
21 | ||
22 | #define NR_TX_QUEUE 3 | |
23 | ||
24 | /* For the extended Scan */ | |
25 | #define MAX_EXTENDED_SCAN_BSSID_LIST MAX_BSSID_PER_CHANNEL * \ | |
26 | MRVDRV_MAX_CHANNEL_SIZE + 1 | |
27 | ||
28 | #define MAX_REGION_CHANNEL_NUM 2 | |
29 | ||
30 | /** Chan-freq-TxPower mapping table*/ | |
31 | struct chan_freq_power { | |
32 | /** channel Number */ | |
33 | u16 channel; | |
34 | /** frequency of this channel */ | |
35 | u32 freq; | |
36 | /** Max allowed Tx power level */ | |
37 | u16 maxtxpower; | |
38 | /** TRUE:channel unsupported; FLASE:supported*/ | |
39 | u8 unsupported; | |
40 | }; | |
41 | ||
42 | /** region-band mapping table*/ | |
43 | struct region_channel { | |
44 | /** TRUE if this entry is valid */ | |
45 | u8 valid; | |
46 | /** region code for US, Japan ... */ | |
47 | u8 region; | |
48 | /** band B/G/A, used for BAND_CONFIG cmd */ | |
49 | u8 band; | |
50 | /** Actual No. of elements in the array below */ | |
51 | u8 nrcfp; | |
52 | /** chan-freq-txpower mapping table*/ | |
53 | struct chan_freq_power *CFP; | |
54 | }; | |
55 | ||
10078321 | 56 | struct lbs_802_11_security { |
876c9d3a MT |
57 | u8 WPAenabled; |
58 | u8 WPA2enabled; | |
889c05bd | 59 | u8 wep_enabled; |
6affe785 | 60 | u8 auth_mode; |
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 { | |
81 | u16 sp_error; | |
82 | u16 sp_offset; | |
83 | u16 sp_stabletime; | |
84 | u8 sp_calcontrol; | |
85 | u8 sp_extsleepclk; | |
86 | u16 sp_reserved; | |
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 */ | |
10078321 | 102 | struct _lbs_private { |
876c9d3a MT |
103 | int open; |
104 | int mesh_open; | |
105 | int infra_open; | |
d21b31fd | 106 | int mesh_autostart_enabled; |
63f0023b | 107 | __le16 boot2_version; |
876c9d3a | 108 | |
634b8f49 HS |
109 | char name[DEV_NAME_LEN]; |
110 | ||
111 | void *card; | |
10078321 | 112 | lbs_adapter *adapter; |
634b8f49 | 113 | struct net_device *dev; |
876c9d3a MT |
114 | |
115 | struct net_device_stats stats; | |
965f8bbc LCC |
116 | struct net_device *mesh_dev; /* Virtual device */ |
117 | struct net_device *rtap_net_dev; | |
118 | struct ieee80211_device *ieee; | |
876c9d3a MT |
119 | |
120 | struct iw_statistics wstats; | |
10078321 | 121 | struct lbs_mesh_stats mstats; |
876c9d3a MT |
122 | struct dentry *debugfs_dir; |
123 | struct dentry *debugfs_debug; | |
124 | struct dentry *debugfs_files[6]; | |
125 | ||
126 | struct dentry *events_dir; | |
127 | struct dentry *debugfs_events_files[6]; | |
128 | ||
129 | struct dentry *regs_dir; | |
130 | struct dentry *debugfs_regs_files[6]; | |
131 | ||
132 | u32 mac_offset; | |
133 | u32 bbp_offset; | |
134 | u32 rf_offset; | |
135 | ||
634b8f49 HS |
136 | /** Upload length */ |
137 | u32 upld_len; | |
138 | /* Upload buffer */ | |
10078321 | 139 | u8 upld_buf[LBS_UPLD_SIZE]; |
634b8f49 HS |
140 | /* Download sent: |
141 | bit0 1/0=data_sent/data_tx_done, | |
142 | bit1 1/0=cmd_sent/cmd_tx_done, | |
143 | all other bits reserved 0 */ | |
144 | u8 dnld_sent; | |
145 | ||
876c9d3a MT |
146 | struct device *hotplug_device; |
147 | ||
148 | /** thread to service interrupts */ | |
fe336150 DW |
149 | struct task_struct *main_thread; |
150 | wait_queue_head_t waitq; | |
2afc0c5d | 151 | struct workqueue_struct *work_thread; |
876c9d3a | 152 | |
2afc0c5d | 153 | struct delayed_work scan_work; |
876c9d3a | 154 | struct delayed_work assoc_work; |
b8bedefd | 155 | struct work_struct sync_channel; |
208fdd2f HS |
156 | |
157 | /** Hardware access */ | |
10078321 HS |
158 | int (*hw_host_to_card) (lbs_private *priv, u8 type, u8 *payload, u16 nb); |
159 | int (*hw_get_int_status) (lbs_private *priv, u8 *); | |
160 | int (*hw_read_event_cause) (lbs_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 | |
e76850d6 DW |
171 | #define ASSOC_FLAG_BAND 3 |
172 | #define ASSOC_FLAG_MODE 4 | |
173 | #define ASSOC_FLAG_BSSID 5 | |
174 | #define ASSOC_FLAG_WEP_KEYS 6 | |
175 | #define ASSOC_FLAG_WEP_TX_KEYIDX 7 | |
176 | #define ASSOC_FLAG_WPA_MCAST_KEY 8 | |
177 | #define ASSOC_FLAG_WPA_UCAST_KEY 9 | |
178 | #define ASSOC_FLAG_SECINFO 10 | |
179 | #define ASSOC_FLAG_WPA_IE 11 | |
876c9d3a MT |
180 | unsigned long flags; |
181 | ||
d8efea25 DW |
182 | u8 ssid[IW_ESSID_MAX_SIZE + 1]; |
183 | u8 ssid_len; | |
876c9d3a | 184 | u8 channel; |
e76850d6 | 185 | u8 band; |
0dc5a290 | 186 | u8 mode; |
876c9d3a MT |
187 | u8 bssid[ETH_ALEN]; |
188 | ||
189 | /** WEP keys */ | |
1443b653 | 190 | struct enc_key wep_keys[4]; |
876c9d3a MT |
191 | u16 wep_tx_keyidx; |
192 | ||
193 | /** WPA keys */ | |
1443b653 DW |
194 | struct enc_key wpa_mcast_key; |
195 | struct enc_key wpa_unicast_key; | |
876c9d3a | 196 | |
10078321 | 197 | struct lbs_802_11_security secinfo; |
876c9d3a MT |
198 | |
199 | /** WPA Information Elements*/ | |
876c9d3a MT |
200 | u8 wpa_ie[MAX_WPA_IE_LEN]; |
201 | u8 wpa_ie_len; | |
e76850d6 DW |
202 | |
203 | /* BSS to associate with for infrastructure of Ad-Hoc join */ | |
204 | struct bss_descriptor bss; | |
876c9d3a MT |
205 | }; |
206 | ||
207 | /** Wlan adapter data structure*/ | |
10078321 | 208 | struct _lbs_adapter { |
876c9d3a | 209 | /** STATUS variables */ |
e5b3d472 | 210 | u8 fwreleasenumber[4]; |
876c9d3a MT |
211 | u32 fwcapinfo; |
212 | /* protected with big lock */ | |
213 | ||
214 | struct mutex lock; | |
215 | ||
10078321 | 216 | u8 tmptxbuf[LBS_UPLD_SIZE]; |
876c9d3a MT |
217 | /* protected by hard_start_xmit serialization */ |
218 | ||
219 | /** command-related variables */ | |
220 | u16 seqnum; | |
221 | /* protected by big lock */ | |
222 | ||
223 | struct cmd_ctrl_node *cmd_array; | |
224 | /** Current command */ | |
225 | struct cmd_ctrl_node *cur_cmd; | |
226 | int cur_cmd_retcode; | |
227 | /** command Queues */ | |
228 | /** Free command buffers */ | |
229 | struct list_head cmdfreeq; | |
230 | /** Pending command buffers */ | |
231 | struct list_head cmdpendingq; | |
232 | ||
233 | wait_queue_head_t cmd_pending; | |
234 | u8 nr_cmd_pending; | |
235 | /* command related variables protected by adapter->driver_lock */ | |
236 | ||
237 | /** Async and Sync Event variables */ | |
238 | u32 intcounter; | |
239 | u32 eventcause; | |
240 | u8 nodename[16]; /* nickname */ | |
241 | ||
242 | /** spin locks */ | |
243 | spinlock_t driver_lock; | |
244 | ||
245 | /** Timers */ | |
246 | struct timer_list command_timer; | |
247 | ||
248 | /* TX queue used in PS mode */ | |
249 | spinlock_t txqueue_lock; | |
250 | struct sk_buff *tx_queue_ps[NR_TX_QUEUE]; | |
251 | unsigned int tx_queue_idx; | |
252 | ||
253 | u8 hisregcpy; | |
254 | ||
255 | /** current ssid/bssid related parameters*/ | |
256 | struct current_bss_params curbssparams; | |
257 | ||
0dc5a290 DW |
258 | /* IW_MODE_* */ |
259 | u8 mode; | |
876c9d3a | 260 | |
fcdb53db DW |
261 | /* Scan results list */ |
262 | struct list_head network_list; | |
263 | struct list_head network_free_list; | |
264 | struct bss_descriptor *networks; | |
876c9d3a | 265 | |
96287ac4 BD |
266 | u16 beacon_period; |
267 | u8 beacon_enable; | |
876c9d3a MT |
268 | u8 adhoccreate; |
269 | ||
270 | /** capability Info used in Association, start, join */ | |
0c9ca690 | 271 | u16 capability; |
876c9d3a MT |
272 | |
273 | /** MAC address information */ | |
274 | u8 current_addr[ETH_ALEN]; | |
275 | u8 multicastlist[MRVDRV_MAX_MULTICAST_LIST_SIZE][ETH_ALEN]; | |
276 | u32 nr_of_multicastmacaddr; | |
277 | ||
278 | /** 802.11 statistics */ | |
279 | // struct cmd_DS_802_11_GET_STAT wlan802_11Stat; | |
280 | ||
281 | u16 enablehwauto; | |
282 | u16 ratebitmap; | |
876c9d3a | 283 | |
876c9d3a MT |
284 | u32 fragthsd; |
285 | u32 rtsthsd; | |
286 | ||
876c9d3a MT |
287 | u8 txretrycount; |
288 | ||
289 | /** Tx-related variables (for single packet tx) */ | |
290 | struct sk_buff *currenttxskb; | |
291 | u16 TxLockFlag; | |
292 | ||
293 | /** NIC Operation characteristics */ | |
294 | u16 currentpacketfilter; | |
295 | u32 connect_status; | |
01d77d8d | 296 | u32 mesh_connect_status; |
876c9d3a | 297 | u16 regioncode; |
876c9d3a MT |
298 | u16 txpowerlevel; |
299 | ||
300 | /** POWER MANAGEMENT AND PnP SUPPORT */ | |
301 | u8 surpriseremoved; | |
876c9d3a MT |
302 | |
303 | u16 psmode; /* Wlan802_11PowermodeCAM=disable | |
304 | Wlan802_11PowermodeMAX_PSP=enable */ | |
876c9d3a MT |
305 | u32 psstate; |
306 | u8 needtowakeup; | |
307 | ||
10078321 | 308 | struct PS_CMD_ConfirmSleep lbs_ps_confirm_sleep; |
876c9d3a | 309 | |
e76850d6 DW |
310 | struct assoc_request * pending_assoc_req; |
311 | struct assoc_request * in_progress_assoc_req; | |
876c9d3a MT |
312 | |
313 | /** Encryption parameter */ | |
10078321 | 314 | struct lbs_802_11_security secinfo; |
876c9d3a MT |
315 | |
316 | /** WEP keys */ | |
1443b653 | 317 | struct enc_key wep_keys[4]; |
876c9d3a MT |
318 | u16 wep_tx_keyidx; |
319 | ||
320 | /** WPA keys */ | |
1443b653 DW |
321 | struct enc_key wpa_mcast_key; |
322 | struct enc_key wpa_unicast_key; | |
876c9d3a MT |
323 | |
324 | /** WPA Information Elements*/ | |
876c9d3a MT |
325 | u8 wpa_ie[MAX_WPA_IE_LEN]; |
326 | u8 wpa_ie_len; | |
327 | ||
876c9d3a | 328 | /** Requested Signal Strength*/ |
876c9d3a MT |
329 | u16 SNR[MAX_TYPE_B][MAX_TYPE_AVG]; |
330 | u16 NF[MAX_TYPE_B][MAX_TYPE_AVG]; | |
331 | u8 RSSI[MAX_TYPE_B][MAX_TYPE_AVG]; | |
332 | u8 rawSNR[DEFAULT_DATA_AVG_FACTOR]; | |
333 | u8 rawNF[DEFAULT_DATA_AVG_FACTOR]; | |
334 | u16 nextSNRNF; | |
335 | u16 numSNRNF; | |
876c9d3a MT |
336 | |
337 | u8 radioon; | |
338 | u32 preamble; | |
339 | ||
8c512765 DW |
340 | /** data rate stuff */ |
341 | u8 cur_rate; | |
342 | u8 auto_rate; | |
876c9d3a MT |
343 | |
344 | /** sleep_params */ | |
345 | struct sleep_params sp; | |
346 | ||
347 | /** RF calibration data */ | |
348 | ||
349 | #define MAX_REGION_CHANNEL_NUM 2 | |
350 | /** region channel data */ | |
351 | struct region_channel region_channel[MAX_REGION_CHANNEL_NUM]; | |
352 | ||
353 | struct region_channel universal_channel[MAX_REGION_CHANNEL_NUM]; | |
354 | ||
355 | /** 11D and Domain Regulatory Data */ | |
10078321 | 356 | struct lbs_802_11d_domain_reg domainreg; |
876c9d3a MT |
357 | struct parsed_region_chan_11d parsed_region_chan; |
358 | ||
359 | /** FSM variable for 11d support */ | |
360 | u32 enable11d; | |
361 | ||
362 | /** MISCELLANEOUS */ | |
363 | u8 *prdeeprom; | |
10078321 | 364 | struct lbs_offset_value offsetvalue; |
876c9d3a MT |
365 | |
366 | struct cmd_ds_802_11_get_log logmsg; | |
876c9d3a | 367 | |
965f8bbc | 368 | u32 monitormode; |
876c9d3a | 369 | u8 fw_ready; |
064827ed MT |
370 | |
371 | u8 last_scanned_channel; | |
876c9d3a MT |
372 | }; |
373 | ||
10078321 | 374 | #endif |