blob: b20be9da1fa15608d31d71701ae7102ba3daac9f [file] [log] [blame]
Pavel Roskin99e06e32008-10-13 14:33:13 -07001/*
2 * Copyright (c) 2002,2003 Oliver Kurth
3 * (c) 2003,2004 Joerg Albert <joerg.albert@gmx.de>
4 * (c) 2007 Guido Guenther <agx@sigxcpu.org>
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation; either version 2 of
9 * the License, or (at your option) any later version.
10 *
11 * This driver was based on information from the Sourceforge driver
12 * released and maintained by Atmel:
13 *
14 * http://sourceforge.net/projects/atmelwlandriver/
15 *
16 * Although the code was completely re-written,
17 * it would have been impossible without Atmel's decision to
18 * release an Open Source driver (unfortunately the firmware was
19 * kept binary only). Thanks for that decision to Atmel!
20 */
21
22#ifndef _AT76_USB_H
23#define _AT76_USB_H
24
25/* Board types */
26enum board_type {
27 BOARD_503_ISL3861 = 1,
28 BOARD_503_ISL3863 = 2,
29 BOARD_503 = 3,
30 BOARD_503_ACC = 4,
31 BOARD_505 = 5,
32 BOARD_505_2958 = 6,
33 BOARD_505A = 7,
34 BOARD_505AMX = 8
35};
36
Greg Kroah-Hartman89cb7e72009-02-03 16:28:48 -080037/* our private ioctl's */
38/* preamble length (0 - long, 1 - short, 2 - auto) */
39#define AT76_SET_SHORT_PREAMBLE (SIOCIWFIRSTPRIV + 0)
40#define AT76_GET_SHORT_PREAMBLE (SIOCIWFIRSTPRIV + 1)
41/* which debug channels are enabled */
42#define AT76_SET_DEBUG (SIOCIWFIRSTPRIV + 2)
43#define AT76_GET_DEBUG (SIOCIWFIRSTPRIV + 3)
44/* power save mode (incl. the Atmel proprietary smart save mode) */
45#define AT76_SET_POWERSAVE_MODE (SIOCIWFIRSTPRIV + 4)
46#define AT76_GET_POWERSAVE_MODE (SIOCIWFIRSTPRIV + 5)
47/* min and max channel times for scan */
48#define AT76_SET_SCAN_TIMES (SIOCIWFIRSTPRIV + 6)
49#define AT76_GET_SCAN_TIMES (SIOCIWFIRSTPRIV + 7)
50/* scan mode (0 - active, 1 - passive) */
51#define AT76_SET_SCAN_MODE (SIOCIWFIRSTPRIV + 8)
52#define AT76_GET_SCAN_MODE (SIOCIWFIRSTPRIV + 9)
53
Pavel Roskin99e06e32008-10-13 14:33:13 -070054#define CMD_STATUS_IDLE 0x00
55#define CMD_STATUS_COMPLETE 0x01
56#define CMD_STATUS_UNKNOWN 0x02
57#define CMD_STATUS_INVALID_PARAMETER 0x03
58#define CMD_STATUS_FUNCTION_NOT_SUPPORTED 0x04
59#define CMD_STATUS_TIME_OUT 0x07
60#define CMD_STATUS_IN_PROGRESS 0x08
61#define CMD_STATUS_HOST_FAILURE 0xff
62#define CMD_STATUS_SCAN_FAILED 0xf0
63
64/* answers to get op mode */
65#define OPMODE_NONE 0x00
66#define OPMODE_NORMAL_NIC_WITH_FLASH 0x01
67#define OPMODE_HW_CONFIG_MODE 0x02
68#define OPMODE_DFU_MODE_WITH_FLASH 0x03
69#define OPMODE_NORMAL_NIC_WITHOUT_FLASH 0x04
70
71#define CMD_SET_MIB 0x01
72#define CMD_GET_MIB 0x02
73#define CMD_SCAN 0x03
74#define CMD_JOIN 0x04
75#define CMD_START_IBSS 0x05
76#define CMD_RADIO_ON 0x06
77#define CMD_RADIO_OFF 0x07
78#define CMD_STARTUP 0x0B
79
80#define MIB_LOCAL 0x01
81#define MIB_MAC_ADDR 0x02
82#define MIB_MAC 0x03
83#define MIB_MAC_MGMT 0x05
84#define MIB_MAC_WEP 0x06
85#define MIB_PHY 0x07
86#define MIB_FW_VERSION 0x08
87#define MIB_MDOMAIN 0x09
88
89#define ADHOC_MODE 1
90#define INFRASTRUCTURE_MODE 2
91
92/* values for struct mib_local, field preamble_type */
93#define PREAMBLE_TYPE_LONG 0
94#define PREAMBLE_TYPE_SHORT 1
95#define PREAMBLE_TYPE_AUTO 2
96
97/* values for tx_rate */
98#define TX_RATE_1MBIT 0
99#define TX_RATE_2MBIT 1
100#define TX_RATE_5_5MBIT 2
101#define TX_RATE_11MBIT 3
102#define TX_RATE_AUTO 4
103
104/* power management modes */
105#define AT76_PM_OFF 1
106#define AT76_PM_ON 2
107#define AT76_PM_SMART 3
108
109struct hwcfg_r505 {
110 u8 cr39_values[14];
111 u8 reserved1[14];
112 u8 bb_cr[14];
113 u8 pidvid[4];
114 u8 mac_addr[ETH_ALEN];
115 u8 regulatory_domain;
116 u8 reserved2[14];
117 u8 cr15_values[14];
118 u8 reserved3[3];
119} __attribute__((packed));
120
121struct hwcfg_rfmd {
122 u8 cr20_values[14];
123 u8 cr21_values[14];
124 u8 bb_cr[14];
125 u8 pidvid[4];
126 u8 mac_addr[ETH_ALEN];
127 u8 regulatory_domain;
128 u8 low_power_values[14];
129 u8 normal_power_values[14];
130 u8 reserved1[3];
131} __attribute__((packed));
132
133struct hwcfg_intersil {
134 u8 mac_addr[ETH_ALEN];
135 u8 cr31_values[14];
136 u8 cr58_values[14];
137 u8 pidvid[4];
138 u8 regulatory_domain;
139 u8 reserved[1];
140} __attribute__((packed));
141
142union at76_hwcfg {
143 struct hwcfg_intersil i;
144 struct hwcfg_rfmd r3;
145 struct hwcfg_r505 r5;
146};
147
148#define WEP_SMALL_KEY_LEN (40 / 8)
149#define WEP_LARGE_KEY_LEN (104 / 8)
150
151struct at76_card_config {
152 u8 exclude_unencrypted;
153 u8 promiscuous_mode;
154 u8 short_retry_limit;
155 u8 encryption_type;
156 __le16 rts_threshold;
157 __le16 fragmentation_threshold; /* 256..2346 */
158 u8 basic_rate_set[4];
159 u8 auto_rate_fallback; /* 0,1 */
160 u8 channel;
161 u8 privacy_invoked;
162 u8 wep_default_key_id; /* 0..3 */
163 u8 current_ssid[32];
Greg Kroah-Hartman89cb7e72009-02-03 16:28:48 -0800164 u8 wep_default_key_value[4][WEP_KEY_LEN];
Pavel Roskin99e06e32008-10-13 14:33:13 -0700165 u8 ssid_len;
166 u8 short_preamble;
167 __le16 beacon_period;
168} __attribute__((packed));
169
170struct at76_command {
171 u8 cmd;
172 u8 reserved;
173 __le16 size;
174 u8 data[0];
175} __attribute__((packed));
176
177/* Length of Atmel-specific Rx header before 802.11 frame */
178#define AT76_RX_HDRLEN offsetof(struct at76_rx_buffer, packet)
179
180struct at76_rx_buffer {
181 __le16 wlength;
182 u8 rx_rate;
183 u8 newbss;
184 u8 fragmentation;
185 u8 rssi;
186 u8 link_quality;
187 u8 noise_level;
188 __le32 rx_time;
Greg Kroah-Hartman89cb7e72009-02-03 16:28:48 -0800189 u8 packet[IEEE80211_FRAME_LEN + IEEE80211_FCS_LEN];
Pavel Roskin99e06e32008-10-13 14:33:13 -0700190} __attribute__((packed));
191
192/* Length of Atmel-specific Tx header before 802.11 frame */
193#define AT76_TX_HDRLEN offsetof(struct at76_tx_buffer, packet)
194
195struct at76_tx_buffer {
196 __le16 wlength;
197 u8 tx_rate;
198 u8 padding;
Greg Kroah-Hartman89cb7e72009-02-03 16:28:48 -0800199 u8 reserved[4];
200 u8 packet[IEEE80211_FRAME_LEN + IEEE80211_FCS_LEN];
Pavel Roskin99e06e32008-10-13 14:33:13 -0700201} __attribute__((packed));
202
203/* defines for scan_type below */
204#define SCAN_TYPE_ACTIVE 0
205#define SCAN_TYPE_PASSIVE 1
206
207struct at76_req_scan {
208 u8 bssid[ETH_ALEN];
209 u8 essid[32];
210 u8 scan_type;
211 u8 channel;
212 __le16 probe_delay;
213 __le16 min_channel_time;
214 __le16 max_channel_time;
215 u8 essid_size;
216 u8 international_scan;
217} __attribute__((packed));
218
219struct at76_req_ibss {
220 u8 bssid[ETH_ALEN];
221 u8 essid[32];
222 u8 bss_type;
223 u8 channel;
224 u8 essid_size;
225 u8 reserved[3];
226} __attribute__((packed));
227
228struct at76_req_join {
229 u8 bssid[ETH_ALEN];
230 u8 essid[32];
231 u8 bss_type;
232 u8 channel;
233 __le16 timeout;
234 u8 essid_size;
235 u8 reserved;
236} __attribute__((packed));
237
238struct set_mib_buffer {
239 u8 type;
240 u8 size;
241 u8 index;
242 u8 reserved;
243 union {
244 u8 byte;
245 __le16 word;
246 u8 addr[ETH_ALEN];
247 } data;
248} __attribute__((packed));
249
250struct mib_local {
251 u16 reserved0;
252 u8 beacon_enable;
253 u8 txautorate_fallback;
254 u8 reserved1;
255 u8 ssid_size;
256 u8 promiscuous_mode;
257 u16 reserved2;
258 u8 preamble_type;
259 u16 reserved3;
260} __attribute__((packed));
261
262struct mib_mac_addr {
263 u8 mac_addr[ETH_ALEN];
264 u8 res[2]; /* ??? */
265 u8 group_addr[4][ETH_ALEN];
266 u8 group_addr_status[4];
267} __attribute__((packed));
268
269struct mib_mac {
270 __le32 max_tx_msdu_lifetime;
271 __le32 max_rx_lifetime;
272 __le16 frag_threshold;
273 __le16 rts_threshold;
274 __le16 cwmin;
275 __le16 cwmax;
276 u8 short_retry_time;
277 u8 long_retry_time;
278 u8 scan_type; /* active or passive */
279 u8 scan_channel;
280 __le16 probe_delay; /* delay before ProbeReq in active scan, RO */
281 __le16 min_channel_time;
282 __le16 max_channel_time;
283 __le16 listen_interval;
284 u8 desired_ssid[32];
285 u8 desired_bssid[ETH_ALEN];
286 u8 desired_bsstype; /* ad-hoc or infrastructure */
287 u8 reserved2;
288} __attribute__((packed));
289
290struct mib_mac_mgmt {
291 __le16 beacon_period;
292 __le16 CFP_max_duration;
293 __le16 medium_occupancy_limit;
294 __le16 station_id; /* assoc id */
295 __le16 ATIM_window;
296 u8 CFP_mode;
297 u8 privacy_option_implemented;
298 u8 DTIM_period;
299 u8 CFP_period;
300 u8 current_bssid[ETH_ALEN];
301 u8 current_essid[32];
302 u8 current_bss_type;
303 u8 power_mgmt_mode;
304 /* rfmd and 505 */
305 u8 ibss_change;
306 u8 res;
307 u8 multi_domain_capability_implemented;
308 u8 multi_domain_capability_enabled;
309 u8 country_string[3];
310 u8 reserved[3];
311} __attribute__((packed));
312
313struct mib_mac_wep {
314 u8 privacy_invoked; /* 0 disable encr., 1 enable encr */
315 u8 wep_default_key_id;
316 u8 wep_key_mapping_len;
317 u8 exclude_unencrypted;
318 __le32 wep_icv_error_count;
319 __le32 wep_excluded_count;
Greg Kroah-Hartman89cb7e72009-02-03 16:28:48 -0800320 u8 wep_default_keyvalue[WEP_KEYS][WEP_KEY_LEN];
Pavel Roskin99e06e32008-10-13 14:33:13 -0700321 u8 encryption_level; /* 1 for 40bit, 2 for 104bit encryption */
322} __attribute__((packed));
323
324struct mib_phy {
325 __le32 ed_threshold;
326
327 __le16 slot_time;
328 __le16 sifs_time;
329 __le16 preamble_length;
330 __le16 plcp_header_length;
331 __le16 mpdu_max_length;
332 __le16 cca_mode_supported;
333
334 u8 operation_rate_set[4];
335 u8 channel_id;
336 u8 current_cca_mode;
337 u8 phy_type;
338 u8 current_reg_domain;
339} __attribute__((packed));
340
341struct mib_fw_version {
342 u8 major;
343 u8 minor;
344 u8 patch;
345 u8 build;
346} __attribute__((packed));
347
348struct mib_mdomain {
349 u8 tx_powerlevel[14];
350 u8 channel_list[14]; /* 0 for invalid channels */
351} __attribute__((packed));
352
353struct at76_fw_header {
354 __le32 crc; /* CRC32 of the whole image */
355 __le32 board_type; /* firmware compatibility code */
356 u8 build; /* firmware build number */
357 u8 patch; /* firmware patch level */
358 u8 minor; /* firmware minor version */
359 u8 major; /* firmware major version */
360 __le32 str_offset; /* offset of the copyright string */
361 __le32 int_fw_offset; /* internal firmware image offset */
362 __le32 int_fw_len; /* internal firmware image length */
363 __le32 ext_fw_offset; /* external firmware image offset */
364 __le32 ext_fw_len; /* external firmware image length */
365} __attribute__((packed));
366
Greg Kroah-Hartman89cb7e72009-02-03 16:28:48 -0800367enum mac_state {
368 MAC_INIT,
369 MAC_SCANNING,
370 MAC_AUTH,
371 MAC_ASSOC,
372 MAC_JOINING,
373 MAC_CONNECTED,
374 MAC_OWN_IBSS
375};
376
Pavel Roskin99e06e32008-10-13 14:33:13 -0700377/* a description of a regulatory domain and the allowed channels */
378struct reg_domain {
379 u16 code;
380 char const *name;
381 u32 channel_map; /* if bit N is set, channel (N+1) is allowed */
382};
383
Greg Kroah-Hartman89cb7e72009-02-03 16:28:48 -0800384/* how long do we keep a (I)BSS in the bss_list in jiffies
385 this should be long enough for the user to retrieve the table
386 (by iwlist ?) after the device started, because all entries from
387 other channels than the one the device locks on get removed, too */
388#define BSS_LIST_TIMEOUT (120 * HZ)
389/* struct to store BSS info found during scan */
390#define BSS_LIST_MAX_RATE_LEN 32 /* 32 rates should be enough ... */
391
392struct bss_info {
393 struct list_head list;
394
395 u8 bssid[ETH_ALEN]; /* bssid */
396 u8 ssid[IW_ESSID_MAX_SIZE]; /* essid */
397 u8 ssid_len; /* length of ssid above */
398 u8 channel;
399 u16 capa; /* BSS capabilities */
400 u16 beacon_interval; /* beacon interval, Kus (1024 microseconds) */
401 u8 rates[BSS_LIST_MAX_RATE_LEN]; /* supported rates in units of
402 500 kbps, ORed with 0x80 for
403 basic rates */
404 u8 rates_len;
405
406 /* quality of received beacon */
407 u8 rssi;
408 u8 link_qual;
409 u8 noise_level;
410
411 unsigned long last_rx; /* time (jiffies) of last beacon received */
412};
413
414/* a rx data buffer to collect rx fragments */
415struct rx_data_buf {
416 u8 sender[ETH_ALEN]; /* sender address */
417 u16 seqnr; /* sequence number */
418 u16 fragnr; /* last fragment received */
419 unsigned long last_rx; /* jiffies of last rx */
420 struct sk_buff *skb; /* == NULL if entry is free */
421};
422
423#define NR_RX_DATA_BUF 8
424
Pavel Roskin99e06e32008-10-13 14:33:13 -0700425/* Data for one loaded firmware file */
426struct fwentry {
427 const char *const fwname;
428 const struct firmware *fw;
429 int extfw_size;
430 int intfw_size;
431 /* pointer to loaded firmware, no need to free */
432 u8 *extfw; /* external firmware, extfw_size bytes long */
433 u8 *intfw; /* internal firmware, intfw_size bytes long */
434 enum board_type board_type; /* board type */
435 struct mib_fw_version fw_version;
436 int loaded; /* Loaded and parsed successfully */
437};
438
439struct at76_priv {
440 struct usb_device *udev; /* USB device pointer */
Greg Kroah-Hartman89cb7e72009-02-03 16:28:48 -0800441 struct net_device *netdev; /* net device pointer */
442 struct net_device_stats stats; /* net device stats */
443 struct iw_statistics wstats; /* wireless stats */
Pavel Roskin99e06e32008-10-13 14:33:13 -0700444
445 struct sk_buff *rx_skb; /* skbuff for receiving data */
446 void *bulk_out_buffer; /* buffer for sending data */
447
448 struct urb *tx_urb; /* URB for sending data */
449 struct urb *rx_urb; /* URB for receiving data */
450
451 unsigned int tx_pipe; /* bulk out pipe */
452 unsigned int rx_pipe; /* bulk in pipe */
453
454 struct mutex mtx; /* locks this structure */
455
456 /* work queues */
Greg Kroah-Hartman89cb7e72009-02-03 16:28:48 -0800457 struct work_struct work_assoc_done;
458 struct work_struct work_join;
459 struct work_struct work_new_bss;
460 struct work_struct work_start_scan;
Pavel Roskin99e06e32008-10-13 14:33:13 -0700461 struct work_struct work_set_promisc;
462 struct work_struct work_submit_rx;
Greg Kroah-Hartman89cb7e72009-02-03 16:28:48 -0800463 struct delayed_work dwork_restart;
464 struct delayed_work dwork_get_scan;
465 struct delayed_work dwork_beacon;
466 struct delayed_work dwork_auth;
467 struct delayed_work dwork_assoc;
Pavel Roskin99e06e32008-10-13 14:33:13 -0700468
469 struct tasklet_struct rx_tasklet;
470
471 /* the WEP stuff */
472 int wep_enabled; /* 1 if WEP is enabled */
473 int wep_key_id; /* key id to be used */
Greg Kroah-Hartman89cb7e72009-02-03 16:28:48 -0800474 u8 wep_keys[WEP_KEYS][WEP_KEY_LEN]; /* the four WEP keys,
475 5 or 13 bytes are used */
476 u8 wep_keys_len[WEP_KEYS]; /* the length of the above keys */
Pavel Roskin99e06e32008-10-13 14:33:13 -0700477
478 int channel;
479 int iw_mode;
480 u8 bssid[ETH_ALEN];
481 u8 essid[IW_ESSID_MAX_SIZE];
482 int essid_size;
483 int radio_on;
484 int promisc;
485
486 int preamble_type; /* 0 - long, 1 - short, 2 - auto */
487 int auth_mode; /* authentication type: 0 open, 1 shared key */
488 int txrate; /* 0,1,2,3 = 1,2,5.5,11 Mbps, 4 is auto */
489 int frag_threshold; /* threshold for fragmentation of tx packets */
490 int rts_threshold; /* threshold for RTS mechanism */
491 int short_retry_limit;
492
493 int scan_min_time; /* scan min channel time */
494 int scan_max_time; /* scan max channel time */
495 int scan_mode; /* SCAN_TYPE_ACTIVE, SCAN_TYPE_PASSIVE */
496 int scan_need_any; /* if set, need to scan for any ESSID */
497
Greg Kroah-Hartman89cb7e72009-02-03 16:28:48 -0800498 /* the list we got from scanning */
499 spinlock_t bss_list_spinlock; /* protects bss_list operations */
500 struct list_head bss_list; /* list of BSS we got beacons from */
501 struct timer_list bss_list_timer; /* timer to purge old entries
502 from bss_list */
503 struct bss_info *curr_bss; /* current BSS */
Pavel Roskin99e06e32008-10-13 14:33:13 -0700504 u16 assoc_id; /* current association ID, if associated */
505
Greg Kroah-Hartman89cb7e72009-02-03 16:28:48 -0800506 u8 wanted_bssid[ETH_ALEN];
507 int wanted_bssid_valid; /* != 0 if wanted_bssid is to be used */
508
509 /* some data for infrastructure mode only */
510 spinlock_t mgmt_spinlock; /* this spinlock protects access to
511 next_mgmt_bulk */
512
513 struct at76_tx_buffer *next_mgmt_bulk; /* pending management msg to
514 send via bulk out */
515 enum mac_state mac_state;
516 enum {
517 SCAN_IDLE,
518 SCAN_IN_PROGRESS,
519 SCAN_COMPLETED
520 } scan_state;
521 time_t last_scan;
522
523 int retries; /* remaining retries in case of timeout when
524 * sending AuthReq or AssocReq */
Pavel Roskin99e06e32008-10-13 14:33:13 -0700525 u8 pm_mode; /* power management mode */
526 u32 pm_period; /* power management period in microseconds */
527
528 struct reg_domain const *domain; /* reg domain description */
529
Greg Kroah-Hartman89cb7e72009-02-03 16:28:48 -0800530 /* iwspy support */
531 spinlock_t spy_spinlock;
532 struct iw_spy_data spy_data;
533
534 struct iw_public_data wireless_data;
535
Pavel Roskin99e06e32008-10-13 14:33:13 -0700536 /* These fields contain HW config provided by the device (not all of
537 * these fields are used by all board types) */
538 u8 mac_addr[ETH_ALEN];
539 u8 regulatory_domain;
540
541 struct at76_card_config card_config;
542
Greg Kroah-Hartman89cb7e72009-02-03 16:28:48 -0800543 /* store rx fragments until complete */
544 struct rx_data_buf rx_data[NR_RX_DATA_BUF];
545
Pavel Roskin99e06e32008-10-13 14:33:13 -0700546 enum board_type board_type;
547 struct mib_fw_version fw_version;
548
549 unsigned int device_unplugged:1;
550 unsigned int netdev_registered:1;
551 struct set_mib_buffer mib_buf; /* global buffer for set_mib calls */
552
Greg Kroah-Hartman89cb7e72009-02-03 16:28:48 -0800553 /* beacon counting */
Pavel Roskin99e06e32008-10-13 14:33:13 -0700554 int beacon_period; /* period of mgmt beacons, Kus */
Greg Kroah-Hartman89cb7e72009-02-03 16:28:48 -0800555 int beacons_received;
556 unsigned long beacons_last_qual; /* time we restarted counting
557 beacons */
Pavel Roskin99e06e32008-10-13 14:33:13 -0700558};
559
Greg Kroah-Hartman89cb7e72009-02-03 16:28:48 -0800560struct at76_rx_radiotap {
561 struct ieee80211_radiotap_header rt_hdr;
562 __le64 rt_tsft;
563 u8 rt_flags;
564 u8 rt_rate;
565 s8 rt_signal;
566 s8 rt_noise;
567};
Pavel Roskin99e06e32008-10-13 14:33:13 -0700568
Greg Kroah-Hartman89cb7e72009-02-03 16:28:48 -0800569#define AT76_RX_RADIOTAP_PRESENT \
570 ((1 << IEEE80211_RADIOTAP_TSFT) | \
571 (1 << IEEE80211_RADIOTAP_FLAGS) | \
572 (1 << IEEE80211_RADIOTAP_RATE) | \
573 (1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL) | \
574 (1 << IEEE80211_RADIOTAP_DB_ANTNOISE))
575
576#define BEACON_MAX_DATA_LENGTH 1500
577
578/* the maximum size of an AssocReq packet */
579#define ASSOCREQ_MAX_SIZE \
580 (AT76_TX_HDRLEN + sizeof(struct ieee80211_assoc_request) + \
581 1 + 1 + IW_ESSID_MAX_SIZE + 1 + 1 + 4)
582
583/* for shared secret auth, add the challenge text size */
584#define AUTH_FRAME_SIZE (AT76_TX_HDRLEN + sizeof(struct ieee80211_auth))
585
586/* Maximal number of AuthReq retries */
587#define AUTH_RETRIES 3
588
589/* Maximal number of AssocReq retries */
590#define ASSOC_RETRIES 3
591
592/* Beacon timeout in managed mode when we are connected */
593#define BEACON_TIMEOUT (10 * HZ)
594
595/* Timeout for authentication response */
596#define AUTH_TIMEOUT (1 * HZ)
597
598/* Timeout for association response */
599#define ASSOC_TIMEOUT (1 * HZ)
600
601/* Polling interval when scan is running */
Pavel Roskin99e06e32008-10-13 14:33:13 -0700602#define SCAN_POLL_INTERVAL (HZ / 4)
603
Greg Kroah-Hartman89cb7e72009-02-03 16:28:48 -0800604/* Command completion timeout */
Pavel Roskin99e06e32008-10-13 14:33:13 -0700605#define CMD_COMPLETION_TIMEOUT (5 * HZ)
606
607#define DEF_RTS_THRESHOLD 1536
608#define DEF_FRAG_THRESHOLD 1536
609#define DEF_SHORT_RETRY_LIMIT 8
610#define DEF_CHANNEL 10
611#define DEF_SCAN_MIN_TIME 10
612#define DEF_SCAN_MAX_TIME 120
613
Greg Kroah-Hartman89cb7e72009-02-03 16:28:48 -0800614#define MAX_RTS_THRESHOLD (MAX_FRAG_THRESHOLD + 1)
615
Pavel Roskin99e06e32008-10-13 14:33:13 -0700616/* the max padding size for tx in bytes (see calc_padding) */
617#define MAX_PADDING_SIZE 53
618
619#endif /* _AT76_USB_H */