1 /*******************************************************************************
2  * Agere Systems Inc.
3  * Wireless device driver for Linux (wlags49).
4  *
5  * Copyright (c) 1998-2003 Agere Systems Inc.
6  * All rights reserved.
7  *   http://www.agere.com
8  *
9  * Initially developed by TriplePoint, Inc.
10  *   http://www.triplepoint.com
11  *
12  *------------------------------------------------------------------------------
13  *
14  *   Header for defintions and macros internal to the drvier.
15  *
16  *------------------------------------------------------------------------------
17  *
18  * SOFTWARE LICENSE
19  *
20  * This software is provided subject to the following terms and conditions,
21  * which you should read carefully before using the software.  Using this
22  * software indicates your acceptance of these terms and conditions.  If you do
23  * not agree with these terms and conditions, do not use the software.
24  *
25  * Copyright � 2003 Agere Systems Inc.
26  * All rights reserved.
27  *
28  * Redistribution and use in source or binary forms, with or without
29  * modifications, are permitted provided that the following conditions are met:
30  *
31  * . Redistributions of source code must retain the above copyright notice, this
32  *    list of conditions and the following Disclaimer as comments in the code as
33  *    well as in the documentation and/or other materials provided with the
34  *    distribution.
35  *
36  * . Redistributions in binary form must reproduce the above copyright notice,
37  *    this list of conditions and the following Disclaimer in the documentation
38  *    and/or other materials provided with the distribution.
39  *
40  * . Neither the name of Agere Systems Inc. nor the names of the contributors
41  *    may be used to endorse or promote products derived from this software
42  *    without specific prior written permission.
43  *
44  * Disclaimer
45  *
46  * THIS SOFTWARE IS PROVIDED �AS IS� AND ANY EXPRESS OR IMPLIED WARRANTIES,
47  * INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF
48  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  ANY
49  * USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN
50  * RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY
51  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
52  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
53  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
54  * ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT
55  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
56  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
57  * DAMAGE.
58  *
59  ******************************************************************************/
60 
61 #ifndef __WAVELAN2_H__
62 #define __WAVELAN2_H__
63 
64 
65 
66 
67 /*******************************************************************************
68  *  include files
69  ******************************************************************************/
70 #include <linux/version.h>
71 #ifdef BUS_PCMCIA
72 #include <pcmcia/cistpl.h>
73 #include <pcmcia/cisreg.h>
74 #include <pcmcia/ciscode.h>
75 #include <pcmcia/ds.h>
76 #endif  // BUS_PCMCIA
77 
78 #ifdef HAS_WIRELESS_EXTENSIONS
79 #include <linux/wireless.h>
80 #if WIRELESS_EXT > 13
81 #include <net/iw_handler.h>
82 #endif // WIRELESS_EXT > 13
83 #define USE_DBM
84 #define RETURN_CURRENT_NETWORKNAME
85 #define USE_FREQUENCY
86 #endif // HAS_WIRELESS_EXTENSIONS/
87 
88 #include <linux/list.h>
89 
90 #include <linux/interrupt.h>
91 
92 
93 
94 
95 /*******************************************************************************
96  *  constant definitions
97  ******************************************************************************/
98 #define p_u8    __u8
99 #define p_s8    __s8
100 #define p_u16   __u16
101 #define p_s16   __s16
102 #define p_u32   __u32
103 #define p_s32   __s32
104 #define p_char  char
105 
106 #define MAX_KEY_LEN         (2 + (13 * 2)) // 0x plus 13 hex digit pairs
107 #define MB_SIZE             1024
108 #define MAX_ENC_LEN         104
109 
110 #define MAX_SCAN_TIME_SEC   8
111 #define MAX_NAPS            32
112 
113 #define CFG_MB_INFO         0x0820		//Mail Box Info Block
114 
115 #define NUM_WDS_PORTS       6
116 
117 #define WVLAN_MAX_LOOKAHEAD (HCF_MAX_MSG+46) /* as per s0005MIC_4.doc */
118 
119 
120 /* Min/Max/Default Parameter Values */
121 #if 0 //;? (HCF_TYPE) & HCF_TYPE_AP
122 //;? why this difference depending on compile option, seems to me it should depend on runtime if anything
123 #define PARM_DEFAULT_SSID                       "LinuxAP"
124 #else
125 #define PARM_DEFAULT_SSID                       "ANY"
126 #endif // HCF_TYPE_AP
127 
128 #define PARM_MIN_NAME_LEN                       1
129 #define PARM_MAX_NAME_LEN                       32
130 
131 
132 /* The following definitions pertain to module and profile parameters */
133 // #define PARM_AP_MODE                            APMode
134 // #define PARM_NAME_AP_MODE						TEXT("APMode")
135 // #define PARM_DEFAULT_AP_MODE					FALSE
136 
137 #define PARM_AUTHENTICATION                     Authentication
138 #define PARM_NAME_AUTHENTICATION				TEXT("Authentication")
139 #define PARM_MIN_AUTHENTICATION                 1
140 #define PARM_MAX_AUTHENTICATION                 2
141 #define PARM_DEFAULT_AUTHENTICATION             1
142 
143 #define PARM_AUTH_KEY_MGMT_SUITE                AuthKeyMgmtSuite
144 #define PARM_NAME_AUTH_KEY_MGMT_SUITE           TEXT("AuthKeyMgmtSuite")
145 #define PARM_MIN_AUTH_KEY_MGMT_SUITE            0
146 #define PARM_MAX_AUTH_KEY_MGMT_SUITE            4
147 #define PARM_DEFAULT_AUTH_KEY_MGMT_SUITE        0
148 
149 #define PARM_BRSC_2GHZ                          BRSC2GHz
150 #define PARM_NAME_BRSC_2GHZ                     TEXT("BRSC2GHz")
151 #define PARM_MIN_BRSC                           0x0000
152 #define PARM_MAX_BRSC                           0x0FFF
153 #define PARM_DEFAULT_BRSC_2GHZ                  0x000F
154 
155 #define PARM_BRSC_5GHZ                          BRSC5GHz
156 #define PARM_NAME_BRSC_5GHZ                     TEXT("BRSC5GHz")
157 #define PARM_DEFAULT_BRSC_5GHZ                  0x0150
158 
159 #define PARM_COEXISTENCE                        Coexistence
160 #define PARM_NAME_COEXISTENCE                   TEXT("Coexistence")
161 #define PARM_MIN_COEXISTENCE                    0x0000
162 #define PARM_MAX_COEXISTENCE                    0x0007
163 #define PARM_DEFAULT_COEXISTENCE                0x0000
164 
165 #define PARM_CONFIGURED                         Configured
166 #define PARM_NAME_CONFIGURED					TEXT("Configured")
167 
168 #define PARM_CONNECTION_CONTROL                 ConnectionControl
169 #define PARM_NAME_CONNECTION_CONTROL            TEXT("ConnectionControl")
170 #define PARM_MIN_CONNECTION_CONTROL             0
171 #define PARM_MAX_CONNECTION_CONTROL             3
172 #define PARM_DEFAULT_CONNECTION_CONTROL         2
173 
174 #define PARM_CREATE_IBSS                        CreateIBSS
175 #define PARM_NAME_CREATE_IBSS                   TEXT("CreateIBSS")
176 #define PARM_DEFAULT_CREATE_IBSS                FALSE
177 #define PARM_DEFAULT_CREATE_IBSS_STR            "N"
178 
179 #define PARM_DEBUG_FLAG             	    	DebugFlag
180 #define PARM_NAME_DEBUG_FLAG            		TEXT("DebugFlag")
181 #define PARM_MIN_DEBUG_FLAG             		0
182 #define PARM_MAX_DEBUG_FLAG             		0xFFFF
183 #define PARM_DEFAULT_DEBUG_FLAG         		0xFFFF
184 
185 #define PARM_DESIRED_SSID                       DesiredSSID
186 #define PARM_NAME_DESIRED_SSID                  TEXT("DesiredSSID")
187 
188 #define PARM_DOWNLOAD_FIRMWARE                  DownloadFirmware
189 #define PARM_NAME_DOWNLOAD_FIRMWARE             TEXT("DownloadFirmware")
190 
191 #define PARM_DRIVER_ENABLE                      DriverEnable
192 #define PARM_NAME_DRIVER_ENABLE					TEXT("DriverEnable")
193 #define PARM_DEFAULT_DRIVER_ENABLE				TRUE
194 
195 #define PARM_ENABLE_ENCRYPTION                  EnableEncryption
196 #define PARM_NAME_ENABLE_ENCRYPTION             TEXT("EnableEncryption")
197 #define PARM_MIN_ENABLE_ENCRYPTION              0
198 #define PARM_MAX_ENABLE_ENCRYPTION              7
199 #define PARM_DEFAULT_ENABLE_ENCRYPTION          0
200 
201 #define PARM_ENCRYPTION                         Encryption
202 #define PARM_NAME_ENCRYPTION                    TEXT("Encryption")
203 
204 #define PARM_EXCLUDE_UNENCRYPTED                ExcludeUnencrypted
205 #define PARM_NAME_EXCLUDE_UNENCRYPTED           TEXT("ExcludeUnencrypted")
206 #define PARM_DEFAULT_EXCLUDE_UNENCRYPTED        TRUE
207 #define PARM_DEFAULT_EXCLUDE_UNENCRYPTED_STR    "N"
208 
209 #define PARM_INTRA_BSS_RELAY                    IntraBSSRelay
210 #define PARM_NAME_INTRA_BSS_RELAY               TEXT("IntraBSSRelay")
211 #define PARM_DEFAULT_INTRA_BSS_RELAY            TRUE
212 #define PARM_DEFAULT_INTRA_BSS_RELAY_STR        "Y"
213 
214 #define PARM_KEY1                               Key1
215 #define PARM_NAME_KEY1                          TEXT("Key1")
216 #define PARM_KEY2                               Key2
217 #define PARM_NAME_KEY2                          TEXT("Key2")
218 #define PARM_KEY3                               Key3
219 #define PARM_NAME_KEY3                          TEXT("Key3")
220 #define PARM_KEY4                               Key4
221 #define PARM_NAME_KEY4                          TEXT("Key4")
222 
223 //;? #define PARM_KEY_FORMAT                         AsciiHex
224 //;? #define PARM_NAME_KEY_FORMAT                    TEXT("AsciiHex")
225 
226 #define PARM_LOAD_BALANCING                     LoadBalancing
227 #define PARM_NAME_LOAD_BALANCING                TEXT("LoadBalancing")
228 #define PARM_DEFAULT_LOAD_BALANCING             TRUE
229 #define PARM_DEFAULT_LOAD_BALANCING_STR         "Y"
230 
231 #define PARM_MAX_DATA_LENGTH                    MaxDataLength
232 #define PARM_NAME_MAX_DATA_LENGTH				TEXT("MaxDataLength")
233 
234 #define PARM_MAX_SLEEP                          MaxSleepDuration
235 #define PARM_NAME_MAX_SLEEP                     TEXT("MaxSleepDuration")
236 #define PARM_MIN_MAX_PM_SLEEP                   1								//;?names nearly right?
237 #define PARM_MAX_MAX_PM_SLEEP                   65535
238 #define PARM_DEFAULT_MAX_PM_SLEEP               100
239 
240 #define PARM_MEDIUM_DISTRIBUTION                MediumDistribution
241 #define PARM_NAME_MEDIUM_DISTRIBUTION           TEXT("MediumDistribution")
242 #define PARM_DEFAULT_MEDIUM_DISTRIBUTION        TRUE
243 #define PARM_DEFAULT_MEDIUM_DISTRIBUTION_STR    "Y"
244 
245 #define PARM_MICROWAVE_ROBUSTNESS               MicroWaveRobustness
246 #define PARM_NAME_MICROWAVE_ROBUSTNESS          TEXT("MicroWaveRobustness")
247 #define PARM_DEFAULT_MICROWAVE_ROBUSTNESS       FALSE
248 #define PARM_DEFAULT_MICROWAVE_ROBUSTNESS_STR   "N"
249 
250 #define PARM_MULTICAST_PM_BUFFERING             MulticastPMBuffering
251 #define PARM_NAME_MULTICAST_PM_BUFFERING	    TEXT("MulticastPMBuffering")
252 #define PARM_DEFAULT_MULTICAST_PM_BUFFERING     TRUE
253 #define PARM_DEFAULT_MULTICAST_PM_BUFFERING_STR "Y"
254 
255 #define PARM_MULTICAST_RATE                     MulticastRate
256 #define PARM_NAME_MULTICAST_RATE                TEXT("MulticastRate")
257 #ifdef WARP
258 #define PARM_MIN_MULTICAST_RATE                 0x0001
259 #define PARM_MAX_MULTICAST_RATE                 0x0fff
260 #define PARM_DEFAULT_MULTICAST_RATE_2GHZ        0x0004
261 #define PARM_DEFAULT_MULTICAST_RATE_5GHZ        0x0010
262 #else
263 #define PARM_MIN_MULTICAST_RATE                 0x0001
264 #define PARM_MAX_MULTICAST_RATE                 0x0004
265 #define PARM_DEFAULT_MULTICAST_RATE_2GHZ        0x0002
266 #define PARM_DEFAULT_MULTICAST_RATE_5GHZ        0x0000
267 #endif  // WARP
268 
269 #define PARM_MULTICAST_RX                       MulticastReceive
270 #define PARM_NAME_MULTICAST_RX                  TEXT("MulticastReceive")
271 #define PARM_DEFAULT_MULTICAST_RX               TRUE
272 #define PARM_DEFAULT_MULTICAST_RX_STR           "Y"
273 
274 #define PARM_NETWORK_ADDR                       NetworkAddress
275 #define PARM_NAME_NETWORK_ADDR                  TEXT("NetworkAddress")
276 #define PARM_DEFAULT_NETWORK_ADDR               { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }
277 
278 #define PARM_NETWORK_TYPE                       NetworkType
279 #define PARM_NAME_NETWORK_TYPE					TEXT("NetworkType")
280 #define PARM_DEFAULT_NETWORK_TYPE   			0
281 
282 #define PARM_OWN_ATIM_WINDOW                    OwnATIMWindow
283 #define PARM_NAME_OWN_ATIM_WINDOW				TEXT("OwnATIMWindow")
284 #define PARM_MIN_OWN_ATIM_WINDOW                0
285 #define PARM_MAX_OWN_ATIM_WINDOW                100
286 #define PARM_DEFAULT_OWN_ATIM_WINDOW            0
287 
288 #define PARM_OWN_BEACON_INTERVAL                OwnBeaconInterval
289 #define PARM_NAME_OWN_BEACON_INTERVAL           TEXT("OwnBeaconInterval")
290 #define PARM_MIN_OWN_BEACON_INTERVAL            20
291 #define PARM_MAX_OWN_BEACON_INTERVAL            200
292 #define PARM_DEFAULT_OWN_BEACON_INTERVAL        100
293 
294 #define PARM_OWN_CHANNEL                        OwnChannel
295 #define PARM_NAME_OWN_CHANNEL                   TEXT("OwnChannel")
296 #define PARM_MIN_OWN_CHANNEL                    1
297 #define PARM_MAX_OWN_CHANNEL                    161
298 #define PARM_DEFAULT_OWN_CHANNEL                10
299 
300 #define PARM_OWN_DTIM_PERIOD                    OwnDTIMPeriod
301 #define PARM_NAME_OWN_DTIM_PERIOD	            TEXT("OwnDTIMPeriod")
302 #define PARM_MIN_OWN_DTIM_PERIOD                1
303 #define PARM_MAX_OWN_DTIM_PERIOD                65535
304 #define PARM_DEFAULT_OWN_DTIM_PERIOD            1
305 
306 #define PARM_OWN_NAME                           OwnName
307 #define PARM_NAME_OWN_NAME                      TEXT("OwnName")
308 #define PARM_DEFAULT_OWN_NAME                   "Linux"
309 
310 #define PARM_OWN_SSID                           OwnSSID
311 #define PARM_NAME_OWN_SSID                      TEXT("OwnSSID")
312 
313 #define PARM_PM_ENABLED                         PMEnabled
314 #define PARM_NAME_PM_ENABLED                    TEXT("PMEnabled")
315 #define PARM_MAX_PM_ENABLED						3
316 
317 #define PARM_PMEPS                              PMEPS
318 #define PARM_NAME_PMEPS                         TEXT("PMEPS")
319 
320 #define PARM_PM_HOLDOVER_DURATION               PMHoldoverDuration
321 #define PARM_NAME_PM_HOLDOVER_DURATION          TEXT("PMHoldoverDuration")
322 #define PARM_MIN_PM_HOLDOVER_DURATION           1
323 #define PARM_MAX_PM_HOLDOVER_DURATION           1000
324 #define PARM_DEFAULT_PM_HOLDOVER_DURATION       100
325 
326 #define PARM_PM_MODE                            PowerMode
327 #define PARM_NAME_PM_MODE                       TEXT("PowerMode")
328 
329 #define PARM_PORT_TYPE                          PortType
330 #define PARM_NAME_PORT_TYPE                     TEXT("PortType")
331 #define PARM_MIN_PORT_TYPE                      1
332 #define PARM_MAX_PORT_TYPE                      3
333 #define PARM_DEFAULT_PORT_TYPE                  1
334 
335 #define PARM_PROMISCUOUS_MODE                   PromiscuousMode
336 #define PARM_NAME_PROMISCUOUS_MODE              TEXT("PromiscuousMode")
337 #define PARM_DEFAULT_PROMISCUOUS_MODE           FALSE
338 #define PARM_DEFAULT_PROMISCUOUS_MODE_STR       "N"
339 
340 #define PARM_REJECT_ANY                         RejectANY
341 #define PARM_NAME_REJECT_ANY				    TEXT("RejectANY")
342 #define PARM_DEFAULT_REJECT_ANY                 FALSE
343 #define PARM_DEFAULT_REJECT_ANY_STR             "N"
344 
345 #define PARM_RTS_THRESHOLD                      RTSThreshold
346 #define PARM_NAME_RTS_THRESHOLD                 TEXT("RTSThreshold")
347 #define PARM_MIN_RTS_THRESHOLD                  0
348 #define PARM_MAX_RTS_THRESHOLD                  2347
349 #define PARM_DEFAULT_RTS_THRESHOLD              2347
350 
351 #define PARM_RTS_THRESHOLD1                     RTSThreshold1
352 #define PARM_NAME_RTS_THRESHOLD1                TEXT("RTSThreshold1")
353 #define PARM_RTS_THRESHOLD2                     RTSThreshold2
354 #define PARM_NAME_RTS_THRESHOLD2                TEXT("RTSThreshold2")
355 #define PARM_RTS_THRESHOLD3                     RTSThreshold3
356 #define PARM_NAME_RTS_THRESHOLD3                TEXT("RTSThreshold3")
357 #define PARM_RTS_THRESHOLD4                     RTSThreshold4
358 #define PARM_NAME_RTS_THRESHOLD4                TEXT("RTSThreshold4")
359 #define PARM_RTS_THRESHOLD5                     RTSThreshold5
360 #define PARM_NAME_RTS_THRESHOLD5                TEXT("RTSThreshold5")
361 #define PARM_RTS_THRESHOLD6                     RTSThreshold6
362 #define PARM_NAME_RTS_THRESHOLD6                TEXT("RTSThreshold6")
363 
364 #define PARM_SRSC_2GHZ                          SRSC2GHz
365 #define PARM_NAME_SRSC_2GHZ                     TEXT("SRSC2GHz")
366 #define PARM_MIN_SRSC                           0x0000
367 #define PARM_MAX_SRSC                           0x0FFF
368 #define PARM_DEFAULT_SRSC_2GHZ                  0x0FFF
369 
370 #define PARM_SRSC_5GHZ                          SRSC5GHz
371 #define PARM_NAME_SRSC_5GHZ                     TEXT("SRSC5GHz")
372 #define PARM_DEFAULT_SRSC_5GHZ                  0x0FF0
373 
374 #define PARM_SYSTEM_SCALE                       SystemScale
375 #define PARM_NAME_SYSTEM_SCALE                  TEXT("SystemScale")
376 #define PARM_MIN_SYSTEM_SCALE                   1
377 #define PARM_MAX_SYSTEM_SCALE                   5
378 #define PARM_DEFAULT_SYSTEM_SCALE               1
379 
380 #define PARM_TX_KEY                             TxKey
381 #define PARM_NAME_TX_KEY                        TEXT("TxKey")
382 #define PARM_MIN_TX_KEY                         1
383 #define PARM_MAX_TX_KEY                         4
384 #define PARM_DEFAULT_TX_KEY                     1
385 
386 #define PARM_TX_POW_LEVEL                       TxPowLevel
387 #define PARM_NAME_TX_POW_LEVEL                  TEXT("TxPowLevel")
388 #define PARM_MIN_TX_POW_LEVEL                   1   // 20 dBm
389 #define PARM_MAX_TX_POW_LEVEL                   6   //  8 dBm
390 #define PARM_DEFAULT_TX_POW_LEVEL               3   // 15 dBm
391 
392 #define PARM_TX_RATE                            TxRateControl
393 #define PARM_NAME_TX_RATE                       TEXT("TxRateControl")
394 #define PARM_MIN_TX_RATE                        0x0001
395 #ifdef WARP
396 #define PARM_MAX_TX_RATE                        0x0FFF
397 #define PARM_DEFAULT_TX_RATE_2GHZ               0x0FFF
398 #define PARM_DEFAULT_TX_RATE_5GHZ               0x0FF0
399 #else
400 #define PARM_MAX_TX_RATE                        0x0007
401 #define PARM_DEFAULT_TX_RATE_2GHZ               0x0003
402 #define PARM_DEFAULT_TX_RATE_5GHZ               0x0000
403 #endif  // WARP
404 
405 #define PARM_TX_RATE1                           TxRateControl1
406 #define PARM_NAME_TX_RATE1                      TEXT("TxRateControl1")
407 #define PARM_TX_RATE2                           TxRateControl2
408 #define PARM_NAME_TX_RATE2                      TEXT("TxRateControl2")
409 #define PARM_TX_RATE3                           TxRateControl3
410 #define PARM_NAME_TX_RATE3                      TEXT("TxRateControl3")
411 #define PARM_TX_RATE4                           TxRateControl4
412 #define PARM_NAME_TX_RATE4                      TEXT("TxRateControl4")
413 #define PARM_TX_RATE5                           TxRateControl5
414 #define PARM_NAME_TX_RATE5                      TEXT("TxRateControl5")
415 #define PARM_TX_RATE6                           TxRateControl6
416 #define PARM_NAME_TX_RATE6                      TEXT("TxRateControl6")
417 
418 #define PARM_VENDORDESCRIPTION                  VendorDescription
419 #define PARM_NAME_VENDORDESCRIPTION				TEXT("VendorDescription")
420 
421 #define PARM_WDS_ADDRESS                        WDSAddress
422 #define PARM_NAME_WDS_ADDRESS					TEXT("WDSAddress")
423 
424 #define PARM_WDS_ADDRESS1                       WDSAddress1
425 #define PARM_NAME_WDS_ADDRESS1					TEXT("WDSAddress1")
426 #define PARM_WDS_ADDRESS2                       WDSAddress2
427 #define PARM_NAME_WDS_ADDRESS2					TEXT("WDSAddress2")
428 #define PARM_WDS_ADDRESS3                       WDSAddress3
429 #define PARM_NAME_WDS_ADDRESS3					TEXT("WDSAddress3")
430 #define PARM_WDS_ADDRESS4                       WDSAddress4
431 #define PARM_NAME_WDS_ADDRESS4					TEXT("WDSAddress4")
432 #define PARM_WDS_ADDRESS5                       WDSAddress5
433 #define PARM_NAME_WDS_ADDRESS5					TEXT("WDSAddress5")
434 #define PARM_WDS_ADDRESS6                       WDSAddress6
435 #define PARM_NAME_WDS_ADDRESS6					TEXT("WDSAddress6")
436 
437 /*
438 #define PARM_LONG_RETRY_LIMIT                   LongRetryLimit
439 #define PARM_NAME_LONG_RETRY_LIMIT              TEXT("LongRetryLimit")
440 #define PARM_MIN_LONG_RETRY_LIMIT               1
441 #define PARM_MAX_LONG_RETRY_LIMIT               15
442 #define PARM_DEFAULT_LONG_RETRY_LIMIT           3
443 
444 
445 #define PARM_PROBE_DATA_RATES                   ProbeDataRates
446 #define PARM_NAME_PROBE_DATA_RATES              TEXT("ProbeDataRates")
447 #define PARM_MIN_PROBE_DATA_RATES               0x0000
448 #define PARM_MAX_PROBE_DATA_RATES               0x0FFF
449 #define PARM_DEFAULT_PROBE_DATA_RATES_2GHZ      0x0002
450 #define PARM_DEFAULT_PROBE_DATA_RATES_5GHZ      0x0010
451 
452 #define PARM_SHORT_RETRY_LIMIT                  ShortRetryLimit
453 #define PARM_NAME_SHORT_RETRY_LIMIT             TEXT("ShortRetryLimit")
454 #define PARM_MIN_SHORT_RETRY_LIMIT              1
455 #define PARM_MAX_SHORT_RETRY_LIMIT              15
456 #define PARM_DEFAULT_SHORT_RETRY_LIMIT          7
457 
458 
459 */
460 
461 /*******************************************************************************
462  *  state definitions
463  ******************************************************************************/
464 /* The following constants are used to track state the device */
465 #define WL_FRIMWARE_PRESENT     1 // Download if needed
466 #define WL_FRIMWARE_NOT_PRESENT	0 // Skip over download, assume its already there
467 #define WL_HANDLING_INT         1 // Actually call the HCF to switch interrupts on/off
468 #define WL_NOT_HANDLING_INT     0 // Not yet handling interrupts, do not switch on/off
469 
470 /*******************************************************************************
471  *  macro definitions
472  ******************************************************************************/
473 /* The following macro ensures that no symbols are exported, minimizing the
474    chance of a symbol collision in the kernel */
475 // EXPORT_NO_SYMBOLS;
476 
477 #define NELEM(arr) (sizeof(arr) / sizeof(arr[0]))
478 
479 #define WVLAN_VALID_MAC_ADDRESS( x ) \
480 ((x[0]!=0xFF) && (x[1]!=0xFF) && (x[2]!=0xFF) && (x[3]!=0xFF) && (x[4]!=0xFF) && (x[5]!=0xFF))
481 
482 
483 
484 
485 /*******************************************************************************
486  * type definitions
487  ******************************************************************************/
488 #undef FALSE
489 #undef TRUE
490 
491 typedef enum
492 {
493 	FALSE = 0,
494 	TRUE  = 1
495 }
496 bool_t;
497 
498 
499 typedef struct _ScanResult
500 {
501 	//hcf_16        len;
502 	//hcf_16        typ;
503 	int             scan_complete;
504 	int             num_aps;
505 	SCAN_RS_STRCT   APTable [MAX_NAPS];
506 }
507 ScanResult;
508 
509 
510 typedef struct _LINK_STATUS_STRCT
511 {
512 	hcf_16  len;
513 	hcf_16  typ;
514 	hcf_16  linkStatus;     /* 1..5 */
515 }
516 LINK_STATUS_STRCT;
517 
518 
519 typedef struct _ASSOC_STATUS_STRCT
520 {
521 	hcf_16  len;
522 	hcf_16  typ;
523 	hcf_16  assocStatus;            /* 1..3 */
524 	hcf_8   staAddr[ETH_ALEN];
525 	hcf_8   oldApAddr[ETH_ALEN];
526 }
527 ASSOC_STATUS_STRCT;
528 
529 
530 typedef struct _SECURITY_STATUS_STRCT
531 {
532 	hcf_16  len;
533 	hcf_16  typ;
534 	hcf_16  securityStatus;     /* 1..3 */
535 	hcf_8   staAddr[ETH_ALEN];
536 	hcf_16  reason;
537 }
538 SECURITY_STATUS_STRCT;
539 
540 #define WVLAN_WMP_PDU_TYPE_LT_REQ       0x00
541 #define WVLAN_WMP_PDU_TYPE_LT_RSP       0x01
542 #define WVLAN_WMP_PDU_TYPE_APL_REQ      0x02
543 #define WVLAN_WMP_PDU_TYPE_APL_RSP      0x03
544 
545 typedef struct wvlan_eth_hdr
546 {
547 	unsigned char   dst[ETH_ALEN];           /* Destination address. */
548 	unsigned char   src[ETH_ALEN];           /* Source address. */
549 	unsigned short  len;                    /* Length of the PDU. */
550 }
551 WVLAN_ETH_HDR, *PWVLAN_ETH_HDR;
552 
553 typedef struct wvlan_llc_snap
554 {
555 	unsigned char   dsap;                   /* DSAP (0xAA) */
556 	unsigned char   ssap;                   /* SSAP (0xAA) */
557 	unsigned char   ctrl;                   /* Control (0x03) */
558 	unsigned char   oui[3];                 /* Organization Unique ID (00-60-1d). */
559 	unsigned char   specid[2];              /* Specific ID code (00-01). */
560 }
561 WVLAN_LLC_SNAP, *PWVLAN_LLC_SNAP;
562 
563 
564 typedef struct wvlan_lt_hdr
565 {
566 	unsigned char   version;                /* Version (0x00) */
567 	unsigned char   type;                   /* PDU type: 0-req/1-resp. */
568 	unsigned short  id;                     /* Identifier to associate resp to req. */
569 }
570 WVLAN_LT_HDR, *PWVLAN_LT_HDR;
571 
572 
573 typedef struct wvlan_wmp_hdr
574 {
575 	unsigned char   version;                /* Version  */
576 	unsigned char   type;                   /* PDU type */
577 }
578 WVLAN_WMP_HDR, *PWVLAN_WMP_HDR;
579 
580 
581 #define FILLER_SIZE             1554
582 #define TEST_PATTERN_SIZE       54
583 
584 
585 typedef struct wvlan_lt_req
586 {
587 	unsigned char   Filler[TEST_PATTERN_SIZE];   /* minimal length of 54 bytes */
588 }
589 WVLAN_LT_REQ, *PWVLAN_LT_REQ;
590 
591 
592 typedef struct wvlan_lt_rsp
593 {
594 	char           name[32];
595 	/* Measured Data */
596 	unsigned char  signal;
597 	unsigned char  noise;
598 	unsigned char  rxFlow;
599 	unsigned char  dataRate;
600 	unsigned short protocol;
601 	/* Capabilities */
602 	unsigned char  station;
603 	unsigned char  dataRateCap;
604 	unsigned char  powerMgmt[4];
605 	unsigned char  robustness[4];
606 	unsigned char  scaling;
607 	unsigned char  reserved[5];
608 }
609 WVLAN_LT_RSP, *PWVLAN_LT_RSP;
610 
611 
612 typedef struct wvlan_rx_wmp_hdr
613 {
614 	unsigned short status;
615 	unsigned short reserved1[2];
616 	unsigned char  silence;
617 	unsigned char  signal;
618 	unsigned char  rate;
619 	unsigned char  rxFlow;
620 	unsigned short reserved2[2];
621 	unsigned short frameControl;
622 	unsigned short duration;
623 	unsigned short address1[3];
624 	unsigned short address2[3];
625 	unsigned short address3[3];
626 	unsigned short sequenceControl;
627 	unsigned short address4[3];
628 #ifndef HERMES25	//;?just to be on the safe side of inherited but not comprehended code #ifdef HERMES2
629 	unsigned short seems_to_be_unused_reserved3[5];  //;?
630 	unsigned short seems_to_be_unused_reserved4;	 //;?
631 #endif // HERMES25
632 	unsigned short HeaderDataLen;
633 }
634 WVLAN_RX_WMP_HDR, *PWVLAN_RX_WMP_HDR;
635 
636 
637 typedef struct wvlan_linktest_req_pdu
638 {
639 	WVLAN_ETH_HDR     ethHdr;
640 	WVLAN_LLC_SNAP    llcSnap;
641 	WVLAN_LT_HDR      ltHdr;
642 	WVLAN_LT_REQ      ltReq;
643 }
644 WVLAN_LINKTEST_REQ_PDU, *PWVLAN_LINKTEST_REQ_PDU;
645 
646 
647 typedef struct wvlan_linktest_rsp_pdu
648 {
649 	WVLAN_RX_WMP_HDR  wmpRxHdr;
650 	WVLAN_ETH_HDR     ethHdr;
651 	WVLAN_LLC_SNAP    llcSnap;
652 	WVLAN_LT_HDR      ltHdr;
653 	WVLAN_LT_RSP      ltRsp;
654 }
655 WVLAN_LINKTEST_RSP_PDU, *PWVLAN_LINKTEST_RSP_PDU;
656 
657 
658 typedef struct _LINKTEST_RSP_STRCT
659 {
660 	hcf_16                   len;
661 	hcf_16                   typ;
662 	WVLAN_LINKTEST_RSP_PDU   ltRsp;
663 }
664 LINKTEST_RSP_STRCT;
665 
666 
667 typedef struct wvlan_wmp_rsp_pdu
668 {
669 	WVLAN_RX_WMP_HDR  wmpRxHdr;
670 	WVLAN_ETH_HDR     ethHdr;
671 	WVLAN_LLC_SNAP    llcSnap;
672 	WVLAN_WMP_HDR     wmpHdr;
673 }
674 WVLAN_WMP_RSP_PDU, *PWVLAN_WMP_RSP_PDU;
675 
676 
677 typedef struct _WMP_RSP_STRCT
678 {
679 	hcf_16              len;
680 	hcf_16              typ;
681 	WVLAN_WMP_RSP_PDU   wmpRsp;
682 }
683 WMP_RSP_STRCT;
684 
685 
686 typedef struct _PROBE_RESP
687 {
688 	// first part: 802.11
689 	hcf_16	length;
690 	hcf_16	infoType;
691 	hcf_16	reserved0;
692 	//hcf_8	signal;
693 	hcf_8	silence;
694 	hcf_8	signal;     // Moved signal here as signal/noise values were flipped
695 	hcf_8	rxFlow;
696 	hcf_8	rate;
697 	hcf_16	reserved1[2];
698 
699 	// second part:
700 	hcf_16	frameControl;
701 	hcf_16	durID;
702 	hcf_8	address1[6];
703 	hcf_8	address2[6];
704 	hcf_8	BSSID[6];					//! this is correct, right ?
705 	hcf_16	sequence;
706 	hcf_8	address4[6];
707 
708 #ifndef WARP
709 	hcf_8	reserved2[12];
710 #endif // WARP
711 
712 	hcf_16	dataLength;
713 										// the information in the next 3 fields (DA/SA/LenType) is actually not filled in.
714 	hcf_8	DA[6];
715 	hcf_8	SA[6];
716 
717 #ifdef WARP
718 	hcf_8   channel;
719 	hcf_8   band;
720 #else
721 	hcf_16	lenType;
722 #endif  // WARP
723 
724 	hcf_8	timeStamp[8];
725 	hcf_16	beaconInterval;
726 	hcf_16	capability;
727 	hcf_8	rawData[200];				//! <<< think about this number !
728 	hcf_16	flags;
729 }
730 PROBE_RESP, *PPROBE_RESP;
731 
732 
733 typedef struct _ProbeResult
734 {
735 	int         scan_complete;
736 	int         num_aps;
737 	PROBE_RESP  ProbeTable[MAX_NAPS];
738 }
739 ProbeResult;
740 
741 /* Definitions used to parse capabilities out of the probe responses */
742 #define CAPABILITY_ESS      0x0001
743 #define CAPABILITY_IBSS     0x0002
744 #define CAPABILITY_PRIVACY  0x0010
745 
746 /* Definitions used to parse the Information Elements out of probe responses */
747 #define DS_INFO_ELEM                        0x03
748 #define GENERIC_INFO_ELEM                   0xdd
749 #define WPA_MAX_IE_LEN                      40
750 #define WPA_SELECTOR_LEN                    4
751 #define WPA_OUI_TYPE                        { 0x00, 0x50, 0xf2, 1 }
752 #define WPA_VERSION                         1
753 #define WPA_AUTH_KEY_MGMT_UNSPEC_802_1X     { 0x00, 0x50, 0xf2, 1 }
754 #define WPA_AUTH_KEY_MGMT_PSK_OVER_802_1X   { 0x00, 0x50, 0xf2, 2 }
755 #define WPA_CIPHER_SUITE_NONE               { 0x00, 0x50, 0xf2, 0 }
756 #define WPA_CIPHER_SUITE_WEP40              { 0x00, 0x50, 0xf2, 1 }
757 #define WPA_CIPHER_SUITE_TKIP               { 0x00, 0x50, 0xf2, 2 }
758 #define WPA_CIPHER_SUITE_WRAP               { 0x00, 0x50, 0xf2, 3 }
759 #define WPA_CIPHER_SUITE_CCMP               { 0x00, 0x50, 0xf2, 4 }
760 #define WPA_CIPHER_SUITE_WEP104             { 0x00, 0x50, 0xf2, 5 }
761 
762 typedef enum wvlan_drv_mode
763 {
764 	WVLAN_DRV_MODE_NO_DOWNLOAD,     /* this is the same as STA for Hermes 1    */
765 				                    /* it is also only applicable for Hermes 1 */
766 	WVLAN_DRV_MODE_STA,
767 	WVLAN_DRV_MODE_AP,
768 	WVLAN_DRV_MODE_MAX
769 }
770 WVLAN_DRV_MODE, *PWVLAN_DRV_MODE;
771 
772 
773 typedef enum wvlan_port_state
774 {
775 	WVLAN_PORT_STATE_ENABLED,
776 	WVLAN_PORT_STATE_DISABLED,
777 	WVLAN_PORT_STATE_CONNECTED
778 }
779 WVLAN_PORT_STATE, *PWVLAN_PORT_STATE;
780 
781 /*
782 typedef enum wvlan_connect_state
783 {
784 	WVLAN_CONNECT_STATE_CONNECTED,
785 	WVLAN_CONNECT_STATE_DISCONNECTED
786 }
787 WVLAN_CONNECT_STATE, *PWVLAN_CONNECT_STATE;
788 */
789 
790 typedef enum wvlan_pm_state
791 {
792 	WVLAN_PM_STATE_DISABLED,
793 	WVLAN_PM_STATE_ENHANCED,
794 	WVLAN_PM_STATE_STANDARD
795 }
796 WVLAN_PM_STATE, *PWVLAN_PM_STATE;
797 
798 
799 typedef struct wvlan_frame
800 {
801 	struct sk_buff  *skb;       /* sk_buff for frame. */
802 	hcf_16          port;       /* MAC port for the frame. */
803 	hcf_16          len;        /* Length of the frame. */
804 }
805 WVLAN_FRAME, *PWVLAN_FRAME;
806 
807 
808 typedef struct wvlan_lframe
809 {
810 	struct list_head    node;   /* Node in the list */
811 	WVLAN_FRAME	        frame;  /* Frame. */
812 }
813 WVLAN_LFRAME, *PWVLAN_LFRAME;
814 
815 
816 
817 #define DEFAULT_NUM_TX_FRAMES           48
818 #define TX_Q_LOW_WATER_MARK             (DEFAULT_NUM_TX_FRAMES/3)
819 
820 #define WVLAN_MAX_TX_QUEUES             1
821 
822 
823 #ifdef USE_WDS
824 
825 typedef struct wvlan_wds_if
826 {
827 	struct net_device           *dev;
828 	int                         is_registered;
829 	int                         netif_queue_on;
830 	struct net_device_stats     stats;
831 	hcf_16                      rtsThreshold;
832 	hcf_16                      txRateCntl;
833 	hcf_8                       wdsAddress[ETH_ALEN];
834 } WVLAN_WDS_IF, *PWVLAN_WDS_IF;
835 
836 #endif  // USE_WDS
837 
838 
839 
840 #define NUM_RX_DESC 5
841 #define NUM_TX_DESC 5
842 
843 typedef struct dma_strct
844 {
845 	DESC_STRCT  *tx_packet[NUM_TX_DESC];
846 	DESC_STRCT  *rx_packet[NUM_RX_DESC];
847 	DESC_STRCT  *rx_reclaim_desc, *tx_reclaim_desc; // Descriptors for host-reclaim purposes (see HCF)
848 	int         tx_rsc_ind; // DMA Tx resource indicator is maintained in the MSF, not in the HCF
849 	int         rx_rsc_ind; // Also added rx rsource indicator so that cleanup can be performed if alloc fails
850 	int         status;
851 } DMA_STRCT;
852 
853 
854 /* Macros used in DMA support */
855 /* get bus address of {rx,tx}dma structure member, in little-endian byte order */
856 #define WL_DMA_BUS_ADDR_LE(str, i, mem) \
857 	cpu_to_le32(str##_dma_addr[(i)] + ((hcf_8 *)&str[(i)]->mem - (hcf_8 *)str[(i)]))
858 
859 
860 struct wl_private
861 {
862 
863 #ifdef BUS_PCMCIA
864 	struct pcmcia_device	    *link;
865 #endif // BUS_PCMCIA
866 
867 
868 	struct net_device           *dev;
869 //	struct net_device           *dev_next;
870 	spinlock_t                  slock;
871 	struct tasklet_struct       task;
872 	struct net_device_stats     stats;
873 
874 
875 #ifdef WIRELESS_EXT
876 	struct iw_statistics        wstats;
877 //	int                         spy_number;
878 //	u_char                      spy_address[IW_MAX_SPY][ETH_ALEN];
879 //	struct iw_quality           spy_stat[IW_MAX_SPY];
880 	struct iw_spy_data          spy_data;
881 	struct iw_public_data	wireless_data;
882 #endif // WIRELESS_EXT
883 
884 
885 	IFB_STRCT                   hcfCtx;
886 //;? struct timer_list			timer_oor;
887 //;? hcf_16						timer_oor_cnt;
888 	u_long						wlags49_type;		//controls output in /proc/wlags49
889 	u_long                      flags;
890 	hcf_16						DebugFlag;
891 	int                         is_registered;
892 	int                         is_handling_int;
893 	int                         firmware_present;
894 	char                        sysfsCreated;
895 	CFG_DRV_INFO_STRCT          driverInfo;
896 	CFG_IDENTITY_STRCT          driverIdentity;
897 	CFG_FW_IDENTITY_STRCT       StationIdentity;
898 	CFG_PRI_IDENTITY_STRCT      PrimaryIdentity;
899 	CFG_PRI_IDENTITY_STRCT      NICIdentity;
900 
901 	ltv_t                       ltvRecord;
902 	u_long                      txBytes;
903 	hcf_16                      maxPort;        /* 0 for STA, 6 for AP */
904 
905 	/* Elements used for async notification from hardware */
906 	RID_LOG_STRCT				RidList[10];
907 	ltv_t                       updatedRecord;
908 	PROBE_RESP				    ProbeResp;
909 	ASSOC_STATUS_STRCT          assoc_stat;
910 	SECURITY_STATUS_STRCT       sec_stat;
911 
912 	u_char                      lookAheadBuf[WVLAN_MAX_LOOKAHEAD];
913 
914 	hcf_8                       PortType;           // 1 - 3 (1 [Normal] | 3 [AdHoc])
915 	hcf_16                      Channel;            // 0 - 14 (0)
916 	hcf_16                      TxRateControl[2];
917 	hcf_8                       DistanceBetweenAPs; // 1 - 3 (1)
918 	hcf_16                      RTSThreshold;       // 0 - 2347 (2347)
919 	hcf_16                      PMEnabled;          // 0 - 2, 8001 - 8002 (0)
920 	hcf_8                       MicrowaveRobustness;// 0 - 1 (0)
921 	hcf_8                       CreateIBSS;         // 0 - 1 (0)
922 	hcf_8                       MulticastReceive;   // 0 - 1 (1)
923 	hcf_16                      MaxSleepDuration;   // 0 - 65535 (100)
924 	hcf_8                       MACAddress[ETH_ALEN];
925 	char                        NetworkName[HCF_MAX_NAME_LEN+1];
926 	char                        StationName[HCF_MAX_NAME_LEN+1];
927 	hcf_8                       EnableEncryption;   // 0 - 1 (0)
928 	char                        Key1[MAX_KEY_LEN+1];
929 	char                        Key2[MAX_KEY_LEN+1];
930 	char                        Key3[MAX_KEY_LEN+1];
931 	char                        Key4[MAX_KEY_LEN+1];
932 	hcf_8                       TransmitKeyID;      // 1 - 4 (1)
933 	CFG_DEFAULT_KEYS_STRCT	    DefaultKeys;
934 	u_char                      mailbox[MB_SIZE];
935 	char                        szEncryption[MAX_ENC_LEN];
936 
937 	hcf_16                      driverEnable;
938 	hcf_16                      wolasEnable;
939 	hcf_16                      atimWindow;
940 	hcf_16                      holdoverDuration;
941 	hcf_16                      MulticastRate[2];
942 
943 	hcf_16                      authentication; // is this AP specific?
944 	hcf_16                      promiscuousMode;
945 	WVLAN_DRV_MODE              DownloadFirmware;   // 0 - 2 (0 [None] | 1 [STA] | 2 [AP])
946 
947 	char						fw_image_filename[MAX_LINE_SIZE+1];
948 
949 	hcf_16                      AuthKeyMgmtSuite;
950 
951 	hcf_16                      loadBalancing;
952 	hcf_16                      mediumDistribution;
953 	hcf_16                      txPowLevel;
954 	//hcf_16                      shortRetryLimit;
955 	//hcf_16                      longRetryLimit;
956 	hcf_16                      srsc[2];
957 	hcf_16                      brsc[2];
958 	hcf_16                      connectionControl;
959 	//hcf_16                      probeDataRates[2];
960 	hcf_16                      ownBeaconInterval;
961 	hcf_16                      coexistence;
962 
963 	WVLAN_FRAME                 txF;
964 	WVLAN_LFRAME                txList[DEFAULT_NUM_TX_FRAMES];
965 	struct list_head            txFree;
966 	struct list_head            txQ[WVLAN_MAX_TX_QUEUES];
967 	int                         netif_queue_on;
968 	int                         txQ_count;
969 	DESC_STRCT                  desc_rx;
970 	DESC_STRCT                  desc_tx;
971 
972 	WVLAN_PORT_STATE            portState;
973 
974 	ScanResult                  scan_results;
975 	ProbeResult                 probe_results;
976 	int                         probe_num_aps;
977 
978 	int                         use_dma;
979 	DMA_STRCT                   dma;
980 #ifdef USE_RTS
981 	int                         useRTS;
982 #endif  // USE_RTS
983 	hcf_8                       DTIMPeriod;         // 1 - 255 (1)
984 	hcf_16                      multicastPMBuffering;
985 	hcf_8                       RejectAny;          // 0 - 1 (0)
986 	hcf_8                       ExcludeUnencrypted; // 0 - 1 (1)
987 	hcf_16                      intraBSSRelay;
988 #ifdef USE_WDS
989 	WVLAN_WDS_IF                wds_port[NUM_WDS_PORTS];
990 #endif // USE_WDS
991 }; // wl_private
992 
993 #ifdef HAVE_NETDEV_PRIV
994 #define wl_priv(dev) ((struct wl_private *) netdev_priv(dev))
995 #else
wl_priv(struct net_device * dev)996 extern inline struct wl_private *wl_priv(struct net_device *dev)
997 {
998     return dev->priv;
999 }
1000 #endif
1001 
1002 /********************************************************************/
1003 /* Locking and synchronization functions                            */
1004 /********************************************************************/
1005 
1006 /* These functions *must* be inline or they will break horribly on
1007  * SPARC, due to its weird semantics for save/restore flags. extern
1008  * inline should prevent the kernel from linking or module from
1009  * loading if they are not inlined. */
wl_lock(struct wl_private * lp,unsigned long * flags)1010 static inline void wl_lock(struct wl_private *lp,
1011 	                       unsigned long *flags)
1012 {
1013 	spin_lock_irqsave(&lp->slock, *flags);
1014 }
1015 
wl_unlock(struct wl_private * lp,unsigned long * flags)1016 static inline void wl_unlock(struct wl_private *lp,
1017 	                          unsigned long *flags)
1018 {
1019 	spin_unlock_irqrestore(&lp->slock, *flags);
1020 }
1021 
1022 /********************************************************************/
1023 /* Interrupt enable disable functions                               */
1024 /********************************************************************/
1025 
wl_act_int_on(struct wl_private * lp)1026 extern inline void wl_act_int_on(struct wl_private *lp)
1027 {
1028 	/*
1029 	 * Only do something when the driver is handling
1030 	 * interrupts. Handling starts at wl_open and
1031 	 * ends at wl_close when not in RTS mode
1032 	 */
1033 	if(lp->is_handling_int == WL_HANDLING_INT) {
1034 		hcf_action( &lp->hcfCtx, HCF_ACT_INT_ON );
1035 	}
1036 }
1037 
wl_act_int_off(struct wl_private * lp)1038 extern inline void wl_act_int_off(struct wl_private *lp)
1039 {
1040 	/*
1041 	 * Only do something when the driver is handling
1042 	 * interrupts. Handling starts at wl_open and
1043 	 * ends at wl_close when not in RTS mode
1044 	 */
1045 	if(lp->is_handling_int == WL_HANDLING_INT) {
1046 		hcf_action( &lp->hcfCtx, HCF_ACT_INT_OFF );
1047 	}
1048 }
1049 
1050 #endif  // __WAVELAN2_H__
1051