linux/drivers/staging/vt6655/wmgr.h
<<
>>
Prefs
   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 "ttype.h"
  38#include "80211mgr.h"
  39#include "80211hdr.h"
  40#include "wcmd.h"
  41#include "bssdb.h"
  42#include "wpa2.h"
  43#include "vntwifi.h"
  44#include "card.h"
  45
  46/*---------------------  Export Definitions -------------------------*/
  47
  48// Scan time
  49#define PROBE_DELAY                  100  // (us)
  50#define SWITCH_CHANNEL_DELAY         200 // (us)
  51#define WLAN_SCAN_MINITIME           25   // (ms)
  52#define WLAN_SCAN_MAXTIME            100  // (ms)
  53#define TRIVIAL_SYNC_DIFFERENCE      0    // (us)
  54#define DEFAULT_IBSS_BI              100  // (ms)
  55
  56#define WCMD_ACTIVE_SCAN_TIME   50 //(ms)
  57#define WCMD_PASSIVE_SCAN_TIME  100 //(ms)
  58
  59#define DEFAULT_MSDU_LIFETIME           512  // ms
  60#define DEFAULT_MSDU_LIFETIME_RES_64us  8000 // 64us
  61
  62#define DEFAULT_MGN_LIFETIME            8    // ms
  63#define DEFAULT_MGN_LIFETIME_RES_64us   125  // 64us
  64
  65#define MAKE_BEACON_RESERVED            10  //(us)
  66
  67#define TIM_MULTICAST_MASK           0x01
  68#define TIM_BITMAPOFFSET_MASK        0xFE
  69#define DEFAULT_DTIM_PERIOD             1
  70
  71#define AP_LONG_RETRY_LIMIT             4
  72
  73#define DEFAULT_IBSS_CHANNEL            6  //2.4G
  74
  75/*---------------------  Export Classes  ----------------------------*/
  76
  77/*---------------------  Export Variables  --------------------------*/
  78
  79/*---------------------  Export Types  ------------------------------*/
  80#define timer_expire(timer, next_tick)   mod_timer(&timer, RUN_AT(next_tick))
  81typedef void (*TimerFunction)(unsigned long);
  82
  83//+++ NDIS related
  84
  85typedef unsigned char NDIS_802_11_MAC_ADDRESS[6];
  86typedef struct _NDIS_802_11_AI_REQFI
  87{
  88        unsigned short Capabilities;
  89        unsigned short ListenInterval;
  90        NDIS_802_11_MAC_ADDRESS  CurrentAPAddress;
  91} NDIS_802_11_AI_REQFI, *PNDIS_802_11_AI_REQFI;
  92
  93typedef struct _NDIS_802_11_AI_RESFI
  94{
  95        unsigned short Capabilities;
  96        unsigned short StatusCode;
  97        unsigned short AssociationId;
  98} NDIS_802_11_AI_RESFI, *PNDIS_802_11_AI_RESFI;
  99
 100typedef struct _NDIS_802_11_ASSOCIATION_INFORMATION
 101{
 102        unsigned long Length;
 103        unsigned short          AvailableRequestFixedIEs;
 104        NDIS_802_11_AI_REQFI    RequestFixedIEs;
 105        unsigned long RequestIELength;
 106        unsigned long OffsetRequestIEs;
 107        unsigned short          AvailableResponseFixedIEs;
 108        NDIS_802_11_AI_RESFI    ResponseFixedIEs;
 109        unsigned long ResponseIELength;
 110        unsigned long OffsetResponseIEs;
 111} NDIS_802_11_ASSOCIATION_INFORMATION, *PNDIS_802_11_ASSOCIATION_INFORMATION;
 112
 113typedef struct tagSAssocInfo {
 114        NDIS_802_11_ASSOCIATION_INFORMATION     AssocInfo;
 115        unsigned char abyIEs[WLAN_BEACON_FR_MAXLEN+WLAN_BEACON_FR_MAXLEN];
 116        // store ReqIEs set by OID_802_11_ASSOCIATION_INFORMATION
 117        unsigned long RequestIELength;
 118        unsigned char abyReqIEs[WLAN_BEACON_FR_MAXLEN];
 119} SAssocInfo, *PSAssocInfo;
 120//---
 121
 122/*
 123  typedef enum tagWMAC_AUTHENTICATION_MODE {
 124  WMAC_AUTH_OPEN,
 125  WMAC_AUTH_SHAREKEY,
 126  WMAC_AUTH_AUTO,
 127  WMAC_AUTH_WPA,
 128  WMAC_AUTH_WPAPSK,
 129  WMAC_AUTH_WPANONE,
 130  WMAC_AUTH_WPA2,
 131  WMAC_AUTH_WPA2PSK,
 132  WMAC_AUTH_MAX       // Not a real mode, defined as upper bound
 133
 134  } WMAC_AUTHENTICATION_MODE, *PWMAC_AUTHENTICATION_MODE;
 135*/
 136
 137// Pre-configured Mode (from XP)
 138/*
 139  typedef enum tagWMAC_CONFIG_MODE {
 140  WMAC_CONFIG_ESS_STA,
 141  WMAC_CONFIG_IBSS_STA,
 142  WMAC_CONFIG_AUTO,
 143  WMAC_CONFIG_AP
 144
 145  } WMAC_CONFIG_MODE, *PWMAC_CONFIG_MODE;
 146*/
 147
 148typedef enum tagWMAC_SCAN_TYPE {
 149        WMAC_SCAN_ACTIVE,
 150        WMAC_SCAN_PASSIVE,
 151        WMAC_SCAN_HYBRID
 152} WMAC_SCAN_TYPE, *PWMAC_SCAN_TYPE;
 153
 154typedef enum tagWMAC_SCAN_STATE {
 155        WMAC_NO_SCANNING,
 156        WMAC_IS_SCANNING,
 157        WMAC_IS_PROBEPENDING
 158} WMAC_SCAN_STATE, *PWMAC_SCAN_STATE;
 159
 160// Notes:
 161// Basic Service Set state explained as following:
 162// WMAC_STATE_IDLE          : no BSS is selected (Adhoc or Infra)
 163// WMAC_STATE_STARTED       : no BSS is selected, start own IBSS (Adhoc only)
 164// WMAC_STATE_JOINTED       : BSS is selected and synchronized (Adhoc or Infra)
 165// WMAC_STATE_AUTHPENDING   : Authentication pending (Infra)
 166// WMAC_STATE_AUTH          : Authenticated (Infra)
 167// WMAC_STATE_ASSOCPENDING  : Association pending (Infra)
 168// WMAC_STATE_ASSOC         : Associated (Infra)
 169
 170typedef enum tagWMAC_BSS_STATE {
 171        WMAC_STATE_IDLE,
 172        WMAC_STATE_STARTED,
 173        WMAC_STATE_JOINTED,
 174        WMAC_STATE_AUTHPENDING,
 175        WMAC_STATE_AUTH,
 176        WMAC_STATE_ASSOCPENDING,
 177        WMAC_STATE_ASSOC
 178} WMAC_BSS_STATE, *PWMAC_BSS_STATE;
 179
 180// WMAC selected running mode
 181typedef enum tagWMAC_CURRENT_MODE {
 182        WMAC_MODE_STANDBY,
 183        WMAC_MODE_ESS_STA,
 184        WMAC_MODE_IBSS_STA,
 185        WMAC_MODE_ESS_AP
 186} WMAC_CURRENT_MODE, *PWMAC_CURRENT_MODE;
 187
 188/*
 189  typedef enum tagWMAC_POWER_MODE {
 190  WMAC_POWER_CAM,
 191  WMAC_POWER_FAST,
 192  WMAC_POWER_MAX
 193
 194  } WMAC_POWER_MODE, *PWMAC_POWER_MODE;
 195*/
 196
 197// Tx Management Packet descriptor
 198typedef struct tagSTxMgmtPacket {
 199        PUWLAN_80211HDR     p80211Header;
 200        unsigned int cbMPDULen;
 201        unsigned int cbPayloadLen;
 202} STxMgmtPacket, *PSTxMgmtPacket;
 203
 204// Rx Management Packet descriptor
 205typedef struct tagSRxMgmtPacket {
 206        PUWLAN_80211HDR     p80211Header;
 207        QWORD               qwLocalTSF;
 208        unsigned int cbMPDULen;
 209        unsigned int cbPayloadLen;
 210        unsigned int uRSSI;
 211        unsigned char bySQ;
 212        unsigned char byRxRate;
 213        unsigned char byRxChannel;
 214} SRxMgmtPacket, *PSRxMgmtPacket;
 215
 216typedef struct tagSMgmtObject
 217{
 218        void *pAdapter;
 219        // MAC address
 220        unsigned char abyMACAddr[WLAN_ADDR_LEN];
 221
 222        // Configuration Mode
 223        WMAC_CONFIG_MODE        eConfigMode; // MAC pre-configed mode
 224        CARD_PHY_TYPE           eCurrentPHYMode;
 225        CARD_PHY_TYPE           eConfigPHYMode;
 226
 227        // Operation state variables
 228        WMAC_CURRENT_MODE       eCurrMode;   // MAC current connection mode
 229        WMAC_BSS_STATE          eCurrState;  // MAC current BSS state
 230
 231        PKnownBSS               pCurrBSS;
 232        unsigned char byCSSGK;
 233        unsigned char byCSSPK;
 234
 235//    unsigned char abyNewSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN];
 236//    unsigned char abyNewExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN];
 237
 238        // Current state vars
 239        unsigned int    uCurrChannel;
 240        unsigned char abyCurrSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1];
 241        unsigned char abyCurrExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1];
 242        unsigned char abyCurrSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1];
 243        unsigned char abyCurrBSSID[WLAN_BSSID_LEN];
 244        unsigned short wCurrCapInfo;
 245        unsigned short wCurrAID;
 246        unsigned short wCurrATIMWindow;
 247        unsigned short wCurrBeaconPeriod;
 248        bool bIsDS;
 249        unsigned char byERPContext;
 250
 251        CMD_STATE               eCommandState;
 252        unsigned int    uScanChannel;
 253
 254        // Desire joining BSS vars
 255        unsigned char abyDesireSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1];
 256        unsigned char abyDesireBSSID[WLAN_BSSID_LEN];
 257
 258        // Adhoc or AP configuration vars
 259        //unsigned char abyAdHocSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1];
 260        unsigned short wIBSSBeaconPeriod;
 261        unsigned short wIBSSATIMWindow;
 262        unsigned int    uIBSSChannel;
 263        unsigned char abyIBSSSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1];
 264        unsigned char byAPBBType;
 265        unsigned char abyWPAIE[MAX_WPA_IE_LEN];
 266        unsigned short wWPAIELen;
 267
 268        unsigned int    uAssocCount;
 269        bool bMoreData;
 270
 271        // Scan state vars
 272        WMAC_SCAN_STATE         eScanState;
 273        WMAC_SCAN_TYPE          eScanType;
 274        unsigned int    uScanStartCh;
 275        unsigned int    uScanEndCh;
 276        unsigned short wScanSteps;
 277        unsigned int    uScanBSSType;
 278        // Desire scanning vars
 279        unsigned char abyScanSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1];
 280        unsigned char abyScanBSSID[WLAN_BSSID_LEN];
 281
 282        // Privacy
 283        WMAC_AUTHENTICATION_MODE eAuthenMode;
 284        WMAC_ENCRYPTION_MODE    eEncryptionMode;
 285        bool bShareKeyAlgorithm;
 286        unsigned char abyChallenge[WLAN_CHALLENGE_LEN];
 287        bool bPrivacyInvoked;
 288
 289        // Received beacon state vars
 290        bool bInTIM;
 291        bool bMulticastTIM;
 292        unsigned char byDTIMCount;
 293        unsigned char byDTIMPeriod;
 294
 295        // Power saving state vars
 296        WMAC_POWER_MODE         ePSMode;
 297        unsigned short wListenInterval;
 298        unsigned short wCountToWakeUp;
 299        bool bInTIMWake;
 300        unsigned char *pbyPSPacketPool;
 301        unsigned char byPSPacketPool[sizeof(STxMgmtPacket) + WLAN_NULLDATA_FR_MAXLEN];
 302        bool bRxBeaconInTBTTWake;
 303        unsigned char abyPSTxMap[MAX_NODE_NUM + 1];
 304
 305        // management command related
 306        unsigned int    uCmdBusy;
 307        unsigned int    uCmdHostAPBusy;
 308
 309        // management packet pool
 310        unsigned char *pbyMgmtPacketPool;
 311        unsigned char byMgmtPacketPool[sizeof(STxMgmtPacket) + WLAN_A3FR_MAXLEN];
 312
 313        // One second callback timer
 314        struct timer_list           sTimerSecondCallback;
 315
 316        // Temporarily Rx Mgmt Packet Descriptor
 317        SRxMgmtPacket           sRxPacket;
 318
 319        // link list of known bss's (scan results)
 320        KnownBSS                sBSSList[MAX_BSS_NUM];
 321
 322        // table list of known node
 323        // sNodeDBList[0] is reserved for AP under Infra mode
 324        // sNodeDBList[0] is reserved for Multicast under adhoc/AP mode
 325        KnownNodeDB             sNodeDBTable[MAX_NODE_NUM + 1];
 326
 327        // WPA2 PMKID Cache
 328        SPMKIDCache             gsPMKIDCache;
 329        bool bRoaming;
 330
 331        // rate fall back vars
 332
 333        // associate info
 334        SAssocInfo              sAssocInfo;
 335
 336        // for 802.11h
 337        bool b11hEnable;
 338        bool bSwitchChannel;
 339        unsigned char byNewChannel;
 340        PWLAN_IE_MEASURE_REP    pCurrMeasureEIDRep;
 341        unsigned int    uLengthOfRepEIDs;
 342        unsigned char abyCurrentMSRReq[sizeof(STxMgmtPacket) + WLAN_A3FR_MAXLEN];
 343        unsigned char abyCurrentMSRRep[sizeof(STxMgmtPacket) + WLAN_A3FR_MAXLEN];
 344        unsigned char abyIECountry[WLAN_A3FR_MAXLEN];
 345        unsigned char abyIBSSDFSOwner[6];
 346        unsigned char byIBSSDFSRecovery;
 347
 348        struct sk_buff  skb;
 349} SMgmtObject, *PSMgmtObject;
 350
 351/*---------------------  Export Macros ------------------------------*/
 352
 353/*---------------------  Export Functions  --------------------------*/
 354
 355void
 356vMgrObjectInit(
 357        void *hDeviceContext
 358);
 359
 360void
 361vMgrTimerInit(
 362        void *hDeviceContext
 363);
 364
 365void
 366vMgrObjectReset(
 367        void *hDeviceContext
 368);
 369
 370void
 371vMgrAssocBeginSta(
 372        void *hDeviceContext,
 373        PSMgmtObject pMgmt,
 374        PCMD_STATUS pStatus
 375);
 376
 377void
 378vMgrReAssocBeginSta(
 379        void *hDeviceContext,
 380        PSMgmtObject pMgmt,
 381        PCMD_STATUS pStatus
 382);
 383
 384void
 385vMgrDisassocBeginSta(
 386        void *hDeviceContext,
 387        PSMgmtObject pMgmt,
 388        unsigned char *abyDestAddress,
 389        unsigned short wReason,
 390        PCMD_STATUS pStatus
 391);
 392
 393void
 394vMgrAuthenBeginSta(
 395        void *hDeviceContext,
 396        PSMgmtObject pMgmt,
 397        PCMD_STATUS pStatus
 398);
 399
 400void
 401vMgrCreateOwnIBSS(
 402        void *hDeviceContext,
 403        PCMD_STATUS pStatus
 404);
 405
 406void
 407vMgrJoinBSSBegin(
 408        void *hDeviceContext,
 409        PCMD_STATUS pStatus
 410);
 411
 412void
 413vMgrRxManagePacket(
 414        void *hDeviceContext,
 415        PSMgmtObject pMgmt,
 416        PSRxMgmtPacket pRxPacket
 417);
 418
 419/*
 420  void
 421  vMgrScanBegin(
 422  void *hDeviceContext,
 423  PCMD_STATUS pStatus
 424);
 425*/
 426
 427void
 428vMgrDeAuthenBeginSta(
 429        void *hDeviceContext,
 430        PSMgmtObject  pMgmt,
 431        unsigned char *abyDestAddress,
 432        unsigned short wReason,
 433        PCMD_STATUS pStatus
 434);
 435
 436bool
 437bMgrPrepareBeaconToSend(
 438        void *hDeviceContext,
 439        PSMgmtObject pMgmt
 440);
 441
 442bool
 443bAdd_PMKID_Candidate(
 444        void *hDeviceContext,
 445        unsigned char *pbyBSSID,
 446        PSRSNCapObject psRSNCapObj
 447);
 448
 449void
 450vFlush_PMKID_Candidate(
 451        void *hDeviceContext
 452);
 453
 454#endif // __WMGR_H__
 455