linux/drivers/staging/vt6656/bssdb.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: bssdb.h
  21 *
  22 * Purpose: Handles the Basic Service Set & Node Database functions
  23 *
  24 * Author: Lyndon Chen
  25 *
  26 * Date: July 16, 2002
  27 *
  28 */
  29
  30#ifndef __BSSDB_H__
  31#define __BSSDB_H__
  32
  33#include <linux/skbuff.h>
  34#include "80211hdr.h"
  35#include "80211mgr.h"
  36#include "card.h"
  37#include "mib.h"
  38
  39#define MAX_NODE_NUM             64
  40#define MAX_BSS_NUM              42
  41#define LOST_BEACON_COUNT        10   /* 10 sec, XP defined */
  42#define MAX_PS_TX_BUF            32   // sta max power saving tx buf
  43#define ADHOC_LOST_BEACON_COUNT  30   // 30 sec, beacon lost for adhoc only
  44#define MAX_INACTIVE_COUNT       300  // 300 sec, inactive STA node refresh
  45
  46#define USE_PROTECT_PERIOD       10   // 10 sec, Use protect mode check period
  47#define ERP_RECOVER_COUNT        30   // 30 sec, ERP support callback check
  48#define BSS_CLEAR_COUNT           1
  49
  50#define RSSI_STAT_COUNT          10
  51#define MAX_CHECK_RSSI_COUNT     8
  52
  53// STA dwflags
  54#define WLAN_STA_AUTH            BIT0
  55#define WLAN_STA_ASSOC           BIT1
  56#define WLAN_STA_PS              BIT2
  57#define WLAN_STA_TIM             BIT3
  58// permanent; do not remove entry on expiration
  59#define WLAN_STA_PERM            BIT4
  60// If 802.1X is used, this flag is
  61// controlling whether STA is authorized to
  62// send and receive non-IEEE 802.1X frames
  63#define WLAN_STA_AUTHORIZED      BIT5
  64
  65#define MAX_WPA_IE_LEN      64
  66
  67//
  68// IEEE 802.11 Structures and definitions
  69//
  70
  71typedef struct tagSERPObject {
  72    bool    bERPExist;
  73    u8    byERP;
  74} ERPObject, *PERPObject;
  75
  76typedef struct tagSRSNCapObject {
  77    bool    bRSNCapExist;
  78    u16    wRSNCap;
  79} SRSNCapObject, *PSRSNCapObject;
  80
  81// BSS info(AP)
  82typedef struct tagKnownBSS {
  83    // BSS info
  84    bool            bActive;
  85    u8            abyBSSID[WLAN_BSSID_LEN];
  86    unsigned int            uChannel;
  87    u8            abySuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1];
  88    u8            abyExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1];
  89    unsigned int            uRSSI;
  90    u8            bySQ;
  91    u16            wBeaconInterval;
  92    u16            wCapInfo;
  93    u8            abySSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1];
  94    u8            byRxRate;
  95
  96//    u16            wATIMWindow;
  97    u8            byRSSIStatCnt;
  98    signed long            ldBmMAX;
  99    signed long            ldBmAverage[RSSI_STAT_COUNT];
 100    signed long            ldBmAverRange;
 101    //For any BSSID selection improvment
 102    bool            bSelected;
 103
 104    //++ WPA informations
 105    bool            bWPAValid;
 106    u8            byGKType;
 107    u8            abyPKType[4];
 108    u16            wPKCount;
 109    u8            abyAuthType[4];
 110    u16            wAuthCount;
 111    u8            byDefaultK_as_PK;
 112    u8            byReplayIdx;
 113    //--
 114
 115    //++ WPA2 informations
 116    bool            bWPA2Valid;
 117    u8            byCSSGK;
 118    u16            wCSSPKCount;
 119    u8            abyCSSPK[4];
 120    u16            wAKMSSAuthCount;
 121    u8            abyAKMSSAuthType[4];
 122
 123    //++  wpactl
 124    u8            byWPAIE[MAX_WPA_IE_LEN];
 125    u8            byRSNIE[MAX_WPA_IE_LEN];
 126    u16            wWPALen;
 127    u16            wRSNLen;
 128
 129    // Clear count
 130    unsigned int            uClearCount;
 131//    u8            abyIEs[WLAN_BEACON_FR_MAXLEN];
 132    unsigned int            uIELength;
 133        u64 qwBSSTimestamp;
 134        u64 qwLocalTSF;/* local TSF timer */
 135
 136    CARD_PHY_TYPE   eNetworkTypeInUse;
 137
 138    ERPObject       sERP;
 139    SRSNCapObject   sRSNCapObj;
 140    u8            abyIEs[1024];   // don't move this field !!
 141
 142} __attribute__ ((__packed__))
 143KnownBSS , *PKnownBSS;
 144
 145typedef enum tagNODE_STATE {
 146    NODE_FREE,
 147    NODE_AGED,
 148    NODE_KNOWN,
 149    NODE_AUTH,
 150    NODE_ASSOC
 151} NODE_STATE, *PNODE_STATE;
 152
 153// STA node info
 154typedef struct tagKnownNodeDB {
 155    // STA info
 156    bool            bActive;
 157    u8            abyMACAddr[WLAN_ADDR_LEN];
 158    u8            abyCurrSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN];
 159    u8            abyCurrExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN];
 160    u16            wTxDataRate;
 161    bool            bShortPreamble;
 162    bool            bERPExist;
 163    bool            bShortSlotTime;
 164    unsigned int            uInActiveCount;
 165    u16            wMaxBasicRate;     //Get from byTopOFDMBasicRate or byTopCCKBasicRate which depends on packetTyp.
 166    u16            wMaxSuppRate;      //Records the highest supported rate getting from SuppRates IE and ExtSuppRates IE in Beacon.
 167    u16            wSuppRate;
 168    u8            byTopOFDMBasicRate;//Records the highest basic rate in OFDM mode
 169    u8            byTopCCKBasicRate; //Records the highest basic rate in CCK mode
 170
 171    // For AP mode
 172    struct sk_buff_head sTxPSQueue;
 173    u16            wCapInfo;
 174    u16            wListenInterval;
 175    u16            wAID;
 176    NODE_STATE      eNodeState;
 177    bool            bPSEnable;
 178    bool            bRxPSPoll;
 179    u8            byAuthSequence;
 180    unsigned long           ulLastRxJiffer;
 181    u8            bySuppRate;
 182    u32           dwFlags;
 183    u16            wEnQueueCnt;
 184
 185    bool            bOnFly;
 186    unsigned long long       KeyRSC;
 187    u8            byKeyIndex;
 188    u32           dwKeyIndex;
 189    u8            byCipherSuite;
 190    u32           dwTSC47_16;
 191    u16            wTSC15_0;
 192    unsigned int            uWepKeyLength;
 193    u8            abyWepKey[WLAN_WEPMAX_KEYLEN];
 194    //
 195    // Auto rate fallback vars
 196    bool            bIsInFallback;
 197    unsigned int            uAverageRSSI;
 198    unsigned int            uRateRecoveryTimeout;
 199    unsigned int            uRatePollTimeout;
 200    unsigned int            uTxFailures;
 201    unsigned int            uTxAttempts;
 202
 203    unsigned int            uTxRetry;
 204    unsigned int            uFailureRatio;
 205    unsigned int            uRetryRatio;
 206    unsigned int            uTxOk[MAX_RATE+1];
 207    unsigned int            uTxFail[MAX_RATE+1];
 208    unsigned int            uTimeCount;
 209
 210} KnownNodeDB, *PKnownNodeDB;
 211
 212PKnownBSS BSSpSearchBSSList(struct vnt_private *, u8 *pbyDesireBSSID,
 213        u8 *pbyDesireSSID, CARD_PHY_TYPE ePhyType);
 214
 215PKnownBSS BSSpAddrIsInBSSList(struct vnt_private *, u8 *abyBSSID,
 216        PWLAN_IE_SSID pSSID);
 217
 218void BSSvClearBSSList(struct vnt_private *, int bKeepCurrBSSID);
 219
 220int BSSbInsertToBSSList(struct vnt_private *,
 221                        u8 *abyBSSIDAddr,
 222                        u64 qwTimestamp,
 223                        u16 wBeaconInterval,
 224                        u16 wCapInfo,
 225                        u8 byCurrChannel,
 226                        PWLAN_IE_SSID pSSID,
 227                        PWLAN_IE_SUPP_RATES pSuppRates,
 228                        PWLAN_IE_SUPP_RATES pExtSuppRates,
 229                        PERPObject psERP,
 230                        PWLAN_IE_RSN pRSN,
 231                        PWLAN_IE_RSN_EXT pRSNWPA,
 232                        PWLAN_IE_COUNTRY pIE_Country,
 233                        PWLAN_IE_QUIET pIE_Quiet,
 234                        u32 uIELength,
 235                        u8 *pbyIEs,
 236                        void *pRxPacketContext);
 237
 238int BSSbUpdateToBSSList(struct vnt_private *,
 239                        u64 qwTimestamp,
 240                        u16 wBeaconInterval,
 241                        u16 wCapInfo,
 242                        u8 byCurrChannel,
 243                        int bChannelHit,
 244                        PWLAN_IE_SSID pSSID,
 245                        PWLAN_IE_SUPP_RATES pSuppRates,
 246                        PWLAN_IE_SUPP_RATES pExtSuppRates,
 247                        PERPObject psERP,
 248                        PWLAN_IE_RSN pRSN,
 249                        PWLAN_IE_RSN_EXT pRSNWPA,
 250                        PWLAN_IE_COUNTRY pIE_Country,
 251                        PWLAN_IE_QUIET pIE_Quiet,
 252                        PKnownBSS pBSSList,
 253                        u32 uIELength,
 254                        u8 *pbyIEs,
 255                        void *pRxPacketContext);
 256
 257int BSSbIsSTAInNodeDB(struct vnt_private *, u8 * abyDstAddr,
 258        u32 *puNodeIndex);
 259
 260void BSSvCreateOneNode(struct vnt_private *, u32 *puNodeIndex);
 261
 262void BSSvUpdateAPNode(struct vnt_private *, u16 *pwCapInfo,
 263        PWLAN_IE_SUPP_RATES pItemRates, PWLAN_IE_SUPP_RATES pExtSuppRates);
 264
 265void BSSvSecondCallBack(struct vnt_private *);
 266
 267void BSSvUpdateNodeTxCounter(struct vnt_private *, PSStatCounter pStatistic,
 268        u8 byTSR, u8 byPktNO);
 269
 270void BSSvRemoveOneNode(struct vnt_private *, u32 uNodeIndex);
 271
 272void BSSvAddMulticastNode(struct vnt_private *);
 273
 274void BSSvClearNodeDBTable(struct vnt_private *, u32 uStartIndex);
 275
 276void BSSvClearAnyBSSJoinRecord(struct vnt_private *);
 277
 278#endif /* __BSSDB_H__ */
 279