blob: 9fc423dd69dfea1ff6cf956a9edfe3ec53f5b131 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
2 * Copyright (c) 2012, Code Aurora Forum. All rights reserved.
3 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/** ------------------------------------------------------------------------- *
23 ------------------------------------------------------------------------- *
24
25
26 \file csrInternal.h
27
28 Define internal data structure for MAC.
29
30 Copyright (C) 2006 Airgo Networks, Incorporated
31 ========================================================================== */
32#ifndef CSRINTERNAL_H__
33#define CSRINTERNAL_H__
34
35#if defined(VOSS_ENABLED)
36#include "vos_status.h"
37#include "vos_lock.h"
38#endif //#if defined(VOSS_ENABLED)
39
40#include "palTimer.h"
41#include "csrSupport.h"
42#include "vos_nvitem.h"
43#include "wlan_qct_tl.h"
44
45#ifdef WLAN_FEATURE_NEIGHBOR_ROAMING
46#include "csrNeighborRoam.h"
47#endif
48
49#define CSR_MAX_STA (HAL_NUM_STA)
50
51#define CSR_SME_SCAN_FLAGS_DELETE_CACHE 0x80
52
53#define CSR_TITAN_MAX_RATE_MIMO_CB 240
54#define CSR_TITAN_MAX_RATE_MIMO 126
55
56//define scan return criteria. LIM should use these define as well
57#define CSR_SCAN_RETURN_AFTER_ALL_CHANNELS ( 0 )
58#define CSR_SCAN_RETURN_AFTER_FIRST_MATCH ( 0x01 )
59#define CSR_SCAN_RETURN_AFTER_5_BAND_11d_FOUND ( 0x80 )
60#define CSR_SCAN_RETURN_AFTER_24_BAND_11d_FOUND ( 0x40 )
61#define CSR_SCAN_RETURN_AFTER_EITHER_BAND_11d_FOUND ( CSR_SCAN_RETURN_AFTER_5_BAND_11d_FOUND | CSR_SCAN_RETURN_AFTER_24_BAND_11d_FOUND )
62#define CSR_NUM_RSSI_CAT 5
63#define CSR_MAX_STATISTICS_REQ 10
64
65//Support for multiple session
66#define CSR_SESSION_ID_INVALID 0xFF // session ID invalid
67#define CSR_ROAM_SESSION_MAX 5 // No of sessions to be supported, and a
68 // session is for Infra, IBSS or BT-AMP
69
70#define CSR_IS_SESSION_VALID( pMac, sessionId ) ( ( (sessionId) < CSR_ROAM_SESSION_MAX ) \
71 && ( (pMac)->roam.roamSession[(sessionId)].sessionActive ) )
72#define CSR_GET_SESSION( pMac, sessionId ) \
73( \
74 (sessionId < CSR_ROAM_SESSION_MAX) ? \
75 (&(pMac)->roam.roamSession[(sessionId)]) :\
76 NULL \
77)
78
79
80
81typedef enum
82{
83 //eCSR_CFG_DOT11_MODE_BEST = 0,
84 eCSR_CFG_DOT11_MODE_TAURUS = 0,
85 eCSR_CFG_DOT11_MODE_ABG,
86 eCSR_CFG_DOT11_MODE_11A,
87 eCSR_CFG_DOT11_MODE_11B,
88 eCSR_CFG_DOT11_MODE_11G,
89 eCSR_CFG_DOT11_MODE_11N,
90 eCSR_CFG_DOT11_MODE_POLARIS,
91 eCSR_CFG_DOT11_MODE_TITAN,
92#ifdef WLAN_SOFTAP_FEATURE
93 eCSR_CFG_DOT11_MODE_11G_ONLY,
94 eCSR_CFG_DOT11_MODE_11N_ONLY,
95#endif
96 //This value can never set to CFG. It is for CSR's internal use
97 eCSR_CFG_DOT11_MODE_AUTO,
98}eCsrCfgDot11Mode; //Used to determine what to set to the WNI_CFG_DOT11_MODE
99
100typedef enum etCsrRoamCommands
101{
102 eCsrRoamNoCommand,
103 eCsrRoamCommandScan,
104 eCsrRoamCommandRoam,
105 eCsrRoamCommandWmStatusChange,
106 eCsrRoamCommandSetKey,
107 eCsrRoamCommandRemoveKey,
108
109} eCsrRoamCommands;
110
111typedef enum
112{
113 eCsrScanOther = 1,
114 eCsrScanLostLink1,
115 eCsrScanLostLink2,
116 eCsrScanLostLink3,
117 eCsrScanLostLink4,
118 eCsrScan11d1, //First 11d scan
119 eCsrScan11d2, //First 11d scan has failed
120 eCsrScan11dDone, //11d scan succeeded, try the rest of the channel
121 eCsrScanUserRequest,
122 eCsrScanGetResult,
123 eCsrScanSetBGScanParam, //used for HO too - bg scan request in NT Handoff sub-state
124 eCsrScanForSsid,
125 eCsrScanForCapsChange,
126 eCsrScanBGScanAbort,
127 eCsrScanBGScanEnable,
128 eCsrScanIdleScan,
129 eCsrScanGetScanChnInfo, //To get the list of channels scanned
130
131 eCsrScanBgScan, // bg scan request in NRT & RT Handoff sub-states
132 eCsrScanProbeBss, // directed probe on an entry from the candidate list - HO
133 eCsrScanAbortBgScan, //aborting a BG scan (meaning the scan is triggered by LIM timer)
134 eCsrScanAbortNormalScan, //aborting a normal scan (the scan is trigger by eWNI_SME_SCAN_REQ)
135 eCsrScanP2PFindPeer
136}eCsrScanReason;
137
138typedef enum
139{
140 eCsrNoConnection, // Roaming because we have not established the initial connection.
141 eCsrCapsChange, // roaming because LIM reported a Capability change in the associated AP.
142 eCsrForcedDisassoc, // roaming becuase someone asked us to Disassoc and stay disassociated.
143 eCsrHddIssued, // roaming because an 802.11 request was issued to the driver.
144 eCsrLostLink1, // roaming because we lost link to an associated AP
145 eCsrLostLink2,
146 eCsrLostLink3,
147 eCsrForcedDisassocMICFailure, // roaming because we need to force a Disassoc due to MIC failure
148 eCsrHddIssuedReassocToSameAP,
149 eCsrSmeIssuedReassocToSameAP,
150 eCsrSmeIssuedReassocToDiffAP,
151 eCsrForcedDeauth, // roaming becuase someone asked us to deauth and stay disassociated.
152 eCsrSmeIssuedDisassocForHandoff, // will be issued by Handoff logic to disconect from current AP
153 eCsrSmeIssuedAssocToSimilarAP, // will be issued by Handoff logic to join a new AP with same profile
154 eCsrSmeIssuedIbssJoinFailure, // ibss join timer fired before any perr showed up, so shut down the network
155 eCsrForcedIbssLeave,
156 eCsrStopBss,
157 eCsrSmeIssuedFTReassoc,
158 eCsrForcedDisassocSta,
159 eCsrForcedDeauthSta,
160
161}eCsrRoamReason;
162
163typedef enum
164{
165 eCSR_ROAM_SUBSTATE_NONE = 0,
166 eCSR_ROAM_SUBSTATE_START_BSS_REQ,
167 eCSR_ROAM_SUBSTATE_JOIN_REQ,
168 eCSR_ROAM_SUBSTATE_REASSOC_REQ,
169 eCSR_ROAM_SUBSTATE_DISASSOC_REQ,
170 eCSR_ROAM_SUBSTATE_STOP_BSS_REQ,
171 eCSR_ROAM_SUBSTATE_DISCONNECT_CONTINUE_ROAMING, //Continue the current roam command after disconnect
172 eCSR_ROAM_SUBSTATE_AUTH_REQ,
173 eCSR_ROAM_SUBSTATE_CONFIG,
174 eCSR_ROAM_SUBSTATE_DEAUTH_REQ,
175 eCSR_ROAM_SUBSTATE_DISASSOC_NOTHING_TO_JOIN,
176 eCSR_ROAM_SUBSTATE_DISASSOC_REASSOC_FAILURE,
177 eCSR_ROAM_SUBSTATE_DISASSOC_FORCED,
178 eCSR_ROAM_SUBSTATE_WAIT_FOR_KEY,
179 eCSR_ROAM_SUBSTATE_DISASSOC_HANDOFF,
180 eCSR_ROAM_SUBSTATE_JOINED_NO_TRAFFIC,
181 eCSR_ROAM_SUBSTATE_JOINED_NON_REALTIME_TRAFFIC,
182 eCSR_ROAM_SUBSTATE_JOINED_REALTIME_TRAFFIC,
183// max is 15 unless the bitfield is expanded...
184} eCsrRoamSubState;
185
186
187typedef enum
188{
189 eCSR_ROAMING_STATE_STOP = 0,
190 eCSR_ROAMING_STATE_IDLE,
191 eCSR_ROAMING_STATE_SCANNING,
192 eCSR_ROAMING_STATE_JOINING,
193 eCSR_ROAMING_STATE_JOINED,
194}eCsrRoamState;
195
196
197typedef enum
198{
199 eCsrContinueRoaming,
200 eCsrStopRoaming,
201 eCsrStartIbss,
202 eCsrStartIbssSameIbss,
203 eCsrReassocToSelfNoCapChange,
204
205}eCsrJoinState;
206
207typedef enum
208{
209 eCsrNotRoaming,
210 eCsrLostlinkRoamingDisassoc,
211 eCsrLostlinkRoamingDeauth,
212 eCsrDynamicRoaming,
213 eCsrReassocRoaming,
214}eCsrRoamingReason;
215
216typedef enum
217{
218 eCsrDisassociated,
219 eCsrDeauthenticated
220
221}eCsrRoamWmStatusChangeTypes;
222
223typedef enum
224{
225 eCsrSummaryStats = 0,
226 eCsrGlobalClassAStats,
227 eCsrGlobalClassBStats,
228 eCsrGlobalClassCStats,
229 eCsrGlobalClassDStats,
230 eCsrPerStaStats,
231 eCsrMaxStats
232}eCsrRoamStatsClassTypes;
233
234#ifdef FEATURE_WLAN_DIAG_SUPPORT
235typedef enum
236{
237 eCSR_WLAN_STATUS_CONNECT =0,
238 eCSR_WLAN_STATUS_DISCONNECT
239
240}eCsrDiagWlanStatusEventSubtype;
241
242typedef enum
243{
244 eCSR_REASON_UNSPECIFIED = 0,
245 eCSR_REASON_USER_REQUESTED,
246 eCSR_REASON_MIC_ERROR,
247 eCSR_REASON_DISASSOC,
248 eCSR_REASON_DEAUTH,
249 eCSR_REASON_HANDOFF,
250
251}eCsrDiagWlanStatusEventReason;
252
253typedef enum
254{
255 eCSR_WLAN_HANDOFF_EVENT =0,
256
257}eCsrDiagWlanHandoffEventSubtype;
258
259typedef enum
260{
261 eCSR_WLAN_VCC_EVENT =0,
262
263}eCsrDiagWlanVccEventSubtype;
264
265#endif //FEATURE_WLAN_DIAG_SUPPORT
266
267typedef struct tagCsrChannel
268{
269 tANI_U8 numChannels;
270 tANI_U8 channelList[WNI_CFG_VALID_CHANNEL_LIST_LEN];
271}tCsrChannel;
272
273typedef struct tagScanProfile
274{
275 tANI_U32 minChnTime;
276 tANI_U32 maxChnTime;
277 tANI_U32 restTime; //This is ignored if not associated
278 tANI_U32 numOfChannels;
279 tANI_U8 *pChannelList;
280 tSirScanType scanType; //active or passive
281 eCsrRoamBssType bssType; //BSS or IBSS
282 tANI_U8 ssid[WNI_CFG_SSID_LEN];
283 tANI_U8 bReturnAfter1stMatch;
284 tANI_U8 fUniqueResult;
285 tANI_U8 freshScan;
286 tCsrBssid bssid;
287}tScanProfile;
288
289typedef struct tagBssConfigParam
290{
291 eCsrMediaAccessType qosType;
292 tSirMacSSid SSID;
293 tANI_U32 uRTSThresh;
294 tANI_U32 uDeferThresh; //
295 eCsrCfgDot11Mode uCfgDot11Mode;
296 eCsrBand eBand;
297 tANI_U8 standardRate[CSR_DOT11_SUPPORTED_RATES_MAX];
298 tANI_U8 extendedRate[CSR_DOT11_EXTENDED_SUPPORTED_RATES_MAX];
299 eCsrExposedTxRate txRate;
300 tAniAuthType authType;
301 eCsrEncryptionType encType;
302 tANI_U32 uShortSlotTime;
303 tANI_U32 uHTSupport; //High throughput
304 tANI_U32 uPowerLimit;
305 tANI_U32 uHeartBeatThresh;
306 tANI_U32 uJoinTimeOut;
307 tSirMacCapabilityInfo BssCap;
308 tANI_BOOLEAN f11hSupport;
309 tAniCBSecondaryMode cbMode;
310}tBssConfigParam;
311
312
313typedef struct tagCsrRoamStartBssParams
314{
315 tSirMacSSid ssId;
316 tCsrBssid bssid; //this is the BSSID for the party we want to join (only use for IBSS or WDS)
317 tSirNwType sirNwType;
318 tAniCBSecondaryMode cbMode;
319 tSirMacRateSet operationalRateSet;
320 tSirMacRateSet extendedRateSet;
321 tANI_U8 operationChn;
322 eCsrCfgDot11Mode uCfgDot11Mode;
323#ifdef WLAN_SOFTAP_FEATURE
324 tANI_U8 privacy;
325 tANI_BOOLEAN fwdWPSPBCProbeReq;
326 tANI_BOOLEAN protEnabled;
327 tANI_BOOLEAN obssProtEnabled;
328 tAniAuthType authType;
329 tANI_U16 beaconInterval; //If this is 0, SME will fill in for caller.
330 tANI_U16 ht_protection;
331 tANI_U32 dtimPeriod;
332 tANI_U8 ApUapsdEnable;
333 tANI_U8 ssidHidden;
334 tANI_U8 wps_state;
335#endif
336 tVOS_CON_MODE bssPersona;
337 tANI_U16 nRSNIELength; //The byte count in the pRSNIE, if 0, pRSNIE is ignored.
338 tANI_U8 *pRSNIE; //If not null, it has the IE byte stream for RSN
339}tCsrRoamStartBssParams;
340
341
342typedef struct tagScanCmd
343{
344 tANI_U32 scanID;
345 csrScanCompleteCallback callback;
346 void *pContext;
347 eCsrScanReason reason;
348 eCsrRoamState lastRoamState[CSR_ROAM_SESSION_MAX];
349 tCsrRoamProfile *pToRoamProfile;
350 tANI_U32 roamId; //this is the ID related to the pToRoamProfile
351 union
352 {
353 tCsrScanRequest scanRequest;
354 tCsrBGScanRequest bgScanRequest;
355 }u;
356}tScanCmd;
357
358typedef struct tagRoamCmd
359{
360 tANI_U32 roamId;
361 eCsrRoamReason roamReason;
362 tCsrRoamProfile roamProfile;
363 tScanResultHandle hBSSList; //BSS list fits the profile
364 tListElem *pRoamBssEntry; //point to the current BSS in the list that is roaming. It starts from head to tail
365 tSirBssDescription *pLastRoamBss; //the last BSS we try and failed
366 tANI_BOOLEAN fReleaseBssList; //whether to free hBSSList
367 tANI_BOOLEAN fReleaseProfile; //whether to free roamProfile
368 tANI_BOOLEAN fReassoc; //whether this command is for reassociation
369 tANI_BOOLEAN fUpdateCurRoamProfile; //whether pMac->roam.pCurRoamProfile needs to be updated
370 //this is for CSR internal used only. And it should not be assigned when creating the command
371 //This causes the roam command not to do anything.
372 tANI_BOOLEAN fReassocToSelfNoCapChange;
373
374 tANI_BOOLEAN fStopWds;
375 tSirMacAddr peerMac;
376 tSirMacReasonCodes reason;
377}tRoamCmd;
378
379typedef struct tagSetKeyCmd
380{
381 tANI_U32 roamId;
382 eCsrEncryptionType encType;
383 eCsrAuthType authType;
384 tAniKeyDirection keyDirection; //Tx, Rx or Tx-and-Rx
385 tSirMacAddr peerMac; //Peer's MAC address. ALL 1's for group key
386 tANI_U8 paeRole; //0 for supplicant
387 tANI_U8 keyId; // Kye index
388 tANI_U8 keyLength; //Number of bytes containing the key in pKey
389 tANI_U8 Key[CSR_MAX_KEY_LEN];
390 tANI_U8 keyRsc[CSR_MAX_RSC_LEN];
391} tSetKeyCmd;
392
393typedef struct tahRemoveKeyCmd
394{
395 tANI_U32 roamId;
396 eCsrEncryptionType encType;
397 eCsrAuthType authType;
398 tSirMacAddr peerMac; //Peer's MAC address. ALL 1's for group key
399 tANI_U8 keyId; //key index
400} tRemoveKeyCmd;
401
402typedef struct tagWmStatusChangeCmd
403{
404 eCsrRoamWmStatusChangeTypes Type;
405 union
406 {
407 tSirSmeDeauthInd DeauthIndMsg;
408 tSirSmeDisassocInd DisassocIndMsg;
409 }u;
410
411}tWmStatusChangeCmd;
412
413typedef struct tagAddStaForSessionCmd
414{
415 //Session self mac addr
416 tSirMacAddr selfMacAddr;
417}tAddStaForSessionCmd;
418
419typedef struct tagDelStaForSessionCmd
420{
421 //Session self mac addr
422 tSirMacAddr selfMacAddr;
423 csrRoamSessionCloseCallback callback;
424 void *pContext;
425}tDelStaForSessionCmd;
426
427//This structure represents one scan request
428typedef struct tagCsrCmd
429{
430 tListElem Link;
431 eCsrRoamCommands command;
432 tANI_U8 sessionId; // Session ID for this command
433 union
434 {
435 tScanCmd scanCmd;
436 tRoamCmd roamCmd;
437 tWmStatusChangeCmd wmStatusChangeCmd;
438 tSetKeyCmd setKeyCmd;
439 tRemoveKeyCmd removeKeyCmd;
440 tAddStaForSessionCmd addStaSessionCmd;
441 tDelStaForSessionCmd delStaSessionCmd;
442 }u;
443}tCsrCmd;
444
445#ifdef WLAN_FEATURE_VOWIFI_11R
446typedef struct tagCsr11rConfig
447{
448 tANI_BOOLEAN IsFTResourceReqSupported;
449} tCsr11rConfig;
450#endif
451
452#ifdef WLAN_FEATURE_NEIGHBOR_ROAMING
453typedef struct tagCsrNeighborRoamConfig
454{
455 tANI_U32 nNeighborScanTimerPeriod;
456 tANI_U8 nNeighborLookupRssiThreshold;
457 tANI_U8 nNeighborReassocRssiThreshold;
458 tANI_U16 nNeighborScanMinChanTime;
459 tANI_U16 nNeighborScanMaxChanTime;
460 sCsrChannel neighborScanChanList;
461 tANI_U8 nMaxNeighborRetries;
462 tANI_U16 nNeighborResultsRefreshPeriod;
463}tCsrNeighborRoamConfig;
464#endif
465
466typedef struct tagCsrConfig
467{
468 tANI_U32 agingCount;
469 tANI_U32 FragmentationThreshold;
470 tANI_U32 channelBondingMode24GHz;
471 tANI_U32 channelBondingMode5GHz;
472 tANI_U32 RTSThreshold;
473 eCsrPhyMode phyMode;
474 eCsrCfgDot11Mode uCfgDot11Mode;
475 eCsrBand eBand;
476 tANI_U32 HeartbeatThresh50;
477 tANI_U32 HeartbeatThresh24;
478 tANI_U32 bgScanInterval;
479 eCsrCBChoice cbChoice;
480 eCsrBand bandCapability; //indicate hw capability
481 eCsrRoamWmmUserModeType WMMSupportMode;
482 tANI_BOOLEAN Is11eSupportEnabled;
483 tANI_BOOLEAN Is11dSupportEnabled;
484 tANI_BOOLEAN Is11dSupportEnabledOriginal;
485 tANI_BOOLEAN Is11hSupportEnabled;
486 tANI_BOOLEAN shortSlotTime;
487 tANI_BOOLEAN ProprietaryRatesEnabled;
488 tANI_BOOLEAN fenableMCCMode;
489 tANI_U16 TxRate;
490 tANI_U8 AdHocChannel24;
491 tANI_U8 AdHocChannel5G;
492 tANI_U32 impsSleepTime; //in units of microseconds
493 tANI_U32 scanAgeTimeNCNPS; //scan result aging time threshold when Not-Connect-No-Power-Save, in seconds
494 tANI_U32 scanAgeTimeNCPS; //scan result aging time threshold when Not-Connect-Power-Save, in seconds
495 tANI_U32 scanAgeTimeCNPS; //scan result aging time threshold when Connect-No-Power-Save, in seconds,
496 tANI_U32 scanAgeTimeCPS; //scan result aging time threshold when Connect-Power-Savein seconds
497 tANI_U32 BssPreferValue[CSR_NUM_RSSI_CAT]; //each RSSI category has one value
498 int RSSICat[CSR_NUM_RSSI_CAT];
499 tANI_U8 bCatRssiOffset; //to set the RSSI difference for each category
500 tANI_U32 nRoamingTime; //In seconds, CSR will try this long before gives up, 0 means no roaming
501 //Whether to limit the channels to the ones set in Csr11dInfo. If true, the opertaional
502 //channels are limited to the default channel list. It is an "AND" operation between the
503 //default channels and the channels in the 802.11d IE.
504 tANI_BOOLEAN fEnforce11dChannels;
505 //Country Code Priority
506 //0 = 802.11D > Configured Country > NV
507 //1 = Configured Country > 802.11D > NV
508 tANI_BOOLEAN fSupplicantCountryCodeHasPriority;
509 //When true, AP with unknown country code won't be see.
510 //"Unknown country code" means either Ap doesn't have 11d IE or we cannot
511 //find a domain for the country code in its 11d IE.
512 tANI_BOOLEAN fEnforceCountryCodeMatch;
513 //When true, only APs in the default domain can be seen. If the Ap has "unknown country
514 //code", or the doamin of the country code doesn't match the default domain, the Ap is
515 //not acceptable.
516 tANI_BOOLEAN fEnforceDefaultDomain;
517
518 tANI_U16 vccRssiThreshold;
519 tANI_U32 vccUlMacLossThreshold;
520
521 tANI_U32 nPassiveMinChnTime; //in units of milliseconds
522 tANI_U32 nPassiveMaxChnTime; //in units of milliseconds
523 tANI_U32 nActiveMinChnTime; //in units of milliseconds
524 tANI_U32 nActiveMaxChnTime; //in units of milliseconds
525
526 tANI_BOOLEAN IsIdleScanEnabled;
527 //in dBm, the maximum TX power
528 //The actual TX power is the lesser of this value and 11d.
529 //If 11d is disable, the lesser of this and default setting.
530 tANI_U8 nTxPowerCap;
531 tANI_U32 statsReqPeriodicity; //stats request frequency from PE while in full power
532 tANI_U32 statsReqPeriodicityInPS;//stats request frequency from PE while in power save
533#ifdef WLAN_SOFTAP_FEATURE
534 tANI_U32 dtimPeriod;
535 tANI_BOOLEAN ssidHidden;
536#endif
537
538#ifdef WLAN_FEATURE_VOWIFI_11R
539 tCsr11rConfig csr11rConfig;
540#endif
541
542#ifdef FEATURE_WLAN_CCX
543 tANI_U8 isCcxIniFeatureEnabled;
544#endif
545
546#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX)
547 tANI_U8 isFastTransitionEnabled;
548#endif
549
550#ifdef WLAN_FEATURE_NEIGHBOR_ROAMING
551 tCsrNeighborRoamConfig neighborRoamConfig;
552#endif
553
554 /* Instead of Reassoc, send ADDTS/DELTS even when ACM is off for that AC
555 * This is mandated by WMM-AC certification */
556 tANI_BOOLEAN addTSWhenACMIsOff;
557
558 tANI_BOOLEAN fValidateList;
559 tANI_BOOLEAN concurrencyEnabled;
560
561 //To enable/disable scanning 2.4Ghz channels twice on a single scan request from HDD
562 tANI_BOOLEAN fScanTwice;
563
564}tCsrConfig;
565
566typedef struct tagCsrChannelPowerInfo
567{
568 tListElem link;
569 tANI_U8 firstChannel;
570 tANI_U8 numChannels;
571 tANI_U8 txPower;
572 tANI_U8 interChannelOffset;
573}tCsrChannelPowerInfo;
574
575typedef struct tagRoamJoinStatus
576{
577 tSirResultCodes statusCode;
578 //this is set to unspecified if statusCode indicates timeout. Or it is the failed reason from the other BSS(per 802.11 spec)
579 tANI_U32 reasonCode;
580}tCsrRoamJoinStatus;
581
582typedef struct tagCsrOsChannelMask
583{
584 tANI_U8 numChannels;
585 tANI_BOOLEAN scanEnabled[WNI_CFG_VALID_CHANNEL_LIST_LEN];
586 tANI_U8 channelList[WNI_CFG_VALID_CHANNEL_LIST_LEN];
587}tCsrOsChannelMask;
588
589
590typedef struct tagCsrScanStruct
591{
592 tScanProfile scanProfile;
593 tANI_U32 nextScanID;
594 tDblLinkList scanResultList;
595 tDblLinkList tempScanResults;
596 tANI_BOOLEAN fScanEnable;
597 tANI_BOOLEAN fFullScanIssued;
598 tPalTimerHandle hTimerGetResult;
599#ifdef WLAN_AP_STA_CONCURRENCY
600 tPalTimerHandle hTimerStaApConcTimer;
601#endif
602 tPalTimerHandle hTimerIdleScan;
603 tPalTimerHandle hTimerResultAging;
604 tPalTimerHandle hTimerBgScan;
605 //changes on every scan, it is used as a flag for whether 11d info is found on every scan
606 tANI_U8 channelOf11dInfo;
607 //changes on every scan, a flag to tell whether conflict 11d info found on each BSS
608 tANI_BOOLEAN fAmbiguous11dInfoFound;
609 //Tush: changes on every scan, a flag to tell whether the applied 11d info present in one of the scan results
610 tANI_BOOLEAN fCurrent11dInfoMatch;
611 tANI_BOOLEAN f11dInfoReset; //to indicate whether the 11d info in CFG is reset to default
612 tSirScanType curScanType;
613 tCsrChannel baseChannels; //This are all the supported channels AND(&) to the current eBand
614 tCsrChannel channels11d;
615 tChannelListWithPower defaultPowerTable[WNI_CFG_VALID_CHANNEL_LIST_LEN]; //From NV
616 tChannelListWithPower defaultPowerTable40MHz[WNI_CFG_VALID_CHANNEL_LIST_LEN]; //From NV
617 tANI_U32 numChannelsDefault; //total channels of NV
618 tCsrChannel base20MHzChannels; //The channel base to work on
619 tCsrChannel base40MHzChannels; //center channels for 40MHz channels
620 tDblLinkList channelPowerInfoList24;
621 tDblLinkList channelPowerInfoList5G;
622 tANI_U32 nLastAgeTimeOut;
623 tANI_U32 nAgingCountDown;
624 tANI_U8 countryCodeDefault[WNI_CFG_COUNTRY_CODE_LEN+1]; //The country code from NV
625 tANI_U8 countryCodeCurrent[WNI_CFG_COUNTRY_CODE_LEN+1];
626 tANI_U8 countryCode11d[WNI_CFG_COUNTRY_CODE_LEN+1];
627 v_REGDOMAIN_t domainIdDefault; //default regulatory domain
628 v_REGDOMAIN_t domainIdCurrent; //current regulatory domain
629 tANI_BOOLEAN f11dInfoApplied;
630 tANI_BOOLEAN fCancelIdleScan;
631#ifdef FEATURE_WLAN_WAPI
632// tANI_U16 NumBkidCandidate;
633// tBkidCandidateInfo BkidCandidateInfo[CSR_MAX_BKID_ALLOWED]; /* Move this as part of SessionEntry */
634#endif /* FEATURE_WLAN_WAPI */
635 tANI_U8 numBGScanChannel; //number of valid channels in the bgScanChannelList
636 tANI_U8 bgScanChannelList[WNI_CFG_BG_SCAN_CHANNEL_LIST_LEN];
637 //the ChannelInfo member is not used in this structure.
638 //numBGScanChannel and bgScanChannelList are used for the BG scan channel info
639 tCsrBGScanRequest bgScanParams;
640 tANI_BOOLEAN fRestartIdleScan;
641 tANI_U32 nIdleScanTimeGap; //the time since last trying to trigger idle scan
642 tCsrOsChannelMask osScanChannelMask;//keep a track of channels to be scnned while in traffic condition
643 tANI_U16 nBssLimit; //the maximum number of BSS in scan cache
644 /*channelPowerInfoList24 has been seen corrupted. Set this flag to true trying to
645 * detect when it happens. Adding this into code because we can't reproduce it easily.
646 * We don't know when it happens. */
647 tANI_BOOLEAN fValidateList;
648 /*Customer wants to start with an active scan based on the default country code.
649 * This optimization will minimize the driver load to association time.
650 * Based on this flag we will bypass the initial passive scan needed for 11d
651 * to determine the country code & domain */
652 tANI_BOOLEAN fEnableBypass11d;
653
654 /*Customer wants to optimize the scan time. Avoiding scans(passive) on DFS
655 * channels while swipping through both bands can save some time
656 * (apprx 1.3 sec) */
657 tANI_BOOLEAN fEnableDFSChnlScan;
658
659 tANI_BOOLEAN fDropScanCmd; //true means we don't accept scan commands
660
661#ifdef WLAN_AP_STA_CONCURRENCY
662 tDblLinkList scanCmdPendingList;
663#endif
664}tCsrScanStruct;
665
666
667//Save the connected information. This structure + connectedProfile
668//should contain all information about the connection
669typedef struct tagRoamCsrConnectedInfo
670{
671 tANI_U32 nBeaconLength; //the length, in bytes, of the beacon frame, can be 0
672 tANI_U32 nAssocReqLength; //the length, in bytes, of the assoc req frame, can be 0
673 tANI_U32 nAssocRspLength; //The length, in bytes, of the assoc rsp frame, can be 0
674#ifdef WLAN_FEATURE_VOWIFI_11R
675 tANI_U32 nRICRspLength; //Length of the parsed RIC response IEs received in reassoc response
676#endif
677#ifdef FEATURE_WLAN_CCX
678 tANI_U32 nTspecIeLength;
679#endif
680 tANI_U8 *pbFrames; //Point to a buffer contain the beacon, assoc req, assoc rsp frame, in that order
681 //user needs to use nBeaconLength, nAssocReqLength, nAssocRspLength to desice where
682 //each frame starts and ends.
683 tANI_U8 staId;
684}tCsrRoamConnectedInfo;
685
686
687typedef struct tagCsrLinkQualityIndInfo
688{
689 csrRoamLinkQualityIndCallback callback;
690 void *context;
691}tCsrLinkQualityIndInfo;
692
693typedef struct tagCsrPeStatsReqInfo
694{
695 tListElem link; /* list links */
696 tANI_U32 statsMask;
697 tANI_U32 periodicity;
698 tANI_BOOLEAN rspPending;
699 vos_timer_t hPeStatsTimer;
700 tANI_BOOLEAN timerRunning;
701 tANI_U8 staId;
702 tANI_U8 numClient;
703 tpAniSirGlobal pMac;
704 /* To remember if the peStats timer is stopped successfully or not */
705 tANI_BOOLEAN timerStopFailed;
706
707}tCsrPeStatsReqInfo;
708
709typedef struct tagCsrStatsClientReqInfo
710{
711 tListElem link; /* list links */
712 eCsrStatsRequesterType requesterId;
713 tCsrStatsCallback callback;
714 tANI_U32 periodicity;
715 void *pContext;
716 tANI_U32 statsMask;
717 tCsrPeStatsReqInfo *pPeStaEntry;
718 tANI_U8 staId;
719 vos_timer_t timer;
720 tANI_BOOLEAN timerExpired;
721 tpAniSirGlobal pMac; // TODO: Confirm this change BTAMP
722}tCsrStatsClientReqInfo;
723
724typedef struct tagCsrTlStatsReqInfo
725{
726 tANI_U32 periodicity;
727 tANI_BOOLEAN timerRunning;
728 tPalTimerHandle hTlStatsTimer;
729 tANI_U8 numClient;
730}tCsrTlStatsReqInfo;
731
732typedef struct tagCsrRoamSession
733{
734 tANI_U8 sessionId; // Session ID
735 tANI_BOOLEAN sessionActive; // TRUE if it is used
736 tCsrBssid selfMacAddr; // For BT-AMP station, this serve as BSSID for self-BSS.
737 csrRoamCompleteCallback callback;
738 void *pContext;
739 eCsrConnectState connectState;
740 tCsrRoamConnectedProfile connectedProfile;
741 tCsrRoamConnectedInfo connectedInfo;
742 tCsrRoamProfile *pCurRoamProfile;
743 tSirBssDescription *pConnectBssDesc;
744 tANI_U16 NumPmkidCache;
745 tPmkidCacheInfo PmkidCacheInfo[CSR_MAX_PMKID_ALLOWED];
746 tANI_U8 cJoinAttemps;
747 //This may or may not have the up-to-date valid channel list
748 //It is used to get WNI_CFG_VALID_CHANNEL_LIST and not allocate memory all the time
749 tSirMacChanNum validChannelList[WNI_CFG_VALID_CHANNEL_LIST_LEN];
750 tANI_S32 sPendingCommands; //0 means CSR is ok to low power
751#ifdef FEATURE_WLAN_WAPI
752 tANI_U16 NumBkidCache;
753 tBkidCacheInfo BkidCacheInfo[CSR_MAX_BKID_ALLOWED];
754#endif /* FEATURE_WLAN_WAPI */
755 tANI_BOOLEAN fRoaming; //indicate whether CSR is roaming (either via lostlink or dynamic roaming)
756 //to remember some parameters needed for START_BSS.
757 //All member must be set every time we try to join or start an IBSS or BT-AMP
758 tCsrRoamStartBssParams bssParams;
759 tANI_U32 nWpaRsnReqIeLength; //the byte count of pWpaRsnIE;
760 tANI_U8 *pWpaRsnReqIE; //this contain the WPA/RSN IE in assoc request or the one sent in beacon (IBSS)
761 tANI_U32 nWpaRsnRspIeLength; //the byte count for pWpaRsnRspIE
762 tANI_U8 *pWpaRsnRspIE; //this contain the WPA/RSN IE in beacon/probe rsp
763#ifdef FEATURE_WLAN_WAPI
764 tANI_U32 nWapiReqIeLength; //the byte count of pWapiReqIE;
765 tANI_U8 *pWapiReqIE; //this contain the WAPI IE in assoc request or the one sent in beacon (IBSS)
766 tANI_U32 nWapiRspIeLength; //the byte count for pWapiRspIE
767 tANI_U8 *pWapiRspIE; //this contain the WAPI IE in beacon/probe rsp
768#endif /* FEATURE_WLAN_WAPI */
769 tANI_U32 nAddIEScanLength; //the byte count of pAddIeScanIE;
770 tANI_U8 *pAddIEScan; //this contains the additional IE in (unicast) probe request at the time of join
771 tANI_U32 nAddIEAssocLength; //the byte count for pAddIeAssocIE
772 tANI_U8 *pAddIEAssoc; //this contains the additional IE in (re) assoc request
773
774 tANI_TIMESTAMP roamingStartTime; //in units of 10ms
775 tCsrTimerInfo roamingTimerInfo;
776 eCsrRoamingReason roamingReason;
777 tANI_BOOLEAN fCancelRoaming;
778 tPalTimerHandle hTimerRoaming;
779 tPalTimerHandle hTimerIbssJoining;
780 tCsrTimerInfo ibssJoinTimerInfo;
781 tANI_BOOLEAN ibss_join_pending;
782 eCsrRoamResult roamResult; //the roamResult that is used when the roaming timer fires
783 tCsrRoamJoinStatus joinFailStatusCode; //This is the reason code for join(assoc) failure
784 //The status code returned from PE for deauth or disassoc (in case of lostlink), or our own dynamic roaming
785 tANI_U32 roamingStatusCode;
786 tANI_U16 NumPmkidCandidate;
787 tPmkidCandidateInfo PmkidCandidateInfo[CSR_MAX_PMKID_ALLOWED];
788 #ifdef FEATURE_WLAN_WAPI
789 tANI_U16 NumBkidCandidate;
790 tBkidCandidateInfo BkidCandidateInfo[CSR_MAX_BKID_ALLOWED];
791#endif
792 tANI_BOOLEAN fWMMConnection;
793#ifdef FEATURE_WLAN_BTAMP_UT_RF
794 //To retry a join later when it fails if so desired
795 tPalTimerHandle hTimerJoinRetry;
796 tCsrTimerInfo joinRetryTimerInfo;
797 tANI_U32 maxRetryCount;
798#endif
799#ifdef FEATURE_WLAN_CCX
800 tCsrCcxCckmInfo ccxCckmInfo;
801 tANI_BOOLEAN isPrevApInfoValid;
802 tSirMacSSid prevApSSID;
803 tCsrBssid prevApBssid;
804 tANI_U8 prevOpChannel;
805 tANI_U16 clientDissSecs;
806 tANI_U32 roamTS1;
807#endif
808 tANI_U8 bRefAssocStartCnt; //Tracking assoc start indication
809} tCsrRoamSession;
810
811typedef struct tagCsrRoamStruct
812{
813 tANI_U32 nextRoamId;
814 tDblLinkList roamCmdPendingList;
815 tDblLinkList channelList5G;
816 tDblLinkList channelList24;
817 tCsrConfig configParam;
818 tANI_U32 numChannelsEeprom; //total channels of eeprom
819 tCsrChannel base20MHzChannels; //The channel base to work on
820 tCsrChannel base40MHzChannels; //center channels for 40MHz channels
821 eCsrRoamState curState[CSR_ROAM_SESSION_MAX];
822 eCsrRoamSubState curSubState[CSR_ROAM_SESSION_MAX];
823 //This may or may not have the up-to-date valid channel list
824 //It is used to get WNI_CFG_VALID_CHANNEL_LIST and not allocate memory all the time
825 tSirMacChanNum validChannelList[WNI_CFG_VALID_CHANNEL_LIST_LEN];
826 tANI_U32 numValidChannels; //total number of channels in CFG
827
828 tANI_S32 sPendingCommands;
829 tChannelListWithPower *powerTableFromEeprom;
830 tChannelListWithPower *powerTableFromEeprom40MHz;
831 tPalTimerHandle hTimerWaitForKey; //To support timeout for WaitForKey state
832 tCsrSummaryStatsInfo summaryStatsInfo;
833 tCsrGlobalClassAStatsInfo classAStatsInfo;
834 tCsrGlobalClassBStatsInfo classBStatsInfo;
835 tCsrGlobalClassCStatsInfo classCStatsInfo;
836 tCsrGlobalClassDStatsInfo classDStatsInfo;
837 tCsrPerStaStatsInfo perStaStatsInfo[CSR_MAX_STA];
838 tDblLinkList statsClientReqList;
839 tDblLinkList peStatsReqList;
840 tCsrTlStatsReqInfo tlStatsReqInfo;
841 eCsrRoamLinkQualityInd vccLinkQuality;
842 tCsrLinkQualityIndInfo linkQualityIndInfo;
843 v_CONTEXT_t gVosContext; //used for interaction with TL
844 //To specify whether an association or a IBSS is WMM enabled
845 //This parameter is only valid during a join or start BSS command is being executed
846 //tANI_BOOLEAN fWMMConnection; /* Moving it to be part of roamsession */
847 v_U8_t ucACWeights[WLANTL_MAX_AC];
848 /* TODO : Upto here */
849 tCsrTimerInfo WaitForKeyTimerInfo;
850 tCsrRoamSession *roamSession;
851 tANI_U32 transactionId; // Current transaction ID for internal use.
852#ifdef WLAN_FEATURE_NEIGHBOR_ROAMING
853 tCsrNeighborRoamControlInfo neighborRoamInfo;
854#endif
855#ifdef FEATURE_WLAN_CCX
856 tANI_U8 isCcxIniFeatureEnabled;
857#endif
858}tCsrRoamStruct;
859
860
861#define GET_NEXT_ROAM_ID(pRoamStruct) (((pRoamStruct)->nextRoamId + 1 == 0) ? 1 : (pRoamStruct)->nextRoamId)
862#define CSR_IS_ROAM_STATE(pMac, state, sessionId) ( (state) == (pMac)->roam.curState[sessionId] )
863
864#define CSR_IS_ROAM_STOP(pMac, sessionId) CSR_IS_ROAM_STATE( (pMac), eCSR_ROAMING_STATE_STOP, sessionId )
865#define CSR_IS_ROAM_INIT(pMac, sessionId) CSR_IS_ROAM_STATE( (pMac), eCSR_ROAMING_STATE_INIT, sessionId )
866#define CSR_IS_ROAM_SCANNING(pMac, sessionId) CSR_IS_ROAM_STATE( pMac, eCSR_ROAMING_STATE_SCANNING, sessionId )
867#define CSR_IS_ROAM_JOINING(pMac, sessionId) CSR_IS_ROAM_STATE( pMac, eCSR_ROAMING_STATE_JOINING, sessionId )
868#define CSR_IS_ROAM_IDLE(pMac, sessionId) CSR_IS_ROAM_STATE( pMac, eCSR_ROAMING_STATE_IDLE, sessionId )
869#define CSR_IS_ROAM_JOINED(pMac, sessionId) CSR_IS_ROAM_STATE( pMac, eCSR_ROAMING_STATE_JOINED, sessionId )
870
871#define CSR_IS_ROAM_SUBSTATE(pMac, subState, sessionId) ((subState) == (pMac)->roam.curSubState[sessionId])
872#define CSR_IS_ROAM_SUBSTATE_JOIN_REQ(pMac, sessionId) CSR_IS_ROAM_SUBSTATE((pMac), eCSR_ROAM_SUBSTATE_JOIN_REQ, sessionId)
873#define CSR_IS_ROAM_SUBSTATE_AUTH_REQ(pMac, sessionId) CSR_IS_ROAM_SUBSTATE((pMac), eCSR_ROAM_SUBSTATE_AUTH_REQ, sessionId)
874#define CSR_IS_ROAM_SUBSTATE_REASSOC_REQ(pMac, sessionId) CSR_IS_ROAM_SUBSTATE((pMac), eCSR_ROAM_SUBSTATE_REASSOC_REQ, sessionId)
875#define CSR_IS_ROAM_SUBSTATE_DISASSOC_REQ(pMac, sessionId) CSR_IS_ROAM_SUBSTATE((pMac), eCSR_ROAM_SUBSTATE_DISASSOC_REQ, sessionId)
876#define CSR_IS_ROAM_SUBSTATE_DISASSOC_NO_JOIN(pMac, sessionId) CSR_IS_ROAM_SUBSTATE((pMac), eCSR_ROAM_SUBSTATE_DISASSOC_NOTHING_TO_JOIN, sessionId)
877#define CSR_IS_ROAM_SUBSTATE_REASSOC_FAIL(pMac, sessionId) CSR_IS_ROAM_SUBSTATE((pMac), eCSR_ROAM_SUBSTATE_DISASSOC_REASSOC_FAILURE, sessionId)
878#define CSR_IS_ROAM_SUBSTATE_DISASSOC_FORCED(pMac, sessionId) CSR_IS_ROAM_SUBSTATE((pMac), eCSR_ROAM_SUBSTATE_DISASSOC_FORCED, sessionId)
879#define CSR_IS_ROAM_SUBSTATE_DEAUTH_REQ(pMac, sessionId) CSR_IS_ROAM_SUBSTATE((pMac), eCSR_ROAM_SUBSTATE_DEAUTH_REQ, sessionId)
880#define CSR_IS_ROAM_SUBSTATE_START_BSS_REQ(pMac, sessionId) CSR_IS_ROAM_SUBSTATE((pMac), eCSR_ROAM_SUBSTATE_START_BSS_REQ, sessionId)
881#define CSR_IS_ROAM_SUBSTATE_STOP_BSS_REQ(pMac, sessionId) CSR_IS_ROAM_SUBSTATE((pMac), eCSR_ROAM_SUBSTATE_STOP_BSS_REQ, sessionId)
882#define CSR_IS_ROAM_SUBSTATE_DISCONNECT_CONTINUE(pMac, sessionId) CSR_IS_ROAM_SUBSTATE((pMac), eCSR_ROAM_SUBSTATE_DISCONNECT_CONTINUE_ROAMING, sessionId)
883#define CSR_IS_ROAM_SUBSTATE_CONFIG(pMac, sessionId) CSR_IS_ROAM_SUBSTATE((pMac), eCSR_ROAM_SUBSTATE_CONFIG, sessionId)
884#define CSR_IS_ROAM_SUBSTATE_WAITFORKEY(pMac, sessionId) CSR_IS_ROAM_SUBSTATE((pMac), eCSR_ROAM_SUBSTATE_WAIT_FOR_KEY, sessionId)
885#define CSR_IS_ROAM_SUBSTATE_DISASSOC_HO(pMac, sessionId) CSR_IS_ROAM_SUBSTATE((pMac), eCSR_ROAM_SUBSTATE_DISASSOC_HANDOFF, sessionId)
886#define CSR_IS_ROAM_SUBSTATE_HO_NT(pMac, sessionId) CSR_IS_ROAM_SUBSTATE((pMac), eCSR_ROAM_SUBSTATE_JOINED_NO_TRAFFIC, sessionId)
887#define CSR_IS_ROAM_SUBSTATE_HO_NRT(pMac, sessionId) CSR_IS_ROAM_SUBSTATE((pMac), eCSR_ROAM_SUBSTATE_JOINED_NON_REALTIME_TRAFFIC, sessionId)
888#define CSR_IS_ROAM_SUBSTATE_HO_RT(pMac, sessionId) CSR_IS_ROAM_SUBSTATE((pMac), eCSR_ROAM_SUBSTATE_JOINED_REALTIME_TRAFFIC, sessionId)
889
890#define CSR_IS_PHY_MODE_B_ONLY(pMac) \
891 ((eCSR_DOT11_MODE_11b == (pMac)->roam.configParam.phyMode) ||\
892 (eCSR_DOT11_MODE_11b_ONLY == (pMac)->roam.configParam.phyMode))
893
894#define CSR_IS_PHY_MODE_G_ONLY(pMac) \
895 (eCSR_DOT11_MODE_11g == (pMac)->roam.configParam.phyMode || eCSR_DOT11_MODE_11g_ONLY == (pMac)->roam.configParam.phyMode)
896
897#define CSR_IS_PHY_MODE_A_ONLY(pMac) \
898 ((eCSR_DOT11_MODE_11a == (pMac)->roam.configParam.phyMode) ||\
899 (eCSR_DOT11_MODE_11a_ONLY == (pMac)->roam.configParam.phyMode))
900
901#define CSR_IS_PHY_MODE_DUAL_BAND(phyMode) \
902 ((eCSR_DOT11_MODE_abg & (phyMode)) || (eCSR_DOT11_MODE_11n & (phyMode)) || \
903 (eCSR_DOT11_MODE_TAURUS & (phyMode)) || \
904 (eCSR_DOT11_MODE_AUTO & (phyMode)))
905
906// this function returns TRUE if the NIC is operating exclusively in the 2.4 GHz band, meaning
907// it is NOT operating in the 5.0 GHz band.
908#define CSR_IS_24_BAND_ONLY(pMac) \
909 (eCSR_BAND_24 == (pMac)->roam.configParam.eBand)
910
911#define CSR_IS_5G_BAND_ONLY(pMac) \
912 (eCSR_BAND_5G == (pMac)->roam.configParam.eBand)
913
914#define CSR_IS_RADIO_DUAL_BAND(pMac) \
915 (eCSR_BAND_ALL == (pMac)->roam.configParam.bandCapability)
916
917#define CSR_IS_RADIO_BG_ONLY(pMac) \
918 (eCSR_BAND_24 == (pMac)->roam.configParam.bandCapability)
919
920// this function returns TRUE if the NIC is operating exclusively in the 5.0 GHz band, meaning
921// it is NOT operating in the 2.4 GHz band
922#define CSR_IS_RADIO_A_ONLY(pMac) \
923 (eCSR_BAND_5G == (pMac)->roam.configParam.bandCapability)
924
925// this function returns TRUE if the NIC is operating in both bands.
926#define CSR_IS_OPEARTING_DUAL_BAND(pMac) \
927 ((eCSR_BAND_ALL == (pMac)->roam.configParam.bandCapability) && (eCSR_BAND_ALL == (pMac)->roam.configParam.eBand))
928
929// this function returns TRUE if the NIC can operate in the 5.0 GHz band (could operate in the
930// 2.4 GHz band also).
931#define CSR_IS_OPERATING_A_BAND(pMac) \
932 (CSR_IS_OPEARTING_DUAL_BAND((pMac)) || CSR_IS_RADIO_A_ONLY((pMac)) || CSR_IS_5G_BAND_ONLY((pMac)))
933
934// this function returns TRUE if the NIC can operate in the 2.4 GHz band (could operate in the
935// 5.0 GHz band also).
936#define CSR_IS_OPERATING_BG_BAND(pMac) \
937 (CSR_IS_OPEARTING_DUAL_BAND((pMac)) || CSR_IS_RADIO_BG_ONLY((pMac)) || CSR_IS_24_BAND_ONLY((pMac)))
938
939#define CSR_IS_CHANNEL_5GHZ(chnNum) \
940 ((chnNum) > CSR_MAX_24GHz_CHANNEL_NUMBER)
941
942#define CSR_IS_CHANNEL_24GHZ(chnNum) \
943 (((chnNum) > 0) && ((chnNum) <= CSR_MAX_24GHz_CHANNEL_NUMBER))
944
945#define CSR_IS_SAME_BAND_CHANNELS(ch1, ch2) (CSR_IS_CHANNEL_5GHZ(ch1) == CSR_IS_CHANNEL_5GHZ(ch2))
946
947
948#define CSR_IS_11D_INFO_FOUND(pMac) \
949 (0 != (pMac)->scan.channelOf11dInfo)
950// DEAUTHIND
951#define CSR_IS_ROAMING(pSession) ((CSR_IS_LOSTLINK_ROAMING((pSession)->roamingReason)) || \
952 (eCsrDynamicRoaming == (pSession)->roamingReason) || \
953 (eCsrReassocRoaming == (pSession)->roamingReason))
954
955
956#define CSR_IS_SET_KEY_COMMAND( pCommand ) ( eSmeCommandSetKey == (pCommand)->command )
957
958#define CSR_IS_ADDTS_WHEN_ACMOFF_SUPPORTED(pMac) (pMac->roam.configParam.addTSWhenACMIsOff)
959// DEAUTHIND
960#define CSR_IS_LOSTLINK_ROAMING(reason) ((eCsrLostlinkRoamingDisassoc == (reason)) || (eCsrLostlinkRoamingDeauth == (reason)))
961
962//Stop CSR from asking for IMPS, This function doesn't disable IMPS from CSR
963void csrScanSuspendIMPS( tpAniSirGlobal pMac );
964//Start CSR from asking for IMPS. This function doesn't trigger CSR to request entering IMPS
965//because IMPS maybe disabled.
966void csrScanResumeIMPS( tpAniSirGlobal pMac );
967
968eHalStatus csrInitGetChannels(tpAniSirGlobal pMac);
969
970eHalStatus csrSetModifyProfileFields(tpAniSirGlobal pMac, tANI_U32 sessionId,
971 tCsrRoamModifyProfileFields *pModifyProfileFields);
972/* ---------------------------------------------------------------------------
973 \fn csrGetModifyProfileFields
974 \brief HDD or SME - QOS calls this function to get the current values of
975 connected profile fields changing which can cause reassoc.
976 This function must be called after CFG is downloaded and STA is in connected
977 state.
978 \param pModifyProfileFields - pointer to the connected profile fields
979 changing which can cause reassoc
980
981 \return eHalStatus
982 -------------------------------------------------------------------------------*/
983eHalStatus csrGetModifyProfileFields(tpAniSirGlobal pMac, tANI_U32 sessionId,
984 tCsrRoamModifyProfileFields * pModifyProfileFields);
985void csrSetGlobalCfgs( tpAniSirGlobal pMac );
986void csrSetDefaultDot11Mode( tpAniSirGlobal pMac );
987void csrScanSetChannelMask(tpAniSirGlobal pMac, tCsrChannelInfo *pChannelInfo);
988tANI_BOOLEAN csrIsConnStateDisconnected(tpAniSirGlobal pMac, tANI_U32 sessionId);
989tANI_BOOLEAN csrIsConnStateConnectedIbss( tpAniSirGlobal pMac, tANI_U32 sessionId );
990tANI_BOOLEAN csrIsConnStateDisconnectedIbss( tpAniSirGlobal pMac, tANI_U32 sessionId );
991tANI_BOOLEAN csrIsConnStateConnectedInfra( tpAniSirGlobal pMac, tANI_U32 sessionId );
992tANI_BOOLEAN csrIsConnStateConnected( tpAniSirGlobal pMac, tANI_U32 sessionId );
993tANI_BOOLEAN csrIsConnStateInfra( tpAniSirGlobal pMac, tANI_U32 sessionId );
994tANI_BOOLEAN csrIsConnStateIbss( tpAniSirGlobal pMac, tANI_U32 sessionId );
995tANI_BOOLEAN csrIsConnStateWds( tpAniSirGlobal pMac, tANI_U32 sessionId );
996tANI_BOOLEAN csrIsConnStateConnectedWds( tpAniSirGlobal pMac, tANI_U32 sessionId );
997tANI_BOOLEAN csrIsConnStateDisconnectedWds( tpAniSirGlobal pMac, tANI_U32 sessionId );
998tANI_BOOLEAN csrIsAnySessionInConnectState( tpAniSirGlobal pMac );
999tANI_BOOLEAN csrIsAllSessionDisconnected( tpAniSirGlobal pMac );
1000tANI_BOOLEAN csrIsInfraConnected( tpAniSirGlobal pMac );
1001tANI_BOOLEAN csrIsConcurrentInfraConnected( tpAniSirGlobal pMac );
1002tANI_BOOLEAN csrIsIBSSStarted( tpAniSirGlobal pMac );
1003tANI_BOOLEAN csrIsBTAMPStarted( tpAniSirGlobal pMac );
1004tANI_BOOLEAN csrIsBTAMP( tpAniSirGlobal pMac, tANI_U32 sessionId );
1005eHalStatus csrIsBTAMPAllowed( tpAniSirGlobal pMac, tANI_U32 chnId );
1006tANI_BOOLEAN csrIsValidMcConcurrentSession(tpAniSirGlobal pMac, tANI_U32 sessionId);
1007#ifdef WLAN_SOFTAP_FEATURE
1008tANI_BOOLEAN csrIsConnStateConnectedInfraAp( tpAniSirGlobal pMac, tANI_U32 sessionId );
1009#endif
1010/*----------------------------------------------------------------------------
1011 \fn csrRoamRegisterLinkQualityIndCallback
1012
1013 \brief
1014 a CSR function to allow HDD to register a callback handler with CSR for
1015 link quality indications.
1016
1017 Only one callback may be registered at any time.
1018 In order to deregister the callback, a NULL cback may be provided.
1019
1020 Registration happens in the task context of the caller.
1021
1022 \param callback - Call back being registered
1023 \param pContext - user data
1024
1025 DEPENDENCIES: After CSR open
1026
1027 \return eHalStatus
1028-----------------------------------------------------------------------------*/
1029eHalStatus csrRoamRegisterLinkQualityIndCallback(tpAniSirGlobal pMac,
1030 csrRoamLinkQualityIndCallback callback,
1031 void *pContext);
1032/* ---------------------------------------------------------------------------
1033 \fn csrGetStatistics
1034 \brief csr function that client calls to register a callback to get
1035 different PHY level statistics from CSR.
1036
1037 \param requesterId - different client requesting for statistics, HDD, UMA/GAN etc
1038 \param statsMask - The different category/categories of stats requester is looking for
1039 \param callback - SME sends back the requested stats using the callback
1040 \param periodicity - If requester needs periodic update, 0 means it's an one
1041 time request
1042 \param cache - If requester is happy with cached stats
1043 \param staId - The station ID for which the stats is requested for
1044 \param pContext - user context to be passed back along with the callback
1045
1046 \return eHalStatus
1047 ---------------------------------------------------------------------------*/
1048eHalStatus csrGetStatistics(tpAniSirGlobal pMac, eCsrStatsRequesterType requesterId,
1049 tANI_U32 statsMask,
1050 tCsrStatsCallback callback,
1051 tANI_U32 periodicity, tANI_BOOLEAN cache,
1052 tANI_U8 staId, void *pContext);
1053
1054
1055eHalStatus csrGetRssi(tpAniSirGlobal pMac,tCsrRssiCallback callback,tANI_U8 staId,tCsrBssid bssId,void * pContext,void * pVosContext);
1056eHalStatus csrRoamRegisterCallback(tpAniSirGlobal pMac, csrRoamCompleteCallback callback, void *pContext);
1057/* ---------------------------------------------------------------------------
1058 \fn csrGetConfigParam
1059 \brief HDD calls this function to get the global settings currently maintained by CSR.
1060 \param pParam - caller allocated memory
1061 \return eHalStatus
1062 -------------------------------------------------------------------------------*/
1063eHalStatus csrGetConfigParam(tpAniSirGlobal pMac, tCsrConfigParam *pParam);
1064
1065/* ---------------------------------------------------------------------------
1066 \fn csrMsgProcessor
1067 \brief HDD calls this function to change some global settings.
1068 caller must set the all fields or call csrGetConfigParam to prefill the fields.
1069 \param pParam - caller allocated memory
1070 \return eHalStatus
1071 -------------------------------------------------------------------------------*/
1072eHalStatus csrChangeDefaultConfigParam(tpAniSirGlobal pMac, tCsrConfigParam *pParam);
1073
1074
1075/* ---------------------------------------------------------------------------
1076 \fn csrMsgProcessor
1077 \brief HDD calls this function for the messages that are handled by CSR.
1078 \param pMsgBuf - a pointer to a buffer that maps to various structures base on the message type.
1079 The beginning of the buffer can always map to tSirSmeRsp.
1080 \return eHalStatus
1081 -------------------------------------------------------------------------------*/
1082eHalStatus csrMsgProcessor( tpAniSirGlobal pMac, void *pMsgBuf );
1083
1084/* ---------------------------------------------------------------------------
1085 \fn csrOpen
1086 \brief This function must be called before any API call to CSR.
1087 \return eHalStatus
1088 -------------------------------------------------------------------------------*/
1089eHalStatus csrOpen(tpAniSirGlobal pMac);
1090/* ---------------------------------------------------------------------------
1091 \fn csrClose
1092 \brief To close down CSR module. There should not be any API call into CSR after calling this function.
1093 \return eHalStatus
1094 -------------------------------------------------------------------------------*/
1095eHalStatus csrClose(tpAniSirGlobal pMac);
1096/* ---------------------------------------------------------------------------
1097 \fn csrStart
1098 \brief To start CSR.
1099 \return eHalStatus
1100 -------------------------------------------------------------------------------*/
1101eHalStatus csrStart(tpAniSirGlobal pMac);
1102/* ---------------------------------------------------------------------------
1103 \fn csrStop
1104 \brief To stop CSR. CSR still keeps its current setting.
1105 \return eHalStatus
1106 -------------------------------------------------------------------------------*/
1107eHalStatus csrStop(tpAniSirGlobal pMac);
1108/* ---------------------------------------------------------------------------
1109 \fn csrReady
1110 \brief To let CSR is ready to operate
1111 \return eHalStatus
1112 -------------------------------------------------------------------------------*/
1113eHalStatus csrReady(tpAniSirGlobal pMac);
1114
1115#ifdef FEATURE_WLAN_WAPI
1116eHalStatus csrRoamGetBKIDCache(tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U32 *pNum,
1117 tBkidCacheInfo *pBkidCache);
1118
1119
1120eHalStatus csrScanGetBKIDCandidateList(tpAniSirGlobal pMac, tANI_U32 sessionId,
1121 tBkidCandidateInfo *pBkidList, tANI_U32 *pNumItems );
1122tANI_U32 csrRoamGetNumBKIDCache(tpAniSirGlobal pMac, tANI_U32 sessionId);
1123eHalStatus csrRoamSetBKIDCache( tpAniSirGlobal pMac, tANI_U32 sessionId, tBkidCacheInfo *pBKIDCache,
1124 tANI_U32 numItems );
1125/* ---------------------------------------------------------------------------
1126 \fn csrRoamGetWapiReqIE
1127 \brief return the WAPI IE CSR passes to PE to JOIN request or START_BSS request
1128 \param pLen - caller allocated memory that has the length of pBuf as input. Upon returned, *pLen has the
1129 needed or IE length in pBuf.
1130 \param pBuf - Caller allocated memory that contain the IE field, if any, upon return
1131 \return eHalStatus - when fail, it usually means the buffer allocated is not big enough
1132 -------------------------------------------------------------------------------*/
1133eHalStatus csrRoamGetWapiReqIE(tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U32 *pLen, tANI_U8 *pBuf);
1134
1135/* ---------------------------------------------------------------------------
1136 \fn csrRoamGetWapiRspIE
1137 \brief return the WAPI IE from the beacon or probe rsp if connected
1138 \param pLen - caller allocated memory that has the length of pBuf as input. Upon returned, *pLen has the
1139 needed or IE length in pBuf.
1140 \param pBuf - Caller allocated memory that contain the IE field, if any, upon return
1141 \return eHalStatus - when fail, it usually means the buffer allocated is not big enough
1142 -------------------------------------------------------------------------------*/
1143eHalStatus csrRoamGetWapiRspIE(tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U32 *pLen, tANI_U8 *pBuf);
1144tANI_U8 csrConstructWapiIe( tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfile *pProfile,
1145 tSirBssDescription *pSirBssDesc, tDot11fBeaconIEs *pIes, tCsrWapiIe *pWapiIe );
1146#endif /* FEATURE_WLAN_WAPI */
1147
1148#ifdef WLAN_SOFTAP_FEATURE
1149eHalStatus csrRoamUpdateAPWPSIE( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirAPWPSIEs *pAPWPSIES );
1150eHalStatus csrRoamUpdateWPARSNIEs( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirRSNie * pAPSirRSNie);
1151#endif
1152void csrSetCfgPrivacy( tpAniSirGlobal pMac, tCsrRoamProfile *pProfile, tANI_BOOLEAN fPrivacy );
1153tANI_S8 csrGetInfraSessionId( tpAniSirGlobal pMac );
1154tANI_U8 csrGetInfraOperationChannel( tpAniSirGlobal pMac, tANI_U8 sessionId);
1155tANI_U8 csrGetConcurrentOperationChannel( tpAniSirGlobal pMac );
1156
1157eHalStatus csrRoamCopyConnectProfile(tpAniSirGlobal pMac, tANI_U32 sessionId,
1158 tCsrRoamConnectedProfile *pProfile);
1159tANI_BOOLEAN csrIsSetKeyAllowed(tpAniSirGlobal pMac, tANI_U32 sessionId);
1160
1161void csrSetOppositeBandChannelInfo( tpAniSirGlobal pMac );
1162void csrConstructCurrentValidChannelList( tpAniSirGlobal pMac, tDblLinkList *pChannelSetList,
1163 tANI_U8 *pChannelList, tANI_U8 bSize, tANI_U8 *pNumChannels );
1164
1165#endif
1166
1167#ifdef WLAN_FEATURE_VOWIFI_11R
1168//Returns whether the current association is a 11r assoc or not
1169tANI_BOOLEAN csrRoamIs11rAssoc(tpAniSirGlobal pMac);
1170#endif
1171
1172#ifdef FEATURE_WLAN_CCX
1173//Returns whether the current association is a CCX assoc or not
1174tANI_BOOLEAN csrRoamIsCCXAssoc(tpAniSirGlobal pMac);
1175#endif
1176
1177void csrDisconnectAllActiveSessions(tpAniSirGlobal pMac);