Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v3.14 397 lines 10 kB view raw
1/* 2 * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. 3 * All rights reserved. 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 2 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License along 16 * with this program; if not, write to the Free Software Foundation, Inc., 17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * 20 * File: wmgr.h 21 * 22 * Purpose: 23 * 24 * Author: lyndon chen 25 * 26 * Date: Jan 2, 2003 27 * 28 * Functions: 29 * 30 * Revision History: 31 * 32 */ 33 34#ifndef __WMGR_H__ 35#define __WMGR_H__ 36 37#include "80211mgr.h" 38#include "80211hdr.h" 39#include "wcmd.h" 40#include "bssdb.h" 41#include "wpa2.h" 42#include "card.h" 43 44// Scan time 45#define PROBE_DELAY 100 // (us) 46#define SWITCH_CHANNEL_DELAY 200 // (us) 47#define WLAN_SCAN_MINITIME 25 // (ms) 48#define WLAN_SCAN_MAXTIME 100 // (ms) 49#define TRIVIAL_SYNC_DIFFERENCE 0 // (us) 50#define DEFAULT_IBSS_BI 100 // (ms) 51 52#define WCMD_ACTIVE_SCAN_TIME 20 //(ms) 53#define WCMD_PASSIVE_SCAN_TIME 100 //(ms) 54 55#define DEFAULT_MSDU_LIFETIME 512 // ms 56#define DEFAULT_MSDU_LIFETIME_RES_64us 8000 // 64us 57 58#define DEFAULT_MGN_LIFETIME 8 // ms 59#define DEFAULT_MGN_LIFETIME_RES_64us 125 // 64us 60 61#define MAKE_BEACON_RESERVED 10 //(us) 62 63#define TIM_MULTICAST_MASK 0x01 64#define TIM_BITMAPOFFSET_MASK 0xFE 65#define DEFAULT_DTIM_PERIOD 1 66 67#define AP_LONG_RETRY_LIMIT 4 68 69#define DEFAULT_IBSS_CHANNEL 6 //2.4G 70 71//mike define: make timer to expire after desired times 72#define timer_expire(timer, next_tick) mod_timer(&timer, RUN_AT(next_tick)) 73 74typedef void (*TimerFunction)(unsigned long); 75 76//+++ NDIS related 77 78typedef u8 NDIS_802_11_MAC_ADDRESS[ETH_ALEN]; 79typedef struct _NDIS_802_11_AI_REQFI 80{ 81 u16 Capabilities; 82 u16 ListenInterval; 83 NDIS_802_11_MAC_ADDRESS CurrentAPAddress; 84} NDIS_802_11_AI_REQFI, *PNDIS_802_11_AI_REQFI; 85 86typedef struct _NDIS_802_11_AI_RESFI 87{ 88 u16 Capabilities; 89 u16 StatusCode; 90 u16 AssociationId; 91} NDIS_802_11_AI_RESFI, *PNDIS_802_11_AI_RESFI; 92 93typedef struct _NDIS_802_11_ASSOCIATION_INFORMATION 94{ 95 u32 Length; 96 u16 AvailableRequestFixedIEs; 97 NDIS_802_11_AI_REQFI RequestFixedIEs; 98 u32 RequestIELength; 99 u32 OffsetRequestIEs; 100 u16 AvailableResponseFixedIEs; 101 NDIS_802_11_AI_RESFI ResponseFixedIEs; 102 u32 ResponseIELength; 103 u32 OffsetResponseIEs; 104} NDIS_802_11_ASSOCIATION_INFORMATION, *PNDIS_802_11_ASSOCIATION_INFORMATION; 105 106typedef struct tagSAssocInfo { 107 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo; 108 u8 abyIEs[WLAN_BEACON_FR_MAXLEN+WLAN_BEACON_FR_MAXLEN]; 109 /* store ReqIEs set by OID_802_11_ASSOCIATION_INFORMATION */ 110 u32 RequestIELength; 111 u8 abyReqIEs[WLAN_BEACON_FR_MAXLEN]; 112} SAssocInfo, *PSAssocInfo; 113 114typedef enum tagWMAC_AUTHENTICATION_MODE { 115 116 WMAC_AUTH_OPEN, 117 WMAC_AUTH_SHAREKEY, 118 WMAC_AUTH_AUTO, 119 WMAC_AUTH_WPA, 120 WMAC_AUTH_WPAPSK, 121 WMAC_AUTH_WPANONE, 122 WMAC_AUTH_WPA2, 123 WMAC_AUTH_WPA2PSK, 124 WMAC_AUTH_MAX // Not a real mode, defined as upper bound 125} WMAC_AUTHENTICATION_MODE, *PWMAC_AUTHENTICATION_MODE; 126 127// Pre-configured Mode (from XP) 128 129typedef enum tagWMAC_CONFIG_MODE { 130 WMAC_CONFIG_ESS_STA, 131 WMAC_CONFIG_IBSS_STA, 132 WMAC_CONFIG_AUTO, 133 WMAC_CONFIG_AP 134 135} WMAC_CONFIG_MODE, *PWMAC_CONFIG_MODE; 136 137typedef enum tagWMAC_SCAN_TYPE { 138 139 WMAC_SCAN_ACTIVE, 140 WMAC_SCAN_PASSIVE, 141 WMAC_SCAN_HYBRID 142 143} WMAC_SCAN_TYPE, *PWMAC_SCAN_TYPE; 144 145typedef enum tagWMAC_SCAN_STATE { 146 147 WMAC_NO_SCANNING, 148 WMAC_IS_SCANNING, 149 WMAC_IS_PROBEPENDING 150 151} WMAC_SCAN_STATE, *PWMAC_SCAN_STATE; 152 153// Notes: 154// Basic Service Set state explained as following: 155// WMAC_STATE_IDLE : no BSS is selected (Adhoc or Infra) 156// WMAC_STATE_STARTED : no BSS is selected, start own IBSS (Adhoc only) 157// WMAC_STATE_JOINTED : BSS is selected and synchronized (Adhoc or Infra) 158// WMAC_STATE_AUTHPENDING : Authentication pending (Infra) 159// WMAC_STATE_AUTH : Authenticated (Infra) 160// WMAC_STATE_ASSOCPENDING : Association pending (Infra) 161// WMAC_STATE_ASSOC : Associated (Infra) 162 163typedef enum tagWMAC_BSS_STATE { 164 165 WMAC_STATE_IDLE, 166 WMAC_STATE_STARTED, 167 WMAC_STATE_JOINTED, 168 WMAC_STATE_AUTHPENDING, 169 WMAC_STATE_AUTH, 170 WMAC_STATE_ASSOCPENDING, 171 WMAC_STATE_ASSOC 172 173} WMAC_BSS_STATE, *PWMAC_BSS_STATE; 174 175// WMAC selected running mode 176typedef enum tagWMAC_CURRENT_MODE { 177 178 WMAC_MODE_STANDBY, 179 WMAC_MODE_ESS_STA, 180 WMAC_MODE_IBSS_STA, 181 WMAC_MODE_ESS_AP 182 183} WMAC_CURRENT_MODE, *PWMAC_CURRENT_MODE; 184 185typedef enum tagWMAC_POWER_MODE { 186 187 WMAC_POWER_CAM, 188 WMAC_POWER_FAST, 189 WMAC_POWER_MAX 190 191} WMAC_POWER_MODE, *PWMAC_POWER_MODE; 192 193/* Tx Management Packet descriptor */ 194struct vnt_tx_mgmt { 195 PUWLAN_80211HDR p80211Header; 196 u32 cbMPDULen; 197 u32 cbPayloadLen; 198}; 199 200/* Rx Management Packet descriptor */ 201struct vnt_rx_mgmt { 202 PUWLAN_80211HDR p80211Header; 203 u64 qwLocalTSF; 204 u32 cbMPDULen; 205 u32 cbPayloadLen; 206 u32 uRSSI; 207 u8 bySQ; 208 u8 byRxRate; 209 u8 byRxChannel; 210}; 211 212struct vnt_manager { 213 void *pAdapter; 214 215 /* MAC address */ 216 u8 abyMACAddr[WLAN_ADDR_LEN]; 217 218 /* Configuration Mode */ 219 WMAC_CONFIG_MODE eConfigMode; /* MAC pre-configed mode */ 220 221 CARD_PHY_TYPE eCurrentPHYMode; 222 223 /* Operation state variables */ 224 WMAC_CURRENT_MODE eCurrMode; /* MAC current connection mode */ 225 WMAC_BSS_STATE eCurrState; /* MAC current BSS state */ 226 WMAC_BSS_STATE eLastState; /* MAC last BSS state */ 227 228 PKnownBSS pCurrBSS; 229 u8 byCSSGK; 230 u8 byCSSPK; 231 232 int bCurrBSSIDFilterOn; 233 234 /* Current state vars */ 235 u32 uCurrChannel; 236 u8 abyCurrSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; 237 u8 abyCurrExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; 238 u8 abyCurrSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; 239 u8 abyCurrBSSID[WLAN_BSSID_LEN]; 240 u16 wCurrCapInfo; 241 u16 wCurrAID; 242 u32 uRSSITrigger; 243 u16 wCurrATIMWindow; 244 u16 wCurrBeaconPeriod; 245 int bIsDS; 246 u8 byERPContext; 247 248 CMD_STATE eCommandState; 249 u32 uScanChannel; 250 251 /* Desire joinning BSS vars */ 252 u8 abyDesireSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; 253 u8 abyDesireBSSID[WLAN_BSSID_LEN]; 254 255 /*restore BSS info for Ad-Hoc mode */ 256 u8 abyAdHocSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; 257 258 /* Adhoc or AP configuration vars */ 259 u16 wIBSSBeaconPeriod; 260 u16 wIBSSATIMWindow; 261 u32 uIBSSChannel; 262 u8 abyIBSSSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; 263 u8 byAPBBType; 264 u8 abyWPAIE[MAX_WPA_IE_LEN]; 265 u16 wWPAIELen; 266 267 u32 uAssocCount; 268 int bMoreData; 269 270 /* Scan state vars */ 271 WMAC_SCAN_STATE eScanState; 272 WMAC_SCAN_TYPE eScanType; 273 u32 uScanStartCh; 274 u32 uScanEndCh; 275 u16 wScanSteps; 276 u32 uScanBSSType; 277 /* Desire scannig vars */ 278 u8 abyScanSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; 279 u8 abyScanBSSID[WLAN_BSSID_LEN]; 280 281 /* Privacy */ 282 WMAC_AUTHENTICATION_MODE eAuthenMode; 283 int bShareKeyAlgorithm; 284 u8 abyChallenge[WLAN_CHALLENGE_LEN]; 285 int bPrivacyInvoked; 286 287 /* Received beacon state vars */ 288 int bInTIM; 289 int bMulticastTIM; 290 u8 byDTIMCount; 291 u8 byDTIMPeriod; 292 293 /* Power saving state vars */ 294 WMAC_POWER_MODE ePSMode; 295 u16 wListenInterval; 296 u16 wCountToWakeUp; 297 int bInTIMWake; 298 u8 *pbyPSPacketPool; 299 u8 byPSPacketPool[sizeof(struct vnt_tx_mgmt) 300 + WLAN_NULLDATA_FR_MAXLEN]; 301 int bRxBeaconInTBTTWake; 302 u8 abyPSTxMap[MAX_NODE_NUM + 1]; 303 304 /* management command related */ 305 u32 uCmdBusy; 306 u32 uCmdHostAPBusy; 307 308 /* management packet pool */ 309 u8 *pbyMgmtPacketPool; 310 u8 byMgmtPacketPool[sizeof(struct vnt_tx_mgmt) 311 + WLAN_A3FR_MAXLEN]; 312 313 /* Temporarily Rx Mgmt Packet Descriptor */ 314 struct vnt_rx_mgmt sRxPacket; 315 316 /* link list of known bss's (scan results) */ 317 KnownBSS sBSSList[MAX_BSS_NUM]; 318 /* link list of same bss's */ 319 KnownBSS pSameBSS[6]; 320 int Cisco_cckm; 321 u8 Roam_dbm; 322 323 /* table list of known node */ 324 /* sNodeDBList[0] is reserved for AP under Infra mode */ 325 /* sNodeDBList[0] is reserved for Multicast under adhoc/AP mode */ 326 KnownNodeDB sNodeDBTable[MAX_NODE_NUM + 1]; 327 328 /* WPA2 PMKID Cache */ 329 SPMKIDCache gsPMKIDCache; 330 int bRoaming; 331 332 /* associate info */ 333 SAssocInfo sAssocInfo; 334 335 /* for 802.11h */ 336 int b11hEnable; 337 int bSwitchChannel; 338 u8 byNewChannel; 339 PWLAN_IE_MEASURE_REP pCurrMeasureEIDRep; 340 u32 uLengthOfRepEIDs; 341 u8 abyCurrentMSRReq[sizeof(struct vnt_tx_mgmt) 342 + WLAN_A3FR_MAXLEN]; 343 u8 abyCurrentMSRRep[sizeof(struct vnt_tx_mgmt) 344 + WLAN_A3FR_MAXLEN]; 345 u8 abyIECountry[WLAN_A3FR_MAXLEN]; 346 u8 abyIBSSDFSOwner[6]; 347 u8 byIBSSDFSRecovery; 348 349 struct sk_buff skb; 350 351}; 352 353void vMgrObjectInit(struct vnt_private *pDevice); 354 355void vMgrAssocBeginSta(struct vnt_private *pDevice, 356 struct vnt_manager *, PCMD_STATUS pStatus); 357 358void vMgrReAssocBeginSta(struct vnt_private *pDevice, 359 struct vnt_manager *, PCMD_STATUS pStatus); 360 361void vMgrDisassocBeginSta(struct vnt_private *pDevice, 362 struct vnt_manager *, u8 *abyDestAddress, u16 wReason, 363 PCMD_STATUS pStatus); 364 365void vMgrAuthenBeginSta(struct vnt_private *pDevice, 366 struct vnt_manager *, PCMD_STATUS pStatus); 367 368void vMgrCreateOwnIBSS(struct vnt_private *pDevice, 369 PCMD_STATUS pStatus); 370 371void vMgrJoinBSSBegin(struct vnt_private *pDevice, 372 PCMD_STATUS pStatus); 373 374void vMgrRxManagePacket(struct vnt_private *pDevice, 375 struct vnt_manager *, struct vnt_rx_mgmt *); 376 377/* 378void 379vMgrScanBegin( 380 void *hDeviceContext, 381 PCMD_STATUS pStatus 382 ); 383*/ 384 385void vMgrDeAuthenBeginSta(struct vnt_private *pDevice, 386 struct vnt_manager *, u8 *abyDestAddress, u16 wReason, 387 PCMD_STATUS pStatus); 388 389int bMgrPrepareBeaconToSend(struct vnt_private *pDevice, 390 struct vnt_manager *); 391 392int bAdd_PMKID_Candidate(struct vnt_private *pDevice, 393 u8 *pbyBSSID, PSRSNCapObject psRSNCapObj); 394 395void vFlush_PMKID_Candidate(struct vnt_private *pDevice); 396 397#endif /* __WMGR_H__ */