diff options
Diffstat (limited to 'drivers/net/wireless/libertas/dev.h')
-rw-r--r-- | drivers/net/wireless/libertas/dev.h | 419 |
1 files changed, 114 insertions, 305 deletions
diff --git a/drivers/net/wireless/libertas/dev.h b/drivers/net/wireless/libertas/dev.h index d3b69a4b4b5..1a675111300 100644 --- a/drivers/net/wireless/libertas/dev.h +++ b/drivers/net/wireless/libertas/dev.h | |||
@@ -6,75 +6,10 @@ | |||
6 | #ifndef _LBS_DEV_H_ | 6 | #ifndef _LBS_DEV_H_ |
7 | #define _LBS_DEV_H_ | 7 | #define _LBS_DEV_H_ |
8 | 8 | ||
9 | #include <linux/netdevice.h> | 9 | #include "scan.h" |
10 | #include <linux/wireless.h> | 10 | #include "assoc.h" |
11 | #include <linux/ethtool.h> | ||
12 | #include <linux/debugfs.h> | ||
13 | 11 | ||
14 | #include "defs.h" | ||
15 | #include "hostcmd.h" | ||
16 | 12 | ||
17 | extern const struct ethtool_ops lbs_ethtool_ops; | ||
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 | |||
55 | struct lbs_802_11_security { | ||
56 | u8 WPAenabled; | ||
57 | u8 WPA2enabled; | ||
58 | u8 wep_enabled; | ||
59 | u8 auth_mode; | ||
60 | u32 key_mgmt; | ||
61 | }; | ||
62 | |||
63 | /** Current Basic Service Set State Structure */ | ||
64 | struct current_bss_params { | ||
65 | /** bssid */ | ||
66 | u8 bssid[ETH_ALEN]; | ||
67 | /** ssid */ | ||
68 | u8 ssid[IW_ESSID_MAX_SIZE + 1]; | ||
69 | u8 ssid_len; | ||
70 | |||
71 | /** band */ | ||
72 | u8 band; | ||
73 | /** channel */ | ||
74 | u8 channel; | ||
75 | /** zero-terminated array of supported data rates */ | ||
76 | u8 rates[MAX_RATES + 1]; | ||
77 | }; | ||
78 | 13 | ||
79 | /** sleep_params */ | 14 | /** sleep_params */ |
80 | struct sleep_params { | 15 | struct sleep_params { |
@@ -100,95 +35,96 @@ struct lbs_mesh_stats { | |||
100 | 35 | ||
101 | /** Private structure for the MV device */ | 36 | /** Private structure for the MV device */ |
102 | struct lbs_private { | 37 | struct lbs_private { |
103 | int mesh_open; | ||
104 | int mesh_fw_ver; | ||
105 | int infra_open; | ||
106 | int mesh_autostart_enabled; | ||
107 | 38 | ||
108 | char name[DEV_NAME_LEN]; | 39 | /* Basic networking */ |
109 | |||
110 | void *card; | ||
111 | struct net_device *dev; | 40 | struct net_device *dev; |
41 | u32 connect_status; | ||
42 | int infra_open; | ||
43 | struct work_struct mcast_work; | ||
44 | u32 nr_of_multicastmacaddr; | ||
45 | u8 multicastlist[MRVDRV_MAX_MULTICAST_LIST_SIZE][ETH_ALEN]; | ||
112 | 46 | ||
47 | /* CFG80211 */ | ||
48 | struct wireless_dev *wdev; | ||
49 | |||
50 | /* Mesh */ | ||
113 | struct net_device *mesh_dev; /* Virtual device */ | 51 | struct net_device *mesh_dev; /* Virtual device */ |
52 | u32 mesh_connect_status; | ||
53 | struct lbs_mesh_stats mstats; | ||
54 | int mesh_open; | ||
55 | int mesh_fw_ver; | ||
56 | int mesh_autostart_enabled; | ||
57 | uint16_t mesh_tlv; | ||
58 | u8 mesh_ssid[IEEE80211_MAX_SSID_LEN + 1]; | ||
59 | u8 mesh_ssid_len; | ||
60 | struct work_struct sync_channel; | ||
61 | |||
62 | /* Monitor mode */ | ||
114 | struct net_device *rtap_net_dev; | 63 | struct net_device *rtap_net_dev; |
64 | u32 monitormode; | ||
115 | 65 | ||
116 | struct iw_statistics wstats; | 66 | /* Debugfs */ |
117 | struct lbs_mesh_stats mstats; | ||
118 | struct dentry *debugfs_dir; | 67 | struct dentry *debugfs_dir; |
119 | struct dentry *debugfs_debug; | 68 | struct dentry *debugfs_debug; |
120 | struct dentry *debugfs_files[6]; | 69 | struct dentry *debugfs_files[6]; |
121 | |||
122 | struct dentry *events_dir; | 70 | struct dentry *events_dir; |
123 | struct dentry *debugfs_events_files[6]; | 71 | struct dentry *debugfs_events_files[6]; |
124 | |||
125 | struct dentry *regs_dir; | 72 | struct dentry *regs_dir; |
126 | struct dentry *debugfs_regs_files[6]; | 73 | struct dentry *debugfs_regs_files[6]; |
127 | 74 | ||
75 | /* Hardware debugging */ | ||
128 | u32 mac_offset; | 76 | u32 mac_offset; |
129 | u32 bbp_offset; | 77 | u32 bbp_offset; |
130 | u32 rf_offset; | 78 | u32 rf_offset; |
79 | struct lbs_offset_value offsetvalue; | ||
131 | 80 | ||
132 | /* Download sent: | 81 | /* Power management */ |
133 | bit0 1/0=data_sent/data_tx_done, | 82 | u16 psmode; |
134 | bit1 1/0=cmd_sent/cmd_tx_done, | 83 | u32 psstate; |
135 | all other bits reserved 0 */ | 84 | u8 needtowakeup; |
136 | u8 dnld_sent; | ||
137 | |||
138 | /** thread to service interrupts */ | ||
139 | struct task_struct *main_thread; | ||
140 | wait_queue_head_t waitq; | ||
141 | struct workqueue_struct *work_thread; | ||
142 | 85 | ||
143 | struct work_struct mcast_work; | 86 | /* Deep sleep */ |
87 | int is_deep_sleep; | ||
88 | int is_auto_deep_sleep_enabled; | ||
89 | int wakeup_dev_required; | ||
90 | int is_activity_detected; | ||
91 | int auto_deep_sleep_timeout; /* in ms */ | ||
92 | wait_queue_head_t ds_awake_q; | ||
93 | struct timer_list auto_deepsleep_timer; | ||
144 | 94 | ||
145 | /** Scanning */ | 95 | /* Hardware access */ |
146 | struct delayed_work scan_work; | 96 | void *card; |
147 | struct delayed_work assoc_work; | 97 | u8 fw_ready; |
148 | struct work_struct sync_channel; | 98 | u8 surpriseremoved; |
149 | /* remember which channel was scanned last, != 0 if currently scanning */ | ||
150 | int scan_channel; | ||
151 | u8 scan_ssid[IW_ESSID_MAX_SIZE + 1]; | ||
152 | u8 scan_ssid_len; | ||
153 | |||
154 | /** Hardware access */ | ||
155 | int (*hw_host_to_card) (struct lbs_private *priv, u8 type, u8 *payload, u16 nb); | 99 | int (*hw_host_to_card) (struct lbs_private *priv, u8 type, u8 *payload, u16 nb); |
156 | void (*reset_card) (struct lbs_private *priv); | 100 | void (*reset_card) (struct lbs_private *priv); |
101 | int (*enter_deep_sleep) (struct lbs_private *priv); | ||
102 | int (*exit_deep_sleep) (struct lbs_private *priv); | ||
103 | int (*reset_deep_sleep_wakeup) (struct lbs_private *priv); | ||
157 | 104 | ||
158 | /* Wake On LAN */ | 105 | /* Adapter info (from EEPROM) */ |
159 | uint32_t wol_criteria; | ||
160 | uint8_t wol_gpio; | ||
161 | uint8_t wol_gap; | ||
162 | |||
163 | /** Wlan adapter data structure*/ | ||
164 | /** STATUS variables */ | ||
165 | u32 fwrelease; | 106 | u32 fwrelease; |
166 | u32 fwcapinfo; | 107 | u32 fwcapinfo; |
108 | u16 regioncode; | ||
109 | u8 current_addr[ETH_ALEN]; | ||
167 | 110 | ||
168 | struct mutex lock; | 111 | /* Command download */ |
169 | 112 | u8 dnld_sent; | |
170 | /* TX packet ready to be sent... */ | 113 | /* bit0 1/0=data_sent/data_tx_done, |
171 | int tx_pending_len; /* -1 while building packet */ | 114 | bit1 1/0=cmd_sent/cmd_tx_done, |
172 | 115 | all other bits reserved 0 */ | |
173 | u8 tx_pending_buf[LBS_UPLD_SIZE]; | ||
174 | /* protected by hard_start_xmit serialization */ | ||
175 | |||
176 | /** command-related variables */ | ||
177 | u16 seqnum; | 116 | u16 seqnum; |
178 | |||
179 | struct cmd_ctrl_node *cmd_array; | 117 | struct cmd_ctrl_node *cmd_array; |
180 | /** Current command */ | ||
181 | struct cmd_ctrl_node *cur_cmd; | 118 | struct cmd_ctrl_node *cur_cmd; |
182 | int cur_cmd_retcode; | 119 | struct list_head cmdfreeq; /* free command buffers */ |
183 | /** command Queues */ | 120 | struct list_head cmdpendingq; /* pending command buffers */ |
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; | 121 | wait_queue_head_t cmd_pending; |
122 | struct timer_list command_timer; | ||
123 | int nr_retries; | ||
124 | int cmd_timed_out; | ||
190 | 125 | ||
191 | /* Command responses sent from the hardware to the driver */ | 126 | /* Command responses sent from the hardware to the driver */ |
127 | int cur_cmd_retcode; | ||
192 | u8 resp_idx; | 128 | u8 resp_idx; |
193 | u8 resp_buf[2][LBS_UPLD_SIZE]; | 129 | u8 resp_buf[2][LBS_UPLD_SIZE]; |
194 | u32 resp_len[2]; | 130 | u32 resp_len[2]; |
@@ -196,95 +132,76 @@ struct lbs_private { | |||
196 | /* Events sent from hardware to driver */ | 132 | /* Events sent from hardware to driver */ |
197 | struct kfifo *event_fifo; | 133 | struct kfifo *event_fifo; |
198 | 134 | ||
199 | /* nickname */ | 135 | /** thread to service interrupts */ |
200 | u8 nodename[16]; | 136 | struct task_struct *main_thread; |
201 | 137 | wait_queue_head_t waitq; | |
202 | /** spin locks */ | 138 | struct workqueue_struct *work_thread; |
203 | spinlock_t driver_lock; | ||
204 | |||
205 | /** Timers */ | ||
206 | struct timer_list command_timer; | ||
207 | int nr_retries; | ||
208 | int cmd_timed_out; | ||
209 | |||
210 | /** current ssid/bssid related parameters*/ | ||
211 | struct current_bss_params curbssparams; | ||
212 | |||
213 | uint16_t mesh_tlv; | ||
214 | u8 mesh_ssid[IW_ESSID_MAX_SIZE + 1]; | ||
215 | u8 mesh_ssid_len; | ||
216 | |||
217 | /* IW_MODE_* */ | ||
218 | u8 mode; | ||
219 | |||
220 | /* Scan results list */ | ||
221 | struct list_head network_list; | ||
222 | struct list_head network_free_list; | ||
223 | struct bss_descriptor *networks; | ||
224 | |||
225 | u16 beacon_period; | ||
226 | u8 beacon_enable; | ||
227 | u8 adhoccreate; | ||
228 | |||
229 | /** capability Info used in Association, start, join */ | ||
230 | u16 capability; | ||
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 | 139 | ||
237 | /** 802.11 statistics */ | 140 | /** Encryption stuff */ |
238 | // struct cmd_DS_802_11_GET_STAT wlan802_11Stat; | 141 | struct lbs_802_11_security secinfo; |
142 | struct enc_key wpa_mcast_key; | ||
143 | struct enc_key wpa_unicast_key; | ||
144 | u8 wpa_ie[MAX_WPA_IE_LEN]; | ||
145 | u8 wpa_ie_len; | ||
146 | u16 wep_tx_keyidx; | ||
147 | struct enc_key wep_keys[4]; | ||
239 | 148 | ||
240 | uint16_t enablehwauto; | 149 | /* Wake On LAN */ |
241 | uint16_t ratebitmap; | 150 | uint32_t wol_criteria; |
151 | uint8_t wol_gpio; | ||
152 | uint8_t wol_gap; | ||
242 | 153 | ||
154 | /* Transmitting */ | ||
155 | int tx_pending_len; /* -1 while building packet */ | ||
156 | u8 tx_pending_buf[LBS_UPLD_SIZE]; | ||
157 | /* protected by hard_start_xmit serialization */ | ||
243 | u8 txretrycount; | 158 | u8 txretrycount; |
244 | |||
245 | /** Tx-related variables (for single packet tx) */ | ||
246 | struct sk_buff *currenttxskb; | 159 | struct sk_buff *currenttxskb; |
247 | 160 | ||
248 | /** NIC Operation characteristics */ | 161 | /* Locks */ |
162 | struct mutex lock; | ||
163 | spinlock_t driver_lock; | ||
164 | |||
165 | /* NIC/link operation characteristics */ | ||
249 | u16 mac_control; | 166 | u16 mac_control; |
250 | u32 connect_status; | 167 | u8 radio_on; |
251 | u32 mesh_connect_status; | 168 | u8 channel; |
252 | u16 regioncode; | ||
253 | s16 txpower_cur; | 169 | s16 txpower_cur; |
254 | s16 txpower_min; | 170 | s16 txpower_min; |
255 | s16 txpower_max; | 171 | s16 txpower_max; |
256 | 172 | ||
257 | /** POWER MANAGEMENT AND PnP SUPPORT */ | 173 | /** Scanning */ |
258 | u8 surpriseremoved; | 174 | struct delayed_work scan_work; |
259 | 175 | int scan_channel; | |
260 | u16 psmode; /* Wlan802_11PowermodeCAM=disable | 176 | /* remember which channel was scanned last, != 0 if currently scanning */ |
261 | Wlan802_11PowermodeMAX_PSP=enable */ | 177 | u8 scan_ssid[IEEE80211_MAX_SSID_LEN + 1]; |
262 | u32 psstate; | 178 | u8 scan_ssid_len; |
263 | u8 needtowakeup; | ||
264 | 179 | ||
180 | /* Associating */ | ||
181 | struct delayed_work assoc_work; | ||
182 | struct current_bss_params curbssparams; | ||
183 | u8 mode; | ||
184 | struct list_head network_list; | ||
185 | struct list_head network_free_list; | ||
186 | struct bss_descriptor *networks; | ||
265 | struct assoc_request * pending_assoc_req; | 187 | struct assoc_request * pending_assoc_req; |
266 | struct assoc_request * in_progress_assoc_req; | 188 | struct assoc_request * in_progress_assoc_req; |
189 | u16 capability; | ||
190 | uint16_t enablehwauto; | ||
191 | uint16_t ratebitmap; | ||
267 | 192 | ||
268 | /** Encryption parameter */ | 193 | /* ADHOC */ |
269 | struct lbs_802_11_security secinfo; | 194 | u16 beacon_period; |
270 | 195 | u8 beacon_enable; | |
271 | /** WEP keys */ | 196 | u8 adhoccreate; |
272 | struct enc_key wep_keys[4]; | ||
273 | u16 wep_tx_keyidx; | ||
274 | |||
275 | /** WPA keys */ | ||
276 | struct enc_key wpa_mcast_key; | ||
277 | struct enc_key wpa_unicast_key; | ||
278 | |||
279 | /* | ||
280 | * In theory, the IE is limited to the IE length, 255, | ||
281 | * but in practice 64 bytes are enough. | ||
282 | */ | ||
283 | #define MAX_WPA_IE_LEN 64 | ||
284 | 197 | ||
285 | /** WPA Information Elements*/ | 198 | /* WEXT */ |
286 | u8 wpa_ie[MAX_WPA_IE_LEN]; | 199 | char name[DEV_NAME_LEN]; |
287 | u8 wpa_ie_len; | 200 | u8 nodename[16]; |
201 | struct iw_statistics wstats; | ||
202 | u8 cur_rate; | ||
203 | #define MAX_REGION_CHANNEL_NUM 2 | ||
204 | struct region_channel region_channel[MAX_REGION_CHANNEL_NUM]; | ||
288 | 205 | ||
289 | /** Requested Signal Strength*/ | 206 | /** Requested Signal Strength*/ |
290 | u16 SNR[MAX_TYPE_B][MAX_TYPE_AVG]; | 207 | u16 SNR[MAX_TYPE_B][MAX_TYPE_AVG]; |
@@ -294,116 +211,8 @@ struct lbs_private { | |||
294 | u8 rawNF[DEFAULT_DATA_AVG_FACTOR]; | 211 | u8 rawNF[DEFAULT_DATA_AVG_FACTOR]; |
295 | u16 nextSNRNF; | 212 | u16 nextSNRNF; |
296 | u16 numSNRNF; | 213 | u16 numSNRNF; |
297 | |||
298 | u8 radio_on; | ||
299 | |||
300 | /** data rate stuff */ | ||
301 | u8 cur_rate; | ||
302 | |||
303 | /** RF calibration data */ | ||
304 | |||
305 | #define MAX_REGION_CHANNEL_NUM 2 | ||
306 | /** region channel data */ | ||
307 | struct region_channel region_channel[MAX_REGION_CHANNEL_NUM]; | ||
308 | |||
309 | struct region_channel universal_channel[MAX_REGION_CHANNEL_NUM]; | ||
310 | |||
311 | /** 11D and Domain Regulatory Data */ | ||
312 | struct lbs_802_11d_domain_reg domainreg; | ||
313 | struct parsed_region_chan_11d parsed_region_chan; | ||
314 | |||
315 | /** FSM variable for 11d support */ | ||
316 | u32 enable11d; | ||
317 | |||
318 | /** MISCELLANEOUS */ | ||
319 | struct lbs_offset_value offsetvalue; | ||
320 | |||
321 | u32 monitormode; | ||
322 | u8 fw_ready; | ||
323 | }; | 214 | }; |
324 | 215 | ||
325 | extern struct cmd_confirm_sleep confirm_sleep; | 216 | extern struct cmd_confirm_sleep confirm_sleep; |
326 | 217 | ||
327 | /** | ||
328 | * @brief Structure used to store information for each beacon/probe response | ||
329 | */ | ||
330 | struct bss_descriptor { | ||
331 | u8 bssid[ETH_ALEN]; | ||
332 | |||
333 | u8 ssid[IW_ESSID_MAX_SIZE + 1]; | ||
334 | u8 ssid_len; | ||
335 | |||
336 | u16 capability; | ||
337 | u32 rssi; | ||
338 | u32 channel; | ||
339 | u16 beaconperiod; | ||
340 | __le16 atimwindow; | ||
341 | |||
342 | /* IW_MODE_AUTO, IW_MODE_ADHOC, IW_MODE_INFRA */ | ||
343 | u8 mode; | ||
344 | |||
345 | /* zero-terminated array of supported data rates */ | ||
346 | u8 rates[MAX_RATES + 1]; | ||
347 | |||
348 | unsigned long last_scanned; | ||
349 | |||
350 | union ieee_phy_param_set phy; | ||
351 | union ieee_ss_param_set ss; | ||
352 | |||
353 | struct ieee_ie_country_info_full_set countryinfo; | ||
354 | |||
355 | u8 wpa_ie[MAX_WPA_IE_LEN]; | ||
356 | size_t wpa_ie_len; | ||
357 | u8 rsn_ie[MAX_WPA_IE_LEN]; | ||
358 | size_t rsn_ie_len; | ||
359 | |||
360 | u8 mesh; | ||
361 | |||
362 | struct list_head list; | ||
363 | }; | ||
364 | |||
365 | /** Association request | ||
366 | * | ||
367 | * Encapsulates all the options that describe a specific assocation request | ||
368 | * or configuration of the wireless card's radio, mode, and security settings. | ||
369 | */ | ||
370 | struct assoc_request { | ||
371 | #define ASSOC_FLAG_SSID 1 | ||
372 | #define ASSOC_FLAG_CHANNEL 2 | ||
373 | #define ASSOC_FLAG_BAND 3 | ||
374 | #define ASSOC_FLAG_MODE 4 | ||
375 | #define ASSOC_FLAG_BSSID 5 | ||
376 | #define ASSOC_FLAG_WEP_KEYS 6 | ||
377 | #define ASSOC_FLAG_WEP_TX_KEYIDX 7 | ||
378 | #define ASSOC_FLAG_WPA_MCAST_KEY 8 | ||
379 | #define ASSOC_FLAG_WPA_UCAST_KEY 9 | ||
380 | #define ASSOC_FLAG_SECINFO 10 | ||
381 | #define ASSOC_FLAG_WPA_IE 11 | ||
382 | unsigned long flags; | ||
383 | |||
384 | u8 ssid[IW_ESSID_MAX_SIZE + 1]; | ||
385 | u8 ssid_len; | ||
386 | u8 channel; | ||
387 | u8 band; | ||
388 | u8 mode; | ||
389 | u8 bssid[ETH_ALEN] __attribute__ ((aligned (2))); | ||
390 | |||
391 | /** WEP keys */ | ||
392 | struct enc_key wep_keys[4]; | ||
393 | u16 wep_tx_keyidx; | ||
394 | |||
395 | /** WPA keys */ | ||
396 | struct enc_key wpa_mcast_key; | ||
397 | struct enc_key wpa_unicast_key; | ||
398 | |||
399 | struct lbs_802_11_security secinfo; | ||
400 | |||
401 | /** WPA Information Elements*/ | ||
402 | u8 wpa_ie[MAX_WPA_IE_LEN]; | ||
403 | u8 wpa_ie_len; | ||
404 | |||
405 | /* BSS to associate with for infrastructure of Ad-Hoc join */ | ||
406 | struct bss_descriptor bss; | ||
407 | }; | ||
408 | |||
409 | #endif | 218 | #endif |